Back to home@sky-unicorn

dsh-sub-agent

为 Claude Code 和 Codex 子智能体提供便捷的 Web 开关。

Stars
2
Language
JavaScript
Created
Aug 18, 2026
Updated
Aug 18, 2026
GitHub repo

Introduction

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-subagent Consumer。bundle 默认将它挂在宿主根层,因此工具会作为全局工具供所有 Agent Preset 继承;只有自定义为按预设生效时,才将它放入指定的 Agent Preset。
  • 官方 dsh-subagent-codexdsh-subagent-claude-code provider 仍保持宿主级单例。

安装

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-codextool-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 后应删除它并改用正式契约。