token-pilot 0.2.1 → 0.2.3
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/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +16 -0
- package/dist/ast-index/client.d.ts.map +1 -1
- package/dist/ast-index/client.js +58 -18
- package/dist/ast-index/client.js.map +1 -1
- package/dist/ast-index/types.d.ts +1 -0
- package/dist/ast-index/types.d.ts.map +1 -1
- package/dist/handlers/project-overview.js +2 -2
- package/dist/handlers/project-overview.js.map +1 -1
- package/dist/handlers/smart-read.d.ts.map +1 -1
- package/dist/handlers/smart-read.js +16 -2
- package/dist/handlers/smart-read.js.map +1 -1
- package/package.json +3 -2
- package/dist/core/context-window-tracker.d.ts +0 -89
- package/dist/core/context-window-tracker.d.ts.map +0 -1
- package/dist/core/context-window-tracker.js +0 -161
- package/dist/core/context-window-tracker.js.map +0 -1
- package/dist/core/context-window-tracker.test.d.ts +0 -2
- package/dist/core/context-window-tracker.test.d.ts.map +0 -1
- package/dist/core/context-window-tracker.test.js +0 -238
- package/dist/core/context-window-tracker.test.js.map +0 -1
- package/dist/core/diff-engine.d.ts +0 -64
- package/dist/core/diff-engine.d.ts.map +0 -1
- package/dist/core/diff-engine.js +0 -185
- package/dist/core/diff-engine.js.map +0 -1
- package/dist/core/diff-engine.test.d.ts +0 -2
- package/dist/core/diff-engine.test.d.ts.map +0 -1
- package/dist/core/diff-engine.test.js +0 -351
- package/dist/core/diff-engine.test.js.map +0 -1
- package/dist/core/persistent-cache.d.ts +0 -153
- package/dist/core/persistent-cache.d.ts.map +0 -1
- package/dist/core/persistent-cache.js +0 -555
- package/dist/core/persistent-cache.js.map +0 -1
- package/dist/core/persistent-cache.test.d.ts +0 -2
- package/dist/core/persistent-cache.test.d.ts.map +0 -1
- package/dist/core/persistent-cache.test.js +0 -251
- package/dist/core/persistent-cache.test.js.map +0 -1
- package/dist/core/real-token-estimator.d.ts +0 -49
- package/dist/core/real-token-estimator.d.ts.map +0 -1
- package/dist/core/real-token-estimator.js +0 -93
- package/dist/core/real-token-estimator.js.map +0 -1
- package/dist/formatters/context-markup.d.ts +0 -40
- package/dist/formatters/context-markup.d.ts.map +0 -1
- package/dist/formatters/context-markup.js +0 -55
- package/dist/formatters/context-markup.js.map +0 -1
- package/dist/formatters/smart-read-xml.d.ts +0 -20
- package/dist/formatters/smart-read-xml.d.ts.map +0 -1
- package/dist/formatters/smart-read-xml.js +0 -163
- package/dist/formatters/smart-read-xml.js.map +0 -1
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { DiffEngine } from './diff-engine';
|
|
3
|
-
describe('DiffEngine', () => {
|
|
4
|
-
const engine = new DiffEngine();
|
|
5
|
-
// Helper to create mock FileStructure
|
|
6
|
-
const createMockStructure = (symbols) => ({
|
|
7
|
-
path: 'test.ts',
|
|
8
|
-
language: 'typescript',
|
|
9
|
-
meta: {
|
|
10
|
-
lines: 100,
|
|
11
|
-
bytes: 2000,
|
|
12
|
-
lastModified: Date.now(),
|
|
13
|
-
contentHash: 'hash123'
|
|
14
|
-
},
|
|
15
|
-
imports: [],
|
|
16
|
-
exports: [],
|
|
17
|
-
symbols
|
|
18
|
-
});
|
|
19
|
-
describe('computeDiff', () => {
|
|
20
|
-
it('should detect no changes for identical content', () => {
|
|
21
|
-
const content = 'function hello() {\n console.log("world")\n}';
|
|
22
|
-
const result = engine.computeDiff(content, content);
|
|
23
|
-
expect(result.operations).toHaveLength(0);
|
|
24
|
-
expect(result.totalAddedLines).toBe(0);
|
|
25
|
-
expect(result.totalRemovedLines).toBe(0);
|
|
26
|
-
expect(result.changePercentage).toBe(0);
|
|
27
|
-
});
|
|
28
|
-
it('should detect line additions', () => {
|
|
29
|
-
const old = 'line 1\nline 2\n';
|
|
30
|
-
const newContent = 'line 1\nline 2\nline 3\nline 4\n';
|
|
31
|
-
const result = engine.computeDiff(old, newContent);
|
|
32
|
-
expect(result.operations.length).toBeGreaterThan(0);
|
|
33
|
-
expect(result.totalAddedLines).toBeGreaterThan(0);
|
|
34
|
-
expect(result.changePercentage).toBeGreaterThan(0);
|
|
35
|
-
});
|
|
36
|
-
it('should detect line removals', () => {
|
|
37
|
-
const old = 'line 1\nline 2\nline 3\nline 4\n';
|
|
38
|
-
const newContent = 'line 1\nline 2\n';
|
|
39
|
-
const result = engine.computeDiff(old, newContent);
|
|
40
|
-
expect(result.totalRemovedLines).toBeGreaterThan(0);
|
|
41
|
-
expect(result.totalAddedLines).toBe(0);
|
|
42
|
-
});
|
|
43
|
-
it('should detect modifications (add + remove)', () => {
|
|
44
|
-
const old = 'function test() {}\n';
|
|
45
|
-
const newContent = 'function test(param: string) {\n return param\n}\n';
|
|
46
|
-
const result = engine.computeDiff(old, newContent);
|
|
47
|
-
// Should have either modify ops or separate add/remove ops
|
|
48
|
-
expect(result.operations.length).toBeGreaterThan(0);
|
|
49
|
-
expect(result.totalRemovedLines + result.totalAddedLines).toBeGreaterThan(0);
|
|
50
|
-
});
|
|
51
|
-
it('should calculate change percentage', () => {
|
|
52
|
-
const old = 'line 1\nline 2\nline 3\nline 4\nline 5\n';
|
|
53
|
-
const newContent = 'line 1\nline 2\nline X\nline 4\nline 5\n';
|
|
54
|
-
const result = engine.computeDiff(old, newContent);
|
|
55
|
-
expect(result.changePercentage).toBeGreaterThan(0);
|
|
56
|
-
expect(result.changePercentage).toBeLessThanOrEqual(100);
|
|
57
|
-
});
|
|
58
|
-
it('should handle large file diffs efficiently', () => {
|
|
59
|
-
const old = 'line 1\n'.repeat(5000);
|
|
60
|
-
const newContent = 'line 1\n'.repeat(4800) + 'line modified\n'.repeat(200);
|
|
61
|
-
const start = Date.now();
|
|
62
|
-
const result = engine.computeDiff(old, newContent);
|
|
63
|
-
const elapsed = Date.now() - start;
|
|
64
|
-
// Should complete in less than 100ms even for 10K lines
|
|
65
|
-
expect(elapsed).toBeLessThan(100);
|
|
66
|
-
expect(result.operations.length).toBeGreaterThan(0);
|
|
67
|
-
});
|
|
68
|
-
it('should handle empty content', () => {
|
|
69
|
-
const result = engine.computeDiff('', '');
|
|
70
|
-
expect(result.operations).toHaveLength(0);
|
|
71
|
-
expect(result.changePercentage).toBe(0);
|
|
72
|
-
});
|
|
73
|
-
it('should handle replacing all content', () => {
|
|
74
|
-
const old = 'old content\nold content\n';
|
|
75
|
-
const newContent = 'new content\nnew content\n';
|
|
76
|
-
const result = engine.computeDiff(old, newContent);
|
|
77
|
-
expect(result.operations.length).toBeGreaterThan(0);
|
|
78
|
-
expect(result.totalAddedLines + result.totalRemovedLines).toBeGreaterThan(0);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
describe('extractChangedSymbols', () => {
|
|
82
|
-
it('should extract symbols in changed line ranges', () => {
|
|
83
|
-
const oldContent = `function foo() {
|
|
84
|
-
return 1
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function bar() {
|
|
88
|
-
return 2
|
|
89
|
-
}`;
|
|
90
|
-
const newContent = `function foo() {
|
|
91
|
-
return 1
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function bar() {
|
|
95
|
-
return 3
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function baz() {
|
|
99
|
-
return 4
|
|
100
|
-
}`;
|
|
101
|
-
const diff = engine.computeDiff(oldContent, newContent);
|
|
102
|
-
const oldStructure = createMockStructure([
|
|
103
|
-
{
|
|
104
|
-
name: 'foo',
|
|
105
|
-
qualifiedName: 'foo',
|
|
106
|
-
kind: 'function',
|
|
107
|
-
signature: 'function foo()',
|
|
108
|
-
location: { startLine: 1, endLine: 3, lineCount: 3 },
|
|
109
|
-
visibility: 'default',
|
|
110
|
-
async: false,
|
|
111
|
-
static: false,
|
|
112
|
-
decorators: [],
|
|
113
|
-
children: [],
|
|
114
|
-
doc: null,
|
|
115
|
-
references: []
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: 'bar',
|
|
119
|
-
qualifiedName: 'bar',
|
|
120
|
-
kind: 'function',
|
|
121
|
-
signature: 'function bar()',
|
|
122
|
-
location: { startLine: 5, endLine: 7, lineCount: 3 },
|
|
123
|
-
visibility: 'default',
|
|
124
|
-
async: false,
|
|
125
|
-
static: false,
|
|
126
|
-
decorators: [],
|
|
127
|
-
children: [],
|
|
128
|
-
doc: null,
|
|
129
|
-
references: []
|
|
130
|
-
}
|
|
131
|
-
]);
|
|
132
|
-
const newStructure = createMockStructure([
|
|
133
|
-
{
|
|
134
|
-
name: 'foo',
|
|
135
|
-
qualifiedName: 'foo',
|
|
136
|
-
kind: 'function',
|
|
137
|
-
signature: 'function foo()',
|
|
138
|
-
location: { startLine: 1, endLine: 3, lineCount: 3 },
|
|
139
|
-
visibility: 'default',
|
|
140
|
-
async: false,
|
|
141
|
-
static: false,
|
|
142
|
-
decorators: [],
|
|
143
|
-
children: [],
|
|
144
|
-
doc: null,
|
|
145
|
-
references: []
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
name: 'bar',
|
|
149
|
-
qualifiedName: 'bar',
|
|
150
|
-
kind: 'function',
|
|
151
|
-
signature: 'function bar()',
|
|
152
|
-
location: { startLine: 5, endLine: 7, lineCount: 3 },
|
|
153
|
-
visibility: 'default',
|
|
154
|
-
async: false,
|
|
155
|
-
static: false,
|
|
156
|
-
decorators: [],
|
|
157
|
-
children: [],
|
|
158
|
-
doc: null,
|
|
159
|
-
references: []
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
name: 'baz',
|
|
163
|
-
qualifiedName: 'baz',
|
|
164
|
-
kind: 'function',
|
|
165
|
-
signature: 'function baz()',
|
|
166
|
-
location: { startLine: 9, endLine: 11, lineCount: 3 },
|
|
167
|
-
visibility: 'default',
|
|
168
|
-
async: false,
|
|
169
|
-
static: false,
|
|
170
|
-
decorators: [],
|
|
171
|
-
children: [],
|
|
172
|
-
doc: null,
|
|
173
|
-
references: []
|
|
174
|
-
}
|
|
175
|
-
]);
|
|
176
|
-
const changed = engine.extractChangedSymbols(diff, oldStructure, newStructure);
|
|
177
|
-
// Should include symbols that were added or modified
|
|
178
|
-
expect(changed.length).toBeGreaterThan(0);
|
|
179
|
-
// 'bar' was modified, 'baz' was added - but foo was not changed
|
|
180
|
-
expect(changed.map(s => s.name)).toContain('baz');
|
|
181
|
-
});
|
|
182
|
-
it('should not duplicate changed symbols', () => {
|
|
183
|
-
const oldContent = 'function test() { return 1 }';
|
|
184
|
-
const newContent = 'function test() { return 2 }';
|
|
185
|
-
const diff = engine.computeDiff(oldContent, newContent);
|
|
186
|
-
const oldStructure = createMockStructure([
|
|
187
|
-
{
|
|
188
|
-
name: 'test',
|
|
189
|
-
qualifiedName: 'test',
|
|
190
|
-
kind: 'function',
|
|
191
|
-
signature: 'function test()',
|
|
192
|
-
location: { startLine: 1, endLine: 1, lineCount: 1 },
|
|
193
|
-
visibility: 'default',
|
|
194
|
-
async: false,
|
|
195
|
-
static: false,
|
|
196
|
-
decorators: [],
|
|
197
|
-
children: [],
|
|
198
|
-
doc: null,
|
|
199
|
-
references: []
|
|
200
|
-
}
|
|
201
|
-
]);
|
|
202
|
-
const newStructure = createMockStructure([
|
|
203
|
-
{
|
|
204
|
-
name: 'test',
|
|
205
|
-
qualifiedName: 'test',
|
|
206
|
-
kind: 'function',
|
|
207
|
-
signature: 'function test()',
|
|
208
|
-
location: { startLine: 1, endLine: 1, lineCount: 1 },
|
|
209
|
-
visibility: 'default',
|
|
210
|
-
async: false,
|
|
211
|
-
static: false,
|
|
212
|
-
decorators: [],
|
|
213
|
-
children: [],
|
|
214
|
-
doc: null,
|
|
215
|
-
references: []
|
|
216
|
-
}
|
|
217
|
-
]);
|
|
218
|
-
const changed = engine.extractChangedSymbols(diff, oldStructure, newStructure);
|
|
219
|
-
// Should return exactly 1 symbol, not duplicates
|
|
220
|
-
expect(changed).toHaveLength(1);
|
|
221
|
-
});
|
|
222
|
-
it('should return empty array when no symbols changed', () => {
|
|
223
|
-
const oldContent = 'const x = 1\nconst y = 2';
|
|
224
|
-
const newContent = 'const x = 1\nconst y = 2\n// comment';
|
|
225
|
-
const diff = engine.computeDiff(oldContent, newContent);
|
|
226
|
-
const oldStructure = createMockStructure([
|
|
227
|
-
{
|
|
228
|
-
name: 'x',
|
|
229
|
-
qualifiedName: 'x',
|
|
230
|
-
kind: 'variable',
|
|
231
|
-
signature: 'const x = 1',
|
|
232
|
-
location: { startLine: 1, endLine: 1, lineCount: 1 },
|
|
233
|
-
visibility: 'default',
|
|
234
|
-
async: false,
|
|
235
|
-
static: false,
|
|
236
|
-
decorators: [],
|
|
237
|
-
children: [],
|
|
238
|
-
doc: null,
|
|
239
|
-
references: []
|
|
240
|
-
}
|
|
241
|
-
]);
|
|
242
|
-
const newStructure = createMockStructure([
|
|
243
|
-
{
|
|
244
|
-
name: 'x',
|
|
245
|
-
qualifiedName: 'x',
|
|
246
|
-
kind: 'variable',
|
|
247
|
-
signature: 'const x = 1',
|
|
248
|
-
location: { startLine: 1, endLine: 1, lineCount: 1 },
|
|
249
|
-
visibility: 'default',
|
|
250
|
-
async: false,
|
|
251
|
-
static: false,
|
|
252
|
-
decorators: [],
|
|
253
|
-
children: [],
|
|
254
|
-
doc: null,
|
|
255
|
-
references: []
|
|
256
|
-
}
|
|
257
|
-
]);
|
|
258
|
-
const changed = engine.extractChangedSymbols(diff, oldStructure, newStructure);
|
|
259
|
-
// Only comment was added, no symbol changes
|
|
260
|
-
expect(changed.length).toBeLessThanOrEqual(1);
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
describe('estimateTokenSavings', () => {
|
|
264
|
-
it('should estimate token savings for delta read', () => {
|
|
265
|
-
const fullFileTokens = 3000;
|
|
266
|
-
const changedSymbols = [
|
|
267
|
-
{
|
|
268
|
-
name: 'foo',
|
|
269
|
-
qualifiedName: 'foo',
|
|
270
|
-
kind: 'function',
|
|
271
|
-
signature: 'function foo()',
|
|
272
|
-
location: { startLine: 1, endLine: 10, lineCount: 10 },
|
|
273
|
-
visibility: 'default',
|
|
274
|
-
async: false,
|
|
275
|
-
static: false,
|
|
276
|
-
decorators: [],
|
|
277
|
-
children: [],
|
|
278
|
-
doc: null,
|
|
279
|
-
references: []
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
name: 'bar',
|
|
283
|
-
qualifiedName: 'bar',
|
|
284
|
-
kind: 'function',
|
|
285
|
-
signature: 'function bar()',
|
|
286
|
-
location: { startLine: 12, endLine: 20, lineCount: 9 },
|
|
287
|
-
visibility: 'default',
|
|
288
|
-
async: false,
|
|
289
|
-
static: false,
|
|
290
|
-
decorators: [],
|
|
291
|
-
children: [],
|
|
292
|
-
doc: null,
|
|
293
|
-
references: []
|
|
294
|
-
}
|
|
295
|
-
];
|
|
296
|
-
const savings = engine.estimateTokenSavings(fullFileTokens, changedSymbols);
|
|
297
|
-
// 2 symbols * 35 tokens = 70 tokens
|
|
298
|
-
// 3000 - 70 = 2930 tokens savings
|
|
299
|
-
expect(savings).toBeGreaterThan(0);
|
|
300
|
-
expect(savings).toBeLessThan(fullFileTokens);
|
|
301
|
-
expect(savings).toBeCloseTo(3000 - 2 * 35, 50);
|
|
302
|
-
});
|
|
303
|
-
it('should not have negative savings', () => {
|
|
304
|
-
const fullFileTokens = 100;
|
|
305
|
-
const changedSymbols = [
|
|
306
|
-
{
|
|
307
|
-
name: 'foo',
|
|
308
|
-
qualifiedName: 'foo',
|
|
309
|
-
kind: 'function',
|
|
310
|
-
signature: 'function foo()',
|
|
311
|
-
location: { startLine: 1, endLine: 10, lineCount: 10 },
|
|
312
|
-
visibility: 'default',
|
|
313
|
-
async: false,
|
|
314
|
-
static: false,
|
|
315
|
-
decorators: [],
|
|
316
|
-
children: [],
|
|
317
|
-
doc: null,
|
|
318
|
-
references: []
|
|
319
|
-
}
|
|
320
|
-
];
|
|
321
|
-
const savings = engine.estimateTokenSavings(fullFileTokens, changedSymbols);
|
|
322
|
-
expect(savings).toBeGreaterThanOrEqual(0);
|
|
323
|
-
});
|
|
324
|
-
it('should return full file tokens as savings when no symbols changed', () => {
|
|
325
|
-
const fullFileTokens = 3000;
|
|
326
|
-
const changedSymbols = [];
|
|
327
|
-
const savings = engine.estimateTokenSavings(fullFileTokens, changedSymbols);
|
|
328
|
-
expect(savings).toBe(fullFileTokens);
|
|
329
|
-
});
|
|
330
|
-
});
|
|
331
|
-
describe('performance', () => {
|
|
332
|
-
it('should handle 10K line files in under 100ms', () => {
|
|
333
|
-
const large = 'line\n'.repeat(5000);
|
|
334
|
-
const modified = 'line\n'.repeat(4900) + 'changed\n'.repeat(100);
|
|
335
|
-
const start = Date.now();
|
|
336
|
-
engine.computeDiff(large, modified);
|
|
337
|
-
const elapsed = Date.now() - start;
|
|
338
|
-
expect(elapsed).toBeLessThan(100);
|
|
339
|
-
});
|
|
340
|
-
it('should handle 100K character files', () => {
|
|
341
|
-
const large = 'x'.repeat(50000) + '\ny\n' + 'z'.repeat(50000);
|
|
342
|
-
const modified = 'x'.repeat(50000) + '\ny\n' + 'w'.repeat(50000);
|
|
343
|
-
const start = Date.now();
|
|
344
|
-
const result = engine.computeDiff(large, modified);
|
|
345
|
-
const elapsed = Date.now() - start;
|
|
346
|
-
expect(result.operations.length).toBeGreaterThanOrEqual(0);
|
|
347
|
-
expect(elapsed).toBeLessThan(200);
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
});
|
|
351
|
-
//# sourceMappingURL=diff-engine.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-engine.test.js","sourceRoot":"","sources":["../../src/core/diff-engine.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import type { CacheEntry } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Persistent File Cache with Two-Level Architecture
|
|
4
|
-
*
|
|
5
|
-
* Problem: Cold start takes 200s because each file needs AST parsing
|
|
6
|
-
* Solution: L1 (in-memory) + L2 (SQLite persistent) cache with LRU eviction
|
|
7
|
-
*
|
|
8
|
-
* L1 Cache (Memory):
|
|
9
|
-
* - Fast: <5ms lookups
|
|
10
|
-
* - Warm during session
|
|
11
|
-
* - Survives memory pressure via eviction
|
|
12
|
-
*
|
|
13
|
-
* L2 Cache (SQLite):
|
|
14
|
-
* - Persistent: survives restarts
|
|
15
|
-
* - Slower: ~100ms lookups
|
|
16
|
-
* - Enables 20x faster cold starts (200s → 10s)
|
|
17
|
-
*
|
|
18
|
-
* Strategy:
|
|
19
|
-
* - Always read from L1 first (fastest)
|
|
20
|
-
* - Miss in L1 → read from L2 (persistent)
|
|
21
|
-
* - Miss in L2 → parse file (slowest, but cached for next time)
|
|
22
|
-
* - Evict LRU when memory/disk limit exceeded
|
|
23
|
-
*/
|
|
24
|
-
export declare class PersistentFileCache {
|
|
25
|
-
private l1;
|
|
26
|
-
private db;
|
|
27
|
-
private maxSizeBytes;
|
|
28
|
-
private l1MaxSize;
|
|
29
|
-
private onSetCallback;
|
|
30
|
-
private smallFileThreshold;
|
|
31
|
-
private l1Only;
|
|
32
|
-
private l1Hits;
|
|
33
|
-
private l2Hits;
|
|
34
|
-
private misses;
|
|
35
|
-
constructor(projectRoot: string, maxSizeMB?: number, smallFileThreshold?: number);
|
|
36
|
-
/**
|
|
37
|
-
* Initialize database schema with file_cache table and indexes
|
|
38
|
-
*/
|
|
39
|
-
private initializeSchema;
|
|
40
|
-
/**
|
|
41
|
-
* Get cached entry from L1 or L2
|
|
42
|
-
* Returns from L1 first (fastest), then L2 (persistent)
|
|
43
|
-
*/
|
|
44
|
-
get(filePath: string): CacheEntry | null;
|
|
45
|
-
/**
|
|
46
|
-
* Set cache entry in L1 and L2
|
|
47
|
-
*/
|
|
48
|
-
set(filePath: string, entry: CacheEntry): void;
|
|
49
|
-
/**
|
|
50
|
-
* Get cached entry by content hash (semantic caching)
|
|
51
|
-
* Useful when same file content loaded from different paths
|
|
52
|
-
*/
|
|
53
|
-
getByHash(contentHash: string): CacheEntry | null;
|
|
54
|
-
/**
|
|
55
|
-
* Remove entry from both L1 and L2
|
|
56
|
-
*/
|
|
57
|
-
delete(filePath: string): void;
|
|
58
|
-
/**
|
|
59
|
-
* Clear all cache (useful for testing)
|
|
60
|
-
*/
|
|
61
|
-
clear(): void;
|
|
62
|
-
/**
|
|
63
|
-
* Get cache statistics
|
|
64
|
-
*/
|
|
65
|
-
getStats(): {
|
|
66
|
-
totalBytes: number;
|
|
67
|
-
entryCount: number;
|
|
68
|
-
l1Size: number;
|
|
69
|
-
l2Size: number;
|
|
70
|
-
maxBytes: number;
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Get all cached entries (for iteration/analysis)
|
|
74
|
-
*/
|
|
75
|
-
private getAllEntries;
|
|
76
|
-
/**
|
|
77
|
-
* Evict LRU entries if cache exceeds size limit
|
|
78
|
-
*/
|
|
79
|
-
private evictIfNeeded;
|
|
80
|
-
/**
|
|
81
|
-
* Update lastAccess timestamp for file
|
|
82
|
-
*/
|
|
83
|
-
private updateLastAccess;
|
|
84
|
-
/**
|
|
85
|
-
* Update cache statistics
|
|
86
|
-
*/
|
|
87
|
-
private updateStats;
|
|
88
|
-
/**
|
|
89
|
-
* Estimate entry size in bytes
|
|
90
|
-
*/
|
|
91
|
-
private estimateSize;
|
|
92
|
-
/**
|
|
93
|
-
* Register callback for file writes (compatibility with FileCache)
|
|
94
|
-
*/
|
|
95
|
-
onSet(callback: (filePath: string) => void): void;
|
|
96
|
-
/**
|
|
97
|
-
* Invalidate cache entry (compatibility with FileCache)
|
|
98
|
-
*/
|
|
99
|
-
invalidate(filePath?: string): void;
|
|
100
|
-
/**
|
|
101
|
-
* Invalidate files by git diff (compatibility with FileCache)
|
|
102
|
-
*/
|
|
103
|
-
invalidateByGitDiff(changedFiles: string[]): Promise<void>;
|
|
104
|
-
/**
|
|
105
|
-
* Check if file is small (under threshold lines)
|
|
106
|
-
*/
|
|
107
|
-
isSmallFile(filePath: string): Promise<boolean>;
|
|
108
|
-
/**
|
|
109
|
-
* Check if cached entry is stale (mtime changed)
|
|
110
|
-
*/
|
|
111
|
-
isStale(filePath: string): Promise<boolean>;
|
|
112
|
-
/**
|
|
113
|
-
* Get small file threshold
|
|
114
|
-
*/
|
|
115
|
-
getSmallFileThreshold(): number;
|
|
116
|
-
/**
|
|
117
|
-
* Get all cached file paths
|
|
118
|
-
*/
|
|
119
|
-
cachedPaths(): string[];
|
|
120
|
-
/**
|
|
121
|
-
* Get cache statistics (compatibility with FileCache)
|
|
122
|
-
*/
|
|
123
|
-
stats(): {
|
|
124
|
-
entries: number;
|
|
125
|
-
sizeBytes: number;
|
|
126
|
-
hitRate: number;
|
|
127
|
-
};
|
|
128
|
-
/**
|
|
129
|
-
* Get detailed cache performance metrics
|
|
130
|
-
*/
|
|
131
|
-
getPerformanceMetrics(): {
|
|
132
|
-
l1Hits: number;
|
|
133
|
-
l2Hits: number;
|
|
134
|
-
misses: number;
|
|
135
|
-
totalRequests: number;
|
|
136
|
-
hitRate: number;
|
|
137
|
-
l1HitRate: number;
|
|
138
|
-
l2HitRate: number;
|
|
139
|
-
l1Only: boolean;
|
|
140
|
-
};
|
|
141
|
-
/**
|
|
142
|
-
* Trigger onSet callback after setting entry
|
|
143
|
-
*/
|
|
144
|
-
private triggerOnSet;
|
|
145
|
-
/**
|
|
146
|
-
* Close database connection
|
|
147
|
-
*/
|
|
148
|
-
close(): void;
|
|
149
|
-
}
|
|
150
|
-
export declare function initializePersistentCache(projectRoot: string, maxSizeMB?: number): PersistentFileCache;
|
|
151
|
-
export declare function getPersistentCache(): PersistentFileCache;
|
|
152
|
-
export declare function closePersistentCache(): void;
|
|
153
|
-
//# sourceMappingURL=persistent-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"persistent-cache.d.ts","sourceRoot":"","sources":["../../src/core/persistent-cache.ts"],"names":[],"mappings":"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"}
|