dsh-delegation-workflow
协作式委派工作流插件:主规划 → 子执行 → 主审查。为 DeepSeek Harness 提供一个 delegate_with_model 工具,让主 agent 把计划中的一个步骤委派给子代理执行,并显式指定该子代理的运行模型与思考强度。
功能
- 新增工具
delegate_with_model,参数:
description — 委派任务的简短描述(3-5 词,用于展示)。
prompt — 自包含的子代理任务说明(子代理不共享父代理上下文)。
provider — 子代理的 LLM 模型后端,缺省回落 settings 默认值。
model — 子代理使用的模型 id,缺省回落 settings 默认值。
reasoning_effort — 子代理的推理强度,动态校验目标模型真实支持的档位。
run_in_background — 是否以后台任务运行(返回 job id,可用 job_output/job_kill 管理)。
- Web 端新增
/delegate-model 斜杠命令:先选模型、再选思考强度,写入 $DSH_HOME/settings.yaml 的 delegation-workflow: 段。
- 「通用设置」新增「子代理默认模型」条目,模型与思考强度分成两个选择器,模型条目显示提供商信息。
- 与框架内置
subagent 工具的区别:在委派边界上把调用方指定的 provider / model 写入子代理 AgentOptions,并在子代理发出首个请求前通过 installModelSelection 注入 reasoning_effort。
安装
前提:已安装 DeepSeek Harness(dsh 命令)。dsh plugin 命令底层转发给 pnpm,因此可直接从 GitHub 安装本仓库:
# 安装最新版
dsh plugin --profile web add github:Wh1stle05/dsh-delegation-workflow
# 或固定到某个版本 tag
dsh plugin --profile web add github:Wh1stle05/dsh-delegation-workflow#v0.2.1
# 本地开发(link 到工作副本,改完源码重启 dsh 即生效)
dsh plugin --profile web add link:/path/to/dsh-delegation-workflow
dsh plugin add 会把本包加进 profile 的 dsh.profile.bundles,本仓库自带的 cordis.patch.yml 作为 bundle 层自动生效,不需要再往 profile 的 cordis.patch.yml 里重复 insert(重复 insert 会在同一份 entry 列表里产生两个同名插件)。要改默认 provider/model/effort,在 profile 的 cordis.patch.yml 里用 id 定向覆盖:
- id: delegation-workflow
config:
subagentProvider: spawn
provider: commandcode-ubuntu1
model: deepseek/deepseek-v4-pro
reasoningEffort: high
toolName: delegate_with_model
插件 src/ 的改动需要重启 dsh 进程才会加载;cordis.patch.yml 的 config 可热重载。
兼容性
v0.2.1 起对齐 DSH 0.1.6-alpha.1 的接口(此前 v0.2.0 用的是 rc.x 一代 API,在新版上 import 阶段即失败):
- Host 半侧:
@deepseek-ai/dsh-settings 不再导出 installSettingsSection / settingsNamespace,改为 ctx.inject(["settings"], (s) => s.settings.installSection(ctx, ns, schema, entry, hooks))。
- Host 半侧:插件不再自建 connection RPC 通道。
connection.rpc.handle(channel, handler) 目前只能从能解析 webServer 的 owner 调用,插件侧会以 cannot get property "webServer" without inject 失败;因此默认值的读写改走平台自带的 client settings 通道(settingsScope → remote.settings),host 侧只保留 settings.installSection 注册 namespace。
- Client 半侧:
connection.api.sessions.models() → remote.session.modelCatalog()(需在 inject 里声明 remote.session);command.openPopup() → command.popupFor(actx).open();CommandContribution 的 label / description 必须是惰性函数,给字符串会让整个斜杠菜单取候选时抛错。
- 依赖声明:harness 包(
@deepseek-ai/dsh-*、schemastery)改为 peerDependencies,由 profile 解析到安装内的同一份实例;写成 dependencies 会从 npm 装上另一代副本,和 host 的包混用后 import 失败。
配置
cordis.patch.yml 中的插件条目:
- insert:
- id: delegation-workflow
name: dsh-delegation-workflow
config:
subagentProvider: spawn # 子代理执行后端(spawn / fork)
provider: opencode-go # 子代理的 LLM 模型后端
model: deepseek-v4-flash
reasoningEffort: high
toolName: delegate_with_model
provider / model / reasoningEffort 仅作为 settings namespace
delegation-workflow 的 composition base;可在 Web 端通过
/delegate-model 斜杠命令或「通用设置 → 子代理默认模型」修改,
修改会持久化到 $DSH_HOME/settings.yaml。
注意:subagentProvider 与 provider 是两个不同概念:
subagentProvider 是执行后端(transport),由 dsh-subagent-{spawn,fork}-in-process 注册,内置值为 spawn / fork;
provider 是** LLM 模型后端**(如 opencode-go / deepseek-official),通过 agentOptions.provider 注入。
二者不可混用,否则会报 no subagent provider registered for ...。
使用
主 agent 规划任务后,用 delegate_with_model 委派子代理执行,子代理返回后由主 agent 审查:
主 agent: todo_write 拆解计划
主 agent: delegate_with_model(步骤 1, model=..., reasoning_effort=..., run_in_background=false)
子代理: 执行并返回结果
主 agent: 对照计划审查,直到验收通过
详见 AGENTS.md 中的工作流规则。
许可
MIT