agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.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.
Files changed (317) hide show
  1. package/dist/agentdb.min.js +4 -4
  2. package/dist/simulation/cli.js +0 -0
  3. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  4. package/dist/src/cli/agentdb-cli.js +78 -0
  5. package/dist/src/cli/agentdb-cli.js.map +1 -1
  6. package/dist/src/cli/commands/init.js +3 -3
  7. package/dist/src/cli/commands/init.js.map +1 -1
  8. package/package.json +3 -3
  9. package/src/cli/agentdb-cli.ts +78 -0
  10. package/src/cli/commands/init.ts +3 -3
  11. package/dist/agentdb-advanced.js +0 -2110
  12. package/dist/agentdb-advanced.min.js +0 -1
  13. package/dist/backends/GraphBackend.d.ts +0 -196
  14. package/dist/backends/GraphBackend.d.ts.map +0 -1
  15. package/dist/backends/GraphBackend.js +0 -33
  16. package/dist/backends/GraphBackend.js.map +0 -1
  17. package/dist/backends/LearningBackend.d.ts +0 -148
  18. package/dist/backends/LearningBackend.d.ts.map +0 -1
  19. package/dist/backends/LearningBackend.js +0 -27
  20. package/dist/backends/LearningBackend.js.map +0 -1
  21. package/dist/backends/VectorBackend.d.ts +0 -119
  22. package/dist/backends/VectorBackend.d.ts.map +0 -1
  23. package/dist/backends/VectorBackend.js +0 -14
  24. package/dist/backends/VectorBackend.js.map +0 -1
  25. package/dist/backends/detector.d.ts +0 -81
  26. package/dist/backends/detector.d.ts.map +0 -1
  27. package/dist/backends/detector.js +0 -192
  28. package/dist/backends/detector.js.map +0 -1
  29. package/dist/backends/factory.d.ts +0 -50
  30. package/dist/backends/factory.d.ts.map +0 -1
  31. package/dist/backends/factory.js +0 -161
  32. package/dist/backends/factory.js.map +0 -1
  33. package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
  34. package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
  35. package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
  36. package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
  37. package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
  38. package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
  39. package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
  40. package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
  41. package/dist/backends/hnswlib/index.d.ts +0 -7
  42. package/dist/backends/hnswlib/index.d.ts.map +0 -1
  43. package/dist/backends/hnswlib/index.js +0 -7
  44. package/dist/backends/hnswlib/index.js.map +0 -1
  45. package/dist/backends/index.d.ts +0 -14
  46. package/dist/backends/index.d.ts.map +0 -1
  47. package/dist/backends/index.js +0 -13
  48. package/dist/backends/index.js.map +0 -1
  49. package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
  50. package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
  51. package/dist/backends/ruvector/RuVectorBackend.js +0 -198
  52. package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
  53. package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
  54. package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
  55. package/dist/backends/ruvector/RuVectorLearning.js +0 -177
  56. package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
  57. package/dist/backends/ruvector/index.d.ts +0 -9
  58. package/dist/backends/ruvector/index.d.ts.map +0 -1
  59. package/dist/backends/ruvector/index.js +0 -8
  60. package/dist/backends/ruvector/index.js.map +0 -1
  61. package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
  62. package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
  63. package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
  64. package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
  65. package/dist/browser/AdvancedFeatures.d.ts +0 -144
  66. package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
  67. package/dist/browser/AdvancedFeatures.js +0 -430
  68. package/dist/browser/AdvancedFeatures.js.map +0 -1
  69. package/dist/browser/HNSWIndex.d.ts +0 -117
  70. package/dist/browser/HNSWIndex.d.ts.map +0 -1
  71. package/dist/browser/HNSWIndex.js +0 -402
  72. package/dist/browser/HNSWIndex.js.map +0 -1
  73. package/dist/browser/ProductQuantization.d.ts +0 -107
  74. package/dist/browser/ProductQuantization.d.ts.map +0 -1
  75. package/dist/browser/ProductQuantization.js +0 -337
  76. package/dist/browser/ProductQuantization.js.map +0 -1
  77. package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
  78. package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
  79. package/dist/browser/browser/AdvancedFeatures.js +0 -427
  80. package/dist/browser/browser/HNSWIndex.d.ts +0 -117
  81. package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
  82. package/dist/browser/browser/HNSWIndex.js +0 -402
  83. package/dist/browser/browser/ProductQuantization.d.ts +0 -107
  84. package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
  85. package/dist/browser/browser/ProductQuantization.js +0 -348
  86. package/dist/browser/browser/index.d.ts +0 -223
  87. package/dist/browser/browser/index.d.ts.map +0 -1
  88. package/dist/browser/browser/index.js +0 -233
  89. package/dist/browser/index.d.ts +0 -223
  90. package/dist/browser/index.d.ts.map +0 -1
  91. package/dist/browser/index.js +0 -225
  92. package/dist/browser/index.js.map +0 -1
  93. package/dist/cli/agentdb-cli.d.ts +0 -154
  94. package/dist/cli/agentdb-cli.d.ts.map +0 -1
  95. package/dist/cli/agentdb-cli.js +0 -2273
  96. package/dist/cli/agentdb-cli.js.map +0 -1
  97. package/dist/cli/agentdb.db +0 -0
  98. package/dist/cli/commands/init.d.ts +0 -12
  99. package/dist/cli/commands/init.d.ts.map +0 -1
  100. package/dist/cli/commands/init.js +0 -115
  101. package/dist/cli/commands/init.js.map +0 -1
  102. package/dist/cli/commands/install-embeddings.d.ts +0 -10
  103. package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
  104. package/dist/cli/commands/install-embeddings.js +0 -68
  105. package/dist/cli/commands/install-embeddings.js.map +0 -1
  106. package/dist/cli/commands/migrate.d.ts +0 -15
  107. package/dist/cli/commands/migrate.d.ts.map +0 -1
  108. package/dist/cli/commands/migrate.js +0 -425
  109. package/dist/cli/commands/migrate.js.map +0 -1
  110. package/dist/cli/commands/status.d.ts +0 -10
  111. package/dist/cli/commands/status.d.ts.map +0 -1
  112. package/dist/cli/commands/status.js +0 -129
  113. package/dist/cli/commands/status.js.map +0 -1
  114. package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
  115. package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
  116. package/dist/controllers/CausalMemoryGraph.js +0 -323
  117. package/dist/controllers/CausalMemoryGraph.js.map +0 -1
  118. package/dist/controllers/CausalRecall.d.ts +0 -139
  119. package/dist/controllers/CausalRecall.d.ts.map +0 -1
  120. package/dist/controllers/CausalRecall.js +0 -356
  121. package/dist/controllers/CausalRecall.js.map +0 -1
  122. package/dist/controllers/ContextSynthesizer.d.ts +0 -65
  123. package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
  124. package/dist/controllers/ContextSynthesizer.js +0 -208
  125. package/dist/controllers/ContextSynthesizer.js.map +0 -1
  126. package/dist/controllers/EmbeddingService.d.ts +0 -37
  127. package/dist/controllers/EmbeddingService.d.ts.map +0 -1
  128. package/dist/controllers/EmbeddingService.js +0 -136
  129. package/dist/controllers/EmbeddingService.js.map +0 -1
  130. package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
  131. package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
  132. package/dist/controllers/EnhancedEmbeddingService.js +0 -119
  133. package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
  134. package/dist/controllers/ExplainableRecall.d.ts +0 -163
  135. package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
  136. package/dist/controllers/ExplainableRecall.js +0 -485
  137. package/dist/controllers/ExplainableRecall.js.map +0 -1
  138. package/dist/controllers/HNSWIndex.d.ts +0 -128
  139. package/dist/controllers/HNSWIndex.d.ts.map +0 -1
  140. package/dist/controllers/HNSWIndex.js +0 -361
  141. package/dist/controllers/HNSWIndex.js.map +0 -1
  142. package/dist/controllers/LearningSystem.d.ts +0 -195
  143. package/dist/controllers/LearningSystem.d.ts.map +0 -1
  144. package/dist/controllers/LearningSystem.js +0 -929
  145. package/dist/controllers/LearningSystem.js.map +0 -1
  146. package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
  147. package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
  148. package/dist/controllers/MMRDiversityRanker.js +0 -130
  149. package/dist/controllers/MMRDiversityRanker.js.map +0 -1
  150. package/dist/controllers/MetadataFilter.d.ts +0 -70
  151. package/dist/controllers/MetadataFilter.d.ts.map +0 -1
  152. package/dist/controllers/MetadataFilter.js +0 -243
  153. package/dist/controllers/MetadataFilter.js.map +0 -1
  154. package/dist/controllers/NightlyLearner.d.ts +0 -114
  155. package/dist/controllers/NightlyLearner.d.ts.map +0 -1
  156. package/dist/controllers/NightlyLearner.js +0 -394
  157. package/dist/controllers/NightlyLearner.js.map +0 -1
  158. package/dist/controllers/QUICClient.d.ts +0 -109
  159. package/dist/controllers/QUICClient.d.ts.map +0 -1
  160. package/dist/controllers/QUICClient.js +0 -299
  161. package/dist/controllers/QUICClient.js.map +0 -1
  162. package/dist/controllers/QUICServer.d.ts +0 -121
  163. package/dist/controllers/QUICServer.d.ts.map +0 -1
  164. package/dist/controllers/QUICServer.js +0 -383
  165. package/dist/controllers/QUICServer.js.map +0 -1
  166. package/dist/controllers/ReasoningBank.d.ts +0 -196
  167. package/dist/controllers/ReasoningBank.d.ts.map +0 -1
  168. package/dist/controllers/ReasoningBank.js +0 -494
  169. package/dist/controllers/ReasoningBank.js.map +0 -1
  170. package/dist/controllers/ReflexionMemory.d.ts +0 -125
  171. package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
  172. package/dist/controllers/ReflexionMemory.js +0 -521
  173. package/dist/controllers/ReflexionMemory.js.map +0 -1
  174. package/dist/controllers/SkillLibrary.d.ts +0 -149
  175. package/dist/controllers/SkillLibrary.d.ts.map +0 -1
  176. package/dist/controllers/SkillLibrary.js +0 -547
  177. package/dist/controllers/SkillLibrary.js.map +0 -1
  178. package/dist/controllers/SyncCoordinator.d.ts +0 -120
  179. package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
  180. package/dist/controllers/SyncCoordinator.js +0 -441
  181. package/dist/controllers/SyncCoordinator.js.map +0 -1
  182. package/dist/controllers/WASMVectorSearch.d.ts +0 -89
  183. package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
  184. package/dist/controllers/WASMVectorSearch.js +0 -234
  185. package/dist/controllers/WASMVectorSearch.js.map +0 -1
  186. package/dist/controllers/frontier-index.d.ts +0 -14
  187. package/dist/controllers/frontier-index.d.ts.map +0 -1
  188. package/dist/controllers/frontier-index.js +0 -10
  189. package/dist/controllers/frontier-index.js.map +0 -1
  190. package/dist/controllers/index.d.ts +0 -30
  191. package/dist/controllers/index.d.ts.map +0 -1
  192. package/dist/controllers/index.js +0 -18
  193. package/dist/controllers/index.js.map +0 -1
  194. package/dist/db-fallback.d.ts +0 -26
  195. package/dist/db-fallback.d.ts.map +0 -1
  196. package/dist/db-fallback.js +0 -264
  197. package/dist/db-fallback.js.map +0 -1
  198. package/dist/db-test.d.ts +0 -13
  199. package/dist/db-test.d.ts.map +0 -1
  200. package/dist/db-test.js +0 -55
  201. package/dist/db-test.js.map +0 -1
  202. package/dist/db-unified.d.ts +0 -76
  203. package/dist/db-unified.d.ts.map +0 -1
  204. package/dist/db-unified.js +0 -278
  205. package/dist/db-unified.js.map +0 -1
  206. package/dist/examples/quic-sync-example.d.ts +0 -9
  207. package/dist/examples/quic-sync-example.d.ts.map +0 -1
  208. package/dist/examples/quic-sync-example.js +0 -169
  209. package/dist/examples/quic-sync-example.js.map +0 -1
  210. package/dist/examples/wasm-vector-usage.d.ts +0 -12
  211. package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
  212. package/dist/examples/wasm-vector-usage.js +0 -190
  213. package/dist/examples/wasm-vector-usage.js.map +0 -1
  214. package/dist/index.d.ts +0 -28
  215. package/dist/index.d.ts.map +0 -1
  216. package/dist/index.js +0 -35
  217. package/dist/index.js.map +0 -1
  218. package/dist/malp/core/ccc.d.ts +0 -99
  219. package/dist/malp/core/ccc.d.ts.map +0 -1
  220. package/dist/malp/core/ccc.js +0 -181
  221. package/dist/malp/core/ccc.js.map +0 -1
  222. package/dist/malp/core/index.d.ts +0 -9
  223. package/dist/malp/core/index.d.ts.map +0 -1
  224. package/dist/malp/core/index.js +0 -9
  225. package/dist/malp/core/index.js.map +0 -1
  226. package/dist/malp/core/linalg.d.ts +0 -101
  227. package/dist/malp/core/linalg.d.ts.map +0 -1
  228. package/dist/malp/core/linalg.js +0 -278
  229. package/dist/malp/core/linalg.js.map +0 -1
  230. package/dist/malp/core/optimizer.d.ts +0 -68
  231. package/dist/malp/core/optimizer.d.ts.map +0 -1
  232. package/dist/malp/core/optimizer.js +0 -160
  233. package/dist/malp/core/optimizer.js.map +0 -1
  234. package/dist/malp/index.d.ts +0 -33
  235. package/dist/malp/index.d.ts.map +0 -1
  236. package/dist/malp/index.js +0 -37
  237. package/dist/malp/index.js.map +0 -1
  238. package/dist/malp/metrics/agreement.d.ts +0 -106
  239. package/dist/malp/metrics/agreement.d.ts.map +0 -1
  240. package/dist/malp/metrics/agreement.js +0 -199
  241. package/dist/malp/metrics/agreement.js.map +0 -1
  242. package/dist/malp/metrics/comparison.d.ts +0 -93
  243. package/dist/malp/metrics/comparison.d.ts.map +0 -1
  244. package/dist/malp/metrics/comparison.js +0 -256
  245. package/dist/malp/metrics/comparison.js.map +0 -1
  246. package/dist/malp/metrics/index.d.ts +0 -8
  247. package/dist/malp/metrics/index.d.ts.map +0 -1
  248. package/dist/malp/metrics/index.js +0 -8
  249. package/dist/malp/metrics/index.js.map +0 -1
  250. package/dist/malp/metrics/performance.d.ts +0 -61
  251. package/dist/malp/metrics/performance.d.ts.map +0 -1
  252. package/dist/malp/metrics/performance.js +0 -190
  253. package/dist/malp/metrics/performance.js.map +0 -1
  254. package/dist/malp/models/index.d.ts +0 -7
  255. package/dist/malp/models/index.d.ts.map +0 -1
  256. package/dist/malp/models/index.js +0 -7
  257. package/dist/malp/models/index.js.map +0 -1
  258. package/dist/malp/models/malp.d.ts +0 -116
  259. package/dist/malp/models/malp.d.ts.map +0 -1
  260. package/dist/malp/models/malp.js +0 -206
  261. package/dist/malp/models/malp.js.map +0 -1
  262. package/dist/malp/models/regressor.d.ts +0 -80
  263. package/dist/malp/models/regressor.d.ts.map +0 -1
  264. package/dist/malp/models/regressor.js +0 -229
  265. package/dist/malp/models/regressor.js.map +0 -1
  266. package/dist/malp/reasoningbank_validator.d.ts +0 -187
  267. package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
  268. package/dist/malp/reasoningbank_validator.js +0 -246
  269. package/dist/malp/reasoningbank_validator.js.map +0 -1
  270. package/dist/malp/wasm_bindings.d.ts +0 -344
  271. package/dist/malp/wasm_bindings.d.ts.map +0 -1
  272. package/dist/malp/wasm_bindings.js +0 -9
  273. package/dist/malp/wasm_bindings.js.map +0 -1
  274. package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
  275. package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
  276. package/dist/mcp/agentdb-mcp-server.js +0 -2116
  277. package/dist/mcp/agentdb-mcp-server.js.map +0 -1
  278. package/dist/mcp/learning-tools-handlers.d.ts +0 -16
  279. package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
  280. package/dist/mcp/learning-tools-handlers.js +0 -105
  281. package/dist/mcp/learning-tools-handlers.js.map +0 -1
  282. package/dist/optimizations/BatchOperations.d.ts +0 -109
  283. package/dist/optimizations/BatchOperations.d.ts.map +0 -1
  284. package/dist/optimizations/BatchOperations.js +0 -407
  285. package/dist/optimizations/BatchOperations.js.map +0 -1
  286. package/dist/optimizations/QueryOptimizer.d.ts +0 -83
  287. package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
  288. package/dist/optimizations/QueryOptimizer.js +0 -228
  289. package/dist/optimizations/QueryOptimizer.js.map +0 -1
  290. package/dist/optimizations/ToolCache.d.ts +0 -137
  291. package/dist/optimizations/ToolCache.d.ts.map +0 -1
  292. package/dist/optimizations/ToolCache.js +0 -281
  293. package/dist/optimizations/ToolCache.js.map +0 -1
  294. package/dist/optimizations/index.d.ts +0 -10
  295. package/dist/optimizations/index.d.ts.map +0 -1
  296. package/dist/optimizations/index.js +0 -8
  297. package/dist/optimizations/index.js.map +0 -1
  298. package/dist/security/input-validation.d.ts +0 -109
  299. package/dist/security/input-validation.d.ts.map +0 -1
  300. package/dist/security/input-validation.js +0 -398
  301. package/dist/security/input-validation.js.map +0 -1
  302. package/dist/security/limits.d.ts +0 -150
  303. package/dist/security/limits.d.ts.map +0 -1
  304. package/dist/security/limits.js +0 -288
  305. package/dist/security/limits.js.map +0 -1
  306. package/dist/security/path-security.d.ts +0 -100
  307. package/dist/security/path-security.d.ts.map +0 -1
  308. package/dist/security/path-security.js +0 -337
  309. package/dist/security/path-security.js.map +0 -1
  310. package/dist/security/validation.d.ts +0 -95
  311. package/dist/security/validation.d.ts.map +0 -1
  312. package/dist/security/validation.js +0 -315
  313. package/dist/security/validation.js.map +0 -1
  314. package/dist/types/quic.d.ts +0 -518
  315. package/dist/types/quic.d.ts.map +0 -1
  316. package/dist/types/quic.js +0 -272
  317. package/dist/types/quic.js.map +0 -1
