Skip to content

feat(report): schedule full-body reports in original Agent sessions - #7267

Merged
loopx-agent merged 3 commits into
mainfrom
codex/managed-session-periodic-report-20261024
Oct 24, 2026
Merged

loopx-agent merged 3 commits into
mainfrom
codex/managed-session-periodic-report-20261024

Conversation

@loopx-agent

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

Copy link
Copy Markdown
Collaborator

普通已绑定 Agent 会话以前能观察原生任务,却没有按日历生成报告并回到原会话的完整链路。现在在现有 Goal 周期报告设置里选择原 Agent 会话、预览并保存计划,原 worker 到期生成报告;独立读回完整正文后才推进送达游标,页面可直接打开原消息全文。

  • 复用原生 calendar/window、有限生成 Task、Turn、独立校验和 periodic-report 冻结产物;原 Core Session 接收一个完整正文,重启或记账回复丢失时读取原结果,模型不重跑。
  • 仅显式 Goal 的 weekly-progress + 已绑定 managed Session 生效;忙/排队用户工作优先,暂停、错身份、撤注册与停止拒绝执行。私有管家及既有 Goal Channel 路径保留原有 owner。
  • 原 Goal 的完整当前 Task 和已完成 Agent 历史进入冻结来源;当前观察与过去窗口分开,不把 Task 完成当业务验收。页面区分执行失败、送达未知和完整正文已读回。

本次交付已有会话的日/周报告闭环。自然语言配置、任意周期任务/profile、完整 managed/attached Agent 工作台及无效作者窗口的取消仍未完成,保留在已有后续工作中;未启用的会话不创建任务、调用模型或外发。生产积压完成和自然生产截止时间仍需原服务独立验收。

验证:整合后 177 项原生 host/monitor/report/Windows 回归(包含 75 项报告 File/SQLite 用例)、106 项配置/日历/intent 回归、15 项类型层测试;控制面/前端类型检查、打包及 standard premerge 的 6 项直接检查和 19 项选中检查通过;工具为 8 张图片保留人工视觉门,逐图像素、PNG 元数据与合成来源另行评审,未把文本扫描当作图片隐私验收。独立原 wake 对照中 base 0 次、head 1 次生成/正文送达,关闭前后均 0 次;移除报告 handoff 的 mutation 被同一结果断言拒绝。26 条真实 native 来源覆盖超过展示上限,源不可用不调用模型。合成模型 fixture 已固定导入时源码,避免回归运行时编辑造成源码截取错位;原失败记录保留。

视觉验收:以下为真实打包页面、HTTP/Core/SQLite 的隔离合成数据;模型/Provider 为合成运输。基线 c1a589aac771b39df9137dc808280c2a33fb4cbd,实现与界面 1fe1582cf8ad136b0df0f0c76d1e86cfc3232849,当前 head 095328ebfd011c7bfd143ef9689189fa42c21847 合入主干 UTF-8/LF 报告修复,并验证新会话报告在非 UTF-8 默认编码下正常回传;界面及八张截图内容未变。此前精确 head 的评审保留为历史,新 head 已重新完整审查。桌面 1200×888,窄屏为 390×844 视口模拟。完整报告 27,750 字符、5 节均可读;状态只读请求失败后显示未知,恢复读取及暂停不新增模型调用。共享设置页保存控件仍需纵向滚动,未将其泛化为整套 Agent 工作台验收。无生产消息、账号或私有路径。

桌面之前:原始 route 桌面之后:原会话、送达与正文
Before After
窄屏之前 窄屏之后
Before narrow After narrow
原消息全文(窄屏) 状态暂时未知(窄屏)
Original full body Unknown readback

复现入口及边界见 packaged journey 与 周期报告使用说明。启用、预览、正文查看、暂停和不重放失败的恢复边界均沿用原配置和执行 owner。

… sessions

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

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 · OpenAI · self_reported

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

详细中文评审

动机

需要让现有 Agent 按日历汇报,并在原会话直接阅读完整结果的用户。 过去普通受管会话只有状态观察,配置日历后仍没有报告回传;现在选择原会话并保存计划,到期由原 worker 生成一次,正文读回后即可打开全文。 已在真实打包页面、Core 与 SQLite 验证一次模型调用、一个原消息全文、独立送达游标和暂停;丢失记账回复的 File/SQLite 恢复不重复模型或正文。 本 PR 不完成自然语言配置、任意周期任务或完整 Agent 工作台,也不代办生产积压或证明真实模型报告质量。 完整 managed/attached Agent 入口、自然语言周期配置、任意 profile、无效作者窗口取消和生产自然截止时间仍由既有工作继续。 因此本次是有用的完整报告切口,并不以配置存在、Task 完成或截图替代生产消息最终闭环。

改动思路

日历和结算继续由现有原生 owner 决定,新增的只是原 Goal 来源与原 Core 消息读写适配;共享 frontier 和类型层恢复判定收敛原私聊及本地会话的重复控制流。 本次边界是已有原 Agent 会话的显式日/周报告:配置、到期生成、完整正文读取、暂停及可证明的剩余效果恢复。 不改变当前原生权限、日历或结算 owner;不增加 timer、任务库、模型 worker 或消息消费者。配置仅在已有 Goal 编辑器保存,实际报告由原 worker 执行,模型只交付内容,原生 Turn 负责有限生成任务的独立验证、写回和额度。

触发 原行为 本次结果
已绑定本地 Agent 会话的日历到期 无报告 producer/原会话回传 原 worker 一次生成,完整正文读回后推进游标
送达记账回复丢失或原生结算中断 不能据一次成功推断送达 读原生成/原消息,只续办可证明的剩余效果
未启用、忙/排队、错身份或读取失败 不能借配置转移授权 保留工作;页面显示暂停、失败或未知

具体改动

规范依据为 docs/product/periodic-reports.md,固定在 c1a589aac771b39df9137dc808280c2a33fb4cbd 的既有 Managed Agent execution boundary。registered Agent、original Session 和 existing owners 在本切口有实际类型准入、原 worker 与完整正文证据;managed and attached 继续由既有 Agent 工作台任务完成;natural-language configuration 按原规范保留为未完成边界。本 PR 对说明文档的更新不反过来作为独立验收规范。

关键代码讲解

  1. loopx/control_plane/collaboration/steward_managed_mode.ts 的 admitManagedSessionTurn 复用 admitManagedSessionIdentity,校验原注册 Agent、Session/Goal lifetime、订阅 revision、原 window 和 Task;reportSettlementOnly 统一私有及本地剩余效果恢复,拒绝模型重跑。空 Agent 的旧会话仍返回明确不可用,已修复最初回归的错误类型。
  2. loopx/capabilities/native_chat/steward_reports.py 的 _frontier 由原 idle wake 调用,复用现有日历、有限 Task 与原 native Turn;本地来源、私有 portfolio 来源分开,避免借接收位置扩大读取范围。
  3. loopx/capabilities/periodic_report/private_generation.py 的 prepare_session_report 冻结完整 native Task 与 completed history,并明确当前观察不是过去截止时刻的状态重建;26 条真实来源的反序读取和不可用来源均有真实 native 验证。
  4. loopx/capabilities/native_chat/steward_reports.py 的 publish 读取原 native commit,在同一配置/Goal 栅栏下幂等追加原 Core 消息,再逐字读回正文与原 Turn,最后提交现有 publication cursor。cursor 单独存在不能让页面展示一个已不可读的正文链接。
  5. apps/presentation/dashboard/src/features/personal-workspace/periodic-report-session-field.tsx 在既有配置页选择原会话,读取真实状态并打开现有完整答复页;没有新建报告 viewer、配置 authority 或动作执行入口。

对主干的风险

最重要的风险是结算成功但正文未到、暂停后晚到结果越界,或恢复时重复调用模型。File/SQLite 的丢失回复、原生验证/写回/额度、原事件丢失及重启用例覆盖这条因果链;旧失败/部分答复保留,不重放未知模型结果。忙与排队用户工作优先,错 Session、撤注册、停止和 profile 不匹配不选择替代执行者。

