Skip to content

perf(device-link): 按可见内容分页并按需读取工作详情 - #4081

Open
dashhuang wants to merge 34 commits into
mainfrom
dash/remote-history-on-demand
Open

perf(device-link): 按可见内容分页并按需读取工作详情#4081
dashhuang wants to merge 34 commits into
mainfrom
dash/remote-history-on-demand

Conversation

@dashhuang

@dashhuang dashhuang commented Sep 7, 2026

Copy link
Copy Markdown
Member

这次改了什么

摘要

补齐应用退出中断的持久告警同步:Host 按与本地中断查询相同的启动边界,在现有任务行附加可选 interruptedTurnStartedAt。手机和 Desktop 远程端共用判定,普通查看/已读确认不清红点;继续或忽略产生的 ended 更新、clear、归档或新一轮代次使旧告警失效。折叠项目和自动化分组同样展示并定位中断子任务。不新增查询、轮询或告警账本。

将 Mobile 打开任务后的已读停留从 1.2 秒缩短为 0.2 秒,仍要求前台、当前连接代同步和内容渲染完成。手机与 Desktop 远程任务行共用 Desktop 的五档状态判定;自动化失败/中断未读显示红点,主动中止不计未读。手机组头展开时代表最新运行,收起时保留整组未读失败并打开对应运行。

Desktop 远程端从被控端已有轻量索引读取自动化未读,复用现有刷新队列;schedule 事件只读索引,不追加周期轮询。已读操作明确路由至任务所属设备,同值索引保留引用,迟到结果按原设备代际丢弃,撤销访问继续走原撤销路径。Mobile 切换抽屉显示期间读取相同的轻量索引,已读推送后刷新;结果仅用于抽屉,不覆盖首页完整绑定缓存,关闭后不提交迟到响应。自动化索引部分没有新增 wire 字段、持久缓存、轮询计时器或原生依赖;中断告警部分追加上述可选任务行字段。

共享可靠传输按接收端现有 16 槽限制首次发送,剩余消息留在原有有界 pending 中;累计 ACK 或合法前缀淘汰推进后立即释放未首发消息,避免 322 KB 级响应因接收槽满被拒后再等待尺寸退避。手机与桌面远程复用同一实现,保留大包重传间隔、控制 ACK 与 1013 物理帧预算。新增只在实际发出时记录的队头重传元数据,不含正文或请求参数。

修复远程流式正文与历史快照交接时短暂换位:同一 clientId 已有历史记录时,保留流式正文与状态,但使用历史 createdAt/rowid 排序,避免临时时间覆盖权威顺序。共享交接和渲染替换复用同一规则,Mobile 与 Desktop 远程同时生效,不修改原始 store 或持久数据,也不增加排序状态、缓存或传输字段。

修复 Mobile 历史列表已显示后仍绑定原生动画透明度的问题:定位成功或兜底完成后外层固定为 opacity=1,旧动画停止回调的迟到值不再影响后续键盘/布局重绘。切换任务仍重置首次定位保护。该路径能解释键盘开合后整块消息区保持空白,但尚无故障现场透明度日志,不能认定它是用户那次故障的唯一原因。

按需求方最新确认,Mobile 历史与全部媒体磁盘缓存不按总容量淘汰。取消历史 1 GiB、远程图片 150 MiB 默认上限,以及已发送图片本地副本的 64 条、8 MiB 文件准入和 7 天过期限制。视频和分享临时文件原本无总容量限制,保持原路径。手动清理功能留待后续;现有账号/任务清理、失败残留清理、内存及单次解析保护保留,不改变原生依赖或传输协议。

远程历史原先按原始消息翻页,一页可能全是已折叠的思考和工具记录。现在先读取正文和工作摘要,展开后自动续读详情;手机与桌面远程链接使用同一套读取逻辑。

保留原来的折叠层级:完成后的短旁白和连续工作放在一个外层摘要内,展开显示旁白及内层动作组;内层独立展开为思考和工具。纯动作只有一层工作组。读取边界不再直接生成界面分组,避免连续出现多个“已工作”。

修复 Desktop 远程任务与 Mobile 流式正文结束后的短暂消失:两端复用 maker-shared 的 HistoryViewHandoff 和渲染交接规则,仅适配各自的 streaming 字段。当前视图只记录已观察到的实时回复身份,生成结束和持久化推送后继续使用原始消息镜像,直到历史快照按 clientId 接管;接管后只显示一次,普通旧缓存行不会补回。移除 Mobile 独立实现,本地 Desktop 保留原路径。

修复手机重进已访问任务时重新 loading,以及运行中任务内容未变却上下跳动:普通聚焦/回前台只恢复读取,不再清空历史;复用已有历史控制器,离开页面后最多保留 8 个视图、约 4 MiB 序列化估算的内存缓存,后台核验期间继续显示内容。相同历史响应的项目与数组引用复用放在共享控制器中,Desktop 同样受益。缓存接入原账号/设备清理、任务删除/归档、回退、定时任务回收与正文预算淘汰边界;内存淘汰不删除下述磁盘缓存,不改变传输协议。

手机历史消息首次定位确认到位后立即显示,取消原先固定 300ms 隐藏再 100ms 淡入;300ms 原生动画只保留为直接显示的上限兜底。复用原 tail follower 的实际位置校验,任务切换清理旧回调;不新增滚动循环,不改变手势、流式正文或传输逻辑。

