前言¶
在 Harness 裏讓模型跑多步任務時,常見三種混亂:任務散落在對話各處,回頭找不到;任務是模型提的還是自己手抄的,已經分不清;模型說「完成了」就自動打勾,其實沒人確認過。dsh-task-manager 針對這三件事:把任務收進一個懸浮面板,每條標註來源,模型要完成時只能提議、由你拍板。
這是什麼¶
dsh-task-manager 由 caipanjin 維護,是 DeepSeek Harness(DSH)的一個插件,發佈在 npm 上,當前版本 1.1.5。它提供一個右下角的懸浮任務面板,把模型建議的任務和手動添加的任務放在同一處,並額外處理三件事:點「開始」需二次確認後才把任務發進對話,模型報完成時只提議、不自動落定,面板位置按瀏覽器記住。README 自述爲「無依賴的小插件」。許可證是 MIT。
核心功能¶
1、兩種任務來源:模型通過 task_write 工具寫入的任務標註「模型建議」,你在面板輸入框添加的標註「手動添加」。每條都帶來源徽標。
2、選中文字建任務:在對話裏選中一段文字,旁邊浮出「+ 添加爲任務」按鈕。當選中內容是渲染出來的列表(-、1.、2. 等)時,按鈕變成「+ 添加 N 個任務」,爲每個列表項建一條任務。列表標記是 CSS ::marker 畫的、不包含在選中文字裏,因此插件讀 DOM 的 <li> 結構來識別條目,而不是正則匹配文本。
3、懸浮面板:位於 shell 浮層之上,從緊湊小膠囊展開,可拖到任意位置,位置按瀏覽器保存。
4、狀態圓點加狀態文字:每行顯示狀態圓點,並顯示「待辦 / 進行中 / 已完成」文字,顏色只作輔助(待辦灰、進行中琥珀、已完成綠)。
5、顯式完成、確認後落定:每行只有一個隨狀態變化的操作按鈕(「標記進行中」→「✓ 完成」→「重新打開」)。當模型判斷任務完成時,只是提議;面板出現「全部確認 / 忽略」橫幅,未經你確認不會真正落定。
6、啓動任務需二次確認:點行內「開始」先彈確認條,點「發送」才把「開始執行這個任務:<標題>」發到對話框,面板隨後自動收起。
7、刪除與清空:模型任務與用戶任務都帶「✕」,另有「清除已完成」批量移除(待確認的除外)。
8、主題與語言:只使用 Harness 真實主題 token,自動跟隨應用淺色 / 深色;提供簡體中文與 English。
安裝與啓用¶
已發佈到 npm,安裝命令爲:
dsh plugin --profile web add @caipj/dsh-task-manager
也可以直接從源碼安裝:
dsh plugin --profile web add github:caipanjin/dsh-task-manager
安裝後重啓一次 Harness 宿主,讓宿主側工具 task_write 註冊生效,並刷新窗口。任務小膠囊會出現在右下角,點擊展開,拖動可移動。
典型用法¶
下面按 README 裏的步驟走一遍。
1、添加任務:展開膠囊,在輸入框輸入後點「添加」。任務只留在列表裏,不會被複制到聊天框。
2、從對話文字添加:選中文字點浮出的「+ 添加爲任務」;選中列表則點「+ 添加 N 個任務」。
3、模型任務:模型調用 task_write 時任務自動出現並標註「模型建議」。
4、切換狀態:待辦點「標記進行中」,進行中點「✓ 完成」,已完成點「重新打開」。
5、啓動任務:點某行「開始」,確認條出現後點「發送」,提示被髮送到對話。
6、完成確認:模型報完成後出現確認橫幅,可「全部確認」或逐行「確認」。模型上報時除了任務 id,也可以直接寫標題,標題會按忽略大小寫、全半角、空格、標點做歸一化匹配,唯一命中即生效,唯一前綴也接受;命中多個則報錯並列出候選。
7、刪除 / 清空:行內「✕」刪除單條,「清除已完成」批量移除。
工作原理與兼容性¶
宿主端(index.js)註冊一個面向模型的工具 task_write,子命令有 add、set_status、propose_done、remove、replace、clear、list,並有一個會話投影 taskManager。工具的渲染結果內嵌一行機器標記 TASK_STATE::<json>,攜帶完整任務列表;投影從既有的 tool/result 事件中摺疊出這些標記,不引入自定義會話事件類型。
客戶端(client.js)把兩個掛件註冊到 shell.overlay 插槽:任務卡片,以及選中文字時出現的浮層按鈕。客戶端從投影讀模型任務,用戶任務、對模型任務的本地狀態修改(完成 / 隱藏)和確認狀態存於 localStorage——已安裝插件無法寫入宿主投影,這些狀態按設計放在客戶端。「開始」調用當前會話的 conversation.send(text)。
關於 1.1.5 的一處修復值得留意:模型用 replace 重寫任務列表時,此前每條任務都會拿到新 id,導致客戶端已做的隱藏、狀態修改、完成確認按 id 記錄而全部丟失。現在 replace 會按標題複用已有任務的 id,只有真正新增的任務才生成新 id,標題匹配同樣走歸一化。
平臺是 web(Harness 桌面 / 網頁 UI)。需要 Harness 暴露 shell.overlay 插槽、sessionProjections 服務,以及 conversation.send / sessions.scope 客戶端服務。插件只使用公開穩定的主題 token(--dsw-alias-*)。
權限方面:無網絡請求、無外部服務、無遙測;讀取會話投影中的任務,只寫入自己的 localStorage 鍵 @caipj/dsh-task-manager:*;新增一個模型工具 task_write,不觸碰其他東西。
適用場景與注意¶
適合希望在 Harness 聊天裏維護多步任務、又不想手動複製粘貼要點到對話中的開發者。
使用前應確認三件事:
1、Harness 版本是否暴露 shell.overlay 插槽、sessionProjections 服務與相關客戶端服務;不滿足時面板不會出現。
2、該插件以當前 dsh 進程權限運行,安裝前應閱讀源碼與許可證(MIT),確認信任後再裝。
3、已知限制:模型任務的完成 / 刪除是本地覆蓋,按會話存於 localStorage,不回寫會話日誌,重開會話時以本地記錄爲準;用戶任務只存在於本地瀏覽器 / 會話,點「開始」之前不會進入模型上下文;選中文字建任務依賴 DOM 結構識別列表條目,文字來自代碼塊或純文本(標記是真實字符)時,會退回按文本中的 - / 1. 切分。
結尾¶
dsh-task-manager 做的事情很具體:給 Harness 聊天補上一塊帶來源標註、需確認才落地的任務面板,讓多步任務的執行順序與完成狀態至少有據可查。目錄頁在 https://www.skillhub.cn/plugins/caipanjin/dsh-task-manager ,源碼在 https://github.com/caipanjin/dsh-task-manager 。