@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,340 +0,0 @@
1
- /**
2
- * BM25 Search
3
- *
4
- * BM25 (Best Matching 25) relevance scoring algorithm for lexical search.
5
- * Provides improved ranking over TF-IDF by incorporating document length normalization.
6
- *
7
- * Phase 12 Sprint 3: Search Algorithm Optimization
8
- *
9
- * @module search/BM25Search
10
- */
11
- import { SEARCH_LIMITS } from '../utils/constants.js';
12
- /**
13
- * Common English stopwords to filter from queries and documents.
14
- * These words are too common to provide meaningful ranking signal.
15
- */
16
- export const STOPWORDS = new Set([
17
- 'a', 'an', 'and', 'are', 'as', 'at', 'be', 'by', 'for', 'from',
18
- 'has', 'he', 'in', 'is', 'it', 'its', 'of', 'on', 'or', 'that',
19
- 'the', 'to', 'was', 'were', 'will', 'with', 'you', 'your',
20
- 'this', 'but', 'they', 'have', 'had', 'what', 'when', 'where',
21
- 'who', 'which', 'why', 'how', 'all', 'each', 'every', 'both',
22
- 'few', 'more', 'most', 'other', 'some', 'such', 'no', 'not',
23
- 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'can',
24
- 'just', 'should', 'now', 'also', 'being', 'been', 'would',
25
- 'could', 'into', 'over', 'after', 'before', 'between', 'under',
26
- 'again', 'then', 'once', 'here', 'there', 'any', 'about',
27
- ]);
28
- /**
29
- * Default BM25 parameters based on research recommendations.
30
- */
31
- export const DEFAULT_BM25_CONFIG = {
32
- k1: 1.2,
33
- b: 0.75,
34
- };
35
- /**
36
- * BM25 Search implementation.
37
- *
38
- * BM25 improves over TF-IDF by:
39
- * 1. Saturating term frequency - prevents long documents from dominating
40
- * 2. Document length normalization - accounts for varying document sizes
41
- *
42
- * Formula:
43
- * score(D,Q) = sum_i( IDF(qi) * (f(qi,D) * (k1 + 1)) / (f(qi,D) + k1 * (1 - b + b * |D|/avgdl)) )
44
- *
45
- * Where:
46
- * - f(qi,D) is the term frequency of qi in document D
47
- * - |D| is the length of document D
48
- * - avgdl is the average document length
49
- * - k1 and b are free parameters
50
- *
51
- * @example
52
- * ```typescript
53
- * const bm25 = new BM25Search(storage);
54
- * await bm25.buildIndex();
55
- * const results = await bm25.search('machine learning');
56
- * ```
57
- */
58
- export class BM25Search {
59
- storage;
60
- index = null;
61
- config;
62
- constructor(storage, config = {}) {
63
- this.storage = storage;
64
- this.config = { ...DEFAULT_BM25_CONFIG, ...config };
65
- }
66
- /**
67
- * Get the current configuration.
68
- */
69
- getConfig() {
70
- return { ...this.config };
71
- }
72
- /**
73
- * Update configuration parameters.
74
- *
75
- * @param config - New configuration values
76
- */
77
- setConfig(config) {
78
- this.config = { ...this.config, ...config };
79
- }
80
- /**
81
- * Tokenize text into lowercase terms with stopword filtering.
82
- *
83
- * @param text - Text to tokenize
84
- * @param filterStopwords - Whether to filter stopwords (default: true)
85
- * @returns Array of lowercase tokens
86
- */
87
- tokenize(text, filterStopwords = true) {
88
- const tokens = text
89
- .toLowerCase()
90
- .replace(/[^\w\s]/g, ' ')
91
- .split(/\s+/)
92
- .filter(token => token.length > 0);
93
- if (filterStopwords) {
94
- return tokens.filter(token => !STOPWORDS.has(token));
95
- }
96
- return tokens;
97
- }
98
- /**
99
- * Build the BM25 index from the current graph.
100
- *
101
- * Should be called after significant graph changes.
102
- */
103
- async buildIndex() {
104
- const graph = await this.storage.loadGraph();
105
- const documents = new Map();
106
- const documentFrequency = new Map();
107
- const termsSeen = new Set();
108
- let totalDocLength = 0;
109
- // First pass: tokenize all documents and count term frequencies
110
- for (const entity of graph.entities) {
111
- const text = this.entityToText(entity);
112
- const tokens = this.tokenize(text);
113
- const termFreqs = new Map();
114
- // Count term frequencies for this document
115
- for (const token of tokens) {
116
- termFreqs.set(token, (termFreqs.get(token) || 0) + 1);
117
- }
118
- // Track which terms appear in this document (for IDF calculation)
119
- termsSeen.clear();
120
- for (const token of tokens) {
121
- if (!termsSeen.has(token)) {
122
- termsSeen.add(token);
123
- documentFrequency.set(token, (documentFrequency.get(token) || 0) + 1);
124
- }
125
- }
126
- const entry = {
127
- entityName: entity.name,
128
- termFreqs,
129
- docLength: tokens.length,
130
- };
131
- documents.set(entity.name, entry);
132
- totalDocLength += tokens.length;
133
- }
134
- const totalDocs = documents.size;
135
- const avgDocLength = totalDocs > 0 ? totalDocLength / totalDocs : 0;
136
- this.index = {
137
- documents,
138
- documentFrequency,
139
- avgDocLength,
140
- totalDocs,
141
- };
142
- }
143
- /**
144
- * Search using the BM25 algorithm.
145
- *
146
- * @param query - Search query
147
- * @param limit - Maximum results to return
148
- * @returns Array of search results sorted by BM25 score
149
- */
150
- async search(query, limit = SEARCH_LIMITS.DEFAULT) {
151
- const effectiveLimit = Math.min(limit, SEARCH_LIMITS.MAX);
152
- // Ensure index is built
153
- if (!this.index) {
154
- await this.buildIndex();
155
- }
156
- if (!this.index || this.index.documents.size === 0) {
157
- return [];
158
- }
159
- const graph = await this.storage.loadGraph();
160
- const entityMap = new Map(graph.entities.map(e => [e.name, e]));
161
- // Tokenize query
162
- const queryTerms = this.tokenize(query);
163
- if (queryTerms.length === 0) {
164
- return [];
165
- }
166
- const { k1, b } = this.config;
167
- const { documents, documentFrequency, avgDocLength, totalDocs } = this.index;
168
- const results = [];
169
- // Calculate BM25 score for each document
170
- for (const [entityName, docEntry] of documents) {
171
- const entity = entityMap.get(entityName);
172
- if (!entity)
173
- continue;
174
- let score = 0;
175
- const matchedFields = {};
176
- for (const term of queryTerms) {
177
- const tf = docEntry.termFreqs.get(term) || 0;
178
- if (tf === 0)
179
- continue;
180
- // Calculate IDF
181
- const df = documentFrequency.get(term) || 0;
182
- const idf = df > 0 ? Math.log((totalDocs - df + 0.5) / (df + 0.5) + 1) : 0;
183
- // Calculate BM25 score component
184
- const numerator = tf * (k1 + 1);
185
- const denominator = tf + k1 * (1 - b + b * (docEntry.docLength / avgDocLength));
186
- const termScore = idf * (numerator / denominator);
187
- score += termScore;
188
- // Track which fields matched
189
- if (entity.name.toLowerCase().includes(term)) {
190
- matchedFields.name = true;
191
- }
192
- if (entity.entityType.toLowerCase().includes(term)) {
193
- matchedFields.entityType = true;
194
- }
195
- const matchedObs = entity.observations.filter(o => o.toLowerCase().includes(term));
196
- if (matchedObs.length > 0) {
197
- matchedFields.observations = matchedObs;
198
- }
199
- }
200
- if (score > 0) {
201
- results.push({
202
- entity,
203
- score,
204
- matchedFields,
205
- });
206
- }
207
- }
208
- // Sort by score descending and limit
209
- return results
210
- .sort((a, b) => b.score - a.score)
211
- .slice(0, effectiveLimit);
212
- }
213
- /**
214
- * Update the index for changed entities.
215
- *
216
- * @param changedEntityNames - Names of entities that changed
217
- */
218
- async update(changedEntityNames) {
219
- if (!this.index) {
220
- await this.buildIndex();
221
- return;
222
- }
223
- const graph = await this.storage.loadGraph();
224
- const entityMap = new Map(graph.entities.map(e => [e.name, e]));
225
- // Process each changed entity
226
- for (const entityName of changedEntityNames) {
227
- const entity = entityMap.get(entityName);
228
- const existingEntry = this.index.documents.get(entityName);
229
- if (existingEntry) {
230
- // Remove old term frequencies from document frequency counts
231
- for (const [term] of existingEntry.termFreqs) {
232
- const df = this.index.documentFrequency.get(term) || 0;
233
- if (df <= 1) {
234
- this.index.documentFrequency.delete(term);
235
- }
236
- else {
237
- this.index.documentFrequency.set(term, df - 1);
238
- }
239
- }
240
- this.index.documents.delete(entityName);
241
- }
242
- if (entity) {
243
- // Add new entry
244
- const text = this.entityToText(entity);
245
- const tokens = this.tokenize(text);
246
- const termFreqs = new Map();
247
- const termsSeen = new Set();
248
- for (const token of tokens) {
249
- termFreqs.set(token, (termFreqs.get(token) || 0) + 1);
250
- if (!termsSeen.has(token)) {
251
- termsSeen.add(token);
252
- this.index.documentFrequency.set(token, (this.index.documentFrequency.get(token) || 0) + 1);
253
- }
254
- }
255
- const entry = {
256
- entityName: entity.name,
257
- termFreqs,
258
- docLength: tokens.length,
259
- };
260
- this.index.documents.set(entityName, entry);
261
- }
262
- }
263
- // Recalculate average document length
264
- this.index.totalDocs = this.index.documents.size;
265
- let totalLength = 0;
266
- for (const doc of this.index.documents.values()) {
267
- totalLength += doc.docLength;
268
- }
269
- this.index.avgDocLength = this.index.totalDocs > 0
270
- ? totalLength / this.index.totalDocs
271
- : 0;
272
- }
273
- /**
274
- * Remove an entity from the index.
275
- *
276
- * @param entityName - Name of entity to remove
277
- */
278
- remove(entityName) {
279
- if (!this.index) {
280
- return false;
281
- }
282
- const entry = this.index.documents.get(entityName);
283
- if (!entry) {
284
- return false;
285
- }
286
- // Update document frequency counts
287
- for (const [term] of entry.termFreqs) {
288
- const df = this.index.documentFrequency.get(term) || 0;
289
- if (df <= 1) {
290
- this.index.documentFrequency.delete(term);
291
- }
292
- else {
293
- this.index.documentFrequency.set(term, df - 1);
294
- }
295
- }
296
- this.index.documents.delete(entityName);
297
- // Update totals
298
- this.index.totalDocs = this.index.documents.size;
299
- let totalLength = 0;
300
- for (const doc of this.index.documents.values()) {
301
- totalLength += doc.docLength;
302
- }
303
- this.index.avgDocLength = this.index.totalDocs > 0
304
- ? totalLength / this.index.totalDocs
305
- : 0;
306
- return true;
307
- }
308
- /**
309
- * Clear the index.
310
- */
311
- clearIndex() {
312
- this.index = null;
313
- }
314
- /**
315
- * Check if the index is built.
316
- */
317
- isIndexed() {
318
- return this.index !== null;
319
- }
320
- /**
321
- * Get index statistics.
322
- */
323
- getIndexStats() {
324
- if (!this.index) {
325
- return null;
326
- }
327
- return {
328
- documents: this.index.documents.size,
329
- terms: this.index.documentFrequency.size,
330
- avgDocLength: this.index.avgDocLength,
331
- };
332
- }
333
- /**
334
- * Convert an entity to searchable text.
335
- */
336
- entityToText(entity) {
337
- return [entity.name, entity.entityType, ...entity.observations].join(' ');
338
- }
339
- }
340
- //# sourceMappingURL=BM25Search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BM25Search.js","sourceRoot":"","sources":["../../src/search/BM25Search.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Basic Search
3
- *
4
- * Simple text-based search with tag, importance, and date filters with result caching.
5
- *
6
- * @module search/BasicSearch
7
- */
8
- import type { KnowledgeGraph } from '../types/index.js';
9
- import type { GraphStorage } from '../core/GraphStorage.js';
10
- /**
11
- * Performs basic text search with optional filters and caching.
12
- */
13
- export declare class BasicSearch {
14
- private storage;
15
- private enableCache;
16
- constructor(storage: GraphStorage, enableCache?: boolean);
17
- /**
18
- * Search nodes by text query with optional filters and pagination.
19
- *
20
- * Searches across entity names, types, and observations.
21
- *
22
- * @param query - Text to search for (case-insensitive)
23
- * @param tags - Optional tags to filter by
24
- * @param minImportance - Optional minimum importance (0-10)
25
- * @param maxImportance - Optional maximum importance (0-10)
26
- * @param offset - Number of results to skip (default: 0)
27
- * @param limit - Maximum number of results (default: 50, max: 200)
28
- * @returns Filtered knowledge graph with pagination applied
29
- */
30
- searchNodes(query: string, tags?: string[], minImportance?: number, maxImportance?: number, offset?: number, limit?: number): Promise<KnowledgeGraph>;
31
- /**
32
- * Open specific nodes by name.
33
- *
34
- * @param names - Array of entity names to retrieve
35
- * @returns Knowledge graph with specified entities and their relations
36
- */
37
- openNodes(names: string[]): Promise<KnowledgeGraph>;
38
- /**
39
- * Search by date range with optional filters and pagination.
40
- *
41
- * @param startDate - Optional start date (ISO 8601)
42
- * @param endDate - Optional end date (ISO 8601)
43
- * @param entityType - Optional entity type filter
44
- * @param tags - Optional tags filter
45
- * @param offset - Number of results to skip (default: 0)
46
- * @param limit - Maximum number of results (default: 50, max: 200)
47
- * @returns Filtered knowledge graph with pagination applied
48
- */
49
- searchByDateRange(startDate?: string, endDate?: string, entityType?: string, tags?: string[], offset?: number, limit?: number): Promise<KnowledgeGraph>;
50
- }
51
- //# sourceMappingURL=BasicSearch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicSearch.d.ts","sourceRoot":"","sources":["../../src/search/BasicSearch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D;;GAEG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;gBADX,OAAO,EAAE,YAAY,EACrB,WAAW,GAAE,OAAc;IAGrC;;;;;;;;;;;;OAYG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAA8B,GACpC,OAAO,CAAC,cAAc,CAAC;IAwD1B;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAYzD;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAA8B,GACpC,OAAO,CAAC,cAAc,CAAC;CAiD3B"}
@@ -1,138 +0,0 @@
1
- /**
2
- * Basic Search
3
- *
4
- * Simple text-based search with tag, importance, and date filters with result caching.
5
- *
6
- * @module search/BasicSearch
7
- */
8
- import { isWithinDateRange, SEARCH_LIMITS, searchCaches } from '../utils/index.js';
9
- import { SearchFilterChain } from './SearchFilterChain.js';
10
- /**
11
- * Performs basic text search with optional filters and caching.
12
- */
13
- export class BasicSearch {
14
- storage;
15
- enableCache;
16
- constructor(storage, enableCache = true) {
17
- this.storage = storage;
18
- this.enableCache = enableCache;
19
- }
20
- /**
21
- * Search nodes by text query with optional filters and pagination.
22
- *
23
- * Searches across entity names, types, and observations.
24
- *
25
- * @param query - Text to search for (case-insensitive)
26
- * @param tags - Optional tags to filter by
27
- * @param minImportance - Optional minimum importance (0-10)
28
- * @param maxImportance - Optional maximum importance (0-10)
29
- * @param offset - Number of results to skip (default: 0)
30
- * @param limit - Maximum number of results (default: 50, max: 200)
31
- * @returns Filtered knowledge graph with pagination applied
32
- */
33
- async searchNodes(query, tags, minImportance, maxImportance, offset = 0, limit = SEARCH_LIMITS.DEFAULT) {
34
- // Check cache first
35
- if (this.enableCache) {
36
- const cacheKey = { query, tags, minImportance, maxImportance, offset, limit };
37
- const cached = searchCaches.basic.get(cacheKey);
38
- if (cached) {
39
- return cached;
40
- }
41
- }
42
- const graph = await this.storage.loadGraph();
43
- const queryLower = query.toLowerCase();
44
- // First filter by text match (search-specific)
45
- // OPTIMIZED: Uses pre-computed lowercase cache to avoid repeated toLowerCase() calls
46
- const textMatched = graph.entities.filter(e => {
47
- const lowercased = this.storage.getLowercased(e.name);
48
- if (lowercased) {
49
- return (lowercased.name.includes(queryLower) ||
50
- lowercased.entityType.includes(queryLower) ||
51
- lowercased.observations.some(o => o.includes(queryLower)));
52
- }
53
- // Fallback for entities not in cache (shouldn't happen in normal use)
54
- return (e.name.toLowerCase().includes(queryLower) ||
55
- e.entityType.toLowerCase().includes(queryLower) ||
56
- e.observations.some(o => o.toLowerCase().includes(queryLower)));
57
- });
58
- // Apply tag and importance filters using SearchFilterChain
59
- const filters = { tags, minImportance, maxImportance };
60
- const filteredEntities = SearchFilterChain.applyFilters(textMatched, filters);
61
- // Apply pagination using SearchFilterChain
62
- const pagination = SearchFilterChain.validatePagination(offset, limit);
63
- const paginatedEntities = SearchFilterChain.paginate(filteredEntities, pagination);
64
- const filteredEntityNames = new Set(paginatedEntities.map(e => e.name));
65
- const filteredRelations = graph.relations.filter(r => filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to));
66
- const result = { entities: paginatedEntities, relations: filteredRelations };
67
- // Cache the result
68
- if (this.enableCache) {
69
- const cacheKey = { query, tags, minImportance, maxImportance, offset, limit };
70
- searchCaches.basic.set(cacheKey, result);
71
- }
72
- return result;
73
- }
74
- /**
75
- * Open specific nodes by name.
76
- *
77
- * @param names - Array of entity names to retrieve
78
- * @returns Knowledge graph with specified entities and their relations
79
- */
80
- async openNodes(names) {
81
- const graph = await this.storage.loadGraph();
82
- const filteredEntities = graph.entities.filter(e => names.includes(e.name));
83
- const filteredEntityNames = new Set(filteredEntities.map(e => e.name));
84
- const filteredRelations = graph.relations.filter(r => filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to));
85
- return { entities: filteredEntities, relations: filteredRelations };
86
- }
87
- /**
88
- * Search by date range with optional filters and pagination.
89
- *
90
- * @param startDate - Optional start date (ISO 8601)
91
- * @param endDate - Optional end date (ISO 8601)
92
- * @param entityType - Optional entity type filter
93
- * @param tags - Optional tags filter
94
- * @param offset - Number of results to skip (default: 0)
95
- * @param limit - Maximum number of results (default: 50, max: 200)
96
- * @returns Filtered knowledge graph with pagination applied
97
- */
98
- async searchByDateRange(startDate, endDate, entityType, tags, offset = 0, limit = SEARCH_LIMITS.DEFAULT) {
99
- // Check cache first
100
- if (this.enableCache) {
101
- const cacheKey = { method: 'dateRange', startDate, endDate, entityType, tags, offset, limit };
102
- const cached = searchCaches.basic.get(cacheKey);
103
- if (cached) {
104
- return cached;
105
- }
106
- }
107
- const graph = await this.storage.loadGraph();
108
- // First filter by date range (search-specific - uses createdAt OR lastModified)
109
- const dateFiltered = graph.entities.filter(e => {
110
- const dateToCheck = e.createdAt || e.lastModified;
111
- if (dateToCheck && !isWithinDateRange(dateToCheck, startDate, endDate)) {
112
- return false;
113
- }
114
- return true;
115
- });
116
- // Apply entity type and tag filters using SearchFilterChain
117
- const filters = { tags, entityType };
118
- const filteredEntities = SearchFilterChain.applyFilters(dateFiltered, filters);
119
- // Apply pagination using SearchFilterChain
120
- const pagination = SearchFilterChain.validatePagination(offset, limit);
121
- const paginatedEntities = SearchFilterChain.paginate(filteredEntities, pagination);
122
- const filteredEntityNames = new Set(paginatedEntities.map(e => e.name));
123
- const filteredRelations = graph.relations.filter(r => {
124
- const dateToCheck = r.createdAt || r.lastModified;
125
- const inDateRange = !dateToCheck || isWithinDateRange(dateToCheck, startDate, endDate);
126
- const involvesFilteredEntities = filteredEntityNames.has(r.from) && filteredEntityNames.has(r.to);
127
- return inDateRange && involvesFilteredEntities;
128
- });
129
- const result = { entities: paginatedEntities, relations: filteredRelations };
130
- // Cache the result
131
- if (this.enableCache) {
132
- const cacheKey = { method: 'dateRange', startDate, endDate, entityType, tags, offset, limit };
133
- searchCaches.basic.set(cacheKey, result);
134
- }
135
- return result;
136
- }
137
- }
138
- //# sourceMappingURL=BasicSearch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BasicSearch.js","sourceRoot":"","sources":["../../src/search/BasicSearch.ts"],"names":[],"mappings":"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"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Boolean Search
3
- *
4
- * Advanced search with boolean operators (AND, OR, NOT) and field-specific queries.
5
- *
6
- * @module search/BooleanSearch
7
- */
8
- import type { KnowledgeGraph } from '../types/index.js';
9
- import type { GraphStorage } from '../core/GraphStorage.js';
10
- /**
11
- * Performs boolean search with query parsing and AST evaluation.
12
- */
13
- export declare class BooleanSearch {
14
- private storage;
15
- /**
16
- * Phase 4 Sprint 4: AST cache to avoid re-parsing queries.
17
- * Maps query string -> parsed AST.
18
- */
19
- private astCache;
20
- /**
21
- * Phase 4 Sprint 4: Result cache for boolean search.
22
- * Maps cache key -> cached results.
23
- */
24
- private resultCache;
25
- constructor(storage: GraphStorage);
26
- /**
27
- * Phase 4 Sprint 4: Generate cache key for boolean search.
28
- */
29
- private generateCacheKey;
30
- /**
31
- * Phase 4 Sprint 4: Clear all caches.
32
- */
33
- clearCache(): void;
34
- /**
35
- * Phase 4 Sprint 4: Cleanup old cache entries.
36
- */
37
- private cleanupResultCache;
38
- /**
39
- * Phase 4 Sprint 4: Get or parse AST for a query.
40
- */
41
- private getOrParseAST;
42
- /**
43
- * Boolean search with support for AND, OR, NOT operators, field-specific queries, and pagination.
44
- *
45
- * Phase 4 Sprint 4: Implements AST caching and result caching for repeated queries.
46
- *
47
- * Query syntax examples:
48
- * - "alice AND programming" - Both terms must match
49
- * - "type:person OR type:organization" - Either type matches
50
- * - "NOT archived" - Exclude archived items
51
- * - "name:alice AND (observation:coding OR observation:teaching)"
52
- *
53
- * @param query - Boolean query string
54
- * @param tags - Optional tags filter
55
- * @param minImportance - Optional minimum importance
56
- * @param maxImportance - Optional maximum importance
57
- * @param offset - Number of results to skip (default: 0)
58
- * @param limit - Maximum number of results (default: 50, max: 200)
59
- * @returns Filtered knowledge graph matching the boolean query with pagination applied
60
- */
61
- booleanSearch(query: string, tags?: string[], minImportance?: number, maxImportance?: number, offset?: number, limit?: number): Promise<KnowledgeGraph>;
62
- /**
63
- * Tokenize a boolean query into tokens.
64
- *
65
- * Handles quoted strings, parentheses, and operators.
66
- */
67
- private tokenizeBooleanQuery;
68
- /**
69
- * Parse a boolean search query into an AST.
70
- *
71
- * Supports: AND, OR, NOT, parentheses, field-specific queries (field:value)
72
- */
73
- private parseBooleanQuery;
74
- /**
75
- * Evaluate a boolean query AST against an entity.
76
- */
77
- private evaluateBooleanQuery;
78
- /**
79
- * Check if a search term is simple (no regex or wildcards).
80
- * Simple terms can use the O(1) observation index.
81
- */
82
- private isSimpleTerm;
83
- /**
84
- * Check if entity matches a search term in any text field.
85
- * OPTIMIZED: Uses pre-computed lowercase data when available.
86
- */
87
- private entityMatchesTerm;
88
- /**
89
- * Validate query complexity to prevent resource exhaustion.
90
- * Checks nesting depth, term count, and operator count against configured limits.
91
- */
92
- private validateQueryComplexity;
93
- /**
94
- * Calculate query complexity metrics.
95
- */
96
- private calculateQueryComplexity;
97
- }
98
- //# sourceMappingURL=BooleanSearch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BooleanSearch.d.ts","sourceRoot":"","sources":["../../src/search/BooleanSearch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAA4B,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAkC5D;;GAEG;AACH,qBAAa,aAAa;IAaZ,OAAO,CAAC,OAAO;IAZ3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAA4C;IAE5D;;;OAGG;IACH,OAAO,CAAC,WAAW,CAA6C;gBAE5C,OAAO,EAAE,YAAY;IAEzC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;;;;;;;OAkBG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,aAAa,CAAC,EAAE,MAAM,EACtB,aAAa,CAAC,EAAE,MAAM,EACtB,MAAM,GAAE,MAAU,EAClB,KAAK,GAAE,MAA8B,GACpC,OAAO,CAAC,cAAc,CAAC;IA2E1B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAuFzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2D5B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAKpB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;CA8BjC"}