iOS 向上翻历史时,在原有距顶部约两屏的预取区直接发起加载,不再等拖动、触摸或惯性结束;沿用 native MVCP 保持阅读位置。Android 的手动锚定仍等待手势安全点及 MVCP 切换提交。没有新增缓存、并发请求或重试机制,Desktop 无同类手势等待,不修改其路径。

按需求方确认,Mobile 增加不设总容量上限的历史磁盘缓存,内存仍只保留近期视图。已加载的历史页和完整详情以独立文件保存,启动仅读取元数据索引,按需读取当前任务正文;不设时间过期或总容量淘汰。按区域、账号、设备和任务隔离,登出/切换账号、移除设备、删除/归档、回退时清理。旧读取、旧计时器和旧写入不能恢复已清理内容,电脑的新结果优先;运行中标志与未完成详情不恢复为重启状态。使用已有文件系统依赖,无原生或 fingerprint 改动。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

  • 关联 Issue / 需求:优化远程历史翻阅、折叠与展开体验。
  • 本 PR 包含:Host 可见历史投影、详情接口、按展开状态过滤推送、Desktop/Mobile 共用读取控制器,以及换源与重连时的兼容处理;两端统一流式正文到历史正文的交接。
  • 明确不包含:服务端、数据库迁移、模型上下文、原生依赖或 runtime fingerprint 变更。
  • 用户可见变化:每页目标为 20 个正文/摘要项目,另设 256 KiB 软预算;详情自动续读,无须逐页点击。外层展开不自动打开内层,外层收起停止隐藏详情读取,再打开保留原展开记忆。正文、交付内容、媒体与交互卡片沿用原渲染规则。
  • 是否存在 breaking change:无。旧 Host 不支持时自动回到原消息接口;旧控制端保留原推送。本地 Desktop 保持原路径。

UI 变化

  • Desktop 工作详情重试复用标准 secondary Button 的 pill 边框、主题、hover/pressed/focus 与禁用状态;Mobile 工作详情重试复用现有 MessageListActionButton 与 payload 按钮边框/文字样式,最小触控区域 44×44,沿用按下、禁用、无障碍与 reduced-motion 行为;引用 DESIGN §5 和 design-governance §13,不改内外层展开。

  • 引用的设计规范:docs/design-rules/DESIGN.md §2 Color Palette & Roles、§10 Theme System & Token Reference / 双模式交付门槛。复用现有工作组、加载与重试组件和语义主题颜色;没有按设备型号或屏幕尺寸划分读取策略。

  • Desktop 运行组保留最近 5 条活动预览;Mobile 仍只显示折叠标题。工具参数/结果自己的展开入口、真正的子 Agent 层级,以及 Workflow 等既有平台差异保留。

  • 历史消息显示遵循 docs/design-rules/DESIGN.md §14.4:取消无必要的旧内容淡入,保留首次定位保护;不改主题颜色与布局。

  • 未提供实机截图;Light/Dark 目检尚未完成。

