前言¶
用 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);開關、改時間、立刻停、看還剩多久,全在按鈕和卡片裏,對話流裏不會留下操作流水。
- 點
☽ 守夜彈出卡片; - 選快捷項:
+30 分/+1 小時/+2 小時/今晚 23:00/明早 7:00/+8 小時,或在底部輸入框自定義時間後回車; - 點「開始守夜」。
開啓後按鈕顯示 ☽ 守夜 · 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 配置表。
典型用法¶
- 在目標 profile 按上文完成
npm i與bundles配置,重啓或加載 DSH。 - 打開要長跑的會話,點
☽ 守夜→ 選「明早 7:00」或+8 小時→「開始守夜」。 - 離開前確認藥丸在倒計時;回來若已過截止,會話應已安靜,可查看最後一輪是否按收尾語氣寫了待辦與下一步。
- 若與截斷續寫並用,可同時安裝
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 爲準。