@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.
- package/dist/commands/login.command.d.ts.map +1 -1
- package/dist/commands/login.command.js +0 -3
- package/dist/commands/login.command.js.map +1 -1
- package/dist/commands/logout.command.d.ts.map +1 -1
- package/dist/commands/logout.command.js +0 -4
- package/dist/commands/logout.command.js.map +1 -1
- package/dist/commands/setup/platform.d.ts +12 -0
- package/dist/commands/setup/platform.d.ts.map +1 -0
- package/dist/commands/setup/platform.js +67 -0
- package/dist/commands/setup/platform.js.map +1 -0
- package/dist/commands/setup/setup-context.d.ts +27 -0
- package/dist/commands/setup/setup-context.d.ts.map +1 -0
- package/dist/commands/setup/setup-context.js +45 -0
- package/dist/commands/setup/setup-context.js.map +1 -0
- package/dist/commands/setup/setup-wizard.d.ts +2 -0
- package/dist/commands/setup/setup-wizard.d.ts.map +1 -0
- package/dist/commands/setup/setup-wizard.js +75 -0
- package/dist/commands/setup/setup-wizard.js.map +1 -0
- package/dist/commands/setup/setup.command.d.ts +3 -0
- package/dist/commands/setup/setup.command.d.ts.map +1 -0
- package/dist/commands/setup/setup.command.js +6 -0
- package/dist/commands/setup/setup.command.js.map +1 -0
- package/dist/commands/setup/steps/authenticate.d.ts +6 -0
- package/dist/commands/setup/steps/authenticate.d.ts.map +1 -0
- package/dist/commands/setup/steps/authenticate.js +91 -0
- package/dist/commands/setup/steps/authenticate.js.map +1 -0
- package/dist/commands/setup/steps/check-chromadb.d.ts +3 -0
- package/dist/commands/setup/steps/check-chromadb.d.ts.map +1 -0
- package/dist/commands/setup/steps/check-chromadb.js +208 -0
- package/dist/commands/setup/steps/check-chromadb.js.map +1 -0
- package/dist/commands/setup/steps/check-docker.d.ts +3 -0
- package/dist/commands/setup/steps/check-docker.d.ts.map +1 -0
- package/dist/commands/setup/steps/check-docker.js +238 -0
- package/dist/commands/setup/steps/check-docker.js.map +1 -0
- package/dist/commands/setup/steps/check-node.d.ts +3 -0
- package/dist/commands/setup/steps/check-node.d.ts.map +1 -0
- package/dist/commands/setup/steps/check-node.js +34 -0
- package/dist/commands/setup/steps/check-node.js.map +1 -0
- package/dist/commands/setup/steps/configure-mcp.d.ts +6 -0
- package/dist/commands/setup/steps/configure-mcp.d.ts.map +1 -0
- package/dist/commands/setup/steps/configure-mcp.js +189 -0
- package/dist/commands/setup/steps/configure-mcp.js.map +1 -0
- package/dist/commands/setup/steps/configure-vault.d.ts +6 -0
- package/dist/commands/setup/steps/configure-vault.d.ts.map +1 -0
- package/dist/commands/setup/steps/configure-vault.js +165 -0
- package/dist/commands/setup/steps/configure-vault.js.map +1 -0
- package/dist/commands/setup/steps/index-vault.d.ts +6 -0
- package/dist/commands/setup/steps/index-vault.d.ts.map +1 -0
- package/dist/commands/setup/steps/index-vault.js +66 -0
- package/dist/commands/setup/steps/index-vault.js.map +1 -0
- package/dist/commands/setup/steps/init-vault.d.ts +6 -0
- package/dist/commands/setup/steps/init-vault.d.ts.map +1 -0
- package/dist/commands/setup/steps/init-vault.js +68 -0
- package/dist/commands/setup/steps/init-vault.js.map +1 -0
- package/dist/commands/setup/steps/summary.d.ts +3 -0
- package/dist/commands/setup/steps/summary.d.ts.map +1 -0
- package/dist/commands/setup/steps/summary.js +66 -0
- package/dist/commands/setup/steps/summary.js.map +1 -0
- package/dist/commands/setup/steps/welcome.d.ts +3 -0
- package/dist/commands/setup/steps/welcome.d.ts.map +1 -0
- package/dist/commands/setup/steps/welcome.js +61 -0
- package/dist/commands/setup/steps/welcome.js.map +1 -0
- package/dist/features/memory-server/config-loader.js +1 -1
- package/dist/features/memory-server/config-loader.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/crypto/crypto.js +1 -1
- package/dist/infrastructure/crypto/crypto.js.map +1 -1
- 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":"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"}
|
|
@@ -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 @@
|
|
|
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":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC;AAGzC,MAAM,WAAW,GAAG;IAClB,uBAAuB;IACvB,6BAA6B;IAC7B,oBAAoB;IACpB,iCAAiC;IACjC,4BAA4B;IAC5B,qBAAqB;IACrB,sBAAsB;IACtB,0BAA0B;CAC3B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAiB;IACjD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAC3B,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IAErD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QAClD,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,OAAO;QACpB,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,sBAAsB;IACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QACnB,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACjD,CAAC,CAAC;IAEH,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,UAAkB,CAAC;QACvB,IAAI,WAAyB,CAAC;QAE9B,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,MAAM;gBACT,UAAU,GAAG,GAAG,CAAC;gBACjB,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,MAAM;YACR,KAAK,MAAM;gBACT,UAAU,GAAG,GAAG,CAAC;gBACjB,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC3B,MAAM;YACR,KAAK,MAAM;gBACT,UAAU,GAAG,GAAG,CAAC;gBACjB,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC;gBACxB,MAAM;QACV,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,UAAU,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE9B,aAAa;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,EAAE,CAAC,CAAC;IAE1E,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|