异步生命周期与收敛不变量

  • 满 20 个完整可见项即停止扫描,把更早的超大工作组留给下一页;不改变分组完整性或旧页超预算降级。

  • 终态外层重分组按真实首消息边界识别重叠,保留此前加载的完整旧前缀与游标;无可信重叠仍替换,不通过内部任意交集保留旧内容。

  • 两端订阅 ACK 恢复要求读取 ACK 后的新页:若已有旧页在途,沿 controller 原等待队列在其结束后补读,重复恢复合并,停用/换代不补读;不 reset 展开集合,不新增队列或状态字段。成功页沿原路径重发展开兴趣。Mobile 页面及后台重建、Desktop 订阅恢复均接入,包括尚未 ready 的首屏。

  • liveMessageIds 校验与 Host 投影共用既有 2000 行扫描上限,生成的引用可由详情端接受;单页字节预算与逐条归属检查保持,超限输入仍拒绝。

  • Mobile 删除成功回调与入站删除推送统一经 removeMessages:先移除原始镜像,再沿既有 resetRemoteHistoryViews 作废投影与旧代请求;移除 route 中重复的删除 reset。即使推送丢失、内存 raw 中没有被删行,可靠成功返回也会清除旧投影,其他设备同名任务不受影响。

  • 磁盘快照只清除摘要/预览与消息 agentMeta 顶层的运行中标志,递归覆盖内层项目和完整详情;正文、工具输入、卡片及嵌套业务元数据中的同名字段保持原值,源快照不修改。原有预算检查仍先于复制与序列化。

  • 思考快照跨普通 turn 收尾保留,直到原持久化队列成功写入;写入失败仍可读取。账号失效、clear、会话清理及 Pi 历史分支重投影成功后沿同一显式清理入口回收,redacted 仍立即撤回。旧写回调不能清除替代快照,不新增缓存、重试或状态字段。

  • 历史投影扫描最多累计 2,000 条源行、8 MiB 序列化内容,运行中的来源也计入;超预算不拆分工作摘要,而是使用既有原始窗口读取。Host 作废当前订阅身份、恢复旧推送;双端沿既有同步入口补齐原始镜像,覆盖首屏、旧页、定位及自动刷新。降级沿现有错误状态保持到 reset,不新增部分摘要、数据库聚合或缓存管理器。

  • Host 在成功读取首屏后登记全部运行中工作组;任一运行组展开即可沿既有会话级路径接收详情,全部收起时恢复过滤。新页替换运行组列表,旧订阅迟到结果仍不能复活状态;无新增 wire 字段或逐事件分组机制。

  • ask/plan 决策通过原持久化队列写入后,沿现有 owner scope 广播权威消息行,两端原 created 通知刷新投影;不再依赖下一轮活动消除旧待处理卡片。

  • 搜索/深链沿用原 UI 的折叠摘要定位,目标范围读取不修改内外层展开记忆,也不订阅隐藏活动。停用、换源或范围 revision/端点变化作废成功和失败;当前完整缓存优先于预览,同 revision 的不完整后台分页不覆盖完整范围。

  • 历史读取复用现有 IPC 错误码:参数/游标越界 INVALID_PARAMS、消失的范围 NOT_FOUND、扫描不前进 INTERNAL,无新协议或恢复机制。

  • Desktop/Mobile 共用的交接记录仅保存当前视图已观察到的 assistant 身份,不复制正文、不持久化。首次历史加载期间保留交接;原始镜像移除消息、历史 reset 或更换视图会清理;新历史包含已落定的同 ID 行时释放。只有这些明确身份可绕过历史尾部时间门,普通缓存行维持原规则。

  • 删除、清空和归档是历史窗口的重置边界:清除已加载旧页与详情,并作废旧代响应;清空同时清理原始消息镜像,防止刷新失败时回退显示旧内容。普通元数据更新不重置。空详情兴趣沿原通知队列发送,不再被视图尚未 ready 拦下。Desktop 删除复用既有删除 reducer,clear 复用 reloadMessages;Mobile 复用已有窗口清理和 controller reset。

  • 与主干连接恢复诊断兼容:历史读取返回是否实际接受快照,刷新后已过期、后台或换源的读取记录为失效;旧 Host 降级仍按原 store 提交结果记录。保留主干推送失败汇总、session patch 清理和本 PR 的历史失效通知清理,不扩大断链恢复范围。

  • Desktop 远程历史保留当前 store 内尚未落库或被插件拦截的用户气泡,按原消息顺序合入,不受两端时钟差影响。已有 source ID 与正文优先;普通持久用户行不作为临时气泡补回,清理和回退仍由原 store 管理。Mobile 沿用独立的待发送气泡路径。

  • Mobile 前后台监听器随当前设备/任务重新绑定;换源后进入后台停止新来源的详情读取,回前台恢复新来源。旧分页完成只有在 controller 仍为当前登记且 active 时才更新错误提示,防止旧来源覆盖新页面。

  • Host 保管原始完整历史;共享 controller 保管可见投影、展开集合、详情与分页。平台原有 builder 负责最终层级。新增轻量子项和预览引用复用现有详情端点,不增加独立缓存、重试管理器或尾读接口。

  • 有效页请求按代际和方向合并;旧代成功、失败、超时、取消和迟到结果均不能回填新代。展开详情自动续读,收起、离开、后台与重置停止后续读取。失败保留可用内容并提供重试。

  • 详情按 revision 更新;当前源行优先于旧详情缓存,缓存按当前引用首尾裁剪,防止媒体结果出现后分组拆分时重复或吞掉内容。含可见内容的混合工具段及真正子 Agent 树保留源行,由原 builder 处理,优先保持原有分组语义。

  • 控制端换源后创建对应 Host 的 controller,所有旧页面/详情回调失效;原有意图队列随同一登记槽交接,保证旧展开、旧释放、新展开的顺序,覆盖 A→B→A、移除后重建和旧意图失败。新 Host 的页读取不等待旧 Host 的意图确认。

  • Host 过滤仅属于当前控制连接的当前订阅,首次成功读取新接口才启用;断链、取消订阅、撤权和重新建链清理旧登记,迟到操作不污染新连接。未升级控制端保持完整旧路径。

  • 计划发现沿用 Desktop 原空闲发现预算;首拉接管后清理临时冷缓存,回收或移除的 controller 不再补读或回填。Mobile 不新增后台计划扫描。

怎么验证的