最终报告套件 75 passed;此前 176 项 native/monitor/host 和 106 项配置/日历/intent 回归、15 项类型层测试通过;类型检查、打包、ruff 通过。原 wake 同一 oracle 在 base 无生成、head 一次生成并回传,关闭前后均无调用;移除报告 handoff 的 mutation 会失败。另保留一次运行中编辑测试源导致晚期 inspect 截错合成模型源码的失败,已改为导入时固定 oracle,并以改变后续源码读取的反例和完整 75 项复验覆盖,没有放宽断言或限额。

standard premerge 的 6 项直接检查与 19 项选中检查无失败;自动结果仍为 manual_review_required,因为 8 个 PNG 超出文本扫描。此精确版本评审逐图检查了像素、PNG metadata 和合成来源:session-before-desktop.png、session-before-narrow.png、session-body-desktop.png、session-body-narrow.png、session-delivered-desktop.png、session-delivered-narrow.png、session-paused-desktop.png、session-unknown-narrow.png;metadata 仅标准 Display P3/Google 色彩 profile,未观察到私人消息、路径或账号。该人工结论满足相应视觉门,保留原自动收据,不把图片伪称为文本扫描通过。CI 按当前 Goal 策略未查询或等待。

语义与 CI 对齐

复用既有 native report、Task、window、Session 和 publication 词汇;新 route 是精确原会话接收引用,不能授予新 Agent、portfolio 或外发权限。共享 CLI reporter 对此明确原会话路径不抢占,普通 Goal Channel/私有管家保持原 owner。未开启时只有可发现的设置和只读状态,不创建 Task、调用模型、发送正文或增加额度。相关语义检查无新受支持词汇候选;这只是有边界的 advisory,不代替实际调用/恢复证据。

我的整体评价

没有当前阻塞发现。long_horizon 与 user_experience 均为 improved:配置到原 worker 的实际产出、后续正文读回和有限恢复已经连上。桌面将原始路由换成原 Agent 会话、真实送达状态和正文入口;窄屏信息可读,未知状态可重新读取,长篇正文复用现有完整答复页。 共享设置页在这些高度仍需纵向滚动到保存控件;未验物理手机、生产模型质量、生产积压完成或整套 Agent 工作台。 视觉验收包括桌面、390×844 窄屏及 27,750 字符、30 条长重复内容的完整答复页;手机证据仅视口模拟。日历和结算继续由现有原生 owner 决定,新增的只是原 Goal 来源与原 Core 消息读写适配;共享 frontier 和类型层恢复判定收敛原私聊及本地会话的重复控制流。 本次边界是已有原 Agent 会话的显式日/周报告:配置、到期生成、完整正文读取、暂停及可证明的剩余效果恢复。 比仅加表单/提示词有真实交付价值,也保留原生 owner 的边界,代码与风险相称;无效作者窗口取消和更广自然语言/Agent 工作台不是本次已完成结论。

English verdict: APPROVE — exact head 6189b3d3fa10d6e432d5565ddc0d403b37ee8916. The explicit original Agent Session calendar reaches the existing native worker, validated generation and one independently readable full-body Core return. File/SQLite recovery and disabled-path counterfactuals, packaged settings/viewer, typechecks/build and local risk checks support this bounded increment. Eight binary privacy holds were separately reviewed; CI was not consulted. General natural-language tasks, invalid-window cancellation and production natural-deadline quality remain unqualified.

@mergify

mergify Bot commented Oct 24, 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 24, 2026
…-periodic-report-20261024

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

# Conflicts:
#	loopx/capabilities/native_chat/steward_turn.py
@mergify mergify Bot removed the needs-rebase Mergify: the pull request has merge conflicts with its base branch label Oct 24, 2026

@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 · OpenAI · self_reported

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

详细中文评审

动机

需要让现有 Agent 按日历汇报,并在原会话直接阅读完整结果的用户。 过去普通受管会话只有状态观察,配置日历后仍没有报告回传;现在选择原会话并保存计划,到期由原 worker 生成一次,正文读回后即可打开全文。 已在真实打包页面、Core 与 SQLite 验证一次模型调用、一个原消息全文、独立送达游标和暂停;丢失记账回复的 File/SQLite 恢复不重复模型或正文。 本 PR 不完成自然语言配置、任意周期任务或完整 Agent 工作台,也不代办生产积压或证明真实模型报告质量。 完整 managed/attached Agent 入口、自然语言周期配置、任意 profile、无效作者窗口取消和生产自然截止时间仍由既有工作继续。 因此本次是有用的完整报告切口,并不以配置存在、Task 完成或截图替代生产消息最终闭环。

改动思路

日历和结算继续由现有原生 owner 决定,新增的只是原 Goal 来源与原 Core 消息读写适配;共享 frontier 和类型层恢复判定收敛原私聊及本地会话的重复控制流。 本次边界是已有原 Agent 会话的显式日/周报告:配置、到期生成、完整正文读取、暂停及可证明的剩余效果恢复。 不改变当前原生权限、日历或结算 owner;不增加 timer、任务库、模型 worker 或消息消费者。配置仅在已有 Goal 编辑器保存,实际报告由原 worker 执行,模型只交付内容,原生 Turn 负责有限生成任务的独立验证、写回和额度。

触发 原行为 本次结果
已绑定本地 Agent 会话的日历到期 无报告 producer/原会话回传 原 worker 一次生成,完整正文读回后推进游标
送达记账回复丢失或原生结算中断 不能据一次成功推断送达 读原生成/原消息,只续办可证明的剩余效果
未启用、忙/排队、错身份或读取失败 不能借配置转移授权 保留工作;页面显示暂停、失败或未知

具体改动

规范依据为 docs/product/periodic-reports.md,固定在 50c56079675b1eb3ea44ecef78ffba9e992de57d 的既有 Managed Agent execution boundary。registered Agent、original Session 和 existing owners 在本切口有实际类型准入、原 worker 与完整正文证据;managed and attached 继续由既有 Agent 工作台任务完成;natural-language configuration 按原规范保留为未完成边界。本 PR 对说明文档的更新不反过来作为独立验收规范。

关键代码讲解

  1. loopx/control_plane/collaboration/steward_managed_mode.ts 的 admitManagedSessionTurn 复用 admitManagedSessionIdentity,校验原注册 Agent、Session/Goal lifetime、订阅 revision、原 window 和 Task;reportSettlementOnly 统一私有及本地剩余效果恢复,拒绝模型重跑。空 Agent 的旧会话仍返回明确不可用,已修复最初回归的错误类型。
  2. loopx/capabilities/native_chat/steward_reports.py 的 _frontier 由原 idle wake 调用,复用现有日历、有限 Task 与原 native Turn;本地来源、私有 portfolio 来源分开,避免借接收位置扩大读取范围。
  3. loopx/capabilities/periodic_report/private_generation.py 的 prepare_session_report 冻结完整 native Task 与 completed history,并明确当前观察不是过去截止时刻的状态重建;26 条真实来源的反序读取和不可用来源均有真实 native 验证。
  4. loopx/capabilities/native_chat/steward_reports.py 的 publish 读取原 native commit,在同一配置/Goal 栅栏下幂等追加原 Core 消息,再逐字读回正文与原 Turn,最后提交现有 publication cursor。cursor 单独存在不能让页面展示一个已不可读的正文链接。
  5. apps/presentation/dashboard/src/features/personal-workspace/periodic-report-session-field.tsx 在既有配置页选择原会话,读取真实状态并打开现有完整答复页;没有新建报告 viewer、配置 authority 或动作执行入口。

对主干的风险

最重要的风险是结算成功但正文未到、暂停后晚到结果越界,或恢复时重复调用模型。File/SQLite 的丢失回复、原生验证/写回/额度、原事件丢失及重启用例覆盖这条因果链;旧失败/部分答复保留,不重放未知模型结果。忙与排队用户工作优先,错 Session、撤注册、停止和 profile 不匹配不选择替代执行者。

