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.
- package/README.md +359 -0
- package/dist/__tests__/config.test.d.ts +20 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +155 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +56 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +22 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +493 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deploy.d.ts +18 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +220 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/list.d.ts +10 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +131 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/scaffold.d.ts +13 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +633 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +116 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tokenize.d.ts +16 -0
- package/dist/commands/tokenize.d.ts.map +1 -0
- package/dist/commands/tokenize.js +139 -0
- package/dist/commands/tokenize.js.map +1 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +68 -0
- package/dist/config.js.map +1 -0
- package/dist/http.d.ts +20 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +69 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- 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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"}
|
package/dist/config.d.ts
ADDED
|
@@ -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
|
package/dist/http.js.map
ADDED
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|