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

65 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# REA CSS 正文采集修复
> 后续已升级本地副本至 `6.5.0-visual.1`,补齐 PNG、计算布局和 SVG 采集,开始实际接入对话组件;见 [对话样式与调试画面采集](对话样式实对齐-2026-10-15.md)。下文保留 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`。
## 修复入口与复用
```powershell
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。