Skip to content

fix(chat): show real model identity and simplify Agent conversations - #6699

Merged
loopx-agent merged 29 commits into
mainfrom
codex/chat-observability-delivery-20261017
Oct 17, 2026
Merged

loopx-agent merged 29 commits into
mainfrom
codex/chat-observability-delivery-20261017

Conversation

@loopx-agent

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

Copy link
Copy Markdown
Collaborator

Goal Chat previously guessed model identity from catalog order, made requests compete with tool activity and paging, and offered two independently editable inputs for one running Turn. This change shows runtime-reported model/effort/tier, retains canonical requesting-Agent provenance and full reply content, folds routine work, and uses one composer with durable recovery.

Result and ownership

  • Ordinary Codex Goal defaults use the existing machine configuration transaction in Settings → Conversations and models. The native profile, model, reasoning and speed remain separate. The steward keeps its existing settings owner; the GPT/account and safe Runtime switching repair from merged fix(chat): keep GPT account defaults and safe Runtime switching #6719 is preserved.
  • The compact model control shows current observations, including unknown. Opening it discovers optional choices for a new conversation. Reading or changing choices sends no prompt, enables no Agent Loop and does not retarget existing work.
  • Enter sends or queues behind the current managed Turn; Shift+Enter inserts a newline; Command+Enter explicitly steers a supported current Turn. Retry retains the original Session, Turn and ingress. “Adjust turn” focuses the same editor.
  • Requests distinguish the canonical author from the reply recipient. Long answers remain readable. Only explicitly public reasoning summaries are shown; raw reasoning is withheld, including historical replay.
  • Attached Codex history pages naturally in both directions within its bounded window. Tool text blocks decode before Unicode pagination; saved nonzero shell exit codes remain observations, separate from task acceptance. Source gaps and credential withholding remain visible.

The latest repair resolves the prior narrow-header blocker and two additional real-path defects: a mobile menu could extend left of the viewport, and an undispatched storage failure could masquerade as uncertain delivery and block an edited draft. It also updates the companion browser contracts for explicit steering versus ordinary queueing. Canonical identities deduplicate queue/readback races; stored timestamps and observed completion keep replies in order. A confirmed instruction now exposes a read-only history retry if its index refresh fails, without resubmitting it.

Placement stays with native_chat provider I/O, the existing configuration transaction, canonical Todo projection and Session queue/ingress. The bounded cleanup removes duplicate editor state and moves transport/normalization out of oversized controllers; it introduces no parallel control-plane authority and raises no semantic or maintainability budget.

First viewport and visual evidence

Reviewed packaged source 588c87f379765c765080fccf5ced6c221c5b8618. The four reference images below are versioned at 97cd79d52aa78d9d3438873821de791b80e0d9d5; the final change affects the existing history failure/retry notice, and the same first viewport was revalidated in the final packaged model-selection scenario. Public synthetic workspace and model readbacks; these images do not represent paid inference or installed-App adoption. The existing problematic image is retained as before evidence, rather than relabelled as a passing result. Desktop and 390px inspection also covered unknown/known observations, keyboard closing, catalog failure and retry.

Before: prior submitted 390px header After: unknown model remains readable
Previous narrow header Current unknown-model steward
Known model on phone Optional model choices fit within the viewport
Current known-model steward Optional Goal model menu

Current packaged desktop

The title and runtime diagnostics remain legible; routine configuration stays folded and dialogue/decisions retain attention. Native-history screenshots and their source boundaries remain in the integration reference. Temporary previews were stopped after inspection.

Validation and limits

  • 669 Python tests passed, covering production HTTP, file-store and isolated native stdio paths for defaults, observed/requested settings, rejection, resume, steering, queue, history/redaction and canonical request authors.
  • 10 packaged browser scenarios passed: model selection; unified conversation activity; recovery; request/approval display; long answers; work steps; executor chip; steward settings; attached original history/follow-up; composer admission. Includes 390px unknown/known header, full menu bounds, blocked storage then edited draft, retained uncertain identity, interruption/completion, one explicit FIFO request, separate Command+Enter steering and a post-confirmation index 503 followed by canonical read-only recovery. Native attached tests use the real production owner with disposable protocol fixtures.
  • The identical native subprocess fixture was run against immutable main a3e56a38cfa442a65a0f6f84572e226d06f4d6fb and current runtime. Both preserve Session identity through repetition/restart, direct-busy rejection and forged-Goal rejection without new effects. Intentional additions show actual model/effort, queue an explicit follow-up after completion and confirm explicit effort before dispatch; no native Goal effect occurred.
  • Dashboard/control-plane TypeScript, Ruff, CSS token validation, fresh bundle build/source integrity, 18 focused JS recovery/model/keyboard cases, bilingual SSR and attention-detail smokes passed. Bilingual RFC, DCO and public-boundary scans passed.
  • Clean-source standard premerge passed 6 direct + 19 selected checks, including complete semantic and maintainability checks without budget changes. Earlier test-environment failures and the reproduced draft-recovery failure are retained in the review evidence; no assertion or threshold was removed to obtain a pass. Final exact-head review, quality receipt and merge readiness are recorded independently. One parallel native-history response wait timed out; the same source passed an isolated replay without changed assertions or timeout.

