@danielsimonjr/memoryjs 1.0.0 → 1.1.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 +17364 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12371 -0
  6. package/dist/index.d.ts +12367 -11
  7. package/dist/index.js +17102 -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 +12 -6
  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,649 +0,0 @@
1
- /**
2
- * Entity Utilities
3
- *
4
- * Consolidated module for entity-related utilities including:
5
- * - Entity lookup and manipulation functions
6
- * - Tag normalization and matching
7
- * - Date parsing and validation
8
- * - Entity filtering by various criteria
9
- * - Path utilities and validation
10
- *
11
- * @module utils/entityUtils
12
- */
13
- import { promises as fs } from 'fs';
14
- import path from 'path';
15
- import { fileURLToPath } from 'url';
16
- import { EntityNotFoundError, FileOperationError } from './errors.js';
17
- // ==================== Hash Functions ====================
18
- /**
19
- * FNV-1a hash function for fast string hashing.
20
- *
21
- * This is a non-cryptographic hash function that provides good distribution
22
- * for bucketing and deduplication purposes. It's optimized for speed
23
- * and produces a 32-bit unsigned integer.
24
- *
25
- * FNV-1a has the following properties:
26
- * - Fast computation (single pass through string)
27
- * - Good distribution for hash table use
28
- * - Deterministic output for same input
29
- *
30
- * @param text - The string to hash
31
- * @returns A 32-bit unsigned integer hash value
32
- *
33
- * @example
34
- * ```typescript
35
- * const hash = fnv1aHash('hello');
36
- * console.log(hash); // 1335831723
37
- *
38
- * // Use for bucketing similar entities
39
- * const bucket = fnv1aHash(entity.name.toLowerCase()) % numBuckets;
40
- * ```
41
- */
42
- export function fnv1aHash(text) {
43
- let hash = 2166136261; // FNV offset basis
44
- for (let i = 0; i < text.length; i++) {
45
- hash ^= text.charCodeAt(i);
46
- hash = Math.imul(hash, 16777619); // FNV prime
47
- }
48
- return hash >>> 0; // Convert to unsigned 32-bit integer
49
- }
50
- export function findEntityByName(graph, name, throwIfNotFound = true) {
51
- const entity = graph.entities.find(e => e.name === name);
52
- if (!entity && throwIfNotFound) {
53
- throw new EntityNotFoundError(name);
54
- }
55
- return entity ?? null;
56
- }
57
- /**
58
- * Finds multiple entities by name.
59
- *
60
- * @param graph - The knowledge graph to search
61
- * @param names - Array of entity names to find
62
- * @param throwIfAnyNotFound - Whether to throw if any entity doesn't exist (default: true)
63
- * @returns Array of found entities (may be shorter than names if throwIfAnyNotFound is false)
64
- * @throws EntityNotFoundError if any entity not found and throwIfAnyNotFound is true
65
- */
66
- export function findEntitiesByNames(graph, names, throwIfAnyNotFound = true) {
67
- const entities = [];
68
- for (const name of names) {
69
- const entity = findEntityByName(graph, name, false);
70
- if (entity) {
71
- entities.push(entity);
72
- }
73
- else if (throwIfAnyNotFound) {
74
- throw new EntityNotFoundError(name);
75
- }
76
- }
77
- return entities;
78
- }
79
- /**
80
- * Checks if an entity exists in the graph.
81
- *
82
- * @param graph - The knowledge graph to search
83
- * @param name - The entity name to check
84
- * @returns true if entity exists, false otherwise
85
- */
86
- export function entityExists(graph, name) {
87
- return graph.entities.some(e => e.name === name);
88
- }
89
- /**
90
- * Gets the index of an entity in the graph's entities array.
91
- *
92
- * @param graph - The knowledge graph to search
93
- * @param name - The entity name to find
94
- * @returns The index if found, -1 otherwise
95
- */
96
- export function getEntityIndex(graph, name) {
97
- return graph.entities.findIndex(e => e.name === name);
98
- }
99
- /**
100
- * Removes an entity from the graph by name.
101
- * Mutates the graph's entities array in place.
102
- *
103
- * @param graph - The knowledge graph to modify
104
- * @param name - The entity name to remove
105
- * @returns true if entity was removed, false if not found
106
- */
107
- export function removeEntityByName(graph, name) {
108
- const index = getEntityIndex(graph, name);
109
- if (index === -1)
110
- return false;
111
- graph.entities.splice(index, 1);
112
- return true;
113
- }
114
- /**
115
- * Gets all entity names as a Set for fast lookup.
116
- *
117
- * @param graph - The knowledge graph
118
- * @returns Set of all entity names
119
- */
120
- export function getEntityNameSet(graph) {
121
- return new Set(graph.entities.map(e => e.name));
122
- }
123
- /**
124
- * Groups entities by their type.
125
- *
126
- * @param entities - Array of entities to group
127
- * @returns Map of entity type to array of entities
128
- */
129
- export function groupEntitiesByType(entities) {
130
- const groups = new Map();
131
- for (const entity of entities) {
132
- const type = entity.entityType;
133
- if (!groups.has(type)) {
134
- groups.set(type, []);
135
- }
136
- groups.get(type).push(entity);
137
- }
138
- return groups;
139
- }
140
- /**
141
- * Updates the lastModified timestamp on an entity.
142
- * Mutates the entity in place.
143
- *
144
- * @param entity - The entity to update
145
- * @returns The updated entity (same reference)
146
- */
147
- export function touchEntity(entity) {
148
- entity.lastModified = new Date().toISOString();
149
- return entity;
150
- }
151
- // ==================== Tag Normalization and Matching ====================
152
- /**
153
- * Normalizes a single tag to lowercase and trimmed.
154
- *
155
- * @param tag - Tag to normalize
156
- * @returns Normalized tag
157
- */
158
- export function normalizeTag(tag) {
159
- return tag.toLowerCase().trim();
160
- }
161
- /**
162
- * Normalizes an array of tags to lowercase.
163
- * Handles undefined/null input gracefully.
164
- *
165
- * @param tags - Array of tags to normalize, or undefined
166
- * @returns Normalized tags array, or empty array if input is undefined/null
167
- */
168
- export function normalizeTags(tags) {
169
- if (!tags || tags.length === 0)
170
- return [];
171
- return tags.map(tag => tag.toLowerCase());
172
- }
173
- /**
174
- * Checks if an entity's tags include any of the specified search tags.
175
- * Both inputs are normalized before comparison.
176
- *
177
- * @param entityTags - Tags on the entity (may be undefined)
178
- * @param searchTags - Tags to search for (may be undefined)
179
- * @returns true if any search tag matches any entity tag, false if no match or either is empty
180
- */
181
- export function hasMatchingTag(entityTags, searchTags) {
182
- if (!entityTags || entityTags.length === 0)
183
- return false;
184
- if (!searchTags || searchTags.length === 0)
185
- return false;
186
- const normalizedEntity = normalizeTags(entityTags);
187
- const normalizedSearch = normalizeTags(searchTags);
188
- return normalizedSearch.some(tag => normalizedEntity.includes(tag));
189
- }
190
- /**
191
- * Checks if entity tags include ALL of the specified required tags.
192
- *
193
- * @param entityTags - Tags on the entity (may be undefined)
194
- * @param requiredTags - All tags that must be present
195
- * @returns true if all required tags are present
196
- */
197
- export function hasAllTags(entityTags, requiredTags) {
198
- if (!entityTags || entityTags.length === 0)
199
- return false;
200
- if (requiredTags.length === 0)
201
- return true;
202
- const normalizedEntity = normalizeTags(entityTags);
203
- return normalizeTags(requiredTags).every(tag => normalizedEntity.includes(tag));
204
- }
205
- /**
206
- * Filters entities by tag match.
207
- * Returns all entities if searchTags is empty or undefined.
208
- *
209
- * @param entities - Array of entities with optional tags property
210
- * @param searchTags - Tags to filter by
211
- * @returns Filtered entities that have at least one matching tag
212
- */
213
- export function filterByTags(entities, searchTags) {
214
- if (!searchTags || searchTags.length === 0) {
215
- return entities;
216
- }
217
- const normalizedSearch = normalizeTags(searchTags);
218
- return entities.filter(entity => {
219
- if (!entity.tags || entity.tags.length === 0)
220
- return false;
221
- const normalizedEntity = normalizeTags(entity.tags);
222
- return normalizedSearch.some(tag => normalizedEntity.includes(tag));
223
- });
224
- }
225
- /**
226
- * Adds new tags to an existing tag array, avoiding duplicates.
227
- * All tags are normalized to lowercase.
228
- *
229
- * @param existingTags - Current tags (may be undefined)
230
- * @param newTags - Tags to add
231
- * @returns Combined tags array with no duplicates
232
- */
233
- export function addUniqueTags(existingTags, newTags) {
234
- const existing = normalizeTags(existingTags);
235
- const toAdd = normalizeTags(newTags);
236
- const uniqueNew = toAdd.filter(tag => !existing.includes(tag));
237
- return [...existing, ...uniqueNew];
238
- }
239
- /**
240
- * Removes specified tags from an existing tag array.
241
- * Comparison is case-insensitive.
242
- *
243
- * @param existingTags - Current tags (may be undefined)
244
- * @param tagsToRemove - Tags to remove
245
- * @returns Tags array with specified tags removed
246
- */
247
- export function removeTags(existingTags, tagsToRemove) {
248
- if (!existingTags || existingTags.length === 0)
249
- return [];
250
- const toRemoveNormalized = normalizeTags(tagsToRemove);
251
- return existingTags.filter(tag => !toRemoveNormalized.includes(tag.toLowerCase()));
252
- }
253
- // ==================== Date Utilities ====================
254
- /**
255
- * Check if a date falls within a specified range.
256
- *
257
- * @param date - ISO 8601 date string to check (may be undefined)
258
- * @param start - Optional start date (inclusive)
259
- * @param end - Optional end date (inclusive)
260
- * @returns True if date is within range or no filters are set
261
- *
262
- * @example
263
- * ```typescript
264
- * isWithinDateRange('2024-06-15T00:00:00Z', '2024-01-01T00:00:00Z', '2024-12-31T23:59:59Z'); // true
265
- * isWithinDateRange('2024-06-15T00:00:00Z', '2024-07-01T00:00:00Z'); // false
266
- * isWithinDateRange(undefined); // true (no filters)
267
- * isWithinDateRange(undefined, '2024-01-01T00:00:00Z'); // false (has filter but no date)
268
- * ```
269
- */
270
- export function isWithinDateRange(date, start, end) {
271
- // If no filters set, always pass
272
- if (!start && !end) {
273
- return true;
274
- }
275
- // If date is undefined but we have filters, fail
276
- if (!date) {
277
- return false;
278
- }
279
- const dateObj = new Date(date);
280
- if (isNaN(dateObj.getTime())) {
281
- return false;
282
- }
283
- if (start) {
284
- const startObj = new Date(start);
285
- if (isNaN(startObj.getTime())) {
286
- return false;
287
- }
288
- if (dateObj < startObj) {
289
- return false;
290
- }
291
- }
292
- if (end) {
293
- const endObj = new Date(end);
294
- if (isNaN(endObj.getTime())) {
295
- return false;
296
- }
297
- if (dateObj > endObj) {
298
- return false;
299
- }
300
- }
301
- return true;
302
- }
303
- /**
304
- * Parse and validate date range strings.
305
- *
306
- * @param startDate - Optional ISO 8601 start date
307
- * @param endDate - Optional ISO 8601 end date
308
- * @returns Parsed Date objects or null
309
- */
310
- export function parseDateRange(startDate, endDate) {
311
- let start = null;
312
- let end = null;
313
- if (startDate) {
314
- start = new Date(startDate);
315
- if (isNaN(start.getTime())) {
316
- start = null;
317
- }
318
- }
319
- if (endDate) {
320
- end = new Date(endDate);
321
- if (isNaN(end.getTime())) {
322
- end = null;
323
- }
324
- }
325
- return { start, end };
326
- }
327
- /**
328
- * Validate if a string is a valid ISO 8601 date.
329
- *
330
- * @param date - Date string to validate
331
- * @returns True if valid ISO 8601 date
332
- */
333
- export function isValidISODate(date) {
334
- const dateObj = new Date(date);
335
- return !isNaN(dateObj.getTime()) && dateObj.toISOString() === date;
336
- }
337
- /**
338
- * Get current timestamp in ISO 8601 format.
339
- *
340
- * @returns Current timestamp string
341
- */
342
- export function getCurrentTimestamp() {
343
- return new Date().toISOString();
344
- }
345
- // ==================== Filter Utilities ====================
346
- /**
347
- * Checks if an entity's importance is within the specified range.
348
- * Entities without importance are treated as not matching if any filter is set.
349
- *
350
- * @param importance - The entity's importance value (may be undefined)
351
- * @param minImportance - Minimum importance filter (inclusive)
352
- * @param maxImportance - Maximum importance filter (inclusive)
353
- * @returns true if importance is within range or no filters are set
354
- *
355
- * @example
356
- * ```typescript
357
- * // Check if entity passes importance filter
358
- * if (isWithinImportanceRange(entity.importance, 5, 10)) {
359
- * // Entity has importance between 5 and 10
360
- * }
361
- * ```
362
- */
363
- export function isWithinImportanceRange(importance, minImportance, maxImportance) {
364
- // If no filters set, always pass
365
- if (minImportance === undefined && maxImportance === undefined) {
366
- return true;
367
- }
368
- // Check minimum importance
369
- if (minImportance !== undefined) {
370
- if (importance === undefined || importance < minImportance) {
371
- return false;
372
- }
373
- }
374
- // Check maximum importance
375
- if (maxImportance !== undefined) {
376
- if (importance === undefined || importance > maxImportance) {
377
- return false;
378
- }
379
- }
380
- return true;
381
- }
382
- /**
383
- * Filters entities by importance range.
384
- * Returns all entities if no importance filters are specified.
385
- *
386
- * @param entities - Array of entities to filter
387
- * @param minImportance - Minimum importance filter (inclusive)
388
- * @param maxImportance - Maximum importance filter (inclusive)
389
- * @returns Filtered entities within the importance range
390
- */
391
- export function filterByImportance(entities, minImportance, maxImportance) {
392
- if (minImportance === undefined && maxImportance === undefined) {
393
- return entities;
394
- }
395
- return entities.filter(e => isWithinImportanceRange(e.importance, minImportance, maxImportance));
396
- }
397
- /**
398
- * Filters entities by creation date range.
399
- *
400
- * @param entities - Array of entities to filter
401
- * @param startDate - Start of date range (inclusive)
402
- * @param endDate - End of date range (inclusive)
403
- * @returns Filtered entities created within the date range
404
- */
405
- export function filterByCreatedDate(entities, startDate, endDate) {
406
- if (!startDate && !endDate) {
407
- return entities;
408
- }
409
- return entities.filter(e => isWithinDateRange(e.createdAt, startDate, endDate));
410
- }
411
- /**
412
- * Filters entities by last modified date range.
413
- *
414
- * @param entities - Array of entities to filter
415
- * @param startDate - Start of date range (inclusive)
416
- * @param endDate - End of date range (inclusive)
417
- * @returns Filtered entities modified within the date range
418
- */
419
- export function filterByModifiedDate(entities, startDate, endDate) {
420
- if (!startDate && !endDate) {
421
- return entities;
422
- }
423
- return entities.filter(e => isWithinDateRange(e.lastModified, startDate, endDate));
424
- }
425
- /**
426
- * Filters entities by entity type.
427
- *
428
- * @param entities - Array of entities to filter
429
- * @param entityType - Entity type to filter by (case-sensitive)
430
- * @returns Filtered entities of the specified type
431
- */
432
- export function filterByEntityType(entities, entityType) {
433
- if (!entityType) {
434
- return entities;
435
- }
436
- return entities.filter(e => e.entityType === entityType);
437
- }
438
- /**
439
- * Checks if an entity passes all the specified filters.
440
- * Short-circuits on first failing filter for performance.
441
- *
442
- * Note: Tag filtering should be handled separately using hasMatchingTag
443
- * as it requires special normalization logic.
444
- *
445
- * @param entity - Entity to check
446
- * @param filters - Filters to apply
447
- * @returns true if entity passes all filters
448
- */
449
- export function entityPassesFilters(entity, filters) {
450
- // Importance filter
451
- if (!isWithinImportanceRange(entity.importance, filters.minImportance, filters.maxImportance)) {
452
- return false;
453
- }
454
- // Entity type filter
455
- if (filters.entityType && entity.entityType !== filters.entityType) {
456
- return false;
457
- }
458
- // Created date filter
459
- if (!isWithinDateRange(entity.createdAt, filters.createdAfter, filters.createdBefore)) {
460
- return false;
461
- }
462
- // Modified date filter
463
- if (!isWithinDateRange(entity.lastModified, filters.modifiedAfter, filters.modifiedBefore)) {
464
- return false;
465
- }
466
- return true;
467
- }
468
- // ==================== Security Utilities ====================
469
- /**
470
- * Dangerous keys that should never be allowed in object assignment.
471
- * These can be used for prototype pollution attacks.
472
- */
473
- const DANGEROUS_KEYS = new Set([
474
- '__proto__',
475
- 'constructor',
476
- 'prototype',
477
- ]);
478
- /**
479
- * Sanitizes an object by removing potentially dangerous keys.
480
- * This prevents prototype pollution attacks when using Object.assign() or spread operators.
481
- *
482
- * @param obj - The object to sanitize
483
- * @returns A new object with dangerous keys removed
484
- *
485
- * @example
486
- * ```typescript
487
- * // Safe usage with Object.assign
488
- * const updates = sanitizeObject(userInput);
489
- * Object.assign(entity, updates);
490
- *
491
- * // Protects against prototype pollution
492
- * const malicious = { __proto__: { admin: true } };
493
- * const safe = sanitizeObject(malicious); // { }
494
- * ```
495
- */
496
- export function sanitizeObject(obj) {
497
- if (obj === null || typeof obj !== 'object') {
498
- return obj;
499
- }
500
- const result = {};
501
- for (const key of Object.keys(obj)) {
502
- // Skip dangerous keys
503
- if (DANGEROUS_KEYS.has(key)) {
504
- continue;
505
- }
506
- // Recursively sanitize nested objects
507
- const value = obj[key];
508
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
509
- result[key] = sanitizeObject(value);
510
- }
511
- else {
512
- result[key] = value;
513
- }
514
- }
515
- return result;
516
- }
517
- /**
518
- * CSV formula injection dangerous characters.
519
- * These can cause spreadsheet applications to execute formulas.
520
- */
521
- const CSV_FORMULA_CHARS = new Set(['=', '+', '-', '@', '\t', '\r']);
522
- /**
523
- * Escapes a CSV field to prevent formula injection attacks.
524
- * Prepends a single quote to values that start with dangerous characters.
525
- *
526
- * @param field - The field value to escape
527
- * @returns Escaped field value safe for CSV export
528
- *
529
- * @example
530
- * ```typescript
531
- * escapeCsvFormula('=SUM(A1:A10)'); // "'=SUM(A1:A10)"
532
- * escapeCsvFormula('normal text'); // 'normal text'
533
- * ```
534
- */
535
- export function escapeCsvFormula(field) {
536
- if (field === undefined || field === null)
537
- return '';
538
- const str = String(field);
539
- // Prefix with single quote if starts with dangerous character
540
- if (str.length > 0 && CSV_FORMULA_CHARS.has(str[0])) {
541
- return "'" + str;
542
- }
543
- return str;
544
- }
545
- // ==================== Path Utilities ====================
546
- /**
547
- * Validate and normalize a file path to prevent path traversal attacks.
548
- *
549
- * This function:
550
- * - Normalizes the path to canonical form
551
- * - Converts relative paths to absolute paths
552
- * - Detects and prevents path traversal attempts (..)
553
- *
554
- * @param filePath - The file path to validate
555
- * @param baseDir - Optional base directory for relative paths (defaults to process.cwd())
556
- * @returns Validated absolute file path
557
- * @throws {FileOperationError} If path traversal is detected or path is invalid
558
- *
559
- * @example
560
- * ```typescript
561
- * // Valid paths
562
- * validateFilePath('/var/data/memory.jsonl'); // Returns absolute path
563
- * validateFilePath('data/memory.jsonl'); // Returns absolute path from cwd
564
- *
565
- * // Invalid paths (throws FileOperationError)
566
- * validateFilePath('../../../etc/passwd'); // Path traversal detected
567
- * validateFilePath('/var/data/../../../etc/passwd'); // Path traversal detected
568
- * ```
569
- */
570
- export function validateFilePath(filePath, baseDir = process.cwd()) {
571
- // Normalize path to remove redundant separators and resolve . and ..
572
- const normalized = path.normalize(filePath);
573
- // Convert to absolute path
574
- const absolute = path.isAbsolute(normalized)
575
- ? normalized
576
- : path.join(baseDir, normalized);
577
- // After normalization, check if path still contains .. which would indicate
578
- // traversal beyond the base directory
579
- const finalNormalized = path.normalize(absolute);
580
- // Split path into segments and check for suspicious patterns
581
- const segments = finalNormalized.split(path.sep);
582
- if (segments.includes('..')) {
583
- throw new FileOperationError(`Path traversal detected in file path: ${filePath}`, filePath);
584
- }
585
- return finalNormalized;
586
- }
587
- /**
588
- * Default memory file path (in project root directory, outside dist/).
589
- */
590
- export const defaultMemoryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../../memory.jsonl');
591
- /**
592
- * Ensure memory file path with backward compatibility migration.
593
- *
594
- * Handles:
595
- * 1. Custom MEMORY_FILE_PATH environment variable (with path traversal protection)
596
- * 2. Backward compatibility: migrates memory.json to memory.jsonl
597
- * 3. Absolute vs relative path resolution
598
- *
599
- * @returns Resolved and validated memory file path
600
- * @throws {FileOperationError} If path traversal is detected in MEMORY_FILE_PATH
601
- *
602
- * @example
603
- * ```typescript
604
- * // Use environment variable
605
- * process.env.MEMORY_FILE_PATH = '/data/memory.jsonl';
606
- * const path = await ensureMemoryFilePath(); // '/data/memory.jsonl'
607
- *
608
- * // Use default path
609
- * delete process.env.MEMORY_FILE_PATH;
610
- * const path = await ensureMemoryFilePath(); // './memory.jsonl'
611
- *
612
- * // Invalid path (throws error)
613
- * process.env.MEMORY_FILE_PATH = '../../../etc/passwd';
614
- * await ensureMemoryFilePath(); // Throws FileOperationError
615
- * ```
616
- */
617
- export async function ensureMemoryFilePath() {
618
- if (process.env.MEMORY_FILE_PATH) {
619
- // Custom path provided, validate and resolve to absolute
620
- const baseDir = path.dirname(fileURLToPath(import.meta.url)) + '/../';
621
- const validatedPath = validateFilePath(process.env.MEMORY_FILE_PATH, baseDir);
622
- return validatedPath;
623
- }
624
- // No custom path set, check for backward compatibility migration
625
- const oldMemoryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '../../memory.json');
626
- const newMemoryPath = defaultMemoryPath;
627
- try {
628
- // Check if old file exists
629
- await fs.access(oldMemoryPath);
630
- try {
631
- // Check if new file exists
632
- await fs.access(newMemoryPath);
633
- // Both files exist, use new one (no migration needed)
634
- return newMemoryPath;
635
- }
636
- catch {
637
- // Old file exists, new file doesn't - migrate
638
- console.log('[INFO] Found legacy memory.json file, migrating to memory.jsonl for JSONL format compatibility');
639
- await fs.rename(oldMemoryPath, newMemoryPath);
640
- console.log('[INFO] Successfully migrated memory.json to memory.jsonl');
641
- return newMemoryPath;
642
- }
643
- }
644
- catch {
645
- // Old file doesn't exist, use new path
646
- return newMemoryPath;
647
- }
648
- }
649
- //# sourceMappingURL=entityUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityUtils.js","sourceRoot":"","sources":["../../src/utils/entityUtils.ts"],"names":[],"mappings":"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"}