用户于 2026-08-29 在 Agent 0.9.23 重试正式采购失败任务时,界面先提示“无法重试采购”,异常包含 unexpected end of stream on;数秒后前台服务仍启动浏览器、打开 PDD 并开始执行采购。
unexpected end of stream on
数据库只读核对确认服务端实际已创建并调度 CG-18、CG-19、CG-20。相关任务均在后续地址保存阶段失败,且 irreversible_at、order_submitted_at 为空。本缺陷与 #152 地址保存证据问题关联,但必须独立修复,避免把网络结果对账混入地址自动化。
irreversible_at
order_submitted_at
Gitea MCP 当前会话不可用,本工单按仓库规则回退项目配置的 Gitea API 创建。
Agent 每次点击重试都会临时生成一个 requestId,调用重试接口后只按当前 HTTP 响应决定成功或失败。服务端已经按该 requestId 提交并创建新任务,但响应体读取期间连接异常结束;客户端捕获异常后丢失该 requestId,直接显示“无法重试采购”。既有前台调度器稍后仍能领取真实存在的新任务,造成提示与服务端事实冲突。
requestId
如果用户根据失败提示再次点击,客户端会生成新的 requestId,可能继续创建新的后继任务,因此不能简单自动用新 ID 重试 POST。
BatchRetry
恢复既有重试交互的真实反馈,不新增页面或主要流程。若仅调整现有加载/失败文案,可用明确状态清单作为小范围设计证据;如新增独立恢复入口则需先提供标注截图。
unexpected end of stream
采购任务创建属于高风险状态变化。实现前需核对并保持服务端 requestId 幂等;真机发起重试前必须再次获得用户明确授权。
若只恢复既有 requestId 幂等和真实反馈,无长期文档影响;如共享 API 或长期状态规则变化,则更新 Android Agent API Contract、业务规则及架构页面,并完成 Wiki-first 同步。
No dependencies set.
The note is not visible to the blocked user.
来源与现场事实
用户于 2026-08-29 在 Agent 0.9.23 重试正式采购失败任务时,界面先提示“无法重试采购”,异常包含
unexpected end of stream on;数秒后前台服务仍启动浏览器、打开 PDD 并开始执行采购。数据库只读核对确认服务端实际已创建并调度 CG-18、CG-19、CG-20。相关任务均在后续地址保存阶段失败,且
irreversible_at、order_submitted_at为空。本缺陷与 #152 地址保存证据问题关联,但必须独立修复,避免把网络结果对账混入地址自动化。Gitea MCP 当前会话不可用,本工单按仓库规则回退项目配置的 Gitea API 创建。
根因判断
Agent 每次点击重试都会临时生成一个
requestId,调用重试接口后只按当前 HTTP 响应决定成功或失败。服务端已经按该requestId提交并创建新任务,但响应体读取期间连接异常结束;客户端捕获异常后丢失该requestId,直接显示“无法重试采购”。既有前台调度器稍后仍能领取真实存在的新任务,造成提示与服务端事实冲突。如果用户根据失败提示再次点击,客户端会生成新的
requestId,可能继续创建新的后继任务,因此不能简单自动用新 ID 重试 POST。目标
requestId。requestId进行有限次幂等重放或结果对账,识别服务端已创建的任务。非目标
建议方案
requestId提升为重试操作上下文,在响应明确前保持不变。requestId做一次或有限次安全幂等重放;服务端BatchRetry既有 requestId 幂等结果应原样返回。依赖与并行
设计证据
恢复既有重试交互的真实反馈,不新增页面或主要流程。若仅调整现有加载/失败文案,可用明确状态清单作为小范围设计证据;如新增独立恢复入口则需先提供标注截图。
验收
unexpected end of stream、服务端实际已创建任务时,Agent 最终显示同一个新任务成功,不先误报“无法重试”。requestId,不会产生第二个采购任务。风险
采购任务创建属于高风险状态变化。实现前需核对并保持服务端 requestId 幂等;真机发起重试前必须再次获得用户明确授权。
文档影响
若只恢复既有 requestId 幂等和真实反馈,无长期文档影响;如共享 API 或长期状态规则变化,则更新 Android Agent API Contract、业务规则及架构页面,并完成 Wiki-first 同步。