Skip to content

渠道问答与审批续跑:转发中断后重试无法恢复未送达输出 #1165

Description

@qqqqqf-q

问题

#1159 修复了问答与审批续跑的正常渠道输出,但转发请求中断后,尚未送达的输出仍无法通过重试恢复。先记录为已知限制,暂不扩大实现范围;具体修复方案待评估,不预设新增租约系统。

触发路径

  1. 用户提交 ask_user 答案或工具审批,后台接受并启动续跑。
  2. StreamDecisionResponse 成功调用 ClaimDecisionOutput,取得转发权。
  3. 在发送 decision_accepted 或后续事件时,渠道/gRPC context 被取消,转发提前退出。
  4. 认领标记仍保留;后台可以继续写入输出日志。
  5. 使用相同 control ID 重试时,RouteDecisionResponse 返回 Replayed,StreamDecisionResponse 在读取日志之前返回,未送达回复无法恢复。

ReleaseDecisionOutput 当前只清理日志内容,不清除认领标记;仅增加一次释放调用不足以修复重试的提前返回。

影响与边界

后续验收

  • 先增加认领成功后请求取消、再以相同 control ID 重试的复现测试。
  • 区分答案已执行与输出已送达,恢复输出不得重复执行模型或工具。
  • 覆盖未发送任何输出和已发送部分输出两种中断位置,明确重复发送边界;内部事件入队不等于外部平台已确认送达。
  • 覆盖并发重试,避免多个转发者同时发送同一回复。
  • 优先评估现有机制的最小修复,不以此 issue 扩展为通用消息投递系统。

证据

  • 合入提交:8d5dfaee2e2374183c5d6e729a67da26c36fb2a4
  • 相关实现:internal/agent/runtime/session/decision_output.go、commands.go、memory_decision_output.go、redis_decision_output.go。
  • 自动 review 原评论(标记 P1):fix(channel): 修复问答与审批续跑后的输出丢失 #1159 (comment)
  • 当前结论来自代码路径核对;尚未执行专门的断线重试复现测试。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions