@openagentmarket/nodejs 1.3.0 → 1.5.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/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +42 -3
- package/package.json +1 -1
- package/src/client.ts +52 -3
- package/my-hirer/README.md +0 -40
- package/my-hirer/index.ts +0 -142
- package/my-hirer/package-lock.json +0 -2527
- package/my-hirer/package.json +0 -20
- package/my-hirer/tsconfig.json +0 -11
- package/my-hirer/xmtp-production-1bdefa5540ad018555ed3798dc2973a4783fc35113e2e624646e26c1e546b826.db3 +0 -0
- package/my-hirer/xmtp-production-1bdefa5540ad018555ed3798dc2973a4783fc35113e2e624646e26c1e546b826.db3-shm +0 -0
- package/my-hirer/xmtp-production-1bdefa5540ad018555ed3798dc2973a4783fc35113e2e624646e26c1e546b826.db3-wal +0 -0
package/dist/client.d.ts
CHANGED
|
@@ -69,6 +69,14 @@ export declare class OpenAgentClient {
|
|
|
69
69
|
* @returns TaskResult with the reply
|
|
70
70
|
*/
|
|
71
71
|
chat(agentAddress: string, text: string, timeout?: number): Promise<TaskResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Send a plain text message without waiting for a reply.
|
|
74
|
+
* Use this for peer-to-peer chat where streamAllMessages handles incoming messages.
|
|
75
|
+
*
|
|
76
|
+
* @param recipientAddress - The recipient's wallet address
|
|
77
|
+
* @param text - The message text
|
|
78
|
+
*/
|
|
79
|
+
sendMessage(recipientAddress: string, text: string): Promise<void>;
|
|
72
80
|
/**
|
|
73
81
|
* Wait for a response message from the agent on a conversation.
|
|
74
82
|
*/
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACvB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,oCAAoC;IACpC,eAAe,CAAC,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwB;IAEtC,OAAO;IAKP;;;OAGG;WACiB,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAiCnF;;OAEG;IACI,UAAU,IAAI,MAAM;IAI3B;;;;;;;;OAQG;IACU,QAAQ,CACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,IAAI,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC;IA4BtB;;;;;;;OAOG;IACU,IAAI,CACb,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAc,GACxB,OAAO,CAAC,UAAU,CAAC;IAWtB;;OAEG;YACW,eAAe;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,UAAU;IACvB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,oCAAoC;IACpC,eAAe,CAAC,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC5B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwB;IAEtC,OAAO;IAKP;;;OAGG;WACiB,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAiCnF;;OAEG;IACI,UAAU,IAAI,MAAM;IAI3B;;;;;;;;OAQG;IACU,QAAQ,CACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,IAAI,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC;IA4BtB;;;;;;;OAOG;IACU,IAAI,CACb,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAc,GACxB,OAAO,CAAC,UAAU,CAAC;IAWtB;;;;;;OAMG;IACU,WAAW,CACpB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;YACW,eAAe;IA+F7B;;;;;;OAMG;IACU,iBAAiB,CAC1B,SAAS,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,GACpF,OAAO,CAAC,IAAI,CAAC;CAyCnB"}
|
package/dist/client.js
CHANGED
|
@@ -105,6 +105,20 @@ export class OpenAgentClient {
|
|
|
105
105
|
await conversation.send(text);
|
|
106
106
|
return await this.waitForResponse(conversation, timeout);
|
|
107
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Send a plain text message without waiting for a reply.
|
|
110
|
+
* Use this for peer-to-peer chat where streamAllMessages handles incoming messages.
|
|
111
|
+
*
|
|
112
|
+
* @param recipientAddress - The recipient's wallet address
|
|
113
|
+
* @param text - The message text
|
|
114
|
+
*/
|
|
115
|
+
async sendMessage(recipientAddress, text) {
|
|
116
|
+
const conversation = await this.client.conversations.newDmWithIdentifier({
|
|
117
|
+
identifier: recipientAddress,
|
|
118
|
+
identifierKind: 0
|
|
119
|
+
});
|
|
120
|
+
await conversation.send(text);
|
|
121
|
+
}
|
|
108
122
|
/**
|
|
109
123
|
* Wait for a response message from the agent on a conversation.
|
|
110
124
|
*/
|
|
@@ -123,7 +137,19 @@ export class OpenAgentClient {
|
|
|
123
137
|
if (message.senderInboxId === this.client.inboxId)
|
|
124
138
|
continue;
|
|
125
139
|
clearTimeout(timer);
|
|
126
|
-
|
|
140
|
+
let content = message.content;
|
|
141
|
+
// Fall back to .fallback for unsupported content types (e.g. reply)
|
|
142
|
+
if (content === undefined || content === null) {
|
|
143
|
+
const fallback = message.fallback;
|
|
144
|
+
if (fallback) {
|
|
145
|
+
// Strip 'Replied with "..." to an earlier message' wrapper
|
|
146
|
+
const match = fallback.match(/^Replied with \"(.*)\" to an earlier message$/s);
|
|
147
|
+
content = match ? match[1] : fallback;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (content === undefined || content === null) {
|
|
151
|
+
continue; // skip unreadable messages
|
|
152
|
+
}
|
|
127
153
|
if (typeof content !== 'string') {
|
|
128
154
|
resolve({ success: true, raw: String(content) });
|
|
129
155
|
return;
|
|
@@ -198,10 +224,23 @@ export class OpenAgentClient {
|
|
|
198
224
|
// Skip our own messages
|
|
199
225
|
if (message.senderInboxId === this.client.inboxId)
|
|
200
226
|
continue;
|
|
201
|
-
|
|
227
|
+
let content = message.content;
|
|
228
|
+
// Fall back to .fallback for unsupported content types (e.g. reply)
|
|
229
|
+
if (content === undefined || content === null) {
|
|
230
|
+
const fallback = message.fallback;
|
|
231
|
+
if (fallback) {
|
|
232
|
+
const match = fallback.match(/^Replied with \"(.*)\" to an earlier message$/s);
|
|
233
|
+
content = match ? match[1] : fallback;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (content === undefined || content === null)
|
|
237
|
+
continue;
|
|
238
|
+
const contentStr = String(content);
|
|
239
|
+
if (!contentStr || !contentStr.trim())
|
|
240
|
+
continue;
|
|
202
241
|
const conversationId = message.conversationId || '';
|
|
203
242
|
const senderAddress = message.senderInboxId || 'unknown';
|
|
204
|
-
onMessage(senderAddress,
|
|
243
|
+
onMessage(senderAddress, contentStr, conversationId);
|
|
205
244
|
}
|
|
206
245
|
}
|
|
207
246
|
catch (err) {
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -161,6 +161,25 @@ export class OpenAgentClient {
|
|
|
161
161
|
return await this.waitForResponse(conversation, timeout);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
+
/**
|
|
165
|
+
* Send a plain text message without waiting for a reply.
|
|
166
|
+
* Use this for peer-to-peer chat where streamAllMessages handles incoming messages.
|
|
167
|
+
*
|
|
168
|
+
* @param recipientAddress - The recipient's wallet address
|
|
169
|
+
* @param text - The message text
|
|
170
|
+
*/
|
|
171
|
+
public async sendMessage(
|
|
172
|
+
recipientAddress: string,
|
|
173
|
+
text: string
|
|
174
|
+
): Promise<void> {
|
|
175
|
+
const conversation = await this.client.conversations.newDmWithIdentifier({
|
|
176
|
+
identifier: recipientAddress,
|
|
177
|
+
identifierKind: 0
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
await conversation.send(text);
|
|
181
|
+
}
|
|
182
|
+
|
|
164
183
|
/**
|
|
165
184
|
* Wait for a response message from the agent on a conversation.
|
|
166
185
|
*/
|
|
@@ -185,7 +204,22 @@ export class OpenAgentClient {
|
|
|
185
204
|
|
|
186
205
|
clearTimeout(timer);
|
|
187
206
|
|
|
188
|
-
|
|
207
|
+
let content = (message as any).content;
|
|
208
|
+
|
|
209
|
+
// Fall back to .fallback for unsupported content types (e.g. reply)
|
|
210
|
+
if (content === undefined || content === null) {
|
|
211
|
+
const fallback = (message as any).fallback;
|
|
212
|
+
if (fallback) {
|
|
213
|
+
// Strip 'Replied with "..." to an earlier message' wrapper
|
|
214
|
+
const match = fallback.match(/^Replied with \"(.*)\" to an earlier message$/s);
|
|
215
|
+
content = match ? match[1] : fallback;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (content === undefined || content === null) {
|
|
220
|
+
continue; // skip unreadable messages
|
|
221
|
+
}
|
|
222
|
+
|
|
189
223
|
if (typeof content !== 'string') {
|
|
190
224
|
resolve({ success: true, raw: String(content) });
|
|
191
225
|
return;
|
|
@@ -268,11 +302,26 @@ export class OpenAgentClient {
|
|
|
268
302
|
// Skip our own messages
|
|
269
303
|
if ((message as any).senderInboxId === this.client.inboxId) continue;
|
|
270
304
|
|
|
271
|
-
|
|
305
|
+
let content = (message as any).content;
|
|
306
|
+
|
|
307
|
+
// Fall back to .fallback for unsupported content types (e.g. reply)
|
|
308
|
+
if (content === undefined || content === null) {
|
|
309
|
+
const fallback = (message as any).fallback;
|
|
310
|
+
if (fallback) {
|
|
311
|
+
const match = fallback.match(/^Replied with \"(.*)\" to an earlier message$/s);
|
|
312
|
+
content = match ? match[1] : fallback;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (content === undefined || content === null) continue;
|
|
317
|
+
|
|
318
|
+
const contentStr = String(content);
|
|
319
|
+
if (!contentStr || !contentStr.trim()) continue;
|
|
320
|
+
|
|
272
321
|
const conversationId = (message as any).conversationId || '';
|
|
273
322
|
const senderAddress = (message as any).senderInboxId || 'unknown';
|
|
274
323
|
|
|
275
|
-
onMessage(senderAddress,
|
|
324
|
+
onMessage(senderAddress, contentStr, conversationId);
|
|
276
325
|
}
|
|
277
326
|
} catch (err: any) {
|
|
278
327
|
console.error('[OpenAgentClient] Stream error:', err.message);
|
package/my-hirer/README.md
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# OpenAgent Hirer CLI
|
|
2
|
-
|
|
3
|
-
A persistent XMTP chat CLI for hiring agents on [OpenAgent Market](https://openagent.market).
|
|
4
|
-
|
|
5
|
-
## Getting Started
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install
|
|
9
|
-
npm start
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Commands
|
|
13
|
-
|
|
14
|
-
| Command | Description |
|
|
15
|
-
|---------|-------------|
|
|
16
|
-
| `/discover` | Browse available agents from the marketplace |
|
|
17
|
-
| `/chat <address> <message>` | Send a plain text message to an agent |
|
|
18
|
-
| `/task <address> <method> [json]` | Send a JSON-RPC task to an agent |
|
|
19
|
-
| `/help` | Show available commands |
|
|
20
|
-
| `/quit` | Exit the CLI |
|
|
21
|
-
|
|
22
|
-
## Examples
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
> /discover
|
|
26
|
-
> /chat 0xAgentAddr What can you do?
|
|
27
|
-
> /task 0xAgentAddr say_hello {"name": "World"}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Environment Variables
|
|
31
|
-
|
|
32
|
-
| Variable | Description |
|
|
33
|
-
|----------|-------------|
|
|
34
|
-
| `MNEMONIC` | Wallet seed phrase (auto-generated for you) |
|
|
35
|
-
|
|
36
|
-
## Resources
|
|
37
|
-
|
|
38
|
-
- [Discover API](https://openagent.market/discover?protocol=openagentmarket)
|
|
39
|
-
- [SDK Docs](https://www.npmjs.com/package/@openagentmarket/nodejs)
|
|
40
|
-
- [Explorer](https://8004agents.ai)
|
package/my-hirer/index.ts
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { OpenAgentClient } from '@openagentmarket/nodejs';
|
|
2
|
-
import * as readline from 'node:readline';
|
|
3
|
-
import 'dotenv/config';
|
|
4
|
-
|
|
5
|
-
const DISCOVER_URL = "https://openagent.market/discover?protocol=openagentmarket";
|
|
6
|
-
|
|
7
|
-
async function main() {
|
|
8
|
-
const client = await OpenAgentClient.create({
|
|
9
|
-
mnemonic: process.env.MNEMONIC,
|
|
10
|
-
env: "production"
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
console.log("");
|
|
14
|
-
console.log("✅ Connected to XMTP");
|
|
15
|
-
console.log(" Wallet: " + client.getAddress());
|
|
16
|
-
console.log("");
|
|
17
|
-
printHelp();
|
|
18
|
-
|
|
19
|
-
// ── Start REPL ──
|
|
20
|
-
const rl = readline.createInterface({
|
|
21
|
-
input: process.stdin,
|
|
22
|
-
output: process.stdout,
|
|
23
|
-
prompt: "\n> "
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
// ── Background message listener ──
|
|
27
|
-
await client.streamAllMessages((sender, content, convId) => {
|
|
28
|
-
console.log("\n📨 [" + sender.slice(0, 10) + "...] " + content);
|
|
29
|
-
rl.prompt();
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
rl.prompt();
|
|
33
|
-
|
|
34
|
-
rl.on("line", async (line: string) => {
|
|
35
|
-
const input = line.trim();
|
|
36
|
-
if (!input) { rl.prompt(); return; }
|
|
37
|
-
|
|
38
|
-
try {
|
|
39
|
-
if (input === "/help") {
|
|
40
|
-
printHelp();
|
|
41
|
-
}
|
|
42
|
-
else if (input === "/discover") {
|
|
43
|
-
await discoverAgents();
|
|
44
|
-
}
|
|
45
|
-
else if (input.startsWith("/chat ")) {
|
|
46
|
-
const parts = input.slice(6).trim().split(" ");
|
|
47
|
-
const address = parts[0];
|
|
48
|
-
const message = parts.slice(1).join(" ");
|
|
49
|
-
if (!address || !message) {
|
|
50
|
-
console.log("Usage: /chat <agent-address> <message>");
|
|
51
|
-
} else {
|
|
52
|
-
console.log("📤 Sending to " + address + "...");
|
|
53
|
-
const reply = await client.chat(address, message);
|
|
54
|
-
if (reply.success) {
|
|
55
|
-
console.log("📩 Reply:", reply.result ?? reply.raw ?? "(empty)");
|
|
56
|
-
} else {
|
|
57
|
-
console.log("❌ Error:", reply.error ?? "Unknown error");
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (input.startsWith("/task ")) {
|
|
62
|
-
const parts = input.slice(6).trim().split(" ");
|
|
63
|
-
const address = parts[0];
|
|
64
|
-
const method = parts[1];
|
|
65
|
-
const paramsStr = parts.slice(2).join(" ") || "{}";
|
|
66
|
-
if (!address || !method) {
|
|
67
|
-
console.log("Usage: /task <agent-address> <method> [json-params]");
|
|
68
|
-
} else {
|
|
69
|
-
let params: any = {};
|
|
70
|
-
try { params = JSON.parse(paramsStr); } catch { params = { input: paramsStr }; }
|
|
71
|
-
console.log("📤 Sending task '" + method + "' to " + address + "...");
|
|
72
|
-
const result = await client.sendTask(address, method, params);
|
|
73
|
-
if (result.paymentRequired) {
|
|
74
|
-
console.log("💰 Payment required:", result.paymentRequired);
|
|
75
|
-
} else if (result.success) {
|
|
76
|
-
console.log("✅ Result:", JSON.stringify(result.result, null, 2));
|
|
77
|
-
} else {
|
|
78
|
-
console.log("❌ Error:", result.error);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
else if (input === "/quit" || input === "/exit") {
|
|
83
|
-
console.log("Bye! 👋");
|
|
84
|
-
process.exit(0);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.log("Unknown command. Type /help for available commands.");
|
|
88
|
-
}
|
|
89
|
-
} catch (err: any) {
|
|
90
|
-
console.error("❌ Error:", err.message || err);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
rl.prompt();
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
rl.on("close", () => {
|
|
97
|
-
console.log("\nBye! 👋");
|
|
98
|
-
process.exit(0);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function printHelp() {
|
|
103
|
-
console.log("📖 Commands:");
|
|
104
|
-
console.log(" /discover — Browse available agents");
|
|
105
|
-
console.log(" /chat <agent-address> <message> — Send a chat message");
|
|
106
|
-
console.log(" /task <agent-address> <method> [params] — Send a task (params as JSON)");
|
|
107
|
-
console.log(" /help — Show this help");
|
|
108
|
-
console.log(" /quit — Exit");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
async function discoverAgents() {
|
|
112
|
-
console.log("🔍 Fetching agents from OpenAgent Market...\n");
|
|
113
|
-
try {
|
|
114
|
-
const res = await fetch(DISCOVER_URL);
|
|
115
|
-
const data = await res.json() as any;
|
|
116
|
-
if (!data.success || !data.items?.length) {
|
|
117
|
-
console.log("No agents found.");
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
for (const item of data.items) {
|
|
121
|
-
const reg = item.registrationFile || {};
|
|
122
|
-
const name = reg.name || "Unknown";
|
|
123
|
-
const desc = reg.description || "";
|
|
124
|
-
// Find xmtpAddress from metadata array
|
|
125
|
-
const meta = item.metadata || [];
|
|
126
|
-
let addr = item.owner || "?";
|
|
127
|
-
const walletMeta = meta.find((m: any) => m.key === "agentWallet");
|
|
128
|
-
if (walletMeta) addr = walletMeta.value;
|
|
129
|
-
const agentId = item.agentId || "";
|
|
130
|
-
console.log(" 🤖 " + name + (agentId ? " (#" + agentId + ")" : ""));
|
|
131
|
-
if (desc) console.log(" " + desc.slice(0, 120) + (desc.length > 120 ? "..." : ""));
|
|
132
|
-
console.log(" Address: " + addr);
|
|
133
|
-
console.log("");
|
|
134
|
-
}
|
|
135
|
-
console.log("Total: " + data.items.length + " agent(s)");
|
|
136
|
-
if (data.hasMore) console.log("(more agents available)");
|
|
137
|
-
} catch (err: any) {
|
|
138
|
-
console.error("Failed to fetch agents:", err.message);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
main().catch(console.error);
|