@a2anet/a2a-utils 0.1.0 → 0.3.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 (58) hide show
  1. package/README.md +1412 -2
  2. package/dist/artifacts/data.d.ts +118 -0
  3. package/dist/artifacts/data.d.ts.map +1 -0
  4. package/dist/artifacts/data.js +583 -0
  5. package/dist/artifacts/data.js.map +1 -0
  6. package/dist/artifacts/index.d.ts +33 -0
  7. package/dist/artifacts/index.d.ts.map +1 -0
  8. package/dist/artifacts/index.js +131 -0
  9. package/dist/artifacts/index.js.map +1 -0
  10. package/dist/artifacts/text.d.ts +54 -0
  11. package/dist/artifacts/text.d.ts.map +1 -0
  12. package/dist/artifacts/text.js +151 -0
  13. package/dist/artifacts/text.js.map +1 -0
  14. package/dist/client/a2a-session.d.ts +94 -0
  15. package/dist/client/a2a-session.d.ts.map +1 -0
  16. package/dist/client/a2a-session.js +264 -0
  17. package/dist/client/a2a-session.js.map +1 -0
  18. package/dist/client/a2a-tools.d.ts +152 -0
  19. package/dist/client/a2a-tools.d.ts.map +1 -0
  20. package/dist/client/a2a-tools.js +470 -0
  21. package/dist/client/a2a-tools.js.map +1 -0
  22. package/dist/client/agent-manager.d.ts +94 -0
  23. package/dist/client/agent-manager.d.ts.map +1 -0
  24. package/dist/client/agent-manager.js +243 -0
  25. package/dist/client/agent-manager.js.map +1 -0
  26. package/dist/client/index.d.ts +4 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +7 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/files/file-store.d.ts +24 -0
  31. package/dist/files/file-store.d.ts.map +1 -0
  32. package/dist/files/file-store.js +5 -0
  33. package/dist/files/file-store.js.map +1 -0
  34. package/dist/files/index.d.ts +3 -0
  35. package/dist/files/index.d.ts.map +1 -0
  36. package/dist/files/index.js +5 -0
  37. package/dist/files/index.js.map +1 -0
  38. package/dist/files/local-file-store.d.ts +26 -0
  39. package/dist/files/local-file-store.d.ts.map +1 -0
  40. package/dist/files/local-file-store.js +99 -0
  41. package/dist/files/local-file-store.js.map +1 -0
  42. package/dist/index.d.ts +11 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +14 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/tasks/index.d.ts +2 -0
  47. package/dist/tasks/index.d.ts.map +1 -0
  48. package/dist/tasks/index.js +5 -0
  49. package/dist/tasks/index.js.map +1 -0
  50. package/dist/tasks/json-task-store.d.ts +32 -0
  51. package/dist/tasks/json-task-store.d.ts.map +1 -0
  52. package/dist/tasks/json-task-store.js +66 -0
  53. package/dist/tasks/json-task-store.js.map +1 -0
  54. package/dist/types.d.ts +65 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +23 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +17 -4
