audrey 0.21.0 → 0.23.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.
Files changed (152) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +76 -32
  3. package/SECURITY.md +29 -0
  4. package/dist/mcp-server/config.d.ts +5 -4
  5. package/dist/mcp-server/config.d.ts.map +1 -1
  6. package/dist/mcp-server/config.js +6 -8
  7. package/dist/mcp-server/config.js.map +1 -1
  8. package/dist/mcp-server/index.d.ts +219 -23
  9. package/dist/mcp-server/index.d.ts.map +1 -1
  10. package/dist/mcp-server/index.js +681 -95
  11. package/dist/mcp-server/index.js.map +1 -1
  12. package/dist/src/adaptive.d.ts.map +1 -1
  13. package/dist/src/adaptive.js +3 -1
  14. package/dist/src/adaptive.js.map +1 -1
  15. package/dist/src/affect.d.ts +4 -1
  16. package/dist/src/affect.d.ts.map +1 -1
  17. package/dist/src/affect.js +6 -4
  18. package/dist/src/affect.js.map +1 -1
  19. package/dist/src/audrey.d.ts +54 -4
  20. package/dist/src/audrey.d.ts.map +1 -1
  21. package/dist/src/audrey.js +457 -62
  22. package/dist/src/audrey.js.map +1 -1
  23. package/dist/src/capsule.d.ts +2 -1
  24. package/dist/src/capsule.d.ts.map +1 -1
  25. package/dist/src/capsule.js +14 -4
  26. package/dist/src/capsule.js.map +1 -1
  27. package/dist/src/causal.d.ts.map +1 -1
  28. package/dist/src/causal.js +20 -2
  29. package/dist/src/causal.js.map +1 -1
  30. package/dist/src/confidence.d.ts.map +1 -1
  31. package/dist/src/confidence.js +3 -0
  32. package/dist/src/confidence.js.map +1 -1
  33. package/dist/src/consolidate.d.ts +1 -0
  34. package/dist/src/consolidate.d.ts.map +1 -1
  35. package/dist/src/consolidate.js +35 -19
  36. package/dist/src/consolidate.js.map +1 -1
  37. package/dist/src/controller.d.ts +38 -0
  38. package/dist/src/controller.d.ts.map +1 -0
  39. package/dist/src/controller.js +169 -0
  40. package/dist/src/controller.js.map +1 -0
  41. package/dist/src/db.d.ts.map +1 -1
  42. package/dist/src/db.js +12 -0
  43. package/dist/src/db.js.map +1 -1
  44. package/dist/src/decay.d.ts.map +1 -1
  45. package/dist/src/decay.js +57 -50
  46. package/dist/src/decay.js.map +1 -1
  47. package/dist/src/embedding.d.ts.map +1 -1
  48. package/dist/src/embedding.js +31 -3
  49. package/dist/src/embedding.js.map +1 -1
  50. package/dist/src/encode.d.ts +9 -2
  51. package/dist/src/encode.d.ts.map +1 -1
  52. package/dist/src/encode.js +21 -8
  53. package/dist/src/encode.js.map +1 -1
  54. package/dist/src/export.d.ts.map +1 -1
  55. package/dist/src/export.js +5 -3
  56. package/dist/src/export.js.map +1 -1
  57. package/dist/src/feedback.d.ts +29 -0
  58. package/dist/src/feedback.d.ts.map +1 -0
  59. package/dist/src/feedback.js +123 -0
  60. package/dist/src/feedback.js.map +1 -0
  61. package/dist/src/forget.d.ts.map +1 -1
  62. package/dist/src/forget.js +58 -50
  63. package/dist/src/forget.js.map +1 -1
  64. package/dist/src/fts.js +1 -1
  65. package/dist/src/fts.js.map +1 -1
  66. package/dist/src/hybrid-recall.d.ts +2 -1
  67. package/dist/src/hybrid-recall.d.ts.map +1 -1
  68. package/dist/src/hybrid-recall.js +35 -26
  69. package/dist/src/hybrid-recall.js.map +1 -1
  70. package/dist/src/impact.d.ts +47 -0
  71. package/dist/src/impact.d.ts.map +1 -0
  72. package/dist/src/impact.js +146 -0
  73. package/dist/src/impact.js.map +1 -0
  74. package/dist/src/import.d.ts +177 -1
  75. package/dist/src/import.d.ts.map +1 -1
  76. package/dist/src/import.js +206 -17
  77. package/dist/src/import.js.map +1 -1
  78. package/dist/src/index.d.ts +4 -0
  79. package/dist/src/index.d.ts.map +1 -1
  80. package/dist/src/index.js +2 -0
  81. package/dist/src/index.js.map +1 -1
  82. package/dist/src/interference.d.ts +5 -2
  83. package/dist/src/interference.d.ts.map +1 -1
  84. package/dist/src/interference.js +27 -20
  85. package/dist/src/interference.js.map +1 -1
  86. package/dist/src/llm.d.ts.map +1 -1
  87. package/dist/src/llm.js +1 -0
  88. package/dist/src/llm.js.map +1 -1
  89. package/dist/src/migrate.d.ts.map +1 -1
  90. package/dist/src/migrate.js +21 -9
  91. package/dist/src/migrate.js.map +1 -1
  92. package/dist/src/preflight.d.ts +2 -1
  93. package/dist/src/preflight.d.ts.map +1 -1
  94. package/dist/src/preflight.js +25 -5
  95. package/dist/src/preflight.js.map +1 -1
  96. package/dist/src/profile.d.ts +23 -0
  97. package/dist/src/profile.d.ts.map +1 -0
  98. package/dist/src/profile.js +51 -0
  99. package/dist/src/profile.js.map +1 -0
  100. package/dist/src/promote.d.ts.map +1 -1
  101. package/dist/src/promote.js +2 -3
  102. package/dist/src/promote.js.map +1 -1
  103. package/dist/src/prompts.d.ts.map +1 -1
  104. package/dist/src/prompts.js +76 -47
  105. package/dist/src/prompts.js.map +1 -1
  106. package/dist/src/recall.d.ts +9 -6
  107. package/dist/src/recall.d.ts.map +1 -1
  108. package/dist/src/recall.js +182 -40
  109. package/dist/src/recall.js.map +1 -1
  110. package/dist/src/redact.d.ts +7 -1
  111. package/dist/src/redact.d.ts.map +1 -1
  112. package/dist/src/redact.js +94 -11
  113. package/dist/src/redact.js.map +1 -1
  114. package/dist/src/rollback.d.ts.map +1 -1
  115. package/dist/src/rollback.js +9 -4
  116. package/dist/src/rollback.js.map +1 -1
  117. package/dist/src/routes.d.ts +1 -0
  118. package/dist/src/routes.d.ts.map +1 -1
  119. package/dist/src/routes.js +185 -6
  120. package/dist/src/routes.js.map +1 -1
  121. package/dist/src/rules-compiler.d.ts.map +1 -1
  122. package/dist/src/rules-compiler.js +36 -6
  123. package/dist/src/rules-compiler.js.map +1 -1
  124. package/dist/src/server.d.ts +2 -1
  125. package/dist/src/server.d.ts.map +1 -1
  126. package/dist/src/server.js +42 -4
  127. package/dist/src/server.js.map +1 -1
  128. package/dist/src/tool-trace.d.ts.map +1 -1
  129. package/dist/src/tool-trace.js +42 -29
  130. package/dist/src/tool-trace.js.map +1 -1
  131. package/dist/src/types.d.ts +28 -1
  132. package/dist/src/types.d.ts.map +1 -1
  133. package/dist/src/ulid.d.ts.map +1 -1
  134. package/dist/src/ulid.js +52 -2
  135. package/dist/src/ulid.js.map +1 -1
  136. package/dist/src/utils.d.ts.map +1 -1
  137. package/dist/src/utils.js +8 -1
  138. package/dist/src/utils.js.map +1 -1
  139. package/dist/src/validate.d.ts +2 -0
  140. package/dist/src/validate.d.ts.map +1 -1
  141. package/dist/src/validate.js +60 -29
  142. package/dist/src/validate.js.map +1 -1
  143. package/package.json +20 -26
  144. package/docs/assets/benchmarks/local-benchmark.svg +0 -45
  145. package/docs/assets/benchmarks/operations-benchmark.svg +0 -45
  146. package/docs/assets/benchmarks/published-memory-standards.svg +0 -50
  147. package/docs/audrey-for-dummies.md +0 -670
  148. package/docs/benchmarking.md +0 -151
  149. package/docs/future-of-llm-memory.md +0 -452
  150. package/docs/mcp-hosts.md +0 -206
  151. package/docs/ollama-local-agents.md +0 -128
  152. package/docs/production-readiness.md +0 -128
