第 2 章 安装运行与 Profile 组装

2.1 获取 dsh

dsh 是 TypeScript 生态的项目,用 pnpm 管理:

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install

前置条件(Node.js、pnpm 版本等)见仓库 docs/development.zh.md 的 Setup 一节。学习教程不需要 API 密钥。

2.2 应用启动器:一切从 dsh CLI 开始

所有受支持的 Node 应用都从统一的 dsh CLI 与具名 profile 启动:

命令说明
dsh web(= --profile web)带 Web 浏览器界面的完整应用
dsh --profile headless无服务器的一次性运行器
dsh --profile sdkSDK JSON-RPC 服务器(TypeScript SDK 使用)
dsh --profile sdk-minimal最小显式 SDK 组合
dsh --profile acp仅用于自动化的 ACP(stdio)服务器

Python SDK 遵循相同架构:其运行时 wheel 打包了普通 dsh CLI,客户端默认以显式 Harness home 启动 dsh --profile sdk。

2.3 Profile 与组合包(Bundle)

运行中的 dsh 是一棵插件树,由启动时按序叠加的各层组合而成:

  • Profile(具名组装):存放在 Harness home($DSH_HOME)中。它列出自己叠放的组合包、存放树外插件,并保存用户自己的 cordis.patch.yml。web、headless、sdk、sdk-minimal、acp 作为模板随发行版交付。

  • 组合包(Bundle):Cordis 配置项及其挂载代码的分发格式。两者都在 package.json 中通过 dsh 字段声明:dsh.profile 列出组合包,dsh.bundle 指向 patch 文件。

组合包是分层叠加的:

组合包增加的内容
dsh-base共享第一层:模型适配器、工具、持久化、沙箱与审批策略、设置、凭据、遥测
dsh-web-app浏览器应用
dsh-headless无服务器一次性运行器
dsh-sdk-appSDK JSON-RPC 服务器
dsh-acp-appACP 服务器
dsh-sdk-minimal例外:完整显式 SDK 配置树,不应用 dsh-base

配置层叠顺序

各层依次应用在空条目列表之上:

  1. 按 profile 列出的顺序,逐个应用组合包;

  2. profile 自己的 cordis.patch.yml;

  3. home 级的那份 cordis.patch.yml;

  4. 任意 --patch overlay。

一条 patch 按 id 定位某个配置条目并替换其整个 config,或插入新条目。

热重载行为:自定义 profile 默认实时重载 patch;随附的 web profile 支持实时重载;headless、sdk、sdk-minimal、acp 只在启动时应用一次所有配置层——因为一次性/stdio 应用开始工作后再替换依赖会破坏生命周期。

查看你的配置树

dsh --profile web --dump-config

它打印出的任何条目,都可以由你自己的 patch 替换——这是理解"哪个插件在跑"的最直接手段。

2.4 Harness home 与桌面应用

  • $DSH_HOME 是 profile、会话数据等产品数据的家目录。

  • Electron 桌面应用持有保留的 $DSH_HOME/profiles/desktop npm 项目:每个签名发行版绑定一个确切的 dsh 版本并携带离线 seed,启动时用内置 pnpm 安装进可写 profile。CLI profile 与 Desktop 共享 $DSH_HOME 下的产品数据,但绝不共享可执行包、插件激活、lockfile 或 node_modules。

  • 桌面组合不开放 Web server 或 loopback 端口,RPC 走带版本的分帧字节管道,渲染进程经安全的 dsh-app:// 协议访问资源。

2.5 核心包地图

以下是向 Cordis 树贡献内容的部分核心包(详情见官方子系统页面):

包职责ctx 键
core/session仅追加的 SessionEvent 日志和内存存储ctx.sessions
core/system-prompt提示词片段与工具 schema 的组装ctx.systemPrompt
core/tools作用域化的工具注册表和带把关的执行流水线ctx.tools
core/agentAgent 接口、活跃 agent 注册表和 agent/* 事件ctx.agents
core/agent-loop实现该接口的默认驱动器ctx.agentLoop
core/scope按 agent 划分作用域的注册原语库无 ctx 键
llm/llm消息与流式词汇表、适配器 seamctx.llm
webhook/webhook已认证 delivery 的分派与 Workspace Session 创建ctx.webhookRuntime

2.6 学习者的第一条命令

对初学者最有用的一条命令:

dsh --profile web --dump-config

它会打印完整的插件配置树。看懂这棵树,就看懂了 dsh 是如何被"组装"出来的;而下一章开始的 Cordis 教程会教你读懂(并编写)这些配置项。


依据官方文档 Architecture → Profile 与组合包 整理。

DeepSeek Harness / 第 2 章 安装运行与 Profile 组装 0 字 0 行 cosolar
2026-09-17T10:12:13.819220736Z 2026-09-17T10:39:02.696709521Z