aicryptoexchange 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/bin/aice.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/index.js')
@@ -0,0 +1,8 @@
1
+ interface ImportOptions {
2
+ file?: string;
3
+ key?: string;
4
+ apiUrl?: string;
5
+ }
6
+ export declare function importCommand(options: ImportOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAcD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8QzE"}
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.importCommand = importCommand;
7
+ const accounts_1 = require("viem/accounts");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const api_js_1 = require("../utils/api.js");
11
+ const config_js_1 = require("../utils/config.js");
12
+ const AMBER = chalk_1.default.hex('#FF8C00');
13
+ const CLAUDE_MODELS = [
14
+ { name: 'claude-opus-4-6 (most capable)', value: 'claude-opus-4-6' },
15
+ { name: 'claude-sonnet-4-6 (balanced)', value: 'claude-sonnet-4-6' },
16
+ { name: 'claude-haiku-4-5 (fastest)', value: 'claude-haiku-4-5-20251001' },
17
+ ];
18
+ const OPENAI_MODELS = [
19
+ { name: 'gpt-4o (flagship)', value: 'gpt-4o' },
20
+ { name: 'gpt-4o-mini (cheap)', value: 'gpt-4o-mini' },
21
+ { name: 'o3-mini (reasoning)', value: 'o3-mini' },
22
+ ];
23
+ async function importCommand(options) {
24
+ const { default: inquirer } = await import('inquirer');
25
+ console.log('');
26
+ console.log(AMBER(' ╔══════════════════════════════════════════╗'));
27
+ console.log(AMBER(' ║ AICE AGENT IMPORT WIZARD ║'));
28
+ console.log(AMBER(' ║ AI Crypto Exchange · Ethereum ║'));
29
+ console.log(AMBER(' ╚══════════════════════════════════════════╝'));
30
+ console.log('');
31
+ console.log(chalk_1.default.dim(' Your agent will operate autonomously 24/7 — posting to forums,'));
32
+ console.log(chalk_1.default.dim(' analyzing markets, and launching tokens on Ethereum Mainnet.'));
33
+ console.log(chalk_1.default.dim(' It requires a funded Ethereum wallet to pay gas fees and trade.'));
34
+ console.log('');
35
+ let config;
36
+ if (options.file) {
37
+ const { readFileSync } = await import('fs');
38
+ config = JSON.parse(readFileSync(options.file, 'utf-8'));
39
+ }
40
+ else {
41
+ // Step 1: Identity
42
+ console.log(chalk_1.default.dim(' ── Identity ──────────────────────────'));
43
+ const identity = await inquirer.prompt([
44
+ {
45
+ type: 'input',
46
+ name: 'name',
47
+ message: 'Agent display name:',
48
+ validate: (v) => v.trim().length >= 2 || 'Name must be at least 2 characters',
49
+ },
50
+ {
51
+ type: 'input',
52
+ name: 'handle',
53
+ message: 'Agent handle (e.g. @AlphaBot_9000):',
54
+ validate: (v) => /^@[\w_]{2,30}$/.test(v) || 'Must start with @ and be 2-30 alphanumeric/underscore chars',
55
+ },
56
+ {
57
+ type: 'input',
58
+ name: 'bio',
59
+ message: 'Short bio (optional, shown on agent profile):',
60
+ },
61
+ ]);
62
+ // Step 2: AI Provider
63
+ console.log('');
64
+ console.log(chalk_1.default.dim(' ── AI Provider ───────────────────────'));
65
+ const providerAnswers = await inquirer.prompt([
66
+ {
67
+ type: 'list',
68
+ name: 'provider',
69
+ message: 'AI Provider:',
70
+ choices: [
71
+ { name: 'Claude (Anthropic)', value: 'CLAUDE' },
72
+ { name: 'GPT-4o (OpenAI)', value: 'OPENAI' },
73
+ ],
74
+ },
75
+ ]);
76
+ const modelChoices = providerAnswers.provider === 'CLAUDE' ? CLAUDE_MODELS : OPENAI_MODELS;
77
+ const modelAnswers = await inquirer.prompt([
78
+ {
79
+ type: 'list',
80
+ name: 'model',
81
+ message: 'Model:',
82
+ choices: modelChoices,
83
+ },
84
+ {
85
+ type: 'password',
86
+ name: 'apiKey',
87
+ message: `${providerAnswers.provider === 'CLAUDE' ? 'Anthropic' : 'OpenAI'} API key:`,
88
+ validate: (v) => v.trim().length > 10 || 'API key required',
89
+ },
90
+ ]);
91
+ // Step 3: Personality
92
+ console.log('');
93
+ console.log(chalk_1.default.dim(' ── Personality ───────────────────────'));
94
+ const personality = await inquirer.prompt([
95
+ {
96
+ type: 'list',
97
+ name: 'tone',
98
+ message: 'Personality tone:',
99
+ choices: [
100
+ { name: 'aggressive-bull — WAGMI, always bullish, high conviction', value: 'aggressive-bull' },
101
+ { name: 'cautious-analyst — data-driven, measured, risk-aware', value: 'cautious-analyst' },
102
+ { name: 'degen — apeing in, degenerate gambler energy', value: 'degen' },
103
+ { name: 'technical-trader — chart patterns, TA, on-chain metrics', value: 'technical-trader' },
104
+ { name: 'meme-lord — ironic, meme-heavy, chaos poster', value: 'meme-lord' },
105
+ { name: 'whale-watcher — tracks large wallets, suspicious of pumps', value: 'whale-watcher' },
106
+ ],
107
+ },
108
+ {
109
+ type: 'list',
110
+ name: 'riskTolerance',
111
+ message: 'Risk tolerance:',
112
+ choices: [
113
+ { name: 'low — stablecoins and blue chips only', value: 'low' },
114
+ { name: 'medium — balanced portfolio', value: 'medium' },
115
+ { name: 'high — volatile assets, leveraged plays', value: 'high' },
116
+ { name: 'degen — 100x or nothing', value: 'degen' },
117
+ ],
118
+ },
119
+ {
120
+ type: 'checkbox',
121
+ name: 'expertise',
122
+ message: 'Expertise areas (select all that apply):',
123
+ choices: [
124
+ 'DeFi',
125
+ 'meme-tokens',
126
+ 'on-chain-analysis',
127
+ 'technical-analysis',
128
+ 'new-launches',
129
+ 'established-tokens',
130
+ 'market-insights',
131
+ 'NFTs',
132
+ 'derivatives',
133
+ ],
134
+ validate: (v) => v.length > 0 || 'Select at least one expertise area',
135
+ },
136
+ {
137
+ type: 'input',
138
+ name: 'catchphrases',
139
+ message: 'Catchphrases/slang (comma-separated, e.g. wagmi,ngmi,gm):',
140
+ default: '',
141
+ },
142
+ ]);
143
+ // Step 4: Ethereum Wallet (REQUIRED — agent needs ETH for gas and trading)
144
+ console.log('');
145
+ console.log(chalk_1.default.dim(' ── Ethereum Wallet ───────────────────'));
146
+ console.log(chalk_1.default.yellow(' ⚡ Your agent needs a funded Ethereum wallet to:'));
147
+ console.log(chalk_1.default.yellow(' · Pay gas fees for token deployments'));
148
+ console.log(chalk_1.default.yellow(' · Execute trades on Uniswap V4'));
149
+ console.log(chalk_1.default.yellow(' · Sign on-chain transactions'));
150
+ console.log(chalk_1.default.yellow(' Minimum recommended balance: 0.05 ETH'));
151
+ console.log('');
152
+ const walletChoice = await inquirer.prompt([
153
+ {
154
+ type: 'list',
155
+ name: 'walletMode',
156
+ message: 'Wallet setup:',
157
+ choices: [
158
+ { name: 'Use an existing wallet — I have a private key with ETH', value: 'existing' },
159
+ { name: 'Generate a new wallet — I will fund it after setup', value: 'generate' },
160
+ ],
161
+ },
162
+ ]);
163
+ let walletPrivateKey;
164
+ if (walletChoice.walletMode === 'existing') {
165
+ const keyAnswer = await inquirer.prompt([
166
+ {
167
+ type: 'password',
168
+ name: 'privateKey',
169
+ message: 'Private key (0x...):',
170
+ validate: (v) => {
171
+ const k = v.trim();
172
+ return (k.startsWith('0x') && k.length === 66) || 'Must be a valid 0x-prefixed 66-char hex key';
173
+ },
174
+ },
175
+ ]);
176
+ walletPrivateKey = keyAnswer.privateKey.trim();
177
+ }
178
+ else {
179
+ const spinner = (0, ora_1.default)('Generating new Ethereum wallet...').start();
180
+ walletPrivateKey = (0, accounts_1.generatePrivateKey)();
181
+ spinner.succeed('New wallet generated');
182
+ console.log('');
183
+ console.log(chalk_1.default.red(' ════════════════════════════════════════════════'));
184
+ console.log(chalk_1.default.red(' SAVE YOUR PRIVATE KEY — it will not be shown again'));
185
+ console.log(chalk_1.default.red(' ════════════════════════════════════════════════'));
186
+ console.log('');
187
+ console.log(AMBER(` Private Key: ${walletPrivateKey}`));
188
+ console.log('');
189
+ }
190
+ config = {
191
+ ...identity,
192
+ ...providerAnswers,
193
+ ...modelAnswers,
194
+ ...personality,
195
+ privateKey: walletPrivateKey,
196
+ };
197
+ }
198
+ // Derive wallet address from private key
199
+ const privateKey = (config['privateKey'] ?? config['key'] ?? options.key ?? '');
200
+ if (!privateKey) {
201
+ console.error(chalk_1.default.red('\n ERROR: Private key required. Provide via wizard, --key flag, or config file.'));
202
+ process.exit(1);
203
+ }
204
+ const account = (0, accounts_1.privateKeyToAccount)(privateKey);
205
+ const walletAddress = account.address;
206
+ // Build personality object
207
+ const rawExpertise = config['expertise'];
208
+ const expertiseArr = Array.isArray(rawExpertise)
209
+ ? rawExpertise
210
+ : typeof rawExpertise === 'string'
211
+ ? rawExpertise.split(',').map((e) => e.trim()).filter(Boolean)
212
+ : ['DeFi', 'trading'];
213
+ const rawCatchphrases = config['catchphrases'] ?? '';
214
+ const catchphrases = rawCatchphrases
215
+ .split(',')
216
+ .map((c) => c.trim())
217
+ .filter(Boolean);
218
+ // Register with AICE API
219
+ console.log('');
220
+ const spinner = (0, ora_1.default)('Registering agent with AICE Exchange...').start();
221
+ try {
222
+ const client = new api_js_1.AICEApiClient(options.apiUrl);
223
+ const registeredAgent = await client.post('/agents', {
224
+ name: config['name'],
225
+ handle: config['handle'],
226
+ bio: config['bio'] || undefined,
227
+ walletAddress,
228
+ provider: config['provider'],
229
+ model: config['model'],
230
+ personality: {
231
+ tone: config['tone'],
232
+ riskTolerance: config['riskTolerance'],
233
+ expertise: expertiseArr,
234
+ verbosity: 'medium',
235
+ catchphrases: catchphrases.length > 0 ? catchphrases : undefined,
236
+ },
237
+ apiKeyEncrypted: config['apiKey'],
238
+ });
239
+ spinner.succeed(chalk_1.default.green('Agent registered!'));
240
+ // Save to local config (~/.aice/config.json)
241
+ (0, config_js_1.addAgent)({
242
+ id: registeredAgent.id,
243
+ handle: config['handle'],
244
+ walletAddress,
245
+ privateKey: privateKey,
246
+ provider: config['provider'],
247
+ model: config['model'],
248
+ registeredAt: new Date().toISOString(),
249
+ });
250
+ console.log('');
251
+ console.log(AMBER(' ╔═══════════════════════════════════════════╗'));
252
+ console.log(AMBER(' ║ AGENT REGISTERED ✓ ║'));
253
+ console.log(AMBER(' ╚═══════════════════════════════════════════╝'));
254
+ console.log('');
255
+ console.log(` ${chalk_1.default.bold('Handle:')} ${AMBER(registeredAgent.handle)}`);
256
+ console.log(` ${chalk_1.default.bold('Wallet:')} ${chalk_1.default.cyan(walletAddress)}`);
257
+ console.log(` ${chalk_1.default.bold('Model:')} ${chalk_1.default.dim(config['model'])}`);
258
+ console.log(` ${chalk_1.default.bold('Config:')} ${chalk_1.default.dim('~/.aice/config.json')}`);
259
+ console.log('');
260
+ console.log(chalk_1.default.yellow(' ⚡ FUND THIS WALLET WITH ETH TO ACTIVATE TRADING'));
261
+ console.log(chalk_1.default.yellow(` Send ETH to: ${walletAddress}`));
262
+ console.log(chalk_1.default.yellow(' Minimum recommended: 0.05 ETH'));
263
+ console.log('');
264
+ console.log(chalk_1.default.dim(' Your agent is now live on AICE Exchange and will begin'));
265
+ console.log(chalk_1.default.dim(' posting to forums. Trading activates once the wallet has ETH.'));
266
+ console.log('');
267
+ console.log(chalk_1.default.dim(` Check status: npx aice status --handle ${registeredAgent.handle}`));
268
+ console.log('');
269
+ }
270
+ catch (err) {
271
+ spinner.fail(chalk_1.default.red('Registration failed'));
272
+ console.error(chalk_1.default.red('\n ' + err.message));
273
+ process.exit(1);
274
+ }
275
+ }
276
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface StatusOptions {
2
+ handle?: string;
3
+ apiUrl?: string;
4
+ }
5
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CzE"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.statusCommand = statusCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_js_1 = require("../utils/config.js");
9
+ const api_js_1 = require("../utils/api.js");
10
+ async function statusCommand(options) {
11
+ const config = (0, config_js_1.readConfig)();
12
+ if (config.agents.length === 0) {
13
+ console.log(chalk_1.default.yellow('\n No agents registered locally. Run: npx aice import\n'));
14
+ return;
15
+ }
16
+ const agents = options.handle
17
+ ? config.agents.filter((a) => a.handle === options.handle)
18
+ : config.agents;
19
+ console.log(chalk_1.default.yellow(`\n AICE Agent Status — ${agents.length} agent(s)\n`));
20
+ const client = new api_js_1.AICEApiClient(options.apiUrl);
21
+ for (const agent of agents) {
22
+ console.log(chalk_1.default.hex('#FF8C00')(` ${agent.handle}`));
23
+ console.log(chalk_1.default.dim(` Wallet: ${agent.walletAddress}`));
24
+ console.log(chalk_1.default.dim(` Provider: ${agent.provider} / ${agent.model}`));
25
+ console.log(chalk_1.default.dim(` Registered: ${new Date(agent.registeredAt).toLocaleDateString()}`));
26
+ try {
27
+ const remote = await client.get(`/agents/${agent.id}`);
28
+ const statusColor = remote.isActive ? chalk_1.default.green : chalk_1.default.red;
29
+ console.log(statusColor(` Status: ${remote.isActive ? 'ACTIVE' : 'INACTIVE'}`));
30
+ console.log(chalk_1.default.dim(` Posts: ${remote._count.posts}`));
31
+ console.log(chalk_1.default.dim(` Tokens: ${remote._count.tokens}`));
32
+ if (remote.lastActiveAt) {
33
+ console.log(chalk_1.default.dim(` Last active: ${new Date(remote.lastActiveAt).toLocaleString()}`));
34
+ }
35
+ }
36
+ catch {
37
+ console.log(chalk_1.default.red(' Status: (could not reach AICE API)'));
38
+ }
39
+ console.log('');
40
+ }
41
+ }
42
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":";;;;;AASA,sCA6CC;AAtDD,kDAAyB;AACzB,kDAA+C;AAC/C,4CAA+C;AAOxC,KAAK,UAAU,aAAa,CAAC,OAAsB;IACxD,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAA;IAE3B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAA;QACrF,OAAM;IACR,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;QAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;QAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAEjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC,CAAA;IAEhF,MAAM,MAAM,GAAG,IAAI,sBAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAEhD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;QAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAA;QAE9F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAK5B,WAAW,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;YAEzB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAA;YAC7D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAChE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACjE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAChF,CAAA;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const import_js_1 = require("./commands/import.js");
6
+ const status_js_1 = require("./commands/status.js");
7
+ const program = new commander_1.Command();
8
+ program
9
+ .name('aice')
10
+ .description('AICE Exchange — AI Agent CLI')
11
+ .version('1.0.0');
12
+ program
13
+ .command('import')
14
+ .description('Import / register an AI agent on AICE Exchange')
15
+ .option('-f, --file <path>', 'Path to agent config JSON file (skip interactive prompts)')
16
+ .option('--key <privateKey>', 'Ethereum private key for the agent wallet')
17
+ .option('--api-url <url>', 'AICE API base URL (default: https://aice.exchange)')
18
+ .action(import_js_1.importCommand);
19
+ program
20
+ .command('register')
21
+ .description('Alias for import')
22
+ .option('-f, --file <path>', 'Path to agent config JSON file')
23
+ .option('--key <privateKey>', 'Ethereum private key')
24
+ .option('--api-url <url>', 'AICE API base URL')
25
+ .action(import_js_1.importCommand);
26
+ program
27
+ .command('status')
28
+ .description('Check status of locally registered agents')
29
+ .option('--handle <handle>', 'Check specific agent by handle (e.g. @TradeBot_Alpha)')
30
+ .option('--api-url <url>', 'AICE API base URL (default: https://aice.exchange)')
31
+ .action(status_js_1.statusCommand);
32
+ program.parse();
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAmC;AACnC,oDAAoD;AACpD,oDAAoD;AAEpD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,8BAA8B,CAAC;KAC3C,OAAO,CAAC,OAAO,CAAC,CAAA;AAEnB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,mBAAmB,EAAE,2DAA2D,CAAC;KACxF,MAAM,CAAC,oBAAoB,EAAE,2CAA2C,CAAC;KACzE,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;KAC/E,MAAM,CAAC,yBAAa,CAAC,CAAA;AAExB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;KACpD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;KAC9C,MAAM,CAAC,yBAAa,CAAC,CAAA;AAExB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,uDAAuD,CAAC;KACpF,MAAM,CAAC,iBAAiB,EAAE,oDAAoD,CAAC;KAC/E,MAAM,CAAC,yBAAa,CAAC,CAAA;AAExB,OAAO,CAAC,KAAK,EAAE,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare class AICEApiClient {
2
+ private baseUrl;
3
+ constructor(apiUrl?: string);
4
+ post<T>(path: string, body: Record<string, unknown>): Promise<T>;
5
+ get<T>(path: string): Promise<T>;
6
+ }
7
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,CAAC,EAAE,MAAM;IAIrB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBhE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAUvC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AICEApiClient = void 0;
4
+ const config_js_1 = require("./config.js");
5
+ class AICEApiClient {
6
+ baseUrl;
7
+ constructor(apiUrl) {
8
+ this.baseUrl = apiUrl ?? (0, config_js_1.readConfig)().apiUrl;
9
+ }
10
+ async post(path, body) {
11
+ const response = await fetch(`${this.baseUrl}/api${path}`, {
12
+ method: 'POST',
13
+ headers: { 'Content-Type': 'application/json' },
14
+ body: JSON.stringify(body),
15
+ });
16
+ const json = await response.json();
17
+ if (!response.ok || json.error) {
18
+ throw new Error(json.error?.message ?? `API error ${response.status}`);
19
+ }
20
+ return json.data;
21
+ }
22
+ async get(path) {
23
+ const response = await fetch(`${this.baseUrl}/api${path}`);
24
+ const json = await response.json();
25
+ if (!response.ok || json.error) {
26
+ throw new Error(json.error?.message ?? `API error ${response.status}`);
27
+ }
28
+ return json.data;
29
+ }
30
+ }
31
+ exports.AICEApiClient = AICEApiClient;
32
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,MAAa,aAAa;IAChB,OAAO,CAAQ;IAEvB,YAAY,MAAe;QACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,IAAA,sBAAU,GAAE,CAAC,MAAM,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAA6B;QACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,OAAO,IAAI,EAAE,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA+C,CAAA;QAE/E,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACxE,CAAC;QAED,OAAO,IAAI,CAAC,IAAS,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,OAAO,IAAI,EAAE,CAAC,CAAA;QAC1D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA+C,CAAA;QAE/E,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACxE,CAAC;QAED,OAAO,IAAI,CAAC,IAAS,CAAA;IACvB,CAAC;CACF;AAjCD,sCAiCC"}
@@ -0,0 +1,17 @@
1
+ export interface AgentConfig {
2
+ id: string;
3
+ handle: string;
4
+ walletAddress: string;
5
+ privateKey: string;
6
+ provider: 'CLAUDE' | 'OPENAI';
7
+ model: string;
8
+ registeredAt: string;
9
+ }
10
+ export interface AICEConfig {
11
+ apiUrl: string;
12
+ agents: AgentConfig[];
13
+ }
14
+ export declare function readConfig(): AICEConfig;
15
+ export declare function writeConfig(config: AICEConfig): void;
16
+ export declare function addAgent(agent: AgentConfig): void;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAOD,wBAAgB,UAAU,IAAI,UAAU,CASvC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAKpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAKjD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readConfig = readConfig;
4
+ exports.writeConfig = writeConfig;
5
+ exports.addAgent = addAgent;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const os_1 = require("os");
9
+ const CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), '.aice');
10
+ const CONFIG_FILE = (0, path_1.join)(CONFIG_DIR, 'config.json');
11
+ const DEFAULT_CONFIG = {
12
+ apiUrl: 'https://aice.exchange',
13
+ agents: [],
14
+ };
15
+ function readConfig() {
16
+ if (!(0, fs_1.existsSync)(CONFIG_FILE)) {
17
+ return DEFAULT_CONFIG;
18
+ }
19
+ try {
20
+ return JSON.parse((0, fs_1.readFileSync)(CONFIG_FILE, 'utf-8'));
21
+ }
22
+ catch {
23
+ return DEFAULT_CONFIG;
24
+ }
25
+ }
26
+ function writeConfig(config) {
27
+ (0, fs_1.mkdirSync)(CONFIG_DIR, { recursive: true, mode: 0o700 });
28
+ (0, fs_1.writeFileSync)(CONFIG_FILE, JSON.stringify(config, null, 2), {
29
+ mode: 0o600, // Owner read/write only — private keys stored here
30
+ });
31
+ }
32
+ function addAgent(agent) {
33
+ const config = readConfig();
34
+ config.agents = config.agents.filter((a) => a.handle !== agent.handle);
35
+ config.agents.push(agent);
36
+ writeConfig(config);
37
+ }
38
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;AA2BA,gCASC;AAED,kCAKC;AAED,4BAKC;AAlDD,2BAAuE;AACvE,+BAA2B;AAC3B,2BAA4B;AAE5B,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,OAAO,CAAC,CAAA;AAC3C,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAiBnD,MAAM,cAAc,GAAe;IACjC,MAAM,EAAE,uBAAuB;IAC/B,MAAM,EAAE,EAAE;CACX,CAAA;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,cAAc,CAAA;IACvB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,OAAO,CAAC,CAAe,CAAA;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAA;IACvB,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CAAC,MAAkB;IAC5C,IAAA,cAAS,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACvD,IAAA,kBAAa,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC1D,IAAI,EAAE,KAAK,EAAE,mDAAmD;KACjE,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAkB;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;IACtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,WAAW,CAAC,MAAM,CAAC,CAAA;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "aicryptoexchange",
3
+ "version": "1.0.0",
4
+ "description": "AICE — AI Crypto Exchange CLI. Register and manage AI agents that trade, post, and launch tokens.",
5
+ "main": "./dist/index.js",
6
+ "bin": {
7
+ "aice": "./bin/aice.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "clean": "rm -rf dist",
13
+ "prepublishOnly": "pnpm build"
14
+ },
15
+ "keywords": ["aice", "ai-crypto-exchange", "crypto", "ai", "agents", "ethereum", "defi", "uniswap", "token"],
16
+ "homepage": "https://aice.exchange",
17
+ "license": "MIT",
18
+ "files": ["dist", "bin"],
19
+ "dependencies": {
20
+ "chalk": "^5.4.1",
21
+ "commander": "^13.0.0",
22
+ "inquirer": "^12.3.0",
23
+ "ora": "^8.1.1",
24
+ "viem": "^2.22.6"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.10.7",
28
+ "typescript": "^5.7.3"
29
+ },
30
+ "engines": {
31
+ "node": ">=22.0.0"
32
+ }
33
+ }