前言¶
在 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 仓库。