Files
ycode/docs/对话区域-八类对齐-2026-10-15.md

63 lines
10 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.
# 对话区域八类对齐:实现、验证与未决项
> 后续源码级还原、富消息复制、原版 SVG/中文文案与 Artifact/Diff 的最新进展见 [源码级续对齐](源码级续对齐-2026-10-15.md)。下表保留本轮基线,后续已修复项以续对齐记录为准。
> CSS 采集更新:已通过本地 REA 修复取得 64 份已加载样式正文,当前组件 CSS 获取阻塞已解除;13 份与既有 ASAR 清单完全一致,2 份存在差异。详见 [REA CSS 采集修复](REA-CSS采集修复-2026-10-15.md)。此更新不表示下表八类已经完成样式集成或像素验收。
用户目标仍是 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 和动效。原版服务、原生编辑器/系统沙箱和长会话虚拟化分别保留独立验收项;不能用通过本地构建或测试桥联调替代这些结论。