zagens-cli 0.8.2

Zagens headless CLI + HTTP/SSE runtime sidecar (`zagens`, `zagens-runtime` binaries)
Documentation
{
  "title": "PPTX 引擎全功能压测",
  "subtitle": "覆盖 9 种 OOXML 图表 + 4 种 mpl 图表 + richtext + image + table(merge) + grid · 2026-05-11",
  "theme": {
    "bg": "#0D1B2A",
    "accent": "#1B98F5",
    "title": "#F0F4F8",
    "body": "#C5CDD8",
    "muted": "#6B7B8D",
    "font": "Microsoft YaHei"
  },
  "slides": [
    {
      "title": "Bar — 柱状图",
      "blocks": [
        {
          "type": "chart",
          "chart": {
            "type": "bar",
            "categories": ["Q1", "Q2", "Q3", "Q4"],
            "series": [
              {"name": "营收", "values": [120, 145, 168, 192]},
              {"name": "成本", "values": [80, 92, 105, 118]}
            ],
            "chart_title": "2025 季度营收 vs 成本 (M¥)",
            "x_label": "季度",
            "y_label": "金额 (M¥)",
            "data_labels": true
          }
        }
      ]
    },
    {
      "title": "Line + Pie — 双图栅格",
      "layout": {"kind": "grid", "cols": [0.5, 0.5], "gap": "0.3in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "chart",
          "chart": {
            "type": "line",
            "categories": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
            "series": [
              {"name": "DAU (万)", "values": [28, 32, 35, 40, 38, 45]},
              {"name": "MAU (万)", "values": [85, 92, 98, 105, 110, 118]}
            ],
            "chart_title": "用户增长趋势",
            "x_label": "月份",
            "y_label": "用户量 (万)",
            "data_labels": true
          }
        },
        {
          "type": "chart",
          "chart": {
            "type": "pie",
            "categories": ["北美", "亚太", "欧洲", "中东", "拉美"],
            "series": [
              {"name": "收入占比", "values": [38, 28, 18, 10, 6]}
            ],
            "chart_title": "区域收入分布",
            "data_labels": true
          }
        }
      ],
      "notes": "Line 图表 + Pie 图表同页栅格布局。"
    },
    {
      "title": "Stacked Bar + Stacked Bar % — 堆叠对比",
      "layout": {"kind": "grid", "cols": [0.5, 0.5], "gap": "0.3in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "chart",
          "chart": {
            "type": "stacked_bar",
            "categories": ["P1", "P2", "P3", "P4", "P5"],
            "series": [
              {"name": "前端", "values": [40, 35, 30, 28, 25]},
              {"name": "后端", "values": [30, 28, 35, 32, 30]},
              {"name": "测试", "values": [20, 22, 20, 25, 28]}
            ],
            "chart_title": "各项目人力投入 (人天)",
            "x_label": "项目",
            "y_label": "人天",
            "data_labels": true
          }
        },
        {
          "type": "chart",
          "chart": {
            "type": "stacked_bar_pct",
            "categories": ["P1", "P2", "P3", "P4", "P5"],
            "series": [
              {"name": "前端", "values": [40, 35, 30, 28, 25]},
              {"name": "后端", "values": [30, 28, 35, 32, 30]},
              {"name": "测试", "values": [20, 22, 20, 25, 28]}
            ],
            "chart_title": "各项目人力占比 (%)",
            "x_label": "项目",
            "y_label": "占比",
            "data_labels": true
          }
        }
      ]
    },
    {
      "title": "Area + Scatter — 面积图 & 散点图",
      "layout": {"kind": "grid", "cols": [0.5, 0.5], "gap": "0.3in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "chart",
          "chart": {
            "type": "area",
            "categories": ["00:00", "04:00", "08:00", "12:00", "16:00", "20:00"],
            "series": [
              {"name": "CPU (%)", "values": [15, 8, 22, 55, 48, 32]},
              {"name": "Memory (%)", "values": [35, 32, 38, 52, 50, 42]}
            ],
            "chart_title": "服务器资源使用率 (24h)",
            "x_label": "时间",
            "y_label": "使用率 (%)",
            "data_labels": true
          }
        },
        {
          "type": "chart",
          "chart": {
            "type": "scatter",
            "categories": [1, 2, 3, 4, 5],
            "series": [
              {"name": "方案A", "values": [2.1, 3.5, 5.2, 7.8, 9.1]},
              {"name": "方案B", "values": [1.8, 2.9, 4.1, 6.2, 8.0]},
              {"name": "方案C", "values": [2.5, 4.0, 6.0, 8.5, 10.2]}
            ],
            "chart_title": "方案性能对比",
            "x_label": "并发数 (K)",
            "y_label": "响应时间 (ms)",
            "data_labels": true
          }
        }
      ]
    },
    {
      "title": "Combo 柏拉图 + Donut — 组合图 & 环形图",
      "layout": {"kind": "grid", "cols": [0.55, 0.45], "gap": "0.3in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "chart",
          "chart": {
            "type": "combo",
            "categories": ["冲头磨损", "定位偏差", "材料硬点", "润滑不足", "温度异常"],
            "series": [
              {"name": "发生次数", "values": [68, 15, 9, 5, 3]},
              {"name": "累计占比 (%)", "values": [68, 83, 92, 97, 100]}
            ],
            "chart_title": "柏拉图 — 缺陷原因分析",
            "x_label": "原因",
            "y_label": "次数 / 累计%",
            "data_labels": true
          }
        },
        {
          "type": "chart",
          "chart": {
            "type": "donut",
            "categories": ["完成", "进行中", "待启动", "阻塞"],
            "series": [
              {"name": "任务", "values": [42, 8, 5, 1]}
            ],
            "chart_title": "项目任务状态分布",
            "data_labels": true
          }
        }
      ],
      "notes": "Combo 图表:第一个 series 为 bar,标记 line 的 series 自动叠加为折线(柏拉图)。"
    },
    {
      "title": "Gantt — 甘特图 (matplotlib)",
      "blocks": [
        {
          "type": "mpl",
          "mpl": {
            "chart_type": "gantt",
            "chart_title": "智能仓储 V3 项目里程碑",
            "data": {
              "tasks": [
                {"name": "需求评审", "start": "2026-04-01", "end": "2026-04-15", "progress": 100},
                {"name": "技术方案设计", "start": "2026-04-10", "end": "2026-04-28", "progress": 100},
                {"name": "核心模块开发", "start": "2026-04-20", "end": "2026-05-20", "progress": 75},
                {"name": "API 联调", "start": "2026-05-10", "end": "2026-05-30", "progress": 40},
                {"name": "集成测试", "start": "2026-05-25", "end": "2026-06-10", "progress": 0},
                {"name": "UAT 上线", "start": "2026-06-05", "end": "2026-06-20", "progress": 0}
              ]
            }
          }
        }
      ],
      "notes": "matplotlib 甘特图。已完成=深色,进行中=半透明,待开始=浅色。"
    },
    {
      "title": "Fishbone + Radar — 鱼骨图 & 雷达图 (matplotlib)",
      "layout": {"kind": "grid", "cols": [0.5, 0.5], "gap": "0.3in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "mpl",
          "mpl": {
            "chart_type": "fishbone",
            "chart_title": "端子接触不良 — 鱼骨图",
            "data": {
              "problem": "端子\n接触不良",
              "categories": [
                {"name": "人员", "causes": ["操作培训不足", "疲劳作业", "新人占比高"]},
                {"name": "机器", "causes": ["冲头磨损", "定位夹具松动", "保养周期过长"]},
                {"name": "材料", "causes": ["铜材硬度波动", "来料表面氧化"]},
                {"name": "方法", "causes": ["参数设定偏差", "无标准化SOP"]},
                {"name": "环境", "causes": ["车间温度波动", "振动干扰"]}
              ]
            }
          }
        },
        {
          "type": "mpl",
          "mpl": {
            "chart_type": "radar",
            "chart_title": "供应商综合评估",
            "data": {
              "categories": ["质量", "交期", "成本", "技术", "服务", "合规"],
              "series": [
                {"name": "供应商A", "values": [92, 85, 78, 90, 82, 95]},
                {"name": "供应商B", "values": [80, 92, 88, 75, 90, 85]},
                {"name": "供应商C", "values": [70, 78, 95, 68, 72, 80]}
              ]
            }
          }
        }
      ],
      "notes": "鱼骨图 (人机料法环测) + 雷达图同页。"
    },
    {
      "title": "Funnel + RichText — 漏斗图 & 富文本 (matplotlib)",
      "layout": {"kind": "grid", "cols": [0.4, 0.6], "gap": "0.3in", "padding": "0.15in"},
      "blocks": [
        {
          "type": "mpl",
          "mpl": {
            "chart_type": "funnel",
            "chart_title": "销售转化漏斗",
            "data": {
              "stages": [
                {"name": "访问", "value": 15000},
                {"name": "注册", "value": 4500},
                {"name": "试用", "value": 1200},
                {"name": "询价", "value": 380},
                {"name": "成交", "value": 95}
              ]
            }
          }
        },
        {
          "type": "richtext",
          "runs": [
            {"t": "转化率分析\n\n", "size": 20, "bold": true, "color": "#1B98F5"},
            {"t": "访问 → 注册\n", "size": 15, "bold": true},
            {"t": "  4,500 / 15,000 = ", "size": 13},
            {"t": "30.0%\n\n", "size": 13, "bold": true, "color": "#4ADE80"},
            {"t": "注册 → 试用\n", "size": 15, "bold": true},
            {"t": "  1,200 / 4,500 = ", "size": 13},
            {"t": "26.7%\n\n", "size": 13, "bold": true, "color": "#FBBF24"},
            {"t": "试用 → 成交\n", "size": 15, "bold": true},
            {"t": "  95 / 1,200 = ", "size": 13},
            {"t": "7.9%\n\n", "size": 13, "bold": true, "color": "#F87171"},
            {"t": "整体转化率\n", "size": 15, "bold": true},
            {"t": "  95 / 15,000 = ", "size": 13},
            {"t": "0.63%", "size": 16, "bold": true, "color": "#EF4444"},
            {"t": "\n\n", "size": 13},
            {"t": "💡 关键瓶颈在", "size": 12, "color": "#6B7B8D", "italic": true},
            {"t": "试用→成交", "size": 12, "bold": true, "color": "#F87171", "italic": true},
            {"t": "阶段", "size": 12, "color": "#6B7B8D", "italic": true}
          ]
        }
      ],
      "notes": "漏斗图 (mpl) 左侧 + 富文本分析右侧。富文本包含多字号、多颜色、加粗、斜体。"
    },
    {
      "title": "Table (merge) + Image + RichText — 三栏混合",
      "layout": {"kind": "grid", "cols": [0.35, 0.3, 0.35], "gap": "0.2in", "padding": "0.1in"},
      "blocks": [
        {
          "type": "table",
          "table": {
            "headers": ["指标", "现状", "目标"],
            "rows": [
              ["不良率", "7.83%", "< 0.1%"],
              ["CPK", "0.82", "≥ 1.33"],
              ["客户投诉", "3件/月", "0件"],
              ["ROI", "", "< 4月"]
            ],
            "merges": [[5, 0, 5, 2]]
          }
        },
        {
          "type": "image",
          "path": "crates/tui/assets/scripts/test_logo.png",
          "fit": "contain"
        },
        {
          "type": "richtext",
          "runs": [
            {"t": "📋 图例说明\n\n", "size": 16, "bold": true, "color": "#1B98F5"},
            {"t": "Bar / Line / Pie\n", "size": 12, "bold": true},
            {"t": "  原生 OOXML 图表\n", "size": 11, "color": "#6B7B8D"},
            {"t": "  9 种类型 + Combo\n\n", "size": 11, "color": "#6B7B8D"},
            {"t": "Gantt / Fishbone\n", "size": 12, "bold": true},
            {"t": "  matplotlib 渲染\n", "size": 11, "color": "#6B7B8D"},
            {"t": "  声明式 JSON 驱动\n\n", "size": 11, "color": "#6B7B8D"},
            {"t": "Richtext / Table\n", "size": 12, "bold": true},
            {"t": "  多字号/颜色/加粗/斜体\n", "size": 11, "color": "#6B7B8D"},
            {"t": "  合并单元格支持\n\n", "size": 11, "color": "#6B7B8D"},
            {"t": "Image\n", "size": 12, "bold": true},
            {"t": "  fit=contain/cover\n", "size": 11, "color": "#6B7B8D"},
            {"t": "  PIL 尺寸感知", "size": 11, "color": "#6B7B8D"}
          ]
        }
      ],
      "notes": "三栏混合:表格(合并单元格) + 图片(contain) + 富文本。"
    },
    {
      "title": "✅ 全功能验证通过",
      "bullets": [
        "9 种 OOXML 原生图表:bar / line / pie / stacked_bar / stacked_bar_pct / area / scatter / donut / combo",
        "4 种 matplotlib 复杂图表:gantt / fishbone / radar / funnel",
        "6 种栅格布局 (2-col / 3-col / 不同权重比)",
        "富文本 runs:bold / italic / 多字号 / 多颜色",
        "图片嵌入:fit=contain / cover + PIL 尺寸感知",
        "表格合并单元格:merges 参数",
        "自定义主题:深色工业风",
        "旧管线兼容:bullets 字段正常渲染"
      ]
    }
  ]
}