Skip to content

PI 0.1.6(pi 1.3.0)· 富渲染

Latest

Choose a tag to compare

@heikeyangle-code heikeyangle-code released this 05 Nov 15:40

引擎:@earendil-works/pi-coding-agent 1.3.0(与上一包相同)。

从 v0.1.5 到这里共 99 笔提交。这一版是一个大功能:富渲染。代码块不再只是等宽文字——Mermaid、公式、JSON/XML/YAML 树、CSV、堆栈、HTML、SVG、动图都能画出来。


富渲染

聊天里的围栏代码块按内容分派到对应的渲染器,源码随时可切回来看。

Mermaid 图表。 在离屏 WebView 里跑 mermaid 12.2.0,输出 SVG 经清洗后由 AndroidSVG 画成矢量图,可 1×–8× 缩放。共享一个宿主、串行有界队列、同 cacheKey 合并请求、LRU 缓存、超时后重建,渲染进程被杀也不带崩 App。旧版的 ASCII 降级路径保留为运行时回退。

数学公式。 MathJax 真排版,显示式与行内式都走它。渲染结果 LRU 缓存、状态可保存、占位固定高度——不会因为公式落笔而跳版。

JSON / XML / YAML 树。 后台解析并缓存,整行点击展开,缩进参考线,子节点分页,深层缩进封顶保证深嵌套仍有内容宽度。展开状态可保存,不随流式重置。

CSV / TSV 表格。 RFC 4180 解析(引号、字段内换行、CRLF 全认),表头冻结、横滑、数值列右对齐、隔行淡底、单元格可复制。

堆栈跟踪。 识别常见语言格式,函数名可换行,库帧调淡,消息可展开,分页。

安全 HTML 块。 jsoup 解析 + 白名单重建:危险标签整棵子树丢弃、URL 协议校验、三层上限。流式、拒绝或超限时原样回退源码。<details> 状态可保存,<hr> 变淡,引用去掉合成斜体。

SVG。 独立围栏、HTML 里夹的 <svg>、以及裸 SVG 链接都交给 SVG 渲染器;动画 SVG(SMIL / CSS)可播放。

脚注与链接卡片。 脚注保留未引用的定义;链接渲染成卡片,长按复制,流式末段不画卡片。

围栏别名与内容嗅探。 mmd / latex / geojson / rss 等别名认了;没标语言的块按内容猜 svg / xml / mermaid / json。

公共卡片语言

所有富内容共用一套卡片:胶囊标题 + 复制图标 + 右上角 ⋮ 菜单,统一的卡片头、分隔线、折叠条、状态位。工具栏不再摊在正文里,低频动作收进 ⋮。树与 CSV 的「源码 ↔ 视图」切换也并入卡片头。

动图与媒体

  • URL 动图(GIF / WebP / APNG)与动画 SVG 可播放,随生命周期暂停,限制并发
  • 图片查看器支持动图播放与 SVG 打开
  • 音频、视频链接渲染成播放卡片
  • 远程图片带常规 UA 与 Accept,手动跟跳转(含 http→https),认 SVG 与 AVIF 并栅格化
  • 图片加载失败时用共用卡片占位(破图图标 + alt + 缩短来源,点按复制地址),Markdown 与 HTML 一致

流式光标

回复生成时 ▍ 光标接在 Markdown 末尾,紧跟最后一个字,不占布局宽度。

排版重做

舒适档重做为母版 16/27,紧凑 15/25、宽松 17/28 按同一组比例推出;标题行高固定按比例走,不再随行距档时变时不变。

  • 用户气泡右对齐、贴内容宽度(非经典档)——单行短句不再撑满整行
  • 标题贴近正文,代码块上下对称,表格圆角与内边距统一
  • 代码块边线 100% → 28% 并铺 6% 同色淡底;分割线 100% → 35%;行内代码加 14% 淡底;h1 去掉下划线(金色 + 下划线像链接)
  • 思考块与引用去掉伪斜体(中文斜体是假斜体)
  • 经典档全部保持原样

阅读字体瘦身

从官方 SourceHanSerifCN 可变字体(25 MB,APK 内约 15 MB)裁出 wght 450 / 600 两个静态 TTF,裁到 GB2312 + 常用符号(约 7700 字形),每个 3.0 MB,合计 6.1 MB。

  • 正文 400 → 450:深色背景下宋体细笔画在 16sp 偏虚,450 更接近原来系统字体的密度
  • 粗体落在真实 600
  • 字体内部名改为 Pi Reading Serif(OFL 要求修改版不得保留 Reserved Font Name),版权与许可声明原样保留
  • 生成脚本入库 tools/build-prose-font.py,字体加入 noCompress 以便平台 mmap,只有实际绘制到的字形页驻留内存

工作区认领

点开别的工作区的会话时,App 认领那个工作区,不重启引擎——以前这一下会打断正在跑的那一轮。

编辑安全

工作区里的文件编辑补上了一整套保护:

  • 只读门槛、读原文、保留换行
  • 冲突检测:文件被别人改过就不覆盖
  • 原子写
  • 草稿恢复
  • 删除不跟随符号链接

模型页

  • 自定义厂商可以建任意多个,按名字生成不冲突的 id
  • 已配置的厂商可以再换
  • 文件里已有的自建厂商也出现在选择列表里
  • 订阅账号挪到厂商卡后面,并显示已登录数
  • 对话页选模型按厂商分段
  • 导入表单里自建厂商的名称框与 Base URL 提到 Key 前面

构建信息

引擎 @earendil-works/pi-coding-agent 1.3.0(未变)
变体 sideload28(targetSdk 28,默认选这个)
架构 arm64
安装包 151,709,389 字节(144.7 MiB)
sha256 3fb62942643a767393151f1c1dd7380b0308fb10cdeb9ea7a356512196a269ee
来源 CI run #608,commit 506d2b70

同一密钥签名,可以覆盖安装,升级不丢数据。
这一版新增了 Mermaid / MathJax / AndroidSVG / jsoup / SnakeYAML 五个依赖,许可证清单已同步。