@@ -21,6 +21,19 @@ export enum MessageRole {
2121 AGENT = 'agent' ,
2222}
2323
24+ /**
25+ * Task states.
26+ */
27+ export enum TaskState {
28+ SUBMITTED = 'submitted' ,
29+ WORKING = 'working' ,
30+ COMPLETED = 'completed' ,
31+ FAILED = 'failed' ,
32+ CANCELED = 'canceled' ,
33+ REJECTED = 'rejected' ,
34+ INPUT_REQUIRED = 'input-required' ,
35+ }
36+
2437/**
2538 * A2A event.
2639 */
@@ -83,7 +96,7 @@ export function getEventMetadata(event: A2AEvent): Record<string, unknown> {
8396export function isFailedTaskStatusUpdateEvent ( event : unknown ) : boolean {
8497 return (
8598 ( isTaskStatusUpdateEvent ( event ) || isTask ( event ) ) &&
86- event . status . state === 'failed'
99+ event . status . state === TaskState . FAILED
87100 ) ;
88101}
89102
@@ -93,7 +106,12 @@ export function isFailedTaskStatusUpdateEvent(event: unknown): boolean {
93106export function isTerminalTaskStatusUpdateEvent ( event : unknown ) : boolean {
94107 return (
95108 ( isTaskStatusUpdateEvent ( event ) || isTask ( event ) ) &&
96- [ 'completed' , 'failed' , 'canceled' , 'rejected' ] . includes ( event . status . state )
109+ [
110+ TaskState . COMPLETED ,
111+ TaskState . FAILED ,
112+ TaskState . CANCELED ,
113+ TaskState . REJECTED ,
114+ ] . includes ( event . status . state as TaskState )
97115 ) ;
98116}
99117
@@ -103,7 +121,7 @@ export function isTerminalTaskStatusUpdateEvent(event: unknown): boolean {
103121export function isInputRequiredTaskStatusUpdateEvent ( event : unknown ) : boolean {
104122 return (
105123 ( isTaskStatusUpdateEvent ( event ) || isTask ( event ) ) &&
106- event . status . state === 'input-required'
124+ event . status . state === TaskState . INPUT_REQUIRED
107125 ) ;
108126}
109127
@@ -136,21 +154,24 @@ export function createTaskSubmittedEvent({
136154 taskId,
137155 contextId,
138156 message,
157+ metadata,
139158} : {
140159 taskId : string ;
141160 contextId : string ;
142161 message : Message ;
162+ metadata ?: Record < string , unknown > ;
143163} ) : TaskStatusUpdateEvent {
144164 return {
145165 kind : 'status-update' ,
146166 taskId,
147167 contextId,
148168 final : false ,
149169 status : {
150- state : 'submitted' ,
170+ state : TaskState . SUBMITTED ,
151171 message,
152172 timestamp : new Date ( ) . toISOString ( ) ,
153173 } ,
174+ metadata,
154175 } ;
155176}
156177
@@ -161,20 +182,23 @@ export function createTask({
161182 contextId,
162183 message,
163184 taskId,
185+ metadata,
164186} : {
165187 taskId : string ;
166188 contextId : string ;
167189 message : Message ;
190+ metadata ?: Record < string , unknown > ;
168191} ) : Task {
169192 return {
170193 kind : 'task' ,
171194 id : taskId || randomUUID ( ) ,
172195 contextId,
173196 history : [ message ] ,
174197 status : {
175- state : 'submitted' ,
198+ state : TaskState . SUBMITTED ,
176199 timestamp : new Date ( ) . toISOString ( ) ,
177200 } ,
201+ metadata,
178202 } ;
179203}
180204
@@ -185,21 +209,24 @@ export function createTaskWorkingEvent({
185209 taskId,
186210 contextId,
187211 message,
212+ metadata,
188213} : {
189214 taskId : string ;
190215 contextId : string ;
191- message : Message ;
216+ message ?: Message ;
217+ metadata ?: Record < string , unknown > ;
192218} ) : TaskStatusUpdateEvent {
193219 return {
194220 kind : 'status-update' ,
195221 taskId,
196222 contextId,
197223 final : false ,
198224 status : {
199- state : 'working' ,
225+ state : TaskState . WORKING ,
200226 message,
201227 timestamp : new Date ( ) . toISOString ( ) ,
202228 } ,
229+ metadata,
203230 } ;
204231}
205232
@@ -209,7 +236,7 @@ export function createTaskWorkingEvent({
209236export function createTaskCompletedEvent ( {
210237 taskId,
211238 contextId,
212- metadata = { } ,
239+ metadata,
213240} : {
214241 taskId : string ;
215242 contextId : string ;
@@ -221,7 +248,7 @@ export function createTaskCompletedEvent({
221248 contextId,
222249 final : true ,
223250 status : {
224- state : 'completed' ,
251+ state : TaskState . COMPLETED ,
225252 timestamp : new Date ( ) . toISOString ( ) ,
226253 } ,
227254 metadata,
@@ -257,8 +284,8 @@ export function createTaskArtifactUpdateEvent({
257284 artifact : {
258285 artifactId : artifactId || randomUUID ( ) ,
259286 parts,
260- metadata,
261287 } ,
288+ metadata,
262289 } ;
263290}
264291
@@ -280,8 +307,9 @@ export function createTaskFailedEvent({
280307 kind : 'status-update' ,
281308 taskId,
282309 contextId,
310+ final : true ,
283311 status : {
284- state : 'failed' ,
312+ state : TaskState . FAILED ,
285313 message : {
286314 kind : 'message' ,
287315 messageId : randomUUID ( ) ,
@@ -298,7 +326,6 @@ export function createTaskFailedEvent({
298326 timestamp : new Date ( ) . toISOString ( ) ,
299327 } ,
300328 metadata,
301- final : true ,
302329 } ;
303330}
304331
@@ -309,18 +336,20 @@ export function createTaskInputRequiredEvent({
309336 taskId,
310337 contextId,
311338 parts,
339+ metadata,
312340} : {
313341 taskId : string ;
314342 contextId : string ;
315343 parts : A2APart [ ] ;
344+ metadata ?: Record < string , unknown > ;
316345} ) : TaskStatusUpdateEvent {
317346 return {
318347 kind : 'status-update' ,
319348 taskId,
320349 contextId,
321350 final : true ,
322351 status : {
323- state : 'input-required' ,
352+ state : TaskState . INPUT_REQUIRED ,
324353 message : {
325354 kind : 'message' ,
326355 messageId : randomUUID ( ) ,
@@ -331,6 +360,7 @@ export function createTaskInputRequiredEvent({
331360 } ,
332361 timestamp : new Date ( ) . toISOString ( ) ,
333362 } ,
363+ metadata,
334364 } ;
335365}
336366
@@ -341,18 +371,20 @@ export function createInputMissingErrorEvent({
341371 taskId,
342372 contextId,
343373 parts,
374+ metadata,
344375} : {
345376 parts : A2APart [ ] ;
346377 taskId : string ;
347378 contextId : string ;
379+ metadata ?: Record < string , unknown > ;
348380} ) : TaskStatusUpdateEvent {
349381 return {
350382 kind : 'status-update' ,
351383 taskId,
352384 contextId,
353385 final : true ,
354386 status : {
355- state : 'input-required' ,
387+ state : TaskState . INPUT_REQUIRED ,
356388 message : {
357389 kind : 'message' ,
358390 messageId : randomUUID ( ) ,
@@ -363,5 +395,6 @@ export function createInputMissingErrorEvent({
363395 } ,
364396 timestamp : new Date ( ) . toISOString ( ) ,
365397 } ,
398+ metadata,
366399 } ;
367400}
0 commit comments