k0ntext 3.3.0 → 3.3.1

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,392 @@
1
+ /**
2
+ * Configuration UI Panel
3
+ *
4
+ * Visual configuration management for k0ntext settings
5
+ */
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import { K0NTEXT_THEME } from '../theme.js';
9
+ import { input, confirm, select, checkbox } from '@inquirer/prompts';
10
+ /**
11
+ * All configuration definitions
12
+ */
13
+ const CONFIG_DEFINITIONS = {
14
+ 'Project': {
15
+ name: 'Project',
16
+ description: 'Project-specific settings',
17
+ keys: [
18
+ {
19
+ name: 'projectType',
20
+ type: 'string',
21
+ description: 'Type of project (monorepo, webapp, library, api, cli)',
22
+ options: ['monorepo', 'webapp', 'library', 'api', 'cli', 'unknown'],
23
+ defaultValue: 'unknown'
24
+ },
25
+ {
26
+ name: 'maxFilesPerIndex',
27
+ type: 'number',
28
+ description: 'Maximum code files to index per module (batch indexing)',
29
+ defaultValue: 500
30
+ },
31
+ {
32
+ name: 'indexBatchSize',
33
+ type: 'number',
34
+ description: 'Files per batch during indexing',
35
+ defaultValue: 100
36
+ }
37
+ ]
38
+ },
39
+ 'AI Tools': {
40
+ name: 'AI Tools',
41
+ description: 'AI coding assistant configuration',
42
+ keys: [
43
+ {
44
+ name: 'aiTools',
45
+ type: 'array',
46
+ description: 'Enabled AI tools',
47
+ options: ['claude', 'copilot', 'cline', 'cursor', 'windsurf', 'aider', 'continue', 'gemini'],
48
+ defaultValue: ['claude']
49
+ },
50
+ {
51
+ name: 'openrouterKey',
52
+ type: 'string',
53
+ description: 'OpenRouter API key for intelligent analysis',
54
+ validate: (value) => value.startsWith('sk-or-v1-') || value === '',
55
+ defaultValue: ''
56
+ },
57
+ {
58
+ name: 'generateEmbeddings',
59
+ type: 'boolean',
60
+ description: 'Automatically generate embeddings during indexing',
61
+ defaultValue: true
62
+ }
63
+ ]
64
+ },
65
+ 'Features': {
66
+ name: 'Features',
67
+ description: 'Enabled k0ntext features',
68
+ keys: [
69
+ {
70
+ name: 'features',
71
+ type: 'array',
72
+ description: 'Enabled features',
73
+ options: ['stats', 'search', 'docs', 'drift', 'workflows', 'mcp'],
74
+ defaultValue: ['stats', 'search']
75
+ },
76
+ {
77
+ name: 'autoUpdate',
78
+ type: 'boolean',
79
+ description: 'Check for updates on startup',
80
+ defaultValue: true
81
+ },
82
+ {
83
+ name: 'updateCheckInterval',
84
+ type: 'number',
85
+ description: 'Update check interval (hours)',
86
+ defaultValue: 24
87
+ }
88
+ ]
89
+ },
90
+ 'Display': {
91
+ name: 'Display',
92
+ description: 'UI and theme settings',
93
+ keys: [
94
+ {
95
+ name: 'theme',
96
+ type: 'string',
97
+ description: 'Color theme',
98
+ options: ['default', 'dark', 'light', 'high-contrast'],
99
+ defaultValue: 'default'
100
+ },
101
+ {
102
+ name: 'showTimestamps',
103
+ type: 'boolean',
104
+ description: 'Show timestamps in command output',
105
+ defaultValue: true
106
+ },
107
+ {
108
+ name: 'compactMode',
109
+ type: 'boolean',
110
+ description: 'Use compact output for large result sets',
111
+ defaultValue: false
112
+ }
113
+ ]
114
+ }
115
+ };
116
+ /**
117
+ * Configuration UI Panel
118
+ */
119
+ export class ConfigPanel {
120
+ projectRoot;
121
+ configPath;
122
+ sessionConfig;
123
+ constructor(projectRoot, sessionConfig) {
124
+ this.projectRoot = projectRoot;
125
+ this.configPath = path.join(projectRoot, '.k0ntext', 'config.json');
126
+ this.sessionConfig = sessionConfig;
127
+ }
128
+ /**
129
+ * Display current configuration
130
+ */
131
+ displayConfig() {
132
+ const lines = [];
133
+ lines.push('');
134
+ lines.push(K0NTEXT_THEME.header('━━━ Configuration ━━━'));
135
+ lines.push('');
136
+ // Group by category
137
+ for (const [categoryId, category] of Object.entries(CONFIG_DEFINITIONS)) {
138
+ lines.push(` ${K0NTEXT_THEME.header(category.name)} - ${K0NTEXT_THEME.dim(category.description)}`);
139
+ lines.push('');
140
+ for (const key of category.keys) {
141
+ const value = this.getValue(key.name);
142
+ const displayValue = this.formatValue(value, key);
143
+ lines.push(` ${K0NTEXT_THEME.cyan(key.name.padEnd(25))} ${displayValue}`);
144
+ lines.push(` ${K0NTEXT_THEME.dim(key.description)}`);
145
+ lines.push('');
146
+ }
147
+ }
148
+ lines.push(` ${K0NTEXT_THEME.dim('Config file:')} ${this.configPath}`);
149
+ lines.push('');
150
+ return lines.join('\n');
151
+ }
152
+ /**
153
+ * Interactive configuration editor
154
+ */
155
+ async interactiveConfig(category) {
156
+ const targetCategory = category || await this.selectCategory();
157
+ if (!targetCategory) {
158
+ return; // User cancelled
159
+ }
160
+ const configDef = CONFIG_DEFINITIONS[targetCategory];
161
+ if (!configDef) {
162
+ return;
163
+ }
164
+ console.log('');
165
+ console.log(K0NTEXT_THEME.info(`Editing ${configDef.name} settings...`));
166
+ console.log('');
167
+ for (const key of configDef.keys) {
168
+ const newValue = await this.promptForKey(key);
169
+ if (newValue !== undefined) {
170
+ this.setValue(key.name, newValue);
171
+ console.log(K0NTEXT_THEME.success(`✓ Set ${key.name} = ${this.formatValue(newValue, key)}`));
172
+ }
173
+ }
174
+ await this.saveConfig();
175
+ console.log('');
176
+ console.log(K0NTEXT_THEME.success('✓ Configuration saved'));
177
+ }
178
+ /**
179
+ * Select a category to edit
180
+ */
181
+ async selectCategory() {
182
+ const choices = Object.entries(CONFIG_DEFINITIONS).map(([id, cat]) => ({
183
+ name: `${cat.name} - ${cat.description}`,
184
+ value: id
185
+ }));
186
+ const { configCategory } = this.sessionConfig;
187
+ const result = await select({
188
+ message: 'Select configuration category:',
189
+ choices: [
190
+ ...choices,
191
+ { name: 'Cancel', value: 'cancel' }
192
+ ],
193
+ default: configCategory || choices[0]?.value
194
+ });
195
+ return result === 'cancel' ? undefined : result;
196
+ }
197
+ /**
198
+ * Prompt user for a configuration value
199
+ */
200
+ async promptForKey(key) {
201
+ const currentValue = this.getValue(key.name);
202
+ switch (key.type) {
203
+ case 'boolean':
204
+ return await confirm({
205
+ message: key.description,
206
+ default: Boolean(currentValue || key.defaultValue)
207
+ });
208
+ case 'array':
209
+ if (key.options) {
210
+ const selected = await checkbox({
211
+ message: key.description,
212
+ choices: key.options.map(opt => ({
213
+ name: opt,
214
+ value: opt,
215
+ checked: Array.isArray(currentValue) ? currentValue.includes(opt) : false
216
+ }))
217
+ });
218
+ return selected.length > 0 ? selected : key.defaultValue;
219
+ }
220
+ return currentValue || key.defaultValue;
221
+ case 'string':
222
+ if (key.options) {
223
+ return await select({
224
+ message: key.description,
225
+ choices: key.options.map(opt => ({ name: opt, value: opt })),
226
+ default: currentValue || key.defaultValue
227
+ });
228
+ }
229
+ if (key.name === 'openrouterKey') {
230
+ const result = await input({
231
+ message: key.description,
232
+ default: String(currentValue || ''),
233
+ validate: key.validate
234
+ });
235
+ return result;
236
+ }
237
+ return await input({
238
+ message: key.description,
239
+ default: String(currentValue || key.defaultValue || '')
240
+ });
241
+ case 'number':
242
+ const inputResult = await input({
243
+ message: key.description,
244
+ default: String(currentValue || key.defaultValue || ''),
245
+ validate: (value) => {
246
+ const num = Number(value);
247
+ return !isNaN(num) && num >= 0;
248
+ }
249
+ });
250
+ return Number(inputResult);
251
+ default:
252
+ return currentValue;
253
+ }
254
+ }
255
+ /**
256
+ * Get a configuration value
257
+ */
258
+ getValue(name) {
259
+ // Check session config first
260
+ if (name in this.sessionConfig) {
261
+ return this.sessionConfig[name];
262
+ }
263
+ // Check file config
264
+ if (fs.existsSync(this.configPath)) {
265
+ try {
266
+ const fileConfig = JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
267
+ return fileConfig[name];
268
+ }
269
+ catch {
270
+ // Invalid JSON, ignore
271
+ }
272
+ }
273
+ // Return default
274
+ for (const category of Object.values(CONFIG_DEFINITIONS)) {
275
+ for (const key of category.keys) {
276
+ if (key.name === name) {
277
+ return key.defaultValue;
278
+ }
279
+ }
280
+ }
281
+ return undefined;
282
+ }
283
+ /**
284
+ * Set a configuration value
285
+ */
286
+ setValue(name, value) {
287
+ // Update session config
288
+ this.sessionConfig[name] = value;
289
+ }
290
+ /**
291
+ * Save configuration to file
292
+ */
293
+ async saveConfig() {
294
+ const configDir = path.dirname(this.configPath);
295
+ if (!fs.existsSync(configDir)) {
296
+ fs.mkdirSync(configDir, { recursive: true });
297
+ }
298
+ // Merge with existing config
299
+ let existingConfig = {};
300
+ if (fs.existsSync(this.configPath)) {
301
+ try {
302
+ existingConfig = JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
303
+ }
304
+ catch {
305
+ // Invalid JSON, start fresh
306
+ }
307
+ }
308
+ const mergedConfig = { ...existingConfig, ...this.sessionConfig };
309
+ fs.writeFileSync(this.configPath, JSON.stringify(mergedConfig, null, 2));
310
+ }
311
+ /**
312
+ * Format a value for display
313
+ */
314
+ formatValue(value, key) {
315
+ if (value === undefined || value === null) {
316
+ return K0NTEXT_THEME.dim('(not set)');
317
+ }
318
+ switch (key.type) {
319
+ case 'boolean':
320
+ return value ? K0NTEXT_THEME.success('✓ enabled') : K0NTEXT_THEME.dim('○ disabled');
321
+ case 'array':
322
+ if (!Array.isArray(value))
323
+ return K0NTEXT_THEME.dim('(invalid)');
324
+ if (value.length === 0)
325
+ return K0NTEXT_THEME.dim('(none)');
326
+ return K0NTEXT_THEME.cyan(value.join(', '));
327
+ case 'number':
328
+ return K0NTEXT_THEME.highlight(String(value));
329
+ case 'string':
330
+ if (key.name === 'openrouterKey' && value) {
331
+ return String(value).slice(0, 8) + '...' + K0NTEXT_THEME.success('(set)');
332
+ }
333
+ return K0NTEXT_THEME.cyan(String(value));
334
+ default:
335
+ return String(value);
336
+ }
337
+ }
338
+ /**
339
+ * Show configuration help
340
+ */
341
+ showConfigHelp() {
342
+ const lines = [
343
+ '',
344
+ K0NTEXT_THEME.header('━━━ Configuration Help ━━━'),
345
+ '',
346
+ ' Commands:',
347
+ ' config Show all configuration',
348
+ ' config list Show all configuration (alias)',
349
+ ' config get <key> Get a specific value',
350
+ ' config set <key> <val> Set a value',
351
+ ' config edit Interactive configuration editor',
352
+ '',
353
+ ' Categories:',
354
+ ...Object.entries(CONFIG_DEFINITIONS).map(([id, cat]) => ` ${id.padEnd(15)} - ${cat.description}`),
355
+ '',
356
+ ' Examples:',
357
+ ' config get projectType',
358
+ ' config set projectType monorepo',
359
+ ' config edit Project',
360
+ ''
361
+ ];
362
+ return lines.join('\n');
363
+ }
364
+ /**
365
+ * Validate configuration
366
+ */
367
+ validateConfig() {
368
+ const errors = [];
369
+ const warnings = [];
370
+ // Check API key if embeddings are enabled
371
+ const generateEmbeddings = this.getValue('generateEmbeddings') === true;
372
+ const apiKey = this.getValue('openrouterKey') || process.env.OPENROUTER_API_KEY;
373
+ if (generateEmbeddings && !apiKey) {
374
+ warnings.push('Embeddings are enabled but no API key is set');
375
+ }
376
+ // Validate numeric ranges
377
+ const maxFiles = this.getValue('maxFilesPerIndex');
378
+ if (typeof maxFiles === 'number' && (maxFiles < 100 || maxFiles > 10000)) {
379
+ errors.push('maxFilesPerIndex should be between 100 and 10000');
380
+ }
381
+ const batchSize = this.getValue('indexBatchSize');
382
+ if (typeof batchSize === 'number' && (batchSize < 10 || batchSize > 1000)) {
383
+ errors.push('indexBatchSize should be between 10 and 1000');
384
+ }
385
+ return {
386
+ valid: errors.length === 0,
387
+ errors,
388
+ warnings
389
+ };
390
+ }
391
+ }
392
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/cli/repl/tui/panels/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Drift Detection Panel
3
+ *
4
+ * Enhanced drift detection with detailed analysis and visualization
5
+ */
6
+ /**
7
+ * Drift type
8
+ */
9
+ export type DriftType = 'file_dates' | 'structure' | 'git_diff';
10
+ /**
11
+ * Drift severity
12
+ */
13
+ export type DriftSeverity = 'low' | 'medium' | 'high' | 'critical';
14
+ /**
15
+ * File drift information
16
+ */
17
+ interface FileDrift {
18
+ filePath: string;
19
+ fileType: 'doc' | 'code' | 'config';
20
+ lastModified: Date;
21
+ lastIndexed: Date;
22
+ daysSince: number;
23
+ severity: DriftSeverity;
24
+ }
25
+ /**
26
+ * Structure drift information
27
+ */
28
+ interface StructureDrift {
29
+ addedFiles: string[];
30
+ removedFiles: string[];
31
+ severity: DriftSeverity;
32
+ }
33
+ /**
34
+ * Git drift information
35
+ */
36
+ interface GitDrift {
37
+ committedChanges: number;
38
+ uncommittedChanges: string[];
39
+ severity: DriftSeverity;
40
+ }
41
+ /**
42
+ * Combined drift report
43
+ */
44
+ export interface DriftReport {
45
+ fileDrifts: FileDrift[];
46
+ structureDrift: StructureDrift | null;
47
+ gitDrift: GitDrift | null;
48
+ overallSeverity: DriftSeverity;
49
+ summary: string;
50
+ }
51
+ /**
52
+ * Drift Detection Panel
53
+ */
54
+ export declare class DriftDetectionPanel {
55
+ private projectRoot;
56
+ constructor(projectRoot: string);
57
+ /**
58
+ * Run complete drift analysis
59
+ */
60
+ analyze(): Promise<DriftReport>;
61
+ /**
62
+ * Analyze file date drifts
63
+ */
64
+ private analyzeFileDates;
65
+ /**
66
+ * Analyze structure changes
67
+ */
68
+ private analyzeStructure;
69
+ /**
70
+ * Analyze git diff for changes
71
+ */
72
+ private analyzeGitDiff;
73
+ /**
74
+ * Get drift severity from file drifts
75
+ */
76
+ private getDriftSeverity;
77
+ /**
78
+ * Generate summary text
79
+ */
80
+ private generateSummary;
81
+ /**
82
+ * Display drift report
83
+ */
84
+ displayReport(report: DriftReport): string;
85
+ /**
86
+ * Group drifts by severity
87
+ */
88
+ private groupBySeverity;
89
+ /**
90
+ * Get file type icon
91
+ */
92
+ private getFileTypeIcon;
93
+ }
94
+ export {};
95
+ //# sourceMappingURL=drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../../../src/cli/repl/tui/panels/drift.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnE;;GAEG;AACH,UAAU,SAAS;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpC,YAAY,EAAE,IAAI,CAAC;IACnB,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,QAAQ;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,aAAa,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;IAiCrC;;OAEG;YACW,gBAAgB;IA0D9B;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;YACW,cAAc;IA8D5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAqH1C;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAQxB"}