dsh-nightwatch:給 DSH 輸入框加守夜按鈕,會話續跑到指定鐘點自動停

前言

用 DeepSeek Harness(DSH)做長任務時,模型答完一輪往往會停下來等你下一句「繼續」。人若離開幾小時,會話就空轉或中斷,沒法按 wall-clock 截止時間一直跑下去。手動反覆發「繼續」既費事,也不適合「去睡覺,讓它自己幹到早上」這類場景。

下面介紹社區插件 dsh-nightwatch(維護者 Zci514,GitHub 倉庫 Zci514/dsh-nightwatch)。它在 DSH 輸入框加一顆「☽ 守夜」按鈕:選截止時間後,每輪迴答結束自動接一句續跑文案,到點不再開口;默認不註冊 slash 指令,開關與時間都在按鈕和卡片裏完成。

這是什麼

dsh-nightwatch 是 DSH 的本地 bundle 插件,npm 包名 dsh-nightwatch,許可證 MIT。SkillHub 目錄分類爲「工作流」;倉庫簡介與 README 一致:給輸入框加按鈕,選鐘點,會話續跑到那時自動停。

與只處理「輸出被截斷」時補一句的 dsh-plugin-continue-on-limit 不同:nightwatch 管的是時鐘——每輪正常結束後接着開下一輪,到點收工;兩者可同時安裝,由 skipTruncatedTurnEnd 避免同一輪搶鉤子。

核心功能

輸入框按鈕(主界面)

插件在輸入框左下角小按鈕區(「完全權限」右側,與「↻ 迭代」並排)提供 ☽ 守夜。這個插件只有按鈕,沒有指令(默認不註冊 slash);開關、改時間、立刻停、看還剩多久,全在按鈕和卡片裏,對話流裏不會留下操作流水。

  1. 點 ☽ 守夜 彈出卡片;
  2. 選快捷項:+30 分 / +1 小時 / +2 小時 / 今晚 23:00 / 明早 7:00 / +8 小時,或在底部輸入框自定義時間後回車;
  3. 點「開始守夜」。

開啓後按鈕顯示 ☽ 守夜 · 3h20m,倒計時每秒更新。再點開卡片可改時間(「改到」)或點紅色「立刻停」。最後 10 分鐘(默認 wrapUpMinutes)會切換收尾語氣,便於到點時留下可接手的現場說明。

若宿主未掛載或會話未加載,按鈕會變灰並說明原因,旁有「重試」。

每輪結束後如何續跑

在 turn/end 時插件檢查:未開守夜、已到點、輪次用完等則不動;若還有你未處理的消息排隊則不插嘴;距上一輪不足 1.5 秒則稍等。否則投遞一條 source.kind = 'cordis-host-runner' 的用戶側消息(默認大意:繼續,並帶上當前時間與距截止還有多久),不是以你的 user 身份發送,因此不會替你去批准自己的操作請求。

另有默認 20 秒一次的後臺心跳:若某輪結束時鉤子未執行,會話空着且未到點,會補一句,避免一次意外就整夜停擺。

何時會停

條件 說明
到點 主功能;默認不強行掐斷正在跑的那一輪(graceMs: 0 表示只是不再開新輪)
輪次上限 默認 maxRounds 400;0 表示不限
連續出錯 默認連續 3 輪報錯停
連續 idle 默認連續 4 輪未調工具停
手動 卡片裏「立刻停」
會話刪除 記錄一併清除

狀態持久化在 $DSH_HOME/nightwatch.json(默認 ~/.dsh/nightwatch.json),原子寫入;重啓 DSH 後若截止未過且該會話被加載,會自動認領繼續。從 1.1.0 的 @local/dsh-run-until 升級時,狀態會從 $DSH_HOME/run-until.json 遷移到新文件。

可選 slash 指令(默認關閉)

配置 enableCommand: true 時會額外註冊 /nightwatch(及 1.1.0 舊名 /run-until),供無頭會話、腳本等沒有按鈕的場景。GUI 下一般保持默認 false,避免兩套界面並存。示例:/nightwatch 22:30、/nightwatch +90m、/nightwatch stop 等,寫法與按鈕卡片輸入框一致(支持全角冒號、不補零時間等)。

安裝與啓用

本插件按 DSH「本地 bundle」方式裝載:在 profile 目錄增加 npm 依賴,並在 dsh.profile.bundles 末尾追加 dsh-nightwatch。

從 npm 安裝(推薦)

包已發佈:https://www.npmjs.com/package/dsh-nightwatch。profile 目錄爲 ~/.dsh/profiles/<你的 profile>。

cd ~/.dsh/profiles/<你的 profile>
npm i dsh-nightwatch

在同一 package.json 中配置依賴與 bundle(README 示例版本爲 ^1.2.2;當前 package.json 發佈版本爲 1.2.3):

{
  "dependencies": { "dsh-nightwatch": "^1.2.2" },
  "dsh": { "profile": { "bundles": ["…原有的不要動…", "dsh-nightwatch"] } }
}

npm i 會把包裝進 node_modules/dsh-nightwatch,無需再建 junction。bundles 順序即加載順序,將 dsh-nightwatch 追加到最後即可。

運行環境要求 Node >=22(見 package.json engines)。

配置(按需)

可在 cordis.patch.yml 的 nightwatch 段或 profile patch 中覆蓋,例如:enabled、maxRounds、wrapUpMinutes、heartbeatMs、enableCommand 等。完整鍵與默認值見倉庫 README 配置表。

典型用法

  1. 在目標 profile 按上文完成 npm i 與 bundles 配置,重啓或加載 DSH。
  2. 打開要長跑的會話,點 ☽ 守夜 → 選「明早 7:00」或 +8 小時 →「開始守夜」。
  3. 離開前確認藥丸在倒計時;回來若已過截止,會話應已安靜,可查看最後一輪是否按收尾語氣寫了待辦與下一步。
  4. 若與截斷續寫並用,可同時安裝 dsh-plugin-continue-on-limit,由 nightwatch 的 skipTruncatedTurnEnd: true 與前者分工。

適用場景與注意

適合:需要按 wall-clock 截止時間讓 DSH 會話自動多輪推進、又不想記指令或往對話裏刷「繼續」的開發者;夜間或離席前的長時間自動化嘗試(仍受輪次、idle、錯誤上限約束)。

注意:

  • 插件以當前 DSH 進程權限運行;安裝前請閱讀 GitHub 源碼 與 MIT 許可證,自行評估風險。
  • README 寫明宿主側 lib/ 改動需重啓 DSH;client.js 可熱更。
  • 重啓後須打開對應會話(或在該會話發話)纔會認領守夜;過期記錄會自動丟棄。
  • 已知限制:README 稱主要在 Windows + DSH 桌面版實測;邏輯層與平臺無關。
  • SkillHub 目錄頁:https://www.skillhub.cn/plugins/Zci514/dsh-nightwatch;社區目錄與 DeepSeek / 幻方無官方從屬關係,屬「一切皆插件」生態中的第三方工作流插件。

結尾

dsh-nightwatch 把「續跑到某個鐘點再停」收成輸入框一顆按鈕:選時間、看倒計時、改點或立刻停,默認不佔對話流。需要無頭控制時再開 enableCommand 與 /nightwatch。詳情與變更見 GitHub README,安裝以 npm 與 profile bundle 爲準。

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

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

小夜