agentlaunch 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 (70) hide show
  1. package/README.md +475 -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/buy.d.ts +10 -0
  7. package/dist/commands/buy.d.ts.map +1 -0
  8. package/dist/commands/buy.js +126 -0
  9. package/dist/commands/buy.js.map +1 -0
  10. package/dist/commands/comments.d.ts +15 -0
  11. package/dist/commands/comments.d.ts.map +1 -0
  12. package/dist/commands/comments.js +137 -0
  13. package/dist/commands/comments.js.map +1 -0
  14. package/dist/commands/config.d.ts +10 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +63 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/create.d.ts +33 -0
  19. package/dist/commands/create.d.ts.map +1 -0
  20. package/dist/commands/create.js +1177 -0
  21. package/dist/commands/create.js.map +1 -0
  22. package/dist/commands/deploy.d.ts +18 -0
  23. package/dist/commands/deploy.d.ts.map +1 -0
  24. package/dist/commands/deploy.js +178 -0
  25. package/dist/commands/deploy.js.map +1 -0
  26. package/dist/commands/holders.d.ts +13 -0
  27. package/dist/commands/holders.d.ts.map +1 -0
  28. package/dist/commands/holders.js +114 -0
  29. package/dist/commands/holders.js.map +1 -0
  30. package/dist/commands/init.d.ts +3 -0
  31. package/dist/commands/init.d.ts.map +1 -0
  32. package/dist/commands/init.js +506 -0
  33. package/dist/commands/init.js.map +1 -0
  34. package/dist/commands/list.d.ts +10 -0
  35. package/dist/commands/list.d.ts.map +1 -0
  36. package/dist/commands/list.js +135 -0
  37. package/dist/commands/list.js.map +1 -0
  38. package/dist/commands/optimize.d.ts +12 -0
  39. package/dist/commands/optimize.d.ts.map +1 -0
  40. package/dist/commands/optimize.js +134 -0
  41. package/dist/commands/optimize.js.map +1 -0
  42. package/dist/commands/scaffold.d.ts +25 -0
  43. package/dist/commands/scaffold.d.ts.map +1 -0
  44. package/dist/commands/scaffold.js +123 -0
  45. package/dist/commands/scaffold.js.map +1 -0
  46. package/dist/commands/sell.d.ts +10 -0
  47. package/dist/commands/sell.d.ts.map +1 -0
  48. package/dist/commands/sell.js +109 -0
  49. package/dist/commands/sell.js.map +1 -0
  50. package/dist/commands/status.d.ts +10 -0
  51. package/dist/commands/status.d.ts.map +1 -0
  52. package/dist/commands/status.js +124 -0
  53. package/dist/commands/status.js.map +1 -0
  54. package/dist/commands/tokenize.d.ts +16 -0
  55. package/dist/commands/tokenize.d.ts.map +1 -0
  56. package/dist/commands/tokenize.js +207 -0
  57. package/dist/commands/tokenize.js.map +1 -0
  58. package/dist/config.d.ts +44 -0
  59. package/dist/config.d.ts.map +1 -0
  60. package/dist/config.js +137 -0
  61. package/dist/config.js.map +1 -0
  62. package/dist/http.d.ts +24 -0
  63. package/dist/http.d.ts.map +1 -0
  64. package/dist/http.js +53 -0
  65. package/dist/http.js.map +1 -0
  66. package/dist/index.d.ts +19 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +86 -0
  69. package/dist/index.js.map +1 -0
  70. package/package.json +50 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * CLI: optimize command
