dsh-taskboard

13Star6Fork0Issue0Watching

DSH 任务看板插件:五列看板协作 + 10 个 taskboard_* agent 工具,支持任务挂项目、定时执行、worktree 代码隔离和结构化验收。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
Apache-2.0
分支
main
dsh-plugin

安装

$ dsh plugin --profile web add dsh-taskboard

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 cloader/dsh-taskboard:先查看仓库 https://github.com/cloader/dsh-taskboard.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

为 DeepSeek Harness (DSH) Web GUI 加一套五列任务看板:人在浏览器建卡与验收,AI agent 通过 10 个 taskboard_* 工具在终端会话里认领、执行、回填结果,整个过程双向同步并支持定时与 Git Worktree 代码隔离。

核心能力

  • 五列看板 + SSE 实时刷新:待规划 / 待办 / 进行中 / 待验收 / 已完成 五列(加受阻标记与已删除/已归档次级列),任何一边的写动作通过 SSE 立刻推另一端,看板免手动刷新(src/shared/protocol.ts:31-44 / src/host/routes.ts:908-909)
  • 任务挂项目(workspace)边界:每个任务绑定一个 DSH workspace,agent 只能在自己所属的项目内认领/执行别人的任务,跨项目不可抢;认领后该会话持有锁,其他人不能移动(src/host/protocol.ts:71-77 / src/host/tools.ts:208-216 / 552-578)
  • 10 个 taskboard_ agent 工具*:查板 / 读卡 / 建卡 / 改卡 / 移卡 / 评论 / 列评论 / 软删 / 验收清单 / 执行报告 — 任何 agent session 都可调用,写操作全部用 ifVersion 乐观并发(src/host/tools.ts:280-866)
  • 手动或定时执行:每一次执行在任务所属项目中创建全新干净的 session,可固定模型与 preset;任务可设 cron 表达式由 host 进程每分钟扫描触发,关浏览器照常跑(src/host/execution.ts:262-426 / src/host/scheduler.ts:46-98)
  • Git Worktree 代码隔离:默认每次执行在 .dsh-worktrees/<任务ID>/ 独立 worktree + task/<标题>+<任务ID> 分支上跑,结算采集 commits / 未提交修改 / diff stat;非 git 项目自动降级到原目录(执行记录注明原因),验收时一键 --no-ff 合并(src/host/execution.ts:480-526 / src/host/git.ts:107-298)
  • 验收清单 DoD 与结构化报告:建卡时定 ≤30 条验收项,agent 用 taskboard_checklist 边干边勾(带证据 note),用户验收卡片「☑ n/m」与未勾红色高亮;agent 用 taskboard_execution_report 提交摘要/改动文件/自验/产物/剩余风险(src/shared/protocol.ts:615-656 / src/host/tools.ts:697-866 / README.md:24-26)
  • 任务模板 + JSON 导入导出:内置 Bug 修复 / 发布检查 / 例行巡检 三套模板,可把任意任务「存为模板」;顶栏「⬇ JSON」整册备份,「⬆ 导入」支持干跑预览(新增 / 覆盖 / 无效分类),整册替换前自动备份(src/host/templates.ts:15-56 / README.md:26-27)

