agent0-sdk 1.5.3 → 1.7.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 (83) hide show
  1. package/README.md +59 -18
  2. package/dist/core/a2a-client.d.ts +109 -0
  3. package/dist/core/a2a-client.d.ts.map +1 -0
  4. package/dist/core/a2a-client.js +792 -0
  5. package/dist/core/a2a-client.js.map +1 -0
  6. package/dist/core/a2a-summary-client.d.ts +28 -0
  7. package/dist/core/a2a-summary-client.d.ts.map +1 -0
  8. package/dist/core/a2a-summary-client.js +79 -0
  9. package/dist/core/a2a-summary-client.js.map +1 -0
  10. package/dist/core/agent.d.ts +74 -3
  11. package/dist/core/agent.d.ts.map +1 -1
  12. package/dist/core/agent.js +267 -7
  13. package/dist/core/agent.js.map +1 -1
  14. package/dist/core/contracts.d.ts +5 -0
  15. package/dist/core/contracts.d.ts.map +1 -1
  16. package/dist/core/contracts.js +11 -0
  17. package/dist/core/contracts.js.map +1 -1
  18. package/dist/core/endpoint-crawler.d.ts +10 -0
  19. package/dist/core/endpoint-crawler.d.ts.map +1 -1
  20. package/dist/core/endpoint-crawler.js +59 -4
  21. package/dist/core/endpoint-crawler.js.map +1 -1
  22. package/dist/core/feedback-manager.d.ts.map +1 -1
  23. package/dist/core/feedback-manager.js +27 -32
  24. package/dist/core/feedback-manager.js.map +1 -1
  25. package/dist/core/ipfs-client.d.ts +26 -5
  26. package/dist/core/ipfs-client.d.ts.map +1 -1
  27. package/dist/core/ipfs-client.js +133 -108
  28. package/dist/core/ipfs-client.js.map +1 -1
  29. package/dist/core/sdk.d.ts +70 -3
  30. package/dist/core/sdk.d.ts.map +1 -1
  31. package/dist/core/sdk.js +158 -19
  32. package/dist/core/sdk.js.map +1 -1
  33. package/dist/core/subgraph-client.d.ts.map +1 -1
  34. package/dist/core/subgraph-client.js +16 -0
  35. package/dist/core/subgraph-client.js.map +1 -1
  36. package/dist/core/viem-chain-client.d.ts.map +1 -1
  37. package/dist/core/viem-chain-client.js +5 -4
  38. package/dist/core/viem-chain-client.js.map +1 -1
  39. package/dist/core/x402-payment.d.ts +28 -0
  40. package/dist/core/x402-payment.d.ts.map +1 -0
  41. package/dist/core/x402-payment.js +242 -0
  42. package/dist/core/x402-payment.js.map +1 -0
  43. package/dist/core/x402-request.d.ts +33 -0
  44. package/dist/core/x402-request.d.ts.map +1 -0
  45. package/dist/core/x402-request.js +195 -0
  46. package/dist/core/x402-request.js.map +1 -0
  47. package/dist/core/x402-types.d.ts +147 -0
  48. package/dist/core/x402-types.d.ts.map +1 -0
  49. package/dist/core/x402-types.js +190 -0
  50. package/dist/core/x402-types.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/models/a2a.d.ts +176 -0
  56. package/dist/models/a2a.d.ts.map +1 -0
  57. package/dist/models/a2a.js +5 -0
  58. package/dist/models/a2a.js.map +1 -0
  59. package/dist/models/generated/subgraph-types.d.ts +87 -26
  60. package/dist/models/generated/subgraph-types.d.ts.map +1 -1
  61. package/dist/models/index.d.ts +1 -0
  62. package/dist/models/index.d.ts.map +1 -1
  63. package/dist/models/index.js +1 -0
  64. package/dist/models/index.js.map +1 -1
  65. package/dist/models/interfaces.d.ts +16 -10
  66. package/dist/models/interfaces.d.ts.map +1 -1
  67. package/dist/models/interfaces.js.map +1 -1
  68. package/dist/utils/data-uri.d.ts +33 -0
  69. package/dist/utils/data-uri.d.ts.map +1 -0
  70. package/dist/utils/data-uri.js +157 -0
  71. package/dist/utils/data-uri.js.map +1 -0
  72. package/dist/utils/index.d.ts +2 -0
  73. package/dist/utils/index.d.ts.map +1 -1
  74. package/dist/utils/index.js +2 -0
  75. package/dist/utils/index.js.map +1 -1
  76. package/dist/utils/registration-json.d.ts +12 -0
  77. package/dist/utils/registration-json.d.ts.map +1 -0
  78. package/dist/utils/registration-json.js +67 -0
  79. package/dist/utils/registration-json.js.map +1 -0
  80. package/dist/utils/validation.d.ts.map +1 -1
  81. package/dist/utils/validation.js +4 -0
  82. package/dist/utils/validation.js.map +1 -1
  83. package/package.json +15 -3
