图表 默认启用 v1.1.0

SVG 图表、Mermaid 图表和交互式可视化 — 在聊天界面中内联渲染。从架构概览到交互式数据仪表盘,此技能可将任何可视化请求转化为直接在对话中渲染的输出。

技能名称diagram
版本1.1.0
默认启用是 — 始终注入,无需 /skill load
输出格式内联 SVG、Mermaid 代码块、diagram-html 组件
触发条件任何需要可视化说明的请求:流程图、对比图、时间线、图表、地图、模拟、原型
参考模块svg-components、color-palette、module-chart、module-widget、module-interactive、module-map、module-mockup、module-art

设计原则

此技能生成的每个图表都遵循四个核心原则:

复杂度预算

对每个图表强制执行的硬性限制,以防止视觉噪音:

约束限制溢出策略
方框副标题最多 5 个单词将详细信息移至 sendPrompt() 或文字说明
每个图表的颜色渐变最多 2 组合并类别
水平行(680px)最多 4 个方框缩小或换行为 2 行
每个图表的节点数最多 6 个拆分为概览图 + 详细图
连续可视化块禁止SVG/组件块之间始终添加文字说明

图表类型选择

此技能根据动词而非名词进行路由。同一主题可以根据用户的请求生成不同类型的图表。当某种类型可以直接映射到原生 Mermaid 语法时,优先使用 Mermaid 而非手动编写 SVG。

SVG 类型

用户意图类型输出
"X 是如何工作的"图解式 SVG空间隐喻、剖面图、物理布局
"X 的架构"(系统上下文)结构式 SVG容器、区域、嵌套
"X 的步骤"(通用流程)流程图 SVG 或 Mermaid flowchart自上而下的方框 + 箭头
"比较 A 和 B"对比式 SVG并排列

Mermaid 类型

用户意图Mermaid 语法状态
数据库模式 / 实体关系erDiagram稳定
类图 / 面向对象结构classDiagram稳定
状态机 / 生命周期stateDiagram-v2稳定
时序 / 调用顺序 / API 流程sequenceDiagram稳定
时间线 / 路线图 / 历史timeline稳定
思维导图 / 头脑风暴mindmap稳定
Git 分支 / 发布历史gitGraph稳定
优先级象限 / 2x2 矩阵quadrantChart稳定
甘特图 / 项目进度gantt稳定
用户旅程图journey稳定
饼图分解pie稳定
雷达图 / 蛛网图 / 技能概况radar-beta测试版 (v11.6+)
看板kanban测试版 (v11.12+)
云 / 基础设施架构architecture-beta测试版
层级结构 / 比例大小treemap-beta测试版
自由块布局block-beta测试版

交互式 HTML 组件类型

用户意图输出
"展示数据 / 图表"diagram-html 组件Chart.js、D3、ECharts
"模拟 / 交互"diagram-html 组件Matter.js、Canvas、滑块
"交互式地图"diagram-html 组件Leaflet + OpenStreetMap
"静态分级统计图"diagram-html 组件D3 + TopoJSON
默认行为:"X 是如何工作的?"默认生成图解式 SVG,而非流程图。当图表类型在上述 Mermaid 表中时,使用 Mermaid — 当 classDiagram/sequenceDiagram/stateDiagram 已存在时,此技能不会手动编写 SVG。

Mermaid 注意事项

使用 Mermaid 图表类型时的重要注意事项:

请勿使用 C4 图表C4ContextC4Container 等)— 深色模式下主题令牌未被应用,导致文字不可读。请使用下面的替代表。
C4 类型替代方案
C4 System Context结构式 SVG(自定义)或 Mermaid flowchart 配合 subgraphs
C4 ContainerMermaid architecture-beta
C4 ComponentMermaid flowchart 配合 subgraph 分组
C4 DynamicMermaid sequenceDiagram
C4 DeploymentMermaid architecture-beta

其他注意事项:

输出格式

1. 内联 SVG(静态图表)

直接在回复中输出原始 <svg> 标记。聊天界面会内联渲染。

