Files
ycode/docs/对话审批与消息投影续对齐-2026-10-15.md

5.5 KiB
Raw Permalink Blame History

对话审批与消息投影续对齐(2026-10-15)

继续按 WorkBuddy 5.8.2 对话区 1:1 目标推进。本文记录本轮新增实现;完整对话区尚未通过全状态像素验收。云端服务和子代理调度按用户要求暂后。

原版证据

原版实现仍全部来自 REA。复用固定 Evidence ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb 的主脚本 src-DbE1_mgM.js,SHA-256 6c6ce63c93854783270e855572797d75e536e3b8d4548410e31fe9d147e1feb4。本轮只处理已保存的 REA 正文,没有绕过 REA 读取安装包或原版运行时。

已接入

  • 恢复现代中文/英文词典各 971 键,AST 复核实际 locale map zh-CN → ut、en-US → it,默认 zh-CN。纠正此前“现代中文 key 不在采集产物中”的判断:中文在主脚本中以 Unicode 转义存在。写文件、命令、读取、文件搜索、网页、MCP、待办等已接入对应源文案。
  • 写文件审批使用源工具卡片内“接受 / 拒绝”,命令使用“运行 / 跳过 / 拒绝”,顺序、按钮 variant、提示文本和 pending gate 按源码恢复。工具 ID 绑定真实审批请求;展示层将待审批执行记录投影为 pending,不改存储执行态;有明确 once 选项时优先使用,绝不将接受映射到 allow_always。
  • 审批走既有 onRespond → chat store → IPC;responding 时禁用按钮,错误可重试。已绑定卡片不再重复渲染通用审批框,缺绑定、缺选项或不支持的工具保留通用入口。
  • 将原先“仅相邻工具”的分组改为源 foldable 连续组,包括 reasoning 与普通工具;至少两项才形成 summary。运行中仅折叠后面已有正文的组,尾部过程保持展开,终态再折叠。
  • 恢复 show-widget 与前一未关联正文的 presentation 关联、并列最长正文和末段锚点、queue-guidance 边界以及 widget 移动次序。未知的 YCode 专有 part 保留明确适配,不称完整原版消息类型覆盖。
  • 工具分组使用源 summary variant 和 4px 子项间距。折叠内容保持挂载并设置 aria-hidden/inert,使源高度/透明度过渡能实际生效。
  • 过程摘要恢复为原版 27 个纯函数、40 类 descriptor 及其 alias/canonical map,覆盖状态、对象压缩、相邻正文 topic 和中文模板。真实消息分组已使用恢复模块,不再以“几个工具调用”代替源摘要。恢复文件摘要 645ea0848880aa7e89319af8e11440bdddd8c10783944736fd4f29b70e923a10,源/生成 manifest 随模块保存。
  • 复核 ReadFileView/WriteFileView 后,移除原版不存在的额外结果 <pre> 和写文件错误展开区;读取全文仍保留在文件打开 adapter,错误按源头部图标体现。
  • 修复样式恢复器的实际错误:原先 walkRules → output.append(rule.clone()) 丢失 at-rule 祖先,使 prefers-reduced-motion:reduce 的 transition:none 变成全局,关闭普通工具动画。改为递归投影保留 media/support 条件,并从固定 REA CSS 重生成。test:tool-styles 直接比较原版与投影后的 shell 规则、声明、条件和顺序,锁住三个 reduce-only 分支,防止回归。
  • 截图复核发现工具按钮 family 未纳入选取,已补六条原版 .cr-tool-btn 规则,包含 primary/danger 和 hover;验收高度 20px、min-width 52px、字号 12px、横向 padding 10px、绿色/红色/中性背景。summary 按原版保留所有成员,取消旧的 15 项分页适配。

验证范围与限制

test:conversation、test:tool-approvals、test:modern-conversation-labels、test:fold-summary、test:artifacts、test:chat、test:conversation-ipc 已通过。审批专测覆盖 metadata gate、按钮顺序/样式、禁用态、精确请求绑定及 allow_once 优先级。摘要专测覆盖 descriptor aliases、路径对象、命令不使用执行串作对象、等待/运行/回退、相邻正文 topic,常规对话测试也执行真实源中文摘要。

审批传输目前只有 optionId。命令“跳过”和“拒绝”在 UI 是独立操作,现有适配均发送 reject_once;原版 host 区分 skip/cancel 的后续语义尚未接入,不能称功能全等。defaultExpanded 按原版仅用于首次挂载,迟到的审批不会强制重开用户已折叠的命令卡片。

最终 npm run build(含 typecheck)、test:tool-styles、verify:conversation-states 已通过。真实 Electron fixture 的事件流验证:流式写入自动展开/成功收起、手动折叠不被同位置更新重开、用户上滚后停止跟随/回到底部恢复、命令运行/失败/空成功/取消、审批失败重试/防重复/once 优先/不同请求互不替代。控制台错误 0。

显式 no-preference 下普通工具实测 height 0.28s cubic-bezier(0.33,1,0.68,1),收起到 0px;大文件与显式 reduce 均为 transition:none。报告 .tmp/conversation-states-ui-report.json,YCode fixture 截图 .tmp/conversation-command-approval-2026-10-15.png、.tmp/conversation-file-approval-2026-10-15.png。这些是自有 UI/fixture bridge 的实际验证,不证明真实 WorkBuddy host IPC 或全状态像素等价。

已有字体和局部像素结果见《原版实测与像素对齐》:第一正文段落 39,909 像素零差异,气泡 22 个圆角像素最大通道差 1;该结果仅属于所声明的画面区域,不能外推本轮所有工具状态。剩余仍包括所有专用视图/附件分支的相同原版状态对照、完整消息类型映射、全部实际字体样本与动效中断/逐帧像素验收。