agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.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 (314) 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/package.json +3 -3
  7. package/src/cli/agentdb-cli.ts +78 -0
  8. package/dist/agentdb-advanced.js +0 -2110
  9. package/dist/agentdb-advanced.min.js +0 -1
  10. package/dist/backends/GraphBackend.d.ts +0 -196
  11. package/dist/backends/GraphBackend.d.ts.map +0 -1
  12. package/dist/backends/GraphBackend.js +0 -33
  13. package/dist/backends/GraphBackend.js.map +0 -1
  14. package/dist/backends/LearningBackend.d.ts +0 -148
  15. package/dist/backends/LearningBackend.d.ts.map +0 -1
  16. package/dist/backends/LearningBackend.js +0 -27
  17. package/dist/backends/LearningBackend.js.map +0 -1
  18. package/dist/backends/VectorBackend.d.ts +0 -119
  19. package/dist/backends/VectorBackend.d.ts.map +0 -1
  20. package/dist/backends/VectorBackend.js +0 -14
  21. package/dist/backends/VectorBackend.js.map +0 -1
  22. package/dist/backends/detector.d.ts +0 -81
  23. package/dist/backends/detector.d.ts.map +0 -1
  24. package/dist/backends/detector.js +0 -192
  25. package/dist/backends/detector.js.map +0 -1
  26. package/dist/backends/factory.d.ts +0 -50
  27. package/dist/backends/factory.d.ts.map +0 -1
  28. package/dist/backends/factory.js +0 -161
  29. package/dist/backends/factory.js.map +0 -1
  30. package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
  31. package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
  32. package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
  33. package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
  34. package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
  35. package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
  36. package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
  37. package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
  38. package/dist/backends/hnswlib/index.d.ts +0 -7
  39. package/dist/backends/hnswlib/index.d.ts.map +0 -1
  40. package/dist/backends/hnswlib/index.js +0 -7
  41. package/dist/backends/hnswlib/index.js.map +0 -1
  42. package/dist/backends/index.d.ts +0 -14
  43. package/dist/backends/index.d.ts.map +0 -1
  44. package/dist/backends/index.js +0 -13
  45. package/dist/backends/index.js.map +0 -1
  46. package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
  47. package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
  48. package/dist/backends/ruvector/RuVectorBackend.js +0 -198
  49. package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
  50. package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
  51. package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
  52. package/dist/backends/ruvector/RuVectorLearning.js +0 -177
  53. package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
  54. package/dist/backends/ruvector/index.d.ts +0 -9
  55. package/dist/backends/ruvector/index.d.ts.map +0 -1
  56. package/dist/backends/ruvector/index.js +0 -8
  57. package/dist/backends/ruvector/index.js.map +0 -1
  58. package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
  59. package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
  60. package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
  61. package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
  62. package/dist/browser/AdvancedFeatures.d.ts +0 -144
  63. package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
  64. package/dist/browser/AdvancedFeatures.js +0 -430
  65. package/dist/browser/AdvancedFeatures.js.map +0 -1
  66. package/dist/browser/HNSWIndex.d.ts +0 -117
  67. package/dist/browser/HNSWIndex.d.ts.map +0 -1
  68. package/dist/browser/HNSWIndex.js +0 -402
  69. package/dist/browser/HNSWIndex.js.map +0 -1
  70. package/dist/browser/ProductQuantization.d.ts +0 -107
  71. package/dist/browser/ProductQuantization.d.ts.map +0 -1
  72. package/dist/browser/ProductQuantization.js +0 -337
  73. package/dist/browser/ProductQuantization.js.map +0 -1
  74. package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
  75. package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
  76. package/dist/browser/browser/AdvancedFeatures.js +0 -427
  77. package/dist/browser/browser/HNSWIndex.d.ts +0 -117
  78. package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
  79. package/dist/browser/browser/HNSWIndex.js +0 -402
  80. package/dist/browser/browser/ProductQuantization.d.ts +0 -107
  81. package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
  82. package/dist/browser/browser/ProductQuantization.js +0 -348
  83. package/dist/browser/browser/index.d.ts +0 -223
  84. package/dist/browser/browser/index.d.ts.map +0 -1
  85. package/dist/browser/browser/index.js +0 -233
  86. package/dist/browser/index.d.ts +0 -223
  87. package/dist/browser/index.d.ts.map +0 -1
  88. package/dist/browser/index.js +0 -225
  89. package/dist/browser/index.js.map +0 -1
  90. package/dist/cli/agentdb-cli.d.ts +0 -154
  91. package/dist/cli/agentdb-cli.d.ts.map +0 -1
  92. package/dist/cli/agentdb-cli.js +0 -2273
  93. package/dist/cli/agentdb-cli.js.map +0 -1
  94. package/dist/cli/agentdb.db +0 -0
  95. package/dist/cli/commands/init.d.ts +0 -12
  96. package/dist/cli/commands/init.d.ts.map +0 -1
  97. package/dist/cli/commands/init.js +0 -115
  98. package/dist/cli/commands/init.js.map +0 -1
  99. package/dist/cli/commands/install-embeddings.d.ts +0 -10
  100. package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
  101. package/dist/cli/commands/install-embeddings.js +0 -68
  102. package/dist/cli/commands/install-embeddings.js.map +0 -1
  103. package/dist/cli/commands/migrate.d.ts +0 -15
  104. package/dist/cli/commands/migrate.d.ts.map +0 -1
  105. package/dist/cli/commands/migrate.js +0 -425
  106. package/dist/cli/commands/migrate.js.map +0 -1
  107. package/dist/cli/commands/status.d.ts +0 -10
  108. package/dist/cli/commands/status.d.ts.map +0 -1
  109. package/dist/cli/commands/status.js +0 -129
  110. package/dist/cli/commands/status.js.map +0 -1
  111. package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
  112. package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
  113. package/dist/controllers/CausalMemoryGraph.js +0 -323
  114. package/dist/controllers/CausalMemoryGraph.js.map +0 -1
  115. package/dist/controllers/CausalRecall.d.ts +0 -139
  116. package/dist/controllers/CausalRecall.d.ts.map +0 -1
  117. package/dist/controllers/CausalRecall.js +0 -356
  118. package/dist/controllers/CausalRecall.js.map +0 -1
  119. package/dist/controllers/ContextSynthesizer.d.ts +0 -65
  120. package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
  121. package/dist/controllers/ContextSynthesizer.js +0 -208
  122. package/dist/controllers/ContextSynthesizer.js.map +0 -1
  123. package/dist/controllers/EmbeddingService.d.ts +0 -37
  124. package/dist/controllers/EmbeddingService.d.ts.map +0 -1
  125. package/dist/controllers/EmbeddingService.js +0 -136
  126. package/dist/controllers/EmbeddingService.js.map +0 -1
  127. package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
  128. package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
  129. package/dist/controllers/EnhancedEmbeddingService.js +0 -119
  130. package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
  131. package/dist/controllers/ExplainableRecall.d.ts +0 -163
  132. package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
  133. package/dist/controllers/ExplainableRecall.js +0 -485
  134. package/dist/controllers/ExplainableRecall.js.map +0 -1
  135. package/dist/controllers/HNSWIndex.d.ts +0 -128
  136. package/dist/controllers/HNSWIndex.d.ts.map +0 -1
  137. package/dist/controllers/HNSWIndex.js +0 -361
  138. package/dist/controllers/HNSWIndex.js.map +0 -1
  139. package/dist/controllers/LearningSystem.d.ts +0 -195
  140. package/dist/controllers/LearningSystem.d.ts.map +0 -1
  141. package/dist/controllers/LearningSystem.js +0 -929
  142. package/dist/controllers/LearningSystem.js.map +0 -1
  143. package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
  144. package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
  145. package/dist/controllers/MMRDiversityRanker.js +0 -130
  146. package/dist/controllers/MMRDiversityRanker.js.map +0 -1
  147. package/dist/controllers/MetadataFilter.d.ts +0 -70
  148. package/dist/controllers/MetadataFilter.d.ts.map +0 -1
  149. package/dist/controllers/MetadataFilter.js +0 -243
  150. package/dist/controllers/MetadataFilter.js.map +0 -1
  151. package/dist/controllers/NightlyLearner.d.ts +0 -114
  152. package/dist/controllers/NightlyLearner.d.ts.map +0 -1
  153. package/dist/controllers/NightlyLearner.js +0 -394
  154. package/dist/controllers/NightlyLearner.js.map +0 -1
  155. package/dist/controllers/QUICClient.d.ts +0 -109
  156. package/dist/controllers/QUICClient.d.ts.map +0 -1
  157. package/dist/controllers/QUICClient.js +0 -299
  158. package/dist/controllers/QUICClient.js.map +0 -1
  159. package/dist/controllers/QUICServer.d.ts +0 -121
  160. package/dist/controllers/QUICServer.d.ts.map +0 -1
  161. package/dist/controllers/QUICServer.js +0 -383
  162. package/dist/controllers/QUICServer.js.map +0 -1
  163. package/dist/controllers/ReasoningBank.d.ts +0 -196
  164. package/dist/controllers/ReasoningBank.d.ts.map +0 -1
  165. package/dist/controllers/ReasoningBank.js +0 -494
  166. package/dist/controllers/ReasoningBank.js.map +0 -1
  167. package/dist/controllers/ReflexionMemory.d.ts +0 -125
  168. package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
  169. package/dist/controllers/ReflexionMemory.js +0 -521
  170. package/dist/controllers/ReflexionMemory.js.map +0 -1
  171. package/dist/controllers/SkillLibrary.d.ts +0 -149
  172. package/dist/controllers/SkillLibrary.d.ts.map +0 -1
  173. package/dist/controllers/SkillLibrary.js +0 -547
  174. package/dist/controllers/SkillLibrary.js.map +0 -1
  175. package/dist/controllers/SyncCoordinator.d.ts +0 -120
  176. package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
  177. package/dist/controllers/SyncCoordinator.js +0 -441
  178. package/dist/controllers/SyncCoordinator.js.map +0 -1
  179. package/dist/controllers/WASMVectorSearch.d.ts +0 -89
  180. package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
  181. package/dist/controllers/WASMVectorSearch.js +0 -234
  182. package/dist/controllers/WASMVectorSearch.js.map +0 -1
  183. package/dist/controllers/frontier-index.d.ts +0 -14
  184. package/dist/controllers/frontier-index.d.ts.map +0 -1
  185. package/dist/controllers/frontier-index.js +0 -10
  186. package/dist/controllers/frontier-index.js.map +0 -1
  187. package/dist/controllers/index.d.ts +0 -30
  188. package/dist/controllers/index.d.ts.map +0 -1
  189. package/dist/controllers/index.js +0 -18
  190. package/dist/controllers/index.js.map +0 -1
  191. package/dist/db-fallback.d.ts +0 -26
  192. package/dist/db-fallback.d.ts.map +0 -1
  193. package/dist/db-fallback.js +0 -264
  194. package/dist/db-fallback.js.map +0 -1
  195. package/dist/db-test.d.ts +0 -13
  196. package/dist/db-test.d.ts.map +0 -1
  197. package/dist/db-test.js +0 -55
  198. package/dist/db-test.js.map +0 -1
  199. package/dist/db-unified.d.ts +0 -76
  200. package/dist/db-unified.d.ts.map +0 -1
  201. package/dist/db-unified.js +0 -278
  202. package/dist/db-unified.js.map +0 -1
  203. package/dist/examples/quic-sync-example.d.ts +0 -9
  204. package/dist/examples/quic-sync-example.d.ts.map +0 -1
  205. package/dist/examples/quic-sync-example.js +0 -169
  206. package/dist/examples/quic-sync-example.js.map +0 -1
  207. package/dist/examples/wasm-vector-usage.d.ts +0 -12
  208. package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
  209. package/dist/examples/wasm-vector-usage.js +0 -190
  210. package/dist/examples/wasm-vector-usage.js.map +0 -1
  211. package/dist/index.d.ts +0 -28
  212. package/dist/index.d.ts.map +0 -1
  213. package/dist/index.js +0 -35
  214. package/dist/index.js.map +0 -1
  215. package/dist/malp/core/ccc.d.ts +0 -99
  216. package/dist/malp/core/ccc.d.ts.map +0 -1
  217. package/dist/malp/core/ccc.js +0 -181
  218. package/dist/malp/core/ccc.js.map +0 -1
  219. package/dist/malp/core/index.d.ts +0 -9
  220. package/dist/malp/core/index.d.ts.map +0 -1
  221. package/dist/malp/core/index.js +0 -9
  222. package/dist/malp/core/index.js.map +0 -1
  223. package/dist/malp/core/linalg.d.ts +0 -101
  224. package/dist/malp/core/linalg.d.ts.map +0 -1
  225. package/dist/malp/core/linalg.js +0 -278
  226. package/dist/malp/core/linalg.js.map +0 -1
  227. package/dist/malp/core/optimizer.d.ts +0 -68
  228. package/dist/malp/core/optimizer.d.ts.map +0 -1
  229. package/dist/malp/core/optimizer.js +0 -160
  230. package/dist/malp/core/optimizer.js.map +0 -1
  231. package/dist/malp/index.d.ts +0 -33
  232. package/dist/malp/index.d.ts.map +0 -1
  233. package/dist/malp/index.js +0 -37
  234. package/dist/malp/index.js.map +0 -1
  235. package/dist/malp/metrics/agreement.d.ts +0 -106
  236. package/dist/malp/metrics/agreement.d.ts.map +0 -1
  237. package/dist/malp/metrics/agreement.js +0 -199
  238. package/dist/malp/metrics/agreement.js.map +0 -1
  239. package/dist/malp/metrics/comparison.d.ts +0 -93
  240. package/dist/malp/metrics/comparison.d.ts.map +0 -1
  241. package/dist/malp/metrics/comparison.js +0 -256
  242. package/dist/malp/metrics/comparison.js.map +0 -1
  243. package/dist/malp/metrics/index.d.ts +0 -8
  244. package/dist/malp/metrics/index.d.ts.map +0 -1
  245. package/dist/malp/metrics/index.js +0 -8
  246. package/dist/malp/metrics/index.js.map +0 -1
  247. package/dist/malp/metrics/performance.d.ts +0 -61
  248. package/dist/malp/metrics/performance.d.ts.map +0 -1
  249. package/dist/malp/metrics/performance.js +0 -190
  250. package/dist/malp/metrics/performance.js.map +0 -1
  251. package/dist/malp/models/index.d.ts +0 -7
  252. package/dist/malp/models/index.d.ts.map +0 -1
  253. package/dist/malp/models/index.js +0 -7
  254. package/dist/malp/models/index.js.map +0 -1
  255. package/dist/malp/models/malp.d.ts +0 -116
  256. package/dist/malp/models/malp.d.ts.map +0 -1
  257. package/dist/malp/models/malp.js +0 -206
  258. package/dist/malp/models/malp.js.map +0 -1
  259. package/dist/malp/models/regressor.d.ts +0 -80
  260. package/dist/malp/models/regressor.d.ts.map +0 -1
  261. package/dist/malp/models/regressor.js +0 -229
  262. package/dist/malp/models/regressor.js.map +0 -1
  263. package/dist/malp/reasoningbank_validator.d.ts +0 -187
  264. package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
  265. package/dist/malp/reasoningbank_validator.js +0 -246
  266. package/dist/malp/reasoningbank_validator.js.map +0 -1
  267. package/dist/malp/wasm_bindings.d.ts +0 -344
  268. package/dist/malp/wasm_bindings.d.ts.map +0 -1
  269. package/dist/malp/wasm_bindings.js +0 -9
  270. package/dist/malp/wasm_bindings.js.map +0 -1
  271. package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
  272. package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
  273. package/dist/mcp/agentdb-mcp-server.js +0 -2116
  274. package/dist/mcp/agentdb-mcp-server.js.map +0 -1
  275. package/dist/mcp/learning-tools-handlers.d.ts +0 -16
  276. package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
  277. package/dist/mcp/learning-tools-handlers.js +0 -105
  278. package/dist/mcp/learning-tools-handlers.js.map +0 -1
  279. package/dist/optimizations/BatchOperations.d.ts +0 -109
  280. package/dist/optimizations/BatchOperations.d.ts.map +0 -1
  281. package/dist/optimizations/BatchOperations.js +0 -407
  282. package/dist/optimizations/BatchOperations.js.map +0 -1
  283. package/dist/optimizations/QueryOptimizer.d.ts +0 -83
  284. package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
  285. package/dist/optimizations/QueryOptimizer.js +0 -228
  286. package/dist/optimizations/QueryOptimizer.js.map +0 -1
  287. package/dist/optimizations/ToolCache.d.ts +0 -137
  288. package/dist/optimizations/ToolCache.d.ts.map +0 -1
  289. package/dist/optimizations/ToolCache.js +0 -281
  290. package/dist/optimizations/ToolCache.js.map +0 -1
  291. package/dist/optimizations/index.d.ts +0 -10
  292. package/dist/optimizations/index.d.ts.map +0 -1
  293. package/dist/optimizations/index.js +0 -8
  294. package/dist/optimizations/index.js.map +0 -1
  295. package/dist/security/input-validation.d.ts +0 -109
  296. package/dist/security/input-validation.d.ts.map +0 -1
  297. package/dist/security/input-validation.js +0 -398
  298. package/dist/security/input-validation.js.map +0 -1
  299. package/dist/security/limits.d.ts +0 -150
  300. package/dist/security/limits.d.ts.map +0 -1
  301. package/dist/security/limits.js +0 -288
  302. package/dist/security/limits.js.map +0 -1
  303. package/dist/security/path-security.d.ts +0 -100
  304. package/dist/security/path-security.d.ts.map +0 -1
  305. package/dist/security/path-security.js +0 -337
  306. package/dist/security/path-security.js.map +0 -1
  307. package/dist/security/validation.d.ts +0 -95
  308. package/dist/security/validation.d.ts.map +0 -1
  309. package/dist/security/validation.js +0 -315
  310. package/dist/security/validation.js.map +0 -1
  311. package/dist/types/quic.d.ts +0 -518
  312. package/dist/types/quic.d.ts.map +0 -1
  313. package/dist/types/quic.js +0 -272
  314. 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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"}