Repository navigation
fix(chat): consolidate model controls and retain native reply parity - #6756
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Reviewer: actor_kind=model_agent; model=gpt-6.1-sol; provider=OpenAI; reasoning_effort=max; declaration_source=runtime_reported.
精确审查 6756@ad057d8b2f671fcb0bafd890750c07db8eaa4c33;合并基点 90932447eb5ed38a0d3fec8c57e21a62f57f849c。APPROVE,未发现当前阻塞问题;代码结论、合并资格与合并权限分开。
动机
在 Goal 对话里查看当前模型、选择下次对话设置或维护默认配置的用户。 原头部同时放模型菜单和默认配置按钮,模型尚未回传时还长期显示缺失警告;现在默认配置进入同一披露菜单,未知观测在展开后明确说明,返回工作区恢复到模型入口。 独立打包页面通过同一模型入口进入原配置编辑器,预览不写入,应用后真实 File/HTTP 读回独立四项默认值,回滚恢复原先的缺省状态,返回焦点及390px无横向溢出通过。 只验证候选源码打包页面与可丢弃配置后端;会话和目录为合成数据,不发送真实模型或Lark消息,不代表已安装桌面、原生IME或本人实际Lark采纳。
改动思路
沿现有 ChatModelMenu、ChannelHeader 与机器配置 preview/apply/rollback owner 整合入口;不引入新配置、对话身份或前端写入决策。 当前 PR 收敛对话头部模型入口、缺失观测披露、成功播报和焦点返回,并修正引用消息上下文引入后的Lark测试定位;运行时、状态只读及Agent Loop仍归各自既有owner。 不改变现有状态和权限owner。保留两个入口会继续消耗头部注意力;另开设置页又会复制机器默认配置责任。普通用户继续聊天无需额外确认;可选默认配置入口多一次展开,换取单一入口和清晰的当前/下次语义。
| 触发 | 当前结果 |
|---|---|
| 查看/编辑默认模型 | 同一菜单进入原事务,预览不写,应用可回读 |
| 目录失败/退出默认编辑 | 显式重试;返回现存模型入口焦点 |
此表只概括本头源码与下述执行结果,不证明安装或模型采纳。
具体改动
规格 docs/integrations/session-runtime-control-plane-adapter.md,不可变版本 90932447eb5ed38a0d3fec8c57e21a62f57f849c。Projection boundary:Missing model readback stays unavailable; a catalog or requested choice is not the current observation.;New conversation settings:Choices preserve existing history and active work; ordinary defaults use existing revision-checked machine preview/apply/readback/rollback.;Conversation presentation example:One composer and preserved keyboard/native delivery boundaries; messaging quoted context grants no authority.
完整14路径包含模型菜单/头部/焦点三个生产文件、原生适配说明、两个浏览器scenario、四张合成首屏图和Lark/SSR断言。236→ad只改两个测试文件:将刷新源码顺序正则替换为双语SSR的idle/loading/成功播报/失败重试断言。生产UI、Python规则和图片blob均未变;旧头133项Python结果在逐文件失效检查后沿用,本头重新构建并验证bundle、44SSR和workspace contract。Lark改用provider/message identity仍验证背景停止、同Session与非法来源;引用文本保留且不授权控制命令。相关#6754有重叠,集成时应保留其更全的completed/background断言并去除重复helper,不在本头增设共享测试框架。
关键代码讲解
- ChatModelMenu:当前实际观测与下次对话选择分开,默认配置复用同一菜单。
- ChannelHeader:移除重复默认按钮,成功反馈只做可访问播报,错误仍可见。
- openSettings / closeSettings:默认编辑器仍用旧事务,关闭后定位现存模型summary。
- _request_for_event:根据provider/message身份读取原请求,不再依赖带引用上下文的消息全文相等。
对主干的风险
未发现阻塞问题。重点反例是把未知实际模型误显示为待选值、把默认编辑误当成当前会话变更,以及关闭编辑器后焦点落到已移除按钮。已在真实打包页通过配置 API 的预览、应用、回滚和焦点读回验证,并用目录503验证可见错误、显式重试及Escape。浏览器 Session/目录数据是合成的,不能作为真实模型运行资格。
本轮验证:133 Python tests通过;44双语SSR、workspace contract、TypeScript/Vite build及source bundle verify通过;当前ad头premerge5直接、8目录、8风险和1公开边界检查通过。 最初选了不存在的test_chat_model_selection.py,pytest未执行;纠正为实际7文件后133通过。直接Node运行SSR脚本不支持tsx,改用仓库规定vite SSR命令后44通过。一次浏览器等待input过宽歧义,未重发动作,读当前快照后继续。 只验证候选源码打包页面与可丢弃配置后端;会话和目录为合成数据,不发送真实模型或Lark消息,不代表已安装桌面、原生IME或本人实际Lark采纳。 独立浏览器宽屏及390px双语保持一个composer,实际API四字段分开;原配置从absent经预览/应用成为configured,再经显式回滚恢复absent。首屏更安静且仍能发现默认设置;未知观测留在披露内,不假定模型运行。真实IME、已安装App与实际Lark采纳未认证。
我的整体评价
APPROVE。独立打包页面通过同一模型入口进入原配置编辑器,预览不写入,应用后真实 File/HTTP 读回独立四项默认值,回滚恢复原先的缺省状态,返回焦点及390px无横向溢出通过。 沿现有 ChatModelMenu、ChannelHeader 与机器配置 preview/apply/rollback owner 整合入口;不引入新配置、对话身份或前端写入决策。 当前 PR 收敛对话头部模型入口、缺失观测披露、成功播报和焦点返回,并修正引用消息上下文引入后的Lark测试定位;运行时、状态只读及Agent Loop仍归各自既有owner。 long_horizon 与 user_experience 在此有界流程 improved;不以UI读回推导真实模型或长期效果。已有owner内的入口收敛和按身份定位测试是合适的前瞻整理,无需增加框架。 没有执行合并、安装或正式运行时升级,没有查询、轮询或等待CI。
English verdict: APPROVE. The exact head consolidates existing model/default controls without changing native binding or write authority. Real packaged defaults preview/apply/rollback, failure/retry, bilingual narrow layout and focus pass; installed/live-model adoption remains unqualified.
A Goal conversation showed both a model menu and a separate defaults button, while a host that had not reported a model left a permanent warning in the header. Defaults now live in the existing model disclosure, with explicit missing-readback detail inside it. Reported model/effort/tier remain separate from choices for the next conversation; opening defaults and returning restores keyboard focus to the model menu.
Refresh errors remain visible and successful refreshes retain an accessible announcement. The runtime selector, status-only mode and Agent Loop configuration keep their separate owners. A second focused commit repairs eight native Lark test regressions after quoted reply context was introduced: requests are addressed by canonical provider/event identity, and only the current canonical message selects a control command.
Validation
Visual evidence
Tested source tree:
ad057d8b2f671fcb0bafd890750c07db8eaa4c33. These are actual packaged-UI captures with public synthetic data. Before assets are the verified90932447eb5ed38a0d3fec8c57e21a62f57f849cbundle; after assets match this source tree. Whole-viewport review keeps ordinary chat focused on one model entry and the composer, while diagnostics remain available on demand.Local disposable preview: http://127.0.0.1:58080/chat/?goalId=progress-projection&view=conversation&statusUrl=%2Fstatus.json (available on the author's machine while the preview process runs).