前言¶
在 DeepSeek Harness(DSH)裏跑長任務時,會話常會停在「等你選一項」「等你審批」或「等你確認計劃」這類狀態。人不在終端前,進程就掛着;等你回來,上下文可能已經冷掉。社區裏也有把整段會話問答搬進飛書的方案,但那是另一種形態——全程在飛書側交互。若你只想在真正卡住時被叫醒、在飛書裏答一句、再把答案自動送回 DSH,就需要專門做「卡住才介入」的中繼,而不是搶會話控制權。
下面介紹維護者 Yo1ick 發佈的 dsh-stuck-reply(分類:工作流)。它在 DSH 會話卡在提問、審批或計劃時,通過飛書通知你;你在飛書裏回覆,答覆會按協議寫回,由配套看守進程喂回會話。
這是什麼¶
dsh-stuck-reply 的定位是:卡住會話飛書答覆代理。它不搬會話、不註冊工具或 subagent,也不直接檢測「是否卡住」或「如何把答案寫進會話」——這兩步由倉庫外的 watch 看守 負責。本插件只做飛書中繼:讀意圖文件、發通知、收回復、發回執、心跳互檢。
與 dsh-lark 的對比(README 原文表述):dsh-lark 把會話問答搬進飛書;本插件不搬任何東西,只在卡住時用飛書叫醒你並把答覆帶回。缺了 watch,插件可以啓動,但不會收到任何通知——這是設計邊界,不是缺陷。
兩件套形態¶
兩者通過 stateRoot 下的意圖文件協議 v1 通信(原子寫、版本戳、id 冪等、消費後歸檔):
- 外掛 watch(不在本倉):檢測會話卡住、維護狀態機,通過 DSH Remote API 應用答案,並在
stateRoot下寫意圖文件。 - 本插件:飛書通知、收回復、應用回執、心跳互檢。
部署時須同時規劃 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。