Lets the AI insert streaming-generated UI into the conversation or a side panel, written in TSX — already one of the model's native languages, so there is no JSON schema to teach it. Rendered without flicker, state kept across frames with no hard remount, and a click in the card driving the next chat turn. Inline is where streaming matters most; the side Canvas is the more agentic shape. Cards get agentic capabilities of their own — run bash, curl, call the model, read and write files.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-generative-ui
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:CNSeniorious000/dsh-generative-ui
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
Generative UI for DeepSeek Harness: the agent answers with a live React interface instead of prose. It streams — the component renders while the model is still typing it.
Two places it shows up:
- Inline — a fenced
```ui4a/tsxblock renders in place, between the paragraphs of the reply. Right for a chart, a form, a set of options to click, a calculation the reader will want to change a number in. - Canvas — a file at
ui4a/canvases/<id>.ui4a.tsxopens in a panel beside the conversation and stays there across turns. Right for a tool the user will come back to.
Generated code imports anything on npm (resolved from esm.sh at render time), shares the host's single React instance, and takes its colours from the app's own design tokens, so it follows the light/dark theme.
The ui4a in that fence is the harness this implements — UI for Agent, from Mind Lab: rather than coaxing an agent into a fixed UI schema, let it write ordinary frontend code and have the runtime enforce the boundaries. The reasoning, and the benchmarks behind it, are in UI4A: A Component-Native Harness for Generative UI. This package is that harness wired into dsh's web client.
Install
dsh plugin --profile web add dsh-generative-ui
Every release is published from CI over OIDC, so the tarball carries npm provenance. For an unreleased commit there is a preview build of every push:
dsh plugin --profile web add https://pkg.pr.new/CNSeniorious000/dsh-generative-ui@main
And working on it locally, point the profile at your checkout — lib/ is built by prepare, so
the profile does not care that this package uses bun and dsh uses pnpm:
dsh plugin --profile web add link:/path/to/dsh-generative-ui
dsh plugin forwards to the profile's package manager, so any of these installs the package —
and adds it to ~/.dsh/profiles/web/package.json's dsh.profile.bundles, which is the list dsh
actually boots. Verified on a clean machine, the bundle list reads:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-generative-ui"
]
}
}
}
The dependencies entry beside it is whatever form you installed — and from the registry that is
a caret, which on a 0.0.x version pins exactly: ^0.0.1 matches 0.0.1 and nothing later. Edit
it to ~0.0.1 if you want patches.
Start dsh web and it is there — or restart it if it was already running, since plugins are
mounted at boot and adding one has no hot-reload.
If nothing happens, check which agent preset the session is on first. Under minimal
(极简模式) the persona is declared complete: true, so nothing can append to the system prompt and
the skill tool is not in the preset — the model is never told this format exists. Measured: 45
characters of system prompt against 27524, and zero mentions of the fence. The rendering half still
works, so a card you paste by hand renders; the model just will not write one. Use standard, or
copy the preset and add tool-skill back.
How it works
The package is one plugin with two halves, which is how dsh plugins reach the browser:
lib/index.js (node) |
injects the system-prompt section, registers the generative-ui skill, serves the compiler wasm and canvas file reads over its own webServer routes |
lib/client.js (web) |
claims ui4a/tsx code blocks in the transcript, compiles TSX in-browser, mounts the canvas panel |
The model is taught in two layers, split by what each costs:
src/prompt.tsrides in every request, so it carries only the trigger, the fence syntax, the canvas path, and the colour tokens.src/skill.tsis registered throughctx.skills.register()and loads only when the model reaches for it. It carries the judgement: whether the answer wants an interface at all, inline or canvas, how to frame and lay one out.
That split is measured, not assumed — see CLAUDE.md §4.5 for the 40-prompt evaluation behind it.
Development
bun install
bun run check # lint + typecheck + build + smoke
bun run build bundles both halves with Bun.build. CLAUDE.md is the design document — it records the host constraints this plugin was built against, all of them found the hard way.
License
MIT
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 6553
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 6553
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 3156
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 2736
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 1432
A fixed-corner whale widget showing DeepSeek balance, today usage, per-turn cost and random talk lines, with sound effects and a menu.
Devin-AXIS/deepseek-design#deepseek-idesign★ 614
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.