Frontend and the existing machine CLI share one configuration owner. Lark behavior is unchanged. Full attached native/token parity, installed adoption, Windows native transport and paid model qualification remain at their existing owning acceptance boundaries. This PR is a bounded conversation improvement and does not claim R2/R3/G1 completion. CI is not consulted under the configured review policy; required local validation and exact-head review still apply.

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.

Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

HEAD: e4b2863ea367670258b60736f783b7a2c5cac78b

动机

受影响的是在 Goal 中查看当前模型、处理 Agent 请求及回看原生会话的用户。此前目录首项可能被当作当前模型,审批作者和回复接收者不易区分,长对话又与工具记录及手动分页争夺注意力。本提交将原生回传的模型、档位与推理强度分别显示,保留请求作者与完整回复上下文,并通过自然滚动及折叠工作记录阅读原会话。此处不启动 Agent Loop,不切换已有活动或挂接会话,不授予审批、原生输入或其他账户权限。剩余缺口是本提交新增的语义和规模门禁失败;完整 attached-host/Lark 对等、实际安装与真实模型质量仍属既有父级验收。

规格依据:docs/architecture/rfcs/desktop-execution-frontends-v0.md,不可变版本 fdf03ec6112aedf497b7ab1d6e5bc4db19c2ae5f。逐项核对:Settings ownership and scope:Navigation follows user purpose; machine and Goal ownership remain distinct.(implemented);Product projection:Project the bound runtime/model and truthful availability without granting execution.(implemented);Slice B: attached Codex App:Bounded saved/live observation retains original host authority; complete native/installed/Lark parity remains a separate gap.(deferred)。补充沿同版本的 docs/integrations/session-runtime-control-plane-adapter.md 核对原有字段、来源及权限边界,未用本 PR 改写后的说明证明自身。

改动思路

架构上应保留 native_chat、既有 machine-configuration 事务、canonical Todo 作者及原会话 reader;浏览器只消费已解析事实。当前边界是普通 Goal 对话默认值和已有阅读路径的完整修正;无需另建配置存储、执行器或扩大为宿主迁移。

任务 此前 本提交
看模型 目录选择与实际模型混在一起 请求与已观察模型分别保存;未知不猜测
配置与审批 配置作用域、请求者与回复者不清 原事务预览/应用/回滚;作者只作显示来源
阅读工作记录 分页按钮和工具行争夺正文 有界自然滚动、稳定记录锚点和可展开工作组

具体改动

machine_defaults 注册 machine-only codex_chat,复用配置事务和既有 profile alias,保留凭据原归属。ChatRuntimeController.open_session 在活动、attached、task 和 Agent Loop 保护之后解析普通对话默认值;requested_agent_model_id 与原生 resolved_model 分离,恢复时不会把一次默认值观察变成用户固定选择。ChannelHeader 展示当前/下次模型及真实回传档位,设置入口与 Agent Loop 分开。

canonical created_by 经 Todo summary、project_asset、Zod、同快照内容 join 到请求卡及确认视图,接收者不冒充作者;回复草稿保留完整条件和 URL。CodexActivitySteps、SSE 重放及 TS step merger 只呈现明确公开的摘要,历史原始 reasoning 仍保留在存储而不回传。AttachedConversationTimeline 折叠连续工具/生命周期记录,保留报错、缺口、完整内容与分页锚点;正文、代码和表格保持各自可读边界。配套更新样式、本地化、构建 smoke、HTTP/协议 fixture、两份 RFC 与公开合成截图。

对主干的风险

[P2] 消除新增的 SCHEMA 语义命名冲突 — loopx/capabilities/native_chat/machine_defaults.py:18。新 SCHEMA 与 heartbeat/automation_upgrade.py 的同名常量值不同;冲突值16→17、定义54→56、语义冲突0→1,而未改动的基线通过,当前源码资格因此失败。 最小修复:在最近 owner 使用有区分度的常量名并同步局部调用及测试,或按既有语义归属规则说明并结清本地分类;保持持久化 schema 字符串不变,重跑原完整检查。

[P2] 在本提交结清新增模块和函数规模债务 — loopx/chat_runtime.py:758。chat_runtime.py 从2204增至2244行,超出继承上限2210;chat_store.py 从2005增至2026,超出2015;structured_todo_item 另有未审函数规模债务。基线未审债务为0,当前直接及选择检查失败。 最小修复:按既有预算决策指南比较相同 base/head,保留有用行为;适合时做小而完整的抽取,否则在原归属处记录有消费价值、兼容性和余量依据的本次 ceiling/exception。不能仅删除断言、放宽无关限制或要求大迁移。

独立验证:476 项 Python 通过;TypeScript、attention-detail smoke、Ruff、DCO 和双语检查通过。Ego 中以当前打包资源连接真实临时配置 HTTP owner:预览不写入、应用回读四项独立值、回滚恢复 namespace 缺席,0 Turn/Agent Loop;390px 无整页横向溢出。原会话测试用隔离协议 peer,完整长正文可见、工作组默认折叠且明确报错、窗口限制300条。它们不是真实已安装宿主或模型质量证据。

