@xiuda-ai/dsh-taskboard-plugin
DeepSeek Harness 任务看板插件
English · 中文
  
---
一个为 DeepSeek Harness 设计的任务看板插件:本地 JSON 存储、六列看板、拖拽排序、任务与会话联动、面向模型的看板工具。逻辑参考 Proma 的任务看板(taskboard-store.ts 与 renderer/components/taskboard/)精简而来——本地文件存储、浮动 sortOrder、乐观锁(version)、identifier 续号、中文看板列与优先级/状态色调。
功能
- 六列看板:待处理 / 处理中 / 受阻 / 待确认 / 已完成 / 已归档(列内卡片过多时独立滚动)
- 多项目:内置全局项目(
local),可新建项目;全局视图聚合所有项目 - 拖拽:拖到列空白(跨列移动 / 追加),拖到某张卡之前(同列排序,浮动
sortOrder) - 任务编辑器:标题、描述、状态、优先级、标签、指派(用户 / Agent)、起止日期;归档 / 恢复 / 删除
- 任务 ↔ 会话联动:卡片上的「开始对话 / 查看对话」按钮,关联并打开 DSH 会话
- 面向模型的工具:
taskboard_list/taskboard_create/taskboard_update/taskboard_archive,Agent 可直接管理看板 - 本地存储:
~/.dsh/taskboard/{projects.json, tasks.json},原子写(tmp + rename),无数据库
截图

安装
前置条件
- 已安装 DeepSeek Harness(Electron 桌面应用)
- 目标 profile 存在(默认
web)
方式一:npm 安装(发布后推荐)
在目标 profile 目录内安装本包(写入该 profile 的 package.json 依赖):
cd ~/.dsh/profiles/web
npm install @xiuda-ai/dsh-taskboard-plugin然后在 ~/.dsh/profiles/web/cordis.patch.yml 追加:
- insert:
- id: taskboard
name: "@xiuda-ai/dsh-taskboard-plugin"重启 harness 加载宿主半区;刷新页面加载浏览器半区。
方式二:本地路径(开发 / 尚未发布)
把源码目录链接进 profile 的扁平 node_modules:
ln -sfn /path/to/dsh-taskboard-plugin ~/.dsh/profiles/node_modules/@xiuda-ai/dsh-taskboard-plugin再按方式一追加 cordis.patch.yml 的 insert 行即可。
从源码构建
npm install
npm run build # 产出 lib/index.js + lib/client.js
npm run dev # 监听 src/ 自动重打包(改完刷新页面)> 运行时依赖 @deepseek-ai/cordis / @deepseek-ai/dsh-tools / @deepseek-ai/dsh-home-paths 需能从本包解析。本地开发建议在包内建软链指向 profile 的已安装副本,保持与运行中的 harness 版本一致。
使用
重启后进入任意会话,会话头部右侧会出现「任务面板」胶囊按钮(与「Session log」按钮并排)。点击打开看板:
- 「+ 新建任务」创建任务
- 拖拽卡片跨列 / 排序
- 卡片上的对话按钮:无关联会话时「开始对话」,有关联时「查看对话」
> 说明:入口按钮是会话级的,只在进入某个会话后显示;无会话的空白页看不到入口。
卸载
1. 删除 ~/.dsh/profiles/web/cordis.patch.yml 中的:
- insert:
- id: taskboard
name: "@xiuda-ai/dsh-taskboard-plugin"2. 删除软链:
rm ~/.dsh/profiles/node_modules/@xiuda-ai/dsh-taskboard-plugin数据目录 ~/.dsh/taskboard/ 默认保留;如需清空数据,删除该目录即可。
目录结构
dsh-taskboard-plugin/
├── package.json # dsh.bundle(组合层)+ dsh.client(浏览器半区)
├── cordis.patch.yml # 把宿主行插入组合的 patch
├── tsconfig.json
├── scripts/build.mjs # esbuild 构建 host + client
├── src/
│ ├── index.ts # Host 插件:存储 + /taskboard API + 模型工具
│ ├── taskboard-store.ts # 存储核心(JSON 原子写 / sortOrder / 乐观锁)
│ ├── types.ts # 共享领域类型
│ └── client/ # 浏览器半区(React 看板)
│ ├── index.ts # 客户端插件:Slot 注册(入口按钮 + 看板弹窗)
│ ├── BoardOverlay.tsx # 看板主体(设置面板式弹窗)
│ ├── Column.tsx # 看板列
│ ├── TaskCard.tsx # 任务卡片
│ ├── TaskEditor.tsx # 任务编辑器
│ ├── SidebarButton.tsx # 会话头部「任务面板」入口
│ ├── labels.ts # 状态 / 优先级 / 色调
│ ├── api.ts / store.ts # 数据访问
│ └── board.css # 样式
└── lib/ # 构建产物(index.js + client.js)数据存储
~/.dsh/taskboard/
├── projects.json # 项目列表
└── tasks.json # 任务列表(含 sessionId 关联、sortOrder、version 乐观锁)HTTP API(浏览器半区内部使用)
POST /taskboard/api,body { "op": string, "args": object }:
| op | 说明 |
|---|---|
state | 返回 { projects, tasks } 全量 |
listProjects / createProject | 项目列表 / 新建 |
listTasks / createTask / updateTask | 任务增改查 |
moveTask | 移动 / 排序(status + 可选 sortOrder) |
archiveTask / restoreTask / deleteTask | 归档 / 恢复 / 删除 |
业务错误返回 { ok:false, error:{ code, message } },code 可能为 VERSION_CONFLICT(乐观锁冲突)、PROJECT_NOT_FOUND、TASK_NOT_FOUND、INVALID_* 等。
与 Proma 的对应关系
| Proma | 本插件 |
|---|---|
~/.proma/ 多文件 JSON/JSONL | ~/.dsh/taskboard/ 两个 JSON 文件 |
taskboard-store.ts(浮动 sortOrder、乐观锁、续号) | src/taskboard-store.ts |
taskboard-constants.ts(状态 / 优先级 / 色调) | src/client/labels.ts |
TaskboardView / TaskCard / TaskEditor(Tailwind) | src/client/BoardOverlay.tsx 等(CSS 变量主题) |
main/ipc.ts TASKBOARD 通道 | /taskboard/api JSON 端点 |
| Agent 任务联动 | 模型工具 taskboard_* |
局限
- v1 精简掉了 Proma 的评论、活动时间线、任务关系、附件、重复任务、撤销栈(⌘Z)。
- 同列拖拽用「插入到某张卡之前」的浮动
sortOrder,未做让位动画。 - 客户端样式复用 DSH 主题 CSS 变量,未做独立主题。
- 待立项(
backlog)/ 已取消(canceled)状态仍保留在数据层,但当前 UI 不展示这两列。