dsh-offhours:低谷時段自動消化看板待辦

前言

在 DeepSeek Harness(DSH)裏和 agent 對話時,常會留下一批明確的小任務:補錯誤提示、改一處交互、跑通測試。白天忙着主線,這些事容易一直壓在腦子裏或散落在聊天記錄裏。用外部 cron 調腳本可以定時跑,但要自己管 worktree、證據和合並,成本高;純手動又很難在夜間批量推進。

dsh-offhours 是社區插件 shuke52tt/dsh-offhours,把看板上的 todo 卡在低谷/夜間按規則自動執行:每卡獨佔一個 git worktree,headless worker 幹活並自證,證據寫回卡面,再合併回收。數據在本地(KANBAN.json 與 stateDir),不依賴單獨的 systemd/cron 調度。下面介紹定位、能力與從零接上的步驟。

這是什麼

  • 名稱:dsh-offhours(npm 包名同)
  • 維護者:shuke52tt
  • 分類:工作流
  • 一句話:配置一個(或多個)git 倉庫後,用看板管理待辦,插件進程內按 interval 掃描,或在 CLI/面板手動觸發跑批。
  • 許可:MIT(見 GitHub 倉庫)

源碼與說明:GitHub - shuke52tt/dsh-offhours
社區目錄頁:SkillHub 插件頁

核心功能

資料中的設計可以概括爲一條閉環,只做「待辦卡 → 自動做 → 可覈對完成」這一件事。

  1. 看板與卡:看板文件爲倉庫內的 KANBAN.json;用 CLI 或 DSH 會話建卡,卡上寫目標、判據與邊界。
  2. 一卡一 worktree:每張待辦在獨立 git worktree 裏執行,避免互相污染工作區。
  3. headless worker:通過配置中的 dshBin、dshProfile(默認 headless)拉起 worker;完成須滿足卡里可機械覈對的判據(例如測試命令),否則不得報 done。
  4. 證據與合併:證據寫回卡;引擎在跑批前後偵測主檢出,並做合併回收。
  5. 調度方式:scheduler 可爲 plugin(插件內按 schedule.intervalMin 掃描),也可 npx dsh-offhours run --once 或面板「立即跑」。
  6. 閘門:gates 限制單次/每日卡數及每日成本上限(如 maxCnyPerDay)。
  7. Web 面板:安裝到 web profile 後,左側出現「夜間跑批」面板,可查看狀態並觸發運行。

安裝與啓用

在已安裝 DSH 的環境中,按官方 README 使用 profile web 安裝插件:

dsh plugin --profile web add dsh-offhours

裝完後重啓一次 dsh web(或等待 HMR 生效),左側應出現「夜間跑批」面板。升級插件後同樣需要重啓 dsh web,面板纔會加載新代碼。

說明:安裝插件不會把 CLI 放進全局 PATH;下文示例用 npx dsh-offhours。若已全局安裝同名入口,可簡寫爲 offhours。也可使用 profile 下 node_modules/.bin/offhours 的絕對路徑(例如 ~/.dsh/profiles/web/node_modules/.bin/offhours)。

運行環境(README 寫明):Linux(含 WSL)需要 bash、python3、git、jq、flock、dsh;zstd 可選。macOS 暫不支持;原生 Windows 需走 WSL。Node 版本要求 >=20;DSH 引擎要求 >=0.2.0(見 package.json)。

典型用法:三步開始

以下命令來自 README,在你要跑批的 git 倉庫中執行。

1)初始化配置與看板

在項目倉庫根目錄寫入 offhours 配置、關聯特性並生成看板:

cd ~/code/myapp
npx dsh-offhours init --repo . --name myapp

會在用戶目錄生成 ~/.dsh/offhours/config.json(並建立 stateDir、featuresRoot 等路徑)。

2)體檢

檢查依賴、路徑與 worker 權限;失敗時進程退出碼非 0:

npx dsh-offhours doctor

3)建卡(須帶會話)

卡必須帶有 sourceSessionId(通過 --session 或在 DSH 會話裏用 offhours 技能建卡),否則跑批不會撿這張卡:

