dsh-task-steward: A Deterministic Process Manager for DSH Tasks

前言

在 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye