codevault 1.3.0-beta.5 → 1.3.0-beta.7
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/cli/commands/config-cmd.d.ts +3 -0
- package/dist/cli/commands/config-cmd.d.ts.map +1 -0
- package/dist/cli/commands/config-cmd.js +245 -0
- package/dist/cli/commands/config-cmd.js.map +1 -0
- package/dist/cli/commands/interactive-config.d.ts +2 -0
- package/dist/cli/commands/interactive-config.d.ts.map +1 -0
- package/dist/cli/commands/interactive-config.js +304 -0
- package/dist/cli/commands/interactive-config.js.map +1 -0
- package/dist/cli.js +75 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/apply-env.d.ts +15 -0
- package/dist/config/apply-env.d.ts.map +1 -0
- package/dist/config/apply-env.js +75 -0
- package/dist/config/apply-env.js.map +1 -0
- package/dist/config/loader.d.ts +57 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +252 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +37 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/mcp-server.js +1 -1
- package/dist/mcp-server.js.map +1 -1
- package/dist/utils/cli-ui.d.ts.map +1 -1
- package/dist/utils/cli-ui.js +2 -1
- package/dist/utils/cli-ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2P7D"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { loadConfig, readGlobalConfig, readProjectConfig, saveGlobalConfig, saveProjectConfig, hasGlobalConfig, getGlobalConfigPath, getConfigSources } from '../../config/loader.js';
|
|
3
|
+
import { runInteractiveConfig } from './interactive-config.js';
|
|
4
|
+
function displayConfig(config, title) {
|
|
5
|
+
if (!config || Object.keys(config).length === 0) {
|
|
6
|
+
console.log(chalk.gray(` ${title}: (empty)`));
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
console.log(chalk.bold(` ${title}:`));
|
|
10
|
+
console.log(' ' + JSON.stringify(config, null, 2).split('\n').join('\n '));
|
|
11
|
+
}
|
|
12
|
+
export function registerConfigCommands(program) {
|
|
13
|
+
const configCommand = program
|
|
14
|
+
.command('config')
|
|
15
|
+
.description('Manage CodeVault configuration');
|
|
16
|
+
// config init - Interactive setup
|
|
17
|
+
configCommand
|
|
18
|
+
.command('init')
|
|
19
|
+
.description('Initialize global configuration (interactive)')
|
|
20
|
+
.option('--force', 'Overwrite existing configuration')
|
|
21
|
+
.option('--no-interactive', 'Skip interactive prompts, create basic config')
|
|
22
|
+
.action(async (options) => {
|
|
23
|
+
// Use interactive mode by default
|
|
24
|
+
if (options.interactive !== false) {
|
|
25
|
+
await runInteractiveConfig(options.force);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Non-interactive mode (legacy)
|
|
29
|
+
if (hasGlobalConfig() && !options.force) {
|
|
30
|
+
console.log(chalk.yellow('⚠️ Global configuration already exists at:'));
|
|
31
|
+
console.log(chalk.cyan(` ${getGlobalConfigPath()}`));
|
|
32
|
+
console.log('');
|
|
33
|
+
console.log('Use --force to overwrite, or edit the file directly.');
|
|
34
|
+
console.log('Run: ' + chalk.cyan('codevault config show --global'));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.bold('🚀 CodeVault Configuration Setup\n'));
|
|
38
|
+
const config = {
|
|
39
|
+
defaultProvider: 'auto',
|
|
40
|
+
providers: {}
|
|
41
|
+
};
|
|
42
|
+
console.log('Configuration will be saved to:');
|
|
43
|
+
console.log(chalk.cyan(` ${getGlobalConfigPath()}\n`));
|
|
44
|
+
console.log(chalk.gray('You can configure providers now or later using:'));
|
|
45
|
+
console.log(chalk.cyan(' codevault config set <key> <value>\n'));
|
|
46
|
+
saveGlobalConfig(config);
|
|
47
|
+
console.log(chalk.green('✓ Global configuration initialized!'));
|
|
48
|
+
console.log('');
|
|
49
|
+
console.log('Next steps:');
|
|
50
|
+
console.log(chalk.cyan(' codevault config set providers.openai.apiKey YOUR_API_KEY'));
|
|
51
|
+
console.log(chalk.cyan(' codevault config set providers.openai.model text-embedding-3-large'));
|
|
52
|
+
});
|
|
53
|
+
// config set - Set configuration value
|
|
54
|
+
configCommand
|
|
55
|
+
.command('set <key> <value>')
|
|
56
|
+
.description('Set a configuration value')
|
|
57
|
+
.option('-l, --local [path]', 'Save to project config instead of global')
|
|
58
|
+
.action((key, value, options) => {
|
|
59
|
+
const isLocal = options.local !== undefined;
|
|
60
|
+
const basePath = typeof options.local === 'string' ? options.local : '.';
|
|
61
|
+
let config;
|
|
62
|
+
if (isLocal) {
|
|
63
|
+
config = readProjectConfig(basePath) || {};
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
config = readGlobalConfig() || {};
|
|
67
|
+
}
|
|
68
|
+
// Parse key path (e.g., "openai.apiKey" -> ["openai", "apiKey"])
|
|
69
|
+
const keyPath = key.split('.');
|
|
70
|
+
// Set the value
|
|
71
|
+
let current = config;
|
|
72
|
+
for (let i = 0; i < keyPath.length - 1; i++) {
|
|
73
|
+
const part = keyPath[i];
|
|
74
|
+
if (!current[part]) {
|
|
75
|
+
current[part] = {};
|
|
76
|
+
}
|
|
77
|
+
current = current[part];
|
|
78
|
+
}
|
|
79
|
+
const lastKey = keyPath[keyPath.length - 1];
|
|
80
|
+
// Try to parse value as JSON, otherwise use as string
|
|
81
|
+
let parsedValue = value;
|
|
82
|
+
if (value === 'true')
|
|
83
|
+
parsedValue = true;
|
|
84
|
+
else if (value === 'false')
|
|
85
|
+
parsedValue = false;
|
|
86
|
+
else if (!isNaN(Number(value)))
|
|
87
|
+
parsedValue = Number(value);
|
|
88
|
+
current[lastKey] = parsedValue;
|
|
89
|
+
// Save config
|
|
90
|
+
if (isLocal) {
|
|
91
|
+
saveProjectConfig(config, basePath);
|
|
92
|
+
console.log(chalk.green(`✓ Set ${key} in project config`));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
saveGlobalConfig(config);
|
|
96
|
+
console.log(chalk.green(`✓ Set ${key} in global config`));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// config get - Get configuration value
|
|
100
|
+
configCommand
|
|
101
|
+
.command('get <key>')
|
|
102
|
+
.description('Get a configuration value')
|
|
103
|
+
.option('-g, --global', 'Get from global config only')
|
|
104
|
+
.option('-l, --local [path]', 'Get from project config only')
|
|
105
|
+
.action((key, options) => {
|
|
106
|
+
let config;
|
|
107
|
+
if (options.global) {
|
|
108
|
+
config = readGlobalConfig() || {};
|
|
109
|
+
}
|
|
110
|
+
else if (options.local !== undefined) {
|
|
111
|
+
const basePath = typeof options.local === 'string' ? options.local : '.';
|
|
112
|
+
config = readProjectConfig(basePath) || {};
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
config = loadConfig();
|
|
116
|
+
}
|
|
117
|
+
// Navigate key path
|
|
118
|
+
const keyPath = key.split('.');
|
|
119
|
+
let value = config;
|
|
120
|
+
for (const part of keyPath) {
|
|
121
|
+
if (value && typeof value === 'object') {
|
|
122
|
+
value = value[part];
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
value = undefined;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (value === undefined) {
|
|
130
|
+
console.log(chalk.yellow(`Key '${key}' not found`));
|
|
131
|
+
}
|
|
132
|
+
else if (typeof value === 'object') {
|
|
133
|
+
console.log(JSON.stringify(value, null, 2));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.log(value);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
// config list - List all configuration
|
|
140
|
+
configCommand
|
|
141
|
+
.command('list')
|
|
142
|
+
.alias('show')
|
|
143
|
+
.description('Show current configuration')
|
|
144
|
+
.option('-g, --global', 'Show global config only')
|
|
145
|
+
.option('-l, --local [path]', 'Show project config only')
|
|
146
|
+
.option('-s, --sources', 'Show all configuration sources')
|
|
147
|
+
.action((options) => {
|
|
148
|
+
if (options.sources) {
|
|
149
|
+
const basePath = typeof options.local === 'string' ? options.local : '.';
|
|
150
|
+
const sources = getConfigSources(basePath);
|
|
151
|
+
console.log(chalk.bold('Configuration Sources:\n'));
|
|
152
|
+
displayConfig(sources.global, 'Global (~/.codevault/config.json)');
|
|
153
|
+
console.log('');
|
|
154
|
+
displayConfig(sources.project, 'Project (.codevault/config.json)');
|
|
155
|
+
console.log('');
|
|
156
|
+
displayConfig(sources.env, 'Environment Variables');
|
|
157
|
+
console.log('');
|
|
158
|
+
console.log(chalk.gray('Priority: Environment > Project > Global'));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (options.global) {
|
|
162
|
+
const config = readGlobalConfig();
|
|
163
|
+
console.log(chalk.bold('Global Configuration:\n'));
|
|
164
|
+
if (!config || Object.keys(config).length === 0) {
|
|
165
|
+
console.log(chalk.gray(' (empty)'));
|
|
166
|
+
console.log('');
|
|
167
|
+
console.log('Initialize with: ' + chalk.cyan('codevault config init'));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
console.log(JSON.stringify(config, null, 2));
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (options.local !== undefined) {
|
|
175
|
+
const basePath = typeof options.local === 'string' ? options.local : '.';
|
|
176
|
+
const config = readProjectConfig(basePath);
|
|
177
|
+
console.log(chalk.bold('Project Configuration:\n'));
|
|
178
|
+
if (!config || Object.keys(config).length === 0) {
|
|
179
|
+
console.log(chalk.gray(' (empty)'));
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(JSON.stringify(config, null, 2));
|
|
183
|
+
}
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
// Show merged config
|
|
187
|
+
const config = loadConfig();
|
|
188
|
+
console.log(chalk.bold('Merged Configuration:\n'));
|
|
189
|
+
console.log(JSON.stringify(config, null, 2));
|
|
190
|
+
console.log('');
|
|
191
|
+
console.log(chalk.gray('Tip: Use --sources to see individual config sources'));
|
|
192
|
+
});
|
|
193
|
+
// config unset - Remove configuration value
|
|
194
|
+
configCommand
|
|
195
|
+
.command('unset <key>')
|
|
196
|
+
.description('Remove a configuration value')
|
|
197
|
+
.option('-l, --local [path]', 'Remove from project config instead of global')
|
|
198
|
+
.action((key, options) => {
|
|
199
|
+
const isLocal = options.local !== undefined;
|
|
200
|
+
const basePath = typeof options.local === 'string' ? options.local : '.';
|
|
201
|
+
let config;
|
|
202
|
+
if (isLocal) {
|
|
203
|
+
config = readProjectConfig(basePath) || {};
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
config = readGlobalConfig() || {};
|
|
207
|
+
}
|
|
208
|
+
// Parse and navigate to parent of key
|
|
209
|
+
const keyPath = key.split('.');
|
|
210
|
+
let current = config;
|
|
211
|
+
for (let i = 0; i < keyPath.length - 1; i++) {
|
|
212
|
+
const part = keyPath[i];
|
|
213
|
+
if (!current[part]) {
|
|
214
|
+
console.log(chalk.yellow(`Key '${key}' not found`));
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
current = current[part];
|
|
218
|
+
}
|
|
219
|
+
const lastKey = keyPath[keyPath.length - 1];
|
|
220
|
+
if (!(lastKey in current)) {
|
|
221
|
+
console.log(chalk.yellow(`Key '${key}' not found`));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
delete current[lastKey];
|
|
225
|
+
// Save config
|
|
226
|
+
if (isLocal) {
|
|
227
|
+
saveProjectConfig(config, basePath);
|
|
228
|
+
console.log(chalk.green(`✓ Removed ${key} from project config`));
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
saveGlobalConfig(config);
|
|
232
|
+
console.log(chalk.green(`✓ Removed ${key} from global config`));
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
// config path - Show config file paths
|
|
236
|
+
configCommand
|
|
237
|
+
.command('path')
|
|
238
|
+
.description('Show configuration file paths')
|
|
239
|
+
.action(() => {
|
|
240
|
+
console.log(chalk.bold('Configuration Paths:\n'));
|
|
241
|
+
console.log(chalk.cyan('Global: ') + getGlobalConfigPath());
|
|
242
|
+
console.log(chalk.cyan('Project: ') + '.codevault/config.json');
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=config-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../../src/cli/commands/config-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/interactive-config.ts"],"names":[],"mappings":"AA2FA,wBAAsB,oBAAoB,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4QhF"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { stdin as input, stdout as output } from 'process';
|
|
3
|
+
import * as readline from 'readline/promises';
|
|
4
|
+
import { saveGlobalConfig, hasGlobalConfig } from '../../config/loader.js';
|
|
5
|
+
class InteractivePrompt {
|
|
6
|
+
rl;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.rl = readline.createInterface({ input, output });
|
|
9
|
+
}
|
|
10
|
+
async text(options) {
|
|
11
|
+
const defaultText = options.default ? chalk.gray(` (${options.default})`) : '';
|
|
12
|
+
const prompt = `${chalk.cyan('?')} ${options.message}${defaultText}: `;
|
|
13
|
+
while (true) {
|
|
14
|
+
const answer = await this.rl.question(prompt);
|
|
15
|
+
const value = answer.trim() || options.default || '';
|
|
16
|
+
if (options.validate) {
|
|
17
|
+
const result = options.validate(value);
|
|
18
|
+
if (result === true) {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
else if (typeof result === 'string') {
|
|
22
|
+
console.log(chalk.red(` ✗ ${result}`));
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async password(options) {
|
|
30
|
+
// Simple password input (shown as text, but labeled as sensitive)
|
|
31
|
+
const prompt = `${chalk.cyan('?')} ${options.message} ${chalk.gray('(input hidden)')}: `;
|
|
32
|
+
const answer = await this.rl.question(prompt);
|
|
33
|
+
return answer.trim();
|
|
34
|
+
}
|
|
35
|
+
async confirm(options) {
|
|
36
|
+
const defaultText = options.default === 'y' ? 'Y/n' : 'y/N';
|
|
37
|
+
const prompt = `${chalk.cyan('?')} ${options.message} ${chalk.gray(`(${defaultText})`)}: `;
|
|
38
|
+
const answer = await this.rl.question(prompt);
|
|
39
|
+
const value = answer.trim().toLowerCase() || options.default || 'n';
|
|
40
|
+
return value === 'y' || value === 'yes';
|
|
41
|
+
}
|
|
42
|
+
async select(options) {
|
|
43
|
+
if (!options.choices || options.choices.length === 0) {
|
|
44
|
+
throw new Error('Choices required for select prompt');
|
|
45
|
+
}
|
|
46
|
+
console.log(chalk.cyan('?') + ' ' + options.message);
|
|
47
|
+
options.choices.forEach((choice, index) => {
|
|
48
|
+
const number = chalk.gray(`${index + 1}.`);
|
|
49
|
+
const description = choice.description ? chalk.gray(` - ${choice.description}`) : '';
|
|
50
|
+
console.log(` ${number} ${choice.title}${description}`);
|
|
51
|
+
});
|
|
52
|
+
while (true) {
|
|
53
|
+
const prompt = chalk.gray(` Select (1-${options.choices.length}): `);
|
|
54
|
+
const answer = await this.rl.question(prompt);
|
|
55
|
+
const num = parseInt(answer.trim(), 10);
|
|
56
|
+
if (num >= 1 && num <= options.choices.length) {
|
|
57
|
+
return options.choices[num - 1].value;
|
|
58
|
+
}
|
|
59
|
+
console.log(chalk.red(` ✗ Please enter a number between 1 and ${options.choices.length}`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
close() {
|
|
63
|
+
this.rl.close();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export async function runInteractiveConfig(force = false) {
|
|
67
|
+
const prompt = new InteractivePrompt();
|
|
68
|
+
try {
|
|
69
|
+
console.log(chalk.bold.cyan('\n🚀 CodeVault Interactive Configuration\n'));
|
|
70
|
+
// Check if config exists
|
|
71
|
+
if (hasGlobalConfig() && !force) {
|
|
72
|
+
console.log(chalk.yellow('⚠️ Global configuration already exists.\n'));
|
|
73
|
+
const overwrite = await prompt.confirm({
|
|
74
|
+
message: 'Do you want to overwrite it?',
|
|
75
|
+
default: 'n'
|
|
76
|
+
});
|
|
77
|
+
if (!overwrite) {
|
|
78
|
+
console.log(chalk.gray('\nConfiguration unchanged.'));
|
|
79
|
+
prompt.close();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log('');
|
|
83
|
+
}
|
|
84
|
+
const config = {
|
|
85
|
+
providers: {}
|
|
86
|
+
};
|
|
87
|
+
// Provider selection
|
|
88
|
+
const provider = await prompt.select({
|
|
89
|
+
message: 'Choose your embedding provider',
|
|
90
|
+
choices: [
|
|
91
|
+
{ title: 'OpenAI', value: 'openai', description: 'Cloud API, requires API key, best quality' },
|
|
92
|
+
{ title: 'Ollama', value: 'ollama', description: 'Local, free, no API key needed' },
|
|
93
|
+
{ title: 'Custom', value: 'custom', description: 'Custom OpenAI-compatible API' }
|
|
94
|
+
]
|
|
95
|
+
});
|
|
96
|
+
config.defaultProvider = provider === 'custom' ? 'openai' : provider;
|
|
97
|
+
// OpenAI / Custom configuration
|
|
98
|
+
if (provider === 'openai' || provider === 'custom') {
|
|
99
|
+
console.log(chalk.bold('\n📝 OpenAI Configuration\n'));
|
|
100
|
+
config.providers.openai = {};
|
|
101
|
+
// API Key
|
|
102
|
+
const apiKey = await prompt.password({
|
|
103
|
+
message: 'API Key',
|
|
104
|
+
validate: (val) => val.length > 0 || 'API key is required'
|
|
105
|
+
});
|
|
106
|
+
config.providers.openai.apiKey = apiKey;
|
|
107
|
+
// Base URL (for custom providers)
|
|
108
|
+
if (provider === 'custom') {
|
|
109
|
+
const baseUrl = await prompt.text({
|
|
110
|
+
message: 'Base URL',
|
|
111
|
+
default: 'https://api.openai.com/v1',
|
|
112
|
+
validate: (val) => {
|
|
113
|
+
try {
|
|
114
|
+
new URL(val);
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return 'Invalid URL format';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
config.providers.openai.baseUrl = baseUrl;
|
|
123
|
+
}
|
|
124
|
+
// Model selection
|
|
125
|
+
const useCustomModel = await prompt.confirm({
|
|
126
|
+
message: 'Use custom model name?',
|
|
127
|
+
default: 'n'
|
|
128
|
+
});
|
|
129
|
+
if (useCustomModel) {
|
|
130
|
+
const customModel = await prompt.text({
|
|
131
|
+
message: 'Model name',
|
|
132
|
+
default: 'text-embedding-3-large',
|
|
133
|
+
validate: (val) => val.length > 0 || 'Model name is required'
|
|
134
|
+
});
|
|
135
|
+
config.providers.openai.model = customModel;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const model = await prompt.select({
|
|
139
|
+
message: 'Select model',
|
|
140
|
+
choices: [
|
|
141
|
+
{ title: 'text-embedding-3-large', value: 'text-embedding-3-large', description: '3072 dims, best quality' },
|
|
142
|
+
{ title: 'text-embedding-3-small', value: 'text-embedding-3-small', description: '1536 dims, faster/cheaper' },
|
|
143
|
+
{ title: 'text-embedding-ada-002', value: 'text-embedding-ada-002', description: '1536 dims, legacy' },
|
|
144
|
+
{ title: 'Qwen/Qwen3-Embedding-8B', value: 'Qwen/Qwen3-Embedding-8B', description: '4096 dims, via Nebius' }
|
|
145
|
+
]
|
|
146
|
+
});
|
|
147
|
+
config.providers.openai.model = model;
|
|
148
|
+
}
|
|
149
|
+
// Dimensions
|
|
150
|
+
const useCustomDims = await prompt.confirm({
|
|
151
|
+
message: 'Custom embedding dimensions?',
|
|
152
|
+
default: 'n'
|
|
153
|
+
});
|
|
154
|
+
if (useCustomDims) {
|
|
155
|
+
const dims = await prompt.text({
|
|
156
|
+
message: 'Embedding dimensions',
|
|
157
|
+
default: '3072',
|
|
158
|
+
validate: (val) => {
|
|
159
|
+
const num = parseInt(val, 10);
|
|
160
|
+
return (num > 0 && num <= 10000) || 'Must be between 1 and 10000';
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
config.providers.openai.dimensions = parseInt(dims, 10);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Ollama configuration
|
|
167
|
+
if (provider === 'ollama') {
|
|
168
|
+
console.log(chalk.bold('\n📝 Ollama Configuration\n'));
|
|
169
|
+
config.providers.ollama = {};
|
|
170
|
+
const useCustomModel = await prompt.confirm({
|
|
171
|
+
message: 'Use custom Ollama model?',
|
|
172
|
+
default: 'n'
|
|
173
|
+
});
|
|
174
|
+
if (useCustomModel) {
|
|
175
|
+
const model = await prompt.text({
|
|
176
|
+
message: 'Model name',
|
|
177
|
+
default: 'nomic-embed-text',
|
|
178
|
+
validate: (val) => val.length > 0 || 'Model name is required'
|
|
179
|
+
});
|
|
180
|
+
config.providers.ollama.model = model;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
config.providers.ollama.model = 'nomic-embed-text';
|
|
184
|
+
}
|
|
185
|
+
const dims = await prompt.text({
|
|
186
|
+
message: 'Embedding dimensions',
|
|
187
|
+
default: '768',
|
|
188
|
+
validate: (val) => {
|
|
189
|
+
const num = parseInt(val, 10);
|
|
190
|
+
return (num > 0 && num <= 10000) || 'Must be between 1 and 10000';
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
config.providers.ollama.dimensions = parseInt(dims, 10);
|
|
194
|
+
}
|
|
195
|
+
// Advanced settings
|
|
196
|
+
console.log(chalk.bold('\n⚙️ Advanced Settings\n'));
|
|
197
|
+
const configAdvanced = await prompt.confirm({
|
|
198
|
+
message: 'Configure advanced settings? (rate limits, tokens, etc.)',
|
|
199
|
+
default: 'n'
|
|
200
|
+
});
|
|
201
|
+
if (configAdvanced) {
|
|
202
|
+
// Max tokens
|
|
203
|
+
const maxTokens = await prompt.text({
|
|
204
|
+
message: 'Max tokens per chunk',
|
|
205
|
+
default: '8192',
|
|
206
|
+
validate: (val) => {
|
|
207
|
+
const num = parseInt(val, 10);
|
|
208
|
+
return (num > 0) || 'Must be a positive number';
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
config.maxTokens = parseInt(maxTokens, 10);
|
|
212
|
+
// Rate limiting
|
|
213
|
+
const configRateLimit = await prompt.confirm({
|
|
214
|
+
message: 'Configure rate limiting?',
|
|
215
|
+
default: 'n'
|
|
216
|
+
});
|
|
217
|
+
if (configRateLimit) {
|
|
218
|
+
config.rateLimit = {};
|
|
219
|
+
const rpm = await prompt.text({
|
|
220
|
+
message: 'Requests per minute (RPM)',
|
|
221
|
+
default: '10000',
|
|
222
|
+
validate: (val) => {
|
|
223
|
+
const num = parseInt(val, 10);
|
|
224
|
+
return (num > 0) || 'Must be a positive number';
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
config.rateLimit.rpm = parseInt(rpm, 10);
|
|
228
|
+
const tpm = await prompt.text({
|
|
229
|
+
message: 'Tokens per minute (TPM)',
|
|
230
|
+
default: '600000',
|
|
231
|
+
validate: (val) => {
|
|
232
|
+
const num = parseInt(val, 10);
|
|
233
|
+
return (num > 0) || 'Must be a positive number';
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
config.rateLimit.tpm = parseInt(tpm, 10);
|
|
237
|
+
}
|
|
238
|
+
// Encryption
|
|
239
|
+
const configEncryption = await prompt.confirm({
|
|
240
|
+
message: 'Enable code chunk encryption?',
|
|
241
|
+
default: 'n'
|
|
242
|
+
});
|
|
243
|
+
if (configEncryption) {
|
|
244
|
+
config.encryption = { enabled: true };
|
|
245
|
+
const encKey = await prompt.password({
|
|
246
|
+
message: 'Encryption key (32-byte base64 or hex)',
|
|
247
|
+
validate: (val) => val.length > 0 || 'Encryption key is required'
|
|
248
|
+
});
|
|
249
|
+
config.encryption.key = encKey;
|
|
250
|
+
}
|
|
251
|
+
// Reranking
|
|
252
|
+
const configReranker = await prompt.confirm({
|
|
253
|
+
message: 'Configure API reranker?',
|
|
254
|
+
default: 'n'
|
|
255
|
+
});
|
|
256
|
+
if (configReranker) {
|
|
257
|
+
config.reranker = {};
|
|
258
|
+
const apiUrl = await prompt.text({
|
|
259
|
+
message: 'Reranker API URL',
|
|
260
|
+
validate: (val) => {
|
|
261
|
+
try {
|
|
262
|
+
new URL(val);
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return 'Invalid URL format';
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
config.reranker.apiUrl = apiUrl;
|
|
271
|
+
const apiKey = await prompt.password({
|
|
272
|
+
message: 'Reranker API Key'
|
|
273
|
+
});
|
|
274
|
+
if (apiKey) {
|
|
275
|
+
config.reranker.apiKey = apiKey;
|
|
276
|
+
}
|
|
277
|
+
const model = await prompt.text({
|
|
278
|
+
message: 'Reranker model name',
|
|
279
|
+
default: 'rerank-v3.5'
|
|
280
|
+
});
|
|
281
|
+
if (model) {
|
|
282
|
+
config.reranker.model = model;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Save configuration
|
|
287
|
+
console.log('');
|
|
288
|
+
saveGlobalConfig(config);
|
|
289
|
+
console.log(chalk.green('\n✓ Configuration saved successfully!\n'));
|
|
290
|
+
console.log(chalk.gray('Location: ~/.codevault/config.json\n'));
|
|
291
|
+
console.log('Next steps:');
|
|
292
|
+
console.log(chalk.cyan(' codevault index') + chalk.gray(' - Index your project'));
|
|
293
|
+
console.log(chalk.cyan(' codevault config list') + chalk.gray(' - View your configuration'));
|
|
294
|
+
console.log('');
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
console.error(chalk.red('\n✗ Error:'), error.message);
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
finally {
|
|
301
|
+
prompt.close();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=interactive-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-config.js","sourceRoot":"","sources":["../../../src/cli/commands/interactive-config.ts"],"names":[],"mappings":"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"}
|