dsh-kanban
In a curated listMaintenance: Activeisolat-3k/dsh-kanban
看板:9 列任务流转/拖拽/评论/事件时间线/多看板,就绪任务派发给 DSH 子代理真实执行并自动 Ready→Running→Done 流转、回写结果摘要
$ dsh plugin add dsh-kanbanInstall
dsh has no central install command — add this plugin’s entry (documented in its README) to your profile or patch config, then restart.
How installs work9
stars
1
forks
JavaScript
Language
MIT
License
2026-08-14
Created
2026-08-16
Last push
README
DSH Kanban 看板插件
为 DeepSeek Harness(DSH)实现的 Hermes 风格看板插件:9 列任务流转 + 拖拽 + 评论 + 事件时间线 + 多看板 + 定时列自动流转,并支持把「就绪」任务派发给 DSH 子代理真实执行(Ready → Running → Done 自动流转、心跳监控与实时进度回显、结果摘要回写)。
原型:Hermes 桌面端看板插件(
apps/desktop/src/plugins/kanban/,功能分析见同目录《看板插件功能报告.md》)。 实现形式:静态插件包dsh-kanban,宿主平面挂载(不经任何 Agent 预设)。插件以 ES 模块包(plugin/,Host 半 + dsh.client 客户端 bundle)落地,由 web profile 的补丁层~/.dsh/profiles/web/cordis.patch.yml(insert一行)挂载进宿主组合;进程启动即生效,任意预设的会话都自动获得看板工具与「看板」标签页。看板数据永久落盘于kanban-store.json。
界面预览

