@artinet/sdk 0.6.0-preview.1 → 0.6.0-preview.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -17
- package/dist/browser/client/a2a-client.js +4 -4
- package/dist/browser/config/index.d.ts +1 -1
- package/dist/browser/config/index.js +1 -1
- package/dist/browser/create/agentcard-builder.d.ts +47 -0
- package/dist/browser/create/agentcard-builder.js +65 -0
- package/dist/browser/create/base.d.ts +4 -0
- package/dist/browser/create/base.js +1 -0
- package/dist/browser/create/describe.d.ts +8 -0
- package/dist/browser/create/describe.js +8 -0
- package/dist/browser/create/message-builder.d.ts +78 -0
- package/dist/browser/create/message-builder.js +108 -0
- package/dist/browser/create/part-builder.d.ts +60 -0
- package/dist/browser/create/part-builder.js +81 -0
- package/dist/browser/create/task-builder.d.ts +251 -0
- package/dist/browser/create/task-builder.js +379 -0
- package/dist/browser/transport/rpc/parser.d.ts +1 -1
- package/dist/browser/transport/rpc/parser.js +2 -1
- package/dist/browser/types/a2a/a2a.d.ts +7 -3
- package/dist/browser/types/a2a/index.d.ts +3 -1
- package/dist/browser/types/a2a/index.js +0 -1
- package/dist/browser/utils/common/constants.d.ts +0 -5
- package/dist/browser/utils/common/constants.js +0 -27
- package/dist/browser/utils/common/errors.d.ts +57 -1
- package/dist/browser/utils/common/errors.js +68 -15
- package/dist/client/a2a-client.js +4 -4
- package/dist/config/default.d.ts +1 -1
- package/dist/config/default.js +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +1 -1
- package/dist/create/agent-builder.d.ts +77 -0
- package/dist/create/agent-builder.js +20 -0
- package/dist/create/agentcard-builder.d.ts +47 -0
- package/dist/create/agentcard-builder.js +66 -0
- package/dist/create/base.d.ts +4 -0
- package/dist/create/base.js +1 -0
- package/dist/create/create.d.ts +762 -0
- package/dist/create/create.js +556 -0
- package/dist/create/describe.d.ts +8 -0
- package/dist/create/describe.js +8 -0
- package/dist/create/index.d.ts +4 -0
- package/dist/create/index.js +4 -0
- package/dist/create/message-builder.d.ts +78 -0
- package/dist/create/message-builder.js +110 -0
- package/dist/create/part-builder.d.ts +60 -0
- package/dist/create/part-builder.js +84 -0
- package/dist/create/status-builder.d.ts +30 -0
- package/dist/create/status-builder.js +46 -0
- package/dist/create/task-builder.d.ts +251 -0
- package/dist/create/task-builder.js +384 -0
- package/dist/create/transform.d.ts +16 -0
- package/dist/create/transform.js +106 -0
- package/dist/extensions/otel.d.ts +3 -0
- package/dist/extensions/otel.js +3 -0
- package/dist/extensions/pino.d.ts +3 -0
- package/dist/extensions/pino.js +3 -0
- package/dist/extensions/winston.d.ts +3 -0
- package/dist/extensions/winston.js +3 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/server/express/errors.js +4 -8
- package/dist/server/express/middeware.js +17 -38
- package/dist/server/express/server.d.ts +20 -1
- package/dist/server/express/server.js +44 -12
- package/dist/services/a2a/execute.d.ts +5 -0
- package/dist/services/a2a/execute.js +7 -0
- package/dist/services/a2a/factory/context.d.ts +1 -1
- package/dist/services/a2a/factory/context.js +2 -3
- package/dist/services/a2a/factory/handler.js +3 -3
- package/dist/services/a2a/factory/index.d.ts +0 -1
- package/dist/services/a2a/factory/index.js +0 -1
- package/dist/services/a2a/factory/service.d.ts +2 -2
- package/dist/services/a2a/factory/service.js +2 -2
- package/dist/services/a2a/factory/state-machine.d.ts +1 -1
- package/dist/services/a2a/factory/state-machine.js +30 -8
- package/dist/services/a2a/handlers/artifact.d.ts +2 -5
- package/dist/services/a2a/handlers/artifact.js +21 -32
- package/dist/services/a2a/handlers/cancel-task.js +7 -5
- package/dist/services/a2a/handlers/resubscribe-task.d.ts +10 -2
- package/dist/services/a2a/handlers/resubscribe-task.js +21 -18
- package/dist/services/a2a/handlers/send-message.js +6 -10
- package/dist/services/a2a/handlers/stream-message.d.ts +10 -2
- package/dist/services/a2a/handlers/stream-message.js +5 -1
- package/dist/services/a2a/handlers/update.js +15 -12
- package/dist/services/a2a/helpers/content.d.ts +5 -1
- package/dist/services/a2a/helpers/content.js +5 -1
- package/dist/services/a2a/helpers/index.d.ts +2 -2
- package/dist/services/a2a/helpers/index.js +2 -2
- package/dist/services/a2a/index.d.ts +1 -1
- package/dist/services/a2a/index.js +1 -1
- package/dist/services/a2a/managers.js +7 -1
- package/dist/services/a2a/service.d.ts +6 -2
- package/dist/services/a2a/service.js +54 -61
- package/dist/services/a2a/state-machine.d.ts +3 -3
- package/dist/services/a2a/state-machine.js +2 -0
- package/dist/transport/rpc/parser.d.ts +1 -1
- package/dist/transport/rpc/parser.js +2 -1
- package/dist/transport/trpc/a2a/routes/message/route.js +2 -1
- package/dist/transport/trpc/a2a/routes/tasks/route.js +2 -1
- package/dist/types/a2a/a2a.d.ts +7 -3
- package/dist/types/a2a/index.d.ts +3 -1
- package/dist/types/a2a/index.js +0 -1
- package/dist/utils/common/constants.d.ts +0 -5
- package/dist/utils/common/constants.js +0 -27
- package/dist/utils/common/errors.d.ts +57 -1
- package/dist/utils/common/errors.js +68 -15
- package/dist/utils/common/parse.d.ts +1 -1
- package/dist/utils/common/schema-validation.d.ts +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/package.json +8 -5
- package/dist/browser/services/a2a/helpers/message-builder.d.ts +0 -17
- package/dist/browser/services/a2a/helpers/message-builder.js +0 -66
- package/dist/browser/types/a2a/builder.d.ts +0 -43
- package/dist/browser/types/a2a/builder.js +0 -5
- package/dist/services/a2a/factory/builder.d.ts +0 -292
- package/dist/services/a2a/factory/builder.js +0 -370
- package/dist/services/a2a/helpers/agentcard-builder.d.ts +0 -11
- package/dist/services/a2a/helpers/agentcard-builder.js +0 -27
- package/dist/services/a2a/helpers/message-builder.d.ts +0 -17
- package/dist/services/a2a/helpers/message-builder.js +0 -66
- package/dist/types/a2a/builder.d.ts +0 -43
- package/dist/types/a2a/builder.js +0 -5
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 The Artinet Project
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { A2A } from "../types/index.js";
|
|
6
|
+
import { v4 as uuidv4 } from "uuid";
|
|
7
|
+
import { getCurrentTimestamp } from "../utils/common/utils.js";
|
|
8
|
+
import { isMessageParams, Message,
|
|
9
|
+
// type BuilderMessageParams,
|
|
10
|
+
} from "./message-builder.js";
|
|
11
|
+
export const isArtifactParams = (params) => {
|
|
12
|
+
return (typeof params === "string" ||
|
|
13
|
+
(typeof params === "object" && params !== null && "parts" in params));
|
|
14
|
+
};
|
|
15
|
+
export class Artifact {
|
|
16
|
+
_artifact;
|
|
17
|
+
constructor(artifact_params = {}) {
|
|
18
|
+
this._artifact = {
|
|
19
|
+
artifactId: uuidv4(),
|
|
20
|
+
parts: [],
|
|
21
|
+
...artifact_params,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
get artifact() {
|
|
25
|
+
return this._artifact;
|
|
26
|
+
}
|
|
27
|
+
static create(params = {}) {
|
|
28
|
+
return new Artifact(typeof params === "string"
|
|
29
|
+
? { parts: [{ text: params, kind: "text" }] }
|
|
30
|
+
: params).artifact;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export const artifact = Artifact.create;
|
|
34
|
+
export const isStatusParams = (params) => {
|
|
35
|
+
return (typeof params === "string" ||
|
|
36
|
+
(typeof params === "object" &&
|
|
37
|
+
params !== null &&
|
|
38
|
+
"state" in params &&
|
|
39
|
+
params.state in A2A.TaskState) ||
|
|
40
|
+
(typeof params === "object" &&
|
|
41
|
+
params !== null &&
|
|
42
|
+
"message" in params &&
|
|
43
|
+
isMessageParams(params.message)));
|
|
44
|
+
};
|
|
45
|
+
export class TaskStatus {
|
|
46
|
+
_status;
|
|
47
|
+
constructor(params = {}) {
|
|
48
|
+
const timestamp = params.timestamp ?? getCurrentTimestamp();
|
|
49
|
+
this._status = {
|
|
50
|
+
...params,
|
|
51
|
+
state: params.state ?? A2A.TaskState.working,
|
|
52
|
+
timestamp,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
get status() {
|
|
56
|
+
return this._status;
|
|
57
|
+
}
|
|
58
|
+
static create(params = {}) {
|
|
59
|
+
if (typeof params === "string" && params in A2A.TaskState) {
|
|
60
|
+
return new TaskStatus({ state: params }).status;
|
|
61
|
+
}
|
|
62
|
+
else if (isMessageParams(params)) {
|
|
63
|
+
return new TaskStatus({
|
|
64
|
+
state: A2A.TaskState.working,
|
|
65
|
+
message: Message.create(params),
|
|
66
|
+
}).status;
|
|
67
|
+
}
|
|
68
|
+
return new TaskStatus(params).status;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convenience factory function for creating a task status with default parameters.
|
|
73
|
+
*
|
|
74
|
+
* @returns New {@link A2A.TaskStatus} with default parameters
|
|
75
|
+
* @defaults {
|
|
76
|
+
* state: "working",
|
|
77
|
+
* timestamp: getCurrentTimestamp(),
|
|
78
|
+
* }
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const status = status("working");
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* @public
|
|
86
|
+
* @since 0.6.0
|
|
87
|
+
*/
|
|
88
|
+
export const status = TaskStatus.create;
|
|
89
|
+
export class Task {
|
|
90
|
+
_task;
|
|
91
|
+
constructor(params = {}) {
|
|
92
|
+
const id = params.id ?? uuidv4();
|
|
93
|
+
this._task = {
|
|
94
|
+
...params,
|
|
95
|
+
id,
|
|
96
|
+
contextId: params.contextId ?? id,
|
|
97
|
+
kind: A2A.Kind.task,
|
|
98
|
+
status: TaskStatus.create(params.status),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
get task() {
|
|
102
|
+
return this._task;
|
|
103
|
+
}
|
|
104
|
+
static create(params = {}) {
|
|
105
|
+
if (isStatusParams(params)) {
|
|
106
|
+
return new Task({ status: TaskStatus.create(params) }).task;
|
|
107
|
+
}
|
|
108
|
+
return new Task(params).task;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Convenience factory function for creating a task with default parameters.
|
|
113
|
+
*
|
|
114
|
+
* @returns New {@link A2A.Task} with default parameters
|
|
115
|
+
* @defaults:
|
|
116
|
+
* - `id`: uuidv4()
|
|
117
|
+
* - `contextId`: id
|
|
118
|
+
* - `status`: { state: "working" }
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* const task = task({ status: { state: "working" } });
|
|
122
|
+
* ```
|
|
123
|
+
*
|
|
124
|
+
* @public
|
|
125
|
+
* @since 0.6.0
|
|
126
|
+
*/
|
|
127
|
+
export const task = Task.create;
|
|
128
|
+
export class TaskStatusUpdateEvent {
|
|
129
|
+
_event;
|
|
130
|
+
constructor(params) {
|
|
131
|
+
const taskId = params.taskId ?? params.status.message?.taskId ?? uuidv4();
|
|
132
|
+
const contextId = params.contextId ?? params.status.message?.contextId ?? taskId;
|
|
133
|
+
this._event = {
|
|
134
|
+
...params,
|
|
135
|
+
taskId,
|
|
136
|
+
contextId,
|
|
137
|
+
kind: A2A.Kind["status-update"],
|
|
138
|
+
final: params.final ?? false,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
get event() {
|
|
142
|
+
return this._event;
|
|
143
|
+
}
|
|
144
|
+
static create(params) {
|
|
145
|
+
if (isStatusParams(params)) {
|
|
146
|
+
return new TaskStatusUpdateEvent({
|
|
147
|
+
/*allows for a mixture of Update & Status Params*/
|
|
148
|
+
...(typeof params === "object" ? params : {}),
|
|
149
|
+
status: TaskStatus.create(params),
|
|
150
|
+
}).event;
|
|
151
|
+
}
|
|
152
|
+
return new TaskStatusUpdateEvent(params).event;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export class TaskArtifactUpdateEvent {
|
|
156
|
+
_event;
|
|
157
|
+
constructor(params) {
|
|
158
|
+
const taskId = params.taskId ?? uuidv4();
|
|
159
|
+
this._event = {
|
|
160
|
+
...params,
|
|
161
|
+
taskId,
|
|
162
|
+
contextId: params.contextId ?? taskId,
|
|
163
|
+
kind: A2A.Kind["artifact-update"],
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
get event() {
|
|
167
|
+
return this._event;
|
|
168
|
+
}
|
|
169
|
+
static create(params) {
|
|
170
|
+
if (isArtifactParams(params)) {
|
|
171
|
+
return new TaskArtifactUpdateEvent({
|
|
172
|
+
artifact: Artifact.create(params),
|
|
173
|
+
}).event;
|
|
174
|
+
}
|
|
175
|
+
return new TaskArtifactUpdateEvent({
|
|
176
|
+
...params,
|
|
177
|
+
artifact: Artifact.create(params.artifact),
|
|
178
|
+
}).event;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const strict_update = (params) => {
|
|
182
|
+
return TaskStatusUpdateEvent.create(params);
|
|
183
|
+
};
|
|
184
|
+
function _buildUpdate(state, params, final) {
|
|
185
|
+
return strict_update({
|
|
186
|
+
taskId: params.taskId,
|
|
187
|
+
contextId: params.contextId,
|
|
188
|
+
status: {
|
|
189
|
+
state: state,
|
|
190
|
+
message: params.message,
|
|
191
|
+
timestamp: params.timestamp,
|
|
192
|
+
},
|
|
193
|
+
final: final ?? params.final,
|
|
194
|
+
metadata: params.metadata,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function _working(params) {
|
|
198
|
+
return _buildUpdate(A2A.TaskState.working, params);
|
|
199
|
+
}
|
|
200
|
+
function _canceled(params) {
|
|
201
|
+
return _buildUpdate(A2A.TaskState.canceled, params, true);
|
|
202
|
+
}
|
|
203
|
+
function _submitted(params) {
|
|
204
|
+
return _buildUpdate(A2A.TaskState.submitted, params);
|
|
205
|
+
}
|
|
206
|
+
function _failed(params) {
|
|
207
|
+
return _buildUpdate(A2A.TaskState.failed, params, true);
|
|
208
|
+
}
|
|
209
|
+
function _completed(params) {
|
|
210
|
+
return _buildUpdate(A2A.TaskState.completed, params, true);
|
|
211
|
+
}
|
|
212
|
+
function _inputRequired(params) {
|
|
213
|
+
return _buildUpdate(A2A.TaskState["input-required"], params);
|
|
214
|
+
}
|
|
215
|
+
function _rejected(params) {
|
|
216
|
+
return _buildUpdate(A2A.TaskState.rejected, params);
|
|
217
|
+
}
|
|
218
|
+
function _authRequired(params) {
|
|
219
|
+
return _buildUpdate(A2A.TaskState["auth-required"], params);
|
|
220
|
+
}
|
|
221
|
+
function _unknown(params) {
|
|
222
|
+
return _buildUpdate(A2A.TaskState["unknown"], params);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Convenience factory function for creating a task status and artifact update events with default parameters.
|
|
226
|
+
*
|
|
227
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} and {@link A2A.TaskArtifactUpdateEvent} with default parameters
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```typescript
|
|
231
|
+
* const artifactEvent = update.artifact({
|
|
232
|
+
* artifact: "result"
|
|
233
|
+
* });
|
|
234
|
+
* const statusEvent = update.status({
|
|
235
|
+
* status: "working"
|
|
236
|
+
* });
|
|
237
|
+
* ```
|
|
238
|
+
*
|
|
239
|
+
* @public
|
|
240
|
+
* @since 0.6.0
|
|
241
|
+
*/
|
|
242
|
+
export const update = {
|
|
243
|
+
/**
|
|
244
|
+
* Convenience factory function for creating a task artifact update event.
|
|
245
|
+
* @returns New {@link A2A.TaskArtifactUpdateEvent}
|
|
246
|
+
* @example
|
|
247
|
+
* ```typescript
|
|
248
|
+
* const event = update.artifact({
|
|
249
|
+
* artifact: "result"
|
|
250
|
+
* });
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
artifact: TaskArtifactUpdateEvent.create,
|
|
254
|
+
/**
|
|
255
|
+
* Convenience factory function for creating a task status update event.
|
|
256
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent}
|
|
257
|
+
* @example
|
|
258
|
+
* ```typescript
|
|
259
|
+
* const event = update.status({
|
|
260
|
+
* message: "Working on the task"
|
|
261
|
+
* });
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
status: TaskStatusUpdateEvent.create,
|
|
265
|
+
/**
|
|
266
|
+
* Convenience factory function for creating a task status update event with the working state.
|
|
267
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.working} state
|
|
268
|
+
* @example
|
|
269
|
+
* ```typescript
|
|
270
|
+
* const event = update.working({
|
|
271
|
+
* message: "Working on the task"
|
|
272
|
+
* });
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
working: _working,
|
|
276
|
+
/**
|
|
277
|
+
* Convenience factory function for creating a task status update event with the canceled state.
|
|
278
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.canceled} state
|
|
279
|
+
* @example
|
|
280
|
+
* ```typescript
|
|
281
|
+
* const event = update.canceled({
|
|
282
|
+
* message: "Task canceled"
|
|
283
|
+
* });
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
canceled: _canceled,
|
|
287
|
+
/**
|
|
288
|
+
* Convenience factory function for creating a task status update event with the submitted state.
|
|
289
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.submitted} state
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const event = update.submitted({
|
|
293
|
+
* message: "Task submitted"
|
|
294
|
+
* });
|
|
295
|
+
* ```
|
|
296
|
+
*/
|
|
297
|
+
submitted: _submitted,
|
|
298
|
+
/**
|
|
299
|
+
* Convenience factory function for creating a task status update event with the failed state.
|
|
300
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.failed} state
|
|
301
|
+
* @example
|
|
302
|
+
* ```typescript
|
|
303
|
+
* const event = update.failed({
|
|
304
|
+
* message: "Task failed"
|
|
305
|
+
* });
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
failed: _failed,
|
|
309
|
+
/**
|
|
310
|
+
* Convenience factory function for creating a task status update event with the completed state.
|
|
311
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.completed} state
|
|
312
|
+
* @example
|
|
313
|
+
* ```typescript
|
|
314
|
+
* const event = update.completed({
|
|
315
|
+
* message: "Task completed"
|
|
316
|
+
* });
|
|
317
|
+
* ```
|
|
318
|
+
*/
|
|
319
|
+
completed: _completed,
|
|
320
|
+
/**
|
|
321
|
+
* Convenience factory function for creating a task status update event with the input required state.
|
|
322
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState["input-required"]} state
|
|
323
|
+
* @example
|
|
324
|
+
* ```typescript
|
|
325
|
+
* const event = update.inputRequired({
|
|
326
|
+
* message: "Task input required"
|
|
327
|
+
* });
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
inputRequired: _inputRequired,
|
|
331
|
+
/**
|
|
332
|
+
* Convenience factory function for creating a task status update event with the rejected state.
|
|
333
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.rejected} state
|
|
334
|
+
* @example
|
|
335
|
+
* ```typescript
|
|
336
|
+
* const event = update.rejected({
|
|
337
|
+
* message: "Task rejected"
|
|
338
|
+
* });
|
|
339
|
+
* ```
|
|
340
|
+
*/
|
|
341
|
+
rejected: _rejected,
|
|
342
|
+
/**
|
|
343
|
+
* Convenience factory function for creating a task status update event with the auth required state.
|
|
344
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState["auth-required"]} state
|
|
345
|
+
* @example
|
|
346
|
+
* ```typescript
|
|
347
|
+
* const event = update.authRequired({
|
|
348
|
+
* message: {
|
|
349
|
+
* role: "agent"
|
|
350
|
+
* parts: [
|
|
351
|
+
* {
|
|
352
|
+
* text: "Task auth required"
|
|
353
|
+
* }
|
|
354
|
+
* ]
|
|
355
|
+
* kind: "message"
|
|
356
|
+
* });
|
|
357
|
+
* ```
|
|
358
|
+
*/
|
|
359
|
+
authRequired: _authRequired,
|
|
360
|
+
/**
|
|
361
|
+
* Convenience factory function for creating a task status update event with the unknown state.
|
|
362
|
+
* @returns New {@link A2A.TaskStatusUpdateEvent} with the {@link A2A.TaskState.unknown} state
|
|
363
|
+
* @example
|
|
364
|
+
* ```typescript
|
|
365
|
+
* const event = update.unknown({
|
|
366
|
+
* message: "Task unknown"
|
|
367
|
+
* });
|
|
368
|
+
* ```
|
|
369
|
+
*/
|
|
370
|
+
unknown: _unknown,
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* @description A temporary compatibility function for updating a task status, purely for migration purposes.
|
|
374
|
+
* @deprecated Use {@link update.status} instead
|
|
375
|
+
* @since 0.6.0
|
|
376
|
+
*/
|
|
377
|
+
export const update_compat = (taskId, contextId, state, message, timestamp, final = false) => {
|
|
378
|
+
return _buildUpdate(state, {
|
|
379
|
+
taskId: taskId,
|
|
380
|
+
contextId: contextId,
|
|
381
|
+
message: message,
|
|
382
|
+
timestamp: timestamp,
|
|
383
|
+
}, final);
|
|
384
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 The Artinet Project
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { A2A } from "../types/index.js";
|
|
6
|
+
import * as Builder from "./agent-builder.js";
|
|
7
|
+
import { MessageParams } from "./message-builder.js";
|
|
8
|
+
import { StatusUpdateParams, ArtifactUpdateParams, TaskParams } from "./task-builder.js";
|
|
9
|
+
export declare function hasCarry<Ret extends Builder.AcceptedReturnValues, Carried extends Builder.BaseArgs>(ret: Builder.Reply<Ret, Carried>): ret is Builder.ReturnAndCarry<Ret, Carried>;
|
|
10
|
+
export declare function hasReply<Ret extends Builder.AcceptedReturnValues, Carried extends Builder.BaseArgs>(ret: Builder.Reply<Ret, Carried>): ret is Builder.ReturnValue<Ret>;
|
|
11
|
+
export declare function Parts(kind: "text" | "file" | "data"): Builder.Transform<Builder.AcceptedParts>;
|
|
12
|
+
export declare function Message(): Builder.Transform<Builder.Stateless<MessageParams>>;
|
|
13
|
+
export declare function Artifact(): Builder.Transform<Builder.Stateless<ArtifactUpdateParams>>;
|
|
14
|
+
export declare function Status(): Builder.Transform<Builder.Stateless<StatusUpdateParams>>;
|
|
15
|
+
export declare function Task(): Builder.Transform<Builder.Stateless<TaskParams>>;
|
|
16
|
+
export declare function Reply<Ret extends Builder.AcceptedReturnValues, Carried extends Builder.BaseArgs>(ret: Builder.Reply<Ret, Carried>, context: A2A.Context, transform: Builder.Transform<Ret>): AsyncGenerator<A2A.Update, Carried | undefined, unknown>;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 The Artinet Project
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { describe } from "./index.js";
|
|
6
|
+
import { TaskStatus, } from "./task-builder.js";
|
|
7
|
+
export function hasCarry(ret) {
|
|
8
|
+
return (ret !== null && typeof ret === "object" && "reply" in ret && "args" in ret);
|
|
9
|
+
}
|
|
10
|
+
export function hasReply(ret) {
|
|
11
|
+
return ret !== null && typeof ret === "object" && "reply" in ret;
|
|
12
|
+
}
|
|
13
|
+
function messagePart(params) {
|
|
14
|
+
switch (params.kind) {
|
|
15
|
+
case "text": {
|
|
16
|
+
return describe.part.text(params.part);
|
|
17
|
+
}
|
|
18
|
+
case "file": {
|
|
19
|
+
return describe.part.file(params.part);
|
|
20
|
+
}
|
|
21
|
+
case "data": {
|
|
22
|
+
return describe.part.data(params.part);
|
|
23
|
+
}
|
|
24
|
+
default:
|
|
25
|
+
throw new Error("Invalid part detected", { cause: params });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function Parts(kind) {
|
|
29
|
+
return async function* (payload, { taskId, contextId }) {
|
|
30
|
+
const parts = (Array.isArray(payload) ? payload : [payload]).map((part) => messagePart({ kind, part }));
|
|
31
|
+
yield describe.update.working({
|
|
32
|
+
taskId,
|
|
33
|
+
contextId,
|
|
34
|
+
message: describe.message({ role: "agent", parts }),
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function Message() {
|
|
40
|
+
return async function* (payload, { taskId, contextId }) {
|
|
41
|
+
if (Array.isArray(payload)) {
|
|
42
|
+
throw new Error("Array of messages is not supported");
|
|
43
|
+
}
|
|
44
|
+
const message = typeof payload === "string" ? describe.message(payload) : payload;
|
|
45
|
+
yield describe.message({
|
|
46
|
+
...message,
|
|
47
|
+
taskId,
|
|
48
|
+
contextId,
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function Artifact() {
|
|
54
|
+
return async function* (payload, { taskId, contextId }) {
|
|
55
|
+
const updates = Array.isArray(payload) ? payload : [payload];
|
|
56
|
+
for (const update of updates) {
|
|
57
|
+
const artifact = typeof update === "string" ? describe.artifact(update) : update;
|
|
58
|
+
yield describe.update.artifact({
|
|
59
|
+
...artifact,
|
|
60
|
+
taskId,
|
|
61
|
+
contextId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function Status() {
|
|
68
|
+
return async function* (payload, { taskId, contextId }) {
|
|
69
|
+
const updates = Array.isArray(payload) ? payload : [payload];
|
|
70
|
+
for (const update of updates) {
|
|
71
|
+
const status = typeof update === "string" ? TaskStatus.create(update) : update;
|
|
72
|
+
yield describe.update.status({
|
|
73
|
+
...status,
|
|
74
|
+
taskId,
|
|
75
|
+
contextId,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function Task() {
|
|
82
|
+
return async function* (payload, { taskId, contextId }) {
|
|
83
|
+
if (Array.isArray(payload)) {
|
|
84
|
+
throw new Error("Array of tasks is not supported");
|
|
85
|
+
}
|
|
86
|
+
const task = typeof payload === "string" ? describe.task(payload) : payload;
|
|
87
|
+
yield describe.task({ ...task, taskId, contextId });
|
|
88
|
+
return;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export async function* Reply(ret, context, transform) {
|
|
92
|
+
if (Array.isArray(ret)) {
|
|
93
|
+
yield* transform(ret, context);
|
|
94
|
+
}
|
|
95
|
+
else if (hasCarry(ret)) {
|
|
96
|
+
yield* transform(ret.reply, context);
|
|
97
|
+
return ret.args;
|
|
98
|
+
}
|
|
99
|
+
else if (hasReply(ret)) {
|
|
100
|
+
yield* transform(ret.reply, context);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
yield* transform(ret, context);
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
package/dist/extensions/otel.js
CHANGED
package/dist/extensions/pino.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Copyright 2025 The Artinet Project
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { SystemError
|
|
5
|
+
import { SystemError } from "../../utils/index.js";
|
|
6
6
|
import { logger } from "../../config/index.js";
|
|
7
7
|
import escapeHtml from "escape-html";
|
|
8
|
+
import { A2AError } from "@a2a-js/sdk/server";
|
|
8
9
|
/**
|
|
9
10
|
* Express error handler middleware.
|
|
10
11
|
*/
|
|
@@ -24,16 +25,11 @@ export const errorHandler = (err, req, res, _) => {
|
|
|
24
25
|
logger.error("errorHandler: Error extracting request ID", e);
|
|
25
26
|
}
|
|
26
27
|
let jsonRpcError;
|
|
27
|
-
if (err instanceof SystemError) {
|
|
28
|
+
if (err instanceof A2AError || err instanceof SystemError) {
|
|
28
29
|
jsonRpcError = { code: err.code, message: err.message, data: err.data };
|
|
29
30
|
}
|
|
30
31
|
else {
|
|
31
|
-
|
|
32
|
-
jsonRpcError = {
|
|
33
|
-
code: internalError.code,
|
|
34
|
-
message: internalError.message,
|
|
35
|
-
data: internalError.data,
|
|
36
|
-
};
|
|
32
|
+
jsonRpcError = A2AError.internalError(err.message, err.data).toJSONRPCError();
|
|
37
33
|
}
|
|
38
34
|
const errorResponse = {
|
|
39
35
|
jsonrpc: "2.0",
|