6.4 KiB
对话区域:图表、图片与文件
本轮将 REA 已取得的 Mermaid、Markdown 图片、路径检测与点击处理还原为工程模块,接入实际消息渲染。图表不再只有代码回退,图片能够打开预览,文件标题和行内路径能够调用本地文件预览。当前对话区域仍未完成全部 1:1 验收。
原版依据
原版为 WorkBuddy 5.8.2。所有原版实现仍只通过 REA 查看;本轮在既有 REA runtime Evidence ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb 的完整导出上阅读、校验并进行 AST 分拆,没有直接读取原版安装文件,也没有执行捕获的 bundle。
主发布脚本 renderer/assets/src-DbE1_mgM.js,SHA-256 6c6ce63c93854783270e855572797d75e536e3b8d4548410e31fe9d147e1feb4。下表区间为 UTF-16、右端不含。
| 证据范围 | 工程落点 |
|---|---|
图片 URL 校验/解析 [721231,721551),MarkdownImage [721564,722288) |
workbuddy/images/image-url.ts、MarkdownImage.tsx |
路径点击 [722904,723374),路径检测 [723580,724687),缓存/解析 [724997,726485),InlineCode [727268,728626) |
workbuddy/paths/ |
SVG/PNG 导出 [731747,733169) |
workbuddy/mermaid/svg.ts |
MermaidToolbar [783052,784820)、渲染器 [787685,788850)、render hook [790284,792838)、pan/zoom [793017,794596)、组件 [795642,798306) |
workbuddy/mermaid/ |
activation [785013,785362)、可见性 [789143,789531)、宽度发布 [804434,805229) |
mermaid/visibility.ts、width.ts |
图片单文件查看器来自同次 REA 导出的 image-preview-component-BgOcW3Xe.js,SHA-256 6720317ba018215f96a87d966b08c0d0aa74c26d2298d5fd95f71e8ff2e04e59,提供适应/原始大小、缩放、拖动、镜像、左转、关闭和下载控件依据。保留的 339 份脚本中未找到 URL 列表图片查看器的完整实现;上一张/下一张及键盘切换是明确的本地适配。
npm run recover:chat-reference 的派生输出现有 541 个声明片段、164 个赋值定义;其输入必须是既有 REA 导出,不连接原版。本轮尝试 REA ASAR extraction 因缺少 unpacked companion cli/node_modules/koffi/build/koffi/darwin_arm64/koffi.node 失败,未用其他采集渠道绕过。
接入行为
- Mermaid:恢复源码清理、串行渲染队列、64 项/8 MiB 缓存、取消与过期结果处理、SVG ID 重映射、代码/图表标签、明暗主题、缩放/适应、SVG/PNG 导出,以及 300 ms 加载淡出。可见性观察保留 320px margin 和首次可见后保持激活;宽度首次发布或变化至少 16px,360 ms leading/trailing debounce 后由 rAF 发布。宽度相关图表保留 420 ms 重渲染等待。
- 图片:恢复异步 URL 解析、取消过期请求、加载/失败替代文字、图片顺序与点击索引。预览提供缩放、适应/原始大小、拖动、旋转、镜像、下载、Escape 与切图;切图重置变换,下载失败显示错误。
- 路径:恢复文件/目录/符号候选与
#L4-L7行号解析、显示截断、请求缓存和并发去重。点击时再次向宿主确认实际类型,更新缓存/组件状态后打开;失败变为 unknown,阻止旧路径继续打开。保留原版检测边界,例如裸src/不匹配候选;src可在宿主确认目录后高亮。 - 宿主:新增 preload/IPC 资源契约,读取工作区文件/目录和图片,提供带行号的只读预览及 native save dialog 下载。代码标题直接传递文件和行号。文件读取检查解析后真实路径;文本上限 2 MiB、图片 20 MiB、通用下载 32 MiB。下载 MIME 接受原版 SVG 导出的 charset 参数。
文件预览面板、资源 IPC、URL 列表预览及其错误反馈是 YCode 宿主适配,并不等于恢复了原版编辑器实现。图表下载菜单保留捕获代码的 hover 开启、离开关闭、click toggle 组合;首次鼠标进入后点击会关闭菜单,这是现有源码的行为,没有擅自修正为另一种交互。
验证结果
| 验证 | 结果与范围 |
|---|---|
npm run build |
类型检查与 main/preload/renderer 实际构建通过 |
npm run test:media |
Mermaid 缓存/队列/取消/清理/SVG 引用,图片 URL/索引/失败下载,23 项路径检查通过 |
npm run test:resources |
真临时目录、行号、目录、file/local-file 图片、junction 越界拒绝、HTTP 图片读取通过;加载实际 IPC 注册函数,native dialog 替身下验证取消和 SVG/PNG 文件写入;SVG MIME 含 charset |
npm run test:markdown、npm run test:recovered |
集成渲染及 5 个源码恢复套件通过,包含 402 个流式前缀和 268 次缓存复用 |
npm run test:chat、npm run test:persistence |
消息/工具输出/状态与实际 IPC 到会话文件的持久化检查通过 |
| 构建产物的离线浏览器 | 有效图表 ready、无效图表 error 后可看源码;zoom matrix 改变;主题切换;SVG 与 PNG 导出 payload(PNG 有正确文件头);第二张图片直接打开为 2/2,缩放/旋转/镜像、键盘切换重置、下载、Escape;行内路径及代码标题打开文件并高亮 4–7 行;目录项可打开文件 |
| 默认 1280×720 / 960×640 | 无页面横向溢出;小窗口图表框 594px,图片预览索引正确;测试后恢复窗口尺寸 |
离线 fixture 为 scripts/fixtures/dialogue-media.mjs,假桥不请求模型、不读写用户会话。浏览器下载验证的是导出内容送达桥接的结果,native dialog 并未由浏览器调用;实际文件写入另由 IPC 回归测试覆盖。没有重启正在运行的 WorkBuddy 或 YCode 原生窗口。
截图:.tmp/dialogue-media-2026-10-15.png、.tmp/dialogue-image-preview-2026-10-15.png,均是自有构建产物,不能当作原版对照图。
尚需继续
原版像素采集仍受 REA target_not_allowed 限制,尚无并排像素验收。Mermaid 采用固定 11.17.2、svg-pan-zoom 3.6.2,原版这两个依赖的精确版本未知;Mermaid eager/lazy 的原版配置默认值未取得,当前默认 lazy。图标、tooltip、主题 CSS、native 文件编辑/符号跳转、URL 列表查看器仍有适配差异,observer 时序只验证了实现与可见渲染结果,没有测量毫秒级一致性。
敏感信息投影、全部工具/审批/产物状态及完整对话交互仍需补齐。OMP 真实 ready/重启上下文尚未通过,沿用前轮结论。以上已实现与验证范围不能用来宣称对话区域或整个应用已经 1:1 完成。