dsh-task-steward:給 DSH 任務裝一個確定性進程管家

前言

在 DeepSeek Harness(DSH)裏跑長任務時,常見風險並不只在「這一次工具調用」——空轉重複、長時間無進展、禁區命令、讀不可信來源後立刻調特權工具、預算燒穿或主動要提權,往往跨多步纔看得出來。宿主側若有單次調用的風險複覈,和「整段任務是否在推進」仍是兩條線。下面介紹的 dsh-task-steward(任務管家)由維護者 MrXiongBear 發佈,分類爲 admin-security,用規則與狀態機盯運行中的任務,默認只記賬不攔人,適合先觀察再逐步放權。

這是什麼

dsh-task-steward 是掛在 DSH profile 上的 Cordis 插件:任務跑起來之後持續問一句——這個任務還在正常推進嗎? 命中卡死、空轉、思考鏈復讀、無進展、禁區命令、污點後的特權調用、預算超限、提權/換沙箱請求等信號時,按配置在「記錄 → 提醒 → 攔截 → 停機」的階梯上動作。默認 policy: report(影子模式):信號都算進賬本,但不攔工具、不停任務;全部判斷確定性完成,默認配置下一次模型調用都不發。倉庫標註爲實驗性、緊貼特定 DSH 版本驗證,未發佈到 npm;當前 package 版本爲 0.1.3,許可證 MIT,要求 Node >= 22。

核心功能

監督信號(節選)

信號 含義 默認閾值(資料原文)
repeat.exact 同一工具 + 規範化參數在窗口內重複 3 次 / 回看 12 次調用
repeat.no-effect 同一調用且結果摘要不變 2 次
stall.silent 運行中無事件且無在飛操作 120s
stall.thinking 只有思考、無工具、距上次進展過久 180s
progress.none 連續多步無進展證據 8 步
forbidden.command 禁區命令規則 11 條規則
taint.sink 讀不可信來源後調特權工具 first-taint-wins
budget.exceeded 步數/時長/(可選)token 超預算 0 = 不設限
escalation.request 提權、換沙箱、sandbox 拒絕 立即 tier 2

進展證據僅四類:寫/改文件、關掉一條 todo、驗證類命令通過(如 test|build|lint|tsc|vitest 且 exitCode 0)、用戶新消息。有工具調用未返回時不判卡死,避免長構建、長下載誤殺。

四檔干預(僅 policy: auto)

檔 動作 落地方式
tier 0 record 只寫賬本
tier 1 nudge 插入 user/message 提醒,不喚醒模型
tier 2 block tools/pre-execute 返回 {kind:'deny'}
tier 3 stop agent.cancel({kind:'hook', reason})

同一信號連續出現 tierUpAfter 次(默認 2)升一檔;有進展則重新計數。allowStop: false(默認)時 tier 3 降級爲 nudge,M0/M1 階段不自行殺任務。

與 auto-review 的分工

內置的 dsh-experimental-auto-review(profile 裏常見、默認關)管單次調用風險複覈;任務管家管跨步進程監督,兩者不重複。

安裝與啓用

DSH 的 profile 加載是全有或全無——任一插件 import 失敗可能拖垮整個 profile。安裝前先備份 profile 裏的 package.json 與 cordis.patch.yml。資料未給出 dsh plugin add github:… 一類命令;官方說明是本地裝入 profile:

  1. 將插件目錄放入 profile 的 node_modules,或在 package.json 中用 "dsh-task-steward": "link:<本目錄絕對路徑>" 鏈接。
  2. 在 package.json 的 dsh.profile.bundles 裏登記該包。
  3. 重啓 DSH。裝之前建議過 dsh-capability-ledger 的 preflight 閘門。

在 cordis.patch.yml 中可插入如下配置片段(與 README 一致):

- insert:
    - id: task-steward
      name: 'dsh-task-steward'
      config:
        policy: report        # report | auto
        stall: { silentMs: 120000 }
        escalation: { allowStop: false }

可調項包括 policy、stewardName、repeat.*、thinking.*、stall.*、progress.*、budget.*、escalation.*、ledger.* 等;完整默認值見倉庫內 lib/policy.mjs 的 DEFAULT_CONFIG。

卸載/回滾:從 dsh.profile.bundles 移除 → pnpm remove dsh-task-steward 或刪掉 link → 重啓;異常時用備份的 package.json 與 cordis.patch.yml 還原。

典型用法

確認插件已掛上

插件在 apply 第一行寫心跳文件。重啓後日志應出現類似:[task-steward] 管家已啓用(policy=report,賬本=…,心跳=…)。

心跳與賬本路徑(相對 $DSH_HOME):

  • task-steward/boot.json — 裝載自證(at/pid/version/policy/ledger)
  • task-steward/events.jsonl — 事件賬本
  • task-steward/stats.json — 觀察覆蓋統計

在插件倉庫目錄執行賬單腳本,先看「管家存活」再調閾值:

node scripts/bill.mjs --days 7

判讀要點(資料原文):

  • 沒有 boot.json → 插件未被 loader 起來;
  • 有 boot.json 但 sessionEvents=0 → 掛上但影子期未跑任務;
  • 有事件且零命中 → 判據對這段活動是乾淨的。

三步放權

  1. 用賬單逐條標真問題/誤報。
  2. 誤報多先調閾值(如 stall.*、progress.*)。
  3. 連續幾天乾淨再把 policy 改爲 auto;allowStop 最後再開。

M0 建議保持 policy: report,用 node scripts/bill.mjs 跑幾天賬單,誤報低了再切 auto。

本地驗證(開發者)

cd <repo>
node --test test/*.test.mjs
node scripts/bill.mjs --help

適用場景與注意

適合:需要跨步監督 DSH Agent 任務、希望先影子觀察再確定性干預的團隊或個人;與 admin-security 相關的禁區命令與污點鏈路防護。

務必注意:

  • 插件以當前 DSH 進程權限運行;安裝前應閱讀源碼與 MIT 許可證,自行評估信任邊界。
  • 倉庫聲明 100% AI 生成、實驗性自用,僅在編寫時的 DSH 版本上驗證,宿主升級可能失效。
  • 審計賬本不攜帶匹配原文,憑據就地脫敏;攔截理由放在頂層 reason,供模型與審批鏈閱讀。
  • 社區目錄頁 skillhub.cn 與 GitHub 爲獨立信息源,與 DeepSeek / 幻方無官方從屬;DSH 生態理念是「一切皆插件」。

結尾

dsh-task-steward 用零模型調用的規則鏈,把卡死、空轉、禁區、污點、預算與提權請求收成可審計信號,默認影子記賬,再按階梯提醒、攔截或停機。若要查看分類與簡介,可打開目錄頁;細節與配置以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/MrXiongBear/dsh-task-steward
  • GitHub:https://github.com/MrXiongBear/dsh-task-steward
羽毛球分组比赛记分
小程序二维码

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

小夜