Repository navigation
feat(chat): support independent multi-recipient delegation - #7787
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
|
This pull request has merge conflicts with Choose the remote for the base repository, not an out-of-date fork. 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 HEADFor a same-repository clone whose Keep the DCO |
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 交办时,会遇到只能选择一位接收者的限制。 例如同时请分析者与实现者独立核对方案,旧格式只能交给一方;新格式生成两份独立请求,并让先返回的一方与仍待处理的一方同时可见。 额外转述增加交互和来源混淆;某一方答复也容易掩盖另一方尚欠的结论。
已验证同一合成请求的两份持久收据、独立逆序回传、原调用失败后的恢复,以及打包页面持续保留未返回方;尚未证明真实模型会正确选择接收者。 不创建团队、Todo、租约、执行器或额外授权,不承诺整个 R3/G1 已完成。 真实模型选路、原受众 Lark 投递、安装态桌面及持续协作成果仍需原负责者验收;本评审不把合成结果当真实业务补办。
改动思路 / Approach
集合的语法与去重归共享 TS owner;Python仅逐项调用既有授权/持久化/执行选择和投影;原 inbox/outbox 继续唯一持有请求与回传事实。 本 PR 交付单个对话 Turn 的独立多接收者传输、持久返回与卡片展示,不交付新的批次调度或工作验收权。
最小替代方案是继续多轮中转,但这把协议限制转嫁给用户和第一位接收者。另一极端是新增批次事务、队列或团队状态,本改动没有引入它们。集合先完整校验,再沿原 owner 逐项持久交付;运行中的撤权、停止或 IO 失败允许部分结果。已送达方不因另一方失败回滚,后续核对仍使用原 source/recipient 请求身份。对于默认无委派的普通答复,独立基线/当前对照保持原行为,不启动协作 IO。
| 触发情况 | 本次头部的实际结果 |
|---|---|
| A、B 均获授权,B 先返回 | 两份独立请求;B 已送达,A 仍待结论 |
| A 已提交,B 被拒绝或停止 | 保留 A 收据和 B 的失败,不能报告整体成功 |
| 原调用失败且答复丢失 | 由已提交 inbox/route 恢复原结果,旧失败保留,不重跑模型 |
| 恢复到旧 consumer | 旧 inbox/outbox 仍完成两份已提交请求,File/SQLite 实测通过 |
具体改动 / Changes
完整 diff 为32文件、+729/-143,包含两张合成图片。主要体积来自现有单项投影的抽取和整理,协议、IO、UI、用例和说明属于同一可用切片;没有新 CLI 或可写团队状态。
先读的验收依据是 docs/architecture/rfcs/loopx-overall-roadmap-v0.md#r3-semantic-requests-and-automatic-return,spec_revision=834c4d7e8280f391d34289273161d1b4c00f31b4;同时核对变更前 handoff RFC 的“Request identity and result routing across a team”及 App 最近用户出口。没有拿本 PR 新增的 roadmap 段落反过来定义验收。
- R3 Owner — implemented:集合语法归共享 TS;逐项调用原请求、授权和返回 owner。
- R3 Delivery — implemented:逐方保留完整简报、独立收据、判断、控制与结果,接收、成果和送达分别表达。
- R3 Exit — deferred:本头覆盖真实隔离存储/HTTP/打包页面和合成结果;真实模型选择、worker成果、Lark provider及完整R3继续由现有负责人验收。
- R3 Migration/rollback — implemented:旧对象和原 inbox/outbox 保持;实际用旧版本 consumer 回传新头写入的两份记录。
关键代码讲解
normalizeCollaborationHandoff把对象与最多32项数组收敛到原单请求校验;精确 Goal/Agent 重复、缺少完整简报或越界会在任何投递前失败。Python adapter没有另写资格策略。handoff_response逐项复用原deliver/dispatch。授权与 Stop 在各项前重新核对,收据、执行选择和拒绝分别记录。原 source+recipient 身份继续负责幂等,数组本身不授予 worker、Todo 或租约权限。project_collaboration / _project_receipt对各份收据复用同一个原会话、Goal实例和控制读回。答复丢失时从已提交路由恢复;错误收据不能将另一方简报带进来。单项旧别名继续兼容,多项由collaborations呈现。currentCollaborationConclusion同时供卡片与待回传观察器使用,仅当前请求修订版的已送达结论能关闭该项观察。旧结论、queued或superseded不会掩盖新修订或另一位接收者。
对主干的风险 / Risks
最强反例是第一方已经提交,而第二方失败,随后整个源调用又丢失答复。如果只检查正常双成功,仍可能丢掉第一方、错误结清第二方或重复执行。此次独立 oracle 沿公开 normalizer、原调用适配、真实 File/SQLite、HTTP snapshot 和原 report/drain 验证:原调用保持 failed/response=None,已提交的双方仍能逆序回传;重复 drain 不增消息。部分 IO 后同 source 重试复用 A 的身份;Stop 后 B 没有进入投递。新增注册成员及撤权反例使用原生生产登记入口和原 source policy,未靠手填成功后置状态。
语义与 CI 对齐
这扩展的是原请求集合形式,不是新的团队生命周期。共享 typed request/source/receipt owner、无委派普通答复、独立单对象以及已有执行绑定限制保持;Chat/Goal/Lark 与 builtin skill明确披露多接收者格式。模型是否真正遵循选择提示仍未验证,不能从格式测试推导智能协作效果。
- PASS:125项运行/读回/控制/Stop/解析用例,另80项提示及Lark适配用例。
- PASS:同一独立原生 oracle,基线6个数组反例失败、3个旧行为控制通过;精确头9项通过。fixture
0848ebb2ebb0809b49590d4f97dc7d3d62dbd721ed432a6de7a88ad33f0463a8;1130–1151个实际导入模块均断言来自对应源码根目录。 - PASS:File/SQLite旧 consumer 回滚2项,以及未来成员/当前撤权2项;无额外模型调用。早期回滚fixture漏接收决定、误用读取方法,以及误选首次登记入口、生命周期专用profile不支持成员登记的失败均保留,修正夹具后才作资格判断。
- PASS:严格TS、production Vite/Chat bundle、当前修订返回观察;打包SQLite双卡、键盘展开、窄屏及无需reload的自然结果刷新,额外browser写入0。
- PASS:Ruff、编译、双语RFC、公开边界、语义全检查;standard premerge 6 direct + 19 selected,无阻塞失败。CQR策略 disabled,没有伪造receipt;premerge仍保留人工评审门。
- FAIL,既有 advisory:
host_process_transport.run_host_process维护性债务仍在。以各自不可变 tracked index执行完整报告,除根目录外完全相同,规范化SHA56c0da43debe595a03434f988d0b87c5ebfd9e57b2784fe8110463666f34f82c;未提高阈值或把它写成通过。
依当前策略未查询、轮询或等待远端 CI。没有必要的本地改动不变量缺证;批准与实际merge readiness/安装资格仍分开。首次测试命令含不存在的旧路径,0项执行,已保留并由正确路径的125项完整运行覆盖,不计为产品失败或通过证据。
我的整体评价 / Verdict
没有阻塞发现。长程维度 improved:原 source失败后仍保留独立请求/结果责任;用户体验 improved:原意图不增加中转、重复上下文或确认轮次,且一个结果不关闭另一个。已目视核对同一精确头打包页面:1200×888默认双卡、390×844展开简报及其下方另一接收者,层级、原接收者、判断与回传状态可区分;键盘展开及自动返回由现有浏览器用例覆盖。本diff未改responsive CSS或viewport分支;按新增双卡密度选默认桌面和完整展开项,额外核窄屏展开,未声称重验所有既有布局。 未验收安装态桌面、真实 Lark provider、真人理解或长时间生产表现。
代码规模与问题相称;抽取共享收据投影和当前修订结论选择已经收敛重复逻辑。保留对象兼容有独立模型调用方及持久记录依据,不应为减分支删除。本 PR 交付单个对话 Turn 的独立多接收者传输、持久返回与卡片展示,不交付新的批次调度或工作验收权。 现有授权、失败与未知效果不因集合能力放宽;审查结论只绑定 ac7b07b08f647bb3fee5c87c0ceb8f021eb13db8。安装态与原Bot真实补办仍须另行读回,不能用本次测试数量或合并替代。
English verdict: APPROVE ac7b07b. Independent recipient delivery, recovery, rollback and pending-result isolation pass exact-head local qualification; real model routing, installed adoption and live provider acceptance remain separate.
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 交办时,会遇到只能选择一位接收者的限制。 例如同时请分析者与实现者独立核对方案,旧格式只能交给一方;新格式生成两份独立请求,并让先返回的一方与仍待处理的一方同时可见。 额外转述增加交互和来源混淆;某一方答复也容易掩盖另一方尚欠的结论。
已验证同一合成请求的两份持久收据、独立逆序回传、原调用失败后的恢复,以及打包页面持续保留未返回方;尚未证明真实模型会正确选择接收者。 不创建团队、Todo、租约、执行器或额外授权,不承诺整个 R3/G1 已完成。 真实模型选路、原受众 Lark 投递、安装态桌面及持续协作成果仍需原负责者验收;本评审不把合成结果当真实业务补办。
改动思路 / Approach
集合的语法与去重归共享 TS owner;Python仅逐项调用既有授权/持久化/执行选择和投影;原 inbox/outbox 继续唯一持有请求与回传事实。 本 PR 交付单个对话 Turn 的独立多接收者传输、持久返回与卡片展示,不交付新的批次调度或工作验收权。
最小替代方案是继续多轮中转,但这把协议限制转嫁给用户和第一位接收者。另一极端是新增批次事务、队列或团队状态,本改动没有引入它们。集合先完整校验,再沿原 owner 逐项持久交付;运行中的撤权、停止或 IO 失败允许部分结果。已送达方不因另一方失败回滚,后续核对仍使用原 source/recipient 请求身份。对于默认无委派的普通答复,独立基线/当前对照保持原行为,不启动协作 IO。
| 触发情况 | 本次头部的实际结果 |
|---|---|
| A、B 均获授权,B 先返回 | 两份独立请求;B 已送达,A 仍待结论 |
| A 已提交,B 被拒绝或停止 | 保留 A 收据和 B 的失败,不能报告整体成功 |
| 原调用失败且答复丢失 | 由已提交 inbox/route 恢复原结果,旧失败保留,不重跑模型 |
| 恢复到旧 consumer | 旧 inbox/outbox 仍完成两份已提交请求,File/SQLite 实测通过 |
具体改动 / Changes
当前完整 diff 仍为32文件、+729/-143,包含两张合成图片。此次以新的 accepted main 为基线重新审查全部差异;两组中英文 R3 插入均完整保留,全部872条新增/删除行与原提案相同。主干的无总时长截止/队列修复及不相关 Explore 字段修改也保留,旧头评审不转作当前批准。主要体积来自现有单项投影的抽取和整理,协议、IO、UI、用例和说明属于同一可用切片;没有新 CLI 或可写团队状态。
先读的验收依据是 docs/architecture/rfcs/loopx-overall-roadmap-v0.md#r3-semantic-requests-and-automatic-return,spec_revision=682080047f4548d0266111f5e924512f550df9d9;同时核对变更前 handoff RFC 的“Request identity and result routing across a team”及 App 最近用户出口。没有拿本 PR 新增的 roadmap 段落反过来定义验收。
- R3 Owner — implemented:集合语法归共享 TS;逐项调用原请求、授权和返回 owner。
- R3 Delivery — implemented:逐方保留完整简报、独立收据、判断、控制与结果,接收、成果和送达分别表达。
- R3 Exit — deferred:本头覆盖真实隔离存储/HTTP/打包页面和合成结果;真实模型选择、worker成果、Lark provider及完整R3继续由现有负责人验收。
- R3 Migration/rollback — implemented:旧对象和原 inbox/outbox 保持;实际用旧版本 consumer 回传新头写入的两份记录。
关键代码讲解
normalizeCollaborationHandoff把对象与最多32项数组收敛到原单请求校验;精确 Goal/Agent 重复、缺少完整简报或越界会在任何投递前失败。Python adapter没有另写资格策略。handoff_response逐项复用原deliver/dispatch。授权与 Stop 在各项前重新核对,收据、执行选择和拒绝分别记录。原 source+recipient 身份继续负责幂等,数组本身不授予 worker、Todo 或租约权限。project_collaboration / _project_receipt对各份收据复用同一个原会话、Goal实例和控制读回。答复丢失时从已提交路由恢复;错误收据不能将另一方简报带进来。单项旧别名继续兼容,多项由collaborations呈现。currentCollaborationConclusion同时供卡片与待回传观察器使用,仅当前请求修订版的已送达结论能关闭该项观察。旧结论、queued或superseded不会掩盖新修订或另一位接收者。
对主干的风险 / Risks
最强反例是第一方已经提交,而第二方失败,随后整个源调用又丢失答复。如果只检查正常双成功,仍可能丢掉第一方、错误结清第二方或重复执行。此次独立 oracle 沿公开 normalizer、原调用适配、真实 File/SQLite、HTTP snapshot 和原 report/drain 验证:原调用保持 failed/response=None,已提交的双方仍能逆序回传;重复 drain 不增消息。部分 IO 后同 source 重试复用 A 的身份;Stop 后 B 没有进入投递。新增注册成员及撤权反例使用原生生产登记入口和原 source policy,未靠手填成功后置状态。
语义与 CI 对齐
这扩展的是原请求集合形式,不是新的团队生命周期。共享 typed request/source/receipt owner、无委派普通答复、独立单对象以及已有执行绑定限制保持;Chat/Goal/Lark 与 builtin skill明确披露多接收者格式。模型是否真正遵循选择提示仍未验证,不能从格式测试推导智能协作效果。
- PASS:249项当前运行/读回/控制/Stop/解析、提示/Lark适配、长活动与启动配置用例。
- PASS:同一独立原生 oracle,基线6个数组反例失败、3个旧行为控制通过;当前精确头9项生命周期测试通过,连同两项当前基线 consumer 回滚和两项未来成员/撤权,共13项通过。fixture
0848ebb2ebb0809b49590d4f97dc7d3d62dbd721ed432a6de7a88ad33f0463a8;1130–1151个实际导入模块均断言来自对应源码根目录。 - PASS:File/SQLite当前基线 consumer 回滚2项,以及未来成员/当前撤权2项;无额外模型调用。早期回滚fixture漏接收决定、误用读取方法,以及误选首次登记入口、生命周期专用profile不支持成员登记的失败均保留,修正夹具后才作资格判断。
- PASS:严格TS、production Vite/Chat bundle、当前修订返回观察;打包SQLite双卡、键盘展开、窄屏及无需reload的自然结果刷新,额外browser写入0。
- PASS:Ruff、编译、双语RFC、公开边界、语义全检查;standard premerge 6 direct + 19 selected,无阻塞失败。CQR策略 disabled,没有伪造receipt;premerge仍保留人工评审门。
- FAIL,既有 advisory:
host_process_transport.run_host_process维护性债务仍在。以各自不可变 tracked index执行完整报告,除根目录外完全相同,规范化SHA56c0da43debe595a03434f988d0b87c5ebfd9e57b2784fe8110463666f34f82c;未提高阈值或把它写成通过。
依当前策略未查询、轮询或等待远端 CI。没有必要的本地改动不变量缺证;批准与实际merge readiness/安装资格仍分开。保留先前夹具/调用层失败:旧命令不存在的测试路径执行0项、生命周期专用profile拒绝成员登记/全局同步,以及把显式JS文件误交Python Ruff产生的解析错误。当前支持的生产profile、语言对应检查与249项正确路径验证通过;未把这些调用错误归因于PR或删去记录。
我的整体评价 / Verdict
没有阻塞发现。长程维度 improved:原 source失败后仍保留独立请求/结果责任;用户体验 improved:原意图不增加中转、重复上下文或确认轮次,且一个结果不关闭另一个。已目视核对同一精确头打包页面:1200×888默认双卡、390×844展开简报及其下方另一接收者,层级、原接收者、判断与回传状态可区分;键盘展开及自动返回由现有浏览器用例覆盖。本diff未改responsive CSS或viewport分支;按新增双卡密度选默认桌面和完整展开项,额外核窄屏展开,未声称重验所有既有布局。 未验收安装态桌面、真实 Lark provider、真人理解或长时间生产表现。
代码规模与问题相称;抽取共享收据投影和当前修订结论选择已经收敛重复逻辑。保留对象兼容有独立模型调用方及持久记录依据,不应为减分支删除。本 PR 交付单个对话 Turn 的独立多接收者传输、持久返回与卡片展示,不交付新的批次调度或工作验收权。 现有授权、失败与未知效果不因集合能力放宽;审查结论只绑定 f97386df07dd52494677f8301d0b4d2a9464dc64。安装态与原Bot真实补办仍须另行读回,不能用本次测试数量或合并替代。
English verdict: APPROVE f97386d. Independent recipient delivery, recovery, rollback and pending-result isolation pass exact-head local qualification; real model routing, installed adoption and live provider acceptance remain separate.
One conversation asking two authorized Agents for independent findings previously accepted only one
context_handoff. This change accepts a bounded array of complete recipient-specific briefs and shows each request's controls and result independently. A returned result cannot close another recipient's outstanding answer.The collection reuses the shared TypeScript request normalizer and existing per-recipient source grants, Goal lifetime, inbox identity, execution binding and outbox. Whole-envelope syntax is checked before effects; live revocation or Stop can yield partial delivery. Single-object callers and persisted requests remain compatible. No batch scheduler, new Goal, lease or execution authority is introduced.
Written by: model_agent — Codex, OpenAI GPT-6 family. Integration and current exact-head qualification: gpt-6.1-sol, OpenAI, runtime_reported, reasoning effort max.
Implemented against the accepted R3 request/return contract at
682080047f4548d0266111f5e924512f550df9d9. Tested revision:f97386df07dd52494677f8301d0b4d2a9464dc64. The merge retains both bilingual R3 checkpoints, including the accepted interactive lifetime/queue behavior.Validation uses synthetic inputs:
Real model recipient selection, live worker outcomes, installed App and actual Lark provider delivery remain separately qualified. Deterministic transport tests do not certify semantic collaboration or task completion. Merge and installed activation remain separate.