跳到正文
dsh-market 浏览插件 GitHub EN

PPawnsir/task-board-plugin#dsh-agent-board

DeepSeek Harness 会话任务看板:主窗口把任务派发给一次性 Worker/Verifier 子代理执行与验收,支持依赖调度、管线分档、歧义上报裁决与预研上下文注入。

Star 数 ★ 5 分类 工作流与自动化 收录于 2026-09-18 npm dsh-agent-board

安装

在 DeepSeek Harness 里通过 dsh-market 安装

dsh plugin --profile web add dshmarket

或使用命令行

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

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。

README

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

安装

前置条件

  • 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
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,卸载不删数据。

功能总览

看板 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.json 的 version 改成目标版本并合入 main(网页直接编辑即可)
  2. 仓库页 → Releases → Draft a new release → Choose a tag → 输入 vX.Y.Z 选 Create new tag(target 选 main)
  3. 点 Publish release —— 触发发布流水线
  • 流水线会拒绝与 tag 不一致的 package.json version(如 tag v1.0.1 但包里是 1.0.0),防止版本错位
  • README 单一来源:本文件(根 README)即唯一来源;发版前在 packages/dsh-agent-board 跑一次 npm run sync-readme 同步进包(npm 页面展示的是包内 README)
  • 需在仓库 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

内容来自项目 README(GitHub)↗

评论

评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。