<svg viewBox="0 0 680 {height}" xmlns="http://www.w3.org/2000/svg"
  role="img" aria-labelledby="title-id desc-id">
  <title id="title-id">Diagram Title</title>
  <desc id="desc-id">Brief description for screen readers</desc>
  <!-- shapes, text, paths -->
</svg>

内联 SVG 规则

2. Mermaid(结构化图表)

标准 ```mermaid 代码块。现有渲染器会自动处理。

```mermaid
sequenceDiagram
    participant A as Client
    participant B as Server
    A->>B: GET /api/data
    B-->>A: 200 OK (JSON)
```

3. 交互式 HTML 组件(图表、控件、模拟)

封装在 ```diagram-html 代码块中。在宿主创建的沙盒 iframe 内渲染。

```diagram-html
<div id="chart-wrapper" style="position: relative; width: 100%; height: 300px;">
  <canvas id="myChart" role="img" aria-label="Chart description">
    Fallback text
  </canvas>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js"
  onerror="document.body.innerHTML='<p>Chart library failed to load.</p>'">
</script>
<script>
  const isDark = window.__jawTheme?.isDark ?? true;
  // ... Chart.js code
</script>
```
样式优先,脚本最后:对于 diagram-html 组件,始终将 <style><link> 标签放在前面,然后是 HTML 结构,最后是 <script> 标签。这确保在流式传输期间视觉内容先于脚本执行呈现。

交付机制

所有三种格式 — 内联 SVG、```mermaid```diagram-html — 都在聊天回复中内联渲染。jaw 前端解析回复文本并自动挂载它们。diagram-html 会被放入宿主创建的沙盒 <iframe> 中;此技能不会创建 iframe。

禁止

保存为 .svg / .html / .png 文件(Write 工具、cat >、fs.writeFile)

应该

将原始代码块直接粘贴到回复文本中

禁止

diagram-html 包裹在 <iframe> / <html> / <body> / <head>

应该

<div> / <canvas> / <style> 开始 — 宿主注入外壳

禁止

通过 /api/channel/send 或 Telegram/Discord 发送(不是附件)

应该

让渲染器处理;图表就是回复文本

禁止

引用外部图片 URL 并称之为图表

应该

输出 SVG/组件代码本身

文件保存:如果用户说"保存这个图表"或"下载它",仍然先内联输出以便他们能看到渲染效果。只有当他们明确要求文件时才将文件写入磁盘 — 即使如此,内联版本仍是规范的交付方式。

SVG 设计系统

设计禁止列表

对所有 SVG 输出强制执行的质量规则(与下面的安全限制分开):

安全限制(内联 SVG)

以下元素和属性会被 DOMPurify 剥离。切勿在内联 <svg> 中使用:

禁止的元素/属性原因替代方案
<foreignObject>在 SVG 中嵌入 HTML(XSS 攻击向量)使用原生 SVG 元素
<animate><set><animateTransform><animateMotion>动画 XSS 攻击向量仅限静态 SVG
嵌套 <svg>解析问题使用 <g> 分组
xlink:href外部 URL 注入仅在 <use> 上使用 href="#fragment"
所有 on* 事件处理器被 DOMPurify 剥离内联 SVG 中不可用
注意:diagram-html 内容在沙盒 iframe 内运行,其中允许使用 <script>on* 处理器和 CDN 导入。上述限制仅适用于在主文档中渲染的内联 SVG。

颜色渐变组(9 种语义颜色)

每组渐变有 3 种色调:填充(背景)、描边(边框)和文字(标签)。始终使用 CSS 类名,而非内联颜色。

渐变组CSS 前缀推荐用途
青色.c-cyan通用类别(中性信息的首选)
粉色.c-pink通用类别、高亮
紫色.c-purple通用类别、分组
橙色.c-orange通用类别、强调
石板灰.c-slate中性、禁用、结构性(开始/结束节点)
蓝色.c-blue信息性(语义性 — 仅用于"信息")
绿色.c-green成功、正面(语义性)
琥珀色.c-amber警告、注意(语义性)
红色.c-red错误、负面(语义性)
颜色分配规则:颜色编码含义,而非顺序。不要像彩虹一样循环使用颜色。按类别分组 — 同一类型的所有节点共享一种颜色。通用类别优先使用青色/粉色/紫色/橙色。蓝色/绿色/琥珀色/红色保留给真正的语义概念。

布局模式

模式布局尺寸
流程图自上而下680 x auto
对比图并排列680 x auto
时间线带标记的水平排列680 x auto
组织架构图层级树680 x auto

主题集成

CSS 变量映射

cli-jaw 宿主为图表主题化公开以下 CSS 变量:

变量用途
--bg页面背景
--surface卡片/表面背景
--text主要文本
--text-dim弱化/次要文本
--border默认边框
--accent强调色
--font-uiUI 字体族
--font-mono代码字体族
--radius-md8px 圆角半径
--radius-lg12px 圆角半径

按格式检测主题

格式主题方法
内联 SVGCSS 类自动适配宿主主题
diagram-html iframe (JS)window.__jawTheme.isDark(布尔值)
diagram-html iframe (CSS 值)window.__jawTokens['--bg']['--text']
Mermaid通过 cli-jaw themeVariables 自动适配
切勿在图表中使用 matchMedia('prefers-color-scheme')。主题由宿主控制,而非操作系统设置。

参考模块

图表技能会为特定图表类型加载额外的参考文件。这些文件提供详细的模式、库集成指南和模板:

模块文件覆盖范围
SVG 组件reference/svg-components.mdSVG 基础元素、viewBox 检查清单、布局模板
颜色调色板reference/color-palette.md完整颜色值(浅色 + 深色)、分配规则
图表reference/module-chart.mdChart.js + D3 + ECharts 6 — 条形图、折线图、饼图、分级统计图、热力图、桑基图、雷达图、树状图、仪表盘、漏斗图、K线图、弦图
组件reference/module-widget.md物理引擎 (Matter.js)、数学图形 (Math.js)、3D (Three.js)、创意编程 (p5.js)、音频 (Tone.js)、小游戏
交互reference/module-interactive.md滑块、选择器、分段按钮、开关、播放/暂停/重置、防抖、sendPrompt、键盘无障碍
地图reference/module-map.mdLeaflet 交互式地图 — OpenStreetMap 瓦片、标记、弹窗、深色模式
UI 原型reference/module-mockup.mdUI 原型模式
艺术reference/module-art.md装饰性 SVG 图案

使用示例

示例 1 — 架构图
"마이크로서비스 아키텍처 그려줘" # 触发:结构式 SVG — 容器、区域、嵌套 # 此技能生成包含服务方框、箭头和分组区域的内联 SVG。 # 不使用 Mermaid C4(深色模式问题)— 改用自定义结构式 SVG。
示例 2 — 数据库 ER 图
"이 DB 스키마 ER 다이어그램으로 보여줘" # 触发:Mermaid erDiagram # 输出包含 erDiagram 语法的 ```mermaid 代码块。 # 主题自动适配 — 无需手动颜色配置。
示例 3 — 交互式数据图表
"월별 매출 데이터 차트로 그려줘" # 触发:diagram-html + Chart.js # 生成包含 Chart.js 条形/折线图的 ```diagram-html 代码块。 # 使用 window.__jawTheme.isDark 适配深色模式颜色。
示例 4 — API 时序流程
"로그인 API 흐름 시퀀스 다이어그램으로 그려줘" # 触发:Mermaid sequenceDiagram # 客户端 → 认证服务器 → API → 数据库 — 完整的请求/响应流程。 # 选择 Mermaid 而非 SVG,因为 sequenceDiagram 原生支持此类图表。
示例 5 — 对比图
"React vs Vue vs Svelte 비교해줘" # 触发:对比式 SVG(并排列) # 生成包含 3 列的内联 SVG,以可视化方式对比关键属性。 # 最多 2 组颜色渐变 — 一组用于类别标题,一组用于高亮。

快速参考

选择正确输出格式的决策树:

问题答案格式
Mermaid 是否有此图表的原生语法?使用 ```mermaid
是否为静态布局/架构/对比?使用内联 <svg>
是否需要交互性、数据可视化或 JS 库?使用 ```diagram-html
是否为 C4 图表?按上面的 C4 映射表替代
是否为"X 是如何工作的"问题?图解式 SVG(非流程图)