Skip to content

Latest commit

 

History

History
72 lines (57 loc) · 10.5 KB

AGENTS.md

File metadata and controls

72 lines (57 loc) · 10.5 KB

CyIME

Android 输入法,基于 Rime,Kotlin + Jetpack Compose。

命令

  • 构建:./gradlew assembleDebug --quiet
  • 测试:./gradlew test
  • 九键算法回归:python tools/ime_lab/t9_replay.py run --output <新结果目录>,默认在电脑本地运行,见 固定测试流程。
  • 清插件:./gradlew clearPlugins
  • 卸载:./gradlew uninstallApp

约束

  • 仓库路径不能含空格。
  • 禁止使用 subst 映射盘。
  • 禁止 ./gradlew clean。
  • 每次git提交只提交一个功能修改。
  • 最小修改,不顺手重构无关代码。
  • 修改前先读相关实现。
  • 修改后检查相关功能影响。
  • 普通开发不自动提交 Git;用户明确要求发布 Release 时,完成该次发布所需的按功能提交、推送、标签和发布,不再把同一发布拆成多次确认。
  • 当前工作流程(用户于 2026-10-04 明确调整,替代 10-01 的默认不打包规则):每轮应用功能修改完成相关检查后,Agent 默认打轻量正式测试包并通过 ADB 覆盖安装到唯一已授权设备,核对实际版本与 APK;用户无需再次提醒打包、安装。连续补充要求合成一轮交付,不逐文件打包。无设备先完成打包、清楚报告待安装;多设备不猜目标。只有文档、流程或交付脚本修改且 APK 内容未变时不空跑重打包。公开 Release 和内置模型包仍等明确要求,不能把默认安装推导为默认发布。
  • 不覆盖或还原用户未提交改动。
  • 用户指定的唯一日常开发、集成、打包入口是 D:/GitHub/CyIME。不得自行把长期开发或交付迁到 .codex/worktrees;只有用户明确要求隔离/并行目录时才创建,完成后必须同步回主目录并核对,不能只推远端 main 而让本地主目录停在旧版。保留用户未提交内容,不重写已发布历史。入口 auto.cmd 使用仓库本地 cyime.integrationRoot 指向这个主目录;不得凭“版本更大”猜测别的工作目录。
  • 设备点亮(用户于 2026-10-30 明确允许):手机、平板都没有锁屏密码。熄屏或停在锁屏时,Agent 可以用 adb 自己点亮并划开(input keyevent KEYCODE_WAKEUP,再 wm dismiss-keyguard 或上划),用完按 KEYCODE_SLEEP 熄屏;仍要先看状态页登记,用户自己正在用(键盘显示中、在录屏)时不抢。
  • 测试通过不等于真机验收;未真机验证必须标明“未验收”。
  • 设备共用(用户于 2026-10-23 明确要求):手机、平板也被其他项目(如 CySync)通过 adb 使用。任何 adb 安装、点击、截屏前先读 D:/OneDrive/Notebook/Project/Agent状态同步.md;设备被别的项目占用时等它释放或换一台,不抢用。开始占用时在该页「资源占用」登记(项目、做什么、大概多久),用完改回空闲;只记当前状态,不写历史。
  • 九键词库、解码或选词排序改动,后续统一使用固定回放脚本检查逐键首选、目标候选名次、停顿重排和已确认异常,并用相同语料与协议对比本地基线;基线含有旧问题不代表合格。默认使用电脑本地同源引擎,不占用平板或手机;设备回放只在用户明确要求时执行,环境不足应记录未运行,不自动改用设备或打包安装。速度门禁与质量门禁同样是硬约束(用户于 2026-10-09 明确要求):同时比对逐键工作量与耗时,并包含预置用户词库场景;任一项劣化超出基线允许范围即不合格,不能用选词改进抵消提速余量。
  • 改动台账(用户于 2026-10-02 明确要求):今后所有 CyIME 改动同步记录到 D:/OneDrive/Notebook/Project/CyletixKeyboard/CyIME输入法 todo.md(用户已从原 @Inbox/2026-09-22 205941 CyIME输入法 todo.md 移到此处),沿用 9.26 前“一条功能、一句话、一个复选框”的写法。同一天集中记录,同一功能直接更新原条目,不追加补录、续记或最终交付等重复章节;仅注明影响验收的未安装、未完成事项,测试数字、哈希、构建及失败过程留在仓库开发报告。新增项不勾选,不替用户确认或改变既有勾选状态。
  • 尺寸打包门禁暂时停用(用户于 2026-10-01 明确要求),后续任务不默认运行整套门禁,也不因门禁自动触发打包。保留现有检查脚本,按用户后续明确要求恢复;仍需检查本次布局改动的高度、裁切和交互区域,不能把未执行的检查写成通过。

