@inoceanlee/brc 2.1.1 → 2.1.2
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/dist/cli.js +68 -16
- package/dist/cli.js.map +1 -1
- package/dist/commands/setup.d.ts +14 -0
- package/dist/commands/setup.js +57 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/config/manager.js +16 -8
- package/dist/config/manager.js.map +1 -1
- package/dist/config/settings.d.ts +5 -1
- package/dist/config/settings.js +5 -1
- package/dist/config/settings.js.map +1 -1
- package/dist/lifecycle/identity.d.ts +8 -0
- package/dist/lifecycle/identity.js +126 -0
- package/dist/lifecycle/identity.js.map +1 -0
- package/dist/lifecycle/lock-store.d.ts +28 -0
- package/dist/lifecycle/lock-store.js +204 -0
- package/dist/lifecycle/lock-store.js.map +1 -0
- package/dist/lifecycle/lock.d.ts +12 -3
- package/dist/lifecycle/lock.js +50 -74
- package/dist/lifecycle/lock.js.map +1 -1
- package/dist/lifecycle/processes.d.ts +5 -7
- package/dist/lifecycle/processes.js +106 -108
- package/dist/lifecycle/processes.js.map +1 -1
- package/dist/lifecycle/services.d.ts +1 -0
- package/dist/lifecycle/services.js +2 -5
- package/dist/lifecycle/services.js.map +1 -1
- package/dist/maintenance/cleanup.js +177 -71
- package/dist/maintenance/cleanup.js.map +1 -1
- package/dist/native/win32-x64/brc-process.exe +0 -0
- package/dist/progress.d.ts +29 -0
- package/dist/progress.js +159 -0
- package/dist/progress.js.map +1 -0
- package/dist/services/agent/cli.js +1 -2
- package/dist/services/agent/cli.js.map +1 -1
- package/dist/services/agent/core/config-field-definitions.d.ts +1 -0
- package/dist/services/agent/core/config-field-definitions.js +36 -0
- package/dist/services/agent/core/config-field-definitions.js.map +1 -1
- package/dist/services/agent/core/config-manager.d.ts +3 -5
- package/dist/services/agent/core/config-manager.js +64 -109
- package/dist/services/agent/core/config-manager.js.map +1 -1
- package/dist/services/agent/core/config-storage.d.ts +11 -0
- package/dist/services/agent/core/config-storage.js +66 -0
- package/dist/services/agent/core/config-storage.js.map +1 -0
- package/dist/services/agent/core/config.d.ts +5 -0
- package/dist/services/agent/core/config.js +5 -1
- package/dist/services/agent/core/config.js.map +1 -1
- package/dist/services/agent/core/handlers/filesystem-handlers.js +3 -2
- package/dist/services/agent/core/handlers/filesystem-handlers.js.map +1 -1
- package/dist/services/agent/core/tools/config.d.ts +3 -1
- package/dist/services/agent/core/tools/config.js +5 -66
- package/dist/services/agent/core/tools/config.js.map +1 -1
- package/dist/services/agent/core/tools/edit.js +2 -1
- package/dist/services/agent/core/tools/edit.js.map +1 -1
- package/dist/services/agent/core/tools/filesystem.js +15 -21
- package/dist/services/agent/core/tools/filesystem.js.map +1 -1
- package/dist/services/agent/core/tools/improved-process-tools.js +3 -2
- package/dist/services/agent/core/tools/improved-process-tools.js.map +1 -1
- package/dist/services/agent/core/tools/schemas.d.ts +2 -2
- package/dist/services/agent/core/tools/schemas.js +1 -1
- package/dist/services/agent/core/tools/schemas.js.map +1 -1
- package/dist/services/agent/core/utils/files/text-reader.d.ts +31 -0
- package/dist/services/agent/core/utils/files/text-reader.js +261 -0
- package/dist/services/agent/core/utils/files/text-reader.js.map +1 -0
- package/dist/services/agent/core/utils/files/text.d.ts +1 -25
- package/dist/services/agent/core/utils/files/text.js +6 -245
- package/dist/services/agent/core/utils/files/text.js.map +1 -1
- package/dist/services/agent/core/utils/fuzzySearchLogger.js +2 -2
- package/dist/services/agent/core/utils/fuzzySearchLogger.js.map +1 -1
- package/dist/services/agent/core/utils/toolHistory.d.ts +2 -1
- package/dist/services/agent/core/utils/toolHistory.js +65 -79
- package/dist/services/agent/core/utils/toolHistory.js.map +1 -1
- package/dist/services/agent/core/utils/toolHistoryStorage.d.ts +11 -0
- package/dist/services/agent/core/utils/toolHistoryStorage.js +135 -0
- package/dist/services/agent/core/utils/toolHistoryStorage.js.map +1 -0
- package/dist/services/agent/dispatcher.js +3 -5
- package/dist/services/agent/dispatcher.js.map +1 -1
- package/dist/services/agent/service.js +2 -1
- package/dist/services/agent/service.js.map +1 -1
- package/dist/services/agent/transport/pairing.js +24 -24
- package/dist/services/agent/transport/pairing.js.map +1 -1
- package/dist/services/relay/store/sqlite.d.ts +1 -6
- package/dist/services/relay/store/sqlite.js +84 -84
- package/dist/services/relay/store/sqlite.js.map +1 -1
- package/dist/traefik/core.d.ts +17 -5
- package/dist/traefik/core.js +70 -64
- package/dist/traefik/core.js.map +1 -1
- package/dist/traefik/input.d.ts +6 -7
- package/dist/traefik/input.js +46 -88
- package/dist/traefik/input.js.map +1 -1
- package/dist/traefik/manager.d.ts +13 -0
- package/dist/traefik/manager.js +64 -24
- package/dist/traefik/manager.js.map +1 -1
- package/dist/traefik/output.d.ts +9 -11
- package/dist/traefik/output.js +112 -46
- package/dist/traefik/output.js.map +1 -1
- package/dist/traefik/runtime.d.ts +1 -1
- package/dist/traefik/runtime.js +4 -3
- package/dist/traefik/runtime.js.map +1 -1
- package/node_modules/brc-shared/package.json +1 -1
- package/package.json +2 -2
|
@@ -13,51 +13,31 @@
|
|
|
13
13
|
* search/replace logic should be moved here. See comment in src/tools/edit.ts.
|
|
14
14
|
*/
|
|
15
15
|
import fs from "fs/promises";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
16
|
+
import { AGENT_DEFAULTS } from '../../config.js';
|
|
17
|
+
import { TextReader } from './text-reader.js';
|
|
18
18
|
// TODO: Centralize these constants with filesystem.ts to avoid silent drift
|
|
19
19
|
// These duplicate concepts from filesystem.ts and should be moved to a shared
|
|
20
20
|
// constants module (e.g., src/utils/files/constants.ts) during reorganization
|
|
21
21
|
const FILE_SIZE_LIMITS = {
|
|
22
|
-
LARGE_FILE_THRESHOLD: 10 * 1024 * 1024, // 10MB
|
|
23
22
|
LINE_COUNT_LIMIT: 10 * 1024 * 1024, // 10MB for line counting
|
|
24
23
|
};
|
|
25
|
-
const READ_PERFORMANCE_THRESHOLDS = {
|
|
26
|
-
SMALL_READ_THRESHOLD: 100, // For very small reads
|
|
27
|
-
DEEP_OFFSET_THRESHOLD: 1000, // For byte estimation
|
|
28
|
-
SAMPLE_SIZE: 10000, // Sample size for estimation
|
|
29
|
-
CHUNK_SIZE: 8192, // 8KB chunks for reverse reading
|
|
30
|
-
};
|
|
31
24
|
/**
|
|
32
25
|
* Text file handler implementation
|
|
33
26
|
* Binary detection is done at the factory level - this handler assumes file is text
|
|
34
27
|
*/
|
|
35
28
|
export class TextFileHandler {
|
|
29
|
+
reader = new TextReader(TextFileHandler.countLines, this.generateEnhancedStatusMessage);
|
|
36
30
|
canHandle(_path) {
|
|
37
31
|
// Text handler accepts all files that pass the factory's binary check
|
|
38
32
|
// The factory routes binary files to BinaryFileHandler before reaching here
|
|
39
33
|
return true;
|
|
40
34
|
}
|
|
41
|
-
async detectTextEncoding(filePath) {
|
|
42
|
-
const fd = await fs.open(filePath, 'r');
|
|
43
|
-
try {
|
|
44
|
-
const bom = Buffer.alloc(2);
|
|
45
|
-
const { bytesRead } = await fd.read(bom, 0, bom.length, 0);
|
|
46
|
-
if (bytesRead === 2 && bom[0] === 0xff && bom[1] === 0xfe) {
|
|
47
|
-
return 'utf16le';
|
|
48
|
-
}
|
|
49
|
-
return 'utf8';
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
await fd.close();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
35
|
async read(filePath, options) {
|
|
56
36
|
const offset = options?.offset ?? 0;
|
|
57
|
-
const length = options?.length ??
|
|
37
|
+
const length = options?.length ?? AGENT_DEFAULTS.fileReadLineLimit;
|
|
58
38
|
const includeStatusMessage = options?.includeStatusMessage ?? true;
|
|
59
39
|
// Binary detection is done at factory level - just read as text
|
|
60
|
-
return this.readFileWithSmartPositioning(filePath, offset, length, 'text/plain', includeStatusMessage, options?.signal);
|
|
40
|
+
return this.reader.readFileWithSmartPositioning(filePath, offset, length, 'text/plain', includeStatusMessage, options?.signal);
|
|
61
41
|
}
|
|
62
42
|
async write(path, content, mode = 'rewrite') {
|
|
63
43
|
if (mode === 'append') {
|
|
@@ -83,7 +63,7 @@ export class TextFileHandler {
|
|
|
83
63
|
// For text files that aren't too large, count lines
|
|
84
64
|
if (stats.isFile() && stats.size < FILE_SIZE_LIMITS.LINE_COUNT_LIMIT) {
|
|
85
65
|
try {
|
|
86
|
-
const encoding = await this.detectTextEncoding(path);
|
|
66
|
+
const encoding = await this.reader.detectTextEncoding(path);
|
|
87
67
|
let content = await fs.readFile(path, encoding);
|
|
88
68
|
if (encoding === 'utf16le' && content.charCodeAt(0) === 0xfeff) {
|
|
89
69
|
content = content.slice(1);
|
|
@@ -115,25 +95,6 @@ export class TextFileHandler {
|
|
|
115
95
|
}
|
|
116
96
|
return lines.length;
|
|
117
97
|
}
|
|
118
|
-
/**
|
|
119
|
-
* Get file line count (for files under size limit)
|
|
120
|
-
*/
|
|
121
|
-
async getFileLineCount(filePath, signal, encoding = 'utf8') {
|
|
122
|
-
try {
|
|
123
|
-
const stats = await fs.stat(filePath);
|
|
124
|
-
if (stats.size < FILE_SIZE_LIMITS.LINE_COUNT_LIMIT) {
|
|
125
|
-
let content = await fs.readFile(filePath, { encoding, signal });
|
|
126
|
-
if (encoding === 'utf16le' && content.charCodeAt(0) === 0xfeff) {
|
|
127
|
-
content = content.slice(1);
|
|
128
|
-
}
|
|
129
|
-
return TextFileHandler.countLines(content);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
// If we can't read the file, return undefined
|
|
134
|
-
}
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
98
|
/**
|
|
138
99
|
* Generate enhanced status message
|
|
139
100
|
*/
|
|
@@ -197,205 +158,5 @@ export class TextFileHandler {
|
|
|
197
158
|
}
|
|
198
159
|
return lines;
|
|
199
160
|
}
|
|
200
|
-
/**
|
|
201
|
-
* Read file with smart positioning for optimal performance
|
|
202
|
-
*/
|
|
203
|
-
async readFileWithSmartPositioning(filePath, offset, length, mimeType, includeStatusMessage = true, signal) {
|
|
204
|
-
const stats = await fs.stat(filePath);
|
|
205
|
-
const fileSize = stats.size;
|
|
206
|
-
const encoding = await this.detectTextEncoding(filePath);
|
|
207
|
-
const totalLines = await this.getFileLineCount(filePath, signal, encoding);
|
|
208
|
-
// UTF-16LE needs character-aware streaming. Skip the two-byte BOM and keep
|
|
209
|
-
// the same line pagination/status semantics as ordinary text reads.
|
|
210
|
-
if (encoding === 'utf16le') {
|
|
211
|
-
if (offset < 0) {
|
|
212
|
-
return await this.readFromEndWithReadline(filePath, Math.abs(offset), mimeType, includeStatusMessage, totalLines, signal, 'utf16le', 2);
|
|
213
|
-
}
|
|
214
|
-
return await this.readFromStartWithReadline(filePath, offset, length, mimeType, includeStatusMessage, totalLines, signal, 'utf16le', 2);
|
|
215
|
-
}
|
|
216
|
-
// For negative offsets (tail behavior), use reverse reading
|
|
217
|
-
if (offset < 0) {
|
|
218
|
-
const requestedLines = Math.abs(offset);
|
|
219
|
-
if (fileSize > FILE_SIZE_LIMITS.LARGE_FILE_THRESHOLD &&
|
|
220
|
-
requestedLines <= READ_PERFORMANCE_THRESHOLDS.SMALL_READ_THRESHOLD) {
|
|
221
|
-
return await this.readLastNLinesReverse(filePath, requestedLines, mimeType, includeStatusMessage, totalLines, signal);
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
return await this.readFromEndWithReadline(filePath, requestedLines, mimeType, includeStatusMessage, totalLines, signal);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
// For positive offsets
|
|
228
|
-
else {
|
|
229
|
-
if (fileSize < FILE_SIZE_LIMITS.LARGE_FILE_THRESHOLD || offset === 0) {
|
|
230
|
-
return await this.readFromStartWithReadline(filePath, offset, length, mimeType, includeStatusMessage, totalLines, signal);
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
if (offset > READ_PERFORMANCE_THRESHOLDS.DEEP_OFFSET_THRESHOLD) {
|
|
234
|
-
return await this.readFromEstimatedPosition(filePath, offset, length, mimeType, includeStatusMessage, totalLines, signal);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
return await this.readFromStartWithReadline(filePath, offset, length, mimeType, includeStatusMessage, totalLines, signal);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Read last N lines efficiently by reading file backwards
|
|
244
|
-
*/
|
|
245
|
-
async readLastNLinesReverse(filePath, n, mimeType, includeStatusMessage = true, fileTotalLines, signal) {
|
|
246
|
-
const fd = await fs.open(filePath, 'r');
|
|
247
|
-
try {
|
|
248
|
-
const stats = await fd.stat();
|
|
249
|
-
const fileSize = stats.size;
|
|
250
|
-
let position = fileSize;
|
|
251
|
-
let lines = [];
|
|
252
|
-
let partialLine = '';
|
|
253
|
-
while (position > 0 && lines.length < n) {
|
|
254
|
-
if (signal?.aborted) {
|
|
255
|
-
const err = new Error('Read aborted');
|
|
256
|
-
err.code = 'ABORT_ERR';
|
|
257
|
-
throw err;
|
|
258
|
-
}
|
|
259
|
-
const readSize = Math.min(READ_PERFORMANCE_THRESHOLDS.CHUNK_SIZE, position);
|
|
260
|
-
position -= readSize;
|
|
261
|
-
const buffer = Buffer.alloc(readSize);
|
|
262
|
-
await fd.read(buffer, 0, readSize, position);
|
|
263
|
-
const chunk = buffer.toString('utf-8');
|
|
264
|
-
const text = chunk + partialLine;
|
|
265
|
-
const chunkLines = text.split('\n');
|
|
266
|
-
partialLine = chunkLines.shift() || '';
|
|
267
|
-
lines = chunkLines.concat(lines);
|
|
268
|
-
}
|
|
269
|
-
if (position === 0 && partialLine) {
|
|
270
|
-
lines.unshift(partialLine);
|
|
271
|
-
}
|
|
272
|
-
const result = lines.slice(-n);
|
|
273
|
-
const content = includeStatusMessage
|
|
274
|
-
? `${this.generateEnhancedStatusMessage(result.length, -n, fileTotalLines, true)}\n\n${result.join('\n')}`
|
|
275
|
-
: result.join('\n');
|
|
276
|
-
return { content, mimeType, metadata: {} };
|
|
277
|
-
}
|
|
278
|
-
finally {
|
|
279
|
-
await fd.close();
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Read from end using readline with circular buffer
|
|
284
|
-
*/
|
|
285
|
-
async readFromEndWithReadline(filePath, requestedLines, mimeType, includeStatusMessage = true, fileTotalLines, signal, encoding, start) {
|
|
286
|
-
const rl = createInterface({
|
|
287
|
-
input: createReadStream(filePath, { signal, encoding, start }),
|
|
288
|
-
crlfDelay: Infinity
|
|
289
|
-
});
|
|
290
|
-
const buffer = new Array(requestedLines);
|
|
291
|
-
let bufferIndex = 0;
|
|
292
|
-
let totalLines = 0;
|
|
293
|
-
for await (const line of rl) {
|
|
294
|
-
buffer[bufferIndex] = line;
|
|
295
|
-
bufferIndex = (bufferIndex + 1) % requestedLines;
|
|
296
|
-
totalLines++;
|
|
297
|
-
}
|
|
298
|
-
rl.close();
|
|
299
|
-
let result;
|
|
300
|
-
if (totalLines >= requestedLines) {
|
|
301
|
-
result = [
|
|
302
|
-
...buffer.slice(bufferIndex),
|
|
303
|
-
...buffer.slice(0, bufferIndex)
|
|
304
|
-
].filter(line => line !== undefined);
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
result = buffer.slice(0, totalLines);
|
|
308
|
-
}
|
|
309
|
-
const content = includeStatusMessage
|
|
310
|
-
? `${this.generateEnhancedStatusMessage(result.length, -requestedLines, fileTotalLines, true)}\n\n${result.join('\n')}`
|
|
311
|
-
: result.join('\n');
|
|
312
|
-
return { content, mimeType, metadata: {} };
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Read from start/middle using readline
|
|
316
|
-
*/
|
|
317
|
-
async readFromStartWithReadline(filePath, offset, length, mimeType, includeStatusMessage = true, fileTotalLines, signal, encoding, start) {
|
|
318
|
-
const rl = createInterface({
|
|
319
|
-
input: createReadStream(filePath, { signal, encoding, start }),
|
|
320
|
-
crlfDelay: Infinity
|
|
321
|
-
});
|
|
322
|
-
const result = [];
|
|
323
|
-
let lineNumber = 0;
|
|
324
|
-
for await (const line of rl) {
|
|
325
|
-
if (lineNumber >= offset && result.length < length) {
|
|
326
|
-
result.push(line);
|
|
327
|
-
}
|
|
328
|
-
if (result.length >= length)
|
|
329
|
-
break;
|
|
330
|
-
lineNumber++;
|
|
331
|
-
}
|
|
332
|
-
rl.close();
|
|
333
|
-
if (includeStatusMessage) {
|
|
334
|
-
const statusMessage = this.generateEnhancedStatusMessage(result.length, offset, fileTotalLines, false);
|
|
335
|
-
const content = `${statusMessage}\n\n${result.join('\n')}`;
|
|
336
|
-
return { content, mimeType, metadata: {} };
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
const content = result.join('\n');
|
|
340
|
-
return { content, mimeType, metadata: {} };
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Read from estimated byte position for very large files
|
|
345
|
-
*/
|
|
346
|
-
async readFromEstimatedPosition(filePath, offset, length, mimeType, includeStatusMessage = true, fileTotalLines, signal) {
|
|
347
|
-
// First, do a quick scan to estimate lines per byte
|
|
348
|
-
const rl = createInterface({
|
|
349
|
-
input: createReadStream(filePath, { signal }),
|
|
350
|
-
crlfDelay: Infinity
|
|
351
|
-
});
|
|
352
|
-
let sampleLines = 0;
|
|
353
|
-
let bytesRead = 0;
|
|
354
|
-
for await (const line of rl) {
|
|
355
|
-
bytesRead += Buffer.byteLength(line, 'utf-8') + 1;
|
|
356
|
-
sampleLines++;
|
|
357
|
-
if (bytesRead >= READ_PERFORMANCE_THRESHOLDS.SAMPLE_SIZE)
|
|
358
|
-
break;
|
|
359
|
-
}
|
|
360
|
-
rl.close();
|
|
361
|
-
if (sampleLines === 0) {
|
|
362
|
-
return await this.readFromStartWithReadline(filePath, offset, length, mimeType, includeStatusMessage, fileTotalLines, signal);
|
|
363
|
-
}
|
|
364
|
-
// Estimate position
|
|
365
|
-
const avgLineLength = bytesRead / sampleLines;
|
|
366
|
-
const estimatedBytePosition = Math.floor(offset * avgLineLength);
|
|
367
|
-
const fd = await fs.open(filePath, 'r');
|
|
368
|
-
try {
|
|
369
|
-
const stats = await fd.stat();
|
|
370
|
-
const startPosition = Math.min(estimatedBytePosition, stats.size);
|
|
371
|
-
const stream = createReadStream(filePath, { start: startPosition, signal });
|
|
372
|
-
const rl2 = createInterface({
|
|
373
|
-
input: stream,
|
|
374
|
-
crlfDelay: Infinity
|
|
375
|
-
});
|
|
376
|
-
const result = [];
|
|
377
|
-
let firstLineSkipped = false;
|
|
378
|
-
for await (const line of rl2) {
|
|
379
|
-
if (!firstLineSkipped && startPosition > 0) {
|
|
380
|
-
firstLineSkipped = true;
|
|
381
|
-
continue;
|
|
382
|
-
}
|
|
383
|
-
if (result.length < length) {
|
|
384
|
-
result.push(line);
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
break;
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
rl2.close();
|
|
391
|
-
const content = includeStatusMessage
|
|
392
|
-
? `${this.generateEnhancedStatusMessage(result.length, offset, fileTotalLines, false)}\n\n${result.join('\n')}`
|
|
393
|
-
: result.join('\n');
|
|
394
|
-
return { content, mimeType, metadata: {} };
|
|
395
|
-
}
|
|
396
|
-
finally {
|
|
397
|
-
await fd.close();
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
161
|
}
|
|
401
162
|
//# sourceMappingURL=text.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/core/utils/files/text.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../src/core/utils/files/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'fs/promises';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import
|
|
3
|
+
import { resolveAgentHome } from '../config.js';
|
|
4
4
|
import { appendRotatingLog } from 'brc-shared';
|
|
5
5
|
const FUZZY_LOG_HEADERS = [
|
|
6
6
|
'timestamp',
|
|
@@ -25,7 +25,7 @@ class FuzzySearchLogger {
|
|
|
25
25
|
initialized = false;
|
|
26
26
|
constructor() {
|
|
27
27
|
// Create log file in a dedicated directory
|
|
28
|
-
const logDir = path.join(process.env
|
|
28
|
+
const logDir = path.join(resolveAgentHome(process.env), 'logs');
|
|
29
29
|
this.logPath = path.join(logDir, 'fuzzy-search.log');
|
|
30
30
|
}
|
|
31
31
|
async ensureLogFile() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzySearchLogger.js","sourceRoot":"","sources":["../../../src/core/utils/fuzzySearchLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fuzzySearchLogger.js","sourceRoot":"","sources":["../../../src/core/utils/fuzzySearchLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,7 +33,7 @@ declare class ToolHistory {
|
|
|
33
33
|
private readonly MAX_STORED_OUTPUT_BYTES;
|
|
34
34
|
private readonly MAX_HISTORY_FILE_SIZE_BYTES;
|
|
35
35
|
private readonly HISTORY_FILE_TRIM_TARGET_BYTES;
|
|
36
|
-
private readonly
|
|
36
|
+
private readonly storage;
|
|
37
37
|
private writeQueue;
|
|
38
38
|
private isWriting;
|
|
39
39
|
private writeInterval?;
|
|
@@ -42,6 +42,7 @@ declare class ToolHistory {
|
|
|
42
42
|
* Load history from disk (all instances share the same file)
|
|
43
43
|
*/
|
|
44
44
|
private loadFromDisk;
|
|
45
|
+
private loadLocked;
|
|
45
46
|
/**
|
|
46
47
|
* Trim the on-disk history file to stay under the size cap by dropping the
|
|
47
48
|
* oldest entries (lines) until the kept tail fits within the trim target.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import * as os from 'os';
|
|
1
|
+
import { resolveAgentHome } from '../config.js';
|
|
2
|
+
import { ToolHistoryStorage } from './toolHistoryStorage.js';
|
|
4
3
|
// Format timestamp in local timezone for display
|
|
5
4
|
function formatLocalTimestamp(isoTimestamp) {
|
|
6
5
|
const date = new Date(isoTimestamp);
|
|
@@ -14,6 +13,18 @@ function formatLocalTimestamp(isoTimestamp) {
|
|
|
14
13
|
hour12: false
|
|
15
14
|
});
|
|
16
15
|
}
|
|
16
|
+
function trimHistory(lines, targetBytes) {
|
|
17
|
+
const kept = [];
|
|
18
|
+
let bytes = 0;
|
|
19
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
20
|
+
const lineBytes = Buffer.byteLength(lines[i], 'utf-8') + 1;
|
|
21
|
+
if (kept.length > 0 && bytes + lineBytes > targetBytes)
|
|
22
|
+
break;
|
|
23
|
+
kept.push(lines[i]);
|
|
24
|
+
bytes += lineBytes;
|
|
25
|
+
}
|
|
26
|
+
return kept.reverse();
|
|
27
|
+
}
|
|
17
28
|
class ToolHistory {
|
|
18
29
|
history = [];
|
|
19
30
|
MAX_ENTRIES = 1000;
|
|
@@ -41,19 +52,12 @@ class ToolHistory {
|
|
|
41
52
|
// all the way to zero, so a single overflow doesn't cause every subsequent
|
|
42
53
|
// flush to re-trim.
|
|
43
54
|
HISTORY_FILE_TRIM_TARGET_BYTES = 4 * 1024 * 1024;
|
|
44
|
-
|
|
55
|
+
storage;
|
|
45
56
|
writeQueue = [];
|
|
46
57
|
isWriting = false;
|
|
47
58
|
writeInterval;
|
|
48
59
|
constructor() {
|
|
49
|
-
|
|
50
|
-
const historyDir = (process.env.BRC_HOME ?? path.join(os.homedir(), '.brc'));
|
|
51
|
-
// Ensure directory exists
|
|
52
|
-
if (!fs.existsSync(historyDir)) {
|
|
53
|
-
fs.mkdirSync(historyDir, { recursive: true });
|
|
54
|
-
}
|
|
55
|
-
// Use append-only JSONL format (JSON Lines)
|
|
56
|
-
this.historyFile = path.join(historyDir, 'tool-history.jsonl');
|
|
60
|
+
this.storage = new ToolHistoryStorage(resolveAgentHome(process.env));
|
|
57
61
|
// Load existing history on startup
|
|
58
62
|
this.loadFromDisk();
|
|
59
63
|
// Start async write processor
|
|
@@ -64,41 +68,47 @@ class ToolHistory {
|
|
|
64
68
|
*/
|
|
65
69
|
loadFromDisk() {
|
|
66
70
|
try {
|
|
67
|
-
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
// If the file is over the cap, trim it down before reading so we
|
|
71
|
-
// load a bounded amount.
|
|
72
|
-
this.trimHistoryFileIfTooLarge();
|
|
73
|
-
const content = fs.readFileSync(this.historyFile, 'utf-8');
|
|
74
|
-
const lines = content.trim().split('\n').filter(line => line.trim());
|
|
75
|
-
// Parse each line as JSON
|
|
76
|
-
const records = [];
|
|
77
|
-
for (const line of lines) {
|
|
78
|
-
try {
|
|
79
|
-
records.push(JSON.parse(line));
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
// Silently skip invalid lines
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Keep only last 1000 entries, and cap on the way IN as well as on the
|
|
86
|
-
// way out. Entries written before the cap existed are still on disk and
|
|
87
|
-
// are well under the whole-file trim threshold, so without this the cap
|
|
88
|
-
// does nothing for anyone upgrading with an existing history file — i.e.
|
|
89
|
-
// for everyone it was written for.
|
|
90
|
-
this.history = records
|
|
91
|
-
.slice(-this.MAX_ENTRIES)
|
|
92
|
-
.map(record => ({ ...record, output: this.capOutput(record.output) }));
|
|
93
|
-
// If file is getting too large, trim it
|
|
94
|
-
if (lines.length > this.MAX_ENTRIES * 2) {
|
|
95
|
-
this.trimHistoryFile();
|
|
96
|
-
}
|
|
71
|
+
this.storage.withLock(() => this.loadLocked());
|
|
97
72
|
}
|
|
98
73
|
catch (error) {
|
|
74
|
+
if (error.code === 'ELOCKED')
|
|
75
|
+
throw error;
|
|
99
76
|
// Silently fail
|
|
100
77
|
}
|
|
101
78
|
}
|
|
79
|
+
loadLocked() {
|
|
80
|
+
if (this.storage.size() === 0)
|
|
81
|
+
return;
|
|
82
|
+
// If the file is over the cap, trim it down before reading so we
|
|
83
|
+
// load a bounded amount.
|
|
84
|
+
this.trimHistoryFileIfTooLarge();
|
|
85
|
+
const content = this.storage.readText();
|
|
86
|
+
if (content === null)
|
|
87
|
+
return;
|
|
88
|
+
const lines = content.trim().split('\n').filter(line => line.trim());
|
|
89
|
+
// Parse each line as JSON
|
|
90
|
+
const records = [];
|
|
91
|
+
for (const line of lines) {
|
|
92
|
+
try {
|
|
93
|
+
records.push(JSON.parse(line));
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
// Silently skip invalid lines
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Keep only last 1000 entries, and cap on the way IN as well as on the
|
|
100
|
+
// way out. Entries written before the cap existed are still on disk and
|
|
101
|
+
// are well under the whole-file trim threshold, so without this the cap
|
|
102
|
+
// does nothing for anyone upgrading with an existing history file — i.e.
|
|
103
|
+
// for everyone it was written for.
|
|
104
|
+
this.history = records
|
|
105
|
+
.slice(-this.MAX_ENTRIES)
|
|
106
|
+
.map(record => ({ ...record, output: this.capOutput(record.output) }));
|
|
107
|
+
// If file is getting too large, trim it
|
|
108
|
+
if (lines.length > this.MAX_ENTRIES * 2) {
|
|
109
|
+
this.trimHistoryFile();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
102
112
|
/**
|
|
103
113
|
* Trim the on-disk history file to stay under the size cap by dropping the
|
|
104
114
|
* oldest entries (lines) until the kept tail fits within the trim target.
|
|
@@ -110,40 +120,18 @@ class ToolHistory {
|
|
|
110
120
|
* exceeds the trim target — there is no useful state below that.
|
|
111
121
|
*/
|
|
112
122
|
trimHistoryFileIfTooLarge() {
|
|
113
|
-
let stats;
|
|
114
123
|
try {
|
|
115
|
-
if (
|
|
124
|
+
if (this.storage.size() <= this.MAX_HISTORY_FILE_SIZE_BYTES)
|
|
116
125
|
return false;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (stats.size <= this.MAX_HISTORY_FILE_SIZE_BYTES) {
|
|
126
|
+
const content = this.storage.readText();
|
|
127
|
+
if (content === null)
|
|
120
128
|
return false;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
return false;
|
|
125
|
-
}
|
|
126
|
-
try {
|
|
127
|
-
const content = fs.readFileSync(this.historyFile, 'utf-8');
|
|
128
129
|
const lines = content.split('\n').filter(line => line.length > 0);
|
|
129
130
|
if (lines.length === 0) {
|
|
130
131
|
return false;
|
|
131
132
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// least the last line.
|
|
135
|
-
const kept = [];
|
|
136
|
-
let bytes = 0;
|
|
137
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
138
|
-
const lineBytes = Buffer.byteLength(lines[i], 'utf-8') + 1; // +1 for '\n'
|
|
139
|
-
if (kept.length > 0 && bytes + lineBytes > this.HISTORY_FILE_TRIM_TARGET_BYTES) {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
kept.push(lines[i]);
|
|
143
|
-
bytes += lineBytes;
|
|
144
|
-
}
|
|
145
|
-
kept.reverse();
|
|
146
|
-
fs.writeFileSync(this.historyFile, kept.join('\n') + '\n', 'utf-8');
|
|
133
|
+
const kept = trimHistory(lines, this.HISTORY_FILE_TRIM_TARGET_BYTES);
|
|
134
|
+
this.storage.rewriteText(kept.join('\n') + '\n');
|
|
147
135
|
return true;
|
|
148
136
|
}
|
|
149
137
|
catch (error) {
|
|
@@ -160,7 +148,7 @@ class ToolHistory {
|
|
|
160
148
|
const keepEntries = this.history.slice(-this.MAX_ENTRIES);
|
|
161
149
|
// Write them back
|
|
162
150
|
const lines = keepEntries.map(entry => JSON.stringify(entry)).join('\n') + '\n';
|
|
163
|
-
|
|
151
|
+
this.storage.rewriteText(lines);
|
|
164
152
|
}
|
|
165
153
|
catch (error) {
|
|
166
154
|
// Silently fail
|
|
@@ -188,14 +176,12 @@ class ToolHistory {
|
|
|
188
176
|
const toWrite = [...this.writeQueue];
|
|
189
177
|
this.writeQueue = [];
|
|
190
178
|
try {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const lines = toWrite.map(entry => JSON.stringify(entry)).join('\n') + '\n';
|
|
198
|
-
fs.appendFileSync(this.historyFile, lines, 'utf-8');
|
|
179
|
+
this.storage.withLock(() => {
|
|
180
|
+
// Read and compact while holding the same lock as every writer.
|
|
181
|
+
this.trimHistoryFileIfTooLarge();
|
|
182
|
+
const lines = toWrite.map(entry => JSON.stringify(entry)).join('\n') + '\n';
|
|
183
|
+
this.storage.appendText(lines);
|
|
184
|
+
});
|
|
199
185
|
}
|
|
200
186
|
catch (error) {
|
|
201
187
|
// Put back in queue on failure
|
|
@@ -288,7 +274,7 @@ class ToolHistory {
|
|
|
288
274
|
totalEntries: this.history.length,
|
|
289
275
|
oldestEntry: this.history[0]?.timestamp,
|
|
290
276
|
newestEntry: this.history[this.history.length - 1]?.timestamp,
|
|
291
|
-
historyFile: this.
|
|
277
|
+
historyFile: this.storage.file,
|
|
292
278
|
queuedWrites: this.writeQueue.length
|
|
293
279
|
};
|
|
294
280
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolHistory.js","sourceRoot":"","sources":["../../../src/core/utils/toolHistory.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"toolHistory.js","sourceRoot":"","sources":["../../../src/core/utils/toolHistory.ts"],"names":[],"mappings":"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"}
|