@@ -0,0 +1,243 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * Agent management for A2A applications.
6
+ */
7
+ import * as fs from "node:fs";
8
+ import { DefaultAgentCardResolver } from "@a2a-js/sdk/client";
9
+ /**
10
+ * Manages A2A agent cards keyed by user-defined agent IDs.
11
+ *
12
+ * Agents are configured via a dict mapping agent_id to config, or a JSON file path.
13
+ */
14
+ export class AgentManager {
15
+ config;
16
+ agents = {};
17
+ initErrors = {};
18
+ initialized = false;
19
+ initPromise = null;
20
+ timeout;
21
+ /**
22
+ * Initialize the agent manager.
23
+ *
24
+ * @param agents - Agent config as:
25
+ * - object: {"agent-id": {"url": "https://...", "custom_headers": {"X-API-Key": "..."}}}
26
+ * - string: path to agents.json file with the same structure
27
+ * - null: empty, add agents later
28
+ * @param opts.timeout - HTTP timeout in seconds for fetching agent cards (default: 15s).
29
+ */
30
+ constructor(agents = null, opts) {
31
+ this.timeout = opts?.timeout ?? 15.0;
32
+ this.config = this.loadConfig(agents);
33
+ }
34
+ /** Load and validate agent config. */
35
+ loadConfig(agents) {
36
+ if (agents === null) {
37
+ return {};
38
+ }
39
+ if (typeof agents === "string") {
40
+ const text = fs.readFileSync(agents, "utf-8");
41
+ return JSON.parse(text);
42
+ }
43
+ return { ...agents };
44
+ }
45
+ /** Lazily fetch all agent cards on first use (double-check locking). */
46
+ async ensureInitialized() {
47
+ if (this.initialized)
48
+ return;
49
+ // Single-flight pattern
50
+ if (this.initPromise === null) {
51
+ this.initPromise = this.doInitialize();
52
+ }
53
+ await this.initPromise;
54
+ }
55
+ async doInitialize() {
56
+ if (this.initialized)
57
+ return;
58
+ if (Object.keys(this.config).length === 0) {
59
+ console.warn("No agents configured");
60
+ this.initialized = true;
61
+ return;
62
+ }
63
+ const entries = Object.entries(this.config);
64
+ const results = await Promise.allSettled(entries.map(([agentId, cfg]) => this.fetchAgent(agentId, cfg)));
65
+ this.initErrors = {};
66
+ for (let i = 0; i < results.length; i++) {
67
+ const result = results[i];
68
+ if (result.status === "rejected") {
69
+ const aid = entries[i][0];
70
+ const url = this.config[aid]?.url ?? "unknown";
71
+ const reason = result.reason;
72
+ const errorMsg = `${reason?.constructor?.name ?? "Error"}: ${reason}`;
73
+ this.initErrors[aid] = errorMsg;
74
+ console.error(`Error loading agent '${aid}' from ${url}: ${errorMsg}`);
75
+ }
76
+ }
77
+ if (Object.keys(this.agents).length > 0) {
78
+ console.info(`Successfully initialized ${Object.keys(this.agents).length} agent(s)`);
79
+ }
80
+ else {
81
+ console.warn("No agents were successfully initialized");
82
+ }
83
+ this.initialized = true;
84
+ }
85
+ /** Fetch a single agent card and register it. */
86
+ async fetchAgent(agentId, config) {
87
+ const url = config.url;
88
+ const customHeaders = config.custom_headers ?? {};
89
+ const [baseUrl, cardPath] = this.parseAgentCardUrl(url);
90
+ const resolver = new DefaultAgentCardResolver({
91
+ fetchImpl: this.createFetchImpl(customHeaders),
92
+ });
93
+ const agentCard = await resolver.resolve(baseUrl, cardPath);
94
+ this.agents[agentId] = {
95
+ agentCard,
96
+ customHeaders,
97
+ };
98
+ }
99
+ /** Create a fetch implementation that applies the configured timeout and custom headers. */
100
+ createFetchImpl(customHeaders) {
101
+ const wrappedFetch = (input, init) => {
102
+ const timeoutSignal = AbortSignal.timeout(this.timeout * 1000);
103
+ const signal = init?.signal != null
104
+ ? AbortSignal.any([init.signal, timeoutSignal])
105
+ : timeoutSignal;
106
+ const mergedInit = {
107
+ ...init,
108
+ signal,
109
+ headers: {
110
+ ...init?.headers,
111
+ ...customHeaders,
112
+ },
113
+ };
114
+ return fetch(input, mergedInit);
115
+ };
116
+ wrappedFetch.preconnect = fetch.preconnect;
117
+ return wrappedFetch;
118
+ }
119
+ /** Parse agent card URL into base_url and card_path. */
120
+ parseAgentCardUrl(url) {
121
+ const parsed = new URL(url);
122
+ const baseUrl = `${parsed.protocol}//${parsed.host}`;
123
+ const cardPath = parsed.pathname;
124
+ return [baseUrl, cardPath];
125
+ }
126
+ /**
127
+ * Register a new agent at runtime.
128
+ *
129
+ * @param agentId - User-defined agent identifier.
130
+ * @param url - Agent card URL.
131
+ * @param customHeaders - Optional custom HTTP headers.
132
+ *
133
+ * @throws Error if agentId is already registered.
134
+ */
135
+ async addAgent(agentId, url, customHeaders) {
136
+ await this.ensureInitialized();
137
+ if (agentId in this.agents) {
138
+ throw new Error(`Agent '${agentId}' is already registered`);
139
+ }
140
+ const config = {
141
+ url,
142
+ custom_headers: customHeaders ?? {},
143
+ };
144
+ await this.fetchAgent(agentId, config);
145
+ }
146
+ /**
147
+ * Retrieve agent by ID.
148
+ *
149
+ * @param agentId - User-defined agent identifier.
150
+ *
151
+ * @returns AgentURLAndCustomHeaders, or null if not found.
152
+ */
153
+ async getAgent(agentId) {
154
+ await this.ensureInitialized();
155
+ return this.agents[agentId] ?? null;
156
+ }
157
+ /**
158
+ * Get errors from the most recent initialization attempt.
159
+ *
160
+ * @returns Object mapping agent_id to error message for agents that failed to load.
161
+ */
162
+ get initializationErrors() {
163
+ return { ...this.initErrors };
164
+ }
165
+ /**
166
+ * Get all registered agents.
167
+ *
168
+ * @returns Object mapping agent_id to AgentURLAndCustomHeaders.
169
+ */
170
+ async getAgents() {
171
+ await this.ensureInitialized();
172
+ return { ...this.agents };
173
+ }
174
+ /**
175
+ * Format a single agent card into a summary object.
176
+ *
177
+ * @param card - The agent card to format.
178
+ * @param detail - Detail level — "name", "basic", "skills", or "full".
179
+ *
180
+ * @returns Summary object for the agent.
181
+ */
182
+ formatAgentForLlm(card, detail) {
183
+ if (detail === "name") {
184
+ return { name: card.name };
185
+ }
186
+ if (detail === "basic") {
187
+ return { name: card.name, description: card.description };
188
+ }
189
+ if (detail === "skills") {
190
+ const skillNames = card.skills ? card.skills.map((s) => s.name) : [];
191
+ return {
192
+ name: card.name,
193
+ description: card.description,
194
+ skills: skillNames,
195
+ };
196
+ }
197
+ // "full"
198
+ const skills = [];
199
+ if (card.skills) {
200
+ for (const s of card.skills) {
201
+ skills.push({ name: s.name, description: s.description ?? "" });
202
+ }
203
+ }
204
+ return {
205
+ name: card.name,
206
+ description: card.description,
207
+ skills,
208
+ };
209
+ }
210
+ /**
211
+ * Generate summary for a single agent.
212
+ *
213
+ * @param agentId - User-defined agent identifier.
214
+ * @param detail - Detail level — "name", "basic", "skills", or "full".
215
+ *
216
+ * @returns Summary object for the agent, or null if not found.
217
+ */
218
+ async getAgentForLlm(agentId, detail = "basic") {
219
+ await this.ensureInitialized();
220
+ const agent = this.agents[agentId];
221
+ if (!agent) {
222
+ return null;
223
+ }
224
+ return this.formatAgentForLlm(agent.agentCard, detail);
225
+ }
226
+ /**
227
+ * Generate summary of all agents.
228
+ *
229
+ * @param detail - Detail level — "name", "basic", "skills", or "full".
230
+ *
231
+ * @returns Object mapping agent_id to summary object, sorted by agent_id.
232
+ */
233
+ async getAgentsForLlm(detail = "basic") {
234
+ await this.ensureInitialized();
235
+ const result = {};
236
+ const sortedKeys = Object.keys(this.agents).sort();
237
+ for (const agentId of sortedKeys) {
238
+ result[agentId] = this.formatAgentForLlm(this.agents[agentId].agentCard, detail);
239
+ }
240
+ return result;
241
+ }
242
+ }
243
+ //# sourceMappingURL=agent-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.js","sourceRoot":"","sources":["../../src/client/agent-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { A2ASession } from "./a2a-session.js";
2
+ export { A2ATools } from "./a2a-tools.js";
3
+ export { AgentManager } from "./agent-manager.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export { A2ASession } from "./a2a-session.js";
5
+ export { A2ATools } from "./a2a-tools.js";
6
+ export { AgentManager } from "./agent-manager.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * FileStore abstract interface.
3
+ */
4
+ import type { Artifact } from "@a2a-js/sdk";
5
+ /** Abstract interface for file storage. */
6
+ export interface FileStore {
7
+ /**
8
+ * Save file parts from an artifact.
9
+ *
10
+ * Returns list of storage locations where files were saved
11
+ * (e.g. local paths, cloud URIs, etc.).
12
+ */
13
+ save(taskId: string, artifact: Artifact): Promise<string[]>;
14
+ /**
15
+ * Get storage locations for a saved artifact's files.
16
+ * Returns empty list if not found.
17
+ */
18
+ get(taskId: string, artifactId: string): Promise<string[]>;
19
+ /**
20
+ * Delete saved files for an artifact.
21
+ */
22
+ delete(taskId: string, artifactId: string): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=file-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/files/file-store.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,2CAA2C;AAC3C,MAAM,WAAW,SAAS;IACtB;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5D;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D"}
@@ -0,0 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export {};
5
+ //# sourceMappingURL=file-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/files/file-store.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC"}
@@ -0,0 +1,3 @@
1
+ export type { FileStore } from "./file-store.js";
2
+ export { LocalFileStore } from "./local-file-store.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/files/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export { LocalFileStore } from "./local-file-store.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/files/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Artifact } from "@a2a-js/sdk";
2
+ import type { FileStore } from "./file-store.js";
3
+ /**
4
+ * Store artifact files on the local filesystem.
5
+ *
6
+ * Files are saved to ``storageDir/taskId/artifactId/filename``.
7
+ */
8
+ export declare class LocalFileStore implements FileStore {
9
+ private readonly storageDir;
10
+ constructor(storageDir: string);
11
+ /**
12
+ * Save file parts from an artifact to disk.
13
+ *
14
+ * Returns list of local file paths where files were saved.
15
+ */
16
+ save(taskId: string, artifact: Artifact): Promise<string[]>;
17
+ /**
18
+ * Get file paths for a saved artifact.
19
+ *
20
+ * Returns list of paths, or empty list if directory does not exist.
21
+ */
22
+ get(taskId: string, artifactId: string): Promise<string[]>;
23
+ /** Delete saved files for an artifact. */
24
+ delete(taskId: string, artifactId: string): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=local-file-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-store.d.ts","sourceRoot":"","sources":["../../src/files/local-file-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,UAAU,EAAE,MAAM;IAM9B;;;;OAIG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CjE;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBhE,0CAA0C;IACpC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlE"}
@@ -0,0 +1,99 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * LocalFileStore — filesystem-backed file storage.
6
+ */
7
+ import * as fs from "node:fs/promises";
8
+ import * as path from "node:path";
9
+ /**
10
+ * Store artifact files on the local filesystem.
11
+ *
12
+ * Files are saved to ``storageDir/taskId/artifactId/filename``.
13
+ */
14
+ export class LocalFileStore {
15
+ storageDir;
16
+ constructor(storageDir) {
17
+ this.storageDir = storageDir;
18
+ // Ensure storage dir exists (sync in constructor, matching Python)
19
+ fs.mkdir(storageDir, { recursive: true }).catch(() => { });
20
+ }
21
+ /**
22
+ * Save file parts from an artifact to disk.
23
+ *
24
+ * Returns list of local file paths where files were saved.
25
+ */
26
+ async save(taskId, artifact) {
27
+ const savedPaths = [];
28
+ const artifactDir = path.join(this.storageDir, taskId, artifact.artifactId);
29
+ for (let i = 0; i < artifact.parts.length; i++) {
30
+ const part = artifact.parts[i];
31
+ if (part.kind !== "file") {
32
+ continue;
33
+ }
34
+ const fileObj = part.file;
35
+ let name = fileObj.name ? path.basename(fileObj.name) : `file_${i}`;
36
+ name = name.replace(/\.\./g, "").replace(/^\.+/, "");
37
+ if (!name) {
38
+ name = `file_${i}`;
39
+ }
40
+ await fs.mkdir(artifactDir, { recursive: true });
41
+ const filePath = path.join(artifactDir, name);
42
+ // Path traversal check
43
+ const resolvedPath = path.resolve(filePath);
44
+ const resolvedDir = path.resolve(artifactDir);
45
+ const relative = path.relative(resolvedDir, resolvedPath);
46
+ if (relative.startsWith("..") || path.isAbsolute(relative)) {
47
+ throw new Error(`Filename '${fileObj.name}' resolves outside storage directory`);
48
+ }
49
+ if ("bytes" in fileObj) {
50
+ const data = Buffer.from(fileObj.bytes, "base64");
51
+ await fs.writeFile(filePath, data);
52
+ }
53
+ else if ("uri" in fileObj) {
54
+ const response = await fetch(fileObj.uri);
55
+ if (!response.ok) {
56
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
57
+ }
58
+ const buffer = Buffer.from(await response.arrayBuffer());
59
+ await fs.writeFile(filePath, buffer);
60
+ }
61
+ savedPaths.push(filePath);
62
+ }
63
+ return savedPaths;
64
+ }
65
+ /**
66
+ * Get file paths for a saved artifact.
67
+ *
68
+ * Returns list of paths, or empty list if directory does not exist.
69
+ */
70
+ async get(taskId, artifactId) {
71
+ const artifactDir = path.join(this.storageDir, taskId, artifactId);
72
+ try {
73
+ const entries = await fs.readdir(artifactDir);
74
+ const files = [];
75
+ for (const entry of entries.sort()) {
76
+ const filePath = path.join(artifactDir, entry);
77
+ const stat = await fs.stat(filePath);
78
+ if (stat.isFile()) {
79
+ files.push(filePath);
80
+ }
81
+ }
82
+ return files;
83
+ }
84
+ catch {
85
+ return [];
86
+ }
87
+ }
88
+ /** Delete saved files for an artifact. */
89
+ async delete(taskId, artifactId) {
90
+ const artifactDir = path.join(this.storageDir, taskId, artifactId);
91
+ try {
92
+ await fs.rm(artifactDir, { recursive: true, force: true });
93
+ }
94
+ catch {
95
+ // Ignore if doesn't exist
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=local-file-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-store.js","sourceRoot":"","sources":["../../src/files/local-file-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const VERSION = "0.2.0";
2
+ export { A2ASession } from "./client/a2a-session.js";
3
+ export { A2ATools } from "./client/a2a-tools.js";
4
+ export { AgentManager } from "./client/agent-manager.js";
5
+ export { JSONTaskStore } from "./tasks/json-task-store.js";
6
+ export { DataArtifacts, TextArtifacts, minimizeArtifacts } from "./artifacts/index.js";
7
+ export type { FileStore } from "./files/file-store.js";
8
+ export { LocalFileStore } from "./files/local-file-store.js";
9
+ export type { AgentURLAndCustomHeaders, ArtifactForLLM, DataPartForLLM, FilePartForLLM, MessageForLLM, TaskForLLM, TaskStatusForLLM, TextPartForLLM, } from "./types.js";
10
+ export { ArtifactSettings, TERMINAL_OR_ACTIONABLE_STATES } from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGvF,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,YAAY,EACR,wBAAwB,EACxB,cAAc,EACd,cAAc,EACd,cAAc,EACd,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export const VERSION = "0.2.0"; // x-release-please-version
5
+ // Core
6
+ export { A2ASession } from "./client/a2a-session.js";
7
+ export { A2ATools } from "./client/a2a-tools.js";
8
+ export { AgentManager } from "./client/agent-manager.js";
9
+ export { JSONTaskStore } from "./tasks/json-task-store.js";
10
+ // Artifacts
11
+ export { DataArtifacts, TextArtifacts, minimizeArtifacts } from "./artifacts/index.js";
12
+ export { LocalFileStore } from "./files/local-file-store.js";
13
+ export { ArtifactSettings, TERMINAL_OR_ACTIONABLE_STATES } from "./types.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC;AAEtC,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,2BAA2B;AAE3D,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAa7D,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { JSONTaskStore } from "./json-task-store.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export { JSONTaskStore } from "./json-task-store.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { Task } from "@a2a-js/sdk";
2
+ import type { TaskStore } from "@a2a-js/sdk/server";
3
+ /**
4
+ * Persists Task objects as individual JSON files.
5
+ *
6
+ * Each task is stored at ``{storageDir}/{taskId}.json``.
7
+ */
8
+ export declare class JSONTaskStore implements TaskStore {
9
+ readonly _storageDir: string;
10
+ constructor(storageDir: string);
11
+ /**
12
+ * Save a task to disk.
13
+ *
14
+ * @param task - The Task object to persist.
15
+ */
16
+ save(task: Task): Promise<void>;
17
+ /**
18
+ * Load a task from disk.
19
+ *
20
+ * @param taskId - The task ID to look up.
21
+ *
22
+ * @returns Task if found, undefined otherwise.
23
+ */
24
+ load(taskId: string): Promise<Task | undefined>;
25
+ /**
26
+ * Delete a task from disk.
27
+ *
28
+ * @param taskId - The task ID to delete.
29
+ */
30
+ delete(taskId: string): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=json-task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-task-store.d.ts","sourceRoot":"","sources":["../../src/tasks/json-task-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,UAAU,EAAE,MAAM;IAM9B;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAUrD;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS9C"}
@@ -0,0 +1,66 @@
1
+ // SPDX-FileCopyrightText: 2025-present A2A Net <hello@a2anet.com>
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ /**
5
+ * JSON file-based task store implementing the A2A SDK TaskStore interface.
6
+ */
7
+ import * as fs from "node:fs/promises";
8
+ import * as path from "node:path";
9
+ /**
10
+ * Persists Task objects as individual JSON files.
11
+ *
12
+ * Each task is stored at ``{storageDir}/{taskId}.json``.
13
+ */
14
+ export class JSONTaskStore {
15
+ _storageDir;
16
+ constructor(storageDir) {
17
+ this._storageDir = storageDir;
18
+ // Ensure storage dir exists
19
+ fs.mkdir(storageDir, { recursive: true }).catch(() => { });
20
+ }
21
+ /**
22
+ * Save a task to disk.
23
+ *
24
+ * @param task - The Task object to persist.
25
+ */
26
+ async save(task) {
27
+ await fs.mkdir(this._storageDir, { recursive: true });
28
+ const filePath = path.join(this._storageDir, `${task.id}.json`);
29
+ const data = JSON.stringify(task, null, 2);
30
+ await fs.writeFile(filePath, data);
31
+ console.debug(`Saved task ${task.id} to ${filePath}`);
32
+ }
33
+ /**
34
+ * Load a task from disk.
35
+ *
36
+ * @param taskId - The task ID to look up.
37
+ *
38
+ * @returns Task if found, undefined otherwise.
39
+ */
40
+ async load(taskId) {
41
+ const filePath = path.join(this._storageDir, `${taskId}.json`);
42
+ try {
43
+ const text = await fs.readFile(filePath, "utf-8");
44
+ return JSON.parse(text);
45
+ }
46
+ catch {
47
+ return undefined;
48
+ }
49
+ }
50
+ /**
51
+ * Delete a task from disk.
52
+ *
53
+ * @param taskId - The task ID to delete.
54
+ */
55
+ async delete(taskId) {
56
+ const filePath = path.join(this._storageDir, `${taskId}.json`);
57
+ try {
58
+ await fs.unlink(filePath);
59
+ console.debug(`Deleted task ${taskId}`);
60
+ }
61
+ catch {
62
+ // Ignore if doesn't exist
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=json-task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-task-store.js","sourceRoot":"","sources":["../../src/tasks/json-task-store.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sCAAsC;AAEtC;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACb,WAAW,CAAS;IAE7B,YAAY,UAAkB;QAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,4BAA4B;QAC5B,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,IAAU;QACjB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,OAAO,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAS,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACL,0BAA0B;QAC9B,CAAC;IACL,CAAC;CACJ"}