DeepSeek Harness plugin

dsh-artifact-sumarilk

Render ECharts, Mermaid, Three.js, and sandboxed custom HTML inline in DeepSeek Harness conversations — declarative payloads fed to the real engines.

Jump to install

Source facts

Repository
sumarilkkxx/dsh-artifact
Latest update
Aug 20, 2026
Category
UI Enhancements
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/sumarilkkxx/dsh-artifact
Plugin: dsh-artifact-sumarilk
Author: sumarilkkxx

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

<p align="center"> <img src="assets/dsh-artifact-logo.svg" alt="dsh-artifact logo" width="96" /> </p>

<p align="center"><strong>Turn natural-language requests into native, interactive ECharts and Mermaid visualizations inside DeepSeek Harness.</strong></p>

<p align="center"> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-5EEAD4?style=flat-square" alt="MIT license" /></a> <img src="https://img.shields.io/badge/runtime-DeepSeek%20Harness-60A5FA?style=flat-square" alt="DeepSeek Harness" /> <img src="https://img.shields.io/badge/engines-ECharts%20%2B%20Mermaid-A78BFA?style=flat-square" alt="ECharts and Mermaid" /> <img src="https://img.shields.io/badge/payload-pure%20JSON-34D399?style=flat-square" alt="Pure JSON payloads" /> </p>

<p align="center"><a href="README.zh-CN.md">简体中文</a></p>

<p align="center"> <img src="assets/dsh-artifact-banner.png" alt="dsh-artifact — native ECharts and Mermaid visualization canvas for DeepSeek Harness" width="100%" /> </p>

What it is

dsh-artifact is a visualization renderer for DeepSeek Harness. Ask for a chart or diagram in ordinary language; the model understands the intent, chooses the appropriate native engine, emits a declarative payload, and the result appears directly in the conversation as an interactive canvas.

It is built for a near-native ECharts and Mermaid authoring experience—not a small set of hand-drawn chart templates. The browser receives a real ECharts option or Mermaid source and renders it with the real engine.

Your request  →  model understands the intent  →  ECharts option / Mermaid code  →  interactive canvas

Highlights

From a request to a native canvas

Describe the visualization you need in ordinary language. dsh-artifact keeps the complete workflow inside the conversation: the model reasons about the request, prepares a native engine payload, and renders the result as an interactive canvas with appearance controls and PNG export.

<p align="center"> <a href="https://raw.githubusercontent.com/sumarilkkxx/dsh-artifact/master/assets/dsh-artifact-workflow.webp" target="_blank" rel="noopener noreferrer" title="Open the full-size animation"> <img src="assets/dsh-artifact-workflow.webp" alt="A natural-language request becoming a native GitHub-style calendar heatmap inside DeepSeek Harness" width="100%" /> </a> </p>

<p align="center"><sub>One request, from streamed reasoning and tool execution to a native ECharts calendar heatmap. The demonstration preserves the actual DeepSeek Harness interface.</sub></p>

Built around real rendering engines

Capability
Native enginesECharts 6, the official ECharts-GL extension when an option needs it, and Mermaid 11
Broad ECharts coverageNative JSON-expressible series and components: cartesian, pie, radar, calendar heatmap, graph, sankey, tree, map, parallel, timeline, dataset, visualMap, dataZoom, and more
Diagram-first MermaidFlowcharts, sequence, class, state, ER, gantt, journey, pie, and other Mermaid-supported diagrams
Interactive canvasTooltips, legends, zoom, pan, 3D controls, and responsive resizing come from the actual renderer
Appearance controlsIn-canvas ECharts-inspired palettes and light/dark backgrounds; photographic globes retain their real-world surface and expose background mode only
Image downloadDownload ECharts, ECharts-GL, and Mermaid canvases as 2× PNG images using the active background; standard ECharts and Mermaid diagrams also support SVG download
Safe by designPure JSON across the declarative boundary; isolated custom HTML runs in a CSP-restricted sandbox iframe

Install

Install the DeepSeek Harness CLI first (one time):

npm install -g @deepseek-ai/dsh

If this is your first time using DSH, run dsh web once to initialize the web profile, then stop it before adding the plugin.

# GitHub install (recommended; prebuilt engine assets are included)
dsh plugin --profile web add github:sumarilkkxx/dsh-artifact

