agentlaunch-cli 1.0.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 (46) hide show
  1. package/README.md +359 -0
  2. package/dist/__tests__/config.test.d.ts +20 -0
  3. package/dist/__tests__/config.test.d.ts.map +1 -0
  4. package/dist/__tests__/config.test.js +155 -0
  5. package/dist/__tests__/config.test.js.map +1 -0
  6. package/dist/commands/config.d.ts +10 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +56 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/create.d.ts +22 -0
  11. package/dist/commands/create.d.ts.map +1 -0
  12. package/dist/commands/create.js +493 -0
  13. package/dist/commands/create.js.map +1 -0
  14. package/dist/commands/deploy.d.ts +18 -0
  15. package/dist/commands/deploy.d.ts.map +1 -0
  16. package/dist/commands/deploy.js +220 -0
  17. package/dist/commands/deploy.js.map +1 -0
  18. package/dist/commands/list.d.ts +10 -0
  19. package/dist/commands/list.d.ts.map +1 -0
  20. package/dist/commands/list.js +131 -0
  21. package/dist/commands/list.js.map +1 -0
  22. package/dist/commands/scaffold.d.ts +13 -0
  23. package/dist/commands/scaffold.d.ts.map +1 -0
  24. package/dist/commands/scaffold.js +633 -0
  25. package/dist/commands/scaffold.js.map +1 -0
  26. package/dist/commands/status.d.ts +10 -0
  27. package/dist/commands/status.d.ts.map +1 -0
  28. package/dist/commands/status.js +116 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/commands/tokenize.d.ts +16 -0
  31. package/dist/commands/tokenize.d.ts.map +1 -0
  32. package/dist/commands/tokenize.js +139 -0
  33. package/dist/commands/tokenize.js.map +1 -0
  34. package/dist/config.d.ts +35 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +68 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/http.d.ts +20 -0
  39. package/dist/http.d.ts.map +1 -0
  40. package/dist/http.js +69 -0
  41. package/dist/http.js.map +1 -0
  42. package/dist/index.d.ts +21 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +49 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +43 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * CLI-003: deploy command
