前言¶
DeepSeek Harness(DSH)自带的 subagent 跑的是 Harness 自己的 agent。如果你希望把具体工作交给本机 ZCode CLI 的无头进程——独立进程、独立额度、独立会话,并在 DSH 界面里统一查看输出、终止或续跑——就需要一条专门的派发与监视链路。
DSH 派发台(仓库 Shuffle-1992/dsh-dispatch,维护者 Shuffle-1992,社区分类为工作流)是面向上述需求的 DSH 插件:任务行出现在页面右下角的悬浮面板里,并配套单写者文件锁、用量台账与通道降级链;同时支持付费套餐与 ZCode Start Plan(活动赠送额度) 两种额度形态,后者通过托管官方 agent 走 app-server。
下面介绍它的定位、能力与安装配置要点。
这是什么¶
一句话:把 prompt、任务文件或目标描述派发给本机 ZCode(及 README 中提到的其他 CLI 引擎能力),在 DSH 内监视与管理这些 job,并通过 agent 工具 dispatch 与面板共用同一套动作实现。
与姊妹项目 dsh-connect-zcode 的取舍在 README 里写得很清楚:派发台语义是「独立 ZCode 进程 + ZCode 自己的工具 + 独立会话/额度」——要让 agent 用工具自主干活,优先派发台;若要在 DSH 里做交互式对话并复用 DSH 工具链,则用那边的 provider 通道。
核心功能¶
资料中列出的能力如下(未在 README 出现的细节不展开)。
| 能力 | 说明 |
|---|---|
| 派发 | 支持 build / edit / plan / yolo 四种模式 |
| 单写者互斥 | repo / memory 文件锁 + 进程内 FIFO:同锁任务串行,冲突排队不报错 |
| 实时监视 | 状态、耗时、上下文占用、退出码、锁持有者;可 tail 最近输出 |
| 续跑 / 重跑 | 同会话 --resume 重发原提示词,或在同一会话发新指令 |
| 通道与降级链 | 切换套餐通道 / 模型;额度耗尽或未开通时按降级链交接重跑 |
| 免费额度(Start Plan) | 通道形如 account:<family>-start-plan;与付费套餐复用面板、台账、暂停与降级流水线 |
| 用量聚合 | 本地台账 5 小时滚动 / 本周 / 今日,及套餐剩余额度(数据源不可用时标注 available:false) |
| 派发总开关 | 跨会话真值文件:false 时 runner、插件、桥接三处均不得派发 |
| agent 工具 | 注册 dispatch,与面板同一实现 |
插件本体在 monorepo 的 dispatch/ 子目录;Host 侧改动需重启 DSH,Client 侧(client.js)刷新页面即可。
安装与启用¶
本项目不发布 npm,安装须使用 GitHub 规格并带上 #path:dispatch(根目录无插件 package.json,省略子路径会得到占位包)。
先把 web 换成你的 profile 名(dsh plugin list 可查),装完后重启 DSH:
dsh plugin --profile web add "github:Shuffle-1992/dsh-dispatch#path:dispatch"
运行环境(来自 package.json):Node >=22.12.0,DSH >=0.2.0-rc.2 <0.3.0-0;README 注明在 DSH 桌面版 0.2.0-rc.2 上开发验证。
本地开发时可在 profile 的 dependencies 使用 link:<仓库>/dispatch,并在 bundles 中加入 dsh-dispatch;机器专有路径应写在 profile 的 cordis.patch.yml,不要写进插件仓库。
配置要点¶
runnerPath 与 workRoot 任一为空则不创建 dispatcher:面板走 demo 降级,agent 工具返回可读错误(刻意不静默猜路径)。
在 ~/.dsh/profiles/<profile>/cordis.patch.yml 中按 id 覆盖示例:
- id: dispatch
name: "dsh-dispatch"
config:
demo: false
maxConcurrent: 3
runnerPath: '<宿主项目>\scripts\collab\zcode-run.mjs'
ledgerPath: '<宿主项目>\collab\logs\dispatch-runs.jsonl'
workRoot: '<本插件目录>\.data'
switchPath: '<宿主项目>\collab\dispatch.switch.json'
| 字段 | 默认 | 说明 |
|---|---|---|
demo |
false |
UI 演示模式,不触达 dispatcher |
maxConcurrent |
3 |
同时运行的 run 上限 |
runnerPath |
'' |
runner 脚本绝对路径 |
ledgerPath |
'' |
台账 dispatch-runs.jsonl;留空跳过用量聚合 |
workRoot |
'' |
锁、状态、日志等工作根;留空落到插件 .data/ |
switchPath |
'' |
派发总开关文件;留空则开关不可写 |
凭据不保存在插件内,而是读取 ZCode 的 ~/.zcode/v2/config.json。若出现「身份验证失败 / 401」,README 指出可能与 OAuth 重登后 Key 只写入 credentials.json、未回写 config.json 有关;处理步骤与工具见仓库 dispatch/README.md 及 dsh-connect-zcode 的 scripts/sync-key-to-config.mjs。
典型用法¶
CLI 派发(独立 bin,与插件共用 core)¶
免费额度通道可用 --provider start-plan 或完整 account id:
zcd dispatch --kind prompt --prompt "只回复 OK" --provider start-plan
zcd dispatch --kind task --task <任务包> --provider account:bigmodel-start-plan --mode yolo
Start Plan 限制(README 摘要):不支持 --resume / --target / --memory-bench;官方 MCP 在托管进程内不可用;--cwd 需与 ledgerPath 同属宿主项目以便用量聚合。
agent 工具 dispatch¶
一个工具,通过 action 与面板操作对应:
dispatch | list | kill | dismiss | tail | quota | status | switch | channels | channel | retry | fallback
派发时使用 action=dispatch,kind=prompt|task|target 及对应内容字段;可选 model、provider、mode、timeoutMin、resume 等。README 要求:凡是「把任务交给 agent 去做」的诉求,能用派发台就优先 action=dispatch;仅当开关关闭、未配置 runner/workRoot 或用户明确要求由当前会话自己做时,才退回 DSH subagent,并说明原因。
适用场景与注意¶
适合谁:已在本机使用 ZCode CLI,希望在 DSH 会话里批量、可监视地把 coding 类任务交给 ZCode 无头进程,并需要锁、台账、通道降级与 Start Plan 免费额度同一套面板的同学。
安全与权限:插件以当前 DSH 进程的权限运行,会启动子进程、读写你配置的 workRoot、ledgerPath 与锁文件。安装前请阅读仓库源码与 MIT 许可证,确认路径与 runner 脚本来源可信。
生态说明:DSH 社区插件目录(如 SkillHub 上的 dsh-dispatch 页)为独立站点,与 DeepSeek / 幻方无官方从属关系;「一切皆插件」是 Harness 的产品思路,本文事实均来自上述 GitHub README 与包清单。
结尾¶
经过上面的步骤,你可以在 Harness 里安装 dsh-dispatch,配置宿主项目上的 runner 与工作目录,用悬浮面板和 dispatch 工具派发 ZCode 任务,并在额度与锁冲突场景下依赖台账与降级链做可预期的重试。
- 目录页:https://www.skillhub.cn/plugins/Shuffle-1992/dsh-dispatch
- 源码与完整文档:https://github.com/Shuffle-1992/dsh-dispatch