Files
ycode/docs/REA-CSS采集修复-2026-10-15.md
T

6.6 KiB
Raw Blame History

REA CSS 正文采集修复

后续已升级本地副本至 6.5.0-visual.1,补齐 PNG、计算布局和 SVG 采集,开始实际接入对话组件;见 对话样式与调试画面采集。下文保留 CSS 首次修复结果,旧的问答选择器、计算样式和截图阻塞已推进解决。

当前已通过本地修复版 REA 取得 WorkBuddy 已加载的 CSS 正文。原来的阻塞是 REA 6.5.0 Electron provider 没有实现样式正文采集,而不是调试连接不可用。此结果解除当前已覆盖组件的 CSS 正文获取阻塞,不代表 YCode 界面已完成 1:1 对齐。

实测结果

  • WorkBuddy 5.8.2 / Electron 37.10.3 / Chrome 138.0.7204.251;既有端口 http://127.0.0.1:9223,页面 WorkBuddy/resources/app.asar/renderer/index.html。
  • 本地 REA 6.5.0-css.1,provider rea-cdp-electron / 1+css-local.1。这是基于已安装 6.5.0 编译模块的本地修复,不是上游正式发布版本,也不是恢复了 REA 的原始 TypeScript 工程。
  • 实际 REA Evidence:ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94,归档 .tmp/rea-css-evidence/ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94.json。
  • 观察到 65 张样式表,64 张正文读取成功,1 张因来源或 frame 范围不符排除;读取失败 0,未触发截断。64 份合计 5,946,566 UTF-8 字节,其中 63 份文件样式、1 份内联样式。
  • 导出到 .tmp/rea-css-recovered/;每份都核对 REA 文本 SHA-256、UTF-8 字节数、media type,使用 PostCSS 解析,并重新读取导出文件复验摘要。清单位于 .tmp/rea-css-recovered/manifest.json。
  • 没有导航、点击、重载 WorkBuddy,也没有执行 renderer JavaScript。

已找到的组件规则

选择器族 CSS 文件 匹配规则数
cr-tool-call src-CyXHA0IC.css 17
cr-reasoning src-CyXHA0IC.css 7
cb-plan-task-wait-icon cb-bridge-jsj-8pWS.css、src-CBaV_A3S.css 各 1
cb-plan-tool-container src-CBaV_A3S.css 38
cb-task-tool-renderer src-CBaV_A3S.css 40
artifact-content src-BPUOynUo.css 2
markdown-editor-container src-BPUOynUo.css 16

规则数按 PostCSS rule selector 包含上述字符串统计,是覆盖定位,不是组件完整性证明。对 question-floating 没有匹配选择器;变量名中出现该字符串不能当作组件样式已经定位。另已取得输入区、图片预览、编辑器与全局 token 的样式正文。

运行时正文与原包身份

与此前 REA 导出的 17 项 ASAR 样式清单比对:当前观察到其中 15 项,13 项摘要与大小完全一致、2 项不一致;其余 2 项未在本次加载样式中观察到。清单父 Evidence 为 ev_97959691fb7cabf7c41f948b08332196924fec1fa8cb71e34dbafd65d912e637,当时 ASAR SHA-256 为 035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918。本次没有重新散列整个 ASAR。

不一致文件 运行时字节数 既有 ASAR 清单字节数
main-content-core-D2cL2TEf.css 717360 717356
src-CBaV_A3S.css 912607 909372

两份仍以实际运行时正文保存,manifest 同时保留原清单的预期摘要和大小,asarComparison.status 标为 mismatch。差异原因未确定,不能宣称它们与包内原文件逐字节相同;也没有拿本地内容替换原版。未观察到的清单文件是 lightbox-shell-impl-CZr0IQzL.css 与 src-CJIPtKK-.css。

修复入口与复用

npm run rea:css:prepare
npm run test:rea-css
npm run rea:css:capture
npm run recover:css-reference

prepare-css-runtime.mjs 将已安装 REA 6.5.0 复制到 .tmp/rea-css-runtime,在副本应用受锚点校验的补丁;依赖通过只读复用的 junction 解析,代码不会写入该依赖目录。源安装位置可通过 npm run rea:css:prepare -- <绝对路径> 指定。不修改全局 REA、Codex 注册或技能;当前会话原有 REA MCP 仍是原版本,后续采集使用上述本地入口。

采集包装器只启动本地 REA 的公开 scripts/rea.mjs,先通过 REA list-electron-targets 按完整文件路径唯一选定 WorkBuddy,再调用 REA inspect-electron-page。包装器自身没有 CDP/WebSocket 实现。可显式指定其他已授权端口及页面:npm run rea:css:capture -- <loopback端点> <完整页面路径>。证据按 ID 归档,同时更新最新证据别名;导出脚本只读取 REA Evidence,不访问原版。

REA 内部新增 include_style_sources(默认 false):在选定 target session 启用 DOM/CSS,收集样式表生命周期事件,仅对获准本地 frame、regular 来源的本地文件或内联/constructed 样式调用 CSS.getStyleSheetText,沿用 REA 文本 artifact 摘要与 Evidence 生成。CLI 参数为 --include-style-sources;本地副本 MCP 的输入 schema 同步暴露该选项。限制为最多 1024 次正文请求、单份 8 MiB、合计 64 MiB,正文读取后执行字节预算检查;CSS 有独立失败/排除/截断字段,不能只看旧的 scripts/resources 完整性字段。

可审查文件:scripts/rea/prepare-css-runtime.mjs、scripts/rea/patches/CdpElectronStyles.js、scripts/rea/capture-css.mjs、scripts/rea/export-css-reference.mjs。副本里的 css-repair-manifest.json 保存 11 个变更模块的原始/修改摘要,css-repair-baseline/ 保存对应原模块。.tmp 中的运行时和证据应保留;删除副本后可以重新 prepare,但删除 Evidence 会失去此次观察记录。

验证与剩余范围

npm run test:rea-css 已通过:真实修复模块配合隔离 mock 协议测试来源/frame/session 过滤、默认不开启、移除事件、读取错误和字节/数量预算;验证输入/输出 schema 与实际 Evidence 保留正文;通过公开 launcher 启动真实 MCP 进程验证版本、工具列表和 CSS 参数;最后检查 11 个本地模块摘要及对应全局原文件未改变。测试只用自有临时 fixture,不采集原版。

另外已通过公开 REA CLI 真实采集 WorkBuddy,并完成 64 份文件的导出校验。本轮没有修改 YCode 产品组件,所以不以应用构建代替采集验证。

仍需后续单独处理:未加载/未归属的样式、两个摘要差异的原因、问答组件选择器定位、字体资源及最终计算样式、同状态截图和动效对照。当前 CSS 可以作为后续组件源码级对齐的依据;仍需连同原版 DOM、变量、资源路径和组件行为集成并验收,不能只全局导入便宣称 1:1。