Skip to content

fix(chat): restore recovery and reuse native Session monitoring - #7261

Merged
loopx-agent merged 2 commits into
mainfrom
codex/managed-session-native-monitor-20261024
Oct 24, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/managed-session-native-monitor-20261024

Conversation

@loopx-agent

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

Copy link
Copy Markdown
Collaborator

Bot failure recovery still called the Codex-home method removed by the managed-Session refactor. Route that caller through the existing shared context verifier, retaining original profile, source, no-effects and retry fences.

Also connect an explicitly authored local managed-Session watch to the existing idle wake service, Core worker, observation adapter and native monitor-poll. The canonical Todo owns its cadence, deadline and pause state; registration alone enables nothing, and observing native Goal work starts no model and spends no delivery slot. Corrupt metadata discovery is isolated while direct queued-work reads remain strict.

Validation: 230 Python tests (168 native/monitor/host/report/context tests plus 62 original automatic-recovery tests), 18 TypeScript tests, control-plane typecheck and packaged frontend build pass. Exact-head premerge passes 6 direct and 15 selected checks with no manual holds. A real wake/Core baseline-head comparison and removed-handoff mutation check the production producer. No remote CI was queried (wait_for_ci=false). Earlier failures exposed the missed recovery caller and corrupt discovery; both are repaired. Test timing also now respects the existing second-resolution clock and strictly ordered native observations.

This is native work-state observation and recovery repair. Agent workspace UI, natural-language recurring configuration, report generation and production backlog completion are separate acceptance items. No second scheduler, task store or consumer is introduced.

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 · max

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

动机

需要由原 Bot 自动恢复请求、并在已绑定 Agent 会话中持续观察原生任务的使用者。
此前故障恢复会调用已移走的方法而报错,普通受管会话即使有明确监控任务也没有到期执行入口;现在恢复复用共享校验器,显式监控通过原唤醒服务完成一次原生观察。
真实 Core 和原生任务验收证明,到期观察推进原任务期限,原模型调用记录不变;失败请求恢复的既有测试重新通过。
本 PR 不完成自然语言周期配置、Agent 工作台界面、报告生成或生产积压业务,也不新增调度器、任务库或消息消费者。
完整 Agent 界面、自然语言配置、通用周期报告和生产原消息最终回传仍需沿既有接收任务独立验收。

我的判断是 justified_increment:这次把“有明确任务但没有执行入口”的缺口接到了现有生产唤醒路径,同时修复上一轮共享上下文重构遗漏的自动恢复调用者。仅仅增加一个观察函数或让调用者手动补发,都不能解决持续运行的问题。本 PR 仍不是完整周期任务产品的完成声明。

改动思路

复用既有原生任务、Core worker、观察适配器及 monitor-poll,把身份和观察判定留在现有类型层,把原生读取及调用留在聊天适配层。
当前交付显式原生监控的真实到期闭环与自动恢复回归修复;完整产品入口和报告组合仍由既有工作接续。
原生 Todo(任务记录)继续决定启用、暂停、到期和结果;Core 继续保存原会话中的操作身份。新增分支只负责把一个已明确授权的到期观察交给现有执行者,不创建第二个定时器、任务库、模型 worker 或消费者。私聊管家的组合来源与普通 Agent 的原生任务来源权限不同,保留独立来源读取,但共享哈希规范化、观察适配器和原生结算规则。另一处修复直接复用共享 Codex 上下文校验器,没有增加兼容别名或第二个认证决策。

以下表格由精确版本 3b14164693583779e0a68524c82b20237f3182b7 的控制流整理,属于解释性对照;执行证据另列。

触发 原先 当前
原会话有显式到期监控,无私聊绑定 没有本地观察入口 原唤醒服务接入同一 Core worker,原生 poll 更新期限
只有注册和会话,没有监控任务 没有观察执行 仍没有观察执行;不猜测订阅意图
原恢复扫描器处理可继续的失败 调用已移走方法并报错 使用现有共享校验,保留原来源与无效果证明
一个会话元数据损坏 新扫描可能中断全轮 枚举跳过损坏元数据;直接排队请求读取仍严格失败

