@plurnk/plurnk-a2a 1.9.0

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 (53) hide show
  1. package/.env.defaults +30 -0
  2. package/README.md +69 -0
  3. package/SPEC.md +199 -0
  4. package/dist/A2a.d.ts +12 -0
  5. package/dist/A2a.d.ts.map +1 -0
  6. package/dist/A2a.js +397 -0
  7. package/dist/A2a.js.map +1 -0
  8. package/dist/A2aMessage.d.ts +10 -0
  9. package/dist/A2aMessage.d.ts.map +1 -0
  10. package/dist/A2aMessage.js +28 -0
  11. package/dist/A2aMessage.js.map +1 -0
  12. package/dist/A2aProjection.d.ts +25 -0
  13. package/dist/A2aProjection.d.ts.map +1 -0
  14. package/dist/A2aProjection.js +183 -0
  15. package/dist/A2aProjection.js.map +1 -0
  16. package/dist/Functionality.d.ts +77 -0
  17. package/dist/Functionality.d.ts.map +1 -0
  18. package/dist/Functionality.js +247 -0
  19. package/dist/Functionality.js.map +1 -0
  20. package/dist/HttpJsonClient.d.ts +21 -0
  21. package/dist/HttpJsonClient.d.ts.map +1 -0
  22. package/dist/HttpJsonClient.js +41 -0
  23. package/dist/HttpJsonClient.js.map +1 -0
  24. package/dist/Module.d.ts +32 -0
  25. package/dist/Module.d.ts.map +1 -0
  26. package/dist/Module.js +91 -0
  27. package/dist/Module.js.map +1 -0
  28. package/dist/OutboundModule.d.ts +14 -0
  29. package/dist/OutboundModule.d.ts.map +1 -0
  30. package/dist/OutboundModule.js +24 -0
  31. package/dist/OutboundModule.js.map +1 -0
  32. package/dist/PlurnkAgentExecutor.d.ts +11 -0
  33. package/dist/PlurnkAgentExecutor.d.ts.map +1 -0
  34. package/dist/PlurnkAgentExecutor.js +282 -0
  35. package/dist/PlurnkAgentExecutor.js.map +1 -0
  36. package/dist/PlurnkTaskStore.d.ts +19 -0
  37. package/dist/PlurnkTaskStore.d.ts.map +1 -0
  38. package/dist/PlurnkTaskStore.js +271 -0
  39. package/dist/PlurnkTaskStore.js.map +1 -0
  40. package/dist/WorkspaceBinding.d.ts +13 -0
  41. package/dist/WorkspaceBinding.d.ts.map +1 -0
  42. package/dist/WorkspaceBinding.js +40 -0
  43. package/dist/WorkspaceBinding.js.map +1 -0
  44. package/dist/config.d.ts +22 -0
  45. package/dist/config.d.ts.map +1 -0
  46. package/dist/config.js +332 -0
  47. package/dist/config.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +9 -0
  51. package/dist/index.js.map +1 -0
  52. package/docs/a2a.md +23 -0
  53. package/package.json +66 -0
