前言¶
DSH 的插件模型中,普通会话通常继续使用官方 one-shot 语义:一次工具调用处理一次任务,多次调用之间不容易保留顶层变量、函数和对象。dsh-prime-agent 为选中 Prime preset 的会话提供另一个入口:只有一个模型可见工具 repl,唯一参数是 { code },执行一个持久 TypeScript REPL cell。上一个 cell 声明的普通变量、函数和对象,在下一个 cell 中可以直接使用;DSH 的其他工具不进入模型 schema,而是作为 tools、agents、jobs 绑定预加载进 cell。
这个插件由 yoke233 维护,GitHub 地址为 https://github.com/yoke233/dsh-prime-agent,目录页地址为 https://www.skillhub.cn/plugins/yoke233/dsh-prime-agent。
这是什么¶
dsh-prime-agent 是面向 DeepSeek Harness 的 RLM-first 控制面。它面向 DSH 的插件和会话模型,为选中 Prime preset 的会话提供一个持久的 TypeScript REPL 工具。
核心变化是:
- 模型可见工具收敛为
repl。 repl的唯一参数是{ code }。- 每次调用执行一个持久 TypeScript REPL cell。
- 上一 cell 声明的普通变量、函数和对象,下一 cell 可以直接使用。
- DSH 的其他工具不进入模型 schema,而是作为
tools、agents、jobs绑定预加载进 cell。 - 非 Prime 会话继续使用官方 one-shot 语义。
- 官方
code-runtimerow 原样保留,新增dsh-prime-agent/runtimehost row。
核心能力¶
持久 TypeScript REPL cell¶
Prime preset 会话中,模型只需要调用一个工具:
repl({ code: `...` })
每次调用都会执行一个持久 TypeScript REPL cell。上一 cell 声明的普通变量、函数和对象,在下一 cell 中仍然可以继续使用。
其他 DSH 工具进入 cell 预加载¶
DSH 的其他工具不直接进入模型 schema。插件把相关能力作为 tools、agents、jobs 绑定预加载进 cell。
已核实的能力包括:
agents.*:spawn、fork、list、send、interrupt。jobs.*:list、output、kill。- Profile 显式安装的 DSH Host MCP client 会把 server tools 注册进统一 catalog,repl 单元自动获得对应
tools.*绑定。
直接调用其他工具会被 guard 拒绝。这些能力应以 cell 内预加载绑定的形式出现。
本地组合能力¶
插件注册本地组合能力:
tools.apply_patch({ patch })
它用于处理相关的多 hunk、多文件变更。
官方持久 Terminal¶
Prime preset 挂载 DSH 官方持久 Terminal:
- POSIX 使用
Bash。 - Windows 使用
PowerShell。
工具结果呈现¶
工具结果配置 12KB best-effort spill 阈值。模型看到的是无类型外壳的 notebook 文本。
成功的非 undefined completion 会自动保留在 generation-local 单槽中,并可通过 $_ 访问。
持久任务文件¶
持久任务文件用于承载:
- 大型输入。
- 重要结果。
- 跨重启检查点。
Realm 是 live-only 的:abort、timeout、OOM 会 hard-kill Worker 并丢失 namespace。跨重启需要保留的状态,应由程序显式写入持久任务文件。
refine¶
refine 用于稳定路由与行为经验,具备:
- 证据化。
- 乐观并发。
- 事务历史。
- 安全回滚。
多 TUI 进程共享¶
多个 TUI 进程可以共享 Prime 持久状态,并同时运行不同 Session。
同一 Session 的 live Realm 同时只允许一个进程持有。owner 退出后,另一进程以空 namespace 接管。
安装与启用¶
插件以当前 dsh 进程权限运行。安装前应检查源码与许可证。已核实资料未给出具体许可证类型,package.json 的 files 列表中包含 LICENSE。
Web profile 安装¶
先做依赖安装和检查,再添加插件:
npm install
npm run check:all
dsh plugin --profile web add ./dsh-prime-agent https://github.com/yoke233/dsh-tool-monitor/archive/9b6aac3701560309ac4e3befcf646a1eca920e77.tar.gz
这一步会完成依赖安装、运行 check:all,并在 web profile 中添加本地 dsh-prime-agent 以及指定的 dsh-tool-monitor 归档。
TUI profile 安装¶
TUI 场景下,先执行 npm pack,再把生成的 $primePackage 传给 dsh plugin --profile tui add:
npm pack
dsh plugin --profile tui add $primePackage https://github.com/yoke233/dsh-tool-monitor/archive/9b6aac3701560309ac4e3befcf646a1eca920e77.tar.gz
安装后用配置转储核验组合结果:
dsh --profile tui --dump-config
确认组合结果中存在:
agent-presetsprime-code-runtimemonitor-jobstool-monitor- 官方
tool-subagent-report tui
然后运行:
dsh --profile tui
Headless 运行¶
当前 DSH headless bundle 不会挂载 agent preset。因此 headless 场景需要同时安装仓库内的 prime-headless-shim,并在 headless profile 中启用 Prime preset。
已核实资料中后续完整命令不完整,这里不展开完整安装步骤。若需要 headless 运行,应使用隔离的 DSH_HOME,避免影响日常 profile。
典型用法¶
下面的示例展示同一个会话中的两次 repl 调用。第一次 cell 建立 lookup 和 review,第二次 cell 复用它们。
repl({ code: `
const lookup = new Map(records.map(item => [item.id, item]))
const review = async (id) => tools.review_item({ item: lookup.get(id) })
lookup.size
` })
下一次调用继续复用同一个持久 cell 状态:
repl({ code: `await review('a') // Map 和函数都还活着` })
使用 repl 时注意:
- 工具参数使用 TypeScript 对象字面量。
- 完整 cell 会在执行前解析。
- 语法失败不会执行其中任何代码或 tool call。
- 语法失败后应修正并重试。
- 不要对
tools.*返回值盲目再次JSON.parse。
状态与生命周期¶
| 状态层 | 用途 | 保留边界 |
|---|---|---|
| Realm live namespace | 普通顶层变量、函数、对象、Map 和索引 |
同一 Worker 内的 cell 间保留;hard kill 后丢失 |
| Latest completion | 最新非 undefined cell 结果,经 $_ 访问 |
下一个非 undefined completion 会替换;hard kill 或 generation 换代后丢失 |
| 持久任务文件 | 大型输入、重要结果与跨重启检查点 | 由文件系统承载,进程重启后仍可恢复 |
refine |
稳定路由与行为经验 | 证据化、乐观并发、事务历史和安全回滚 |
运行边界与注意¶
- Prime preset 会话只有一个模型可见工具
repl。 - 非 Prime 会话继续使用官方 one-shot 语义。
- 路由依赖可信
exec.agent.id。插件从共享realm-identity存储解析稳定的不透明 Realm id,并交给 host 侧ctx.primeRealmRuntime.run(...)。 - 缺少可信执行上下文或无法解析 Realm id 时明确失败,绝不降级。
- 直接调用其他工具会被 guard 拒绝。
- Prime preset 不挂载 DSH Plan Mode。
- Compaction 保持 DSH 默认策略。
- Host runtime 会监控启动它的直接父进程。Windows 父 shell 被强制终止,或 macOS/POSIX 子进程被重新托管时,插件会释放整个 Cordis tree、Realm Worker 与该进程持有的 Realm leases,随后退出。
- 它面向前台
dsh生命周期,不支持把宿主有意脱离父进程作为 daemon 运行。 - 已核实资料未提供星标数量和分类字段;具体许可证类型资料不足,只能确认
package.json的files列表包含LICENSE。
结尾¶
dsh-prime-agent 的价值在于把 DeepSeek Harness 的会话工具调用收拢到一个持久 TypeScript REPL cell 中:模型通过唯一的 repl 工具编写连续程序,复用顶层状态,调用预加载的 tools、agents 和 jobs,并把需要跨重启保留的内容写入持久任务文件。
目录页:https://www.skillhub.cn/plugins/yoke233/dsh-prime-agent
GitHub:https://github.com/yoke233/dsh-prime-agent