dsh-canvas
Toggleable infinite process canvas over the DSH conversation shell - pan/zoom the live process, annotate deviations, steer corrections.
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 21, 2026
- Updated
- Aug 21, 2026
Introduction
dsh-canvas
Toggleable infinite process canvas over the DeepSeek Harness (DSH) web conversation shell — pan/zoom the live process, annotate deviations, and steer corrections, all on a canvas surface rendered in the browser.
🌏 中文文档 · English
npm package: @deepseek-ai/dsh-client-ui-canvas
A browser-half (Client) Cordis plugin for the DSH web UI. It mounts a toggleable, infinite, pannable/zoomable canvas over the conversation shell and binds it to the live session process: you can freely pan around the current conversation, zoom into any step, annotate deviations from the intended flow, and send steer corrections back into the session.
Features
- Infinite canvas over the shell — rendered into the frame-wide
shell.overlaylayer (declared by@deepseek-ai/dsh-client-ui-layout), so it floats above the session log without disturbing the underlying layout. - Live process binding — a root-scope observable (
canvas-source.ts) follows the currently selected session and re-points the subscription as the selection changes. - Annotate deviations — mark steps that diverge from the plan directly on the canvas.
- Steer corrections — a
steer(text)verb feeds corrections back through the selected session'sprompt(mode: 'steer')face. - Zero host contribution — the host half is deliberately empty; the canvas is a pure browser surface with no durable, model-visible, or host-registry footprint.
- i18n-ready — ships
canvasdictionaries through the locale service (@deepseek-ai/dsh-client-locale).
Install
The package is a client plugin for the DSH web client. Install it into the DSH web client's plugin set alongside its injected peer services:
@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-layoutreact^18.2.0(peer)
npm install @deepseek-ai/dsh-client-ui-canvas
Then register the plugin in your DSH web client composition (e.g. as a plugin row in
the client cordis.yml), and toggle the canvas from the shell.
Plugin surface
| Export | Kind | Purpose |
|---|---|---|
apply (client) | Cordis client plugin | registers the canvas dictionaries, starts the current-session source, mounts the panel into the overlay layer |
apply (host) | Cordis host plugin | empty — no host-plane contribution |
Injected face (CanvasInjected):
| Member | Type | Purpose |
|---|---|---|
hooks.canvas | HostObservable<ConversationSnapshot | undefined> | live snapshot of the current session (undefined while none) |
steer | (text: string) => Promise<boolean> | feed a correction back into the selected session |
Repository layout
dsh-canvas-pkg/
├── lib/ # compiled ESM output + .d.ts types + source maps (published)
│ ├── client.js # browser-half plugin bundle
│ └── types/ # TypeScript declarations
└── package.json
Tech stack
| Layer | Choice |
|---|---|
| Platform | DSH web client (Cordis client plugin) |
| Language | TypeScript → ES2022 ESM |
| Rendering | React 18 (react/jsx-runtime) |
| Distribution | npm package (files: ["lib"]) |
| License | MIT |