dsh-stop-kills-jobs

在 DeepSeek Harness(DSH)中,當開啓 run_in_background: true 運行後臺 bash 任務或後臺子代理時,任務會註冊 ctx.jobs 並在返回 job id 後使用 job cancellation 機制而非工具調用信號來控制。這意味着當用戶點擊停止按鈕時,前臺回覆會被中斷,但後臺任務往往會繼續運行。任務完成後,其完成通知會喚醒模型,導致爲已取消的對話產生額外的請求。dsh-stop-kills-jobs 插件監聽 UI 的 turn/end 事件,識別用戶按停止的行爲,並取消當前會話關聯的後臺任務,防止這種情況發生。

插件概況

這是一個客戶端插件,由 Ezisup 維護,採用 MIT 許可證。它的核心作用是在用戶主動中斷對話時,一併結束本輪發起的後臺任務。

安裝

通過命令行添加插件:

dsh plugin --profile web add link:/xxx/dsh-stop-kills-jobs

安裝後需要重啓 DSH 才能生效(客戶端部分需要重新加載)。

配置與使用

  1. 進入 設置 → 插件 → 插件配置,找到「停止時結束後臺任務」卡片。
  2. 默認情況下該卡片是摺疊的,點擊標題展開。
  3. 卡片分爲兩部分:「停止時結束什麼」和「插件自身的輸出」。
    • 停止時結束什麼:控制是否結束後臺 bash 任務和後臺子代理,受總開關管轄。
    • 插件自身的輸出:顯示提示和詳細日誌,與停止按鈕無關,任何時候都生效。
  4. 總開關:默認開啓。關閉總開關後,「停止時結束什麼」整段隱藏(插件不做任何事),但已保存的設置會原樣保留,重新開啓即可恢復。

開關說明

開關 默認值 說明
啓用 開 總開關,關閉即恢復 DSH 原行爲
後臺命令(bash) 開 是否結束 run_in_background 的 bash 任務
後臺子代理(subagent) 開 是否結束後臺子代理
在對話中顯示提示 開 在設置頁顯示最近結束的任務
輸出詳細日誌 關 將判斷過程寫入服務端日誌

核心功能

  • 監聽與識別:監聽 UI 的 turn/end 事件,精確匹配 reason?.kind === 'aborted' && reason?.reason?.kind === 'user',僅對用戶主動點擊停止的行爲響應。
  • 取消任務:利用授權憑據(ctx.agents.get(session.id))取消當前會話及其子代理註冊的後臺任務。
  • 防止喚醒:通過及時取消任務,防止任務完成後通知喚醒模型,避免已取消的對話產生額外請求。
  • Verbose 模式:支持開啓詳細日誌,便於排查任務未正常終止的問題。

注意事項

  • 作用範圍:僅影響當前會話發起的任務,不影響其他會話。
  • 依賴環境:插件以當前 dsh 進程權限運行,使用前應檢查源碼與許可證。
  • 會話隔離:子代理任務註冊時使用 owner: parent,插件通過 ownerSession 過濾條件同時覆蓋了父會話和子代理任務。
  • 卸載:如需移除,使用 dsh plugin --profile web remove dsh-stop-kills-jobs,並重啓 DSH。
羽毛球分组比赛记分
小程序二维码

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

小夜