Repository navigation
fix(chat): expose observed command and tool progress - #6132
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
There was a problem hiding this comment.
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,源增量不宣称全量完成。
具体改动
关键代码讲解
- CodexActivitySteps.activity_delta:只有非空字符串和已开始、同类型、未终结的步骤能触发。保留的只有已经脱敏的步骤,不保留输出文本。五秒节流只限制观察频率,返回依然是 running;completed 清理临时映射,迟到输出不能复活已结束步骤。
- CodexChatAgentSession.send:既有线程和 Turn 过滤后,将命令输出 delta 和 MCP progress message 接到同一投影 owner,继续使用 agent.phase 和原 on_event 持久路径。没有新增执行、授权、重试或成功判定。
- 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 的独立批准与仓库合并门禁。
原生 Codex 的长命令已经持续产生输出,但 Chat 丢掉了
item/commandExecution/outputDelta;飞书也只看到命令开始、结束或偶尔的回答,用户无法及时感知执行仍在继续。现在沿用已有
CodexActivitySteps、agent.phase与飞书进展消息:真实命令输出和 MCP 进度更新原运行步骤及实际经过时长,五秒合并突发通知。只保留已脱敏步骤名称和时长,不存储或显示输出/工具进度正文;未知、已结束、错回合和错会话事件不会重新激活步骤。现有 Chat 步骤行原地更新时间,飞书在原进展消息显示新输出提示,最终结果继续替换原消息。静默工具不会得到人为定时进展,收到输出也不表示检查通过。归属 presentation RFC §8.8 / R2–R3,Python 改动限于现有原生宿主和飞书 IO 适配,不新增执行、状态或权限 owner。更新既有验收 checkpoint;安装版时序、停止/恢复与社群整体准出仍待独立验收。此修复与 #6125 的回答重复生成问题独立。
验证:
send实现下失败(预期 2 次、实际 0 次);新版通过。覆盖输出不入事件存储、空/未知/错身份/晚到事件、合并、失败退出、原消息编辑与最终答案。