fuego-cli 0.1.0 → 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 (39) hide show
  1. package/README.md +211 -49
  2. package/dist/commands/balance.d.ts +2 -0
  3. package/dist/commands/balance.d.ts.map +1 -0
  4. package/dist/commands/balance.js +58 -0
  5. package/dist/commands/balance.js.map +1 -0
  6. package/dist/commands/create.d.ts.map +1 -1
  7. package/dist/commands/create.js +14 -8
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/dashboard.d.ts +2 -0
  10. package/dist/commands/dashboard.d.ts.map +1 -0
  11. package/dist/commands/dashboard.js +51 -0
  12. package/dist/commands/dashboard.js.map +1 -0
  13. package/dist/commands/install.d.ts.map +1 -1
  14. package/dist/commands/install.js +11 -1
  15. package/dist/commands/install.js.map +1 -1
  16. package/dist/commands/serve.d.ts +2 -0
  17. package/dist/commands/serve.d.ts.map +1 -0
  18. package/dist/commands/serve.js +39 -0
  19. package/dist/commands/serve.js.map +1 -0
  20. package/dist/commands/update.d.ts +7 -0
  21. package/dist/commands/update.d.ts.map +1 -0
  22. package/dist/commands/update.js +92 -0
  23. package/dist/commands/update.js.map +1 -0
  24. package/dist/index.js +24 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/config.d.ts +25 -3
  27. package/dist/lib/config.d.ts.map +1 -1
  28. package/dist/lib/config.js +56 -0
  29. package/dist/lib/config.js.map +1 -1
  30. package/fuego-cli-1.0.0.tgz +0 -0
  31. package/package.json +1 -1
  32. package/src/commands/balance.ts +82 -0
  33. package/src/commands/create.ts +16 -8
  34. package/src/commands/dashboard.ts +59 -0
  35. package/src/commands/install.ts +14 -1
  36. package/src/commands/serve.ts +48 -0
  37. package/src/commands/update.ts +120 -0
  38. package/src/index.ts +28 -0
  39. package/src/lib/config.ts +75 -3
