Skip to content

Releases: EthanBird/Sense

Sense v0.4.9 - Evolvable memory and zero-token Action Skills

Choose a tag to compare

@EthanBird EthanBird released this 08 Aug 19:19

Sense v0.4.9 — 可进化记忆与 0 Token Action Skills

  • 发布日期:2026-08-09
  • Tag:v0.4.9
  • Android:versionCode 34versionName 0.4.9
  • 发布资产:Sense-v0.4.9.apkSHA256SUMS.txt
  • 最低系统:Android 10 / API 29

1. 双轨完整记录

本版本明确区分两类事实,并同时保留:

  1. Session Evidence Archive:完整请求快照、Provider 原始输入输出、公开与私有事件、
    工具调用和结果、预览片段、最终回答、失败及取消终态继续写入单写追加式 Journal。
  2. Experience Event Ledger:只在稳定边界追加 sense.agent.experience.v1 语义事件;
    每条事件都携带 source_record_ids,回指不可变原始证据。

经历事件是检索旁路,不承担替换原始 Session 的职责。召回配额会显式为
session_evidence 保留位置,再合并 experience_eventaction_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

Choose a tag to compare

@EthanBird EthanBird released this 06 Aug 16:22

Sense v0.4.8 — Agent 交互、记忆与候选排序

版本

  • Tag:v0.4.8
  • Android:versionCode 33versionName 0.4.8
  • 发布资产:Sense-v0.4.8.apk
  • 平台:Android 10+(minSdk 29targetSdk 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

Choose a tag to compare

@EthanBird EthanBird released this 04 Aug 01:55

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 32versionName 0.4.7
  • 发布资产:Sense-v0.4.7.apk
  • 平台:Android 10+(minSdk 29targetSdk 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 使用独立的应用私有工作区与 HOMEcwd 只接受工作区相对路径并执行 canonical containment 检查。
  • 命令通过 Android /system/bin/sh 以应用 UID 执行,支持独立 stdout/stderr、退出码、1–60 秒超时和超时终止。
  • stdout/stderr 分别有 24 KiB 上限与截断标记,工具结果使用紧凑 JSON,避免长输出持续占用模型上下文。

浏览器

  • 新增模型工具 browser_use,支持 navigatesnapshotclicktypebackforwardreload
  • Agent 使用 session-owned WebView:Cookie、历史和 DOM 状态持续保留;用户打开浏览器页签时接管的正是同一个 WebView。
  • DOM snapshot 提供当前 URL、标题、正文摘要和可交互元素编号;模型可按编号点击、输入并提交表单。
  • WebView 使用独立进程数据目录,开启 JavaScript 与 DOM Storage,关闭文件/内容访问并阻止 mixed content。
  • 浏览器标签池、正文、元素数量、脚本等待和导航等待均采用明确上限。

Agent 协议与工具控制

  • terminal_execbrowser_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

Choose a tag to compare

@EthanBird EthanBird released this 01 Aug 17:14

Sense v0.4.6 — 键盘交互与九键体验

版本

  • Tag:v0.4.6
  • Android:versionCode 31versionName 0.4.6
  • 发布资产:Sense-v0.4.6.apk
  • 平台:Android 10+(minSdk 29targetSdk 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

Choose a tag to compare

@EthanBird EthanBird released this 01 Aug 11:01

Sense v0.4.5.beta.9 — 中文九键与五笔 86

版本

  • Tag:v0.4.5.beta.9
  • Android:versionCode 30versionName 0.4.5.beta.9
  • 发布资产:Sense-v0.4.5.beta.9.apk
  • 平台:Android 10+(minSdk 29targetSdk 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-wubi revision 152a0d3f3efe40cae216d1e3b338242446848d07
  • 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'426 p95 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

Choose a tag to compare

@EthanBird EthanBird released this 01 Aug 02:04

Sense v0.4.5.beta.8 — Streaming ASR, undo/redo, and Skills UX

版本

  • Tag:v0.4.5.beta.8
  • Android:versionCode 29versionName 0.4.5.beta.8
  • 发布资产:Sense-v0.4.5.beta.8.apk
  • 平台:Android 10+(minSdk 29targetSdk 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

Choose a tag to compare

@EthanBird EthanBird released this 31 Jul 21:09

Sense v0.4.5.beta.7 — Built-in Sogou ASR and Windows TSF preview

版本

  • Tag:v0.4.5.beta.7
  • Android:versionCode 28versionName 0.4.5.beta.7
  • 发布资产:Sense-v0.4.5.beta.7.apk
  • 平台:Android 10+(minSdk 29targetSdk 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

Choose a tag to compare

@EthanBird EthanBird released this 31 Jul 04:05

Sense v0.4.5.beta.6 — Mixed pinyin and Chinese-first ranking

版本

  • Tag:v0.4.5.beta.6
  • Android:versionCode 27versionName 0.4.5.beta.6
  • 发布资产:Sense-v0.4.5.beta.6.apk
  • 平台:Android 10+(minSdk 29targetSdk 36
  • 发布性质:GitHub Pre-release
  • 项目许可:GPL-3.0-only

混拼分词:从固定规则升级为有界音节图

连续拼音输入现在进入统一的有界音节图,同时探索:

  • 完整拼音音节;
  • 单字母声母缩写;
  • zhchsh 复合声母;
  • 尚未输入完整的尾部音节;
  • 由生产词典前缀约束并即时剪枝的后续路径。

因此混拼召回不依赖单个短语特判。hunshenxs 会生成与候选对齐的
hun'shen'x's 路径,并把“浑身解数”稳定排到 Top-1;dagn 也能通过同一套
图搜索与纠错评分召回“当”。音节图使用单一 volatile 快照缓存,读取线程只观察
完整发布的 immutable lattice,不会把不同查询、上下文或候选上限的结果混在一起。

中文优先:单字母输入不再被英文补全淹没

中文输入模式下,单字母候选由真实单汉字拼音证据驱动。宽泛英文前缀只保留少量
入口并进入统一分数域,完整英文 exact 仍可凭强证据自然前移。当前 w 回放的前
16 项包含 14 个中文候选和 2 个英文候选,第一个英文候选位于第 8 位。

英文 exact、英文词形、全拼、简拼、混拼、动态整句、用户词与拼写纠错继续由同一个
CandidateRanker 排序,不再通过固定槽位硬插英文或中文结果。

候选栏:展示分词与编辑器原始 composition 解耦

  • 请求 pending 阶段始终展示原始输入,避免旧候选分词闪回;
  • 中文 Top-1 就绪后,候选栏展示该候选实际使用的隐式音节边界;
  • hostworld 等英文输入保持原样;
  • 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.1v0.4.5.beta.2v0.4.5.beta.3v0.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

Choose a tag to compare

@EthanBird EthanBird released this 30 Jul 15:53

Sense v0.4.5.beta.5 — Decoder quality and Frost lexicon

版本

  • Tag:v0.4.5.beta.5
  • Android:versionCode 26versionName 0.4.5.beta.5
  • 发布资产:Sense-v0.4.5.beta.5.apk
  • 平台:Android 10+,minSdk 29targetSdk 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 首选源格式。仓库保存实际参与
构建的 8105baseextothers 源表,并在
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

Choose a tag to compare

@EthanBird EthanBird released this 29 Jul 15:21

Sense v0.4.5.beta.4 预发布说明

版本

  • Tag:v0.4.5.beta.4
  • Android:versionCode 25versionName 0.4.5.beta.4
  • 发布资产:Sense-v0.4.5.beta.4.apk
  • 平台:Android 10+,minSdk 29targetSdk 36
  • 发布性质:GitHub Pre-release

本轮目标:恢复键盘刚显示时的 Skill 长按可靠性

极光、方向选择器和激活状态渲染链在 v0.4.5.beta.3 中仍然完整,但 IME 在
onStartInputViewonWindowShown 和 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.2v0.4.5.beta.3 直接覆盖升级。

  • 证书:sense-release-v1-cert.pem
  • SHA-256:
    76db888ff42b04d52d4d19a573fe8f8df2fa3af0ab36bd6a08c6f70a8aace984
  • 算法:RSA-4096 / SHA256withRSA
  • 仓库仅保存公开证书和指纹;固定 PKCS12 私钥材料保存在仓库外