63 lines
10 KiB
Markdown
63 lines
10 KiB
Markdown
# 对话区域八类对齐:实现、验证与未决项
|
||
|
||
> 后续源码级还原、富消息复制、原版 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 和动效。原版服务、原生编辑器/系统沙箱和长会话虚拟化分别保留独立验收项;不能用通过本地构建或测试桥联调替代这些结论。
|