Repository navigation
fix(collaboration): retain original conversation requests in turn agendas - #7495
Conversation
…ndas 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
已注册 Agent 向原项目会话发出咨询后,需要在后续正常回合继续跟进该请求。
此前显式 Inbox 能读到结果,自动回合摘要却把原会话当作缺少 Goal/Agent 的记录,导致该承诺只显示为不可用;修复后能看到等待答案或等待显式消费的当前步骤。
真实 File/SQLite 调用已验证请求持续可见、读取后仍待消费、消费后消失;旧结果消费后修订的新版本会重新进入议程。
本次不新增派发、授权、自动消费或外部投递,也不以源码测试证明已安装 provider、真实模型采用或长期净收益。
正式安装后的自然回合采用、模型行为及完整长期成本仍未验证,由既有原项目协作的 Qualification boundary 承接。
改动思路 / Approach
发出请求的地址校验应由现有 collaboration reader 统一拥有,议程只派生读模型,不另建状态或授权分支。
本 PR 的边界是修复原始会话请求的自动议程读取及 requester 一致性,继续复用既有显式消费与修订 owner。
保留显式 Inbox 作为手动补救并不能修好普通回合的跟进;另造队列或给原会话伪造 Goal/Agent 又会扩大状态与身份成本。当前修改将 collectReturns 已有的地址判断收敛为一个 helper,并让自动摘要使用它;结果消费、修订和返回路由继续归原 owner。这里观察的是已获授权的请求,不会凭读取启动工作,也没有新增确认轮次。
| 路径 | 旧行为 | 本 head 核验 |
|---|---|---|
| 原会话已排队或已有答案 | 自动摘要无法完整读取 | 显示当前请求及待答复/待消费步骤 |
| 已消费旧答案后产生修订 | 仍受旧地址读取限制 | 新修订重新可见,旧答案保持历史 |
| requester 或原路由冲突 | 不能安全推断空队列 | incomplete/unavailable;修复来源后恢复 |
这是已执行用例的概括;没有把示意表作为额外测试证据。
具体改动 / Changes
完整审阅 head f274601 的八个路径,+132/-16:两个现有 TypeScript reader、四份对齐文档和两个现有测试文件。不可变对照为 19e1525;实际 merge-base d52f2e1 的相关 reader、hook、fixture 和原规范 blobs 与该对照相同。
规范依据是 docs/reference/original-project-collaboration.md,spec_revision=19e1525a8babdd6bae5d505d72747f64ec21bc8d。以下标识是本次按原文整理的检查映射,不新增规范要求:ORIGINAL-IDENTITY 已实现精确 requester/原会话地址;ORIGINAL-RETURN 已实现原路由校验与显式消费;ORIGINAL-REVISION 沿用当前修订及恢复;ORIGINAL-AUTHORITY 保持读写与执行授权分离。改后的规范没有被用来反向定义验收。
关键代码讲解
- outgoingEntry 从 operation 校验精确 requester,再按规范化 recipient 读取原 entry;还比较 entry.requester 与 operation.requester。显式返回和自动议程共用这一步,避免同一资源出现两套地址判断。
- turnContext 对原会话复用 verifyOriginalConversationReturnRoute。路由丢失或冲突计入 unavailable;正常读取继续使用既有 receipt、links、当前结果和20项显示上限,不写入确认或派发。
- projectDelegationTurnItem 仅增加已有 schema 的 recipient;当前修订、已消费历史与待消费新答案仍由原状态转换区分,没有新增状态词汇或接收 Agent。
对主干的风险 / Risks
最值得担心的是共用 reader 后误拒旧的合法返回,或把已消费旧结果误当成修订后的完成状态。我独立比较了六个 legacy 完整 packet(空、发出、无关 Agent、返回、读但未消费、消费后)及 File/SQLite 的四个 registered-only/dense 完整 packet,均相等;只归一化观测时间,固定相同 read_command,没有删掉身份、正文、步骤或错误。真实26条 incoming 加3条 outgoing 仍保留两条原会话请求、正确总数和9条省略;篡改 requester 后 unavailable=1,恢复来源后回到完整覆盖。
PASS:142项实际 Python 验证、14项 TypeScript、control-plane typecheck、Ruff、双语及 diff 检查。相同新增断言在旧对照得到10项预期失败/2项通过;当前原会话全套及与主干 24f4768 的合并验证均34项通过,覆盖队列丢失、重启、修订、结果写入失败后恢复和零重复执行。标准 premerge 的5项直接、15项选中检查及八路径公开边界扫描全部通过,无 manual hold,CQR e43d1be9 有效。初始质量结果的引用格式被校验器拒绝,已按真实路径更正;未修改产品源码或放宽检查。
语义与 CI 对齐
这是既有自动读取行为的修复,四份文档明确披露;没有 opt-in/default-off 的新策略,也没有扩展 quota、scheduler、消息或授权。严格拒绝 requester 冲突与原身份规范一致。按当前策略未查询、轮询或等待远端 CI;本结论不宣称远端 CI 成功。
我的整体评价 / Verdict
我将本切片判为 justified_increment:long_horizon 的承诺保留和既有使用路径在已测源码边界得到改善,完整长期效果与费用保持未知。复用和必要收敛已经落在现有 owner 内,未发现需要阻塞的缺陷;补充上下文中的产品价值建议被用于核对真实调用方,不当作先验批准或记忆收益证明。
已检查八个变更路径;未改渲染页面或首屏,功能回归不作视觉质量证明。已安装 provider、真实模型采用、长期完整成本与收益未验证。当前批准仅适用于 f274601,变头需重新核验;合并资格和维护者授权另行判断。
English verdict: APPROVE f274601; typed outgoing agenda and requester/route recovery are independently verified, with installed/model adoption unverified.
已授权的原项目会话请求能够在 Inbox 读到结果,却因自动 Goal Turn 摘要仍按旧 Goal/Agent 地址查找,被误报为不可用。这会让请求方后续回合遗漏尚待返回或消费的请求。
本改动让自动摘要与显式 Inbox 结果读取复用现有类型化发出地址 reader,保留原会话 recipient、当前修订与请求方身份。等结果、读到结果和显式消费保持不同状态;请求方或原返回路由冲突时仍报告覆盖不完整。摘要只读,不启动 Turn、不确认接收、不消费结果。相关中英文 RFC 检查点与能力/协议文档同步。
验证(
f2746012447d86cacc3151bdc1dc451f69169d0a):cqr_7793c9d7c96c0bc8c7d1已验证有效。组合补验(GitHub merge candidate
0fff3f3a452974518a39e15d57698d107367bc0f,19e1525a8babdd6bae5d505d72747f64ec21bc8d+ 上述提案 head):此组合资格绑定上述不可变版本;后续主干、正式 App 自然采用及完整成本仍需相应证据。
本提案补齐现有自动摘要 caller;正式 App/原来源的自然采用、请求方实际采用、完整成本及独立评审仍待验证。未改变 UI 布局,未合并或切换全局安装。