fuego-cli 1.1.0 → 1.1.1

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 CHANGED
@@ -70,8 +70,8 @@ fuego dashboard
70
70
  | `fuego create` | Create a new Solana wallet |
71
71
  | `fuego address` | Show your wallet address |
72
72
  | `fuego balance` | Check SOL, USDC, USDT balances |
73
- | `fuego addrpc` | Configure your Solana RPC endpoint |
74
- | `fuego addbook` | Manage your address book |
73
+ | `fuego rpc` | Show or configure your Solana RPC endpoint |
74
+ | `fuego contacts` | Manage your contacts |
75
75
  | `fuego send` | Send SOL, USDC, or USDT to an address or contact |
76
76
 
77
77
  ### Project Management
@@ -191,19 +191,19 @@ fuego update --fuego
191
191
 
192
192
  ---
193
193
 
194
- ### `fuego addrpc [options]`
194
+ ### `fuego rpc [options]`
195
195
 
196
- Configure your Solana RPC endpoint for faster or more reliable connections.
196
+ Show or configure your Solana RPC endpoint for faster or more reliable connections.
197
197
 
198
198
  ```bash
199
199
  # Show current RPC configuration
200
- fuego addrpc
200
+ fuego rpc
201
201
 
202
202
  # Set a custom RPC endpoint
203
- fuego addrpc --url https://helius.xyz/... --network mainnet
203
+ fuego rpc --url https://helius.xyz/... --network mainnet
204
204
 
205
205
  # Use public mainnet
206
- fuego addrpc --url https://api.mainnet-beta.solana.com
206
+ fuego rpc --url https://api.mainnet-beta.solana.com
207
207
  ```
208
208
 
209
209
  **Options:**
@@ -212,22 +212,22 @@ fuego addrpc --url https://api.mainnet-beta.solana.com
212
212
 
213
213
  ---
214
214
 
215
- ### `fuego addbook <subcommand>`
215
+ ### `fuego contacts <subcommand>`
216
216
 
217
- Manage your address book for quick access to frequently used addresses.
217
+ Manage your contacts for quick access to frequently used addresses.
218
218
 
219
219
  ```bash
220
220
  # Add a contact
221
- fuego addbook add melanie GvCoHGGBR97Yphzc6SrRycZyS31oUYBM8m9hLRtJT7r5 --label "Melanie's wallet"
221
+ fuego contacts add melanie GvCoHGGBR97Yphzc6SrRycZyS31oUYBM8m9hLRtJT7r5 --label "Melanie's wallet"
222
222
 
223
223
  # List all contacts
224
- fuego addbook list
224
+ fuego contacts list
225
225
 
226
226
  # Show specific contact
227
- fuego addbook show melanie
227
+ fuego contacts show melanie
228
228
 
229
229
  # Remove contact (with confirmation)
230
- fuego addbook remove melanie --yes
230
+ fuego contacts remove melanie --yes
231
231
  ```
232
232
 
233
233
  **Storage:** `~/.fuego/contacts/address-book.json`
@@ -248,7 +248,7 @@ Send SOL, USDC, or USDT to a Solana address or address book contact.
248
248
  # Send SOL to an address
249
249
  fuego send GvCoHGGBR97Yphzc6SrRycZyS31oUYBM8m9hLRtJT7r5 0.5 --token SOL
250
250
 
251
- # Send USDC to an address book contact
251
+ # Send USDC to a contact
252
252
  fuego send melanie 10 --token USDC
253
253
 
254
254
  # Send and confirm immediately
@@ -261,7 +261,7 @@ fuego send melanie 5 --token USDT --yes
261
261
 
262
262
  **Recipient can be:**
263
263
  - A full Solana address (e.g., `GvCoHGGBR97Yphzc6SrRycZyS31oUYBM8m9hLRtJT7r5`)
264
- - An address book contact name (e.g., `melanie`)
264
+ - A contact name (e.g., `melanie`)
265
265
 