3
+ *
4
+ * agentlaunch optimize <address> [--readme <path>] [--description <text>] [--avatar <url>] [--json]
5
+ *
6
+ * Updates metadata on an already-deployed Agentverse agent to improve ranking.
7
+ * Auto-detects README.md in the current directory if --readme is not specified.
8
+ * Prints the 7-factor optimization checklist after updating.
9
+ */
10
+ import { Command } from "commander";
11
+ export declare function registerOptimizeCommand(program: Command): void;
12
+ //# sourceMappingURL=optimize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize.d.ts","sourceRoot":"","sources":["../../src/commands/optimize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoH9D"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * CLI: optimize command
3
+ *
4
+ * agentlaunch optimize <address> [--readme <path>] [--description <text>] [--avatar <url>] [--json]
5
+ *
6
+ * Updates metadata on an already-deployed Agentverse agent to improve ranking.
7
+ * Auto-detects README.md in the current directory if --readme is not specified.
8
+ * Prints the 7-factor optimization checklist after updating.
9
+ */
10
+ import fs from "node:fs";
11
+ import path from "node:path";
12
+ import { updateAgent } from "agentlaunch-sdk";
13
+ import { requireApiKey } from "../config.js";
14
+ function printOptimizationChecklist(items) {
15
+ console.log("\n" + "-".repeat(50));
16
+ console.log("AGENT OPTIMIZATION CHECKLIST");
17
+ console.log("-".repeat(50));
18
+ let doneCount = 0;
19
+ for (const item of items) {
20
+ const mark = item.done ? "x" : " ";
21
+ if (item.done)
22
+ doneCount++;
23
+ let line = ` [${mark}] ${item.factor}`;
24
+ if (!item.done && item.hint) {
25
+ line += ` — ${item.hint}`;
26
+ }
27
+ console.log(line);
28
+ }
29
+ console.log(`\n Score: ${doneCount}/${items.length} ranking factors addressed`);
30
+ }
31
+ export function registerOptimizeCommand(program) {
32
+ program
33
+ .command("optimize <address>")
34
+ .description("Update agent metadata (README, description, avatar) to improve Agentverse ranking")
35
+ .option("--readme <path>", "Path to README.md file (auto-detects ./README.md if omitted)")
36
+ .option("--description <text>", "Short description for Agentverse directory (max 200 chars)")
37
+ .option("--avatar <url>", "Public URL for the agent avatar image")
38
+ .option("--json", "Output only JSON (machine-readable)")
39
+ .action(async (address, options) => {
40
+ const isJson = options.json === true;
41
+ const apiKey = (() => {
42
+ try {
43
+ return requireApiKey();
44
+ }
45
+ catch (err) {
46
+ if (isJson) {
47
+ console.log(JSON.stringify({ error: err.message }));
48
+ }
49
+ else {
50
+ console.error(err.message);
51
+ }
52
+ process.exit(1);
53
+ }
54
+ })();
55
+ // Resolve README content
56
+ let readmeContent;
57
+ if (options.readme) {
58
+ const readmePath = path.resolve(process.cwd(), options.readme);
59
+ if (!fs.existsSync(readmePath)) {
60
+ const msg = `README file not found: ${readmePath}`;
61
+ if (isJson) {
62
+ console.log(JSON.stringify({ error: msg }));
63
+ }
64
+ else {
65
+ console.error(`Error: ${msg}`);
66
+ }
67
+ process.exit(1);
68
+ }
69
+ readmeContent = fs.readFileSync(readmePath, "utf8");
70
+ }
71
+ else {
72
+ // Auto-detect README.md in current directory
73
+ const autoReadme = path.resolve(process.cwd(), "README.md");
74
+ if (fs.existsSync(autoReadme)) {
75
+ readmeContent = fs.readFileSync(autoReadme, "utf8");
76
+ if (!isJson) {
77
+ console.log("Auto-detected README.md in current directory");
78
+ }
79
+ }
80
+ }
81
+ const hasAnyMetadata = readmeContent || options.description || options.avatar;
82
+ if (!hasAnyMetadata) {
83
+ const msg = "No metadata to update. Provide --readme, --description, or --avatar.";
84
+ if (isJson) {
85
+ console.log(JSON.stringify({ error: msg }));
86
+ }
87
+ else {
88
+ console.error(`Error: ${msg}`);
89
+ }
90
+ process.exit(1);
91
+ }
92
+ if (!isJson) {
93
+ console.log(`Optimizing agent: ${address}`);
94
+ if (readmeContent)
95
+ console.log(" Updating: README");
96
+ if (options.description)
97
+ console.log(" Updating: Short Description");
98
+ if (options.avatar)
99
+ console.log(" Updating: Avatar URL");
100
+ }
101
+ try {
102
+ const result = await updateAgent({
103
+ apiKey,
104
+ agentAddress: address,
105
+ metadata: {
106
+ readme: readmeContent,
107
+ short_description: options.description,
108
+ avatar_url: options.avatar,
109
+ },
110
+ });
111
+ if (isJson) {
112
+ console.log(JSON.stringify({
113
+ success: result.success,
114
+ updatedFields: result.updatedFields,
115
+ optimization: result.optimization,
116
+ }));
117
+ }
118
+ else {
119
+ console.log(`\nUpdated ${result.updatedFields.length} field(s): ${result.updatedFields.join(", ")}`);
120
+ printOptimizationChecklist(result.optimization);
121
+ }
122
+ }
123
+ catch (err) {
124
+ if (isJson) {
125
+ console.log(JSON.stringify({ error: err.message }));
126
+ }
127
+ else {
128
+ console.error(`Error: ${err.message}`);
129
+ }
130
+ process.exit(1);
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=optimize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize.js","sourceRoot":"","sources":["../../src/commands/optimize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * CLI-002: scaffold command
3
+ *
4
+ * agentlaunch scaffold <name> [--type faucet|research|trading|data|custom]
5
+ * [--template <name>]
6
+ *
7
+ * Generates an agent project directory with six files:
8
+ * agent.py - Agent code from agentlaunch-templates
9
+ * README.md - Quickstart instructions
10
+ * .env.example - Required environment variables
11
+ * CLAUDE.md - AI coding assistant context
12
+ * .claude/settings.json - MCP server configuration
13
+ * agentlaunch.config.json - CLI auto-detection config
14
+ *
15
+ * Template mapping (old CLI types -> templates package names):
16
+ * faucet -> custom
17
+ * research -> research
18
+ * trading -> trading-bot
19
+ * data -> data-analyzer
20
+ * New template names (custom, price-monitor, trading-bot, data-analyzer,
21
+ * research, gifter) are accepted directly.
22
+ */
23
+ import { Command } from "commander";
24
+ export declare function registerScaffoldCommand(program: Command): void;
25
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoG9D"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * CLI-002: scaffold command
3
+ *
4
+ * agentlaunch scaffold <name> [--type faucet|research|trading|data|custom]
5
+ * [--template <name>]
6
+ *
7
+ * Generates an agent project directory with six files:
8
+ * agent.py - Agent code from agentlaunch-templates
9
+ * README.md - Quickstart instructions
10
+ * .env.example - Required environment variables
11
+ * CLAUDE.md - AI coding assistant context
12
+ * .claude/settings.json - MCP server configuration
13
+ * agentlaunch.config.json - CLI auto-detection config
14
+ *
15
+ * Template mapping (old CLI types -> templates package names):
16
+ * faucet -> custom
17
+ * research -> research
18
+ * trading -> trading-bot
19
+ * data -> data-analyzer
20
+ * New template names (custom, price-monitor, trading-bot, data-analyzer,
21
+ * research, gifter) are accepted directly.
22
+ */
23
+ import fs from "node:fs";
24
+ import path from "node:path";
25
+ import { generateFromTemplate, listTemplates, getTemplate, getCanonicalName } from "agentlaunch-templates";
26
+ /** Map legacy --type values to current template names. */
27
+ const LEGACY_TYPE_MAP = {
28
+ faucet: "custom",
29
+ research: "research",
30
+ trading: "trading-bot",
31
+ data: "data-analyzer",
32
+ genesis: "swarm-starter", // Legacy alias for swarm-starter
33
+ };
34
+ /** All valid --type / --template values accepted by the scaffold command. */
35
+ const VALID_TYPES = [
36
+ "chat-memory", // Base template (recommended for most agents)
37
+ "swarm-starter", // Full commerce stack
38
+ "faucet",
39
+ "research",
40
+ "trading",
41
+ "data",
42
+ "genesis", // Legacy alias
43
+ ...listTemplates().map((t) => getCanonicalName(t.name)),
44
+ ];
45
+ export function registerScaffoldCommand(program) {
46
+ program
47
+ .command("scaffold <name>")
48
+ .description("Generate an agent project from template in a new directory <name>")
49
+ .option("--type <type>", "Agent type: chat-memory (default), swarm-starter, custom, price-monitor, trading-bot, data-analyzer, research, gifter", "chat-memory")
50
+ .option("--json", "Output only JSON (machine-readable)")
51
+ .action((name, options) => {
52
+ const isJson = options.json === true;
53
+ const rawType = options.type;
54
+ // Resolve the template name: legacy map first, then direct name
55
+ const templateName = LEGACY_TYPE_MAP[rawType] ?? rawType;
56
+ // Validate by checking the templates registry (getTemplate handles aliases)
57
+ const templateMeta = getTemplate(templateName);
58
+ if (!templateMeta) {
59
+ const validList = VALID_TYPES.filter((v, i, arr) => arr.indexOf(v) === i).join(", ");
60
+ if (isJson) {
61
+ console.log(JSON.stringify({ error: `--type must be one of: ${validList}` }));
62
+ }
63
+ else {
64
+ console.error(`Error: --type must be one of: ${validList}`);
65
+ }
66
+ process.exit(1);
67
+ }
68
+ // Sanitize directory name
69
+ const dirName = name.replace(/[^a-zA-Z0-9_-]/g, "-").toLowerCase();
70
+ const targetDir = path.resolve(process.cwd(), dirName);
71
+ if (fs.existsSync(targetDir)) {
72
+ if (isJson) {
73
+ console.log(JSON.stringify({ error: `Directory "${dirName}" already exists.` }));
74
+ }
75
+ else {
76
+ console.error(`Error: Directory "${dirName}" already exists.`);
77
+ }
78
+ process.exit(1);
79
+ }
80
+ if (!isJson) {
81
+ console.log(`Scaffolding ${templateMeta.description} agent: ${name}`);
82
+ console.log(`Directory: ${targetDir}`);
83
+ }
84
+ // Generate all files from the templates package
85
+ const generated = generateFromTemplate(templateName, {
86
+ agent_name: name,
87
+ });
88
+ // Create directory structure
89
+ fs.mkdirSync(targetDir, { recursive: true });
90
+ fs.mkdirSync(path.join(targetDir, ".claude"), { recursive: true });
91
+ const files = {
92
+ "agent.py": generated.code,
93
+ "README.md": generated.readme,
94
+ ".env.example": generated.envExample,
95
+ "CLAUDE.md": generated.claudeMd,
96
+ ".claude/settings.json": generated.claudeSettings,
97
+ "agentlaunch.config.json": generated.agentlaunchConfig,
98
+ };
99
+ for (const [filename, content] of Object.entries(files)) {
100
+ const filePath = path.join(targetDir, filename);
101
+ fs.writeFileSync(filePath, content, "utf8");
102
+ if (!isJson)
103
+ console.log(` Created: ${filename}`);
104
+ }
105
+ if (isJson) {
106
+ console.log(JSON.stringify({
107
+ name,
108
+ type: rawType,
109
+ template: templateName,
110
+ directory: targetDir,
111
+ files: Object.keys(files),
112
+ }));
113
+ }
114
+ else {
115
+ console.log(`\nDone! Next steps:\n`);
116
+ console.log(` cd ${dirName}`);
117
+ console.log(` cp .env.example .env`);
118
+ console.log(` # Edit .env and agent.py`);
119
+ console.log(` agentlaunch deploy`);
120
+ }
121
+ });
122
+ }
123
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CLI: sell command
3
+ *
4
+ * agentlaunch sell <address> --amount <tokens> [--chain 97] [--dry-run] [--json]
5
+ *
6
+ * Executes a sell on a bonding curve token contract, or previews the trade with --dry-run.
7
+ */
8
+ import { Command } from "commander";
9
+ export declare function registerSellCommand(program: Command): void;
10
+ //# sourceMappingURL=sell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sell.d.ts","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0G1D"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * CLI: sell command
3
+ *
4
+ * agentlaunch sell <address> --amount <tokens> [--chain 97] [--dry-run] [--json]
5
+ *
6
+ * Executes a sell on a bonding curve token contract, or previews the trade with --dry-run.
7
+ */
8
+ import { calculateSell, sellTokens } from "agentlaunch-sdk";
9
+ import { getPublicClient } from "../http.js";
10
+ export function registerSellCommand(program) {
11
+ program
12
+ .command("sell <address>")
13
+ .description("Sell tokens on a bonding curve (on-chain or dry-run preview)")
14
+ .requiredOption("--amount <tokens>", "Amount of tokens to sell")
15
+ .option("--chain <chainId>", "Chain ID (97=BSC Testnet, 56=BSC Mainnet)", "97")
16
+ .option("--dry-run", "Preview the trade without executing (no wallet needed)")
17
+ .option("--json", "Output raw JSON (machine-readable)")
18
+ .action(async (address, options) => {
19
+ // Validate address
20
+ if (!address.startsWith("0x") || address.length < 10) {
21
+ if (options.json) {
22
+ console.log(JSON.stringify({ error: "Invalid token address. Must start with 0x." }));
23
+ }
24
+ else {
25
+ console.error("Error: Invalid token address. Must start with 0x.");
26
+ }
27
+ process.exit(1);
28
+ }
29
+ // Validate amount
30
+ const amount = parseFloat(options.amount);
31
+ if (isNaN(amount) || amount <= 0) {
32
+ if (options.json) {
33
+ console.log(JSON.stringify({ error: "Amount must be a positive number." }));
34
+ }
35
+ else {
36
+ console.error("Error: Amount must be a positive number.");
37
+ }
38
+ process.exit(1);
39
+ }
40
+ // Validate chain
41
+ const chainId = parseInt(options.chain, 10);
42
+ if (![97, 56].includes(chainId)) {
43
+ if (options.json) {
44
+ console.log(JSON.stringify({ error: "Supported chains: 97 (BSC Testnet), 56 (BSC Mainnet)" }));
45
+ }
46
+ else {
47
+ console.error("Error: Supported chains: 97 (BSC Testnet), 56 (BSC Mainnet)");
48
+ }
49
+ process.exit(1);
50
+ }
51
+ try {
52
+ if (options.dryRun) {
53
+ // Dry run: just calculate
54
+ const client = getPublicClient();
55
+ const result = await calculateSell(address, options.amount, client);
56
+ if (options.json) {
57
+ console.log(JSON.stringify({ dryRun: true, ...result }));
58
+ return;
59
+ }
60
+ const chainName = chainId === 56 ? "BSC Mainnet" : "BSC Testnet";
61
+ console.log(`\n${"=".repeat(50)}`);
62
+ console.log("SELL PREVIEW (dry run)");
63
+ console.log(`${"=".repeat(50)}`);
64
+ console.log(`Token: ${address}`);
65
+ console.log(`Chain: ${chainName}`);
66
+ console.log(`Tokens to sell: ${options.amount}`);
67
+ console.log(`FET to receive: ${result.fetReceived} FET`);
68
+ console.log(`Price per token: ${result.pricePerToken} FET`);
69
+ console.log(`Price impact: ${result.priceImpact}%`);
70
+ console.log(`Protocol fee: ${result.fee} FET (2% to treasury)`);
71
+ console.log(`Net FET received: ${result.netFetReceived} FET`);
72
+ console.log(`${"=".repeat(50)}`);
73
+ console.log("\nRe-run without --dry-run to execute the trade.\n");
74
+ return;
75
+ }
76
+ // Real execution
77
+ const result = await sellTokens(address, options.amount, {
78
+ chainId,
79
+ });
80
+ if (options.json) {
81
+ console.log(JSON.stringify(result));
82
+ return;
83
+ }
84
+ const chainName = chainId === 56 ? "BSC Mainnet" : "BSC Testnet";
85
+ console.log(`\n${"=".repeat(50)}`);
86
+ console.log("SELL EXECUTED");
87
+ console.log(`${"=".repeat(50)}`);
88
+ console.log(`Token: ${address}`);
89
+ console.log(`Chain: ${chainName}`);
90
+ console.log(`Tx Hash: ${result.txHash}`);
91
+ console.log(`Block: ${result.blockNumber}`);
92
+ console.log(`Tokens sold: ${result.tokensSold}`);
93
+ console.log(`FET received: ${result.fetReceived} FET`);
94
+ console.log(`Protocol fee: ${result.fee} FET (2% to treasury)`);
95
+ console.log(`Price impact: ${result.priceImpact}%`);
96
+ console.log(`${"=".repeat(50)}\n`);
97
+ }
98
+ catch (err) {
99
+ if (options.json) {
100
+ console.log(JSON.stringify({ error: err.message }));
101
+ }
102
+ else {
103
+ console.error(`Error: ${err.message}`);
104
+ }
105
+ process.exit(1);
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=sell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sell.js","sourceRoot":"","sources":["../../src/commands/sell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CLI-004: status command
3
+ *
4
+ * agentlaunch status <address> [--json]
5
+ *
6
+ * Fetches a token from GET /token/<address> and shows its details.
7
+ */
8
+ import { Command } from "commander";
9
+ export declare function registerStatusCommand(program: Command): void;
10
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyF5D"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * CLI-004: status command
3
+ *
4
+ * agentlaunch status <address> [--json]
5
+ *
6
+ * Fetches a token from GET /token/<address> and shows its details.
7
+ */
8
+ import { getFrontendUrl } from "agentlaunch-sdk";
9
+ import { getPublicClient } from "../http.js";
10
+ export function registerStatusCommand(program) {
11
+ program
12
+ .command("status <address>")
13
+ .description("Show detailed status of a token by its contract address")
14
+ .option("--json", "Output raw JSON (machine-readable)")
15
+ .action(async (address, options) => {
16
+ if (!address || address.trim().length < 10) {
17
+ if (options.json) {
18
+ console.log(JSON.stringify({ error: "Invalid token address" }));
19
+ }
20
+ else {
21
+ console.error("Error: Please provide a valid token contract address.");
22
+ }
23
+ process.exit(1);
24
+ }
25
+ let response;
26
+ try {
27
+ const client = getPublicClient();
28
+ response = await client.get(`/tokens/address/${address.trim()}`);
29
+ }
30
+ catch (err) {
31
+ if (options.json) {
32
+ console.log(JSON.stringify({ error: err.message }));
33
+ }
34
+ else {
35
+ console.error(`Error: ${err.message}`);
36
+ }
37
+ process.exit(1);
38
+ }
39
+ // Normalize response shapes
40
+ const token = response.data ??
41
+ response.token ??
42
+ response;
43
+ if (options.json) {
44
+ console.log(JSON.stringify(token));
45
+ return;
46
+ }
47
+ // Pretty-print
48
+ const name = token.name ?? "-";
49
+ const symbol = token.symbol ?? "-";
50
+ const tokenAddress = token.token_address ?? token.address ?? address;
51
+ const price = formatPrice(token.price);
52
+ const marketCap = formatFet(token.marketCap ?? token.market_cap);
53
+ const holders = token.holders ?? token.holderCount ?? token.holder_count ?? 0;
54
+ const progress = formatProgress(token.progress);
55
+ const chainId = token.chainId ?? token.chain_id ?? 97;
56
+ const chainName = chainId === 56
57
+ ? "BSC Mainnet"
58
+ : chainId === 97
59
+ ? "BSC Testnet"
60
+ : `Chain ${chainId}`;
61
+ const isListed = token.listed === true || token.status === "listed";
62
+ const graduationStatus = isListed
63
+ ? "Listed on DEX"
64
+ : `Bonding curve (${progress} to 30,000 FET target)`;
65
+ const createdAt = token.createdAt ?? token.created_at;
66
+ console.log(`\n${"=".repeat(50)}`);
67
+ console.log(`TOKEN STATUS`);
68
+ console.log(`${"=".repeat(50)}`);
69
+ console.log(`Name: ${name}`);
70
+ console.log(`Symbol: ${symbol}`);
71
+ console.log(`Address: ${tokenAddress}`);
72
+ console.log(`Chain: ${chainName}`);
73
+ console.log(`Price: ${price}`);
74
+ console.log(`Market Cap: ${marketCap}`);
75
+ console.log(`Holders: ${holders}`);
76
+ console.log(`Progress: ${progress}`);
77
+ console.log(`Status: ${graduationStatus}`);
78
+ if (token.description) {
79
+ console.log(`Description: ${token.description}`);
80
+ }
81
+ if (createdAt) {
82
+ console.log(`Created: ${new Date(createdAt).toUTCString()}`);
83
+ }
84
+ console.log(`${"=".repeat(50)}`);
85
+ console.log(`\nView on platform: ${getFrontendUrl()}/trade/${tokenAddress}`);
86
+ console.log(`Trading fee: 2% -> 100% to protocol treasury\n`);
87
+ });
88
+ }
89
+ // --- helpers ---
90
+ function formatPrice(raw) {
91
+ if (raw === undefined || raw === null)
92
+ return "-";
93
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
94
+ if (isNaN(n))
95
+ return "-";
96
+ if (n === 0)
97
+ return "0 FET";
98
+ if (n < 0.000001)
99
+ return `${n.toExponential(4)} FET`;
100
+ if (n < 1)
101
+ return `${n.toFixed(8)} FET`;
102
+ return `${n.toFixed(4)} FET`;
103
+ }
104
+ function formatFet(raw) {
105
+ if (raw === undefined || raw === null)
106
+ return "-";
107
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
108
+ if (isNaN(n))
109
+ return "-";
110
+ if (n >= 1_000_000)
111
+ return `${(n / 1_000_000).toFixed(2)}M FET`;
112
+ if (n >= 1_000)
113
+ return `${(n / 1_000).toFixed(2)}K FET`;
114
+ return `${n.toFixed(2)} FET`;
115
+ }
116
+ function formatProgress(raw) {
117
+ if (raw === undefined || raw === null)
118
+ return "-";
119
+ const n = typeof raw === "string" ? parseFloat(raw) : raw;
120
+ if (isNaN(n))
121
+ return "-";
122
+ return `${Math.min(100, Math.max(0, n)).toFixed(2)}%`;
123
+ }
124
+ //# 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 /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;AAkCpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0Q9D"}