k0ntext 3.2.1 → 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.
- package/README.md +15 -0
- package/dist/cli/index.js +28 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/repl/core/parser.d.ts +84 -0
- package/dist/cli/repl/core/parser.d.ts.map +1 -0
- package/dist/cli/repl/core/parser.js +309 -0
- package/dist/cli/repl/core/parser.js.map +1 -0
- package/dist/cli/repl/core/session.d.ts +124 -0
- package/dist/cli/repl/core/session.d.ts.map +1 -0
- package/dist/cli/repl/core/session.js +196 -0
- package/dist/cli/repl/core/session.js.map +1 -0
- package/dist/cli/repl/index.d.ts +59 -0
- package/dist/cli/repl/index.d.ts.map +1 -0
- package/dist/cli/repl/index.js +474 -0
- package/dist/cli/repl/index.js.map +1 -0
- package/dist/cli/repl/init/wizard.d.ts +61 -0
- package/dist/cli/repl/init/wizard.d.ts.map +1 -0
- package/dist/cli/repl/init/wizard.js +245 -0
- package/dist/cli/repl/init/wizard.js.map +1 -0
- package/dist/cli/repl/tui/panels/config.d.ts +71 -0
- package/dist/cli/repl/tui/panels/config.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/config.js +392 -0
- package/dist/cli/repl/tui/panels/config.js.map +1 -0
- package/dist/cli/repl/tui/panels/drift.d.ts +95 -0
- package/dist/cli/repl/tui/panels/drift.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/drift.js +353 -0
- package/dist/cli/repl/tui/panels/drift.js.map +1 -0
- package/dist/cli/repl/tui/panels/indexing.d.ts +86 -0
- package/dist/cli/repl/tui/panels/indexing.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/indexing.js +254 -0
- package/dist/cli/repl/tui/panels/indexing.js.map +1 -0
- package/dist/cli/repl/tui/panels/search.d.ts +66 -0
- package/dist/cli/repl/tui/panels/search.d.ts.map +1 -0
- package/dist/cli/repl/tui/panels/search.js +215 -0
- package/dist/cli/repl/tui/panels/search.js.map +1 -0
- package/dist/cli/repl/tui/theme.d.ts +109 -0
- package/dist/cli/repl/tui/theme.d.ts.map +1 -0
- package/dist/cli/repl/tui/theme.js +225 -0
- package/dist/cli/repl/tui/theme.js.map +1 -0
- package/dist/cli/repl/update/checker.d.ts +64 -0
- package/dist/cli/repl/update/checker.d.ts.map +1 -0
- package/dist/cli/repl/update/checker.js +166 -0
- package/dist/cli/repl/update/checker.js.map +1 -0
- package/dist/db/client.d.ts +1 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +2 -1
- package/dist/db/client.js.map +1 -1
- package/package.json +4 -1
- package/src/cli/index.ts +28 -2
- package/src/cli/repl/core/parser.ts +373 -0
- package/src/cli/repl/core/session.ts +269 -0
- package/src/cli/repl/index.ts +557 -0
- package/src/cli/repl/init/wizard.ts +300 -0
- package/src/cli/repl/tui/panels/config.ts +457 -0
- package/src/cli/repl/tui/panels/drift.ts +458 -0
- package/src/cli/repl/tui/panels/indexing.ts +324 -0
- package/src/cli/repl/tui/panels/search.ts +272 -0
- package/src/cli/repl/tui/theme.ts +276 -0
- package/src/cli/repl/update/checker.ts +209 -0
- package/src/db/client.ts +9 -7
|
@@ -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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAuBrE;;GAEG;AACH,MAAM,kBAAkB,GAAmC;IACzD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uDAAuD;gBACpE,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;gBACnE,YAAY,EAAE,SAAS;aACxB;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;gBACtE,YAAY,EAAE,GAAG;aAClB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iCAAiC;gBAC9C,YAAY,EAAE,GAAG;aAClB;SACF;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,kBAAkB;gBAC/B,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;gBAC5F,YAAY,EAAE,CAAC,QAAQ,CAAC;aACzB;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;gBAC1D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,EAAE;gBAClE,YAAY,EAAE,EAAE;aACjB;YACD;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,mDAAmD;gBAChE,YAAY,EAAE,IAAI;aACnB;SACF;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,kBAAkB;gBAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;gBACjE,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;aAClC;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,8BAA8B;gBAC3C,YAAY,EAAE,IAAI;aACnB;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+BAA+B;gBAC5C,YAAY,EAAE,EAAE;aACjB;SACF;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,aAAa;gBAC1B,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC;gBACtD,YAAY,EAAE,SAAS;aACxB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,mCAAmC;gBAChD,YAAY,EAAE,IAAI;aACnB;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,0CAA0C;gBACvD,YAAY,EAAE,KAAK;aACpB;SACF;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,WAAW,CAAS;IACpB,UAAU,CAAS;IACnB,aAAa,CAA0B;IAE/C,YAAY,WAAmB,EAAE,aAAsC;QACrE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACpE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,oBAAoB;QACpB,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAElD,KAAK,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;gBAC7E,KAAK,CAAC,IAAI,CAAC,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,QAAiB;QACvC,MAAM,cAAc,GAAG,QAAQ,IAAI,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE/D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,iBAAiB;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,WAAW,EAAE;YACxC,KAAK,EAAE,EAAE;SACV,CAAC,CAAC,CAAC;QAEJ,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,aAAoB,CAAC;QAErD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;YAC1B,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACpC;YACD,OAAO,EAAE,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK;SAC7C,CAAC,CAAC;QAEH,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,GAAc;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE7C,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,MAAM,OAAO,CAAC;oBACnB,OAAO,EAAE,GAAG,CAAC,WAAW;oBACxB,OAAO,EAAE,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC;iBACnD,CAAC,CAAC;YAEL,KAAK,OAAO;gBACV,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;wBAC9B,OAAO,EAAE,GAAG,CAAC,WAAW;wBACxB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAC/B,IAAI,EAAE,GAAG;4BACT,KAAK,EAAE,GAAG;4BACV,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;yBAC1E,CAAC,CAAC;qBACJ,CAAC,CAAC;oBACH,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC3D,CAAC;gBACD,OAAO,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC;YAE1C,KAAK,QAAQ;gBACX,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,OAAO,MAAM,MAAM,CAAC;wBAClB,OAAO,EAAE,GAAG,CAAC,WAAW;wBACxB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;wBAC5D,OAAO,EAAE,YAAY,IAAI,GAAG,CAAC,YAAY;qBAC1C,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;wBACzB,OAAO,EAAE,GAAG,CAAC,WAAW;wBACxB,OAAO,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;wBACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,OAAO,MAAM,KAAK,CAAC;oBACjB,OAAO,EAAE,GAAG,CAAC,WAAW;oBACxB,OAAO,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;iBACxD,CAAC,CAAC;YAEL,KAAK,QAAQ;gBACX,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;oBAC9B,OAAO,EAAE,GAAG,CAAC,WAAW;oBACxB,OAAO,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;oBACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;oBACjC,CAAC;iBACF,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;YAE7B;gBACE,OAAO,YAAY,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,6BAA6B;QAC7B,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,oBAAoB;QACpB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBACzE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACtB,OAAO,GAAG,CAAC,YAAY,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,KAAc;QACnC,wBAAwB;QACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEhD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,6BAA6B;QAC7B,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YACzE,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAc,EAAE,GAAc;QACxC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QAED,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACtF,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAAE,OAAO,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACjE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3D,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,KAAK,QAAQ;gBACX,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,EAAE,CAAC;oBAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5E,CAAC;gBACD,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C;gBACE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,KAAK,GAAG;YACZ,EAAE;YACF,aAAa,CAAC,MAAM,CAAC,4BAA4B,CAAC;YAClD,EAAE;YACF,aAAa;YACb,mDAAmD;YACnD,2DAA2D;YAC3D,iDAAiD;YACjD,yCAAyC;YACzC,6DAA6D;YAC7D,EAAE;YACF,eAAe;YACf,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACrG,EAAE;YACF,aAAa;YACb,4BAA4B;YAC5B,qCAAqC;YACrC,yBAAyB;YACzB,EAAE;SACH,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,0CAA0C;QAC1C,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAEhF,IAAI,kBAAkB,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAChE,CAAC;QAED,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAClD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -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"}
|