Releases: EthanBird/Sense
Release list
Sense v0.4.9 - Evolvable memory and zero-token Action Skills
Sense v0.4.9 — 可进化记忆与 0 Token Action Skills
- 发布日期:2026-08-09
- Tag:
v0.4.9 - Android:
versionCode 34,versionName 0.4.9 - 发布资产:
Sense-v0.4.9.apk、SHA256SUMS.txt - 最低系统:Android 10 / API 29
1. 双轨完整记录
本版本明确区分两类事实,并同时保留:
- Session Evidence Archive:完整请求快照、Provider 原始输入输出、公开与私有事件、
工具调用和结果、预览片段、最终回答、失败及取消终态继续写入单写追加式 Journal。 - Experience Event Ledger:只在稳定边界追加
sense.agent.experience.v1语义事件;
每条事件都携带source_record_ids,回指不可变原始证据。
经历事件是检索旁路,不承担替换原始 Session 的职责。召回配额会显式为
session_evidence 保留位置,再合并 experience_event 与 action_skill_history。
2. 事件驱动的跨会话召回
- Brain 在 Provider I/O 之前,从最新用户任务提取有界查询。
- 统一召回返回记录 ID、通道、证据链接、扫描记录数、扫描字节数及截断标记。
- 首轮提示词获得冻结的
sense_recall证据框;当前请求优先于历史证据。 memory_search工具使用同一数据面,并在结果中公开 coverage 信息。- 当前 Run 按
requestId + runGeneration排除,避免召回自身尚在写入的轨迹。 - 连接探针不注入历史证据。
3. 0 模型 Token Action Skill
输入法 Agent 前端新增紧凑的直接 Action 区,首个内置能力为 黄金现价:
- 直接请求
https://api.gold-api.com/price/XAU; - 不创建 Provider 或模型请求;
- 结果卡显示 XAUUSD 美元/盎司报价、来源时间与
0 Token; - 支持刷新、将报价交给 Agent 继续分析、写入当前外部编辑框;
- 完整 Connector 响应写入独立追加式 Action History,并参与后续跨会话召回;
- 请求有 HTTPS、状态码、超时和 128 KiB 响应上限。
brain-api 新增稳定的 Action Skill 描述、调用、结果和认证引用类型。认证型 API 使用
opaque credential handle;AndroidActionCredentialVault 以 Android Keystore 中的
不可导出 AES 密钥执行 AES-GCM 加解密,业务 Skill 只在一次调用租约中接触凭据。
4. 输入法前端交互
- 空闲态显示“黄金现价 · 直连 API · 0 Token”入口。
- 运行态提供独立停止入口,不影响正在后台运行的模型 Agent。
- 成功态提供刷新、分析、写入三项动作。
- “写入”继续复用当前
InputConnection的外部编辑器写入路径。 - “分析”把已取得的结构化行情作为新用户消息交给 Agent,不重复抓取行情。
5. 验证覆盖
AgentRunRecorderTest:语义旁路引用原始 Journal sequence,原始记录仍在原位置。JournalAgentMemorySearchSourceTest:以“海军蓝 / 简洁直接”种子数据覆盖原始 Session、
经历事件、证据链接与 coverage 的生产适配器链路。OpenAiRequestFactoryTest:原始 Session 与语义事件同时进入首轮跨会话提示词。DirectActionSkillRuntimeTest:固定 XAUUSD 响应的解析、金额格式、0 Token 标记与
错误标的拒绝。ActionMemoryInstrumentedTest:Action 原始结果跨 Store 实例召回;Keystore 凭据
save/lease/revoke 生命周期。- 正式发布脚本运行全模块 JVM/Android 单元测试、Lint、AndroidTest 装配、M0–M7、
release 构建、APK 元数据与签名证书校验。
6. 签名与连续升级
正式 APK 沿用 Sense v0.4.7 起的持久 PKCS12 发布证书。发布脚本固定校验证书 SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984
GitHub Release 同时提供 APK 与 SHA256SUMS.txt;脚本会重新下载远端资产并再次核对
Git commit、APK SHA-256、版本元数据和签名证书。
Sense v0.4.8 - Agent UX, memory, and candidate ranking
Sense v0.4.8 — Agent 交互、记忆与候选排序
版本
- Tag:
v0.4.8 - Android:
versionCode 33,versionName 0.4.8 - 发布资产:
Sense-v0.4.8.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Stable Release
- 项目许可:GPL-3.0-only
输入法前端 Agent
- Agent 入口移动到键盘工具栏正中间,不再占用工具箱项目;入口始终位于输入法前端。
- Agent 页面压缩阅读区与底部留白,内置输入框扩展为最多四行,长提示词可以直接查看与编辑。
- 左上角使用明确的收起图标;收起只切换前端投影,后台运行中的 Agent 继续由 Brain service 持有。
- Assistant 消息新增“写入当前输入框”操作,通过当前
InputConnection把结果显式提交到输入法面对的外部编辑器。 - 对话归档支持完整记录、历史会话切换与新会话创建,归档排序采用崩溃安全的稳定时间与标识组合。
记忆与 Skills
memory_search增加中日韩文本感知的 n-gram 查询、受限关键词采样和部分概念匹配,短中文偏好也能稳定召回。- 工具结果返回实际
result_count,空结果与真实命中在 Agent 工具循环中可直接区分。 - 补充包含“海军蓝”和“简洁直接”等测试数据的集成覆盖,验证写入、索引、搜索与结果投影的完整链路。
- Skills 与记忆调用继续保留 session、revision 和工具结果边界,历史记录与当前会话投影互不覆盖。
中文输入与个性化
- 中文模式下按回车提交英文原文时,与点击候选词走同一学习语义;自定义英文词频持久化并在重启后恢复。
- 1–2 个字母的短输入最多展示一个英文候选,3 个字母最多展示两个,降低短拼音被整页英文补全挤占的概率。
- 完整拼写的英文单词保留强证据并最多排在候选第二位;即使中文候选页密集,也为准确的完整单词保留入口。
- 英文限制在统一候选排序完成后执行,中文 exact、整句和个性化候选的相对顺序保持稳定。
架构与生命周期
- Agent UI 继续运行在
SenseInputMethodService.onCreateInputView()的统一根 View 中,与键盘同步出现并可独立收起输入框。 - Brain runtime 继续位于独立
:brain进程;前端只订阅会话投影,窗口重建和输入目标切换不会接管运行所有权。 - 运行浮条、Agent 页面与系统通知继续提供停止入口,终端与浏览器工具维持 session-scoped 状态。
验证与签名
- 发布门禁覆盖 Python 资产检查、JVM/Android 单元测试、AndroidTest APK 编译、Lint、M0–M7 性能基准、运行时边界与发布产物检查。
- APK 校验覆盖 ZIP 对齐、包名、版本、SDK、Manifest 权限与固定签名证书。
- 继续使用
Sense Release v1正式证书,可从此前同证书版本直接覆盖安装。
证书 SHA-256:76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984
Sense v0.4.7 - IME Agent, terminal, and browser
Sense v0.4.7 — Agent 工作台、终端与浏览器
Agent 入口崩溃热修(2026-08-04)
- 修复点击工具箱 Agent 后 IME 窗口退出:Compose 的 WindowRecomposer 会从实际 window root 查找 LifecycleOwner,现于子 ComposeView 挂载前补齐 Lifecycle、SavedState 与 ViewModel owner。
- owner 仅在窗口根缺失时安装,IME View detach/release 时清理,保持后台 Agent 运行所有权不受前端页面切换影响。
- 新增 IME window 宿主回归测试,覆盖 Agent 页首次 attach、measure、layout 与 draw 的完整入口路径。
输入法前端 Agent 修订(2026-08-04)
- Agent 对话页进入
SenseInputMethodService.onCreateInputView()返回的统一根 View;不再通过设置页或替换 IME 窗口打开。 - Reading 页面与 Sense 键盘由同一根容器切换;点击内嵌输入框后,Agent 页面和原生 Sense 键盘同时显示,输入框可单独收起。
- 移除 IME Service Context 对
WindowManager.currentWindowMetrics的依赖,并在创建 Compose 内容前安装稳定的 Lifecycle、SavedState 与 ViewModel ViewTree owner。 - Agent 前端状态与宿主编辑器重启事件分离;切换输入框、IME 隐藏/恢复和输入 View 重建会重新投影同一 Agent 页面。
- Brain Service 保留有界 run replay,IME 进程重建后可重新订阅;跨进程原子 durable-run 记录恢复用户消息与终局回答。
- 普通键盘态新增 Agent 运行浮条,支持返回任务和立即停止;运行通知继续提供停止入口。
- 发布 APK 继续使用
Sense Release v1正式证书签名。
版本
- Tag:
v0.4.7 - Android:
versionCode 32,versionName 0.4.7 - 发布资产:
Sense-v0.4.7.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Stable Release
- 项目许可:GPL-3.0-only
Agent 工作台
- 键盘工具箱新增 Agent 入口,并在当前输入法根 View 内打开完整对话页。
- 工作台提供 Agent、终端、浏览器三个页签;Agent 对话支持连续消息、流式预览、停止任务、开始新会话和 Token 用量显示。
- 对话记录以有界、原子文件保存在同一 Agent session 中;Activity 重建或离开界面不再自动终止正在执行的任务。
- 新增
ASSISTANT_MESSAGE结果模式,普通问答直接返回自然语言,不再要求模型把每次回答包装成编辑器 Patch。 - 输入法内的自然问答显示结果卡,可选择应用到编辑器、复制或关闭;编辑类 Skill 继续沿用 hash/CAS 与写后验证。
后台执行与生命周期
- 前端 Agent 位于
:ime,Brain service 位于独立:brain进程;前端只订阅投影,运行所有权由持久服务保存。 - 用户发起长任务后升级为带通知的前台服务,并使用有界 partial wake lock 保持工具循环和流式输出。
- 通知可返回 Agent Hub 或停止当前任务;任务完成后释放前台状态和 wake lock,并发布完成通知。
- 会话、工具调用和 UI 使用同一个稳定 session identity,保证终端工作区、浏览器标签和对话连续一致。
终端
- 新增模型工具
terminal_exec,并在输入法对话的工具坞与详情层展示终端状态和输出。 - 每个 Agent session 使用独立的应用私有工作区与
HOME;cwd只接受工作区相对路径并执行 canonical containment 检查。 - 命令通过 Android
/system/bin/sh以应用 UID 执行,支持独立 stdout/stderr、退出码、1–60 秒超时和超时终止。 - stdout/stderr 分别有 24 KiB 上限与截断标记,工具结果使用紧凑 JSON,避免长输出持续占用模型上下文。
浏览器
- 新增模型工具
browser_use,支持navigate、snapshot、click、type、back、forward与reload。 - Agent 使用 session-owned WebView:Cookie、历史和 DOM 状态持续保留;用户打开浏览器页签时接管的正是同一个 WebView。
- DOM snapshot 提供当前 URL、标题、正文摘要和可交互元素编号;模型可按编号点击、输入并提交表单。
- WebView 使用独立进程数据目录,开启 JavaScript 与 DOM Storage,关闭文件/内容访问并阻止 mixed content。
- 浏览器标签池、正文、元素数量、脚本等待和导航等待均采用明确上限。
Agent 协议与工具控制
terminal_exec与browser_use进入稳定工具 ID、模型 schema、严格参数解码、设置开关和 exact admission mask。- 工具调用携带稳定
sessionId,而requestId继续标识单次 run,两者职责分离。 - 模型猜测隐藏工具、提交格式错误参数或调用未启用工具时,Brain 将紧凑 typed error 作为 tool result 回送并继续当前对话,减少整轮修复重试带来的 Token 消耗。
- Agent 终局事件新增普通回答通道并完整穿过状态机、IPC codec、recorder、客户端和 UI;旧的编辑器 Patch 通道保持兼容。
验证与签名
- 新增终端路径隔离、会话编解码、浏览器/终端参数路由、工具 schema、设置迁移、执行器 session 传递和自然回答状态机测试。
- 发布门禁继续覆盖 Python 资产验证、全部 JVM/Android 单元测试、AndroidTest APK 编译、Lint、M0–M7 性能基准、运行时边界、APK 对齐、包元数据与签名。
- 继续使用
Sense Release v1固定签名,可从此前同签名版本直接覆盖安装。
证书 SHA-256:76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984
Sense v0.4.6 - Keyboard UX and T9 refinement
Sense v0.4.6 — 键盘交互与九键体验
版本
- Tag:
v0.4.6 - Android:
versionCode 31,versionName 0.4.6 - 发布资产:
Sense-v0.4.6.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Stable Release
- 项目许可:GPL-3.0-only
九键输入
- 左侧标点重构为一个连续、可惯性滚动的侧栏,内置 20 个常用符号;组成拼音时原位切换为最多 8 条 revision-bound 分词候选。
- 侧栏末尾提供“自定义设置”,直接进入键盘设置并编辑符号顺序;列表跨 app/IME 进程原子保存。
1–9键保留字母或“分词”主标签,并以小号数字提示上滑输出;普通点击继续进入 T9 拼音。- 九键数字键沿用统一 physical-owner Skill 绑定、长按方向选择与极光反馈,不额外引入手势分支。
- 全键字符上滑必须越过当前键帽上边界后才成立,键内短滑仍按普通点击处理。
键盘与候选界面
- 候选区与键盘使用同一主题底色和裁剪边界,修正候选文字基线,避免底部笔画被遮挡。
- 退格、回车与文字编辑方向图标使用更纤细的路径和统一线宽;编辑区文字取消不必要的粗体。
- 撤销/重做不再绘制红色浮层,成功与失败改用轻量触觉和无障碍反馈。
- 英文 Shift 使用三态循环:单次大写、持续大写锁定、小写;单次态只在字母真正被编辑器接受后消费。
高度与设置
- 键盘设置新增竖屏、横屏独立高度滑杆和实时 Canvas 预览,范围受统一几何策略约束。
- 输入方案、五笔策略、高度与九键侧栏符号按字段修改即保存,避免旧页面快照覆盖 IME 进程中的新值。
- Provider 与语音配置移除独立保存按钮;合法的选择变化及文本、密钥失焦会自动持久化,测试连接、清除密钥与权限操作保持独立。
- 高度和侧栏符号在下一次编辑器会话读取并投影到现有
SenseKeyboardSurface,无需创建第二套布局算法。
Emoji
- 新增手势与身体、爱心、旗帜分类,并补齐肤色变体、地区旗帜及常见组合序列。
- 分类栏支持横向连续拖动,更多分类不再压缩到同一屏宽;Emoji 内容网格继续使用纵向虚拟滚动。
性能与发布签名
- 触摸热路径继续使用冻结目标、primitive reducer 和有界滚动状态;九键侧栏、全键越界判定及 Emoji 分类滚动不进入解码线程。
- 本版本继续执行 M0–M7 本地性能门禁、Android Lint、单元测试、AndroidTest APK 编译、APK 对齐和签名校验。
- 继续使用
Sense Release v1固定签名,可从此前使用同一证书的版本直接覆盖安装。
证书 SHA-256:76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984
Sense v0.4.5.beta.9 - T9 Pinyin and Wubi 86
Sense v0.4.5.beta.9 — 中文九键与五笔 86
版本
- Tag:
v0.4.5.beta.9 - Android:
versionCode 30,versionName 0.4.5.beta.9 - 发布资产:
Sense-v0.4.5.beta.9.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Pre-release
- 项目许可:GPL-3.0-only
中文九键
- 新增生产可用的 1–9 九宫格布局,数字、字母 legend、删除键和原有 Skills 长按语义完整接入。
- 数字串直接进入拼音音节 trie/DAG,不展开指数级字母组合;
1可显式固定音节边界。 - 候选栏展示数字原文与自动分词,例如
486743697 · hun'shen'x's,Top1 为“浑身解数”。 - 中文专用解码跳过英文词表,并复用现有拼音上下文与个性化学习。
- 完整解码采用 query 去重、路径多样性 Top1 探针、胜出路径有界扩展和 cooperative supersession。
五笔 86
- 新增五笔 86 全键输入、精确候选、前缀补全、
z拼音反查和字根键帽。 - 提供关闭、四码唯一、Rime 风格三种自动上屏策略;第五形码按事务提交并重放。
- 使用独立五笔个性化模型与 SQLite 数据库,选择、快速删除、立即替换均反馈到内存热路径。
- 精确候选始终位于补全候选之前,个性化只改变同组次序。
可复现词库资产
- 固定
rime/rime-wubirevision152a0d3f3efe40cae216d1e3b338242446848d07。 - SWBX/1 资产包含 99,054 个精确码、136,239 个精确候选、15,259 个补全前缀和 70,386 个反查字符。
- 构建器、源文件、manifest、统计、LGPL-3.0 全文和归属说明均进入源码与 APK 检查链。
- 本地门禁从固定源逐字节重建资产,并再次核验最终签名 APK 内的资产与许可副本。
架构与稳定性
- 新增独立
ime-config模块,使用AtomicFile + sidecar file lock跨 app/IME 进程保存方案设置。 - 方案 epoch、composition revision 和 decoder generation 共同阻断陈旧异步候选。
- 语言模式、QWERTY/T9 几何与五笔 legend 通过一次原子安装切换,切换前取消在途 pointer,只重建一次最终 scene,修复闪烁与主题混色。
- 键帽视觉 legend 与上滑输出拆分,五笔字根不会改变既有手势输出。
性能门禁
- T9 完整混合解码:p50 2.002 ms、p95 5.395 ms、p99 7.093 ms。
486743697完整解码 p95 4.827 ms;显式边界64'426p95 3.903 ms;32 位边界串
p95 8.212 ms;96 位极限串 p95 5.508 ms。- Wubi 热查询 p95 6.771 μs;SWBX/1 估算保留内存 7,089,539 bytes。
- T9 索引构建 91.39 ms;Wubi 冷加载、校验与原始索引构建 64.86 ms,均位于后台加载 lane。
- 签名 APK 为 26,893,702 bytes;相对 beta.8 增加 3,172,601 bytes(13.37%),主要来自压缩后的五笔资产与许可副本。
- M7 对完整 T9 解码的聚合及每个 case 分别设置 p95 20 ms 硬门槛,并继续执行 M0–M6
既有性能门禁。
发布签名
本版本继续使用 Sense Release v1 固定签名,可从此前采用同一签名的版本直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
Sense v0.4.5.beta.8 - Streaming ASR, undo/redo, and Skills UX
Sense v0.4.5.beta.8 — Streaming ASR, undo/redo, and Skills UX
版本
- Tag:
v0.4.5.beta.8 - Android:
versionCode 29,versionName 0.4.5.beta.8 - 发布资产:
Sense-v0.4.5.beta.8.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Pre-release
- 项目许可:GPL-3.0-only
英文符号映射修复
- 英文模式下字符键的滑动符号统一使用 ASCII 符号,不再混入中文全角标点。
M键恢复为/,并补齐英文字符滑动映射的回归覆盖。
可选流式语音
- 搜狗在线语音继续作为免配置 Provider,选中后可直接使用。
- 新增“流式优化(边说边转)”开关,说话过程中持续提交中间文本。
- 设置页明确标注:启用后反馈更快,但准确率可能降低;关闭时继续使用完整录音识别路径。
- 流式链路支持增量 PCM16 采集、20 ms Opus 分帧、中间结果覆盖、最终结果提交、取消与超时。
撤销与重做手势
- 长按
Z后下滑执行撤销。 - 长按
Y后下滑执行重做。 - 优先调用编辑器上下文动作,并保留按键事件回退;这两个方向槽位作为键盘内置手势保留。
Skills 绑定器
- Skills 配置页绘制完整可点击键盘,点击目标键位即可选择绑定方向。
- 当前绑定、选中键位与保留手势在键盘上直接呈现,减少列表与键位之间的来回查找。
- 原有绑定仍可查看和解除,升级不会覆盖用户数据。
Skills 创建体验
- 新建入口改为模板优先:可从润色、翻译、总结、回复等常见意图快速开始。
- 创建表单按“用途 → 指令 → 绑定”组织,并提供实时摘要、完成进度与更明确的下一步动作。
- 历史版本默认折叠,让首屏聚焦创建和绑定;高级编辑能力继续保留。
发布签名
本版本继续使用 Sense Release v1 固定签名,可从此前采用同一签名的版本直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
Sense v0.4.5.beta.7 - Built-in Sogou ASR and Windows TSF preview
Sense v0.4.5.beta.7 — Built-in Sogou ASR and Windows TSF preview
版本
- Tag:
v0.4.5.beta.7 - Android:
versionCode 28,versionName 0.4.5.beta.7 - 发布资产:
Sense-v0.4.5.beta.7.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Pre-release
- 项目许可:GPL-3.0-only
搜狗在线语音:选择后直接使用
语音 Provider 新增“搜狗在线语音(免配置)”。用户只需在设置页选择并保存该选项,
无需填写 API Key、endpoint 或模型,即可从键盘语音入口执行在线识别。
适配器完整内置 SRSS 协议:
- AES-256-CBC/PKCS5Padding 加密配置;
- RSA-OAEP-SHA256 封装每次请求的随机 AES Key;
- 16 kHz mono PCM16 通过 Concentus 编码为 Opus VOIP;
- 每帧固定 20 ms,即 320 samples / 640 PCM bytes;
- 每条 WebSocket binary message 使用 2-byte big-endian 长度头;
- 支持中间结果覆盖、最终结果单次提交、取消、总超时和响应大小上限;
- PCM、WAV 与 Opus 临时缓冲在终态清零,不写入文件。
本轮还修正了输入归档示例把 640-byte PCM 块误传为 frame_size=640 的单位问题。
Opus 的 frame size 是每声道采样数,正确值为 320。修正后服务端报告音频时长
7.600s、置信度 0.86;Python 复现与 Sense Kotlin live probe 均精确识别:
你好,我是银狼,来自星穹铁道,这是搜狗输入法语音识别接口的测试。
完整协议、归档摘要与探针命令见
docs/research/sogou-asr-provider-integration-2026-08-01.md。
Provider 与设置边界
- 搜狗预设标记为免凭据且运行时可执行;
- endpoint/model 固定为内置协议数据,不出现在可编辑高级连接设置中;
- 原有系统识别、OpenAI-compatible、Deepgram 与 DashScope 配置继续保留;
- IME 的凭据启动检查改为读取每个 preset 的真实 credential requirement,免 Key
Provider 不再被云端模式的通用 Key 检查拦截。
Windows 原生工程预览
仓库新增 windows/ 原生端工程预览:C++20 TSF 输入法 DLL、SPLX v3 本地拼音
解码器、UILess 候选接口、Arctic 候选条、x64/x86 安装脚本、Windows 设置中心和
隔离在输入热路径之外的 Agent Bridge v1。该目录不进入 Android APK。
依赖与许可
- OkHttp
5.3.0:SRSS WebSocket transport; - Concentus
1.0.2:纯 Java Opus 编码; - OkHttp Apache-2.0 与 Concentus BSD-3-Clause 文本已加入根
licenses/、APK assets
和 About 页面; - 生产词库与 Sense 主体继续使用 GPL-3.0-only。
验证
:ai-runtime:testDebugUnitTest:app:testDebugUnitTest:ime-service:testDebugUnitTest:app:lintDebug:app:assembleDebug- 搜狗 Kotlin live probe:
tests=1, skipped=0, failures=0, errors=0 - 正式发布继续由
tools/local_release.ps1 -Publish在同一 release HEAD 上执行完整
Python、JVM、Android、Lint、M0–M6、X-02 source/artifact、APK 元数据、权限、
16K alignment 与固定签名门禁。
固定发布签名
本版本继续使用 Sense Release v1 固定签名,可从 v0.4.5.beta.1 至
v0.4.5.beta.6 直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
Sense v0.4.5.beta.6 - Mixed pinyin and Chinese-first ranking
Sense v0.4.5.beta.6 — Mixed pinyin and Chinese-first ranking
版本
- Tag:
v0.4.5.beta.6 - Android:
versionCode 27,versionName 0.4.5.beta.6 - 发布资产:
Sense-v0.4.5.beta.6.apk - 平台:Android 10+(
minSdk 29,targetSdk 36) - 发布性质:GitHub Pre-release
- 项目许可:GPL-3.0-only
混拼分词:从固定规则升级为有界音节图
连续拼音输入现在进入统一的有界音节图,同时探索:
- 完整拼音音节;
- 单字母声母缩写;
zh、ch、sh复合声母;- 尚未输入完整的尾部音节;
- 由生产词典前缀约束并即时剪枝的后续路径。
因此混拼召回不依赖单个短语特判。hunshenxs 会生成与候选对齐的
hun'shen'x's 路径,并把“浑身解数”稳定排到 Top-1;dagn 也能通过同一套
图搜索与纠错评分召回“当”。音节图使用单一 volatile 快照缓存,读取线程只观察
完整发布的 immutable lattice,不会把不同查询、上下文或候选上限的结果混在一起。
中文优先:单字母输入不再被英文补全淹没
中文输入模式下,单字母候选由真实单汉字拼音证据驱动。宽泛英文前缀只保留少量
入口并进入统一分数域,完整英文 exact 仍可凭强证据自然前移。当前 w 回放的前
16 项包含 14 个中文候选和 2 个英文候选,第一个英文候选位于第 8 位。
英文 exact、英文词形、全拼、简拼、混拼、动态整句、用户词与拼写纠错继续由同一个
CandidateRanker 排序,不再通过固定槽位硬插英文或中文结果。
候选栏:展示分词与编辑器原始 composition 解耦
- 请求 pending 阶段始终展示原始输入,避免旧候选分词闪回;
- 中文 Top-1 就绪后,候选栏展示该候选实际使用的隐式音节边界;
host、world等英文输入保持原样;fangan对应“方案”时展示fang'an;- 编辑器 composing text 与内部
remainingPinyin始终保存用户输入的原始字符; - stale response、decoder 热切换和 segmenter 代际继续使用同一原子校验边界。
性能工程
本轮同时优化了解码热路径:
- ASCII 小写输入走零分配快速归一化路径;
- 拼音前缀排序改用 primitive 循环,移除比较阶段的临时对象;
- 音节图只为同一 canonical input 构建一次,并通过 immutable cache 复用;
- 路径数量、beam、前缀探测和输出候选数保持显式上限。
最新本地门禁结果:
| 门禁 | 结果 |
|---|---|
| M3 Top-1 | 99/126(78.57%) |
| M3 Top-3 | 107/126(84.92%) |
| M3 Top-10 | 115/126(91.27%) |
| M3 Coverage / MRR | 124/126(98.41%) / 0.8296 |
| M3 hybrid Top-1 | 17/17 |
| M4 initials p95 | 0.019 ms |
| M4 progressive limit 16 / 255 p95 | 0.224 ms / 0.578 ms |
| M4 composition p95 | 2.069 ms |
| M5 English lookup p95 | 3.657 µs |
| M5 mixed progressive / hybrid p95 | 0.758 ms / 0.157 ms |
| M5 动态混拼逐查询最大 p95 | 2.406 ms(门禁 5 ms) |
正式资产由 tools/local_release.ps1 -Publish 在同一 release HEAD 上完成 Python
测试、JVM/Android 单元测试、Lint、AndroidTest APK、debug/benchmark/release
构建、M0–M6、X-02 source/artifact、APK 元数据与签名校验;上传后再从 GitHub
Release 下载 APK 和校验和进行复核。
固定发布签名
本版本继续使用 Sense Release v1 固定签名,可从
v0.4.5.beta.1、v0.4.5.beta.2、v0.4.5.beta.3、v0.4.5.beta.4 和
v0.4.5.beta.5 直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
- 仓库仅保存公开证书与指纹;PKCS12 私钥材料保存在仓库外
Sense v0.4.5.beta.5 - Decoder quality and Frost lexicon
Sense v0.4.5.beta.5 — Decoder quality and Frost lexicon
版本
- Tag:
v0.4.5.beta.5 - Android:
versionCode 26,versionName 0.4.5.beta.5 - 发布资产:
Sense-v0.4.5.beta.5.apk - 平台:Android 10+,
minSdk 29,targetSdk 36 - 发布性质:GitHub Pre-release
- 项目许可:GPL-3.0-only
解码器:从独立规则堆叠到统一候选图
本轮把全拼、整句组合、简拼、混拼、前缀、英文和纠错候选送入同一排序域,而不是
依赖固定候选槽位或某一来源的局部分数。新的 CandidateRanker 负责来源先验、稳定
去重和全局截断。最终来源先验为:
| 来源 | 先验 |
|---|---|
| canonical exact / canonical composition | +8.00 / +6.00 |
| exact / composition / user | +1.20 / +0.55 / +0.45 |
| hybrid / initials | +0.55 / +0.10 |
| correction:无 canonical / 有 exact / 有 composition | -0.25 / -13.00 / -8.00 |
| prefix | -0.75 |
| English exact / prefix | +0.40 / -0.90 |
保护项仍是可比较的分数特征,而非预留候选位置。词典基础分、prefix 完成代价、简拼
长度证据和上下文 bigram 先形成候选自身分数,再叠加来源先验。
拼音纠错改用有界加权 spelling graph。它在音节清单上同时表达键盘邻键替换、相邻
字符换位、重复键、插入和删除,并把编辑代价一路带入候选排序。合法全拼不再因 exact
命中而提前结束,用户仍可在后续候选中看到合理纠错;xi'an 这类显式音节边界保持
强约束,避免退化成单音节 xian。
生产 CorrectionSearchBudget 使用 compact canonical 分档:无 canonical 时始终使用
48 条 spelling paths 和 4 个 composed probes;已有 exact/规范组合且
outputLimit < 64 时使用 24/1,outputLimit >= 64 时保持 48/3。exact candidates
固定为 48/path、composed candidates 为 24/path、每段 8 项和 beam 32。该预算
不再按词库或 fixture 大小切换,窄预算测试通过显式注入运行同一算法。规范化字母输入
上限覆盖完整可逆 composition(已选片段与待解码尾部合计),为 96。
图搜索会按 cost tier 和首次编辑位置保留路径多样性,避免长句尾部错误被前部歧义
耗尽预算;组合 probe 还优先保留至多 2 条单字母尾部增删,并尝试覆盖距离最靠后编辑
位置不超过 1 的路径。编辑偏移定位真实替换/增删字符,而不是音节边起点;生产 48 路
回归固定 nihaoshijiee → 你好世界。syllableEnds 贯穿 corrected lattice,词格边和候选 initials
必须匹配原路径音节数。撇号会停用整段 exact、hybrid、initials 和 prefix,并要求
组合与纠错边都遵守声明的音节接缝。
动态整句路径扩大了每个位置的音节边和 beam 预算,并跳过除 a/e/o 外的单字母伪
音节。词边界代价、词典权重和字符上下文在同一 lattice 中累计,长句组合分数按片段
归一化,减少多词句子因固定片段罚分而系统性沉底。initials 至少 2 个字母;hybrid
至少 3 个字母并最多扫描 128 条 record、每条读取 16 项;动态 prefix 的通用词典扫描
最多 96 条 record、每条读取 2 项。
中英文混输也移除固定“四个中文后插英文”的策略。英文 exact、复数形式与词法补全
保留各自语义,但最终位置由统一分数决定;强中文候选不会被硬插槽打断,高置信英文
也可自然前移。单首字母中文输入的单汉字前缀另有有界双语证据校准,使 w → 我
一类明确中文信号不被宽泛英文补全淹没。
候选栏:整句优先、渐进路径可见、异步状态可判定
渐进解码快照先发布整句候选,再按已消费拼音路径选取少量代表性前缀,随后补齐其余
整句和前缀候选。ProgressivePrefixProbeDecoder 让前缀选择保留 canonical、组合与
补全能力,同时跳过每个前缀重复的 spelling-correction graph;整句候选仍走完整解码
并保留纠错。单音节歧义查询会限制早期前缀数量,降低局部词淹没目标整词的概率。
新请求处于 pending 时,候选栏保留上一帧几何和相同主题文本颜色,避免列表跳动与
逐键调色频闪;readiness 只作为交互屏障,点击、翻页和拖动命中全部暂停。readiness
变化或候选内容批次替换前还会主动取消候选相关的已按下指针,封住“旧批次按下、
新批次抬起”的 source-index 竞态。新批次完成后再原子恢复交互;旧 revision、同
revision 不同 composition 以及拖动中的陈旧候选都不会被提交。
Han 过滤、字符计数与学习全部按 Unicode code point 和 UnicodeScript.HAN 执行,
Frost 中补充平面字可进入渐进候选并作为单字学习。英文 type/backspace 同样采用
两阶段宿主边界:只有 setComposingText 成功且同步回调未改变 session、revision、
editor 或 InputConnection 身份时,才推进本地 composition 与候选。
个性化:强度、衰减与负反馈
用户词学习从单一累计次数升级为带证据类型的模型:
- 默认首选提交、显式选择和渐进选择使用不同正反馈强度,并记录原候选位次;
- 频次与最近使用奖励均有上界和时间衰减,长期历史不会永久压过明显更好的系统词;
- 快速删除与紧接着的替换会形成负反馈,
[-4.5, +4.5]signed adjustment 可直接
降低同文本系统候选的分数,而不只是移除一条重复用户候选; - 渐进选词先随 composition 暂存,完整上屏成功后才学习;在 composition 内回退会
丢弃对应暂存事件; - 用户候选先转换到统一分数域,再与系统 exact、组合、英文和纠错候选共同排序;
- 内存词典采用全局 10,000 条、每个完整拼音 64 条预算;每条记录默认最多 16 个 alias,
每个 initials/alias 非 exact 查询桶最多索引 128 条记录,lookup 使用有界 top-K heap;
非 exact 桶裁剪仅移除索引映射,完整拼音 exact 与负反馈记录继续保留,而记录预算
产生的淘汰仍同步为持久化删除; - 持久化数据库升级到 SQLite v3,同时保留旧数据迁移路径和内存热路径;初始化先完成
open/migration/read 再转交 writer,任一构建阶段异常都会关闭当前资源 owner。
启动路径:Frost 后台装载与原子热切换
IME 创建阶段先装配轻量 FakeDecoder、fallback 音节表、空英文词表和内存用户词典;
35 MB Frost、字符 bigram、英文词表和 SQLite 迁移由专用单线程后台装载,不占用
InputMethodService.onCreate 主线程。完整 AdaptivePinyinDecoder 构建完成后再在
主线程原子热切换,候选工作线程的后续请求自然读取新实例。
若切换时仍有中文 composition,服务会强制重新进入 pending 并以生产解码器刷新;
英文 composition 也会重建到正式词表。生产实例就绪前暂停个性化写入,避免 bootstrap
结果进入长期学习;资产读取异常会记录原因并保留对应本地 fallback。
Rime Frost 生产词库
项目许可切换为 GPL-3.0-only,生产中文词库切换到固定 commit 的
Rime Frost 首选源格式。仓库保存实际参与
构建的 8105、base、ext、others 源表,并在
ime-service/src/main/lexicon/sources.json 固定 revision、SHA-256、许可、权重校准
和索引策略。
源表先转换为带来源归属的 canonical IR,再确定性生成 SPLX v3、音节表、bigram 和
统计文件。当前生产产物包含 524,851 个 exact key、610,298 个 exact candidate 和
608,314 个唯一 exact 文本;pinyin_lexicon.bin 为 35,069,585 bytes。低频长尾保留
完整拼音召回,高频记录才扩展统计前缀、简拼与 hybrid 索引,以控制 APK 和运行时索引
体积。
早期为 M4/M5 排序构造的十亿级权重与 Emoji fixture 已移出生产 overlay,仅保存在
ime-service/src/test/fixtures。离线门禁从 vendored 首选源重新构建所有词库产物并
逐字节比较,不再把已有二进制当作自身来源。完整决策和重建契约见
ADR 0022。完整 GPL v3 正文位于
根目录 LICENSE,Rime Frost 与 ISC 英文词表的来源、固定哈希和
随包副本位置见 NOTICE。
质量回放与性能门禁
M3 质量回放扩充为 120 条版本化用例,覆盖全拼、长句、姓名、口语、技术词、单处
拼写错误、简拼和混拼,并按 head/mid/tail 词频桶拆分。报告同时给出
Top-1/3/10、MRR、Coverage、模式/词频分桶以及候选上限 10/64/255 下的
p50/p95/p99;纠错路径单独计时,避免慢路径被普通 exact 查询平均掉。
生产上限 255 的 contextual 结果为 Top-1 92/120(76.67%)、Top-3
100/120(83.33%)、Top-10 109/120(90.83%)、Coverage
118/120(98.33%)、MRR 0.8140。对应门禁为 Top-1 70%、Top-10 85%、
Coverage 93%、MRR 0.75;hybrid 还要求 Top-1 至少 10/11,并固定
rengzn → 人工智能 为 Top-1 sentinel。
Host contextual 延迟中,非 typo、limit 255 为 p95 12.858 ms、p99 15.596 ms;
typo、limit 255 为 p95 11.417 ms、p99 11.454 ms。最新 M4 报告记录 initials、
渐进 limit 16、渐进 limit 255 与组合 p95 分别为 0.037/0.402/0.839/2.578 ms;
生产上限的前缀候选数为 51。M5 报告记录英文词典 p95 5.802 µs、中英混合渐进解码
p95 0.623 ms、hybrid 解码 p95 0.497 ms,分别低于 0.5/5/5 ms 预算。
渐进热路径通过预排序解码器契约跳过重复 CandidateRanker、空个性化索引快速返回,
并把候选前缀的 whole/decode rank 预计算到内部 wrapper;排序比较阶段不再创建
substring、Pair 或执行 Map 查询。M4 采用 20 个 batch 的 nearest-rank p95,并保持
与原门禁相同的总 lookup 数,避免 7 个 batch 时 p95 等同单次最大值。
正式发布由 tools/local_release.ps1 -Publish 在同一 release HEAD 上执行 Python
源资产测试、JVM/Android unit test、Lint、AndroidTest APK assembly、debug/benchmark
构建、M0–M6 benchmark、X-02 source/artifact gate、release APK 元数据与签名验证,
随后上传并从 GitHub Release 下载资产复核。
固定发布签名
本版本继续沿用 Sense Release v1 固定签名,可从 v0.4.5.beta.1 至
v0.4.5.beta.4 直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
- 仓库仅保存公开证书和指纹;固定 PKCS12 私钥材料保存在仓库外
Sense v0.4.5.beta.4 - Skill long-press reliability hotfix
Sense v0.4.5.beta.4 预发布说明
版本
- Tag:
v0.4.5.beta.4 - Android:
versionCode 25,versionName 0.4.5.beta.4 - 发布资产:
Sense-v0.4.5.beta.4.apk - 平台:Android 10+,
minSdk 29,targetSdk 36 - 发布性质:GitHub Pre-release
本轮目标:恢复键盘刚显示时的 Skill 长按可靠性
极光、方向选择器和激活状态渲染链在 v0.4.5.beta.3 中仍然完整,但 IME 在
onStartInputView、onWindowShown 和 FileObserver catch-up 阶段可能连续发布同一份
Skill catalog。此前 KeyboardGestureCoordinator.updateKeyboardSkills(...) 不区分内容
是否变化,每次发布都会撤销当前手势。相同 catalog 若在按下后的
380 ms + 16 ms 激活窗口内送达,已开始的长按就会被取消并退回普通字符输入。
本版本完成以下修复:
- 对有界、冲突解析后的键盘 Skill 投影进行内容等价判断;
- 绑定与 active Skill 均未变化时直接保留正在等待或已经显示的长按会话;
- 只有键位、方向、Skill、显示名称或 active 状态真实变化时才取消旧手势;
- 等价刷新不再触发无意义的重绘、无障碍播报和手势定时器重建;
- Aurora 独立子层、方向 picker、普通字符 flick、Space AI 和 Delete repeat 行为保持不变。
Skills 设置页 revision Spinner 性能修复
真机诊断同时定位到一个独立的设置页事件循环:renderHistory(...) 每次发布状态都会
重新创建 revision Spinner adapter 并再次设置相同选项;异步 onItemSelected 随后又
选择同一 revision。此前 controller 会为这个无变化选择递增 generation、发布状态并
再次 render,于是静止页面也持续产生布局、绘制和无障碍事件,还可能让正在进行的历史
revision 读取失效。
本版本在 View 和 controller 两层收口:
- revision 标签未变化时复用现有 adapter;
- 目标 revision 已经选中时不再重复调用
setSelection(...); - controller 收到同一 revision 选择时保持幂等,不发布新状态、不递增 generation;
READING_REVISION阶段的重复选择不会取消或取代正在执行的历史读取。
这些判断只发生在设置页状态发布边界,不向键盘输入热路径增加比较、分配或 I/O。
绑定仍属于用户持久配置。覆盖升级不会擅自补回曾经解除的槽位;某个键没有绑定时,
长按该键继续按普通输入处理,可在“设置 → Skills”中重新选择 Skill、键位和方向。
回归验证
新增并执行以下回归:
- JVM 测试验证不同输入顺序、不同对象实例但解析结果相同的绑定集合保持等价;
- JVM 测试验证 Skill 或标签真实变化时投影仍被识别为不同;
- Android 设备测试在真实
SenseKeyboardView上执行
DOWN → 180 ms 时重复发布等价投影 → 超过 396 ms,要求方向 picker 仍按时出现; - JVM 设置页测试验证 READY 阶段重复选择不发布新状态,以及
READING_REVISION
阶段重复选择不会取消在途读取; - Android 16 / API 36、1080×2400 的 Xiaomi 15 Ultra 上检查六个出厂建议键位:
设备当前持久化目录中的A/R/C/T/F已绑定且均能完成长按、方向高亮和极光激活;
S + UP → smart_edit槽位此前已被解除,按持久化规则未被覆盖升级擅自补回。
需要恢复该默认操作时,在“设置 → Skills”中选择 smart_edit,将按键设为 S、方向
设为 UP 后保存即可;这一操作只补回目标槽位,不改动其他 Skill、revision 或绑定。
正式发布由 tools/local_release.ps1 -Publish 在同一 release HEAD 上执行完整本地
Python、JVM/Android unit test、Lint、AndroidTest APK assembly、debug/benchmark
构建、M0–M6 benchmark、X-02 source/artifact gate、release APK 元数据与签名验证,
随后上传并从 GitHub Release 下载资产复核。
固定发布签名
本版本继续沿用 Sense Release v1 固定签名,可从 v0.4.5.beta.1、
v0.4.5.beta.2、v0.4.5.beta.3 直接覆盖升级。
- 证书:
sense-release-v1-cert.pem - SHA-256:
76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984 - 算法:RSA-4096 / SHA256withRSA
- 仓库仅保存公开证书和指纹;固定 PKCS12 私钥材料保存在仓库外