shinelon/dsh-mermaid-plugin ↗★ 0

@local/mermaid-chat

将聊天中的Mermaid代码块渲染为图表 适合需要直接在聊天中预览流程图、时序图等Mermaid图表的用户。

套件
@local/mermaid-chat
相容性
待驗證
版本
1.0.0
授權
MIT
最近更新
2026年9月28日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:shinelon/dsh-mermaid-plugin

dsh-mermaid-plugin

English | 中文

A DeepSeek Harness (DSH) client plugin that renders ```mermaid code blocks in chat messages as diagrams — with a diagram/source toggle, light/dark theme following, and source-preserving error fallback.

Features

  • Auto detection — finds mermaid code blocks in the chat transcript by code-block banner or first-effective-line matching (leading blank lines, %% comments and YAML frontmatter are skipped).
  • 20 diagram types — flowchart, graph TB/TD/BT/RL/LR, sequenceDiagram, classDiagram, stateDiagram(-v2), erDiagram, journey, gantt, pie, mindmap, timeline, gitGraph, quadrantChart, requirementDiagram, c4Context, sankey-beta, xychart-beta, block-beta, packet-beta, architecture-beta.
  • Diagram / source toggle — the original code block stays reachable; the host source is hidden by CSS :has() only while a rendered diagram stands in.
  • Theme following — re-initializes mermaid (dark / default) and re-renders when the DSH dark-theme attribute changes.
  • Error fallback — a broken diagram keeps the source visible and shows the mermaid error message instead of swallowing content.
  • Strict sanitization — mermaid runs with securityLevel: "strict" on a transparent background.
  • Incremental rendering — a debounced MutationObserver scans for changes; unchanged code is never re-rendered; stale surfaces are cleaned up when their code block disappears.

Install

  • One-click from the dsh-market plugin market (Settings → Plugin Market), or
  • dsh plugin add this repository from GitHub.

Requires DSH Web. No build step and no npm dependencies are needed — client.js is a prebuilt bundle (mermaid 11.17.2 plus the plugin glue).

How it works

package.json (dsh.bundle.patch) ──► cordis.patch.yml ──► module "mermaid-chat" in host bundle
      │
      └─ dsh.client: platform web · immediately · inject conversation UI + locale
               │
               └─ client.js ──► window.__ModuleLoader__.load({ id, factory })
                        │
                        └─ apply(ctx): MutationObserver ──► detect ──► lazy-load mermaid ──► render SVG
  • The host half (index.js) is an empty apply() by protocol; all rendering lives on the client side.
  • UI strings resolve through the injected locale service with built-in zh/en fallback dictionaries.
  • Plugin disposal disconnects observers, removes the injected style sheet and every surface element.

Repository layout

FileKindPurpose
package.jsonhand-writtenplugin manifest: exports, dsh.bundle.patch, dsh.client options
index.jshand-writtenhost-half entry, empty apply()
client.jsprebuilt (~3.4 MB)mermaid 11.17.2 bundle + plugin logic (registration block at the end of file)
cordis.patch.ymlhand-writtenbundle patch inserting module mermaid-chat
locale/zh.json, locale/en.jsonhand-writtenplugin metadata (title/description)
icon.svghand-writtenplugin icon
AGENTS.mdhand-writtenrepository guide for agents and developers

Development

  • Do not reformat client.js by hand — it is a build artifact; its source project is not part of this repository.
  • Static check (no test/lint scripts exist): node --check index.js && node --check client.js
  • See AGENTS.md for architecture notes, conventions and the manual verification checklist.

License

MIT