Architecture Diagram Generator 用于生成独立、完全可编辑的 .svg 架构图文件。它使用真实内联矢量图标(AWS/Azure/GCP 官方架构图标,或针对其他场景的手绘通用图标集),采用确定性的区域感知布局、正交连线路由和真实 <text> 标签。通过 deliver --emit drawio 还可额外生成自包含的可编辑 .drawio mxGraph 配套文件。SVG 输出不含位图、不使用 <use> 克隆;draw.io 输出使用可独立编辑的单元格,图标数据本地化,不依赖远程图片、外部 URL 或厂商模板。
适用场景:绘制 AWS/Azure/GCP 架构图、文档用系统拓扑图、需要后续在 Figma 中编辑的图(这是相对所有位图输出方案的核心差异)、多云或混合云(云+本地)图(可按节点自由混合 provider)。不适用:交互式、点击跳转或动画图(改用 static-web-artifacts-builder)、手绘/白板风格草图(改用 tldraw)、数据图表或仪表盘(改用 chart-clarity)、评审或批评现有架构(改用 architecture-reviewer)、无组件/连接的单帧概念插画(改用 concept-to-image)。
前置条件:需在技能目录下运行命令,需要 python3 并安装 pyyaml。云厂商图标需要一次性、每台机器的网络抓取,图标不随技能打包,首次使用某厂商图标时运行 python3 -m engine.fetch_icons --provider aws(约5秒,1037个图标)、--provider gcp(约5秒,297个图标)、--provider azure(约60秒,704个图标),或 --provider all。这会构建本地缓存(默认 ~/.cache/armory/cloud-icons,可用 --cache-dir 或 $XDG_CACHE_HOME 覆盖),固定到特定 jgraph/drawio 提交以保证可复现。每个渲染的云图标会对照清单 SHA-256 摘要校验,不匹配则失败关闭,需用 --force 重建缓存。后续渲染复用已验证缓存,无需网络。provider: generic 无需抓取,使用内置手绘图标集。
工作流程:解析用户请求(组件、包含层级、连接、云厂商);将服务解析为图标(读取对应 services-*.yaml 或 icons-generic.md,记录 slug);确保所用厂商图标缓存已就绪;编写 spec(YAML 文件,含 title、direction、zones、nodes、edges);用 python3 -m engine validate spec.yaml --quality showcase --json 验证;用 python3 -m engine deliver spec.yaml -o diagram.svg --quality showcase --emit drawio --json 交付;在 draw.io 中审查配套文件;必要时用 python3 -m engine compare base.yaml head.yaml 比较修订;输出最终文件。
Spec 字段包括 title、direction(LR/TB)、provider(aws/azure/gcp/generic)、profile(deployment-ownership)、sources、zones(id、label、parent、kind)、nodes(id、label、sublabel、service、provider、zone、color、owner、external、storage、sources)、edges(id、from、to、label、type、sources)。连接类型语义:realtime(蓝色实线,REST/gRPC/同步请求)、batch(红色虚线,SFTP/文件传输/定时任务)、event(绿色实线,发布订阅/webhook/事件驱动)、control(橙色实线,管理平面/监控/配置推送)、default(灰色实线,语义未指定)。使用多种连接类型时自动渲染图例。
deployment-ownership 配置仅在 spec 作为部署归属记录时启用,失败关闭:每个节点必须解析为恰好一种 kind(region),每个非外部节点需非空 owner,每个 storage: true 节点必须在 kind: security 内,跨安全区边需非空 label 说明机制。
不支持/部分覆盖:Kubernetes 和本地部署暂无专用图标集,用 provider: generic 建模(35个手绘字形);GCP 和 Azure 图标覆盖窄于 AWS(297 和约700 vs 1037),各 services-*.yaml 记录具体缺口;交互元素超出范围;不内置 PNG/PDF 导出,可后续用 rsvg-convert 或 cairosvg 转换。
退出码:0 表示验证无错误或交付成功;1 表示阻塞性发现或交付失败;2 表示用法错误。诊断代码包括 spec/、icon/not-found、layout/node-overlap、layout/zone-overlap、layout/label-overflow、editability/、usage/spec-unreadable。
参考文件:references/spec-format.md(完整 YAML schema)、references/services-aws.yaml(约70条)、references/services-azure.yaml(约45条)、references/services-gcp.yaml(约35条)、references/icons-generic.md(35个手绘图标)。