dsh-artifactDeepSeek Harness plugin

Inline ECharts rendering plugin for DeepSeek Harness

Stars
21
Forks
0
License
MIT
Last commit
Aug 26, 2026
Latest release
v2.0.0

Overview

Inline ECharts rendering plugin for DeepSeek Harness

Original README

Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.

View source

dsh-artifact logo

Turn natural-language requests into native, interactive ECharts and Mermaid visualizations inside DeepSeek Harness.

MIT license DeepSeek Harness ECharts and Mermaid Pure JSON payloads

简体中文

dsh-artifact turns natural-language requests into native ECharts and Mermaid visualizations inside DeepSeek Harness

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.

A natural-language request becoming a native GitHub-style calendar heatmap inside DeepSeek Harness

One request, from streamed reasoning and tool execution to a native ECharts calendar heatmap. The demonstration preserves the actual DeepSeek Harness interface.

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):

sh
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.

sh
# 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

json
1{
2  "engine": "echarts",
3  "title": "2024 quarterly revenue",
4  "mode": "dark",
5  "option": {
6    "tooltip": { "trigger": "axis" },
7    "legend": { "top": 28 },
8    "xAxis": { "type": "category", "data": ["Q1", "Q2", "Q3", "Q4"] },
9    "yAxis": { "type": "value", "name": "Revenue (10k CNY)" },
10    "series": [{ "type": "bar", "name": "Revenue", "data": [120, 180, 150, 210] }]
11  }
12}

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

sh
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

  • Native ECharts and Mermaid canvases
  • ECharts-GL compatibility for JSON-expressible ECharts 3D options
  • Light/dark appearance controls and PNG export
  • 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