@@ -0,0 +1,183 @@
1
+ import { AgentCard, Artifact, Message, Task, taskStateToJSON, } from "@a2a-js/sdk";
2
+ const serialized = (codec, value) => `${JSON.stringify(codec.toJSON(value), null, 2)}\n`;
3
+ /** Model-oriented projections of canonical A2A v1 resources. */
4
+ export default class A2aProjection {
5
+ static taskPath(taskId) {
6
+ return `/tasks/${encodeURIComponent(taskId)}`;
7
+ }
8
+ static messagePath(messageId) {
9
+ return `/messages/${encodeURIComponent(messageId)}`;
10
+ }
11
+ static artifactPath(taskId, artifactId) {
12
+ return `${A2aProjection.taskPath(taskId)}/artifacts/${encodeURIComponent(artifactId)}`;
13
+ }
14
+ static taskIdentity(pathname) {
15
+ const match = /^\/tasks\/([^/]+)$/.exec(pathname);
16
+ if (match === null)
17
+ return null;
18
+ try {
19
+ const taskId = decodeURIComponent(match[1]);
20
+ return A2aProjection.taskPath(taskId) === pathname ? taskId : null;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ static artifactIdentity(pathname) {
27
+ const match = /^\/tasks\/([^/]+)\/artifacts\/([^/]+)$/.exec(pathname);
28
+ if (match === null)
29
+ return null;
30
+ try {
31
+ const taskId = decodeURIComponent(match[1]);
32
+ const artifactId = decodeURIComponent(match[2]);
33
+ return A2aProjection.artifactPath(taskId, artifactId) === pathname
34
+ ? { taskId, artifactId }
35
+ : null;
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ static taskSeed(task) {
42
+ return {
43
+ channels: {
44
+ body: { content: "", mimetype: "text/markdown", state: "active" },
45
+ json: { content: "", mimetype: "application/json", state: "active" },
46
+ },
47
+ attributes: {
48
+ kind: "task",
49
+ taskId: task.id,
50
+ contextId: task.contextId,
51
+ },
52
+ };
53
+ }
54
+ static taskEntry(task, authority) {
55
+ const content = A2aProjection.taskContent(task, authority);
56
+ return {
57
+ channels: {
58
+ body: { content: content.body, mimetype: "text/markdown" },
59
+ json: { content: content.json, mimetype: "application/json" },
60
+ },
61
+ attributes: {
62
+ kind: "task",
63
+ taskId: task.id,
64
+ contextId: task.contextId,
65
+ },
66
+ };
67
+ }
68
+ static taskContent(task, authority) {
69
+ const state = taskStateToJSON(task.status?.state ?? 0)
70
+ .replace(/^TASK_STATE_/, "")
71
+ .toLowerCase()
72
+ .replaceAll("_", "-");
73
+ const statusMessage = task.status?.message === undefined
74
+ ? []
75
+ : ["message:", A2aProjection.#parts(task.status.message.parts)];
76
+ const artifacts = task.artifacts.length === 0
77
+ ? "none"
78
+ : task.artifacts.map((artifact) => {
79
+ const label = artifact.name.length > 0 ? artifact.name : artifact.artifactId;
80
+ return `- ${label}: a2a://${authority}${A2aProjection.artifactPath(task.id, artifact.artifactId)}`;
81
+ }).join("\n");
82
+ return {
83
+ body: [
84
+ `state: ${state}`,
85
+ `taskId: ${task.id}`,
86
+ `contextId: ${task.contextId}`,
87
+ ...statusMessage,
88
+ "artifacts:",
89
+ artifacts,
90
+ "",
91
+ ].join("\n"),
92
+ json: serialized(Task, task),
93
+ };
94
+ }
95
+ static messageEntry(message) {
96
+ return {
97
+ channels: {
98
+ body: {
99
+ content: [
100
+ `messageId: ${message.messageId}`,
101
+ `contextId: ${message.contextId}`,
102
+ "",
103
+ A2aProjection.#parts(message.parts),
104
+ ].join("\n"),
105
+ mimetype: "text/markdown",
106
+ },
107
+ json: { content: serialized(Message, message), mimetype: "application/json" },
108
+ },
109
+ attributes: {
110
+ kind: "message",
111
+ messageId: message.messageId,
112
+ contextId: message.contextId,
113
+ },
114
+ };
115
+ }
116
+ static artifactEntry(task, artifact) {
117
+ return {
118
+ channels: {
119
+ body: {
120
+ content: [
121
+ `artifactId: ${artifact.artifactId}`,
122
+ `taskId: ${task.id}`,
123
+ `contextId: ${task.contextId}`,
124
+ ...(artifact.name.length === 0 ? [] : [`name: ${artifact.name}`]),
125
+ ...(artifact.description.length === 0 ? [] : [`description: ${artifact.description}`]),
126
+ "",
127
+ A2aProjection.#parts(artifact.parts),
128
+ ].join("\n"),
129
+ mimetype: "text/markdown",
130
+ },
131
+ json: { content: serialized(Artifact, artifact), mimetype: "application/json" },
132
+ },
133
+ attributes: {
134
+ kind: "artifact",
135
+ taskId: task.id,
136
+ contextId: task.contextId,
137
+ artifactId: artifact.artifactId,
138
+ },
139
+ };
140
+ }
141
+ static agentCardEntry(card) {
142
+ const skills = card.skills.length === 0
143
+ ? "none"
144
+ : card.skills.map((skill) => `- ${skill.id}: ${skill.description}`).join("\n");
145
+ return {
146
+ channels: {
147
+ body: {
148
+ content: [
149
+ `# ${card.name}`,
150
+ "",
151
+ card.description,
152
+ "",
153
+ "skills:",
154
+ skills,
155
+ "",
156
+ ].join("\n"),
157
+ mimetype: "text/markdown",
158
+ },
159
+ json: { content: serialized(AgentCard, card), mimetype: "application/json" },
160
+ },
161
+ attributes: { kind: "agent-card" },
162
+ };
163
+ }
164
+ static #parts(parts) {
165
+ if (parts.length === 0)
166
+ return "(no content)";
167
+ return parts.map((part, index) => {
168
+ const heading = parts.length === 1 ? "" : `### Part ${index + 1}\n\n`;
169
+ const content = part.content;
170
+ if (content === undefined)
171
+ return `${heading}(empty part)`;
172
+ if (content.$case === "text")
173
+ return `${heading}${content.value}`;
174
+ if (content.$case === "url")
175
+ return `${heading}${content.value}`;
176
+ if (content.$case === "data") {
177
+ return `${heading}\`\`\`json\n${JSON.stringify(content.value, null, 2)}\n\`\`\``;
178
+ }
179
+ return `${heading}[${part.mediaType || "application/octet-stream"}; ${content.value.length} bytes; exact base64 in #json]`;
180
+ }).join("\n\n");
181
+ }
182
+ }
183
+ //# sourceMappingURL=A2aProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2aProjection.js","sourceRoot":"","sources":["../src/A2aProjection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { AgentCard } from "@a2a-js/sdk";
2
+ import type { Client } from "@a2a-js/sdk/client";
3
+ import { type FunctionalityCandidate, type FunctionalityDiscoverQuery, type JsonSchema, type ProblemDetails } from "@plurnk/plurnk-contracts";
4
+ export declare const AGENTS_FAMILY = "agents";
5
+ export declare const AGENTS_OWNER = "@plurnk/plurnk-a2a";
6
+ interface WorkerIdentity {
7
+ readonly workspaceId: number;
8
+ readonly workerId: number;
9
+ }
10
+ type Outcome = {
11
+ readonly state: "active";
12
+ readonly detail?: object;
13
+ } | {
14
+ readonly state: "unavailable";
15
+ readonly problem: ProblemDetails;
16
+ } | {
17
+ readonly state: "authorization-required";
18
+ readonly authorization: {
19
+ readonly url: string;
20
+ };
21
+ };
22
+ interface Preparation extends WorkerIdentity {
23
+ readonly enabled: ReadonlyMap<string, object>;
24
+ readonly previous: unknown | null;
25
+ readonly failure: "publish-unavailable" | "reject";
26
+ readonly force?: string;
27
+ retain(): () => void;
28
+ }
29
+ interface Prepared {
30
+ readonly runtimes: readonly never[];
31
+ readonly documents: readonly {
32
+ readonly pathname: string;
33
+ readonly content: string;
34
+ }[];
35
+ readonly outcomes: ReadonlyMap<string, Outcome>;
36
+ readonly snapshot: unknown;
37
+ commit(): Promise<void>;
38
+ abort(): Promise<void>;
39
+ }
40
+ export interface FunctionalityFamilyHandle {
41
+ invoke(verb: "list" | "discover" | "add" | "enable" | "disable" | "remove", params: unknown, identity: WorkerIdentity): Promise<{
42
+ readonly status: number;
43
+ readonly body: unknown;
44
+ }>;
45
+ refresh(identity: WorkerIdentity): Promise<void>;
46
+ }
47
+ export declare class A2aFunctionalityError extends Error {
48
+ readonly problem: ProblemDetails;
49
+ constructor(problem: ProblemDetails, cause?: unknown);
50
+ }
51
+ export declare const aliasOfCard: (card: AgentCard) => string;
52
+ export declare const renderAgent: (alias: string, card: AgentCard) => string;
53
+ export default class A2aFunctionality {
54
+ #private;
55
+ readonly family = "agents";
56
+ readonly namespaceOwner = "@plurnk/plurnk-a2a";
57
+ readonly summary = "Outbound A2A agents: remote peers addressed as a2a://<alias>, enabled per Worker.";
58
+ readonly definitionSchema: JsonSchema;
59
+ constructor(env?: NodeJS.ProcessEnv);
60
+ attach(handle: FunctionalityFamilyHandle): void;
61
+ get handle(): FunctionalityFamilyHandle;
62
+ resolve(authority: string, workerId: number): Client | null;
63
+ available(): Promise<readonly {
64
+ alias: string;
65
+ definition: object;
66
+ enabled: boolean;
67
+ }[]>;
68
+ discover(query: FunctionalityDiscoverQuery): Promise<readonly FunctionalityCandidate[]>;
69
+ admit(input: unknown): Promise<{
70
+ alias: string;
71
+ definition: object;
72
+ }>;
73
+ prepare(preparation: Preparation): Promise<Prepared>;
74
+ teardown(_snapshot: unknown, identity: WorkerIdentity): Promise<void>;
75
+ }
76
+ export {};
77
+ //# sourceMappingURL=Functionality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Functionality.d.ts","sourceRoot":"","sources":["../src/Functionality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ import { Problems, Validator, } from "@plurnk/plurnk-contracts";
2
+ import { outboundDefinitions, serviceEnabledNames } from "./config.js";
3
+ import { connectHttpJsonAgentFromCard, discoverAgentCard } from "./HttpJsonClient.js";
4
+ export const AGENTS_FAMILY = "agents";
5
+ export const AGENTS_OWNER = "@plurnk/plurnk-a2a";
6
+ const DEFINITION = { $ref: "https://schemas.plurnk.xyz/v0/A2aAgentDefinition.json" };
7
+ const ALIAS = /^[a-z][a-z0-9-]*$/u;
8
+ const ENV_REFERENCE = /^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/u;
9
+ export class A2aFunctionalityError extends Error {
10
+ problem;
11
+ constructor(problem, cause) {
12
+ super(problem.detail, cause === undefined ? undefined : { cause });
13
+ this.name = "A2aFunctionalityError";
14
+ this.problem = problem;
15
+ }
16
+ }
17
+ const problem = (code, status, detail, extensions = {}) => Problems.create("a2a:functionality", code, status, detail, {
18
+ stage: "a2a-functionality",
19
+ retryable: status === 409 || status >= 500,
20
+ ...extensions,
21
+ });
22
+ const failure = (code, status, detail, extensions = {}, cause) => new A2aFunctionalityError(problem(code, status, detail, extensions), cause);
23
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
24
+ const messageOf = (cause) => cause instanceof Error ? cause.message : String(cause);
25
+ const sameDefinition = (left, right) => JSON.stringify(left) === JSON.stringify(right);
26
+ // A symbolic `${NAME}` reference resolves at connection; anything else is literal.
27
+ const resolveReference = (value, env, alias, field) => {
28
+ const match = ENV_REFERENCE.exec(value);
29
+ if (match === null)
30
+ return value;
31
+ const resolved = env[match[1]];
32
+ if (resolved === undefined || resolved.length === 0) {
33
+ throw failure("authorization-unresolved", 409, `A2A agent '${alias}' references ${value} in ${field}, which is not set in the service environment.`, { agent: alias, field, reference: value, retryable: true });
34
+ }
35
+ return resolved;
36
+ };
37
+ export const aliasOfCard = (card) => {
38
+ const slug = card.name.toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "");
39
+ const candidate = /^[a-z]/u.test(slug) ? slug : `agent${slug.length === 0 ? "" : `-${slug}`}`;
40
+ return ALIAS.test(candidate) ? candidate : "agent";
41
+ };
42
+ // {§a2a-agents-catalog} — one concise model-facing document per active alias:
43
+ // identity to choose among agents and the invocation form; the exact card and
44
+ // its skills stay pullable through `READ a2a://<alias>`.
45
+ export const renderAgent = (alias, card) => {
46
+ const description = card.description.trim().replace(/\s+/gu, " ");
47
+ const version = card.version.trim().length === 0 ? "" : ` v${card.version.trim()}`;
48
+ const streaming = card.capabilities?.streaming === true ? "yes" : "no";
49
+ return [
50
+ `# ${alias}`,
51
+ "",
52
+ "## Summary",
53
+ "",
54
+ `a2a://${alias} — ${card.name}${version}: ${description}`,
55
+ "",
56
+ "## Invocation",
57
+ "",
58
+ "```plurnk",
59
+ `## SEND0 [200] (a2a://${alias})`,
60
+ "Describe the work for this agent; a Task answers 102 and its result wakes the next turn.",
61
+ "```",
62
+ "",
63
+ `streaming: ${streaming} · card and skills: \`READ a2a://${alias}\``,
64
+ ].join("\n");
65
+ };
66
+ export default class A2aFunctionality {
67
+ family = AGENTS_FAMILY;
68
+ namespaceOwner = AGENTS_OWNER;
69
+ summary = "Outbound A2A agents: remote peers addressed as a2a://<alias>, enabled per Worker.";
70
+ definitionSchema = DEFINITION;
71
+ #env;
72
+ #snapshots = new Map();
73
+ #handle = null;
74
+ constructor(env = process.env) {
75
+ this.#env = env;
76
+ }
77
+ attach(handle) {
78
+ this.#handle = handle;
79
+ }
80
+ get handle() {
81
+ if (this.#handle === null)
82
+ throw new Error("A2A agents Functionality is not attached to its coordinator handle.");
83
+ return this.#handle;
84
+ }
85
+ // The `a2a` scheme's resolver: the alias in the Functionality of the Worker
86
+ // the operation acts in. Unknown or disabled → null (404 at the scheme);
87
+ // unavailable → its one exact preparation Problem.
88
+ resolve(authority, workerId) {
89
+ const snapshot = this.#snapshots.get(workerId);
90
+ if (snapshot === undefined)
91
+ return null;
92
+ const attachment = snapshot.attachments.get(authority);
93
+ if (attachment !== undefined)
94
+ return attachment.client;
95
+ const unavailable = snapshot.unavailable.get(authority);
96
+ if (unavailable !== undefined)
97
+ throw new A2aFunctionalityError(structuredClone(unavailable.problem));
98
+ return null;
99
+ }
100
+ async available() {
101
+ const enabled = new Set(serviceEnabledNames(this.#env));
102
+ return outboundDefinitions(this.#env).map((definition) => ({
103
+ alias: definition.name,
104
+ definition,
105
+ enabled: enabled.has(definition.name),
106
+ }));
107
+ }
108
+ async discover(query) {
109
+ if (query.configuration !== undefined) {
110
+ const overlay = Object.fromEntries(Object.entries(query.configuration).filter(([, value]) => typeof value === "string"));
111
+ let definitions;
112
+ try {
113
+ definitions = outboundDefinitions(overlay);
114
+ }
115
+ catch (cause) {
116
+ throw failure("configuration-invalid", 400, `The offered A2A configuration is invalid: ${messageOf(cause)}`, { retryable: false }, cause);
117
+ }
118
+ return definitions.map((definition) => ({
119
+ alias: definition.name,
120
+ definition,
121
+ provenance: { kind: "client-configuration", source: `PLURNK_A2A_${definition.name.toUpperCase()}` },
122
+ }));
123
+ }
124
+ if (query.source !== undefined) {
125
+ const source = query.source;
126
+ if (!/^https?:\/\//u.test(source)) {
127
+ throw failure("source-invalid", 400, `A2A discovery takes an absolute HTTP(S) agent URL; got ${JSON.stringify(source)}.`, { source, retryable: false });
128
+ }
129
+ let card;
130
+ try {
131
+ card = await discoverAgentCard(source);
132
+ }
133
+ catch (cause) {
134
+ throw failure("card-unreachable", 502, `No standard Agent Card could be discovered at '${source}': ${messageOf(cause)}`, { source, retryable: true }, cause);
135
+ }
136
+ const alias = aliasOfCard(card);
137
+ return [{
138
+ alias,
139
+ summary: card.description,
140
+ definition: { name: alias, url: source },
141
+ provenance: { kind: "agent-card", source, reference: card.name },
142
+ }];
143
+ }
144
+ if (query.query !== undefined) {
145
+ throw failure("registry-not-configured", 501, "A2A registry search requires a configured downstream registry; none is configured.", { query: query.query, recovery: "Discover an explicit agent URL.", retryable: false });
146
+ }
147
+ return [];
148
+ }
149
+ async admit(input) {
150
+ const params = isRecord(input) ? input : {};
151
+ let definition;
152
+ try {
153
+ definition = structuredClone(Validator.assertA2aAgentDefinition(structuredClone(params.definition)));
154
+ }
155
+ catch (cause) {
156
+ throw failure("definition-invalid", 400, "The A2A agent definition is invalid.", { retryable: false }, cause);
157
+ }
158
+ const alias = typeof params.alias === "string" ? params.alias : definition.name;
159
+ if (alias !== definition.name) {
160
+ throw failure("alias-mismatch", 400, `Alias '${alias}' must equal the definition's name '${definition.name}'.`, { alias, name: definition.name, retryable: false });
161
+ }
162
+ return { alias, definition };
163
+ }
164
+ async #attach(alias, definition) {
165
+ const headers = {};
166
+ for (const [name, value] of Object.entries(definition.headers ?? {})) {
167
+ headers[name] = resolveReference(value, this.#env, alias, `headers.${name}`);
168
+ }
169
+ if (definition.authorization !== undefined) {
170
+ headers.Authorization = `Bearer ${resolveReference(definition.authorization.token, this.#env, alias, "authorization.token")}`;
171
+ }
172
+ let card;
173
+ try {
174
+ card = await discoverAgentCard(definition.url, definition.cardPath, { headers });
175
+ }
176
+ catch (cause) {
177
+ throw failure("card-unreachable", 502, `A2A agent '${alias}' has no discoverable standard Agent Card at ${definition.url}: ${messageOf(cause)}`, { agent: alias, url: definition.url, retryable: true }, cause);
178
+ }
179
+ let client;
180
+ try {
181
+ client = await connectHttpJsonAgentFromCard(card, { headers });
182
+ }
183
+ catch (cause) {
184
+ throw failure("interface-unsupported", 502, `A2A agent '${alias}' advertises no usable HTTP+JSON 1.0 interface: ${messageOf(cause)}`, { agent: alias, url: definition.url, interfaces: card.supportedInterfaces.map(({ protocolBinding, protocolVersion }) => `${protocolBinding} ${protocolVersion}`), retryable: false }, cause);
185
+ }
186
+ return { definition, card, client };
187
+ }
188
+ async prepare(preparation) {
189
+ const previous = preparation.previous;
190
+ const attachments = new Map();
191
+ const unavailable = new Map();
192
+ const outcomes = new Map();
193
+ for (const [alias, raw] of preparation.enabled) {
194
+ const definition = raw;
195
+ const kept = previous?.attachments.get(alias);
196
+ if (kept !== undefined && sameDefinition(kept.definition, definition) && preparation.force !== alias) {
197
+ attachments.set(alias, kept);
198
+ }
199
+ else {
200
+ const carried = previous?.unavailable.get(alias);
201
+ const fresh = carried === undefined || !sameDefinition(carried.definition, definition) || preparation.force === alias;
202
+ try {
203
+ attachments.set(alias, await this.#attach(alias, definition));
204
+ }
205
+ catch (cause) {
206
+ if (!(cause instanceof A2aFunctionalityError))
207
+ throw cause;
208
+ if (preparation.failure === "reject" && fresh)
209
+ throw cause;
210
+ if (fresh)
211
+ console.error(`A2A agent '${alias}' unavailable: ${cause.problem.detail}`);
212
+ unavailable.set(alias, { definition, problem: structuredClone(cause.problem) });
213
+ outcomes.set(alias, { state: "unavailable", problem: structuredClone(cause.problem) });
214
+ continue;
215
+ }
216
+ }
217
+ const { card } = attachments.get(alias);
218
+ outcomes.set(alias, {
219
+ state: "active",
220
+ detail: {
221
+ name: card.name,
222
+ version: card.version,
223
+ description: card.description,
224
+ skills: card.skills.map(({ id }) => id),
225
+ streaming: card.capabilities?.streaming === true,
226
+ },
227
+ });
228
+ }
229
+ const documents = [...attachments]
230
+ .toSorted(([left], [right]) => left.localeCompare(right))
231
+ .map(([alias, { card }]) => ({ pathname: `agents/${encodeURIComponent(alias)}.md`, content: renderAgent(alias, card) }));
232
+ const snapshot = { attachments, unavailable };
233
+ const { workerId } = preparation;
234
+ return {
235
+ runtimes: [],
236
+ documents,
237
+ outcomes,
238
+ snapshot,
239
+ commit: async () => { this.#snapshots.set(workerId, snapshot); },
240
+ abort: async () => { },
241
+ };
242
+ }
243
+ async teardown(_snapshot, identity) {
244
+ this.#snapshots.delete(identity.workerId);
245
+ }
246
+ }
247
+ //# sourceMappingURL=Functionality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Functionality.js","sourceRoot":"","sources":["../src/Functionality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type Client } from "@a2a-js/sdk/client";
2
+ import type { AgentCard } from "@a2a-js/sdk";
3
+ export interface HttpJsonConnectionOptions {
4
+ /** Exact request headers applied to card discovery and every protocol request. */
5
+ readonly headers?: Readonly<Record<string, string>>;
6
+ readonly fetchImpl?: typeof fetch;
7
+ }
8
+ /**
9
+ * Discover one standard A2A Agent Card without creating a client: inert
10
+ * discovery. The standard well-known card path is used unless `agentCardPath`
11
+ * is given.
12
+ */
13
+ export declare const discoverAgentCard: (baseUrl: string, agentCardPath?: string, options?: HttpJsonConnectionOptions) => Promise<AgentCard>;
14
+ /**
15
+ * Discover an A2A v1 Agent Card and connect through its HTTP+JSON interface.
16
+ * The standard well-known card path is used unless `agentCardPath` is given.
17
+ */
18
+ export declare const connectHttpJsonAgent: (baseUrl: string, agentCardPath?: string, options?: HttpJsonConnectionOptions) => Promise<Client>;
19
+ /** Connect through an already-discovered card (no second discovery request). */
20
+ export declare const connectHttpJsonAgentFromCard: (card: AgentCard, options?: HttpJsonConnectionOptions) => Promise<Client>;
21
+ //# sourceMappingURL=HttpJsonClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpJsonClient.d.ts","sourceRoot":"","sources":["../src/HttpJsonClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,MAAM,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,yBAAyB;IACtC,kFAAkF;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACrC;AAWD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,YACjB,MAAM,kBACC,MAAM,YACb,yBAAyB,KACnC,OAAO,CAAC,SAAS,CAAoG,CAAC;AAEzH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YACpB,MAAM,kBACC,MAAM,YACb,yBAAyB,KACnC,OAAO,CAAC,MAAM,CAQhB,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,SAC/B,SAAS,YACN,yBAAyB,KACnC,OAAO,CAAC,MAAM,CAQhB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { ClientFactory, DefaultAgentCardResolver, RestTransportFactory, } from "@a2a-js/sdk/client";
2
+ const fetchWith = ({ headers, fetchImpl = fetch }) => {
3
+ if (headers === undefined || Object.keys(headers).length === 0)
4
+ return fetchImpl;
5
+ return (input, init) => {
6
+ const merged = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));
7
+ for (const [name, value] of Object.entries(headers))
8
+ merged.set(name, value);
9
+ return fetchImpl(input, { ...init, headers: merged });
10
+ };
11
+ };
12
+ /**
13
+ * Discover one standard A2A Agent Card without creating a client: inert
14
+ * discovery. The standard well-known card path is used unless `agentCardPath`
15
+ * is given.
16
+ */
17
+ export const discoverAgentCard = (baseUrl, agentCardPath, options = {}) => new DefaultAgentCardResolver({ fetchImpl: fetchWith(options) }).resolve(baseUrl, agentCardPath);
18
+ /**
19
+ * Discover an A2A v1 Agent Card and connect through its HTTP+JSON interface.
20
+ * The standard well-known card path is used unless `agentCardPath` is given.
21
+ */
22
+ export const connectHttpJsonAgent = (baseUrl, agentCardPath, options = {}) => {
23
+ const fetchImpl = fetchWith(options);
24
+ const factory = new ClientFactory({
25
+ transports: [new RestTransportFactory({ fetchImpl })],
26
+ preferredTransports: ["HTTP+JSON"],
27
+ cardResolver: new DefaultAgentCardResolver({ fetchImpl }),
28
+ });
29
+ return factory.createFromUrl(baseUrl, agentCardPath);
30
+ };
31
+ /** Connect through an already-discovered card (no second discovery request). */
32
+ export const connectHttpJsonAgentFromCard = (card, options = {}) => {
33
+ const fetchImpl = fetchWith(options);
34
+ const factory = new ClientFactory({
35
+ transports: [new RestTransportFactory({ fetchImpl })],
36
+ preferredTransports: ["HTTP+JSON"],
37
+ cardResolver: new DefaultAgentCardResolver({ fetchImpl }),
38
+ });
39
+ return factory.createFromAgentCard(card);
40
+ };
41
+ //# sourceMappingURL=HttpJsonClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpJsonClient.js","sourceRoot":"","sources":["../src/HttpJsonClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EACb,wBAAwB,EACxB,oBAAoB,GAEvB,MAAM,oBAAoB,CAAC;AAS5B,MAAM,SAAS,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,EAA6B,EAAgB,EAAE;IAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjF,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACpG,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7E,OAAO,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;AACN,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,OAAe,EACf,aAAsB,EACtB,OAAO,GAA8B,EAAE,EACrB,EAAE,CAAC,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAEzH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,OAAe,EACf,aAAsB,EACtB,OAAO,GAA8B,EAAE,EACxB,EAAE;IACjB,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAC9B,UAAU,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,mBAAmB,EAAE,CAAC,WAAW,CAAC;QAClC,YAAY,EAAE,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,CAAC;KAC5D,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CACxC,IAAe,EACf,OAAO,GAA8B,EAAE,EACxB,EAAE;IACjB,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;QAC9B,UAAU,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACrD,mBAAmB,EAAE,CAAC,WAAW,CAAC;QAClC,YAAY,EAAE,IAAI,wBAAwB,CAAC,EAAE,SAAS,EAAE,CAAC;KAC5D,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type AgentCard } from "@a2a-js/sdk";
2
+ import type { ApplicationPort } from "@plurnk/plurnk-contracts";
3
+ import { type A2aWorkspaceConfiguration } from "./WorkspaceBinding.ts";
4
+ export interface A2aModuleOptions {
5
+ readonly workspace: A2aWorkspaceConfiguration;
6
+ readonly card: AgentCard;
7
+ readonly host?: string;
8
+ readonly port?: number;
9
+ readonly endpointPath?: string;
10
+ /** Canonical public endpoint URL when it cannot be inferred from the listener. */
11
+ readonly endpointUrl?: string;
12
+ }
13
+ export interface A2aModuleRegistration {
14
+ start(port: ApplicationPort): Promise<Module>;
15
+ }
16
+ export default class Module {
17
+ #private;
18
+ private constructor();
19
+ static init(options: A2aModuleOptions): A2aModuleRegistration;
20
+ listen(): Promise<{
21
+ host: string;
22
+ port: number;
23
+ endpoint: string;
24
+ }>;
25
+ address(): {
26
+ host: string;
27
+ port: number;
28
+ };
29
+ agentCard(): AgentCard;
30
+ close(): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=Module.d.ts.map