Install verification: runtime verified (L5) · tested on dsh 0.2.1-rc.2 · last checked Install verification details →
What it doesAI
Renders raw HTML as visual cards in DeepSeek Harness with streaming, KaTeX, Mermaid, SVG, and builtin fonts.
- Creates visual cards from raw HTML
- Streaming render support
- Embeds KaTeX, Mermaid, SVG, and builtin fonts
Capability tags are AI-inferred or rule-extracted from the README (see badge) — vocabulary-limited, not install-verified. AI = inferred; README = literal keyword from the readme.
Installation
dsh plugin --profile web add github:plolpl789/dsh-raw-html-v2Install method: GitHub · runtime verified (L5)
Verification & Compatibility
Grouped by plugin version: each card lists the dsh versions actually tested against that artifact version and their install verdicts (L5 wins). Untested combinations are omitted — absence means untested, never assumed compatible. L1–L3 are a plugin-level static archive (independent of the dsh version — the same verdict on every dsh row): they sit in each row's level grid next to L4/L5, marked "static", while their evidence is stored once per plugin inside that row's "checks & evidence" instead of being duplicated per version.
External credentials (plugin-level): none detected
○ The author declares no dsh version requirement — install is not blocked by version.
| plugin \ dsh | dsh 0.2.1-rc.2 current | dsh 0.2.1-alpha.4 | dsh 0.2.1-alpha.2 | dsh 0.2.0-rc.2 | dsh 0.1.7-rc.2 |
|---|---|---|---|---|---|
| daa0f8 | ✓ | ✓ | ✓ | ✓ | ✓ |
daa0f8github✓ 13 runtime-verified2026-10-19
https://github.com/plolpl789/dsh-raw-html-v2
✓dsh 0.2.1-rc.2current2026-10-19L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.2.1-rc.2 · profile: l4-sandbox
Issued: 2026-10-19 · expires: 2026-10-26
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.2.1-alpha.42026-10-16L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.2.1-alpha.4 · profile: l4-sandbox
Issued: 2026-10-16 · expires: 2026-10-23
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.2.1-alpha.22026-10-12L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.2.1-alpha.2 · profile: l4-sandbox
Issued: 2026-10-12 · expires: 2026-10-19
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.2.0-rc.22026-10-09L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.2.0-rc.2 · profile: l4-sandbox
Issued: 2026-10-09 · expires: 2026-10-16
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.7-rc.22026-09-26L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.7-rc.2 · profile: l4-sandbox
Issued: 2026-09-26 · expires: 2026-10-03
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
○dsh 0.1.7-rc.12026-09-24not tested
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.1
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.7-rc.1 · profile: l4-sandbox
Issued: 2026-09-24 · expires: 2026-10-01
View checks & evidence
This level was not executed in this scan.
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.7-alpha.22026-09-23L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.7-alpha.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.7-alpha.2 · profile: l4-sandbox
Issued: 2026-09-23 · expires: 2026-09-30
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.6-alpha.22026-09-20L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.6-alpha.2 · profile: l3-fullscan
Issued: 2026-09-20 · expires: 2026-09-27
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.6-alpha.12026-09-17L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.6-alpha.1 · profile: l4-sandbox
Issued: 2026-09-17 · expires: 2026-09-24
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.5-rc.22026-09-11L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.5-rc.2 · profile: l4-sandbox
Issued: 2026-09-11 · expires: 2026-09-18
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.3-alpha.22026-09-08L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.3-alpha.2 · profile: l4-sandbox
Issued: 2026-09-08 · expires: 2026-09-15
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.3-alpha.12026-09-07L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.1
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dsh0.1.3-alpha.1 · profile: l3-fullscan
Issued: 2026-09-07 · expires: 2026-09-14
View checks & evidence
active in loader tree (151 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓dsh 0.1.2-rc.12026-09-05L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: 0.1.2-rc.1
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2#daa0f8
ID: dsh-raw-html-v2@daa0f8@dsh0.1.2-rc.1 · profile: l3-fullscan
Issued: 2026-09-05 · expires: 2026-09-12
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
✓prehistory2026-10-05L5 · runtime verified
- • Node.js: v24.14.0
- • DSH: unknown
- • Plugin artifact: github · https://github.com/plolpl789/dsh-raw-html-v2 (version unstated)
ID: dsh-raw-html-v2@daa0f8@dshunknown · profile: l4-sandbox
Issued: 2026-10-05 · expires: 2026-10-12
View checks & evidence
active in loader tree (150 entries)
L1–L3 are plugin-level static conclusions (baseline, identical across dsh versions): evidence is stored once per plugin.
Author badges
Embed the official badges in your README to showcase security & install-test status:
`[](https://www.dsh.so/artifact/dsh-raw-html-v2/)``[](https://www.dsh.so/artifact/dsh-raw-html-v2/)``[](https://www.dsh.so/artifact/dsh-raw-html-v2/)``[](https://www.dsh.so/artifact/dsh-raw-html-v2/)``[](https://www.dsh.so/artifact/dsh-raw-html-v2/)``[](https://www.dsh.so/artifact/dsh-raw-html-v2/)`Security Report
Two automated layers, neither a manual review: a static scan (per-plugin rule checks) and a model-driven dynamic security audit that covers only the subset static-flagged at warn or above and never executes plugin code.
Static low, dynamic high — stricter wins → overall high.
v0.8.0dsh manifest0.8.0git2026-10-210.8.0same versionclean · gitVet is an AST static scan (npm artifact or git source).
show static findings (5)
- criticalnewFunction · code-exec
lib/client.js:2831var fn = new Function('vc', 'hp', 'f', xhr.responseText) - warningchildProcess · code-exec
lib/index.js:132const child = spawn(cmd, args, { detached: true, stdio: 'ignore' }) - warningfsWrite · files
lib/index.js:577await fs.writeFile(STATE_FILE, JSON.stringify({ render, aesthetic, fontRoots: extraFonts, style: preferredStyle }), 'utf8') - warningfsWrite · files
lib/index.js:837await fs.writeFile(idxPath, lines.join('\n'), 'utf8') - warningfsWrite · files
lib/index.js:876await fs.writeFile(target, md, 'utf8')
show 5 audit findings
- highTrusted mode writes model-supplied on*/script handler source into the DSH page origin
lib/client.jsWhen the shield badge is switched on (one click on #vcp-trusted-toggle, persisted in localStorage), any event-handler source and card <script> carried by an assistant message is activated inside the DSH app origin. Chat content that merely quotes untrusted material (web page, file, injected text) then runs with the page's privileges: it can read the DOM/session state and call the host RPC surface exposed to this page (create-style, update-style, delete-style, add-fonts-root, open-style-folder, ai-generate), i.e. attacker-influenced code execution in the application origin.
- mediumRenderer fetches /vendor-v2/vcp-engine-v1.js with sync XHR and compiles it via new Function
lib/client.jsWhatever the host serves at that fixed same-origin path is compiled and run with full page privileges, with no hash or integrity check and outside CSP script-src protections that normally apply to <script src>. The engine file (assets/vcp-engine-v1.js) was not part of the harvested sources, so the actual sanitising/scoping code that filters card HTML cannot be audited from this review.
- mediumCard onclick="input('…')" bridge silently fills and sends chat messages as the user
lib/client.jsOne click on model-authored HTML (a button can be styled to look like anything, or cover the card) composes and submits an arbitrary message under the user's identity without confirmation. That message is a fresh model instruction, so it amplifies prompt injection into host RPC actions and file/style mutations. It works even with trusted mode off.
- mediumAttribute conversion is a denylist: only style/class/href/src/on* are filtered, iframe checked by src only
lib/client.jsEvery attribute that is not explicitly special-cased is copied verbatim into the React element. The iframe guard only inspects src, so a card can pair a valid https src with an unfiltered srcdoc (same-origin markup/script if the browser prefers it), and behavioural/URL-bearing attributes such as form/frame action, formaction or name are never validated - a script-free bypass route around the intended 'no script unless trusted' policy.
- lowDownloaded self-contained HTML re-embeds the model's card <script> sources
lib/client.jsThe exported .html file keeps the model-authored script code in a standalone document. Opened later from the local filesystem (file://) it executes that code with local-file read access, long after the chat is over.
Model-authored HTML is rendered into the DSH page origin; the one-click 'trusted mode' writes model-supplied on*/script handlers there, so chat content can execute script in the app origin.
Rule: the dynamic audit can only raise risk, never lower it (raise-only, never an exemption); a wrong raise is withdrawn by human review and the tier falls back to the static verdict. Overall verdict = the stricter of the two layers.
Disclaimer: the static scan and the dynamic security audit are both automated analysis, not a security guarantee. Always review what you install.
Activity
Last commit 2026-10-08 · activity: Active
• Repo created: 2026-09-03
• Stars: ★ 77 · Forks: 4
• Health: Active — committed within last 30 days
Source
Author README
View on GitHub ↗The author's original README from the repository — fetched live, unedited (the English page loads the default README).
