dsh-alpha
DSH 的多机多 Agent 编排与控制平台:发现各设备上的 Agent 与工作区,按机器、仓库、能力和负载将任务路由到本地或远程 Agent Runtime,统一回传进度、审批与结果,并在断线后恢复持久任务。
安装
dsh plugin --profile web add dsh-alpha
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-alpha
主控 agent 统一编排:一个 dsh 插件项目,让主控 agent 根据各 agent 特点、机器环境与可达性,把任务智能分派给多台机器上的多个 agent(Codex / Claude Code / Kimi,以及后续扩展的 provider)执行。
- 设计文档:[docs/design.md](docs/design.md)
- 多设备验收清单:[docs/multi-device-acceptance.md](docs/multi-device-acceptance.md)
- 背景与完整推演:agent-anywhere 仓库
docs/metacontroller-design.md
状态
- [x] 阶段 0:单机主控闭环(本机 adapters + list/dispatch 工具原型)
- [x] 阶段 1:gateway 跨机通道(反向 WS + 心跳 + 目录注册)
- [x] 阶段 2:任务协议与审批桥接(事件回流 + approve/reject 双向传导)
- [x] 阶段 3:负载 / repo 选机 / 按需 clone / 主控可递归
- [x] 阶段 4:对齐 dsh rc.8(本地执行收敛官方 provider + gateway 反向注册 alpha-gateway +
dsh plugin可安装) - [x] 阶段 5:全局逻辑工作区(多机 inventory 聚合 + Alpha Web 选择器 + 按表述自动解析 + 目标机路径约束)
自动化验收覆盖真实 TCP loopback、多 worker 目录、事件/审批/取消/断线、repo 选机和按需 clone。0.1.1 另已在两台实体 Linux worker 上完成 Codex / Claude Code / Kimi 真实任务、双 worker readiness、健康检查,以及首次 clone → 心跳广播 → 二次复用验收。
安装
方式 A:dsh plugin(面向使用者,推荐)
前提:本机已装 dsh(0.1.0-rc.8+)与 pnpm。
# 1) 把 dsh-alpha 装成 alpha profile 的 bundle 层。 # alpha profile 不存在时自动以 dsh-base 打底创建; # dsh-alpha 声明了 dsh.bundle.patch,装好后自动进入层栈。 dsh plugin --profile alpha add dsh-alpha # 2) 安装 alpha 专用 headless profile patch + preset。 # 通用 bundle 只挂控制平面,不会把 headless runner 注入 Web: node ~/.dsh/profiles/alpha/node_modules/dsh-alpha/scripts/install-alpha-profile.mjs # 3) 验收运行:主控 agent 查目录 → LLM 决策 → 派发 → 结果回流 dsh --profile alpha "用 list_agents 查看目录,把任务《写一句 hello》派发给最合适的 agent,并汇报结果。"
升级后先运行dsh plugin --profile alpha update dsh-alpha,再重跑一次install-alpha-profile.mjs,以同步可能更新的专用 patch;脚本会幂等替换托管区块并保留其它本地配置。
安装进 DSH Web 插件列表
Web 与 alpha 是相互隔离的 profile。要在 Web 的「设置 → 插件列表」中看到并使用 dsh-alpha,需要单独安装到 web;通用 bundle 是 Web-safe 的,不会挂载 alpha-runner:
dsh plugin --profile web add dsh-alpha node ~/.dsh/profiles/web/node_modules/dsh-alpha/scripts/install-preset.mjs dsh web
0.1.2 起发布包是薄插件:运行时只携带 Schemastery,Agent、Session 与 ToolRuntime 全部复用当前 DSH profile 已加载的宿主实例。不要把 DSH core 包重新加回 dependencies;同一 Web 进程存在两份 @deepseek-ai/dsh-tools 时,其模块私有 scheduler identity 不相同,会造成 tool_calls 后缺少对应 tool message。
插件列表读取的是当前 Web Loader 条目,而不是其它 profile 的依赖。Loader 必须使用精确包名 dsh-alpha,DSH 才会发现同包的 Web client;当前 DSH UI 会把开头的 dsh- 裁成 alpha。会话中的产品名称仍为“alpha 主控”,只有选中该 Agent preset 后,主控工具和全局工作区控件才会进入会话 scope。
侧栏提供独立的 Alpha 主控 入口:先列出所有机器广播的 workspace,用户选定或保持自动模式后,再创建 Alpha 会话,不需要先挑一个目标项目的本机路径。DSH 会把主控会话归档到插件自建的中性 alpha-control Workspace;它只承载会话,不参与任务执行。进入 Alpha 会话后,左上角原本的本机 Workspace 位置会被全局工作区选择器接管,不占用输入栏;弹层固定在视口内,只有结果区滚动。目录按 canonical Git repo 把不同机器路径合并为一个逻辑项目;出现多个同分候选时 Alpha 会先询问,不会把一台机器的绝对路径直接传给另一台。
任务派发采用事件驱动等待:主控只发起一次 dispatch_task,受控 Agent 的最终输出会作为同一次工具结果直接回到当前对话。task_status / task_result 仅保留给断线或历史任务恢复,不用于正常轮询。
若 Web 进程配置了 DSH_ALPHA_GATEWAY_PORT 并作为常驻 master,同一时间不要再启动使用相同端口的 dsh --profile alpha headless master;二者是两种入口,应择一占用该 Gateway。需要并行时必须为另一入口配置独立端口、token 与 worker 连接。
可选诊断命令
插件仍由标准 dsh web 启动并自动加载。安装包另提供可选诊断命令:
dsh-alpha status # 只读检查 Web、Gateway、worker 数量
profile 内安装会生成 node_modules/.bin/dsh-alpha;若希望在任意终端直接调用,应把该 bin 链接或安装到 PATH 中。
方式 B:源码 checkout(本仓库开发态)
npm install # 项目内依赖 npm run setup # 装 ~/.dsh/profiles/alpha + ~/.dsh/.agent-presets/alpha npm test # node --test dsh --profile alpha "用 list_agents 查看目录,把任务《写一句 hello》派发给最合适的 agent,并汇报结果。"
配置(环境变量 / profile 的 cordis.patch.yml 覆盖):
变量 · 默认 · 说明
DSH_ALPHA_PROVIDERS · codex,claude-code,kimi-code · 本机注册哪些 provider agent;mock 仅在测试时显式开启,避免被自动选机
DSH_ALPHA_ALLOWED_ROOTS · cwd 父目录 · 本机目录边界(与 AGENT_ANYWHERE_ALLOWED_ROOTS 同款语义)
DSH_ALPHA_WORKSPACES · 自动发现 · 主控机显式 workspace JSON;自动发现只检查 allowed root 本身与直属 Git 仓库
DSH_ALPHA_DATA_DIR · $DSH_HOME/storages/dsh-alpha · 任务/事件/审批 JSON 存储目录
DSH_ALPHA_DEFAULT_MODE / DSH_ALPHA_APPROVAL_POLICY / DSH_ALPHA_DEFAULT_MODEL · auto-review / on-request / 能力默认 · 派发默认设置
DSH_ALPHA_GATEWAY_PORT / DSH_ALPHA_GATEWAY_TOKENS · (关闭) · 启用主控 gateway hub:port 监听 + machineId:token,...(认证硬前提)
DSH_ALPHA_GATEWAY_HOST · 127.0.0.1 · hub 监听地址;跨机直连显式设为 0.0.0.0,并用防火墙限制来源
DSH_ALPHA_GATEWAY_READY_TIMEOUT_MS · 2000 · headless 主控在首次查目录前等待 token 清单中的全部 worker 重连;设为 0 可禁用等待
DSH_ALPHA_HUB_URL / DSH_ALPHA_WORKER_TOKEN / DSH_ALPHA_WORKER_MACHINE_ID · 本机 URL / 无 / hostname · worker 的 hub 地址、独立认证 token 与稳定机器 ID;token 默认通过 WS header 发送
DSH_ALPHA_WORKER_WORKSPACES · 自动发现 · worker 显式 workspace JSON:[{name?,repo_url?,path}];非 Git 目录必须显式登记
DSH_ALPHA_WORKER_DISCOVER_WORKSPACES · 1 · 是否扫描 allowed root 本身与直属 Git 仓库;设为 0 仅使用显式目录
DSH_ALPHA_WORKER_REPOS · 无 · 旧配置兼容别名;并入全局 workspace inventory
DSH_ALPHA_WORKER_PROVIDERS / DSH_ALPHA_WORKER_ALLOWED_ROOTS · 本机全部 / cwd 父目录 · worker 只广播探测可用的 provider;所有执行路径和 clone 目标均受 roots 约束
DSH_ALPHA_WORKER_RECONNECT_MIN_MS / DSH_ALPHA_WORKER_RECONNECT_MAX_MS · 1000 / 5000 · 连接失败指数退避边界;按需启动 master 时最大值应小于 readiness timeout
跨机(被控机 worker)
被控机无需 dsh profile,装包后直接跑 worker(反向连出,无需公网 IP):
npm install dsh-alpha # 或源码 checkout DSH_ALPHA_HUB_URL="ws://<master>:4310/" \ DSH_ALPHA_WORKER_TOKEN="<该机 token>" \ DSH_ALPHA_WORKER_MACHINE_ID=work1 \ DSH_ALPHA_WORKER_ALLOWED_ROOTS="/work" \ ./node_modules/.bin/dsh-alpha-worker
启动前可运行只读 doctor;它不会连接 hub 或打印 token:
./node_modules/.bin/dsh-alpha-worker-doctor
master 侧示例:
DSH_ALPHA_GATEWAY_HOST=0.0.0.0 \ DSH_ALPHA_GATEWAY_PORT=4310 \ DSH_ALPHA_GATEWAY_TOKENS="work1:<与 worker 相同的 token>" \ dsh --profile alpha "先用 list_agents 确认 work1 在线,再派发任务。"
认证 token 是硬前提。公网链路必须使用 wss://(通常由反向代理或隧道终止 TLS);ws:// 只用于可信局域网或本机。兼容旧配置时 token 仍可放在 URL query,但独立环境变量会改用 header,减少 URL/进程日志泄露。
hub 健康检查为 GET /healthz,返回 status 与当前连接的 worker 数量,不暴露机器 ID 或 token。
任务带 repoUrl 且目标机没有该仓库时,worker 会调用 git clone,把仓库确定性地落到首个 allowed root 下的 .dsh-alpha/repos/,完成后立即加入 repo 广播。目标机因此必须安装 git,并提前配置好对应仓库凭证。
结构
src/ ├─ plugin.mjs # 主控插件(host 平面):目录/gatew …(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:2,最后更新 2026-08-25