🎬 dsh-subagent-pro
DeepSeek Harness Web 扩展插件:实时子代理监控 + 角色路由委派 + Claude Code 风格
.dsh/agents/*.md角色注入。
English · 特性 · 安装 · 使用 · 角色定义 · 架构 · 开发 · FAQ
特性
- 实时子代理面板 — 监听
subagent/start与subagent/end事件,按父链归因到根会话;每根会话最多保留 200 条;浏览器每 1 秒轮询/api/dsh-subagent-pro/snapshot;状态点对齐官方 StateDot 规格(运行中 = 像素追逐,终态 = 实心 + 10% 同色光晕)。 - HUD 风格图标按钮 — 28×28 线性 SVG 图标,注入
conversation.input.leftslot;右上角 warn-yellow 角标显示运行中子代理数;与官方交互色板一致。 - 角色路由委派 — 注册
subagent_role工具,支持四层回退(call > role > default > inherit),persona 与 toolFilter 注入到SubagentStartRequest;foreground / one-shot 后台 / continuable 后台三种执行模式。 - LLM 路由自省工具 — 注册
subagent_providers工具,让主代理可主动查询当前llm服务暴露的 provider、model、reasoning-effort 列表(与设置面板的下拉同源),agent 在不确定用什么模型时不必硬编码。 - 默认模型兜底 — 配置
defaultProvider/defaultModel后,任何未显式指定agentOptions的子代理(包括内置subagent/subagent_fork工具)自动应用默认;不存在的 provider 静默回退到父模型。 - Claude Code 风格 agent md — 自动扫描
~/.dsh/agents/*.md(全局)与<cwd>/.dsh/agents/*.md(项目)目录;frontmatter 字段映射到 RoleTemplate;正文作为 persona 注入到子代理。 - 角色优先级 — project md > global md > settings.roles,三者并存时主代理指引列出全部,delegate 时按 role id(kebab-case 文件名)调用。
- 设置面板 UI —
settings.sectionslot 暴露Subagent Pro分组:默认委派 + settings 角色增删改;md 角色只读展示,标注project-md/global-md来源。 - 配置热更新 — settings.yaml / 设置面板的改动即时生效,无需重启;agent md 在 settings/change 时重新扫描。
- 零侵入 — 未配置任何角色与默认模型时与未安装本插件完全一致。
安装
dsh plugin --profile <name> add dsh-subagent-pro
本插件是单一 bundle entry(dsh-subagent-pro),自动挂载 host 半 + client 半,无需手写 cordis.patch.yml。
如需覆盖默认配置,按 id 覆盖主条目:
- id: dsh-subagent-pro
name: dsh-subagent-pro
config:
subagentProvider: spawn
toolName: subagent_role
enableRunInBackground: true
backgroundMode: one-shot
maxDepth: 3
applyDefaultRoute: true
使用
监控面板
插件装载后,会话输入区左侧出现 HUD 风格图标按钮:
- 静态显示:线性 SVG 子代理树状图标;
- 有 running 子代理时右上角显示橙色角标(数量);
- 点击打开 / 关闭浮层面板(默认桌面自动开,手机端
≤ 768px默认关); - 面板可拖动、可调高、可收起 / 关闭 / 隐藏行 / 清空已完成 / 打开子会话。
角色委派(settings 角色)
在 DSH 设置面板的 Subagent Pro 分组下:
- 填写
defaultProvider/defaultModel(可选),所有未显式指定的子代理应用该模型; - 点击「+ 新增角色」增加自定义角色,填写
displayName/description/persona/provider/model/tools; - 主代理会自动看到角色清单(系统提示注入),并委派:
subagent_role({ role: "code-reviewer", prompt: "审查 src/foo.ts" })
subagent_role({ role: "code-reviewer", model: "deepseek-chat", prompt: "..." })
角色委派(agent md 角色)
在 ~/.dsh/agents/ 或 <project>/.dsh/agents/ 写一个 md 文件(详见下一节);主代理会自动加载并把 persona 注入到子代理的 system prompt。
查询可用模型(subagent_providers)
主代理可随时调用 subagent_providers 查询当前 host llm 服务暴露的 provider / model / reasoning-effort 列表,无需重启或查看配置文件:
subagent_providers({ action: "list_providers" })
// -> { kind: "providers", providers: [{ id: "minimax-cn", name: "minimax-cn" }, ...] }
subagent_providers({ action: "list_models", provider: "opencode-go" })
// -> { kind: "models", provider: "opencode-go", models: [{ id: "deepseek-v4-flash", ... }] }
subagent_providers({ action: "list_reasoning_efforts", provider: "opencode-go", model: "deepseek-v4-flash" })
// -> { kind: "reasoning", efforts: [...], defaultEffort: "low" }
数据源与设置面板的下拉(/api/dsh-subagent-pro/llm/*)完全一致。如果 llm 服务不可用,工具返回空数组而不是抛错。
角色定义
settings.roles(UI 调试沙盒)
subagent-pro:
defaultProvider: opencode-go
defaultModel: minimax-m2.7
roles:
translator:
displayName: 翻译员
description: 中英互译技术文档
persona: 你是专业翻译...
provider: deepseek-official
model: deepseek-chat
toolFilter:
allow: [Read, Grep]
agent md(项目 / 全局)
<project>/.dsh/agents/code-reviewer.md:
---
name: 代码审查员
description: 审查代码质量、安全、可维护性与测试覆盖
tools: Read Grep Glob
model: sonnet
---
你是严谨的代码审查员。先给结论再给证据,区分阻塞项与建议项;逐条指出问题并给出可操作的修改建议,语气客观直接,不吹捧也不刻薄。
优先级:
<cwd>/.dsh/agents/<id>.md(项目级,最优先)~/.dsh/agents/<id>.md(全局级)settings.roles[<id>](UI 调试沙盒,可与 md 共存)
约束:
- 文件名(去掉
.md)即 role id,必须是 kebab-case; description必填;缺省时回退到文件名并发出 warning;model形如provider/model拆分 provider;仅 model 时 provider 继承;- frontmatter 解析失败时整文件降级为纯 persona,
displayName/description取文件名,warning 不阻断。
架构
详见 ARCHITECTURE.md。
开发
pnpm install
pnpm typecheck
pnpm test
pnpm build
pnpm verify:docs
FAQ
与旧 dsh-subagent-monitor 有什么区别?
- 触发开关从 sidebar 文字按钮改为 HUD 风格
conversation.input.left图标按钮,与官方交互色板一致; - 数据路由从
/api/subagent-monitor/snapshot改为/api/dsh-subagent-pro/snapshot(如需兼容旧监控脚本请同步更新); - 旧插件无 agent-md 与角色路由能力,本插件合并了三者。
与旧 dsh-plugin-subagent-director 有什么区别?
- 单 bundle entry,无需手写
cordis.patch.yml(旧插件拆 main + bridge 两个条目绕开 webServer 注入限制,本插件 host 半是单进程直接inject: webServer); - 角色来源从仅 settings 扩展为 settings + agent md(project > global 优先级);
- settings 命名空间从
subagent-director改为subagent-pro(旧用户请按 ARCHITECTURE §3 迁移)。
未配置任何角色时行为如何?
未配置任何角色与默认模型时与未安装本插件完全一致(零侵入)。
agent md 修改后需要重启吗?
需要在 settings 面板保存一次(任意字段),或者重启插件挂载的 DSH 会话;md 文件本身修改不会触发 host 重扫(避免 fs watcher 噪声)。
License
English
dsh-subagent-pro is a single-bundle DeepSeek Harness extension that merges:
- Live subagent run monitor (event-driven snapshot, drag/resizable floating panel, HUD-style icon button trigger)
- Role-based subagent routing (
subagent_roletool with 4-layer fallback, persona/toolFilter injection) - Claude Code style
.dsh/agents/*.mdpersona injection (project > global > settings priority)
Install: dsh plugin --profile <name> add dsh-subagent-pro. See the Chinese section above for the role md format, settings UI walkthrough, and FAQ.
License: MIT.
No comments yet. Be the first to write one.