Bidirectional RPC between DSH Host and Client through the native Connection and Typert Gateway, with targeted peer calls, cancellation, and connection lifecycle handling.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:CH4ACKO3/the-binding-of-dsh
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A DSH plugin that enables bidirectional RPC between Host and Client through the native DSH Connection and Typert Gateway.
Features
- Targeted Host-to-Client calls for connected browser or Node peers.
- Symmetric Typert Gateway calls in both directions.
- Request correlation, cancellation, and connection lifecycle handling.
- Legacy hosts share the native
events.hostWebSocket for RPC and events. - Modern hosts use Binding sockets for bidirectional RPC and native Gateway streams for events.
Connection owns peer addressing and lifecycle; Typert Gateway owns service descriptors, codecs, invocation, and errors.
Installation
npm install the-binding-of-dsh
The package declares its DSH client entrypoint and Harmony patches in
package.json, so it can be enabled as a regular DSH plugin. Harmony 0.8.6 or
newer derives the browser module dependency introduced by the Connection patch
and orders the Binding module automatically.
Development
Requires Node.js 22.22.3 or newer.
npm install
npm run check
License
MIT
Browser events across DSH versions
BrowserPeerClient negotiates the event transport at connection opening. Legacy
hosts retain onEvent() and its { channel, envelope: { rpcId, payload } } wire
shape. The legacy decoder is bundled separately; modern installations do not
need dsh-host-apiproxy. Domain payload types can be supplied to onEvent<T>()
or BrowserPeerEvent<T> using the consumer's legacy DSH types.
On DSH 0.1.5–0.1.7, eventTransport is gateway-v1. Use subscribe(event, listener) for native notifications and handleEvent(event, handler) for
waterfall requests. These preserve upstream event names and arguments;
onEvent() does not synthesize legacy frames on modern hosts.
peer.subscribe('api-session/status', (...args) => refreshSessionStatus(args))
peer.handleEvent('approval/request', async ({ agentId, request, signal }) => {
return await showApproval(agentId, request, signal)
})
await peer.connect()
Handlers receive eventId, agentId, the JSON request, and an AbortSignal.
Return a result matching the upstream event contract; return undefined to
continue to the next handler/Host, or throw to reject. Binding correlates and
sends the response automatically. Host cancellation and disconnection abort
the signal and suppress late results. Agent contexts are not reconstructed.
stream(endpoint, payload, signal) opens another native Gateway stream and
returns an async iterable. Payloads use native wire arguments ({ args: ... }).
Abort the signal or finish iteration to cancel that subscription.
connect() resolves only after the Gateway ready handshake. After a disconnect,
call connect() again, or opt in to automatic retries with reconnectDelayMs.
Event registrations survive reconnect; onState(true) should refetch application
state and reopen business streams. Events are not replayed by Binding. close()
stops retries, closes sockets, cancels requests and withdraws the remote contribution.
Older clients requesting only legacy events still receive HTTP 409 from modern hosts.
Validation (2026-09-28): 31 tests pass with the legacy development baseline. Isolated DSH 0.1.5-rc.2, 0.1.6-alpha.2, and 0.1.7-rc.2 Host tests pass forward/reverse RPC, lazy codecs, authentication refusal, Gateway notifications, waterfall result/delegation/rejection/cancellation and reconnect.
Run node test/upstream.e2e.mjs <isolated-dsh-root> <harmony-lib-bin-path> after building to repeat the modern Host test. It creates and removes an isolated profile, without model calls.
Links
More in this category
yjh051108/dsh-routing-suite★ 6999
One repository, three parts: a runtime injector for DSH plugin packages (inject, hot-reload, unload, promote a dev staging tool to the front, route self-heal, plus a settings-page plugin manager that lists, unloads and drags folders in to internalize), a task-aware reasoning-mode router agent preset (router-standard / router-spec / router-react), and a graded two-level task protocol whose six tools (commit_star, lock_stage, revise_do, edit_plan, mark_task, redteam_verdict) pin task state to disk. The injector implementation ships in-tree, so the install carries its own behaviour rather than a dependency list.
strukto-ai/mirage#dsh★ 3674
Swaps the filesystem and bash providers for a mirage virtual workspace: file tools and shell commands run over mounted resources (RAM, S3, Redis, Slack, Gmail, Notion, Postgres) instead of the host disk, with per-mount read/write/exec modes, per-command sandbox routing (monty, pyodide, quickjs in process; docker, e2b, daytona remote), and installed CLIs (git, gh, slack, linear, ntn, gws, or one you register) as head words in the virtual terminal.
hust-open-atom-club/oh-dsh★ 323
Community distribution: TUI, desktop, and Web UI as one bundle with layered installation.
weijiafu14/pi2dsh★ 212
Pi Host ABI compatibility engine: after one install, unmodified Pi extensions from npm mount as native DSH plugins with `dsh plugin add <pi-package>`. Verified end to end on stock DSH with pi-mcp-adapter (full MCP manager: OAuth, resources, prompts, MCP Apps, elicitation, sampling), @tintinweb/pi-subagents, pi-code, pi-hermes-memory and pi-background-tasks; `pi2dsh inspect` reports a package's compatibility before installing.
Fishquito7/dsh-skill-mcp-panel★ 178
Manages DSH skills and MCP servers from the web settings: skill cards with hot enable/disable, workspace scopes, groups, batch migration and drag-and-drop import, plus stdio/HTTP MCP CRUD with connection tests, secret redaction and the unified dsh-panel CLI.
lire1131/dsh-undo-savepoint★ 175
Undo/redo & rollback system for DSH: every config change is auto-snapshotted; undo/redo/restore to any version from the WebUI or the offline CLI/GUI tools (works even when DSH fails to boot).
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.