1实现原理 · 为什么它能做到
模板本体没有可执行代码:loader 从 src/lib/templates/skills/<id>/SKILL.md 读入 frontmatter 与正文,正文(body)与 example 内容一起作为 LoadedSkill 返回。
const raw = safeRead(path.join(dir, "SKILL.md"));
下发前宿主固定拼装 prompt:模板正文夹在共享设计指令 SHARED_DESIGN_DIRECTIVES 与【输入格式】/【用户内容】之间。
Wrap a per-template instruction body with the shared design directives and
共享指令把硬约束写成对 agent 的显式禁令,并强制内容驱动数量(模板里的数字只作参考下限)。
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
真正执行的是用户本机已安装并登录的编码 agent CLI:宿主 spawn 子进程,把 prompt 交给它,HTML 从 stdout 流式捕获。
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
/api/convert 是模板的执行路径:它把 skill.body 与用户内容组装成 prompt 后交给 invokeAgent。
prompt = assemblePrompt({ body: skill.body, content, format });
模板要求图表在产物中由 CDN 图表库渲染:至少 2 个图表(柱/折线/饼/散点),用 Chart.js 或 ECharts,经 jsdelivr CDN 引入,数据从用户输入解析。
- 主图表区: 至少 2 个图表 (柱状 / 折线 / 饼 / 散点), 使用 Chart.js 或 ECharts (jsdelivr CDN 引入), 数据从用户输入解析得到。
模板预言了一个具体崩溃场景并给出解法:Chart.js 在 responsive+maintainAspectRatio:false 下若父容器无显式高度会陷入 ResizeObserver 死循环,故 canvas 外层必须包固定高度容器。
**图表容器必须有固定高度**
数据真实性被写成最高优先级纪律:必须解析用户提供的实际数据,不要捏造。
- **必须解析用户提供的实际数据**, 不要捏造。
报告还固定了四类支撑内容:头部(标题+区间+数据来源)、KPI 卡(数值+同比+微型趋势线)、数据表格(zebra/hover/sticky header)、洞察块(3-5 条 emoji 开头)与底部方法论折叠区。
- KPI 卡片网格: 3-5 个最重要指标, 每个卡片显示数值 + 同比变化 + 微型趋势线。
示例把数据写成内联数组并用产物内脚本渲染表格与图表,体现用户数据 → 页面结构的完整通路。
{month:'2024-09', mau:8420, signups:1240, paying:612, churn:0.034},
图表容器的高度约束在示例中逐字落实(迷你图 40px、主图 260px)。
<div class="mt-3" style="position:relative;height:40px"><canvas id="kpi1"></canvas></div>
2核心能力
4风险提醒 风险提醒:绿色 · 放心使用
- 图表库走 jsdelivr(产物期引用) — 产物的 <script src> 指向 cdn.jsdelivr.net/npm/[email protected](SKILL.md:22 要求,example.html:7 实引);离线或该 CDN 不可达时页面无图(表格与洞察仍在,图表区空白)。skill 执行期不请求该端点。
- 产物含脚本并在预览面板同源执行 — 示例在页面内 new Chart(...) 并渲染表格;宿主预览 iframe 为 sandbox="allow-scripts allow-same-origin"(宿主行为),生成物脚本会在预览源下执行,用户数据同时进入该脚本的数据数组。
- 用户数据逐字进入 prompt 与产物 — CSV/JSON 会被逐字插入 prompt(宿主装配层无转义),并作为数据数组写入产物;若数据文件本身含指令性文本或异常字符,可能影响生成或页面渲染。
- Excel 输入依赖模型自行解析 — 模板声明支持 CSV/Excel/JSON,但除 CSV 外无解析脚本;xlsx 需由 agent CLI 侧处理,二进制表格在无工具环境下可能被误读。
5第二遍独立确认
- [ok] 图表容器高度规范 vs 示例实现 — SKILL.md 要求 canvas 外层包固定高度 div(KPI ~40px、主图 240–280px)且禁止给 canvas 写 height 属性;示例全部命中(40px×4、260px×2,canvas 无 height 属性)。
- [ok] 数据一致性(产物 ↔ 示例输入) — example.html 的 data 数组与 example.md 的 CSV 9 行数值一一对应(如 2025-05: mau 23950 / signups 4250 / paying 2418 / churn 0.018),证明解析用户数据的执行路径可复现。
- [ok] 端点性质(产物期 vs 执行期) — SKILL.md:22 逐字命中「使用 Chart.js 或 ECharts (jsdelivr CDN 引入)」;example.html:7 为 [email protected] 的 jsdelivr 链接。库由浏览器加载产物时取用,属产物期引用(批4 终版口径不判级),故维持 green;端点已列入 security.reason 与 verdict.risks。
- [ok] 「至少 2 个图表」是否达标 — 示例有 chart-main(柱状覆盖双轴折线)与 chart-churn(折线)两张主图,另有 4 条 KPI 迷你趋势线,超过最低要求;图表类型在 SKILL.md 列出的柱状/折线范围内。
- [ok] license / stars / commit 元数据 — GitHub API(api.github.com/repos/nexu-io/html-anything):spdx_id=Apache-2.0、stargazers_count=8827、pushed_at=2026-09-15T03:36:24Z;工作副本 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(与任务表 pin 553ed98c283f 同源)。
- [ok] skill.path 与目录资产面 — pin 目录内该路径存在且含 SKILL.md;目录内文件清单已用 glob 全量核对(含隐藏文件),无 scripts/、无 references/、无二进制资产(competitive-teardown 的 assets/ 为纯 HTML,另行记录)。
6结论
decfcd8af87ff5e9…553ed98c28