@@ -20,7 +20,6 @@ import { AgentCard, SendMessageResponse, SendMessageSuccessResponse } from "@a2a
20
20
import { Observable , Subscriber , tap } from "rxjs" ;
21
21
import { createSystemPrompt , sendMessageToA2AAgentTool } from "./utils" ;
22
22
import { randomUUID } from "crypto" ;
23
- import { text } from "stream/consumers" ;
24
23
25
24
export interface A2AAgentConfig extends AgentConfig {
26
25
agentUrls : string [ ] ;
@@ -129,6 +128,9 @@ export class A2AMiddlewareAgent extends AbstractAgent {
129
128
this . finishTextMessages ( observer , pendingTextMessages ) ;
130
129
131
130
if ( pendingA2ACalls . size > 0 ) {
131
+ // Array to collect all new tool result messages
132
+ const newToolMessages : Message [ ] = [ ] ;
133
+
132
134
const callProms = [ ...pendingA2ACalls ] . map ( ( toolCallId ) => {
133
135
const toolCallsFromMessages = this . messages
134
136
. filter ( ( message ) => message . role === "assistant" )
@@ -160,6 +162,9 @@ export class A2AMiddlewareAgent extends AbstractAgent {
160
162
this . addMessage ( newMessage ) ;
161
163
this . orchestrationAgent . addMessage ( newMessage ) ;
162
164
165
+ // Collect the message so we can add it to input.messages
166
+ newToolMessages . push ( newMessage ) ;
167
+
163
168
const newEvent : ToolCallResultEvent = {
164
169
type : EventType . TOOL_CALL_RESULT ,
165
170
toolCallId : toolCallId ,
@@ -184,6 +189,12 @@ export class A2AMiddlewareAgent extends AbstractAgent {
184
189
runId : input . runId ,
185
190
} as RunFinishedEvent ) ;
186
191
192
+ // Add all tool result messages to input.messages BEFORE triggering new run
193
+ // This ensures the orchestrator sees the tool results in its context
194
+ newToolMessages . forEach ( ( msg ) => {
195
+ input . messages . push ( msg ) ;
196
+ } ) ;
197
+
187
198
this . triggerNewRun ( observer , input , pendingA2ACalls , pendingTextMessages ) ;
188
199
} ) ;
189
200
} else {
0 commit comments