Files
ycode/docs/对话区域-图表图片文件-2026-10-15.md

53 lines
6.4 KiB
Markdown
Raw Permalink 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 已取得的 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 完成。