dsh-sub-agent-toggle
为 DeepSeek Harness 的 Claude Code 与 Codex 产品子智能体提供持久化 Web 开关。开关默认关闭,位于“设置 > 子智能体”,排序紧邻“Agent 预设”。组件只使用 Harness 的 --dsw-* 主题变量,因此自动适配浅色、深色和跟随系统模式。
组成
dsh-sub-agent-toggle:宿主级设置 namespace,并提供 Web Client 模块。dsh-sub-agent-toggle/preset:按设置动态挂载两个dsh-tool-subagentConsumer。bundle 默认将它挂在宿主根层,因此工具会作为全局工具供所有 Agent Preset 继承;只有自定义为按预设生效时,才将它放入指定的 Agent Preset。- 官方
dsh-subagent-codex和dsh-subagent-claude-codeprovider 仍保持宿主级单例。
安装
npm dsh plugin --profile web add D:\work\workspace\github\dsh-sub-agent\
本包通过 dsh.bundle.patch 自动装载 Host provider、开关设置、受控 tool Consumer 和 Web Client 模块。安装或本地源码变更后需要重启 web profile。
bundle 的默认行为是全局控制,因此安装后不需要修改任何 agent.cordis.yml。所有继承全局工具、且没有通过工具过滤规则排除它们的 Agent Preset,都会受这两个开关控制。
Client 产物是 Harness window.__ModuleLoader__ 要求的单文件 CJS bundle;不能用普通 ESM 或依赖相邻 chunk,因为 /plugins/<id>/client.js 路由只提供声明的 Client 入口。
手动配置
仅在不使用本包的 dsh.bundle.patch,或需要自定义 Consumer 作用域时手动组合。与 bundle 默认行为等价的宿主 cordis.yml 配置为:
- id: subagent-codex
name: '@deepseek-ai/dsh-subagent-codex'
- id: subagent-claude-code
name: '@deepseek-ai/dsh-subagent-claude-code'
- id: subagent-product-toggles
name: dsh-sub-agent-toggle/host
config:
claudeCode: false
codex: false
- id: subagent-product-toggle-tools
name: dsh-sub-agent-toggle/preset
- id: ui-subagent-product-toggles
name: dsh-sub-agent-toggle
上面的 subagent-product-toggle-tools 位于宿主根层,负责全局注册工具。若只想让指定预设获得这两个工具,应从宿主根层删除或禁用这一行,再在需要受控的每份 agent.cordis.yml 中加入:
- id: subagent-product-toggle-tools
name: dsh-sub-agent-toggle/preset
全局 Consumer 与预设内 Consumer 不要同时加载。两种布局使用同一个 subagent-products namespace,所以按预设挂载只控制工具出现在哪些预设中,不会为每个预设创建独立开关。同时删除或保持禁用同一作用域内原来的 tool-subagent-codex 与 tool-subagent-claude-code 行,避免重复注册同名工具。
行为
设置保存在 subagent-products namespace。bundle 默认将 Consumer 挂在宿主根层;切换后会立即更新全局工具注册,所有继承全局工具的预设及其已运行会话都会看到更新。若采用手动的预设内布局,则只有加载了此 Consumer 的预设受控,Harness 的 standing mount 会让这些预设的已运行会话同步更新。CLI 的安装、登录、模型、权限和原生配置仍分别由 Codex 与 Claude Code 管理,provider 也只会在工具被实际调用时启动对应进程。
每次切换只对目标字段执行一次 path-addressed set,并携带页面最近读取的 namespace revision。例如启用 Claude Code、保持 Codex 关闭后,用户设置层为:
subagent-products:
claudeCode: true
codex 未出现在用户层时继续继承 bundle 的 false base;用户明确切换为关闭时则写入 false。若另一个页面或外部编辑抢先更新了 revision,本次写入不会覆盖它,页面会重读最新值并提示重试。
DeepSeek Harness 当前没有 Agent 预设 页面内部的扩展 slot,所以第三方插件只能注册相邻设置页。若上游增加例如 settings.agent-presets.item 的 list slot,本组件可以不改 Host 逻辑地移动到原页面内部。
当前 settings.section 导航契约不接收图标,设置壳会为未知 section id 回退到齿轮。本插件因此安装一个仅作用于自身本地化导航标签的 Client 兼容层:隐藏该行的 fallback 齿轮,并用 DSH 公开的 IconBranchOutline16 渲染分支图标;设置壳重挂载或切换语言后会自动重新应用,插件卸载时则还原原始图标。该兼容层依赖设置导航继续使用语义化的 dialog/nav/button 结构;上游开放图标 option 后应删除它并改用正式契约。
No comments yet. Be the first to write one.