Repository navigation
fix(chat): follow native Antigravity progress and retain failed requests - #7853
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
未发现阻断性问题。通过 Antigravity 助手执行持续有进展任务的用户。同一请求持续输出超过五分钟时,原实现会取消;修复后继续观察同一次执行,只有明确总时限或连续无进展才停止。当前输入独立输出,明确流错误保持失败,失败通知送达后请求仍可见且观察不再发起执行。本 PR 不重放效果未知的失败 Turn,不改变模型、工具权限或原始失败记录。
真实模型完成原业务、历史未知效果与原受众最终回传,仍须原执行和恢复 owner 独立核实。旧内容进入新流、实际执行被截断和错误终态都属于同一原生观察边界,修复后仍通过原 Core、原会话与原回复通道完成工作。
改动思路 / Approach
原生 wire 解释与进展时钟属于现有 Python provider,跨执行器的失败保留属于现有 TypeScript projection;两者均复用 Core 的单执行与恢复边界。本 PR 交付原生当前输入、真实进展和可信终态的观察修复,以及技术失败后的可见保留;不承接未知效果重放或新增业务执行。最强反对理由是:延长观察不能解决历史未知效果,而且无输出长工具仍可能触发无进展保护;因此修改没有添加自动重试,也没有声称原积压已全部完成。相比扩大固定总时限,当前实现保留调用方明确预算,并用真实文本、步骤状态或命令输出变化区分执行进展与卡住的 RUNNING 标志。
| 原生观察 | 旧行为 | 当前 head |
|---|---|---|
| 返回完整历史 | 旧回答可能进入当前流 | 只读绝对当前步骤,覆盖不明则失败 |
| 持续进展超过五分钟 | 被默认总时限取消 | 同一次执行继续;显式预算仍有效 |
| IDLE/DONE 但 stream error | 可能成为成功回答 | 保留失败和未知效果 |
| 失败提示已送达 | 技术失败可能移出待处理 | 保留原请求,独立恢复准入不变 |
表格说明本次状态差异;执行证据来自真实 HTTP 边界、Core/File 和回复扫描器的合成 provider 回归。
具体改动 / Changes
关键代码讲解
- _observed_turn_steps 从原生绝对索引或完整范围推导当前输入的连续步骤。服务器忽略范围参数时不会把旧回答当新内容;缺失、不一致的覆盖直接失败。
- AntigravityAdapter._run_turn 只让当前步骤、响应或工具输出的真实变化刷新进展时钟。明确总时限仍优先;只有当前最后 planner 完成、无待调用工具且 stopReason 正常时才发出最终回答。另一个 native 输入既不采纳,也不取消。
- Core native factory 原样传递 caller 的
hard_timeout_sec,保留 None 的原始意图;其他执行器分支、模型、权限与工具配置没有变化。 - planBoundConversationRequest 沿既有
pending_observation保留精确相关联的 native 技术失败。原 accepted 状态、Session/Turn 一致性、closed 与 source stop/new 仍是必要条件,返回值只用于显示。 - quota_backlog_pending 是未改动的真实只读桥接。测试经过 Core 入队、provider 失败提示核验和 transport 重建,直接禁止观察期间 enqueue/recover,并检查原失败、模型调用数与 provider 写入数不变。
规范:Accepted conversation RFC,spec_ref docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md,spec_revision 8ac384cdcfcf3d6c683ffab43db1a5c14dba0343。ordinary-workspace-conversations-bounded-implementation-checkpoint 的原会话/流/stop owner 边界已实现;native-history-migration-and-unfinished-request-continuation 的“失败通知不是完成、提示不是执行准入”由现有 projection 与恢复 owner 保留。本次没有改写规范或把仅限 Codex 的自动恢复资格扩展到 Antigravity。
六文件共增加 257 行、删除 32 行。生产内容集中在原适配器和两个既有调用/判定位置;其余为既有测试文件中的 wire、时间、终态与无效果断言,没有新增模块、队列、CLI、持久状态或兼容框架。
对主干的风险 / Risks
风险主要在外部 Language Server 的范围返回与终态格式:当前同时支持原范围返回和已观察到的完整历史返回,保留旧版省略 stopReason 的格式,但仍要求完整当前步骤及已完成最终 planner。未知 stop、覆盖不完整、另一个输入、原生 busy 或权限等待都不能成为成功。显式预算和无进展停止的负向用例也通过,避免把“继续有用执行”变成无界挂起。
PASS:447 项受影响 Python 测试、54 项 TypeScript 测试、Ruff、control-plane typecheck,以及 exact-head 标准 premerge 的 6 项直接与 10 项选定检查。同一最终 harness 在 8ac384cdcfcf3d6c683ffab43db1a5c14dba0343 的生产实现上有预期的 8 项 Python、1 项 TypeScript 断言失败,4 项 native 控制和 timeout 投影控制仍通过;恢复后的 head 全部通过。初次 fixture/assertion 和命令入口失败均保留为历史,未删除断言或放宽时限来换取通过。
语义与 CI 对齐
复用既有 native 枚举、错误码和 shared projection,未引入新 authority。diff advisory 的零新载体只代表其支持范围内的扫描结果,真实语义由上述基线反例与调用链验证。根据当前 managed 策略,没有查询或等待 GitHub CI;本地必要检查均已完成。真实模型最终完成业务、长期工具效果及安装采用属于独立验收,合成 provider 不替代这些证据。
我的整体评价 / Verdict
APPROVE,交付判断为 justified_increment。long_horizon 与 user_experience 均 improved:同一有进展执行不再被默认墙钟截断,原入口读回当前请求与真实失败,不新增用户交互轮次。仅修改 loopx/capabilities/native_chat/antigravity_adapter.py、loopx/chat_runtime.py 和 loopx/control_plane/collaboration/conversation_binding.ts 的执行观察与派生值;已检查 apps/presentation/dashboard/src/features/personal-workspace/private-conversation-panel.tsx 的既有 pending_count 消费,未修改页面结构、排版或响应式行为。本 PR 未重新评价既有页面视觉质量,也不以合成 provider 代替真实模型业务验收。
原生 wire 解释与进展时钟属于现有 Python provider,跨执行器的失败保留属于现有 TypeScript projection;两者均复用 Core 的单执行与恢复边界。本 PR 交付原生当前输入、真实进展和可信终态的观察修复,以及技术失败后的可见保留;不承接未知效果重放或新增业务执行。兼容保留针对独立部署 native server 的真实格式差异;无需第二观察/恢复服务。原始失败、未知效果与受保护操作仍须原 owner 处理。本评审对象是 3ccfbec83c0c6c60324b99719546d083d0db67ba;head 或相关调用边界改变时应重新验证。
English verdict: APPROVE 3ccfbec. Original-input history, progress and final proof are corrected; explicit limits, source lifecycle and recovery fences remain intact. 447 Python tests, 54 TypeScript tests and exact-head standard premerge passed.
原 Antigravity Language Server 可能忽略 step 范围并返回完整历史,导致旧回答进入当前流;默认五分钟总时限也会截断仍有真实进展的执行。原生
IDLE/DONE还不足以证明流正常结束。修复沿用原适配器与 Core:按原生绝对索引限定当前输入,默认五分钟无进展才停止,显式总时限继续生效;只接受正常的最终响应。流错误、覆盖不完整或另一个原生输入均保持失败。技术失败提示送达后,既有待处理投影继续保留原请求,执行恢复仍由原 owner 的独立准入决定。
验证:447 项受影响 Python 测试、54 项 TypeScript 测试、Ruff、control-plane typecheck,以及 exact-head 标准 premerge 的 6 项直接检查和 10 项选定检查全部通过。真实 HTTP 边界的可控 native provider、Core/File 与 Lark 回复扫描器覆盖原调用与失败保留;同一最终 harness 在旧版生产实现复现 8 个 Python 和 1 个 TypeScript 断言失败。按 managed 策略未查询或等待 GitHub CI。
限制:合成 provider 不证明真实模型完成业务;本变更不重放效果未知的失败 Turn,也不改变模型、工具权限或原始失败记录。没有页面结构或视觉变化。