插件即服务
插件向上下文贡献服务,通过 ctx.<key> 寻址(如 ctx.tools、ctx.llm、ctx.sessions),而非导入具体实现。其他插件通过 key 找到服务,实现松耦合。
DSH 是一个将 AI 模型转化为可操作编程智能体的框架——模型可以读写文件、运行命令、委派工作并维护计划。
DeepSeek Harness(dsh)是由 DeepSeek AI 开发的开源 agent harness(智能体框架)。它不是一个简单的代码补全工具,而是一个完整的智能体运行时:模型可以读取和编辑工作区文件、运行命令、委派工作并维护计划。当操作在当前权限策略下需要审批时,Web UI 会先询问用户。
DSH 的核心设计理念是"一切皆插件"(Everything is a Plugin)。与传统的单体架构不同,DSH 的每一个组成部分——模型适配器、工具注册表、会话日志、Agent 循环、系统提示词组装、持久化层、沙箱和审批策略——都是一个 Cordis 插件。这意味着没有特权核心需要 patch:你只需在其它插件旁边挂载自己的插件来扩展 dsh,而所有注册都是可逆 effect,插件卸载时自动回退。
DSH 目前处于开发者预览阶段,正在快速迭代,未来将出现破坏兼容性的变更。它由 Cordis 框架驱动,Cordis 的设计详见论文《A Programming Paradigm for Spatiotemporal Composability》(时空可组合性的编程范式)。
Cordis 是 dsh 底层的插件框架:插件向共享上下文贡献服务、类型化事件和可逆 effect。
插件向上下文贡献服务,通过 ctx.<key> 寻址(如 ctx.tools、ctx.llm、ctx.sessions),而非导入具体实现。其他插件通过 key 找到服务,实现松耦合。
通过 inject 声明所需服务,框架确保依赖就绪后才加载你的插件。加载顺序由服务需求表达,而非手动编排启动序列。
服务通过 TypeScript 声明合并定义事件名,再以 emit / waterfall / parallel / serial 四种模式分发,分别用于观察、环绕、并行和串行。
提示词段落、工具 schema、适配器和监听器通过 ctx.effect() 或 ctx.on() 安装,重载和卸载时自动回退,无需手动 removeListener。
以下是构成 Cordis 树的核心包及其职责与上下文键。
追加式 SessionEvent 日志与内存存储
ctx.sessions
提示词段落与工具 schema 组装
ctx.systemPrompt
作用域工具注册表与受保护执行管线
ctx.tools
Agent 接口、活跃注册表与 agent/* 事件
ctx.agents
实现 Agent 接口的默认驱动器
ctx.agentLoop
每 Agent 的作用域注册原语
library(无 key)
消息与流词汇表及适配器 seam
ctx.llm
一个 step 是一次模型请求加上它调用的工具。一个 turn 是零或多个 step:在第一个输入被消费前打开,在不再有待处理时关闭。
turn/start
消费下一步输入和一个排队消息,组装提示词段落 + 工具 schema
agent/pre-step
重写或拒绝消费的消息 → 进入或关闭 turn(waterfall)
step/start
将进入的消息追加为 user/message,从日志派生模型历史
agent/request → llm/stream
模型请求 → 流式响应 → assistant/chunk* → assistant/message
tool/call* → tools/*
工具调用 → pre-execute → execute → post-execute → tool/result*
step/end
工具需要另一个请求,或新输入到达 → 消费 → 下一个 step
agent/turn-stopping
串行事件,无 next(),决定是否停止 turn
turn/end
turn 结束,所有事件已追加到持久会话日志
事件是扩展点,选择正确的域是大多数变更的第一个决策。事件分四种分发模式。
| 事件类型 | 分发模式 | 说明 |
|---|---|---|
| 会话事件 (session/*) | emit | 追加到日志的持久事实,通过 session/event 广播。当事实必须跨重载存活时使用。 |
| Agent 事件 (agent/*) | waterfall / serial | 携带活跃 Agent:inbox、step、status、request、validation、continuation。用于观察或拦截进行中的工作。 |
| 能力事件 (fs/*, tools/*, telemetry/*) | waterfall | 将策略和适配器挂载到 seam,无需导入循环。用于文件系统、工具执行和遥测的拦截。 |
| Turn 事件 (turn/*, step/*) | emit | durable 会话事件,记录 turn 和 step 的生命周期,确保操作可回放。 |
两种方式启动 DSH Web UI,默认地址 http://127.0.0.1:3080。
npx @deepseek-ai/dsh web安装 Node.js 后直接运行,启动 Web UI。
git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web适合开发者和贡献者,可以修改源码并提交 PR。
dsh --profile web --dump-config打印机器实际启动的插件树,任何行都可以用你自己的 patch 替换。
理解这些概念是使用和扩展 DSH 的基础。
附带配置层的 npm 包。在 package.json 的 dsh.bundle 字段声明 patch 文件,回答"这个包贡献什么"。
位于 $DSH_HOME/profiles/<name> 下、描述可启动组合的目录。声明 dsh.profile,回答"由哪些 bundles 按什么顺序组成"。
YAML 格式的 patch 条目数组,每个条目按 id 目标行并替换其整个 config,或插入新行。后应用的层按行胜出。
每个 profile 的第一层:模型适配器、工具、持久化、沙箱、审批策略、设置、凭证和遥测。dsh-web-app 和 dsh-headless 在其上添加应用层。
在 dsh-base 之上添加浏览器应用的组合包,提供完整的 Web UI 体验。
在 dsh-base 之上添加一次性运行器的组合包,无服务器,适合 CI/CD 场景。
DeepSeek Harness(DSH)是 DeepSeek AI 开源开发的 AI 编程智能体框架(agent harness),定位类似 Claude Code。区别在于 DSH 采用"一切皆插件"架构——模型适配器、工具注册表、会话日志、Agent 循环本身都是可替换的插件,没有特权核心需要 patch。
DSH 的所有组成部分——模型适配器、工具注册表、会话日志、Agent 循环、系统提示词组装、持久化、沙箱、审批策略——都是 Cordis 插件。你通过在其它插件旁边挂载自己的插件来扩展 dsh,而注册是可逆 effect,插件卸载时自动回退。
Cordis 是 DSH 底层的插件框架,其设计参见论文《A Programming Paradigm for Spatiotemporal Composability》。核心思想:插件向共享上下文贡献服务、类型化事件和可逆 effect;服务通过 ctx.<key> 寻址而非导入具体实现;加载顺序由服务依赖声明表达而非手动排序。
安装 Node.js 后执行 npx @deepseek-ai/dsh web,即可启动 Web UI(默认 http://127.0.0.1:3080)。也可从源码运行:git clone 仓库 → pnpm install → pnpm run build → pnpm dsh web。
Profile 是 DSH 中命名的可启动组合,存储在 Harness home 目录下,列出它堆叠的 bundles 并持有用户自己的 cordis.patch.yml。Bundle 是 Cordis 配置行及其挂载代码的分发格式——声明在 package.json 的 dsh.bundle 字段中。web 和 headless 作为模板随 dsh 发行。
DSH 有三组事件域:会话事件(session/event)是追加到日志的持久事实;Agent 事件(agent/*)携带活跃 Agent 实例;能力事件(fs/*、tools/*、telemetry/*)将策略和适配器挂载到 seam。事件分四种分发模式:emit(观察)、waterfall(环绕中间件)、parallel(并行)、serial(串行)。
DSH 目前处于开发者预览(developer preview)阶段,正在快速迭代。官方明确声明未来将出现破坏兼容性的变更。建议关注 GitHub Discussions 和版本更新。
可以在 GitHub 上搜索 dsh-plugin 话题找到社区插件。我们也整理了一个 DSH 插件收录合集页面,可以在本站 /dsh-hermes 浏览精选插件和开发指南。