前言¶
在 DSH 里跑智能体时,工具调用会自然分成几类节奏:先读代码和搜资料,再改文件或打补丁,最后跑命令、测构建。宿主本身不会根据「最近在干什么」在界面上提醒你该不该换思路,也不会在阶段变化时给一行可操作的 followup 提示。已有做法多半是人工看对话、自己判断是否还在探索还是已经进入调试。
下面介绍社区维护的工作流插件 dsh-toolgate-plus(npm 包名 @liuhange/dsh-toolgate-plus,维护者 liuhange789)。它监听 tools/pre-execute,用最近几次工具调用推断当前处于探索、编辑还是调试阶段,在阶段切换时更新状态栏并节流推送建议;监听器始终调用 next(),不改变工具准入决策。
这是什么¶
dsh-toolgate-plus 是会话阶段感知的 DSH 插件:Host 侧 inject: ['agents', 'tools'],记录工具名与调用序列,阶段切换时调用 agent.followup();Client 侧在 Web 平台提供状态栏阶段指示、输入框上方一行建议,以及设置面板中的自动收缩与灵敏度选项。分类为工作流;仓库见 GitHub,目录页见 SkillHub。
核心功能¶
界面与配置¶
| 位置 | 内容 |
|---|---|
| 状态栏左侧 | 当前阶段:探索 / 编辑 / 调试 |
| 输入框上方 | 阶段切换建议,单行文本,默认 10 秒后自动消失 |
| 插件设置页 | 「自动收缩」开关、「灵敏度」三档(宽松 / 标准 / 激进) |
配置字段(客户端经 host.call('getPluginConfig') / host.call('setPluginConfig', patch) 读写):
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
autoCollapse |
boolean | true |
建议行是否 10 秒后自动消失 |
sensitivity |
loose / standard / aggressive |
standard |
阶段判定灵敏度 |
自动收缩开启时,建议行在 10 秒后隐藏;关闭时保留到下一次阶段切换或插件卸载。写入失败会回滚并显示内联提示。
阶段判定¶
每次 tools/pre-execute 记录工具名,只保留最近 5 次调用(滑动窗口)。超过 5 条时淘汰最早一条,再对整个窗口重新统计。
判定优先级:窗口尾部连续调试调用 > 编辑占比 > 探索占比 > 保持当前阶段。未达阈值时保持现状,减少单次调用造成的抖动。
标准档(窗口长度 5)示例:
| 阶段 | 判定条件 |
|---|---|
| 探索 | read/search/list 类工具占比 > 60%(至少 4/5) |
| 编辑 | write/edit/patch 类工具占比 > 50%(至少 3/5) |
| 调试 | bash/test/run 类工具在窗口尾部连续出现 ≥ 2 次 |
工具名会按分隔符与 camelCase 拆词再归类,例如 read_file、WebSearch 归探索,ApplyPatch 归编辑,Shell、run_tests 归调试;TodoWrite、Skill、Agent 等记录型工具为 neutral,不参与占比。无明确词根的自定义 MCP 工具归为 unknown,也不参与占比。
灵敏度对阈值的影响(窗口长度均为 5):
| 参数 | 宽松 | 标准 | 激进 |
|---|---|---|---|
| 探索占比阈值 | > 80% | > 60% | > 50% |
| 编辑占比阈值 | > 60% | > 50% | > 40% |
| 连续调试次数 | ≥ 4 | ≥ 2 | ≥ 2 |
非法灵敏度配置会回退到标准档并记录告警。
建议节流与 Host 行为¶
- 首次进入某阶段立即推送一次建议,并调用
agent.followup() - 同一阶段 60 秒内再次进入时,只更新状态栏,不再推送建议
- 不同阶段各自独立计时
插件不做面板图表;tools/pre-execute 监听器始终 next()。若宿主未在 exec 上注入 agent,agent.followup() 不可用时仅更新状态栏并记录 warn,不阻塞工具调用。
安装与启用¶
npm 包名为 @liuhange/dsh-toolgate-plus,版本 1.0.0(MIT)。优先使用宿主自带安装命令:
dsh plugin add @liuhange/dsh-toolgate-plus
工程按 DSH both-mode 约定组织:package.json 中声明 dsh.bundle.patch 指向 cordis.patch.yml,宿主读取后加载,不需要手工编辑宿主 patch 文件。Host 依赖 @deepseek-ai/schemastery(peer,>=3.18.0 <4.0.0),由 DSH 宿主提供。
启用步骤:
- 执行上述
dsh plugin add(也可将已构建的工程拷贝到 DSH 插件目录,例如 Windows 下将目录复制到%USERPROFILE%\.dsh\plugins\dsh-toolgate-plus)。 - 重启 DSH,在插件设置页确认
@liuhange/dsh-toolgate-plus已启用。
典型用法¶
安装并启用后,无需单独启动脚本:智能体正常调用工具即可。插件在后台累计最近 5 次工具名并更新阶段。
若要减少建议行干扰,在插件设置页打开「自动收缩」(默认已开)。若阶段切换偏早或偏晚,将 sensitivity 设为 loose、standard 或 aggressive,保存后经 RPC 写入 Host 配置。
维护者提供的本地校验命令(用于审阅源码或自构建时):
npm test
npm run typecheck
npm run build
npm run pack:check
README 记载测试覆盖阶段识别、滑动窗口、滞回、三档灵敏度、工具名归类、建议节流,以及 tools/pre-execute 始终 next() 等集成行为(17 个用例)。
适用场景与注意¶
适合希望在 DSH Web 客户端里看见当前会话阶段、并在切换时收到节流后的一行建议(含可选 agent.followup())的智能体开发者。不适合需要真正拦截或改写工具准入的场景——本插件明确不改动准入决策。
使用前应知边界:
- 阶段回退仅有滑动窗口滞回与 60 秒节流,无最短驻留时间;快速来回切换时状态栏图标仍可能闪动,但建议不会刷屏。
- 调试判定依赖窗口尾部连续调用;调试命令后立刻读文件,可能暂不判为调试阶段。
- 当前仅覆盖探索、编辑、调试三阶段,不含规划、评审等。
- Client UI 已通过类型检查与构建,README 注明未在真实 DSH Web 宿主内做端到端渲染验证。
DSH 生态理念是「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。插件以当前 dsh 进程权限运行,安装前请阅读 仓库源码 与 LICENSE,自行确认是否符合环境要求。
结尾¶
dsh-toolgate-plus 用 tools/pre-execute 上的滑动窗口做探索 / 编辑 / 调试阶段感知,在状态栏与建议行给出反馈,并用 60 秒节流控制 agent.followup() 频率,同时保持所有工具调用照常放行。
- 目录页:https://www.skillhub.cn/plugins/liuhange789/dsh-toolgate-plus
- GitHub:https://github.com/liuhange789/dsh-toolgate-plus