@@ -11,6 +11,42 @@ const STOPWORDS = new Set([
11
11
  'which', 'who', 'why', 'with', 'would', 'you', 'your',
12
12
  ]);
13
13
  const IDENTIFIER_TERMS = new Set(['account', 'api', 'credential', 'id', 'identifier', 'key', 'number', 'password', 'secret', 'ssn', 'token']);
14
+ function matchesTagFilters(rowTags, requiredTags) {
15
+ if (!requiredTags?.length)
16
+ return true;
17
+ return requiredTags.every(tag => rowTags.includes(tag));
18
+ }
19
+ function errorMessage(err) {
20
+ return err instanceof Error ? err.message : String(err);
21
+ }
22
+ function recordPartialFailure(options, type, stage, err) {
23
+ options.onPartialFailure?.({
24
+ type,
25
+ stage,
26
+ message: errorMessage(err),
27
+ });
28
+ }
29
+ function vectorTableForType(type) {
30
+ if (type === 'episodic')
31
+ return 'vec_episodes';
32
+ if (type === 'semantic')
33
+ return 'vec_semantics';
34
+ return 'vec_procedures';
35
+ }
36
+ function reportMissingVectorTables(db, searchTypes, options) {
37
+ for (const type of searchTypes) {
38
+ const table = vectorTableForType(type);
39
+ try {
40
+ const row = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get(table);
41
+ if (!row?.name) {
42
+ recordPartialFailure(options, type, 'recall.vector_counts', new Error(`Missing vector table ${table}`));
43
+ }
44
+ }
45
+ catch (err) {
46
+ recordPartialFailure(options, type, 'recall.vector_counts', err);
47
+ }
48
+ }
49
+ }
14
50
  function tokenize(text) {
15
51
  return String(text || '')
16
52
  .toLowerCase()
@@ -175,6 +211,7 @@ function buildEpisodicEntry(ep, confidence, score, includeProvenance, contextMat
175
211
  confidence,
176
212
  score,
177
213
  source: ep.source,
214
+ agent: ep.agent ?? 'default',
178
215
  createdAt: ep.created_at,
179
216
  };
180
217
  if (contextMatch !== undefined) {
@@ -201,6 +238,7 @@ function buildSemanticEntry(sem, confidence, score, includeProvenance) {
201
238
  confidence,
202
239
  score,
203
240
  source: 'consolidation',
241
+ agent: sem.agent ?? 'default',
204
242
  state: sem.state,
205
243
  createdAt: sem.created_at,
206
244
  };
@@ -223,6 +261,7 @@ function buildProceduralEntry(proc, confidence, score, includeProvenance) {
223
261
  confidence,
224
262
  score,
225
263
  source: 'consolidation',
264
+ agent: proc.agent ?? 'default',
226
265
  state: proc.state,
227
266
  createdAt: proc.created_at,
228
267
  };
@@ -248,15 +287,55 @@ function matchesDateFilters(createdAt, filters) {
248
287
  return false;
249
288
  return true;
250
289
  }
251
- function safeKForTable(db, table, candidateK) {
252
- const rowCount = db.prepare(`SELECT COUNT(*) AS c FROM ${table}`).get().c;
290
+ function safeKForCount(rowCount, candidateK) {
253
291
  return rowCount > 0 ? Math.min(candidateK, rowCount) : 0;
254
292
  }
255
- function knnEpisodic(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, confidenceConfig, filters = {}, includePrivate = false) {
256
- const safeK = safeKForTable(db, 'vec_episodes', candidateK);
293
+ function countVectorTable(db, table) {
294
+ try {
295
+ return db.prepare(`SELECT COUNT(*) AS c FROM ${table}`).get().c || 0;
296
+ }
297
+ catch {
298
+ return 0;
299
+ }
300
+ }
301
+ function countVectorTables(db, searchTypes) {
302
+ const selectEpisodic = searchTypes.includes('episodic')
303
+ ? '(SELECT COUNT(*) FROM vec_episodes) AS episodic'
304
+ : '0 AS episodic';
305
+ const selectSemantic = searchTypes.includes('semantic')
306
+ ? '(SELECT COUNT(*) FROM vec_semantics) AS semantic'
307
+ : '0 AS semantic';
308
+ const selectProcedural = searchTypes.includes('procedural')
309
+ ? '(SELECT COUNT(*) FROM vec_procedures) AS procedural'
310
+ : '0 AS procedural';
311
+ try {
312
+ const row = db.prepare(`
313
+ SELECT
314
+ ${selectEpisodic},
315
+ ${selectSemantic},
316
+ ${selectProcedural}
317
+ `).get();
318
+ return {
319
+ episodic: row.episodic || 0,
320
+ semantic: row.semantic || 0,
321
+ procedural: row.procedural || 0,
322
+ };
323
+ }
324
+ catch {
325
+ return {
326
+ episodic: searchTypes.includes('episodic') ? countVectorTable(db, 'vec_episodes') : 0,
327
+ semantic: searchTypes.includes('semantic') ? countVectorTable(db, 'vec_semantics') : 0,
328
+ procedural: searchTypes.includes('procedural') ? countVectorTable(db, 'vec_procedures') : 0,
329
+ };
330
+ }
331
+ }
332
+ function knnEpisodic(db, queryBuffer, candidateK, tableCount, now, minConfidence, includeProvenance, confidenceConfig, filters = {}, includePrivate = false) {
333
+ const safeK = safeKForCount(tableCount, candidateK);
257
334
  if (safeK === 0)
258
335
  return [];
259
336
  const privateClause = includePrivate ? '' : 'AND e."private" = 0';
337
+ const agentClause = filters.agent ? 'AND e.agent = ?' : '';
338
+ const params = filters.agent ? [queryBuffer, safeK, filters.agent] : [queryBuffer, safeK];
260
339
  const rows = db.prepare(`
261
340
  SELECT e.*, (1.0 - v.distance) AS similarity
262
341
  FROM vec_episodes v
@@ -265,14 +344,15 @@ function knnEpisodic(db, queryBuffer, candidateK, now, minConfidence, includePro
265
344
  AND k = ?
266
345
  AND e.superseded_by IS NULL
267
346
  ${privateClause}
268
- `).all(queryBuffer, safeK);
347
+ ${agentClause}
348
+ `).all(...params);
269
349
  const results = [];
270
350
  for (const row of rows) {
271
351
  if (!matchesDateFilters(row.created_at, filters))
272
352
  continue;
273
353
  if (filters.tags?.length) {
274
354
  const rowTags = safeJsonParse(row.tags, []);
275
- if (!filters.tags.some(t => rowTags.includes(t)))
355
+ if (!matchesTagFilters(rowTags, filters.tags))
276
356
  continue;
277
357
  }
278
358
  if (filters.sources?.length && !filters.sources.includes(row.source))
@@ -299,10 +379,12 @@ function knnEpisodic(db, queryBuffer, candidateK, now, minConfidence, includePro
299
379
  }
300
380
  return results;
301
381
  }
302
- function knnSemantic(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, includeDormant, confidenceConfig, filters = {}) {
303
- const safeK = safeKForTable(db, 'vec_semantics', candidateK);
382
+ function knnSemantic(db, queryBuffer, candidateK, tableCount, now, minConfidence, includeProvenance, includeDormant, confidenceConfig, filters = {}) {
383
+ const safeK = safeKForCount(tableCount, candidateK);
304
384
  if (safeK === 0)
305
385
  return { results: [], matchedIds: [] };
386
+ const agentClause = filters.agent ? 'AND s.agent = ?' : '';
387
+ const params = filters.agent ? [queryBuffer, safeK, filters.agent] : [queryBuffer, safeK];
306
388
  const rows = db.prepare(`
307
389
  SELECT s.*, (1.0 - v.distance) AS similarity
308
390
  FROM vec_semantics v
@@ -310,7 +392,8 @@ function knnSemantic(db, queryBuffer, candidateK, now, minConfidence, includePro
310
392
  WHERE v.embedding MATCH ?
311
393
  AND k = ?
312
394
  ${stateClause(includeDormant)}
313
- `).all(queryBuffer, safeK);
395
+ ${agentClause}
396
+ `).all(...params);
314
397
  const results = [];
315
398
  const matchedIds = [];
316
399
  for (const row of rows) {
@@ -325,10 +408,12 @@ function knnSemantic(db, queryBuffer, candidateK, now, minConfidence, includePro
325
408
  }
326
409
  return { results, matchedIds };
327
410
  }
328
- function knnProcedural(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, includeDormant, confidenceConfig, filters = {}) {
329
- const safeK = safeKForTable(db, 'vec_procedures', candidateK);
411
+ function knnProcedural(db, queryBuffer, candidateK, tableCount, now, minConfidence, includeProvenance, includeDormant, confidenceConfig, filters = {}) {
412
+ const safeK = safeKForCount(tableCount, candidateK);
330
413
  if (safeK === 0)
331
414
  return { results: [], matchedIds: [] };
415
+ const agentClause = filters.agent ? 'AND p.agent = ?' : '';
416
+ const params = filters.agent ? [queryBuffer, safeK, filters.agent] : [queryBuffer, safeK];
332
417
  const rows = db.prepare(`
333
418
  SELECT p.*, (1.0 - v.distance) AS similarity
334
419
  FROM vec_procedures v
@@ -336,7 +421,8 @@ function knnProcedural(db, queryBuffer, candidateK, now, minConfidence, includeP
336
421
  WHERE v.embedding MATCH ?
337
422
  AND k = ?
338
423
  ${stateClause(includeDormant)}
339
- `).all(queryBuffer, safeK);
424
+ ${agentClause}
425
+ `).all(...params);
340
426
  const results = [];
341
427
  const matchedIds = [];
342
428
  for (const row of rows) {
@@ -353,80 +439,136 @@ function knnProcedural(db, queryBuffer, candidateK, now, minConfidence, includeP
353
439
  }
354
440
  export async function* recallStream(db, embeddingProvider, query, options = {}) {
355
441
  const { minConfidence = 0, types, limit = 10, includeProvenance = false, includeDormant = false, confidenceConfig, tags, sources, after, before, includePrivate = false, retrieval = 'hybrid', } = options;
442
+ const profile = options.profile;
356
443
  const searchTypes = types || ['episodic', 'semantic', 'procedural'];
357
444
  const now = new Date();
358
445
  const hasFilters = tags?.length || sources?.length || after || before;
359
- const candidateK = hasFilters ? limit * 5 : limit * 3;
360
- const filters = { tags, sources, after, before };
446
+ const agentFilter = options.scope === 'agent' ? options.agent : undefined;
447
+ const filters = { tags, sources, after, before, agent: agentFilter };
361
448
  const allResults = [];
362
449
  // Vector pass — skipped entirely in 'keyword' mode. Still runs in 'hybrid'
363
450
  // (default) and 'vector' modes so the underlying similarity + confidence
364
451
  // scoring fires as before.
365
452
  if (retrieval !== 'keyword') {
366
- const queryVector = await embeddingProvider.embed(query);
367
- const queryBuffer = embeddingProvider.vectorToBuffer(queryVector);
453
+ reportMissingVectorTables(db, searchTypes, options);
454
+ const queryVector = profile
455
+ ? await profile.measure('recall.embedding', () => embeddingProvider.embed(query))
456
+ : await embeddingProvider.embed(query);
457
+ const queryBuffer = profile
458
+ ? profile.measureSync('recall.vector_to_buffer', () => embeddingProvider.vectorToBuffer(queryVector))
459
+ : embeddingProvider.vectorToBuffer(queryVector);
460
+ const vectorCounts = profile
461
+ ? profile.measureSync('recall.vector_counts', () => countVectorTables(db, searchTypes))
462
+ : countVectorTables(db, searchTypes);
463
+ const maxVectorCount = Math.max(vectorCounts.episodic, vectorCounts.semantic, vectorCounts.procedural);
464
+ const candidateK = agentFilter
465
+ ? maxVectorCount
466
+ : hasFilters ? limit * 5 : limit * 3;
368
467
  if (searchTypes.includes('episodic')) {
369
468
  try {
370
- const episodic = knnEpisodic(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, confidenceConfig || {}, filters, includePrivate);
469
+ const episodic = profile
470
+ ? profile.measureSync('recall.episodic_knn', () => knnEpisodic(db, queryBuffer, candidateK, vectorCounts.episodic, now, minConfidence, includeProvenance, confidenceConfig || {}, filters, includePrivate))
471
+ : knnEpisodic(db, queryBuffer, candidateK, vectorCounts.episodic, now, minConfidence, includeProvenance, confidenceConfig || {}, filters, includePrivate);
371
472
  allResults.push(...episodic);
372
473
  }
373
- catch {
374
- // A broken episodic index should not block semantic/procedural recall.
474
+ catch (err) {
475
+ recordPartialFailure(options, 'episodic', 'recall.episodic_knn', err);
375
476
  }
376
477
  }
377
478
  if (searchTypes.includes('semantic')) {
378
479
  try {
379
- const { results: semResults, matchedIds: semIds } = knnSemantic(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters);
480
+ const { results: semResults, matchedIds: semIds } = profile
481
+ ? profile.measureSync('recall.semantic_knn', () => knnSemantic(db, queryBuffer, candidateK, vectorCounts.semantic, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters))
482
+ : knnSemantic(db, queryBuffer, candidateK, vectorCounts.semantic, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters);
380
483
  allResults.push(...semResults);
381
484
  if (semIds.length > 0) {
382
485
  const nowISO = now.toISOString();
383
486
  const placeholders = semIds.map(() => '?').join(',');
384
- db.prepare(`UPDATE semantics SET retrieval_count = retrieval_count + 1, last_reinforced_at = ? WHERE id IN (${placeholders})`).run(nowISO, ...semIds);
487
+ const updateSemantic = () => {
488
+ db.prepare(`UPDATE semantics SET retrieval_count = retrieval_count + 1, last_reinforced_at = ? WHERE id IN (${placeholders})`).run(nowISO, ...semIds);
489
+ };
490
+ if (profile)
491
+ profile.measureSync('recall.semantic_reinforce', updateSemantic);
492
+ else
493
+ updateSemantic();
385
494
  }
386
495
  }
387
- catch {
388
- // A broken semantic index should not block other memory types.
496
+ catch (err) {
497
+ recordPartialFailure(options, 'semantic', 'recall.semantic_knn', err);
389
498
  }
390
499
  }
391
500
  if (searchTypes.includes('procedural')) {
392
501
  try {
393
- const { results: procResults, matchedIds: procIds } = knnProcedural(db, queryBuffer, candidateK, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters);
502
+ const { results: procResults, matchedIds: procIds } = profile
503
+ ? profile.measureSync('recall.procedural_knn', () => knnProcedural(db, queryBuffer, candidateK, vectorCounts.procedural, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters))
504
+ : knnProcedural(db, queryBuffer, candidateK, vectorCounts.procedural, now, minConfidence, includeProvenance, includeDormant, confidenceConfig || {}, filters);
394
505
  allResults.push(...procResults);
395
506
  if (procIds.length > 0) {
396
507
  const nowISO = now.toISOString();
397
508
  const placeholders = procIds.map(() => '?').join(',');
398
- db.prepare(`UPDATE procedures SET retrieval_count = retrieval_count + 1, last_reinforced_at = ? WHERE id IN (${placeholders})`).run(nowISO, ...procIds);
509
+ const updateProcedural = () => {
510
+ db.prepare(`UPDATE procedures SET retrieval_count = retrieval_count + 1, last_reinforced_at = ? WHERE id IN (${placeholders})`).run(nowISO, ...procIds);
511
+ };
512
+ if (profile)
513
+ profile.measureSync('recall.procedural_reinforce', updateProcedural);
514
+ else
515
+ updateProcedural();
399
516
  }
400
517
  }
401
- catch {
402
- // A broken procedural index should not block other memory types.
518
+ catch (err) {
519
+ recordPartialFailure(options, 'procedural', 'recall.procedural_knn', err);
403
520
  }
404
521
  }
405
522
  }
406
523
  let resultsToGuard = allResults;
407
524
  if (retrieval !== 'vector') {
408
- const ftsIds = ftsIdsByType(db, query, searchTypes, candidateK);
409
- const fused = fuseResults(db, {
410
- vectorResults: allResults,
411
- ftsIds,
412
- mode: retrieval,
413
- includePrivate,
414
- includeDormant,
415
- minConfidence,
416
- filters,
417
- });
418
- resultsToGuard = fused;
525
+ const candidateK = agentFilter ? 10_000 : hasFilters ? limit * 5 : limit * 3;
526
+ try {
527
+ const ftsIds = profile
528
+ ? profile.measureSync('recall.fts_lookup', () => ftsIdsByType(db, query, searchTypes, candidateK, agentFilter))
529
+ : ftsIdsByType(db, query, searchTypes, candidateK, agentFilter);
530
+ const fuse = () => fuseResults(db, {
531
+ vectorResults: allResults,
532
+ ftsIds,
533
+ mode: retrieval,
534
+ includePrivate,
535
+ includeDormant,
536
+ minConfidence,
537
+ filters,
538
+ agentFilter,
539
+ });
540
+ const fused = profile ? profile.measureSync('recall.fuse_results', fuse) : fuse();
541
+ resultsToGuard = fused;
542
+ }
543
+ catch (err) {
544
+ recordPartialFailure(options, 'fts', 'recall.fts_lookup', err);
545
+ if (retrieval === 'keyword')
546
+ resultsToGuard = [];
547
+ }
419
548
  }
420
- const top = applyResultGuards(query, resultsToGuard, limit);
549
+ const top = profile
550
+ ? profile.measureSync('recall.result_guards', () => applyResultGuards(query, resultsToGuard, limit))
551
+ : applyResultGuards(query, resultsToGuard, limit);
421
552
  for (const entry of top) {
422
553
  yield entry;
423
554
  }
424
555
  }
425
556
  export async function recall(db, embeddingProvider, query, options = {}) {
426
557
  const results = [];
427
- for await (const entry of recallStream(db, embeddingProvider, query, options)) {
558
+ const errors = [];
559
+ for await (const entry of recallStream(db, embeddingProvider, query, {
560
+ ...options,
561
+ onPartialFailure: error => {
562
+ errors.push(error);
563
+ options.onPartialFailure?.(error);
564
+ },
565
+ })) {
428
566
  results.push(entry);
429
567
  }
568
+ if (errors.length > 0) {
569
+ results.partialFailure = true;
570
+ results.errors = errors;
571
+ }
430
572
  return results;
431
573
  }
432
574
  //# sourceMappingURL=recall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/recall.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACxB,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IACnG,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IACnG,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACnG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;CACtD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAyB9I,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SACtB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACrD,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,6CAA6C,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpF,MAAM,kBAAkB,GAAG,4GAA4G,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzJ,OAAO,YAAY,IAAI,kBAAkB,CAAC;AAC5C,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAmB;IACvD,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAExB,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACxE,KAAK,IAAI,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,QAAgB;IACtD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc;IAChD,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAsB,EAAE,SAAuB;IAC9E,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,mBAAmB,GAAG,oBAAoB;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,mBAAmB,GAAG,oBAAoB,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,OAAuB,EAAE,KAAa;IAC9E,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,OAAO;SACrB,GAAG,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;IACxD,CAAC,CAAC;SACD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;SACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,yBAAyB,CAAC,EAAyB,EAAE,GAAS,EAAE,mBAA8C,EAAE;IACvH,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACnE,IAAI,UAAU,GAAG,iBAAiB,CAAC;QACjC,UAAU,EAAE,EAAE,CAAC,MAAM;QACrB,eAAe,EAAE,CAAC;QAClB,kBAAkB,EAAE,CAAC;QACrB,OAAO;QACP,YAAY,EAAE,SAAS,CAAC,QAAQ,IAAI,kBAAkB,CAAC,QAAQ;QAC/D,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,OAAO;QAC3B,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,uBAAuB,EAAE,gBAAgB,CAAC,iBAAiB;KAC5D,CAAC,CAAC;IACH,UAAU,IAAI,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,yBAAyB,CAAC,GAA2B,EAAE,GAAS,EAAE,mBAA8C,EAAE;IACzH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,kBAAkB,GAAG,GAAG,CAAC,kBAAkB;QAC/C,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACnE,IAAI,UAAU,GAAG,iBAAiB,CAAC;QACjC,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,GAAG,CAAC,gBAAgB,IAAI,CAAC;QAC1C,kBAAkB,EAAE,GAAG,CAAC,mBAAmB,IAAI,CAAC;QAChD,OAAO;QACP,YAAY,EAAE,SAAS,CAAC,QAAQ,IAAI,kBAAkB,CAAC,QAAQ;QAC/D,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC;QACxC,kBAAkB;QAClB,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,uBAAuB,EAAE,gBAAgB,CAAC,iBAAiB;KAC5D,CAAC,CAAC;IACH,UAAU,IAAI,oBAAoB,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IACrG,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,2BAA2B,CAAC,IAA8B,EAAE,GAAS,EAAE,mBAA8C,EAAE;IAC9H,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB;QAChD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACnE,IAAI,UAAU,GAAG,iBAAiB,CAAC;QACjC,UAAU,EAAE,aAAa;QACzB,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;QACxC,kBAAkB,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;QAC3C,OAAO;QACP,YAAY,EAAE,SAAS,CAAC,UAAU,IAAI,kBAAkB,CAAC,UAAU;QACnE,cAAc,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC;QACzC,kBAAkB;QAClB,OAAO,EAAE,gBAAgB,CAAC,OAAO;QACjC,uBAAuB,EAAE,gBAAgB,CAAC,iBAAiB;KAC5D,CAAC,CAAC;IACH,UAAU,IAAI,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IACtG,UAAU,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAyB,EACzB,UAAkB,EAClB,KAAa,EACb,iBAA0B,EAC1B,YAAqB,EACrB,cAAuB;IAEvB,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,IAAI,EAAE,UAAU;QAChB,UAAU;QACV,KAAK;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,SAAS,EAAE,EAAE,CAAC,UAAU;KACzB,CAAC;IACF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IACpC,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACxC,CAAC;IACD,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,GAAG;YACjB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,iBAAiB,EAAE,EAAE,CAAC,kBAAkB;YACxC,SAAS,EAAE,EAAE,CAAC,UAAU;YACxB,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI;SAClC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,GAA2B,EAC3B,UAAkB,EAClB,KAAa,EACb,iBAA0B;IAE1B,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,UAAU;QAChB,UAAU;QACV,KAAK;QACL,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,GAAG;YACjB,kBAAkB,EAAE,aAAa,CAAW,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACzE,aAAa,EAAE,GAAG,CAAC,cAAc,IAAI,CAAC;YACtC,eAAe,EAAE,GAAG,CAAC,gBAAgB,IAAI,CAAC;YAC1C,kBAAkB,EAAE,GAAG,CAAC,mBAAmB,IAAI,CAAC;YAChD,uBAAuB,EAAE,GAAG,CAAC,wBAAwB,IAAI,IAAI;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAA8B,EAC9B,UAAkB,EAClB,KAAa,EACb,iBAA0B;IAE1B,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,YAAY;QAClB,UAAU;QACV,KAAK;QACL,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,UAAU;KAC3B,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,KAAK,CAAC,UAAU,GAAG;YACjB,kBAAkB,EAAE,aAAa,CAAW,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC1E,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;YACrC,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC;YACrC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;SACnD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,cAAuB;IAC1C,OAAO,cAAc;QACnB,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,2DAA2D,CAAC;AAClE,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,OAAsB;IACnE,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB,EAAE,KAAa,EAAE,UAAkB;IAC7E,MAAM,QAAQ,GAAI,EAAE,CAAC,OAAO,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC,GAAG,EAAe,CAAC,CAAC,CAAC;IACxF,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,WAAW,CAClB,EAAqB,EACrB,WAAmB,EACnB,UAAkB,EAClB,GAAS,EACT,aAAqB,EACrB,iBAA0B,EAC1B,gBAA2C,EAC3C,UAAyB,EAAE,EAC3B,iBAA0B,KAAK;IAE/B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAClE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;QAOlB,aAAa;GAClB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAA4B,CAAC;IAEtD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;YAAE,SAAS;QAC3D,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,aAAa,CAAW,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;QAC7D,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAC/E,IAAI,UAAU,GAAG,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAEvE,IAAI,QAA4B,CAAC;QACjC,IAAI,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,aAAa,CAAyB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3E,QAAQ,GAAG,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;YAC7E,UAAU,IAAI,eAAe,CAAC,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC9G,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,SAA6B,CAAC;QAClC,IAAI,gBAAgB,EAAE,aAAa,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,aAAa,CAAyC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7F,SAAS,GAAG,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC7E,UAAU,IAAI,sBAAsB,CAAC,cAAc,EAAE,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;YACpH,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,UAAU,GAAG,aAAa;YAAE,SAAS;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAClB,EAAqB,EACrB,WAAmB,EACnB,UAAkB,EAClB,GAAS,EACT,aAAqB,EACrB,iBAA0B,EAC1B,cAAuB,EACvB,gBAA2C,EAC3C,UAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;QAMlB,WAAW,CAAC,cAAc,CAAC;GAChC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAA6B,CAAC;IAEvD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;YAAE,SAAS;QAC3D,MAAM,UAAU,GAAG,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACzE,IAAI,UAAU,GAAG,aAAa;YAAE,SAAS;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,aAAa,CACpB,EAAqB,EACrB,WAAmB,EACnB,UAAkB,EAClB,GAAS,EACT,aAAqB,EACrB,iBAA0B,EAC1B,cAAuB,EACvB,gBAA2C,EAC3C,UAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;QAMlB,WAAW,CAAC,cAAc,CAAC;GAChC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAA+B,CAAC;IAEzD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC;YAAE,SAAS;QAC3D,MAAM,UAAU,GAAG,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC3E,IAAI,UAAU,GAAG,aAAa;YAAE,SAAS;QACzC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,EAAqB,EACrB,iBAAoC,EACpC,KAAa,EACb,UAAmE,EAAE;IAErE,MAAM,EACJ,aAAa,GAAG,CAAC,EACjB,KAAK,EACL,KAAK,GAAG,EAAE,EACV,iBAAiB,GAAG,KAAK,EACzB,cAAc,GAAG,KAAK,EACtB,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,MAAM,EACN,cAAc,GAAG,KAAK,EACtB,SAAS,GAAG,QAAQ,GACrB,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAiB,KAAK,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,MAAM,CAAC;IACtE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhE,MAAM,UAAU,GAAmB,EAAE,CAAC;IAEtC,2EAA2E;IAC3E,yEAAyE;IACzE,2BAA2B;IAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,iBAAiB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAElE,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;gBAClJ,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;YACzE,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAC/C,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACnI,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAE/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;oBACjC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrD,EAAE,CAAC,OAAO,CACR,mGAAmG,YAAY,GAAG,CACnH,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,GACjD,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACrI,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAEhC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;oBACjC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACtD,EAAE,CAAC,OAAO,CACR,oGAAoG,YAAY,GAAG,CACpH,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,GAAG,UAAU,CAAC;IAEhC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE;YAC5B,aAAa,EAAE,UAAU;YACzB,MAAM;YACN,IAAI,EAAE,SAAS;YACf,cAAc;YACd,cAAc;YACd,aAAa;YACb,OAAO;SACR,CAAC,CAAC;QACH,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,EAAqB,EACrB,iBAAoC,EACpC,KAAa,EACb,UAAmE,EAAE;IAErE,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../src/recall.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * Rules are intentionally conservative: false positives are far cheaper than
8
8
  * leaking a real credential into long-lived memory.
9
9
  */
10
- export type RedactionClass = 'aws_access_key' | 'openai_api_key' | 'anthropic_api_key' | 'github_token' | 'stripe_live_key' | 'stripe_test_key' | 'google_api_key' | 'slack_token' | 'generic_bearer' | 'private_key_block' | 'jwt' | 'url_credentials' | 'password_assignment' | 'credit_card_number' | 'cvv' | 'us_ssn' | 'signed_url_signature' | 'session_cookie';
10
+ export type RedactionClass = 'aws_access_key' | 'openai_api_key' | 'anthropic_api_key' | 'github_token' | 'stripe_live_key' | 'stripe_test_key' | 'google_api_key' | 'slack_token' | 'generic_bearer' | 'basic_auth' | 'private_key_block' | 'jwt' | 'url_credentials' | 'password_assignment' | 'credit_card_number' | 'cvv' | 'us_ssn' | 'signed_url_signature' | 'session_cookie' | 'high_entropy_secret';
11
11
  export interface RedactionHit {
12
12
  class: RedactionClass;
13
13
  count: number;
@@ -24,4 +24,10 @@ export declare function redactJson(value: unknown): {
24
24
  state: 'clean' | 'redacted';
25
25
  };
26
26
  export declare function summarizeRedactions(hits: RedactionHit[]): string;
27
+ /**
28
+ * Truncate already-redacted text without cutting redaction markers in half.
29
+ * If a marker would be omitted by the prefix budget, preserve the marker class
30
+ * near the truncation suffix so logs/memories still prove what was removed.
31
+ */
32
+ export declare function truncateRedactedText(text: string, maxChars: number, redactions?: RedactionHit[]): string;
27
33
  //# sourceMappingURL=redact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,mBAAmB,GACnB,KAAK,GACL,iBAAiB,GACjB,qBAAqB,GACrB,oBAAoB,GACpB,KAAK,GACL,QAAQ,GACR,sBAAsB,GACtB,gBAAgB,CAAC;AAQrB,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;CAC7B;AA8ID,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA4BrD;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAA;CAAE,CA0CtH;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAGhE"}
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,cAAc,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,YAAY,GACZ,mBAAmB,GACnB,KAAK,GACL,iBAAiB,GACjB,qBAAqB,GACrB,oBAAoB,GACpB,KAAK,GACL,QAAQ,GACR,sBAAsB,GACtB,gBAAgB,GAChB,qBAAqB,CAAC;AAQ1B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;CAC7B;AA2LD,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CA4BrD;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAA;CAAE,CAkDtH;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,CAGhE;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,YAAY,EAAO,GAC9B,MAAM,CA4BR"}
@@ -9,7 +9,7 @@
9
9
  */
10
10
  function tokenPlaceholder(className, match) {
11
11
  const tail = match.slice(-4).replace(/[^A-Za-z0-9]/g, '');
12
- const suffix = tail.length === 4 ? `…${tail}` : '';
12
+ const suffix = tail.length === 4 ? `:${tail}` : '';
13
13
  return `[REDACTED:${className}${suffix}]`;
14
14
  }
15
15
  const RULES = [
@@ -78,6 +78,11 @@ const RULES = [
78
78
  pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{16,}\b/g,
79
79
  replacement: () => 'Bearer [REDACTED:generic_bearer]',
80
80
  },
81
+ {
82
+ class: 'basic_auth',
83
+ pattern: /\bBasic\s+[A-Za-z0-9+/=]{12,}\b/g,
84
+ replacement: () => 'Basic [REDACTED:basic_auth]',
85
+ },
81
86
  {
82
87
  class: 'credit_card_number',
83
88
  pattern: /\b(?:\d[ -]?){13,19}\b/g,
@@ -119,9 +124,8 @@ const RULES = [
119
124
  },
120
125
  },
121
126
  {
122
- // Keep this last: it is the broadest of the credential classes and can
123
- // otherwise shadow more specific token patterns (google_api_key, stripe,
124
- // github, openai, etc.) when a caller writes `api_key: <token>`.
127
+ // Keep this after named credential formats so a caller writing
128
+ // `api_key: <token>` gets a key-assignment redaction, not a generic one.
125
129
  class: 'password_assignment',
126
130
  pattern: /(?:\b|_)(?:password|passwd|pwd|secret|api[_-]?key|auth[_-]?token|bearer[_-]?token)\s*[:=]\s*["']?([^\s"'&]{4,})["']?/gi,
127
131
  replacement: (match) => {
@@ -130,6 +134,11 @@ const RULES = [
130
134
  return `${prefix}[REDACTED:password_assignment]`;
131
135
  },
132
136
  },
137
+ {
138
+ class: 'high_entropy_secret',
139
+ pattern: /(?<![A-Za-z0-9+/=_-])[A-Za-z0-9+/=_-]{32,}(?![A-Za-z0-9+/=_-])/g,
140
+ replacement: (match) => (looksLikeHighEntropySecret(match) ? tokenPlaceholder('high_entropy_secret', match) : match),
141
+ },
133
142
  ];
134
143
  function isLikelyCard(digits) {
135
144
  let sum = 0;
@@ -149,6 +158,38 @@ function isLikelyCard(digits) {
149
158
  }
150
159
  return sum % 10 === 0;
151
160
  }
161
+ function shannonEntropy(value) {
162
+ const counts = new Map();
163
+ for (const ch of value) {
164
+ counts.set(ch, (counts.get(ch) ?? 0) + 1);
165
+ }
166
+ let entropy = 0;
167
+ for (const count of counts.values()) {
168
+ const p = count / value.length;
169
+ entropy -= p * Math.log2(p);
170
+ }
171
+ return entropy;
172
+ }
173
+ function looksLikeHighEntropySecret(value) {
174
+ if (value.length < 32)
175
+ return false;
176
+ const classes = [
177
+ /[a-z]/.test(value),
178
+ /[A-Z]/.test(value),
179
+ /\d/.test(value),
180
+ /[+/_=-]/.test(value),
181
+ ].filter(Boolean).length;
182
+ if (classes < 2)
183
+ return false;
184
+ const entropy = shannonEntropy(value);
185
+ if (/^[a-f0-9]+$/i.test(value)) {
186
+ // Git SHA-1 (40), git tree/blob hashes, SHA-256 hex (64) are not secrets on their
187
+ // own. Only treat hex strings as secrets if they're long enough that they exceed
188
+ // common public-hash sizes (>=80 hex chars) AND have hash-grade entropy.
189
+ return value.length >= 80 && entropy >= 3.3;
190
+ }
191
+ return entropy >= 4.0;
192
+ }
152
193
  export function redact(input) {
153
194
  if (!input) {
154
195
  return { text: '', redactions: [], state: 'clean' };
@@ -180,7 +221,12 @@ function isSensitiveKey(key) {
180
221
  }
181
222
  export function redactJson(value) {
182
223
  const counts = new Map();
183
- function walk(node, parentKey) {
224
+ function addHits(hits) {
225
+ for (const hit of hits) {
226
+ counts.set(hit.class, (counts.get(hit.class) ?? 0) + hit.count);
227
+ }
228
+ }
229
+ function walk(node, parentKey, sensitiveAncestor = false) {
184
230
  if (node == null)
185
231
  return node;
186
232
  if (typeof node === 'string') {
@@ -189,24 +235,27 @@ export function redactJson(value) {
189
235
  // generic password_assignment class.
190
236
  const r = redact(node);
191
237
  if (r.redactions.length > 0) {
192
- for (const hit of r.redactions) {
193
- counts.set(hit.class, (counts.get(hit.class) ?? 0) + hit.count);
194
- }
238
+ addHits(r.redactions);
195
239
  return r.text;
196
240
  }
197
- if (parentKey && isSensitiveKey(parentKey) && node.length > 0) {
241
+ if ((sensitiveAncestor || (parentKey && isSensitiveKey(parentKey))) && node.length > 0) {
198
242
  counts.set('password_assignment', (counts.get('password_assignment') ?? 0) + 1);
199
243
  return '[REDACTED:password_assignment]';
200
244
  }
201
245
  return node;
202
246
  }
203
247
  if (Array.isArray(node)) {
204
- return node.map(item => walk(item, parentKey));
248
+ return node.map(item => walk(item, parentKey, sensitiveAncestor));
205
249
  }
206
250
  if (typeof node === 'object') {
207
251
  const out = {};
208
252
  for (const [key, val] of Object.entries(node)) {
209
- out[key] = walk(val, key);
253
+ const keyRedaction = redact(key);
254
+ if (keyRedaction.redactions.length > 0)
255
+ addHits(keyRedaction.redactions);
256
+ const redactedKey = keyRedaction.text;
257
+ const keyIsSensitive = isSensitiveKey(key) || keyRedaction.redactions.length > 0;
258
+ out[redactedKey] = walk(val, key, sensitiveAncestor || keyIsSensitive);
210
259
  }
211
260
  return out;
212
261
  }
@@ -225,4 +274,38 @@ export function summarizeRedactions(hits) {
225
274
  return 'clean';
226
275
  return hits.map(h => `${h.class}:${h.count}`).join(',');
227
276
  }
277
+ function markerForHit(text, hit) {
278
+ const pattern = new RegExp(`\\[REDACTED:${hit.class}(?::[^\\]]+)?\\]`);
279
+ return text.match(pattern)?.[0] ?? `[REDACTED:${hit.class}]`;
280
+ }
281
+ /**
282
+ * Truncate already-redacted text without cutting redaction markers in half.
283
+ * If a marker would be omitted by the prefix budget, preserve the marker class
284
+ * near the truncation suffix so logs/memories still prove what was removed.
285
+ */
286
+ export function truncateRedactedText(text, maxChars, redactions = []) {
287
+ if (text.length <= maxChars)
288
+ return text;
289
+ const suffix = '...[truncated]';
290
+ const initialBudget = Math.max(0, maxChars - suffix.length);
291
+ let prefix = text.slice(0, initialBudget).trimEnd();
292
+ const missingMarkers = [...new Set(redactions
293
+ .map(hit => markerForHit(text, hit))
294
+ .filter(marker => text.includes(marker) && !prefix.includes(marker)))];
295
+ if (missingMarkers.length > 0) {
296
+ const markerSuffix = ` ${missingMarkers.join(' ')}`;
297
+ if (markerSuffix.length + suffix.length >= maxChars) {
298
+ return `${markerSuffix.trim()}${suffix}`.slice(0, maxChars);
299
+ }
300
+ const budget = maxChars - suffix.length - markerSuffix.length;
301
+ prefix = text
302
+ .slice(0, budget)
303
+ .replace(/\s*(?:Bearer\s*)?\[REDACTED:[^\]]*$/i, '')
304
+ .replace(/\s*Bearer$/i, '')
305
+ .trimEnd();
306
+ return `${prefix}${markerSuffix}${suffix}`;
307
+ }
308
+ prefix = prefix.replace(/\s*(?:Bearer\s*)?\[REDACTED:[^\]]*$/i, '').trimEnd();
309
+ return `${prefix}${suffix}`;
310
+ }
228
311
  //# sourceMappingURL=redact.js.map