Skip to content

dsh-workspace-mesh

Verified

dsh-workspace-mesh Β· v0.2.0 Β· Apache-2.0 Β· Web UI

Workspace mesh for DeepSeek Harness: declare which workspace lives on which host, dispatch tasks by workspace across paired DSH instances, and control the remote host lifecycle. The agent loop never leaves the owning machine.

Install

dsh plugin add dsh-workspace-mesh

Confirm the layer applied with dsh --profile default --dump-config β€” see the install guide.

Source

Tags

Readme

dsh-workspace-mesh

npm version CI license: Apache-2.0

Workspace mesh for DeepSeek Harness β€” the mesh is a grid of workspaces, not of agents.

Not resource remote-access. The agent loop never leaves the machine that owns the workspace; peers only exchange messages. See SPEC.md.

What it does

  • Declares which workspace lives on which machine (assignment.yml).
  • Exposes four tools to the model: mesh_list_nodes, mesh_status, mesh_dispatch, mesh_task_status (contract: docs/reference/tools.md).
  • Dispatches a task to the session of the owning workspace and collects the result.
  • Keeps execution local: only workspace/* and session/* methods are ever used. No bash, no file access.

Requirements

dsh >=0.2.1-rc.2 β€” declared in dsh.engines and checked when the bundle loads
Node.js >=20
Runtime deps none; cordis services are detected at runtime (SPEC Β§9.4)

Install

dsh plugin --profile web add dsh-workspace-mesh

Or load without installing, using an overlay patch (--patch):

- insert:
    - id: mesh
      name: dsh-workspace-mesh

Local development

pnpm install
pnpm build
dsh plugin --profile web add file:$(pwd)

pnpm verify runs the same gate as CI: build + typecheck + tests. The full picture β€” the pack cloud dev chain, the local install, the released-package install β€” is in docs/how-to/development.md.

Settings page

The browser half registers a read-only dashboard into the native settings navigation (settings.section, id mesh) and a live-configuration card on the plugin's own detail page (plugins.detail.section). It renders transport state, the peer roster, workspace placement and recent tasks, and writes configuration through two routes registered inside Connection's fence:

Route Method Purpose
/api/mesh/state GET Read-only snapshot
/api/mesh/config POST Validate + persist a config patch, apply the hot subset

The same browser half also registers a Workspace mesh entry in the left rail: it lists every workspace this instance can reach, which machine owns it and whether that machine is online, and it can send that workspace a message. Remote workspaces are virtual there β€” nothing is copied, the agent loop runs on the owning machine.

Payloads, error codes and the hot/restart split: docs/reference/http-api.md. Configuration keys and their defaults: docs/reference/config.md.

Status

The tool surface, task board, roster derivation, settings page and config layering work and are covered by tests.

Cross-machine dispatch works over the peer's own web API (kind: "typert"): configure peers and give each assignment a remote cwd, then mesh_dispatch creates a session on the owning machine and collects the reply. Without peers the plugin still loads and mesh_dispatch reports unavailable while the other three tools stay usable. The peer token rotates when the peer restarts β€” see docs/reference/config.md Β§3 and docs/explanation/roadmap.md.

Docs

docs/README.md is the only index. Start there.

License

Apache License 2.0 (Apache-2.0) β€” see LICENSE and NOTICE. The reasoning behind that choice is in docs/explanation/decisions.md D11.