npx dsh-offhours card add "給登錄頁補錯誤提示" \
  --summary "目標:登錄失敗有提示。判據:npm test 通過。不做什麼:不改後端。" \
  --session <當前 dsh 會話 id>

README 建議:在 dsh 裏對 agent 說「用 offhours 技能建一張卡:給登錄頁補錯誤提示」往往更省事。

之後若 schedule.enabled 爲 true,插件會按 intervalMin 自動掃描;也可在面板點「立即跑」,或執行:

npx dsh-offhours run --once

僅預覽本輪會挑哪張卡:

npx dsh-offhours run --dry-run

若面板提示「先完成一次性初始化」,在項目倉庫執行 init 後刷新即可,無需重裝插件。

配置要點

npx dsh-offhours init 生成的 ~/.dsh/offhours/config.json 示例結構如下(字段含義以 README 爲準):

{
  "stateDir": "~/.dsh/offhours/state",
  "featuresRoot": "~/.dsh/offhours/features",
  "dshBin": "dsh",
  "dshProfile": "headless",
  "scheduler": "plugin",
  "repos": {
    "myapp": { "path": "~/code/myapp", "baseBranch": "main" }
  },
  "boards": [
    { "id": "myapp", "file": "~/code/myapp/KANBAN.json", "workdir": "~/code/myapp", "repos": ["myapp"] }
  ],
  "gates": { "maxCardsPerRun": 3, "maxCardsPerDay": 8, "maxCnyPerDay": 20 },
  "schedule": { "enabled": true, "intervalMin": 5 },
  "worker": { "permissionMode": "danger-full-access" }
}
  • baseBranch 可寫 main、master 或任意分支;省略時按 origin/HEAD、main、master 依次探測。
  • worker.permissionMode 默認爲 danger-full-access:worker 需要向 <repo>/.git/worktrees 寫入才能提交,屬於無人值守的結構性要求;不信任倉庫內容時不應安裝此插件。

常用 CLI

命令 作用
npx dsh-offhours init --repo . 初始化配置/看板/特性
npx dsh-offhours doctor 依賴與權限體檢
npx dsh-offhours card add "<標題>" --summary "<目標/判據/邊界>" [--session <id>] 建卡並關聯會話
npx dsh-offhours card list 列卡
npx dsh-offhours run --once / --dry-run 手動跑一輪 / 預演挑卡
npx dsh-offhours status 看板計數、心跳、最近狀態(JSON)
npx dsh-offhours boards 看板列表

適用場景與注意

更適合誰

  • 已有 DSH web profile,希望在本地用看板沉澱「可驗收」小任務,並在非高峯自動推進的實現者。
  • 倉庫習慣用 git worktree 隔離特性分支,且能接受 headless agent 在獨立 worktree 內改代碼、跑判據命令。

安全與邊界(README 強調)

  • worker 在獨立 worktree 工作;建議同時啓用 feature-guard 鉤子,與引擎對主檢出的偵測一起兜底。
  • 插件以當前 dsh 進程權限運行;danger-full-access 意味着對配置中倉庫具備較強寫權限。安裝前請閱讀源碼與 MIT 許可證,確認倉庫與機器環境可信。
  • 送審(需人介入)僅保留五類:選型不確定、影響演進、實施成本、條件做不成、政策風險。
  • 卡里必須寫明可機械覈對的判據(命令),否則 worker 不能標記完成。

生態說明

DSH 社區奉行「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。本插件當前在 GitHub 星標爲 0,適合自行評估後試用。

結尾

dsh-offhours 把「看板待辦 → worktree → headless worker → 證據 → 合併」收到一個插件與一份 config.json 裏,減少自建夜間批處理的膠水代碼。若你要在低谷時段批量消化帶測試判據的小卡,可按上文安裝、在項目內 init/doctor、在 DSH 會話中建卡後交給調度或手動 run --once。

反饋可發到倉庫 issue 或 README 所列社區討論帖。

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

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

小夜