DSH 派发台(dsh-dispatch):在 Harness 里派发并监视本机 ZCode 无头任务

前言

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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye