Skip to content

fix(chat): expose observed command and tool progress - #6132

Merged
huangruiteng merged 1 commit into
mainfrom
codex/chat-observed-tool-progress-20261010
Oct 10, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/chat-observed-tool-progress-20261010

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

原生 Codex 的长命令已经持续产生输出,但 Chat 丢掉了 item/commandExecution/outputDelta;飞书也只看到命令开始、结束或偶尔的回答,用户无法及时感知执行仍在继续。

现在沿用已有 CodexActivitySteps、agent.phase 与飞书进展消息:真实命令输出和 MCP 进度更新原运行步骤及实际经过时长,五秒合并突发通知。只保留已脱敏步骤名称和时长,不存储或显示输出/工具进度正文;未知、已结束、错回合和错会话事件不会重新激活步骤。现有 Chat 步骤行原地更新时间,飞书在原进展消息显示新输出提示,最终结果继续替换原消息。静默工具不会得到人为定时进展,收到输出也不表示检查通过。

归属 presentation RFC §8.8 / R2–R3,Python 改动限于现有原生宿主和飞书 IO 适配,不新增执行、状态或权限 owner。更新既有验收 checkpoint;安装版时序、停止/恢复与社群整体准出仍待独立验收。此修复与 #6125 的回答重复生成问题独立。

验证:

  • 318 个 Chat / 活动步骤 / 飞书进展与会话测试通过;最终改动再跑相关 60 项通过。
  • 同模型、权限与合成前台命令的真实 Codex 前后对照:两侧均观察到 7 条输出通知;旧版投影 0 次运行中输出更新,新版投影 3 次。原始记录保持私有;这证明事件投影修复,不声称模型或命令耗时变快。
  • 新回归用例在精确旧版 send 实现下失败(预期 2 次、实际 0 次);新版通过。覆盖输出不入事件存储、空/未知/错身份/晚到事件、合并、失败退出、原消息编辑与最终答案。
  • 现有前端 parser / 单行 merge / React 组件验证:10→20 秒原地更新,失败退出码保留。飞书真实传输代码的测试验证同一回复更新、重放不重复、最终答案完整;没有声称安装版飞书准出。
  • 仓库 premerge 风险校验通过(11 个选择项),七文件公开边界扫描与 diff 检查通过。活动投影模块严格 mypy 通过;额外的三文件 mypy 扫描仍有 5 项既有诊断,精确主干对照为 9 项、无新增诊断,未把该额外扫描写成全绿。

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: model_agent | GPT-6 | OpenAI | self_reported

动机

用户让 Chat 或个人 Bot 执行长命令或调用工具时,需要在原会话里看到真实进展。
旧路径收到命令输出仍只显示开始和结束;新路径将同一正在运行的步骤按真实输出更新已运行时间,用户无需反复询问进度。
同一实际原生命令的七次输出,旧版投影零次运行中更新,候选版投影三次;原有 App 组件和飞书消息均能消费这些进展。
本 PR 不提高命令速度,不凭计时器制造进展,也不宣称已完成社区 Bot 整体准出。
安装版飞书时延、原生停止接续和完整社区三轮准出仍待实际验收。
这是有实际结果的局部增量,不能据此把父级 Bot 准出标为完成。

改动思路

事件接线留在现有 Python 宿主适配器,通用步骤投影复用 CodexActivitySteps,飞书只消费固定标签;不新增执行或调度 authority。
本次边界是已有命令输出和工具进展的可见性修复,已有答案、终态、会话归属和私密受众由原 owner 继续负责。
相比要求模型多发一句话,接通已经存在的宿主事件能解决实际丢失;相比定时刷新,它只报告真实输出。复用既有步骤和 duration_ms,避免新建进度存储或新的执行状态。
接受的规格是 docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.md,原始版本 95868b6:§8.8。本次追加的是进展记录,不能用修改后的记录重定义验收。
8.8-real-host-events:已实现真实宿主输出观察,不显示原始输出。
8.8-source-and-replay:已验证源线程/Turn过滤、持久事件读回、原消息更新和终态答案保留。
8.8-stop-and-channel-qualification:完整安装渠道验收留在原交付 owner,源增量不宣称全量完成。

具体改动

关键代码讲解

  1. CodexActivitySteps.activity_delta:只有非空字符串和已开始、同类型、未终结的步骤能触发。保留的只有已经脱敏的步骤,不保留输出文本。五秒节流只限制观察频率,返回依然是 running;completed 清理临时映射,迟到输出不能复活已结束步骤。
  2. CodexChatAgentSession.send:既有线程和 Turn 过滤后,将命令输出 delta 和 MCP progress message 接到同一投影 owner,继续使用 agent.phase 和原 on_event 持久路径。没有新增执行、授权、重试或成功判定。
  3. project_progress:从原有事件折叠固定的“收到新输出/工具进展”和实际耗时,保留已生成答案。既有消息编辑间隔、预算、终态替换和回放逻辑保持原 owner;App 同样复用已有 schema、同 id 合并和耗时展示。
    实际原生命令对照:相同任务各收到七次宿主输出;旧版零次、候选三次运行中投影。318 项运行时测试及最终60项重点测试通过,仓库按变更选定的 premerge 与七文件公开边界检查通过;旧 base 的真实 stdio 回归明确失败为 0 对 2,证明不是只测新辅助函数。现有 React 组件合并/渲染 probe 通过;它不是安装版全视口验收。

对主干的风险

最强风险是输出泄露、旧 Turn 混入、输出误判完成或消息频繁编辑。此改动不传递原始输出,保留现有源过滤,对未知、空、错误类型和已完成步骤不发进展;故障仍由终态步骤显示。同一飞书消息保留之前答案并最终替换为完整结果,回放不产生新编辑。原有飞书预算仍然有限,安静工具没有可观察输出时也不会制造进度,所以不能承诺每30秒必更新。
额外三模块 mypy 检查仍有五项旧诊断,准确 base 有九项且候选没有新增错误;activity 模块严格检查通过,不能称整个类型检查全绿。MCP 协议路由、飞书编辑与终态由 fixture 覆盖,真实原生对照覆盖命令输出;安装版飞书和停止恢复仍须原独立渠道验收。未查询或等待远端 CI。本地源修改可独立回滚,不迁移历史事件或扩大受众权限。

我的整体评价

事件接线留在现有 Python 宿主适配器,通用步骤投影复用 CodexActivitySteps,飞书只消费固定标签;不新增执行或调度 authority。
本次边界是已有命令输出和工具进展的可见性修复,已有答案、终态、会话归属和私密受众由原 owner 继续负责。
增量直接改善用户在原会话等待长任务的体验,且保留原执行、失败、最终结果和后续接续 owner。没有用数量、spinner 或新字段替代完成依据。当前未发现本源增量的阻塞问题,父级安装验收仍开放:安装版飞书时延、原生停止接续和完整社区三轮准出仍待实际验收。
English verdict: APPROVE
本 PR 作者账号只能发布 COMMENTED 自评;该结论不等于独立 GitHub APPROVED。合并及安装继续服从准确 head 的独立批准与仓库合并门禁。

@huangruiteng
huangruiteng merged commit 2724802 into main Oct 10, 2026
11 checks passed
@huangruiteng
huangruiteng deleted the codex/chat-observed-tool-progress-20261010 branch October 10, 2026 16:27
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