整合最新主干 UTF-8/LF 修复后,177 项 native/monitor/host/report/Windows 回归通过(包含 75 项报告);原会话端到端新增非 UTF-8 默认 codec 反例。此前 106 项配置/日历/intent 回归及当前 15 项类型层测试通过;类型检查、打包、ruff 通过。原 wake 同一 oracle 在 base 无生成、head 一次生成并回传,关闭前后均无调用;移除报告 handoff 的 mutation 会失败。另保留一次运行中编辑测试源导致晚期 inspect 截错合成模型源码的失败,已改为导入时固定 oracle,并以改变后续源码读取的反例和完整 75 项复验覆盖,没有放宽断言或限额。

standard premerge 的 6 项直接检查与 19 项选中检查无失败;自动结果仍为 manual_review_required,因为 8 个 PNG 超出文本扫描。此精确版本评审逐图检查了像素、PNG metadata 和合成来源:session-before-desktop.png、session-before-narrow.png、session-body-desktop.png、session-body-narrow.png、session-delivered-desktop.png、session-delivered-narrow.png、session-paused-desktop.png、session-unknown-narrow.png;metadata 仅标准 Display P3/Google 色彩 profile,未观察到私人消息、路径或账号。该人工结论满足相应视觉门,保留原自动收据,不把图片伪称为文本扫描通过。CI 按当前 Goal 策略未查询或等待。

语义与 CI 对齐

复用既有 native report、Task、window、Session 和 publication 词汇;新 route 是精确原会话接收引用,不能授予新 Agent、portfolio 或外发权限。共享 CLI reporter 对此明确原会话路径不抢占,普通 Goal Channel/私有管家保持原 owner。未开启时只有可发现的设置和只读状态,不创建 Task、调用模型、发送正文或增加额度。相关语义检查无新受支持词汇候选;这只是有边界的 advisory,不代替实际调用/恢复证据。

我的整体评价

没有当前阻塞发现。原精确 head 的已发表评审保留为历史;本次从新的完整 diff 重新审查,合并主干报告字节/codec 修复,并将本地 JSON 读取也显式固定为 UTF-8。long_horizon 与 user_experience 均为 improved:配置到原 worker 的实际产出、后续正文读回和有限恢复已经连上。桌面将原始路由换成原 Agent 会话、真实送达状态和正文入口;窄屏信息可读,未知状态可重新读取,长篇正文复用现有完整答复页。 共享设置页在这些高度仍需纵向滚动到保存控件;未验物理手机、生产模型质量、生产积压完成或整套 Agent 工作台。 视觉验收包括桌面、390×844 窄屏及 27,750 字符、30 条长重复内容的完整答复页;手机证据仅视口模拟。日历和结算继续由现有原生 owner 决定,新增的只是原 Goal 来源与原 Core 消息读写适配;共享 frontier 和类型层恢复判定收敛原私聊及本地会话的重复控制流。 本次边界是已有原 Agent 会话的显式日/周报告:配置、到期生成、完整正文读取、暂停及可证明的剩余效果恢复。 比仅加表单/提示词有真实交付价值,也保留原生 owner 的边界,代码与风险相称;无效作者窗口取消和更广自然语言/Agent 工作台不是本次已完成结论。

English verdict: APPROVE — exact head 095328ebfd011c7bfd143ef9689189fa42c21847. The explicit original Agent Session calendar reaches the existing native worker, validated generation and one independently readable full-body Core return. File/SQLite recovery and disabled-path counterfactuals, packaged settings/viewer, typechecks/build and local risk checks support this bounded increment. Eight binary privacy holds were separately reviewed; CI was not consulted. General natural-language tasks, invalid-window cancellation and production natural-deadline quality remain unqualified.

@loopx-agent
loopx-agent merged commit 34aa0cd into main Oct 24, 2026
31 of 55 checks passed
@loopx-agent
loopx-agent deleted the codex/managed-session-periodic-report-20261024 branch October 24, 2026 15:57
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