3
+ *
4
+ * agentlaunch deploy [--file agent.py] [--name "My Agent"]
5
+ *
6
+ * Deploys an agent.py file to Agentverse:
7
+ * 1. Creates agent record
8
+ * 2. Uploads code (double-encoded as Agentverse expects)
9
+ * 3. Sets AGENTVERSE_API_KEY and AGENTLAUNCH_API_KEY secrets
10
+ * 4. Starts the agent
11
+ * 5. Polls until compiled (up to 60 s)
12
+ *
13
+ * Reads the API key from ~/.agentlaunch/config.json (set with `config set-key`).
14
+ * The same key is used for both the Agentverse auth header and the two secrets.
15
+ */
16
+ import fs from "node:fs";
17
+ import path from "node:path";
18
+ import { agentverseRequest } from "../http.js";
19
+ import { requireApiKey } from "../config.js";
20
+ const AGENTVERSE_API = "https://agentverse.ai/v1";
21
+ const POLL_INTERVAL_MS = 5_000;
22
+ const MAX_POLLS = 12; // 60 seconds total
23
+ export function registerDeployCommand(program) {
24
+ program
25
+ .command("deploy")
26
+ .description("Deploy agent.py to Agentverse")
27
+ .option("--file <path>", "Path to the agent Python file (default: ./agent.py)", "agent.py")
28
+ .option("--name <name>", "Display name for the agent on Agentverse", "AgentLaunch Agent")
29
+ .option("--json", "Output only JSON (machine-readable)")
30
+ .action(async (options) => {
31
+ const isJson = options.json === true;
32
+ const apiKey = (() => {
33
+ try {
34
+ return requireApiKey();
35
+ }
36
+ catch (err) {
37
+ if (isJson) {
38
+ console.log(JSON.stringify({ error: err.message }));
39
+ }
40
+ else {
41
+ console.error(err.message);
42
+ }
43
+ process.exit(1);
44
+ }
45
+ })();
46
+ const filePath = path.resolve(process.cwd(), options.file);
47
+ if (!fs.existsSync(filePath)) {
48
+ if (isJson) {
49
+ console.log(JSON.stringify({
50
+ error: `Agent file not found: ${filePath}. Run agentlaunch scaffold <name> first.`,
51
+ }));
52
+ }
53
+ else {
54
+ console.error(`Error: Agent file not found: ${filePath}`);
55
+ console.error("Run 'agentlaunch scaffold <name>' first to generate an agent.");
56
+ }
57
+ process.exit(1);
58
+ }
59
+ const agentName = options.name.slice(0, 64).trim();
60
+ const agentCode = fs.readFileSync(filePath, "utf8");
61
+ if (!isJson) {
62
+ console.log(`Deploying: ${filePath}`);
63
+ console.log(`Agent name: ${agentName}`);
64
+ }
65
+ let agentAddress;
66
+ // Step 1: Create agent
67
+ if (!isJson)
68
+ console.log("\n[1/5] Creating agent on Agentverse...");
69
+ try {
70
+ const created = await agentverseRequest("POST", `${AGENTVERSE_API}/hosting/agents`, apiKey, { name: agentName });
71
+ agentAddress = created.address;
72
+ if (!isJson)
73
+ console.log(` Address: ${agentAddress}`);
74
+ }
75
+ catch (err) {
76
+ if (isJson) {
77
+ console.log(JSON.stringify({ error: err.message }));
78
+ }
79
+ else {
80
+ console.error(`Error: ${err.message}`);
81
+ }
82
+ process.exit(1);
83
+ }
84
+ // Step 2: Upload code
85
+ // Agentverse expects code as a JSON string containing an array of file objects
86
+ if (!isJson)
87
+ console.log("[2/5] Uploading code...");
88
+ try {
89
+ const codeArray = [
90
+ { language: "python", name: "agent.py", value: agentCode },
91
+ ];
92
+ const uploaded = await agentverseRequest("PUT", `${AGENTVERSE_API}/hosting/agents/${agentAddress}/code`, apiKey, { code: JSON.stringify(codeArray) });
93
+ if (!isJson) {
94
+ const digest = uploaded.digest ?? "unknown";
95
+ console.log(` Digest: ${digest.slice(0, 16)}...`);
96
+ }
97
+ }
98
+ catch (err) {
99
+ if (isJson) {
100
+ console.log(JSON.stringify({ error: `Upload failed: ${err.message}` }));
101
+ }
102
+ else {
103
+ console.error(`Error uploading code: ${err.message}`);
104
+ }
105
+ process.exit(1);
106
+ }
107
+ // Step 3: Set secrets
108
+ if (!isJson)
109
+ console.log("[3/5] Setting secrets...");
110
+ const secrets = [
111
+ { name: "AGENTVERSE_API_KEY", secret: apiKey },
112
+ { name: "AGENTLAUNCH_API_KEY", secret: apiKey },
113
+ ];
114
+ for (const s of secrets) {
115
+ try {
116
+ await agentverseRequest("POST", `${AGENTVERSE_API}/hosting/secrets`, apiKey, { address: agentAddress, name: s.name, secret: s.secret });
117
+ if (!isJson)
118
+ console.log(` Set: ${s.name}`);
119
+ }
120
+ catch (err) {
121
+ if (!isJson) {
122
+ console.error(` Warning: Could not set ${s.name}: ${err.message}`);
123
+ }
124
+ // Non-fatal — continue
125
+ }
126
+ }
127
+ // Step 4: Start agent
128
+ if (!isJson)
129
+ console.log("[4/5] Starting agent...");
130
+ try {
131
+ await agentverseRequest("POST", `${AGENTVERSE_API}/hosting/agents/${agentAddress}/start`, apiKey);
132
+ if (!isJson)
133
+ console.log(" Started.");
134
+ }
135
+ catch (err) {
136
+ if (isJson) {
137
+ console.log(JSON.stringify({ error: `Start failed: ${err.message}` }));
138
+ }
139
+ else {
140
+ console.error(`Error starting agent: ${err.message}`);
141
+ }
142
+ process.exit(1);
143
+ }
144
+ // Step 5: Poll for compilation
145
+ if (!isJson)
146
+ console.log("[5/5] Waiting for compilation...");
147
+ let compiled = false;
148
+ let walletAddress;
149
+ for (let i = 0; i < MAX_POLLS; i++) {
150
+ await sleep(POLL_INTERVAL_MS);
151
+ try {
152
+ const response = await fetch(`${AGENTVERSE_API}/hosting/agents/${agentAddress}`, {
153
+ headers: { Authorization: `bearer ${apiKey}` },
154
+ });
155
+ if (response.ok) {
156
+ const status = (await response.json());
157
+ if (status.compiled) {
158
+ compiled = true;
159
+ walletAddress = status.wallet_address;
160
+ if (!isJson)
161
+ console.log(" Compiled.");
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // Transient network error — keep polling
168
+ }
169
+ if (!isJson) {
170
+ const elapsed = ((i + 1) * POLL_INTERVAL_MS) / 1000;
171
+ console.log(` Waiting... (${elapsed}s)`);
172
+ }
173
+ }
174
+ if (compiled) {
175
+ if (isJson) {
176
+ console.log(JSON.stringify({
177
+ agentAddress,
178
+ walletAddress,
179
+ status: "compiled",
180
+ agentverseUrl: `https://agentverse.ai/agents`,
181
+ }));
182
+ }
183
+ else {
184
+ console.log("\n" + "=".repeat(50));
185
+ console.log("DEPLOYMENT SUCCESSFUL");
186
+ console.log("=".repeat(50));
187
+ console.log(`Agent Address: ${agentAddress}`);
188
+ if (walletAddress) {
189
+ console.log(`Wallet: ${walletAddress}`);
190
+ }
191
+ console.log(`Status: Running & Compiled`);
192
+ console.log(`\nView at: https://agentverse.ai/agents`);
193
+ console.log(`\nNext — tokenize your agent:`);
194
+ console.log(` agentlaunch tokenize --agent ${agentAddress} --name "${agentName}" --symbol ABCD`);
195
+ }
196
+ }
197
+ else {
198
+ if (isJson) {
199
+ console.log(JSON.stringify({
200
+ error: "Compilation timeout — agent created but did not compile within 60 seconds.",
201
+ agentAddress,
202
+ agentverseUrl: "https://agentverse.ai/agents",
203
+ }));
204
+ }
205
+ else {
206
+ console.error("\n" + "=".repeat(50));
207
+ console.error("COMPILATION TIMEOUT");
208
+ console.error("=".repeat(50));
209
+ console.error("Agent was created but did not compile within 60 seconds.");
210
+ console.error(`Agent address: ${agentAddress}`);
211
+ console.error("Check logs at: https://agentverse.ai/agents");
212
+ }
213
+ process.exit(1);
214
+ }
215
+ });
216
+ }
217
+ function sleep(ms) {
218
+ return new Promise((resolve) => setTimeout(resolve, ms));
219
+ }
220
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAClD,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,mBAAmB;AAiBzC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CACL,eAAe,EACf,qDAAqD,EACrD,UAAU,CACX;SACA,MAAM,CACL,eAAe,EACf,0CAA0C,EAC1C,mBAAmB,CACpB;SACA,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,OAAuD,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC;gBACH,OAAO,aAAa,EAAE,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,yBAAyB,QAAQ,0CAA0C;iBACnF,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;gBAC1D,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,YAAoB,CAAC;QAEzB,uBAAuB;QACvB,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC,MAAM,EACN,GAAG,cAAc,iBAAiB,EAClC,MAAM,EACN,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;YACF,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,sBAAsB;QACtB,+EAA+E;QAC/E,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG;gBAChB,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;aAC3D,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,KAAK,EACL,GAAG,cAAc,mBAAmB,YAAY,OAAO,EACvD,MAAM,EACN,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACpC,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,kBAAmB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACrD,MAAM,OAAO,GAA4C;YACvD,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,EAAE;YAC9C,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE;SAChD,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,iBAAiB,CACrB,MAAM,EACN,GAAG,cAAc,kBAAkB,EACnC,MAAM,EACN,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAC1D,CAAC;gBACF,IAAI,CAAC,MAAM;oBAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CACX,gCAAgC,CAAC,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CACpE,CAAC;gBACJ,CAAC;gBACD,uBAAuB;YACzB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,iBAAiB,CACrB,MAAM,EACN,GAAG,cAAc,mBAAmB,YAAY,QAAQ,EACxD,MAAM,CACP,CAAC;YACF,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACpF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,aAAiC,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAE9B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,cAAc,mBAAmB,YAAY,EAAE,EAClD;oBACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;iBAC/C,CACF,CAAC;gBAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,MAAM,MAAM,GACV,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;oBACjD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,QAAQ,GAAG,IAAI,CAAC;wBAChB,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;wBACtC,IAAI,CAAC,MAAM;4BAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;wBAC5C,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,IAAI,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;oBACb,YAAY;oBACZ,aAAa;oBACb,MAAM,EAAE,UAAU;oBAClB,aAAa,EAAE,8BAA8B;iBAC9C,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;gBAC9C,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;gBACjD,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CACT,kCAAkC,YAAY,YAAY,SAAS,iBAAiB,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,4EAA4E;oBACnF,YAAY;oBACZ,aAAa,EAAE,8BAA8B;iBAC9C,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,OAAO,CAAC,KAAK,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CLI-003: list command
3
+ *
4
+ * agentlaunch list [--limit 10] [--sort trending|latest|market_cap] [--json]
5
+ *
6
+ * Fetches tokens from GET /api/agents/tokens and prints a table.
7
+ */
8
+ import { Command } from "commander";
9
+ export declare function registerListCommand(program: Command): void;
10
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6H1D"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * CLI-003: list command
3
+ *
4
+ * agentlaunch list [--limit 10] [--sort trending|latest|market_cap] [--json]
5
+ *
6
+ * Fetches tokens from GET /api/agents/tokens and prints a table.
7
+ */
8
+ import { apiGet } from "../http.js";
9
+ export function registerListCommand(program) {
10
+ program
11
+ .command("list")
12
+ .description("List tokens on AgentLaunch with pagination")
13
+ .option("--limit <n>", "Number of tokens to show (default: 10)", "10")
14
+ .option("--sort <by>", "Sort order: trending, latest, market_cap (default: latest)", "latest")
15
+ .option("--json", "Output raw JSON (machine-readable)")
16
+ .action(async (options) => {
17
+ const limit = parseInt(options.limit, 10);
18
+ if (isNaN(limit) || limit < 1 || limit > 100) {
19
+ if (!options.json) {
20
+ console.error("Error: --limit must be a number between 1 and 100");
21
+ }
22
+ else {
23
+ console.log(JSON.stringify({ error: "--limit must be a number between 1 and 100" }));
24
+ }
25
+ process.exit(1);
26
+ }
27
+ const validSorts = ["trending", "latest", "market_cap"];
28
+ const sort = options.sort;
29
+ if (!validSorts.includes(sort)) {
30
+ if (!options.json) {
31
+ console.error(`Error: --sort must be one of: ${validSorts.join(", ")}`);
32
+ }
33
+ else {
34
+ console.log(JSON.stringify({
35
+ error: `--sort must be one of: ${validSorts.join(", ")}`,
36
+ }));
37
+ }
38
+ process.exit(1);
39
+ }
40
+ let response;
41
+ try {
42
+ const query = new URLSearchParams({
43
+ limit: String(limit),
44
+ sort,
45
+ page: "1",
46
+ });
47
+ response = await apiGet(`/agents/tokens?${query}`);
48
+ }
49
+ catch (err) {
50
+ if (options.json) {
51
+ console.log(JSON.stringify({ error: err.message }));
52
+ }
53
+ else {
54
+ console.error(`Error: ${err.message}`);
55
+ }
56
+ process.exit(1);
57
+ }
58
+ // Normalize different response shapes
59
+ const tokens = response.data ?? response.tokens ?? response.items ?? [];
60
+ if (options.json) {
61
+ console.log(JSON.stringify({ tokens, total: response.total ?? tokens.length }));
62
+ return;
63
+ }
64
+ if (tokens.length === 0) {
65
+ console.log("No tokens found.");
66
+ return;
67
+ }
68
+ // Pretty-print table
69
+ const col = {
70
+ name: 22,
71
+ symbol: 8,
72
+ price: 14,
73
+ progress: 10,
74
+ status: 10,
75
+ };
76
+ const hr = "─".repeat(col.name + col.symbol + col.price + col.progress + col.status + 14);
77
+ console.log(`\nAgentLaunch Tokens (sort: ${sort}, limit: ${limit})\n`);
78
+ console.log(hr);
79
+ console.log(pad("Name", col.name) +
80
+ pad("Symbol", col.symbol) +
81
+ pad("Price (FET)", col.price) +
82
+ pad("Progress", col.progress) +
83
+ "Status");
84
+ console.log(hr);
85
+ for (const t of tokens) {
86
+ const name = truncate(t.name ?? "-", col.name - 2);
87
+ const symbol = truncate(t.symbol ?? "-", col.symbol - 2);
88
+ const priceRaw = t.price ?? 0;
89
+ const price = formatPrice(priceRaw);
90
+ const progressRaw = t.progress ?? 0;
91
+ const progress = formatProgress(progressRaw);
92
+ const status = t.listed === true || t.status === "listed"
93
+ ? "Listed"
94
+ : t.status ?? "Active";
95
+ console.log(pad(name, col.name) +
96
+ pad(symbol, col.symbol) +
97
+ pad(price, col.price) +
98
+ pad(progress, col.progress) +
99
+ status);
100
+ }
101
+ console.log(hr);
102
+ console.log(`\nShowing ${tokens.length} token(s). Use --limit to see more.\n`);
103
+ console.log(`View on platform: https://agent-launch.ai`);
104
+ });
105
+ }
106
+ // --- helpers ---
107
+ function pad(s, width) {
108
+ return s.length >= width ? s.slice(0, width) : s + " ".repeat(width - s.length);
109
+ }
110
+ function truncate(s, maxLen) {
111
+ return s.length > maxLen ? s.slice(0, maxLen - 1) + "…" : s;
112
+ }
113
+ function formatPrice(raw) {
114
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
115
+ if (isNaN(n))
116
+ return "-";
117
+ if (n === 0)
118
+ return "0 FET";
119
+ if (n < 0.000001)
120
+ return `${n.toExponential(2)} FET`;
121
+ if (n < 1)
122
+ return `${n.toFixed(6)} FET`;
123
+ return `${n.toFixed(4)} FET`;
124
+ }
125
+ function formatProgress(raw) {
126
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
127
+ if (isNaN(n))
128
+ return "-";
129
+ return `${Math.min(100, Math.max(0, n)).toFixed(1)}%`;
130
+ }
131
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CLI-002: scaffold command
3
+ *
4
+ * agentlaunch scaffold <name> [--type faucet|research|trading|data]
5
+ *
6
+ * Generates an agent project directory with:
7
+ * agent.py - Ready-to-edit agent code based on agent-business-template.py
8
+ * README.md - Quickstart instructions
9
+ * .env.example - Required environment variables
10
+ */
11
+ import { Command } from "commander";
12
+ export declare function registerScaffoldCommand(program: Command): void;
13
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+iBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+E9D"}