前言¶
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 許可證。