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