package/README.md CHANGED
@@ -14,11 +14,16 @@ Agent0 SDK enables you to:
14
14
  - **Cross-chain registration** - One-line registration with IPFS nodes, Pinata, Filecoin, or HTTP URIs
15
15
  - **Public indexing** - Subgraph indexing both on-chain and IPFS data for fast search and retrieval
16
16
 
17
- ## Release (1.5.3)
17
+ ## Release (1.7.0)
18
18
 
19
- This release includes the unified agent discovery/search API.
19
+ This release adds two major new capabilities to the TypeScript SDK: **x402 payment-required HTTP** and **A2A (Agent-to-Agent)** messaging/task support.
20
20
 
21
- For breaking changes and migration notes, see `release_notes/RELEASE_NOTES_1.5.3.md` (and prior notes in `release_notes/`).
21
+ - **x402 request flows**: `sdk.request()` / `sdk.fetchWithX402()` now return `{ x402Required: true, x402Payment }` on HTTP 402 instead of throwing, so callers can inspect payment requirements and continue with `x402Payment.pay()` or `x402Payment.payFirst()`.
22
+ - **A2A client flows**: `Agent.messageA2A()`, `Agent.listTasks()`, `Agent.loadTask()`, and `sdk.createA2AClient(...)` let you talk to A2A endpoints from either a loaded `Agent` or an `AgentSummary`.
23
+ - **Cross-chain/RPC improvements**: built-in default RPCs plus `overrideRpcUrls` support x402 payments and agent loading across multiple chains from one SDK instance.
24
+ - **Examples, tests, and docs**: the release ships with a full `examples/x402-a2a-demo.ts`, extensive unit/integration/Anvil coverage, and updated public docs.
25
+
26
+ For detailed changes, migration notes, and testing guidance, see `release_notes/RELEASE_NOTES_1.7.0.md` (and prior notes in `release_notes/`).
22
27
 
