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,116 @@
1
+ /**
2
+ * CLI-004: status command
3
+ *
4
+ * agentlaunch status <address> [--json]
5
+ *
6
+ * Fetches a token from GET /api/agents/token/<address> and shows its details.
7
+ */
8
+ import { apiGet } from "../http.js";
9
+ export function registerStatusCommand(program) {
10
+ program
11
+ .command("status <address>")
12
+ .description("Show detailed status of a token by its contract address")
13
+ .option("--json", "Output raw JSON (machine-readable)")
14
+ .action(async (address, options) => {
15
+ if (!address || address.trim().length < 10) {
16
+ if (options.json) {
17
+ console.log(JSON.stringify({ error: "Invalid token address" }));
18
+ }
19
+ else {
20
+ console.error("Error: Please provide a valid token contract address.");
21
+ }
22
+ process.exit(1);
23
+ }
24
+ let response;
25
+ try {
26
+ response = await apiGet(`/agents/token/${address.trim()}`);
27
+ }
28
+ catch (err) {
29
+ if (options.json) {
30
+ console.log(JSON.stringify({ error: err.message }));
31
+ }
32
+ else {
33
+ console.error(`Error: ${err.message}`);
34
+ }
35
+ process.exit(1);
36
+ }
37
+ // Normalize response shapes
38
+ const token = response.data ??
39
+ response.token ??
40
+ response;
41
+ if (options.json) {
42
+ console.log(JSON.stringify(token));
43
+ return;
44
+ }
45
+ // Pretty-print
46
+ const name = token.name ?? "-";
47
+ const symbol = token.symbol ?? "-";
48
+ const tokenAddress = token.token_address ?? token.address ?? address;
49
+ const price = formatPrice(token.price);
50
+ const marketCap = formatFet(token.marketCap ?? token.market_cap);
51
+ const holders = token.holders ?? token.holderCount ?? token.holder_count ?? 0;
52
+ const progress = formatProgress(token.progress);
53
+ const chainId = token.chainId ?? token.chain_id ?? 97;
54
+ const chainName = chainId === 56 ? "BSC Mainnet" : chainId === 97 ? "BSC Testnet" : `Chain ${chainId}`;
55
+ const isListed = token.listed === true || token.status === "listed";
56
+ const graduationStatus = isListed ? "Listed on DEX" : `Bonding curve (${progress} to 30,000 FET target)`;
57
+ const createdAt = token.createdAt ?? token.created_at;
58
+ console.log(`\n${"=".repeat(50)}`);
59
+ console.log(`TOKEN STATUS`);
60
+ console.log(`${"=".repeat(50)}`);
61
+ console.log(`Name: ${name}`);
62
+ console.log(`Symbol: ${symbol}`);
63
+ console.log(`Address: ${tokenAddress}`);
64
+ console.log(`Chain: ${chainName}`);
65
+ console.log(`Price: ${price}`);
66
+ console.log(`Market Cap: ${marketCap}`);
67
+ console.log(`Holders: ${holders}`);
68
+ console.log(`Progress: ${progress}`);
69
+ console.log(`Status: ${graduationStatus}`);
70
+ if (token.description) {
71
+ console.log(`Description: ${token.description}`);
72
+ }
73
+ if (createdAt) {
74
+ console.log(`Created: ${new Date(createdAt).toUTCString()}`);
75
+ }
76
+ console.log(`${"=".repeat(50)}`);
77
+ console.log(`\nView on platform: https://agent-launch.ai/trade/${tokenAddress}`);
78
+ console.log(`Trading fee: 2% -> 100% to protocol treasury\n`);
79
+ });
80
+ }
81
+ // --- helpers ---
82
+ function formatPrice(raw) {
83
+ if (raw === undefined || raw === null)
84
+ return "-";
85
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
86
+ if (isNaN(n))
87
+ return "-";
88
+ if (n === 0)
89
+ return "0 FET";
90
+ if (n < 0.000001)
91
+ return `${n.toExponential(4)} FET`;
92
+ if (n < 1)
93
+ return `${n.toFixed(8)} FET`;
94
+ return `${n.toFixed(4)} FET`;
95
+ }
96
+ function formatFet(raw) {
97
+ if (raw === undefined || raw === null)
98
+ return "-";
99
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
100
+ if (isNaN(n))
101
+ return "-";
102
+ if (n >= 1_000_000)
103
+ return `${(n / 1_000_000).toFixed(2)}M FET`;
104
+ if (n >= 1_000)
105
+ return `${(n / 1_000).toFixed(2)}K FET`;
106
+ return `${n.toFixed(2)} FET`;
107
+ }
108
+ function formatProgress(raw) {
109
+ if (raw === undefined || raw === null)
110
+ return "-";
111
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
112
+ if (isNaN(n))
113
+ return "-";
114
+ return `${Math.min(100, Math.max(0, n)).toFixed(2)}%`;
115
+ }
116
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLI-004: tokenize command
3
+ *
4
+ * agentlaunch tokenize --agent <address> --name <name> --symbol <symbol>
5
+ *
6
+ * Calls POST /api/agents/tokenize, then prints the handoff link so a human
7
+ * can connect their wallet and complete on-chain deployment.
8
+ *
9
+ * Platform constants (source of truth: deployed smart contracts):
10
+ * - Deploy fee: 120 FET (read dynamically, can change via multi-sig)
11
+ * - Graduation target: 30,000 FET -> auto DEX listing
12
+ * - Trading fee: 2% -> 100% to protocol treasury (NO creator fee)
13
+ */
14
+ import { Command } from "commander";
15
+ export declare function registerTokenizeCommand(program: Command): void;
16
+ //# sourceMappingURL=tokenize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/commands/tokenize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiK9D"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * CLI-004: tokenize command
3
+ *
4
+ * agentlaunch tokenize --agent <address> --name <name> --symbol <symbol>
5
+ *
6
+ * Calls POST /api/agents/tokenize, then prints the handoff link so a human
7
+ * can connect their wallet and complete on-chain deployment.
8
+ *
9
+ * Platform constants (source of truth: deployed smart contracts):
10
+ * - Deploy fee: 120 FET (read dynamically, can change via multi-sig)
11
+ * - Graduation target: 30,000 FET -> auto DEX listing
12
+ * - Trading fee: 2% -> 100% to protocol treasury (NO creator fee)
13
+ */
14
+ import { apiPost } from "../http.js";
15
+ const DEFAULT_BASE_URL = "https://agent-launch.ai";
16
+ export function registerTokenizeCommand(program) {
17
+ program
18
+ .command("tokenize")
19
+ .description("Create a token record for your agent and receive a handoff link for on-chain deployment")
20
+ .requiredOption("--agent <address>", "Agentverse agent address (agent1q...)")
21
+ .requiredOption("--name <name>", "Token name (max 32 chars)")
22
+ .requiredOption("--symbol <symbol>", "Token ticker symbol (2-11 chars, e.g. GIFT)")
23
+ .option("--description <desc>", "Token description (max 500 chars)")
24
+ .option("--image <url>", "URL of the token logo image")
25
+ .option("--chain <chainId>", "Chain ID: 97 (BSC testnet) or 56 (BSC mainnet)", "97")
26
+ .option("--json", "Output only JSON (machine-readable)")
27
+ .action(async (options) => {
28
+ const isJson = options.json === true;
29
+ // Basic validation
30
+ if (!options.agent.startsWith("agent1q")) {
31
+ if (isJson) {
32
+ console.log(JSON.stringify({
33
+ error: "--agent must be a valid Agentverse address starting with 'agent1q'",
34
+ }));
35
+ }
36
+ else {
37
+ console.error("Error: --agent must be a valid Agentverse address starting with 'agent1q'");
38
+ }
39
+ process.exit(1);
40
+ }
41
+ if (options.name.length > 32) {
42
+ if (isJson) {
43
+ console.log(JSON.stringify({ error: "--name must be 32 characters or fewer" }));
44
+ }
45
+ else {
46
+ console.error("Error: --name must be 32 characters or fewer");
47
+ }
48
+ process.exit(1);
49
+ }
50
+ const symbol = options.symbol.toUpperCase();
51
+ if (symbol.length < 2 || symbol.length > 11) {
52
+ if (isJson) {
53
+ console.log(JSON.stringify({ error: "--symbol must be 2-11 characters" }));
54
+ }
55
+ else {
56
+ console.error("Error: --symbol must be 2-11 characters");
57
+ }
58
+ process.exit(1);
59
+ }
60
+ const chainId = parseInt(options.chain, 10);
61
+ if (![56, 97].includes(chainId)) {
62
+ if (isJson) {
63
+ console.log(JSON.stringify({ error: "--chain must be 97 (BSC testnet) or 56 (BSC mainnet)" }));
64
+ }
65
+ else {
66
+ console.error("Error: --chain must be 97 (BSC testnet) or 56 (BSC mainnet)");
67
+ }
68
+ process.exit(1);
69
+ }
70
+ const body = {
71
+ agentAddress: options.agent,
72
+ name: options.name,
73
+ symbol,
74
+ chainId,
75
+ };
76
+ if (options.description)
77
+ body.description = options.description;
78
+ if (options.image)
79
+ body.image = options.image;
80
+ if (!isJson) {
81
+ console.log(`Tokenizing agent: ${options.agent}`);
82
+ console.log(` Name: ${options.name}`);
83
+ console.log(` Symbol: ${symbol}`);
84
+ console.log(` Chain: ${chainId === 56 ? "BSC mainnet" : "BSC testnet"} (${chainId})`);
85
+ }
86
+ let result;
87
+ try {
88
+ result = await apiPost("/agents/tokenize", body);
89
+ }
90
+ catch (err) {
91
+ if (isJson) {
92
+ console.log(JSON.stringify({ error: err.message }));
93
+ }
94
+ else {
95
+ console.error(`\nError: ${err.message}`);
96
+ }
97
+ process.exit(1);
98
+ }
99
+ // Extract token_id from various response shapes
100
+ const tokenId = result.token_id ??
101
+ result.tokenId ??
102
+ result.data?.token_id;
103
+ const handoffLink = result.handoff_link ??
104
+ result.data?.handoff_link ??
105
+ (tokenId !== undefined
106
+ ? `${DEFAULT_BASE_URL}/deploy/${tokenId}`
107
+ : undefined);
108
+ if (isJson) {
109
+ console.log(JSON.stringify({
110
+ tokenId,
111
+ tokenAddress: result.token_address,
112
+ status: result.status,
113
+ handoffLink,
114
+ deployFee: "120 FET (read from contract at deploy time)",
115
+ tradingFee: "2% -> 100% to protocol treasury",
116
+ }));
117
+ return;
118
+ }
119
+ console.log("\n" + "=".repeat(50));
120
+ console.log("TOKEN RECORD CREATED");
121
+ console.log("=".repeat(50));
122
+ if (tokenId !== undefined) {
123
+ console.log(`Token ID: ${tokenId}`);
124
+ }
125
+ if (result.token_address) {
126
+ console.log(`Address: ${result.token_address}`);
127
+ }
128
+ if (result.status) {
129
+ console.log(`Status: ${result.status}`);
130
+ }
131
+ if (handoffLink) {
132
+ console.log(`\nHandoff link (share with a human to deploy on-chain):`);
133
+ console.log(` ${handoffLink}`);
134
+ }
135
+ console.log(`\nPlatform fee to deploy: 120 FET (read from contract at deploy time)`);
136
+ console.log(`Trading fee: 2% -> 100% to protocol treasury`);
137
+ });
138
+ }
139
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../src/commands/tokenize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * CLI-001: Config management
3
+ *
4
+ * Stores user config in ~/.agentlaunch/config.json
5
+ * Fields: apiKey, baseUrl
6
+ */
7
+ export interface CliConfig {
8
+ apiKey?: string;
9
+ baseUrl?: string;
10
+ }
11
+ /** Default API base URL. Override with `agentlaunch config set-url`. */
12
+ export declare const DEFAULT_BASE_URL = "https://agent-launch.ai/api";
13
+ /**
14
+ * Read the config file. Returns an empty object if the file does not exist
15
+ * or cannot be parsed.
16
+ */
17
+ export declare function readConfig(): CliConfig;
18
+ /**
19
+ * Write a partial config update. Merges with existing values.
20
+ */
21
+ export declare function writeConfig(partial: Partial<CliConfig>): void;
22
+ /**
23
+ * Return the active base URL (config override or default).
24
+ */
25
+ export declare function getBaseUrl(): string;
26
+ /**
27
+ * Return the active API key. Throws a descriptive error if not set.
28
+ */
29
+ export declare function requireApiKey(): string;
30
+ /**
31
+ * Mask an API key for display: show first 8 chars, then asterisks.
32
+ * Example: "eyJhbGci..." -> "eyJhbGci..."[masked]
33
+ */
34
+ export declare function maskKey(key: string): string;
35
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,UAAU,IAAI,SAAS,CAOtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAW7D;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAUtC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3C"}
package/dist/config.js ADDED
@@ -0,0 +1,68 @@
1
+ /**
2
+ * CLI-001: Config management
3
+ *
4
+ * Stores user config in ~/.agentlaunch/config.json
5
+ * Fields: apiKey, baseUrl
6
+ */
7
+ import fs from "node:fs";
8
+ import os from "node:os";
9
+ import path from "node:path";
10
+ const CONFIG_DIR = path.join(os.homedir(), ".agentlaunch");
11
+ const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
12
+ /** Default API base URL. Override with `agentlaunch config set-url`. */
13
+ export const DEFAULT_BASE_URL = "https://agent-launch.ai/api";
14
+ /**
15
+ * Read the config file. Returns an empty object if the file does not exist
16
+ * or cannot be parsed.
17
+ */
18
+ export function readConfig() {
19
+ try {
20
+ const raw = fs.readFileSync(CONFIG_FILE, "utf8");
21
+ return JSON.parse(raw);
22
+ }
23
+ catch {
24
+ return {};
25
+ }
26
+ }
27
+ /**
28
+ * Write a partial config update. Merges with existing values.
29
+ */
30
+ export function writeConfig(partial) {
31
+ const existing = readConfig();
32
+ const updated = { ...existing, ...partial };
33
+ if (!fs.existsSync(CONFIG_DIR)) {
34
+ fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
35
+ }
36
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(updated, null, 2) + "\n", {
37
+ mode: 0o600, // owner read/write only — contains API key
38
+ });
39
+ }
40
+ /**
41
+ * Return the active base URL (config override or default).
42
+ */
43
+ export function getBaseUrl() {
44
+ const cfg = readConfig();
45
+ return cfg.baseUrl ?? DEFAULT_BASE_URL;
46
+ }
47
+ /**
48
+ * Return the active API key. Throws a descriptive error if not set.
49
+ */
50
+ export function requireApiKey() {
51
+ const cfg = readConfig();
52
+ if (!cfg.apiKey) {
53
+ throw new Error("API key not configured.\n" +
54
+ "Run: agentlaunch config set-key <apiKey>\n" +
55
+ "Get a key at: https://agentverse.ai/profile/api-keys");
56
+ }
57
+ return cfg.apiKey;
58
+ }
59
+ /**
60
+ * Mask an API key for display: show first 8 chars, then asterisks.
61
+ * Example: "eyJhbGci..." -> "eyJhbGci..."[masked]
62
+ */
63
+ export function maskKey(key) {
64
+ if (key.length <= 8)
65
+ return "****";
66
+ return `${key.slice(0, 8)}...${" (masked)"}`;
67
+ }
68
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACrE,IAAI,EAAE,KAAK,EAAE,2CAA2C;KACzD,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,2BAA2B;YACzB,4CAA4C;YAC5C,sDAAsD,CACzD,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC;AAC/C,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Minimal fetch-based HTTP client shared by all commands.
3
+ * No external dependency — uses Node 18+ built-in fetch.
4
+ */
5
+ /**
6
+ * Typed GET request. No authentication required.
7
+ * Throws a descriptive Error on non-2xx HTTP status.
8
+ */
9
+ export declare function apiGet<T>(path: string): Promise<T>;
10
+ /**
11
+ * Typed POST request. Reads the API key from config.
12
+ * Throws if the key is missing or the server returns a non-2xx status.
13
+ */
14
+ export declare function apiPost<T>(path: string, body: unknown): Promise<T>;
15
+ /**
16
+ * Typed PUT request. Requires Agentverse API key passed explicitly
17
+ * (used by the deploy command — different auth domain).
18
+ */
19
+ export declare function agentverseRequest<T>(method: "POST" | "PUT", url: string, agentverseApiKey: string, body?: unknown): Promise<T>;
20
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAYxD;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,MAAM,EAAE,MAAM,GAAG,KAAK,EACtB,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAkBZ"}
package/dist/http.js ADDED
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Minimal fetch-based HTTP client shared by all commands.
3
+ * No external dependency — uses Node 18+ built-in fetch.
4
+ */
5
+ import { getBaseUrl, requireApiKey } from "./config.js";
6
+ /**
7
+ * Typed GET request. No authentication required.
8
+ * Throws a descriptive Error on non-2xx HTTP status.
9
+ */
10
+ export async function apiGet(path) {
11
+ const url = `${getBaseUrl()}${path}`;
12
+ const response = await fetch(url);
13
+ if (!response.ok) {
14
+ const detail = await extractErrorDetail(response);
15
+ throw new Error(`GET ${url} failed with ${response.status} ${response.statusText}${detail}`);
16
+ }
17
+ return response.json();
18
+ }
19
+ /**
20
+ * Typed POST request. Reads the API key from config.
21
+ * Throws if the key is missing or the server returns a non-2xx status.
22
+ */
23
+ export async function apiPost(path, body) {
24
+ const apiKey = requireApiKey();
25
+ const url = `${getBaseUrl()}${path}`;
26
+ const response = await fetch(url, {
27
+ method: "POST",
28
+ headers: {
29
+ "Content-Type": "application/json",
30
+ "X-API-Key": apiKey,
31
+ },
32
+ body: JSON.stringify(body),
33
+ });
34
+ if (!response.ok) {
35
+ const detail = await extractErrorDetail(response);
36
+ throw new Error(`POST ${url} failed with ${response.status} ${response.statusText}${detail}`);
37
+ }
38
+ return response.json();
39
+ }
40
+ /**
41
+ * Typed PUT request. Requires Agentverse API key passed explicitly
42
+ * (used by the deploy command — different auth domain).
43
+ */
44
+ export async function agentverseRequest(method, url, agentverseApiKey, body) {
45
+ const response = await fetch(url, {
46
+ method,
47
+ headers: {
48
+ "Content-Type": "application/json",
49
+ Authorization: `bearer ${agentverseApiKey}`,
50
+ },
51
+ body: body !== undefined ? JSON.stringify(body) : undefined,
52
+ });
53
+ if (!response.ok) {
54
+ const detail = await extractErrorDetail(response);
55
+ throw new Error(`${method} ${url} failed with ${response.status} ${response.statusText}${detail}`);
56
+ }
57
+ return response.json();
58
+ }
59
+ /** Extract a human-readable error message from a failed response body. */
60
+ async function extractErrorDetail(response) {
61
+ try {
62
+ const body = (await response.json());
63
+ return body.message ? `: ${body.message}` : "";
64
+ }
65
+ catch {
66
+ return "";
67
+ }
68
+ }
69
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,IAAY;IAC1C,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,OAAO,GAAG,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAI,IAAY,EAAE,IAAa;IAC1D,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC;IAErC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,MAAM;SACpB;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,QAAQ,GAAG,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,CAC7E,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,GAAW,EACX,gBAAwB,EACxB,IAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM;QACN,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,gBAAgB,EAAE;SAC5C;QACD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,GAAG,MAAM,IAAI,GAAG,gBAAgB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;AACvC,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,kBAAkB,CAAC,QAAkB;IAClD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @agent-launch/cli
4
+ *
5
+ * CLI for the AgentLaunch platform — scaffold, deploy, and tokenize AI agents.
6
+ *
7
+ * Commands:
8
+ * agentlaunch create Flagship one-command flow: scaffold + deploy + tokenize
9
+ * agentlaunch config set-key <apiKey> Store API key
10
+ * agentlaunch config show Show current config
11
+ * agentlaunch config set-url <url> Set custom base URL
12
+ * agentlaunch scaffold <name> Generate agent project from template
13
+ * agentlaunch deploy Deploy agent.py to Agentverse
14
+ * agentlaunch tokenize Create token record + handoff link
15
+ * agentlaunch list List tokens with pagination
16
+ * agentlaunch status <address> Show token status
17
+ *
18
+ * All commands support --json for machine-readable output (AI agent use).
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @agent-launch/cli
4
+ *
5
+ * CLI for the AgentLaunch platform — scaffold, deploy, and tokenize AI agents.
6
+ *
7
+ * Commands:
8
+ * agentlaunch create Flagship one-command flow: scaffold + deploy + tokenize
9
+ * agentlaunch config set-key <apiKey> Store API key
10
+ * agentlaunch config show Show current config
11
+ * agentlaunch config set-url <url> Set custom base URL
12
+ * agentlaunch scaffold <name> Generate agent project from template
13
+ * agentlaunch deploy Deploy agent.py to Agentverse
14
+ * agentlaunch tokenize Create token record + handoff link
15
+ * agentlaunch list List tokens with pagination
16
+ * agentlaunch status <address> Show token status
17
+ *
18
+ * All commands support --json for machine-readable output (AI agent use).
19
+ */
20
+ import { Command } from "commander";
21
+ import { registerConfigCommand } from "./commands/config.js";
22
+ import { registerCreateCommand } from "./commands/create.js";
23
+ import { registerDeployCommand } from "./commands/deploy.js";
24
+ import { registerListCommand } from "./commands/list.js";
25
+ import { registerScaffoldCommand } from "./commands/scaffold.js";
26
+ import { registerStatusCommand } from "./commands/status.js";
27
+ import { registerTokenizeCommand } from "./commands/tokenize.js";
28
+ const program = new Command();
29
+ program
30
+ .name("agentlaunch")
31
+ .description("AgentLaunch CLI — scaffold, deploy, and tokenize AI agents on agent-launch.ai")
32
+ .version("1.0.0");
33
+ // Register all subcommands
34
+ registerCreateCommand(program);
35
+ registerConfigCommand(program);
36
+ registerScaffoldCommand(program);
37
+ registerDeployCommand(program);
38
+ registerTokenizeCommand(program);
39
+ registerListCommand(program);
40
+ registerStatusCommand(program);
41
+ // Show help if no command is given
42
+ if (process.argv.length <= 2) {
43
+ program.help();
44
+ }
45
+ program.parseAsync(process.argv).catch((err) => {
46
+ console.error(err.message ?? String(err));
47
+ process.exit(1);
48
+ });
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CACV,+EAA+E,CAChF;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,2BAA2B;AAC3B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,mCAAmC;AACnC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC;AAED,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "agentlaunch-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI for AgentLaunch — scaffold, deploy, and tokenize AI agents from the command line",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "agentlaunch": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsx src/index.ts",
13
+ "test": "node --test --import tsx/esm src/__tests__/*.test.ts",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "agentlaunch",
18
+ "fetch-ai",
19
+ "agentverse",
20
+ "cli",
21
+ "agent-launch"
22
+ ],
23
+ "author": "AgentLaunch",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "commander": "^12.0.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.0.0",
30
+ "typescript": "^5.3.0",
31
+ "tsx": "^4.0.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18.0.0"
35
+ },
36
+ "files": [
37
+ "dist"
38
+ ],
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/agent-launch/cli"
42
+ }
43
+ }