前言¶
在 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,請先移除再裝本包——兩者會註冊同名工具,同時啓用屬於未測組合。
典型用法思路¶
文檔未給出固定「複製即用」的業務腳本,但組合方式很直接:
- 用
session_list拿到目標sessionId(或limit縮小範圍)。 - 主會話 Agent 調用
session_create開一條獨立對接會話,記下返回的sessionId。 - 用
session_inject把任務或結論queue到對方下一輪,或steer打斷當前方向。 - 若某會話長時間卡在工具調用上,對該
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。