dsh-agent-session-tools:給 Agent 直接操作 Harness 會話的工具

前言

在 DeepSeek Harness(DSH)裏做多會話協作時,Agent 往往只能把消息發給 teammate,或發給直接父會話、可續子會話。沒有「對任意會話發一條話」的通用入口時,主會話派活給獨立會話、把結論同步到另一條對話、叫停卡住的輪次,都會繞遠路——靠提示詞或人工切界面。

dsh-agent-session-tools(維護者 zgq0106)補的是宿主內工具層:四個 Agent 工具,直接走 Web 輸入框同一條 ctx.sessionController 投遞路徑。下面介紹它解決什麼問題、怎麼裝、四個工具各做什麼,以及和相近插件的邊界。

這是什麼

一句話:給 DSH Agent 一組能新建會話、向指定會話注入消息、列出可見會話、取消當前輪次的工具;不繞提示詞、不依賴前臺頁面。

分類上屬於社區目錄裏的「工作流」類插件。實現上是單文件 index.js,零第三方依賴、無構建步驟;卸載只移除加載行與包目錄,不寫配置、不建數據目錄。已注入的消息會留在目標會話日誌裏,卸載不會撤銷——那是注入行爲本身留下的痕跡。

內核裏缺的那條入口

Harness 裏原先較窄的兩條路是:

  • agentTeams.sendMessage:只能發給自己的 teammate;
  • subagents.sendMessage:只能發給直接父會話或直接可續子會話。

本插件不另造投遞機制,而是調用已組合的 sessionController.create()、prompt()、list()、cancel()。因此 session_inject 寫入的是目標會話裏真實的用戶消息,不是旁路注入。

四個工具

工具 作用 底層
session_create 新建會話,返回 sessionId sessionController.create()
session_inject 向指定會話投遞一條消息 sessionController.prompt()
session_list 列出可見會話,便於找 sessionId sessionController.list()
session_cancel 取消某會話當前正在跑的輪次 sessionController.cancel()

session_create

可選參數:

  • cwd:新會話工作目錄的絕對路徑;省略用 Harness 默認。相對路徑會被拒絕。
  • agentPreset:預設 id;省略用默認預設。
  • title:創建後立即設置的標題。

返回 { sessionId, agentPreset?, title?, warning? }。標題設置失敗不影響創建,原因在 warning 裏。

session_inject

必填:sessionId、message(不能爲空)。可選 mode:

  • queue(默認):消息進入收件箱,在下一輪開始處理;目標空閒時也會被喚醒。
  • steer:在最近一個步驟邊界生效,用於中途改方向。

返回 { accepted, sessionId, mode, requestId }。服務端對重複 requestId 返回原接受結果,不會重複插入。

session_list

可選 limit:默認 20,範圍 1–100。只讀,不會喚醒冷會話。每條帶 running / blank / origin / cwd 等字段,便於選目標。

session_cancel

必填 sessionId。只發取消請求,不丟棄已排隊消息。會話卡在未結算的工具調用上時,取消後當前輪結束,隊列才能繼續。

安裝與生效

推薦從 GitHub 安裝(把 --profile 換成你的 profile 名;插件目錄即 profile 目錄):

dsh plugin --profile desktop add github:zgq0106/dsh-agent-session-tools

也可把倉庫放到本機目錄,用插件管理器填絕對路徑安裝,或手工鏈接到 <profile>/node_modules/dsh-agent-session-tools 並在該 profile 的 cordis.patch.yml 追加對應 insert 條目(詳見倉庫 README)。

裝完後需要重啓 DSH。Loader 按包名緩存已導入模塊,禁用/啓用、重裝 bundle 都不會重讀 index.js,只有重啓才保證新代碼生效。

若曾裝過作者私有版 @local/dsh-session-control,請先移除再裝本包——兩者會註冊同名工具,同時啓用屬於未測組合。

典型用法思路

文檔未給出固定「複製即用」的業務腳本,但組合方式很直接:

  1. 用 session_list 拿到目標 sessionId(或 limit 縮小範圍)。
  2. 主會話 Agent 調用 session_create 開一條獨立對接會話,記下返回的 sessionId。
  3. 用 session_inject 把任務或結論 queue 到對方下一輪,或 steer 打斷當前方向。
  4. 若某會話長時間卡在工具調用上,對該 sessionId 調用 session_cancel,再視情況重新 session_inject。

宿主未組合 @deepseek-ai/dsh-api-session-controller 時,插件仍會加載,但調用會返回說明缺服務的錯誤,而不是靜默失敗。

安全與邊界

  • 注入等於真實寫入目標會話日誌,不可撤銷;建議先用不重要的會話試一次。
  • 工具不做內容審查,Agent 對注入內容負責;空文本會在插件側被拒絕。
  • 插件在宿主進程內調用、不帶 Remote 主體,注入消息按 owner 歸屬,與手打消息同級。
  • 插件以當前 DSH 進程權限運行;安裝前請自行查看 源碼 與 MIT 許可證。

和相近插件怎麼選

社區裏功能更寬的有 dsh-session-bridge(提示詞建頂層會話、等待回覆、跨工作區按名查找等)和 dsh-session-hub(聚合多臺遠程 dsh web 上的會話)。本包刻意收窄:純宿主內、四個工具、參數嚴格、錯誤明確。若你只需要「建個會話」「往那邊說句話」,行爲和邊界更容易預期。

兼容性

項目 說明
實測 DSH 0.2.1-rc.5(Windows,Node 24.21.0)
Node ^22.19.0 \|\| >=24.0.0
包版本 0.1.0
構建 無;index.js 即發佈產物

package.json 的 dsh.compatibility.dshReleases 只聲明實測版本;其它版本可能可用,但請以本地實測爲準。

結尾

dsh-agent-session-tools 把「任意會話」的創建、投遞、列舉、取消收成四個 Agent 工具,走與界面發送相同的 sessionController 路徑。目錄頁:skillhub.cn/plugins/zgq0106/dsh-agent-session-tools;源碼與完整參數說明:github.com/zgq0106/dsh-agent-session-tools。

羽毛球分组比赛记分
小程序二维码

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

小夜