具体改动

  1. pump_managed_session_monitors 从已有 DelegationWakeService 被调用。读取当前 Core 会话和完整原生任务,要求唯一匹配的显式目标;忙碌、排队、暂停、停止、已撤销注册或身份不符均不接纳观察。一分钟缓存只是读取提示,重启或丢失缓存不会改写期限。
  2. ManagedSessionTurn.submit 使用原生任务期限和租约代际形成原操作见证,同一请求仍由现有 Core 保存。只有内部原生监控分支使用观察适配器;普通有限任务保留原模型及独立验证路径。已接受但失败或未知的操作只能读回,不能因为服务重启而重放。公开 HTTP 参数白名单没有增加监控期限或任意执行命令。
  3. admitManagedSessionTurn 对齐原 Agent、Session、Goal 生命周期、任务目标、动作、所属者和期限,提交观察前再次核对。observeManagedWork 读取完整原生工作字段,排序后哈希,并排除所有连续监控的自身时钟、哈希和回执,避免观察自身制造工作进展。私聊组合仍核验原授权来源,没有授予本地会话组合访问权。
  4. recover_failed_request 改用 checked_session_home;原 profile、来源、无效果证明、保留失败 Turn、确定性继续和原受众回传机制保持。chat_store.py 仅在会话枚举中隔离 UTF-8 损坏;曾尝试在公共读取器吞掉异常,回归测试证明那会把损坏队列误当空闲,该尝试已撤回。直接 Session/Turn 读取继续严格,损坏字节不改写。

规范来源为 docs/product/periodic-reports.md,不可变基准 55dea1408acfeb0bea416f1c3e372d5c1b480d5c 的 Managed Agent execution boundary(基准正文)。该节没有编号,用原文短语作为 criterion_id:original Session 和 registered Agent 已由原身份及恢复测试覆盖;second scheduler 通过复用原生 owner 满足;managed and attached 的完整页面留给既有 Agent 工作台任务;recurring task composition 在基准中明确尚未完成,本 PR 保持这一说明。新增文档只是具体原生监控作者入口,不用本次改写后的文字反向定义验收。实际 CLI 审计发现示例原先多写了不支持的 todo add --agent-id,已在最终提交删除;赋予执行者继续使用现有 --claimed-by。

对主干的风险

最强风险是“函数测试通过,但原生产者没有调用它”,以及把损坏来源当成没有任务。独立审计使用同一合成来源和原生 Core/SQLite 后端,通过实际 DelegationWakeService 比较不可变基准生产函数与当前版本:显式到期监控从接纳 0 次变为 1 次,并完成原生 poll、推进期限,模型调用记录保持不变。故意只移除本地交接后,同一独立接纳/完成断言失败,退出码为 1;这验证了生产连接的回归敏感性。它是有界生产函数对照,未声称整个基准二进制或所有外部部署完全等价。关闭状态对照均为 0 次执行、历史与原生工作不变;仍有便宜的元数据发现读取,不能写成零 IO。

完整来源审计经真实原生 CLI 创建超过显示窗口的 25 个工作任务,反转完整读取顺序后仍全部观察;启用后加入第 26 个任务,下一独立期限的观察产生真实哈希变化。完整来源不可用时不接纳 Core 操作,不能把失败解释为空集合。File/SQLite 覆盖重启、未到期、忙/排队优先、失败操作不重放、错误身份、观察后暂停/撤销/停止,以及损坏会话不阻塞另一监控。模型、app-server 和消息 provider 是合成边界;Core 与原生 Task authority 为真实路径。这些结果不等于生产消息已补办或用户收到了最终回复。

验证合计 230 项 Python 测试通过(168 项原生监控/host/report/context,另 62 项原自动恢复),18 项 TypeScript 测试通过,控制面类型检查及打包前端兼容构建通过。精确提交 premerge 的 6 项直接检查和 15 项选中检查通过,0 自动失败、0 人工 hold,未修改任何预算或扫描范围。最终第二提交只修正文档的 CLI 选项,生产与测试代码与已测版本字节一致;对照和原生作者入口按最终版本再次执行。wait_for_ci=false,没有查询、轮询或等待远端 CI。

先前失败保留:完整回归暴露缺失恢复方法;新发现扫描暴露损坏 UTF-8;测试暂停调用缺原因,带微秒“当前时间”偶尔未到期,且不同原生 poll 的同秒时间违反已有严格排序。最终测试使用正确原生生命周期,并等到下一真实秒再构造独立窗口,没有放宽原生时钟、租约或未知效果门禁。实际作者审计的 CLI 选项错误也保留并修正。失败结果没有被重新标记为自动业务完成。

语义与 CI 对齐

这次复用已有 continuous_monitor、work_kind=monitor、原 Session 及 native poll 生命周期,没有新增通用结算义务或 Agent 提示词。观察结果只描述当前工作状态,不能证明 Task 或 Goal 已完成。共享层的纯判定和主机 IO 仍分属原 owner,观察与业务执行分开。维护性、公开边界、语义/监控 canary 与类型门禁均通过;有界语义扫描只提供其实际检查范围的证据,不被当作穷尽性证明。

我的整体评价

APPROVE,属于有真实默认入口和独立恢复验收的 bounded increment。long_horizon 为 improved:原 worker 中完成观察、下一窗口续办、未来原生工作被完整观察、未知操作不重放,并且原自动恢复重新可用。user_experience 为 improved,范围是减少恢复故障和已授权监控的人工介入;原生 CLI 是可选技术入口,不能冒称已实现自然语言产品。复用既有原生任务、Core worker、观察适配器及 monitor-poll,把身份和观察判定留在现有类型层,把原生读取及调用留在聊天适配层。
当前交付显式原生监控的真实到期闭环与自动恢复回归修复;完整产品入口和报告组合仍由既有工作接续。

已检查现有聊天服务、Session 投影及前端调用:本次没有渲染组件、布局或样式变更,视觉检查不适用。
未证明完整 Agent 页面、手机体验、自然语言模型理解或任何生产积压已完成。
因此没有新增截图或视觉质量通过声明,打包构建只证明现有前端兼容。额外维护成本是一个原生观察变体及便宜的发现读取,数据、时钟、租约和执行者仍由既有组件拥有;两个附带修复是同一无人值守路径上经回归验证的实际故障,没有引入新框架。保留已发表的主报告与原操作,不靠人工代答或重放改善数字。

残余风险是完整 UI/NL/报告组合尚未验收、真实模型与生产回传不由本合成旅程证明,以及大量空闲受管会话的发现 IO 尚未作性能基准。当前没有证明性能回归,也没有用延长超时或扩大权限隐去问题。本评审仅对 3b14164693583779e0a68524c82b20237f3182b7 有效;发布的作者自评不等于 GitHub 正式自批准,合并仍须当前精确版本 readiness 和既有用户授权,不能开启原生自动合并。

English verdict: APPROVE 3b14164693583779e0a68524c82b20237f3182b7. The original wake/Core/native-poll path and guarded recovery pass 230 Python tests, 18 typed tests and local exact-head premerge checks. Baseline/head, default-off, full-source and deliberate handoff-removal checks support this bounded increment. No blocking finding; full UI/NL/report acceptance and production backlog completion remain unverified.

@loopx-agent
loopx-agent merged commit a6f2805 into main Oct 24, 2026
26 of 32 checks passed
@loopx-agent
loopx-agent deleted the codex/managed-session-native-monitor-20261024 branch October 24, 2026 13:46
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