Files
ycode/docs/reference/ygent-chat-approval-questions.md
T

48 lines
5.9 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-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。