自动验证

  • 中断告警补充:Host 序列化/启动边界及 Desktop 单行和折叠状态共 58 项定向测试通过;Mobile 状态 9 项、共享兼容/分组代次 2 项通过。Desktop/Mobile typecheck 通过,maker-shared 无 typecheck script。相关单测门禁通过(清除继承的区域与 NODE_ENV 变量)。

  • 状态与已读对齐(f5caf4c7f):根 pnpm test:unit:related 最终全部相关包通过(Desktop、Mobile、device-link、lizi-mcps、maker-core、maker-shared、orca-workflow);Desktop 与 Mobile typecheck 通过,maker-shared 无 typecheck script。测试前清除 CINDY_AUTH_REGION、VITE_CINDY_AUTH_REGION、NODE_ENV。新增覆盖失败/中断与主动中止、组头展开/折叠和点击目标、远程读确认路由、同值索引不重复发布、断线迟到结果、撤销访问、抽屉响应跨端已读及轻量查询不覆盖首页绑定缓存。首次 Desktop 单项本地 WebSocket 握手出现 HTTP 426;该文件单独 14 项通过,最终整包通过,没有修改无关语音实现。未安装日常实例,双端实机与 Light/Dark 未验证。

  • 共享发送窗口(0db63417f):device-link 全包 290 项通过,覆盖 16 槽后的大响应本地等待、ACK 立即放行、18 秒慢包不重复发送、满 socket 本地排队、窗口外超时 skip、前缀淘汰和多 peer 隔离。device-link build、Mobile/Desktop typecheck、根 pnpm test:unit:related 全部通过;运行前清除继承的区域与 NODE_ENV 变量。没有安装到日常实例,也没有本次实机弱网验证。

  • 流式文字顺序:Mobile history handoff/render 18 项、Desktop remoteHistoryHandoff 3 项通过。新增用例经过真实 Mobile builder,覆盖旧临时时间、历史先到、正式推送后到三个阶段始终 A→B,流式正文优先、权威时间/行号保留及不修改输入;同时覆盖不经过 handoff 的渲染入口。双端 typecheck 和根 pnpm test:unit:related 全部相关包通过,测试前清除继承区域与 NODE_ENV 变量。复现与修复验证均为模拟集成,没有实机现场时间戳证据;未安装日常实例或做实机弱网验证。

  • ACK 与实时范围回归:共享 40 项(在途成功/失败、停用、降级、展开保留、重复请求及终态重分组前缀保留),Host 40 项(真实投影生成 101/2000 条 live 引用后完整读取,2001 拒绝),Mobile 实际恢复回调 18 项、Desktop hook/store 37 项通过。Host 满页停止和扫描保护 15 项通过。根 pnpm test:unit:related、双端 typecheck 均通过;接入 0db63417f 后统一 runner 完整通过(运行前清除继承区域变量,GATE_EXIT=0)。29 个提交 DCO 检查通过。

  • 列表透明度交接:messageFollowGesture、messageListVirtualization、messageTailFollower 共 74 项通过,新增测试执行生产揭示回调及透明度表达式,模拟 stop 迟到写回 0、键盘高度变化后保持 1,以及新任务重新使用首次定位值。Mobile typecheck、根 pnpm test:unit:related 全部相关包通过,清除继承区域与 NODE_ENV 变量后执行。测试模拟原生迟到值,不代表实际 RN 原生解绑或实机键盘验证;未安装日常实例,Light/Dark 实机未验证。遵循 DESIGN.md §14.4,沿用现有样式,无颜色或布局变化。

  • 取消磁盘容量淘汰:historyDiskStore、remoteMediaDiskCache、sentAttachmentThumbStore 定向 46 项通过,覆盖超过旧总量仍保留、重建索引读取、65 张图片及 30 天旧副本保留、失败和孤儿清理。大容量通过注入文件元数据验证,未实际写入 GiB 文件。Mobile typecheck 和根 pnpm test:unit:related 全部相关包通过;清除继承的 CINDY_AUTH_REGION、VITE_CINDY_AUTH_REGION、NODE_ENV 后执行。未安装日常实例或进行实机验证。

  • 删除可靠返回与推送的真实 store/controller 回归覆盖 ready/初始页迟到、同名任务设备隔离与随后正确刷新;三文件 283 项通过。原 route 提取测试的删除场景由该真实路径覆盖,clear/archive 场景保留。Mobile 类型检查、相关全包与清除区域环境变量后的统一全量门禁均通过(GATE_EXIT=0)。

  • 磁盘字段保真回归:Mobile 磁盘缓存、存储和重进共 38 项通过;覆盖嵌套工作组、预览、完整详情、业务同名字段及源对象不变。Mobile 类型检查、相关全包门禁及清除区域环境变量后的统一全量门禁均通过(GATE_EXIT=0)。

  • 思考快照交接:持久化回归 130 项通过,包含延迟写入跨终态 reset、失败保留与 owner/clear/session/tree 清理、旧写迟到不删除替代快照及 redacted 立即撤回。独立只读复核通过;根相关门禁、Desktop typecheck 和清除区域变量后的统一全量 runner 均通过(GATE_EXIT=0)。

  • 主干冲突同步:重基到 10928e638,仅手工合并 Mobile 测试依赖与并列用例,保留主干 Debug off/on/failed 和本 PR 历史定位显示回归。定向 43 项、双端 typecheck、21 个提交 DCO 与统一全量 runner(GATE_EXIT=0)通过;根 pnpm test:unit:related 复跑全部相关包通过。首次 related 的 iOS Simulator 文件锁单项失败,相关代码与主干相同,同一最终代码的全量 Desktop 随后完整通过;未修改该无关实现。临时基线单项因依赖加载失败,未获得有效复现结论。

  • 缓存边界与 Windows 修复:Mobile 磁盘/恢复/重进 37 项,Desktop LF/CRLF 回调 8 项通过;相关全包、双端 typecheck、统一全量 runner 完整通过(GATE_EXIT=0),运行前清除继承区域变量。Windows 原失败已定位为本 PR 新测试的换行提取问题,未修改生产 Windows 行为。

  • 1 GiB 磁盘缓存:historyDiskStore、remoteHistoryDiskCache、remoteHistoryReentry 共 32 项通过;覆盖重建 store 后读取、UTF-8 字节预算和 LRU、超大单项、账号隔离、回退后的迟到写入、损坏缓存、删除/索引写入失败、磁盘与网络乱序及停用/reset。Mobile typecheck、根 pnpm test:unit:related 全部相关包通过,执行前清除继承的区域与 NODE_ENV 变量。合入并行修复 2b85eb846 后再跑 Mobile 四文件 41 项、共享历史 34 项及 Mobile typecheck 均通过。尚未安装到日常实例,未做实际 1 GiB 数据量或实机重启验证。

  • 扫描预算 Host 23 项、共享历史 34 项、实际双端降级回调 4 项通过;覆盖无边界超长轮次、字节与 live 预算、旧订阅迟到、首屏/旧页/刷新、停用及旧 Host 不触发循环。相关全包与双端类型通过;页面接线断言补入 requestSync 后 9 项通过。统一全量门禁首次因锁排队超时退出(75,单测未开跑),确认结束后重新排队完整通过(GATE_EXIT=0)。

  • iOS 提前预取(0f401f464):pnpm --filter mobile exec vitest run src/__tests__/messageHistoryAutofillCallbacks.test.ts src/__tests__/messageListVirtualization.test.ts src/__tests__/messageFollowGesture.test.ts 58 项通过,新增实际生产回调测试覆盖拖动/惯性/触摸期间启动、重复调用合并、取消后不启动及 Android 的手势/MVCP 提交屏障。Mobile typecheck 与根 pnpm test:unit:related 全部相关包通过;运行前清除 CINDY_AUTH_REGIONVITE_CINDY_AUTH_REGIONNODE_ENV。未安装到日常版本,无本次实机滚动/弱网验证,不能保证任意网络下无等待。

  • 历史消息直接显示(7ed5b83b7):pnpm --filter mobile exec vitest run src/__tests__/messageTailFollower.test.ts src/__tests__/messageFollowGesture.test.ts src/__tests__/messageListVirtualization.test.ts 共 70 项通过;Mobile typecheck、scope/smoke 和根 pnpm test:unit:related 全部相关包通过。测试前清除 CINDY_AUTH_REGIONVITE_CINDY_AUTH_REGIONNODE_ENV。覆盖真实定位后提前显示、重试耗尽不误报、用户拖动、reset 和重复通知。未安装到手机,未做本次修改的实机目检。

  • 多运行组推送回归 49 项通过,覆盖仅展开后续组、组列表替换、收起、空运行组、旧端和实际 thinking delta 转发;Desktop typecheck、相关全包门禁和清除区域环境变量后的全量统一 runner 均通过(GATE_EXIT=0)。

  • 重进与位置稳定性修复(5bb859454):新增 15 条回归通过,包括运行中任务每次刷新通知的完整渲染内容/列表标识稳定、缓存重进、迟到响应、后台回收、账号/设备清理、回退、删除/归档和容量边界。Mobile 相关 4 个测试文件合计 279 项通过(末次新增运行中场景后单独重跑该文件 15 项通过)。两端 typecheck、Mobile scope/smoke、最终同一工作区的 pnpm test:unit:related 全部相关包通过。初轮 Desktop 7 项失败发生在另一轮接口/测试修改过程中,当前文件重跑 8 项通过,最终整轮 Desktop 也通过。本次未安装手机或重启日常实例,尚无修改后的实机滚动/弱网验证。

  • 本轮三类审查修复:Host 读取错误码 11 项、交互持久化/权威行广播 124 项、共享历史与定位 31 项定向通过;包括已挂载/旧页挂载折叠组、预览外定位、失效后迟到成功/失败、完整范围与部分分页交错。相关全包门禁与双端 typecheck 均通过;清除区域环境变量后,全量统一 runner 完整通过(GATE_EXIT=0)。此前一次因内部排队超时退出、未执行单测;确认旧进程结束后重新排队,本次完整通过。

  • 全量 pnpm test:unit 经统一 runner 执行,补齐破坏性历史推送与详情兴趣清理后完整通过,GATE_EXIT=0;运行前清除 CINDY_AUTH_REGIONVITE_CINDY_AUTH_REGION。首轮 Desktop 进程出现 SIGSEGV、无断言失败,经统一 runner 自动复跑通过。

  • 根目录 pnpm test:unit:related:本轮全部相关包通过。

  • Desktop 控制端场景 33 项、Mobile 实际回调场景 18 项通过:删除已翻到的旧页、远程 clear、归档停止、初始旧页迟到,以及普通元数据不重置。共享 23 项含 active/inactive reset 在替代页未就绪前发出空详情兴趣。

  • 直接执行合并后的实际历史读取回调,验证成功、后台、换源、过期、读取失败、旧 Host 降级、原始路径及 store 拒绝提交,共 10 条路径通过。

  • 共享历史投影/渲染回归 23 项通过,包含待发送与被拦截气泡、时钟偏差、原顺序、落库正文优先与回退/清除不复活。

  • pnpm --filter desktop --filter mobile --filter @cindy/maker-shared run --if-present typecheck 通过;maker-shared 没有 typecheck script。

  • 执行实际 AppState effect 验证 A→B 后后台停止 B、前台恢复 B 和监听器解绑;实际分页回调验证当前来源正常更新、换源和停用后丢弃迟到更新,均通过。

  • 折叠回归 13 项:层级与稳定标识、纯动作、空思考、迟到工具结果、媒体、真实子 Agent、内外层独立展开、自动续读和 Desktop 有界预览。

  • Desktop 控制端、展开状态和推送定向回归 55 项;包含换源、ABA、旧意图失败与相同组件 key 更换 controller。

  • Host invoke 安全回归 40 项;含嵌套历史的敏感字段过滤、payload 上限及不修改原始行。

  • 本地真实 171 行历史分别比较折叠结构与完整加载后的内容树,均与原 builder 一致;原始数据未提交或上传。

  • 现有共享并发、Host 详情读取、旧端降级、重连、冷缓存和计划发现测试继续由相关及全量门禁覆盖。

  • git diff --check 通过。

  • 上一提交 379caff5 的 Linux、Windows、verify 和 Git 集成 CI 全部通过;本轮修复发布后需重新等待 CI。

  • 流式交接补充验证:Mobile 交接与折叠定向测试 16 项通过,覆盖首次历史未到、生成结束、持久化推送、旧历史页返回、最终历史纠正与去重、删除/回退和较早的时间锚。Mobile typecheck 及 Mobile scope/smoke 通过;maker-shared 没有 typecheck 脚本。额外执行 build:原历史测试的类型推断错误已修复;剩余 7 项错误在干净 origin/main 源码副本上同样复现(brandIdentity、composerPalette 测试与 workRunGrouping 的 ES lib 配置),没有改动这些无关文件,不能宣称 build 全绿。相关门禁在新增交接修改后重新运行,Desktop、Mobile、device-link、lizi-mcps、maker-core、maker-shared、orca-workflow 全部通过。

  • 共享交接补充验证:Desktop 实际 buildRenderItems/groupWorkRuns + 共享 controller/renderer 集成测试 3 项、Mobile 交接与折叠测试 16 项通过。覆盖首屏加载期间结束、旧页迟到、持久化改 ID、clientId 接管去重、删除/reset/换源不复活,以及 Desktop 待发送用户气泡保留。两端没有分别新增缓存、计时器、重试或传输协议。

  • CI 台账同步:新增 projectScheduleSidebarIndex.ts 后重新生成设计台账,仅更新 GENERATED 文件清单,人工状态及产品代码不变。修复 verify-checks、Git 集成和 Windows 预检共同报告的台账过期错误。定向台账测试与双端类型检查通过;相关单测全部通过,统一全量门禁 GATE_EXIT=0

  • 实时详情落库交接:共享渲染器的首尾边界仅对 history-live: 引用按 clientId 兼容持久消息 ID,普通数据库 ID 仍严格匹配。完整详情和预览共用该判据,不改 Host 返回身份、原始消息或展开状态。44 项共享回归通过,覆盖纯实时、混合、预览、前后缓存裁剪与普通 ID 不误匹配;独立只读复核无新增问题。同步主干时仅设计台账发生冲突,沿生成器保留最新主干与 PR 的文件清单。双端类型检查与统一全量门禁 GATE_EXIT=0 通过,相关单测全部通过。

  • 就绪切换的推送衔接:Host 在已有历史登记尚未 ready 时也沿原 history notice 通知,仍完整透传 raw;过滤继续严格等 ready。两端原 invalidate 等在途页结束后补读,复用既有通知合并和 pagePromise,不新增状态字段、队列、wire 或 consumer 分支。52 项 Host 回归含真实 controller 两种通知/结果先后顺序、pending raw、ready 折叠 delta 静默、旧端和断链/退订/降级不复活。Desktop 类型检查、相关单测及统一全量门禁 GATE_EXIT=0 通过。故障半径限该 peer/session 的既有登记,不重连共享链路;回退此修改恢复原通知时机。

