⏳ This skill is pending AI review.
Scores will appear once the review pipeline completes.
genui
Render structured interactive UI inline through the dsh-ui fence. Use for key points, emphasis, comparisons, flows, steps, status, data, demos, and interactions whenever structured presentation would be clearer than prose. Preserve conversation language for all user-visible text.
Choose how to use this skill
You do not need every option. Choose the path your AI client supports. The stable page stays the same; versioned files are immutable.
1. Native installer
This listing has no registered native installer command. Use the complete package or source fallback below, depending on what your client supports.
Do not guess an installer command or replace an existing version without reviewing the diff.
2. Complete package recommended
Download the ZIP when available. It includes SKILL.md plus the references, security notes and version metadata.
No complete ProSkills package is published for this listing yet.3. Prompt-only
Copy the prompt above when the agent can read the stable page or when you want to adopt the workflow without installing a skill.
Need only the instruction file?
Download SKILL.md only if your client requires a single file. The complete ZIP is safer for a full installation because it preserves the references and release context.
No path installs or executes anything by itself. Your agent still needs access to the project files. Before updating, compare the installed version and review the diff.
// RATINGS
Not yet listed on ClawHub or SkillsMP
// README
🎨 dsh-genui
English · 简体中文
Open the live product site · Watch the real demo · Install in DSH
Give the model's answers a face — the text is still there, and an interactive UI is already live.
🔌 Ecosystem: the repo carries the
#dsh·#dsh-plugintopics — welcome to be listed by @dsh-plugin.
dsh-genui turns a model reply into a safe, interactive DSH surface. Ask “how are this month’s orders doing?” and the answer can include a sortable data panel, a native video, a draggable plot, a local quiz, or a persistent session panel — without replacing the surrounding text.
Start with the evidence
| If you want to… | Go straight to… | What you can verify |
|---|---|---|
| See the complete DSH flow first | 40-second real walkthrough | Components are rendered inside a real DSH conversation. |
| Inspect concrete UI outputs | Three real outputs | Monitoring, function plots, and composable layout primitives. |
| Try it in your own DSH | Quick start | A public npm install, a prompt to run, and an activation check. |
| Learn the JSON language | Component syntax | The supported, guarded dsh-ui component specification. |
Watch the real interface
No concept mockups. The recording and images in this section are captured from
dsh-genuirendering in the DSH interface. Use them to see the actual visual language before installing.
40-second walkthrough
https://github.com/user-attachments/assets/f5db33ec-7471-4d4a-a85b-79c9962ab4ef
The walkthrough moves from an answer-embedded panel through forms, plotting, Mermaid, and 3D-oriented components. The player does not auto-play. If it does not load, use the original MP4; the four-step prompt sequence is documented in demo-prompts.md.
Three real outputs inside a DSH reply
1. A monitoring panel is an answer, not a separate dashboard
2. A function plot redraws locally as its parameters change
3. Layout primitives compose into structured work surfaces
⚠️ Read this first: dual-channel rendering (no host source patch required)
The plugin ships two rendering channels and picks one automatically after the host activates its browser module:
- Registry channel: when the host exposes the
fence-registryextension point (newer dsh builds), fences register through the host's streaming render pipeline and behave seamlessly with the host; - DOM channel: when the host lacks that extension point (including supported stock DSH builds), the plugin observes the session DOM and mounts its own render tree. Since 0.7.2 it supports streaming rendering: components appear as the model writes them — the first finished component shows up immediately, no need to wait for the whole reply. Since 0.8.3 fence discovery is multi-surface: it matches the stock
md-code-blocksurface, the deepsuite-style.code-block/.code-block-smallsurfaces some host builds render instead, and — as a structural backstop — any element whose banner labels itdsh-uiand contains a<pre>body. If your dsh build renders fences with a different class name, they still render (and a one-time console warning tells you the host DOM drifted). - DSH 0.1.7 generic code banner: when the host's final DOM omits fenced-code language metadata, dsh-genui reads the current assistant's original Markdown from the public ChatSnapshot and only takes over
dsh-uifences. The DOM identifies the mount location. If source data is temporarily unavailable, a settled assistant CodeBlock can use the strict canonical GenUI validation as a final fallback.
Whichever channel is active, components, interactions, panels, and persistence behave identically.
CI's packed host smoke installs the generated npm tarball in a real DSH host and verifies host startup and rendering. Source-backed fence routing is covered by integration tests; the smoke does not claim to validate a real model response. Real-model E2E requires configured model credentials.
The repository ships both renderer channels, the host plugin, and the built browser bundle. The host still owns client activation and must provide the slots and sessions services. A downloaded client.js or a ModuleLoader cache entry proves only that bytes arrived — successful activation always prints [genui] client active; fence-channel=registry|dom. If that line is absent, fix package/profile identity or host activation first; DOM attributes such as data-streaming and data-chat-anchor-key are optional fallbacks, not installation prerequisites.
✨ Before vs. after
| Plain answer | With dsh-genui |
|---|---|
| "Revenue this month: ¥128,430, +12.4% MoM — watch the conversion rate." | One line of analysis + three stat cards (revenue / orders / conversion), a trend chart, and a progress bar rendered right beside it |
| Want to see more? Type another question. | The panel already has "Refresh" / "Switch view" buttons — click, and the model updates the data |
🚀 Quick start
Prerequisites — all required:
- dsh
^0.1.2-rc.1 || ^0.1.5-alpha.1 || ^0.1.6-alpha.1 || ^0.1.7-alpha.1 || >=0.2.0-rc.1 <0.3.0-0(DSH0.2.1-alpha.1is currently a prerelease; verified host roles: minimumdsh-v0.1.2-rc.1, currentdsh-v0.2.0-rc.2, nextdsh-v0.2.1-alpha.1; users on DSH<=0.1.1-rc.xshould use dsh-genui0.9.8) pnpmon your PATH: thedsh plugincommand depends on it. If missing:corepack enable(ornpm i -g pnpm), then open a new terminal and confirmpnpm -vprints a version
Install and activate in DSH (one command, all dependencies included):
# Public npm package (works without an npm account)
dsh plugin --profile web add @changfenhuang/dsh-genui
To add it only as a Node dependency in an existing project:
npm install @changfenhuang/dsh-genui
npm installonly adds the dependency; it does not register the plugin with DSH. Usedsh plugin addabove when installing it into DSH.
⚠️ Don't use
link:on a freshly cloned directory —link:does not install the plugin's dependencies (mermaid / three / react), so the renderer will break. Use the npm command above for normal installation; reservelink:for local development iteration (see below).
Package name and version matter
- The scope matters: npm also hosts a same-named, unscoped
dsh-genui(a Vue/OpenTiny implementation by a different maintainer, unrelated to this repo). If an install listing describes "interactive charts, forms, calculators, dashboards, and mini apps
// HOW IT'S BUILT
KEY FILES