更新日志
K2F 参考引擎、k2f CLI、Python 与 JavaScript SDK、MCP 服务器、桌面阅读器以及导出工具的发布历史。
- 包版本遵循语义化版本。带标签的构建与产物:GitHub Releases。
- 格式契约为 Spec 0.3。补丁版本通常保持该文件名;关于编译后 lock 上的
engine_version与规范的关系,见兼容性。 - 安装:
pip install k2f·cargo install k2f·npm i @openk2f/k2f
条目遵循 Keep a Changelog。
未发布
新增
- 规范 EBNF 附录,涵盖包路径、语义节点骨架和主题大纲(JSON Schema 仍是字段契约)。
schema/schemastore/下的 SchemaStore 导出,以及供 IDE 目录提交的生态指南。
[0.3.3] - 2026-10-15
新增
- 当文本或子盒子绘制超出固定单元格或
{fr}单元格、被钳制的 stack 或columns时,编译会给出CONTENT_OVERFLOW警告。仅为警告——打包仍然成功。当同族的 Bold/Italic 字体文件已嵌入但未被选中、粗体/斜体仍为合成时,FONT_SYNTHETIC会给出警告。
修复
init_package.py --font会删除被替换字族的许可证文件,并在新字体带有同目录的OFL.txt/LICENSE时一并复制。--font/--add-font会为-Regular旁边的同族-Bold/-Italic/-BoldItalic文件名填充font_faces。- SVG 图像按目标像素尺寸栅格化(查看器的绘制缩放比例;对 PDF、DOCX、PPTX 和 IDML 而言为图像盒每 pt 4 px),而不是按 SVG 文件自身的像素尺寸用最近邻放大。Lock 哈希不变;重新打开或重新导出即可获得更锐利的线条。
[0.3.2] - 2026-09-28
新增
- 桌面阅读器: 应用内编辑、文件重新加载/监视、弹出层外观、表单填写、丢弃/保存流程以及布局修复。打包的预览构建仍位于 k2f.dev/download。
- PDF 导出: 对模糊、阴影、渐变和半透明填充采用效果切片栅格化(缩放 2–4;默认 4)。无效果的页面仍保持矢量轮廓,文本渲染模式为 3。
变更
- 项目状态文档:桌面阅读器列在 Preview 下;签名/公证仍在路线图中。
0.3.1 - 2026-09-19
修复
export-docx/export-pptx: 将已发布的 lock 绘制到 Word、LibreOffice Writer、PowerPoint 和 LibreOffice Impress 时的保真度修复——列表(项目符号、编号、换行缩进)、折叠卡片外壳与 z 顺序、表格单元格内边距与框线、字体嵌入(包括 CJK 和仅粗体字面)、渐变与透明度、文本换行与对齐、表单复选框以及行距。Office 文件仍然是对 lock 的单向绘制(DOCX_IS_NOT_A_SOURCE、PPTX_IS_NOT_A_SOURCE)。export-idml: 针对 InDesign 的保真度修复——原生表格与 DrawBox 回退、排版(伪粗体、图旁多行标题)、线性渐变与半透明填充(process RGB /WebIntent)以及相关布局边界情况。IDML 不是 K2F 源(IDML_IS_NOT_A_SOURCE)。
0.3.0 - 2026-09-18
新增
- 格式规范 0.3——当前磁盘上的 ZIP 布局、schema 和 lock 契约(与 0.3.x SDK 系列对齐)。
- 打包/编译/栅格化会以
SVG_TEXT(而非IMAGE_SIZE)拒绝 SVG 实时文本。仍然是失败关闭(fail-closed);请将标签放入 K2F 文本节点或转换为<path>。 - 列表标记和代码块使用与正文相同的包内字体覆盖回退。
- 技能目录:OFL 的
NotoSerif-Regular.ttf用于衬线标题或正文(--add-font catalog/assets/fonts/NotoSerif-Regular.ttf,然后重定向角色的font_family)。起始包仍仅含 Roboto;没有跨字族回退。 k2f export-idml <package> -o <out-dir>——InDesign 包({stem}.idml+Document Fonts/)。-o file.zip写出同样的目录树并压缩;--idml-only只写出一个.idml。IDML ZIP 仍不包含 TTF 字节。IDML 不是 K2F 源(IDML_IS_NOT_A_SOURCE)。- 角色/变体的
image_fit(默认contain,或cover居中裁剪)。图像节点自身的corner_radius会裁剪该位图。PPTX/DOCX 输出a:srcRect+roundRect;IDML 使用 FillProportionally + 框架圆角。
变更
grid/overlay/columns/ 水平stack的根layout是编译错误(此前对水平方向会静默回退为垂直流)。请嵌套在子节点下。目录中的ex_*.json都是子节点——不要替换content/root.json。
修复
export-docx/export-pptx:已应用主题emphasis(包括emphasis→ 斜体)的 lock 绘制不会被重新映射为粗体。此前将每个非italic意图都叠加为粗体,导致真正的斜体文本段导出为粗斜体。空绘制的回退仍会将默认 emphasis 加粗。- 带有部分
list_style(例如只有bullet_glyph)的list_item会合并起始默认值后编译。显式的0仍然优先;schema 字段保持可选。
0.2.4 - 2026-09-11
新增
- 桌面阅读器:带显示 LOD 的连续捏合 / Ctrl+滚轮缩放、全部复制为文本,以及 macOS 菜单勾选标记。
- Web 查看器:与桌面阅读器对齐的显示缩放 LOD 辅助函数。
修复
export-docx/export-pptx: 将已发布的 lock 绘制到 Word、LibreOffice Writer、PowerPoint 和 LibreOffice Impress 时的多项保真度修复——横幅上的主标题、卡片折叠与堆叠、列表项目符号与编号、表格行与部分边缘框线、深色模式纸张底色、字体嵌入与字距、换行与对齐、渐变与半透明、带{{page_*}}字段的页眉、表单复选框,以及相对于图像的 z 顺序。导出仍然是对 lock 的单向绘制。
0.2.3 - 2026-09-09
修复
- 使已发布的 Rust(
k2f、k2f_sdk)、Python(k2f)和 npm(@openk2f/k2f)与 0.2.2 之后在main上发布的模板打包移除保持一致(crates.io 和 PyPI 上的 0.2.2 仍暴露具名模板 API)。
0.2.2 - 2026-09-09
新增
init_package.py页面预设square(1:1,600pt)、portrait-45(4:5)和card(美制 3.5×2",252×144pt),默认边距 0。与幻灯片相同的分页ex_poster_shell;将layout.height设为页面高度。双面卡片:两个外壳,背面break_before: page,--expect-pages 2。- 当页面内容盒底部空白 ≥25% 时(多页流的最后一页除外),编译会给出
PAGE_UNDERFILL诊断。仅为警告——pack_verify.py不会失败。目录示例ex_filled_page.json。--render还会为额外页面写出preview-N.png。
变更
k2f pack、k2f compile和Editor.save_bytes会将包内的大型 CJK 字面按覆盖范围取子集:GB2312 ∪ Big5 一级 ∪ JIS X 0208 汉字,外加所有非汉字字形。作者目录保留原始字面。不会丢弃任何汉字的字面保持字节完全一致。缺失汉字仍然失败关闭(FONT_MISSING_GLYPH)。- 智能体技能:发票/简历/传单/海报是组合式填充页面(在这些场景中
PAGE_UNDERFILL= 必须修复)。合同/报告/论文是一棵流式树——没有p1/p2页面容器;允许在章节/附件/签名上使用break_before。LAYOUT_SLACK仍仅为警告。 - 除
default之外的主题角色可以省略font_family/font_size/line_height_mult/color;编译时会从default填充。default仍要求全部四项。整页填充仍由根角色的box_decoration.background决定(整页,包括边距)——而不是page_config.background。 LAYOUT_SLACK/PAGE_UNDERFILL会跳过微型页面(内容盒短于 180pt)和小于 36pt 的未使用间隙,因此卡片内缩不会被当作空心增长器。A4 / 16:9 的增长器保持不变。FONT_MISSING_GLYPH会指出未覆盖的码点,并提示作者用--add-font添加覆盖这些码点的 TTF/OTF(仍然失败关闭;没有操作系统回退)。包内嵌入的字面之间已经可以相互回退。
修复
- 会溢出可用轴的网格
{auto:true}轨道现在按比例收缩,而不是与相邻列/行重叠。较短的自动内容仍然贴合;剩余空间仍分配给fr。两个轴上的规则相同。 grid/overlay/columns的根layout是编译错误(此前会静默回退为垂直流)。请嵌套在子节点下,例如root.grid。- 线性渐变绘制在色标颜色无法解析时失败关闭(不会静默变成单色标 / 空填充)。
angle_degrees中 0=向右,90=向下——已在图元 schema 和技能填充说明中记录(不是 CSS)。 - SVG
<text>的拒绝消息会提示智能体去掉这些标签并使用 K2F 文本节点(或<path>),与技能错误表一致。 - 四边盒子边框在 PNG/查看器(以及虚线/点线 PDF)中遵循
corner_radius,与填充/阴影一致。部分边缘的边框保持直线。 export-docx/export-pptx: Office 主题颜色固定为 lock 的 sRGB;Word 避免使用原生w:tbl(深色模式会反转w:shd);表格单元格绘制为与页面其余部分相同的盒子 + 文本。export-docx: 渐变、玻璃效果和重叠图像使用原生 DrawingML /behindDoc堆叠,以免 LibreOffice Writer 将标签隐藏在整页栅格图之后。
移除
- 从每个已发布的 SDK 中移除具名官方模板(
official_templates、copy_template、resolve_template、Editor.open_template/openTemplate)。WASM 不再include_dirk2f/templates/。请使用init_package.py/ 解包 / Gallery 创建,然后Editor.open_dir或Editor.open/open_bytes。CLI 的k2f markdown --template需要一个作者目录。JS 的markdownToK2f接受templateBytes。
0.2.1 - 2026-09-07
修复
- npm
@openk2f/k2f0.2.0 将仅查看器版 WASM 作为 SDK 二进制发布(wasm/与wasm-viewer/文件完全相同),导致markdown_to_k2f和Editor缺失。SDK 与仅查看器构建现在使用各自独立的 cargo target 目录。
0.2.0 - 2026-09-07
新增
- 智能体技能设计优先工作流——在编写 K2F JSON 之前先写一份设计规范 Markdown;依据规范实现
theme.json+ 内容,然后渲染并迭代,直到输出符合预期。 k2f export-pptx <package> -o <out.pptx>——将已发布的 lock 绘制到 PowerPoint。它不是第二个布局引擎;预期会有轻微文本重排。PPTX 不是 K2F 源(PPTX_IS_NOT_A_SOURCE)。k2f export-docx <package> -o <out.docx>——将已发布的 lock 绘制到 Word。它不是第二个布局引擎;预期会有轻微文本重排。DOCX 不是 K2F 源(DOCX_IS_NOT_A_SOURCE)。- 桌面阅读器:HUD 格式 DOCX 和
k2f-reader --export-docx out.docx file.K2F(与 GUI 导出相同的 lock 字节;与--export-pdf/--export-pptx冲突)。 - 当大型拉伸盒子底部为空时,
k2f compile会打印LAYOUT_SLACK——通常是{fr:1}增长器与自动高度 stack 一起打包所致,而不是页面外壳(警告,退出码 0,lock 不变)。 - 网格轨道
{ "auto": true }——根据测量到的单元格内容确定尺寸;剩余空间分配给fr。表格的column_widths仍只支持{pt}/{fr}。 - 可选的网格
rows:省略时 →{auto:true}轨道数为ceil(n_children / n_columns)。声明的行不会增长。fr行仍需要有限的外部高度。 - 目录示例
ex_glass.json——card变体glass,通过具名box_decoration.blur和半透明表面实现(不是径向渐变)。 - 换行:连字符减号和 U+00AD 是可断行位置(连字符保留在行尾)。仍然宽于行的单词会按字符拆分。没有断词词典,也没有自动缩小。
变更
- 字体加载/渲染只解析
.ttf/.otf。assets/fonts/下的许可证/附属文件仍保留在 ZIP 和Package.fonts中(外观哈希不变),但在Face::parse时会被跳过。无效字面会报告FONT_INVALID并附带路径,而不是UnknownMagic。自动default和“至少一个字体”只统计字面。PDF/DOCX/PPTX 导出应用相同的字面路径过滤(不会将许可证.txt作为字体嵌入或解析)。 - SVG
<text>/<tspan>/<textPath>/<foreignObject>检测会先剥离 XML 注释和 CDATA,再匹配真实元素。打包和编译会拒绝它们(IMAGE_SIZE);绘制仍然失败关闭。智能体技能写作规则 4 在写作循环关卡处也作了同样说明。 - 智能体技能:流式文章使用一个无内边距的
columns容器,并设置column_span: all(不要在图注上使用break_before: page)。变体文本字段仍放在text_overrides下。紧凑表格:加宽列、降低角色的font_size,或插入 U+00AD。 - 智能体技能:海报/幻灯片页面外壳是一个固定高度的 grid,带有
{auto:true}的页眉/页脚和一个{fr:1}增长器(ex_poster_shell.json);用嵌套的{fr:1}行填充该增长器(ex_poster_growers.json),而不是自动高度的 stack。当页面剩余空间太小时,零内边距的垂直 stack 会按子节点拆分。 export-docx/export-pptx: 首轮重要的 Office 导出——锁定字体与字距、深色模式安全的主题颜色与文本框底衬、卡片折叠、换行/对齐启发式、超链接、表格行高与边框、为 LibreOffice 在正文中放置的页眉,以及相关的 DrawingML 修复。仍预期宿主会有轻微重排;导出不是源。
移除
- 智能体技能
looks/——移除了内置设计皮肤(quiet-light、vivid-blocks、night-wash)和verify_looks.py;样式改为依据设计规范编写
0.1.2 - 2026-08-30
新增
pip install k2f自带 CLI——k2f控制台脚本位于 PATH(pack、compile、verify、render、export-pdf、markdown);智能体不再需要cargo install k2f
变更
- 智能体技能安装指引:优先使用
pip install k2f;cargo install k2f仅在纯 Rust 环境中可选
0.1.1 - 2026-08-30
新增
- 智能体技能
looks/——三个示例设计皮肤(quiet-light、vivid-blocks、night-wash):完整的theme.json、构图指南以及共享扩展角色(display、kicker、caption、metric、shell)。当用户未指定风格时,智能体会依据这些示例重写包主题。 - 用于 manifest 运行块的
Editor.set_running_header/set_running_footer
变更
- 将六个智能体技能统一为一个
skills/core/k2f/技能,并附带工作流参考(writing、converting-markdown、exporting-pdf、publishing、embedding-viewer) - 智能体技能:将 generating 和 editing 合并为单一的 writing 工作流(JSON +
k2f unpack/pack_verify.py);可选的 PythonEditor移至references/writing/sdk.md - 公开创建路径为
Editor.open_template/open_dir/open_bytes加上insert_nodeJSON(在 0.2.2 中已被取代——请使用init_package.py/ Gallery / 解包)
移除
- 公开的
Composer/Document构建器(add_heading、add_body、add_warning、add_table)
0.1.0 - 2026-08-28
新增
- K2F 格式规范 v0.1(ZIP 包、语义树、主题、编译后的 lock)——已被 Spec 0.3 取代
- 参考引擎:布局、绘制、PDF 导出、包校验、Ed25519 签名
- CLI(
k2f)——pack、compile、verify、sign、render、export-pdf、markdown - Python SDK(
pip install k2f)——Document、Editor、Markdown 桥接 - JavaScript / WASM SDK(
npm i @openk2f/k2f)——Document、Editor、<k2f-viewer>Web 组件 - MCP stdio 服务器(
k2f_mcp),工具目录位于mcp_tools.json skills/下的六个智能体技能(后来统一;见 0.1.1)docs/下的公开文档以及 SECURITY.md 中的完整性策略