@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,282 +0,0 @@
1
- /**
2
- * Archive Manager
3
- *
4
- * Handles archiving (removal) of entities based on criteria.
5
- * Archives are stored as compressed files for space-efficient long-term storage.
6
- * Extracted from EntityManager (Phase 4: Consolidate God Objects).
7
- * Enhanced with brotli compression in Phase 3 Sprint 5.
8
- *
9
- * @module features/ArchiveManager
10
- */
11
- import { promises as fs } from 'fs';
12
- import { dirname, join } from 'path';
13
- import { compress, COMPRESSION_CONFIG, checkCancellation, createProgressReporter, createProgress, } from '../utils/index.js';
14
- /**
15
- * Manages archive operations for the knowledge graph.
16
- *
17
- * Archives are stored as brotli-compressed files in the `.archives` directory.
18
- * Maximum compression quality is used for optimal long-term storage.
19
- */
20
- export class ArchiveManager {
21
- storage;
22
- archiveDir;
23
- constructor(storage) {
24
- this.storage = storage;
25
- const filePath = this.storage.getFilePath();
26
- const dir = dirname(filePath);
27
- this.archiveDir = join(dir, '.archives');
28
- }
29
- /**
30
- * Archive old or low-importance entities.
31
- *
32
- * Entities matching ANY of the criteria are archived:
33
- * - lastModified older than olderThan date
34
- * - importance less than importanceLessThan
35
- * - has at least one tag from tags array
36
- *
37
- * By default, archived entities are saved to a compressed file before
38
- * being removed from the active graph. Use `saveToFile: false` to
39
- * skip creating the archive file.
40
- *
41
- * Phase 9B: Supports progress tracking and cancellation via options.
42
- *
43
- * @param criteria - Archiving criteria
44
- * @param options - Archive options (dryRun, saveToFile, onProgress, signal)
45
- * @returns Archive result with count, entity names, and compression stats
46
- * @throws {OperationCancelledError} If operation is cancelled via signal (Phase 9B)
47
- *
48
- * @example
49
- * ```typescript
50
- * // Archive old entities with compression
51
- * const result = await manager.archiveEntities({
52
- * olderThan: '2023-01-01T00:00:00Z',
53
- * importanceLessThan: 3
54
- * });
55
- * console.log(`Archived ${result.archived} entities`);
56
- * console.log(`Compressed from ${result.originalSize} to ${result.compressedSize} bytes`);
57
- *
58
- * // Preview without making changes
59
- * const preview = await manager.archiveEntities(criteria, { dryRun: true });
60
- *
61
- * // With progress tracking and cancellation (Phase 9B)
62
- * const controller = new AbortController();
63
- * const result = await manager.archiveEntities(criteria, {
64
- * signal: controller.signal,
65
- * onProgress: (p) => console.log(`${p.percentage}% complete`),
66
- * });
67
- * ```
68
- */
69
- async archiveEntities(criteria, options = {}) {
70
- // Handle legacy boolean argument (backward compatibility)
71
- const opts = typeof options === 'boolean'
72
- ? { dryRun: options, saveToFile: true }
73
- : { saveToFile: true, ...options };
74
- // Check for early cancellation
75
- checkCancellation(opts.signal, 'archiveEntities');
76
- // Setup progress reporter
77
- const reportProgress = createProgressReporter(opts.onProgress);
78
- reportProgress?.(createProgress(0, 100, 'archiveEntities'));
79
- // Use read-only graph for analysis
80
- const readGraph = await this.storage.loadGraph();
81
- const toArchive = [];
82
- const totalEntities = readGraph.entities.length;
83
- let processedEntities = 0;
84
- // Phase 1: Identify entities to archive (0-40% progress)
85
- reportProgress?.(createProgress(5, 100, 'analyzing entities'));
86
- for (const entity of readGraph.entities) {
87
- // Check for cancellation periodically
88
- checkCancellation(opts.signal, 'archiveEntities');
89
- let shouldArchive = false;
90
- // Check age criteria
91
- if (criteria.olderThan && entity.lastModified) {
92
- const entityDate = new Date(entity.lastModified);
93
- const cutoffDate = new Date(criteria.olderThan);
94
- if (entityDate < cutoffDate) {
95
- shouldArchive = true;
96
- }
97
- }
98
- // Check importance criteria
99
- if (criteria.importanceLessThan !== undefined) {
100
- if (entity.importance === undefined || entity.importance < criteria.importanceLessThan) {
101
- shouldArchive = true;
102
- }
103
- }
104
- // Check tag criteria (must have at least one matching tag)
105
- if (criteria.tags && criteria.tags.length > 0) {
106
- const normalizedCriteriaTags = criteria.tags.map(t => t.toLowerCase());
107
- const entityTags = (entity.tags || []).map(t => t.toLowerCase());
108
- const hasMatchingTag = normalizedCriteriaTags.some(tag => entityTags.includes(tag));
109
- if (hasMatchingTag) {
110
- shouldArchive = true;
111
- }
112
- }
113
- if (shouldArchive) {
114
- toArchive.push(entity);
115
- }
116
- processedEntities++;
117
- // Map analysis progress (0-100%) to overall progress (0-40%)
118
- const analysisProgress = totalEntities > 0 ? Math.round((processedEntities / totalEntities) * 40) : 40;
119
- reportProgress?.(createProgress(analysisProgress, 100, 'analyzing entities'));
120
- }
121
- reportProgress?.(createProgress(40, 100, 'analysis complete'));
122
- // Dry run - return preview without changes
123
- if (opts.dryRun) {
124
- reportProgress?.(createProgress(100, 100, 'archiveEntities'));
125
- return {
126
- archived: toArchive.length,
127
- entityNames: toArchive.map(e => e.name),
128
- };
129
- }
130
- // No entities to archive
131
- if (toArchive.length === 0) {
132
- reportProgress?.(createProgress(100, 100, 'archiveEntities'));
133
- return {
134
- archived: 0,
135
- entityNames: [],
136
- };
137
- }
138
- // Check for cancellation before archiving
139
- checkCancellation(opts.signal, 'archiveEntities');
140
- // Phase 2: Save to compressed archive file (40-80% progress)
141
- let archivePath;
142
- let originalSize;
143
- let compressedSize;
144
- let compressionRatio;
145
- if (opts.saveToFile) {
146
- reportProgress?.(createProgress(50, 100, 'compressing archive'));
147
- const archiveResult = await this.saveToArchive(toArchive);
148
- archivePath = archiveResult.archivePath;
149
- originalSize = archiveResult.originalSize;
150
- compressedSize = archiveResult.compressedSize;
151
- compressionRatio = archiveResult.compressionRatio;
152
- reportProgress?.(createProgress(80, 100, 'archive saved'));
153
- }
154
- else {
155
- reportProgress?.(createProgress(80, 100, 'skipped archive file'));
156
- }
157
- // Check for cancellation before graph modification
158
- checkCancellation(opts.signal, 'archiveEntities');
159
- // Phase 3: Remove from main graph (80-100% progress)
160
- reportProgress?.(createProgress(85, 100, 'updating graph'));
161
- // Get mutable copy for write operation
162
- const graph = await this.storage.getGraphForMutation();
163
- // Remove archived entities from main graph
164
- const archiveNames = new Set(toArchive.map(e => e.name));
165
- graph.entities = graph.entities.filter(e => !archiveNames.has(e.name));
166
- graph.relations = graph.relations.filter(r => !archiveNames.has(r.from) && !archiveNames.has(r.to));
167
- await this.storage.saveGraph(graph);
168
- // Report completion
169
- reportProgress?.(createProgress(100, 100, 'archiveEntities'));
170
- return {
171
- archived: toArchive.length,
172
- entityNames: toArchive.map(e => e.name),
173
- archivePath,
174
- originalSize,
175
- compressedSize,
176
- compressionRatio,
177
- };
178
- }
179
- /**
180
- * Save entities to a compressed archive file.
181
- *
182
- * Creates a brotli-compressed file in the `.archives` directory
183
- * with maximum compression quality for space efficiency.
184
- *
185
- * @param entities - Entities to archive
186
- * @returns Archive file path and compression statistics
187
- */
188
- async saveToArchive(entities) {
189
- // Ensure archive directory exists
190
- await fs.mkdir(this.archiveDir, { recursive: true });
191
- // Generate timestamp-based filename
192
- const timestamp = new Date().toISOString()
193
- .replace(/:/g, '-')
194
- .replace(/\./g, '-')
195
- .replace('T', '_')
196
- .replace('Z', '');
197
- const archivePath = join(this.archiveDir, `archive_${timestamp}.jsonl.br`);
198
- // Serialize entities to JSONL format
199
- const content = entities.map(e => JSON.stringify(e)).join('\n');
200
- // Compress with maximum quality for archives
201
- const compressionResult = await compress(content, {
202
- quality: COMPRESSION_CONFIG.BROTLI_QUALITY_ARCHIVE,
203
- mode: 'text',
204
- });
205
- // Write compressed archive
206
- await fs.writeFile(archivePath, compressionResult.compressed);
207
- // Write metadata file
208
- const metadataPath = `${archivePath}.meta.json`;
209
- const metadata = {
210
- timestamp: new Date().toISOString(),
211
- entityCount: entities.length,
212
- entityNames: entities.map(e => e.name),
213
- compressed: true,
214
- compressionFormat: 'brotli',
215
- originalSize: compressionResult.originalSize,
216
- compressedSize: compressionResult.compressedSize,
217
- compressionRatio: compressionResult.ratio,
218
- };
219
- await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
220
- return {
221
- archivePath,
222
- originalSize: compressionResult.originalSize,
223
- compressedSize: compressionResult.compressedSize,
224
- compressionRatio: compressionResult.ratio,
225
- };
226
- }
227
- /**
228
- * List all available archives.
229
- *
230
- * @returns Array of archive information with compression details
231
- */
232
- async listArchives() {
233
- try {
234
- try {
235
- await fs.access(this.archiveDir);
236
- }
237
- catch {
238
- return [];
239
- }
240
- const files = await fs.readdir(this.archiveDir);
241
- const archiveFiles = files.filter(f => f.startsWith('archive_') &&
242
- (f.endsWith('.jsonl') || f.endsWith('.jsonl.br')) &&
243
- !f.endsWith('.meta.json'));
244
- const archives = [];
245
- for (const fileName of archiveFiles) {
246
- const filePath = join(this.archiveDir, fileName);
247
- const metadataPath = `${filePath}.meta.json`;
248
- try {
249
- const metadataContent = await fs.readFile(metadataPath, 'utf-8');
250
- const metadata = JSON.parse(metadataContent);
251
- archives.push({
252
- fileName,
253
- filePath,
254
- timestamp: metadata.timestamp,
255
- entityCount: metadata.entityCount,
256
- compressed: metadata.compressed ?? fileName.endsWith('.br'),
257
- originalSize: metadata.originalSize,
258
- compressedSize: metadata.compressedSize,
259
- compressionRatio: metadata.compressionRatio,
260
- });
261
- }
262
- catch {
263
- // Skip archives without valid metadata
264
- continue;
265
- }
266
- }
267
- // Sort by timestamp (newest first)
268
- archives.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
269
- return archives;
270
- }
271
- catch {
272
- return [];
273
- }
274
- }
275
- /**
276
- * Get the path to the archives directory.
277
- */
278
- getArchiveDir() {
279
- return this.archiveDir;
280
- }
281
- }
282
- //# sourceMappingURL=ArchiveManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArchiveManager.js","sourceRoot":"","sources":["../../src/features/ArchiveManager.ts"],"names":[],"mappings":"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"}
@@ -1,119 +0,0 @@
1
- /**
2
- * Compression Manager
3
- *
4
- * Handles duplicate detection, entity merging, and graph compression.
5
- * Extracted from SearchManager (Phase 4: Consolidate God Objects).
6
- *
7
- * @module features/CompressionManager
8
- */
9
- import type { Entity, GraphCompressionResult, KnowledgeGraph, LongRunningOperationOptions } from '../types/index.js';
10
- import type { GraphStorage } from '../core/GraphStorage.js';
11
- /**
12
- * Manages compression operations for the knowledge graph.
13
- */
14
- export declare class CompressionManager {
15
- private storage;
16
- constructor(storage: GraphStorage);
17
- /**
18
- * Prepare an entity for efficient similarity comparisons.
19
- * Pre-computes all normalized data to avoid repeated computation.
20
- *
21
- * Phase 12 Sprint 1: Added nameHash for fast bucketing.
22
- *
23
- * @param entity - The entity to prepare
24
- * @returns PreparedEntity with pre-computed data including hash
25
- */
26
- private prepareEntity;
27
- /**
28
- * Prepare multiple entities for efficient similarity comparisons.
29
- * Use this before batch comparison operations.
30
- *
31
- * @param entities - Entities to prepare
32
- * @returns Map of entity name to PreparedEntity
33
- */
34
- private prepareEntities;
35
- /**
36
- * Calculate similarity between two entities using multiple heuristics.
37
- *
38
- * Uses configurable weights defined in SIMILARITY_WEIGHTS constant.
39
- * See SIMILARITY_WEIGHTS for the breakdown of scoring factors.
40
- *
41
- * NOTE: For batch comparisons, use prepareEntities() + calculatePreparedSimilarity() for better performance.
42
- *
43
- * @param e1 - First entity
44
- * @param e2 - Second entity
45
- * @returns Similarity score from 0 (completely different) to 1 (identical)
46
- */
47
- calculateEntitySimilarity(e1: Entity, e2: Entity): number;
48
- /**
49
- * Efficiently calculate intersection size of two Sets without creating a new Set.
50
- * Iterates over the smaller set for O(min(m,n)) complexity.
51
- */
52
- private setIntersectionSize;
53
- /**
54
- * Calculate similarity between two prepared entities.
55
- * OPTIMIZED: Uses pre-computed Sets to avoid O(n) set creation per comparison.
56
- *
57
- * @param p1 - First prepared entity
58
- * @param p2 - Second prepared entity
59
- * @returns Similarity score from 0 (completely different) to 1 (identical)
60
- */
61
- private calculatePreparedSimilarity;
62
- /**
63
- * Find duplicate entities in the graph based on similarity threshold.
64
- *
65
- * OPTIMIZED: Uses bucketing strategies to reduce O(n²) comparisons:
66
- * 1. Buckets entities by entityType (only compare same types)
67
- * 2. Within each type, buckets by name prefix (first 2 chars normalized)
68
- * 3. Only compares entities within same or adjacent buckets
69
- *
70
- * Phase 9B: Supports progress tracking and cancellation via LongRunningOperationOptions.
71
- *
72
- * Complexity: O(n·k) where k is average bucket size (typically << n)
73
- *
74
- * @param threshold - Similarity threshold (0.0 to 1.0), default DEFAULT_DUPLICATE_THRESHOLD
75
- * @param options - Optional progress/cancellation options (Phase 9B)
76
- * @returns Array of duplicate groups (each group has similar entities)
77
- * @throws {OperationCancelledError} If operation is cancelled via signal (Phase 9B)
78
- */
79
- findDuplicates(threshold?: number, options?: LongRunningOperationOptions): Promise<string[][]>;
80
- /**
81
- * Merge a group of entities into a single entity.
82
- *
83
- * Merging strategy:
84
- * - First entity is kept (or renamed to targetName)
85
- * - Observations: Union of all observations
86
- * - Tags: Union of all tags
87
- * - Importance: Maximum importance value
88
- * - createdAt: Earliest date
89
- * - lastModified: Current timestamp
90
- * - Relations: Redirected to kept entity, duplicates removed
91
- *
92
- * @param entityNames - Names of entities to merge (first one is kept)
93
- * @param targetName - Optional new name for merged entity (default: first entity name)
94
- * @param options - Optional configuration
95
- * @param options.graph - Pre-loaded graph to use (avoids reload)
96
- * @param options.skipSave - If true, don't save (caller will save)
97
- * @returns The merged entity
98
- * @throws {InsufficientEntitiesError} If less than 2 entities provided
99
- * @throws {EntityNotFoundError} If any entity not found
100
- */
101
- mergeEntities(entityNames: string[], targetName?: string, options?: {
102
- graph?: KnowledgeGraph;
103
- skipSave?: boolean;
104
- }): Promise<Entity>;
105
- /**
106
- * Compress the knowledge graph by finding and merging duplicates.
107
- * OPTIMIZED: Loads graph once, performs all merges, saves once.
108
- *
109
- * Phase 9B: Supports progress tracking and cancellation via LongRunningOperationOptions.
110
- *
111
- * @param threshold - Similarity threshold for duplicate detection (0.0 to 1.0), default DEFAULT_DUPLICATE_THRESHOLD
112
- * @param dryRun - If true, only report what would be compressed without applying changes
113
- * @param options - Optional progress/cancellation options (Phase 9B)
114
- * @returns Compression result with statistics
115
- * @throws {OperationCancelledError} If operation is cancelled via signal (Phase 9B)
116
- */
117
- compressGraph(threshold?: number, dryRun?: boolean, options?: LongRunningOperationOptions): Promise<GraphCompressionResult>;
118
- }
119
- //# sourceMappingURL=CompressionManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CompressionManager.d.ts","sourceRoot":"","sources":["../../src/features/CompressionManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAY,sBAAsB,EAAE,cAAc,EAAE,2BAA2B,EAAkB,MAAM,mBAAmB,CAAC;AAC/I,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAW5D;;GAEG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAEzC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;;;;;;OAWG;IACH,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAwCzD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;;;;OAOG;IACH,OAAO,CAAC,2BAA2B;IAoCnC;;;;;;;;;;;;;;;;OAgBG;IACG,cAAc,CAClB,SAAS,GAAE,MAAoC,EAC/C,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA0GtB;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EAAE,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACf,GACL,OAAO,CAAC,MAAM,CAAC;IA8FlB;;;;;;;;;;;OAWG;IACG,aAAa,CACjB,SAAS,GAAE,MAAoC,EAC/C,MAAM,GAAE,OAAe,EACvB,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,sBAAsB,CAAC;CAgHnC"}