手工验证

完成代码和异步生命周期自审。交接身份记录已获需求方明确确认。本轮未启动开发版或操作实机。

未执行的验证

手机/桌面真实远程连接、弱网耗时、超长详情滚动表现、Light/Dark 实机目检未完成。没有 Metro 归属或 __DEV__ build label 证据。自动化结构对比不等于实机体验验收。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:历史分页与运行中详情的异步展示。

影响与回滚

  • 中断告警字段为追加可选元数据:旧 Host 缺失时保持旧显示,旧控制端忽略它;要获得本次一致体验需升级 Host 与控制端。沿已有 sessions patch 同步,不改数据库 schema、ACK、权限或 relay 协议。未安装日常实例,尚无本次修复后的实机重启/弱网和双模式验证。此补充只处理现代中断标记,不宣称覆盖独立的历史 error-tail 告警来源。

  • 状态对齐故障边界:单设备自动化索引不可用时保留已有显示,不影响任务历史读取或其他设备;旧 Host 不支持已有轻量索引时不使 bootstrap 失败。首页完整绑定索引与抽屉轻量运行状态用途不同,不能互相覆盖。回退本次状态提交恢复原判定和 1.2 秒停留。未改远程自动化的编辑/暂停/删除入口,未安装日常实例、未做实机双端或 Light/Dark 验收。

  • 发送窗口故障半径:触发问题是单 peer 的有序接收积压;限制与恢复仅作用该 peer,沿原 pending/ACK 推进,不重启共享 relay。多 peer 用例覆盖一方停止 ACK 时另一方仍可发送。无新 wire 字段、消息类型、状态缓存或计时器,旧可靠端沿原 ACK 兼容;回退此提交恢复原首次发送调度。后台扫描与任务列表 DTO 保留现有实现,本轮不调整字段或订阅语义。

  • 按已确认需求保留无总容量/过期淘汰;长期磁盘占用会增长。已发送附件底图位于 documentDirectory,不承诺由系统按 cache 回收,也未新增任务/账号级删除机制;手动清理仍属后续范围。不能将历史快照已有的账号/任务清理边界泛化为全部附件副本。

  • 磁盘单项使用 8 MiB 保守序列化准入预算,磁盘总量不设上限;超额跳过该份缓存,阅读与原始历史不变。普通 wire JSON 在 stringify/Map 数组化之前按字符串长度、字段和容器开销提前停止计量;离场内存计量复用同一无状态检查,避免整快照复制。预算是保守上界,部分实际不足 8 MiB 的内容也可能不缓存。已知不可用状态及读取期间发生降级时均禁止恢复旧磁盘投影;保留原代际、账号与清理边界。

  • Mobile 历史正文保存在应用私有 cache 目录,普通重启可复用,系统存储紧张时可能回收。不设置磁盘总容量上限;原子替换期间的临时文件及索引也会占用空间。缓存失败降级为在线读取;回退代码停止读写此目录,系统可继续回收。缓存只影响展示,不替代服务端授权或同步确认。

  • 超大轮次超过投影扫描预算时退回旧窗口体验,不承诺这类历史获得完整可见分页优化。预算限制累计扫描与处理量;单次数据库仍按原接口最多返回 100 行,单条/单批巨型正文可能瞬时超过字节预算,不能将其宣称为进程总内存上限。完整历史、详情和模型上下文不变。

  • 影响范围:新版远程控制端与 Host 的历史读取和活动推送。新增接口使用既有隧道,不新增 relay kind;不改原始历史、模型上下文与授权语义。存量插件影响:无。

  • 回滚 / 降级方式:回退本 PR 恢复原消息读取和推送;不支持新接口的旧 Host 自动走旧路径,旧控制端不启用过滤。无需数据库迁移或重新登录。

  • 性能边界:超大正文保留现有 wire 压缩兜底;展开超长工作段会自动读取完整详情,revision 改变时重读。可见混合工具段及真正子 Agent 树保留原始读取,实际弱网性能仍待测量。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s
  • UI 改动已在「UI 变化」注明引用的设计规范章节
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档(行为、状态模型及兼容边界见本描述)
  • 已确认测试结果或说明未执行原因