相同 base/head 检查明确归因:基线语义与规模检查均通过,当前语义及规模检查失败,标准 canary 为6项直接检查中1项失败、19项选择检查中2项失败。这是当前源码资格缺口,不能归因于未完成的 CI,也不能用功能绿测覆盖;公开扫描唯一匹配是原有拒绝测试的合成 /home/other 路径。

我的整体评价

产品方向和 owner 复用有实际价值;当前应 REQUEST_CHANGES,先在同一 PR 结清上述语义和规模资格。对未来的有界重构检查已做:默认值读取已放在最近 owner,剩余问题适合小范围命名修复与有依据的规模结算,不需要为测试数量或历史上限发动大迁移。修复后重跑原检查并保留现有功能/负例,再按新提交独立判断;无合并或安装授权。

English verdict: REQUEST_CHANGES - HEAD e4b2863; 476 independent Python checks and packaged real-owner journeys pass, but this head introduces semantic-name and maintainability qualification failures absent on base; repair both before approval.

Comment thread loopx/capabilities/native_chat/machine_defaults.py Outdated
Comment thread loopx/chat_runtime.py
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…r views

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

Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max

Request changes conclusion (author-owned PR; GitHub blocks formal self-review)

HEAD: ba32f8ad6016b860d94ce80789a0c0710e197157

动机

在管家或 Goal 对话中确认当前模型、读 Agent 完整结果、核对请求作者,并在原回合追加指令的用户。此前模型可被目录首项冒充,工具行和人工翻页挤占对话,请求作者与接收人不清;同一运行回合还出现两个输入框。本头分离已观察模型与下次选择,沿既有机器配置 owner 提供新对话默认值,保留完整原生文本和独立退出事实;统一底部 composer 并保持原 Session/Turn/ingress 恢复。两个旧 P2 已修复,但管家窄屏未知模型状态仍破坏标题和诊断布局。

原验收来自不可变版本 docs/architecture/rfcs/desktop-execution-frontends-v0.md,revision fdf03ec6112aedf497b7ab1d6e5bc4db19c2ae5f;并对照既有 overall roadmap 的 app-first、S5 和执行/评审契约。逐项判断:observed_configuration:Settings ownership/scope and product projection: report actual runtime, preserve new-vs-existing conversation scope.(implemented);original_conversation:Slice B: retain original source/binding, full history and original-operation recovery.(implemented);usable_shared_surface:Product projection and design whole-viewport attention: the affected shared conversation entry remains readable on390px.(not_met);real_installed_adoption:Slice B/G1: installed native/host/Lark adoption is separate from synthetic packaged fixture evidence.(deferred)。

默认值不迁移已有/活跃/挂接会话,不开启 Agent Loop,不存凭据、不扩大宿主权限;工具退出码不等于任务验收,公开 summary 不许可 raw reasoning。安装态、Lark 与真实付费模型资格仍独立。390px 管家头部必须在 unknown-model 状态下可读;本头提交的 composer-after-phone.png 已显示标题和运行环境竖排。L1/G1、实际安装和忙碌 attached Desktop 输入保持既有产品 owner 的未验收边界。

改动思路

保留机器配置、canonical Todo、Session/Turn ingress 的单一权威;Python 只负责稳定 provider 观察/传输,前端只表达结果和明确意图。统一 composer 减少用户选择成本,原 ingress/store 继续决定是否已送达。这是已有对话旅程的可审查改进,不把展示、CLI 或模拟模型当作 L1/G1/安装采用完成。当前共享头部的管家移动布局仍需一个局部修复,不能以 Goal 页窄屏通过代替。

具体改动

73 current PR paths,+1696/-471: backend observation/defaults/provider extraction, shared UI/readback and one composer, focused fixtures/tests, bilingual owning RFC/reference and10 public synthetic screenshots. Main merge changes are excluded from the PR diff.Provider-local defaults apply only to new ordinary conversations; observed runtime facts do not pin defaults. Explicit public reasoning summary and native exit codes are display facts. One composer retains/migrates conversation-scoped uncertain retry identity; no automatic resend or new Turn. Native transport/model normalization moved to existing provider owner without new authority.

关键代码讲解

  • normalize_codex_chat_defaults:Existing machine namespace owns bounded noncredential profile/model/effort/tier, with unchanged persisted schema literal.
  • CodexAppServerAdapter:Existing transport delegation moved intact out of oversized Chat controller.
  • _display_record:Decodes native text blocks before Unicode paging and preserves only observed exit facts.
  • sendMessage / steering recovery:One composer dispatches the exact original Turn/ingress; unknown response and durable state remain separate.
  • modelControl unknown readback:Truthful unknown state is newly longer; manager narrow layout must allocate it without crushing title/diagnostics.

对主干的风险

[P2] 给管家未知模型状态保留可读的窄屏头部 — 新模型读回提示与执行器选择仍在管家头部的auto列竞争宽度,而本PR新增的窄屏换行规则只覆盖.personal-goal-navigation。当前提交的390px截图中,LoopX 管家被挤成多行,运行环境逐字竖排,头部耗用约260px;用户难以辨认当前会话和诊断入口。Goal页面已知模型的窄屏通过,以及无横向溢出断言,均不覆盖这个状态。此判断来自本头公开截图与共享CSS/模型分支,不伪称运行过配对的base截图。 最小修复:把管家模型/执行器读回也纳入现有响应式头部:在窄屏将这些控件放到有界的独立行或合理换行,保留标题/运行环境可读,仍明确显示模型未知。沿用现有组件,不另建页面;补390px管家unknown-model与known-model两种状态,并回归桌面及Goal头部。

