dsh-task-hub:把 TAPD / 禪道里的待辦讀進 DSH,選個分支派給 Agent

前言

DSH 的 Agent 會話需要明確的目標才能幹活,但這類目標往往已經躺在需求系統裏:TAPD 的需求、禪道的任務。常見的做法是打開需求頁面,複製標題和描述到 DSH,再口述要開哪個分支、用哪個工作區。複製粘貼多了就容易漏字段,分支名也常常是 Agent 隨手起的。下面介紹 handsomeboy65/dsh-task-hub,它把「列出分配給我的工作 → 手填分支名 → 派發到會話」這條鏈路收斂到側邊欄的一個面板裏。

插件由 handsomeboy65 維護,分類是「工作流」,在社區插件目錄中可以找到。它解決的是:任務來源和 Agent 執行環境之間的那一次人工搬運。

定位

一句話:從 TAPD 或禪道讀取分配給當前賬號的需求 / 任務,選一個 DSH 工作區、手填一個分支名,把任務派給 Agent 在新會話裏開工。

它不負責執行任務。派發之後是會話裏的 Agent 自己規劃和實現;插件也只建立會話、填好輸入框草稿,不會替你發送。

核心功能

兩個任務來源二選一,通過面板頂部的 tab 切換:同一時間只列出一個來源的數據,也只有一個來源生效,切換不會把兩者合併展示。每個來源的地址、憑據、項目等配置分別保存在 settings.json 裏,來回切換不會丟。

既然是二選一,憑據也不會混在一起:TAPD 的 API 賬號密碼、禪道的地址和賬號分別填寫,密鑰寫入 DSH credentials,不落到插件數據文件裏。

派發時插件按順序做四件事:用 git worktree add -b <分支名>(或就地 checkout -b)建分支;在工作樹或倉庫上建立(或複用)DSH 工作區並創建會話;把需求標題、來源鏈接、父需求及關聯應用、完整正文、參考資料、工作環境和「補充要求」寫進新會話的輸入框草稿;把會話標題改成 <分支名> · <標題> 並跳轉過去。它不會自動發送。

草稿裏還掛了附件。TAPD 會帶上需求附件(含父 / 根需求)和描述截圖;禪道讀取需求或任務詳情,下載正文中的圖片和附件。這些都只是掛在輸入框上的草稿附件,你粘貼、改完再發。

重複派發同一條任務時,如果之前的會話還在,插件直接返回原會話;已發送的會話也走原會話,未發送的草稿可以點「打開」恢復。

派發過程有明確的狀態反饋:面板顯示分支、會話狀態(運行中 / 空閒 / 待發送 / 會話已不存在),運行狀態每 8 秒刷新一次;單個項目或產品查詢失敗只會在面板上提示,不會拖垮整張列表。

安裝與啓用

安裝命令來自 README:

dsh plugin --profile web add github:handsomeboy65/dsh-task-hub

裝完重啓 dsh web,側邊欄會出現「任務中心」。桌面端在應用內的 設置 → 插件 裏安裝。包發佈到 npm 之後,dsh plugin --profile web add dsh-task-hub 是等價寫法。

需要 DSH 0.2.1 或更新版本,Node 版本要求 >=20。

首次配置

點擊面板右上角「設置」,先在頂部選來源,再填該來源的配置。

TAPD 一側需要認證方式(Token 或 API 賬號 + 密碼)、API 賬號和密碼、處理人過濾、項目 ID(TAPD 項目的 workspace_id,多個用逗號分隔,也可點「拉取項目」選擇)以及可選的 Nick。注意 API 賬號來自 TAPD 開放平臺的個人設置,不是登錄密碼。

禪道一側需要地址(例如 https://zentao.example.com,插件會自動補 /api.php/v1)、賬號密碼、範圍(產品 讀產品需求 stories,項目 讀項目下各執行的任務 tasks)以及多選或逗號分隔的產品 / 項目 ID。禪道沒有「分配給我」的接口,插件要先登錄拿 token,再按當前賬號在本地過濾。

通用部分配置默認工作區(如 TMS2.0)、基線分支(留空自動探測 origin/HEAD)、隔離 worktree(默認開啓,在倉庫同級 .dsh-worktrees/<倉庫>-<分支> 另開工作樹)、是否隱藏已完成項。

派發流程

配置完成後,使用鏈路很直接:

1、面板列出當前來源裏「處理人 = 我」的條目,按最近修改排序,可篩選 未完成 / 已完成 / 全部。TAPD 需求的「應用」字段單獨佔一列排在 ID 之前,多應用時逐個標籤豎排;當前來源沒有應用字段時整列隱藏。
2、點某條的「派發 Agent」。
3、在彈窗裏確認目標工作區(或手填倉庫路徑)、分支名稱、是否用 worktree、基線分支,以及可選的「補充要求」。
4、確認後插件執行上面的建分支、建會話、寫草稿流程,然後跳轉到新會話。不會自動發送:任務說明和附件都已經在輸入框裏,看一眼、改一改,自己按發送。

分支名是整個過程裏唯一必須手填的東西。插件要求填寫完整名稱(例如 feature/order-export),不會自動拼接 issue_<需求號>,也不會追加後綴;分支名會用 git check-ref-format --branch 校驗,非法名字直接報錯。

「補充要求」不是用來手寫整份任務說明的。留空時插件用需求標題、描述、附件、圖片和工作約定自動生成一份說明;你填的內容以 ## 補充要求 追加在後面,不會替換需求正文。

改動須知:設置在 ~/.dsh/task-hub/settings.json,派發記錄在 ~/.dsh/task-hub/state.json;記錄按 來源:id(例如 zentao:task-31)區分,不同系統的同號條目不會互相覆蓋,舊 TAPD 記錄仍按原 id 兼容。就地派發要求工作區乾淨,否則報「工作區有未提交改動」;已存在同名 worktree 但停在別的分支時報衝突,不會強改。

適用場景與注意

適合已經在用 DSH 寫需求實現、任務來源又是 TAPD 或禪道、並且希望由開發者本人決定分支名的同學。它適合「一次處理一條待辦」的節奏:選條目、填分支、發會話;不適合需要批量聯動或回寫來源系統的場景。

同時應當清楚邊界:TAPD 只對接需求(stories),不含任務 / 缺陷;禪道按產品讀需求或按項目讀執行任務,不含缺陷。插件不回寫來源系統,不改狀態、不寫評論;也不會代替 Agent 做執行計劃。

安全提示:插件以當前 DSH 進程的權限運行,能讀寫它的數據文件、創建工作樹和會話。安裝前建議打開 GitHub 倉庫看一下源碼(MIT 許可證),確認 lib/ 下的 tapd.js、zentao.js、checkout.js、dispatch.js 等模塊在做你預期的事,再決定是否把 TAPD / 禪道憑據交給它。

改完代碼做驗證時可以用倉庫自帶的測試:npm test,覆蓋純函數、git 流程、派發、客戶端渲染和雙來源適配。注意已安裝的 bundle 需要重啓 DSH 纔會加載新的 JS 代次(安裝時的首次加載可走 HMR)。

結尾

dsh-task-hub 做的事不復雜:把 TAPD / 禪道中分配給你的需求和任務拉到側邊欄,在填好工作區和分支名之後,把任務說明和附件灌進一個 DSH 會話的輸入框,讓你自己確認發送。它把「讀需求、開分支、開工」中重複的人工搬運去掉,又不替開發者搶發送這一步,和他維護時聲明的定位一致。

目錄頁:https://www.skillhub.cn/plugins/handsomeboy65/dsh-task-hub
倉庫:https://github.com/handsomeboy65/dsh-task-hub

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

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

小夜