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.overlay
layer (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 |