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,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drift Detection Panel
|
|
3
|
+
*
|
|
4
|
+
* Enhanced drift detection with detailed analysis and visualization
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { K0NTEXT_THEME } from '../theme.js';
|
|
9
|
+
import { DatabaseClient } from '../../../../db/client.js';
|
|
10
|
+
/**
|
|
11
|
+
* Drift Detection Panel
|
|
12
|
+
*/
|
|
13
|
+
export class DriftDetectionPanel {
|
|
14
|
+
projectRoot;
|
|
15
|
+
constructor(projectRoot) {
|
|
16
|
+
this.projectRoot = projectRoot;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Run complete drift analysis
|
|
20
|
+
*/
|
|
21
|
+
async analyze() {
|
|
22
|
+
const [fileDrifts, structureDrift, gitDrift] = await Promise.all([
|
|
23
|
+
this.analyzeFileDates(),
|
|
24
|
+
this.analyzeStructure(),
|
|
25
|
+
this.analyzeGitDiff()
|
|
26
|
+
]);
|
|
27
|
+
// Determine overall severity
|
|
28
|
+
const severities = [
|
|
29
|
+
this.getDriftSeverity(fileDrifts),
|
|
30
|
+
structureDrift?.severity || 'low',
|
|
31
|
+
gitDrift?.severity || 'low'
|
|
32
|
+
];
|
|
33
|
+
const overallSeverity = severities.includes('critical')
|
|
34
|
+
? 'critical'
|
|
35
|
+
: severities.includes('high')
|
|
36
|
+
? 'high'
|
|
37
|
+
: severities.includes('medium')
|
|
38
|
+
? 'medium'
|
|
39
|
+
: 'low';
|
|
40
|
+
const summary = this.generateSummary(fileDrifts, structureDrift, gitDrift);
|
|
41
|
+
return {
|
|
42
|
+
fileDrifts,
|
|
43
|
+
structureDrift,
|
|
44
|
+
gitDrift,
|
|
45
|
+
overallSeverity,
|
|
46
|
+
summary
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Analyze file date drifts
|
|
51
|
+
*/
|
|
52
|
+
async analyzeFileDates() {
|
|
53
|
+
const drifts = [];
|
|
54
|
+
const thresholdDays = 7; // Files not updated in 7 days are considered drifted
|
|
55
|
+
try {
|
|
56
|
+
const db = new DatabaseClient(this.projectRoot);
|
|
57
|
+
const items = db.getAllItems();
|
|
58
|
+
const now = new Date();
|
|
59
|
+
for (const item of items) {
|
|
60
|
+
if (!item.updatedAt)
|
|
61
|
+
continue;
|
|
62
|
+
const lastIndexed = new Date(item.updatedAt);
|
|
63
|
+
const daysSince = Math.floor((now.getTime() - lastIndexed.getTime()) / (1000 * 60 * 60 * 24));
|
|
64
|
+
// Only include items that are drifted (> 7 days old)
|
|
65
|
+
if (daysSince <= thresholdDays)
|
|
66
|
+
continue;
|
|
67
|
+
// Determine file type from item type
|
|
68
|
+
let fileType = 'doc';
|
|
69
|
+
if (item.type === 'code' || item.type === 'command' || item.type === 'commit') {
|
|
70
|
+
fileType = 'code';
|
|
71
|
+
}
|
|
72
|
+
else if (item.type === 'config' || item.type === 'tool_config') {
|
|
73
|
+
fileType = 'config';
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
fileType = 'doc';
|
|
77
|
+
}
|
|
78
|
+
// Determine severity based on days since update
|
|
79
|
+
let severity = 'medium';
|
|
80
|
+
if (daysSince > 30) {
|
|
81
|
+
severity = 'critical';
|
|
82
|
+
}
|
|
83
|
+
else if (daysSince > 14) {
|
|
84
|
+
severity = 'high';
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
severity = 'medium';
|
|
88
|
+
}
|
|
89
|
+
drifts.push({
|
|
90
|
+
filePath: item.filePath || item.id,
|
|
91
|
+
fileType,
|
|
92
|
+
lastModified: lastIndexed,
|
|
93
|
+
lastIndexed,
|
|
94
|
+
daysSince,
|
|
95
|
+
severity
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
db.close();
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
// If database is not available, return empty array
|
|
102
|
+
console.error('Failed to analyze file dates:', error);
|
|
103
|
+
}
|
|
104
|
+
return drifts;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Analyze structure changes
|
|
108
|
+
*/
|
|
109
|
+
async analyzeStructure() {
|
|
110
|
+
const addedFiles = [];
|
|
111
|
+
const removedFiles = [];
|
|
112
|
+
// Check for .k0ntext directory
|
|
113
|
+
const k0ntextDir = path.join(this.projectRoot, '.k0ntext');
|
|
114
|
+
if (!fs.existsSync(k0ntextDir)) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
// Could scan for untracked files
|
|
118
|
+
// This is a simplified implementation
|
|
119
|
+
let severity = 'low';
|
|
120
|
+
const totalChanges = addedFiles.length + removedFiles.length;
|
|
121
|
+
if (totalChanges > 50)
|
|
122
|
+
severity = 'critical';
|
|
123
|
+
else if (totalChanges > 20)
|
|
124
|
+
severity = 'high';
|
|
125
|
+
else if (totalChanges > 5)
|
|
126
|
+
severity = 'medium';
|
|
127
|
+
return {
|
|
128
|
+
addedFiles,
|
|
129
|
+
removedFiles,
|
|
130
|
+
severity
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Analyze git diff for changes
|
|
135
|
+
*/
|
|
136
|
+
async analyzeGitDiff() {
|
|
137
|
+
const gitDir = path.join(this.projectRoot, '.git');
|
|
138
|
+
if (!fs.existsSync(gitDir)) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// Check for uncommitted changes
|
|
142
|
+
const uncommittedChanges = [];
|
|
143
|
+
try {
|
|
144
|
+
// Use git diff to check for changes
|
|
145
|
+
const { execSync } = require('child_process');
|
|
146
|
+
// Check for modified files
|
|
147
|
+
const modified = execSync('git diff --name-only', {
|
|
148
|
+
cwd: this.projectRoot,
|
|
149
|
+
encoding: 'utf-8',
|
|
150
|
+
stdio: 'pipe'
|
|
151
|
+
});
|
|
152
|
+
if (modified.trim()) {
|
|
153
|
+
uncommittedChanges.push(...modified.trim().split('\n').filter(Boolean));
|
|
154
|
+
}
|
|
155
|
+
// Check for untracked files
|
|
156
|
+
const untracked = execSync('git ls-files --others --exclude-standard', {
|
|
157
|
+
cwd: this.projectRoot,
|
|
158
|
+
encoding: 'utf-8',
|
|
159
|
+
stdio: 'pipe'
|
|
160
|
+
});
|
|
161
|
+
if (untracked.trim()) {
|
|
162
|
+
uncommittedChanges.push(...untracked.trim().split('\n').filter(Boolean));
|
|
163
|
+
}
|
|
164
|
+
// Get commit count
|
|
165
|
+
const commitCountStr = execSync('git rev-list --count HEAD', {
|
|
166
|
+
cwd: this.projectRoot,
|
|
167
|
+
encoding: 'utf-8',
|
|
168
|
+
stdio: 'pipe'
|
|
169
|
+
});
|
|
170
|
+
const commitCount = parseInt(commitCountStr.trim() || '0');
|
|
171
|
+
let severity = 'low';
|
|
172
|
+
const totalChanges = uncommittedChanges.length;
|
|
173
|
+
if (totalChanges > 20)
|
|
174
|
+
severity = 'critical';
|
|
175
|
+
else if (totalChanges > 10)
|
|
176
|
+
severity = 'high';
|
|
177
|
+
else if (totalChanges > 5)
|
|
178
|
+
severity = 'medium';
|
|
179
|
+
return {
|
|
180
|
+
committedChanges: commitCount,
|
|
181
|
+
uncommittedChanges,
|
|
182
|
+
severity
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Git not available or error
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get drift severity from file drifts
|
|
192
|
+
*/
|
|
193
|
+
getDriftSeverity(drifts) {
|
|
194
|
+
if (drifts.length === 0)
|
|
195
|
+
return 'low';
|
|
196
|
+
const criticalDrifts = drifts.filter(d => d.severity === 'critical').length;
|
|
197
|
+
const highDrifts = drifts.filter(d => d.severity === 'high').length;
|
|
198
|
+
const mediumDrifts = drifts.filter(d => d.severity === 'medium').length;
|
|
199
|
+
if (criticalDrifts > 5)
|
|
200
|
+
return 'critical';
|
|
201
|
+
if (criticalDrifts > 2 || highDrifts > 10)
|
|
202
|
+
return 'high';
|
|
203
|
+
if (mediumDrifts > 10 || highDrifts > 3)
|
|
204
|
+
return 'medium';
|
|
205
|
+
return 'low';
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate summary text
|
|
209
|
+
*/
|
|
210
|
+
generateSummary(fileDrifts, structureDrift, gitDrift) {
|
|
211
|
+
const parts = [];
|
|
212
|
+
const fileCount = fileDrifts.length;
|
|
213
|
+
const structChanges = structureDrift ? structureDrift.addedFiles.length + structureDrift.removedFiles.length : 0;
|
|
214
|
+
const gitChanges = gitDrift ? gitDrift.uncommittedChanges.length : 0;
|
|
215
|
+
if (fileCount === 0 && structChanges === 0 && gitChanges === 0) {
|
|
216
|
+
return 'All context files are up to date with your codebase.';
|
|
217
|
+
}
|
|
218
|
+
if (fileCount > 0) {
|
|
219
|
+
parts.push(`${fileCount} files may be outdated`);
|
|
220
|
+
}
|
|
221
|
+
if (structChanges > 0) {
|
|
222
|
+
parts.push(`${structChanges} structural changes detected`);
|
|
223
|
+
}
|
|
224
|
+
if (gitChanges > 0) {
|
|
225
|
+
parts.push(`${gitChanges} uncommitted changes`);
|
|
226
|
+
}
|
|
227
|
+
return parts.join(', ') || 'No drift detected';
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Display drift report
|
|
231
|
+
*/
|
|
232
|
+
displayReport(report) {
|
|
233
|
+
const lines = [];
|
|
234
|
+
lines.push('');
|
|
235
|
+
lines.push(K0NTEXT_THEME.header('━━━ Documentation Drift Analysis ━━━'));
|
|
236
|
+
lines.push('');
|
|
237
|
+
// Overall severity
|
|
238
|
+
const severityEmoji = {
|
|
239
|
+
critical: K0NTEXT_THEME.error('🔴 Critical'),
|
|
240
|
+
high: K0NTEXT_THEME.warning('🟠 High'),
|
|
241
|
+
medium: K0NTEXT_THEME.warning('🟡 Medium'),
|
|
242
|
+
low: K0NTEXT_THEME.success('🟢 Good')
|
|
243
|
+
}[report.overallSeverity];
|
|
244
|
+
lines.push(` Overall Status: ${severityEmoji}`);
|
|
245
|
+
lines.push(` Summary: ${report.summary}`);
|
|
246
|
+
lines.push('');
|
|
247
|
+
// File drifts
|
|
248
|
+
if (report.fileDrifts.length > 0) {
|
|
249
|
+
lines.push(K0NTEXT_THEME.header('━━━ File Date Drifts ━──'));
|
|
250
|
+
const bySeverity = this.groupBySeverity(report.fileDrifts);
|
|
251
|
+
for (const [severity, drifts] of Object.entries(bySeverity)) {
|
|
252
|
+
if (drifts.length === 0)
|
|
253
|
+
continue;
|
|
254
|
+
const severityLabel = {
|
|
255
|
+
critical: '🔴 Critical',
|
|
256
|
+
high: '🟠 High',
|
|
257
|
+
medium: '🟡 Medium',
|
|
258
|
+
low: '🟢 Low'
|
|
259
|
+
}[severity];
|
|
260
|
+
lines.push(` ${severityLabel} (${drifts.length} files):`);
|
|
261
|
+
for (const drift of drifts.slice(0, 5)) {
|
|
262
|
+
const icon = this.getFileTypeIcon(drift.fileType);
|
|
263
|
+
const days = drift.daysSince;
|
|
264
|
+
lines.push(` ${icon} ${K0NTEXT_THEME.dim(drift.filePath)}`);
|
|
265
|
+
lines.push(` ${K0NTEXT_THEME.dim(`not updated in ${days} days`)}`);
|
|
266
|
+
}
|
|
267
|
+
if (drifts.length > 5) {
|
|
268
|
+
lines.push(` ${K0NTEXT_THEME.dim(`... and ${drifts.length - 5} more`)}`);
|
|
269
|
+
}
|
|
270
|
+
lines.push('');
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Structure drifts
|
|
274
|
+
if (report.structureDrift) {
|
|
275
|
+
lines.push(K0NTEXT_THEME.header('━━━ Structure Changes ━──'));
|
|
276
|
+
if (report.structureDrift.addedFiles.length > 0) {
|
|
277
|
+
lines.push(` ${K0NTEXT_THEME.success('+')} New files: ${report.structureDrift.addedFiles.length}`);
|
|
278
|
+
for (const file of report.structureDrift.addedFiles.slice(0, 5)) {
|
|
279
|
+
lines.push(` ${K0NTEXT_THEME.dim(file)}`);
|
|
280
|
+
}
|
|
281
|
+
if (report.structureDrift.addedFiles.length > 5) {
|
|
282
|
+
lines.push(` ${K0NTEXT_THEME.dim('... and more')}`);
|
|
283
|
+
}
|
|
284
|
+
lines.push('');
|
|
285
|
+
}
|
|
286
|
+
if (report.structureDrift.removedFiles.length > 0) {
|
|
287
|
+
lines.push(` ${K0NTEXT_THEME.error('-')} Removed files: ${report.structureDrift.removedFiles.length}`);
|
|
288
|
+
for (const file of report.structureDrift.removedFiles.slice(0, 5)) {
|
|
289
|
+
lines.push(` ${K0NTEXT_THEME.dim(file)}`);
|
|
290
|
+
}
|
|
291
|
+
if (report.structureDrift.removedFiles.length > 5) {
|
|
292
|
+
lines.push(` ${K0NTEXT_THEME.dim('... and more')}`);
|
|
293
|
+
}
|
|
294
|
+
lines.push('');
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// Git drifts
|
|
298
|
+
if (report.gitDrift) {
|
|
299
|
+
lines.push(K0NTEXT_THEME.header('━━━ Git Changes ━──'));
|
|
300
|
+
if (report.gitDrift.uncommittedChanges.length > 0) {
|
|
301
|
+
lines.push(` Uncommitted changes: ${report.gitDrift.uncommittedChanges.length}`);
|
|
302
|
+
for (const file of report.gitDrift.uncommittedChanges.slice(0, 5)) {
|
|
303
|
+
const status = file.includes('(new file)') ? 'new' : 'modified';
|
|
304
|
+
const statusIcon = status === 'new' ? K0NTEXT_THEME.success('+') : K0NTEXT_THEME.warning('~');
|
|
305
|
+
lines.push(` ${statusIcon} ${K0NTEXT_THEME.dim(file)}`);
|
|
306
|
+
}
|
|
307
|
+
if (report.gitDrift.uncommittedChanges.length > 5) {
|
|
308
|
+
lines.push(` ${K0NTEXT_THEME.dim('... and more')}`);
|
|
309
|
+
}
|
|
310
|
+
lines.push('');
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// Recommendations
|
|
314
|
+
lines.push(K0NTEXT_THEME.header('━━━ Recommendations ━━━'));
|
|
315
|
+
if (report.overallSeverity === 'critical' || report.overallSeverity === 'high') {
|
|
316
|
+
lines.push(` ${K0NTEXT_THEME.warning('⚠ Urgent action recommended:')}`);
|
|
317
|
+
lines.push(` ${K0NTEXT_THEME.cyan('•')} Run ${K0NTEXT_THEME.highlight('index')} to update your context`);
|
|
318
|
+
lines.push(` ${K0NTEXT_THEME.cyan('•')} Commit your changes to keep tracking in sync`);
|
|
319
|
+
}
|
|
320
|
+
else if (report.overallSeverity === 'medium') {
|
|
321
|
+
lines.push(` ${K0NTEXT_THEME.info('ℹ Consider updating soon:')}`);
|
|
322
|
+
lines.push(` ${K0NTEXT_THEME.cyan('•')} Run ${K0NTEXT_THEME.highlight('index')} to refresh context`);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
lines.push(` ${K0NTEXT_THEME.success('✓ Your context is up to date!')}`);
|
|
326
|
+
}
|
|
327
|
+
lines.push('');
|
|
328
|
+
return lines.join('\n');
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Group drifts by severity
|
|
332
|
+
*/
|
|
333
|
+
groupBySeverity(drifts) {
|
|
334
|
+
return {
|
|
335
|
+
critical: drifts.filter(d => d.severity === 'critical'),
|
|
336
|
+
high: drifts.filter(d => d.severity === 'high'),
|
|
337
|
+
medium: drifts.filter(d => d.severity === 'medium'),
|
|
338
|
+
low: drifts.filter(d => d.severity === 'low')
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Get file type icon
|
|
343
|
+
*/
|
|
344
|
+
getFileTypeIcon(type) {
|
|
345
|
+
const icons = {
|
|
346
|
+
doc: '📄',
|
|
347
|
+
code: '💻',
|
|
348
|
+
config: '⚙️'
|
|
349
|
+
};
|
|
350
|
+
return icons[type] || '📄';
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../../../../src/cli/repl/tui/panels/drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Indexing Progress Visualization
|
|
3
|
+
*
|
|
4
|
+
* Real-time progress display for indexing operations
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Indexing progress state
|
|
8
|
+
*/
|
|
9
|
+
interface IndexingProgress {
|
|
10
|
+
total: number;
|
|
11
|
+
processed: number;
|
|
12
|
+
currentFile?: string;
|
|
13
|
+
stage: 'discovering' | 'indexing_docs' | 'indexing_code' | 'indexing_tools' | 'generating_embeddings' | 'complete';
|
|
14
|
+
startTime: number;
|
|
15
|
+
errors: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Indexing statistics
|
|
19
|
+
*/
|
|
20
|
+
interface IndexingStats {
|
|
21
|
+
docsIndexed: number;
|
|
22
|
+
codeIndexed: number;
|
|
23
|
+
configsIndexed: number;
|
|
24
|
+
embeddingsGenerated: number;
|
|
25
|
+
filesSkipped: number;
|
|
26
|
+
duration: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Indexing Progress Visualizer
|
|
30
|
+
*/
|
|
31
|
+
export declare class IndexingProgressVisualizer {
|
|
32
|
+
private progress;
|
|
33
|
+
private stats;
|
|
34
|
+
private spinner;
|
|
35
|
+
constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Start a new indexing operation
|
|
38
|
+
*/
|
|
39
|
+
start(totalFiles: number): void;
|
|
40
|
+
/**
|
|
41
|
+
* Update progress
|
|
42
|
+
*/
|
|
43
|
+
update(stage: IndexingProgress['stage'], updates: {
|
|
44
|
+
processed?: number;
|
|
45
|
+
currentFile?: string;
|
|
46
|
+
error?: string;
|
|
47
|
+
}): void;
|
|
48
|
+
/**
|
|
49
|
+
* Render current progress
|
|
50
|
+
*/
|
|
51
|
+
private render;
|
|
52
|
+
/**
|
|
53
|
+
* Get stage name
|
|
54
|
+
*/
|
|
55
|
+
private getStageName;
|
|
56
|
+
/**
|
|
57
|
+
* Show detailed progress panel
|
|
58
|
+
*/
|
|
59
|
+
showDetailedProgress(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Render progress bar
|
|
62
|
+
*/
|
|
63
|
+
private renderProgressBar;
|
|
64
|
+
/**
|
|
65
|
+
* Format duration
|
|
66
|
+
*/
|
|
67
|
+
private formatDuration;
|
|
68
|
+
/**
|
|
69
|
+
* Complete indexing
|
|
70
|
+
*/
|
|
71
|
+
complete(stats: Partial<IndexingStats>): void;
|
|
72
|
+
/**
|
|
73
|
+
* Show final statistics
|
|
74
|
+
*/
|
|
75
|
+
showFinalStats(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Cancel indexing
|
|
78
|
+
*/
|
|
79
|
+
cancel(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Format a timestamp relative to now
|
|
82
|
+
*/
|
|
83
|
+
private formatTimestamp;
|
|
84
|
+
}
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=indexing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexing.d.ts","sourceRoot":"","sources":["../../../../../src/cli/repl/tui/panels/indexing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,GAAG,uBAAuB,GAAG,UAAU,CAAC;IACnH,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAoB;;IAqBnC;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAqB/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE;QAChD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;IAkBR;;OAEG;IACH,OAAO,CAAC,MAAM;IAuCd;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAiC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAoB7C;;OAEG;IACH,cAAc,IAAI,IAAI;IAiCtB;;OAEG;IACH,MAAM,IAAI,IAAI;IAUd;;OAEG;IACH,OAAO,CAAC,eAAe;CAaxB"}
|