@danielsimonjr/memoryjs 1.0.0 → 1.2.0

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 (300) hide show
  1. package/README.md +385 -113
  2. package/README.md.backup-1768084780988 +266 -0
  3. package/dist/index.cjs +24156 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +16967 -0
  6. package/dist/index.d.ts +16963 -11
  7. package/dist/index.js +23887 -19
  8. package/dist/index.js.map +1 -1
  9. package/dist/workers/levenshteinWorker.cjs +102 -0
  10. package/dist/workers/levenshteinWorker.cjs.map +1 -0
  11. package/dist/workers/levenshteinWorker.js +57 -91
  12. package/dist/workers/levenshteinWorker.js.map +1 -1
  13. package/package.json +75 -69
  14. package/dist/core/EntityManager.d.ts +0 -268
  15. package/dist/core/EntityManager.d.ts.map +0 -1
  16. package/dist/core/EntityManager.js +0 -512
  17. package/dist/core/EntityManager.js.map +0 -1
  18. package/dist/core/GraphEventEmitter.d.ts +0 -202
  19. package/dist/core/GraphEventEmitter.d.ts.map +0 -1
  20. package/dist/core/GraphEventEmitter.js +0 -347
  21. package/dist/core/GraphEventEmitter.js.map +0 -1
  22. package/dist/core/GraphStorage.d.ts +0 -395
  23. package/dist/core/GraphStorage.d.ts.map +0 -1
  24. package/dist/core/GraphStorage.js +0 -786
  25. package/dist/core/GraphStorage.js.map +0 -1
  26. package/dist/core/GraphTraversal.d.ts +0 -141
  27. package/dist/core/GraphTraversal.d.ts.map +0 -1
  28. package/dist/core/GraphTraversal.js +0 -574
  29. package/dist/core/GraphTraversal.js.map +0 -1
  30. package/dist/core/HierarchyManager.d.ts +0 -111
  31. package/dist/core/HierarchyManager.d.ts.map +0 -1
  32. package/dist/core/HierarchyManager.js +0 -225
  33. package/dist/core/HierarchyManager.js.map +0 -1
  34. package/dist/core/ManagerContext.d.ts +0 -76
  35. package/dist/core/ManagerContext.d.ts.map +0 -1
  36. package/dist/core/ManagerContext.js +0 -129
  37. package/dist/core/ManagerContext.js.map +0 -1
  38. package/dist/core/ObservationManager.d.ts +0 -85
  39. package/dist/core/ObservationManager.d.ts.map +0 -1
  40. package/dist/core/ObservationManager.js +0 -124
  41. package/dist/core/ObservationManager.js.map +0 -1
  42. package/dist/core/RelationManager.d.ts +0 -131
  43. package/dist/core/RelationManager.d.ts.map +0 -1
  44. package/dist/core/RelationManager.js +0 -212
  45. package/dist/core/RelationManager.js.map +0 -1
  46. package/dist/core/SQLiteStorage.d.ts +0 -354
  47. package/dist/core/SQLiteStorage.d.ts.map +0 -1
  48. package/dist/core/SQLiteStorage.js +0 -919
  49. package/dist/core/SQLiteStorage.js.map +0 -1
  50. package/dist/core/StorageFactory.d.ts +0 -45
  51. package/dist/core/StorageFactory.d.ts.map +0 -1
  52. package/dist/core/StorageFactory.js +0 -65
  53. package/dist/core/StorageFactory.js.map +0 -1
  54. package/dist/core/TransactionManager.d.ts +0 -464
  55. package/dist/core/TransactionManager.d.ts.map +0 -1
  56. package/dist/core/TransactionManager.js +0 -869
  57. package/dist/core/TransactionManager.js.map +0 -1
  58. package/dist/core/index.d.ts +0 -17
  59. package/dist/core/index.d.ts.map +0 -1
  60. package/dist/core/index.js +0 -20
  61. package/dist/core/index.js.map +0 -1
  62. package/dist/features/AnalyticsManager.d.ts +0 -44
  63. package/dist/features/AnalyticsManager.d.ts.map +0 -1
  64. package/dist/features/AnalyticsManager.js +0 -224
  65. package/dist/features/AnalyticsManager.js.map +0 -1
  66. package/dist/features/ArchiveManager.d.ts +0 -133
  67. package/dist/features/ArchiveManager.d.ts.map +0 -1
  68. package/dist/features/ArchiveManager.js +0 -282
  69. package/dist/features/ArchiveManager.js.map +0 -1
  70. package/dist/features/CompressionManager.d.ts +0 -119
  71. package/dist/features/CompressionManager.d.ts.map +0 -1
  72. package/dist/features/CompressionManager.js +0 -470
  73. package/dist/features/CompressionManager.js.map +0 -1
  74. package/dist/features/IOManager.d.ts +0 -225
  75. package/dist/features/IOManager.d.ts.map +0 -1
  76. package/dist/features/IOManager.js +0 -1093
  77. package/dist/features/IOManager.js.map +0 -1
  78. package/dist/features/KeywordExtractor.d.ts +0 -61
  79. package/dist/features/KeywordExtractor.d.ts.map +0 -1
  80. package/dist/features/KeywordExtractor.js +0 -127
  81. package/dist/features/KeywordExtractor.js.map +0 -1
  82. package/dist/features/ObservationNormalizer.d.ts +0 -90
  83. package/dist/features/ObservationNormalizer.d.ts.map +0 -1
  84. package/dist/features/ObservationNormalizer.js +0 -194
  85. package/dist/features/ObservationNormalizer.js.map +0 -1
  86. package/dist/features/StreamingExporter.d.ts +0 -128
  87. package/dist/features/StreamingExporter.d.ts.map +0 -1
  88. package/dist/features/StreamingExporter.js +0 -212
  89. package/dist/features/StreamingExporter.js.map +0 -1
  90. package/dist/features/TagManager.d.ts +0 -147
  91. package/dist/features/TagManager.d.ts.map +0 -1
  92. package/dist/features/TagManager.js +0 -211
  93. package/dist/features/TagManager.js.map +0 -1
  94. package/dist/features/index.d.ts +0 -14
  95. package/dist/features/index.d.ts.map +0 -1
  96. package/dist/features/index.js +0 -15
  97. package/dist/features/index.js.map +0 -1
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/search/BM25Search.d.ts +0 -148
  100. package/dist/search/BM25Search.d.ts.map +0 -1
  101. package/dist/search/BM25Search.js +0 -340
  102. package/dist/search/BM25Search.js.map +0 -1
  103. package/dist/search/BasicSearch.d.ts +0 -51
  104. package/dist/search/BasicSearch.d.ts.map +0 -1
  105. package/dist/search/BasicSearch.js +0 -138
  106. package/dist/search/BasicSearch.js.map +0 -1
  107. package/dist/search/BooleanSearch.d.ts +0 -98
  108. package/dist/search/BooleanSearch.d.ts.map +0 -1
  109. package/dist/search/BooleanSearch.js +0 -431
  110. package/dist/search/BooleanSearch.js.map +0 -1
  111. package/dist/search/EarlyTerminationManager.d.ts +0 -140
  112. package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
  113. package/dist/search/EarlyTerminationManager.js +0 -280
  114. package/dist/search/EarlyTerminationManager.js.map +0 -1
  115. package/dist/search/EmbeddingCache.d.ts +0 -175
  116. package/dist/search/EmbeddingCache.d.ts.map +0 -1
  117. package/dist/search/EmbeddingCache.js +0 -247
  118. package/dist/search/EmbeddingCache.js.map +0 -1
  119. package/dist/search/EmbeddingService.d.ts +0 -277
  120. package/dist/search/EmbeddingService.d.ts.map +0 -1
  121. package/dist/search/EmbeddingService.js +0 -531
  122. package/dist/search/EmbeddingService.js.map +0 -1
  123. package/dist/search/FuzzySearch.d.ts +0 -118
  124. package/dist/search/FuzzySearch.d.ts.map +0 -1
  125. package/dist/search/FuzzySearch.js +0 -313
  126. package/dist/search/FuzzySearch.js.map +0 -1
  127. package/dist/search/HybridScorer.d.ts +0 -181
  128. package/dist/search/HybridScorer.d.ts.map +0 -1
  129. package/dist/search/HybridScorer.js +0 -258
  130. package/dist/search/HybridScorer.js.map +0 -1
  131. package/dist/search/HybridSearchManager.d.ts +0 -80
  132. package/dist/search/HybridSearchManager.d.ts.map +0 -1
  133. package/dist/search/HybridSearchManager.js +0 -188
  134. package/dist/search/HybridSearchManager.js.map +0 -1
  135. package/dist/search/IncrementalIndexer.d.ts +0 -201
  136. package/dist/search/IncrementalIndexer.d.ts.map +0 -1
  137. package/dist/search/IncrementalIndexer.js +0 -343
  138. package/dist/search/IncrementalIndexer.js.map +0 -1
  139. package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
  140. package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
  141. package/dist/search/OptimizedInvertedIndex.js +0 -359
  142. package/dist/search/OptimizedInvertedIndex.js.map +0 -1
  143. package/dist/search/ParallelSearchExecutor.d.ts +0 -172
  144. package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
  145. package/dist/search/ParallelSearchExecutor.js +0 -310
  146. package/dist/search/ParallelSearchExecutor.js.map +0 -1
  147. package/dist/search/QuantizedVectorStore.d.ts +0 -171
  148. package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
  149. package/dist/search/QuantizedVectorStore.js +0 -308
  150. package/dist/search/QuantizedVectorStore.js.map +0 -1
  151. package/dist/search/QueryAnalyzer.d.ts +0 -76
  152. package/dist/search/QueryAnalyzer.d.ts.map +0 -1
  153. package/dist/search/QueryAnalyzer.js +0 -228
  154. package/dist/search/QueryAnalyzer.js.map +0 -1
  155. package/dist/search/QueryCostEstimator.d.ts +0 -244
  156. package/dist/search/QueryCostEstimator.d.ts.map +0 -1
  157. package/dist/search/QueryCostEstimator.js +0 -653
  158. package/dist/search/QueryCostEstimator.js.map +0 -1
  159. package/dist/search/QueryPlanCache.d.ts +0 -220
  160. package/dist/search/QueryPlanCache.d.ts.map +0 -1
  161. package/dist/search/QueryPlanCache.js +0 -380
  162. package/dist/search/QueryPlanCache.js.map +0 -1
  163. package/dist/search/QueryPlanner.d.ts +0 -58
  164. package/dist/search/QueryPlanner.d.ts.map +0 -1
  165. package/dist/search/QueryPlanner.js +0 -138
  166. package/dist/search/QueryPlanner.js.map +0 -1
  167. package/dist/search/RankedSearch.d.ts +0 -71
  168. package/dist/search/RankedSearch.d.ts.map +0 -1
  169. package/dist/search/RankedSearch.js +0 -239
  170. package/dist/search/RankedSearch.js.map +0 -1
  171. package/dist/search/ReflectionManager.d.ts +0 -120
  172. package/dist/search/ReflectionManager.d.ts.map +0 -1
  173. package/dist/search/ReflectionManager.js +0 -232
  174. package/dist/search/ReflectionManager.js.map +0 -1
  175. package/dist/search/SavedSearchManager.d.ts +0 -79
  176. package/dist/search/SavedSearchManager.d.ts.map +0 -1
  177. package/dist/search/SavedSearchManager.js +0 -147
  178. package/dist/search/SavedSearchManager.js.map +0 -1
  179. package/dist/search/SearchFilterChain.d.ts +0 -120
  180. package/dist/search/SearchFilterChain.d.ts.map +0 -1
  181. package/dist/search/SearchFilterChain.js +0 -186
  182. package/dist/search/SearchFilterChain.js.map +0 -1
  183. package/dist/search/SearchManager.d.ts +0 -326
  184. package/dist/search/SearchManager.d.ts.map +0 -1
  185. package/dist/search/SearchManager.js +0 -454
  186. package/dist/search/SearchManager.js.map +0 -1
  187. package/dist/search/SearchSuggestions.d.ts +0 -27
  188. package/dist/search/SearchSuggestions.d.ts.map +0 -1
  189. package/dist/search/SearchSuggestions.js +0 -58
  190. package/dist/search/SearchSuggestions.js.map +0 -1
  191. package/dist/search/SemanticSearch.d.ts +0 -149
  192. package/dist/search/SemanticSearch.d.ts.map +0 -1
  193. package/dist/search/SemanticSearch.js +0 -324
  194. package/dist/search/SemanticSearch.js.map +0 -1
  195. package/dist/search/SymbolicSearch.d.ts +0 -61
  196. package/dist/search/SymbolicSearch.d.ts.map +0 -1
  197. package/dist/search/SymbolicSearch.js +0 -164
  198. package/dist/search/SymbolicSearch.js.map +0 -1
  199. package/dist/search/TFIDFEventSync.d.ts +0 -85
  200. package/dist/search/TFIDFEventSync.d.ts.map +0 -1
  201. package/dist/search/TFIDFEventSync.js +0 -134
  202. package/dist/search/TFIDFEventSync.js.map +0 -1
  203. package/dist/search/TFIDFIndexManager.d.ts +0 -151
  204. package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
  205. package/dist/search/TFIDFIndexManager.js +0 -433
  206. package/dist/search/TFIDFIndexManager.js.map +0 -1
  207. package/dist/search/VectorStore.d.ts +0 -235
  208. package/dist/search/VectorStore.d.ts.map +0 -1
  209. package/dist/search/VectorStore.js +0 -312
  210. package/dist/search/VectorStore.js.map +0 -1
  211. package/dist/search/index.d.ts +0 -35
  212. package/dist/search/index.d.ts.map +0 -1
  213. package/dist/search/index.js +0 -53
  214. package/dist/search/index.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -13
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -13
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/types.d.ts +0 -1811
  220. package/dist/types/types.d.ts.map +0 -1
  221. package/dist/types/types.js +0 -10
  222. package/dist/types/types.js.map +0 -1
  223. package/dist/utils/BatchProcessor.d.ts +0 -271
  224. package/dist/utils/BatchProcessor.d.ts.map +0 -1
  225. package/dist/utils/BatchProcessor.js +0 -377
  226. package/dist/utils/BatchProcessor.js.map +0 -1
  227. package/dist/utils/MemoryMonitor.d.ts +0 -176
  228. package/dist/utils/MemoryMonitor.d.ts.map +0 -1
  229. package/dist/utils/MemoryMonitor.js +0 -306
  230. package/dist/utils/MemoryMonitor.js.map +0 -1
  231. package/dist/utils/WorkerPoolManager.d.ts +0 -233
  232. package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
  233. package/dist/utils/WorkerPoolManager.js +0 -421
  234. package/dist/utils/WorkerPoolManager.js.map +0 -1
  235. package/dist/utils/compressedCache.d.ts +0 -221
  236. package/dist/utils/compressedCache.d.ts.map +0 -1
  237. package/dist/utils/compressedCache.js +0 -349
  238. package/dist/utils/compressedCache.js.map +0 -1
  239. package/dist/utils/compressionUtil.d.ts +0 -214
  240. package/dist/utils/compressionUtil.d.ts.map +0 -1
  241. package/dist/utils/compressionUtil.js +0 -248
  242. package/dist/utils/compressionUtil.js.map +0 -1
  243. package/dist/utils/constants.d.ts +0 -245
  244. package/dist/utils/constants.d.ts.map +0 -1
  245. package/dist/utils/constants.js +0 -253
  246. package/dist/utils/constants.js.map +0 -1
  247. package/dist/utils/entityUtils.d.ts +0 -379
  248. package/dist/utils/entityUtils.d.ts.map +0 -1
  249. package/dist/utils/entityUtils.js +0 -649
  250. package/dist/utils/entityUtils.js.map +0 -1
  251. package/dist/utils/errors.d.ts +0 -95
  252. package/dist/utils/errors.d.ts.map +0 -1
  253. package/dist/utils/errors.js +0 -146
  254. package/dist/utils/errors.js.map +0 -1
  255. package/dist/utils/formatters.d.ts +0 -145
  256. package/dist/utils/formatters.d.ts.map +0 -1
  257. package/dist/utils/formatters.js +0 -133
  258. package/dist/utils/formatters.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -26
  260. package/dist/utils/index.d.ts.map +0 -1
  261. package/dist/utils/index.js +0 -88
  262. package/dist/utils/index.js.map +0 -1
  263. package/dist/utils/indexes.d.ts +0 -270
  264. package/dist/utils/indexes.d.ts.map +0 -1
  265. package/dist/utils/indexes.js +0 -527
  266. package/dist/utils/indexes.js.map +0 -1
  267. package/dist/utils/logger.d.ts +0 -31
  268. package/dist/utils/logger.d.ts.map +0 -1
  269. package/dist/utils/logger.js +0 -41
  270. package/dist/utils/logger.js.map +0 -1
  271. package/dist/utils/operationUtils.d.ts +0 -124
  272. package/dist/utils/operationUtils.d.ts.map +0 -1
  273. package/dist/utils/operationUtils.js +0 -176
  274. package/dist/utils/operationUtils.js.map +0 -1
  275. package/dist/utils/parallelUtils.d.ts +0 -76
  276. package/dist/utils/parallelUtils.d.ts.map +0 -1
  277. package/dist/utils/parallelUtils.js +0 -192
  278. package/dist/utils/parallelUtils.js.map +0 -1
  279. package/dist/utils/schemas.d.ts +0 -556
  280. package/dist/utils/schemas.d.ts.map +0 -1
  281. package/dist/utils/schemas.js +0 -485
  282. package/dist/utils/schemas.js.map +0 -1
  283. package/dist/utils/searchAlgorithms.d.ts +0 -99
  284. package/dist/utils/searchAlgorithms.d.ts.map +0 -1
  285. package/dist/utils/searchAlgorithms.js +0 -168
  286. package/dist/utils/searchAlgorithms.js.map +0 -1
  287. package/dist/utils/searchCache.d.ts +0 -108
  288. package/dist/utils/searchCache.d.ts.map +0 -1
  289. package/dist/utils/searchCache.js +0 -210
  290. package/dist/utils/searchCache.js.map +0 -1
  291. package/dist/utils/taskScheduler.d.ts +0 -294
  292. package/dist/utils/taskScheduler.d.ts.map +0 -1
  293. package/dist/utils/taskScheduler.js +0 -487
  294. package/dist/utils/taskScheduler.js.map +0 -1
  295. package/dist/workers/index.d.ts +0 -12
  296. package/dist/workers/index.d.ts.map +0 -1
  297. package/dist/workers/index.js +0 -10
  298. package/dist/workers/index.js.map +0 -1
  299. package/dist/workers/levenshteinWorker.d.ts +0 -60
  300. package/dist/workers/levenshteinWorker.d.ts.map +0 -1
@@ -1,232 +0,0 @@
1
- /**
2
- * Reflection Manager
3
- *
4
- * Phase 11: Implements reflection-based iterative retrieval
5
- * that refines results until adequate.
6
- *
7
- * @module search/ReflectionManager
8
- */
9
- /**
10
- * Reflection Manager for iterative retrieval refinement.
11
- *
12
- * Implements the SimpleMem-inspired reflection loop:
13
- * 1. Execute initial search
14
- * 2. Check result adequacy
15
- * 3. If inadequate, refine query and repeat
16
- * 4. Combine results from all iterations
17
- *
18
- * @example
19
- * ```typescript
20
- * const reflection = new ReflectionManager(hybridSearch, analyzer);
21
- * const result = await reflection.retrieveWithReflection(
22
- * graph,
23
- * 'What projects did Alice work on?',
24
- * { maxIterations: 3 }
25
- * );
26
- * ```
27
- */
28
- export class ReflectionManager {
29
- hybridSearch;
30
- analyzer;
31
- constructor(hybridSearch, analyzer) {
32
- this.hybridSearch = hybridSearch;
33
- this.analyzer = analyzer;
34
- }
35
- /**
36
- * Perform retrieval with reflection-based refinement.
37
- *
38
- * Phase 12 Sprint 4 enhancements:
39
- * - Progressive limit increase per round
40
- * - Focused query refinement based on missing information
41
- * - Detailed refinement history tracking
42
- */
43
- async retrieveWithReflection(graph, query, options = {}) {
44
- const { maxIterations = 3, adequacyThreshold = 0.7, minResults = 3, searchOptions = {}, limitIncreaseFactor = 1.5, initialLimit = 10, focusMissingTypes = true, } = options;
45
- const allResults = [];
46
- const refinements = [];
47
- const refinementHistory = [];
48
- let currentQuery = query;
49
- let iteration = 0;
50
- let adequacyScore = 0;
51
- let currentLimit = initialLimit;
52
- // Get initial analysis for tracking
53
- const analysis = this.analyzer.analyze(query);
54
- while (iteration < maxIterations) {
55
- iteration++;
56
- // Calculate current limit with progressive increase
57
- currentLimit = Math.round(initialLimit * Math.pow(limitIncreaseFactor, iteration - 1));
58
- // Execute search with current limit
59
- const results = await this.hybridSearch.searchWithEntities(graph, currentQuery, { ...searchOptions, limit: currentLimit });
60
- // Track results found this iteration (before deduplication)
61
- const newResultsCount = results.filter(r => !allResults.some(existing => existing.entity.name === r.entity.name)).length;
62
- // Add new results (deduplicated)
63
- for (const result of results) {
64
- if (!allResults.some(r => r.entity.name === result.entity.name)) {
65
- allResults.push(result);
66
- }
67
- }
68
- // Check adequacy
69
- const iterAnalysis = this.analyzer.analyze(currentQuery);
70
- adequacyScore = this.calculateAdequacy(allResults, iterAnalysis, minResults);
71
- // Determine missing info types
72
- const missingInfoTypes = this.findMissingInfoTypes(allResults, analysis);
73
- // Record history entry
74
- const historyEntry = {
75
- iteration,
76
- query: currentQuery,
77
- limit: currentLimit,
78
- resultsFound: newResultsCount,
79
- adequacyScore,
80
- };
81
- if (adequacyScore >= adequacyThreshold) {
82
- refinementHistory.push(historyEntry);
83
- break;
84
- }
85
- // Refine query if not adequate
86
- const refinedQuery = focusMissingTypes && missingInfoTypes.length > 0
87
- ? this.refineQueryFocused(currentQuery, allResults, analysis, missingInfoTypes)
88
- : this.refineQuery(currentQuery, allResults, analysis);
89
- if (refinedQuery === currentQuery) {
90
- // No refinement possible
91
- historyEntry.refinementReason = 'No further refinement possible';
92
- refinementHistory.push(historyEntry);
93
- break;
94
- }
95
- // Record refinement details in history
96
- historyEntry.refinementReason = this.getRefinementReason(currentQuery, refinedQuery, missingInfoTypes);
97
- historyEntry.missingInfoTypes = missingInfoTypes;
98
- refinementHistory.push(historyEntry);
99
- refinements.push(refinedQuery);
100
- currentQuery = refinedQuery;
101
- }
102
- return {
103
- results: allResults.sort((a, b) => b.scores.combined - a.scores.combined),
104
- iterations: iteration,
105
- adequate: adequacyScore >= adequacyThreshold,
106
- refinements,
107
- adequacyScore,
108
- refinementHistory,
109
- finalLimit: currentLimit,
110
- };
111
- }
112
- /**
113
- * Find missing information types based on analysis requirements.
114
- * @private
115
- */
116
- findMissingInfoTypes(results, analysis) {
117
- const coveredTypes = new Set();
118
- for (const result of results) {
119
- const entityType = result.entity.entityType.toLowerCase();
120
- coveredTypes.add(entityType);
121
- // Map entity types to info types
122
- if (['person', 'people', 'user', 'employee'].includes(entityType)) {
123
- coveredTypes.add('person');
124
- }
125
- if (['location', 'place', 'city', 'country', 'address'].includes(entityType)) {
126
- coveredTypes.add('location');
127
- }
128
- if (result.entity.createdAt || result.entity.lastModified) {
129
- coveredTypes.add('temporal');
130
- }
131
- // Entity type covers 'entity' requirement
132
- coveredTypes.add('entity');
133
- }
134
- // Find which required types are missing
135
- return analysis.requiredInfoTypes.filter(type => !coveredTypes.has(type));
136
- }
137
- /**
138
- * Refine query with focus on missing information types.
139
- * @private
140
- */
141
- refineQueryFocused(query, results, analysis, missingInfoTypes) {
142
- const additions = [];
143
- for (const missingType of missingInfoTypes) {
144
- switch (missingType) {
145
- case 'person':
146
- additions.push('person people who');
147
- break;
148
- case 'location':
149
- additions.push('location place where');
150
- break;
151
- case 'temporal':
152
- additions.push('when date time');
153
- break;
154
- case 'quantity':
155
- additions.push('count number how many');
156
- break;
157
- case 'reason':
158
- additions.push('reason why because');
159
- break;
160
- }
161
- }
162
- if (additions.length > 0) {
163
- // Add relevant keywords to query
164
- return `${query} ${additions.slice(0, 2).join(' ')}`;
165
- }
166
- // Fallback to standard refinement
167
- return this.refineQuery(query, results, analysis);
168
- }
169
- /**
170
- * Get human-readable reason for refinement.
171
- * @private
172
- */
173
- getRefinementReason(_originalQuery, refinedQuery, missingInfoTypes) {
174
- if (missingInfoTypes.length > 0) {
175
- return `Added keywords for missing info types: ${missingInfoTypes.join(', ')}`;
176
- }
177
- if (refinedQuery.includes('person people')) {
178
- return 'Expanded query to find person-related entities';
179
- }
180
- if (refinedQuery.includes('recent history timeline')) {
181
- return 'Added temporal context to query';
182
- }
183
- return 'Broadened query by removing constraints';
184
- }
185
- /**
186
- * Calculate result adequacy score.
187
- */
188
- calculateAdequacy(results, analysis, minResults) {
189
- let score = 0;
190
- const weights = { quantity: 0.4, diversity: 0.3, relevance: 0.3 };
191
- // Quantity: Do we have enough results?
192
- const quantityScore = Math.min(results.length / minResults, 1);
193
- score += quantityScore * weights.quantity;
194
- // Diversity: Do results cover different entity types?
195
- const types = new Set(results.map(r => r.entity.entityType));
196
- const diversityScore = Math.min(types.size / 3, 1);
197
- score += diversityScore * weights.diversity;
198
- // Relevance: Average combined score
199
- const avgScore = results.length > 0
200
- ? results.reduce((sum, r) => sum + r.scores.combined, 0) / results.length
201
- : 0;
202
- score += avgScore * weights.relevance;
203
- // Suppress unused parameter warning - analysis reserved for future enhancements
204
- void analysis;
205
- return score;
206
- }
207
- /**
208
- * Refine query based on current results and analysis.
209
- */
210
- refineQuery(query, results, analysis) {
211
- // Check what information types are missing
212
- const coveredTypes = new Set();
213
- for (const result of results) {
214
- coveredTypes.add(result.entity.entityType.toLowerCase());
215
- }
216
- // If looking for persons but no person results, refine
217
- if (analysis.requiredInfoTypes.includes('person') && !coveredTypes.has('person')) {
218
- return `${query} person people`;
219
- }
220
- // If temporal query but no temporal context, add time hint
221
- if (analysis.temporalRange && results.length < 3) {
222
- return `${query} recent history timeline`;
223
- }
224
- // Broaden query by removing constraints
225
- const broader = query.replace(/\b(only|just|exactly|specific)\b/gi, '');
226
- if (broader !== query) {
227
- return broader.trim();
228
- }
229
- return query;
230
- }
231
- }
232
- //# sourceMappingURL=ReflectionManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReflectionManager.js","sourceRoot":"","sources":["../../src/search/ReflectionManager.ts"],"names":[],"mappings":"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"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Saved Search Manager
3
- *
4
- * Manages persistent saved searches with JSONL storage.
5
- *
6
- * @module search/SavedSearchManager
7
- */
8
- import type { SavedSearch, KnowledgeGraph } from '../types/index.js';
9
- import type { BasicSearch } from './BasicSearch.js';
10
- /**
11
- * Manages saved search queries with usage tracking.
12
- */
13
- export declare class SavedSearchManager {
14
- private savedSearchesFilePath;
15
- private basicSearch;
16
- constructor(savedSearchesFilePath: string, basicSearch: BasicSearch);
17
- /**
18
- * Load all saved searches from JSONL file.
19
- *
20
- * @returns Array of saved searches
21
- */
22
- private loadSavedSearches;
23
- /**
24
- * Save searches to JSONL file.
25
- *
26
- * @param searches - Array of saved searches
27
- */
28
- private saveSavedSearches;
29
- /**
30
- * Save a search query for later reuse.
31
- *
32
- * @param search - Search parameters (without createdAt, useCount, lastUsed)
33
- * @returns The newly created saved search
34
- * @throws Error if search name already exists
35
- */
36
- saveSearch(search: Omit<SavedSearch, 'createdAt' | 'useCount' | 'lastUsed'>): Promise<SavedSearch>;
37
- /**
38
- * List all saved searches.
39
- *
40
- * @returns Array of all saved searches
41
- */
42
- listSavedSearches(): Promise<SavedSearch[]>;
43
- /**
44
- * Get a specific saved search by name.
45
- *
46
- * @param name - Search name
47
- * @returns Saved search or null if not found
48
- */
49
- getSavedSearch(name: string): Promise<SavedSearch | null>;
50
- /**
51
- * Execute a saved search by name.
52
- *
53
- * Updates usage statistics (lastUsed, useCount) before executing.
54
- *
55
- * @param name - Search name
56
- * @returns Search results as knowledge graph
57
- * @throws Error if search not found
58
- */
59
- executeSavedSearch(name: string): Promise<KnowledgeGraph>;
60
- /**
61
- * Delete a saved search.
62
- *
63
- * @param name - Search name
64
- * @returns True if deleted, false if not found
65
- */
66
- deleteSavedSearch(name: string): Promise<boolean>;
67
- /**
68
- * Update a saved search.
69
- *
70
- * Cannot update name, createdAt, useCount, or lastUsed fields.
71
- *
72
- * @param name - Search name
73
- * @param updates - Partial search with fields to update
74
- * @returns Updated saved search
75
- * @throws Error if search not found
76
- */
77
- updateSavedSearch(name: string, updates: Partial<Omit<SavedSearch, 'name' | 'createdAt' | 'useCount' | 'lastUsed'>>): Promise<SavedSearch>;
78
- }
79
- //# sourceMappingURL=SavedSearchManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SavedSearchManager.d.ts","sourceRoot":"","sources":["../../src/search/SavedSearchManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,qBAAqB;IAC7B,OAAO,CAAC,WAAW;gBADX,qBAAqB,EAAE,MAAM,EAC7B,WAAW,EAAE,WAAW;IAGlC;;;;OAIG;YACW,iBAAiB;IAa/B;;;;OAIG;YACW,iBAAiB;IAK/B;;;;;;OAMG;IACG,UAAU,CACd,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,GAC/D,OAAO,CAAC,WAAW,CAAC;IAoBvB;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIjD;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK/D;;;;;;;;OAQG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB/D;;;;;OAKG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAavD;;;;;;;;;OASG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,GAClF,OAAO,CAAC,WAAW,CAAC;CAcxB"}
@@ -1,147 +0,0 @@
1
- /**
2
- * Saved Search Manager
3
- *
4
- * Manages persistent saved searches with JSONL storage.
5
- *
6
- * @module search/SavedSearchManager
7
- */
8
- import * as fs from 'fs/promises';
9
- import { sanitizeObject } from '../utils/index.js';
10
- /**
11
- * Manages saved search queries with usage tracking.
12
- */
13
- export class SavedSearchManager {
14
- savedSearchesFilePath;
15
- basicSearch;
16
- constructor(savedSearchesFilePath, basicSearch) {
17
- this.savedSearchesFilePath = savedSearchesFilePath;
18
- this.basicSearch = basicSearch;
19
- }
20
- /**
21
- * Load all saved searches from JSONL file.
22
- *
23
- * @returns Array of saved searches
24
- */
25
- async loadSavedSearches() {
26
- try {
27
- const data = await fs.readFile(this.savedSearchesFilePath, 'utf-8');
28
- const lines = data.split('\n').filter((line) => line.trim() !== '');
29
- return lines.map((line) => JSON.parse(line));
30
- }
31
- catch (error) {
32
- if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
33
- return [];
34
- }
35
- throw error;
36
- }
37
- }
38
- /**
39
- * Save searches to JSONL file.
40
- *
41
- * @param searches - Array of saved searches
42
- */
43
- async saveSavedSearches(searches) {
44
- const lines = searches.map(s => JSON.stringify(s));
45
- await fs.writeFile(this.savedSearchesFilePath, lines.join('\n'));
46
- }
47
- /**
48
- * Save a search query for later reuse.
49
- *
50
- * @param search - Search parameters (without createdAt, useCount, lastUsed)
51
- * @returns The newly created saved search
52
- * @throws Error if search name already exists
53
- */
54
- async saveSearch(search) {
55
- const searches = await this.loadSavedSearches();
56
- // Check if name already exists
57
- if (searches.some(s => s.name === search.name)) {
58
- throw new Error(`Saved search with name "${search.name}" already exists`);
59
- }
60
- const newSearch = {
61
- ...search,
62
- createdAt: new Date().toISOString(),
63
- useCount: 0,
64
- };
65
- searches.push(newSearch);
66
- await this.saveSavedSearches(searches);
67
- return newSearch;
68
- }
69
- /**
70
- * List all saved searches.
71
- *
72
- * @returns Array of all saved searches
73
- */
74
- async listSavedSearches() {
75
- return await this.loadSavedSearches();
76
- }
77
- /**
78
- * Get a specific saved search by name.
79
- *
80
- * @param name - Search name
81
- * @returns Saved search or null if not found
82
- */
83
- async getSavedSearch(name) {
84
- const searches = await this.loadSavedSearches();
85
- return searches.find(s => s.name === name) || null;
86
- }
87
- /**
88
- * Execute a saved search by name.
89
- *
90
- * Updates usage statistics (lastUsed, useCount) before executing.
91
- *
92
- * @param name - Search name
93
- * @returns Search results as knowledge graph
94
- * @throws Error if search not found
95
- */
96
- async executeSavedSearch(name) {
97
- const searches = await this.loadSavedSearches();
98
- const search = searches.find(s => s.name === name);
99
- if (!search) {
100
- throw new Error(`Saved search "${name}" not found`);
101
- }
102
- // Update usage statistics
103
- search.lastUsed = new Date().toISOString();
104
- search.useCount++;
105
- await this.saveSavedSearches(searches);
106
- // Execute the search using BasicSearch
107
- return await this.basicSearch.searchNodes(search.query, search.tags, search.minImportance, search.maxImportance);
108
- }
109
- /**
110
- * Delete a saved search.
111
- *
112
- * @param name - Search name
113
- * @returns True if deleted, false if not found
114
- */
115
- async deleteSavedSearch(name) {
116
- const searches = await this.loadSavedSearches();
117
- const initialLength = searches.length;
118
- const filtered = searches.filter(s => s.name !== name);
119
- if (filtered.length === initialLength) {
120
- return false; // Search not found
121
- }
122
- await this.saveSavedSearches(filtered);
123
- return true;
124
- }
125
- /**
126
- * Update a saved search.
127
- *
128
- * Cannot update name, createdAt, useCount, or lastUsed fields.
129
- *
130
- * @param name - Search name
131
- * @param updates - Partial search with fields to update
132
- * @returns Updated saved search
133
- * @throws Error if search not found
134
- */
135
- async updateSavedSearch(name, updates) {
136
- const searches = await this.loadSavedSearches();
137
- const search = searches.find(s => s.name === name);
138
- if (!search) {
139
- throw new Error(`Saved search "${name}" not found`);
140
- }
141
- // Apply updates (sanitized to prevent prototype pollution)
142
- Object.assign(search, sanitizeObject(updates));
143
- await this.saveSavedSearches(searches);
144
- return search;
145
- }
146
- }
147
- //# sourceMappingURL=SavedSearchManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SavedSearchManager.js","sourceRoot":"","sources":["../../src/search/SavedSearchManager.ts"],"names":[],"mappings":"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"}
@@ -1,120 +0,0 @@
1
- /**
2
- * Search Filter Chain
3
- *
4
- * Centralizes filter logic for all search implementations to eliminate
5
- * duplicate filtering code across BasicSearch, BooleanSearch, FuzzySearch,
6
- * and RankedSearch.
7
- *
8
- * @module search/SearchFilterChain
9
- */
10
- import type { Entity } from '../types/index.js';
11
- import { type ValidatedPagination } from '../utils/index.js';
12
- /**
13
- * Search filter configuration options.
14
- * All filters are optional - entities pass if filter is not specified.
15
- */
16
- export interface SearchFilters {
17
- /** Tags to filter by (any match) */
18
- tags?: string[];
19
- /** Minimum importance (0-10, inclusive) */
20
- minImportance?: number;
21
- /** Maximum importance (0-10, inclusive) */
22
- maxImportance?: number;
23
- /** Entity type to filter by (exact match) */
24
- entityType?: string;
25
- /** Created after date (ISO 8601, inclusive) */
26
- createdAfter?: string;
27
- /** Created before date (ISO 8601, inclusive) */
28
- createdBefore?: string;
29
- /** Modified after date (ISO 8601, inclusive) */
30
- modifiedAfter?: string;
31
- /** Modified before date (ISO 8601, inclusive) */
32
- modifiedBefore?: string;
33
- }
34
- /**
35
- * Centralized filter chain for all search implementations.
36
- * Ensures consistent filtering behavior across search types.
37
- *
38
- * @example
39
- * ```typescript
40
- * const filters: SearchFilters = { tags: ['important'], minImportance: 5 };
41
- * const filtered = SearchFilterChain.applyFilters(entities, filters);
42
- * const pagination = SearchFilterChain.validatePagination(0, 50);
43
- * const result = SearchFilterChain.paginate(filtered, pagination);
44
- * ```
45
- */
46
- export declare class SearchFilterChain {
47
- /**
48
- * Applies all filters to an array of entities.
49
- * Entities must pass ALL specified filters to be included.
50
- *
51
- * @param entities - Entities to filter
52
- * @param filters - Filter criteria to apply
53
- * @returns Filtered entities array
54
- */
55
- static applyFilters(entities: readonly Entity[], filters: SearchFilters): Entity[];
56
- /**
57
- * Checks if an entity passes all active filters.
58
- * Short-circuits on first failing filter for performance.
59
- *
60
- * @param entity - Entity to check
61
- * @param filters - Filter criteria
62
- * @param normalizedSearchTags - Pre-normalized search tags (for efficiency)
63
- * @returns true if entity passes all filters
64
- */
65
- static entityPassesFilters(entity: Entity, filters: SearchFilters, normalizedSearchTags?: string[]): boolean;
66
- /**
67
- * Checks if any filters are actually specified.
68
- * Used for early return optimization.
69
- *
70
- * @param filters - Filter criteria to check
71
- * @returns true if at least one filter is active
72
- */
73
- static hasActiveFilters(filters: SearchFilters): boolean;
74
- /**
75
- * Validates and returns pagination parameters.
76
- * Delegates to paginationUtils.validatePagination.
77
- *
78
- * @param offset - Starting position
79
- * @param limit - Maximum results
80
- * @returns Validated pagination object
81
- */
82
- static validatePagination(offset?: number, limit?: number): ValidatedPagination;
83
- /**
84
- * Applies pagination to a filtered result set.
85
- *
86
- * @param entities - Entities to paginate
87
- * @param pagination - Validated pagination parameters
88
- * @returns Paginated slice of entities
89
- */
90
- static paginate(entities: Entity[], pagination: ValidatedPagination): Entity[];
91
- /**
92
- * Convenience method to apply both filters and pagination in one call.
93
- *
94
- * @param entities - Entities to process
95
- * @param filters - Filter criteria
96
- * @param offset - Pagination offset
97
- * @param limit - Pagination limit
98
- * @returns Filtered and paginated entities
99
- */
100
- static filterAndPaginate(entities: Entity[], filters: SearchFilters, offset?: number, limit?: number): Entity[];
101
- /**
102
- * Applies tag filter only. Useful when other filters are handled separately.
103
- *
104
- * @param entities - Entities to filter
105
- * @param tags - Tags to filter by
106
- * @returns Filtered entities
107
- */
108
- static filterByTags(entities: Entity[], tags?: string[]): Entity[];
109
- /**
110
- * Applies importance filter only. Useful when other filters are handled separately.
111
- *
112
- * @param entities - Entities to filter
113
- * @param minImportance - Minimum importance
114
- * @param maxImportance - Maximum importance
115
- * @returns Filtered entities
116
- */
117
- static filterByImportance(entities: Entity[], minImportance?: number, maxImportance?: number): Entity[];
118
- }
119
- export type { ValidatedPagination };
120
- //# sourceMappingURL=SearchFilterChain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SearchFilterChain.d.ts","sourceRoot":"","sources":["../../src/search/SearchFilterChain.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAML,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE;IAgBlF;;;;;;;;OAQG;IACH,MAAM,CAAC,mBAAmB,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAC9B,OAAO;IAsDV;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAaxD;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAE,MAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAIlF;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,mBAAmB,GAAG,MAAM,EAAE;IAI9E;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,MAAU,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,EAAE;IAMX;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAclE;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CACvB,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,EAAE;CASZ;AAGD,YAAY,EAAE,mBAAmB,EAAE,CAAC"}