@delfos-ai/cli 1.0.7 → 1.0.9

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 (69) hide show
  1. package/dist/commands/login.command.d.ts.map +1 -1
  2. package/dist/commands/login.command.js +0 -3
  3. package/dist/commands/login.command.js.map +1 -1
  4. package/dist/commands/logout.command.d.ts.map +1 -1
  5. package/dist/commands/logout.command.js +0 -4
  6. package/dist/commands/logout.command.js.map +1 -1
  7. package/dist/commands/setup/platform.d.ts +12 -0
  8. package/dist/commands/setup/platform.d.ts.map +1 -0
  9. package/dist/commands/setup/platform.js +67 -0
  10. package/dist/commands/setup/platform.js.map +1 -0
  11. package/dist/commands/setup/setup-context.d.ts +27 -0
  12. package/dist/commands/setup/setup-context.d.ts.map +1 -0
  13. package/dist/commands/setup/setup-context.js +45 -0
  14. package/dist/commands/setup/setup-context.js.map +1 -0
  15. package/dist/commands/setup/setup-wizard.d.ts +2 -0
  16. package/dist/commands/setup/setup-wizard.d.ts.map +1 -0
  17. package/dist/commands/setup/setup-wizard.js +75 -0
  18. package/dist/commands/setup/setup-wizard.js.map +1 -0
  19. package/dist/commands/setup/setup.command.d.ts +3 -0
  20. package/dist/commands/setup/setup.command.d.ts.map +1 -0
  21. package/dist/commands/setup/setup.command.js +6 -0
  22. package/dist/commands/setup/setup.command.js.map +1 -0
  23. package/dist/commands/setup/steps/authenticate.d.ts +6 -0
  24. package/dist/commands/setup/steps/authenticate.d.ts.map +1 -0
  25. package/dist/commands/setup/steps/authenticate.js +91 -0
  26. package/dist/commands/setup/steps/authenticate.js.map +1 -0
  27. package/dist/commands/setup/steps/check-chromadb.d.ts +3 -0
  28. package/dist/commands/setup/steps/check-chromadb.d.ts.map +1 -0
  29. package/dist/commands/setup/steps/check-chromadb.js +208 -0
  30. package/dist/commands/setup/steps/check-chromadb.js.map +1 -0
  31. package/dist/commands/setup/steps/check-docker.d.ts +3 -0
  32. package/dist/commands/setup/steps/check-docker.d.ts.map +1 -0
  33. package/dist/commands/setup/steps/check-docker.js +238 -0
  34. package/dist/commands/setup/steps/check-docker.js.map +1 -0
  35. package/dist/commands/setup/steps/check-node.d.ts +3 -0
  36. package/dist/commands/setup/steps/check-node.d.ts.map +1 -0
  37. package/dist/commands/setup/steps/check-node.js +34 -0
  38. package/dist/commands/setup/steps/check-node.js.map +1 -0
  39. package/dist/commands/setup/steps/configure-mcp.d.ts +6 -0
  40. package/dist/commands/setup/steps/configure-mcp.d.ts.map +1 -0
  41. package/dist/commands/setup/steps/configure-mcp.js +189 -0
  42. package/dist/commands/setup/steps/configure-mcp.js.map +1 -0
  43. package/dist/commands/setup/steps/configure-vault.d.ts +6 -0
  44. package/dist/commands/setup/steps/configure-vault.d.ts.map +1 -0
  45. package/dist/commands/setup/steps/configure-vault.js +165 -0
  46. package/dist/commands/setup/steps/configure-vault.js.map +1 -0
  47. package/dist/commands/setup/steps/index-vault.d.ts +6 -0
  48. package/dist/commands/setup/steps/index-vault.d.ts.map +1 -0
  49. package/dist/commands/setup/steps/index-vault.js +66 -0
  50. package/dist/commands/setup/steps/index-vault.js.map +1 -0
  51. package/dist/commands/setup/steps/init-vault.d.ts +6 -0
  52. package/dist/commands/setup/steps/init-vault.d.ts.map +1 -0
  53. package/dist/commands/setup/steps/init-vault.js +68 -0
  54. package/dist/commands/setup/steps/init-vault.js.map +1 -0
  55. package/dist/commands/setup/steps/summary.d.ts +3 -0
  56. package/dist/commands/setup/steps/summary.d.ts.map +1 -0
  57. package/dist/commands/setup/steps/summary.js +66 -0
  58. package/dist/commands/setup/steps/summary.js.map +1 -0
  59. package/dist/commands/setup/steps/welcome.d.ts +3 -0
  60. package/dist/commands/setup/steps/welcome.d.ts.map +1 -0
  61. package/dist/commands/setup/steps/welcome.js +61 -0
  62. package/dist/commands/setup/steps/welcome.js.map +1 -0
  63. package/dist/features/memory-server/config-loader.js +1 -1
  64. package/dist/features/memory-server/config-loader.js.map +1 -1
  65. package/dist/index.js +3 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/infrastructure/crypto/crypto.js +1 -1
  68. package/dist/infrastructure/crypto/crypto.js.map +1 -1
  69. package/package.json +10 -8
@@ -0,0 +1,208 @@
1
+ import { execSync } from 'node:child_process';
2
+ import chalk from 'chalk';
3
+ import { writeConfig } from '../../../config/cli-config.js';
4
+ async function checkHeartbeat(host, port) {
5
+ const url = `http://${host}:${port}/api/v1/heartbeat`;
6
+ const fallbackUrl = `http://${host}:${port}/api/v1`;
7
+ try {
8
+ const response = await fetch(url, {
9
+ signal: AbortSignal.timeout(3000),
10
+ });
11
+ return response.ok;
12
+ }
13
+ catch {
14
+ // Try fallback for older ChromaDB versions
15
+ try {
16
+ const response = await fetch(fallbackUrl, {
17
+ signal: AbortSignal.timeout(3000),
18
+ });
19
+ return response.ok;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ }
26
+ async function pollHeartbeat(host, port, maxSeconds = 30) {
27
+ const { default: ora } = await import('ora');
28
+ const spinner = ora('Waiting for ChromaDB to start...').start();
29
+ const startTime = Date.now();
30
+ const interval = 2000; // 2 seconds
31
+ while (Date.now() - startTime < maxSeconds * 1000) {
32
+ const isAlive = await checkHeartbeat(host, port);
33
+ if (isAlive) {
34
+ spinner.succeed('ChromaDB is responding');
35
+ return true;
36
+ }
37
+ await new Promise((resolve) => setTimeout(resolve, interval));
38
+ }
39
+ spinner.fail('ChromaDB did not start within timeout');
40
+ return false;
41
+ }
42
+ async function startChromaContainer(port) {
43
+ const { default: ora } = await import('ora');
44
+ const spinner = ora('Starting ChromaDB container...').start();
45
+ try {
46
+ // Check if container exists
47
+ const containerStatus = execSync('docker ps -a --filter name=delfos-chromadb --format "{{.Status}}"', { stdio: 'pipe', encoding: 'utf-8' }).trim();
48
+ if (containerStatus) {
49
+ // Container exists
50
+ if (containerStatus.includes('Exited')) {
51
+ // Stopped - start it
52
+ execSync('docker start delfos-chromadb', { stdio: 'pipe' });
53
+ spinner.succeed('ChromaDB container started');
54
+ return { success: true, message: 'Container started' };
55
+ }
56
+ else if (containerStatus.includes('Up')) {
57
+ // Running but unreachable - likely port conflict
58
+ spinner.stop();
59
+ return {
60
+ success: false,
61
+ message: 'Container running but unreachable (port conflict?)',
62
+ };
63
+ }
64
+ }
65
+ // Create new container
66
+ const command = `docker run -d --name delfos-chromadb --restart unless-stopped -p ${port}:8000 -v delfos-chroma-data:/chroma/chroma chromadb/chroma:latest`;
67
+ execSync(command, { stdio: 'pipe' });
68
+ spinner.succeed('ChromaDB container created and started');
69
+ return { success: true, message: 'Container created' };
70
+ }
71
+ catch (error) {
72
+ const errorMessage = error instanceof Error ? error.message : String(error);
73
+ spinner.fail(`Failed to start ChromaDB: ${errorMessage}`);
74
+ return { success: false, message: errorMessage };
75
+ }
76
+ }
77
+ async function promptCustomHostPort() {
78
+ const { default: inquirer } = await import('inquirer');
79
+ const { custom } = await inquirer.prompt([
80
+ {
81
+ type: 'confirm',
82
+ name: 'custom',
83
+ message: 'Use custom ChromaDB host:port?',
84
+ default: false,
85
+ },
86
+ ]);
87
+ if (!custom) {
88
+ return { host: 'localhost', port: 8000, accepted: false };
89
+ }
90
+ const { hostPort } = await inquirer.prompt([
91
+ {
92
+ type: 'input',
93
+ name: 'hostPort',
94
+ message: 'Enter ChromaDB host:port (e.g., localhost:8000)',
95
+ default: 'localhost:8000',
96
+ validate: (input) => {
97
+ const parts = input.split(':');
98
+ if (parts.length !== 2) {
99
+ return 'Invalid format. Use host:port (e.g., localhost:8000)';
100
+ }
101
+ const port = parseInt(parts[1], 10);
102
+ if (isNaN(port) || port < 1 || port > 65535) {
103
+ return 'Invalid port number';
104
+ }
105
+ return true;
106
+ },
107
+ },
108
+ ]);
109
+ const [host, portStr] = hostPort.split(':');
110
+ const port = parseInt(portStr, 10);
111
+ return { host, port, accepted: true };
112
+ }
113
+ export async function checkChromaDB(ctx) {
114
+ const host = ctx.chromaHost;
115
+ const port = ctx.chromaPort;
116
+ // Heartbeat check
117
+ const isAlive = await checkHeartbeat(host, port);
118
+ if (isAlive) {
119
+ ctx.chromaMethod = 'docker';
120
+ console.log(chalk.green('✓'), ` ChromaDB running at ${host}:${port}`);
121
+ return { status: 'pass', message: `${host}:${port}` };
122
+ }
123
+ // Check if Docker was skipped
124
+ const dockerResult = ctx.results['check-docker'];
125
+ if (dockerResult?.status !== 'pass') {
126
+ ctx.chromaMethod = 'none';
127
+ console.log(chalk.yellow('⚠'), ' Docker unavailable — ChromaDB skipped');
128
+ console.log(chalk.yellow('\nAlternative: Install ChromaDB via pip'));
129
+ console.log(chalk.gray(' pip install chromadb && chroma run --host localhost --port 8000 --path ~/.delfos/chroma-data'));
130
+ return {
131
+ status: 'skip',
132
+ message: 'Docker unavailable — install ChromaDB manually',
133
+ };
134
+ }
135
+ // Docker is available - offer to start ChromaDB
136
+ console.log(chalk.yellow('⚠'), ` ChromaDB not reachable at ${host}:${port}`);
137
+ const { default: inquirer } = await import('inquirer');
138
+ const { action } = await inquirer.prompt([
139
+ {
140
+ type: 'list',
141
+ name: 'action',
142
+ message: 'Start ChromaDB via Docker?',
143
+ choices: [
144
+ { name: 'Yes (default)', value: 'yes' },
145
+ { name: 'Custom host:port', value: 'custom' },
146
+ { name: 'Skip', value: 'skip' },
147
+ ],
148
+ default: 'yes',
149
+ },
150
+ ]);
151
+ if (action === 'skip') {
152
+ ctx.chromaMethod = 'none';
153
+ console.log(chalk.yellow('⚠'), ' Skipped — RAG indexing will not work');
154
+ return {
155
+ status: 'skip',
156
+ message: 'Skipped by user',
157
+ };
158
+ }
159
+ if (action === 'custom') {
160
+ const { host: customHost, port: customPort, accepted, } = await promptCustomHostPort();
161
+ if (!accepted) {
162
+ return checkChromaDB(ctx); // Retry with default
163
+ }
164
+ ctx.chromaHost = customHost;
165
+ ctx.chromaPort = customPort;
166
+ const customAlive = await checkHeartbeat(customHost, customPort);
167
+ if (customAlive) {
168
+ ctx.chromaMethod = 'docker';
169
+ console.log(chalk.green('✓'), ` ChromaDB running at ${customHost}:${customPort}`);
170
+ return { status: 'pass', message: `${customHost}:${customPort}` };
171
+ }
172
+ console.log(chalk.red('✗'), ` ChromaDB not reachable at ${customHost}:${customPort}`);
173
+ return {
174
+ status: 'fail',
175
+ message: `ChromaDB not reachable at ${customHost}:${customPort}`,
176
+ };
177
+ }
178
+ // Start ChromaDB via Docker
179
+ const startResult = await startChromaContainer(port);
180
+ if (!startResult.success) {
181
+ return {
182
+ status: 'fail',
183
+ message: startResult.message,
184
+ };
185
+ }
186
+ // Poll for heartbeat
187
+ const alive = await pollHeartbeat(host, port, 30);
188
+ if (!alive) {
189
+ return {
190
+ status: 'fail',
191
+ message: 'ChromaDB container started but not responding',
192
+ };
193
+ }
194
+ // Save config
195
+ try {
196
+ await writeConfig({ chromaPersistDir: 'delfos-chroma-data' });
197
+ }
198
+ catch (error) {
199
+ console.log(chalk.yellow('\nWarning: Failed to save ChromaDB config'), error instanceof Error ? error.message : String(error));
200
+ }
201
+ ctx.chromaMethod = 'docker';
202
+ console.log(chalk.green('✓'), ` ChromaDB running at ${host}:${port} (docker)`);
203
+ return {
204
+ status: 'pass',
205
+ message: `${host}:${port} (docker)`,
206
+ };
207
+ }
208
+ //# sourceMappingURL=check-chromadb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-chromadb.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/check-chromadb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SetupContext, StepResult } from '../setup-context.js';
2
+ export declare function checkDocker(ctx: SetupContext): Promise<StepResult>;
3
+ //# sourceMappingURL=check-docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-docker.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/check-docker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAmLpE,wBAAsB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CA0HxE"}
@@ -0,0 +1,238 @@
1
+ import { execSync } from 'node:child_process';
2
+ import chalk from 'chalk';
3
+ import { hasSudo, runInstallCommand } from '../platform.js';
4
+ async function installDocker(platform) {
5
+ const { default: ora } = await import('ora');
6
+ const spinner = ora('Installing Docker...').start();
7
+ let command;
8
+ let useSudo = false;
9
+ switch (platform) {
10
+ case 'ubuntu':
11
+ case 'debian':
12
+ command =
13
+ 'apt-get update && apt-get install -y docker.io docker-compose-plugin && systemctl enable --now docker && usermod -aG docker $USER';
14
+ useSudo = true;
15
+ break;
16
+ case 'fedora':
17
+ command =
18
+ 'dnf install -y docker && systemctl enable --now docker && usermod -aG docker $USER';
19
+ useSudo = true;
20
+ break;
21
+ case 'arch':
22
+ command =
23
+ 'pacman -S --noconfirm docker && systemctl enable --now docker && usermod -aG docker $USER';
24
+ useSudo = true;
25
+ break;
26
+ case 'macos':
27
+ spinner.stop();
28
+ // Check for Homebrew
29
+ try {
30
+ execSync('which brew', { stdio: 'pipe' });
31
+ }
32
+ catch {
33
+ // Offer to install Homebrew
34
+ const { default: inquirer } = await import('inquirer');
35
+ const { installHomebrew } = await inquirer.prompt([
36
+ {
37
+ type: 'confirm',
38
+ name: 'installHomebrew',
39
+ message: 'Homebrew is required. Install Homebrew now?',
40
+ default: true,
41
+ },
42
+ ]);
43
+ if (!installHomebrew) {
44
+ return { success: false };
45
+ }
46
+ const brewSpinner = ora('Installing Homebrew...').start();
47
+ const brewResult = await runInstallCommand('/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"', { timeout: 600000 });
48
+ if (!brewResult.success) {
49
+ brewSpinner.fail('Homebrew installation failed');
50
+ return { success: false };
51
+ }
52
+ brewSpinner.succeed('Homebrew installed');
53
+ }
54
+ spinner.start();
55
+ command = 'brew install --cask docker';
56
+ useSudo = false;
57
+ break;
58
+ case 'windows':
59
+ spinner.stop();
60
+ // Check for winget
61
+ try {
62
+ execSync('winget --version', { stdio: 'pipe' });
63
+ }
64
+ catch {
65
+ console.log(chalk.yellow('winget not found. Please install Docker Desktop from: https://www.docker.com/products/docker-desktop'));
66
+ return { success: false };
67
+ }
68
+ spinner.start();
69
+ command =
70
+ 'winget install -e --id Docker.DockerDesktop --accept-source-agreements --accept-package-agreements';
71
+ useSudo = false;
72
+ break;
73
+ case 'unknown-linux':
74
+ spinner.stop();
75
+ console.log(chalk.yellow('Unknown Linux distribution. Please install Docker manually following the official documentation: https://docs.docker.com/engine/install/'));
76
+ return { success: false };
77
+ default:
78
+ spinner.stop();
79
+ return { success: false };
80
+ }
81
+ // Check sudo on Linux
82
+ if (useSudo && !hasSudo()) {
83
+ spinner.stop();
84
+ console.log(chalk.yellow('sudo access required. Please install Docker manually with sudo privileges.'));
85
+ console.log(chalk.gray('For Ubuntu/Debian: sudo apt-get update && sudo apt-get install -y docker.io docker-compose-plugin && sudo systemctl enable --now docker'));
86
+ return { success: false };
87
+ }
88
+ const result = await runInstallCommand(command, { sudo: useSudo });
89
+ if (!result.success) {
90
+ spinner.fail('Docker installation failed');
91
+ return { success: false };
92
+ }
93
+ spinner.succeed('Docker installed');
94
+ // Warn about group change on Linux
95
+ if (useSudo &&
96
+ (platform === 'ubuntu' ||
97
+ platform === 'debian' ||
98
+ platform === 'fedora' ||
99
+ platform === 'arch')) {
100
+ console.log(chalk.yellow('\n⚠ Your user was added to the docker group.'));
101
+ console.log(chalk.gray('You may need to log out and log back in for this to take effect.'));
102
+ console.log(chalk.gray('Alternatively, run: newgrp docker (to apply group change in current session)'));
103
+ }
104
+ // Verify installation
105
+ try {
106
+ const versionOutput = execSync('docker --version', {
107
+ stdio: 'pipe',
108
+ encoding: 'utf-8',
109
+ });
110
+ const versionMatch = versionOutput.match(/Docker version (\d+\.\d+\.\d+)/);
111
+ const version = versionMatch ? versionMatch[1] : 'unknown';
112
+ return { success: true, version };
113
+ }
114
+ catch {
115
+ return { success: false };
116
+ }
117
+ }
118
+ async function pollDockerDaemon(maxSeconds = 60) {
119
+ const { default: ora } = await import('ora');
120
+ const spinner = ora('Waiting for Docker daemon to start...').start();
121
+ const startTime = Date.now();
122
+ const interval = 3000; // 3 seconds
123
+ while (Date.now() - startTime < maxSeconds * 1000) {
124
+ try {
125
+ execSync('docker info', { stdio: 'pipe' });
126
+ spinner.succeed('Docker daemon is running');
127
+ return true;
128
+ }
129
+ catch {
130
+ // Daemon not ready yet
131
+ }
132
+ await new Promise((resolve) => setTimeout(resolve, interval));
133
+ }
134
+ spinner.fail('Docker daemon did not start within timeout');
135
+ return false;
136
+ }
137
+ export async function checkDocker(ctx) {
138
+ const platform = ctx.platform;
139
+ // Detection: try docker --version
140
+ let version = null;
141
+ try {
142
+ const versionOutput = execSync('docker --version', {
143
+ stdio: 'pipe',
144
+ encoding: 'utf-8',
145
+ });
146
+ const versionMatch = versionOutput.match(/Docker version (\d+\.\d+\.\d+)/);
147
+ version = versionMatch ? versionMatch[1] : null;
148
+ }
149
+ catch {
150
+ // Docker not found
151
+ }
152
+ if (version) {
153
+ // Docker is installed, check if daemon is running
154
+ try {
155
+ execSync('docker info', { stdio: 'pipe' });
156
+ console.log(chalk.green('✓'), ` Docker v${version}`);
157
+ return { status: 'pass', message: `v${version}` };
158
+ }
159
+ catch {
160
+ // Daemon not running
161
+ console.log(chalk.yellow('⚠'), ` Docker v${version} installed, but daemon not running`);
162
+ if (platform === 'macos' || platform === 'windows') {
163
+ console.log(chalk.yellow('\nPlease open Docker Desktop to start the daemon'));
164
+ const daemonReady = await pollDockerDaemon(60);
165
+ if (daemonReady) {
166
+ return { status: 'pass', message: `v${version}` };
167
+ }
168
+ return {
169
+ status: 'skip',
170
+ message: 'Docker found, daemon not running',
171
+ };
172
+ }
173
+ else {
174
+ // Linux: try to start daemon
175
+ console.log(chalk.yellow('\nAttempting to start Docker daemon...'));
176
+ const startResult = await runInstallCommand('systemctl start docker', {
177
+ sudo: true,
178
+ });
179
+ if (startResult.success) {
180
+ try {
181
+ execSync('docker info', { stdio: 'pipe' });
182
+ console.log(chalk.green('✓'), ` Docker v${version} (daemon started)`);
183
+ return { status: 'pass', message: `v${version}` };
184
+ }
185
+ catch {
186
+ // Still not running
187
+ }
188
+ }
189
+ return {
190
+ status: 'skip',
191
+ message: 'Docker found, daemon not running',
192
+ };
193
+ }
194
+ }
195
+ }
196
+ // Docker not found - offer to install
197
+ const { default: inquirer } = await import('inquirer');
198
+ const { installDocker: shouldInstall } = await inquirer.prompt([
199
+ {
200
+ type: 'confirm',
201
+ name: 'installDocker',
202
+ message: 'Docker is required for ChromaDB. Install Docker now?',
203
+ default: true,
204
+ },
205
+ ]);
206
+ if (!shouldInstall) {
207
+ console.log(chalk.yellow('⚠'), ' Skipped — ChromaDB and indexing will also skip');
208
+ return {
209
+ status: 'skip',
210
+ message: 'Skipped — ChromaDB and indexing will also skip',
211
+ };
212
+ }
213
+ const installResult = await installDocker(platform);
214
+ if (!installResult.success) {
215
+ return {
216
+ status: 'skip',
217
+ message: 'Docker installation failed or skipped',
218
+ };
219
+ }
220
+ // Wait for daemon on macOS/Windows
221
+ if (platform === 'macos' || platform === 'windows') {
222
+ console.log(chalk.yellow('\nStarting Docker Desktop...'));
223
+ const daemonReady = await pollDockerDaemon(60);
224
+ if (!daemonReady) {
225
+ console.log(chalk.yellow('\nPlease open Docker Desktop manually and re-run `delfos setup`'));
226
+ return {
227
+ status: 'skip',
228
+ message: 'Docker installed, daemon pending',
229
+ };
230
+ }
231
+ }
232
+ console.log(chalk.green('✓'), ` Docker v${installResult.version} (installed)`);
233
+ return {
234
+ status: 'pass',
235
+ message: `v${installResult.version} (installed)`,
236
+ };
237
+ }
238
+ //# sourceMappingURL=check-docker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-docker.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/check-docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG5D,KAAK,UAAU,aAAa,CAC1B,QAAkB;IAElB,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEpD,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO;gBACL,mIAAmI,CAAC;YACtI,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,KAAK,QAAQ;YACX,OAAO;gBACL,oFAAoF,CAAC;YACvF,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,KAAK,MAAM;YACT,OAAO;gBACL,2FAA2F,CAAC;YAC9F,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,qBAAqB;YACrB,IAAI,CAAC;gBACH,QAAQ,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;gBAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBAChD;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,6CAA6C;wBACtD,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC5B,CAAC;gBAED,MAAM,WAAW,GAAG,GAAG,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC1D,MAAM,UAAU,GAAG,MAAM,iBAAiB,CACxC,iGAAiG,EACjG,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;gBACF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBACxB,WAAW,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;oBACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBAC5B,CAAC;gBACD,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,GAAG,4BAA4B,CAAC;YACvC,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,mBAAmB;YACnB,IAAI,CAAC;gBACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,sGAAsG,CACvG,CACF,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC;YAED,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACL,oGAAoG,CAAC;YACvG,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;QACR,KAAK,eAAe;YAClB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,0IAA0I,CAC3I,CACF,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B;YACE,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,4EAA4E,CAC7E,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,yIAAyI,CAC1I,CACF,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEpC,mCAAmC;IACnC,IACE,OAAO;QACP,CAAC,QAAQ,KAAK,QAAQ;YACpB,QAAQ,KAAK,QAAQ;YACrB,QAAQ,KAAK,QAAQ;YACrB,QAAQ,KAAK,MAAM,CAAC,EACtB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,kEAAkE,CACnE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,8EAA8E,CAC/E,CACF,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,EAAE;YACjD,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,aAAqB,EAAE;IACrD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,uCAAuC,CAAC,CAAC,KAAK,EAAE,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,YAAY;IAEnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAiB;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,kCAAkC;IAClC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,EAAE;YACjD,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC3E,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,kDAAkD;QAClD,IAAI,CAAC;YACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;YACrB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EACjB,YAAY,OAAO,oCAAoC,CACxD,CAAC;YAEF,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CACjE,CAAC;gBACF,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;gBACpD,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,kCAAkC;iBAC5C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACpE,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,wBAAwB,EAAE;oBACpE,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;gBACH,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACxB,IAAI,CAAC;wBACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;wBAC3C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAChB,YAAY,OAAO,mBAAmB,CACvC,CAAC;wBACF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC;oBACpD,CAAC;oBAAC,MAAM,CAAC;wBACP,oBAAoB;oBACtB,CAAC;gBACH,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,kCAAkC;iBAC5C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC7D;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,sDAAsD;YAC/D,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EACjB,iDAAiD,CAClD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,gDAAgD;SAC1D,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,uCAAuC;SACjD,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,iEAAiE,CAClE,CACF,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,kCAAkC;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAChB,YAAY,aAAa,CAAC,OAAO,cAAc,CAChD,CAAC;IACF,OAAO;QACL,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI,aAAa,CAAC,OAAO,cAAc;KACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SetupContext, StepResult } from '../setup-context.js';
2
+ export declare function checkNode(ctx: SetupContext): Promise<StepResult>;
3
+ //# sourceMappingURL=check-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-node.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/check-node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,wBAAsB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAqCtE"}
@@ -0,0 +1,34 @@
1
+ import chalk from 'chalk';
2
+ export async function checkNode(ctx) {
3
+ const version = process.version;
4
+ const majorVersion = parseInt(version.replace(/^v/, '').split('.')[0], 10);
5
+ if (majorVersion >= 22) {
6
+ console.log(chalk.green('✓'), ` Node.js ${version}`);
7
+ return { status: 'pass', message: version };
8
+ }
9
+ console.log(chalk.red('✗'), ` Node.js ${version} — requires v22+`);
10
+ // Show platform-specific upgrade instructions
11
+ const platform = ctx.platform;
12
+ let instructions = '';
13
+ switch (platform) {
14
+ case 'ubuntu':
15
+ case 'debian':
16
+ instructions =
17
+ 'curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs';
18
+ break;
19
+ case 'macos':
20
+ instructions = 'brew install node@22 or nvm install 22';
21
+ break;
22
+ case 'windows':
23
+ instructions =
24
+ 'winget install OpenJS.NodeJS.LTS or download from nodejs.org';
25
+ break;
26
+ default:
27
+ instructions = 'nvm install 22 or download from nodejs.org';
28
+ break;
29
+ }
30
+ console.log(chalk.yellow('\nUpgrade instructions:'));
31
+ console.log(chalk.gray(instructions));
32
+ return { status: 'fail', message: `${version} — requires v22+` };
33
+ }
34
+ //# sourceMappingURL=check-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-node.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/check-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAiB;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,OAAO,kBAAkB,CAAC,CAAC;IAEnE,8CAA8C;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,YAAY;gBACV,qGAAqG,CAAC;YACxG,MAAM;QACR,KAAK,OAAO;YACV,YAAY,GAAG,wCAAwC,CAAC;YACxD,MAAM;QACR,KAAK,SAAS;YACZ,YAAY;gBACV,8DAA8D,CAAC;YACjE,MAAM;QACR;YACE,YAAY,GAAG,4CAA4C,CAAC;YAC5D,MAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,kBAAkB,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * configure-mcp.ts — Step 7: Detect IDEs and configure MCP servers.
3
+ */
4
+ import type { SetupContext, StepResult } from '../setup-context.js';
5
+ export declare function configureMcp(ctx: SetupContext): Promise<StepResult>;
6
+ //# sourceMappingURL=configure-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-mcp.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/configure-mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyGpE,wBAAsB,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAgLzE"}