14 · kimi-slides / kimi-design / kimi-widget 深度拆解(slides+design 技能组)

← 返回主报告:Kimi Agent(云端沙箱)技术报告GitHub 原文

合规与风险声明:本报告为安全研究与互操作学习目的的逆向分析,全程只读采集,未对目标系统做任何修改;文中所有密钥、token、账号级标识(chat_id / project_id / tenant_id 等)均已脱敏;沙箱内发现的默认弱口令(VNC/SSH)属平台侧配置,仅作安全发现披露,请勿用于访问任何不属于自己的系统。docx/pdf/xlsx/kimi-slides 等引擎二进制为 Moonshot 专有许可(禁再分发/逆向),本文仅作行为级描述。报告基于单次分析窗口(约 50 分钟生命周期),软件版本与技能库存随镜像更新可能变化。

第二轮深度分析 · slug=14-slides-design 采集方式:HTTP 只读(http://127.0.0.1:18080/<沙箱路径>),本轮 SSH 不可用;沙箱 http.server 为单线程,大文件串行拉取 第一轮上下文:sections/08-skills-c.md §2-§4(kimi-slides/kimi-design/kimi-widget 初读)、sections/11-user-layer.md §4(~/.kimi-slides)


〇、一句话结论

kimi-slides 是 Moonshot 的第一方 PPT 技能,其核心不是提示词而是一套完整自研的文档技术栈.pptd YAML DSL(1639 行规范)+ Rust 原生 CLI(resvg/usvg/cosmic-text 渲染管线,14MB 单二进制,零 Node 依赖运行时)+ 25 款编号字体包(68MB)+ 约 60 套设计系统文档。CLI 通过 npm 包 @kimi-slides/cli(私有 GitLab registry)分发,postinstall 按平台拉预编译二进制。对 Hermes 价值最高的三件可移植资产:① .pptd DSL 规范本身(纯文档,直接可抄);② “YAML DSL + 确定性 check –level auto 修复闭环”的工作流范式;③ 字体别名归一化机制(fonts.json nameList)。 硬障碍:CLI 是闭源 Rust 二进制、走私有 registry,不能直接 npm 安装。


一、资产清单与分布

资产沙箱路径规模性质
kimi-slides 技能/app/.agents/skills/kimi-slides/SKILL.md 130 行 + reference/(133 文件 78MB,大头是设计系统 jpg 预览图)纯文本/md+图
kimi-design 技能/app/.agents/skills/kimi-design/SKILL.md 55 行 + reference/ 5 文件纯文本
kimi-widget 技能/app/.agents/skills/kimi-widget/SKILL.md + assets/icons/ 105 SVG + references/纯文本+SVG
CLI npm 包/home/kimi/.npm-global/lib/node_modules/@kimi-slides/cli/bin+dist+scripts 极薄,vendor/ 下放二进制闭源 Rust 二进制
字体包/home/kimi/.kimi-slides/fonts/25 个编号 TTF + fonts.json开源字体聚合

二、.pptd DSL 完整语法规范(reference/pptd.md,1639 行)

这是整个技能组的地基,kimi-slides 与 kimi-design 共用同一份 pptd.md(两技能 reference 下各有一份)。定位为”AI 友好的 OOXML 再抽象“:保留 theme/页面/元素坐标,删除 Masters 嵌套,每页自包含、所见即所得

2.1 全局约定

  • 语法:YAML 1.2;:#{} 等特殊字符的值必须加引号或用块标量(|)。对 content.text 这类富含特殊字符的字段强制建议块标量,防止 style="..." 被 YAML 误解析——这是针对 LLM 生成错误的定向防御。
  • 坐标系:px 为单位,72 PPI 下 1px=1pt,原点左上。默认尺寸:PPT 16:9=[960,540]、4:3=[720,540];海报 16:9=[1280,720]、9:16=[720,1280]、1:1=[1080,1080] 等 5 种。
  • 样式优先级链(三层体系,是规范最工程化的部分):
    • 文本框内文字:富文本语义标签(等) → 内联 →

      段落 → Text.content 直接字段 → $style 主题引用 → 默认值表(color #000000 / fontSize 18 / fontFamily MiSans / lineHeight 1…)。

    • 表格单元格:Cell 字段 → textStyle 引用 → TableStyleConfig 行/列分类样式(rowOverColumn 默认 true 行赢列)→ bodyStyles 按数据行索引循环 → cellStyle 基线 → 默认。
    • 图表:系列显式 fill → seriesDefaults 同名字段 → 内置 10 色盘(#1783FE #67B8A6 #C9A869 #8A84C7 #8C98A8 #5E9CF4 #7AB5D7 #B08A9C #333 #DCDCDC 循环)。seriesDefaults 合并规则明确到字段级:标量覆盖、对象一级浅合并、数组整体替换type/encode 禁止出现在 defaults。文档甚至给出”反直觉示例”说明合并结果。
  • boolean | Config 统一约定false=关、true=开+默认配置、对象=开+自定义(marker/legend/axisLine/gridLine/colorbar 等统一遵守;唯一例外 scatter.marker 不能 false)。

2.2 共享类型

  • Color:HEX6/HEX8 + $themeKey 主题引用(任何 Color 位置都支持 $xxx,含嵌套数组内)。
  • FontFamilystring | {latin, ea} —— 中西文分字体是一等公民。
  • Border/BorderSpec:单值四边同、[上下,左右][上,右,下,左] 顺时针、null 清除——与 OOXML 单元格边框语义对齐。
  • Fill:solid / gradient(linear|radial + stops + angle,0=左→右顺时针) / image(src 支持 https URL,仅 jpg/jpeg/png/gif)。ImageFill 渲染顺序固定 crop→fit
  • ImageCrop:正数内裁、负数外扩补透明像素(outset)——比 CSS 语义更强;约束 left+right<1
  • Shadow{blur,color,offset}ImageFit{fill|contain|cover}Alignment=[水平,垂直](含 justify/distributed)。

2.3 主入口 .pptd(Presentation)

version: v2            # 必填,固定 v2
title: ...
size: [960, 540]
customFonts:           # 仅支持 Google Fonts CSS URL,且只支持默认字重
  - {family: Noto Serif SC, src: "https://fonts.googleapis.com/css2?family=Noto+Serif+SC"}
theme: {colors, textStyles, tableStyles}   # 三类 token,$key 引用
pages: [pages/1_cover.page, ...]           # 相对路径列表

路径规则三条铁律:完全自包含(禁止引用目录外文件)、只支持相对路径、媒体可 URL。一切必须经 .pptd 主入口加载.page 不能单独传给 convert/check。

2.4 页面 .page

{pageType(cover/toc/chapter/content/final/自定义), background(默认白), notes(演讲者备注), elements[](越后层级越高), animations[]}

2.5 七种元素