文件布局
DSH-kanban/
├── 看板插件功能报告.md # Hermes 原版功能分析(只读参考)
├── 界面截图.png # 看板主界面截图(README「界面预览」引用)
├── kanban-store.json # 看板数据(任务/评论/事件/运行记录,自动生成与维护)
├── runs/ # 派发任务的子代理进度文件(<任务ID>.progress,自动生成与维护,已 gitignore)
├── plugin/ # 静态包 dsh-kanban(真实 ESM / 浏览器 bundle)
│ ├── package.json # 包清单:exports ./client、dsh.client 声明(platform: web)
│ ├── index.js # 包根再导出(兼容按目录候选 index.js 的解析路径)
│ ├── host.js # Host 半:JSON 存储 + 14 个 RPC + 子代理派发/终止 + 事件循环(定时/心跳/进度)+ 10 个 Agent 工具 + 运行时 skill 注册 + webServer 路由 /kanban/rpc + WebSocket 下行通道 /kanban/events
│ ├── skill.js # 运行时 skill「kanban」的内容(宿主启动时注册进 skills 注册表)
│ └── client.js # Client bundle:window.__ModuleLoader__.load 注册,看板 UI(conversation.view「看板」标签页),fetch /kanban/rpc + WebSocket /kanban/events 订阅
└── README.md # 本文档
安装(一次性)
-
包解析 junction(把
dsh-kanban暴露给 profile 引导的 node_modules 解析):New-Item -ItemType Junction ` -Path C:\Users\<用户>\.dsh\profiles\node_modules\dsh-kanban ` -Target D:\WorkSpace\DSH-kanban\plugin -
补丁层(在 web profile 的宿主组合里插入挂载行),编辑
C:\Users\<用户>\.dsh\profiles\web\cordis.patch.yml:- insert: - id: kanban name: dsh-kanban -
重启
npx @deepseek-ai/dsh web并刷新页面。所有会话——无论选择哪个预设——都自动获得插件(看板标签页 + 10 个kanban_*工具 + skill 目录中的kanban)。需要对所有 profile 生效时,把同一段补丁放进家级补丁层<DSH_HOME>\cordis.patch.yml。
更新流程
- 改 Host(
plugin/host.js):重启npx @deepseek-ai/dsh web后生效(补丁层随进程启动重新加载)。 - 改 Client(
plugin/client.js):保存后刷新页面即可(bundle 由/plugins/dsh-kanban/client.js按请求从磁盘读取,no-cache)。 - 数据文件
kanban-store.json与上述更新无关,始终保留。
停止 / 移除
- 停用:在补丁层给 kanban 行加
disabled: true(或删除 insert 行)后重启;数据文件保留。 - 移除:删除 junction
C:\Users\<用户>\.dsh\profiles\node_modules\dsh-kanban,并删除DSH-kanban/目录(数据随kanban-store.json一起删除)。
功能清单
- 9 列泳道:待细化 → 待办 → 定时 → 就绪 → 运行中 → 阻塞 → 审核 → 完成 → 归档(配色沿用 Hermes
COLUMN_META);空列自动收窄为竖条(含竖排列名),点列头可手动折叠/展开(手动收放过的列按选择记忆,localStorage 按看板分键);归档列默认隐藏可切换显示 - 任务卡片:标题(两行截断)、正文摘要、优先级徽章、负责人、定时徽章(「还剩xx · 绝对时间」)、评论数、运行中标记、卡片年龄、按列着色左边条
- 拖拽换列:HTML5 原生拖放(与 Hermes board.tsx 同模式)
- Ctrl/Cmd 多选 + 批量操作条:批量移动状态 / 批量删除
- 按列筛选:标题 / 正文 / ID 全文过滤
- 定时列自动化(新定时模型):任务带
schedule放入「定时」列后按设定自动激活进「就绪」——interval 间隔重复(每 N 分钟,到点激活记录by: 'interval',本轮完成后自动回排定时列等下一轮)、daily 每天固定时刻(by: 'daily')、父卡片门禁(设了父卡片的卡在父卡片完成/归档前不会被自动派发——任何列生效;父卡片被删除视为完成)。激活由每任务一个ctx.timeout驱动(不再全局扫描);无 schedule 的定时任务保持纯停放 - 详情抽屉:当前状态只读展示(彩色圆点 + 状态名)、标题/描述/负责人/优先级/定时方式(间隔/每天/父卡片)实时保存(字段变化 600ms 防抖自动保存,无「保存」按钮,关闭抽屉自动 flush)、评论线程、完整事件时间线、执行控制台(运行信息 + 最近活动 + 实时进度 + 结果摘要/错误)
- 多看板:创建 / 切换 / 删除看板
- DSH 代理自动派发(核心):「待办/就绪」两列常驻自动派发——建卡、拖入、定时激活、重启后的存量,凡在这两列、无活跃运行、且父卡片(若有)已完成/归档的卡,事件循环 10s 内自动启动 DSH 子代理执行(Agent 工具渠道挂靠当前发起代理;UI 渠道优先挂靠最近有会话活动的根代理,其次第一个根)→ 完成后自动转「完成」并回写结果摘要;失败转「阻塞」并记录错误(无存活会话等瞬态失败留在原列自动重试);派发按钮已移除,「■ 停止运行」把任务移回**「待细化」**(避免被自动派发立即重跑);只想记录不执行的卡放「待细化」
- 运行心跳(事件循环):子会话日志活动(
session/event)与进度文件更新都会刷新heartbeat_at;超过 30 分钟无任何信号 → 终止运行并转「阻塞」(原因:心跳丢失),杜绝"假运行"卡片;超时可用环境变量DSH_KANBAN_HEARTBEAT_MS(毫秒)覆盖 - 实时进度(事件循环):派发提示词要求子代理向
DSH-kanban/runs/<任务ID>.progress追加进度行,循环读取并在抽屉「执行」区显示最近 50 行 - Agent 渠道(10 个工具 + skill 引导):Host 注册运行时 skill
kanban(进入会话 skill 目录,模型可主动加载,用户可/kanban注入),并注册 10 个模型工具——读:kanban_list_boards/kanban_list_tasks/kanban_get_task;写:kanban_create_task/kanban_update_task/kanban_add_comment/kanban_create_board;执行:kanban_dispatch_task/kanban_stop_task/kanban_delete_task。全部与 UI 操作走同一套校验(含父卡片环检测)、事件与落盘逻辑;省略board的定位类工具会在所有看板中查找任务 id。工具调用在对话中以presentCall/presentResult渲染为文字提示卡片(不做自定义富卡片) - 结算提醒(纯文字):客户端帧级浮层(
shell.overlay槽位)WebSocket 快照 diff——任务完成/失败弹 6s 文字 toast;页面刷新不回放历史结算(WS 断线时退回 5s 轮询兜底) - 持久化:每次变更 250ms 防抖落盘;刷新页面、重跑插件、重启 DSH 数据都不丢
入口
- 会话视图中的「看板」标签页(
conversation.view插槽,id=kanban);关闭 = 切回「聊天」标签。
数据格式(kanban-store.json)
{
"schemaVersion": 1,
"boards": [{
"slug": "main", "name": "主看板", "created_at": 1786642238696,
"tasks": [{
"id": "t_xxx", "title": "…", "body": "…",
"status": "triage|todo|scheduled|ready|running|blocked|review|done|archived",
"assignee": null | "标签", "priority": 0|1|2,
"schedule": null | {
"kind": "interval" | "daily" | null, // interval=间隔重复,daily=每天固定时刻;null 且无 parentId 时纯停放
"intervalMinutes": 30, // kind=interval 时:间隔分钟(1-10080,最长 7 天)
"dailyMinutes": 540, // kind=daily 时:当天第几分钟(如 09:00 → 540)
"parentId": null | "t_xxx", // 可选父卡片(全局门禁):父完成/归档/被删除前不自动派发;不设则不门禁
"base": 1786642238696, // kind=interval 时:整倍数网格锚点(编辑保留,回排不随运行时长漂移)
"nextAt": 1786642238696 | null // 下一次激活时间(epoch 毫秒);激活后置 null,重复任务在完成后回排
},
"created_at": …, "updated_at": …,
"comments": [{ "id": "c_xxx", "author": "user" | "agent", "body": "…", "created_at": … }],
"events": [{ "id": 1, "kind": "created|edited|moved|commented|dispatched|completed|terminated|blocked", "payload": {}, "created_at": … }],
"run": null | { "provider": "…", "runId": "…", "seq": 1, "started_at": …, "ended_at": …,
"outcome": "done|error|terminated", "summary": "…", "error": "…",
"heartbeat_at": …, "progress": ["…"], "progressLineCount": 0 }
}]
}]
}
More in Agents, Automation & Workflows
archify
by tt-a1i
Turn any idea, plan, or codebase into a beautiful interactive diagram. An agent skill for Claude Code, Codex, and more.
openviking
by volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
learn-harness-engineering
by walkinglabs
Harness engineering beginner tutorial, from 0 to 1
browserskill
by tencent
Let AI agents use your real, logged-in browser without interrupting your work. CLI + extension for browser automation across any shell-capable AI agent.