266
266
  **Safety:** By default, `fuego send` shows a transaction preview and requires `--yes` to confirm. This prevents accidental sends.
267
267
 
@@ -0,0 +1,9 @@
1
+ export declare function contactsAddCommand(name: string, address: string, options: {
2
+ label?: string;
3
+ }): Promise<void>;
4
+ export declare function contactsListCommand(): Promise<void>;
5
+ export declare function contactsShowCommand(name: string): Promise<void>;
6
+ export declare function contactsRemoveCommand(name: string, options: {
7
+ yes?: boolean;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AAqCA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqClH;AAGD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzD;AAGD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrE;AAGD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BnG"}
@@ -0,0 +1,111 @@
1
+ import chalk from 'chalk';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { showSuccess, showInfo, showWarning, flameDivider } from '../lib/ascii.js';
6
+ const CONTACTS_DIR = path.join(os.homedir(), '.fuego', 'contacts');
7
+ const ADDRESS_BOOK_FILE = path.join(CONTACTS_DIR, 'address-book.json');
8
+ function loadAddressBook() {
9
+ if (!fs.existsSync(ADDRESS_BOOK_FILE)) {
10
+ return {};
11
+ }
12
+ return fs.readJsonSync(ADDRESS_BOOK_FILE);
13
+ }
14
+ function saveAddressBook(book) {
15
+ fs.ensureDirSync(CONTACTS_DIR);
16
+ fs.writeJsonSync(ADDRESS_BOOK_FILE, book, { spaces: 2 });
17
+ }
18
+ function isValidSolanaAddress(address) {
19
+ // Basic Solana address validation (32-44 chars, base58)
20
+ return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);
21
+ }
22
+ // Add a contact
23
+ export async function contactsAddCommand(name, address, options) {
24
+ console.log();
25
+ if (!name || !address) {
26
+ console.log(chalk.red('❌ Usage: fuego contacts add <name> <address> [--label "description"]'));
27
+ process.exit(1);
28
+ }
29
+ // Validate address
30
+ if (!isValidSolanaAddress(address)) {
31
+ console.log(chalk.red('❌ Invalid Solana address format.'));
32
+ process.exit(1);
33
+ }
34
+ const book = loadAddressBook();
35
+ // Check if name already exists
36
+ if (book[name]) {
37
+ showWarning(`Contact "${name}" already exists.\n\nUse a different name or remove the existing contact first.`);
38
+ return;
39
+ }
40
+ // Add contact
41
+ book[name] = {
42
+ address,
43
+ label: options.label,
44
+ addedAt: new Date().toISOString()
45
+ };
46
+ saveAddressBook(book);
47
+ showSuccess('✅ Contact Added', `Name: ${chalk.cyan(name)}\nAddress: ${chalk.cyan(address.slice(0, 8))}...${chalk.cyan(address.slice(-8))}${options.label ? '\nLabel: ' + chalk.cyan(options.label) : ''}`);
48
+ flameDivider();
49
+ }
50
+ // List all contacts
51
+ export async function contactsListCommand() {
52
+ console.log();
53
+ const book = loadAddressBook();
54
+ const contacts = Object.entries(book);
55
+ if (contacts.length === 0) {
56
+ showInfo('📒 Contacts', ['No contacts yet.', '', chalk.yellow('Add one: fuego contacts add <name> <address>')]);
57
+ flameDivider();
58
+ return;
59
+ }
60
+ const lines = [`${contacts.length} contact${contacts.length === 1 ? '' : 's'}\n`];
61
+ for (const [name, entry] of contacts) {
62
+ const shortAddr = `${entry.address.slice(0, 6)}...${entry.address.slice(-6)}`;
63
+ lines.push(`${chalk.cyan(name)}: ${chalk.white(shortAddr)}${entry.label ? chalk.gray(` (${entry.label})`) : ''}`);
64
+ }
65
+ showInfo('📒 Contacts', lines);
66
+ flameDivider();
67
+ }
68
+ // Show a specific contact
69
+ export async function contactsShowCommand(name) {
70
+ console.log();
71
+ if (!name) {
72
+ console.log(chalk.red('❌ Usage: fuego contacts show <name>'));
73
+ process.exit(1);
74
+ }
75
+ const book = loadAddressBook();
76
+ const entry = book[name];
77
+ if (!entry) {
78
+ console.log(chalk.red(`❌ Contact "${name}" not found.`));
79
+ console.log(chalk.gray('\nUse "fuego contacts list" to see all contacts.'));
80
+ process.exit(1);
81
+ }
82
+ showInfo(`📇 ${name}`, [
83
+ `Address: ${chalk.white(entry.address)}`,
84
+ entry.label ? `Label: ${chalk.cyan(entry.label)}` : '',
85
+ `Added: ${chalk.gray(new Date(entry.addedAt).toLocaleDateString())}`
86
+ ].filter(Boolean));
87
+ flameDivider();
88
+ }
89
+ // Remove a contact
90
+ export async function contactsRemoveCommand(name, options) {
91
+ console.log();
92
+ if (!name) {
93
+ console.log(chalk.red('❌ Usage: fuego contacts remove <name> [--yes]'));
94
+ process.exit(1);
95
+ }
96
+ const book = loadAddressBook();
97
+ if (!book[name]) {
98
+ console.log(chalk.red(`❌ Contact "${name}" not found.`));
99
+ process.exit(1);
100
+ }
101
+ // Confirm unless --yes flag
102
+ if (!options.yes) {
103
+ showWarning(`About to remove "${name}" (${book[name].address.slice(0, 8)}...${book[name].address.slice(-8)})\n\nUse --yes to confirm, or omit to review.`);
104
+ return;
105
+ }
106
+ delete book[name];
107
+ saveAddressBook(book);
108
+ showSuccess('✅ Contact Removed', `Removed "${chalk.cyan(name)}" from contacts.`);
109
+ flameDivider();
110
+ }
111
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface RpcOptions {
2
+ url?: string;
3
+ network?: string;
4
+ }
5
+ export declare function rpcCommand(options: RpcOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/commands/rpc.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnE"}
@@ -0,0 +1,41 @@
1
+ import chalk from 'chalk';
2
+ import { setConfig, getConfig } from '../lib/config.js';
3
+ import { showSuccess, showInfo, flameDivider } from '../lib/ascii.js';
4
+ export async function rpcCommand(options) {
5
+ console.log(); // spacer
6
+ // If no URL provided, show current config and help
7
+ if (!options.url) {
8
+ const currentRpc = getConfig('rpcUrl');
9
+ const currentNetwork = getConfig('network');
10
+ showInfo('⚙️ Current RPC Configuration', [
11
+ `RPC URL: ${currentRpc ? chalk.cyan(currentRpc) : chalk.gray('Not set')}`,
12
+ `Network: ${currentNetwork ? chalk.cyan(currentNetwork) : chalk.gray('mainnet')}`,
13
+ '',
14
+ `${chalk.yellow('Usage:')} fuego rpc --url https://api.mainnet-beta.solana.com`,
15
+ `${chalk.yellow('Or:')} fuego rpc --url https://helius.xyz/... --network mainnet`
16
+ ]);
17
+ flameDivider();
18
+ return;
19
+ }
20
+ // Validate URL
21
+ try {
22
+ new URL(options.url);
23
+ }
24
+ catch {
25
+ console.log(chalk.red('❌ Invalid URL. Please provide a valid RPC endpoint.'));
26
+ process.exit(1);
27
+ }
28
+ // Set the RPC URL
29
+ setConfig('rpcUrl', options.url);
30
+ // Set network if provided, default to mainnet
31
+ const network = options.network || 'mainnet';
32
+ setConfig('network', network);
33
+ showSuccess('✅ RPC Configuration Updated', `URL: ${chalk.cyan(options.url)}\nNetwork: ${chalk.cyan(network)}`);
34
+ showInfo('💡 Tips', [
35
+ 'Premium RPCs (Helius, QuickNode) offer better performance',
36
+ 'Free public RPCs may have rate limits',
37
+ 'Your wallet address remains the same across networks'
38
+ ]);
39
+ flameDivider();
40
+ }
41
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/commands/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAc,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOtE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IAExB,mDAAmD;IACnD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAE5C,QAAQ,CAAC,+BAA+B,EAAE;YACxC,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACzE,YAAY,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACjF,EAAE;YACF,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,sDAAsD;YAC/E,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,+DAA+D;SACtF,CAAC,CAAC;QAEH,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,eAAe;IACf,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,8CAA8C;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IAC7C,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE9B,WAAW,CACT,6BAA6B,EAC7B,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACnE,CAAC;IAEF,QAAQ,CAAC,SAAS,EAAE;QAClB,2DAA2D;QAC3D,uCAAuC;QACvC,sDAAsD;KACvD,CAAC,CAAC;IAEH,YAAY,EAAE,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGzE"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqGzE"}
@@ -28,8 +28,10 @@ export async function updateCommand(options) {
28
28
  spinner.text = 'Updating fuego-cli...';
29
29
  execSync('npm install -g fuego-cli@latest', { stdio: 'pipe' });
30
30
  spinner.stop();
31
- setFuegoCliVersion(currentCliVersion);
32
- showSuccess('✅ fuego-cli updated!', `Version: ${chalk.cyan(currentCliVersion)}`);
31
+ // Get the NEW version after update
32
+ const newCliVersion = getFuegoCliVersion();
33
+ setFuegoCliVersion(newCliVersion);
34
+ showSuccess('✅ fuego-cli updated!', `Version: ${chalk.cyan(newCliVersion)}`);
33
35
  cliUpdated = true;
34
36
  }
35
37
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,10 +8,11 @@ import { balanceCommand } from './commands/balance.js';
8
8
  import { serveCommand } from './commands/serve.js';
9
9
  import { dashboardCommand } from './commands/dashboard.js';
10
10
  import { updateCommand } from './commands/update.js';
11
- import { addRpcCommand } from './commands/addrpc.js';
12
- import { addBookAddCommand, addBookListCommand, addBookShowCommand, addBookRemoveCommand } from './commands/addbook.js';
11
+ import { rpcCommand } from './commands/rpc.js';
12
+ import { contactsAddCommand, contactsListCommand, contactsShowCommand, contactsRemoveCommand } from './commands/contacts.js';
13
13
  import { sendCommand } from './commands/send.js';
14
14
  import { showBanner } from './lib/ascii.js';
15
+ import { getFuegoCliVersion } from './lib/config.js';
15
16
  async function main() {
16
17
  // Show banner for help and when no args provided
17
18
  const args = process.argv.slice(2);
@@ -22,7 +23,7 @@ async function main() {
22
23
  program
23
24
  .name('fuego')
24
25
  .description('🔥 Fuego CLI - Sovereign Solana wallet for AI agents')
25
- .version('0.1.0')
26
+ .version(getFuegoCliVersion())
26
27
  .configureOutput({
27
28
  outputError: (str, write) => write(chalk.red(str))
28
29
  });
@@ -64,32 +65,32 @@ async function main() {
64
65
  .option('--fuego', 'Update only the fuego project')
65
66
  .action(updateCommand);
66
67
  program
67
- .command('addrpc')
68
- .description('Add or update your Solana RPC endpoint')
68
+ .command('rpc')
69
+ .description('Show or configure your Solana RPC endpoint')
69
70
  .option('-u, --url <url>', 'RPC endpoint URL (e.g., https://api.mainnet-beta.solana.com)')
70
71
  .option('-n, --network <network>', 'Network type (mainnet, devnet, testnet)', 'mainnet')
71
- .action(addRpcCommand);
72
- const addbook = program
73
- .command('addbook')
74
- .description('Manage your address book (stored in ~/.fuego/contacts/address-book.json)');
75
- addbook
72
+ .action(rpcCommand);
73
+ const contacts = program
74
+ .command('contacts')
75
+ .description('Manage your contacts (stored in ~/.fuego/contacts/address-book.json)');
76
+ contacts
76
77
  .command('add <name> <address>')
77
- .description('Add a contact to your address book')
78
+ .description('Add a contact')
78
79
  .option('-l, --label <label>', 'Optional description/label for this contact')
79
- .action(addBookAddCommand);
80
- addbook
80
+ .action(contactsAddCommand);
81
+ contacts
81
82
  .command('list')
82
- .description('List all contacts in your address book')
83
- .action(addBookListCommand);
84
- addbook
83
+ .description('List all contacts')
84
+ .action(contactsListCommand);
85
+ contacts
85
86
  .command('show <name>')
86
87
  .description('Show details for a specific contact')
87
- .action(addBookShowCommand);
88
- addbook
88
+ .action(contactsShowCommand);
89
+ contacts
89
90
  .command('remove <name>')
90
- .description('Remove a contact from your address book')
91
+ .description('Remove a contact')
91
92
  .option('-y, --yes', 'Skip confirmation prompt')
92
- .action(addBookRemoveCommand);
93
+ .action(contactsRemoveCommand);
93
94
  program
94
95
  .command('send <recipient> <amount>')
95
96
  .description('Send SOL, USDC, or USDT to an address or contact')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuego-cli",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Command-line interface for Fuego - the sovereign Solana wallet for AI agents",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -35,11 +35,11 @@ function isValidSolanaAddress(address: string): boolean {
35
35
  }
36
36
 
37
37
  // Add a contact
38
- export async function addBookAddCommand(name: string, address: string, options: { label?: string }): Promise<void> {
38
+ export async function contactsAddCommand(name: string, address: string, options: { label?: string }): Promise<void> {
39
39
  console.log();
40
40
 
41
41
  if (!name || !address) {
42
- console.log(chalk.red('❌ Usage: fuego addbook add <name> <address> [--label "description"]'));
42
+ console.log(chalk.red('❌ Usage: fuego contacts add <name> <address> [--label "description"]'));
43
43
  process.exit(1);
44
44
  }
45
45
 
@@ -75,14 +75,14 @@ export async function addBookAddCommand(name: string, address: string, options:
75
75
  }
76
76
 
77
77
  // List all contacts
78
- export async function addBookListCommand(): Promise<void> {
78
+ export async function contactsListCommand(): Promise<void> {
79
79
  console.log();
80
80
 
81
81
  const book = loadAddressBook();
82
82
  const contacts = Object.entries(book);
83
83
 
84
84
  if (contacts.length === 0) {
85
- showInfo('📒 Address Book', ['No contacts yet.', '', chalk.yellow('Add one: fuego addbook add <name> <address>')]);
85
+ showInfo('📒 Contacts', ['No contacts yet.', '', chalk.yellow('Add one: fuego contacts add <name> <address>')]);
86
86
  flameDivider();
87
87
  return;
88
88
  }
@@ -94,16 +94,16 @@ export async function addBookListCommand(): Promise<void> {
94
94
  lines.push(`${chalk.cyan(name)}: ${chalk.white(shortAddr)}${entry.label ? chalk.gray(` (${entry.label})`) : ''}`);
95
95
  }
96
96
 
97
- showInfo('📒 Address Book', lines);
97
+ showInfo('📒 Contacts', lines);
98
98
  flameDivider();
99
99
  }
100
100
 
101
101
  // Show a specific contact
102
- export async function addBookShowCommand(name: string): Promise<void> {
102
+ export async function contactsShowCommand(name: string): Promise<void> {
103
103
  console.log();
104
104
 
105
105
  if (!name) {
106
- console.log(chalk.red('❌ Usage: fuego addbook show <name>'));
106
+ console.log(chalk.red('❌ Usage: fuego contacts show <name>'));
107
107
  process.exit(1);
108
108
  }
109
109
 
@@ -112,7 +112,7 @@ export async function addBookShowCommand(name: string): Promise<void> {
112
112
 
113
113
  if (!entry) {
114
114
  console.log(chalk.red(`❌ Contact "${name}" not found.`));
115
- console.log(chalk.gray('\nUse "fuego addbook list" to see all contacts.'));
115
+ console.log(chalk.gray('\nUse "fuego contacts list" to see all contacts.'));
116
116
  process.exit(1);
117
117
  }
118
118
 
@@ -126,11 +126,11 @@ export async function addBookShowCommand(name: string): Promise<void> {
126
126
  }
127
127
 
128
128
  // Remove a contact
129
- export async function addBookRemoveCommand(name: string, options: { yes?: boolean }): Promise<void> {
129
+ export async function contactsRemoveCommand(name: string, options: { yes?: boolean }): Promise<void> {
130
130
  console.log();
131
131
 
132
132
  if (!name) {
133
- console.log(chalk.red('❌ Usage: fuego addbook remove <name> [--yes]'));
133
+ console.log(chalk.red('❌ Usage: fuego contacts remove <name> [--yes]'));
134
134
  process.exit(1);
135
135
  }
136
136
 
@@ -150,6 +150,6 @@ export async function addBookRemoveCommand(name: string, options: { yes?: boolea
150
150
  delete book[name];
151
151
  saveAddressBook(book);
152
152
 
153
- showSuccess('✅ Contact Removed', `Removed "${chalk.cyan(name)}" from address book.`);
153
+ showSuccess('✅ Contact Removed', `Removed "${chalk.cyan(name)}" from contacts.`);
154
154
  flameDivider();
155
155
  }
@@ -2,12 +2,12 @@ import chalk from 'chalk';
2
2
  import { setConfig, getConfig, listConfig } from '../lib/config.js';
3
3
  import { showSuccess, showInfo, flameDivider } from '../lib/ascii.js';
4
4
 
5
- interface AddRpcOptions {
5
+ interface RpcOptions {
6
6
  url?: string;
7
7
  network?: string;
8
8
  }
9
9
 
10
- export async function addRpcCommand(options: AddRpcOptions): Promise<void> {
10
+ export async function rpcCommand(options: RpcOptions): Promise<void> {
11
11
  console.log(); // spacer
12
12
 
13
13
  // If no URL provided, show current config and help
@@ -19,8 +19,8 @@ export async function addRpcCommand(options: AddRpcOptions): Promise<void> {
19
19
  `RPC URL: ${currentRpc ? chalk.cyan(currentRpc) : chalk.gray('Not set')}`,
20
20
  `Network: ${currentNetwork ? chalk.cyan(currentNetwork) : chalk.gray('mainnet')}`,
21
21
  '',
22
- `${chalk.yellow('Usage:')} fuego addrpc --url https://api.mainnet-beta.solana.com`,
23
- `${chalk.yellow('Or:')} fuego addrpc --url https://helius.xyz/... --network mainnet`
22
+ `${chalk.yellow('Usage:')} fuego rpc --url https://api.mainnet-beta.solana.com`,
23
+ `${chalk.yellow('Or:')} fuego rpc --url https://helius.xyz/... --network mainnet`
24
24
  ]);
25
25
 
26
26
  flameDivider();
@@ -48,8 +48,10 @@ export async function updateCommand(options: UpdateOptions): Promise<void> {
48
48
  execSync('npm install -g fuego-cli@latest', { stdio: 'pipe' });
49
49
  spinner.stop();
50
50
 
51
- setFuegoCliVersion(currentCliVersion);
52
- showSuccess('✅ fuego-cli updated!', `Version: ${chalk.cyan(currentCliVersion)}`);
51
+ // Get the NEW version after update
52
+ const newCliVersion = getFuegoCliVersion();
53
+ setFuegoCliVersion(newCliVersion);
54
+ showSuccess('✅ fuego-cli updated!', `Version: ${chalk.cyan(newCliVersion)}`);
53
55
  cliUpdated = true;
54
56
  } catch (error: any) {
55
57
  spinner.stop();
package/src/index.ts CHANGED
@@ -9,10 +9,11 @@ import { balanceCommand } from './commands/balance.js';
9
9
  import { serveCommand } from './commands/serve.js';
10
10
  import { dashboardCommand } from './commands/dashboard.js';
11
11
  import { updateCommand } from './commands/update.js';
12
- import { addRpcCommand } from './commands/addrpc.js';
13
- import { addBookAddCommand, addBookListCommand, addBookShowCommand, addBookRemoveCommand } from './commands/addbook.js';
12
+ import { rpcCommand } from './commands/rpc.js';
13
+ import { contactsAddCommand, contactsListCommand, contactsShowCommand, contactsRemoveCommand } from './commands/contacts.js';
14
14
  import { sendCommand } from './commands/send.js';
15
15
  import { showBanner } from './lib/ascii.js';
16
+ import { getFuegoCliVersion } from './lib/config.js';
16
17
 
17
18
  async function main() {
18
19
  // Show banner for help and when no args provided
@@ -26,7 +27,7 @@ async function main() {
26
27
  program
27
28
  .name('fuego')
28
29
  .description('🔥 Fuego CLI - Sovereign Solana wallet for AI agents')
29
- .version('0.1.0')
30
+ .version(getFuegoCliVersion())
30
31
  .configureOutput({
31
32
  outputError: (str, write) => write(chalk.red(str))
32
33
  });
@@ -76,37 +77,37 @@ async function main() {
76
77
  .action(updateCommand);
77
78
 
78
79
  program
79
- .command('addrpc')
80
- .description('Add or update your Solana RPC endpoint')
80
+ .command('rpc')
81
+ .description('Show or configure your Solana RPC endpoint')
81
82
  .option('-u, --url <url>', 'RPC endpoint URL (e.g., https://api.mainnet-beta.solana.com)')
82
83
  .option('-n, --network <network>', 'Network type (mainnet, devnet, testnet)', 'mainnet')
83
- .action(addRpcCommand);
84
+ .action(rpcCommand);
84
85
 
85
- const addbook = program
86
- .command('addbook')
87
- .description('Manage your address book (stored in ~/.fuego/contacts/address-book.json)');
86
+ const contacts = program
87
+ .command('contacts')
88
+ .description('Manage your contacts (stored in ~/.fuego/contacts/address-book.json)');
88
89
 
89
- addbook
90
+ contacts
90
91
  .command('add <name> <address>')
91
- .description('Add a contact to your address book')
92
+ .description('Add a contact')
92
93
  .option('-l, --label <label>', 'Optional description/label for this contact')
93
- .action(addBookAddCommand);
94
+ .action(contactsAddCommand);
94
95
 
95
- addbook
96
+ contacts
96
97
  .command('list')
97
- .description('List all contacts in your address book')
98
- .action(addBookListCommand);
98
+ .description('List all contacts')
99
+ .action(contactsListCommand);
99
100
 
100
- addbook
101
+ contacts
101
102
  .command('show <name>')
102
103
  .description('Show details for a specific contact')
103
- .action(addBookShowCommand);
104
+ .action(contactsShowCommand);
104
105
 
105
- addbook
106
+ contacts
106
107
  .command('remove <name>')
107
- .description('Remove a contact from your address book')
108
+ .description('Remove a contact')
108
109
  .option('-y, --yes', 'Skip confirmation prompt')
109
- .action(addBookRemoveCommand);
110
+ .action(contactsRemoveCommand);
110
111
 
111
112
  program
112
113
  .command('send <recipient> <amount>')