dsh-visualizer

DSH PLUGIN工具与能力

仓库 abidhmuhsin/dsh-visualizer

工具与能力 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

DSH plugin 可视化工具,将模型生成的 HTML 文档流式渲染为沙箱内联预览,支持图表、交互原型等,可下载为独立文件。

一句话选型结论

按资料字段整理

dsh-visualizer 是工具与能力类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类工具与能力 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 16 复刻 1 · 未关闭 issue 未标注
最近更新 2026-09-06 创建于 2026-08-21
README 15.6 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-visualizer:DeepSeek Harness 的实时流式可视化预览插件

  • 流式渲染HTML预览
  • 沙箱内联框架
  • 支持Chart.js等CDN
  • 可下载HTML/SVG
  • 无需服务器往返

上游标签

dsh-plugin

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在工具与能力场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-visualizer当前 未做沙盒验证 未标注 16 未标注 无
huashu-design 未做沙盒验证 未标注 3.0 万 未标注 有
loopx 未做沙盒验证 未标注 6,233 未标注 无
agy-staff 未做沙盒验证 未标注 870 未标注 有
dsh-startup-screen 未做沙盒验证 未标注 633 未标注 有
minara-skills L4 · 沙盒安装通过 中风险 360 未标注 有

仓库档案

工具与能力
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方abidhmuhsin仓库 dsh-visualizer · 默认分支 未标注
分类工具与能力tools
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue16 / 1 / 未标注收录时的数值,非实时
创建 / 更新2026-08-21 · 2026-09-06最后推送 未标注
本站收录2026-08-27首次进入本站目录的时间

README 全文

15.6 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-visualizer

A DeepSeek Harness plugin. The visualizer tool streams a self-contained HTML document into the chat as the model writes it, with a live preview in a sandboxed inline frame — Chart.js, external CDN libraries, all of it. Nothing touches the workspace.

One package ships both halves: the model-facing tool (lib/index.js) and the Web GUI card (lib/client.js, declared through the package's dsh.client manifest). Install it and a bundle layer mounts both. No manual profile patch editing.

Every generation is downloadable from the card as a self-contained .html (or .svg) file. No server round-trip.

Settled cards also carry a comment mode: toggle the pen control in the row chrome, click any element (or drag a rectangle) inside the frame, and each pick becomes a comment row below the renderer showing the element's selector, markup, and text. Write a note per pick and Send — the picks compose one [widget] turn for the model, locator bundle included, so it can edit the exact elements you pointed at. Esc or the toggle exits; the document runs pristine while mode is off.

Full-length demos, one per artifact type:

  1. Pull request flow overview — diagram
  2. Photosynthesis explainer — interactive
  3. How computers work — mockup (shown above)
  4. The plugin itself, explained and rendered by the plugin — self-hosted
  5. Streaming generative UI highlights — highlights
  6. Combined demo — multiple use cases in one run

Install

Requires Node ^22.19 or >=24 and a DeepSeek Harness installation on 0.1.2-rc.1 or newer (older builds: see Harness version below):

# install into the default web profile
dsh plugin --profile web add 'git+https://github.com/abidhmuhsin/dsh-visualizer.git'

# or install into any custom profile
dsh plugin --profile  add 'git+https://github.com/abidhmuhsin/dsh-visualizer.git'

The first run fails with an "Add the package to allowBuilds" hint. That's pnpm's supply-chain gate blocking the prepare build until it's allowlisted; the hint carries the exact key, keyed on the codeload URL and the resolved commit. Paste that block under allowBuilds: in ~/.dsh/profiles//pnpm-workspace.yaml and re-run. Keys pin the commit, so after a new upstream push, reinstalling prints a fresh hint to paste.

Harness version

The default branch tracks the latest DeepSeek Harness pre-release (0.1.2-rc.1 or newer). 0.1.2-alpha.3 renamed the client conversationEvents service to uiConversation and moved the Chat Node out of dsh-client-ui-conversation into the new dsh-client-ui-chat package, so the card cannot mount on builds older than that — the tool parks at pending (waiting for service: conversationEvents). 0.1.2-rc.1's Compact transcript view can fold a settled card away once its turn closes; see Settled cards and Compact transcript view below for how this plugin handles that.

On an older harness (0.1.1-rc.2 and earlier pre-alpha builds), install the pre-alpha compatibility branch instead, with a ref fragment:

dsh plugin --profile  add 'git+https://github.com/abidhmuhsin/dsh-visualizer.git#pre-harness-0.1.2-alpha3-compat'

That branch is the last state of the plugin built against the pre-0.1.2-alpha.3 client API. It is frozen — new features land on the default branch only — so upgrading the harness is the way forward.

Settled cards and Compact transcript view

Compact transcript view folds a settled card's tool-call row away once its turn closes. This plugin keeps the card live in place until then, and republishes it through the harness's turn-tail extension point once the turn closes — the only way to survive the fold, since that hole doesn't exist any earlier. Normal view never folds, so the card just stays where it always was, with no second copy. See CHANGELOG.md for the mechanics.

Or Install from a local checkout

To hack on the plugin (or install a version not yet pushed), check it out, build, and add it by local path:

git clone https://github.com/abidhmuhsin/dsh-visualizer.git ~/tools/dsh-visualizer
cd ~/tools/dsh-visualizer
pnpm install
pnpm build

cd ~/tools/deepseek-harness
pnpm dsh plugin --profile visualizer add '/home/user/tools/dsh-visualizer'

A local path skips the git fetch and the allowBuilds dance, since pnpm build already produced lib/. The loader still imports from the installed copy under the profile, though. To pick up changes: re-run pnpm build in the checkout, then remove and add again.

Boot the profile and ask the model to "visualize …"; the streamed document appears inline while it's written. Pin a release with a ref fragment ('git+https://github.com/abidhmuhsin/dsh-visualizer.git#v0.2.0'). To remove:

dsh plugin --profile  remove dsh-visualizer

How it mounts

The package declares a dsh.bundle manifest (dsh.bundle.patch → ./cordis.patch.yml), so dsh plugin add installs it as a profile patch layer on its own. That layer inserts one loader row for the package:

  • The host Loader imports lib/index.js; its apply() registers the model-facing visualizer tool.
  • The Web GUI's client module system scans Loader entries for packages declaring a dsh.client manifest and serves lib/client.js, which renders the streaming card and the settled row.

Configuration

The bundle layer already inserts the loader row, so overriding config takes a flat id-targeted patch entry in the profile's own patch layer (~/.dsh/profiles//cordis.patch.yml). Don't wrap it in insert: — that appends a second row instead of overriding the installed one. The complete option list, at current defaults:

- id: dsh-visualizer
config:
maxArtifactBytes: 262144      # per-call render size limit, in bytes
guideTool: true               # false = drop the visualizer_guide recipe tool (render tool stays)
guideTypes: [chart, diagram, mockup, interactive, art]   # which types to teach and allow
shareArtifacts: true          # false = no disk mirror, serve route, or Share control
artifactDir: ~/.dsh/visualizer/artifacts        # $DSH_HOME honored
artifactRetentionDays: 30     # sweep artifacts older than this at activation; 0 disables
shareKey: ''                  # pin the link key so links survive restarts

guideTypes narrows both guide surfaces at once: a disabled type is rejected at the tool's argument boundary, and unknown ids or an empty list fail the plugin load.

How it works

The tool declares html as its last schema parameter, so logged call arguments carry a growing document prefix while the model streams. The card paints that prefix live inside a null-origin sandboxed iframe; at dispatch the final DOM reconciles and scripts run once. An authoring guide teaches the model when to reach for each artifact type (chart, diagram, mockup, interactive, art) and how to author it — a one-line roster in the system prompt, with deeper per-type recipes on demand through a visualizer_guide tool so the standing prompt stays small. A settle-time static check inspects the finished document (compiled, never executed) and reports defects back to the model for an in-turn fix.

Rendered documents can talk back through a small bridge: scripts may submit a follow-up chat prompt (sendPrompt, validated and rate-limited), open http(s) links (openLink, scheme-checked), and persist state across renders (window.storage, namespaced by title — a regenerated dashboard finds its previous values). Documents inherit the app's theme tokens, and anchor clicks inside the card never navigate the app: fragments scroll in place, external links pass the same validation gate. A card shows load/runtime script failures inline instead of silently rendering nothing. window.share ({exported, url}, plus a dsh-share-status window event) tells a document its own current share state — read-only; a document can observe whether it has been shared but never trigger a share itself, since that stays a deliberate, one-click chrome action.

A settled card offers four actions before it's shared — Fullscreen (expands the card to the viewport; Escape or a second click leaves), Download (self-contained .html/.svg via Blob, no server round-trip), Copy HTML, and Export (next section) — and three more once it is: Share, Copy share link, and Unshare. When a document fails — a library that never loaded, or a script that threw — the card's error notice grows one more: one click that asks the model to repair the render, since the settle-time check compiles scripts without running them and so never sees these failures itself.

Sharing

Nothing is written to disk until you ask for it. Clicking Export tells the host to mirror one settled call: the host reads that call's title/html straight out of its own durable session log — never from anything the browser sends — checks it actually is a settled, successful visualizer call, and writes it under a name both planes independently derive from (title, html). Exporting the same call again is a harmless no-op — same bytes, same name, same file.

Once the write confirms, Export's slot becomes Share (opens /artifacts/visualizer/?k= in a new tab), and two more controls appear beside it: Copy share link (puts that address on the clipboard without leaving the chat) and Unshare — a second click, arm-then-confirm like the gallery's own Delete rather than a native confirm dialog, removing the export from disk and returning the card to its pre-shared state. Copy share link and Unshare only ever appear once something is actually shared; there is nothing to copy or unshare before that.

  • Names carry a kebab-case slug of the title plus a digest of the exact content — -<16 hex>.html|.svg (hex-chart-performance-metrics-3531….html). Same render, same link forever; changed content gets a fresh link beside the old one. Downloads keep just the slug.
  • Links embed a capability key. By default each harness start issues a random one, so links expire on restart (export again to reissue); set shareKey in config to pin one and links survive restarts. Anyone holding a working link can open it — treat it like a secret; this is unguessability, not per-user auth. The same key also gates the export request itself, and is rate-limited to blunt a scripted loop.
  • Safe by construction. Shared HTML runs inside a sandboxed frame (no access to your session, cookies, or workspace) under the same CDN allowlist as the inline card; shared SVG behaves like a plain image with scripting stripped. Responses carry no-store and hardening headers, and only regular export files are servable — anything else gets an identical not-found page.
  • Layers of access control. Shared links ride behind the harness's own authentication — no valid harness session, no route — and on top of that each link carries the boot-time capability key described above. One without the other fails closed. Only a call that genuinely settled successfully as visualizer in a currently live session can ever be exported — the request names a call, never bytes, so there is no way to make the host write content it did not itself already log.
  • Housekeeping. Artifacts older than artifactRetentionDays (default 30, 0 = never) sweep when the plugin activates — pinned artifacts (see below) are exempt regardless of age. On profiles without a web server (TUI/headless) or a live sessions store, sharing simply doesn't appear.

Artifact gallery. An Artifacts tab sits beside Chat (and the trajectory view, when your harness build has one): every export currently on disk, pinned first then newest, each with Pin, Open, Copy link, and Delete — only calls someone explicitly exported, not every render (nothing is written until Export/Copy-link is clicked). It reads the same exports directory the Share control writes into, so anything you chose to share in the session stays reachable even after its original chat message scrolls out of view. Pin floats an artifact to the top of the listing and exempts it from the retention sweep — a single click, reversible, no confirm step. A search box filters by title, kind (HTML/SVG), date, and pinned-only chips narrow further, and a count shows how many of the total are currently shown. Switching to the tab always refetches; a manual Refresh also picks up renders that settled while already sitting on it. Delete asks for a second click before removing anything — click once to arm, again to confirm; it reverts on its own after a few seconds or if you click elsewhere (and drops the artifact's pin, if any). The tab itself only appears where shareArtifacts is enabled, same as the card's Share control.

Production hardening tip: for stronger isolation, serve the artifacts from a different domain than the main web UI in production (e.g., pointing artifactDir at a path a CDN or static host publishes, with the main app linking out to it). Generated pages then never share an origin with your authenticated surface at all — the strongest defense-in-depth available for LLM-authored content. A static publisher can't check the per-boot key (?k=), so pair this setup with a pinned shareKey — stable across restarts and easy to carry into whatever gating the publishing layer applies.

A "not found" answer means one of: the harness restarted while using the default per-boot key (re-open the document from chat and share fresh), the live shareKey no longer matches the one baked into the link, or the artifact passed its retention window.

Settle-time document check

When a call settles, execute() statically inspects the finished document (src/inspect.ts). Script bodies are compiled, never executed, so syntax errors show up without side effects. Attributes are scanned per tag for duplicates, ids for double definitions, and url(#…)/href="#…" references for dangling targets; inline event handlers get the same compile check.

The verdict rides the tool result, which is the model's own channel. A clean render says document check passed; a defective one lists its findings (line-numbered, capped at six) with the instruction to fix and re-render in the same turn. Tool results are logged, so a replayed session reproduces the verdict exactly.

The check is heuristic and conservative on purpose. It declines to judge a module script whose import statements can't be lifted cleanly, rather than risk a false verdict, and it can't gate what already streamed: the guarantee is that authored defects are named and repaired in-turn, not that no intermediate frame was ever painted.

Development

pnpm install
pnpm test     # vitest unit tests for both halves
pnpm build    # tsc emits lib/types declarations, tsdown bundles lib/ runtime + lib/client.js

Both halves follow the DeepSeek Harness plugin contract (ctx.effect() registrations, invariant companion under /invariant). The client bundle keeps the loader's lazy-CJS factory artifact format and the cross-plugin purity rule: platform modules stay external, everything else inlines.

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-visualizer 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-visualizer 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-visualizer 安全吗?

未标注。

dsh-visualizer 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-visualizer 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-visualizer 有哪些功能?

流式渲染HTML预览、沙箱内联框架、支持Chart.js等CDN、可下载HTML/SVG、无需服务器往返。

同名或近似条目

2 条
不同作者的仓库分开列,请确认你要装的是哪一个
工具与能力
按星标排序,可作替代方案

huashu-design

huashu-design

在 DeepSeek Harness 里说一句话,就能拿回可交付的设计:网页、App 原型、可编辑 PPTX、动画与信息图,自带 84 种风

未标注验证等级 3.0 万 星

loopx

loopx

LoopX 是面向长周期 Agent 的本地优先控制平面,作为 DSH plugin 为 DeepSeek Harness 提供持久目标、证

未标注验证等级 6,233 星

agy-staff

agy-staff

把 Google Antigravity CLI 作为快速 Gemini 员工接入 DSH,提供子代理侧边栏、编排模式与多种角色技能。

未标注验证等级 870 星

dsh-startup-screen

dsh-startup-screen

DeepSeek Harness 的启动界面与启动动画插件。

未标注验证等级 633 星

dsh-blender-plugin

dsh-blender-plugin

让 AI 模型通过直连 TCP 通道实时驱动 Blender 的 DSH plugin:15 个工具覆盖视口取帧、任意角度渲染、内循环搜索、

未标注验证等级 211 星

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。