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

33 lines
5.5 KiB
Markdown
Raw 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.
# 对话审批与消息投影续对齐(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;该结果仅属于所声明的画面区域,不能外推本轮所有工具状态。剩余仍包括所有专用视图/附件分支的相同原版状态对照、完整消息类型映射、全部实际字体样本与动效中断/逐帧像素验收。