dsh-team:把「團隊 · 作業板」接進 DSH

前言

在 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 派發鏈路對齊,而不是再搭一套平行流程。

一個包內包含四塊能力:

  1. 12 個 board_* 工具 —— 查板、建單、認領、續租、交付、打回、播報、派工、上報能力等。
  2. 4 個 sh_* 工具 —— sh_run / sh_read / sh_write / sh_list,爲副機 worker 會話補上默認沒有的 pwsh / 讀寫 / 列目錄能力(由 dsh-shell 合併而來)。
  3. GUI 面板 —— 側欄「作業板」:任務表(篩選、搜索、展開詳情、認領、交付、打回)、機器能力卡、一行派工、可拖動桌寵狀態卡。
  4. 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

典型用法

  1. Agent 查板並認領:調用 board_status 看總覽,再用 board_list 按 status 過濾;對本機 machine 執行 board_claim,處理過程中用 board_beat 續租並寫備註。
  2. 建單交給 Host 自動派發:board_dispatch 指定 goal 與目標機(goal ≤ 300 字);v1.1 建單帶 dispatch:'auto',由 Host 後臺 take → dispatch → attach 完成,無需瀏覽器常開派工。
  3. 副機缺 shell 能力時:在 allowedRoots 配置好後,用 sh_read / sh_write / sh_list / sh_run 完成文件與命令操作。
  4. 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,減輕瀏覽器重複派工與關頁停調度的問題。

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

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

小夜