# 对话授权与问题回答:实现及验收(2026-10-09) ## 对标依据 读取本机 WorkBuddy 5.7.6 的 app.asar,定位 lib-chat-ui 的 InterceptCard(1n5vt)、QuestionFloating(ggdxn)和 QuestionAnswerDisplay;通过 WorkBuddy 原生 CDP 9223 读取真实主题变量。没有发送 WorkBuddy 消息或更改其会话。当前 WorkBuddy 没有待处理交互卡,因此本次依据为组件源码、原生主题和 Ygent 动态实测,未宣称完成两端同场景动态逐像素验收。 | 位置 | 对齐内容 | | --- | --- | | 输入区域:待授权 | 原输入框隐藏但保持挂载,24px 圆角白色卡片;标题 16/25、命令摘要 14/28,超长省略并保留悬停全文;拒绝、本对话允许、允许依次排列 | | 授权选项 | 40px 行高、12px 圆角、24px 数字底块、8px 间距,选中/悬停灰底,右箭头反馈;默认高亮拒绝,但不自动提交 | | 输入区域:待回答 | 24px 圆角,最大高度 min(60vh,520px);标题 14/24,页码/关闭入口,描述与选项同排,32px 圆形提交按钮,0.2 秒淡入上移 | | 回答方式 | 原始选项值回传,支持自由输入、确认问题和明确跳过;自由输入保留原始文字,空白禁用,中文输入法回车不误提交 | | 消息时间线 | 灰色紧凑入口,回答后显示“提问”;展开为 16px 圆角灰色问答卡,问题 15/25、回答 15/22;授权结果区分允许、拒绝、取消 | | 助手下方 | 等待回答/等待授权与实时耗时;完全访问不能隐藏实际收到的待处理请求 | | 中断与异常 | 保留停止生成入口,提交锁防止重复点击,失败提示且可重试;结束/取消后删除待处理请求,迟到回执被拒绝 | 上述字号为基准,文字统一叠加六档全局字号偏移;几何尺寸保留参考组件规则。共享组件适用于普通会话、历史回显和实时生成,不依赖会话身份。主页面继续沿用用户指定的渐变设计。 ## 实际执行链路 OMP rpc-ui 的工具授权与问题回答分开管理。工具授权保留原网关、会话白名单和审计;问题由独立 pending_questions 保存会话、运行请求、问题 ID、方法及选项,不能被完全访问或授权白名单自动回答。答案通过真实 stdin extension_ui_response 回传,验证当前运行与选项,写入成功才移除问题。 本机 OMP 18.6.3 的 ask 使用 select;选择 Other 后再次发出 editor。前端将其作为同一道问题,保留消息 ID,允许中间插入工具事件;请求 ID 变化后,旧提交确认不能覆盖新输入状态。问题/答案写入 render_meta,重载恢复;进程已失效的历史 pending 请求仅显示取消记录。 MCP 宿主授权不展示尚不支持的会话放行选项。其他内核未纳入本次问题回答验收。当前 OMP 每次发送一个 select/editor/confirm,页面显示 1/1 并禁用翻页;批量问题、多选、选项 preview 尚未接入,不能把单题实现当作完整批量对标通过。 ## 调试与回归 SOP 1. 按 [原生调试 SOP](ygent-debug.md) 停止正常实例,使用独立数据目录与 9336 启动调试构建;绝不使用测试库覆盖用户库。 2. 在隔离数据库设置 interaction_native_test=1,确认真实 WebView2 的 window.__TAURI_INTERNALS__ 和 window.__yg 存在。 3. 执行 `node scripts/chat-interaction-native-check.mjs 9336 <用户私有输出目录>`。脚本拒绝没有隔离标记的数据库,使用受控本地模型服务、真实 Tauri IPC 和真实 OMP;只在隔离库创建测试渠道/会话,命令仅为 echo。 4. 核查 result.json、原生截图、六档字体的 DOM 几何;截图等待入场动画完成。源码/模拟 IPC 回归作为补充,不代替原生验收。 5. 关闭测试实例,移除进程级数据目录变量,以 9335 恢复正常库与原会话。 本次原生 WebView2 视口 1335×916、DPR 1,通过:完全访问下仍等待真实回答、选项回传、数据库重载、Other→editor 自由回答及单条记录、跳过、允许执行、拒绝不执行、取消与迟到回答隔离;六档字号均保持 40px 选项行、24px 卡片圆角,无卡片横向溢出。原生脚本汇总 7 项检查。测试数据与截图位于用户私有 `.ygent/imports/interaction-native-20261009/`,不提交。 辅助验证:`npm run check:chat`、`npm run build`;后端 `cargo test --lib -- --test-threads=1`。新增回归覆盖选项不自动提交、重复提交、失败重试、Other→editor 先于 IPC 确认且插入工具事件、答案持久化及过期问题重载。 ## 回答后的展开体验补充 回答记录保留受回合控制的展开状态,内容使用 grid 高度与透明度过渡,收起后高度归零;减弱动态效果时取消动画。箭头常驻淡显并随展开旋转,键盘焦点可见,按钮关联详情区域且收起内容不暴露给读屏。问题浅灰、答案深色,跳过/取消补充明确结果,长文本换行且可选择复制,输入答案保持原始内容。 原生隔离验收在回答落库、重新打开会话、展开完整时间线后展开“提问”,测得卡片圆角 16px、内边距 12px 16px、问题/答案行高 25px/22px,内容宽度与滚动宽度均为 752px;再次收起详情高度为 0。证据为私有目录的 answer-expansion.json 与 question-answered-expanded.png;7 项真实 OMP 交互检查及 check:chat、TypeScript 检查通过。 ### 按 Ygent 整体风格调整颜色 按用户后续要求,用户消息与历史问答卡不再使用 WorkBuddy 的实心中性灰底,改为共享聊天表面变量:用户气泡 68% 白色、历史问答 48% 白色,配 64% 白色内描边,透出页面蓝紫渐变。问题/答案分别使用全局 t2/t1,取消/跳过说明用 t3。此项属于用户指定的产品视觉调整,保留前述布局及交互。原生 1335×916、DPR 1 下只读检查真实会话,用户气泡和问答卡宽度/滚动宽度一致,截图位于私有 chat-color-20261009.png。