@danielsimonjr/memoryjs 1.0.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 (295) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +266 -0
  3. package/dist/core/EntityManager.d.ts +268 -0
  4. package/dist/core/EntityManager.d.ts.map +1 -0
  5. package/dist/core/EntityManager.js +512 -0
  6. package/dist/core/EntityManager.js.map +1 -0
  7. package/dist/core/GraphEventEmitter.d.ts +202 -0
  8. package/dist/core/GraphEventEmitter.d.ts.map +1 -0
  9. package/dist/core/GraphEventEmitter.js +347 -0
  10. package/dist/core/GraphEventEmitter.js.map +1 -0
  11. package/dist/core/GraphStorage.d.ts +395 -0
  12. package/dist/core/GraphStorage.d.ts.map +1 -0
  13. package/dist/core/GraphStorage.js +786 -0
  14. package/dist/core/GraphStorage.js.map +1 -0
  15. package/dist/core/GraphTraversal.d.ts +141 -0
  16. package/dist/core/GraphTraversal.d.ts.map +1 -0
  17. package/dist/core/GraphTraversal.js +574 -0
  18. package/dist/core/GraphTraversal.js.map +1 -0
  19. package/dist/core/HierarchyManager.d.ts +111 -0
  20. package/dist/core/HierarchyManager.d.ts.map +1 -0
  21. package/dist/core/HierarchyManager.js +225 -0
  22. package/dist/core/HierarchyManager.js.map +1 -0
  23. package/dist/core/ManagerContext.d.ts +76 -0
  24. package/dist/core/ManagerContext.d.ts.map +1 -0
  25. package/dist/core/ManagerContext.js +129 -0
  26. package/dist/core/ManagerContext.js.map +1 -0
  27. package/dist/core/ObservationManager.d.ts +85 -0
  28. package/dist/core/ObservationManager.d.ts.map +1 -0
  29. package/dist/core/ObservationManager.js +124 -0
  30. package/dist/core/ObservationManager.js.map +1 -0
  31. package/dist/core/RelationManager.d.ts +131 -0
  32. package/dist/core/RelationManager.d.ts.map +1 -0
  33. package/dist/core/RelationManager.js +212 -0
  34. package/dist/core/RelationManager.js.map +1 -0
  35. package/dist/core/SQLiteStorage.d.ts +354 -0
  36. package/dist/core/SQLiteStorage.d.ts.map +1 -0
  37. package/dist/core/SQLiteStorage.js +919 -0
  38. package/dist/core/SQLiteStorage.js.map +1 -0
  39. package/dist/core/StorageFactory.d.ts +45 -0
  40. package/dist/core/StorageFactory.d.ts.map +1 -0
  41. package/dist/core/StorageFactory.js +65 -0
  42. package/dist/core/StorageFactory.js.map +1 -0
  43. package/dist/core/TransactionManager.d.ts +464 -0
  44. package/dist/core/TransactionManager.d.ts.map +1 -0
  45. package/dist/core/TransactionManager.js +869 -0
  46. package/dist/core/TransactionManager.js.map +1 -0
  47. package/dist/core/index.d.ts +17 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +20 -0
  50. package/dist/core/index.js.map +1 -0
  51. package/dist/features/AnalyticsManager.d.ts +44 -0
  52. package/dist/features/AnalyticsManager.d.ts.map +1 -0
  53. package/dist/features/AnalyticsManager.js +224 -0
  54. package/dist/features/AnalyticsManager.js.map +1 -0
  55. package/dist/features/ArchiveManager.d.ts +133 -0
  56. package/dist/features/ArchiveManager.d.ts.map +1 -0
  57. package/dist/features/ArchiveManager.js +282 -0
  58. package/dist/features/ArchiveManager.js.map +1 -0
  59. package/dist/features/CompressionManager.d.ts +119 -0
  60. package/dist/features/CompressionManager.d.ts.map +1 -0
  61. package/dist/features/CompressionManager.js +470 -0
  62. package/dist/features/CompressionManager.js.map +1 -0
  63. package/dist/features/IOManager.d.ts +225 -0
  64. package/dist/features/IOManager.d.ts.map +1 -0
  65. package/dist/features/IOManager.js +1093 -0
  66. package/dist/features/IOManager.js.map +1 -0
  67. package/dist/features/KeywordExtractor.d.ts +61 -0
  68. package/dist/features/KeywordExtractor.d.ts.map +1 -0
  69. package/dist/features/KeywordExtractor.js +127 -0
  70. package/dist/features/KeywordExtractor.js.map +1 -0
  71. package/dist/features/ObservationNormalizer.d.ts +90 -0
  72. package/dist/features/ObservationNormalizer.d.ts.map +1 -0
  73. package/dist/features/ObservationNormalizer.js +194 -0
  74. package/dist/features/ObservationNormalizer.js.map +1 -0
  75. package/dist/features/StreamingExporter.d.ts +128 -0
  76. package/dist/features/StreamingExporter.d.ts.map +1 -0
  77. package/dist/features/StreamingExporter.js +212 -0
  78. package/dist/features/StreamingExporter.js.map +1 -0
  79. package/dist/features/TagManager.d.ts +147 -0
  80. package/dist/features/TagManager.d.ts.map +1 -0
  81. package/dist/features/TagManager.js +211 -0
  82. package/dist/features/TagManager.js.map +1 -0
  83. package/dist/features/index.d.ts +14 -0
  84. package/dist/features/index.d.ts.map +1 -0
  85. package/dist/features/index.js +15 -0
  86. package/dist/features/index.js.map +1 -0
  87. package/dist/index.d.ts +15 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +20 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/search/BM25Search.d.ts +148 -0
  92. package/dist/search/BM25Search.d.ts.map +1 -0
  93. package/dist/search/BM25Search.js +340 -0
  94. package/dist/search/BM25Search.js.map +1 -0
  95. package/dist/search/BasicSearch.d.ts +51 -0
  96. package/dist/search/BasicSearch.d.ts.map +1 -0
  97. package/dist/search/BasicSearch.js +138 -0
  98. package/dist/search/BasicSearch.js.map +1 -0
  99. package/dist/search/BooleanSearch.d.ts +98 -0
  100. package/dist/search/BooleanSearch.d.ts.map +1 -0
  101. package/dist/search/BooleanSearch.js +431 -0
  102. package/dist/search/BooleanSearch.js.map +1 -0
  103. package/dist/search/EarlyTerminationManager.d.ts +140 -0
  104. package/dist/search/EarlyTerminationManager.d.ts.map +1 -0
  105. package/dist/search/EarlyTerminationManager.js +280 -0
  106. package/dist/search/EarlyTerminationManager.js.map +1 -0
  107. package/dist/search/EmbeddingCache.d.ts +175 -0
  108. package/dist/search/EmbeddingCache.d.ts.map +1 -0
  109. package/dist/search/EmbeddingCache.js +247 -0
  110. package/dist/search/EmbeddingCache.js.map +1 -0
  111. package/dist/search/EmbeddingService.d.ts +277 -0
  112. package/dist/search/EmbeddingService.d.ts.map +1 -0
  113. package/dist/search/EmbeddingService.js +531 -0
  114. package/dist/search/EmbeddingService.js.map +1 -0
  115. package/dist/search/FuzzySearch.d.ts +118 -0
  116. package/dist/search/FuzzySearch.d.ts.map +1 -0
  117. package/dist/search/FuzzySearch.js +313 -0
  118. package/dist/search/FuzzySearch.js.map +1 -0
  119. package/dist/search/HybridScorer.d.ts +181 -0
  120. package/dist/search/HybridScorer.d.ts.map +1 -0
  121. package/dist/search/HybridScorer.js +258 -0
  122. package/dist/search/HybridScorer.js.map +1 -0
  123. package/dist/search/HybridSearchManager.d.ts +80 -0
  124. package/dist/search/HybridSearchManager.d.ts.map +1 -0
  125. package/dist/search/HybridSearchManager.js +188 -0
  126. package/dist/search/HybridSearchManager.js.map +1 -0
  127. package/dist/search/IncrementalIndexer.d.ts +201 -0
  128. package/dist/search/IncrementalIndexer.d.ts.map +1 -0
  129. package/dist/search/IncrementalIndexer.js +343 -0
  130. package/dist/search/IncrementalIndexer.js.map +1 -0
  131. package/dist/search/OptimizedInvertedIndex.d.ts +163 -0
  132. package/dist/search/OptimizedInvertedIndex.d.ts.map +1 -0
  133. package/dist/search/OptimizedInvertedIndex.js +359 -0
  134. package/dist/search/OptimizedInvertedIndex.js.map +1 -0
  135. package/dist/search/ParallelSearchExecutor.d.ts +172 -0
  136. package/dist/search/ParallelSearchExecutor.d.ts.map +1 -0
  137. package/dist/search/ParallelSearchExecutor.js +310 -0
  138. package/dist/search/ParallelSearchExecutor.js.map +1 -0
  139. package/dist/search/QuantizedVectorStore.d.ts +171 -0
  140. package/dist/search/QuantizedVectorStore.d.ts.map +1 -0
  141. package/dist/search/QuantizedVectorStore.js +308 -0
  142. package/dist/search/QuantizedVectorStore.js.map +1 -0
  143. package/dist/search/QueryAnalyzer.d.ts +76 -0
  144. package/dist/search/QueryAnalyzer.d.ts.map +1 -0
  145. package/dist/search/QueryAnalyzer.js +228 -0
  146. package/dist/search/QueryAnalyzer.js.map +1 -0
  147. package/dist/search/QueryCostEstimator.d.ts +244 -0
  148. package/dist/search/QueryCostEstimator.d.ts.map +1 -0
  149. package/dist/search/QueryCostEstimator.js +653 -0
  150. package/dist/search/QueryCostEstimator.js.map +1 -0
  151. package/dist/search/QueryPlanCache.d.ts +220 -0
  152. package/dist/search/QueryPlanCache.d.ts.map +1 -0
  153. package/dist/search/QueryPlanCache.js +380 -0
  154. package/dist/search/QueryPlanCache.js.map +1 -0
  155. package/dist/search/QueryPlanner.d.ts +58 -0
  156. package/dist/search/QueryPlanner.d.ts.map +1 -0
  157. package/dist/search/QueryPlanner.js +138 -0
  158. package/dist/search/QueryPlanner.js.map +1 -0
  159. package/dist/search/RankedSearch.d.ts +71 -0
  160. package/dist/search/RankedSearch.d.ts.map +1 -0
  161. package/dist/search/RankedSearch.js +239 -0
  162. package/dist/search/RankedSearch.js.map +1 -0
  163. package/dist/search/ReflectionManager.d.ts +120 -0
  164. package/dist/search/ReflectionManager.d.ts.map +1 -0
  165. package/dist/search/ReflectionManager.js +232 -0
  166. package/dist/search/ReflectionManager.js.map +1 -0
  167. package/dist/search/SavedSearchManager.d.ts +79 -0
  168. package/dist/search/SavedSearchManager.d.ts.map +1 -0
  169. package/dist/search/SavedSearchManager.js +147 -0
  170. package/dist/search/SavedSearchManager.js.map +1 -0
  171. package/dist/search/SearchFilterChain.d.ts +120 -0
  172. package/dist/search/SearchFilterChain.d.ts.map +1 -0
  173. package/dist/search/SearchFilterChain.js +186 -0
  174. package/dist/search/SearchFilterChain.js.map +1 -0
  175. package/dist/search/SearchManager.d.ts +326 -0
  176. package/dist/search/SearchManager.d.ts.map +1 -0
  177. package/dist/search/SearchManager.js +454 -0
  178. package/dist/search/SearchManager.js.map +1 -0
  179. package/dist/search/SearchSuggestions.d.ts +27 -0
  180. package/dist/search/SearchSuggestions.d.ts.map +1 -0
  181. package/dist/search/SearchSuggestions.js +58 -0
  182. package/dist/search/SearchSuggestions.js.map +1 -0
  183. package/dist/search/SemanticSearch.d.ts +149 -0
  184. package/dist/search/SemanticSearch.d.ts.map +1 -0
  185. package/dist/search/SemanticSearch.js +324 -0
  186. package/dist/search/SemanticSearch.js.map +1 -0
  187. package/dist/search/SymbolicSearch.d.ts +61 -0
  188. package/dist/search/SymbolicSearch.d.ts.map +1 -0
  189. package/dist/search/SymbolicSearch.js +164 -0
  190. package/dist/search/SymbolicSearch.js.map +1 -0
  191. package/dist/search/TFIDFEventSync.d.ts +85 -0
  192. package/dist/search/TFIDFEventSync.d.ts.map +1 -0
  193. package/dist/search/TFIDFEventSync.js +134 -0
  194. package/dist/search/TFIDFEventSync.js.map +1 -0
  195. package/dist/search/TFIDFIndexManager.d.ts +151 -0
  196. package/dist/search/TFIDFIndexManager.d.ts.map +1 -0
  197. package/dist/search/TFIDFIndexManager.js +433 -0
  198. package/dist/search/TFIDFIndexManager.js.map +1 -0
  199. package/dist/search/VectorStore.d.ts +235 -0
  200. package/dist/search/VectorStore.d.ts.map +1 -0
  201. package/dist/search/VectorStore.js +312 -0
  202. package/dist/search/VectorStore.js.map +1 -0
  203. package/dist/search/index.d.ts +35 -0
  204. package/dist/search/index.d.ts.map +1 -0
  205. package/dist/search/index.js +53 -0
  206. package/dist/search/index.js.map +1 -0
  207. package/dist/types/index.d.ts +13 -0
  208. package/dist/types/index.d.ts.map +1 -0
  209. package/dist/types/index.js +13 -0
  210. package/dist/types/index.js.map +1 -0
  211. package/dist/types/types.d.ts +1811 -0
  212. package/dist/types/types.d.ts.map +1 -0
  213. package/dist/types/types.js +10 -0
  214. package/dist/types/types.js.map +1 -0
  215. package/dist/utils/BatchProcessor.d.ts +271 -0
  216. package/dist/utils/BatchProcessor.d.ts.map +1 -0
  217. package/dist/utils/BatchProcessor.js +377 -0
  218. package/dist/utils/BatchProcessor.js.map +1 -0
  219. package/dist/utils/MemoryMonitor.d.ts +176 -0
  220. package/dist/utils/MemoryMonitor.d.ts.map +1 -0
  221. package/dist/utils/MemoryMonitor.js +306 -0
  222. package/dist/utils/MemoryMonitor.js.map +1 -0
  223. package/dist/utils/WorkerPoolManager.d.ts +233 -0
  224. package/dist/utils/WorkerPoolManager.d.ts.map +1 -0
  225. package/dist/utils/WorkerPoolManager.js +421 -0
  226. package/dist/utils/WorkerPoolManager.js.map +1 -0
  227. package/dist/utils/compressedCache.d.ts +221 -0
  228. package/dist/utils/compressedCache.d.ts.map +1 -0
  229. package/dist/utils/compressedCache.js +349 -0
  230. package/dist/utils/compressedCache.js.map +1 -0
  231. package/dist/utils/compressionUtil.d.ts +214 -0
  232. package/dist/utils/compressionUtil.d.ts.map +1 -0
  233. package/dist/utils/compressionUtil.js +248 -0
  234. package/dist/utils/compressionUtil.js.map +1 -0
  235. package/dist/utils/constants.d.ts +245 -0
  236. package/dist/utils/constants.d.ts.map +1 -0
  237. package/dist/utils/constants.js +253 -0
  238. package/dist/utils/constants.js.map +1 -0
  239. package/dist/utils/entityUtils.d.ts +379 -0
  240. package/dist/utils/entityUtils.d.ts.map +1 -0
  241. package/dist/utils/entityUtils.js +649 -0
  242. package/dist/utils/entityUtils.js.map +1 -0
  243. package/dist/utils/errors.d.ts +95 -0
  244. package/dist/utils/errors.d.ts.map +1 -0
  245. package/dist/utils/errors.js +146 -0
  246. package/dist/utils/errors.js.map +1 -0
  247. package/dist/utils/formatters.d.ts +145 -0
  248. package/dist/utils/formatters.d.ts.map +1 -0
  249. package/dist/utils/formatters.js +133 -0
  250. package/dist/utils/formatters.js.map +1 -0
  251. package/dist/utils/index.d.ts +26 -0
  252. package/dist/utils/index.d.ts.map +1 -0
  253. package/dist/utils/index.js +88 -0
  254. package/dist/utils/index.js.map +1 -0
  255. package/dist/utils/indexes.d.ts +270 -0
  256. package/dist/utils/indexes.d.ts.map +1 -0
  257. package/dist/utils/indexes.js +527 -0
  258. package/dist/utils/indexes.js.map +1 -0
  259. package/dist/utils/logger.d.ts +31 -0
  260. package/dist/utils/logger.d.ts.map +1 -0
  261. package/dist/utils/logger.js +41 -0
  262. package/dist/utils/logger.js.map +1 -0
  263. package/dist/utils/operationUtils.d.ts +124 -0
  264. package/dist/utils/operationUtils.d.ts.map +1 -0
  265. package/dist/utils/operationUtils.js +176 -0
  266. package/dist/utils/operationUtils.js.map +1 -0
  267. package/dist/utils/parallelUtils.d.ts +76 -0
  268. package/dist/utils/parallelUtils.d.ts.map +1 -0
  269. package/dist/utils/parallelUtils.js +192 -0
  270. package/dist/utils/parallelUtils.js.map +1 -0
  271. package/dist/utils/schemas.d.ts +556 -0
  272. package/dist/utils/schemas.d.ts.map +1 -0
  273. package/dist/utils/schemas.js +485 -0
  274. package/dist/utils/schemas.js.map +1 -0
  275. package/dist/utils/searchAlgorithms.d.ts +99 -0
  276. package/dist/utils/searchAlgorithms.d.ts.map +1 -0
  277. package/dist/utils/searchAlgorithms.js +168 -0
  278. package/dist/utils/searchAlgorithms.js.map +1 -0
  279. package/dist/utils/searchCache.d.ts +108 -0
  280. package/dist/utils/searchCache.d.ts.map +1 -0
  281. package/dist/utils/searchCache.js +210 -0
  282. package/dist/utils/searchCache.js.map +1 -0
  283. package/dist/utils/taskScheduler.d.ts +294 -0
  284. package/dist/utils/taskScheduler.d.ts.map +1 -0
  285. package/dist/utils/taskScheduler.js +487 -0
  286. package/dist/utils/taskScheduler.js.map +1 -0
  287. package/dist/workers/index.d.ts +12 -0
  288. package/dist/workers/index.d.ts.map +1 -0
  289. package/dist/workers/index.js +10 -0
  290. package/dist/workers/index.js.map +1 -0
  291. package/dist/workers/levenshteinWorker.d.ts +60 -0
  292. package/dist/workers/levenshteinWorker.d.ts.map +1 -0
  293. package/dist/workers/levenshteinWorker.js +99 -0
  294. package/dist/workers/levenshteinWorker.js.map +1 -0
  295. package/package.json +69 -0
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Symbolic Search Layer
3
+ *
4
+ * Phase 11: Provides metadata-based filtering using structured predicates.
5
+ * Part of the three-layer hybrid search architecture.
6
+ *
7
+ * @module search/SymbolicSearch
8
+ */
9
+ /**
10
+ * Symbolic Search provides metadata-based filtering.
11
+ *
12
+ * Filters entities using structured predicates on tags, types,
13
+ * dates, importance, and hierarchy.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const symbolic = new SymbolicSearch();
18
+ * const results = symbolic.search(entities, {
19
+ * tags: ['important'],
20
+ * entityTypes: ['person'],
21
+ * importance: { min: 5 }
22
+ * });
23
+ * ```
24
+ */
25
+ export class SymbolicSearch {
26
+ /**
27
+ * Filter entities using structured metadata predicates.
28
+ * All filters are AND-combined.
29
+ *
30
+ * @param entities - Entities to filter
31
+ * @param filters - Symbolic filter criteria
32
+ * @returns Filtered entities with match scores
33
+ */
34
+ search(entities, filters) {
35
+ const results = [];
36
+ for (const entity of entities) {
37
+ const { matches, score, matchedFilters } = this.evaluateFilters(entity, filters);
38
+ if (matches) {
39
+ results.push({ entity, score, matchedFilters });
40
+ }
41
+ }
42
+ // Sort by score descending
43
+ return results.sort((a, b) => b.score - a.score);
44
+ }
45
+ /**
46
+ * Evaluate all filters against an entity.
47
+ */
48
+ evaluateFilters(entity, filters) {
49
+ const matchedFilters = [];
50
+ let totalFilters = 0;
51
+ let matchedCount = 0;
52
+ // Tag filter
53
+ if (filters.tags && filters.tags.length > 0) {
54
+ totalFilters++;
55
+ const entityTags = entity.tags ?? [];
56
+ const matchingTags = filters.tags.filter((t) => entityTags.some((et) => et.toLowerCase() === t.toLowerCase()));
57
+ if (matchingTags.length > 0) {
58
+ matchedCount++;
59
+ matchedFilters.push(`tags:${matchingTags.join(',')}`);
60
+ }
61
+ else {
62
+ return { matches: false, score: 0, matchedFilters: [] };
63
+ }
64
+ }
65
+ // Entity type filter
66
+ if (filters.entityTypes && filters.entityTypes.length > 0) {
67
+ totalFilters++;
68
+ if (filters.entityTypes.some((t) => t.toLowerCase() === entity.entityType.toLowerCase())) {
69
+ matchedCount++;
70
+ matchedFilters.push(`type:${entity.entityType}`);
71
+ }
72
+ else {
73
+ return { matches: false, score: 0, matchedFilters: [] };
74
+ }
75
+ }
76
+ // Date range filter
77
+ if (filters.dateRange) {
78
+ totalFilters++;
79
+ const entityDate = entity.createdAt || entity.lastModified;
80
+ if (!entityDate) {
81
+ // Entities without dates are excluded when date filter is applied
82
+ return { matches: false, score: 0, matchedFilters: [] };
83
+ }
84
+ const date = new Date(entityDate);
85
+ const start = filters.dateRange.start ? new Date(filters.dateRange.start) : null;
86
+ const end = filters.dateRange.end ? new Date(filters.dateRange.end) : null;
87
+ const inRange = (!start || date >= start) && (!end || date <= end);
88
+ if (inRange) {
89
+ matchedCount++;
90
+ matchedFilters.push('dateRange');
91
+ }
92
+ else {
93
+ return { matches: false, score: 0, matchedFilters: [] };
94
+ }
95
+ }
96
+ // Importance filter
97
+ if (filters.importance) {
98
+ totalFilters++;
99
+ const importance = entity.importance ?? 5;
100
+ const { min, max } = filters.importance;
101
+ const inRange = (min === undefined || importance >= min) &&
102
+ (max === undefined || importance <= max);
103
+ if (inRange) {
104
+ matchedCount++;
105
+ matchedFilters.push(`importance:${importance}`);
106
+ }
107
+ else {
108
+ return { matches: false, score: 0, matchedFilters: [] };
109
+ }
110
+ }
111
+ // Parent filter
112
+ if (filters.parentId !== undefined) {
113
+ totalFilters++;
114
+ if (entity.parentId === filters.parentId) {
115
+ matchedCount++;
116
+ matchedFilters.push(`parent:${filters.parentId}`);
117
+ }
118
+ else {
119
+ return { matches: false, score: 0, matchedFilters: [] };
120
+ }
121
+ }
122
+ // Has observations filter
123
+ if (filters.hasObservations !== undefined) {
124
+ totalFilters++;
125
+ const hasObs = entity.observations.length > 0;
126
+ if (hasObs === filters.hasObservations) {
127
+ matchedCount++;
128
+ matchedFilters.push('hasObservations');
129
+ }
130
+ else {
131
+ return { matches: false, score: 0, matchedFilters: [] };
132
+ }
133
+ }
134
+ // If no filters specified, match all with base score
135
+ if (totalFilters === 0) {
136
+ return { matches: true, score: 0.5, matchedFilters: [] };
137
+ }
138
+ // Score based on proportion of filters matched
139
+ const score = matchedCount / totalFilters;
140
+ return { matches: true, score, matchedFilters };
141
+ }
142
+ /**
143
+ * Get entities matching a specific tag.
144
+ */
145
+ byTag(entities, tag) {
146
+ return entities.filter(e => e.tags?.some(t => t.toLowerCase() === tag.toLowerCase()));
147
+ }
148
+ /**
149
+ * Get entities of a specific type.
150
+ */
151
+ byType(entities, entityType) {
152
+ return entities.filter(e => e.entityType.toLowerCase() === entityType.toLowerCase());
153
+ }
154
+ /**
155
+ * Get entities within importance range.
156
+ */
157
+ byImportance(entities, min, max) {
158
+ return entities.filter(e => {
159
+ const imp = e.importance ?? 5;
160
+ return imp >= min && imp <= max;
161
+ });
162
+ }
163
+ }
164
+ //# sourceMappingURL=SymbolicSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SymbolicSearch.js","sourceRoot":"","sources":["../../src/search/SymbolicSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * TF-IDF Event Sync
3
+ *
4
+ * Phase 10 Sprint 3: Hooks TFIDFIndexManager to graph events for automatic
5
+ * incremental index updates when entities change.
6
+ *
7
+ * @module search/TFIDFEventSync
8
+ */
9
+ import type { GraphEventEmitter } from '../core/GraphEventEmitter.js';
10
+ import type { TFIDFIndexManager } from './TFIDFIndexManager.js';
11
+ import type { IGraphStorage } from '../types/index.js';
12
+ /**
13
+ * Phase 10 Sprint 3: Synchronizes TF-IDF index with graph changes via events.
14
+ *
15
+ * Listens to graph events and triggers incremental index updates automatically.
16
+ * More efficient than rebuilding the entire index on every change.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const storage = new GraphStorage('/data/memory.jsonl');
21
+ * const indexManager = new TFIDFIndexManager('/data');
22
+ *
23
+ * // Load or build index
24
+ * await indexManager.loadIndex();
25
+ *
26
+ * // Enable automatic sync
27
+ * const sync = new TFIDFEventSync(indexManager, storage.events, storage);
28
+ * sync.enable();
29
+ *
30
+ * // Now entities added to storage will automatically update the index
31
+ * await storage.appendEntity({ name: 'New', entityType: 'test', observations: [] });
32
+ *
33
+ * // Disable when done
34
+ * sync.disable();
35
+ * ```
36
+ */
37
+ export declare class TFIDFEventSync {
38
+ private indexManager;
39
+ private eventEmitter;
40
+ private storage;
41
+ private unsubscribers;
42
+ private enabled;
43
+ /**
44
+ * Create a new TFIDFEventSync instance.
45
+ *
46
+ * @param indexManager - TFIDFIndexManager to sync
47
+ * @param eventEmitter - GraphEventEmitter to listen to
48
+ * @param storage - Storage to fetch entity data from (for updates)
49
+ */
50
+ constructor(indexManager: TFIDFIndexManager, eventEmitter: GraphEventEmitter, storage: IGraphStorage);
51
+ /**
52
+ * Enable automatic index synchronization.
53
+ *
54
+ * Subscribes to entity:created, entity:updated, and entity:deleted events.
55
+ */
56
+ enable(): void;
57
+ /**
58
+ * Disable automatic index synchronization.
59
+ *
60
+ * Unsubscribes from all events.
61
+ */
62
+ disable(): void;
63
+ /**
64
+ * Check if synchronization is enabled.
65
+ *
66
+ * @returns True if enabled
67
+ */
68
+ isEnabled(): boolean;
69
+ /**
70
+ * Handle entity:created event.
71
+ * @private
72
+ */
73
+ private handleEntityCreated;
74
+ /**
75
+ * Handle entity:updated event.
76
+ * @private
77
+ */
78
+ private handleEntityUpdated;
79
+ /**
80
+ * Handle entity:deleted event.
81
+ * @private
82
+ */
83
+ private handleEntityDeleted;
84
+ }
85
+ //# sourceMappingURL=TFIDFEventSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFIDFEventSync.d.ts","sourceRoot":"","sources":["../../src/search/TFIDFEventSync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAOvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAAkB;IAEjC;;;;;;OAMG;gBAED,YAAY,EAAE,iBAAiB,EAC/B,YAAY,EAAE,iBAAiB,EAC/B,OAAO,EAAE,aAAa;IAOxB;;;;OAIG;IACH,MAAM,IAAI,IAAI;IAqBd;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAYf;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;;OAGG;YACW,mBAAmB;IAkBjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAO5B"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * TF-IDF Event Sync
3
+ *
4
+ * Phase 10 Sprint 3: Hooks TFIDFIndexManager to graph events for automatic
5
+ * incremental index updates when entities change.
6
+ *
7
+ * @module search/TFIDFEventSync
8
+ */
9
+ /**
10
+ * Phase 10 Sprint 3: Synchronizes TF-IDF index with graph changes via events.
11
+ *
12
+ * Listens to graph events and triggers incremental index updates automatically.
13
+ * More efficient than rebuilding the entire index on every change.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const storage = new GraphStorage('/data/memory.jsonl');
18
+ * const indexManager = new TFIDFIndexManager('/data');
19
+ *
20
+ * // Load or build index
21
+ * await indexManager.loadIndex();
22
+ *
23
+ * // Enable automatic sync
24
+ * const sync = new TFIDFEventSync(indexManager, storage.events, storage);
25
+ * sync.enable();
26
+ *
27
+ * // Now entities added to storage will automatically update the index
28
+ * await storage.appendEntity({ name: 'New', entityType: 'test', observations: [] });
29
+ *
30
+ * // Disable when done
31
+ * sync.disable();
32
+ * ```
33
+ */
34
+ export class TFIDFEventSync {
35
+ indexManager;
36
+ eventEmitter;
37
+ storage;
38
+ unsubscribers = [];
39
+ enabled = false;
40
+ /**
41
+ * Create a new TFIDFEventSync instance.
42
+ *
43
+ * @param indexManager - TFIDFIndexManager to sync
44
+ * @param eventEmitter - GraphEventEmitter to listen to
45
+ * @param storage - Storage to fetch entity data from (for updates)
46
+ */
47
+ constructor(indexManager, eventEmitter, storage) {
48
+ this.indexManager = indexManager;
49
+ this.eventEmitter = eventEmitter;
50
+ this.storage = storage;
51
+ }
52
+ /**
53
+ * Enable automatic index synchronization.
54
+ *
55
+ * Subscribes to entity:created, entity:updated, and entity:deleted events.
56
+ */
57
+ enable() {
58
+ if (this.enabled) {
59
+ return;
60
+ }
61
+ // Subscribe to entity events
62
+ this.unsubscribers.push(this.eventEmitter.on('entity:created', this.handleEntityCreated.bind(this)));
63
+ this.unsubscribers.push(this.eventEmitter.on('entity:updated', this.handleEntityUpdated.bind(this)));
64
+ this.unsubscribers.push(this.eventEmitter.on('entity:deleted', this.handleEntityDeleted.bind(this)));
65
+ this.enabled = true;
66
+ }
67
+ /**
68
+ * Disable automatic index synchronization.
69
+ *
70
+ * Unsubscribes from all events.
71
+ */
72
+ disable() {
73
+ if (!this.enabled) {
74
+ return;
75
+ }
76
+ for (const unsubscribe of this.unsubscribers) {
77
+ unsubscribe();
78
+ }
79
+ this.unsubscribers = [];
80
+ this.enabled = false;
81
+ }
82
+ /**
83
+ * Check if synchronization is enabled.
84
+ *
85
+ * @returns True if enabled
86
+ */
87
+ isEnabled() {
88
+ return this.enabled;
89
+ }
90
+ /**
91
+ * Handle entity:created event.
92
+ * @private
93
+ */
94
+ handleEntityCreated(event) {
95
+ if (!this.indexManager.isInitialized()) {
96
+ return;
97
+ }
98
+ this.indexManager.addDocument({
99
+ name: event.entity.name,
100
+ entityType: event.entity.entityType,
101
+ observations: event.entity.observations,
102
+ });
103
+ }
104
+ /**
105
+ * Handle entity:updated event.
106
+ * @private
107
+ */
108
+ async handleEntityUpdated(event) {
109
+ if (!this.indexManager.isInitialized()) {
110
+ return;
111
+ }
112
+ // Fetch the current entity state
113
+ const graph = await this.storage.loadGraph();
114
+ const entity = graph.entities.find(e => e.name === event.entityName);
115
+ if (entity) {
116
+ this.indexManager.updateDocument({
117
+ name: entity.name,
118
+ entityType: entity.entityType,
119
+ observations: entity.observations,
120
+ });
121
+ }
122
+ }
123
+ /**
124
+ * Handle entity:deleted event.
125
+ * @private
126
+ */
127
+ handleEntityDeleted(event) {
128
+ if (!this.indexManager.isInitialized()) {
129
+ return;
130
+ }
131
+ this.indexManager.removeDocument(event.entityName);
132
+ }
133
+ }
134
+ //# sourceMappingURL=TFIDFEventSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFIDFEventSync.js","sourceRoot":"","sources":["../../src/search/TFIDFEventSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * TF-IDF Index Manager
3
+ *
4
+ * Manages pre-calculated TF-IDF indexes for fast ranked search.
5
+ * Handles index building, incremental updates, and persistence.
6
+ *
7
+ * @module search/TFIDFIndexManager
8
+ */
9
+ import type { TFIDFIndex, KnowledgeGraph, ReadonlyKnowledgeGraph } from '../types/index.js';
10
+ /**
11
+ * Manages TF-IDF index lifecycle: building, updating, and persistence.
12
+ */
13
+ export declare class TFIDFIndexManager {
14
+ private indexPath;
15
+ private index;
16
+ constructor(storageDir: string);
17
+ /**
18
+ * Build a complete TF-IDF index from a knowledge graph.
19
+ *
20
+ * @param graph - Knowledge graph to index
21
+ * @returns Newly built TF-IDF index
22
+ */
23
+ buildIndex(graph: ReadonlyKnowledgeGraph): Promise<TFIDFIndex>;
24
+ /**
25
+ * Update the index incrementally when entities change.
26
+ *
27
+ * More efficient than rebuilding the entire index.
28
+ *
29
+ * @param graph - Updated knowledge graph
30
+ * @param changedEntityNames - Names of entities that changed
31
+ */
32
+ updateIndex(graph: ReadonlyKnowledgeGraph, changedEntityNames: Set<string>): Promise<TFIDFIndex>;
33
+ /**
34
+ * Load index from disk.
35
+ *
36
+ * @returns Loaded index or null if not found
37
+ */
38
+ loadIndex(): Promise<TFIDFIndex | null>;
39
+ /**
40
+ * Save index to disk.
41
+ *
42
+ * @param index - Index to save (uses cached index if not provided)
43
+ */
44
+ saveIndex(index?: TFIDFIndex): Promise<void>;
45
+ /**
46
+ * Get the current cached index.
47
+ *
48
+ * @returns Cached index or null if not loaded
49
+ */
50
+ getIndex(): TFIDFIndex | null;
51
+ /**
52
+ * Clear the cached index and delete from disk.
53
+ */
54
+ clearIndex(): Promise<void>;
55
+ /**
56
+ * Check if the index needs rebuilding based on graph state.
57
+ *
58
+ * @param graph - Current knowledge graph
59
+ * @returns True if index should be rebuilt
60
+ */
61
+ needsRebuild(graph: KnowledgeGraph): boolean;
62
+ /**
63
+ * Phase 10 Sprint 3: Add a single document to the index incrementally.
64
+ *
65
+ * More efficient than rebuilding the entire index for single entity additions.
66
+ * Updates TF for the new document and recalculates IDF for affected terms.
67
+ *
68
+ * @param entity - The entity to add
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const indexManager = new TFIDFIndexManager('/data');
73
+ * await indexManager.loadIndex();
74
+ *
75
+ * // Add new entity
76
+ * indexManager.addDocument({
77
+ * name: 'NewEntity',
78
+ * entityType: 'person',
79
+ * observations: ['Software engineer']
80
+ * });
81
+ * ```
82
+ */
83
+ addDocument(entity: {
84
+ name: string;
85
+ entityType: string;
86
+ observations: string[];
87
+ }): void;
88
+ /**
89
+ * Phase 10 Sprint 3: Remove a single document from the index incrementally.
90
+ *
91
+ * More efficient than rebuilding the entire index for single entity deletions.
92
+ * Recalculates IDF for terms that were in the removed document.
93
+ *
94
+ * @param entityName - Name of the entity to remove
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * indexManager.removeDocument('DeletedEntity');
99
+ * ```
100
+ */
101
+ removeDocument(entityName: string): void;
102
+ /**
103
+ * Phase 10 Sprint 3: Update a single document in the index incrementally.
104
+ *
105
+ * More efficient than rebuilding the entire index for single entity updates.
106
+ * Handles both term changes and observation updates.
107
+ *
108
+ * @param entity - The updated entity
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * indexManager.updateDocument({
113
+ * name: 'ExistingEntity',
114
+ * entityType: 'person',
115
+ * observations: ['Updated observations']
116
+ * });
117
+ * ```
118
+ */
119
+ updateDocument(entity: {
120
+ name: string;
121
+ entityType: string;
122
+ observations: string[];
123
+ }): void;
124
+ /**
125
+ * Phase 10 Sprint 3: Recalculate IDF scores for a set of terms.
126
+ *
127
+ * @param terms - Set of terms to recalculate IDF for
128
+ * @private
129
+ */
130
+ private recalculateIDFForTerms;
131
+ /**
132
+ * Phase 10 Sprint 3: Recalculate IDF scores for ALL terms in the index.
133
+ *
134
+ * Called when the total document count changes (add/remove document).
135
+ * @private
136
+ */
137
+ private recalculateAllIDF;
138
+ /**
139
+ * Phase 10 Sprint 3: Check if the index is loaded/initialized.
140
+ *
141
+ * @returns True if index is available
142
+ */
143
+ isInitialized(): boolean;
144
+ /**
145
+ * Phase 10 Sprint 3: Get the number of documents in the index.
146
+ *
147
+ * @returns Document count or 0 if not initialized
148
+ */
149
+ getDocumentCount(): number;
150
+ }
151
+ //# sourceMappingURL=TFIDFIndexManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TFIDFIndexManager.d.ts","sourceRoot":"","sources":["../../src/search/TFIDFIndexManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAkB,cAAc,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAgB5G;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA2B;gBAE5B,UAAU,EAAE,MAAM;IAI9B;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgDpE;;;;;;;OAOG;IACG,WAAW,CAAC,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAgEtG;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAmB7C;;;;OAIG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD;;;;OAIG;IACH,QAAQ,IAAI,UAAU,GAAG,IAAI;IAI7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAsB5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IA+BvF;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAqBxC;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAgD1F;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAkC9B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;;;OAIG;IACH,aAAa,IAAI,OAAO;IAIxB;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;CAG3B"}