前言¶
在 DSH 裏做多機協作時,常見做法是 agent 各自跑會話、人工在聊天裏對任務狀態,或單獨維護一套任務板頁面。任務認領、續租、交付、遠程派發若分散在不同入口,瀏覽器多開還容易重複派工,關頁面後調度也會停。下面介紹 maintainer shaot92-del 的客戶端插件 dsh-team(GitHub:shaot92-del/dsh-team):在一個包裏把作業板的 agent 工具、側欄 GUI、Host 側 /api/board/ui/* 路由,以及從 dsh-shell 合併來的 sh_* 命令能力接到 DSH。數據仍來自獨立的 HTTP 任務板服務(倉庫不含板子實現),插件負責客戶端與 Host 調度。
這是什麼¶
dsh-team 是 DSH 的單包插件,分類爲客戶端。它解決的是:讓 DSH 內的 agent 和界面能統一操作「團隊 · 作業板」,並與 remote-agent 派發鏈路對齊,而不是再搭一套平行流程。
一個包內包含四塊能力:
- 12 個
board_*工具 —— 查板、建單、認領、續租、交付、打回、播報、派工、上報能力等。 - 4 個
sh_*工具 ——sh_run/sh_read/sh_write/sh_list,爲副機 worker 會話補上默認沒有的 pwsh / 讀寫 / 列目錄能力(由 dsh-shell 合併而來)。 - GUI 面板 —— 側欄「作業板」:任務表(篩選、搜索、展開詳情、認領、交付、打回)、機器能力卡、一行派工、可拖動桌寵狀態卡。
- Host 路由與調度器 ——
/api/board/ui/*(瀏覽器不直接跨網訪問板子);自 v1.1 起派發與終態回寫遷入 Host 後臺,不依賴瀏覽器常開。
當前 package 版本爲 1.1.10,許可證 MIT。
架構要點(v1.1)¶
派發權在 Host 一側,瀏覽器面板主要負責建單(例如 POST /api/board/ui/create 且 dispatch:'auto',任務進入 queued)。Host 後臺約每 4 秒執行 dispatchOnce():先 POST /api/take 原子佔位,再 POST /api/remote-agent/ui/dispatch,成功則 POST /api/attach,失敗則 POST /api/untake 放回隊列。約每 6 秒 syncRemote() 把 remote-agent 終態同步回板子並 POST /api/mark。
這樣設計是因爲:瀏覽器多開會重複派工、關頁即停;而 remote-agent 的 /dispatch 既不冪等也不等待副機受理,需要 Host 串行完成「佔位 → 派發 → 回綁」。v1.1.1 起 Host 調度器通過 connection.authenticatedUrl() 換取會話 cookie(約 10 分鐘緩存,401 自動重換),再調用 /api/remote-agent/ui/*,避免後臺 fetch 直接 401。副機 nodeId 與板子機器別名可通過插件內 MACHINE_BY_HOSTNAME 對齊(忽略大小寫與連字符)。
若板子未實現 v1.1 所需的 /api/take、/api/untake,Host 調度會一直拿不到派發權,任務停在 queued(日誌可能出現 take failed)。只要 v1.0 式手動行爲,可在配置裏關閉 autoDispatch。
核心功能¶
Agent 工具(board_*)¶
| 工具 | 作用 |
|---|---|
board_status |
總覽:待辦/進行/完成/打回計數、機器在線、最近事件 |
board_list |
列任務,可按 status / machine 過濾;v1.1 起默認全量(不再只給 200 條) |
board_claim |
認領到配置的 machine |
board_beat |
續租並寫進度備註 |
board_done |
交付(可帶 artifact) |
board_fail |
打回(blocked)或失敗(failed),須寫原因 |
board_say |
往事件流播報 |
board_dispatch |
選機建單(dryRun 預覽);v1.1 建單帶 dispatch:'auto' 由 Host 派發;goal 須 ≤ 300 字(v1.1.3 超限直接拒絕) |
board_attach |
遠程任務號綁到板子任務,狀態轉 running |
board_caps |
查看某臺機器上報的配置清單 |
board_assess |
本機能力評估(寫 ~/.dsh-board/identity.json 並上報) |
board_metrics |
各機器實時指標(內存/CPU/磁盤/運行時長) |
板子不可達時,board_caps 應返回 ok:false(插件自檢中有斷言)。
Agent 工具(sh_*)¶
| 工具 | 作用 |
|---|---|
sh_run |
執行命令(Windows 優先 pwsh,失敗回退 powershell);輸出按 maxOutputBytes 流式限流 |
sh_read |
讀文本文件 |
sh_write |
寫文本文件(UTF-8 無 BOM,自動建父目錄) |
sh_list |
列目錄 |
allowedRoots 爲空時不限制路徑;非空時僅允許 realpath 落在白名單內的讀寫與列目錄。這是路徑白名單,不是命令沙箱。
側欄面板¶
路徑:側欄「作業板」。數據經 Host /api/board/ui/*。約 8 秒自動刷新;A+ 調節字號(16/18/20px,存 localStorage)。行可展開查看狀態、機器、進度、產物並直接交付或打回。機器卡展示在線、能力徽章與指標。桌寵可拖、雙擊換尺寸、右鍵摺疊;立繪默認 /api/board/ui/pet.png,可用 petImage 覆蓋。
安裝與啓用¶
插件以當前 DSH 進程權限運行,安裝前建議閱讀倉庫源碼與 MIT 許可證。DSH 生態是「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。
在 Windows 上,README 給出的安裝方式如下(先定位 CLI):
$dsh = "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd"
# 本地開發目錄(示例路徑按你本機修改)
& $dsh plugin --profile desktop add 'file:D:\gp_video\dsh-team'
# 從 GitHub 安裝
& $dsh plugin --profile desktop add 'github:shaot92-del/dsh-team'
裝完後確認 profile 的 package.json 裏 dsh.profile.bundles 含有 dsh-team,然後重啓 DSH(Host 半邊改動需重啓;僅改 lib/client.js 時可刷新頁面)。
依賴板子服務:默認 http://127.0.0.1:8965,可用 boardUrl 指向自實現;板子若啓用 GP_BOARD_TOKEN,須在插件 token 填同一值。
配置¶
在 profile 的 cordis.patch.yml 中按 id 覆蓋:
- id: team
config:
boardUrl: 'http://127.0.0.1:8965'
machine: 'host' # 副機可改爲 gt14 / mb14 / pc2 等
token: ''
petImage: ''
allowedRoots: []
shellTimeoutMs: 120000
maxOutputBytes: 200000
autoDispatch: true
dispatchApproval: auto # v1.1.2:remote-agent 派發審批;自動調度須 auto,人工批改爲 manual
典型用法¶
- Agent 查板並認領:調用
board_status看總覽,再用board_list按status過濾;對本機machine執行board_claim,處理過程中用board_beat續租並寫備註。 - 建單交給 Host 自動派發:
board_dispatch指定 goal 與目標機(goal ≤ 300 字);v1.1 建單帶dispatch:'auto',由 Host 後臺take → dispatch → attach完成,無需瀏覽器常開派工。 - 副機缺 shell 能力時:在 allowedRoots 配置好後,用
sh_read/sh_write/sh_list/sh_run完成文件與命令操作。 - GUI 操作:側欄打開作業板,展開任務行填寫產物與備註後交付或打回;或用面板一行派工創建 queued 任務,由 Host 調度。
維護者在改代碼、裝入 DSH 前可本地跑自檢(不連真板子):
node scripts/plugcheck.mjs
真板子驗收(真派發、多機、桌寵等)使用 scripts/acceptance.mjs,需板子服務與本機媒體素材。
適用場景與注意¶
- 適合:已在用或計劃用 HTTP 任務板 + DSH multi-machine / remote-agent,希望 agent、GUI、Host 調度同一套板子協議的團隊或個人。
- 注意:插件是客戶端,不自帶板子;v1.1 自動派發要求板子支持
/api/take、/api/untake。sh_*受進程權限與allowedRoots約束,不能替代系統級隔離。GitHub 倉庫當前星標爲 0(以目錄頁信息爲準),功能以 README 與版本 1.1.10 爲準。
結尾¶
dsh-team 把作業板上的 12 個 board_*、4 個 sh_*、側欄面板和 Host 側 UI 路由打成一個 DSH 客戶端插件,並在 v1.1 把派發與終態回寫放到 Host,減輕瀏覽器重複派工與關頁停調度的問題。