dsh-toolgate-plus:按会话阶段提示探索、编辑与调试

前言

在 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 宿主提供。

启用步骤:

  1. 执行上述 dsh plugin add(也可将已构建的工程拷贝到 DSH 插件目录,例如 Windows 下将目录复制到 %USERPROFILE%\.dsh\plugins\dsh-toolgate-plus)。
  2. 重启 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye