@agenticprimitives/a2a 0.0.0-alpha.2 → 0.0.0-alpha.21

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.
Files changed (121) hide show
  1. package/CLAUDE.md +58 -21
  2. package/bin/a2a-conform.mjs +17 -0
  3. package/dist/agent.d.ts +183 -3
  4. package/dist/agent.d.ts.map +1 -1
  5. package/dist/agent.js +361 -62
  6. package/dist/agent.js.map +1 -1
  7. package/dist/auth.d.ts +72 -9
  8. package/dist/auth.d.ts.map +1 -1
  9. package/dist/auth.js +62 -19
  10. package/dist/auth.js.map +1 -1
  11. package/dist/authority-extension.d.ts +58 -0
  12. package/dist/authority-extension.d.ts.map +1 -0
  13. package/dist/authority-extension.js +70 -0
  14. package/dist/authority-extension.js.map +1 -0
  15. package/dist/card-audience.d.ts +87 -0
  16. package/dist/card-audience.d.ts.map +1 -0
  17. package/dist/card-audience.js +135 -0
  18. package/dist/card-audience.js.map +1 -0
  19. package/dist/client.d.ts +23 -8
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +74 -13
  22. package/dist/client.js.map +1 -1
  23. package/dist/cloudflare/index.d.ts.map +1 -1
  24. package/dist/cloudflare/index.js +10 -2
  25. package/dist/cloudflare/index.js.map +1 -1
  26. package/dist/conform/index.d.ts +36 -0
  27. package/dist/conform/index.d.ts.map +1 -0
  28. package/dist/conform/index.js +232 -0
  29. package/dist/conform/index.js.map +1 -0
  30. package/dist/discovery.d.ts +4 -0
  31. package/dist/discovery.d.ts.map +1 -1
  32. package/dist/discovery.js +6 -2
  33. package/dist/discovery.js.map +1 -1
  34. package/dist/engagement.d.ts +37 -0
  35. package/dist/engagement.d.ts.map +1 -0
  36. package/dist/engagement.js +83 -0
  37. package/dist/engagement.js.map +1 -0
  38. package/dist/grant.d.ts +4 -2
  39. package/dist/grant.d.ts.map +1 -1
  40. package/dist/grant.js +21 -13
  41. package/dist/grant.js.map +1 -1
  42. package/dist/handoff.d.ts +42 -0
  43. package/dist/handoff.d.ts.map +1 -0
  44. package/dist/handoff.js +28 -0
  45. package/dist/handoff.js.map +1 -0
  46. package/dist/index.d.ts +24 -7
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +22 -3
  49. package/dist/index.js.map +1 -1
  50. package/dist/payment-gate.d.ts +88 -0
  51. package/dist/payment-gate.d.ts.map +1 -0
  52. package/dist/payment-gate.js +47 -0
  53. package/dist/payment-gate.js.map +1 -0
  54. package/dist/runtime.d.ts +13 -1
  55. package/dist/runtime.d.ts.map +1 -1
  56. package/dist/runtime.js +35 -10
  57. package/dist/runtime.js.map +1 -1
  58. package/dist/session-wire.d.ts +69 -0
  59. package/dist/session-wire.d.ts.map +1 -0
  60. package/dist/session-wire.js +170 -0
  61. package/dist/session-wire.js.map +1 -0
  62. package/dist/skill-handler.d.ts +26 -1
  63. package/dist/skill-handler.d.ts.map +1 -1
  64. package/dist/skill-handler.js.map +1 -1
  65. package/dist/standard/caller.d.ts +86 -0
  66. package/dist/standard/caller.d.ts.map +1 -0
  67. package/dist/standard/caller.js +159 -0
  68. package/dist/standard/caller.js.map +1 -0
  69. package/dist/standard/client.d.ts +50 -0
  70. package/dist/standard/client.d.ts.map +1 -0
  71. package/dist/standard/client.js +86 -0
  72. package/dist/standard/client.js.map +1 -0
  73. package/dist/standard/delegated.d.ts +121 -0
  74. package/dist/standard/delegated.d.ts.map +1 -0
  75. package/dist/standard/delegated.js +170 -0
  76. package/dist/standard/delegated.js.map +1 -0
  77. package/dist/standard/errors.d.ts +31 -0
  78. package/dist/standard/errors.d.ts.map +1 -0
  79. package/dist/standard/errors.js +75 -0
  80. package/dist/standard/errors.js.map +1 -0
  81. package/dist/standard/from-agent.d.ts +38 -0
  82. package/dist/standard/from-agent.d.ts.map +1 -0
  83. package/dist/standard/from-agent.js +133 -0
  84. package/dist/standard/from-agent.js.map +1 -0
  85. package/dist/standard/index.d.ts +9 -0
  86. package/dist/standard/index.d.ts.map +1 -0
  87. package/dist/standard/index.js +13 -0
  88. package/dist/standard/index.js.map +1 -0
  89. package/dist/standard/mount.d.ts +91 -0
  90. package/dist/standard/mount.d.ts.map +1 -0
  91. package/dist/standard/mount.js +181 -0
  92. package/dist/standard/mount.js.map +1 -0
  93. package/dist/standard/server.d.ts +109 -0
  94. package/dist/standard/server.d.ts.map +1 -0
  95. package/dist/standard/server.js +459 -0
  96. package/dist/standard/server.js.map +1 -0
  97. package/dist/standard/types.d.ts +186 -0
  98. package/dist/standard/types.d.ts.map +1 -0
  99. package/dist/standard/types.js +14 -0
  100. package/dist/standard/types.js.map +1 -0
  101. package/dist/subject-ask.d.ts +96 -0
  102. package/dist/subject-ask.d.ts.map +1 -0
  103. package/dist/subject-ask.js +45 -0
  104. package/dist/subject-ask.js.map +1 -0
  105. package/dist/subject-hop.d.ts +75 -0
  106. package/dist/subject-hop.d.ts.map +1 -0
  107. package/dist/subject-hop.js +170 -0
  108. package/dist/subject-hop.js.map +1 -0
  109. package/dist/task-store.d.ts +9 -3
  110. package/dist/task-store.d.ts.map +1 -1
  111. package/dist/task-store.js +12 -6
  112. package/dist/task-store.js.map +1 -1
  113. package/dist/wire-verify.d.ts +35 -0
  114. package/dist/wire-verify.d.ts.map +1 -0
  115. package/dist/wire-verify.js +51 -0
  116. package/dist/wire-verify.js.map +1 -0
  117. package/package.json +20 -6
  118. package/dist/jsonrpc.d.ts +0 -25
  119. package/dist/jsonrpc.d.ts.map +0 -1
  120. package/dist/jsonrpc.js +0 -52
  121. package/dist/jsonrpc.js.map +0 -1
@@ -0,0 +1,459 @@
1
+ // THE STANDARD A2A 1.0 SERVER — spec 372 S1. JSON-RPC 2.0 over POST, SSE for the streaming methods, the
2
+ // executor behind a port that knows nothing of either.
3
+ //
4
+ // A DOOR, NEVER A GRANT. This surface exists so every A2A 1.0 client (and the official TCK) can reach an
5
+ // agent here. Who is asking is the edge's admission (`principal`, ADR-0057) and what the ask may DO is
6
+ // decided behind the executor by the same verifier a Home turn meets — nothing that arrives on this wire
7
+ // is a mandate. The delegation profile (`../agent.ts`, spec 269) stays beside it: a task there exists only
8
+ // for a verified grant; a task here is a conversation with an admitted principal.
9
+ //
10
+ // Fetch-shaped (`handle(Request) → Response`) so one implementation serves Node (the TCK's SUT), workerd
11
+ // (the Worker) and tests. Task + push stores are PORTS with in-memory defaults (serving-plane projections,
12
+ // ADR-0055: a wipe is a rebuild).
13
+ import { A2A_ERROR, A2aError, JSONRPC_ERROR, toJsonRpcError } from './errors.js';
14
+ import { TERMINAL_STATES, } from './types.js';
15
+ // ── In-memory stores ───────────────────────────────────────────────────────────────────────────────────
16
+ export function createMemoryTaskStore() {
17
+ const m = new Map();
18
+ return {
19
+ async get(id) { return m.get(id) ?? null; },
20
+ async put(t) { m.set(t.id, structuredClone(t)); },
21
+ async all() { return [...m.values()].map((t) => structuredClone(t)); },
22
+ };
23
+ }
24
+ export function createMemoryPushStore() {
25
+ const m = new Map();
26
+ return {
27
+ async put(c) { if (!m.has(c.taskId))
28
+ m.set(c.taskId, new Map()); m.get(c.taskId).set(c.id, { ...c }); },
29
+ async get(taskId, id) { return m.get(taskId)?.get(id) ?? null; },
30
+ async list(taskId) { return [...(m.get(taskId)?.values() ?? [])]; },
31
+ async delete(taskId, id) { return m.get(taskId)?.delete(id) ?? false; },
32
+ };
33
+ }
34
+ const snakeToCamel = (k) => k.replace(/_([a-z])/g, (_m, c) => c.toUpperCase());
35
+ /** proto-JSON accepts both `historyLength` and `history_length`; a server must too. */
36
+ function normalize(p) {
37
+ if (!p || typeof p !== 'object' || Array.isArray(p))
38
+ return {};
39
+ const out = {};
40
+ for (const [k, v] of Object.entries(p))
41
+ out[snakeToCamel(k)] = v;
42
+ return out;
43
+ }
44
+ const asInt = (v) => (v === undefined || v === null || v === '' ? undefined : Number.isFinite(Number(v)) ? Number(v) : undefined);
45
+ const uuid = () => crypto.randomUUID();
46
+ const toMessage = (m, role, contextId, taskId) => m === undefined ? undefined : Array.isArray(m) ? { messageId: uuid(), role, parts: m, contextId, taskId } : { ...m, contextId, taskId, role: m.role ?? role, messageId: m.messageId ?? uuid() };
47
+ function withHistory(task, historyLength) {
48
+ if (historyLength === undefined)
49
+ return task;
50
+ const history = task.history ?? [];
51
+ return { ...task, history: historyLength <= 0 ? [] : history.slice(Math.max(0, history.length - historyLength)) };
52
+ }
53
+ const NOT_JSON = (req) => !/^application\/json\b/i.test(req.headers.get('content-type') ?? '');
54
+ // ── The server ────────────────────────────────────────────────────────────────────────────────────────
55
+ export function createStandardA2aServer(config) {
56
+ const tasks = config.tasks ?? createMemoryTaskStore();
57
+ const push = config.push ?? createMemoryPushStore();
58
+ const versions = new Set(config.versions ?? ['1.0']);
59
+ const doFetch = config.fetch ?? globalThis.fetch.bind(globalThis);
60
+ const now = config.now ?? (() => Date.now());
61
+ const outputModes = config.card.defaultOutputModes ?? [];
62
+ const runs = new Map();
63
+ const stamp = () => new Date(now()).toISOString();
64
+ async function fanOut(task, event) {
65
+ await tasks.put(task);
66
+ for (const s of runs.get(task.id)?.subscribers ?? []) {
67
+ try {
68
+ s(event);
69
+ }
70
+ catch { /* a closed stream */ }
71
+ }
72
+ if ('statusUpdate' in event || 'artifactUpdate' in event) {
73
+ // PUSH-DELIVER (A2A §4.3.3): the StreamResponse event, to every config, fire and forget — a webhook
74
+ // never holds the run. The config's token rides as a bearer (and as the notification header);
75
+ // an explicit `authentication` scheme wins over the token.
76
+ for (const cfg of await push.list(task.id)) {
77
+ const auth = cfg.authentication?.credentials ? `${cfg.authentication.scheme || 'Bearer'} ${cfg.authentication.credentials}` : cfg.token ? `Bearer ${cfg.token}` : null;
78
+ void doFetch(cfg.url, { method: 'POST', headers: { 'content-type': 'application/json', ...(auth ? { authorization: auth } : {}), ...(cfg.token ? { 'X-A2A-Notification-Token': cfg.token } : {}) }, body: JSON.stringify(event) }).catch(() => undefined);
79
+ }
80
+ }
81
+ }
82
+ function contextFor(task, message, principal, streaming, onReply, headers) {
83
+ let moved = false;
84
+ const setStatus = async (state, m) => {
85
+ moved = true;
86
+ const message = toMessage(m, 'ROLE_AGENT', task.contextId, task.id);
87
+ task.status = { state, timestamp: stamp(), ...(message ? { message } : {}) };
88
+ if (message)
89
+ task.history = [...(task.history ?? []), message];
90
+ await fanOut(task, { statusUpdate: { taskId: task.id, contextId: task.contextId, status: task.status } });
91
+ };
92
+ return {
93
+ message, task, principal, streaming, headers,
94
+ working: (m) => setStatus('TASK_STATE_WORKING', m),
95
+ inputRequired: (m) => setStatus('TASK_STATE_INPUT_REQUIRED', m),
96
+ authRequired: (m) => setStatus('TASK_STATE_AUTH_REQUIRED', m),
97
+ complete: (m) => setStatus('TASK_STATE_COMPLETED', m),
98
+ fail: (m) => setStatus('TASK_STATE_FAILED', m),
99
+ reject: (m) => setStatus('TASK_STATE_REJECTED', m),
100
+ async artifact(a, opts) {
101
+ moved = true;
102
+ const artifactId = a.artifactId ?? uuid();
103
+ const list = task.artifacts ?? (task.artifacts = []);
104
+ const existing = list.find((x) => x.artifactId === artifactId);
105
+ const artifact = { ...a, artifactId };
106
+ if (existing && opts?.append)
107
+ existing.parts = [...existing.parts, ...a.parts];
108
+ else if (existing)
109
+ Object.assign(existing, artifact);
110
+ else
111
+ list.push(artifact);
112
+ await fanOut(task, { artifactUpdate: { taskId: task.id, contextId: task.contextId, artifact, ...(opts?.append !== undefined ? { append: opts.append } : {}), ...(opts?.lastChunk !== undefined ? { lastChunk: opts.lastChunk } : {}) } });
113
+ return artifact;
114
+ },
115
+ async reply(parts) {
116
+ if (moved)
117
+ throw new Error('reply(): a message-only reply must come before any task event');
118
+ const m = Array.isArray(parts) ? { messageId: uuid(), role: 'ROLE_AGENT', parts, contextId: task.contextId } : { ...parts, role: parts.role ?? 'ROLE_AGENT', messageId: parts.messageId ?? uuid(), contextId: task.contextId };
119
+ onReply(m);
120
+ },
121
+ };
122
+ }
123
+ /** Create or continue the task a message names, then run the executor. Returns the run and the task. */
124
+ async function start(message, cfg, principal, streaming, subscriber, headers = new Headers()) {
125
+ if (!message || typeof message !== 'object' || !Array.isArray(message.parts))
126
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, 'message.parts required');
127
+ if (!message.messageId)
128
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, 'message.messageId required');
129
+ // Content negotiation is on OUTPUT (what the client will accept vs what the card offers) — the
130
+ // reference SDK's rule, and what the TCK exercises. A part's own media type is the executor's to
131
+ // refuse: a text agent handed an image says so in its reply, not at the door.
132
+ const accepted = cfg?.acceptedOutputModes?.filter((m) => typeof m === 'string' && m) ?? [];
133
+ if (accepted.length && outputModes.length && !accepted.some((m) => m === '*/*' || outputModes.includes(m) || outputModes.includes('*/*'))) {
134
+ throw new A2aError(A2A_ERROR.ContentTypeNotSupported, undefined, { acceptedOutputModes: accepted.join(','), supported: outputModes.join(',') });
135
+ }
136
+ let task;
137
+ if (message.taskId) {
138
+ const t = await tasks.get(message.taskId);
139
+ if (!t || !(await mayI(t, principal, 'continue')))
140
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId: message.taskId });
141
+ if (TERMINAL_STATES.has(t.status.state))
142
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, `task ${t.id} is ${t.status.state}; a terminal task takes no further message`, { taskId: t.id, state: t.status.state });
143
+ if (message.contextId && message.contextId !== t.contextId)
144
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, `message.contextId does not match task ${t.id}'s context`, { taskId: t.id, contextId: t.contextId });
145
+ if (runs.has(t.id))
146
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, `task ${t.id} is still running`, { taskId: t.id });
147
+ task = t;
148
+ }
149
+ else {
150
+ task = { id: uuid(), contextId: message.contextId || uuid(), status: { state: 'TASK_STATE_SUBMITTED', timestamp: stamp() }, history: [], artifacts: [] };
151
+ }
152
+ const userMessage = { ...message, role: message.role ?? 'ROLE_USER', contextId: task.contextId, taskId: task.id };
153
+ task.history = [...(task.history ?? []), userMessage];
154
+ task.status = { state: 'TASK_STATE_SUBMITTED', timestamp: stamp() };
155
+ if (cfg?.taskPushNotificationConfig?.url) {
156
+ if (!config.card.capabilities.pushNotifications)
157
+ throw new A2aError(A2A_ERROR.PushNotificationNotSupported);
158
+ const c = cfg.taskPushNotificationConfig;
159
+ await push.put({ ...c, id: c.id || uuid(), taskId: task.id });
160
+ }
161
+ await tasks.put(task);
162
+ const snapshot = structuredClone(task);
163
+ let replied = null;
164
+ let settle;
165
+ const done = new Promise((r) => { settle = r; });
166
+ // A streaming caller's subscriber is registered BEFORE the executor launches: the first `working()`
167
+ // lands on the stream, never in the gap before it attached.
168
+ const run = { subscribers: new Set(subscriber ? [subscriber] : []), done, settle };
169
+ runs.set(task.id, run);
170
+ const ctx = contextFor(task, userMessage, principal, streaming, (m) => { replied = m; }, headers);
171
+ void (async () => {
172
+ try {
173
+ await config.executor.execute(ctx);
174
+ // An executor that returns without moving the task has answered nothing: the task fails rather
175
+ // than sitting SUBMITTED forever (InvalidAgentResponse in spirit; the state says it).
176
+ if (!replied && task.status.state === 'TASK_STATE_SUBMITTED')
177
+ await ctx.fail([{ text: 'the agent produced no response' }]);
178
+ }
179
+ catch (e) {
180
+ if (!replied && !TERMINAL_STATES.has(task.status.state))
181
+ await ctx.fail([{ text: e instanceof Error ? e.message : String(e) }]).catch(() => undefined);
182
+ }
183
+ finally {
184
+ runs.delete(task.id);
185
+ settle();
186
+ }
187
+ })();
188
+ return { task, snapshot, run, reply: () => replied };
189
+ }
190
+ // ── Methods ─────────────────────────────────────────────────────────────────────────────────────────
191
+ const mayI = async (task, principal, op) => config.canSeeTask ? (await config.canSeeTask(task, principal, op)) === true : true;
192
+ async function sendMessage(p, principal, headers = new Headers()) {
193
+ const message = p.message;
194
+ const cfg = normalize(p.configuration);
195
+ if (config.beforeSend) {
196
+ const answered = await config.beforeSend({ message, configuration: cfg }, principal);
197
+ if (answered)
198
+ return answered;
199
+ }
200
+ const { task, run, reply } = await start(message, cfg, principal, false, undefined, headers);
201
+ if (!cfg.returnImmediately)
202
+ await run.done;
203
+ const m = reply();
204
+ if (m)
205
+ return { message: m };
206
+ const fresh = (await tasks.get(task.id)) ?? task;
207
+ return { task: withHistory(fresh, asInt(cfg.historyLength)) };
208
+ }
209
+ async function getTask(p, principal) {
210
+ const id = String(p.id ?? '');
211
+ const t = id ? await tasks.get(id) : null;
212
+ // Not a party ⇒ the same answer as not existing (see `canSeeTask`).
213
+ if (!t || !(await mayI(t, principal, 'get')))
214
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId: id });
215
+ return withHistory(t, asInt(p.historyLength));
216
+ }
217
+ async function listTasks(p, principal) {
218
+ const contextId = p.contextId ? String(p.contextId) : undefined;
219
+ const status = p.status ? String(p.status) : undefined;
220
+ const after = p.statusTimestampAfter ? Date.parse(String(p.statusTimestampAfter)) : undefined;
221
+ const pageSize = Math.max(1, Math.min(asInt(p.pageSize) ?? 50, 1000));
222
+ const offset = p.pageToken ? Math.max(0, parseInt(String(p.pageToken), 10) || 0) : 0;
223
+ const includeArtifacts = p.includeArtifacts === true;
224
+ const historyLength = asInt(p.historyLength);
225
+ let all = (await tasks.all()).sort((a, b) => Date.parse(b.status.timestamp ?? '0') - Date.parse(a.status.timestamp ?? '0'));
226
+ if (config.canSeeTask) {
227
+ const visible = await Promise.all(all.map(async (t) => ((await mayI(t, principal, 'list')) ? t : null)));
228
+ all = visible.filter((t) => t !== null);
229
+ }
230
+ if (contextId)
231
+ all = all.filter((t) => t.contextId === contextId);
232
+ if (status)
233
+ all = all.filter((t) => t.status.state === status);
234
+ if (after !== undefined && Number.isFinite(after))
235
+ all = all.filter((t) => Date.parse(t.status.timestamp ?? '0') > after);
236
+ const page = all.slice(offset, offset + pageSize).map((t) => {
237
+ const h = withHistory(t, historyLength);
238
+ return includeArtifacts ? h : { ...h, artifacts: [] };
239
+ });
240
+ const next = offset + pageSize < all.length ? String(offset + pageSize) : '';
241
+ return { tasks: page, nextPageToken: next, pageSize, totalSize: all.length };
242
+ }
243
+ async function cancelTask(p, principal) {
244
+ const id = String(p.id ?? '');
245
+ const t = id ? await tasks.get(id) : null;
246
+ if (!t || !(await mayI(t, principal, 'cancel')))
247
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId: id });
248
+ if (TERMINAL_STATES.has(t.status.state))
249
+ throw new A2aError(A2A_ERROR.TaskNotCancelable, undefined, { taskId: id, state: t.status.state });
250
+ if (config.onCancel) {
251
+ const done = await config.onCancel(t, principal);
252
+ if (done)
253
+ return done;
254
+ }
255
+ await config.executor.cancel?.(t).catch(() => undefined);
256
+ t.status = { state: 'TASK_STATE_CANCELED', timestamp: stamp() };
257
+ await fanOut(t, { statusUpdate: { taskId: t.id, contextId: t.contextId, status: t.status } });
258
+ runs.get(t.id)?.settle();
259
+ return t;
260
+ }
261
+ async function pushCreate(p, principal) {
262
+ if (!config.card.capabilities.pushNotifications)
263
+ throw new A2aError(A2A_ERROR.PushNotificationNotSupported);
264
+ const taskId = String(p.taskId ?? '');
265
+ const t = taskId ? await tasks.get(taskId) : null;
266
+ if (!t || !(await mayI(t, principal, 'push')))
267
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId });
268
+ const nested = normalize(p.pushNotificationConfig ?? p.config);
269
+ const url = String(p.url ?? nested.url ?? '');
270
+ if (!url)
271
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, 'url required');
272
+ const cfg = { id: String(p.id ?? nested.id ?? '') || uuid(), taskId, url, ...(p.token ?? nested.token ? { token: String(p.token ?? nested.token) } : {}), ...((p.authentication ?? nested.authentication) ? { authentication: (p.authentication ?? nested.authentication) } : {}) };
273
+ await push.put(cfg);
274
+ return cfg;
275
+ }
276
+ async function pushGet(p, principal) {
277
+ if (!config.card.capabilities.pushNotifications)
278
+ throw new A2aError(A2A_ERROR.PushNotificationNotSupported);
279
+ const taskId = String(p.taskId ?? '');
280
+ const id = String(p.id ?? '');
281
+ const t = taskId ? await tasks.get(taskId) : null;
282
+ if (!t || !(await mayI(t, principal, 'push')))
283
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId });
284
+ const c = await push.get(taskId, id);
285
+ if (!c)
286
+ throw new A2aError(JSONRPC_ERROR.InvalidParams, `no push notification config ${id} on task ${taskId}`, { taskId, id });
287
+ return c;
288
+ }
289
+ async function pushList(p, principal) {
290
+ if (!config.card.capabilities.pushNotifications)
291
+ throw new A2aError(A2A_ERROR.PushNotificationNotSupported);
292
+ const taskId = String(p.taskId ?? '');
293
+ const t = taskId ? await tasks.get(taskId) : null;
294
+ if (!t || !(await mayI(t, principal, 'push')))
295
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId });
296
+ return { configs: await push.list(taskId), nextPageToken: '' };
297
+ }
298
+ async function pushDelete(p, principal) {
299
+ if (!config.card.capabilities.pushNotifications)
300
+ throw new A2aError(A2A_ERROR.PushNotificationNotSupported);
301
+ const taskId = String(p.taskId ?? '');
302
+ const id = String(p.id ?? '');
303
+ const t = taskId ? await tasks.get(taskId) : null;
304
+ if (!t || !(await mayI(t, principal, 'push')))
305
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId });
306
+ await push.delete(taskId, id); // idempotent (PUSH-DEL-002): deleting what is already gone is not an error
307
+ return {};
308
+ }
309
+ // ── Streaming ───────────────────────────────────────────────────────────────────────────────────────
310
+ function sse(id, attach) {
311
+ const enc = new TextEncoder();
312
+ let closed = false;
313
+ const stream = new ReadableStream({
314
+ async start(controller) {
315
+ const send = (result) => { if (closed)
316
+ return; controller.enqueue(enc.encode(`data: ${JSON.stringify({ jsonrpc: '2.0', id, result })}\n\n`)); };
317
+ const close = () => { if (closed)
318
+ return; closed = true; try {
319
+ controller.close();
320
+ }
321
+ catch { /* already closed */ } };
322
+ try {
323
+ await attach(send, close);
324
+ }
325
+ catch (e) {
326
+ if (!closed) {
327
+ controller.enqueue(enc.encode(`data: ${JSON.stringify({ jsonrpc: '2.0', id, error: toJsonRpcError(e) })}\n\n`));
328
+ close();
329
+ }
330
+ }
331
+ },
332
+ cancel() { closed = true; },
333
+ });
334
+ return new Response(stream, { status: 200, headers: { 'content-type': 'text/event-stream', 'cache-control': 'no-cache', connection: 'keep-alive' } });
335
+ }
336
+ /** Subscribe `send` to a run; resolves when the task settles (terminal or the executor returned). */
337
+ function follow(run, task, send, close) {
338
+ const sub = (ev) => { send(ev); if ('statusUpdate' in ev && TERMINAL_STATES.has(ev.statusUpdate.status.state))
339
+ close(); };
340
+ run.subscribers.add(sub);
341
+ return run.done.then(() => { run.subscribers.delete(sub); close(); });
342
+ }
343
+ async function sendStreamingMessage(id, p, principal, headers = new Headers()) {
344
+ if (!config.card.capabilities.streaming)
345
+ throw new A2aError(A2A_ERROR.UnsupportedOperation, 'streaming is not supported');
346
+ // Validate + create BEFORE the stream opens so a bad request is a JSON-RPC error, not an SSE line.
347
+ // Events fired before the stream attaches are buffered by the pre-registered subscriber.
348
+ const buffered = [];
349
+ let sink = (e) => { buffered.push(e); };
350
+ const { snapshot, run, reply } = await start(p.message, normalize(p.configuration), principal, true, (e) => sink(e), headers);
351
+ return sse(id, async (send, close) => {
352
+ // A message-only reply that already landed: the message, and nothing else.
353
+ const first = reply();
354
+ if (first) {
355
+ send({ message: first });
356
+ close();
357
+ return;
358
+ }
359
+ send({ task: snapshot });
360
+ const live = (ev) => { send(ev); if ('statusUpdate' in ev && TERMINAL_STATES.has(ev.statusUpdate.status.state))
361
+ close(); };
362
+ for (const ev of buffered.splice(0))
363
+ live(ev);
364
+ sink = live;
365
+ await run.done;
366
+ const late = reply();
367
+ if (late)
368
+ send({ message: late });
369
+ close();
370
+ });
371
+ }
372
+ async function subscribeToTask(id, p, principal) {
373
+ if (!config.card.capabilities.streaming)
374
+ throw new A2aError(A2A_ERROR.UnsupportedOperation, 'streaming is not supported');
375
+ const taskId = String(p.id ?? '');
376
+ const t = taskId ? await tasks.get(taskId) : null;
377
+ if (!t || !(await mayI(t, principal, 'get')))
378
+ throw new A2aError(A2A_ERROR.TaskNotFound, undefined, { taskId });
379
+ if (TERMINAL_STATES.has(t.status.state))
380
+ throw new A2aError(A2A_ERROR.UnsupportedOperation, `task ${taskId} is ${t.status.state}; nothing more will be streamed`, { taskId, state: t.status.state });
381
+ return sse(id, async (send, close) => {
382
+ send({ task: t });
383
+ const run = runs.get(taskId);
384
+ if (run) {
385
+ await follow(run, t, send, close);
386
+ close();
387
+ return;
388
+ }
389
+ // Idle (input-required, auth-required): stay open for a bounded time for a later run to attach.
390
+ await new Promise((r) => setTimeout(r, config.idleSubscriptionMs ?? 60_000));
391
+ close();
392
+ });
393
+ }
394
+ // ── Dispatch ────────────────────────────────────────────────────────────────────────────────────────
395
+ const json = (body, status = 200, headers = {}) => new Response(JSON.stringify(body), { status, headers: { 'content-type': 'application/json', ...headers } });
396
+ const rpcError = (id, e, status = 200) => json({ jsonrpc: '2.0', id, error: toJsonRpcError(e) }, status);
397
+ async function handle(request) {
398
+ if (request.method !== 'POST')
399
+ return json({ jsonrpc: '2.0', id: null, error: { code: JSONRPC_ERROR.InvalidRequest, message: 'POST a JSON-RPC 2.0 request' } }, 405);
400
+ const url = new URL(request.url);
401
+ const version = (request.headers.get('a2a-version') ?? url.searchParams.get('A2A-Version') ?? '1.0').trim();
402
+ if (!versions.has(version))
403
+ return rpcError(null, new A2aError(A2A_ERROR.VersionNotSupported, undefined, { version, supported: [...versions].join(',') }), 400);
404
+ if (config.principal) {
405
+ const who = await config.principal(request).catch(() => null);
406
+ if (!who)
407
+ return json({ jsonrpc: '2.0', id: null, error: { code: JSONRPC_ERROR.InvalidRequest, message: 'Unauthorized: this agent admits only an authenticated principal' } }, 401, { 'www-authenticate': 'Bearer' });
408
+ return dispatch(request, who);
409
+ }
410
+ return dispatch(request, null);
411
+ }
412
+ async function dispatch(request, principal) {
413
+ if (NOT_JSON(request))
414
+ return rpcError(null, new A2aError(A2A_ERROR.ContentTypeNotSupported, 'Content-Type must be application/json', { contentType: request.headers.get('content-type') ?? '' }), 415);
415
+ let req;
416
+ try {
417
+ req = (await request.json());
418
+ }
419
+ catch {
420
+ return rpcError(null, new A2aError(JSONRPC_ERROR.ParseError), 400);
421
+ }
422
+ if (!req || typeof req !== 'object' || Array.isArray(req) || req.jsonrpc !== '2.0' || typeof req.method !== 'string')
423
+ return rpcError(req?.id ?? null, new A2aError(JSONRPC_ERROR.InvalidRequest), 400);
424
+ const id = req.id ?? null;
425
+ const p = normalize(req.params);
426
+ try {
427
+ switch (req.method) {
428
+ case 'SendMessage': return json({ jsonrpc: '2.0', id, result: await sendMessage(p, principal, request.headers) });
429
+ case 'SendStreamingMessage': return await sendStreamingMessage(id, p, principal, request.headers);
430
+ case 'GetTask': return json({ jsonrpc: '2.0', id, result: await getTask(p, principal) });
431
+ case 'ListTasks': return json({ jsonrpc: '2.0', id, result: await listTasks(p, principal) });
432
+ case 'CancelTask': return json({ jsonrpc: '2.0', id, result: await cancelTask(p, principal) });
433
+ case 'SubscribeToTask': return await subscribeToTask(id, p, principal);
434
+ case 'CreateTaskPushNotificationConfig': return json({ jsonrpc: '2.0', id, result: await pushCreate(p, principal) });
435
+ case 'GetTaskPushNotificationConfig': return json({ jsonrpc: '2.0', id, result: await pushGet(p, principal) });
436
+ case 'ListTaskPushNotificationConfigs': return json({ jsonrpc: '2.0', id, result: await pushList(p, principal) });
437
+ case 'DeleteTaskPushNotificationConfig': return json({ jsonrpc: '2.0', id, result: await pushDelete(p, principal) });
438
+ case 'GetExtendedAgentCard': {
439
+ if (!config.card.capabilities.extendedAgentCard)
440
+ throw new A2aError(A2A_ERROR.UnsupportedOperation, 'this agent serves no extended card');
441
+ if (!config.extendedCard)
442
+ throw new A2aError(A2A_ERROR.ExtendedAgentCardNotConfigured);
443
+ return json({ jsonrpc: '2.0', id, result: config.extendedCard });
444
+ }
445
+ default: {
446
+ const ext = config.methods?.[req.method];
447
+ if (!ext)
448
+ return rpcError(id, new A2aError(JSONRPC_ERROR.MethodNotFound, undefined, { method: req.method }));
449
+ return json({ jsonrpc: '2.0', id, result: await ext(p, principal) });
450
+ }
451
+ }
452
+ }
453
+ catch (e) {
454
+ return rpcError(id, e);
455
+ }
456
+ }
457
+ return { handle, card: () => config.card };
458
+ }
459
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/standard/server.ts"],"names":[],"mappings":"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"}