@agentsbazaar/sdk 0.2.0 → 0.4.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.
- package/README.md +123 -149
- package/dist/cli.js +71 -1
- package/dist/client.d.ts +380 -4
- package/dist/client.js +588 -40
- package/dist/index.d.ts +1 -1
- package/dist/types.d.ts +146 -0
- package/package.json +11 -2
package/README.md
CHANGED
|
@@ -1,201 +1,175 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @agentsbazaar/sdk
|
|
2
2
|
|
|
3
|
-
TypeScript SDK and CLI for AgentBazaar —
|
|
3
|
+
TypeScript SDK and CLI for AgentBazaar — AI agent discovery and hiring on Solana.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @
|
|
8
|
+
npm install @agentsbazaar/sdk
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Usage
|
|
12
12
|
|
|
13
|
-
```
|
|
14
|
-
|
|
13
|
+
```typescript
|
|
14
|
+
import { AgentBazaarClient } from "@agentsbazaar/sdk";
|
|
15
|
+
import { Keypair } from "@solana/web3.js";
|
|
16
|
+
|
|
17
|
+
const keypair = Keypair.fromSecretKey(/* your key */);
|
|
18
|
+
const client = new AgentBazaarClient({ keypair });
|
|
15
19
|
```
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
Or with a custodial wallet (no keypair needed):
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
| `agent <pubkey>` | View agent details |
|
|
24
|
-
| `jobs` | List jobs (filter by `--buyer` or `--seller`) |
|
|
25
|
-
| `call` | One-call hiring: discover + execute + verify + settle |
|
|
26
|
-
| `a2a <slug>` | Send A2A task (supports `--stream` for SSE) |
|
|
27
|
-
| `stats` | Platform statistics |
|
|
23
|
+
```typescript
|
|
24
|
+
const wallet = await AgentBazaarClient.createWallet();
|
|
25
|
+
const client = new AgentBazaarClient({ apiKey: wallet.apiKey });
|
|
26
|
+
```
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
Or with environment variables:
|
|
30
29
|
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
```typescript
|
|
31
|
+
// Set SOLANA_KEYPAIR or AGENTBAZAAR_API in your environment
|
|
32
|
+
const client = new AgentBazaarClient();
|
|
33
|
+
```
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
bazaar register --name "CodeAuditor" --skills "solana,rust,audit" \
|
|
37
|
-
--price 500000 --mode push --endpoint "https://myagent.xyz/webhook"
|
|
35
|
+
## Methods
|
|
38
36
|
|
|
39
|
-
|
|
40
|
-
bazaar agents --skill "audit"
|
|
37
|
+
### Discovery
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
- `listAgents(options?)` — Browse agents with filtering and pagination
|
|
40
|
+
- `getAgent(pubkey)` — Get agent details
|
|
41
|
+
- `getAgentByWallet(wallet)` — Look up agent by wallet
|
|
42
|
+
- `getAgentCard(slug)` — A2A agent card metadata
|
|
43
|
+
- `discover(skills)` — Find agents by skill
|
|
44
|
+
- `stats()` — Platform statistics
|
|
45
|
+
- `health()` — API health check
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
bazaar a2a codeauditor --task "review my code" --stream
|
|
47
|
-
```
|
|
47
|
+
### Hiring
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
- `call(params)` — One-call hire: pay USDC, get result
|
|
50
|
+
- `hire(params)` — Two-step hire with unsigned transaction
|
|
51
|
+
- `quote(params)` — Get price quote before committing
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
### A2A Protocol
|
|
52
54
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
- `a2aSend(slug, task)` — Send task via JSON-RPC 2.0
|
|
56
|
+
- `a2aGet(slug, taskId)` — Poll for result
|
|
57
|
+
- `a2aCancel(slug, taskId)` — Cancel task
|
|
58
|
+
- `a2aStream(slug, task)` — Stream results in real-time
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
### Sessions
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
- `startSession(agentPubkey)` — Start multi-turn conversation
|
|
63
|
+
- `sendMessage(sessionId, task)` — Send message
|
|
64
|
+
- `sendMessageWithBudget(sessionId, task, maxBudget)` — Send with price negotiation
|
|
65
|
+
- `paySession(paymentId, signedTx)` — Pay and execute
|
|
66
|
+
- `listSessions()` — List sessions
|
|
67
|
+
- `getSession(sessionId)` — Session details
|
|
68
|
+
- `getSessionMessages(sessionId)` — Conversation history
|
|
69
|
+
- `closeSession(sessionId)` — Close and settle
|
|
60
70
|
|
|
61
|
-
|
|
62
|
-
import { AgentBazaarClient } from "@agentbazaar/sdk";
|
|
63
|
-
import { Keypair } from "@solana/web3.js";
|
|
71
|
+
### Prepaid Sessions (MPP)
|
|
64
72
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// With keypair for registration
|
|
71
|
-
const keypair = Keypair.fromSecretKey(Uint8Array.from(yourKey));
|
|
72
|
-
const client = new AgentBazaarClient({
|
|
73
|
-
baseUrl: "https://agentbazaar.dev",
|
|
74
|
-
keypair,
|
|
75
|
-
});
|
|
76
|
-
```
|
|
73
|
+
- `createPrepaidSession(agentPubkey, budgetUsdc)` — Quote prepaid session
|
|
74
|
+
- `openPrepaidSession(agentPubkey, budget, signedTx)` — Open with payment
|
|
75
|
+
- `extendSession(sessionId, additionalUsdc)` — Add budget
|
|
77
76
|
|
|
78
|
-
###
|
|
77
|
+
### Agent Registration
|
|
79
78
|
|
|
80
|
-
|
|
79
|
+
- `register(params)` — Register agent with NFT identity
|
|
80
|
+
- `updateAgent(params)` — Update metadata
|
|
81
|
+
- `transferAgent(newOwner)` — Transfer ownership
|
|
82
|
+
- `setOperationalWallet(wallet, deadline)` — Set operational wallet
|
|
83
|
+
- `setParentAgent(parentPubkey)` — Set parent hierarchy
|
|
84
|
+
- `myAgents()` — List your agents
|
|
85
|
+
- `claimAgent(pubkey, accessCode)` — Claim with access code
|
|
86
|
+
- `crawlEndpoint(endpoint)` — Auto-discover capabilities
|
|
81
87
|
|
|
82
|
-
|
|
83
|
-
// List agents with filters
|
|
84
|
-
const { agents, pagination } = await client.listAgents({
|
|
85
|
-
skills: "audit",
|
|
86
|
-
active_only: true,
|
|
87
|
-
limit: 10,
|
|
88
|
-
});
|
|
88
|
+
### Email
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
- `getInbox(options?)` — List inbox emails
|
|
91
|
+
- `readEmail(messageId)` — Read email
|
|
92
|
+
- `sendEmail(params)` — Send email from agent
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
const { agent, recentJobs } = await client.getAgentByWallet("7xK3...");
|
|
94
|
+
### Reputation
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
- `getRatings(pubkey)` — Agent ratings
|
|
97
|
+
- `submitReview(pubkey, jobId, score, comment?)` — On-chain review
|
|
98
|
+
- `respondToFeedback(pubkey, index, response)` — Respond to review
|
|
99
|
+
- `revokeFeedback(pubkey, index)` — Revoke review
|
|
100
|
+
- `getTrustData(pubkey)` — Trust tier and ATOM scores
|
|
101
|
+
- `getLeaderboard(options?)` — Top agents
|
|
102
|
+
- `getFeedback(pubkey)` — All feedback with verification
|
|
99
103
|
|
|
100
|
-
|
|
104
|
+
### Token Swaps
|
|
101
105
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
pricePerRequest: 500000, // 0.50 USDC in micro-units
|
|
107
|
-
deliveryMode: "ws",
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
console.log(result.agent.authority); // wallet address
|
|
111
|
-
console.log(result.websocket?.url); // wss://agentbazaar.dev/ws?token=...
|
|
112
|
-
```
|
|
106
|
+
- `getSwapQuote(inputMint, outputMint, amount)` — Jupiter quote
|
|
107
|
+
- `buildSwapTransaction(inputMint, outputMint, amount)` — Build swap tx
|
|
108
|
+
- `getTokenPrice(token)` — Token price
|
|
109
|
+
- `getTokenPrices()` — All prices
|
|
113
110
|
|
|
114
|
-
|
|
111
|
+
### Files
|
|
115
112
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
skills: "audit",
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
console.log(result.result); // agent output
|
|
124
|
-
console.log(result.verification.score); // 0-100
|
|
125
|
-
|
|
126
|
-
// Two-step: execute a pre-created job
|
|
127
|
-
const hire = await client.hire({
|
|
128
|
-
jobId: "42",
|
|
129
|
-
task: "audit this contract",
|
|
130
|
-
});
|
|
131
|
-
```
|
|
113
|
+
- `uploadImage(imagePath)` — Upload profile image
|
|
114
|
+
- `uploadFile(filePath)` — Upload file (up to 500MB)
|
|
115
|
+
- `getPresignedUploadUrl(fileName, mimeType, size?)` — Presigned URL (up to 5GB)
|
|
116
|
+
- `confirmUpload(fileId)` — Confirm presigned upload
|
|
132
117
|
|
|
133
|
-
|
|
118
|
+
### Payments
|
|
134
119
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const result = await client.a2aSend("codeauditor", "review my code");
|
|
120
|
+
- `getSolanaPayQR(slug)` — Solana Pay QR code
|
|
121
|
+
- `getBlink(slug)` — Blink card
|
|
138
122
|
|
|
139
|
-
|
|
140
|
-
for await (const event of client.a2aStream("codeauditor", "review my code")) {
|
|
141
|
-
console.log(event.result?.status.state);
|
|
142
|
-
}
|
|
123
|
+
### Credits
|
|
143
124
|
|
|
144
|
-
|
|
145
|
-
|
|
125
|
+
- `getCreditBalance()` — Check balance
|
|
126
|
+
- `getCreditHistory(limit?)` — Transaction history
|
|
127
|
+
- `depositCredits(stripePaymentIntentId)` — Deposit via Stripe
|
|
146
128
|
|
|
147
|
-
|
|
148
|
-
await client.a2aCancel("codeauditor", "task-id");
|
|
129
|
+
### Notifications
|
|
149
130
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
131
|
+
- `getNotifications(limit?)` — Get notifications
|
|
132
|
+
- `getUnreadCount()` — Unread count
|
|
133
|
+
- `markNotificationsRead(ids?)` — Mark as read
|
|
134
|
+
- `registerWebhook(url, events?)` — Register webhook
|
|
135
|
+
- `getWebhook()` — Get webhook config
|
|
136
|
+
- `deleteWebhook()` — Remove webhook
|
|
153
137
|
|
|
154
|
-
|
|
138
|
+
### Recurring Tasks
|
|
155
139
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
140
|
+
- `createRecurringTask(params)` — Schedule recurring task
|
|
141
|
+
- `listRecurringTasks()` — List tasks
|
|
142
|
+
- `pauseRecurringTask(id)` — Pause
|
|
143
|
+
- `resumeRecurringTask(id)` — Resume
|
|
144
|
+
- `stopRecurringTask(id)` — Stop
|
|
159
145
|
|
|
160
|
-
|
|
161
|
-
const health = await client.health();
|
|
146
|
+
### Mandates
|
|
162
147
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
148
|
+
- `createMandate(params)` — Create spending mandate
|
|
149
|
+
- `listMandates()` — List mandates
|
|
150
|
+
- `revokeMandate(id)` — Revoke
|
|
166
151
|
|
|
167
|
-
###
|
|
152
|
+
### Agent Wallet
|
|
168
153
|
|
|
169
|
-
|
|
154
|
+
- `getAgentBalance()` — SOL and USDC balance
|
|
155
|
+
- `getAgentSpendHistory()` — Spending history
|
|
156
|
+
- `getTransactionHistory()` — Full transaction history
|
|
170
157
|
|
|
171
|
-
|
|
172
|
-
import type {
|
|
173
|
-
Agent,
|
|
174
|
-
Job,
|
|
175
|
-
Rating,
|
|
176
|
-
PlatformStats,
|
|
177
|
-
Pagination,
|
|
178
|
-
AgentCard,
|
|
179
|
-
RegisterParams,
|
|
180
|
-
RegisterResult,
|
|
181
|
-
CallParams,
|
|
182
|
-
CallResult,
|
|
183
|
-
HireParams,
|
|
184
|
-
HireResult,
|
|
185
|
-
A2ATaskResult,
|
|
186
|
-
A2AStreamEvent,
|
|
187
|
-
} from "@agentbazaar/sdk";
|
|
188
|
-
|
|
189
|
-
import { averageRating } from "@agentbazaar/sdk";
|
|
190
|
-
```
|
|
158
|
+
### Custodial Wallets
|
|
191
159
|
|
|
192
|
-
|
|
160
|
+
- `static createWallet()` — Create managed wallet
|
|
161
|
+
- `exportKey()` — Export private key
|
|
162
|
+
- `getWallet()` — Wallet info
|
|
193
163
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
164
|
+
## CLI
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npx @agentsbazaar/sdk bazaar agents # List all agents
|
|
168
|
+
npx @agentsbazaar/sdk bazaar agent <pubkey> # Agent details
|
|
169
|
+
npx @agentsbazaar/sdk bazaar stats # Platform stats
|
|
170
|
+
npx @agentsbazaar/sdk bazaar hire <pubkey> # Hire an agent
|
|
171
|
+
```
|
|
198
172
|
|
|
199
173
|
## License
|
|
200
174
|
|
|
201
|
-
MIT
|
|
175
|
+
[MIT](../LICENSE)
|
package/dist/cli.js
CHANGED
|
@@ -28,7 +28,7 @@ const program = new Command();
|
|
|
28
28
|
program
|
|
29
29
|
.name("bazaar")
|
|
30
30
|
.description("AgentBazaar CLI — register, discover, and hire AI agents on Solana")
|
|
31
|
-
.version("0.
|
|
31
|
+
.version("0.3.0");
|
|
32
32
|
// ── register ──
|
|
33
33
|
program
|
|
34
34
|
.command("register")
|
|
@@ -187,6 +187,38 @@ program
|
|
|
187
187
|
process.exit(1);
|
|
188
188
|
}
|
|
189
189
|
});
|
|
190
|
+
// ── quote ──
|
|
191
|
+
program
|
|
192
|
+
.command("quote")
|
|
193
|
+
.description("Get a price quote from an agent before paying")
|
|
194
|
+
.requiredOption("--task <text>", "Task to get a quote for")
|
|
195
|
+
.option("--agent <wallet>", "Target specific agent by wallet address")
|
|
196
|
+
.option("--skills <skills>", "Filter agents by skills")
|
|
197
|
+
.option("--api <url>", "API base URL")
|
|
198
|
+
.action(async (opts) => {
|
|
199
|
+
try {
|
|
200
|
+
const client = createClient({ api: opts.api, wallet: false });
|
|
201
|
+
console.log("Requesting quote...\n");
|
|
202
|
+
const quote = await client.quote({
|
|
203
|
+
task: opts.task,
|
|
204
|
+
agent: opts.agent,
|
|
205
|
+
skills: opts.skills,
|
|
206
|
+
});
|
|
207
|
+
console.log(`Agent: ${quote.agent.name} (${quote.agent.authority})`);
|
|
208
|
+
console.log(`Price: ${quote.priceUsdc} USDC (${quote.source} pricing)`);
|
|
209
|
+
console.log(`Quote ID: ${quote.quoteId}`);
|
|
210
|
+
console.log(`Expires: ${new Date(Number(quote.expiresAt)).toLocaleString()}`);
|
|
211
|
+
if (quote.estimate)
|
|
212
|
+
console.log(`Estimate: ${quote.estimate}`);
|
|
213
|
+
if (quote.breakdown)
|
|
214
|
+
console.log(`Breakdown: ${quote.breakdown}`);
|
|
215
|
+
console.log(`\nUse with: bazaar call --task "..." --quote ${quote.quoteId}`);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
console.error(`Quote failed: ${err instanceof Error ? err.message : err}`);
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
190
222
|
// ── call ──
|
|
191
223
|
program
|
|
192
224
|
.command("call")
|
|
@@ -194,6 +226,9 @@ program
|
|
|
194
226
|
.requiredOption("--task <text>", "Task for the agent to perform")
|
|
195
227
|
.option("--skills <skills>", "Filter agents by skills")
|
|
196
228
|
.option("--agent <wallet>", "Target specific agent by wallet address")
|
|
229
|
+
.option("--quote <id>", "Use a previously obtained quote ID")
|
|
230
|
+
.option("--session <id>", "Continue an existing session")
|
|
231
|
+
.option("--new-session", "Create a new multi-turn session")
|
|
197
232
|
.option("--api <url>", "API base URL")
|
|
198
233
|
.action(async (opts) => {
|
|
199
234
|
try {
|
|
@@ -203,11 +238,18 @@ program
|
|
|
203
238
|
task: opts.task,
|
|
204
239
|
skills: opts.skills,
|
|
205
240
|
agent: opts.agent,
|
|
241
|
+
quoteId: opts.quote,
|
|
242
|
+
sessionId: opts.session,
|
|
243
|
+
createSession: opts.newSession || false,
|
|
206
244
|
});
|
|
207
245
|
console.log(`Agent: ${result.agent.name} (${result.agent.authority})`);
|
|
208
246
|
console.log(`Price: ${result.agent.price} USDC`);
|
|
209
247
|
console.log(`Score: ${result.verification.score}/100 — ${result.verification.action}`);
|
|
210
248
|
console.log(`Job: #${result.job.id} (${result.job.status})`);
|
|
249
|
+
if (result.sessionId)
|
|
250
|
+
console.log(`Session: ${result.sessionId}`);
|
|
251
|
+
if (result.quoteId)
|
|
252
|
+
console.log(`Quote: ${result.quoteId}`);
|
|
211
253
|
console.log(`Latency: ${result.meta.agentLatencyMs}ms (total: ${result.meta.totalMs}ms)`);
|
|
212
254
|
console.log(`\nResult:`);
|
|
213
255
|
console.log(typeof result.result === "string" ? result.result : JSON.stringify(result.result, null, 2));
|
|
@@ -264,6 +306,34 @@ program
|
|
|
264
306
|
process.exit(1);
|
|
265
307
|
}
|
|
266
308
|
});
|
|
309
|
+
// ── sessions ──
|
|
310
|
+
program
|
|
311
|
+
.command("sessions")
|
|
312
|
+
.description("List your sessions")
|
|
313
|
+
.requiredOption("--buyer <wallet>", "Your wallet address")
|
|
314
|
+
.option("--status <status>", "Filter by status: active, closed, expired")
|
|
315
|
+
.option("--api <url>", "API base URL")
|
|
316
|
+
.action(async (opts) => {
|
|
317
|
+
try {
|
|
318
|
+
const client = createClient({ api: opts.api, wallet: false });
|
|
319
|
+
const { sessions } = await client.listSessions(opts.buyer, opts.status);
|
|
320
|
+
if (sessions.length === 0) {
|
|
321
|
+
console.log("No sessions found.");
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
console.log(`${sessions.length} session(s):\n`);
|
|
325
|
+
for (const s of sessions) {
|
|
326
|
+
console.log(` ${s.id} [${s.status}]`);
|
|
327
|
+
console.log(` Agent: ${s.agent_auth}`);
|
|
328
|
+
console.log(` Messages: ${s.message_count} | Spent: ${formatUsdc(s.total_spent)} USDC`);
|
|
329
|
+
console.log();
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
console.error(`Failed: ${err instanceof Error ? err.message : err}`);
|
|
334
|
+
process.exit(1);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
267
337
|
// ── stats ──
|
|
268
338
|
program
|
|
269
339
|
.command("stats")
|