当前头390px管家状态

两个旧P2已修复:SCHEMA命名现在使用所属Codex Chat的常量名,持久schema字符串不变;规模和职责通过既有native_chat内的adapter/model-settings归属和局部actor helper处理,没有提高预算。本轮独立原fdf基线semantic/maintainability通过;中间f149的17/56/1及三个unreviewed错误保留为已修复历史;最新ba32完整premerge6direct+19selected全部通过,0hold。8个提交DCO、73路径公开扫描和配对RFC检查按当前PR差异验证。

Current ba32 exact head630 related Python passed,52 real HTTP/file-store/native stdio steering cases passed,7 recovery units passed, TS typecheck and fresh bundle build/verify passed. Standard premerge6direct+19selected all pass, no hold. Current packaged Ego verifies one shared composer/focus, lost reply then reload without dispatch, blocked changed draft with0 sends and retry of the exact original ingress:1 synthetic Turn,2 HTTP attempts,1 peer effect. No paid model. Earlier f149 actual isolated configuration apply/readback/rollback and native-history Unicode/300-window/failure tests retained only for byte-verified unchanged owners, not represented as ba32 UI reruns.

Ego的状态/普通模型和stream来自合成HTTP夹具,不是真实付费模型。真实原生stdio/HTTP/file-store由另跑的52项生产入口测试覆盖,包含并发去重、旧回合receipt、禁止retarget、权限和恢复。实际设置preview/apply/readback/rollback及native Unicode/退出码47、原记录300条前后翻页、503恢复、lost-reply后只读原回执是在本轮中间f149运行;相关owner逐文件/符号核对不变才保留证据,未冒充ba32整条旅程重新执行。新head的composer单独重建并验证,阻断存储时修改草稿0发送,回到已持久原文可沿原ingress恢复;没有自动开启LoopX模式。

退出码与工具中断事实保持独立于任务成功;raw reasoning没有因legacy SSE或本地合并重新显示,只有显式public summary可展示。作者、claim和reply recipient来自canonical同一投影,不从正文猜测。No optional execution is activated. With namespace absent, default discovery leaves ordinary requests unpinned; active/attached/task/AgentLoop routing precedes default lookup. Profile changes affect only new conversations. Runtime and native-history edits are disclosed presentation/default changes; raw reasoning remains excluded. Existing store/ingress/server authority and default-off AgentLoop remain unchanged.

已应用与本次改动同域的有界整理:把 Codex adapter 和模型值规范化归入既有 native_chat,将作者/claim/接收方投影放入局部 helper,并移除行内第二 composer;没有抬高预算或新增第二状态 owner。 当前产品范围仍保留L1/G1、实际安装/Lark/真实模型资格,未以CLI或截图宣布完成;本次新阻塞只要求修复已经改到的共享管家窄屏头部。

我的整体评价

REQUEST_CHANGES。两个旧P2关闭依据已独立核验,单composer和恢复方向成立;还需修复390px管家未知模型布局。这是已有对话旅程的可审查改进,不把展示、CLI 或模拟模型当作 L1/G1/安装采用完成。当前共享头部的管家移动布局仍需一个局部修复,不能以 Goal 页窄屏通过代替。

English verdict: REQUEST_CHANGES - HEAD ba32f8a; prior schema/maintainability blockers are repaired,630 related Python,52 real HTTP/stdio and7 recovery tests pass. The committed390px manager unknown-model screenshot still crushes the title/runtime label; cover that shared-header state before approval.

Comment thread apps/presentation/dashboard/src/features/personal-workspace/channel-header.tsx Outdated
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>
@mergify

mergify Bot commented Oct 17, 2026

Copy link
Copy Markdown

This pull request has merge conflicts with main and cannot be merged
until they are resolved. Please rebase or merge the base branch, @loopx-agent.

Choose the remote for the base repository, not an out-of-date fork.
For a fork clone, first inspect git remote -v; upstream must point
to https://github.com/loopx-project/loopx.git. If it is absent, add it
with git remote add upstream https://github.com/loopx-project/loopx.git.
Then run:

git fetch upstream
git rebase upstream/main
# Resolve each conflict, git add the resolved files, then git rebase --continue.
git push --force-with-lease origin HEAD

For a same-repository clone whose origin points to
https://github.com/loopx-project/loopx.git, use origin instead of
upstream for fetch/rebase. If you prefer merging the base, use
git merge <base-remote>/main and push normally.

Keep the DCO Signed-off-by trailer on every commit when you rebase.
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@mergify mergify Bot added the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 17, 2026
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>
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>
…ity-delivery-20261017

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>
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>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 17, 2026
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ordering

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…rder

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.

Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

HEAD: 0b40defc1138760b19224a8bae491cf4af961ffb

动机

面向在管家或 Goal 对话中确认当前模型、阅读 Agent 完整答复并追加后续工作的用户。

此前目录首项可能冒充实际模型,工作记录挤占正文,同一回合出现两个输入框,390px 管家标题和运行环境被挤成竖排;本头把真实观察与可选配置分开,用一个输入框明确区分后续排队与本轮纠偏。