# Local development
dsh plugin --profile web add link:/path/to/dsh-artifact

Start or restart dsh web, then hard-refresh the browser (Cmd/Ctrl+Shift+R). pnpm must be available on PATH because the DSH plugin command uses it internally.

Use it naturally

Ask for the result you need. For example:

> Compare quarterly revenue and margin for 2024 in a dual-axis chart, highlight the best quarter, and use a dark canvas.

> Create a GitHub-style calendar heatmap for this year's daily commits.

> Draw a sequence diagram for OAuth login with success and failure paths.

The model calls render_artifact and returns a live canvas in the conversation. Use the Appearance control to switch palette/background where appropriate, and the adjacent Download action to save a PNG.

Engine contract

render_artifact

ParameterTypePurpose
enginestringecharts (default) or mermaid
optionobject / stringA native ECharts option for echarts; pure JSON only, no JavaScript functions
mapsobject / stringOptional legal GeoJSON/SVG registry for ECharts geo and map visualizations
codestringMermaid source for mermaid
themestringauto, tech-blue, minimal, night-purple, forest, or amber
modestringauto, light, or dark
titlestringConversation card title
heightnumberCanvas height in px (default 360, minimum 120)

The plugin passes ECharts options to setOption without translating them into a preset catalogue. Explicit values in an option take precedence over the in-canvas theme, exactly as they do in ECharts. ECharts-GL is loaded only when a supported 3D option requires it; it remains an ECharts compatibility layer, not a separate 3D scene editor.

JavaScript callbacks cannot cross the JSON security boundary. Prefer ECharts string templates such as {c}% for formatters. For genuinely callback-driven custom experiences, use render_html.

render_html

ParameterTypePurpose
htmlstringSelf-contained HTML fragment or document; inline CSS/JS is allowed
titlestringConversation card title
heightnumberCanvas height in px (default 400, minimum 120)

render_html is the deliberately separate escape hatch for custom widgets. It runs in an opaque-origin iframe with a CSP that blocks network access, top-level navigation, and form submission. Its contents cannot be exported by the host, so it intentionally has no PNG download control.

Native ECharts example

{
  "engine": "echarts",
  "title": "2024 quarterly revenue",
  "mode": "dark",
  "option": {
    "tooltip": { "trigger": "axis" },
    "legend": { "top": 28 },
    "xAxis": { "type": "category", "data": ["Q1", "Q2", "Q3", "Q4"] },
    "yAxis": { "type": "value", "name": "Revenue (10k CNY)" },
    "series": [{ "type": "bar", "name": "Revenue", "data": [120, 180, 150, 210] }]
  }
}

Security and compatibility

  • The declarative payload is validated as lossless JSON. Functions, undefined, and symbols are rejected.
  • Engine assets are served only from the plugin route; traversal attempts are blocked.
  • Map visualizations must include legal GeoJSON/SVG through maps; the plugin never fetches map data from the network.
  • The plugin ships its renderer assets locally, so ECharts and Mermaid render without a CDN dependency.

Development

npm install
npm run build

# Add the local plugin, then restart dsh web and hard-refresh.
dsh plugin --profile web add .
PathDescription
index.jsHost tool definitions, validation, prompt guidance, and local asset route
client.jsDeepSeek Harness toolviews, renderer dispatch, appearance controls, and PNG export
assets/Committed ECharts, ECharts-GL, Mermaid, and project media assets
docs/showcase/Source and pixel assets for the README motion study
scripts/build.mjsCopies renderer distributions into assets/

The plugin has no @deepseek-ai/* runtime imports. ECharts, ECharts-GL, and Mermaid are build-time dependencies used to create the committed local assets.

Roadmap

  • [x] Native ECharts and Mermaid canvases
  • [x] ECharts-GL compatibility for JSON-expressible ECharts 3D options
  • [x] Light/dark appearance controls and PNG export
  • [x] Sandboxed HTML escape hatch
  • [ ] Optional action round-trip from a canvas back to the model
  • [ ] More declarative rendering engines

Contributing

Contributions are welcome. Keep the declarative channel function-free, preserve the sandbox boundary, and commit rebuilt assets whenever an engine version changes.

License

[MIT](LICENSE)