dsh-kanban:人与 Agent 共用一张 SQLite 看板

前言

在 DSH 里做多会话协作时,任务状态很容易散落在手写 Markdown 表、各次会话的记忆里,面板和工具对不上号。更麻烦的是没有统一的「门」:卡片能不能进 ready、能不能进 done,没人拦;挪动有没有记下来,也不一定。看板若只展示列位置、不记事件,吞吐和周期时间就会失真——README 里举过迁移后「11 张完成卡、事件里却只有两次移动」的例子。

下面介绍维护者 mrdhira 的工作流类插件 dsh-kanban:桌面端侧栏一块看板、一套 kanban_* 工具与 CLI,底层共用一个 SQLite 存储和同一套策略引擎,拒绝 Agent 的规则也会拒绝人。

这是什么

dsh-kanban 是面向 DSH Web GUI 的看板插件:一张任务板贯穿整个 home 目录视角,由人(侧栏面板)、各 Agent 会话(工具与 kanban skill)、脚本(bin/kanban.mjs)共同读写。数据默认落在 $DSH_HOME/.kanban/board.db;Definition of Ready(DoR)、Definition of Done(DoD)、WIP 限制、优先级与服务类别等规则写在存储里,每次变更追加事件,四类流指标从事件重算,而不是从列名直接读数。Markdown 镜像和按卡片的文件夹树已移除,存储是唯一副本。

社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;安装前请自行审阅源码与许可证。插件在当前 DSH 进程权限下运行。

核心功能

三种入口,一套策略

入口 使用者 作用
Kanban 面板(sidebar.panellist → main) 人 泳道展示各状态(dropped 在最后)、拖拽与键盘路径、搜索、New card、卡片抽屉(含 DoR/DoD 清单)、流指标与可折叠历史
kanban_* 工具(9 个)与 kanban skill Agent 列出、读取、创建、更新/填写、移动、丢弃、sprint、看板、指标等;含卡片 write scope
bin/kanban.mjs 人、脚本、检查 与工具相同的动词,退出码区分结果

主机侧在运行时注册 kanban skill,Agent 可在不读源码的情况下操作卡片;未满足 DoR/DoD 时会被拒绝,并返回缺失项名称。

工作流与门

卡片经五个业务状态流动,两道门由看板本身校验:

flowchart LR
  B[backlog] -->|"DoR complete"| R[ready]
  R --> I[in-progress]
  I --> V[review]
  V -->|"DoD complete"| D[done]
  B -.->|"dropped, with a reason"| X[dropped]
  R -.-> X
  I -.-> X
  V -.-> X
  X -->|"the drawer's move"| B
  • Definition of Ready:含 outcome、acceptance、write scope、estimate 等项; backlog → ready 须 DoR 完成。
  • Definition of Done:review → done 须 DoD 完成。
  • dropped:离开主流程的状态,经抽屉主操作可回到 backlog。

本地 API

主机在应用 Web 服务上注册前缀路由 /api/kanban,提供 health、board(支持 ?since=<rev> 返回 304)、task/:id、POST mutate 等。服务仅绑定 loopback;README 说明了与主应用 /api 桥接、以及 x-kanban-actor 相关的本地单用户权衡,Agent 侧边界在工具层(例如 Agent 不能设 priority)。

安装与启用

插件装在为其服务的 profile 内:注册 bundle 并重启 DSH。两条路径结果相同:产生 link: 依赖、bundle 行,然后重启。

方式 A:install.sh

将仓库放到稳定路径(例如 profile 的 plugins 目录)后执行:

cd ~/.dsh/profiles/desktop/plugins/dsh-kanban
./install.sh            # 在 profile 中注册 bundle 并 link
./install.sh --check    # 预览将发生的变更
./install.sh --remove   # 取消注册

方式 B:手动

  1. 将仓库放到固定安装路径(该路径即 link 目标)。
  2. 在插件目录执行 pnpm install(插件自有工具链;prepare 会跑 node build.mjs,生成 lib/** 与 bin/kanban.mjs)。
  3. 编辑 profile 的 package.json(默认 ~/.dsh/profiles/desktop/package.json):
{
  "dependencies": { "dsh-kanban": "link:/absolute/path/to/dsh-kanban" },
  "dsh": { "profile": { "bundles": ["dsh-kanban"] } }
}
  1. 在 profile 目录执行 pnpm install 建立 node_modules/dsh-kanban 符号链接,然后重启 DSH。主机侧变更需重启;仅客户端变更可页面刷新(已加载 bundle 内模块不会自动重载,见 README T-008)。

配置

全新安装可不改配置:看板默认 $DSH_HOME/.kanban/board.db(首次打开时创建父目录);工作流定义与指南中的限制随包提供。bundle 的 config 可为空,主机侧无对外 schema,字段缺省即用默认值。

配置项 默认值 说明
dbPath $DSH_HOME/.kanban/board.db SQLite 文件路径
pollMs 5000 面板可见时的刷新间隔(毫秒)

仅需声明要改的字段,例如 Cordis patch 片段:

- insert:
    - id: kanban
      name: dsh-kanban
      config:
        dbPath: /absolute/path/board.db
        pollMs: 5000

典型用法

人:在桌面应用侧栏打开 Kanban 面板,搜索或新建卡片,在抽屉中勾选 DoR/DoD,拖拽或主按钮移动;查看流指标与历史。

Agent:通过 9 个 kanban_* 工具或 kanban skill 列出看板、创建卡片、补全 DoR 项、在策略允许下移动、评论、阻塞/解阻塞;被拒时根据返回的缺失项继续填写。

脚本与检查:使用包内 CLI(package.json 中 bin 名为 dsh-kanban,入口 ./bin/kanban.mjs),与面板、工具同一套动词,便于 CI 或本地脚本核对状态。

# 在已 link 且 build 完成的插件目录或 PATH 中的 kanban.mjs
./bin/kanban.mjs

具体子命令以 README 与 --help 为准;不要手改 board.db 外的「第二份」任务状态——存储为唯一真相源。

适用场景与注意

适合需要在 同一台机器、同一 DSH profile 下让人与多个 Agent 会话共用任务状态、并要用 DoR/DoD 与 WIP 硬性约束流转的团队或个人。流指标依赖事件表,适合愿意用「发生过什么」而不是「当前列名」做度量的用法。

注意:

  • Profile 插件不能 import 除 Node 内置以外的模块(@deepseek-ai/* 在 profile 目录不可解析),因此存储与 HTTP 路由均为插件自实现;设计细节见仓库 DESIGN.md、PRODUCT.md。
  • /api/kanban 为本地 loopback 设计;部署与加固策略见 README 中的安全说明。
  • 安装、升级前审阅 GitHub 仓库 源码;插件以 DSH 进程权限读写数据库与注册路由。

结尾

dsh-kanban 把看板、Agent 工具与 CLI 压到一张 SQLite 和一套策略上:门在存储里,移动进事件里,人与 Agent 被拒绝的理由一致。若你在 DSH 工作流分类里找「可共用的任务板」,可从目录页或 GitHub 入手安装与试用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