1实现原理 · 为什么它能做到
两条自带脚本接力:extract_diagrams.py 用正则从 markdown 抽出 ```mermaid 代码块并编号命名,extract-and-generate.sh 逐文件调用 mermaid-cli(mmdc) 渲染 PNG。
mermaid_pattern = r'```mermaid\n(.*?)\n```'
渲染引擎是 mermaid-cli + 本地 Chrome:脚本以 PUPPETEER_EXECUTABLE_PATH 指到 /usr/bin/google-chrome-stable,并传 puppeteer-config.json 与 -w/-H/-s 尺寸缩放参数。
PUPPETEER_EXECUTABLE_PATH="$CHROME_PATH" mmdc \ -i "$mmd_file" \ -o "$diagram.png" \ --puppeteerConfigFile "$CONFIG_FILE" \ -w "$width" \ -H "$height" \ -s "$SCALE_FACTOR"
高分辨率输出靠环境变量覆盖:MERMAID_WIDTH/HEIGHT/SCALE 默认 1200×800×2,PPT/打印场景可放大到 2400×1800×4 或 SCALE=5。
MERMAID_WIDTH=2400 MERMAID_HEIGHT=1800 MERMAID_SCALE=4 ./extract-and-generate.sh "<markdown_file>" "<output_directory>"
smart sizing 按图名类型猜尺寸:timeline/gantt 拉宽压扁、architecture/system/caching 放大、workflow/sequence/api 加宽,默认 1200×800。
- **Timeline/Gantt**: 2400×400 (wide and short) - **Architecture/System/Caching**: 2400×1600 (large and detailed)
依赖前置校验写进流程:mmdc/google-chrome-stable/python3 缺一即提示查 references/setup_and_troubleshooting.md(含 WSL2 的 Chrome 安装与依赖清单)。
1. **mermaid-cli**: `mmdc --version` 2. **Google Chrome**: `google-chrome-stable --version` 3. **Python 3**: `python3 --version`
运行约定是『从 scripts/ 目录执行』:脚本用 ${CLAUDE_SKILL_DIR} 定位,依赖同目录的 extract_diagrams.py 与 puppeteer-config.json 的相对位置。
cd "${CLAUDE_SKILL_DIR}/scripts" ./extract-and-generate.sh "<markdown_file>" "<output_directory>"
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | mermaid-cli (mmdc) |
| cli | Google Chrome(/usr/bin/google-chrome-stable,headless 渲染) |
| cli | python3(extract_diagrams.py) |
| network | dl.google.com(setup 参考文档:加 Chrome apt 源并 sudo apt install,一次性安装) |
| cli | file / sort -V / stat / identify(可选)(bash 工具链) |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: bash scripts/extract-and-generate.sh(set -e,本地)
- 网络端点: 声明外部网络访问: 运行期无;setup 参考文档含一次性安装动作:wget dl.google.com 公钥 + sudo apt install google-chr
- 本地工作目录: 文件读写与工件输出: 在输出目录写 .mmd/.png(默认 <markdown_file 目录>/diagrams);mkdir -p 输出目录
5第二遍独立确认
- [ok] 脚本三件套自包含 — extract-and-generate.sh / extract_diagrams.py / puppeteer-config.json 均在 scripts/ 且被 SKILL 逐一引用。
- [ok] mmdc 本地渲染 + PUPPETEER_EXECUTABLE_PATH — 脚本内逐字存在 'PUPPETEER_EXECUTABLE_PATH="$CHROME_PATH" mmdc -i ... --puppeteerConfigFile' 调用。
- [ok] smart sizing 逻辑一致 — SKILL.md 尺寸表与脚本 [[ "$diagram" =~ timeline|gantt ]] 等分支对应。
- [ok] PNG 校验存在 — 脚本 'test -s ... && file ... | grep -q "PNG image"' + identify 尺寸回退分支属实。
- [ok] 运行期无网络 — 三个脚本全文无 curl/wget/requests/http 调用;唯一网络在 setup 参考文档的 dl.google.com apt 安装(sudo,用户主动执行)。
- [ok] 无凭证读取 — 仅读 MERMAID_WIDTH/HEIGHT/SCALE/CLAUDE_SKILL_DIR 等路径/尺寸变量,无 token/secret/key 环境读取。
- [ok] --no-sandbox 浏览器参数 — puppeteer-config.json args 含 --no-sandbox/--disable-setuid-sandbox 等;渲染目标为本地生成的图表 HTML,输入为工作区 markdown。
- [ok] 元数据 — GitHub API:MIT / 1385 stars / pushed 2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678。
6结论
3b3522624bae3e65…