@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,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":"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"}
@@ -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"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * configure-vault.ts — Step 4: Auto-detect Obsidian vaults and configure path.
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as os from 'node:os';
6
+ import * as path from 'node:path';
7
+ import chalk from 'chalk';
8
+ import { validateVaultPath } from '../../../features/memory-shared/vault-path-validator.js';
9
+ export async function configureVault(ctx) {
10
+ try {
11
+ // Auto-detect Obsidian vaults
12
+ const vaults = await detectObsidianVaults();
13
+ const { default: inquirer } = await import('inquirer');
14
+ let selectedPath;
15
+ if (vaults.length > 0) {
16
+ const { choice } = await inquirer.prompt([
17
+ {
18
+ type: 'list',
19
+ name: 'choice',
20
+ message: 'Select your Obsidian vault:',
21
+ choices: [...vaults, 'Enter a different path'],
22
+ },
23
+ ]);
24
+ if (choice === 'Enter a different path') {
25
+ const { inputPath } = await inquirer.prompt([
26
+ {
27
+ type: 'input',
28
+ name: 'inputPath',
29
+ message: 'Enter vault path:',
30
+ validate: (input) => input.trim().length > 0 || 'Path is required',
31
+ },
32
+ ]);
33
+ selectedPath = inputPath;
34
+ }
35
+ else {
36
+ selectedPath = choice;
37
+ }
38
+ }
39
+ else {
40
+ const { inputPath } = await inquirer.prompt([
41
+ {
42
+ type: 'input',
43
+ name: 'inputPath',
44
+ message: 'Enter vault path:',
45
+ validate: (input) => input.trim().length > 0 || 'Path is required',
46
+ },
47
+ ]);
48
+ selectedPath = inputPath;
49
+ }
50
+ const validation = await validateVaultPath(selectedPath);
51
+ // Handle validation errors first (before warnings)
52
+ if (!validation.valid) {
53
+ console.log(chalk.red(`\n✗ ${validation.errors.join(', ')}`));
54
+ // Offer to create directory if it doesn't exist
55
+ if (validation.errors.some((e) => e.includes('does not exist'))) {
56
+ const { createDir } = await inquirer.prompt([
57
+ {
58
+ type: 'confirm',
59
+ name: 'createDir',
60
+ message: 'Create this directory?',
61
+ default: false,
62
+ },
63
+ ]);
64
+ if (createDir) {
65
+ try {
66
+ await fs.mkdir(validation.resolvedPath, { recursive: true });
67
+ }
68
+ catch (err) {
69
+ return {
70
+ status: 'fail',
71
+ message: `Failed to create directory: ${err instanceof Error ? err.message : String(err)}`,
72
+ };
73
+ }
74
+ const revalidation = await validateVaultPath(validation.resolvedPath);
75
+ if (!revalidation.valid) {
76
+ return { status: 'fail', message: revalidation.errors.join(', ') };
77
+ }
78
+ if (revalidation.warnings.length > 0) {
79
+ console.log(chalk.yellow(`\n⚠ ${revalidation.warnings.join(', ')}`));
80
+ }
81
+ ctx.vaultPath = revalidation.resolvedPath;
82
+ return { status: 'pass', message: revalidation.resolvedPath };
83
+ }
84
+ }
85
+ return { status: 'fail', message: validation.errors.join(', ') };
86
+ }
87
+ // Show warnings only on valid paths
88
+ if (validation.warnings.length > 0) {
89
+ console.log(chalk.yellow(`\n⚠ ${validation.warnings.join(', ')}`));
90
+ const { confirm } = await inquirer.prompt([
91
+ {
92
+ type: 'confirm',
93
+ name: 'confirm',
94
+ message: 'Continue anyway?',
95
+ default: false,
96
+ },
97
+ ]);
98
+ if (!confirm) {
99
+ return { status: 'fail', message: 'Vault selection cancelled' };
100
+ }
101
+ }
102
+ ctx.vaultPath = validation.resolvedPath;
103
+ return { status: 'pass', message: validation.resolvedPath };
104
+ }
105
+ catch (error) {
106
+ return {
107
+ status: 'fail',
108
+ message: error instanceof Error ? error.message : String(error),
109
+ };
110
+ }
111
+ }
112
+ /**
113
+ * Auto-detects Obsidian vaults in common locations.
114
+ */
115
+ async function detectObsidianVaults() {
116
+ const vaults = [];
117
+ const homeDir = os.homedir();
118
+ const platform = process.platform;
119
+ let scanPaths = [];
120
+ if (platform === 'linux' || platform === 'darwin') {
121
+ scanPaths = [
122
+ path.join(homeDir, 'Documents'),
123
+ path.join(homeDir, 'Obsidian'),
124
+ path.join(homeDir, 'vaults'),
125
+ homeDir,
126
+ ];
127
+ // macOS iCloud Obsidian
128
+ if (platform === 'darwin') {
129
+ scanPaths.push(path.join(homeDir, 'Library', 'Mobile Documents', 'iCloud~md~obsidian', 'Documents'));
130
+ }
131
+ }
132
+ else if (platform === 'win32') {
133
+ scanPaths = [
134
+ path.join(homeDir, 'Documents'),
135
+ path.join(homeDir, 'Obsidian'),
136
+ path.join(process.env.APPDATA || '', 'Obsidian'),
137
+ ];
138
+ }
139
+ // Scan each path for .obsidian subdirectories
140
+ for (const scanPath of scanPaths) {
141
+ try {
142
+ const entries = await fs.readdir(scanPath, { withFileTypes: true });
143
+ for (const entry of entries) {
144
+ if (entry.isDirectory()) {
145
+ const vaultPath = path.join(scanPath, entry.name);
146
+ try {
147
+ await fs.access(path.join(vaultPath, '.obsidian'));
148
+ vaults.push(vaultPath);
149
+ if (vaults.length >= 20) {
150
+ return vaults;
151
+ }
152
+ }
153
+ catch {
154
+ // Not an Obsidian vault
155
+ }
156
+ }
157
+ }
158
+ }
159
+ catch {
160
+ // Path doesn't exist or is not accessible
161
+ }
162
+ }
163
+ return vaults;
164
+ }
165
+ //# sourceMappingURL=configure-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-vault.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/configure-vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * index-vault.ts — Step 6: Download embedding model + index vault into ChromaDB.
3
+ */
4
+ import type { SetupContext, StepResult } from '../setup-context.js';
5
+ export declare function indexVaultStep(ctx: SetupContext): Promise<StepResult>;
6
+ //# sourceMappingURL=index-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-vault.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/index-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,CAqE3E"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * index-vault.ts — Step 6: Download embedding model + index vault into ChromaDB.
3
+ */
4
+ import chalk from 'chalk';
5
+ import { ChromaDBAdapterImpl } from '../../../infrastructure/vector-db/chroma.adapter.js';
6
+ import { localEmbeddingProvider } from '../../../infrastructure/embeddings/local-embedding.provider.js';
7
+ import { indexVault } from '../../../features/memory-index/vault-indexer.js';
8
+ import { loadMemoryConfig } from '../../../features/memory-server/config-loader.js';
9
+ export async function indexVaultStep(ctx) {
10
+ // Guard: no vault configured
11
+ if (!ctx.vaultPath) {
12
+ return { status: 'skip', message: 'No vault configured' };
13
+ }
14
+ // Skip if ChromaDB was not confirmed available
15
+ const chromadbResult = ctx.results['check-chromadb'];
16
+ if (!chromadbResult || chromadbResult.status !== 'pass') {
17
+ return { status: 'skip', message: 'ChromaDB not available' };
18
+ }
19
+ // Internet check before downloading embedding model
20
+ try {
21
+ await fetch('https://huggingface.co', {
22
+ method: 'HEAD',
23
+ signal: AbortSignal.timeout(5000),
24
+ });
25
+ }
26
+ catch {
27
+ return { status: 'skip', message: 'Offline — re-run when connected' };
28
+ }
29
+ // Construct ChromaDB adapter with configured host/port
30
+ const chroma = new ChromaDBAdapterImpl(ctx.chromaHost, ctx.chromaPort);
31
+ // Warm up embedding model with ora spinner
32
+ const { default: ora } = await import('ora');
33
+ const spinner = ora('Downloading embedding model (all-MiniLM-L6-v2, ~80MB)... first run only').start();
34
+ try {
35
+ await localEmbeddingProvider.embed(['warmup']);
36
+ spinner.succeed('Embedding model ready');
37
+ }
38
+ catch (error) {
39
+ spinner.fail('Embedding model download failed');
40
+ return {
41
+ status: 'fail',
42
+ message: error instanceof Error ? error.message : String(error),
43
+ };
44
+ }
45
+ const indexSpinner = ora('Indexing vault into ChromaDB...').start();
46
+ try {
47
+ const config = await loadMemoryConfig(ctx.vaultPath);
48
+ const result = await indexVault(config, 'full', chroma, localEmbeddingProvider);
49
+ indexSpinner.succeed(`Indexed ${result.indexed} notes into ChromaDB`);
50
+ if (result.errors > 0) {
51
+ console.log(chalk.yellow(`\n⚠ ${result.errors} notes had errors during indexing`));
52
+ }
53
+ return {
54
+ status: 'pass',
55
+ message: `${result.indexed} notes indexed`,
56
+ };
57
+ }
58
+ catch (error) {
59
+ indexSpinner.fail('Vault indexing failed');
60
+ return {
61
+ status: 'fail',
62
+ message: error instanceof Error ? error.message : String(error),
63
+ };
64
+ }
65
+ }
66
+ //# sourceMappingURL=index-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-vault.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/index-vault.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,gEAAgE,CAAC;AACxG,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAGpF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAiB;IACpD,6BAA6B;IAC7B,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IAED,+CAA+C;IAC/C,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC/D,CAAC;IAED,oDAAoD;IACpD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,wBAAwB,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;IACxE,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAEvE,2CAA2C;IAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,GAAG,CACjB,yEAAyE,CAC1E,CAAC,KAAK,EAAE,CAAC;IACV,IAAI,CAAC;QACH,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,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;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,MAAM,EACN,MAAM,EACN,MAAM,EACN,sBAAsB,CACvB,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,mCAAmC,CAAC,CACtE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,gBAAgB;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC3C,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
+ * init-vault.ts — Step 5: Scaffold vault structure from templates.
3
+ */
4
+ import type { SetupContext, StepResult } from '../setup-context.js';
5
+ export declare function initVault(ctx: SetupContext): Promise<StepResult>;
6
+ //# sourceMappingURL=init-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-vault.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/init-vault.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,wBAAsB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAqEtE"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * init-vault.ts — Step 5: Scaffold vault structure from templates.
3
+ */
4
+ import * as fs from 'node:fs/promises';
5
+ import * as path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import chalk from 'chalk';
8
+ import { scaffoldVault } from '../../../features/memory-init/vault-scaffolder.js';
9
+ import { MemoryConfigSchema } from '../../../config/memory.config.js';
10
+ export async function initVault(ctx) {
11
+ // Guard: no vault configured
12
+ if (!ctx.vaultPath) {
13
+ return { status: 'skip', message: 'No vault configured' };
14
+ }
15
+ // Check if already initialized
16
+ const configPath = path.join(ctx.vaultPath, 'DELFOS-AI-LAYER.config.json');
17
+ try {
18
+ await fs.access(configPath);
19
+ return { status: 'pass', message: 'Vault already initialized' };
20
+ }
21
+ catch {
22
+ // Config not accessible (likely doesn't exist) — proceed with initialization
23
+ }
24
+ // Resolve template directory
25
+ const templateDir = fileURLToPath(new URL('../../../../templates/obsidian-vault', import.meta.url));
26
+ // Scaffold vault with ora spinner
27
+ const { default: ora } = await import('ora');
28
+ const spinner = ora('Scaffolding vault structure...').start();
29
+ try {
30
+ const result = await scaffoldVault(ctx.vaultPath, templateDir);
31
+ spinner.succeed('Vault structure scaffolded');
32
+ // Display results
33
+ if (result.created.length > 0) {
34
+ console.log(chalk.green(`\n✓ Created ${result.created.length} files`));
35
+ }
36
+ if (result.skipped.length > 0) {
37
+ console.log(chalk.dim(` Skipped ${result.skipped.length} existing files`));
38
+ }
39
+ }
40
+ catch (error) {
41
+ spinner.fail('Vault scaffolding failed');
42
+ return {
43
+ status: 'fail',
44
+ message: error instanceof Error ? error.message : String(error),
45
+ };
46
+ }
47
+ // Write DELFOS-AI-LAYER.config.json (after spinner is closed)
48
+ try {
49
+ const defaultConfig = MemoryConfigSchema.parse({
50
+ vault_path: ctx.vaultPath,
51
+ vector_db: {
52
+ persist_dir: path.join(ctx.vaultPath, '.delfos', 'vector_db'),
53
+ },
54
+ });
55
+ await fs.writeFile(configPath, JSON.stringify(defaultConfig, null, 2), 'utf-8');
56
+ }
57
+ catch (error) {
58
+ return {
59
+ status: 'fail',
60
+ message: `Failed to write vault config: ${error instanceof Error ? error.message : String(error)}`,
61
+ };
62
+ }
63
+ return {
64
+ status: 'pass',
65
+ message: 'Vault initialized',
66
+ };
67
+ }
68
+ //# sourceMappingURL=init-vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-vault.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/init-vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SetupContext } from '../setup-context.js';
2
+ export declare function showSummary(ctx: SetupContext): Promise<void>;
3
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../../src/commands/setup/steps/summary.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAaxD,wBAAsB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmElE"}
@@ -0,0 +1,66 @@
1
+ import Table from 'cli-table3';
2
+ import { default as chalk } from 'chalk';
3
+ const STEP_LABELS = [
4
+ 'Check Node.js version',
5
+ 'Check ChromaDB availability',
6
+ 'Configure ChromaDB',
7
+ 'Select or create Obsidian vault',
8
+ 'Initialize vault structure',
9
+ 'Index vault content',
10
+ 'Configure MCP server',
11
+ 'Authenticate with Delfos',
12
+ ];
13
+ export async function showSummary(ctx) {
14
+ const { default: boxen } = await import('boxen');
15
+ const hasFailures = Object.values(ctx.results).some((r) => r.status === 'fail');
16
+ const borderColor = hasFailures ? 'yellow' : 'green';
17
+ const header = boxen(chalk.bold('Setup Complete!'), {
18
+ padding: 1,
19
+ borderStyle: 'round',
20
+ borderColor,
21
+ });
22
+ console.log(header);
23
+ // Build results table
24
+ const table = new Table({
25
+ colWidths: [30, 50],
26
+ head: [chalk.gray('Step'), chalk.gray('Status')],
27
+ });
28
+ STEP_LABELS.forEach((label, index) => {
29
+ const stepId = `step-${index + 1}`;
30
+ const result = ctx.results[stepId];
31
+ if (!result) {
32
+ table.push([label, chalk.gray('— not reached')]);
33
+ return;
34
+ }
35
+ let statusIcon;
36
+ let statusColor;
37
+ switch (result.status) {
38
+ case 'pass':
39
+ statusIcon = '✓';
40
+ statusColor = chalk.green;
41
+ break;
42
+ case 'skip':
43
+ statusIcon = '⚠';
44
+ statusColor = chalk.yellow;
45
+ break;
46
+ case 'fail':
47
+ statusIcon = '✗';
48
+ statusColor = chalk.red;
49
+ break;
50
+ }
51
+ table.push([label, statusColor(`${statusIcon} ${result.message}`)]);
52
+ });
53
+ console.log(table.toString());
54
+ // Next steps
55
+ console.log(chalk.bold('\nNext steps:'));
56
+ console.log(chalk.gray('─'.repeat(53)));
57
+ console.log(` ${chalk.cyan('delfos memory read "your question"')}`);
58
+ console.log(` ${chalk.cyan('delfos memory status')}`);
59
+ console.log(` ${chalk.cyan('Restart your IDE to load the MCP server')}`);
60
+ if (hasFailures) {
61
+ console.log();
62
+ console.log(chalk.yellow('Re-run `delfos setup` to retry failed steps'));
63
+ }
64
+ console.log();
65
+ }
66
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../../src/commands/setup/steps/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SetupContext } from '../setup-context.js';
2
+ export declare function showWelcome(ctx: SetupContext): Promise<void>;
3
+ //# sourceMappingURL=welcome.d.ts.map