23
28
  **Bug reports & feedback:** GitHub: [Report issues](https://github.com/agent0lab/agent0-ts/issues) | Telegram: [Agent0 channel](https://t.me/agent0kitchen) | Email: team@ag0.xyz
24
29
 
@@ -41,7 +46,7 @@ npm install agent0-sdk
41
46
  To install a specific version explicitly:
42
47
 
43
48
  ```bash
44
- npm install agent0-sdk@1.5.3
49
+ npm install agent0-sdk@1.7.0
45
50
  ```
46
51
 
47
52
  **Note:** This package is an ESM (ECMAScript Module) package. Use `import` statements in your code:
@@ -71,9 +76,9 @@ import { SDK } from 'agent0-sdk';
71
76
  // Initialize SDK with IPFS and subgraph
72
77
  const sdk = new SDK({
73
78
  chainId: 11155111, // Ethereum Sepolia testnet (use 1 for Ethereum Mainnet)
74
- rpcUrl: process.env.RPC_URL!,
79
+ rpcUrl: process.env.RPC_URL, // Optional for supported chains (built-in default RPC is used if omitted)
75
80
  privateKey: process.env.PRIVATE_KEY ?? process.env.AGENT_PRIVATE_KEY, // Optional: for write operations
76
- ipfs: 'pinata', // Options: 'pinata', 'filecoinPin', 'node'
81
+ ipfs: 'pinata', // Options: 'pinata', 'filecoinPin', 'node' (Kubo daemon), 'helia' (embedded)
77
82
  pinataJwt: process.env.PINATA_JWT // For Pinata
78
83
  // Subgraph URL auto-defaults from DEFAULT_SUBGRAPH_URLS
79
84
  });
@@ -81,7 +86,7 @@ const sdk = new SDK({
81
86
 
82
87
  ### 1b. Initialize SDK (browser-side with ERC-6963 wallets)
83
88
 
84
- In the browser you typically keep **reads on your `rpcUrl`** and use a wallet (EIP-1193) for **writes**.
89
+ In the browser you typically keep **reads on your RPC** (default or `rpcUrl`) and use a wallet (EIP-1193) for **writes**.
85
90
 
86
91
  ```typescript
87
92
  import { SDK } from 'agent0-sdk';
@@ -137,6 +142,30 @@ console.log(`Agent registered: ${registrationFile.agentId}`); // e.g., "11155111
137
142
  console.log(`Agent URI: ${registrationFile.agentURI}`); // e.g., "ipfs://Qm..."
138
143
  ```
139
144
 
145
+ ### 2b. Fully on-chain registration (EIP-8004 `data:` URI)
146
+
147
+ ERC-8004 allows storing the entire registration JSON **directly on-chain** by setting `agentURI`/`tokenURI` to a base64 JSON data URI (e.g. `data:application/json;base64,...`).
148
+
149
+ ```typescript
150
+ // Register (or update) with a fully on-chain registration file (data URI)
151
+ const tx = await agent.registerOnChain();
152
+ const { result: registrationFile } = await tx.waitConfirmed({ timeoutMs: 180_000 });
153
+ console.log(`Agent URI (on-chain data): ${registrationFile.agentURI}`);
154
+ ```
155
+
156
+ Notes:
157
+
158
+ - **Gas**: data URIs can be expensive; keep registration files compact.
159
+ - **Size limit**: `loadAgent()` enforces a default max decoded size of **256 KiB** for data URIs. Override with:
160
+
161
+ ```typescript
162
+ const sdk = new SDK({
163
+ chainId: 11155111,
164
+ rpcUrl: process.env.RPC_URL!,
165
+ registrationDataUriMaxBytes: 512 * 1024,
166
+ });
167
+ ```
168
+
140
169
  ### 3. Load and Edit Agent
141
170
 
142
171
  ```typescript
@@ -229,10 +258,10 @@ const summary = await sdk.getReputationSummary('1:123'); // Ethereum Mainnet
229
258
  ```typescript
230
259
  // Optional: prepare an OFF-CHAIN feedback file (only needed for rich fields)
231
260
  const feedbackFile = sdk.prepareFeedbackFile({
232
- capability: 'tools',
233
- name: 'code_generation',
234
- skill: 'python',
235
- context: { sessionId: 'abc' },
261
+ text: 'Great agent!',
262
+ mcpTool: 'code_generation',
263
+ a2aSkills: ['python'],
264
+ a2aContextId: 'session:abc',
236
265
  });
237
266
 
238
267
  // Give feedback (on-chain fields are passed directly)
@@ -249,7 +278,7 @@ const { receipt, result: feedback } = await tx.waitConfirmed();
249
278
 
250
279
  // Search feedback
251
280
  const feedbackResults = await sdk.searchFeedback(
252
- { agentId: '11155111:123', capabilities: ['tools'] },
281
+ { agentId: '11155111:123', capabilities: ['code_generation'] }, // capabilities filters by feedbackFile.mcpTool
253
282
  { minValue: 80, maxValue: 100 }
254
283
  );
255
284
 
@@ -270,16 +299,24 @@ const sdk = new SDK({
270
299
  filecoinPrivateKey: 'your-filecoin-private-key'
271
300
  });
272
301
 
273
- // Option 2: IPFS Node
302
+ // Option 2: Embedded Helia (no daemon required)
303
+ const sdk = new SDK({
304
+ chainId: 11155111,
305
+ rpcUrl: '...',
306
+ signer: privateKey,
307
+ ipfs: 'helia',
308
+ });
309
+
310
+ // Option 3: IPFS Node (Kubo daemon HTTP RPC API)
274
311
  const sdk = new SDK({
275
312
  chainId: 11155111,
276
313
  rpcUrl: '...',
277
314
  signer: privateKey,
278
315
  ipfs: 'node',
279
- ipfsNodeUrl: 'https://ipfs.infura.io:5001'
316
+ ipfsNodeUrl: 'http://localhost:5001'
280
317
  });
281
318
 
282
- // Option 3: Pinata (free for ERC-8004 agents)
319
+ // Option 4: Pinata (free for ERC-8004 agents)
283
320
  const sdk = new SDK({
284
321
  chainId: 11155111,
285
322
  rpcUrl: '...',
@@ -288,7 +325,7 @@ const sdk = new SDK({
288
325
  pinataJwt: 'your-pinata-jwt-token'
289
326
  });
290
327
 
291
- // Option 4: HTTP registration (no IPFS)
328
+ // Option 5: HTTP registration (no IPFS)
292
329
  const sdk = new SDK({ chainId: 11155111, rpcUrl: '...', signer: privateKey });
293
330
  const regTx = await agent.registerHTTP('https://example.com/agent-registration.json');
294
331
  await regTx.waitConfirmed();
@@ -351,14 +388,18 @@ const allChainsReputation = await sdk.searchAgents(
351
388
  // Pagination has been removed; multi-chain results are returned as a flat list.
352
389
  ```
353
390
 
391
+ ### RPC URL defaults and overrides
392
+
393
+ The SDK ships with **built-in default free RPC URLs** for supported chains (Ethereum, Base, Polygon mainnets and Sepolia testnets). Override order: **defaults** → **`rpcUrl`** (for the primary chain) → **`overrideRpcUrls`** (per-chain overrides, e.g. for x402 payments on other chains). You can omit `rpcUrl` when using a supported chain; pass `rpcUrl` and/or `overrideRpcUrls` to override.
394
+
354
395
  ### Default Chain Behavior
355
396
 
356
397
  When you initialize the SDK, you specify a default chain. Agent IDs without a `chainId:` prefix use the default chain:
357
398
 
358
399
  ```typescript
359
400
  const sdk = new SDK({
360
- chainId: 11155111, // Default chain
361
- rpcUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY'
401
+ chainId: 11155111, // Default chain; rpcUrl optional (built-in default used)
402
+ rpcUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY' // optional override
362
403
  });
363
404
 
364
405
  // Uses default chain (11155111)
@@ -0,0 +1,109 @@
1
+ /**
2
+ * A2A (Agent-to-Agent) HTTP client: message:send, task query/cancel, response parsing.
3
+ * Used by Agent.messageA2A(); protocol details live here for testability and reuse.
4
+ * When x402Deps is provided, 402 is returned as x402Required + x402Payment.pay() instead of throwing.
5
+ */
6
+ import type { Part, MessageResponse, TaskResponse, AgentTask, MessageA2AOptions, TaskSummary, ListTasksOptions, CredentialObject, AgentCardAuth } from '../models/a2a.js';
7
+ import { type X402RequestDeps } from './x402-request.js';
8
+ import type { X402RequiredResponse } from './x402-types.js';
9
+ /** Result of sendMessage or task.message() when 402 is supported (x402Deps provided). */
10
+ export type A2AMessageResult = MessageResponse | TaskResponse | X402RequiredResponse<MessageResponse | TaskResponse>;
11
+ /** Normalized A2A interface from agent card (v1 supportedInterfaces or 0.3 url + additionalInterfaces). */
12
+ export type NormalizedInterface = {
13
+ url: string;
14
+ binding: 'HTTP+JSON' | 'JSONRPC' | 'GRPC' | 'AUTO';
15
+ version: string | undefined;
16
+ tenant?: string;
17
+ };
18
+ /**
19
+ * Normalize agent card (v1 or 0.3 style) to a list of interfaces. Doc §6.1.
20
+ */
21
+ export declare function normalizeInterfaces(card: Record<string, unknown> | null | undefined): NormalizedInterface[];
22
+ /**
23
+ * Pick the best interface from the list that the client supports. Prefers HTTP+JSON then JSON-RPC. Doc §6.1.
24
+ * AUTO is always allowed so interfaces with no protocolBinding are picked and sendMessage will try both bindings.
25
+ */
26
+ export declare function pickInterface(interfaces: NormalizedInterface[], preferredBindings: readonly NormalizedInterface['binding'][]): NormalizedInterface | null;
27
+ /**
28
+ * Resolved A2A interface from an endpoint URL (agent card fetch + pickInterface + auth from card).
29
+ * Used by A2AClientFromSummary and by tests.
30
+ */
31
+ export interface ResolvedA2A {
32
+ baseUrl: string;
33
+ a2aVersion: string;
34
+ binding: NormalizedInterface['binding'];
35
+ tenant?: string;
36
+ auth?: AgentCardAuth;
37
+ }
38
+ /**
39
+ * Resolve A2A interface from an endpoint URL: fetch agent card, pick interface, extract auth from card.
40
+ * Discovery: if URL looks like a card path, fetch it; else try /.well-known/agent-card.json and agent.json.
41
+ */
42
+ export declare function resolveA2aFromEndpointUrl(url: string): Promise<ResolvedA2A>;
43
+ export interface A2AAuth {
44
+ headers: Record<string, string>;
45
+ queryParams: Record<string, string>;
46
+ }
47
+ /**
48
+ * Apply credential to request using AgentCard securitySchemes and security (spec §2.5, OpenAPI 3 style).
49
+ * Walks security[] in order and uses the first scheme for which the credential object has a string value (first-match).
50
+ * Credential object keys must match scheme names (e.g. apiKey, bearerAuth). String credential normalizes to { apiKey }.
51
+ * Supported: apiKey (in: header|query|cookie + name), http (bearer → Authorization: Bearer; basic → Authorization: Basic base64(user:password)).
52
+ */
53
+ export declare function applyCredential(credential: string | CredentialObject, auth: AgentCardAuth): A2AAuth;
54
+ type CreateTaskHandleFn = (baseUrl: string, a2aVersion: string, taskId: string, contextId: string, x402Deps?: X402RequestDeps, auth?: A2AAuth, tenant?: string) => AgentTask;
55
+ /**
56
+ * Parse JSON response from POST /message:send into MessageResponse or TaskResponse.
57
+ */
58
+ export declare function parseMessageSendResponse(data: Record<string, unknown>, createTaskHandle: CreateTaskHandleFn, baseUrl: string, a2aVersion: string, x402Deps?: X402RequestDeps, auth?: A2AAuth): MessageResponse | TaskResponse;
59
+ /**
60
+ * POST to /message:send, handle 402/!ok, parse JSON into MessageResponse | TaskResponse.
61
+ * Path order from version (+ optional tenant). On 404 try next path once.
62
+ */
63
+ export declare function postAndParseMessageSend(baseUrl: string, a2aVersion: string, body: Record<string, unknown>, createTaskHandle: CreateTaskHandleFn, auth?: A2AAuth, tenant?: string): Promise<MessageResponse | TaskResponse>;
64
+ /**
65
+ * Build an AgentTask handle that can query, message, and cancel.
66
+ * When x402Deps is provided, task methods use requestWithX402 and may return 402 + pay().
67
+ */
68
+ export declare function createTaskHandle(baseUrl: string, a2aVersion: string, taskId: string, contextId: string, x402Deps?: X402RequestDeps, auth?: A2AAuth, tenant?: string): AgentTask;
69
+ export interface ListTasksParams {
70
+ baseUrl: string;
71
+ a2aVersion: string;
72
+ options?: ListTasksOptions;
73
+ auth?: AgentCardAuth;
74
+ /** Optional tenant from agent card for path prefix (e.g. /tenants/{tenant}/tasks). */
75
+ tenant?: string;
76
+ }
77
+ /**
78
+ * Fetch a single task by ID (GET /tasks/:id). Used by loadTask to get contextId and build AgentTask.
79
+ * When x402Deps provided, 402 returns x402Required + pay() instead of throwing.
80
+ * Optional payment sends with first request (spec §4.2).
81
+ */
82
+ export declare function getTask(baseUrl: string, a2aVersion: string, taskId: string, auth?: A2AAuth, x402Deps?: X402RequestDeps, payment?: string, tenant?: string): Promise<TaskSummary | X402RequiredResponse<TaskSummary>>;
83
+ /**
84
+ * List tasks (GET /tasks with optional filter, historyLength). Fetches all pages internally.
85
+ * When x402Deps provided, 402 on the first request returns x402Required + pay().
86
+ */
87
+ export declare function listTasks(params: ListTasksParams, x402Deps?: X402RequestDeps): Promise<TaskSummary[] | X402RequiredResponse<TaskSummary[]>>;
88
+ export interface SendMessageParams {
89
+ baseUrl: string;
90
+ a2aVersion: string;
91
+ content: string | {
92
+ parts: Part[];
93
+ };
94
+ options?: MessageA2AOptions;
95
+ /** From AgentCard: where and how to send credential (per §2.5). */
96
+ auth?: AgentCardAuth;
97
+ /** Optional tenant from agent card for path prefix. */
98
+ tenant?: string;
99
+ /** When JSONRPC, use JSON-RPC binding; when AUTO (or unspecified in card), try HTTP+JSON then JSON-RPC. */
100
+ binding?: 'HTTP+JSON' | 'JSONRPC' | 'GRPC' | 'AUTO';
101
+ }
102
+ /**
103
+ * Send a message to the A2A endpoint. Returns MessageResponse or TaskResponse per spec §2.1.
104
+ * When x402Deps is provided, 402 is returned as x402Required + x402Payment.pay() instead of throwing.
105
+ * When binding is AUTO (card did not declare protocolBinding), tries HTTP+JSON first, then JSON-RPC on binding mismatch.
106
+ */
107
+ export declare function sendMessage(params: SendMessageParams, x402Deps?: X402RequestDeps): Promise<MessageResponse | TaskResponse | X402RequiredResponse<MessageResponse | TaskResponse>>;
108
+ export {};
109
+ //# sourceMappingURL=a2a-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-client.d.ts","sourceRoot":"","sources":["../../src/core/a2a-client.ts"],"names":[],"mappings":"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"}