본문으로 건너뛰기
P

task-board-plugin

ppawnsir/task-board-plugin

DeepSeek Harness 스마트 칸반: 작업 카드 + 일회성 Worker/Verifier 파견 + 의존성 스케줄링 + 파이프라인 단계 구분 + Team 모드(모호한 사항을 메인 창에 보고하여 판정).

설치

dsh plugin --profile web add github:ppawnsir/task-board-plugin

README

Task Board Plugin for DeepSeek Harness

npm license

智能看板插件 — Agent 自主任务驱动开发:看板管理 + 一次性 Worker/Verifier 派发 + 依赖调度 + Team 模式。

安装

前置条件

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

从插件市场安装(推荐)

已发布至 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,卸载不删数据。

功能总览

看板 UI

  • 会话标题栏「智能看板」按钮 → 顶部抽屉面板(看板 / 团队 / 仪表盘三视图)
  • 六列状态流:草稿 → 待办 → 进行中 → 验证中 → 已完成 → 阻塞
  • 拖拽流转、多选批量操作(带一步撤销)、文本/优先级/标签筛选
  • 归档区:时间倒序 + 排序选择器 + 纵向滚动
  • Esc 逐级关闭(详情 → 看板 → 面板)
  • 全部结构性图标为 Lucide 线性 SVG(currentColor 跟随主题,浅深色自适应)

任务模型

draft → pending → in-progress → verifying → resolved → archived
                     ↓              ↑
                  blocked ←────── reject
  • 草稿态(draft):创建时可先进草稿,补全描述/依赖后再发布,杜绝"半成品被派发"
  • 依赖调度dependsOn 声明依赖(DFS 环检测),依赖全部完成后才会被派发,串行链路自动编排
  • 管线分档full(执行+验证)/ work(只做不验)/ direct(不进池,主窗口直接处理),创建时按规则自动分类、可手动覆盖
  • 硬性验收acceptance 字段写验收脚本命令,Worker 必须实际运行、Verifier 必须独立复跑
  • 子任务:父子层级 + 上下文继承 + 父任务自动流转 + 级联归档

一次性派发(v74 去池化)

  • 每个任务 spawn 一个一次性子代理(Worker/Verifier),上下文全量注入 prompt,做完即销毁——无常驻池、无池化状态残留
  • Worker/Verifier 均可配置异构模型(⚙️ 弹出层下拉选择,空 = 继承父级),避免同源盲点;模型故障自动熔断回退父级模型
  • 孤儿回收:子代理 run 结束/丢失超 2 分钟 → 任务自动回待办重派
  • 看门狗:运行超时且事件流停滞 → 标记"疑似卡死"(不自动杀,裁决权交主窗口/用户)
  • 歧义上报:Worker 遇到歧义不猜测,上报等主窗口裁决(任何模式下都通知);裁决后新 Worker 携带裁决答案接手
  • 手动派发:详情页「派发 / 派发验收」按钮可随时手动触发单任务派发(auto 模式补派、manual 模式主通道)
  • 会话隔离:看板按会话分桶,多会话互不干扰

手动 / 自动派发模式

🤖 自动👤 手动
Worker 派发poolCycle 自动调度(并发上限可配)主窗口自行 claim 处理,或详情页手动「派发」
Verifier 派发自动自动(主窗口手动做完的 full 档任务也会自动验收)
孤儿回收开启开启

Team 模式开启时强制自动派发(防止"引导派发 + 手动模式"死锁组合)。

Team 模式

开启后(Team 开关):

  • 主窗口 system prompt 注入派发引导(提示词层面建议实质性改动走看板,不硬拦截)
  • 引导含上下文书写提示:子代理是全新会话、无会话记忆,description 写不够会自行调研跑偏
  • Worker 歧义自动上报主窗口聊天流,等待裁决
  • 任务完成/阻塞时主窗口收到批量聚合回执(45s 窗口或满 5 条聚合,等主窗口空闲再发,不打断对话)

13 个 Agent 工具

类别工具
任务管理task_create / task_list / task_context / task_update / task_claim / task_resolve / task_verify / task_archive
池治理task_terminate / task_intervene / task_arbitrate
子代理上报board_report / board_verdict

管理工具仅主窗口可用(子代理调用会被拒绝);board_report/board_verdict 是子代理的专用上报通道。

仓库结构

└── packages/dsh-agent-board/     # 插件全部源码(直接维护,无构建步骤)
│   ├── index.mjs                 #   host 端:IO 编排(工具/RPC/一次性派发引擎接线)
│   ├── lib/core.mjs              #   纯逻辑核心:状态机/依赖/分类/prompt/解析(无 IO,可单测)
│   ├── lib/client.js             #   client 端(ModuleLoader 包装,图标统一走 ICONS + ic())
│   ├── test/core.test.mjs        #   单元测试(node --test,30 例)
│   ├── package.json              #   dsh.bundle.patch + dsh.client 元数据
│   └── cordis.patch.yml          #   bundle 挂载行
└── docs/
    ├── PRD.md                    # 产品需求文档
    ├── PACKAGING.md              # 打包/安装踩坑记录(link 依赖、单例隔离等)
    ├── icon-style-guide.md       # 图标风格指南(Lucide 线性 SVG + emoji 分界)
    └── REGRESSION-v59.md         # 端到端回归测试记录

v68 起拆除了"动态源码 → 静态包"的转换层(build-pkg.cjs):插件已稳定, 双形态维护的复杂度大于收益,包内文件即唯一源码,改完重启 dsh 即生效。

v74 起去池化(一次性派发)+ 纯逻辑抽到 lib/core.mjs,跑 node --test packages/dsh-agent-board/test/ 即可验证状态机/依赖/派发决策, 不用重启 dsh 人肉回归。

文档

发布新版本(维护者)

tag 驱动,GitHub Actions 自动发布到 npm(.github/workflows/publish.yml)。两种打 tag 方式都支持:

方式 1:命令行

cd packages/dsh-agent-board
npm version patch          # 或 minor / major——改 package.json
git add -A && git commit -m 'release: vX.Y.Z' && git tag vX.Y.Z
git push --follow-tags     # tag 推送触发流水线

方式 2:GitHub 网页(Releases 页)

  1. 先把 packages/dsh-agent-board/package.jsonversion 改成目标版本并合入 main(网页直接编辑即可)
  2. 仓库页 → ReleasesDraft a new releaseChoose a tag → 输入 vX.Y.ZCreate new tag(target 选 main)
  3. Publish release —— 触发发布流水线
  • 流水线会拒绝与 tag 不一致的 package.json version(如 tag v1.0.1 但包里是 1.0.0),防止版本错位
  • 需在仓库 Settings → Secrets and variables → Actions 配置 NPM_TOKEN (npm granular access token:bypass 2FA + direct publish)
  • 日常 push / PR 有 test.yml 跑语法检查 + 30 例单测
  • 本地手动发布仍然可用:npm publish --registry=https://registry.npmjs.org(本机默认源是镜像时必须显式指定)

License

MIT

관련 플러그인