@@ -0,0 +1,92 @@
1
+ import chalk from 'chalk';
2
+ import { execSync } from 'child_process';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import ora from 'ora';
6
+ import { getFuegoCliVersion, getFuegoCliVersionInfo, getFuegoVersionInfo, findFuegoPath, setFuegoCliVersion, setFuegoVersion } from '../lib/config.js';
7
+ import { showSuccess, showInfo, showWarning, flameDivider } from '../lib/ascii.js';
8
+ export async function updateCommand(options) {
9
+ console.log(); // spacer
10
+ const updateCli = options.cli || (!options.cli && !options.fuego);
11
+ const updateFuego = options.fuego || (!options.cli && !options.fuego);
12
+ const currentCliVersion = getFuegoCliVersion();
13
+ const cliInfo = getFuegoCliVersionInfo();
14
+ const fuegoInfo = getFuegoVersionInfo();
15
+ const fuegoPath = findFuegoPath();
16
+ // Show current versions
17
+ showInfo('šŸ“¦ Current Versions', [
18
+ `fuego-cli: ${chalk.cyan(cliInfo?.version || currentCliVersion)} ${cliInfo?.lastUpdated ? chalk.gray(`(updated: ${new Date(cliInfo.lastUpdated).toLocaleDateString()})`) : ''}`,
19
+ `fuego: ${chalk.cyan(fuegoInfo?.version || 'not installed')} ${fuegoInfo?.lastUpdated ? chalk.gray(`(updated: ${new Date(fuegoInfo.lastUpdated).toLocaleDateString()})`) : ''}`,
20
+ ]);
21
+ console.log(); // spacer
22
+ let cliUpdated = false;
23
+ let fuegoUpdated = false;
24
+ // Update fuego-cli
25
+ if (updateCli) {
26
+ const spinner = ora('Checking for fuego-cli updates...').start();
27
+ try {
28
+ spinner.text = 'Updating fuego-cli...';
29
+ execSync('npm install -g fuego-cli@latest', { stdio: 'pipe' });
30
+ spinner.stop();
31
+ setFuegoCliVersion(currentCliVersion);
32
+ showSuccess('āœ… fuego-cli updated!', `Version: ${chalk.cyan(currentCliVersion)}`);
33
+ cliUpdated = true;
34
+ }
35
+ catch (error) {
36
+ spinner.stop();
37
+ console.log(chalk.red(`āŒ Failed to update fuego-cli: ${error.message}`));
38
+ console.log(chalk.gray('You may need to run with sudo or check your npm permissions.'));
39
+ }
40
+ console.log(); // spacer
41
+ }
42
+ // Update fuego project
43
+ if (updateFuego) {
44
+ if (!fuegoPath) {
45
+ showWarning('Fuego project not found.\n\nRun "fuego install" first.');
46
+ return;
47
+ }
48
+ const spinner = ora('Checking for fuego updates...').start();
49
+ try {
50
+ // Check if it's a git repo
51
+ const gitPath = path.join(fuegoPath, '.git');
52
+ if (!fs.existsSync(gitPath)) {
53
+ spinner.stop();
54
+ showWarning('Fuego installation is not a git repository.\n\nCannot auto-update. You may need to reinstall.');
55
+ return;
56
+ }
57
+ spinner.text = 'Pulling latest changes...';
58
+ execSync('git pull origin main', {
59
+ cwd: fuegoPath,
60
+ stdio: 'pipe'
61
+ });
62
+ spinner.stop();
63
+ // Get the latest commit hash as version
64
+ const commitHash = execSync('git rev-parse --short HEAD', {
65
+ cwd: fuegoPath
66
+ }).toString().trim();
67
+ setFuegoVersion(commitHash, fuegoPath);
68
+ showSuccess('āœ… fuego updated!', `Version: ${chalk.cyan(commitHash)}`);
69
+ showInfo('šŸ“ Location', [fuegoPath]);
70
+ console.log(); // spacer
71
+ console.log(chalk.yellow('šŸ“ Note: You may need to rebuild the server:'));
72
+ console.log(chalk.gray(` cd ${fuegoPath}/server && cargo build`));
73
+ fuegoUpdated = true;
74
+ }
75
+ catch (error) {
76
+ spinner.stop();
77
+ console.log(chalk.red(`āŒ Failed to update fuego: ${error.message}`));
78
+ if (error.message.includes('not a git repository')) {
79
+ console.log(chalk.gray('The fuego installation may have been downloaded as a ZIP or installed differently.'));
80
+ console.log(chalk.gray('Run "fuego install" to get a fresh copy that can be updated.'));
81
+ }
82
+ }
83
+ }
84
+ flameDivider();
85
+ if (cliUpdated || fuegoUpdated) {
86
+ console.log(chalk.green('\n✨ Update complete!'));
87
+ }
88
+ else {
89
+ console.log(chalk.yellow('\nāš ļø Some updates failed. Check the errors above.'));
90
+ }
91
+ }
92
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,6 +4,10 @@ import chalk from 'chalk';
4
4
  import { createCommand } from './commands/create.js';
5
5
  import { installCommand } from './commands/install.js';
6
6
  import { addressCommand } from './commands/address.js';
7
+ import { balanceCommand } from './commands/balance.js';
8
+ import { serveCommand } from './commands/serve.js';
9
+ import { dashboardCommand } from './commands/dashboard.js';
10
+ import { updateCommand } from './commands/update.js';
7
11
  import { showBanner } from './lib/ascii.js';