已验证窄屏已知与未知模型均可读、可选菜单完整位于视口内,未派发的存储失败恢复后可编辑草稿,真正未确认的请求沿原身份重试,原会话与历史保持可达。

本 PR 不开启 Agent Loop、不改已有工作绑定、不扩大授权,不把工具退出码或公开摘要当作任务验收,也不宣称完整安装态、Lark 或真实付费模型资格。

完整 attached 原生事件/输入/审批对等、安装宿主采用与跨平台运输仍由既有 Slice B 和 R2/R3/G1 验收承接。

改动思路

保留既有配置事务、Session 队列与 ingress 权威;Python 仅适配原生 I/O 和本地持久值,TS 读模型表达观察与用户意图。删除第二编辑器及未派发缓存,比新增投递状态或另一配置 owner 更小且可验证。

本头交付已有对话的真实读回、原历史阅读与单 composer 恢复;不建立新执行器、第二调度器或新的授权来源。

这轮从完整任务重新判断了改动规模:只做 CSS 无法纠正目录冒充实际模型、重复输入或投递恢复;再建一套 provider/配置/队列则会增加状态 owner。当前边界复用原生账户、配置事务和原 Session 的效果权威,前端选择只形成明确意图。普通询问仍是一次消息,已有意图与授权没有新增必选配置或确认轮次;目录探索和新模型选择均为可选。

下表说明 0b40defc1138760b19224a8bae491cf4af961ffb 的行为差异,来自源码与实际入口检查,不把它当作测试回执:

触发 既有问题 当前结果
看当前模型 目录选择可能被误当成当前 只读原生回传;未知明确保留
工作中追加消息 两个编辑器、指令与新消息混杂 一个 composer;Enter 排队,Command+Enter 明确纠偏
浏览器拒绝存储 从未发送的草稿可能锁成未知投递 草稿仍可改;真正未确认者保留原 ingress
回看原记录 工具行与翻页控件争夺正文 折叠连续工作、自然有界滚动、保留源顺序与缺口

具体改动

独立规格基于 docs/architecture/rfcs/desktop-execution-frontends-v0.md,不可变 revision a3e56a38cfa442a65a0f6f84572e226d06f4d6fb。Settings ownership and scope 已实现:管家、设备默认值与 Goal 原绑定保持独立,并复用 preview/apply/readback/rollback。Slice B: attached Codex App 的完整资格仍 deferred:本头仅改善既有真实 owner 的有界历史与恢复,完整 token、busy-host 输入/审批及安装验证仍属既有缺口。Product projection 的 Lark 连接管理为 out_of_scope:没有借模型显示改写 Agent 级连接或听取权限。补充按同版本 design.md 的 Earn The User's Attention 与窄屏规则检查真实首屏,未用本 PR 改写后的文字给自身立新验收。

关键代码讲解

  1. ChatRuntimeController.open_session 接收省略或明确的模型/effort。它先保护 active、attached、worker 和 Agent Loop 身份,再解析普通 Goal 默认值;真正的新配置创建另一个会话,旧历史继续可达。原生回传另存为观察,省略值不会因重启读回而变成用户固定选择。未确认的显式配置在发布新 Session 或提示词前失败。
  2. ChatModelMenu 以当前 Session 观察生成摘要,展开后才读可选目录;请求取消或失败仍保留已观察模型。管家配置仍走原设置 owner。390px 的共享头部保留标题/诊断独立空间,菜单以头部为定位边界,完整落在 14–376px 内。
  3. retainSteeringRequest 先写入并读回原 Session、Turn、ingress、文字和图片。验证失败时恢复旧的已获资格请求,或删除这次从未派发的缓存尝试;可编辑正文仍由 composer 保留。这样既能恢复编辑,又不能用存储故障替换真正未知的原请求;接收回执才退役对应身份。
  4. AttachedAgentConversations 继续通过原宿主 HTTP owner 读取 saved/live 源。向前/向后加载时使用仍可见的源记录恢复锚点,最多保留 300 条;回看冻结插入,回到末尾才采用缓冲观察。工具详情、Unicode 续读、非零退出事实、不可读缺口和重绑定拒绝均保留,不启动另一个 Agent。
  5. todoRequestContent 只在同一 Goal 快照、稳定 id 和兼容摘要对应时连接完整正文与 canonical 作者;失败仍是摘要或未知作者。请求卡和确认分别显示请求者、claim 与接收方,显示 provenance 不选择有权执行决定的人。

完整差异覆盖原生 provider、共享 UI、配置与 canonical 投影,以及聚焦的 HTTP/stdio/browser 负例和配对 RFC。与主干已合入 #6719 的 captured-home catalog 和安全 Runtime 切换协调过,保留本头较新的 Goal profile-home 解析;主干整合提交不算作本 PR 新产品范围。

对主干的风险

没有剩余阻断发现。 三个既有 P2 已逐项核验:SCHEMA 改为所属 Codex Chat 的常量名,持久 schema 字符串保持;transport/normalization 和 actor helper 消除新增规模债务,完整语义与规模检查通过且未提高上限;390px 管家 unknown/known 与桌面、Goal 菜单均已实际验证。额外发现的未派发缓存锁草稿和菜单左侧裁切也在本头修复,并由真实打包负例复现后转绿。