技术实现

  • 语言: TypeScript(ESM,双构建:host + browser),浏览器侧用 React 18 + JSX(src/client/styles.ts / src/client/board-mount.tsx)
  • 关键依赖: @deepseek-ai/cordis (^4.0.1,宿主框架)、@deepseek-ai/dsh-agent / -workspace / -tools / -system-prompt / -host-webserver (^0.1.0-rc.6,type-only 引入,不进构建产物)、react ^18.3.1(src/client 浏览器侧)
  • 架构模式: cordis 双面插件 — Node half (src/index.ts) 注入 tools + workspaceRegistry + agents + webServer,注册 10 个 taskboard_* 工具、/dsh-taskboard/* JSON API、SSE 事件流、执行服务、定时调度器;Browser half (src/client/index.ts) 等 connection 服务就位后注入侧栏入口与看板视图;bundle 由 cordis.patch.yml 注入一行 plugin row,package.json#dsh.bundle.patch 声明 patch 路径
  • 入口文件: src/index.ts(host 半,导出 name = 'dsh-taskboard'inject = ['tools','systemPrompt']) / src/client/index.ts(client 半,导出 name = 'dsh-taskboard/client'inject = ['connection']) / cordis.patch.yml(bundle 层声明)

适用场景

你希望让 agent 在 DSH 里接手一连串有结构的工作——例如「每周一例行巡检」「一批 Bug 修复」「发布前 checklist」——而不是让用户在聊天框里一次次手动开新会话。它适合:团队用 DSH 但苦于「哪个会话在跑什么、做了多少、怎么验收」没有统一视图;需要给 agent 配上项目边界与并发控制;以及希望把会话记录、commit、清单、报告合并到一张可验收的卡上。Worktree 隔离特别适合多人/多 agent 并行改同一仓库不互相打架。日常临时对话不需要它。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness (DSH)>= 0.1.0-rc.6devDependencies 锁了一组 @deepseek-ai/dsh-{agent,workspace,tools,system-prompt,host-webserver} ^0.1.0-rc.6(package.json:57-61);type-only 引入,宿主升级到对应版本才能用
Node未声明源码用 node:fs/promisesnode:child_process.execFilenode:os.homedirnode:path.join 等内建 API(src/host/store.ts:9, src/host/git.ts:171-179, src/host/sdk.ts:22-23)
平台macOS / Windows / Linux仅跨平台调用系统命令;child_process 调用 git 时用 windowsHide: true(src/host/git.ts:176)
原生模块仅 Node 内建 node:fs/promises / node:child_process / node:os / node:path;无 native binding
外部命令 git任意版本worktree 隔离需要 git;非 git 项目或 git 不在 PATH 时自动降级到原目录(src/host/git.ts:107-111, 213 / src/host/execution.ts:480-526)
@deepseek-ai/cordis^4.0.1peer 框架,由宿主 DSH 提供

安装方式

dsh plugin --profile web add dsh-taskboard

提示:官方 @deepseek-ai/dsh-* 包只写进 profile 的 bundles 列表,不要 plugin add 进 dependencies,否则会出现 SDK 双实例遮蔽(README.md:50)。

配置项

配置类型说明默认值
DSH_TASKBOARD_MAX_CONCURRENT整数环境变量同时执行的任务上限;满了之后手动触发直接报错,定时任务留到下一窗口重试3
DSH_HOME路径环境变量改写台账与模板文件的根目录($DSH_HOME/dsh-taskboard.jsondsh-taskboard-templates.json~/.dsh
ATB_TRACE字符串环境变量1 后所有 taskboard_* 工具的入参/出参会打到 stderr,方便排查协议;不影响正常行为未启用
任务标题长度输入限制建卡/改卡时标题 1..200 字符,超长直接拒绝最多 200 字符
执行 Prompt 长度输入限制任务 prompt 最多 8000 字符最多 8000 字符
验收清单条数输入限制每张卡最多 30 条验收项;每条最多 200 字符;单次 checklist add ≤10 条30 / 200 / 10
执行记录保留内部策略每任务在台账里保留最近 20 条执行记录,超出的在每次落盘时被修剪20

本地文件位置:台账 $DSH_HOME/dsh-taskboard.json,模板 $DSH_HOME/dsh-taskboard-templates.json。整册替换导入前会自动写 ledger.backup-<时间戳>.json(src/host/store.ts:112-117 / src/host/templates.ts:11)。

常见问题

Q: 任务可以拖到任何列吗?

A: 不能任意拖。看板内置状态机:待规划→待办/已取消、待办→进行中/待规划/已取消、进行中→待验收/待办/已取消、待验收→进行中/待办/已完成/已取消、已完成→已归档。正在执行(被会话持有)的任务拖动会被拦,弹窗提示哪个会话在执行(src/shared/protocol.ts:50-68 / src/client/controller.ts)。

Q: 为什么 agent 在执行中我点别的对话,看板的卡片会被自动收起来?

A: 这是侧栏入口的「让位」语义:点在侧栏的真会话行或新会话按钮,会让任务看板临时关掉;点看板入口本身或卡片则会收回让位。0.4.1 修过一处入口嵌在 newSession 容器内时 click 事件被反复 toggle 的竞态(README.md:70-71)。

Q: 「✓ 完成」按钮一键通过验收,为什么有时候要求二次确认?

A: 当任务有验收清单但没全勾时,按钮会二次确认并显示未勾项数。代码层面禁止 agent 把任务移到「已完成」——清单全勾也不等于完成,必须由用户在界面点(src/host/protocol-text.ts:28 / README.md:23-24)。

Q: 续跑(↻)和立即执行有什么区别?

A: 立即执行永远从主分支 HEAD 起一个全新 worktree;续跑保留上次用的 worktree 和分支(含上次未提交修改和提交),基线取当前 HEAD,证据只统计本轮新增。失败/取消也留证据(提交与未提交照样采集)。续跑失败原目录是否降级由当前的隔离开关决定(src/host/execution.ts:138-146, 320-335 / src/shared/api.ts:100 / README.md:96-105)。

Q: 我用 DSH Desktop 装了但看不到看板,怎么办?

A: 0.4.2 修过 DSH Desktop Web shell 移除 data-pane 属性导致的挂载点失败——已用 '[data-pane="conversation"], [class*="centerCol"]' 双选择器兜底。理论上 0.4.2+ 装完重启即可;如果你仍在用更早版本,请升级到最新版(README.md:65-66)。

Q: 怎么把数据搬到另一台机器?

A: 顶栏「⬇ JSON」导出整册(自定义格式,含 ids/版本号),新机器上「⬆ 导入」选文件先看干跑预览(新增 / 覆盖 / 无效分类),再选「合并」或「整册替换」。整册替换会先自动备份再写入,避免误操作;导出的 JSON 即备份格式可直接恢复(README.md:26 / src/host/routes.ts:774-844)。

上手难度

进阶 — 默认能直接用五列看板和手动触发,但要把 worktree 隔离、定时执行、模板、agent 工具体系都跑顺需要理解 DSH 的「项目(workspace)」概念、cron 五字段语法与 Git Worktree 基本原理;正常使用照着弹窗操作即可,深入配置照 README 走。

已知问题与限制

  • Worktree 隔离是协作约定而非沙箱:执行会话拥有完整工具权限,隔离依赖分支约定,不适用于运行不可信代码的场景(README.md:38)。非 git 项目或 git 不可用时自动降级到原目录,执行记录里写明降级原因(src/host/execution.ts:480-526)
  • 执行记录与 diff 封顶:每任务保留最近 20 条执行,台账不会被定时任务无限撑大;commit 证据最多 50 条、未提交修改最多 100 行;diff 128KB / 2000 行封顶,超出标注截断(src/host/protocol.ts:401-412 / src/host/git.ts:37-66)
  • 预设(preset)解析失败会直接落空执行:执行会话按任务的 presetId 组合创建,preset 不存在或损坏时本次执行直接失败、原因写进执行记录,任务退回待办——不会产出半组合的会话(src/host/execution.ts:350-358 / README.md:88-89)
  • DSH Desktop shell 兼容:早期 DSH Desktop 的 web shell 已移除 data-pane,0.4.2 起挂载选择器已兼容 class*="centerCol" 兜底;如果你在 0.4.2 之前装又看不到看板,请升级(README.md:65-66)
  • 并发上限满载时定时任务会"挤":满了之后定时任务的到期窗口被保留,下一分钟再试,不会补跑;如果你的任务重且间隔短,建议拉低频率(src/host/scheduler.ts:77-86 / README.md:135)
  • 同仓库 git 操作在进程内串行:同一仓库的建/删 worktree / 合并 / 删分支串行执行,避免 git index.lock 竞争(src/host/git.ts:195-205 / README.md:97)
  • agent 工具调用追踪未默认开启:要排查 agent 协议问题需要设 ATB_TRACE=1,否则 tools 调用除错误外不打日志(src/host/tools.ts:261-275)

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/cloader/dsh-taskboard)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录