10 KiB
对话区域八类对齐:实现、验证与未决项
后续源码级还原、富消息复制、原版 SVG/中文文案与 Artifact/Diff 的最新进展见 源码级续对齐。下表保留本轮基线,后续已修复项以续对齐记录为准。
CSS 采集更新:已通过本地 REA 修复取得 64 份已加载样式正文,当前组件 CSS 获取阻塞已解除;13 份与既有 ASAR 清单完全一致,2 份存在差异。详见 REA CSS 采集修复。此更新不表示下表八类已经完成样式集成或像素验收。
用户目标仍是 WorkBuddy 的视觉、交互和功能 1:1。本轮已把原先缺少的消息类型、组件入口和宿主回调接入工程;八类尚未通过完整 1:1 验收。源码契约恢复、YCode 功能联调与原版像素等价是不同结论。
原版证据与采集边界
- WorkBuddy 5.8.2,Electron 37.10.3;ASAR SHA-256:
035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918。 - 原版业务实现使用 REA 已导出的脚本,Evidence:
ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb。本地解析、格式化和恢复这些导出内容,没有执行原版脚本。 src-DbE1_mgM.js包含工具宿主、注册表、通用壳、TodoWrite、问答及 ExitPlanMode;src-0FGg1seX.js包含 QuestionFloating、审批、计划、任务和输入实现;contexts-BMeWSUHk.js包含复制、用户消息动作、助手 footer 与语音状态逻辑。- 三份基础 CSS 已经 REA 提取,并与当前 ASAR 清单匹配,Evidence:
ev_267e2188e816796acee76650153ab5a1c1f902e3a761d686979d2fe9926eed07、ev_97959691fb7cabf7c41f948b08332196924fec1fa8cb71e34dbafd65d912e637。这些文件不足以覆盖新的对话组件样式。 - 当前
extract_artifact只能提取完整包,因缺失外平台 unpacked 成员而失败;Electron 观察对组件资源存在范围过滤,截图入口也未获得可用原版对照。没有制造缺失成员、改写 REA 或使用其他渠道采集原版。 - 已将视觉缺口登记为 REA 未决项
unk_7501f666de6716fa984de8a3135164da05d580ac8aa523e2770460329c892b39,变更 Evidence:ev_4027b93aa36ea7c54fa3fa1e27fb3ff83a4e4a77e2e47f91aec0961e792f5131。
八类当前状态
| 类别 | 本轮工程实现与验证 | 完整 1:1 尚缺的内容 |
|---|---|---|
| 1. 字体、间距、图标、提示与动效 | 延续 115 项已核验 token 和六档字体覆盖;输入区、消息动作、分组使用统一变量;复制/编辑图标路径来自 REA 导出。输入框自动增高、运行时可继续写草稿,目录和权限位于底部。 | 新组件 CSS、全部原版图标、tooltip 浮层、hover 和动效没有完整样式/像素证据;部分当前样式与文字是本地适配。 |
| 2. 专用工具卡片 | 根据捕获的 49 项注册信息恢复分发,覆盖命令、读写编辑、列表/Glob/Grep、代码与工具搜索、网页、已知 MCP、技能、计划、任务、问题及未知工具。保留结构化 result 与完整 output;结构化摘要不能覆盖原文。恢复 TodoWrite 专用步骤视图,消除新消息重复计划卡。 | 动态 MCP 名称、原版完整 diff/编辑器、全部结果细节和像素样式仍不等价;分发覆盖不代表对应云端工具已经实现。 |
| 3. 审批与问答 | QuestionFloating 的默认单选、多选、自定义、分页、跳过、提交与历史答案;审批选项和 pending/responding/answered/rejected/cancelled/error;宿主校验 run/id,拒绝过期、重复或无效提交。回答/审批后工具继续,取消时结束等待。 | WorkBuddy ACP、额度/高信用审批等服务端协议与真实服务结果尚未复现;当前有可用的 YCode 宿主桥接。 |
| 4. 思考、计划、任务与产物 | thinking 增量与终态;PlanCreate/PlanUpdate/TodoWrite/Task/TaskOutput;计划查看、任务点击、下载和执行入口;任务审批接入现有 broker。ExitPlanMode 保留 session/id 去重及未落盘 content,直接打开内存中的 Markdown。 | 子代理任务调度、WorkBuddy 计划执行服务、完整 ArtifactContentRenderer/原生编辑器尚未等价。当前详细预览是 YCode 适配器;执行计划转换为真实新 prompt。 |
| 5. 消息操作 | 用户复制 text/plain、text/html 和已确认的 application/x-cb-chat-contentblocks 版本化格式;助手复制请求范围 JSON,并走敏感内容/Quick QA 投影。用户编辑、重发、助手重新生成使用原生 user entryId 分支;旧分支归档。赞/踩真实保存到本地会话。完整受控写入有恢复入口、确认与文件冲突检查。 |
附件/资源等富内容的剪贴板 schema 尚未完整映射;赞/踩未连接 WorkBuddy 云端反馈服务;任意命令造成的文件改动不能承诺完整恢复。没有新增无证据的助手编辑或气泡选区引用。 |
| 6. 图表、图片与文件 | 保留已有 Mermaid、图片预览、路径/行号、文件预览、下载实现;新增内存计划产物预览,避免文件尚未生成时丢失内容。相关既有回归通过。 | 原版全部媒体 CSS、依赖精确版本、原生文件编辑/符号跳转、完整产物详情与跨媒体行为仍待证据和对照验收。 |
| 7. 附件、语音与权限输入 | 原生选文件、粘贴/拖放、20 MB 预检、暂存/移除与资源引用;已用于会话的附件保留,历史图片仍可恢复。图片通过 OMP 图像 content 或兼容网关 image_url 发送。PCM/WAV 录音、295 秒上限、会话切换/卸载取消、迟到结果丢弃;转写走真实兼容服务。两种原版权限值和 full-access 确认入口接通。 | 官方 ASR、云上传、PDF/Office 解析、各连接器及原版系统沙箱尚未等价。当前 default-sandbox 是宿主路径约束/写入审批策略,不是完整操作系统沙箱;命令执行需 full-access。 |
| 8. 中断、重启、长对话与并行会话 | 按 session/run 路由事件;发送响应前的事件归属正确;后台运行不覆盖前台;过期加载不覆盖新会话;草稿按会话保存。冷加载把遗留 streaming 和运行工具恢复为已中断,并保留输出。OMP 每会话独立原生 transcript,文件恢复后的 pending branch 持久化重放。取消命令会终止自身 shell 子进程树。回退网关保留按顺序的 assistant/tool 历史。 | 原版长列表虚拟化、滚动锚点、极长历史性能、全部重连/并行子任务状态没有完成相同环境的原版对照。 |
原生内核验证与恢复
OMP 是 YCode 现有内核选择,协议验证不证明它与 WorkBuddy 的内核等价。
OMP 18.6.3 使用临时随机 profile、临时 transcript 和 loopback mock provider 实测:
- 显式传入正确的
provider/model可以完成 ready;profile 名不能冒充 provider。 - 默认
--no-tools,通过set_host_tools注册受控工具。真实host_tool_call使用id关联响应,字段为toolCallId、toolName、arguments;YCode 与兼容网关共用同一执行入口。 - 图片在支持图像输入的模型配置下到达上游 image_url;真实 thinking_delta、工具调用、最终 agent_end/prompt_result 已观测。
get_messages、get_tree、get_branch_messages、branch、fork、switch_session经实测;navigate_tree、navigate_to_entry、clear不可用。- 纯 branch/fork 不跨重启持久。 编辑/重发/重新生成在 branch 后写入新 prompt;纯恢复则将 pending native branch ID 保存到会话,冷内核在下次发送前重放,确认新 native user ID 写入后清除标记。
恢复只接受拥有完整 before/after 记录的受控写入,先检查所有文件当前内容,再修改;遇到外部修改拒绝覆盖。旧消息分支保存到 userData/session-branches/。它不等同于任意 shell 操作的完整工作区快照。
验证范围
以下自动检查已通过:build、test:chat、test:conversation、test:conversation-ipc、test:omp、test:omp-session、test:persistence、test:sessions、test:markdown、test:recovered、test:media、test:resources、test:font-size。
新增测试区分了真实代码和替身:
conversation-runtime-regression.ts:实际文件读写/冲突/恢复、符号链接边界、审批/问答/取消、命令子进程树停止、网关历史和 OMP 事件适配;其内核事件由 fake kernel 驱动。conversation-ipc-regression.ts:真实 IPC/sessions/attachments/speech 模块、隔离临时目录、mock Electron/OMP、localhost multipart 语音服务;覆盖同会话并发、跨会话并行、分支顺序、归档、恢复失败回滚、冷启动重放、附件保留及语音失败。omp-protocol-probe.ts:真实 OMP 可执行程序与 loopback provider;不使用真实凭据或外部模型服务。verify-ui.mjs?fixture=conversation-complete:浏览器验证页使用明确的测试桥和测试数据;已点击问答提交、审批、附件移除、权限确认/取消、会话草稿切换、计划详情与未落盘产物。不是 WorkBuddy 原版截图对比。
页面截图位于 .tmp/conversation-question-2026-10-15.png、.tmp/conversation-integrated-2026-10-15.png、.tmp/conversation-plan-artifact-2026-10-15.png 和 .tmp/conversation-final-2026-10-15.png。第三张展示内存产物预览,其余展示输入交互。
最后补强了发送事务:用户消息、助手占位和所选 native branch marker 一起原子保存。中断发生在用户 entryId 回填之前时,重发会核对完整已绑定的用户前缀;原生已接受该输入则恢复对应 entryId,尚未接受则沿已确认的前缀发送,禁止猜测旧历史。新增 IPC 用例覆盖这两种情况,fake branch 也按真实协议排除目标 user 本身。
下一步验收入口
当前组件 CSS 已有可复用的 REA 采集入口和导出清单;下一步按组件接入这些真实样式,取得原版可控截图,核对尺寸、字体、间距、图标、tooltip、hover 和动效。原版服务、原生编辑器/系统沙箱和长会话虚拟化分别保留独立验收项;不能用通过本地构建或测试桥联调替代这些结论。