1实现原理 · 为什么它能做到
这个 skill 不是可执行程序,而是「一个目录 = 一个模板」:SKILL.md 的 frontmatter 供选择器展示,正文(body)就是发给模型的提示词;加模板=加目录,不需要改 TypeScript。
routes rescan disk and the client refetches `/api/templates`.
实际下发提示词 = 平台共享设计指令(SHARED_DESIGN_DIRECTIVES)+ 本 skill 的 SKILL.md 正文 + 用户内容,由 assemblePrompt 拼成一条 prompt。
Wrap a per-template instruction body with the shared design directives and
成稿不走文件系统:共享指令明令禁止 Write/Edit/Bash 等文件工具,要求模型把整份 HTML 直接作为回复正文流式输出(stdout 由前端捕获落盘)。
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。不要把 HTML 写到任何 \`.html\` 文件里。前端直接捕获你的 stdout 文本, 文件落盘由前端负责。
风格全部由 SKILL.md 的【布局】清单用「色值 + 字体 + 圆角 + 组件」四条钉死:奶油底 #fef8f1、三个柔光 blob、Playfair 斜体衬线标题、28px 圆角马卡龙卡片、Playfair 斜体 01-04 序号。
- 奶油 #fef8f1 底 + 三个柔光 blob
卡片的 28px 圆角与柔光 blob 在 example.html 里落成可抄的具体 CSS:卡片 28px 圆角 + 0 14px 40px 柔影,blob 是三个带径向渐变的大圆 + blur(2px)。
.tpl-xhs-pastel-card .xp-card{border-radius:28px;padding:30px 34px;background:#fff;box-shadow:0 14px 40px rgba(42,35,64,.08);position:relative;overflow:hidden}
数字图形不靠图表库:一周时间分配用一个手写 SVG donut(多段 circle + stroke-dasharray 偏移)绘制,中心用 Playfair 数字标 4h。
<text x="130" y="130" text-anchor="middle" font-family="Playfair Display" font-size="44" font-weight="900" fill="#2a2340">4h</text>
页数不由模板写死:共享指令要求「内容驱动数量」,模板只提供可复用版式池。
模板只定义"可用版面 / 风格 / 配色 / 字体 / 组件库", **不定义** slide / 帧 / 卡片 / section 的数量。
服务端 /api/convert 只做三件事:按 templateId 从磁盘读 skill、拼 prompt、spawn 本地 agent CLI 并 SSE 流转发输出。
prompt = assemblePrompt({ body: skill.body, content, format });
2核心能力
4风险提醒 风险提醒:绿色 · 放心使用
- 氛围化配色牺牲对比度 — 奶油底 + 浅马卡龙卡片上的深色 token 才达标,若模型把正文直接放在浅粉/浅柠卡片上,对比度可能跌破 4.5;需人工检查。
- 装饰性固定元素与长内容冲突 — 三团 blob 是绝对定位、尺寸写死,页数增多或文字变长时可能压到卡片边缘,需在扩页时保留 76px/90px 内边距纪律。
- 依赖宿主播放器 — 样例 .slide 用 100vw/100vh 全屏并假定宿主提供 ←/→ 翻页与 deck 模式;脱离 html-anything 平台单独打开时,多页会堆叠为长页(样例末尾另有 @media print 规则兜底)。
- 用户内容逐字进 prompt — 用户粘贴的文本若含越权指令,可能改写模板风格或把外链/脚本带进成稿;属宿主通用注入面。
5第二遍独立确认
- [ok] 目录只有 SKILL.md + example.html(无脚本/无资产) — find 结果 2 个文件;<script 与事件处理器零命中。
- [ok] 「奶油底 #fef8f1 底 + 三个柔光 blob」 — example.html 有 --xp-bg:#fef8f1 与 .xp-blob.b1/.b2/.b3 三条径向渐变规则。
- [ok] 「Playfair 斜体 01-04 序号」 — 卡片内 <div class="xp-num">01</div>…04 与 .xp-h1 em{font-style:italic} 均为 Playfair Display。
- [ok] 「SVG donut 图 + chip+page 顶栏」 — 第 06 页背景层含四段 stroke-dasharray 的圆环 + 中心 4h;每页 xp-topbar 内 xp-chip + xp-page。
- [discrepancy] aspect_hint 16:9 与样例的对应关系 — SKILL.md frontmatter 写 aspect_hint: "16:9",但 example.html 的 .slide 是 width:100vw/height:100vh 全屏适配(由宿主的 deck 模式播放),并没有 16:9 固定画布;选择器缩略图处才出现 aspect-ratio:16/9。结论:16:9 是宿主预览/导出的约束,不是模板文件里的画布尺寸。
- [ok] 页数口径 — 样例为 8 页(页脚 01 · 08…08 · 08),符合共享指令「模板不定义数量、由内容决定」;SKILL.md 未写死页数。
- [ok] 官方描述逐字一致 — description 原文「奶油底 + 柔光 blob + 马卡龙圆角卡片 + Playfair 斜体序号」与 SKILL.md 逐字相同。
6结论
e9e5fecb3c98880a…553ed98c28