本轮 669 项 Python 通过,覆盖生产 HTTP、真实临时文件 store 与隔离 native stdio。共享 TypeScript 全量回归另有 4867 通过、73 项既有 opt-in/环境跳过、0 失败;没有以跳过的 PostgreSQL 用例宣称真实服务器资格,本 PR 不改权威存储。10 个打包场景通过:模型选择、活动/恢复、请求卡、长答复、work steps、executor chip、管家设置、attached 历史与 follow-up、composer admission。包括存储拒绝后修改、旧草稿迁移、失回执后完成/刷新、原 ingress 重试、Enter FIFO 与 Command 纠偏分流、unsupported adapter 零纠偏效果,以及 native 300 条窗口/Unicode/503/绑定变化。Ego 的整页检查使用公开合成数据;原生 owner 另由生产 HTTP/stdio 测试验证。未运行付费模型,也不把模拟 Session 当作实际安装。

相同 fixture ff91a858cad0807207f4665a6cfb68628fc9040ddd97e2160bb7ab586ce68fb0 分别经过不可变 base 与候选真实 HTTP/文件/native 进程:两边重复与重启均保留原 Session,direct-busy 均 409 且不造 Turn,伪造 Goal 均 400 且不造 Session,native Goal 效果均 0。明确新增的观察显示 native-gpt/high;明确 queue 从原有不支持变成 202,并在原回合完成后执行;明确 effort 从不支持变成经原生确认的 high。最后提交仅同步两处 browser 契约,生产路径与已测实现逐文件一致。

语义与 CI 对齐

复用现有 Session/Turn/ingress、配置 namespace 与 canonical Todo 作者语义;native 文本块和数值退出码仍为 provider-local,public summary 必须明确标记。缺失作者/实际模型/完整来源都保持未知,不从正文猜状态。新增字段为可选,namespace 缺席时不固定模型、不换 home、不改变原 direct-busy 拒绝。显式字段经参数、派发、保存、独立读回和重启路径核验;没有改变 quota、scheduler 或工作义务。自然滚动、原始 reasoning 隐藏、单 composer 和 Enter/Command 分流均已明确披露,没有用“指导”称呼硬性资格。

最终 clean-source premerge 为 6 direct + 19 selected 全通过,0 hold;TypeScript、Ruff、CSS token、bundle/source integrity、双语 RFC、DCO 与公开边界通过。早期仓库内 TMPDIR 导致无仓库 smoke 误认,以及编辑期间 side-effect guard 的失败均保留;最终在仓库外临时目录与未改动源码下重跑,不删断言或提高门槛。按配置 wait_for_ci=false,未查询或等待新 head 的 CI。这个策略不代替精确 head 的公开评审、质量回执和合并就绪门禁。

我的整体评价

APPROVE;本头是 justified_increment,long_horizon=improved,user_experience=improved。重复回合、后续排队和恢复继续沿原身份推进,普通任务减少重复输入与无用配置发现,首屏保留真实状态。保留既有配置事务、Session 队列与 ingress 权威;Python 仅适配原生 I/O 和本地持久值,TS 读模型表达观察与用户意图。删除第二编辑器及未派发缓存,比新增投递状态或另一配置 owner 更小且可验证。 本头交付已有对话的真实读回、原历史阅读与单 composer 恢复;不建立新执行器、第二调度器或新的授权来源。

已应用有界整理而非新增通用框架:删除第二编辑器及无效缓存状态,将 native transport/value normalization 放到最近 owner;保留的是实际持久草稿与独立原宿主所需兼容,不是两套决策规则。未将宽泛父级路线图塞成本修复的前置门禁。最强残余验证缺口是完整安装宿主、跨平台原生运输与付费模型/可选 Lark 资格,仍在既有 owner 与 acceptance 下,未声称完成。维护者已明确授权本 PR 自合并;合并仍以当前 unchanged head 的 closeout、质量与 ready=true 为最后依据。

English verdict: APPROVE - HEAD 0b40def; existing blockers and the reproduced undispatched-draft/menu defects are repaired. 669 Python tests, 10 packaged scenarios, matched real HTTP/native-subprocess comparison and the unchanged-budget premerge gate pass. Full installed-host/Lark/paid-model qualification remains explicitly separate.

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.

Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

HEAD: 588c87f379765c765080fccf5ced6c221c5b8618

动机

面向在管家或 Goal 对话中确认当前模型、阅读 Agent 完整答复并追加后续工作的用户。

此前目录首项可能冒充实际模型,工作记录挤占正文,同一回合出现两个输入框,390px 管家标题和运行环境被挤成竖排;本头把真实观察与可选配置分开,用一个输入框明确区分后续排队与本轮纠偏。

已验证窄屏已知与未知模型均可读、可选菜单完整位于视口内,未派发的存储失败恢复后可编辑草稿,真正未确认的请求沿原身份重试,原会话与历史保持可达。 已确认的追加指令在历史索引 503 后仍保持确认,用户可沿现有读取入口恢复一条 canonical 记录,追加次数不变。

本 PR 不开启 Agent Loop、不改已有工作绑定、不扩大授权,不把工具退出码或公开摘要当作任务验收,也不宣称完整安装态、Lark 或真实付费模型资格。

