Agent 管理(dsh-preset-dispatch)
为 DeepSeek Harness 提供的一个插件:把角色预设编辑与子代理派遣授权合并到一个页面、一个弹窗、一次保存里。
A DeepSeek Harness plugin that unifies agent-preset editing and subagent-dispatch authorization in one place.
在 DSH 里,预设(角色)由原生机制管理,而"谁能派遣、能用哪些模型、用多大强度"是另一套设置。两者分散在不同位置,改一个角色的职责与它的派遣策略要来回切换,且缺少服务端约束——本插件把它们合并,并把授权边界做在服务端。
界面

卡片按原生预设的 order 排序(与 DSH 原生预设列表同一规则);页脚显示版本与派遣摘要,↑ / ↓ 调整顺序,「调用记录」查看派遣历史。

点卡片打开一个弹窗:上半是角色(稳定 ID、名称、职责说明、角色提示词、工具权限模板),下半是子代理派遣设置。

模型范围可选"跟随授权池"或"指定模型";未在 DSH 全局授权池中的模型标注「需授权」,勾选时会被要求同时启用全局授权,避免在页面上绕过授权。
目录
它解决什么问题
| 原本 | 本插件 |
|---|---|
| 角色提示词、工具模板在一处;派遣开关、模型范围在另一处 | 一个弹窗同时承载"预设设置"与"子代理派遣设置",一次保存 |
| 页面只做前端隐藏,越权请求仍可能生效 | 服务端强制所有权:只有本插件管理的预设可被写入,其他预设完全只读 |
| 保存失败时"看起来什么都没发生" | 分项结果:哪一部分已落盘、哪一部分待重试,逐项可见可重试 |
| 派遣期间撤权后,已发起的子代理仍会启动 | 启动前复核:创建子代理前再次校验授权,撤权即拒绝并释放已创建的子代理 |
| 派遣历史只在内存里,重启即丢 | 持久化元数据(最近 50 条),重启后仍在;中断的派遣标记为已中断 |
| 模型目录每次读取都要问提供方 | 目录缓存(含并发合并与故障保留),但授权永不走缓存 |
主要特性
- 统一保存协议:所有写入走一个端点,服务端先做完整预校验(所有权、目标一致性、修订号、授权池变化),再落盘;结果按"分项"返回,配合操作标识保证重试幂等。
- 所有权边界:本插件只管理它自己创建的预设。原生内置预设与其他插件的预设在本页完全只读,且该限制由服务端执行,不依赖界面。
- 生命周期安全:删除预设时先让其派遣失效再删定义;同 ID 重建不会继承旧授权;复制出的预设拥有独立身份与独立策略。
- 部分失败可恢复:保存被中断或部分失败时,草稿会保留(含刷新页面),并在弹窗内显示恢复面板——可"重新读取"或"仅提交未完成部分",扩权类改动必须逐项确认。
- 派遣历史:记录角色、提供方、模型、强度、时间、状态、策略快照与子会话 ID。不保存任务内容、回答或推理。
- 原生外观:复用 DSH 的主题与控件风格,浅色/深色一致;卡片→单弹窗,Esc 关闭、Tab 在弹窗内循环。
- 零运行时依赖:纯 ESM,只从 Harness 解析它提供的包(
zod、存储域等),不额外安装任何东西。
受管角色
插件自带七个角色预设,可在页面上编辑(名称、职责说明、角色提示词、工具模板、派遣策略):
| 预设 ID | 名称 | 工具模板 | 默认派遣 |
|---|---|---|---|
planner |
规划架构 | 只读 | 6.1 Sol · high |
researcher |
研究检索 | 研究检索 | DeepSeek V4.1 Flash · high |
investigator |
根因调查 | 只读 | 6.1 Sol · high |
reviewer |
代码审查 | 只读 | 6.1 Sol · medium |
implementer |
实现开发 | 实现开发 | DeepSeek V4.1 Flash · high |
test-author |
测试编写 | 测试编写 | 6.1 Sol · high |
verifier |
测试验证 | 测试验证 | DeepSeek V4.1 Flash · high |
具体可用的模型取决于你实例的提供方与授权池,因此上表是默认值而非固定值。
安装
前提:DeepSeek Harness 运行时 0.2.0-rc.2(见 兼容性)。
# 1) 克隆仓库
git clone https://github.com/BigRagdollCat/DSH-Preset-Dispatch.git
# 2) 安装(把路径换成你克隆到的位置)
dsh plugin --profile web add ./DSH-Preset-Dispatch
# 3) 重启 dsh web —— 插件的 Host 代码只在进程重启时重新加载
安装后打开 DSH 设置,应能看到「Agent 管理」分区;卡片为原生风格网格。
若安装被兼容性闸门拒绝(incompatible-version),说明你的运行时版本与本插件声明的 peer 不一致,可按需放行:
dsh plugin allow-version
注意:仅切换插件开关不会重新加载 Host 代码(模块按 URL 缓存)。Host 侧改动一律需要重启
dsh web;只改客户端时刷新页面即可。
快速上手
- 打开页面:DSH 设置 →「Agent 管理」。
- 编辑一个角色:点卡片 → 弹窗内同时设置角色信息与派遣策略 → 保存。
- 「允许作为子代理派遣」打开后,该预设才能被父代理调用。
- 「模型范围」可选"跟随授权池"或"指定模型";指定时还要勾选"同时启用 DSH 全局模型授权",否则会被拒绝——这是有意为之,避免在页面上绕过全局授权。
- 调整顺序:卡片上的 ↑ / ↓ 直接生效,写入的是原生预设的
order字段,因此管理页与原生预设列表顺序一致。 - 查看派遣记录:页面顶部「调用记录」→ 最近 50 条元数据,可刷新。
授权与安全模型
这是本插件最需要理解的部分。授权分三层,互不等价:
- 目录可见性:你的实例里有哪些模型(来自提供方)。
- 全局授权池:DSH 允许子代理使用哪些模型(
subagent-model-selection-settings)。 - 每个预设的允许列表:本插件为某个角色单独勾选的范围。
最终能否派遣 = 三者交集,并且每次派遣在真正创建子代理之前会再复核一次。此外:
- 插件的 HTTP 路由只接受已认证的操作者请求(未认证返回 400),并校验回环地址、Host 与同源;安全不依赖"藏在界面后面"。
- 授权决策永不进入缓存:目录可以缓存,但"能不能用这个模型"每次实时读取。
- 只有本插件管理的预设可写。其他预设即使被手工放进请求,也会被服务端拒绝。
数据与隐私
| 数据 | 位置 | 内容 |
|---|---|---|
| 插件设置 | 设置命名空间 local-preset-dispatch |
派遣深度、允许的预设、每个预设的派遣策略 |
| 受管预设 | profile patch 的 agent-managed-presets 组 |
角色定义与原生 order |
| 派遣历史 | 存储域 preset_dispatch_history |
最近 50 条元数据:角色、提供方、模型、强度、时间、状态、策略快照、子会话 ID |
派遣历史不保存任务内容、回答或推理文本;无法通过 schema 校验的历史记录会被介质移开备份(backup-and-skip),而不是让整份历史不可读。
清理:删除对应存储域目录即可清空历史;历史是派生数据,删除不影响预设与策略。
兼容性
- 运行时:
@deepseek-ai/dsh>=0.2.0-rc.1 <0.3.0-0(peerDependencies)。已在 0.2.0-rc.2 上完成完整验收;其他 0.2.x 版本按同一契约推断,但未逐一实测。若被兼容性闸门拒绝(incompatible-version),可用dsh plugin allow-version放行。 - 形态:纯 ESM,零运行时依赖;
storage的domain形态为可选依赖,不可用时历史退化为内存并上报原因,其余功能不受影响。 - 平台:在 Windows + DSH Web 上完成验收;未在其他平台验证。
常见问题
为什么其他预设点不动? 那是设计:只有本插件创建的预设可编辑,其余完全只读,且由服务端强制。这样可以避免本插件替你改动其他插件或原生内置的行为。
我改了默认模型,为什么现有会话没变? 派遣设置只影响新会话,已有会话保持它启动时的版本。这是有意为之,避免中途改变正在运行的任务。
保存后提示"部分已保存"是什么意思? 一次保存可能包含多个部分(角色定义、派遣策略、全局设置)。已落盘的部分不会重复提交,未完成的部分可以只重试它们;若期间有人在别处改过同一项,会先显示差异再让你确认。
「调用记录」是空的? 三种可能:还没派遣过;历史存储域未挂载(弹窗会显示原因);或记录超过 50 条被淘汰。历史只保留元数据,重启后仍在。
升级插件后界面没变?
Host 改动需要重启 dsh web;仅客户端改动刷新页面即可。可用 node scripts/live-probe.mjs 判断运行实例是否已加载新代码。
开发与验证
零依赖,直接跑 node 即可(脚本不依赖 npm 安装):
node scripts/check.mjs # 语法检查 + 冻结哈希校验 + 冻结表完整性
node scripts/test.mjs # 全部单元/集成测试(单进程,不派生子进程)
node scripts/pack-check.mjs # 对真实 npm pack 结果断言(必需文件/排除项/无残留)
node scripts/storage-contract-check.mjs # 用真实包验证存储域声明与 schema 契约
node scripts/live-probe.mjs # 运行实例是否已加载本版本代码
四道门禁都验证过失败路径(移除必需文件或删除冻结表行会返回非零),不是"永远通过"的检查。
维护说明与冻结哈希表见 MAINTENANCE.md;需求、设计、升级与回退、验收证据见 docs/。
许可
MIT © 2026 BigRagdollCat(发布前请把 LICENSE 与本行中的 BigRagdollCat 替换为你的名字或 GitHub 用户名)
你可以自由使用、修改、再分发,只需保留版权与许可声明。
附:本插件对 Harness 的扩展点
供开发者参考(不影响普通使用):
- 设置页:
Agent 管理(客户端由本插件的client.js提供) - 工具:
preset_dispatch(按预设派遣子代理,支持显式指定提供方/模型/强度) - HTTP 路由:
/api/preset-dispatch/*(统一保存、状态查询、目录刷新、历史查询),仅接受已认证操作者请求 - Host 入口:稳定入口
entry.js;预设行由本插件自己的role-managed.js承载
No comments yet. Be the first to write one.