dsh-mesh: Using a shared directory ledger to connect LAN DSHs into an offline-capable task grid

前言

在 DeepSeek Harness(DSH)里跑长任务,常见做法是单机串行:一章小说、一集分镜、一整块代码改完才停。机器一挂,要么从头排,要么人工盯进度。多台电脑各自开 DSH,又缺少统一的计划、派单和失败接管,很难当成一条流水线用。

dsh-mesh 是社区插件,走「共享文件夹 + 租约 + 幂等提交」的路线:不搭数据库、不绑中心服务,把协调、派单、进度和产物都写在局域网可达的目录里(SMB 或本机盘均可)。任务在一处提交,按节点负载拆给多机并行;某台中途宕机,步骤在租约过期后由其他节点接手,已完成的步骤不会重跑。

这是什么

一句话:把多台 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: 指向本地路径:

dsh plugin --profile desktop add "link:D:\99-DP-D\01-代码项目\dsh-mesh"

若目标机器的 Electron 独占 profile(报错 profile "desktop" is managed exclusively by the Electron application),需手工安装:

  1. 将仓库复制到 C:\Users\<you>\dsh-plugins\dsh-mesh,并再复制一份到 <profile>\node_modules\dsh-mesh(实目录,非符号链接);
  2. 在 profile 的 package.json 中设置 dependencies["dsh-mesh"] = "file:C:/Users/<you>/dsh-plugins/dsh-mesh",并把 "dsh-mesh" 加入 dsh.profile.bundles;
  3. 在 profile 的 cordis.patch.yml 末尾加入插件配置(见下);
  4. 重启桌面应用(仅新建 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 仓库。

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

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

Xiaoye