@pleaseai/context-please-mcp 0.1.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.
- package/LICENSE +24 -0
- package/README.md +688 -0
- package/dist/config.d.ts +55 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +172 -0
- package/dist/config.js.map +1 -0
- package/dist/embedding.d.ts +5 -0
- package/dist/embedding.d.ts.map +1 -0
- package/dist/embedding.js +77 -0
- package/dist/embedding.js.map +1 -0
- package/dist/handlers.d.ts +74 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +686 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +280 -0
- package/dist/index.js.map +1 -0
- package/dist/snapshot.d.ts +95 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +439 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/sync.d.ts +11 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +123 -0
- package/dist/sync.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +27 -0
- package/dist/utils.js.map +1 -0
- package/package.json +42 -0
package/dist/snapshot.js
ADDED
@@ -0,0 +1,439 @@
|
|
1
|
+
import * as fs from "fs";
|
2
|
+
import * as path from "path";
|
3
|
+
import * as os from "os";
|
4
|
+
export class SnapshotManager {
|
5
|
+
constructor() {
|
6
|
+
this.indexedCodebases = [];
|
7
|
+
this.indexingCodebases = new Map(); // Map of codebase path to progress percentage
|
8
|
+
this.codebaseFileCount = new Map(); // Map of codebase path to indexed file count
|
9
|
+
this.codebaseInfoMap = new Map(); // Map of codebase path to complete info
|
10
|
+
// Initialize snapshot file path
|
11
|
+
this.snapshotFilePath = path.join(os.homedir(), '.context', 'mcp-codebase-snapshot.json');
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* Check if snapshot is v2 format
|
15
|
+
*/
|
16
|
+
isV2Format(snapshot) {
|
17
|
+
return snapshot && snapshot.formatVersion === 'v2';
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Convert v1 format to internal state
|
21
|
+
*/
|
22
|
+
loadV1Format(snapshot) {
|
23
|
+
console.log('[SNAPSHOT-DEBUG] Loading v1 format snapshot');
|
24
|
+
// Validate that the codebases still exist
|
25
|
+
const validCodebases = [];
|
26
|
+
for (const codebasePath of snapshot.indexedCodebases) {
|
27
|
+
if (fs.existsSync(codebasePath)) {
|
28
|
+
validCodebases.push(codebasePath);
|
29
|
+
console.log(`[SNAPSHOT-DEBUG] Validated codebase: ${codebasePath}`);
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
console.warn(`[SNAPSHOT-DEBUG] Codebase no longer exists, removing: ${codebasePath}`);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
// Handle indexing codebases - treat them as not indexed since they were interrupted
|
36
|
+
let indexingCodebasesList = [];
|
37
|
+
if (Array.isArray(snapshot.indexingCodebases)) {
|
38
|
+
// Legacy format: string[]
|
39
|
+
indexingCodebasesList = snapshot.indexingCodebases;
|
40
|
+
console.log(`[SNAPSHOT-DEBUG] Found legacy indexingCodebases array format with ${indexingCodebasesList.length} entries`);
|
41
|
+
}
|
42
|
+
else if (snapshot.indexingCodebases && typeof snapshot.indexingCodebases === 'object') {
|
43
|
+
// New format: Record<string, number>
|
44
|
+
indexingCodebasesList = Object.keys(snapshot.indexingCodebases);
|
45
|
+
console.log(`[SNAPSHOT-DEBUG] Found new indexingCodebases object format with ${indexingCodebasesList.length} entries`);
|
46
|
+
}
|
47
|
+
for (const codebasePath of indexingCodebasesList) {
|
48
|
+
if (fs.existsSync(codebasePath)) {
|
49
|
+
console.warn(`[SNAPSHOT-DEBUG] Found interrupted indexing codebase: ${codebasePath}. Treating as not indexed.`);
|
50
|
+
// Don't add to validIndexingCodebases - treat as not indexed
|
51
|
+
}
|
52
|
+
else {
|
53
|
+
console.warn(`[SNAPSHOT-DEBUG] Interrupted indexing codebase no longer exists: ${codebasePath}`);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
// Restore state - only fully indexed codebases
|
57
|
+
this.indexedCodebases = validCodebases;
|
58
|
+
this.indexingCodebases = new Map(); // Reset indexing codebases since they were interrupted
|
59
|
+
this.codebaseFileCount = new Map(); // No file count info in v1 format
|
60
|
+
// Populate codebaseInfoMap for v1 indexed codebases (with minimal info)
|
61
|
+
this.codebaseInfoMap = new Map();
|
62
|
+
const now = new Date().toISOString();
|
63
|
+
for (const codebasePath of validCodebases) {
|
64
|
+
const info = {
|
65
|
+
status: 'indexed',
|
66
|
+
indexedFiles: 0, // Unknown in v1 format
|
67
|
+
totalChunks: 0, // Unknown in v1 format
|
68
|
+
indexStatus: 'completed', // Assume completed for v1 format
|
69
|
+
lastUpdated: now
|
70
|
+
};
|
71
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
/**
|
75
|
+
* Convert v2 format to internal state
|
76
|
+
*/
|
77
|
+
loadV2Format(snapshot) {
|
78
|
+
console.log('[SNAPSHOT-DEBUG] Loading v2 format snapshot');
|
79
|
+
const validIndexedCodebases = [];
|
80
|
+
const validIndexingCodebases = new Map();
|
81
|
+
const validFileCount = new Map();
|
82
|
+
const validCodebaseInfoMap = new Map();
|
83
|
+
for (const [codebasePath, info] of Object.entries(snapshot.codebases)) {
|
84
|
+
if (!fs.existsSync(codebasePath)) {
|
85
|
+
console.warn(`[SNAPSHOT-DEBUG] Codebase no longer exists, removing: ${codebasePath}`);
|
86
|
+
continue;
|
87
|
+
}
|
88
|
+
// Store the complete info for this codebase
|
89
|
+
validCodebaseInfoMap.set(codebasePath, info);
|
90
|
+
if (info.status === 'indexed') {
|
91
|
+
validIndexedCodebases.push(codebasePath);
|
92
|
+
if ('indexedFiles' in info) {
|
93
|
+
validFileCount.set(codebasePath, info.indexedFiles);
|
94
|
+
}
|
95
|
+
console.log(`[SNAPSHOT-DEBUG] Validated indexed codebase: ${codebasePath} (${info.indexedFiles || 'unknown'} files, ${info.totalChunks || 'unknown'} chunks)`);
|
96
|
+
}
|
97
|
+
else if (info.status === 'indexing') {
|
98
|
+
if ('indexingPercentage' in info) {
|
99
|
+
validIndexingCodebases.set(codebasePath, info.indexingPercentage);
|
100
|
+
}
|
101
|
+
console.warn(`[SNAPSHOT-DEBUG] Found interrupted indexing codebase: ${codebasePath} (${info.indexingPercentage || 0}%). Treating as not indexed.`);
|
102
|
+
// Don't add to indexed - treat interrupted indexing as not indexed
|
103
|
+
}
|
104
|
+
else if (info.status === 'indexfailed') {
|
105
|
+
console.warn(`[SNAPSHOT-DEBUG] Found failed indexing codebase: ${codebasePath}. Error: ${info.errorMessage}`);
|
106
|
+
// Failed indexing codebases are not added to indexed or indexing lists
|
107
|
+
// But we keep the info for potential retry
|
108
|
+
}
|
109
|
+
}
|
110
|
+
// Restore state
|
111
|
+
this.indexedCodebases = validIndexedCodebases;
|
112
|
+
this.indexingCodebases = new Map(); // Reset indexing codebases since they were interrupted
|
113
|
+
this.codebaseFileCount = validFileCount;
|
114
|
+
this.codebaseInfoMap = validCodebaseInfoMap;
|
115
|
+
}
|
116
|
+
getIndexedCodebases() {
|
117
|
+
// Read from JSON file to ensure consistency and persistence
|
118
|
+
try {
|
119
|
+
if (!fs.existsSync(this.snapshotFilePath)) {
|
120
|
+
return [];
|
121
|
+
}
|
122
|
+
const snapshotData = fs.readFileSync(this.snapshotFilePath, 'utf8');
|
123
|
+
const snapshot = JSON.parse(snapshotData);
|
124
|
+
if (this.isV2Format(snapshot)) {
|
125
|
+
return Object.entries(snapshot.codebases)
|
126
|
+
.filter(([_, info]) => info.status === 'indexed')
|
127
|
+
.map(([path, _]) => path);
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
// V1 format
|
131
|
+
return snapshot.indexedCodebases || [];
|
132
|
+
}
|
133
|
+
}
|
134
|
+
catch (error) {
|
135
|
+
console.warn(`[SNAPSHOT-DEBUG] Error reading indexed codebases from file:`, error);
|
136
|
+
// Fallback to memory if file reading fails
|
137
|
+
return [...this.indexedCodebases];
|
138
|
+
}
|
139
|
+
}
|
140
|
+
getIndexingCodebases() {
|
141
|
+
// Read from JSON file to ensure consistency and persistence
|
142
|
+
try {
|
143
|
+
if (!fs.existsSync(this.snapshotFilePath)) {
|
144
|
+
return [];
|
145
|
+
}
|
146
|
+
const snapshotData = fs.readFileSync(this.snapshotFilePath, 'utf8');
|
147
|
+
const snapshot = JSON.parse(snapshotData);
|
148
|
+
if (this.isV2Format(snapshot)) {
|
149
|
+
return Object.entries(snapshot.codebases)
|
150
|
+
.filter(([_, info]) => info.status === 'indexing')
|
151
|
+
.map(([path, _]) => path);
|
152
|
+
}
|
153
|
+
else {
|
154
|
+
// V1 format - Handle both legacy array format and new object format
|
155
|
+
if (Array.isArray(snapshot.indexingCodebases)) {
|
156
|
+
// Legacy format: return the array directly
|
157
|
+
return snapshot.indexingCodebases;
|
158
|
+
}
|
159
|
+
else if (snapshot.indexingCodebases && typeof snapshot.indexingCodebases === 'object') {
|
160
|
+
// New format: return the keys of the object
|
161
|
+
return Object.keys(snapshot.indexingCodebases);
|
162
|
+
}
|
163
|
+
}
|
164
|
+
return [];
|
165
|
+
}
|
166
|
+
catch (error) {
|
167
|
+
console.warn(`[SNAPSHOT-DEBUG] Error reading indexing codebases from file:`, error);
|
168
|
+
// Fallback to memory if file reading fails
|
169
|
+
return Array.from(this.indexingCodebases.keys());
|
170
|
+
}
|
171
|
+
}
|
172
|
+
/**
|
173
|
+
* @deprecated Use getCodebaseInfo() for individual codebases or iterate through codebases for v2 format support
|
174
|
+
*/
|
175
|
+
getIndexingCodebasesWithProgress() {
|
176
|
+
return new Map(this.indexingCodebases);
|
177
|
+
}
|
178
|
+
getIndexingProgress(codebasePath) {
|
179
|
+
// Read from JSON file to ensure consistency and persistence
|
180
|
+
try {
|
181
|
+
if (!fs.existsSync(this.snapshotFilePath)) {
|
182
|
+
return undefined;
|
183
|
+
}
|
184
|
+
const snapshotData = fs.readFileSync(this.snapshotFilePath, 'utf8');
|
185
|
+
const snapshot = JSON.parse(snapshotData);
|
186
|
+
if (this.isV2Format(snapshot)) {
|
187
|
+
const info = snapshot.codebases[codebasePath];
|
188
|
+
if (info && info.status === 'indexing') {
|
189
|
+
return info.indexingPercentage || 0;
|
190
|
+
}
|
191
|
+
return undefined;
|
192
|
+
}
|
193
|
+
else {
|
194
|
+
// V1 format - Handle both legacy array format and new object format
|
195
|
+
if (Array.isArray(snapshot.indexingCodebases)) {
|
196
|
+
// Legacy format: if path exists in array, assume 0% progress
|
197
|
+
return snapshot.indexingCodebases.includes(codebasePath) ? 0 : undefined;
|
198
|
+
}
|
199
|
+
else if (snapshot.indexingCodebases && typeof snapshot.indexingCodebases === 'object') {
|
200
|
+
// New format: return the actual progress percentage
|
201
|
+
return snapshot.indexingCodebases[codebasePath];
|
202
|
+
}
|
203
|
+
}
|
204
|
+
return undefined;
|
205
|
+
}
|
206
|
+
catch (error) {
|
207
|
+
console.warn(`[SNAPSHOT-DEBUG] Error reading progress from file for ${codebasePath}:`, error);
|
208
|
+
// Fallback to memory if file reading fails
|
209
|
+
return this.indexingCodebases.get(codebasePath);
|
210
|
+
}
|
211
|
+
}
|
212
|
+
/**
|
213
|
+
* @deprecated Use setCodebaseIndexing() instead for v2 format support
|
214
|
+
*/
|
215
|
+
addIndexingCodebase(codebasePath, progress = 0) {
|
216
|
+
this.indexingCodebases.set(codebasePath, progress);
|
217
|
+
// Also update codebaseInfoMap for v2 compatibility
|
218
|
+
const info = {
|
219
|
+
status: 'indexing',
|
220
|
+
indexingPercentage: progress,
|
221
|
+
lastUpdated: new Date().toISOString()
|
222
|
+
};
|
223
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
224
|
+
}
|
225
|
+
/**
|
226
|
+
* @deprecated Use setCodebaseIndexing() instead for v2 format support
|
227
|
+
*/
|
228
|
+
updateIndexingProgress(codebasePath, progress) {
|
229
|
+
if (this.indexingCodebases.has(codebasePath)) {
|
230
|
+
this.indexingCodebases.set(codebasePath, progress);
|
231
|
+
// Also update codebaseInfoMap for v2 compatibility
|
232
|
+
const info = {
|
233
|
+
status: 'indexing',
|
234
|
+
indexingPercentage: progress,
|
235
|
+
lastUpdated: new Date().toISOString()
|
236
|
+
};
|
237
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
238
|
+
}
|
239
|
+
}
|
240
|
+
/**
|
241
|
+
* @deprecated Use removeCodebaseCompletely() or state-specific methods instead for v2 format support
|
242
|
+
*/
|
243
|
+
removeIndexingCodebase(codebasePath) {
|
244
|
+
this.indexingCodebases.delete(codebasePath);
|
245
|
+
// Also remove from codebaseInfoMap for v2 compatibility
|
246
|
+
this.codebaseInfoMap.delete(codebasePath);
|
247
|
+
}
|
248
|
+
/**
|
249
|
+
* @deprecated Use setCodebaseIndexed() instead for v2 format support
|
250
|
+
*/
|
251
|
+
addIndexedCodebase(codebasePath, fileCount) {
|
252
|
+
if (!this.indexedCodebases.includes(codebasePath)) {
|
253
|
+
this.indexedCodebases.push(codebasePath);
|
254
|
+
}
|
255
|
+
if (fileCount !== undefined) {
|
256
|
+
this.codebaseFileCount.set(codebasePath, fileCount);
|
257
|
+
}
|
258
|
+
// Also update codebaseInfoMap for v2 compatibility
|
259
|
+
const info = {
|
260
|
+
status: 'indexed',
|
261
|
+
indexedFiles: fileCount || 0,
|
262
|
+
totalChunks: 0, // Unknown in v1 method
|
263
|
+
indexStatus: 'completed',
|
264
|
+
lastUpdated: new Date().toISOString()
|
265
|
+
};
|
266
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
267
|
+
}
|
268
|
+
/**
|
269
|
+
* @deprecated Use removeCodebaseCompletely() or state-specific methods instead for v2 format support
|
270
|
+
*/
|
271
|
+
removeIndexedCodebase(codebasePath) {
|
272
|
+
this.indexedCodebases = this.indexedCodebases.filter(path => path !== codebasePath);
|
273
|
+
this.codebaseFileCount.delete(codebasePath);
|
274
|
+
// Also remove from codebaseInfoMap for v2 compatibility
|
275
|
+
this.codebaseInfoMap.delete(codebasePath);
|
276
|
+
}
|
277
|
+
/**
|
278
|
+
* @deprecated Use setCodebaseIndexed() instead for v2 format support
|
279
|
+
*/
|
280
|
+
moveFromIndexingToIndexed(codebasePath, fileCount) {
|
281
|
+
this.removeIndexingCodebase(codebasePath);
|
282
|
+
this.addIndexedCodebase(codebasePath, fileCount);
|
283
|
+
}
|
284
|
+
/**
|
285
|
+
* @deprecated Use getCodebaseInfo() and check indexedFiles property instead for v2 format support
|
286
|
+
*/
|
287
|
+
getIndexedFileCount(codebasePath) {
|
288
|
+
return this.codebaseFileCount.get(codebasePath);
|
289
|
+
}
|
290
|
+
/**
|
291
|
+
* @deprecated Use setCodebaseIndexed() with complete stats instead for v2 format support
|
292
|
+
*/
|
293
|
+
setIndexedFileCount(codebasePath, fileCount) {
|
294
|
+
this.codebaseFileCount.set(codebasePath, fileCount);
|
295
|
+
}
|
296
|
+
/**
|
297
|
+
* Set codebase to indexing status
|
298
|
+
*/
|
299
|
+
setCodebaseIndexing(codebasePath, progress = 0) {
|
300
|
+
this.indexingCodebases.set(codebasePath, progress);
|
301
|
+
// Remove from other states
|
302
|
+
this.indexedCodebases = this.indexedCodebases.filter(path => path !== codebasePath);
|
303
|
+
this.codebaseFileCount.delete(codebasePath);
|
304
|
+
// Update info map
|
305
|
+
const info = {
|
306
|
+
status: 'indexing',
|
307
|
+
indexingPercentage: progress,
|
308
|
+
lastUpdated: new Date().toISOString()
|
309
|
+
};
|
310
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
311
|
+
}
|
312
|
+
/**
|
313
|
+
* Set codebase to indexed status with complete statistics
|
314
|
+
*/
|
315
|
+
setCodebaseIndexed(codebasePath, stats) {
|
316
|
+
// Add to indexed list if not already there
|
317
|
+
if (!this.indexedCodebases.includes(codebasePath)) {
|
318
|
+
this.indexedCodebases.push(codebasePath);
|
319
|
+
}
|
320
|
+
// Remove from indexing state
|
321
|
+
this.indexingCodebases.delete(codebasePath);
|
322
|
+
// Update file count and info
|
323
|
+
this.codebaseFileCount.set(codebasePath, stats.indexedFiles);
|
324
|
+
const info = {
|
325
|
+
status: 'indexed',
|
326
|
+
indexedFiles: stats.indexedFiles,
|
327
|
+
totalChunks: stats.totalChunks,
|
328
|
+
indexStatus: stats.status,
|
329
|
+
lastUpdated: new Date().toISOString()
|
330
|
+
};
|
331
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
332
|
+
}
|
333
|
+
/**
|
334
|
+
* Set codebase to failed status
|
335
|
+
*/
|
336
|
+
setCodebaseIndexFailed(codebasePath, errorMessage, lastAttemptedPercentage) {
|
337
|
+
// Remove from other states
|
338
|
+
this.indexedCodebases = this.indexedCodebases.filter(path => path !== codebasePath);
|
339
|
+
this.indexingCodebases.delete(codebasePath);
|
340
|
+
this.codebaseFileCount.delete(codebasePath);
|
341
|
+
// Update info map
|
342
|
+
const info = {
|
343
|
+
status: 'indexfailed',
|
344
|
+
errorMessage: errorMessage,
|
345
|
+
lastAttemptedPercentage: lastAttemptedPercentage,
|
346
|
+
lastUpdated: new Date().toISOString()
|
347
|
+
};
|
348
|
+
this.codebaseInfoMap.set(codebasePath, info);
|
349
|
+
}
|
350
|
+
/**
|
351
|
+
* Get codebase status
|
352
|
+
*/
|
353
|
+
getCodebaseStatus(codebasePath) {
|
354
|
+
const info = this.codebaseInfoMap.get(codebasePath);
|
355
|
+
if (!info)
|
356
|
+
return 'not_found';
|
357
|
+
return info.status;
|
358
|
+
}
|
359
|
+
/**
|
360
|
+
* Get complete codebase information
|
361
|
+
*/
|
362
|
+
getCodebaseInfo(codebasePath) {
|
363
|
+
return this.codebaseInfoMap.get(codebasePath);
|
364
|
+
}
|
365
|
+
/**
|
366
|
+
* Get all failed codebases
|
367
|
+
*/
|
368
|
+
getFailedCodebases() {
|
369
|
+
return Array.from(this.codebaseInfoMap.entries())
|
370
|
+
.filter(([_, info]) => info.status === 'indexfailed')
|
371
|
+
.map(([path, _]) => path);
|
372
|
+
}
|
373
|
+
/**
|
374
|
+
* Completely remove a codebase from all tracking (for clear_index operation)
|
375
|
+
*/
|
376
|
+
removeCodebaseCompletely(codebasePath) {
|
377
|
+
// Remove from all internal state
|
378
|
+
this.indexedCodebases = this.indexedCodebases.filter(path => path !== codebasePath);
|
379
|
+
this.indexingCodebases.delete(codebasePath);
|
380
|
+
this.codebaseFileCount.delete(codebasePath);
|
381
|
+
this.codebaseInfoMap.delete(codebasePath);
|
382
|
+
console.log(`[SNAPSHOT-DEBUG] Completely removed codebase from snapshot: ${codebasePath}`);
|
383
|
+
}
|
384
|
+
loadCodebaseSnapshot() {
|
385
|
+
console.log('[SNAPSHOT-DEBUG] Loading codebase snapshot from:', this.snapshotFilePath);
|
386
|
+
try {
|
387
|
+
if (!fs.existsSync(this.snapshotFilePath)) {
|
388
|
+
console.log('[SNAPSHOT-DEBUG] Snapshot file does not exist. Starting with empty codebase list.');
|
389
|
+
return;
|
390
|
+
}
|
391
|
+
const snapshotData = fs.readFileSync(this.snapshotFilePath, 'utf8');
|
392
|
+
const snapshot = JSON.parse(snapshotData);
|
393
|
+
console.log('[SNAPSHOT-DEBUG] Loaded snapshot:', snapshot);
|
394
|
+
if (this.isV2Format(snapshot)) {
|
395
|
+
this.loadV2Format(snapshot);
|
396
|
+
}
|
397
|
+
else {
|
398
|
+
this.loadV1Format(snapshot);
|
399
|
+
}
|
400
|
+
// Always save in v2 format after loading (migration)
|
401
|
+
this.saveCodebaseSnapshot();
|
402
|
+
}
|
403
|
+
catch (error) {
|
404
|
+
console.error('[SNAPSHOT-DEBUG] Error loading snapshot:', error);
|
405
|
+
console.log('[SNAPSHOT-DEBUG] Starting with empty codebase list due to snapshot error.');
|
406
|
+
}
|
407
|
+
}
|
408
|
+
saveCodebaseSnapshot() {
|
409
|
+
console.log('[SNAPSHOT-DEBUG] Saving codebase snapshot to:', this.snapshotFilePath);
|
410
|
+
try {
|
411
|
+
// Ensure directory exists
|
412
|
+
const snapshotDir = path.dirname(this.snapshotFilePath);
|
413
|
+
if (!fs.existsSync(snapshotDir)) {
|
414
|
+
fs.mkdirSync(snapshotDir, { recursive: true });
|
415
|
+
console.log('[SNAPSHOT-DEBUG] Created snapshot directory:', snapshotDir);
|
416
|
+
}
|
417
|
+
// Build v2 format snapshot using the complete info map
|
418
|
+
const codebases = {};
|
419
|
+
// Add all codebases from the info map
|
420
|
+
for (const [codebasePath, info] of this.codebaseInfoMap) {
|
421
|
+
codebases[codebasePath] = info;
|
422
|
+
}
|
423
|
+
const snapshot = {
|
424
|
+
formatVersion: 'v2',
|
425
|
+
codebases: codebases,
|
426
|
+
lastUpdated: new Date().toISOString()
|
427
|
+
};
|
428
|
+
fs.writeFileSync(this.snapshotFilePath, JSON.stringify(snapshot, null, 2));
|
429
|
+
const indexedCount = this.indexedCodebases.length;
|
430
|
+
const indexingCount = this.indexingCodebases.size;
|
431
|
+
const failedCount = this.getFailedCodebases().length;
|
432
|
+
console.log(`[SNAPSHOT-DEBUG] Snapshot saved successfully in v2 format. Indexed: ${indexedCount}, Indexing: ${indexingCount}, Failed: ${failedCount}`);
|
433
|
+
}
|
434
|
+
catch (error) {
|
435
|
+
console.error('[SNAPSHOT-DEBUG] Error saving snapshot:', error);
|
436
|
+
}
|
437
|
+
}
|
438
|
+
}
|
439
|
+
//# sourceMappingURL=snapshot.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Context } from "@pleaseai/context-please-core";
|
2
|
+
import { SnapshotManager } from "./snapshot.js";
|
3
|
+
export declare class SyncManager {
|
4
|
+
private context;
|
5
|
+
private snapshotManager;
|
6
|
+
private isSyncing;
|
7
|
+
constructor(context: Context, snapshotManager: SnapshotManager);
|
8
|
+
handleSyncIndex(): Promise<void>;
|
9
|
+
startBackgroundSync(): void;
|
10
|
+
}
|
11
|
+
//# sourceMappingURL=sync.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAoB,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,WAAW;IACpB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe;IAKjD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAmGtC,mBAAmB,IAAI,IAAI;CA6BrC"}
|
package/dist/sync.js
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
import * as fs from "fs";
|
2
|
+
import { FileSynchronizer } from "@pleaseai/context-please-core";
|
3
|
+
export class SyncManager {
|
4
|
+
constructor(context, snapshotManager) {
|
5
|
+
this.isSyncing = false;
|
6
|
+
this.context = context;
|
7
|
+
this.snapshotManager = snapshotManager;
|
8
|
+
}
|
9
|
+
async handleSyncIndex() {
|
10
|
+
const syncStartTime = Date.now();
|
11
|
+
console.log(`[SYNC-DEBUG] handleSyncIndex() called at ${new Date().toISOString()}`);
|
12
|
+
const indexedCodebases = this.snapshotManager.getIndexedCodebases();
|
13
|
+
if (indexedCodebases.length === 0) {
|
14
|
+
console.log('[SYNC-DEBUG] No codebases indexed. Skipping sync.');
|
15
|
+
return;
|
16
|
+
}
|
17
|
+
console.log(`[SYNC-DEBUG] Found ${indexedCodebases.length} indexed codebases:`, indexedCodebases);
|
18
|
+
if (this.isSyncing) {
|
19
|
+
console.log('[SYNC-DEBUG] Index sync already in progress. Skipping.');
|
20
|
+
return;
|
21
|
+
}
|
22
|
+
this.isSyncing = true;
|
23
|
+
console.log(`[SYNC-DEBUG] Starting index sync for all ${indexedCodebases.length} codebases...`);
|
24
|
+
try {
|
25
|
+
let totalStats = { added: 0, removed: 0, modified: 0 };
|
26
|
+
for (let i = 0; i < indexedCodebases.length; i++) {
|
27
|
+
const codebasePath = indexedCodebases[i];
|
28
|
+
const codebaseStartTime = Date.now();
|
29
|
+
console.log(`[SYNC-DEBUG] [${i + 1}/${indexedCodebases.length}] Starting sync for codebase: '${codebasePath}'`);
|
30
|
+
// Check if codebase path still exists
|
31
|
+
try {
|
32
|
+
const pathExists = fs.existsSync(codebasePath);
|
33
|
+
console.log(`[SYNC-DEBUG] Codebase path exists: ${pathExists}`);
|
34
|
+
if (!pathExists) {
|
35
|
+
console.warn(`[SYNC-DEBUG] Codebase path '${codebasePath}' no longer exists. Skipping sync.`);
|
36
|
+
continue;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
catch (pathError) {
|
40
|
+
console.error(`[SYNC-DEBUG] Error checking codebase path '${codebasePath}':`, pathError);
|
41
|
+
continue;
|
42
|
+
}
|
43
|
+
try {
|
44
|
+
console.log(`[SYNC-DEBUG] Calling context.reindexByChange() for '${codebasePath}'`);
|
45
|
+
const stats = await this.context.reindexByChange(codebasePath);
|
46
|
+
const codebaseElapsed = Date.now() - codebaseStartTime;
|
47
|
+
console.log(`[SYNC-DEBUG] Reindex stats for '${codebasePath}':`, stats);
|
48
|
+
console.log(`[SYNC-DEBUG] Codebase sync completed in ${codebaseElapsed}ms`);
|
49
|
+
// Accumulate total stats
|
50
|
+
totalStats.added += stats.added;
|
51
|
+
totalStats.removed += stats.removed;
|
52
|
+
totalStats.modified += stats.modified;
|
53
|
+
if (stats.added > 0 || stats.removed > 0 || stats.modified > 0) {
|
54
|
+
console.log(`[SYNC] Sync complete for '${codebasePath}'. Added: ${stats.added}, Removed: ${stats.removed}, Modified: ${stats.modified} (${codebaseElapsed}ms)`);
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
console.log(`[SYNC] No changes detected for '${codebasePath}' (${codebaseElapsed}ms)`);
|
58
|
+
}
|
59
|
+
}
|
60
|
+
catch (error) {
|
61
|
+
const codebaseElapsed = Date.now() - codebaseStartTime;
|
62
|
+
console.error(`[SYNC-DEBUG] Error syncing codebase '${codebasePath}' after ${codebaseElapsed}ms:`, error);
|
63
|
+
console.error(`[SYNC-DEBUG] Error stack:`, error.stack);
|
64
|
+
if (error.message.includes('Failed to query Milvus')) {
|
65
|
+
// Collection maybe deleted manually, delete the snapshot file
|
66
|
+
await FileSynchronizer.deleteSnapshot(codebasePath);
|
67
|
+
}
|
68
|
+
// Log additional error details
|
69
|
+
if (error.code) {
|
70
|
+
console.error(`[SYNC-DEBUG] Error code: ${error.code}`);
|
71
|
+
}
|
72
|
+
if (error.errno) {
|
73
|
+
console.error(`[SYNC-DEBUG] Error errno: ${error.errno}`);
|
74
|
+
}
|
75
|
+
// Continue with next codebase even if one fails
|
76
|
+
}
|
77
|
+
}
|
78
|
+
const totalElapsed = Date.now() - syncStartTime;
|
79
|
+
console.log(`[SYNC-DEBUG] Total sync stats across all codebases: Added: ${totalStats.added}, Removed: ${totalStats.removed}, Modified: ${totalStats.modified}`);
|
80
|
+
console.log(`[SYNC-DEBUG] Index sync completed for all codebases in ${totalElapsed}ms`);
|
81
|
+
console.log(`[SYNC] Index sync completed for all codebases. Total changes - Added: ${totalStats.added}, Removed: ${totalStats.removed}, Modified: ${totalStats.modified}`);
|
82
|
+
}
|
83
|
+
catch (error) {
|
84
|
+
const totalElapsed = Date.now() - syncStartTime;
|
85
|
+
console.error(`[SYNC-DEBUG] Error during index sync after ${totalElapsed}ms:`, error);
|
86
|
+
console.error(`[SYNC-DEBUG] Error stack:`, error.stack);
|
87
|
+
}
|
88
|
+
finally {
|
89
|
+
this.isSyncing = false;
|
90
|
+
const totalElapsed = Date.now() - syncStartTime;
|
91
|
+
console.log(`[SYNC-DEBUG] handleSyncIndex() finished at ${new Date().toISOString()}, total duration: ${totalElapsed}ms`);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
startBackgroundSync() {
|
95
|
+
console.log('[SYNC-DEBUG] startBackgroundSync() called');
|
96
|
+
// Execute initial sync immediately after a short delay to let server initialize
|
97
|
+
console.log('[SYNC-DEBUG] Scheduling initial sync in 5 seconds...');
|
98
|
+
setTimeout(async () => {
|
99
|
+
console.log('[SYNC-DEBUG] Executing initial sync after server startup');
|
100
|
+
try {
|
101
|
+
await this.handleSyncIndex();
|
102
|
+
}
|
103
|
+
catch (error) {
|
104
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
105
|
+
if (errorMessage.includes('Failed to query collection')) {
|
106
|
+
console.log('[SYNC-DEBUG] Collection not yet established, this is expected for new cluster users. Will retry on next sync cycle.');
|
107
|
+
}
|
108
|
+
else {
|
109
|
+
console.error('[SYNC-DEBUG] Initial sync failed with unexpected error:', error);
|
110
|
+
throw error;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}, 5000); // Initial sync after 5 seconds
|
114
|
+
// Periodically check for file changes and update the index
|
115
|
+
console.log('[SYNC-DEBUG] Setting up periodic sync every 5 minutes (300000ms)');
|
116
|
+
const syncInterval = setInterval(() => {
|
117
|
+
console.log('[SYNC-DEBUG] Executing scheduled periodic sync');
|
118
|
+
this.handleSyncIndex();
|
119
|
+
}, 5 * 60 * 1000); // every 5 minutes
|
120
|
+
console.log('[SYNC-DEBUG] Background sync setup complete. Interval ID:', syncInterval);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
/**
|
2
|
+
* Truncate content to specified length
|
3
|
+
*/
|
4
|
+
export declare function truncateContent(content: string, maxLength: number): string;
|
5
|
+
/**
|
6
|
+
* Ensure path is absolute. If relative path is provided, resolve it properly.
|
7
|
+
*/
|
8
|
+
export declare function ensureAbsolutePath(inputPath: string): string;
|
9
|
+
export declare function trackCodebasePath(codebasePath: string): void;
|
10
|
+
//# sourceMappingURL=utils.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAG5D"}
|
package/dist/utils.js
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
import * as path from "path";
|
2
|
+
/**
|
3
|
+
* Truncate content to specified length
|
4
|
+
*/
|
5
|
+
export function truncateContent(content, maxLength) {
|
6
|
+
if (content.length <= maxLength) {
|
7
|
+
return content;
|
8
|
+
}
|
9
|
+
return content.substring(0, maxLength) + '...';
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Ensure path is absolute. If relative path is provided, resolve it properly.
|
13
|
+
*/
|
14
|
+
export function ensureAbsolutePath(inputPath) {
|
15
|
+
// If already absolute, return as is
|
16
|
+
if (path.isAbsolute(inputPath)) {
|
17
|
+
return inputPath;
|
18
|
+
}
|
19
|
+
// For relative paths, resolve to absolute path
|
20
|
+
const resolved = path.resolve(inputPath);
|
21
|
+
return resolved;
|
22
|
+
}
|
23
|
+
export function trackCodebasePath(codebasePath) {
|
24
|
+
const absolutePath = ensureAbsolutePath(codebasePath);
|
25
|
+
console.log(`[TRACKING] Tracked codebase path: ${absolutePath} (not marked as indexed)`);
|
26
|
+
}
|
27
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,SAAiB;IAC9D,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAChD,oCAAoC;IACpC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,+CAA+C;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IAClD,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,qCAAqC,YAAY,0BAA0B,CAAC,CAAC;AAC7F,CAAC"}
|