@dashhuang
dashhuang requested a review from a team as a code owner September 7, 2026 22:41
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 7, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-09T00:21:35.863211Z 952d8b8 New commits
🔒 Security Review 🔄 Running since 2026-09-09T00:12:15.884134Z 952d8b8 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Sep 7, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 为远程会话历史引入按可见内容分页和按需详情读取,并根据各控制端的展开状态压缩实时推送。

  • Host 将思考及普通工具活动投影为轻量工作摘要,并提供分页详情接口。
  • Desktop 与 Mobile 共用历史控制器,管理分页、展开意图、详情缓存、失效刷新和页面生命周期。
  • Device Link 新增历史接口及失效通知,同时为旧 Host 和旧控制端保留兼容路径。
  • 发现一处分页 single-flight 问题:普通刷新可能吞掉同时发生的“加载更早”意图。

Confidence Score: 4/5

PR 整体可合并,但并发刷新期间“加载更早”可能无效果,建议修复该非阻断分页交互问题。

历史投影、详情读取、协议兼容及生命周期路径整体一致;唯一确认的问题是共享 pagePromise 未保留并发旧页读取意图,会使一次分页操作被静默吞掉。

Files Needing Attention: packages/maker-shared/src/historyViewController.ts

Important Files Changed

Filename Overview
packages/maker-shared/src/historyViewController.ts 新增共享历史分页、展开详情、缓存及生命周期控制器;普通刷新会吞掉并发的旧页请求。
apps/desktop/src/main/localDb/ipc/historyViewReader.ts 新增基于可见项目和字节预算的 Host 历史投影及详情分页读取。
apps/desktop/src/main/localDb/ipc/messages.ts 注册历史视图、展开意图和工作详情 IPC,并校验会话范围锚点。
apps/desktop/src/main/device-link/dispatch.ts 根据每个控制端的历史视图状态抑制详情推送,并合并发送失效通知。
packages/maker-shared/src/historyViewProjection.ts 将思考和可延迟工具活动折叠成稳定、可恢复的工作摘要。
apps/desktop/src/renderer/lib/makerChatStore.ts 为远程 Desktop 会话接入共享历史控制器、兼容降级和定位流程。
apps/mobile/app/sessions/[sessionId].tsx Mobile 会话页切换到投影历史渲染,并接入后台暂停、分页和消息定位。
apps/mobile/src/session/remoteHistoryView.ts 新增按设备和会话隔离的 Mobile 历史控制器注册及 React 订阅封装。

