@delfos-ai/cli 1.0.5 → 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 (148) hide show
  1. package/README.md +1 -2
  2. package/dist/api/__tests__/delfos-api.client.test.d.ts +2 -0
  3. package/dist/api/__tests__/delfos-api.client.test.d.ts.map +1 -0
  4. package/dist/api/__tests__/delfos-api.client.test.js +64 -0
  5. package/dist/api/__tests__/delfos-api.client.test.js.map +1 -0
  6. package/dist/api/delfos-api.client.d.ts +4 -1
  7. package/dist/api/delfos-api.client.d.ts.map +1 -1
  8. package/dist/api/delfos-api.client.js +44 -1
  9. package/dist/api/delfos-api.client.js.map +1 -1
  10. package/dist/commands/login.command.d.ts.map +1 -1
  11. package/dist/commands/login.command.js +15 -9
  12. package/dist/commands/login.command.js.map +1 -1
  13. package/dist/commands/logout.command.d.ts.map +1 -1
  14. package/dist/commands/logout.command.js +5 -5
  15. package/dist/commands/logout.command.js.map +1 -1
  16. package/dist/commands/memory/memory-init.command.d.ts +6 -0
  17. package/dist/commands/memory/memory-init.command.d.ts.map +1 -1
  18. package/dist/commands/memory/memory-init.command.js +40 -8
  19. package/dist/commands/memory/memory-init.command.js.map +1 -1
  20. package/dist/commands/setup/platform.d.ts +12 -0
  21. package/dist/commands/setup/platform.d.ts.map +1 -0
  22. package/dist/commands/setup/platform.js +67 -0
  23. package/dist/commands/setup/platform.js.map +1 -0
  24. package/dist/commands/setup/setup-context.d.ts +27 -0
  25. package/dist/commands/setup/setup-context.d.ts.map +1 -0
  26. package/dist/commands/setup/setup-context.js +45 -0
  27. package/dist/commands/setup/setup-context.js.map +1 -0
  28. package/dist/commands/setup/setup-wizard.d.ts +2 -0
  29. package/dist/commands/setup/setup-wizard.d.ts.map +1 -0
  30. package/dist/commands/setup/setup-wizard.js +75 -0
  31. package/dist/commands/setup/setup-wizard.js.map +1 -0
  32. package/dist/commands/setup/setup.command.d.ts +3 -0
  33. package/dist/commands/setup/setup.command.d.ts.map +1 -0
  34. package/dist/commands/setup/setup.command.js +6 -0
  35. package/dist/commands/setup/setup.command.js.map +1 -0
  36. package/dist/commands/setup/steps/authenticate.d.ts +6 -0
  37. package/dist/commands/setup/steps/authenticate.d.ts.map +1 -0
  38. package/dist/commands/setup/steps/authenticate.js +91 -0
  39. package/dist/commands/setup/steps/authenticate.js.map +1 -0
  40. package/dist/commands/setup/steps/check-chromadb.d.ts +3 -0
  41. package/dist/commands/setup/steps/check-chromadb.d.ts.map +1 -0
  42. package/dist/commands/setup/steps/check-chromadb.js +208 -0
  43. package/dist/commands/setup/steps/check-chromadb.js.map +1 -0
  44. package/dist/commands/setup/steps/check-docker.d.ts +3 -0
  45. package/dist/commands/setup/steps/check-docker.d.ts.map +1 -0
  46. package/dist/commands/setup/steps/check-docker.js +238 -0
  47. package/dist/commands/setup/steps/check-docker.js.map +1 -0
  48. package/dist/commands/setup/steps/check-node.d.ts +3 -0
  49. package/dist/commands/setup/steps/check-node.d.ts.map +1 -0
  50. package/dist/commands/setup/steps/check-node.js +34 -0
  51. package/dist/commands/setup/steps/check-node.js.map +1 -0
  52. package/dist/commands/setup/steps/configure-mcp.d.ts +6 -0
  53. package/dist/commands/setup/steps/configure-mcp.d.ts.map +1 -0
  54. package/dist/commands/setup/steps/configure-mcp.js +189 -0
  55. package/dist/commands/setup/steps/configure-mcp.js.map +1 -0
  56. package/dist/commands/setup/steps/configure-vault.d.ts +6 -0
  57. package/dist/commands/setup/steps/configure-vault.d.ts.map +1 -0
  58. package/dist/commands/setup/steps/configure-vault.js +165 -0
  59. package/dist/commands/setup/steps/configure-vault.js.map +1 -0
  60. package/dist/commands/setup/steps/index-vault.d.ts +6 -0
  61. package/dist/commands/setup/steps/index-vault.d.ts.map +1 -0
  62. package/dist/commands/setup/steps/index-vault.js +66 -0
  63. package/dist/commands/setup/steps/index-vault.js.map +1 -0
  64. package/dist/commands/setup/steps/init-vault.d.ts +6 -0
  65. package/dist/commands/setup/steps/init-vault.d.ts.map +1 -0
  66. package/dist/commands/setup/steps/init-vault.js +68 -0
  67. package/dist/commands/setup/steps/init-vault.js.map +1 -0
  68. package/dist/commands/setup/steps/summary.d.ts +3 -0
  69. package/dist/commands/setup/steps/summary.d.ts.map +1 -0
  70. package/dist/commands/setup/steps/summary.js +66 -0
  71. package/dist/commands/setup/steps/summary.js.map +1 -0
  72. package/dist/commands/setup/steps/welcome.d.ts +3 -0
  73. package/dist/commands/setup/steps/welcome.d.ts.map +1 -0
  74. package/dist/commands/setup/steps/welcome.js +61 -0
  75. package/dist/commands/setup/steps/welcome.js.map +1 -0
  76. package/dist/config/__tests__/cli-config.test.d.ts +2 -0
  77. package/dist/config/__tests__/cli-config.test.d.ts.map +1 -0
  78. package/dist/config/__tests__/cli-config.test.js +44 -0
  79. package/dist/config/__tests__/cli-config.test.js.map +1 -0
  80. package/dist/config/cli-config.d.ts +1 -1
  81. package/dist/config/cli-config.d.ts.map +1 -1
  82. package/dist/config/cli-config.js +40 -4
  83. package/dist/config/cli-config.js.map +1 -1
  84. package/dist/config/memory.config.d.ts +5 -5
  85. package/dist/config/memory.config.js +1 -1
  86. package/dist/config/memory.config.js.map +1 -1
  87. package/dist/features/memory-index/memory-index.schema.d.ts +4 -4
  88. package/dist/features/memory-init/index.d.ts +3 -0
  89. package/dist/features/memory-init/index.d.ts.map +1 -0
  90. package/dist/features/memory-init/index.js +2 -0
  91. package/dist/features/memory-init/index.js.map +1 -0
  92. package/dist/features/memory-read/memory-read.schema.d.ts +10 -10
  93. package/dist/features/memory-read/rag-reader.js +2 -2
  94. package/dist/features/memory-read/rag-reader.js.map +1 -1
  95. package/dist/features/memory-server/config-loader.js +1 -1
  96. package/dist/features/memory-server/config-loader.js.map +1 -1
  97. package/dist/features/memory-server/memory-server.d.ts.map +1 -1
  98. package/dist/features/memory-server/memory-server.js +22 -0
  99. package/dist/features/memory-server/memory-server.js.map +1 -1
  100. package/dist/features/memory-server/memory-server.schema.d.ts +17 -20
  101. package/dist/features/memory-server/memory-server.schema.d.ts.map +1 -1
  102. package/dist/features/memory-server/memory-server.schema.js +0 -1
  103. package/dist/features/memory-server/memory-server.schema.js.map +1 -1
  104. package/dist/features/memory-server/tools/memory-read.handler.js +1 -1
  105. package/dist/features/memory-server/tools/memory-read.handler.js.map +1 -1
  106. package/dist/features/memory-shared/__tests__/chunker.test.d.ts +2 -0
  107. package/dist/features/memory-shared/__tests__/chunker.test.d.ts.map +1 -0
  108. package/dist/features/memory-shared/__tests__/chunker.test.js +24 -0
  109. package/dist/features/memory-shared/__tests__/chunker.test.js.map +1 -0
  110. package/dist/features/memory-shared/__tests__/vault-slug.test.d.ts +2 -0
  111. package/dist/features/memory-shared/__tests__/vault-slug.test.d.ts.map +1 -0
  112. package/dist/features/memory-shared/__tests__/vault-slug.test.js +13 -0
  113. package/dist/features/memory-shared/__tests__/vault-slug.test.js.map +1 -0
  114. package/dist/features/memory-write/memory-write.schema.d.ts +2 -2
  115. package/dist/features/memory-write/vault-writer.d.ts.map +1 -1
  116. package/dist/features/memory-write/vault-writer.js +3 -0
  117. package/dist/features/memory-write/vault-writer.js.map +1 -1
  118. package/dist/index.js +3 -0
  119. package/dist/index.js.map +1 -1
  120. package/dist/infrastructure/crypto/crypto.d.ts +11 -0
  121. package/dist/infrastructure/crypto/crypto.d.ts.map +1 -0
  122. package/dist/infrastructure/crypto/crypto.js +57 -0
  123. package/dist/infrastructure/crypto/crypto.js.map +1 -0
  124. package/dist/infrastructure/embeddings/__tests__/local-embedding.provider.test.d.ts +2 -0
  125. package/dist/infrastructure/embeddings/__tests__/local-embedding.provider.test.d.ts.map +1 -0
  126. package/dist/infrastructure/embeddings/__tests__/local-embedding.provider.test.js +62 -0
  127. package/dist/infrastructure/embeddings/__tests__/local-embedding.provider.test.js.map +1 -0
  128. package/dist/infrastructure/embeddings/local-embedding.provider.d.ts +0 -3
  129. package/dist/infrastructure/embeddings/local-embedding.provider.d.ts.map +1 -1
  130. package/dist/infrastructure/embeddings/local-embedding.provider.js +7 -4
  131. package/dist/infrastructure/embeddings/local-embedding.provider.js.map +1 -1
  132. package/dist/infrastructure/logger/__tests__/logger.test.d.ts +2 -0
  133. package/dist/infrastructure/logger/__tests__/logger.test.d.ts.map +1 -0
  134. package/dist/infrastructure/logger/__tests__/logger.test.js +65 -0
  135. package/dist/infrastructure/logger/__tests__/logger.test.js.map +1 -0
  136. package/dist/infrastructure/vector-db/__tests__/chroma.adapter.test.d.ts +2 -0
  137. package/dist/infrastructure/vector-db/__tests__/chroma.adapter.test.d.ts.map +1 -0
  138. package/dist/infrastructure/vector-db/__tests__/chroma.adapter.test.js +153 -0
  139. package/dist/infrastructure/vector-db/__tests__/chroma.adapter.test.js.map +1 -0
  140. package/dist/infrastructure/vector-db/chroma.adapter.d.ts +3 -8
  141. package/dist/infrastructure/vector-db/chroma.adapter.d.ts.map +1 -1
  142. package/dist/infrastructure/vector-db/chroma.adapter.js +56 -60
  143. package/dist/infrastructure/vector-db/chroma.adapter.js.map +1 -1
  144. package/dist/utils/config.d.ts +2 -2
  145. package/dist/utils/config.d.ts.map +1 -1
  146. package/dist/utils/config.js +6 -2
  147. package/dist/utils/config.js.map +1 -1
  148. package/package.json +15 -9
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * configure-mcp.ts — Step 7: Detect IDEs and configure MCP servers.
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as os from 'node:os';
6
+ import * as path from 'node:path';
7
+ import chalk from 'chalk';
8
+ function getIdeConfigs() {
9
+ const homeDir = os.homedir();
10
+ const platform = process.platform;
11
+ const configs = [];
12
+ // Claude Code
13
+ configs.push({
14
+ name: 'Claude Code',
15
+ configPath: path.join(homeDir, '.claude.json'),
16
+ rootKey: 'mcpServers',
17
+ needsType: false,
18
+ detectPath: path.join(homeDir, '.claude'),
19
+ });
20
+ // VS Code (Copilot)
21
+ let vscodeConfigPath;
22
+ let vscodeDetectPath;
23
+ if (platform === 'linux') {
24
+ vscodeConfigPath = path.join(homeDir, '.config', 'Code', 'User', 'mcp.json');
25
+ vscodeDetectPath = path.join(homeDir, '.config', 'Code');
26
+ }
27
+ else if (platform === 'darwin') {
28
+ vscodeConfigPath = path.join(homeDir, 'Library', 'Application Support', 'Code', 'User', 'mcp.json');
29
+ vscodeDetectPath = path.join(homeDir, 'Library', 'Application Support', 'Code');
30
+ }
31
+ else {
32
+ // Windows
33
+ const appData = process.env.APPDATA ?? path.join(homeDir, 'AppData', 'Roaming');
34
+ vscodeConfigPath = path.join(appData, 'Code', 'User', 'mcp.json');
35
+ vscodeDetectPath = path.join(appData, 'Code');
36
+ }
37
+ configs.push({
38
+ name: 'VS Code (Copilot)',
39
+ configPath: vscodeConfigPath,
40
+ rootKey: 'servers',
41
+ needsType: true,
42
+ detectPath: vscodeDetectPath,
43
+ });
44
+ // Cursor
45
+ configs.push({
46
+ name: 'Cursor',
47
+ configPath: path.join(homeDir, '.cursor', 'mcp.json'),
48
+ rootKey: 'mcpServers',
49
+ needsType: false,
50
+ detectPath: path.join(homeDir, '.cursor'),
51
+ });
52
+ // Windsurf
53
+ configs.push({
54
+ name: 'Windsurf',
55
+ configPath: path.join(homeDir, '.codeium', 'windsurf', 'mcp_config.json'),
56
+ rootKey: 'mcpServers',
57
+ needsType: false,
58
+ detectPath: path.join(homeDir, '.codeium', 'windsurf'),
59
+ });
60
+ return configs;
61
+ }
62
+ function isIdeInstalled(ide) {
63
+ return fs.existsSync(ide.detectPath);
64
+ }
65
+ function buildMcpEntry(vaultPath, needsType) {
66
+ const entry = {
67
+ command: 'delfos',
68
+ args: ['mcp', 'memory', '--vault-path', vaultPath],
69
+ };
70
+ if (needsType) {
71
+ entry.type = 'stdio';
72
+ }
73
+ return entry;
74
+ }
75
+ export async function configureMcp(ctx) {
76
+ try {
77
+ if (!ctx.vaultPath) {
78
+ return { status: 'skip', message: 'No vault configured' };
79
+ }
80
+ const ideConfigs = getIdeConfigs();
81
+ const installedIdes = ideConfigs.filter(isIdeInstalled);
82
+ if (installedIdes.length === 0) {
83
+ console.log(chalk.yellow('⚠ No supported IDE detected — configure MCP manually later\n'));
84
+ console.log('Add the following to your IDE config:\n');
85
+ console.log(chalk.gray(JSON.stringify({
86
+ 'delfos-memory': {
87
+ command: 'delfos',
88
+ args: ['mcp', 'memory', '--vault-path', ctx.vaultPath],
89
+ },
90
+ }, null, 2)));
91
+ console.log(chalk.gray('\nConfig file locations:'));
92
+ console.log(chalk.gray(' Claude Code: ~/.claude.json (key: mcpServers)'));
93
+ console.log(chalk.gray(' VS Code: ~/.config/Code/User/mcp.json (key: servers, add "type": "stdio")'));
94
+ console.log(chalk.gray(' Cursor: ~/.cursor/mcp.json (key: mcpServers)'));
95
+ console.log(chalk.gray(' Windsurf: ~/.codeium/windsurf/mcp_config.json (key: mcpServers)'));
96
+ return { status: 'skip', message: 'No supported IDE detected' };
97
+ }
98
+ const configuredIdes = [];
99
+ const alreadyConfiguredIdes = [];
100
+ const { default: inquirer } = await import('inquirer');
101
+ for (const ide of installedIdes) {
102
+ try {
103
+ // Read existing config — distinguish missing file from malformed JSON
104
+ let existingConfig = {};
105
+ if (fs.existsSync(ide.configPath)) {
106
+ try {
107
+ const raw = fs.readFileSync(ide.configPath, 'utf-8');
108
+ existingConfig = JSON.parse(raw);
109
+ }
110
+ catch {
111
+ console.log(chalk.yellow(` ⚠ ${ide.name}: config file contains invalid JSON — skipping to avoid data loss`));
112
+ continue;
113
+ }
114
+ }
115
+ // Check if delfos-memory already exists with identical args
116
+ const root = existingConfig[ide.rootKey];
117
+ const existingEntry = root?.['delfos-memory'];
118
+ const newEntry = buildMcpEntry(ctx.vaultPath, ide.needsType);
119
+ if (existingEntry &&
120
+ JSON.stringify(existingEntry) === JSON.stringify(newEntry)) {
121
+ console.log(chalk.gray(` ${ide.name}: already configured`));
122
+ alreadyConfiguredIdes.push(ide.name);
123
+ continue;
124
+ }
125
+ // Show the entry being added
126
+ console.log(chalk.blue(`\n ${ide.name}:`));
127
+ console.log(chalk.gray(' Adding MCP entry:'));
128
+ console.log(chalk.gray(' ' +
129
+ JSON.stringify({ 'delfos-memory': newEntry }, null, 2).replace(/\n/g, '\n ')));
130
+ const { confirm } = await inquirer.prompt([
131
+ {
132
+ type: 'confirm',
133
+ name: 'confirm',
134
+ message: `Write MCP config to ${ide.name}?`,
135
+ default: true,
136
+ },
137
+ ]);
138
+ if (!confirm) {
139
+ console.log(chalk.gray(` Skipped ${ide.name}`));
140
+ continue;
141
+ }
142
+ // Deep merge the new entry
143
+ if (!root) {
144
+ existingConfig[ide.rootKey] = {};
145
+ }
146
+ existingConfig[ide.rootKey]['delfos-memory'] = newEntry;
147
+ // Write file with 2-space indent
148
+ const dir = path.dirname(ide.configPath);
149
+ if (!fs.existsSync(dir)) {
150
+ fs.mkdirSync(dir, { recursive: true });
151
+ }
152
+ fs.writeFileSync(ide.configPath, JSON.stringify(existingConfig, null, 2), 'utf-8');
153
+ console.log(chalk.green(` ✓ ${ide.name} configured`));
154
+ configuredIdes.push(ide.name);
155
+ }
156
+ catch (error) {
157
+ // Re-throw interrupt signals so the user can exit the wizard
158
+ if (error instanceof Error &&
159
+ (error.message.includes('force closed') ||
160
+ error.message.includes('prompt was closed'))) {
161
+ throw error;
162
+ }
163
+ console.log(chalk.yellow(` ⚠ ${ide.name}: ${error instanceof Error ? error.message : String(error)}`));
164
+ }
165
+ }
166
+ ctx.mcpConfigured =
167
+ configuredIdes.length > 0 || alreadyConfiguredIdes.length > 0;
168
+ if (configuredIdes.length === 0 && alreadyConfiguredIdes.length > 0) {
169
+ return {
170
+ status: 'pass',
171
+ message: `Already configured: ${alreadyConfiguredIdes.join(', ')}`,
172
+ };
173
+ }
174
+ if (configuredIdes.length === 0) {
175
+ return {
176
+ status: 'skip',
177
+ message: 'No IDEs were configured — add manually later',
178
+ };
179
+ }
180
+ return { status: 'pass', message: configuredIdes.join(', ') };
181
+ }
182
+ catch (error) {
183
+ return {
184
+ status: 'fail',
185
+ message: error instanceof Error ? error.message : String(error),
186
+ };
187
+ }
188
+ }
189
+ //# sourceMappingURL=configure-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-mcp.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/configure-mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,cAAc;IACd,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;QAC9C,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KAC1C,CAAC,CAAC;IAEH,oBAAoB;IACpB,IAAI,gBAAwB,CAAC;IAC7B,IAAI,gBAAwB,CAAC;IAC7B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAC1B,OAAO,EACP,SAAS,EACT,MAAM,EACN,MAAM,EACN,UAAU,CACX,CAAC;QACF,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAC1B,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,MAAM,EACN,MAAM,EACN,UAAU,CACX,CAAC;QACF,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAC1B,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,MAAM,CACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,UAAU;QACV,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAClE,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IAEH,SAAS;IACT,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC;QACrD,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;KAC1C,CAAC,CAAC;IAEH,WAAW;IACX,OAAO,CAAC,IAAI,CAAC;QACX,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAC;QACzE,OAAO,EAAE,YAAY;QACrB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;KACvD,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,GAAc;IACpC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CACpB,SAAiB,EACjB,SAAkB;IAElB,MAAM,KAAK,GAA4B;QACrC,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,CAAC;KACnD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAiB;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAC5D,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,8DAA8D,CAC/D,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,SAAS,CACZ;gBACE,eAAe,EAAE;oBACf,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,SAAS,CAAC;iBACvD;aACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAC9D,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,iFAAiF,CAClF,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,sEAAsE,CACvE,CACF,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;QAClE,CAAC;QAED,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,qBAAqB,GAAa,EAAE,CAAC;QAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,sEAAsE;gBACtE,IAAI,cAAc,GAA4B,EAAE,CAAC;gBACjD,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBACrD,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnC,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,OAAO,GAAG,CAAC,IAAI,mEAAmE,CACnF,CACF,CAAC;wBACF,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAE1B,CAAC;gBACd,MAAM,aAAa,GAAG,IAAI,EAAE,CAAC,eAAe,CAE/B,CAAC;gBACd,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBAE7D,IACE,aAAa;oBACb,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAC1D,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC;oBAC7D,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACrC,SAAS;gBACX,CAAC;gBAED,6BAA6B;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,IAAI;oBACF,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAC5D,KAAK,EACL,MAAM,CACP,CACJ,CACF,CAAC;gBAEF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;oBACxC;wBACE,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,uBAAuB,GAAG,CAAC,IAAI,GAAG;wBAC3C,OAAO,EAAE,IAAI;qBACd;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACjD,SAAS;gBACX,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACnC,CAAC;gBACA,cAAc,CAAC,GAAG,CAAC,OAAO,CAA6B,CACtD,eAAe,CAChB,GAAG,QAAQ,CAAC;gBAEb,iCAAiC;gBACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,EAAE,CAAC,aAAa,CACd,GAAG,CAAC,UAAU,EACd,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,EACvC,OAAO,CACR,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;gBACvD,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,6DAA6D;gBAC7D,IACE,KAAK,YAAY,KAAK;oBACtB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;wBACrC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAC9C,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,OAAO,GAAG,CAAC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7E,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,aAAa;YACf,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;QAChE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,uBAAuB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACnE,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,8CAA8C;aACxD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * configure-vault.ts — Step 4: Auto-detect Obsidian vaults and configure path.
3
+ */
4
+ import type { SetupContext, StepResult } from '../setup-context.js';
5
+ export declare function configureVault(ctx: SetupContext): Promise<StepResult>;
6
+ //# sourceMappingURL=configure-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-vault.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/configure-vault.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,wBAAsB,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAkH3E"}