开发插件 - 扩展 DeepSeek Harness
在 DeepSeek Harness 里,扩展能力的方式不是改源码,而是把插件挂载到其他插件旁边。本节讲清楚 Cordis 插件的基本机制,以及常见能力该挂到哪个扩展点。
Cordis 插件基础
Cordis 是 dsh 底层的框架:插件向共享上下文贡献服务、类型化事件和可逆的副作用。
- 加载与卸载:Cordis 元框架只负责插件的加载与卸载以及依赖关系
- 服务:插件通过服务向其他插件提供能力
- 事件:插件通过类型化事件观察或拦截进行中的工作
- 可逆副作用:各项注册都是副作用,会在其插件卸载时撤销——所以不存在需要打补丁的特权内核
新行为的归属位置
新行为附加到已有文档记录的扩展点。常见目标与对应机制:
| 目标 | 机制 |
|---|---|
| 添加模型提供方 | 在 ctx.llm 上注册其适配器 |
| 添加面向模型的能力 | 在 ctx.tools 上注册;其 schema 加入提示词组装 |
| 让某个会话拥有不同的能力集合 | 组装一个 agent preset |
| 添加 shell 执行 | 注册 ctx.shell 后端 |
| 添加持久化终端执行 | 注册 ctx.terminals 后端 |
| 添加用户命令 | 在 ctx.commands 上注册 |
| 添加后台工作 | 在 ctx.jobs 上注册;job_* 工具负责收集或停止 |
| 添加文件系统访问或策略 | 注册 ctx.fs 提供方,或监听 fs/* 事件 |
| 限制所启动的进程 | 使用 ctx.sandbox 后端 |
| 拦截请求、工具或轮次 | 使用相应的 agent/* 或 tools/* 事件 |
| 添加模型可见上下文 | 调用 agent.inject() |
| 添加 UI 或编辑器集成 | 驱动 ctx.agents 并从 session/event 渲染 |
| 添加持久会话状态 | 扩展 SessionEventMap;从日志渲染和回放 |
事件就是扩展点
选对事件域是大多数改动的第一个决定:
- 会话事件:追加到日志并通过
session/event广播的持久事实;当某个事实必须在重新加载后仍然存在时使用 - Agent 事件(
agent/*):携带活跃Agent——inbox、步骤、状态、请求、验证、续跑;观察或拦截进行中的工作时使用 - 能力事件:无需导入循环即可向某个 seam(
fs/*、tools/*、telemetry/*)附加策略和适配器
发布你的插件
- 在
package.json中通过dsh字段声明 profile 与 bundle:dsh.profile列出一个 profile 的组合包,dsh.bundle指向一个组合包的 patch 文件 - 为你的插件仓库添加
dsh-plugin话题,便于被发现 - 欢迎通过 GitHub Discussions 交流与反馈