Sequence Diagram

sequenceDiagram
    participant C as Desktop/Mobile 控制端
    participant V as HistoryViewController
    participant H as 被控 Desktop Host
    participant DB as SQLite 历史
    C->>V: 打开远程会话
    V->>H: messages:view
    H->>DB: 按原始游标扫描
    H-->>V: 正文 + 工作摘要
    V-->>C: 渲染可见历史
    C->>V: 展开工作摘要
    V->>H: messages:view-intent
    V->>H: messages:work-details
    H->>DB: 分页读取完整范围
    H-->>V: 详情页
    V-->>C: 自动续读并渲染
    H-->>V: history-view-changed
    V->>H: 合并后的刷新请求
Loading
Prompt To Fix All With AI
### Issue 1
packages/maker-shared/src/historyViewController.ts:62-68
**旧页请求被吞掉**

普通刷新或失效刷新仍在进行时,用户触发的“加载更早”会直接复用现有 `pagePromise`,因此不会执行 `older=true` 的旧页读取。调用方在该 Promise 结束后仍按成功处理,但列表没有增加任何旧内容,用户只能再次操作。建议保留这一分页意图,并在当前请求完成后执行。

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (1): Last reviewed commit: "perf(device-link): 按可见内容分页并按需读取工作详情" | Re-trigger Greptile