完整 attached 原生事件/输入/审批对等、安装宿主采用与跨平台运输仍由既有 Slice B 和 R2/R3/G1 验收承接。

改动思路

保留既有配置事务、Session 队列与 ingress 权威;Python 仅适配原生 I/O 和本地持久值,TS 读模型表达观察与用户意图。删除第二编辑器及未派发缓存,比新增投递状态或另一配置 owner 更小且可验证。

本头交付已有对话的真实读回、原历史阅读与单 composer 恢复;不建立新执行器、第二调度器或新的授权来源。

这轮从完整任务重新判断了改动规模:只做 CSS 无法纠正目录冒充实际模型、重复输入或投递恢复;再建一套 provider/配置/队列则会增加状态 owner。当前边界复用原生账户、配置事务和原 Session 的效果权威,前端选择只形成明确意图。普通询问仍是一次消息,已有意图与授权没有新增必选配置或确认轮次;目录探索和新模型选择均为可选。

下表说明 588c87f379765c765080fccf5ced6c221c5b8618 的行为差异,来自源码与实际入口检查,不把它当作测试回执:

触发 既有问题 当前结果
看当前模型 目录选择可能被误当成当前 只读原生回传;未知明确保留
工作中追加消息 两个编辑器、指令与新消息混杂 一个 composer;Enter 排队,Command+Enter 明确纠偏
浏览器拒绝存储 从未发送的草稿可能锁成未知投递 草稿仍可改;真正未确认者保留原 ingress
回看原记录 工具行与翻页控件争夺正文 折叠连续工作、自然有界滚动、保留源顺序与缺口

具体改动

独立规格基于 docs/architecture/rfcs/desktop-execution-frontends-v0.md,不可变 revision a3e56a38cfa442a65a0f6f84572e226d06f4d6fb。Settings ownership and scope 已实现:管家、设备默认值与 Goal 原绑定保持独立,并复用 preview/apply/readback/rollback。Slice B: attached Codex App 的完整资格仍 deferred:本头仅改善既有真实 owner 的有界历史与恢复,完整 token、busy-host 输入/审批及安装验证仍属既有缺口。Product projection 的 Lark 连接管理为 out_of_scope:没有借模型显示改写 Agent 级连接或听取权限。补充按同版本 design.md 的 Earn The User's Attention 与窄屏规则检查真实首屏,未用本 PR 改写后的文字给自身立新验收。

关键代码讲解

  1. ChatRuntimeController.open_session 接收省略或明确的模型/effort。它先保护 active、attached、worker 和 Agent Loop 身份,再解析普通 Goal 默认值;真正的新配置创建另一个会话,旧历史继续可达。原生回传另存为观察,省略值不会因重启读回而变成用户固定选择。未确认的显式配置在发布新 Session 或提示词前失败。

  2. ChatModelMenu 以当前 Session 观察生成摘要,展开后才读可选目录;请求取消或失败仍保留已观察模型。管家配置仍走原设置 owner。390px 的共享头部保留标题/诊断独立空间,菜单以头部为定位边界,完整落在 14–376px 内。

  3. retainSteeringRequest 先写入并读回原 Session、Turn、ingress、文字和图片。验证失败时恢复旧的已获资格请求,或删除这次从未派发的缓存尝试;可编辑正文仍由 composer 保留。这样既能恢复编辑,又不能用存储故障替换真正未知的原请求;接收回执才退役对应身份。

  4. AttachedAgentConversations 继续通过原宿主 HTTP owner 读取 saved/live 源。向前/向后加载时使用仍可见的源记录恢复锚点,最多保留 300 条;回看冻结插入,回到末尾才采用缓冲观察。工具详情、Unicode 续读、非零退出事实、不可读缺口和重绑定拒绝均保留,不启动另一个 Agent。

  5. todoRequestContent 只在同一 Goal 快照、稳定 id 和兼容摘要对应时连接完整正文与 canonical 作者;失败仍是摘要或未知作者。请求卡和确认分别显示请求者、claim 与接收方,显示 provenance 不选择有权执行决定的人。

  6. reconcileConversationHistory 仅按原 Session/message 身份去重,conversationOrder 在不可变记录到达前采用观察到的完成时间;排队回执不伪装执行结束。追加指令直接读取 canonical 历史,不再造临时持久 id。

  7. useConversationHistory.refresh/retry 在已确认投递之后保留读回错误,沿现有历史提示重试读取,包括已有缓存但产生新内容的 Session。用真实打包入口注入一次索引 503,修复前没有恢复入口,修复后读回一条原消息,追加请求数量不变。scope/generation 检查继续拒绝已离开会话的迟到结果。

完整差异覆盖原生 provider、共享 UI、配置与 canonical 投影,以及聚焦的 HTTP/stdio/browser 负例和配对 RFC。与主干已合入 #6719 的 captured-home catalog 和安全 Runtime 切换协调过,保留本头较新的 Goal profile-home 解析;主干整合提交不算作本 PR 新产品范围。

对主干的风险

