mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
【问题】 1. 入站请求用 InjectInterruptText 抢占打断当前对话,立即回 202 submitted, agent 的回复 emit 到未注册的 channel(a2a/acp)→ 请求方永远拿不到回复文本, 只能干等超时。(acp 的 session.Replying 从未被填真回复 → SSE 永远 "(未收到回复)") 2. 无法指定/延续 session:a2a 无 session 概念;acp session/new 每次新建、 不接受调用方 session_id,多轮上下文断裂。 3. a2a/acp 通道未注册为输出设备 → emitResponse 的回复无落点, output_list_channels 也不可见 → agent 困惑"回复该发到哪"。 【修复】 - 入站改用 SDK InjectInputSync 同步注入:阻塞等待 agent 处理完成, 直接把最终回复文本返回给 HTTP 请求方(不再回 202)。 这是 A2A/ACP 协议的合理形态——客户端控制超时,服务端同步返回。 - session 支持:a2a tasks.send 与 acp session/new 均接受 params.session_id, 指定则延续已有会话(拼上下文前缀),不指定则新建并返回 session_id。 单会话保留最多 10 轮历史防膨胀;30min GC 清理 2h 未用会话。 - a2a/acp 注册为输出通道(RegisterOutputChannel):回复有落点, output_list_channels 可见,agent 可主动 output_send 推消息。 - 注入提示词明确"直接以文本回复即可,无需调 output_send"—— agent 不再把回复走 queued 入队而返回干净文本。 端到端验证: 单轮:status=completed, reply=真实回复文本(非 submitted) 多轮:同 session_id 第二轮准确复述第一轮问题(上下文生效) a2a v1.2.0 / acp v1.1.0 安装 config_kept=true