@@ -45,8 +45,14 @@ export const HTTP_STATUS = {
4545 NOT_IMPLEMENTED : 501 ,
4646} as const ;
4747
48- /** gRPC status codes referenced by the registry. Mirrors `@grpc/grpc-js`'s `status` enum. */
49- export const GRPC_STATUS = {
48+ /**
49+ * Canonical numeric status codes used by the semantic-error registry
50+ * to describe the spec-mapped status per §5.4. The numeric namespace
51+ * matches gRPC's `status` enum (so the gRPC transport can emit them
52+ * directly) and the string form (see {@link A2A_STATUS_NAME}) fills
53+ * the REST body's `status` field per §11.6.
54+ */
55+ export const A2A_STATUS_CODE = {
5056 OK : 0 ,
5157 CANCELLED : 1 ,
5258 UNKNOWN : 2 ,
@@ -66,25 +72,28 @@ export const GRPC_STATUS = {
6672 UNAUTHENTICATED : 16 ,
6773} as const ;
6874
69- /** Names of the gRPC status codes, for `google.rpc.Status.status`. */
70- export const GRPC_STATUS_NAME : Readonly < Record < number , string > > = {
71- [ GRPC_STATUS . OK ] : 'OK' ,
72- [ GRPC_STATUS . CANCELLED ] : 'CANCELLED' ,
73- [ GRPC_STATUS . UNKNOWN ] : 'UNKNOWN' ,
74- [ GRPC_STATUS . INVALID_ARGUMENT ] : 'INVALID_ARGUMENT' ,
75- [ GRPC_STATUS . DEADLINE_EXCEEDED ] : 'DEADLINE_EXCEEDED' ,
76- [ GRPC_STATUS . NOT_FOUND ] : 'NOT_FOUND' ,
77- [ GRPC_STATUS . ALREADY_EXISTS ] : 'ALREADY_EXISTS' ,
78- [ GRPC_STATUS . PERMISSION_DENIED ] : 'PERMISSION_DENIED' ,
79- [ GRPC_STATUS . RESOURCE_EXHAUSTED ] : 'RESOURCE_EXHAUSTED' ,
80- [ GRPC_STATUS . FAILED_PRECONDITION ] : 'FAILED_PRECONDITION' ,
81- [ GRPC_STATUS . ABORTED ] : 'ABORTED' ,
82- [ GRPC_STATUS . OUT_OF_RANGE ] : 'OUT_OF_RANGE' ,
83- [ GRPC_STATUS . UNIMPLEMENTED ] : 'UNIMPLEMENTED' ,
84- [ GRPC_STATUS . INTERNAL ] : 'INTERNAL' ,
85- [ GRPC_STATUS . UNAVAILABLE ] : 'UNAVAILABLE' ,
86- [ GRPC_STATUS . DATA_LOSS ] : 'DATA_LOSS' ,
87- [ GRPC_STATUS . UNAUTHENTICATED ] : 'UNAUTHENTICATED' ,
75+ /**
76+ * String form of {@link A2A_STATUS_CODE}, used in the REST body's
77+ * `status` field per §11.6. Names follow the gRPC enum form.
78+ */
79+ export const A2A_STATUS_NAME : Readonly < Record < number , string > > = {
80+ [ A2A_STATUS_CODE . OK ] : 'OK' ,
81+ [ A2A_STATUS_CODE . CANCELLED ] : 'CANCELLED' ,
82+ [ A2A_STATUS_CODE . UNKNOWN ] : 'UNKNOWN' ,
83+ [ A2A_STATUS_CODE . INVALID_ARGUMENT ] : 'INVALID_ARGUMENT' ,
84+ [ A2A_STATUS_CODE . DEADLINE_EXCEEDED ] : 'DEADLINE_EXCEEDED' ,
85+ [ A2A_STATUS_CODE . NOT_FOUND ] : 'NOT_FOUND' ,
86+ [ A2A_STATUS_CODE . ALREADY_EXISTS ] : 'ALREADY_EXISTS' ,
87+ [ A2A_STATUS_CODE . PERMISSION_DENIED ] : 'PERMISSION_DENIED' ,
88+ [ A2A_STATUS_CODE . RESOURCE_EXHAUSTED ] : 'RESOURCE_EXHAUSTED' ,
89+ [ A2A_STATUS_CODE . FAILED_PRECONDITION ] : 'FAILED_PRECONDITION' ,
90+ [ A2A_STATUS_CODE . ABORTED ] : 'ABORTED' ,
91+ [ A2A_STATUS_CODE . OUT_OF_RANGE ] : 'OUT_OF_RANGE' ,
92+ [ A2A_STATUS_CODE . UNIMPLEMENTED ] : 'UNIMPLEMENTED' ,
93+ [ A2A_STATUS_CODE . INTERNAL ] : 'INTERNAL' ,
94+ [ A2A_STATUS_CODE . UNAVAILABLE ] : 'UNAVAILABLE' ,
95+ [ A2A_STATUS_CODE . DATA_LOSS ] : 'DATA_LOSS' ,
96+ [ A2A_STATUS_CODE . UNAUTHENTICATED ] : 'UNAUTHENTICATED' ,
8897} ;
8998
9099/** A structured detail object included in error responses. */
@@ -177,87 +186,87 @@ const specs: A2AErrorSpec[] = [
177186 name : 'TaskNotFoundError' ,
178187 reason : 'TASK_NOT_FOUND' ,
179188 code : A2A_ERROR_CODE . TASK_NOT_FOUND ,
180- grpcStatus : GRPC_STATUS . NOT_FOUND ,
189+ grpcStatus : A2A_STATUS_CODE . NOT_FOUND ,
181190 httpStatus : HTTP_STATUS . NOT_FOUND ,
182191 defaultMessage : 'Task not found' ,
183192 } ,
184193 {
185194 name : 'TaskNotCancelableError' ,
186195 reason : 'TASK_NOT_CANCELABLE' ,
187196 code : A2A_ERROR_CODE . TASK_NOT_CANCELABLE ,
188- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
197+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
189198 httpStatus : HTTP_STATUS . BAD_REQUEST ,
190199 defaultMessage : 'Task cannot be canceled' ,
191200 } ,
192201 {
193202 name : 'PushNotificationNotSupportedError' ,
194203 reason : 'PUSH_NOTIFICATION_NOT_SUPPORTED' ,
195204 code : A2A_ERROR_CODE . PUSH_NOTIFICATION_NOT_SUPPORTED ,
196- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
205+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
197206 httpStatus : HTTP_STATUS . BAD_REQUEST ,
198207 defaultMessage : 'Push Notification is not supported' ,
199208 } ,
200209 {
201210 name : 'UnsupportedOperationError' ,
202211 reason : 'UNSUPPORTED_OPERATION' ,
203212 code : A2A_ERROR_CODE . UNSUPPORTED_OPERATION ,
204- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
213+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
205214 httpStatus : HTTP_STATUS . BAD_REQUEST ,
206215 defaultMessage : 'This operation is not supported' ,
207216 } ,
208217 {
209218 name : 'ContentTypeNotSupportedError' ,
210219 reason : 'CONTENT_TYPE_NOT_SUPPORTED' ,
211220 code : A2A_ERROR_CODE . CONTENT_TYPE_NOT_SUPPORTED ,
212- grpcStatus : GRPC_STATUS . INVALID_ARGUMENT ,
221+ grpcStatus : A2A_STATUS_CODE . INVALID_ARGUMENT ,
213222 httpStatus : HTTP_STATUS . BAD_REQUEST ,
214223 defaultMessage : 'Incompatible content types' ,
215224 } ,
216225 {
217226 name : 'InvalidAgentResponseError' ,
218227 reason : 'INVALID_AGENT_RESPONSE' ,
219228 code : A2A_ERROR_CODE . INVALID_AGENT_RESPONSE ,
220- grpcStatus : GRPC_STATUS . INTERNAL ,
229+ grpcStatus : A2A_STATUS_CODE . INTERNAL ,
221230 httpStatus : HTTP_STATUS . INTERNAL_SERVER_ERROR ,
222231 defaultMessage : 'Invalid agent response type' ,
223232 } ,
224233 {
225234 name : 'ExtendedAgentCardNotConfiguredError' ,
226235 reason : 'EXTENDED_AGENT_CARD_NOT_CONFIGURED' ,
227236 code : A2A_ERROR_CODE . EXTENDED_CARD_NOT_CONFIGURED ,
228- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
237+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
229238 httpStatus : HTTP_STATUS . BAD_REQUEST ,
230239 defaultMessage : 'Extended Agent Card not configured' ,
231240 } ,
232241 {
233242 name : 'ExtensionSupportRequiredError' ,
234243 reason : 'EXTENSION_SUPPORT_REQUIRED' ,
235244 code : A2A_ERROR_CODE . EXTENSION_SUPPORT_REQUIRED ,
236- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
245+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
237246 httpStatus : HTTP_STATUS . BAD_REQUEST ,
238247 defaultMessage : 'Extension support required' ,
239248 } ,
240249 {
241250 name : 'VersionNotSupportedError' ,
242251 reason : 'VERSION_NOT_SUPPORTED' ,
243252 code : A2A_ERROR_CODE . VERSION_NOT_SUPPORTED ,
244- grpcStatus : GRPC_STATUS . FAILED_PRECONDITION ,
253+ grpcStatus : A2A_STATUS_CODE . FAILED_PRECONDITION ,
245254 httpStatus : HTTP_STATUS . BAD_REQUEST ,
246255 defaultMessage : 'Version not supported' ,
247256 } ,
248257 {
249258 name : 'RequestMalformedError' ,
250259 reason : 'INVALID_PARAMS' ,
251260 code : A2A_ERROR_CODE . INVALID_PARAMS ,
252- grpcStatus : GRPC_STATUS . INVALID_ARGUMENT ,
261+ grpcStatus : A2A_STATUS_CODE . INVALID_ARGUMENT ,
253262 httpStatus : HTTP_STATUS . BAD_REQUEST ,
254263 defaultMessage : 'Request malformed' ,
255264 } ,
256265 {
257266 name : 'GenericError' ,
258267 reason : 'INTERNAL_ERROR' ,
259268 code : A2A_ERROR_CODE . INTERNAL_ERROR ,
260- grpcStatus : GRPC_STATUS . INTERNAL ,
269+ grpcStatus : A2A_STATUS_CODE . INTERNAL ,
261270 httpStatus : HTTP_STATUS . INTERNAL_SERVER_ERROR ,
262271 defaultMessage : 'An unexpected error occurred.' ,
263272 } ,
0 commit comments