dsh-stuck-reply:DSH 卡住會話時的飛書答覆代理

前言

在 DeepSeek Harness(DSH)裏跑長任務時,會話常會停在「等你選一項」「等你審批」或「等你確認計劃」這類狀態。人不在終端前,進程就掛着;等你回來,上下文可能已經冷掉。社區裏也有把整段會話問答搬進飛書的方案,但那是另一種形態——全程在飛書側交互。若你只想在真正卡住時被叫醒、在飛書裏答一句、再把答案自動送回 DSH,就需要專門做「卡住才介入」的中繼,而不是搶會話控制權。

下面介紹維護者 Yo1ick 發佈的 dsh-stuck-reply(分類:工作流)。它在 DSH 會話卡在提問、審批或計劃時,通過飛書通知你;你在飛書裏回覆,答覆會按協議寫回,由配套看守進程喂回會話。

這是什麼

dsh-stuck-reply 的定位是:卡住會話飛書答覆代理。它不搬會話、不註冊工具或 subagent,也不直接檢測「是否卡住」或「如何把答案寫進會話」——這兩步由倉庫外的 watch 看守 負責。本插件只做飛書中繼:讀意圖文件、發通知、收回復、發回執、心跳互檢。

與 dsh-lark 的對比(README 原文表述):dsh-lark 把會話問答搬進飛書;本插件不搬任何東西,只在卡住時用飛書叫醒你並把答覆帶回。缺了 watch,插件可以啓動,但不會收到任何通知——這是設計邊界,不是缺陷。

兩件套形態

兩者通過 stateRoot 下的意圖文件協議 v1 通信(原子寫、版本戳、id 冪等、消費後歸檔):

  1. 外掛 watch(不在本倉):檢測會話卡住、維護狀態機,通過 DSH Remote API 應用答案,並在 stateRoot 下寫意圖文件。
  2. 本插件:飛書通知、收回復、應用回執、心跳互檢。

部署時須同時規劃 stateRoot 路徑與 watch 的安裝方式;只裝插件而不裝 watch,飛書側不會有卡住通知。

核心功能

  • 飛書通知:卡住時推送帶 #N 編號的消息,多條並存時可指定條目回覆。
  • 回覆規則:選項序號(如 1)、指定條目(如 #1 2)、任意文字作自定義答案、審批場景的 批准 / 拒絕、以及 取消 放棄。
  • 安全與隔離:飛書憑據只在 lark-cli 自身認證裏,不進包、不進 git;插件不碰會話 seam,僅文件輪詢 + lark-cli 出站調用。
  • 可靠性:發送異步(15s 超時),失敗不歸檔,最多重試 3 次後放棄並寫 plugin.log;同一 stateRoot 有單實例鎖(plugin.lock + pid 存活檢測),bundle 與 standalone 可同時安裝,但只有一個在消費。

運行環境(package.json):Node >=22.4.0,peer 依賴 @deepseek-ai/cordis ^4.0.1,當前包版本 0.1.2,許可證 MIT。

安裝與啓用

在 DSH 中安裝(命令來自官方 README):

dsh plugin add dsh-stuck-reply        # 或 npm/pnpm 本地路徑

在 profile 的 cordis.patch.yml 裏參考 config.example.yaml 配置。必填 stateRoot;larkCli 缺省爲 PATH 中的 lark-cli:

- insert:
    - id: dsh-stuck-reply
      name: 'dsh-stuck-reply'
      config:
        stateRoot: '/path/to/dsh-stuck/state'
        larkCli: 'lark-cli'

啓動時會校驗:stateRoot 爲空,或 larkCli 爲絕對路徑但文件不存在,會直接報錯退出,不會靜默不工作。

不裝進 DSH 時,可用獨立腳本運行:

node standalone.mjs --state-root /path/to/dsh-stuck/state --lark-cli /opt/homebrew/bin/lark-cli

使用前需本機已配置好 lark-cli 與飛書認證;插件以當前 DSH 進程(或運行 standalone 的用戶)權限讀寫 stateRoot 並調用 CLI,安裝前應閱讀倉庫源碼與 MIT 許可證,確認路徑與憑據管理方式符合你的環境策略。

典型用法:飛書側怎麼答

卡住時通知大致如下(README 示例):

🔔 DSH 會話等你選擇(本條編號 #1)
會話:<標題>
問題:今晚想喫什麼?
1. 火鍋
2. 燒烤
直接回復序號(如 1)選擇;回覆自定義文字作答案;回「取消」放棄。

按場景回覆即可:選 1 或 #1 2 指定條目;直接打字作自定義答案;審批用 批准 / 拒絕;不想繼續則 取消。答覆經插件寫回意圖文件,由 watch 應用進 DSH 會話。

適用場景與注意

適合:本地或遠程跑着 DSH 長任務,希望只在提問、審批、計劃卡住時用手機飛書處理,且願意部署 watch + 共享 stateRoot 的開發者。

注意:

  • 插件不替代 watch;意圖文件協議與 Remote API 應用答案都在看守側完成。
  • 同一 stateRoot 勿多實例併發消費;鎖機制保證崩潰後另一實例可接管。
  • DSH 生態是「一切皆插件」;社區目錄頁與 GitHub 倉庫由維護者發佈,與 DeepSeek / 幻方無官方從屬關係,安裝來源以你信任的目錄與倉庫爲準。

結尾

dsh-stuck-reply 把「卡住才介入」做成飛書中繼:不搶會話控制權,只在需要人時出現,並把飛書裏的選擇或文字帶回 DSH。完整說明與配置示例見倉庫 README。

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

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

小夜