前言¶
在 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