/** * @file chart-spec.ts - 图表块格式规范单一事实来源(简体中文) * @description * 对话场景 chart 规则(work-space 注入)派生自 CHART_BLOCK_SPEC(Vega-Lite 为主); * create_document 工具 prompt 派生自 DOC_CHART_BLOCK_SPEC(chart 简化格式)。 * 文档生成执行期兜底校验使用本模块的校验函数。类型与字段清单不得在其他位置并行维护。 */ /** 支持的图表类型清单(与前端 chat-chart-option 及 HTML 报告渲染器的 schema 一致) */ export declare const CHART_SUPPORTED_TYPES: readonly ["pie", "doughnut", "bar", "bar-horizontal", "line", "radar", "gauge", "scatter"]; export type ChartSupportedType = (typeof CHART_SUPPORTED_TYPES)[number]; /** * 对话图表块格式规范文本(Vega-Lite 为主,简体中文)。 * 覆盖 ```vega-lite 围栏格式、必填字段(mark/data)、可选字段(encoding)、 * 常用图表类型最小示例、ECharts 兼容 fallback(echarts/chart/chart-json 标记)与 Mermaid 用途说明。 */ export declare const CHART_BLOCK_SPEC = "#### \u5BF9\u8BDD\u56FE\u8868\u5757\u683C\u5F0F\u89C4\u8303\uFF08Vega-Lite \u4E3A\u4E3B\uFF09\n\n\u5728\u5BF9\u8BDD\u56DE\u590D\u7684 Markdown \u4E2D\u7528\u56F4\u680F\u5757\u58F0\u660E\u56FE\u8868\uFF0C\u524D\u7AEF\u4F1A\u5C06\u5176\u6E32\u67D3\u4E3A\u4EA4\u4E92\u5F0F\u56FE\u8868\uFF08\u65E0\u9700\u7F16\u5199 ECharts option\uFF09\u3002\u9996\u9009 Vega-Lite\uFF08\u524D\u7AEF\u4F1A\u81EA\u52A8\u8F6C\u6362\u4E3A ECharts \u4EA4\u4E92\u5F0F\u6E32\u67D3\uFF1B\u590D\u6742 spec \u964D\u7EA7\u4E3A\u9759\u6001\u6E32\u67D3\uFF09\uFF1A\n\n```vega-lite\n{\"mark\":\"bar\",\"data\":{\"values\":[{\"category\":\"Q1\",\"amount\":120},{\"category\":\"Q2\",\"amount\":150}]},\"encoding\":{\"x\":{\"field\":\"category\",\"type\":\"nominal\"},\"y\":{\"field\":\"amount\",\"type\":\"quantitative\"}}}\n```\n\n\u901A\u7528\u8981\u6C42\uFF1A\n- \u5757\u5185\u5BB9\u5FC5\u987B\u662F\u5355\u4E2A\u5408\u6CD5 JSON \u5BF9\u8C61\uFF1A\u5C5E\u6027\u540D\u7528\u53CC\u5F15\u53F7\u5305\u88F9\u3001\u7981\u6B62\u6CE8\u91CA\u4E0E\u5C3E\u9017\u53F7\uFF0C\u5426\u5219\u8BE5\u5757\u4F1A\u964D\u7EA7\u4E3A\u666E\u901A\u6587\u672C\u3002\n- mark\uFF08\u5FC5\u586B\uFF09\uFF1A\u56FE\u5F62\u6807\u8BB0\u7C7B\u578B\uFF0C\u5E38\u7528 bar / line / area / arc\u3002\n- data\uFF08\u5FC5\u586B\uFF09\uFF1A\u6570\u636E\u5BF9\u8C61\uFF0Cvalues \u4E3A\u975E\u7A7A\u6570\u7EC4\u3002\n- encoding\uFF08\u53EF\u9009\uFF09\uFF1A\u901A\u9053\u6620\u5C04\uFF08x / y / color / theta \u7B49\uFF09\uFF1B\u7701\u7565\u65F6\u524D\u7AEF\u6309\u9ED8\u8BA4\u7F16\u7801\u6E32\u67D3\u3002\n\n\u5E38\u7528\u56FE\u8868\u6700\u5C0F\u793A\u4F8B\uFF1A\n- bar\uFF08\u67F1\u72B6\u56FE\uFF0C\u5206\u7C7B\u5BF9\u6BD4\uFF09\uFF1A{\"mark\":\"bar\",\"data\":{\"values\":[{\"category\":\"A\",\"amount\":100},{\"category\":\"B\",\"amount\":80}]},\"encoding\":{\"x\":{\"field\":\"category\",\"type\":\"nominal\"},\"y\":{\"field\":\"amount\",\"type\":\"quantitative\"}}}\n- line\uFF08\u6298\u7EBF\u56FE\uFF0C\u65F6\u95F4\u8D8B\u52BF\uFF09\uFF1A{\"mark\":\"line\",\"data\":{\"values\":[{\"month\":\"1\u6708\",\"amount\":30},{\"month\":\"2\u6708\",\"amount\":45}]},\"encoding\":{\"x\":{\"field\":\"month\",\"type\":\"nominal\"},\"y\":{\"field\":\"amount\",\"type\":\"quantitative\"}}}\n- area\uFF08\u9762\u79EF\u56FE\uFF0C\u8D8B\u52BF\u7D2F\u79EF\uFF09\uFF1A{\"mark\":\"area\",\"data\":{\"values\":[{\"month\":\"1\u6708\",\"amount\":30},{\"month\":\"2\u6708\",\"amount\":50}]},\"encoding\":{\"x\":{\"field\":\"month\",\"type\":\"nominal\"},\"y\":{\"field\":\"amount\",\"type\":\"quantitative\"}}}\n- pie\uFF08\u997C\u56FE\uFF0C\u5360\u6BD4\u6784\u6210\uFF0Cmark \u7528 arc + theta \u7F16\u7801\uFF09\uFF1A{\"mark\":\"arc\",\"data\":{\"values\":[{\"category\":\"\u684C\u9762\u7AEF\",\"share\":60},{\"category\":\"\u79FB\u52A8\u7AEF\",\"share\":40}]},\"encoding\":{\"theta\":{\"field\":\"share\",\"type\":\"quantitative\"},\"color\":{\"field\":\"category\",\"type\":\"nominal\"}}}\n\nECharts \u517C\u5BB9\uFF08\u590D\u6742\u56FE\u8868 fallback\uFF09\uFF1A\u96F7\u8FBE\u56FE\u3001\u4EEA\u8868\u76D8\u3001\u6563\u70B9\u56FE\u7B49\u590D\u6742\u56FE\u53EF\u7528 ```echarts \u56F4\u680F\u5757\uFF08\u517C\u5BB9 ```chart / ```chart-json \u6807\u8BB0\uFF0C\u4E09\u8005\u7B49\u4EF7\uFF09\uFF0C\u4F7F\u7528\u7B80\u5316\u683C\u5F0F {\"type\":\"\u56FE\u8868\u7C7B\u578B\",\"data\":[...]}\uFF1A\n{\"type\":\"radar\",\"indicators\":[{\"name\":\"\u6027\u80FD\",\"max\":100},{\"name\":\"\u6613\u7528\u6027\",\"max\":100}],\"data\":[{\"name\":\"\u7EFC\u5408\u8BC4\u5206\",\"value\":88}]}\n- scatter\uFF08\u6563\u70B9\u56FE\uFF0C\u76F8\u5173\u6027\u5206\u6790\uFF0Cvalue \u4E3A [x,y] \u6570\u7EC4\uFF09\uFF1A{\"type\":\"scatter\",\"data\":[{\"name\":\"\u70B9A\",\"value\":[5,12]},{\"name\":\"\u70B9B\",\"value\":[8,20]}]}\n\nMermaid\uFF08\u7ED3\u6784\u56FE\uFF09\uFF1A\u6D41\u7A0B\u56FE / \u65F6\u5E8F\u56FE / \u72B6\u6001\u56FE\u7B49\u7528 ```mermaid \u56F4\u680F\u5757\uFF0C\u5185\u5BB9\u4E3A mermaid \u6587\u672C\uFF08\u975E JSON\uFF09\uFF0C\u7531\u524D\u7AEF\u6807\u51C6\u5E93\u89E3\u6790\uFF0C\u5982 graph TD; A-->B\u3002"; /** * 文档场景图表块格式规范文本(chart 简化格式,简体中文)。 * 覆盖 ```chart / ```chart-json / ```echarts 等价围栏标记、全部 8 种类型的 * 必填/可选字段、JSON 合法性要求与各类型数据结构示例;注明场景限制 * (vega-lite 仅对话渲染、mermaid 在文档中降级为文本)。 */ export declare const DOC_CHART_BLOCK_SPEC = "#### chart \u56FE\u8868\u5757\u683C\u5F0F\u89C4\u8303\uFF08\u6587\u6863\u573A\u666F\uFF09\n\n\u6587\u6863\uFF08HTML \u62A5\u544A / PPTX\uFF09\u4E2D\u7684\u56FE\u8868\u5FC5\u987B\u7528 ```chart \u56F4\u680F\u5757\u58F0\u660E\uFF08```chart-json / ```echarts \u6807\u8BB0\u7B49\u4EF7\uFF09\uFF0C\u670D\u52A1\u7AEF\u4F1A\u5C06\u5176\u6E32\u67D3\u4E3A ECharts \u56FE\u8868\uFF08\u65E0\u9700\u7F16\u5199 ECharts option\uFF09\uFF1A\n\n```chart\n{\"type\":\"bar\",\"title\":\"\u5404\u5B63\u5EA6\u8425\u6536\uFF08\u4EBF\u5143\uFF09\",\"data\":[{\"name\":\"Q1\",\"value\":120},{\"name\":\"Q2\",\"value\":150},{\"name\":\"Q3\",\"value\":180}]}\n```\n\n\u901A\u7528\u8981\u6C42\uFF1A\n- \u5757\u5185\u5BB9\u5FC5\u987B\u662F\u5355\u4E2A\u5408\u6CD5 JSON \u5BF9\u8C61\uFF1A\u5C5E\u6027\u540D\u7528\u53CC\u5F15\u53F7\u5305\u88F9\u3001\u7981\u6B62\u6CE8\u91CA\u4E0E\u5C3E\u9017\u53F7\uFF0C\u5426\u5219\u8BE5\u5757\u4F1A\u964D\u7EA7\u4E3A\u666E\u901A\u6587\u672C\u3002\n- type\uFF08\u5FC5\u586B\uFF09\uFF1A\u56FE\u8868\u7C7B\u578B\uFF0C\u4EC5\u652F\u6301 bar / bar-horizontal / line / pie / doughnut / radar / gauge / scatter \u5171 8 \u79CD\u3002\n- data\uFF08\u5FC5\u586B\uFF09\uFF1A\u975E\u7A7A\u6570\u7EC4\uFF0C\u6BCF\u9879\u4E3A {\"name\":\"\u5206\u7C7B\u540D\",\"value\":\u6570\u503C}\u3002\n- title\uFF08\u53EF\u9009\uFF09\uFF1A\u56FE\u8868\u6807\u9898\u5B57\u7B26\u4E32\u3002\n\n\u5404\u7C7B\u578B\u6570\u636E\u7ED3\u6784\u793A\u4F8B\u4E0E\u4E13\u5C5E\u5B57\u6BB5\uFF1A\n- bar\uFF08\u7EB5\u5411\u67F1\u72B6\u56FE\uFF0C\u7528\u4E8E\u5206\u7C7B\u5BF9\u6BD4\uFF09\uFF1A\n {\"type\":\"bar\",\"data\":[{\"name\":\"Q1\",\"value\":100},{\"name\":\"Q2\",\"value\":130}],\"yName\":\"\u9500\u552E\u989D\",\"rotate\":30}\n \u53EF\u9009\u5B57\u6BB5\uFF1AyName\uFF08y \u8F74\u540D\u79F0\uFF09\u3001rotate\uFF08x \u8F74\u6807\u7B7E\u65CB\u8F6C\u89D2\u5EA6\uFF09\u3002\n- bar-horizontal\uFF08\u6A2A\u5411\u67F1\u72B6\u56FE\uFF0C\u7528\u4E8E\u7C7B\u76EE\u8F83\u591A\u6216\u540D\u79F0\u8F83\u957F\u65F6\u7684\u5BF9\u6BD4\uFF09\uFF1A\n {\"type\":\"bar-horizontal\",\"data\":[{\"name\":\"\u534E\u4E1C\",\"value\":100},{\"name\":\"\u534E\u5357\",\"value\":80}]}\n \u53EF\u9009\u5B57\u6BB5\uFF1AyName\uFF08\u6570\u503C\u8F74\u540D\u79F0\uFF09\u3002\n- line\uFF08\u6298\u7EBF\u56FE\uFF0C\u7528\u4E8E\u65F6\u95F4\u8D8B\u52BF\uFF09\uFF1A\n {\"type\":\"line\",\"data\":[{\"name\":\"1\u6708\",\"value\":30},{\"name\":\"2\u6708\",\"value\":40}],\"datasets\":[{\"name\":\"\u8425\u6536\",\"data\":[30,40]},{\"name\":\"\u5229\u6DA6\",\"data\":[12,18]}]}\n \u53EF\u9009\u5B57\u6BB5\uFF1Adatasets\uFF08\u591A\u7CFB\u5217\uFF0C\u6BCF\u9879\u4E3A {\"name\":\"\u7CFB\u5217\u540D\",\"data\":[\u6570\u503C,...]}\uFF0C\u4E0E data \u9879\u6570\u4E00\u81F4\uFF09\u3001yName\uFF08y \u8F74\u540D\u79F0\uFF09\u3002\n- pie\uFF08\u997C\u56FE\uFF0C\u7528\u4E8E\u5360\u6BD4\u6784\u6210\uFF09\uFF1A\n {\"type\":\"pie\",\"data\":[{\"name\":\"\u684C\u9762\u7AEF\",\"value\":60},{\"name\":\"\u79FB\u52A8\u7AEF\",\"value\":40}]}\n \u53EF\u9009\u5B57\u6BB5\uFF1Aradius\uFF08\u5982 [60,100] \u5F62\u6210\u73AF\u5F62\uFF09\u3002\n- doughnut\uFF08\u73AF\u5F62\u56FE\uFF0C\u7528\u4E8E\u5360\u6BD4\u6784\u6210\u7684\u9542\u7A7A\u5C55\u793A\uFF09\uFF1A\n {\"type\":\"doughnut\",\"data\":[{\"name\":\"A \u7C7B\",\"value\":70},{\"name\":\"B \u7C7B\",\"value\":30}]}\n- radar\uFF08\u96F7\u8FBE\u56FE\uFF0C\u7528\u4E8E\u591A\u7EF4\u5EA6\u8BC4\u4F30\uFF09\uFF1A\n {\"type\":\"radar\",\"indicators\":[{\"name\":\"\u6027\u80FD\",\"max\":100},{\"name\":\"\u6613\u7528\u6027\",\"max\":100}],\"data\":[{\"name\":\"\u7EFC\u5408\u8BC4\u5206\",\"value\":88}]}\n \u5FC5\u586B\u5B57\u6BB5\uFF1Aindicators\uFF08\u975E\u7A7A\u6570\u7EC4\uFF0C\u6BCF\u9879\u4E3A {\"name\":\"\u7EF4\u5EA6\u540D\",\"max\":\u6EE1\u5206}\uFF09\uFF1Bdata \u5404\u9879\u7684 value \u53EF\u4E3A\u6570\u503C\u6216\u6570\u503C\u6570\u7EC4\uFF08\u591A\u7CFB\u5217\u5BF9\u6BD4\uFF09\u3002\n- gauge\uFF08\u4EEA\u8868\u76D8\uFF0C\u7528\u4E8E\u5355\u6307\u6807\u6C34\u4F4D\u5C55\u793A\uFF09\uFF1A\n {\"type\":\"gauge\",\"data\":[{\"name\":\"CPU \u4F7F\u7528\u7387\",\"value\":75}],\"max\":100}\n \u53EF\u9009\u5B57\u6BB5\uFF1Amax\uFF08\u91CF\u7A0B\u4E0A\u9650\uFF0C\u9ED8\u8BA4 100\uFF09\u3002\n- scatter\uFF08\u6563\u70B9\u56FE\uFF0C\u7528\u4E8E\u76F8\u5173\u6027 / \u5206\u5E03\u5206\u6790\uFF09\uFF1A\n {\"type\":\"scatter\",\"data\":[{\"name\":\"\u70B9A\",\"value\":[5,12]},{\"name\":\"\u70B9B\",\"value\":[8,20]}]}\n data \u5404\u9879\u7684 value \u4E3A [x,y] \u6570\u7EC4\u3002\n\n\u573A\u666F\u9650\u5236\uFF1A\n- ```vega-lite \u4EC5\u5728\u5BF9\u8BDD\u56DE\u590D\u4E2D\u6E32\u67D3\uFF0C\u6587\u6863\u573A\u666F\u4E0D\u652F\u6301\uFF0C\u4E0D\u5F97\u5728\u6587\u6863\u4E2D\u4F7F\u7528\u3002\n- ```mermaid \u5728\u6587\u6863\u4E2D\u4F1A\u964D\u7EA7\u4E3A\u666E\u901A\u6587\u672C\u5757\uFF0C\u5E94\u907F\u514D\u5728\u6587\u6863\u4E2D\u4F7F\u7528\u3002"; /** chart 围栏块校验错误项 */ export interface ChartBlockValidationError { /** 非法块序号(按内容中 chart 简化格式与 vega-lite 围栏块出现顺序,从 1 开始) */ index: number; /** 围栏语言标记(chart / chart-json / echarts / vega-lite) */ lang: string; /** 问题描述 */ issue: string; } /** * 校验 Markdown 内容中面向文档场景的图表围栏块(文档生成执行期语义)。 * - chart / chart-json / echarts:检查 JSON 合法性、type 已知、必填字段齐全 * (data 非空且各项含 name/value、radar 含 indicators)。 * - vega-lite:文档场景无法渲染,每个块直接报错并提示改用 chart 标记。 * - mermaid:不执行校验(文档中由解析层降级为文本块)。 * @returns 非法块错误清单;内容不含受检围栏块或全部合法时返回空数组。 */ export declare function validateChartBlocks(content: string): ChartBlockValidationError[]; /** generate_chart 工具输入的图表简化格式(与 DOC_CHART_BLOCK_SPEC 字段口径一致) */ export interface ChartSpec { /** 图表类型(CHART_SUPPORTED_TYPES 之一) */ type: ChartSupportedType; /** 图表标题(可选,默认"数据图表") */ title?: string; /** 数据点:非空数组,每项为 { name, value } */ data: Array<{ name: string; value: number | number[]; }>; /** 多系列数据(line / bar 可选):每项为 { name, data: number[] } */ datasets?: Array<{ name: string; data: number[]; }>; /** 雷达图维度指标:每项为 { name, max } */ indicators?: Array<{ name: string; max: number; }>; /** x 轴标签旋转角度 */ rotate?: number; /** 数值轴名称 */ yName?: string; /** 量程上限(gauge 默认 100) */ max?: number; /** 饼图半径(如 [60,100] 形成环形) */ radius?: number[]; } /** generate_chart 工具输出的图表块(前端可直接渲染) */ export interface ChartBlock { /** 渲染引擎标记,当前固定 echarts */ type: 'echarts'; /** 标准 ECharts option(由 buildEChartsOption 生成) */ option: Record; /** 图表标题 */ title: string; /** 图表高度(px,可选) */ height?: number; } /** generate_chart 工具执行结果(executor 序列化为 JSON 字符串返回) */ export interface ChartToolResult { /** 一句话结果摘要(LLM 可读) */ summary: string; /** 图表块(前端渲染) */ chart: ChartBlock; } /** * 校验并归一化 generate_chart 工具入参(执行期语义,字段口径与 validateChartBlocks 一致)。 * @returns 归一化后的 ChartSpec * @throws 参数不合法时抛出带中文说明的 Error(由工具执行层转为失败结果) */ export declare function validateChartSpec(input: unknown): ChartSpec; //# sourceMappingURL=chart-spec.d.ts.map