8
12
  async function main() {
9
13
  // Show banner for help and when no args provided
@@ -36,6 +40,26 @@ async function main() {
36
40
  .alias('addr')
37
41
  .description('Show your wallet address')
38
42
  .action(addressCommand);
43
+ program
44
+ .command('balance')
45
+ .alias('bal')
46
+ .description('Show your wallet balances (SOL, USDC, USDT)')
47
+ .action(balanceCommand);
48
+ program
49
+ .command('serve')
50
+ .description('Start the Fuego Rust server (runs cargo run in server directory)')
51
+ .action(serveCommand);
52
+ program
53
+ .command('dashboard')
54
+ .alias('dash')
55
+ .description('Open the Fuego dashboard in your browser')
56
+ .action(dashboardCommand);
57
+ program
58
+ .command('update')
59
+ .description('Update fuego-cli and/or fuego to latest versions')
60
+ .option('--cli', 'Update only fuego-cli')
61
+ .option('--fuego', 'Update only the fuego project')
62
+ .action(updateCommand);
39
63
  await program.parseAsync(process.argv);
40
64
  }
41
65
  main().catch((error) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,KAAK,UAAU,IAAI;IACjB,iDAAiD;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC;SAChB,eAAe,CAAC;QACf,WAAW,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACnD,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC;SAClD,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,kFAAkF,CAAC;SAC/G,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,MAAM,CAAC;SACb,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE1B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,18 @@
1
+ export declare function getFuegoCliVersion(): string;
1
2
  interface Config {
2
3
  rpcUrl?: string;
3
4
  network?: 'mainnet' | 'devnet' | 'testnet';
4
5
  defaultToken?: string;
5
- [key: string]: string | undefined;
6
+ 'fuego-cli'?: {
7
+ version: string;
8
+ lastUpdated: string;
9
+ };
10
+ fuego?: {
11
+ version: string;
12
+ lastUpdated: string;
13
+ installPath?: string;
14
+ };
15
+ [key: string]: any;
6
16
  }
7
17
  interface WalletConfig {
8
18
  publicKey: string;
@@ -16,8 +26,20 @@ export declare function getWalletConfigPath(): string;
16
26
  export declare function getConfigPath(): string;
17
27
  export declare function loadWalletConfig(): WalletConfig | null;
18
28
  export declare function saveWalletConfig(config: WalletConfig): void;
19
- export declare function getConfig(key: string): string | undefined;
20
- export declare function setConfig(key: string, value: string): void;
29
+ export declare function getConfig(key: string): any;
30
+ export declare function setConfig(key: string, value: any): void;
21
31
  export declare function listConfig(): Config;
32
+ export declare function getFuegoCliVersionInfo(): {
33
+ version: string;
34
+ lastUpdated: string;
35
+ } | null;
36
+ export declare function setFuegoCliVersion(version: string): void;
37
+ export declare function getFuegoVersionInfo(): {
38
+ version: string;
39
+ lastUpdated: string;
40
+ installPath?: string;
41
+ } | null;
42
+ export declare function setFuegoVersion(version: string, installPath?: string): void;
43
+ export declare function findFuegoPath(): string | null;
22
44
  export {};
23
45
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AASA,UAAU,MAAM;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAKtD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAcD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED,UAAU,MAAM;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,YAAY,GAAG,IAAI,CAKtD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAcD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAG1C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAIvD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAGD,wBAAgB,sBAAsB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAOxD;AAED,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAG3G;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAGD,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAkB7C"}
@@ -1,10 +1,22 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
+ import { createRequire } from 'module';
5
+ const require = createRequire(import.meta.url);
4
6
  const CONFIG_DIR = path.join(os.homedir(), '.fuego');
5
7
  const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
6
8
  const WALLET_FILE = path.join(CONFIG_DIR, 'wallet.json');
7
9
  const WALLET_CONFIG_FILE = path.join(CONFIG_DIR, 'wallet-config.json');
10
+ // Get current CLI version from package.json
11
+ export function getFuegoCliVersion() {
12
+ try {
13
+ const pkg = require('../../package.json');
14
+ return pkg.version;
15
+ }
16
+ catch {
17
+ return '0.1.0';
18
+ }
19
+ }
8
20
  export function getWalletPath() {
9
21
  return WALLET_FILE;
10
22
  }
@@ -46,4 +58,48 @@ export function setConfig(key, value) {
46
58
  export function listConfig() {
47
59
  return loadConfig();
48
60
  }
61
+ // Version tracking functions
62
+ export function getFuegoCliVersionInfo() {
63
+ const config = loadConfig();
64
+ return config['fuego-cli'] || null;
65
+ }
66
+ export function setFuegoCliVersion(version) {
67
+ const config = loadConfig();
68
+ config['fuego-cli'] = {
69
+ version,
70
+ lastUpdated: new Date().toISOString()
71
+ };
72
+ saveConfig(config);
73
+ }
74
+ export function getFuegoVersionInfo() {
75
+ const config = loadConfig();
76
+ return config.fuego || null;
77
+ }
78
+ export function setFuegoVersion(version, installPath) {
79
+ const config = loadConfig();
80
+ config.fuego = {
81
+ version,
82
+ lastUpdated: new Date().toISOString(),
83
+ ...(installPath && { installPath })
84
+ };
85
+ saveConfig(config);
86
+ }
87
+ // Find fuego installation path
88
+ export function findFuegoPath() {
89
+ // Check config first
90
+ const fuegoInfo = getFuegoVersionInfo();
91
+ if (fuegoInfo?.installPath && fs.existsSync(fuegoInfo.installPath)) {
92
+ return fuegoInfo.installPath;
93
+ }
94
+ // Check default locations
95
+ const openclawPath = path.join(os.homedir(), '.openclaw', 'workspace', 'fuego');
96
+ const localPath = path.join(process.cwd(), 'fuego');
97
+ if (fs.existsSync(path.join(openclawPath, 'server'))) {
98
+ return openclawPath;
99
+ }
100
+ else if (fs.existsSync(path.join(localPath, 'server'))) {
101
+ return localPath;
102
+ }
103
+ return null;
104
+ }
49
105
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;AAiBvE,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7B,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,UAAU;IACjB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7B,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,KAAa;IAClD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fuego-cli",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
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",
@@ -0,0 +1,82 @@
1
+ import chalk from 'chalk';
2
+ import { loadWalletConfig } from '../lib/config.js';
3
+ import { showInfo, formatPublicKey, flameDivider } from '../lib/ascii.js';
4
+ import ora from 'ora';
5
+
6
+ const FUEGO_SERVER_URL = 'http://127.0.0.1:8080';
7
+
8
+ interface BalanceResponse {
9
+ success: boolean;
10
+ data?: {
11
+ sol: number;
12
+ };
13
+ }
14
+
15
+ interface TokenBalanceResponse {
16
+ success: boolean;
17
+ data?: {
18
+ ui_amount: string;
19
+ };
20
+ }
21
+
22
+ export async function balanceCommand(): Promise<void> {
23
+ console.log(); // spacer
24
+
25
+ const config = loadWalletConfig();
26
+
27
+ if (!config) {
28
+ console.log(chalk.red('āŒ No wallet found. Run "fuego create" first.'));
29
+ process.exit(1);
30
+ }
31
+
32
+ const spinner = ora('Fetching balances from Fuego server...').start();
33
+
34
+ try {
35
+ const publicKey = config.publicKey;
36
+ const network = 'mainnet-beta';
37
+
38
+ // Query SOL balance
39
+ const solResponse = await fetch(`${FUEGO_SERVER_URL}/balance`, {
40
+ method: 'POST',
41
+ headers: { 'Content-Type': 'application/json' },
42
+ body: JSON.stringify({ network, address: publicKey })
43
+ });
44
+ const solData = await solResponse.json() as BalanceResponse;
45
+ const solBalance = solData.success ? solData.data!.sol : 0;
46
+
47
+ // Query USDC balance
48
+ const usdcResponse = await fetch(`${FUEGO_SERVER_URL}/usdc-balance`, {
49
+ method: 'POST',
50
+ headers: { 'Content-Type': 'application/json' },
51
+ body: JSON.stringify({ network, address: publicKey })
52
+ });
53
+ const usdcData = await usdcResponse.json() as TokenBalanceResponse;
54
+ const usdcBalance = usdcData.success ? parseFloat(usdcData.data!.ui_amount) : 0;
55
+
56
+ // Query USDT balance
57
+ const usdtResponse = await fetch(`${FUEGO_SERVER_URL}/usdt-balance`, {
58
+ method: 'POST',
59
+ headers: { 'Content-Type': 'application/json' },
60
+ body: JSON.stringify({ network, address: publicKey })
61
+ });
62
+ const usdtData = await usdtResponse.json() as TokenBalanceResponse;
63
+ const usdtBalance = usdtData.success ? parseFloat(usdtData.data!.ui_amount) : 0;
64
+
65
+ spinner.stop();
66
+
67
+ showInfo('šŸ’° Your Balances', [
68
+ `Address: ${formatPublicKey(publicKey)}`,
69
+ '',
70
+ `${chalk.yellow('- SOL:')} ${chalk.white(solBalance.toFixed(9))}`,
71
+ `${chalk.green('- USDC:')} ${chalk.white('$' + usdcBalance.toFixed(2))}`,
72
+ `${chalk.cyan('- USDT:')} ${chalk.white('$' + usdtBalance.toFixed(2))}`,
73
+ ]);
74
+
75
+ flameDivider();
76
+ } catch (error) {
77
+ spinner.stop();
78
+ console.log(chalk.red(`\nāŒ Failed to fetch balances: ${error instanceof Error ? error.message : 'Unknown error'}`));
79
+ console.log(chalk.gray('\nMake sure the Fuego server is running: cd fuego/server && cargo run'));
80
+ process.exit(1);
81
+ }
82
+ }
@@ -1,7 +1,7 @@
1
1
  import chalk from 'chalk';
2
2
  import ora from 'ora';
3
3
  import { FuegoWallet } from '../lib/wallet.js';
4
- import { getWalletPath, getConfigPath } from '../lib/config.js';
4
+ import { getWalletPath, getConfigPath, getFuegoCliVersion, setFuegoCliVersion } from '../lib/config.js';
5
5
  import { showSuccess, showWarning, showInfo, formatPublicKey, flameDivider } from '../lib/ascii.js';
6
6
  import fs from 'fs-extra';
7
7
 
@@ -37,19 +37,27 @@ export async function createCommand(options: CreateOptions): Promise<void> {
37
37
 
38
38
  const { publicKey, mnemonic } = await wallet.create(options.name);
39
39
 
40
- // Create config.json with defaults
40
+ // Create or update config.json
41
41
  const configPath = options.directory
42
42
  ? `${options.directory}/config.json`
43
43
  : getConfigPath();
44
44
 
45
- if (!fs.existsSync(configPath)) {
46
- fs.writeJsonSync(configPath, {
47
- network: 'mainnet',
48
- rpcUrl: 'https://api.mainnet-beta.solana.com',
49
- version: '0.1.0'
50
- }, { spaces: 2 });
45
+ // Load existing config if it exists (from install command)
46
+ let existingConfig: any = {};
47
+ if (fs.existsSync(configPath)) {
48
+ existingConfig = fs.readJsonSync(configPath);
51
49
  }
52
50
 
51
+ // Merge with defaults, preserving fuego install info
52
+ fs.writeJsonSync(configPath, {
53
+ ...existingConfig,
54
+ network: existingConfig.network || 'mainnet',
55
+ rpcUrl: existingConfig.rpcUrl || 'https://api.mainnet-beta.solana.com'
56
+ }, { spaces: 2 });
57
+
58
+ // Store fuego-cli version
59
+ setFuegoCliVersion(getFuegoCliVersion());
60
+
53
61
  spinner.stop();
54
62
 
55
63
  // Success display
@@ -0,0 +1,59 @@
1
+ import chalk from 'chalk';
2
+ import { exec } from 'child_process';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import { promisify } from 'util';
6
+ import { showInfo, flameDivider } from '../lib/ascii.js';
7
+ import { findFuegoPath } from '../lib/config.js';
8
+
9
+ const execAsync = promisify(exec);
10
+
11
+ export async function dashboardCommand(): Promise<void> {
12
+ console.log(); // spacer
13
+
14
+ // Find fuego installation (checks config first, then falls back to auto-detect)
15
+ const fuegoPath = findFuegoPath();
16
+
17
+ if (!fuegoPath || !fs.existsSync(path.join(fuegoPath, 'dashboard', 'dashboard.html'))) {
18
+ console.log(chalk.red('āŒ Fuego dashboard not found.'));
19
+ console.log(chalk.gray('\nRun "fuego install" first to install the Fuego project.'));
20
+ process.exit(1);
21
+ }
22
+
23
+ const dashboardPath = path.join(fuegoPath, 'dashboard', 'dashboard.html');
24
+
25
+ showInfo('šŸ”„ Opening Fuego Dashboard', [
26
+ `Location: ${chalk.cyan(dashboardPath)}`
27
+ ]);
28
+
29
+ flameDivider();
30
+
31
+ // Open the dashboard based on platform
32
+ const platform = process.platform;
33
+ let command: string;
34
+
35
+ switch (platform) {
36
+ case 'darwin': // macOS
37
+ command = `open "${dashboardPath}"`;
38
+ break;
39
+ case 'linux':
40
+ command = `xdg-open "${dashboardPath}"`;
41
+ break;
42
+ case 'win32':
43
+ command = `start "" "${dashboardPath}"`;
44
+ break;
45
+ default:
46
+ console.log(chalk.yellow(`āš ļø Unsupported platform: ${platform}`));
47
+ console.log(chalk.gray(`Please open manually: ${dashboardPath}`));
48
+ return;
49
+ }
50
+
51
+ try {
52
+ await execAsync(command);
53
+ console.log(chalk.green('\nāœ… Dashboard opened!'));
54
+ console.log(chalk.gray('Note: Make sure the Fuego server is running (fuego serve)'));
55
+ } catch (error) {
56
+ console.log(chalk.yellow('\nāš ļø Could not open dashboard automatically.'));
57
+ console.log(chalk.gray(`Please open manually: ${dashboardPath}`));
58
+ }
59
+ }
@@ -4,6 +4,7 @@ import { execSync } from 'child_process';
4
4
  import fs from 'fs-extra';
5
5
  import path from 'path';
6
6
  import os from 'os';
7
+ import { setFuegoVersion, getConfigPath } from '../lib/config.js';
7
8
  import { showSuccess, showWarning, showInfo, flameDivider } from '../lib/ascii.js';
8
9
 
9
10
  interface InstallOptions {
@@ -42,6 +43,10 @@ export async function installCommand(options: InstallOptions): Promise<void> {
42
43
  spinner.color = 'cyan';
43
44
  await fs.ensureDir(path.dirname(installPath));
44
45
 
46
+ // Ensure .fuego config directory exists (even if create hasn't run yet)
47
+ const fuegoDir = path.join(os.homedir(), '.fuego');
48
+ await fs.ensureDir(fuegoDir);
49
+
45
50
  spinner.text = 'Cloning Fuego repository...';
46
51
  spinner.color = 'red';
47
52
 
@@ -51,6 +56,14 @@ export async function installCommand(options: InstallOptions): Promise<void> {
51
56
 
52
57
  spinner.stop();
53
58
 
59
+ // Get the commit hash as version
60
+ const commitHash = execSync('git rev-parse --short HEAD', {
61
+ cwd: installPath
62
+ }).toString().trim();
63
+
64
+ // Store version info with install path
65
+ setFuegoVersion(commitHash, installPath);
66
+
54
67
  // Show contextual next steps
55
68
  const relativePath = path.relative(process.cwd(), installPath);
56
69
  const cdPath = relativePath.startsWith('..') ? installPath : relativePath;
@@ -58,7 +71,7 @@ export async function installCommand(options: InstallOptions): Promise<void> {
58
71
 
59
72
  showSuccess(
60
73
  'šŸ”„ Fuego Installed Successfully!',
61
- `Location: ${chalk.cyan(installPath)}`
74
+ `Location: ${chalk.cyan(installPath)}\nVersion: ${chalk.cyan(commitHash)}`
62
75
  );
63
76
 
64
77
  showInfo('šŸš€ Next Steps', [
@@ -0,0 +1,48 @@
1
+ import chalk from 'chalk';
2
+ import { spawn } from 'child_process';
3
+ import fs from 'fs-extra';
4
+ import path from 'path';
5
+ import { showInfo, flameDivider } from '../lib/ascii.js';
6
+ import { findFuegoPath } from '../lib/config.js';
7
+
8
+ export async function serveCommand(): Promise<void> {
9
+ console.log(); // spacer
10
+
11
+ // Find fuego installation (checks config first, then falls back to auto-detect)
12
+ const fuegoPath = findFuegoPath();
13
+
14
+ if (!fuegoPath) {
15
+ console.log(chalk.red('āŒ Fuego server not found.'));
16
+ console.log(chalk.gray('\nRun "fuego install" first to install the Fuego project.'));
17
+ process.exit(1);
18
+ }
19
+
20
+ const serverPath = path.join(fuegoPath, 'server');
21
+
22
+ showInfo('šŸ”„ Starting Fuego Server', [
23
+ `Location: ${chalk.cyan(serverPath)}`,
24
+ 'Command: cargo run',
25
+ '',
26
+ 'Server will be available at:',
27
+ chalk.cyan('http://127.0.0.1:8080')
28
+ ]);
29
+
30
+ flameDivider();
31
+ console.log(); // spacer
32
+
33
+ // Spawn cargo run in the server directory
34
+ const child = spawn('cargo', ['run'], {
35
+ cwd: serverPath,
36
+ stdio: 'inherit'
37
+ });
38
+
39
+ child.on('error', (error) => {
40
+ console.log(chalk.red(`\nāŒ Failed to start server: ${error.message}`));
41
+ console.log(chalk.gray('\nMake sure Rust and Cargo are installed: https://rustup.rs'));
42
+ process.exit(1);
43
+ });
44
+
45
+ child.on('exit', (code) => {
46
+ process.exit(code || 0);
47
+ });
48
+ }