Skip to content

fix(chat): consolidate model controls and retain native reply parity - #6756

Merged
huangruiteng merged 3 commits into
mainfrom
codex/chat-closeout-20261017
Oct 17, 2026
Merged

huangruiteng merged 3 commits into
mainfrom
codex/chat-closeout-20261017

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

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

  • 44 model/default/effort tests passed through real HTTP/File and native stdio paths; 71 original-source, reply-context, exact-stop/background recovery and Session-isolation tests passed.
  • Compiled UI exercised in Ego at 1512×982 and 390×844, Chinese/English, keyboard/Escape/return focus, one composer and no horizontal overflow. Defaults preview/apply/rollback reached the production configuration API in a disposable runtime. Conversation/catalog data was synthetic; no model request was sent to a real account.
  • TypeScript/Vite build, source-bundle verification, 44 bilingual model/header assertions plus the complete workspace contract and two keyboard-composition checks, focused Ruff, full semantic bindings and standard premerge passed (four direct checks, compilation and all 17 selected catalog/risk/public checks). Exact-scope change-quality receipt is valid.
  • The hosted build exposed an incidental source-order assertion for refresh states. It is replaced with bilingual SSR checks of loading, success announcement and retryable errors. The new test-only head passed quick premerge; other hosted jobs remain pending. Independent code review approved this exact head; merge readiness, merge authority and installed adoption remain separate.
  • test(lark): select reply requests by provider message identity #6754 independently fixes related Lark request lookups, including four paths shared here. Retain its broader completed/background coverage and reconcile those identical canonical-identity edits when it lands; this proposal also fixes the untrusted control-source tests.
  • Physical macOS IME, an installed desktop upgrade and actual Lark user adoption remain separate qualifications. No merge, installation or release is claimed.

Visual evidence

Tested source tree: ad057d8b2f671fcb0bafd890750c07db8eaa4c33. These are actual packaged-UI captures with public synthetic data. Before assets are the verified 90932447eb5ed38a0d3fec8c57e21a62f57f849c bundle; 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.

View Before After
Desktop Before desktop After desktop
Narrow Before phone After phone

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).

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 loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@huangruiteng
huangruiteng merged commit 84dfa63 into main Oct 17, 2026
29 of 40 checks passed
@huangruiteng
huangruiteng deleted the codex/chat-closeout-20261017 branch October 17, 2026 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants