Repository navigation
RinCore v5.3.43
RinCore v5.3.43
★★记忆注入改「装得下就全文给」:模型不用再读一遍 + 前缀稳定保缓存 📐这一版只动注入策略,不动存储结构 —— 记忆系统重写在下一批。 ━━ 为什么动这个(你上一轮说的「先动缓存」)━━ 原来的注入只给「一行描述」:/topics/rincore.md | 一句话说明 | updated: 日期。模型想知道里面写了什么,必须再调一次 memory_read —— 多一轮往返,而且这一轮注入的仍然只是摘要。 更关键的是缓存:检索式注入每次挑出来的结果都可能不同 → 前缀一变,后面整段就得重新计费。v5.3.38 那次实测已经证明图片之外的这一侧从来没考虑过前缀稳定性。 本版改动:记忆库正文总量 ≤ 12000 字符(约 4000 token)就全部正文一次性注入,模型直接就能用;超过才退回原来的索引式。 ━━ 一个必须做对的细节:顺序按 path,不按更新时间 ━━ 全量注入的唯一优势是「每次注入完全相同」。如果按 updatedAt 排序,任何一条记忆被更新都会把整段顺序挪位 → 前缀漂移 → 缓存全 miss,优势直接抵消。所以顺序固定按 path 字母序 —— 内容变了才变,位置不变。这一条专门写了回归测试锁住。 ━━ 验证(没拿 CI 当第一验证器)━━ 把真实源码 MemoryPrompts.kt + MemoryFile.kt 用 kotlinc 编译,跑了 16 项断言全过:小库走全文 / 正文真的注入 / 大库退回索引且绝不内联 / 旧格式永不参与体积计算 / 改更新时间不改变顺序 / 空库空态 / 两条规则文案都在。另:tree-sitter 两文件 0 错误、rc check 双 PASS。 ━━ 一处我自己的错,已修 ━━ 第一版断言用 contains("<memory_listing>") 判「有没有这个段」,结果规则说明里提到这个标签名就误判成「输出了该段」—— 两条假失败。改成精确匹配结构形态(<memory_listing> 后紧跟换行、<memory_files count=)才通过。这和 v5.3.18 的「全局断言误杀合法写法」同族,记在教训里。 ━━ 关于你贴的那段记忆(重要)━━ 你贴的 <memory> 块用的是 **Memories** + JSON 数组 + memory_tool 的老格式。我在当前代码里查了:**Memories** 在生产代码 0 处(只剩一条测试断言「不得出现这个标题」),memory_tool 只剩历史配置过滤/旧消息渲染/旧记录导出三处兼容,注入链早已是 <memory_system> + <profile> + <memory_listing> + <legacy_entries>。 → 那段记忆不可能由 v5.3.42 产生,它来自旧版本(≤ v5.3.20)或旧对话。这一点必须先确认,否则我们会基于错误前提改造记忆系统:请在「设置 → 关于」看一眼版本号;如果不是 5.3.42,先装上 v5.3.42 再看一次记忆注入长什么样 —— 中间十几版对记忆的修复你可能一直没拿到。 ━━ 同时确认的事(你上轮否决「用户画像」,我改方向)━━ 你说得对:「分析我是没有意义的,要分析自己的工作」。所以下一批的记忆重构方向不是 MIKA 那种用户画像,而是:①工作方法(这类任务怎么做、踩过什么坑);②项目结构(模块/构建/发版链路);③领域知识(物理题、文档处理的具体做法)。profile.md(你是谁)不再作为核心,preferences.md 只保留「回复约定」这一层(那是工作规范,不是人格分析)。具体方案下一批单独给你过。 ━━ 诚实边界 ━━ ①本版没有改存储、没有改工具、没有改 UI —— 只是注入策略 + 一条顺序保证;②没有安装实测(沙箱无设备);③全量注入会让单轮 prompt 最多多约 4000 token,但命中缓存后实际成本远低于多跑一轮 memory_read;④如果你更希望保守(保持索引式),把常量改回 0 即可回到旧行为,一行改动。 ★版本纪律:5.3.42 → 5.3.43(只改第三位、不进位)。 ⑩hub=v5.3.43
本次提交
- 3c8c118 release: v5.3.42 — ★★沙箱一体化:默认复用常驻会话(每条命令不再付 1
3 秒启动)+ 预热不再产生 43MB core dump + Linux 能力实测🔧这一版没有新功能 —— 它把「沙箱」从外挂变成了地基。 ━━ 一、先摆事实:沙箱其实早就是同一套 ━━ 我在沙箱里实测了 9 项:rootfs 是 Ubuntu 24.04.3(真用户态);3 秒是纯启动开销**,/workspace挂的就是你在 App 里看到的那个工作区files/目录(ProotShellRunner:103);/skills、/builtin_skills、/tool_outputs、/upload四个挂载模型和我共用;/dev/shm已自建(Python multiprocessing 能用)。→「分离」不在目录和挂载这一层,那一层本来就是一套。 ━━ 二、真正的分离在「会话层」:每条命令都重启一次沙箱 ━━ 此前每次workspace_shell都新起一个 proot 进程,要重新载入 rootfs、重建全部挂载,**单条命令有 1cd和环境变量也不跨调用保留。这正是「沙箱慢得惊人」「渲染/转换特别慢」的第一大来源,也是模型宁愿用 shell 做文件操作(等于再付一次启动)的诱因。 本版改为默认复用:连续命令共享同一个常驻 proot+bash,第 2 条起只剩命令本身耗时。 敢改默认值,是因为复用的安全性早就逐条补齐了:会话 key 含工作区 ID(不同工作区绝不串进程);每条命令前重设 cd(v5.3.37,cd 不跨命令污染);进程死/读线程断会自动重建(模型跑 exit 也不会永久坏);闲置 5 分钟自动关;起不来自动回退一次性。 需要干净隔离环境时,传session="none"即恢复旧行为。 ━━ 三、预热不再往你的工作区里扔 43MB 垃圾 ━━ 上次清理环境时发现根目录有个「文件名是一个空格」的 43.4MB 文件 —— 它是officecli --version崩溃产生的 core dump。而预热的第一步动作正好是它,且落在当前工作目录(= 你的工作区)。意味着每崩一次就吃 43MB,文件名你根本不会注意到。 本版三处修:命令前置ulimit -c 0(崩了也不再产生文件);探测从--version改--help(同样把 34MB 二进制走热,避开崩溃路径);连续 3 次失败即禁用预热 24 小时(旧实现每个输入沿都重试 = 反复制造垃圾)。 顺带修掉一个我自己写错的地方:executeCommand不会因为非零退出码抛异常,所以「成功」判断必须显式看exitCode—— 不加这一句,熔断永远不会触发。 诚实:officecli --version在我这边(同一个 rootfs)正常返回 1.0.152,退出码 0,所以 core dump 是设备/机型特定问题,无法在沙箱复现;本版的价值是「即使崩了也不再产生文件」。 ━━ 四、Linux 能力实测(不是宣称,是跑出来的)━━ | 项 | 实测 | |---|---| | gcc | 13.3.0,编译 hello 成功 | | apt | 2.8.3 (arm64) 可用 | | Python | 中文 + emoji 输出正常 | | Node | v18.19.1 | | 中文字体 | 39 个 | | git / pandoc / texlive / tesseract | 在 | 工具描述里新增一条自检命令,模型不用再一个个试。 ━━ 五、为什么这层地基决定后面能不能做大事 ━━ 你在 App 里看到的文件 = 模型改的文件(同一目录);装的 Python 包/编译器跨会话存在(rootfs 随工作区);连续操作低开销;真 Linux 工具链;崩溃不产生垃圾。有了这五条,下一步才谈得上做「环境快照回滚」「预置工具链」「沙箱状态可视化」这类真正提效的东西。 ━━ 六、诚实边界 ━━ ①默认行为变了:依赖「每条命令干净环境」的自定义流程需显式传session="none";②同 session 内命令串行(这是不串状态的前提);③/proc/version权限拒绝是 proot 固有限制,LibreOffice 仍不可用(用officecli view screenshot);④无安装实测,改动靠静态检查 + 熔断逻辑复刻验证;⑤沙箱状态可视化(App 里显示「就绪/执行中」)本版未做,留待下一批。 ★版本纪律:5.3.41 → 5.3.42(只改第三位、不进位)。 ⑩hub=v5.3.42 - 2ed55f9 docs: 发布链核验记录 + 两个流程问题
- d2d3565 release: v5.3.41 — ★★文档与工具批次:溯源体系 / 结构总图 / 开工状态 + 工作流整顿(发布链本身是本轮验证对象)📐这一版没有改任何功能代码 —— 它是前面几轮「把项目理清楚」的沉淀落地,同时用一次真实发版来验证新工作流程是否可靠。 ━━ 一、本版带上的三份文档(此前只在 adopt 分支,未进 main)━━ | 文档 | 内容 | |---|---| |
FILE-ORIGIN.md+.json(+ 工具bin/origin) | 全量文件来源溯源:1353 个 .kt 中 UPSTREAM 778(57.5%) 与 3.1.0 逐字节一致 / MODIFIED 231 / PORTED 200 / PORTED-MODIFIED 67 / OURS 56 / DELETED 21。11 个命令:stats/modules/of/diff/restore/lost/untouched/ours/modified/ported/audit| |STRUCTURE-MAP.md(+bin/symbols、bin/deps) | 四层索引:文件级(谁的文件)/ 符号级(26575 个符号,改动风险最高的是UIMessagePart140 文件、UIMessage102、SettingsStore84)/ 模块级(无循环依赖,app唯一顶层,highlight/document/material3/oauth是零跨模块依赖的叶子)/ 孤立声明初筛 | |CODE-NAVIGATION.md+EXTENSION-POINTS.md| 按「我要改 X」组织的导航(53 个路径引用逐条脚本验证,0 缺失)+ 加工具/渲染器/区/Provider/设置项/记忆档/路由的改法与必踩坑 | |开工状态-2026-11-04.md| 下批次开工快照(版本/环境/工具链/代码画像/待办/六条纪律) | ━━ 二、工作流整顿(这才是本轮真正想验证的东西)━━ ①bin/watch—— 唯一 CI 查询入口:watch(最近 run + 自动比对是否就是本地 HEAD)/watch <runId>(阻塞到终态,绿/红自带摘要,退出码 0/1)/watch <sha>(按 commit 找 run 再等)。②bin/selfcheck—— 检查器自检(14 项探针):用已知坏样本喂每个检查器,确认它真会报错(含对照:正常文件不得误报、假 sha 必须失败、watch必须秒回)。「基线全绿」不等于「没问题」 —— 如果检查器本身失灵,全绿是假的。③rc release修掉一个真实隐患:旧流程是sleep 20后取最近一个 run 且不校验 sha —— 新 run 还没创建时会等到上一个 commit 的 run 并判定 CI-GREEN,最终表现「CI 绿了但 release 没出来」,失败点离真因很远。现改为run_for_sha(head_sha)定位 +wait内二次校验 head_sha。④ 两份AGENTS.md(工作区根 + 仓库根):把「等 CI 只用 watch」「发版前先 selfcheck 再 audit」「验收看退出码不看输出文字」写进每次会话都会读到的位置 —— 之前这些规则写在bin/README.md,而我不总会去翻它。━━ 三、本版确认的健康项 ━━selfcheck14/14;doctor14 通过 / 0 警告 / 0 失败;audit fastAUDIT-OK;origin1353 个 .kt;symbols26575 个符号;deps cycles无循环依赖;APK 79.7MB(上一版已从 85.1MB 降下来)。━━ 四、诚实边界 ━━ ①本版零功能改动 —— 全部是文档 + 工作区工具(bin/不随 APK 发布),所以"功能变化"这一栏是空的;②bin/里的工具是我的工作环境,不在仓库里、不随 APK 分发,所以这版 APK 与 v5.3.40 在功能上完全一致;③无安装实测(沙箱无设备);④工作区仍有archive/833M(旧 APK 对照基准)与_trash/435M(proot 权限受限,删不掉)未处理。 ★版本纪律:5.3.40 → 5.3.41(只改第三位、不进位)。★待你验证:本版功能应与 v5.3.40 完全一致 —— 如果你只是为了新功能,可以从 5.3.40 直接跳到下一版;这一版的价值在于把「代码库为什么乱、乱在哪、怎么迁移」变成了可查询的事实。 ⑩hub=v5.3.41 - d730c36 docs: 下批次开工状态快照 + 环境整理
- 892ed07 docs: 结构总图 + 引用关系层(deps / symbols hot,dead)
- b4c844a release: v5.3.40 — ★★性能(零功能变更,-6.58MB)+ 代码结构化(26575 个符号可检索)📐这一轮先说一件可能不像「优化」但更诚实的事:我把标准性能热点逐项实测排除了。 ━━ 一、被实测排除的方向(避免做无用功)━━ | 方向 | 实测结果 | 结论 | |---|---|---| | 函数内正则 | 145 处
Regex(,131 已在val;HardlineCommandGuard的 13 个安全正则已是private val PATTERNS| 只剩 14 处低频,收益可忽略 | |SimpleDateFormat| 16 处全在低频页面(设置/日志/错误卡片),LogPage3 处已remember| 不在热路径 | |LazyColumn无 key |ChatList主列表两处都有key+contentType;抽屉/模型列表/工具矩阵也都有 | 已是最佳实践 | | Markdown 解析 | 已是增量解析(块级 O(δ))+ 字符预算 LRU + 跨 tick 节点复用 + 避免全量回退(v4.8.86 深度优化) | 无空间 | | Compose 内集合运算 | message 组件 7 处,但都是小集合 | 收益 < 风险 | 结论:所谓「Compose 性能十大坑」,这个项目基本都填过了。 在没有 profiling 数据的情况下改这些,是引入风险而不是优化 —— 我没做。 ━━ 二、真正的收益:死资源(可量化、零功能变更)━━assets/曾占 60MB(APK 总共才 85MB)。逐个核对引用方后: | 资源 | 体积 | 判定依据 | |---|---|---| |assets/banner/| 5.10MB | Kotlin/XML/Manifest 零引用;真实上游 3.1.1 已删除该目录 | |assets/models_dev.json| 1.48MB |ModelsDevCatalog.decode()零调用方 —— v5.3.1 只移植了目录类与数据,依赖 ModelRegistry 重构的ModelsDevUpdater从未移植 | |patreon.xml| 小 | 赞助功能已删(v5.0.52),零引用 | |ic_media_creation.xml| 小 | 零引用 | 合计 6.58MB,assets/60MB → 54MB。 逐个确认过是活的、保留的:rin-tools/33.3MB(officecli 文档工具,你日常在用)、simple_dict/13.1MB(SimpleDictManager.extractDict()被AppDatabaseFactory:55调用,FTS 分词必需)、html/4.2MB(mark.html + mermaid,v5.3.17 刚做过 CDN 本地化)。 为什么这算「性能」而不是「清理」:APK 体积直接影响安装时间、升级下载量、冷启动资源扫描;在「功能零变更」这条硬约束下,它是唯一可量化的收益。 ━━ 三、代码结构化:从「1353 个文件」到「26575 个可检索符号」━━ 三层索引(文件级 → 符号级 → 导航级): | 层 | 工具 | 回答什么 | |---|---|---| | 文件级 |bin/origin| 这文件是谁的(UPSTREAM/MODIFIED/PORTED/OURS)+ 能否安全回退 | | 符号级(本轮新增) |bin/symbols| 这个类/函数在哪、属于哪个类、谁在用 | | 导航级 |docs/CODE-NAVIGATION.md| 我要改 X,先看哪几个文件 |bin/symbols实测:symbols build # 5 秒重建 → docs/SYMBOLS.tsv symbols find saveConversation symbols uses MemoryRepository symbols stats输出:saveConversation fun ChatService. MODIFIED ChatService.kt:170426575 个符号 / 1262 个 .kt,71% 有明确所属类(其余是真正的顶层扩展函数,本来就没有所属类)。每个符号带来源分类(UPSTREAM 12899 / MODIFIED 7545 / PORTED 3659 / PORTED-MODIFIED 1942 / OURS 530)→ 改一个函数之前,先知道它是原版的还是我们写的。 输出是纯 TSV,可直接grep/awk/sort,也能被任何工具消费 —— 这就是你要的「清晰文本集」的实际形态。 第一版只索引顶层声明,find saveConversation返回「未找到」(业务方法几乎都是成员函数)→ 索引等于不可用;加「所属类」列后才有定位价值。 ━━ 四、bin/perfscan:把这轮的排查方法固化 ━━perfscan # 全部 perfscan assets # 体积/死资源(最可量化) perfscan hot # 热路径模式它是清单工具不是门禁(退出码恒 0)—— 每项都给出「为什么可疑」和「零变更的改法」,由人决定改不改。刻意不做「扫出 100 条就机械全改」,那只会制造风险。 ━━ 五、诚实边界 ━━ ①APK 实际减少需 CI 产物确认 —— 6.58MB 是资源原始体积,图片本就是压缩格式,接近 1:1 但非精确。②本轮没有做运行时性能优化,因为第二节的实测排除了所有标准热点;没有 profiling 数据时改 Compose 是碰运气。③无安装实测(沙箱无设备)。④ModelsDevCatalog类保留(注释写明「要启用必须把 json 放回来」)—— 删类会让将来移植ModelsDevUpdater时重写解析层。 ━━ 六、下一步(有数据再做,不猜)━━ ①冷启动:adb shell am start -W看TotalTime;②重组计数:Layout Inspector 的 recomposition counts,只改数字异常高的组件;③滚动掉帧:adb shell dumpsys gfxinfo <pkg> framestats,看 janky frames 集中在哪个页面。 这三项数据拿到之前,任何「Compose 优化」都是猜。 ★版本纪律:5.3.39 → 5.3.40(只改第三位、不进位)。★改动:删 5 个死资源(assets/banner/3 图 +models_dev.json+ 2 drawable)+ModelsDevCatalog.kt加注释;零 Kotlin 逻辑改动(功能绝对不变)。 ★待你验证:①APK 体积应从 85.09MB 降到 ~78.5MB;②启动、聊天、文档处理一切照旧(本轮没动任何逻辑);③bin/symbols find <任意函数名>应能直接定位到文件与所属类。 ⑩hub=v5.3.40
构建:gate(编译+测试)→ build(assembleRelease)→ 正式版 Release