@@ -1,485 +0,0 @@
1
- /**
2
- * ExplainableRecall - Provenance and Justification for Memory Retrieval
3
- *
4
- * Every retrieval returns:
5
- * - Minimal hitting set of facts that justify the answer
6
- * - Merkle proof chain for provenance
7
- * - Policy compliance certificates
8
- *
9
- * Based on:
10
- * - Minimal hitting set algorithms
11
- * - Merkle tree provenance
12
- * - Explainable AI techniques
13
- */
14
- import * as crypto from 'crypto';
15
- export class ExplainableRecall {
16
- db;
17
- constructor(db) {
18
- this.db = db;
19
- }
20
- /**
21
- * Create a recall certificate for a retrieval operation
22
- */
23
- createCertificate(params) {
24
- const { queryId, queryText, chunks, requirements, accessLevel = 'internal' } = params;
25
- const startTime = Date.now();
26
- // 1. Compute minimal hitting set
27
- const minimalWhy = this.computeMinimalHittingSet(chunks, requirements);
28
- // 2. Calculate metrics
29
- const redundancyRatio = chunks.length / minimalWhy.length;
30
- const completenessScore = this.calculateCompleteness(minimalWhy, requirements);
31
- // 3. Build provenance chain
32
- const sourceHashes = chunks.map(chunk => this.getOrCreateProvenance(chunk.type, parseInt(chunk.id)));
33
- const merkleTree = this.buildMerkleTree(sourceHashes);
34
- const merkleRoot = merkleTree.root;
35
- // 4. Generate chunk metadata first (needed for certificate ID)
36
- const chunkIds = chunks.map(c => c.id);
37
- const chunkTypes = chunks.map(c => c.type);
38
- // 5. Create certificate ID
39
- const certificateId = this.generateCertificateId(queryId, chunkIds);
40
- // 6. Generate proof chain for each chunk
41
- const proofChain = chunks.map((chunk, idx) => this.getMerkleProof(merkleTree, idx)).flat();
42
- // 7. Store certificate
43
- this.db.prepare(`
44
- INSERT INTO recall_certificates (
45
- id, query_id, query_text, chunk_ids, chunk_types,
46
- minimal_why, redundancy_ratio, completeness_score,
47
- merkle_root, source_hashes, proof_chain,
48
- access_level, latency_ms
49
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
50
- `).run(certificateId, queryId, queryText, JSON.stringify(chunkIds), JSON.stringify(chunkTypes), JSON.stringify(minimalWhy), redundancyRatio, completenessScore, merkleRoot, JSON.stringify(sourceHashes), JSON.stringify(proofChain), accessLevel, Date.now() - startTime);
51
- // 7. Store justification paths
52
- this.storeJustificationPaths(certificateId, chunks, minimalWhy, requirements);
53
- const certificate = {
54
- id: certificateId,
55
- queryId,
56
- queryText,
57
- chunkIds,
58
- chunkTypes,
59
- minimalWhy,
60
- redundancyRatio,
61
- completenessScore,
62
- merkleRoot,
63
- sourceHashes,
64
- proofChain,
65
- accessLevel: accessLevel,
66
- latencyMs: Date.now() - startTime
67
- };
68
- return certificate;
69
- }
70
- /**
71
- * Verify a recall certificate
72
- */
73
- verifyCertificate(certificateId) {
74
- const cert = this.db.prepare('SELECT * FROM recall_certificates WHERE id = ?').get(certificateId);
75
- if (!cert) {
76
- return { valid: false, issues: ['Certificate not found'] };
77
- }
78
- const issues = [];
79
- // 1. Verify Merkle root
80
- const sourceHashes = JSON.parse(cert.source_hashes);
81
- const merkleTree = this.buildMerkleTree(sourceHashes);
82
- if (merkleTree.root !== cert.merkle_root) {
83
- issues.push('Merkle root mismatch');
84
- }
85
- // 2. Verify chunk hashes still match
86
- const chunkIds = JSON.parse(cert.chunk_ids);
87
- const chunkTypes = JSON.parse(cert.chunk_types);
88
- for (let i = 0; i < chunkIds.length; i++) {
89
- const currentHash = this.getContentHash(chunkTypes[i], parseInt(chunkIds[i]));
90
- if (currentHash !== sourceHashes[i]) {
91
- issues.push(`Chunk ${chunkIds[i]} hash changed`);
92
- }
93
- }
94
- // 3. Verify completeness
95
- const minimalWhy = JSON.parse(cert.minimal_why);
96
- if (minimalWhy.length === 0) {
97
- issues.push('Empty justification set');
98
- }
99
- // 4. Verify redundancy ratio
100
- if (cert.redundancy_ratio < 1.0) {
101
- issues.push('Invalid redundancy ratio');
102
- }
103
- return {
104
- valid: issues.length === 0,
105
- issues
106
- };
107
- }
108
- /**
109
- * Get justification for why a chunk was included
110
- */
111
- getJustification(certificateId, chunkId) {
112
- const row = this.db.prepare(`
113
- SELECT * FROM justification_paths
114
- WHERE certificate_id = ? AND chunk_id = ?
115
- `).get(certificateId, chunkId);
116
- if (!row)
117
- return null;
118
- return {
119
- chunkId: row.chunk_id,
120
- chunkType: row.chunk_type,
121
- reason: row.reason,
122
- necessityScore: row.necessity_score,
123
- pathElements: JSON.parse(row.path_elements)
124
- };
125
- }
126
- /**
127
- * Get provenance lineage for a source
128
- */
129
- getProvenanceLineage(contentHash) {
130
- const lineage = [];
131
- let currentHash = contentHash;
132
- while (currentHash) {
133
- const source = this.db.prepare(`
134
- SELECT * FROM provenance_sources WHERE content_hash = ?
135
- `).get(currentHash);
136
- if (!source)
137
- break;
138
- lineage.push({
139
- id: source.id,
140
- sourceType: source.source_type,
141
- sourceId: source.source_id,
142
- contentHash: source.content_hash,
143
- parentHash: source.parent_hash,
144
- derivedFrom: source.derived_from ? JSON.parse(source.derived_from) : undefined,
145
- creator: source.creator,
146
- metadata: source.metadata ? JSON.parse(source.metadata) : undefined
147
- });
148
- currentHash = source.parent_hash;
149
- }
150
- return lineage;
151
- }
152
- /**
153
- * Trace provenance lineage for a certificate
154
- * Returns full provenance chain from certificate to original sources
155
- */
156
- traceProvenance(certificateId) {
157
- const certRow = this.db.prepare('SELECT * FROM recall_certificates WHERE id = ?').get(certificateId);
158
- if (!certRow) {
159
- throw new Error(`Certificate ${certificateId} not found`);
160
- }
161
- const certificate = {
162
- id: certRow.id,
163
- queryId: certRow.query_id,
164
- queryText: certRow.query_text,
165
- chunkIds: JSON.parse(certRow.chunk_ids),
166
- chunkTypes: JSON.parse(certRow.chunk_types),
167
- minimalWhy: JSON.parse(certRow.minimal_why),
168
- redundancyRatio: certRow.redundancy_ratio,
169
- completenessScore: certRow.completeness_score,
170
- merkleRoot: certRow.merkle_root,
171
- sourceHashes: JSON.parse(certRow.source_hashes),
172
- proofChain: JSON.parse(certRow.proof_chain),
173
- policyProof: certRow.policy_proof,
174
- policyVersion: certRow.policy_version,
175
- accessLevel: certRow.access_level,
176
- latencyMs: certRow.latency_ms
177
- };
178
- // Build provenance map for all sources
179
- const sources = new Map();
180
- for (const hash of certificate.sourceHashes) {
181
- sources.set(hash, this.getProvenanceLineage(hash));
182
- }
183
- // Build provenance graph
184
- const nodes = [];
185
- const edges = [];
186
- // Add certificate node
187
- nodes.push({
188
- id: certificateId,
189
- type: 'certificate',
190
- label: `Certificate: ${certificate.queryText.substring(0, 30)}...`
191
- });
192
- // Add source nodes and edges
193
- for (const [hash, lineage] of sources.entries()) {
194
- for (let i = 0; i < lineage.length; i++) {
195
- const source = lineage[i];
196
- const nodeId = `${source.sourceType}-${source.sourceId}`;
197
- // Add node if not exists
198
- if (!nodes.find(n => n.id === nodeId)) {
199
- nodes.push({
200
- id: nodeId,
201
- type: source.sourceType,
202
- label: `${source.sourceType} #${source.sourceId}`
203
- });
204
- }
205
- // Add edge from certificate to first source
206
- if (i === 0) {
207
- edges.push({
208
- from: certificateId,
209
- to: nodeId,
210
- type: 'includes'
211
- });
212
- }
213
- // Add edge to parent if exists
214
- if (i < lineage.length - 1) {
215
- const parentNodeId = `${lineage[i + 1].sourceType}-${lineage[i + 1].sourceId}`;
216
- edges.push({
217
- from: nodeId,
218
- to: parentNodeId,
219
- type: 'derived_from'
220
- });
221
- }
222
- }
223
- }
224
- return {
225
- certificate,
226
- sources,
227
- graph: { nodes, edges }
228
- };
229
- }
230
- /**
231
- * Audit certificate access
232
- */
233
- auditCertificate(certificateId) {
234
- const certRow = this.db.prepare('SELECT * FROM recall_certificates WHERE id = ?').get(certificateId);
235
- if (!certRow) {
236
- throw new Error(`Certificate ${certificateId} not found`);
237
- }
238
- const certificate = {
239
- id: certRow.id,
240
- queryId: certRow.query_id,
241
- queryText: certRow.query_text,
242
- chunkIds: JSON.parse(certRow.chunk_ids),
243
- chunkTypes: JSON.parse(certRow.chunk_types),
244
- minimalWhy: JSON.parse(certRow.minimal_why),
245
- redundancyRatio: certRow.redundancy_ratio,
246
- completenessScore: certRow.completeness_score,
247
- merkleRoot: certRow.merkle_root,
248
- sourceHashes: JSON.parse(certRow.source_hashes),
249
- proofChain: JSON.parse(certRow.proof_chain),
250
- policyProof: certRow.policy_proof,
251
- policyVersion: certRow.policy_version,
252
- accessLevel: certRow.access_level,
253
- latencyMs: certRow.latency_ms
254
- };
255
- // Get justifications
256
- const justRows = this.db.prepare(`
257
- SELECT * FROM justification_paths WHERE certificate_id = ?
258
- `).all(certificateId);
259
- const justifications = justRows.map(row => ({
260
- chunkId: row.chunk_id,
261
- chunkType: row.chunk_type,
262
- reason: row.reason,
263
- necessityScore: row.necessity_score,
264
- pathElements: JSON.parse(row.path_elements)
265
- }));
266
- // Get provenance for each source
267
- const provenance = new Map();
268
- for (const hash of certificate.sourceHashes) {
269
- provenance.set(hash, this.getProvenanceLineage(hash));
270
- }
271
- // Calculate quality metrics
272
- const avgNecessity = justifications.reduce((sum, j) => sum + j.necessityScore, 0) / justifications.length;
273
- return {
274
- certificate,
275
- justifications,
276
- provenance,
277
- quality: {
278
- completeness: certificate.completenessScore,
279
- redundancy: certificate.redundancyRatio,
280
- avgNecessity
281
- }
282
- };
283
- }
284
- // ========================================================================
285
- // Private Helper Methods
286
- // ========================================================================
287
- /**
288
- * Compute minimal hitting set using greedy algorithm
289
- * A hitting set contains at least one element from each requirement
290
- */
291
- computeMinimalHittingSet(chunks, requirements) {
292
- if (requirements.length === 0) {
293
- return chunks.slice(0, Math.min(3, chunks.length)).map(c => c.id);
294
- }
295
- const uncovered = new Set(requirements);
296
- const selected = [];
297
- // Greedy: select chunk that covers most uncovered requirements
298
- while (uncovered.size > 0 && chunks.length > 0) {
299
- let bestChunk = null;
300
- let bestCoverage = 0;
301
- for (const chunk of chunks) {
302
- const coverage = Array.from(uncovered).filter(req => chunk.content.toLowerCase().includes(req.toLowerCase())).length;
303
- if (coverage > bestCoverage) {
304
- bestCoverage = coverage;
305
- bestChunk = chunk;
306
- }
307
- }
308
- if (!bestChunk)
309
- break;
310
- selected.push(bestChunk.id);
311
- // Remove covered requirements
312
- for (const req of Array.from(uncovered)) {
313
- if (bestChunk.content.toLowerCase().includes(req.toLowerCase())) {
314
- uncovered.delete(req);
315
- }
316
- }
317
- // Remove selected chunk
318
- chunks = chunks.filter(c => c.id !== bestChunk.id);
319
- }
320
- return selected;
321
- }
322
- /**
323
- * Calculate completeness score
324
- */
325
- calculateCompleteness(minimalWhy, requirements) {
326
- if (requirements.length === 0)
327
- return 1.0;
328
- // Prepare statement ONCE outside loop (better-sqlite3 best practice)
329
- const stmt = this.db.prepare('SELECT output FROM episodes WHERE id = ?');
330
- const chunks = minimalWhy.map(id => {
331
- // Get chunk content
332
- const episode = stmt.get(parseInt(id));
333
- return episode ? episode.output : '';
334
- });
335
- const satisfied = requirements.filter(req => chunks.some(content => content && content.toLowerCase().includes(req.toLowerCase())));
336
- return satisfied.length / requirements.length;
337
- }
338
- /**
339
- * Get or create provenance record
340
- */
341
- getOrCreateProvenance(sourceType, sourceId) {
342
- // Check if provenance exists
343
- const existing = this.db.prepare(`
344
- SELECT content_hash FROM provenance_sources
345
- WHERE source_type = ? AND source_id = ?
346
- `).get(sourceType, sourceId);
347
- if (existing) {
348
- return existing.content_hash;
349
- }
350
- // Create new provenance
351
- const contentHash = this.getContentHash(sourceType, sourceId);
352
- this.db.prepare(`
353
- INSERT OR IGNORE INTO provenance_sources (source_type, source_id, content_hash, creator)
354
- VALUES (?, ?, ?, ?)
355
- `).run(sourceType, sourceId, contentHash, 'system');
356
- return contentHash;
357
- }
358
- // Prepare statement ONCE outside loop (better-sqlite3 best practice)
359
- _episodeStmt;
360
- _skillStmt;
361
- _noteStmt;
362
- _factStmt;
363
- /**
364
- * Get content hash for a memory
365
- */
366
- getContentHash(sourceType, sourceId) {
367
- let content = '';
368
- switch (sourceType) {
369
- case 'episode':
370
- if (!this._episodeStmt) {
371
- this._episodeStmt = this.db.prepare('SELECT task, output FROM episodes WHERE id = ?');
372
- }
373
- const episode = this._episodeStmt.get(sourceId);
374
- content = episode ? `${episode.task}:${episode.output}` : '';
375
- break;
376
- case 'skill':
377
- if (!this._skillStmt) {
378
- this._skillStmt = this.db.prepare('SELECT name, code FROM skills WHERE id = ?');
379
- }
380
- const skill = this._skillStmt.get(sourceId);
381
- content = skill ? `${skill.name}:${skill.code}` : '';
382
- break;
383
- case 'note':
384
- if (!this._noteStmt) {
385
- this._noteStmt = this.db.prepare('SELECT text FROM notes WHERE id = ?');
386
- }
387
- const note = this._noteStmt.get(sourceId);
388
- content = note ? note.text : '';
389
- break;
390
- case 'fact':
391
- if (!this._factStmt) {
392
- this._factStmt = this.db.prepare('SELECT subject, predicate, object FROM facts WHERE id = ?');
393
- }
394
- const fact = this._factStmt.get(sourceId);
395
- content = fact ? `${fact.subject}:${fact.predicate}:${fact.object}` : '';
396
- break;
397
- }
398
- return crypto.createHash('sha256').update(content).digest('hex');
399
- }
400
- /**
401
- * Build Merkle tree from hashes
402
- */
403
- buildMerkleTree(hashes) {
404
- if (hashes.length === 0) {
405
- return { root: '', tree: [[]] };
406
- }
407
- const tree = [hashes];
408
- while (tree[tree.length - 1].length > 1) {
409
- const level = tree[tree.length - 1];
410
- const nextLevel = [];
411
- for (let i = 0; i < level.length; i += 2) {
412
- if (i + 1 < level.length) {
413
- const combined = level[i] + level[i + 1];
414
- nextLevel.push(crypto.createHash('sha256').update(combined).digest('hex'));
415
- }
416
- else {
417
- nextLevel.push(level[i]);
418
- }
419
- }
420
- tree.push(nextLevel);
421
- }
422
- return { root: tree[tree.length - 1][0], tree };
423
- }
424
- /**
425
- * Get Merkle proof for a leaf
426
- */
427
- getMerkleProof(merkleTree, leafIndex) {
428
- const proof = [];
429
- let index = leafIndex;
430
- for (let level = 0; level < merkleTree.tree.length - 1; level++) {
431
- const currentLevel = merkleTree.tree[level];
432
- const isLeftNode = index % 2 === 0;
433
- const siblingIndex = isLeftNode ? index + 1 : index - 1;
434
- if (siblingIndex < currentLevel.length) {
435
- proof.push({
436
- hash: currentLevel[siblingIndex],
437
- position: isLeftNode ? 'right' : 'left'
438
- });
439
- }
440
- index = Math.floor(index / 2);
441
- }
442
- return proof;
443
- }
444
- /**
445
- * Generate certificate ID
446
- */
447
- generateCertificateId(queryId, chunkIds) {
448
- const data = `${queryId}:${chunkIds.join(',')}:${Date.now()}`;
449
- return crypto.createHash('sha256').update(data).digest('hex');
450
- }
451
- /**
452
- * Store justification paths
453
- */
454
- storeJustificationPaths(certificateId, chunks, minimalWhy, requirements) {
455
- const stmt = this.db.prepare(`
456
- INSERT INTO justification_paths (
457
- certificate_id, chunk_id, chunk_type, reason, necessity_score, path_elements
458
- ) VALUES (?, ?, ?, ?, ?, ?)
459
- `);
460
- for (const chunk of chunks) {
461
- const isNecessary = minimalWhy.includes(chunk.id);
462
- const reason = this.determineReason(chunk, requirements);
463
- const necessityScore = isNecessary ? chunk.relevance : chunk.relevance * 0.5;
464
- const pathElements = [
465
- `Retrieved for query`,
466
- isNecessary ? `Essential for justification` : `Supporting evidence`,
467
- `Relevance: ${(chunk.relevance * 100).toFixed(1)}%`
468
- ];
469
- stmt.run(certificateId, chunk.id, chunk.type, reason, necessityScore, JSON.stringify(pathElements));
470
- }
471
- }
472
- /**
473
- * Determine reason for inclusion
474
- */
475
- determineReason(chunk, requirements) {
476
- if (chunk.relevance > 0.9)
477
- return 'semantic_match';
478
- if (chunk.relevance > 0.7)
479
- return 'causal_link';
480
- if (chunk.relevance > 0.5)
481
- return 'prerequisite';
482
- return 'constraint';
483
- }
484
- }
485
- //# sourceMappingURL=ExplainableRecall.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExplainableRecall.js","sourceRoot":"","sources":["../../src/controllers/ExplainableRecall.ts"],"names":[],"mappings":"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"}
@@ -1,128 +0,0 @@
1
- /**
2
- * HNSWIndex - Hierarchical Navigable Small World Index
3
- *
4
- * High-performance approximate nearest neighbor (ANN) search using HNSW algorithm.
5
- * Provides 10-100x speedup over brute-force search for large vector datasets.
6
- *
7
- * Features:
8
- * - HNSW indexing for sub-millisecond search
9
- * - Automatic index building and management
10
- * - Configurable M and efConstruction parameters
11
- * - Persistent index storage
12
- * - Graceful fallback to brute-force
13
- * - Multi-distance metric support (cosine, euclidean, ip)
14
- */
15
- type Database = any;
16
- export interface HNSWConfig {
17
- /** Maximum number of connections per layer (default: 16) */
18
- M: number;
19
- /** Size of dynamic candidate list during construction (default: 200) */
20
- efConstruction: number;
21
- /** Size of dynamic candidate list during search (default: 100) */
22
- efSearch: number;
23
- /** Distance metric: 'cosine', 'euclidean', 'ip' (inner product) */
24
- metric: 'cosine' | 'l2' | 'ip';
25
- /** Vector dimension */
26
- dimension: number;
27
- /** Maximum number of elements in index */
28
- maxElements: number;
29
- /** Enable persistent index storage */
30
- persistIndex: boolean;
31
- /** Path to store index file */
32
- indexPath?: string;
33
- /** Rebuild index threshold (rebuild when updates exceed this percentage) */
34
- rebuildThreshold: number;
35
- }
36
- export interface HNSWSearchResult {
37
- id: number;
38
- distance: number;
39
- similarity: number;
40
- metadata?: any;
41
- }
42
- export interface HNSWStats {
43
- enabled: boolean;
44
- indexBuilt: boolean;
45
- numElements: number;
46
- dimension: number;
47
- metric: string;
48
- M: number;
49
- efConstruction: number;
50
- efSearch: number;
51
- lastBuildTime: number | null;
52
- lastSearchTime: number | null;
53
- totalSearches: number;
54
- avgSearchTimeMs: number;
55
- }
56
- export declare class HNSWIndex {
57
- private db;
58
- private config;
59
- private index;
60
- private vectorCache;
61
- private idToLabel;
62
- private labelToId;
63
- private nextLabel;
64
- private indexBuilt;
65
- private updatesSinceLastBuild;
66
- private totalSearches;
67
- private totalSearchTime;
68
- private lastBuildTime;
69
- private lastSearchTime;
70
- constructor(db: Database, config?: Partial<HNSWConfig>);
71
- /**
72
- * Build HNSW index from database vectors
73
- */
74
- buildIndex(tableName?: string): Promise<void>;
75
- /**
76
- * Search HNSW index for k-nearest neighbors
77
- */
78
- search(query: Float32Array, k: number, options?: {
79
- threshold?: number;
80
- filters?: Record<string, any>;
81
- }): Promise<HNSWSearchResult[]>;
82
- /**
83
- * Add a single vector to the index
84
- */
85
- addVector(id: number, embedding: Float32Array): void;
86
- /**
87
- * Remove a vector from the index
88
- */
89
- removeVector(id: number): void;
90
- /**
91
- * Check if index needs rebuilding
92
- */
93
- needsRebuild(): boolean;
94
- /**
95
- * Save index to disk
96
- */
97
- private saveIndex;
98
- /**
99
- * Load index from disk
100
- */
101
- private loadIndex;
102
- /**
103
- * Convert distance to similarity based on metric
104
- */
105
- private distanceToSimilarity;
106
- /**
107
- * Apply post-filtering to search results
108
- */
109
- private applyFilters;
110
- /**
111
- * Get index statistics
112
- */
113
- getStats(): HNSWStats;
114
- /**
115
- * Update efSearch parameter for search quality/speed tradeoff
116
- */
117
- setEfSearch(ef: number): void;
118
- /**
119
- * Clear index and free memory
120
- */
121
- clear(): void;
122
- /**
123
- * Check if index is built and ready
124
- */
125
- isReady(): boolean;
126
- }
127
- export {};
128
- //# sourceMappingURL=HNSWIndex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HNSWIndex.d.ts","sourceRoot":"","sources":["../../src/controllers/HNSWIndex.ts"],"names":[],"mappings":"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"}