READMESource: main@bb1d19b3
dsh-kanban
给 DeepSeek Harness 加一块任务看板:列、卡片、拖拽,和会话里的 todo 自动打通,agent 也能自己上板。

是什么
截图来自真实 DSH 桌面端:左侧栏「任务看板」→ 主区域。
一个 DSH 插件(host + client 两半):
- 左侧栏一个「任务看板」入口,点开在主区域铺满三列:待办 / 进行中 / 已完成
- 卡片支持新建、双击改标题、拖拽换列和排序、两步删除、归档
- 和会话打通:agent 每次写
todo_write,插件会把 todo 同步成卡片,状态跟着走 - agent 可读写:6 个
kanban_*工具,agent 能自己建卡、移卡、改卡、删卡 - 落盘:数据存在
$DSH_HOME/integrations/dsh-kanban/board.json,换窗口、重开会话都不丢
安装
插件装进某个 profile(桌面端就是 desktop)。
用 GitHub 地址
dsh plugin --profile desktop add github:dcchanInSz/dsh-kanban
或者打开 DSH 侧边栏的 插件 页面,在安装框里填 github:dcchanInSz/dsh-kanban。
本地开发(改了立刻生效)
git clone https://github.com/dcchanInSz/dsh-kanban.git
cd dsh-kanban && npm install && npm run build
dsh plugin --profile desktop add link:"$PWD"
link: 会建软链接,改完 lib/client.js / lib/index.js 重启插件即可,不必重装。
卸载
dsh plugin --profile desktop remove dsh-kanban
看板数据不会被删;想一起清掉就删 ~/.dsh/integrations/dsh-kanban/。
使用
| 操作 | 说明 |
|---|---|
| 点左侧栏「任务看板」 | 打开主区域看板 |
| 每列底部「+ 添加卡片」 | 第一行是标题,换行后是备注;⌘↩ 提交、Esc 取消 |
| 拖动卡片 | 换列 / 在同列里排序,松手即保存 |
| 双击卡片标题 | 就地改名,回车保存 |
| 卡片右下「×」 | 点两次删除(防误触) |
| 已完成列右上「清空」 | 一次清掉所有已完成卡片 |
| 右上「同步会话 todo」 | 关掉后 agent 的 todo 不再自动建卡 |
关于「同步会话 todo」
规则是刻意做得可预测的:
- agent 调用
todo_write后,未完成的 todo 建卡进「待办 / 进行中」,已完成的进「已完成」 - 同一条 todo(按内容哈希 + 会话 id 识别)只会有一张卡,标题跟着 todo 内容更新
- 你手动拖动过一张同步来的卡片后,它的列就归你了——后续 todo 状态变化不会再把它挪回去
- 删掉的同步卡片不会被重建(记了墓碑)
- 关掉开关后,已有的卡保留,新的 todo 不再同步
卡片右上角会标 会话同步(来自 todo)或 agent(工具创建),自己建的不带标。
给 agent 的工具
| 工具 | 作用 |
|---|---|
kanban_list |
按列列出所有卡片,附卡片 id |
kanban_add |
新建卡片(title 必填,可带 note / column) |
kanban_move |
移动卡片到指定列 |
kanban_update |
改标题 / 备注 |
kanban_delete |
删除卡片 |
kanban_sync_todos |
立刻把当前会话的 todo 同步一次 |
对着 agent 说「把这 5 件事排进看板」它就会用 kanban_add 建卡;说「第一件做完了」它会 kanban_move。
数据
$DSH_HOME/integrations/dsh-kanban/board.json(默认 ~/.dsh/integrations/dsh-kanban/board.json):
{
"version": 1,
"revision": 12,
"columns": [
{ "id": "backlog", "title": "待办" },
{ "id": "doing", "title": "进行中" },
{ "id": "done", "title": "已完成" }
],
"cards": [
{
"id": "c_1a2b3c4d",
"title": "写 README",
"note": "包含安装说明",
"column": "doing",
"createdAt": 1761400000000,
"updatedAt": 1761400500000,
"source": { "kind": "todo", "sessionId": "s_abc", "key": "9f2c1e7d3a4b" },
"todoStatus": "in_progress",
"pinned": true
}
],
"deleted": [{ "sessionId": "s_abc", "key": "aabbccdd", "at": 1761400600000 }],
"settings": { "autoSyncTodos": true }
}
写入是串行的「读-改-写 + 临时文件 + rename」,不会出现半截文件。
结构
lib/index.js 宿主端:board.json 读写、/api/dsh-kanban RPC、kanban_* 工具、todo 同步
lib/client.js 客户端:入口 + 面板(构建产物)
src/client/ 面板源码(React + JSX)
board.jsx 三列看板、拖拽、就地编辑
index.jsx 注册 main / sidebar.panellist 槽位
styles.js 样式与主题跟随
rpc.js /api 调用封装
scripts/build-client.mjs esbuild 打包(React 走宿主的,不重复打包)
test/host.test.mjs node:test:存储、RPC、工具、同步语义
dev/harness.html 免安装预览面板
docs/ 截图
开发
npm install
npm run build # 产出 lib/client.js
npm test # 11 项宿主测试
npm run build -- --with-harness # 额外产出 dev/harness.js
open dev/harness.html # 浏览器里直接调 UI
面板是纯 React,不依赖 DSH 内部的组件库;样式用 CSS 变量,按宿主 color-scheme 自动切亮/暗。
兼容性
- 宿主版本:DSH
0.2.0-rc.2(desktop / web profile) - 依赖的公开面:
slots(main、sidebar.panellist)、connection.fetch.register、connection.rpc.call、tools.register、session/event - 不 import 任何
@deepseek-ai/*包:profile 插件只解析自己的 node_modules,硬依赖 DSH 内部包会装出第二份实例
许可
MIT © 2026 dcchanInSz
No comments yet. Be the first to write one.