跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

跨会话投递与接收策略

处理回执状态转换、重复消息、限流和人工 hold 队列。

跨会话 delivered 只表示已经排队给模型,不证明已读、执行成功或产生了用户期望的结果。接收端回执是尽力发送,发送程序也必须容忍永久没有回执。

回执格式与转换

回执通过发送者的 from 地址和 replyToken 另建连接,使用 control 帧:

{
  "msgV": 1,
  "msgId": "receipt-123",
  "type": "control",
  "action": "delivery_status",
  "status": "held",
  "origMsgId": "5f1d0c9e-3b2a-4e8f-9c7d-1a2b3c4d5e6f",
  "from": "/run/user/1000/qwen-socks/41337.sock",
  "reason": "Waiting for recipient review."
}
status意义发送方处理
held等用户审核;释放失败时也可能保持扣留等待后续决定或过期
delivered已进入模型输入队列不将它当执行回执
denied用户看过并拒绝不重复发送同一请求
refused接收策略拒绝,未交用户查看停止向此会话重试
expired等待到期、退出时未读或关闭过程中到达仍有需要时再择机发送
misaddressedsessionId 不匹配目标重读注册记录
dropped进入策略前被限流、判重或容量限制丢弃合并成之后的一条,不循环重发

协议线上字段是 denied;不要把交互界面的拒绝提示文字当作可替换的 wire value。reason 只供人阅读,不用它驱动状态机。

不同连接的回执顺序没有保证。pending 可转到表中任意状态;held 只继续转 delivered、denied、expired、misaddressed;delivered 仍可变为 expired 或 misaddressed。其余转换当重复忽略,未知 status 不改变状态,从未发送过的 origMsgId 也忽略。

dropped 额外带 dropReason,值为 rate-limited、duplicate 或 queue-full;droppedMsgIds 可一次列出最多 256 个其他被丢弃 ID。发送程序应一并结束这些记录,而不是等待每条各自的回执。这两个字段在其他状态下无意义。

接收顺序

  1. 先做准入限流和正文去重。
  2. 对已有裁决的 msgId 返回旧裁决。
  3. 读取 agents.crossSessionInbound 的 accept、hold、refuse;未配置时,自身启动的进程与授权 controller 默认接受,普通 peer 需声明与接收方一致的 review class,否则 hold。
  4. hold 缓冲最多 50 条,满时拒收新条目而不移除旧条目。
  5. 接受后进入 peer 输入队列,最多 50 条;队列满也返回 dropped。

agents.crossSessionHeldExpiry 可选 1m、5m、10m、never,默认 5m。用户从 /peers 接受或拒绝,模式变化会重新评估等待消息。显式入站策略优先于令牌类别的默认放行。

限流与去重

单发送者初始突发 30 条,之后每 2 秒补一条;全体初始突发 32 条,之后每秒一条。发送者自报名称不能用来建立强身份,轮换它也无法绕过总额度。

30 秒内的相同消息正文受重复窗口限制;自身启动进程与 controller 豁免这一正文判重,但仍受限流。入口丢弃不进入 hold、不送模型,也不留下已裁决记录;稍后合理重试仍有机会接受。

多会话进程共享 from 地址,因此也共享接收方的发送者预算和重复窗口。繁忙的同进程会话可能用掉其他会话的额度,同一正文也可能不能马上发给其同进程兄弟会话。Qwen Code 的发送侧预估按地址限制,在写入前要求模型合并消息;自行实现的 peer 也应避免忙循环重试。

模型可见的来源

接收端把消息包在 cross_session_message 外部来源封套中,并追加授权类别说明。own-process、controller 及 controller 标签来自已认证连接,不采用发送帧里自称的 origin 或 fromName;正文中仿造的封套标记会被处理。

这些机制不把外部消息变成用户指令。应用仍需遵守接收会话权限,并将业务完成结果作为新的消息单独返回。

限流数字、队列容量、过期选项、行长和连接上限可能不升协议版本就改变。记录或帧的既有字段形状发生不兼容变化才提高版本,客户端应保留未知字段和状态的前向兼容处理。