UX 流程与原型说明
1. 原型目标
当前原型用于确认交互、状态和信息架构,不连接真实 GitLab、不读取真实仓库、不调用模型。原型中的代码、Finding、工具轨迹和发布结果均为模拟数据。
原型覆盖四条关键流程:
- 划词提问。
- 划词 Review。
- 整个 MR Review。
- Finding 复核并确认发布。
2. 页面布局
text
┌────────────────────────────────────────────────────────────────────┐
│ GitLab 顶部导航 │
├──────────┬─────────────────────────────────────┬───────────────────┤
│ GitLab │ MR 信息 / Diff │ Review Agent │
│ 导航 │ │ 会话 / Review / 设置│
│ │ code rows │ │
│ │ [划词悬浮工具栏] │ Chatbox │
│ │ │ Findings │
└──────────┴─────────────────────────────────────┴───────────────────┘>= 1100px:Agent 侧栏常驻右侧,MR 内容保留主要阅读宽度。760-1099px:Agent 侧栏覆盖在 MR 上,可关闭。< 760px:底部抽屉式 Agent,划词工具栏改为贴选区下方。
3. 划词提问流程
触发
用户在代码区选择 1-200 行文本,且选区不与 Review Agent UI 重叠。
行为
- 显示悬浮工具栏:
问一下、Review 这段、复制。 - 工具栏不超过选区宽度上方可用空间,必要时翻转到选区下方。
- 点击
问一下打开 Chatbox,自动添加代码附件。 - Composer 显示当前上下文:文件、行范围、选中字符数。
- 发送后先显示用户消息,再显示流式回答。
异常状态
- 无法识别文件 / 行号:仍允许提问,附件标记为
页面选区。 - 选区过长:提示裁剪到 200 行,允许用户选择前 200 行或取消。
- 模型未配置:打开设置并保留待发送问题。
4. 划词 Review 流程
触发
点击悬浮工具栏 Review 这段,或侧栏 Review 页选择 仅选中代码。
状态
text
准备上下文 → 分析选中代码 → 校验证据 → 定位评论 → 完成- 阶段进度是离散状态,不用无意义的无限动画。
- 工具调用显示折叠摘要,例如
file_search · CheckoutService。 - 无问题时显示
未发现高置信问题,不生成空评论。
5. MR Review 流程
范围选择
全部变更:当前 MR 所有可分析文件。当前文件:只分析当前 Diff 文件。自定义文件:从变更文件列表勾选。
运行页
显示:
- 已处理文件 / 总文件。
- 当前阶段和最近工具调用。
- token / 时间预算(有 Gateway 时)。
取消按钮。
结果页
- 顶部只保留严重度计数和过滤器,不堆叠 KPI 卡片。
- Finding 默认按
critical → high → medium → low排序。 - 低置信结果默认折叠,并显示原因。
- 每条 Finding 显示:位置、类别、严重度、标题、证据、建议。
6. Finding 交互
每条 Finding 的主操作:
定位:滚动并高亮对应 Diff 行。编辑草稿:编辑发送到 GitLab 的 Markdown。复制:复制评论,不写 GitLab。发布到 GitLab:打开二次确认。忽略:记录状态,不删除原结果。
发布确认对话框
必须展示:
- 项目、MR IID。
- 文件路径与目标行。
- 完整评论 Markdown。
- 当前 Diff SHA / version 摘要。
确认发布与返回修改。
发布成功后更新为 已发布,允许点击 discussion 链接。失败时保留草稿和错误原因。
7. Chatbox 状态
空状态
显示 3 个基于当前上下文的建议,不展示营销内容。
有代码附件
附件条显示:文件、行范围、selection / hunk / file 类型、移除按钮。
流式状态
- 回答区域保留稳定宽度,避免每 token 重排。
- 工具调用在回答前显示可折叠轨迹。
停止可取消当前请求,已生成内容保留。
错误状态
模型未连接:主操作是打开设置。请求超时:允许重试,保留问题和附件。上下文超预算:允许移除附件或切到 Gateway。
8. 设置与诊断
设置分为四组:
- 运行模式:浏览器直连 / 本地 Gateway。
- 模型连接:Base URL、模型、密钥、连接测试。
- GitLab:认证模式、站点白名单、发布确认策略。
- Review:严重度过滤、语言、规则、数据发送预览。
诊断页展示:
- 当前站点适配级别:
full/read-only/dom-only/unsupported。 - GitLab API、模型、Gateway 连接状态。
- 当前页面可提取的 PageContext。
- 能力矩阵与降级原因。
9. 视觉规范
- 参考 GitLab 的浅色中性界面,Agent 侧栏用清晰的深色标题区做产品识别,不模仿 GitLab 品牌。
- 颜色只用于状态:严重度、连接状态、Diff 增删、焦点。
- 图标按钮必须有
aria-label或 tooltip。 - 禁止大面积渐变、装饰性圆球和无信息仪表盘。
- 代码区使用等宽字体,Markdown 正文使用产品 UI 字体。
10. 可访问性
- 全部操作可用键盘完成;悬浮工具栏进入
role="toolbar"。 - Esc 关闭工具栏 / 对话框,焦点返回触发按钮。
- 严重度不只靠颜色,显示文字标签。
- 流式回答使用
aria-live="polite",错误使用role="alert"。 - 支持
prefers-reduced-motion。 - 文本对比度满足 WCAG AA。
11. 原型交互路径
路径 A:划词提问
- 在模拟代码区拖动选择
checkoutInventory调用附近代码。 - 点击浮动工具栏
问一下。 - 在右侧输入问题并发送。
- 查看模拟流式回答。
路径 B:Review 与发布
- 点击右上角
开始 Review。 - 观察准备、分析、定位阶段。
- 展开一个高严重度 Finding。
- 点击
发布到 GitLab。 - 在确认框中查看目标行和评论。
- 确认后查看
已发布状态。
路径 C:能力边界
- 打开右侧
设置。 - 查看浏览器、GitLab API、Gateway 状态。
- 切换“浏览器直连 / 本地 Gateway”运行模式。
- 观察能力矩阵变化。
12. 原型与生产实现差异
| 原型 | 生产实现 |
|---|---|
| 固定模拟 GitLab 页面 | 注入真实 GitLab Shadow DOM |
| 点击后固定延时模拟阶段 | 消费真实 AgentEvent 流 |
| Finding 为固定样例 | Schema 校验 + 定位 + 反思生成 |
| 发布只更新本地状态 | 调用 GitLab Discussions API |
| 设置状态为演示值 | 执行真实 probe / connectivity test |
| 普通 React DOM | Shadow DOM + 用户脚本生命周期 |
13. 原型截图
构建并运行 pnpm dev 后,应为以下状态保留截图并纳入 PR:
docs/assets/prototype-mr-overview.pngdocs/assets/prototype-selection-toolbar.pngdocs/assets/prototype-review-running.pngdocs/assets/prototype-finding-publish.pngdocs/assets/prototype-capability-settings.png
截图要求使用固定 1440x1000 视口,无开发工具和无关桌面内容。