前言¶
在 DeepSeek Harness(DSH)裏跑長任務,常見做法是單機串行:一章小說、一集分鏡、一整塊代碼改完才停。機器一掛,要麼從頭排,要麼人工盯進度。多臺電腦各自開 DSH,又缺少統一的計劃、派單和失敗接管,很難當成一條流水線用。
dsh-mesh 是社區插件,走「共享文件夾 + 租約 + 冪等提交」的路線:不搭數據庫、不綁中心服務,把協調、派單、進度和產物都寫在局域網可達的目錄裏(SMB 或本機盤均可)。任務在一處提交,按節點負載拆給多機並行;某臺中途宕機,步驟在租約過期後由其他節點接手,已完成的步驟不會重跑。
這是什麼¶
- 名稱:dsh-mesh(npm 包名
dsh-mesh,版本 0.1.0) - 維護者:Myco-Lee
- 分類:工作流
- 倉庫:GitHub - Myco-Lee/dsh-mesh
- 目錄頁:SkillHub - dsh-mesh
- 許可證:MIT
一句話:把多臺 DSH 組成局域網內的分佈式任務 DAG 執行網格,依賴共享目錄賬本、租約選主與崩潰恢復。
核心功能¶
任務模型¶
鏈路爲 Task → Plan(DAG)→ Step → Artifact → Ledger。每一步設計成大約 5–20 分鐘、可重試的單元;產物按 sha256 內容尋址落盤。
協調與容錯¶
- 租約:worker 搶到
lease.json才執行,默認每 10s 續期;45s 不續期視爲節點死亡,協調器回收並改派(優先避開上次失敗的節點)。 - 冪等:
commit.json以獨佔創建(wx)方式寫入,同一步重複執行只保留一份 commit。 - 賬本:各節點追加寫
ledger/<node>/events.jsonl;協調器合併讀取。 - 重試:單步默認最多 3 次,超限標記
blocked並在賬本留證據。
能力與調度(M3)¶
- 步驟可聲明
caps(如image),只派給心跳裏報告了對應能力的節點。 capSlots限制每通道併發;maxConcurrent爲本機總併發閘。priority數字越小越先派;未完成步驟超過maxQueuedSteps時暫停新派單(背壓)。
內置工具¶
| 工具 | 作用 |
|---|---|
mesh_plan |
用模板(research / novel / drama / code)生成計劃;submit=true 才真正提交 |
mesh_submit |
提交 DAG:{ goal, steps:[{id,title,instruction,dependsOn?,caps?,serial?,priority?}] } |
mesh_tasks |
列任務或查單任務分步狀態、執行節點、重試次數 |
mesh_status |
集羣視角:協調器、存活節點、隊列與背壓、本機通道佔用 |
mesh_cancel |
取消任務(已跑步驟跑完,不再派新步驟) |
指令裏可寫 {{step:s1}},依賴步驟產物會自動內聯;過長時落到 inputs/s1.md 供執行端讀取。
工作原理(簡圖)¶
提交端 (任意 DSH) 共享目錄 (\\host\dsh-mesh) 執行端 (每臺 DSH)
mesh_submit ──寫 plan──► tasks/<id>/plan.json
│
協調器 (租約選主) ──派單──► tasks/<id>/steps/<s>/assign.json
│
worker 搶租約 lease.json
│
dsh --profile mesh-worker headless
│
寫 commit.json (wx 獨佔創建)
安裝與啓用¶
插件以當前 DSH 進程權限運行;安裝前請自行查看倉庫源碼與 MIT 許可證。安裝命令須以 README 爲準,勿憑包名拼湊 github:owner/repo。
通過 link 裝進 profile¶
源碼目錄位置自定,用 link: 指向本地路徑:
dsh plugin --profile desktop add "link:D:\99-DP-D\01-代碼項目\dsh-mesh"
若目標機器的 Electron 獨佔 profile(報錯 profile "desktop" is managed exclusively by the Electron application),需手工安裝:
- 將倉庫複製到
C:\Users\<you>\dsh-plugins\dsh-mesh,並再複製一份到<profile>\node_modules\dsh-mesh(實目錄,非符號鏈接); - 在 profile 的
package.json中設置dependencies["dsh-mesh"] = "file:C:/Users/<you>/dsh-plugins/dsh-mesh",並把"dsh-mesh"加入dsh.profile.bundles; - 在 profile 的
cordis.patch.yml末尾加入插件配置(見下); - 重啓桌面應用(僅新建 bundle 時必須重啓;之後改 config 可熱重載)。
每臺機器的兩步準備¶
先建一個純執行用 profile(不帶桌面 UI 插件):
dsh --profile mesh-worker --from-default-profile headless headless "只回復 ok"
在 profile 的 cordis.patch.yml 末尾追加:
- id: dsh-mesh
config:
root: '\\<mesh-host>\dsh-mesh' # 共享目錄;本機示例 D:\dsh-mesh
node: LMM-1 # 唯一節點名(默認主機名)
role: auto # auto | coordinator | worker | client
workerProfile: mesh-worker
apiKeyFile: 'C:/Users/Administrator/.dsh/.credentials.yaml'
maxConcurrent: 2
pollMs: 2000
節點名必須唯一:兩臺機器同名會互相搶租約。root 爲空時插件不啓動,只記日誌。
主要配置項(完整表見 README)包括:leaseMs / leaseRenewMs(默認 45000 / 10000)、maxAttempts(3)、stepTimeoutMs(900000)、caps(默認 ['text'])、maxQueuedSteps(200)等。
典型用法¶
用模板生成並提交調研類任務¶
mesh_plan 可把「提綱 → 並行分節 → 覈驗」等套路固化,無需手寫幾十步 DAG:
{ "template": "research", "goal": "國際制裁的反制", "sections": ["問題的提出", "規範基礎", "比較法"], "target": "30000 字", "submit": true }
觀察集羣與任務¶
用 mesh_status 看協調器與存活節點;用 mesh_tasks 查某任務各步狀態與重試。本機運行日誌在 ~/.dsh/mesh/mesh.log。
無桌面宿主時單獨跑節點¶
node bin/mesh-node.mjs --root "\\<mesh-host>\dsh-mesh" --node LMM-3 `
--exe "D:\99-DP\DeepSeek Harness.exe" `
--cli "D:\99-DP\resources\app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js"
倉庫內可用 node test/mesh-core.test.mjs、node test/mesh-m3.test.mjs 做核心與 M3 行爲驗證(假執行器)。
適用場景與注意¶
README 中的對比表概括了典型收益:長篇寫作、分鏡級短劇、按文件所有權並行改代碼、分段深度調研等,多機並行且單機宕機不拖垮已完成步驟。
適合:已有局域網共享盤(或本機統一路徑)、多臺 DSH、願意用 DAG + 模板描述工作流的團隊。
限制(以 README 爲準):
- 僅面向局域網 / 同源可達共享目錄;跨公網需配合
dsh-wan-peers等做發現與隧道。 - 協調器爲租約選主:協調器所在機掛掉後,約
coordLeaseMs(默認 15s)內重選,期間不派新單,已跑步驟不受影響。 - 步驟產物目前以純文本爲主;二進制建議寫共享盤後在 commit 裏記路徑。
- 大產物走共享盤,受 SMB 帶寬約束,無跨節點帶寬優化。
DeepSeek Harness 生態強調「一切皆插件」;SkillHub 等爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-mesh 把多機 DSH 收成一條可掉線的任務流水線:共享目錄即賬本,租約保證單寫與故障接管,適合在局域網內做長週期、可並行的 agent 工作流。進一步瞭解請查閱 SkillHub 目錄頁 與 GitHub 倉庫。