Repository navigation
release: v0.14.0-beta.2 — 时间线索 + 图像描述档 + 面板两处修复 - #660
Merged
Merged
Conversation
- 设置页:FEATURE_FIRST_SCREEN 加 group.dream,可点项预算 11→13。豁免由头 是同级性——sleepModeEnabled 是与 group.ext 三个闸门同级的子系统总闸,而它 恰好是首屏唯一缺席的那个,整组因此躺在「全部设置」里。 - 面板:affective / diary 两个页签改由各自的总闸决定注册与否,当前视图落在 被隐藏的页签上时回落记忆库。features 异步到手前不渲染需要闸门的页签—— 先不出现再补上是渐显,先渲染再收起会闪一下;拉取失败按全关处理。 - 测试:入口可达性锁。每个组必须在首屏或显式折叠白名单里,每个开关 key 在 组、子行、高级、字符串、整数五个出口里只能占一个座位。 用户 2026-11-11 反馈:装了之后在设置里找不到情绪那一页的开关。
- 设置页:新增 FEATURE_ENUMS / FEATURE_ENUM_VALUES 与 enumRow 渲染器, 「高级」折叠末尾那段手写的三档下拉改成 FEATURE_ENUMS.map 驱动。它此前 是第七个出口——渲染里有、常量表里没有,可达性测试按定义看不见它, #641 那个下拉被误删也不会有测试红。 - 测试:枚举键并入互斥表当第五个出口,另补反向锁——登记了必须真渲染、 取值表与登记表一一对应、每档至少两个状态。i18n 完整性测试补扫枚举行: 标签、提示与每一档取值都是模板串,字面量与组 items 两条扫描都覆盖不到。 评审指出(2026-11-11):上一提交的互斥表按常量计数,漏掉了这个硬编码出口。
可达性测试里 `FEATURE_ENUMS.map(` 那条是纯文本匹配,注释能写出同样的片段: 真渲染行被删、注释里却留了一行,断言会永远绿。 - 加 stripComments:去掉整行 `//` 与 `/* */` 段,文本断言一律跑在去注释副本 上。行内注释不剥——字符串里可能出现 `//`(URL),误剥会切坏真代码。 - 断言本身收紧成「行首缩进 + 紧贴调用形态」,行尾注释也写不进那个位置。 自证:注释里同时写行注释与块注释版的 FEATURE_ENUMS.map((k) => enumRow(k)) → 131 全绿(不假通过);再删真渲染行 → 可达性用例红(130 pass / 1 fail)。
chorographyAutoRefresh / chorographyT1FromPanel 既在 FEATURE_CHILDREN 里 (flagRow 会跟着父行展开),又由 choroSub 手写了一份,同一个键在面板上出现 两行:切上面那个,下面那行不同步。5c41d31 先写了手写行,5bad8a6 往 FEATURE_CHILDREN 补父关系时没删旧的,v0.14.0-beta.1 带着它上线。 删掉 choroSub 里的两行手写渲染,子项回到 flagRow 统一展开,并顺带补上 gate:父关时子行标注「不生效」,而值保留、仍可预置。 测试:inject-parent-gate 的面板用例新增两条断言——前端 FEATURE_CHILDREN 的 每个子键在 client.js 里不得以字面量形式手写渲染(先剥注释再数,注释里写字 不算渲染点),以及 flagRow 必须真的展开子项并带 gate。把手写两行加回、或删 掉展开点,用例都会红。 顺带修正 FEATURE_CHILDREN 上方注释:这张表是面板渲染关系,不是运行时闸门。 后端 INJECT_CHILD_FLAGS 只收「父关、子项却仍有执行路径」的键,两张表不必 相等;此前那句「两侧漂移由测试钉住」会让人以为地志子项漏登记了后端。
注入块与三个工具回执从来没给过 created_at,唯一的 updated_at 还会被巩固合并 刷新(实测全库 656 行真漂移,中位 30 天、最长 51 天),于是旧条目被当成新的。 - 新增 src/date-hint.js:hintDate 只认 YYYY-MM-DD 前缀(坏值返回空串,不吐占位 符),memoryDate 优先 occurred_at、缺省回落 created_at;按 UTC 切,跨机器确定。 - 注入普通行与降级标题行都带日期,位置在类型括号之后、标题之前,不抢 `- [type]` 前缀。entryLine / graphHintLine 的日期是可选参数,不传时输出逐字节不变。 - memory_search / memory_list / memory_get 回执给 created + updated;memory_get 此前连 updated 都没有。 - 三处渲染点各补一段,MEMORY_PROVENANCE 的「未标注行逐字节一致」契约不动。 - 只给日期不给时分:注入预算紧(MAX_BLOCK = maxContent + 600),秒级无信息量。 test/date-hint.test.js 8 条用例;三条变异各自变红(降级行去掉日期、回执去掉 created、普通行不传日期)。
原图档不做(DISTILL.md 已定:库已 273MB),描述档是它的替代:不落原图、不读字节、不做 OCR,只在蒸馏前让一个能看图的模型给每张图写一段描述,把描述并进转录,图本身仍是 [图: 文件名 ...] 占位。 - src/image-describe.js:canSeeImages 三态准入(unknown 照发,只有明确声明不含 image 才跳过)、describeImages 逐块调用、appendDescriptions 只挂第一处 - src/summarize.js:collectMessages 新增 describePart 注入点(默认缺席 = 老路径),summarize() 里按 开关/路由/能力 三级判定后才建闭包 - src/config.js:imageDescribeEnabled 默认关 + 两条路由键,进 LIGHT_MODE_OFF - src/lang.js:imageDescription 提示词(中英),只描述看得见的东西、看不清就说看不清 - settings/config-keys/api 三处白名单与计数锁同步(131 -> 134) - 面板:pipeline 组新增座位 + 子块路由下拉,文案写清「留空 = 整档不跑」 默认关着时蒸馏输出逐字节不变,由 test/image-description.test.js 与 #611 的 5 条端到端共同锁住。全量 3389 tests / 3388 pass / 1 skipped。
四路并进来:时间线索、图像描述档、面板三处漏登记、地志子开关重复渲染。 - 版本号 0.14.0-beta.2(package.json + package-lock 三处),测试数徽章与四条注释同步到 3399 - CHANGELOG 新节 4 条从 [Unreleased] 搬入 - 双 README 的「最近更新」头条换成这一版:时间线索与图像描述档各一段,并点出另两项修复 - 预发布不插 README 版本表、不挪 SECURITY 支持表(beta 不是受支持版本)
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
|
Caution Review failedThe pull request is closed.
Warning Some tools did not complete. Review the errors below.
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
这一版发了什么
0.14.0-beta.2,把四条线并进来。核心是两件桉桉问过的事:情感记忆与图像记忆。
1. 时间线索:模型第一次看得见记忆有多旧
注入行与三个检索工具的回执此前都不带日期。
created_at从头到尾没进过任何一条渲染路径(src/inject.js全文零命中,memory_get连updated_at都不给),唯一露出的时间戳是renderTimePrefix的「当前时间」一句,且默认关。于是「三天前说要 A、昨天改口说 B」在模型眼里是两条等重的陈述,先后全靠正文里有没有恰好写着日期。
created_at。updated_at会被巩固刷新——实测本库updated_at > created_at的 4528 行里 2765 行差值不足 1 分钟(插入时两列写同一毫秒),真漂移 ≥1 天 656 行、中位 30 天、最长 51 天。拿updated_at当年龄,最长会年轻一个半月。MAX_BLOCK = maxContent + 600,秒级精度没有信息量。src/date-hint.js:只认YYYY-MM-DD前缀、按 UTC 切、坏值返回空串(不渲染占位也不抛错)。entryLine/graphHintLine的date是可选参数,不传时输出逐字节不变;降级标题行是独立渲染点,同步带上。MEMORY_PROVENANCE一个字节没动——它有「未标注行渲染与 A2 前逐字节一致」的契约。2. 图像描述档:
imageDescribeEnabled(默认关)图片此前只以
[图: 文件名 image/png 1543x983]占位进蒸馏(#611)。占位让模型知道「有过一张图」,但不知道图里是什么——用户发一张报错截图问「这个怎么修」,蒸馏出来的记忆只剩「用户发了张图」。库已 273MB,原图档不做是既定口径(
docs/DISTILL.md),描述档是它的替代:@deepseek-ai/dsh-llm的 adapter 按modelInfo.inputModalities决定编不编。本档只负责把 image 块放进一次调用,不读文件、不做 base64、不需要 attachments store。inputModalities非数组、没有resolveModelInfo全按 unknown 照发。理由与宿主一致——对未知能力是不投影。attachmentId一次蒸馏只描述一次(四张图各 800 字会把真正要蒸馏的正文挤出trimTranscript尾部窗口)。3. 面板三处「有渲染、没登记」(#656)
FEATURE_FIRST_SCREEN缺整个group.dream(sleepModeEnabled是与group.ext同级的总闸,却整组躺在二级折叠里,首屏可点项 11 → 13);affective/diary页签无条件注册,总闸关着时能点进去看一页全关的开关;conflictLedgerMode的三档下拉是手写的——渲染里有、常量表里没有,意味着它被误删也不会有任何测试红,而它确实被误删过(#641)。收进FEATURE_ENUMS+enumRow后由表驱动,并补上 i18n 完整性测试对枚举行标签与每档取值的扫描。4. 地志子开关渲染两遍(#658)
chorographyAutoRefresh/chorographyT1FromPanel既在FEATURE_CHILDREN里(flagRow会展开),又由choroSub手写了一份——5c41d31 先写手写行,5bad8a6 补父关系时没删旧的。面板上这两个开关各出现两行、点上面那行下面不动。子项回到flagRow统一展开,顺带补上父关时的「不生效」标注。复现条件是地志总闸开着(默认 false)。测试
全量
node --test test/*.test.js:3399 tests / 3398 pass / 0 fail / 1 skipped(既有跳过项)。node scripts/check-sync.js:✓ 123。新增用例:
test/date-hint.test.js8 条、test/image-description.test.js14 条,另有 #656 / #658 的结构锁。变异自证全部先红后绿:
MEMORY_AGE里created置空、entryLine不传date)sight !== false改成sight === true)kids.map换成[])其中「把
sight !== false改成sight === true」第一次跑出假绿:用例传undefined正好落进解构默认值把能力又变回真。改成传null才真变红——这条记在测试注释里。发布
npm publish --tag beta只挪 beta 标签,latest仍为 0.13.0