中文EN

dsh-agent-board

workflow已测通过npmMIT

DeepSeek Harness 会话任务看板:主窗口把任务派发给一次性 Worker/Verifier 子代理执行与验收,支持依赖调度、文件级排他锁、裁决挂起冻结、里程碑进展上报与任务级 Token 消耗统计。

下载量 / Downloads
4,795
依赖体积 / node_modules
454.34 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-agent-board

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

Task Board Plugin for DeepSeek Harness

![npm](https://www.npmjs.com/package/dsh-agent-board)

![npm downloads](https://www.npmjs.com/package/dsh-agent-board)

![node](https://www.npmjs.com/package/dsh-agent-board)

![license](https://github.com/PPawnsir/task-board-plugin/blob/main/LICENSE)

智能看板插件 — agent 团队的持久台账与治理层:把「派发 → 执行 → 验收 → 度量 → 复盘」跑成全链路闭环,每一张卡都是可审计、可度量的长期资产。

定位

dsh-agent-board 是 agent 团队的持久台账与治理层——看板只是界面,内核是「派发 → 执行 → 验收 → 度量 → 复盘」的全链路闭环。 它与「一次性组队、跑完即散」的冲锋型编排器、「人建卡、agent 认领、人逐张验收」的手工看板不是一个代际:

  • 持久台账:任务卡是长期资产。完成 / 驳回 / 歧义裁决 / 验收结论 / Token 消耗 / 自测指南,每一笔都落账留痕,看板文件即审计底稿;卸载不删数据,重启自动继承。
  • 池化 Worker + 独立 Verifier:执行与验收分离——Worker 负责动手(可续跑,续跑只认新增产出),Verifier 独立复跑验收脚本、以实证为准,不听 Worker 的一面之词。
  • 独立验收:acceptance 硬性脚本命令由 Worker 实跑、Verifier 独立复跑;结论分通过 / 驳回并逐条给证据。人只看该看的——风险队列「待你过目」把该亲自确认的卡推到眼前,其余交给机器闭环。
  • 可运维度量栈:记分卡(模型表现 / 质量趋势 / 驳回聚类)、运行时健康自检、异常驱动审视(风险队列 / 质量异动告警 / 批次摘要)三层,让成本与质量从「感觉」变成「数字」。
流水线归机器,审计台归人。 我们不造「跑完就散」的冲锋队,也不做「人逐张盯着验收」的手工看板;我们的信念只有三条:验收独立复跑、人只看该看的、数据沉淀成资产。别人负责冲锋,agent-board 负责记账与验收——互补,不对抗。

适合谁 / 什么时候用

  • 长期多任务并行:一个会话里几十张卡、有依赖有先后、还不断追加新需求——需要一份不随会话结束而消失的台账,而不是每次重开都从零描述。
  • 关心成本与质量趋势:想看清哪个模型在什么场景更省、驳回率在涨还是跌、哪些文件反复成为锁热点——需要记分卡与趋势,而不是拍脑袋。
  • 不想逐张审卡:接受「独立复跑 + 风险队列兜底」的治理方式——机器把「该我亲自看」的卡筛出来,其余信任验收闭环。
  • 缺一层治理而非缺一个编排器:已有冲锋型的团队 / 编排工具,缺的正是「记账、验收、度量、复盘」这一层——agent-board 补上它。

安装

前置条件

  • DeepSeek Harness(dsh)已安装并能正常启动:dsh --profile web
  • Node.js ≥ 22(与 dsh 运行时一致)

版本兼容性(先按宿主选插件版本)

宿主 DSH 版本 · 应装插件版本 · 原因

≥ 0.2.0(含 rc) · ≥ 1.3.0(必须) · 0.2.0 起宿主在启动/安装时强制校验 peerDependencies,区间不含 0.2.0 的包直接拒绝激活(路由不挂载、面板不出现)。1.3.0 声明 ^0.1.7 \ · \ · 0.2.0-rc.2 \ · \ · ^0.2.0——注意 semver 预发布不命中宽区间,0.2.0-rc.2 必须显式枚举。运行时 API(subagents/systemPrompt/agents/uiWorkspace.openSession/sessions/v4 日志格式)在 0.2.0 全部兼容,已过 0.2.0-rc.2 实测(E2E 23+8 断言全绿)

0.1.7 ~ 0.1.7-x(含 rc) · ≥ 1.2.2(必须) · 0.1.7 会话日志升级为 format v4:插件消息 source.kind 必须是生产者自有 kind。1.2.1 及更早会在任务完成/阻塞回执落盘时抛 SessionFormatError: format v4 message requires a producer-owned source kind,并连带使主窗口当前轮次失败(表现为「本轮运行失败」);同时「跳转会话」因宿主移除 sessions.open 而失效(控制台 sessionsSvc.open is not a function),卡片活动心跳读不到 v4 日志(session.v4.jsonl.zstd)

0.1.5-rc.1 ~ 0.1.6 · ≤ 1.2.1 · 1.2.2 起按 0.1.7 协议编写(v4 source kind、uiWorkspace.openSession 跳转),旧宿主未做回归验证,建议停留 1.2.1

当前版本 v1.9.6 已在宿主 0.2.1-rc.5 全量实测:775 断言全绿 + 拆解官/力度路由/健康嗅探/帧活性挂死检测真机 E2E 全链。
dsh plugin --profile web add dsh-agent-board@latest   # 0.1.7+/0.2.x 宿主(推荐)
dsh plugin --profile web add dsh-agent-board@1.2.1    # 0.1.5/0.1.6 宿主
从 ≤1.2.1 升到 ≥1.2.2 必须重启 DSH(host 端代码在启动时加载;1.2.2 之前的老版本还有一个路由残留 bug:禁用/启用热重载会撞 duplicate exact route,只能重启恢复,1.2.2 已修复)。

从插件市场安装(推荐)

已发布至 npm 官方 registry(dsh-agent-board):

dsh plugin --profile web add dsh-agent-board
# 重启 dsh 生效
dsh --profile web

从源码安装(开发/调试)

git clone https://github.com/PPawnsir/task-board-plugin.git
dsh plugin --profile web add <本仓库绝对路径>/packages/dsh-agent-board
# 重启 dsh

验证安装

1. 启动日志无 plugin tree failed to load

2. 打开任意会话,标题栏出现 智能看板 按钮(Lucide 线性图标)

3. RPC 路由可用:

curl -X POST http://127.0.0.1:3080/dsh-agent-board \
  -H "Content-Type: application/json" \
  -d '{"method":"get-tasks","args":{"sessionId":"<sessionId>"}}'

返回 JSON 即正常;405 空 body 说明路由未挂载。

升级

# 市场版
dsh plugin --profile web add dsh-agent-board@latest
# 源码版
git pull
# 两者都需重启 dsh

卸载

dsh plugin --profile web remove dsh-agent-board
# 重启 dsh
看板数据存在 ~/.dsh/tasks-<sessionId>.json,卸载不删数据。
- 归属:看板文件按会话分文件,同时在文件里记 ownerCwd(创建该看板的会话工作区路径,取不到则省略该字段)——~/.dsh/tasks-*.json 每个文件是一块看板,list-boards 全局视图可看到本机所有板。
- 重启继承:DSH 重启后同一会话的根 id 可能漂移,此时新 id 没有对应文件——若同工作区(ownerCwd 严格相等)存在唯一「原主已不在 agents.roots()」的看板,则自动继承:文件重命名为新 id、文件内 ownerSession 改写为新 id、console.error 留一行 [task-board] 继承看板 <旧sid> → <新sid>;多个候选一律不自动接管(记一行日志后按空板处理,防误合并,旧板仍可在 list-boards 全局视图里看到)。
- 写盘保护:落盘走 临时文件+rename 原子写(EPERM/EBUSY 退避重试);瞬时读失败/坏文件隔离后返回的空板禁止回写(防一个"读不到"的瞬间把看板覆成空板),坏文件隔离为 .corrupt-<时间戳> 留档不丢数据。

数据安全

看板数据(~/.dsh/tasks-<sessionId>.json)是本插件唯一的持久化状态,按三层防线保证数据不丢、事故可见:

  • 原子写盘(防撕裂写):落盘一律「写临时文件 → fsync → rename 覆盖目标」——rename 在同分区是原子的,进程在写盘中途被强杀时磁盘上最多残留一个 .tmp 残件,看板本体永远不会是截断的半个 JSON。Windows 上 rename 覆盖已存在目标原生支持(实测直接覆盖成功),仅当目标被并发读句柄/Defender/索引器瞬时占用(EPERM/EBUSY/EACCES/ENOTEMPTY)时做有限退避重试;重试耗尽仍失败则降级「先 unlink 目标再 rename」并留日志——绝不丢整板。
  • 腐坏隔离可见化(不再静默):加载时若 JSON 解析失败(撕裂写/重启打断导致文件中部夹杂另一版本残片),坏文件改名 .corrupt-<时间戳> 留档隔离(防反复 poison),同时在「架构健康」区亮一条 err 级红条(healthHints)提示「看板数据文件腐坏已隔离,历史在 .corrupt-<ts>,可联系恢复」,并向 owner 会话推送通知——数据不丢,也不再静默从空板重启。
  • 自动 salvage(截断抢救):隔离前先尝试抢救——从首字节起截到第一个完整 JSON 值(JSON.parse 报错 position 截断法,与人工恢复同款手法),成功则以抢救出的完整板为底自动写回继续(healthHints 红条记「已抢救保留 N 张卡,丢弃撕裂残片」),失败才回退空板。两种情况下原始文件都留档 .corrupt-<ts>,可随时人工恢复。

功能总览

核心能力一页速览(★ 为 v1.7.5–1.8.4 新栈;☆ 为 v1.9.0 新栈):

  • 看板:六列状态流、拖拽 / 多选批量 / 文本·优先级·标签筛选、归档留档、会话隔离
  • 派发:一次性 Worker / 独立 Verifier、依赖调度(DFS 环检测)、touches 文件级排他、可续跑 Worker、Team 托管、spawn 落闸锁内重验(spawnGateOk:claim 占位与落闸决策读同一把锁的同一份快照,terminate/dependsOn 后补 落在 spawn 在途窗口即弃权——竞态与后补依赖双双根治)、高优干预分态(intervene 无活跃 run 时区分「续跑窗口,干预随续跑注入」与「真无 run」,返回体带 state 字段)、建卡派发预警(将自动派发时 lintWarnings 瞬态提示「约 1s 内被领取,想占位请 draft:true」)、宿主 spawn API 双兼容(v0.2.1 宿主把 subagents.start/startContinuable 统一重构为 startActivation(spec)——能力探测自动选路:新契约按 delivery 语义分发(continuable=parent 结算留言 / 一次性=caller 只回 result),Activation 适配旧 run 形状下游零改动;老宿主逐字走旧双路径)+ continuable 结算兜底臂(activation.result 在子会话被宿主拆除时落定即接失败结算——rate-limit/模型崩溃的死子不再挂到硬超时)
  • 智能调度 ☆:拆解官工作流(自然语言需求卡 → task_decompose 拆解官先调研后提案(outputSch

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:42,最后更新 2026-11-05

链接

GitHub · Homepage · npm

同类插件