dsh-taskboard
DSH Web GUI 智能体优先的任务看板插件,支持任务认领、独立会话执行、Git 工作区隔离及定时调度。
AI 分析
核心用途是提供人机协作的任务看板,实现任务创建、Agent 自动认领执行与人类验收的闭环。适合需要管理复杂开发任务流的团队或个人。
安裝
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cloader/dsh-taskboard說明文件
閱讀完整 README ↗dsh-taskboard
DeepSeek Harness 的任务看板插件:人建卡、agent 认领执行、人验收。任务挂项目(workspace)、可指定模型、支持手动与定时执行,全流程双向协作。
界面


核心功能
看板协作
- 五列看板(待规划 / 待办 / 进行中 / 待验收 / 已完成)+ 受阻标记,SSE 实时刷新
- 任务挂项目:认领校验会话归属,跨项目不可抢
- 紧急度三色(紧急/一般/不急)筛选与色条;搜索(标题/ID)与列内排序,筛选排序持久化
- 列头状态色圆点:待规划灰 / 待办蓝 / 进行中橙 / 待验收紫 / 已完成绿 / 已删除红
- 新建/编辑弹窗:项目、模型、紧急度、执行方式、cron 实时校验与下次运行预览、执行隔离开关
- 详情面板:状态流转(done 仅限人工)、agent/用户评论流、执行记录(倒序,最新在最上;会话 ID 点击跳转打开该执行会话;已删除/已归档分开提示)、停止执行、Worktree 隔离块(分支 / 提交 / 改动统计 / 合并与清理)
- 待验收列卡片快捷操作:「✓ 完成」一键验收、「✗ 退回」退回待办并可附退回原因(agent 开工前会读)
Agent 工具(taskboard_*)
- 8 个工具:查板 / 建卡 / 改卡 / 移卡 / 评论 / 软删除,任何会话可用
- 代码级协议闸:agent 永远移不到 done;任务被持有时不可抢占;model/execution 对 agent 只读
执行
- 手动执行或 cron 定时:每次执行在任务项目内新建全新会话(干净上下文、可指定模型、可指定 preset);开场两条消息同一回合送达——插件上下文行携带任务框架与交接协议(含失败回退路径),卡片内容(提示词或标题+描述)以正常用户消息呈现
- 任务级 preset(0.3.3):新建/编辑表单「执行模式(preset)」下拉——执行会话按该 preset 组合(工具集与人设由此而来,对齐 GUI 新会话的组合方式);默认预选部署默认 preset(本部署即标准模式),也可选「跟随部署默认」;preset 损坏时执行直接失败并把原因写进执行记录(不产出半组合会话);随时可改,下轮执行生效
- Git Worktree 隔离执行(0.3.0):任务级开关(默认开、记住上次选择),每次执行在
/.dsh-worktrees/独立 worktree 上进行,分支task/+(首次创建后定死,改名不改);执行会话归属项目根目录(分组、工具与文件沙箱完整可用——DSH 要求会话 cwd 即工作区根,0.3.2 修正),worktree 路径与边界纪律在开场指令中明确下达;结算自动采集提交列表 / 未提交修改警告 / 改动统计;非 git 项目或 git 不可用时自动降级原目录执行(执行记录注明降级原因,台账与执行主流程永不因 git 失败而失败);验收时详情页一键--no-ff合并到主工作区(主区脏或冲突原样报告,不自动解决)、删除 worktree(有未提交修改时拒绝)、可选删分支;支持「↻ 续跑」在现有 worktree/分支上继续执行(保留上次改动与提交)Worktree 隔离是协作约定而非沙箱:执行会话拥有完整工具权限,隔离依赖分支约定,不适用于运行不可信代码的场景。
- host 侧调度:关掉浏览器照常触发;错过窗口跳过不补跑
- 乐观并发(ifVersion)+ 完整归因(谁改的、哪个会话执行的)
- ⚙ 健康诊断:台账基本项 + 遗留 worktree(台账无主但目录存在)一键清理
安装
dsh plugin --profile add dsh-taskboard # npm(推荐,预构建免授权)
dsh plugin --profile add github:cloader/dsh-taskboard # GitHub 源
官方
@deepseek-ai/dsh-*包只写进 profile 的bundles列表,不要plugin add进 dependencies(避免 SDK 双实例遮蔽)。
开发
npm install && npm run build # host ESM + client CJS 双构建
npm test # vitest 116 项
node tests/manual-git-e2e.mjs # 真 git 端到端手测(worktree 全链路 + 续跑)
node scripts/screenshot.mjs # 重新生成 img/ 截图(需本机 Edge)
升级日志
0.3.3
- 修复执行会话拿不到工具(非标准模式):0.3.0 起部署引入 preset 体系后,工具不再是全局注册,而是各 preset 组合在会话创建时挂载(GUI 建会话走 apiproxy 的 composeAgent → presets.mount)。我们的执行服务此前直接 agents.create,不挂任何组合 → 会话无工具。现对齐该链路:执行会话按 preset 组合创建,
agentPreset记入会话头 - 任务级 preset 字段:创建任务时可选「执行模式(preset)」,默认预选部署默认 preset(本部署即标准模式)——即按你的决定「默认标准模式」;可切任意 preset(如梁神模式)或选「跟随部署默认」(不落字段,随部署默认变);编辑随时可改(每轮执行现组合,无锁定);复制任务携带;
taskboard_create增presetId参数;详情页显示 preset chip - 坏 preset 防护:preset 解析失败(不存在/损坏)→ 执行直接失败、原因写入执行记录、任务退回待办——不产出半组合会话(与 apiproxy 回滚语义一致)
- preset 目录用来自
agentPreset.list连接 RPC(无 roster 或离线时下拉隐藏,行为回落到裸组合);测试 111 → 116 项
0.3.2
- 修复 worktree 执行会话脱离项目组、工具不可用:0.3.0–0.3.1 把执行会话 cwd 指向 worktree 子目录,而 DSH 的会话模型要求 cwd === 工作区根目录(全等)——子目录导致会话无法挂入项目组(显示「未分组」),且文件沙箱边界与相对路径解析全部失效(agent 无法创建文件)。现改回:会话 cwd = 项目根(分组、工具、沙箱完整可用),worktree 绝对路径与边界纪律(命令 workdir 指向 worktree、文件读写用绝对路径、禁改主工作区其它文件、提交到任务分支)在开场框架行中明确下达。git 隔离与证据采集不受影响
0.3.1
- ↻ 续跑:详情页新增「续跑」——保留现有 worktree 与分支原状(上次的提交和未提交修改都在),在其上继续执行;基线取 worktree 当前 HEAD,证据只统计本轮新增提交。默认「立即执行」仍为全新基线(重置分支到主区 HEAD)
- 同仓库 git 操作互斥:同一仓库的建/删 worktree、合并、删分支在进程内串行执行,消除并发隔离执行之间的 index.lock 竞争
- 失败/取消也留证据:turn 出错或用户停止时,已产生的提交与未提交修改照样采集进执行记录(原先只在成功结算时采集)——中断的半成品可凭记录判断是否续跑
- 执行记录证据封顶:提交最多保留 50 条、未提交修改最多 100 行(均记录总数),超大改动不再撑爆每次全量重写的台账
- 合并空跑检测:分支没有领先主工作区的新提交时直接提示「无需合并」,不再产生假的「已合并」系统评论
- 物理清除连带清理:purge 任务前先检查 worktree——有未提交修改拒绝并列出文件;通过后连带删除 worktree 与任务分支
- 降级语义细化:降级原因区分「git 不可用(未安装/不在 PATH)」与「当前项目不是 git 仓库」;降级运行的开场提示明确警告会话正在主项目目录工作(先 git status、改动集中、结束说明改动文件)
- 全新检出提示:全新 worktree 的开场提示告知不含 node_modules/构建产物,构建测试前可能需重装依赖
- 诊断面板增强:新增 gitignore 建议列表(git 项目未忽略
.dsh-worktrees/一目了然,仍不自动修改);「悬挂执行中」更名为「执行中」 - README 注明 Worktree 隔离是协作约定而非沙箱;测试 97 → 111 项
0.3.0
- Git Worktree 隔离执行(旗舰):并发执行互不污染代码,验收即审分支
- 任务级隔离开关:新建表单「执行隔离」(默认 Worktree、记住上次选择;非 git 项目自动禁用并提示);
taskboard_create增isolation参数;复制任务携带;首次执行前可改、开始后锁定 - 执行链路:每次全新 worktree(
git worktree add --force到固定路径.dsh-worktrees/,固定分支task/+,标题清洗+截断、空标题回退纯 ID、改名不改分支);执行会话 cwd 指向 worktree;开场框架行引导 agent 把改动提交到该分支 - 结算采集:提交列表(hash+主题)、未提交修改警告、改动统计与文件数——「执行记录 ↔ commits 关联」并入本轮
- 验收操作(详情页):⇥ 合并(
--no-ff,主区脏/冲突原样报告且自动merge --abort复原)、🗑 删除 worktree(有未提交修改拒绝,可选连分支删除)、保留分支退回继续修改 - 安全规则:显式关闭 = 全程零 git 调用;非 git 项目 / git 不可用 / 超时全部自动降级原目录(isolationNote 注明原因,fail-soft:台账与执行永不因 git 失败而失败);合并的干净检查豁免插件自有的
.dsh-worktrees/目录;所有 git 操作带超时(查询 2s / 结构操作 15s) - host 新模块
src/host/git.ts:窄接口 GitFace(detect/prepare/collect/merge/remove/deleteBranch),exec 层可注入(测试零真 git);workspaces 路由下发 git 检测结果(60s 缓存);启动时对未忽略.dsh-worktrees/的项目提示 gitignore 建议(不自动改)
- 任务级隔离开关:新建表单「执行隔离」(默认 Worktree、记住上次选择;非 git 项目自动禁用并提示);
- ⚙ 健康诊断:台账基本项(修订号/任务数/悬挂执行中)+ 遗留 worktree 列表(台账无主但目录存在)一键清理(未注册目录 fs 兜底,有未提交修改仍拒绝)
taskboard_get详情输出隔离与分支信息;测试 67 → 97 项
0.2.2
- 待验收快捷操作:待验收列卡片上直接「✓ 完成 / ✗ 退回」,退回可附原因(可留空),退回与评语一次原子提交(移卡失败不会产生孤儿评论)
- 非法状态流转的 HTTP 状态码由 500 修正为 400
0.2.1
- 调整任务发起时的提示词
0.2.0
- 看板效率:顶栏新增搜索(标题/ID,大小写不敏感)、列内排序(默认/最近更新/紧急度/创建时间);筛选与排序按 localStorage 持久化(搜索不持久)
- 侧边栏状态条:「任务看板」入口同行右侧显示
待办|进行中|待验收计数(如0|1|2),三个数字分别着蓝/橙/紫状态色,悬停提示含义与实时数字,数字变化时上下滚动动画(增长上滚、减少下滚,尊重 prefers-reduced-motion) - 执行结算闭环:执行会话结束但未按协议交接(没评论/没移待验收)时,系统自动补评论并移入待验收——任务不再静默挂在进行中;执行失败也留系统评论
- 认领租约:认领超 30 分钟未动的任务,卡片与详情显示「⏱ 认领超时」;详情页新增「🔓 释放认领」一键退回待办
- 执行记录保留上限:每任务保留最近 20 条执行记录(详情页显示「+N 已清理」),定时任务的台账不再无限膨胀
- 全局并发上限:同时执行的会话数默认上限 3(
DSH_TASKBOARD_MAX_CONCURRENT可调);调度器满载时保留到期窗口不烧掉,下个 tick 重试 - 执行 Prompt 模板变量:
{{lastExecution}}(上次执行结果)、{{lastComments}}(最近 3 条评论)——巡检类定时任务能看到上次跑出了什么 - 复制任务:详情页「⧉ 复制」一键克隆全部配置为新卡
- 导出:顶栏「⬇ JSON」全量台账备份、「⬇ CSV」任务清单(带 BOM,Excel 直接打开)
- 状态色点:五列列头与「其它任务」三列的分类文字前显示状态色圆点(待规划灰/待办蓝/进行中橙/待验收紫/已完成绿/已删除红),与详情页状态 pill 同色系
- 执行会话跳转:详情页执行记录(倒序,最新在最上)点击会话短 ID 直接打开该执行会话,看板自动收起;已删除与已归档分开提示并带短 ID;运行时服务惰性解析、会话列表镜像滞后时自动刷新重查一次;短 ID 剥离
taskboard-中缀,各记录可区分
0.1.3
- 执行竞态与持锁修复:
- 「立即执行」原子闸:in-progress 检查移入串行写队列,重复点击 / 调度重叠最多开一个执行会话
- 认领改为显式
claimedBy/claimedAt字段(原先从 updatedBy 推断,用户编辑会误清持锁);执行期间任务由执行会话持有,其他会话不可移动;旧台账加载时自动迁移 - 执行失败自动回退 todo(原先永久卡在 in_progress);host 重启后残留的 running 执行标记为 failed 并归还任务;成功结算后释放持锁
- 执行可取消:详情页「■ 停止执行」——停止执行会话、执行记录标记 cancelled、任务回到待办
- 模型校验:建卡/改卡的固定模型做结构校验 + provider 路由存在性校验(host llm 运行时不可达时只做前者)
- 台账安全:
store.snapshot()/get()返回冻结副本,外部修改直接抛错,杜绝绕过版本号的原地改数据 - 调度器:tick 前先加载台账(修复 host 重启后首个 tick 读到空表导致定时任务不触发);启动补偿定时器随 dispose 清理
- 其它:执行记录会话 ID 点击复制;详情页显示持锁会话;删除死代码(
store.flush/ routestaskPath)
0.1.2
- 看板拖拽:所有列的卡片可互相拖动(按状态机校验合法流转,非法拖放弹窗提示);正在执行的任务拖动会被拦截,提示「该任务正在由【任务名】会话执行,不能拖动」
- 执行会话体验:执行会话标题固定为任务名(经
sessionTitle.rename写入,不会被自动重命名覆盖);首条消息以正常用户消息呈现(不再是插件上下文行) - 交互优化:
- 新建/编辑弹框新增「⚡ 立即执行」按钮(保存后直接发起执行)
- 详情页「立即执行」移至「编辑」按钮旁
- 「+ 新建任务」移至看板标题统计旁
- 状态流转按钮文案统一为「移至→{状态}」
- 弹窗:原生
alert()全部替换为主题化模态弹窗(Esc/遮罩可关)
0.1.1
- 初始 npm 发布:看板协作、8 个 agent 工具、手动/cron 执行、SSE 实时视图
License: Apache-2.0