Comment thread packages/maker-shared/src/historyViewController.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bda60c1d29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/mobile/src/device-link/DeviceLinkContext.tsx Outdated
Comment thread packages/maker-shared/src/historyViewProjection.ts Outdated
@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) labels Sep 7, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

命中 UI 路径(apps/desktop/src/renderer/components/chat/MessageStream.tsx / apps/desktop/src/renderer/components/chat/WorkGroupBlock.tsx / apps/desktop/src/renderer/components/chat/messageWorkGroups.ts 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e7c1d7c74f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/maker-shared/src/historyViewController.ts Outdated
Comment thread packages/maker-shared/src/historyViewRender.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 还有 2 条 review conversation 没 resolve(packages/maker-shared/src/historyViewController.ts / packages/maker-shared/src/historyViewRender.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 76cfd360d1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/lib/makerChatStore.ts Outdated
@dashhuang
dashhuang force-pushed the dash/remote-history-on-demand branch from 76cfd36 to 6a18b1c Compare September 8, 2026 01:22

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6a18b1c4f9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/lib/makerChatStore.ts
Comment thread apps/desktop/src/renderer/lib/makerChatStore.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2f8a9e9420

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/main/device-link/subscriptions.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1b7ea18ec2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/renderer/lib/makerChatStore.ts Outdated
@MagicLizi

Copy link
Copy Markdown
Contributor

@dashhuang 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/renderer/lib/makerChatStore.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。

如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。

@MagicLizi MagicLizi added status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) and removed status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) labels Sep 8, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fee8b97497

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/mobile/app/sessions/[sessionId].tsx
@dashhuang
dashhuang force-pushed the dash/remote-history-on-demand branch from fee8b97 to 8c4ec31 Compare September 8, 2026 05:36

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8c4ec31a8b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/maker-shared/src/historyViewRender.ts Outdated
@dashhuang
dashhuang force-pushed the dash/remote-history-on-demand branch 2 times, most recently from 4ccd274 to 379caff Compare September 8, 2026 08:14

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 379caff501

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/mobile/src/device-link/DeviceLinkContext.tsx Outdated
@MagicLizi MagicLizi added the status:ci-running CI 还在跑(review-pr 自动维护,仅展示) label Sep 8, 2026
@MagicLizi MagicLizi added touches:security 改动碰到安全边界(review-pr 自动维护,仅展示) and removed status:ci-running CI 还在跑(review-pr 自动维护,仅展示) labels Sep 8, 2026
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
@dashhuang
dashhuang force-pushed the dash/remote-history-on-demand branch from e1befcf to 6b43c9b Compare September 8, 2026 23:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b43c9baa5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/main/localDb/ipc/messages.ts
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a4e058e08

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

return page;
};
if (ref.liveMessageIds?.length) {
const live = await Promise.all(ref.liveMessageIds.map((id) => deps.anchor(sessionId, id)));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 按页解析实时详情引用

当运行中的工作组包含数百至 2000 个 liveMessageIds,且详情超过 256 KiB 需要多页读取时,这里会在每一页开始前对全部 ID 调用 anchor,随后 finalize 又对全部引用重复校验;若部分 thinking 已经落库,每页会触发数千次 SQLite 查询,尚未落库时也会反复线性扫描完整 live 数组。最多约 8 MiB 的范围会把该成本乘以几十页,展开一次工作详情就可能明显阻塞 Desktop main 线程;应只解析当前页需要的实时引用,并将整段有效性检查收敛为有界校验。

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 952d8b886c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

entry.consumers++;
entry.view.setActive(active);
const authority = historyDiskAuthority(entry.deviceId, entry.sessionId);
void entry.view.restoreCachedView(() => readHistoryDisk(authority));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 在能力降级时淘汰旧磁盘投影

当任务已有磁盘投影、随后因扫描超限或旧 Host 缺少通道而降级到原始历史时,当前 controller 虽会拒绝恢复缓存,但并不会清除这份磁盘数据;它被 8 项/4 MiB 内存 LRU 淘汰后,再次进入会创建一个 error=null 的新 controller,并由这里恢复旧投影。若此时 Host 离线或最新页只得到瞬态错误,恢复后的 ready: true 会一直让 SessionScreen 优先显示旧投影,遮住降级期间已同步的较新原始消息。相较此前同类修复,新的证据是该检查只绑定当前 controller,LRU 重建会丢失 unavailable 状态而磁盘条目仍然存在;应在能力降级时清盘或持久化不可恢复代际。

AGENTS.md reference: AGENTS.md:L136-L139

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status:awaiting-bot-review 等外部审查机器人表态(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:large-diff 改动量较大(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) touches:security 改动碰到安全边界(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants