codevault 1.3.0-beta.6 → 1.3.0

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.
@@ -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,2 @@
1
+ export declare function runInteractiveConfig(force?: boolean): Promise<void>;
2
+ //# sourceMappingURL=interactive-config.d.ts.map
@@ -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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"}
package/dist/cli.js CHANGED
@@ -5,6 +5,7 @@ import { Command } from 'commander';
5
5
  import fs from 'fs';
6
6
  import path from 'path';
7
7
  import { fileURLToPath } from 'url';
8
+ import { registerConfigCommands } from './cli/commands/config-cmd.js';
8
9
  import { registerContextCommands } from './cli/commands/context.js';
9
10
  import { resolveScopeWithPack } from './context/packs.js';
10
11
  import { readCodemap } from './codemap/io.js';
@@ -13,10 +14,14 @@ import { searchCode } from './core/search.js';
13
14
  import { startWatch } from './indexer/watch.js';
14
15
  import { IndexerUI } from './utils/cli-ui.js';
15
16
  import { indexProjectWithProgress } from './utils/indexer-with-progress.js';
17
+ import { applyConfigToEnv } from './config/apply-env.js';
16
18
  import { createEmbeddingProvider, getModelProfile, getSizeLimits } from './providers/index.js';
17
19
  const __filename = fileURLToPath(import.meta.url);
18
20
  const __dirname = path.dirname(__filename);
19
21
  const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
22
+ // Apply config to environment variables (CLI only - MCP uses env vars directly)
23
+ // This allows CLI users to use global config while MCP continues using env vars
24
+ applyConfigToEnv();
20
25
  const program = new Command();
21
26
  program
22
27
  .name('codevault')
@@ -311,6 +316,7 @@ program
311
316
  process.exit(1);
312
317
  }
313
318
  });
319
+ registerConfigCommands(program);
314
320
  registerContextCommands(program);
315
321
  program
316
322
  .command('mcp')