没有剩余阻断发现。 三个既有 P2 已逐项核验:SCHEMA 改为所属 Codex Chat 的常量名,持久 schema 字符串保持;transport/normalization 和 actor helper 消除新增规模债务,完整语义与规模检查通过且未提高上限;390px 管家 unknown/known 与桌面、Goal 菜单均已实际验证。额外发现的未派发缓存锁草稿、菜单左侧裁切和已确认指令之后的历史读回失败也在本头修复,并由真实打包负例复现后转绿。

本轮 669 项 Python 通过,覆盖生产 HTTP、真实临时文件 store 与隔离 native stdio。共享 TypeScript 全量回归另有 4867 通过、73 项既有 opt-in/环境跳过、0 失败;没有以跳过的 PostgreSQL 用例宣称真实服务器资格,本 PR 不改权威存储。10 个打包场景通过:模型选择、活动/恢复、请求卡、长答复、work steps、executor chip、管家设置、attached 历史与 follow-up、composer admission。包括存储拒绝后修改、旧草稿迁移、失回执后完成/刷新、原 ingress 重试、Enter FIFO 与 Command 纠偏分流、unsupported adapter 零纠偏效果,以及 native 300 条窗口/Unicode/503/绑定变化。最终 8 个场景直接运行于本提交,另 2 个(新增恢复负例、原生历史)在提交前的相同源码运行通过,随后只有 Git 提交记录变化。一次并行原生历史运行在等待 after 响应时超时,保持相同源码单独重跑通过,未提高超时或删断言。Ego 的整页检查使用公开合成数据;原生 owner 另由生产 HTTP/stdio 测试验证。未运行付费模型,也不把模拟 Session 当作实际安装。

相同 fixture ff91a858cad0807207f4665a6cfb68628fc9040ddd97e2160bb7ab586ce68fb0 分别经过不可变 base 与候选真实 HTTP/文件/native 进程:两边重复与重启均保留原 Session,direct-busy 均 409 且不造 Turn,伪造 Goal 均 400 且不造 Session,native Goal 效果均 0。明确新增的观察显示 native-gpt/high;明确 queue 从原有不支持变成 202,并在原回合完成后执行;明确 effort 从不支持变成经原生确认的 high。后续提交补充 canonical 消息去重与实际回复顺序。Python runtime 和 shared packages 与已测实现逐文件一致;最终历史 hook 和打包 UI 已另行验证。

语义与 CI 对齐

复用现有 Session/Turn/ingress、配置 namespace 与 canonical Todo 作者语义;native 文本块和数值退出码仍为 provider-local,public summary 必须明确标记。缺失作者/实际模型/完整来源都保持未知,不从正文猜状态。新增字段为可选,namespace 缺席时不固定模型、不换 home、不改变原 direct-busy 拒绝。显式字段经参数、派发、保存、独立读回和重启路径核验;没有改变 quota、scheduler 或工作义务。自然滚动、原始 reasoning 隐藏、单 composer 和 Enter/Command 分流均已明确披露,没有用“指导”称呼硬性资格。

最终 95-path clean-source premerge 为 6 direct + 19 selected 全通过,0 hold;TypeScript、Ruff、CSS token、bundle/source integrity、双语 RFC、DCO 与公开边界通过。早期仓库内 TMPDIR 导致无仓库 smoke 误认,以及编辑期间 side-effect guard 的失败均保留;最终在仓库外临时目录与未改动源码下重跑,不删断言或提高门槛。按配置 wait_for_ci=false,未查询或等待新 head 的 CI。这个策略不代替精确 head 的公开评审、质量回执和合并就绪门禁。

我的整体评价

APPROVE;本头是 justified_increment,long_horizon=improved,user_experience=improved。重复回合、后续排队和恢复继续沿原身份推进,普通任务减少重复输入与无用配置发现,首屏保留真实状态。保留既有配置事务、Session 队列与 ingress 权威;Python 仅适配原生 I/O 和本地持久值,TS 读模型表达观察与用户意图。删除第二编辑器及未派发缓存,比新增投递状态或另一配置 owner 更小且可验证。 本头交付已有对话的真实读回、原历史阅读与单 composer 恢复;不建立新执行器、第二调度器或新的授权来源。

已应用有界整理而非新增通用框架:删除第二编辑器及无效缓存状态,将 native transport/value normalization 放到最近 owner;保留的是实际持久草稿与独立原宿主所需兼容,不是两套决策规则。未将宽泛父级路线图塞成本修复的前置门禁。最强残余验证缺口是完整安装宿主、跨平台原生运输与付费模型/可选 Lark 资格,仍在既有 owner 与 acceptance 下,未声称完成。维护者已明确授权本 PR 自合并;合并仍以当前 unchanged head 的 closeout、质量与 ready=true 为最后依据。

English verdict: APPROVE - HEAD 588c87f; existing blockers plus reproduced undispatched-draft, menu-clipping and post-confirmation history-recovery defects are repaired. 669 Python tests, 10 packaged scenarios, matched real HTTP/native-subprocess comparison and the unchanged-budget premerge gate pass. Full installed-host/Lark/paid-model qualification remains explicitly separate.

@loopx-agent
loopx-agent merged commit 031ff12 into main Oct 17, 2026
12 of 14 checks passed
@loopx-agent
loopx-agent deleted the codex/chat-observability-delivery-20261017 branch October 17, 2026 13:05
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.

1 participant