archify-svg-export
把 archify 生成的图表 HTML 无头导出为 SVG(复用成品页内置的 Archify.exportMenu.run(),产物与人工点 Export 一致,含深浅双主题),需本地已装 Chrome/Chromium。默认不自动触发,仅在用户显式点名本 skill 时生效。
SKILL.mdskills-optional/archify-svg-export/SKILL.md
GitHubArchify 图表导出 SVG
概述
目的:补上 archify 的"最后一公里"。archify 交付的是独立可交互 HTML,导出功能只存在于 Viewer 的 Export 菜单里,必须人工开浏览器点。本 skill 让 AI 在无人值守下直接产出官方 SVG 文件。
功能:
- 复用成品 HTML 内置的官方导出代码
Archify.exportMenu.run('svg'),不重写serializeSvg(),产物与人工导出字节一致,含浅色/深色双主题 - 输入两种形态:已交付的
*.html,或 archify 规范*.json(自动先渲染再导出) - 自带产物校验:文件名取自 CDP 事件而非猜目录,并校验文件头,避免命中陈旧文件或读到半截写入
- 缺 Chrome 时给出明确指引,不静默失败
适用条件(仅在被显式调用后判断,不用于自动触发):
- 已存在 archify 产物(
*.html或规范*.json),需要把它导出为 SVG 文件 - 导出后交给用户自行嵌入文档;本 skill 不负责嵌入动作
本 skill 是 archify 的无头配套,不是替代品:archify 负责生成图表,本 skill 只把已生成的图表导出为文件。
触发方式:仅显式调用
本 skill 默认不自动触发。 不要根据语义相似度自行判断"该不该用我"——只有在以下情况才生效:
- 用户用
@command://archify-svg-export之类的显式指令调用 - 用户点名要求"用 archify-svg-export 这个 skill"
不触发的典型情况(即使语义相关):
| 用户输入 | 是否启用本 skill | 说明 |
|---|---|---|
| "把 archify 图导出成 SVG" | ❌ | 除非显式指定;这类语义交由 archify skill 处理 |
| "用 archify 画个架构图" | ❌ | 生成图表属 archify 职责 |
| "archify 怎么导出" | ❌ | 未显式指定本 skill |
为什么这样设计:archify 官方 skill 的 description 里已含 "SVG export",若本 skill 也按语义自动触发,两者会撞车,导致用户要导出时反而选中生成向的 archify skill。改为显式调用后,触发责任完全交给用户,不存在歧义。
前置条件
| 条件 | 说明 |
|---|---|
| archify 产物 | 已有 *.html(archify 交付的成品),或规范 *.json(须含 diagram_type 字段) |
| Chrome / Chromium | 必需。官方导出代码依赖 getComputedStyle、canvas 等浏览器 API,纯 Node 无法实现 |
前置检测:archify 是否已安装
执行导出前必须先检测 archify skill 是否存在。不存在时只提示用户自行安装,绝不自动安装。
检测依据(命中任一即视为已安装):
- 环境变量
ARCHIFY_HOME指向的目录下存在bin/archify.mjs ~/.codebuddy/skills/archify/bin/archify.mjs存在
未检测到 → 停止执行,并提示用户自行安装:
curl -fsSL https://raw.githubusercontent.com/HACK-WU/skills/master/scripts/skill-install.sh | \
bash -s -- --repo tt-a1i/archify
安装器已下载到本地时可改为
bash scripts/skill-install.sh --repo tt-a1i/archify。
已安装但不在默认位置时,用 ARCHIFY_HOME 指定(输入为规范 JSON 时用它渲染 HTML):
export ARCHIFY_HOME=/path/to/archify-skill # 该目录下须有 bin/archify.mjs
脚本按以下顺序定位浏览器:
- 环境变量
ARCHIFY_CHROME(与 archify 官方约定的同一个变量) /usr/bin/google-chrome、/usr/bin/google-chrome-stable、/usr/bin/chromium、/usr/bin/chromium-browser
装在非标准路径时用环境变量指定:
export ARCHIFY_CHROME=/path/to/chrome
运行契约
- WHEN:用户显式指定本 skill 时(不是根据语义自动判断,见"触发方式")
- SEE:archify 产物路径(HTML 或 JSON)、期望的输出位置
- DO:确认有 Chrome → 执行导出脚本 → 校验产物
- CHECK:退出码为 0,且产物文件头是
<svg或<?xml - STOP:以下情况停止并明确告知用户,绝不自行安装任何东西
- 未检测到 archify skill → 提示用户自行安装(见"前置检测")
- 无 Chrome / Chromium → 提示用户自行安装
- 输入不是 archify 产物 → 确认输入文件
导出
node scripts/export.mjs <artifact.html> svg [out.svg]
node scripts/export.mjs <spec.json> svg [out.svg]
第三个参数两种写法都支持:
- 以
.svg结尾 → 视为输出文件路径(脚本会在导出后重命名到位) - 其他 → 视为输出目录,文件名由 archify 的
diagramFilename()决定
省略时输出到产物同目录。
示例:
export ARCHIFY_CHROME=/path/to/chrome
node scripts/export.mjs docs/pipeline.html svg docs/pipeline.svg
成功输出:
SVG /abs/path/archify.svg 886x660, 57330 bytes
via Archify.exportMenu.run('svg') in chrome-headless-shell
| 退出码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 运行失败(产物缺失、Chrome 异常等) |
| 2 | 参数错误(用法不对) |
| 3 | 未检测到 archify skill(已打印安装提示,未做任何安装动作) |
失败处理
| 现象 | 含义 | 处理 |
|---|---|---|
ARCHIFY_CHROME points to a missing file: X |
环境变量指向了不存在的路径 | 修正路径,或取消该变量改用标准路径 |
Chrome/Chromium not found |
未安装,或不在标准路径 | 提示用户自行安装,并告知可用 ARCHIFY_CHROME 指定路径;不要自行下载安装 |
Archify.exportMenu.run never became available |
输入不是 archify 产物,或 archify 版本不兼容 | 确认输入文件 |
export ran but no completed svg file appeared |
导出已触发但文件未落盘 | 检查输出目录写权限与磁盘空间 |
边界
- 只覆盖 SVG。脚本底层同一个调用也支持 png / jpeg / webp / webm / share-card,但本 skill 不覆盖这些格式,也不涉及"导出后如何嵌入文档"
- 依赖内部 API:
Archify.exportMenu.run是上游 archify 的内部实现,非公开契约。archify 大版本升级后若失效,需重新确认入口 - 文件名默认不可控:不指定输出文件路径时,文件名由 archify 的
diagramFilename()决定(实测通常是archify.svg);svg格式可用.svg结尾的第三参自定义 - 同名文件会被覆盖:这是预期行为,不是错误
更多资源
- 导出脚本:scripts/export.mjs