@@ -46,6 +46,16 @@ function registry(state: StateStore): Record<string, RegistryEntry> {
4646 return value && typeof value === "object" ? ( value as Record < string , RegistryEntry > ) : { } ;
4747}
4848
49+ function isA2AApiUnavailable ( error : unknown ) : boolean {
50+ return (
51+ ( typeof error === "object" &&
52+ error !== null &&
53+ "statusCode" in error &&
54+ error . statusCode === 404 ) ||
55+ / \b H T T P 4 0 4 \b / . test ( String ( error ) )
56+ ) ;
57+ }
58+
4959function persist (
5060 state : StateStore ,
5161 key : string ,
@@ -206,24 +216,31 @@ export function createA2AHandler(deps: {
206216 } ) ;
207217 }
208218 }
209- for await ( const task of id . iterA2ATasks ( { state : "submitted" } ) ) {
210- const message = task . messages . at ( - 1 ) ;
211- const data : A2AEventData = {
212- task_id : String ( task . id ) ,
213- context_id : String ( task . contextId ) ,
214- state : String ( task . state ) ,
215- caller : {
216- identity_id : String ( task . caller . identityId ) ,
217- organization_id : task . caller . organizationId ,
218- handle : task . caller . handle ,
219- } ,
220- message_id : message ?. messageId ?? `task:${ task . id } ` ,
221- parts : message ?. parts ?? [ ] ,
222- } ;
223- const key = `${ data . task_id } :${ data . message_id } ` ;
224- if ( registry ( deps . state ) [ key ] ) continue ;
225- persist ( deps . state , key , data , "queued" ) ;
226- start ( key , data ) ;
219+ try {
220+ for await ( const task of id . iterA2ATasks ( { state : "submitted" } ) ) {
221+ const message = task . messages . at ( - 1 ) ;
222+ const data : A2AEventData = {
223+ task_id : String ( task . id ) ,
224+ context_id : String ( task . contextId ) ,
225+ state : String ( task . state ) ,
226+ caller : {
227+ identity_id : String ( task . caller . identityId ) ,
228+ organization_id : task . caller . organizationId ,
229+ handle : task . caller . handle ,
230+ } ,
231+ message_id : message ?. messageId ?? `task:${ task . id } ` ,
232+ parts : message ?. parts ?? [ ] ,
233+ } ;
234+ const key = `${ data . task_id } :${ data . message_id } ` ;
235+ if ( registry ( deps . state ) [ key ] ) continue ;
236+ persist ( deps . state , key , data , "queued" ) ;
237+ start ( key , data ) ;
238+ }
239+ } catch ( error ) {
240+ if ( ! isA2AApiUnavailable ( error ) ) throw error ;
241+ deps . logger . warn ( "a2a.api_unavailable" , {
242+ error : String ( error ) ,
243+ } ) ;
227244 }
228245 } ,
229246 } ;
0 commit comments