版本管理

  • 版本号由 Agent 根据上一次实际交付后、本轮累计改动判断并维护,不把例行升号选择交回用户。打包与安装沿用上述每轮默认授权,公开发布仍由用户决定;脚本从 app/build.gradle.kts 读版本,不要求用户填写。
  • 兼容修复、性能和现有交互打磨升 PATCH;兼容的新功能批次升 MINOR 并将 PATCH 归零;不兼容的配置、数据或插件契约变更升 MAJOR 并将后两位归零。按本批最高影响定一次,不按对话数、提交数或功能个数累加。
  • 多对话连续补充合为一轮,编译或安装失败重试不逐次升版本名;一轮已实际交付后,下一轮兼容修复递增 PATCH,如 1.8.1 → 1.8.2 → 1.8.3,可继续到 1.8.10,不以 GitHub 是否发布为边界,也不强行归零。新功能批次才升 MINOR,不兼容契约才升 MAJOR。历史包不改名不覆盖。固定入口根据已验证安装回执检查新批次必须同时提高版本名和 versionCode,同一轮普通版/内置版共用版本。版本元数据以 app/build.gradle.kts 为唯一来源。
  • Android versionCode 独立递增;同批普通版和内置版共用。交付更新包前核对已有交付序号,不能按日期重算导致倒退。具体例子和当前发布状态见 打包与版本规则。

输入领域规则

  • 语言(Language)、输入方案(Scheme)、键盘布局(Layout)是三个独立概念:语言决定自然语言及资源,方案决定编码/解码,布局决定按键排列和交互。按组合建模,不用一个 schema 冒充三者。
  • 产品层使用 InputProfile;Rime schema ID 只作为 EngineProfile.Rime 的实现标识,以及部署、文件、旧存储和会话身份边界。新增业务分支按语言、方案、布局或明确能力判断,不新增散落的 schema ID/前缀猜测。
  • 手写、语音是 InputMode,不作为语言。识别器必须支持当前语言;没有对应识别器时明确提示,不静默调用中文模型。
  • 组合只能映射到实际可用的引擎配置,不凭组合拼接 schema ID。保留用户布局绑定、排序、自定义布局、词库和历史配置;布局重绑定不改变语言或方案。
  • 定义、兼容边界与尚待迁移项见 输入领域架构。

理解需求与完成标准

  • 改之前先用一句话说明用户想获得的实际效果,再明确不能破坏的关联关系。结合截图、前文和现有行为理解动机;最新一句话不是重置前面的约束。用现有信息可以确定时直接做,不把这个步骤变成反复提问。
  • “一致、对齐、沿用”是跨页面的可测关系,不是给几个常量设同一个值。检查视觉边界、字号、触摸范围、主题和手势语义;尺寸变化按实际键盘内容宽高计算,不能用整屏尺寸替代。
  • 涉及尺寸时同时看 26/14/9 键、数字、符号和展开候选中受影响的外框/底排/侧栏;保留工具栏尺寸。固定/悬浮、手机/平板、默认/极限尺寸中检查本次改动最容易破坏的组合,不默认扩为全项目门禁。
  • 涉及按键时先区分中文组词、上屏后联想、英文补全、空闲和粘贴等状态;对当前规则增加反例,不能把一个状态的要求扩大到所有状态。测试预期来自用户行为契约,不能仅照抄实现。
  • 设置页的开关项一律用“标题 + 一行说明 + 右侧 Switch”的整行开关(参照 1.7.1 语音转文本页);禁止改成并排按钮、FilterChip 或分段按钮式切换,按语言/条目分别设置时每项一行开关(用户于 2026-10-08 明确要求)。
  • UI 交付前必须实际查看与本次修改有关的渲染结果并对照原图/目标;能用已连接设备验证就直接做相关验证。单元测试、编译、安装、截图检查、用户验收分别记录。写“未验收”不能代替 Agent 自己应做的检查;没有图像证据不能说“视觉一致/已经对齐”。
  • 一次失败后记录实际原因并修正固定入口;不能不断新增临时脚本让用户逐个试。已授权的构建/安装失败由 Agent 继续定位,不能只贴命令结束。过程、错误、测试和发布回执放开发文档,Todo 只保留功能及用户原有复选状态。
  • 复盘与当前流程见 2026-10-04 开发与交付审查。

导航

空间硬约束(2026-10-11)

  • 用户要求严格限制磁盘使用。开始构建、回放、下载、语料生成或模型训练前先检查空间;C 盘保留至少 40 GiB,D 盘至少 100 GiB,WSL 内部至少 20 GiB;另为本轮预留 5 GiB,预计更大时按峰值预留。
  • 本仓库 .codex-artifacts、app/build、app/.cxx、.gradle 的生成物合计上限 160 GiB(同一硬链接只计一次);固定构建和本地回放入口已接入 scripts/storage_guard.py,超限停止,禁止绕过。
  • 单轮新增临时数据预算 5 GiB;运行中达到预算应停止新增并清理可再生副本。重型构建、回放、模型生成一次只运行一个,先检查已有进程,不重复启动。WSL 模型实验目录预算 20 GiB。
  • 模型和回放资源按哈希保留唯一内容;已归档只读资源可硬链接复用,严禁原地修改共享硬链接文件,更新必须新建文件后替换。保留测试报告、源码快照清单、用户词库、原始语料和交付回执;不为清空间删除唯一证据或当前模型。
  • 每轮结束核对实际可用空间,清掉本轮失效临时产物;历史 APK 保留唯一内容,重复副本优先去重。不能运行 gradlew clean、删除用户数据或关闭正在工作的 WSL 来强行腾空间。