前言¶
DeepSeek Harness (DSH) 采用插件化架构,允许开发者扩展对话窗口外的功能。在开发智能体或进行多轮协作时,会话内的临时笔记(如 DSH 自带的 todo_write)往往无法持久化,且无法被后续新建的会话复用。dsh-task-board 旨在解决这一痛点:它为每个工作区提供一个独立的任务看板,工作区内的所有会话共享同一份数据,既支持在 UI 中管理,也通过模型工具允许 AI 读取和修改。
核心功能¶
该插件为每个工作区提供一块任务看板,核心能力包括:
* 会话集成:在会话顶部增加「任务」标签页,提供看板与列表双视图。
* 工作区级共享:数据存储在 .dsh/tasks.json,同一工作区的会话读写同一文件,自然形成共享。
* AI 可读可管:提供 task_list、task_get、task_create、task_update、task_delete 五个模型工具。
* 多会话安全:采用原子写与版本乐观锁机制,当另一会话修改看板时,面板会提示或自动刷新,过期修改会被拒绝并告知,不会悄悄覆盖。
* Issue 同步:支持将任务同步到 GitHub 或 GitLab 的 Issue,双向绑定。
* 交互能力:包含右侧抽屉编辑、筛选(标题、描述、标签、优先级)、快捷键(N 新建、/ 搜索、↑↓ 移动、1-4 状态切换)。
安装与启用¶
通过 npm 安装插件包,并配置插件入口。
- 进入 DSH 插件目录:
cd ~/.dsh/profiles
- 安装插件包(建议所有插件在一条命令中安装,避免清除其他依赖):
npm install dsh-task-board
- 在
~/.dsh/profiles/<你的 profile>/package.json的dsh.profile.bundles中加入dsh-task-board,或在该 profile 的cordis.patch.yml中配置:
- insert:
- id: task-board
name: dsh-task-board
- 重启 DSH 使配置生效。
配置¶
插件默认不开启任何同步功能,需在配置文件中开启。
- insert:
- id: task-board
name: dsh-task-board
config:
storePath: .dsh/tasks.json # 相对工作区根目录;写绝对路径可让多个工作区共用一块板
sync:
enabled: true
provider: github # github | gitlab
repo: owner/repo # GitLab 用 group/project 或数字 id
baseUrl: https://gitlab.example.com # 仅私有部署需要
tokenEnv: GITHUB_TOKEN # 默认 GITHUB_TOKEN / GITLAB_TOKEN
labelPrefix: 'dsh:'
| 字段 | 默认值 | 说明 |
|---|---|---|
storePath |
.dsh/tasks.json |
看板文件位置。相对路径按工作区根解析 |
sync.enabled |
false |
关闭时完全不联网,不发起任何网络请求 |
sync.provider |
github |
github 或 gitlab |
sync.repo |
未设 | 没填等同于关闭同步 |
sync.baseUrl |
官方实例 | 私有部署的 API 源 |
sync.tokenEnv |
按 provider | 读 token 的环境变量名 |
sync.labelPrefix |
dsh: |
插件在远端管理的状态标签前缀 |
凭据安全:Token 仅在调用时从 DSH 进程的环境变量读取,既不写进配置也不写进看板文件,不落盘。
数据模型与面板使用¶
看板数据存储在 .dsh/tasks.json,支持 JSON 格式直接编辑。如果文件格式损坏,面板会切换为只读模式并显示原因;如果单行数据有问题,会降级为默认值或丢弃该行。
面板提供以下操作与视图:
* 看板视图:4 列(待办 / 进行中 / 阻塞 / 已完成),支持拖拽跨列改状态及列内改顺序。
* 列表视图:紧凑单行,适合快速扫视。
* 右侧抽屉:用于编辑任务详情(标题、状态、优先级、负责人、标签、Markdown 描述),支持编辑/预览切换,非弹窗设计。
* 筛选:支持按标题、描述、标签全文搜索,以及按优先级和标签筛选。
* 快捷键:N 新建 · / 聚焦搜索 · ↑↓ 移动选中 · 1-4 直接改选中卡片状态 · Esc 关闭。
模型工具¶
插件向模型提供以下工具,用于读写任务:
| 工具 | 说明 |
|---|---|
task_list |
按 status / tag / assignee / query 过滤,返回精简行,默认 50 条 |
task_get |
获取单个任务的全文 |
task_create |
创建任务,createdBy 记为 ai,并记录当前会话 |
task_update |
改任意字段,status 变更为 done 时自动记录完成时间 |
task_delete |
删除任务 |
注意:Issue 同步功能不给模型工具。推送到远端 issue 的动作由人在 UI 中逐个绑定执行,避免模型自动制造噪音。
Issue 同步机制¶
开启同步后,支持手动绑定任务与 Issue。
- 字段映射:任务
title对应 Issuetitle;notes对应body(末尾追加锚点用于反查绑定);status: done对应 Issueclosed;其余状态对应 Issueopen及特定 Label;assignee对应 Issue Assignees。 - 冲突处理:按整条记录的最后修改时间决胜,不做字段级合并。
- 反向导入:支持从 Issue 反向导入,将未绑定的开放 Issue 建成任务。
- 未同步字段:
order、sessionId、createdBy、id仅用于本地展示,不同步至远端。
开发与已知边界¶
- 构建命令:
npm install --legacy-peer-deps
npm run build # node 半边 tsc → lib/,client 半边 esbuild → lib/client.js
npm run typecheck # 两个 tsconfig 都查
npm test # 基于构建产物运行测试
- 已知限制:
- GitLab 私有部署(自定义
baseUrl)本机无凭据,未经真实验证。 - 没有系统提示词注入:模型靠工具描述发现看板,不会每轮被塞任务摘要(省 token)。
- 跨 DSH 进程的并发写靠版本比对捕获;同进程内的写由存储层串行化。
- GitLab 私有部署(自定义
结语¶
dsh-task-board 提供了一个持久化、工作区级别的任务管理方案,填补了 DSH 原生 todo_write 无法跨会话共享的空白。无论是人工管理还是 AI 辅助,它都提供了一个标准化的数据模型。项目源码位于 GitHub,遵循 MIT 许可证。