@liendev/core 0.19.5
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/README.md +336 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +46 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +20 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +71 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/migration-manager.d.ts +46 -0
- package/dist/config/migration-manager.d.ts.map +1 -0
- package/dist/config/migration-manager.js +119 -0
- package/dist/config/migration-manager.js.map +1 -0
- package/dist/config/migration.d.ts +20 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +155 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/schema.d.ts +101 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +58 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +122 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +477 -0
- package/dist/config/service.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/embeddings/cache.d.ts +45 -0
- package/dist/embeddings/cache.d.ts.map +1 -0
- package/dist/embeddings/cache.js +109 -0
- package/dist/embeddings/cache.js.map +1 -0
- package/dist/embeddings/local.d.ts +10 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +63 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/embeddings/types.d.ts +9 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +5 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/errors/codes.d.ts +18 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +25 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +85 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +134 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/frameworks/detector-service.d.ts +59 -0
- package/dist/frameworks/detector-service.d.ts.map +1 -0
- package/dist/frameworks/detector-service.js +219 -0
- package/dist/frameworks/detector-service.js.map +1 -0
- package/dist/frameworks/laravel/config.d.ts +6 -0
- package/dist/frameworks/laravel/config.d.ts.map +1 -0
- package/dist/frameworks/laravel/config.js +68 -0
- package/dist/frameworks/laravel/config.js.map +1 -0
- package/dist/frameworks/laravel/detector.d.ts +6 -0
- package/dist/frameworks/laravel/detector.d.ts.map +1 -0
- package/dist/frameworks/laravel/detector.js +96 -0
- package/dist/frameworks/laravel/detector.js.map +1 -0
- package/dist/frameworks/nodejs/config.d.ts +6 -0
- package/dist/frameworks/nodejs/config.d.ts.map +1 -0
- package/dist/frameworks/nodejs/config.js +57 -0
- package/dist/frameworks/nodejs/config.js.map +1 -0
- package/dist/frameworks/nodejs/detector.d.ts +6 -0
- package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
- package/dist/frameworks/nodejs/detector.js +77 -0
- package/dist/frameworks/nodejs/detector.js.map +1 -0
- package/dist/frameworks/php/config.d.ts +6 -0
- package/dist/frameworks/php/config.d.ts.map +1 -0
- package/dist/frameworks/php/config.js +53 -0
- package/dist/frameworks/php/config.js.map +1 -0
- package/dist/frameworks/php/detector.d.ts +7 -0
- package/dist/frameworks/php/detector.d.ts.map +1 -0
- package/dist/frameworks/php/detector.js +101 -0
- package/dist/frameworks/php/detector.js.map +1 -0
- package/dist/frameworks/registry.d.ts +20 -0
- package/dist/frameworks/registry.d.ts.map +1 -0
- package/dist/frameworks/registry.js +38 -0
- package/dist/frameworks/registry.js.map +1 -0
- package/dist/frameworks/shopify/config.d.ts +6 -0
- package/dist/frameworks/shopify/config.d.ts.map +1 -0
- package/dist/frameworks/shopify/config.js +50 -0
- package/dist/frameworks/shopify/config.js.map +1 -0
- package/dist/frameworks/shopify/detector.d.ts +6 -0
- package/dist/frameworks/shopify/detector.d.ts.map +1 -0
- package/dist/frameworks/shopify/detector.js +103 -0
- package/dist/frameworks/shopify/detector.js.map +1 -0
- package/dist/frameworks/types.d.ts +51 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +21 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/git/tracker.d.ts +56 -0
- package/dist/git/tracker.d.ts.map +1 -0
- package/dist/git/tracker.js +189 -0
- package/dist/git/tracker.js.map +1 -0
- package/dist/git/utils.d.ts +60 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +152 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/ast/chunker.d.ts +28 -0
- package/dist/indexer/ast/chunker.d.ts.map +1 -0
- package/dist/indexer/ast/chunker.js +268 -0
- package/dist/indexer/ast/chunker.js.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.js +106 -0
- package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
- package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
- package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
- package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/halstead.js +290 -0
- package/dist/indexer/ast/complexity/halstead.js.map +1 -0
- package/dist/indexer/ast/complexity/index.d.ts +13 -0
- package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/index.js +12 -0
- package/dist/indexer/ast/complexity/index.js.map +1 -0
- package/dist/indexer/ast/parser.d.ts +27 -0
- package/dist/indexer/ast/parser.d.ts.map +1 -0
- package/dist/indexer/ast/parser.js +103 -0
- package/dist/indexer/ast/parser.js.map +1 -0
- package/dist/indexer/ast/symbols.d.ts +17 -0
- package/dist/indexer/ast/symbols.d.ts.map +1 -0
- package/dist/indexer/ast/symbols.js +265 -0
- package/dist/indexer/ast/symbols.js.map +1 -0
- package/dist/indexer/ast/traversers/index.d.ts +19 -0
- package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/index.js +42 -0
- package/dist/indexer/ast/traversers/index.js.map +1 -0
- package/dist/indexer/ast/traversers/php.d.ts +21 -0
- package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/php.js +67 -0
- package/dist/indexer/ast/traversers/php.js.map +1 -0
- package/dist/indexer/ast/traversers/python.d.ts +28 -0
- package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/python.js +67 -0
- package/dist/indexer/ast/traversers/python.js.map +1 -0
- package/dist/indexer/ast/traversers/types.d.ts +98 -0
- package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/types.js +2 -0
- package/dist/indexer/ast/traversers/types.js.map +1 -0
- package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
- package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/typescript.js +88 -0
- package/dist/indexer/ast/traversers/typescript.js.map +1 -0
- package/dist/indexer/ast/types.d.ts +59 -0
- package/dist/indexer/ast/types.d.ts.map +1 -0
- package/dist/indexer/ast/types.js +2 -0
- package/dist/indexer/ast/types.js.map +1 -0
- package/dist/indexer/change-detector.d.ts +17 -0
- package/dist/indexer/change-detector.d.ts.map +1 -0
- package/dist/indexer/change-detector.js +207 -0
- package/dist/indexer/change-detector.js.map +1 -0
- package/dist/indexer/chunk-batch-processor.d.ts +103 -0
- package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
- package/dist/indexer/chunk-batch-processor.js +179 -0
- package/dist/indexer/chunk-batch-processor.js.map +1 -0
- package/dist/indexer/chunker.d.ts +10 -0
- package/dist/indexer/chunker.d.ts.map +1 -0
- package/dist/indexer/chunker.js +96 -0
- package/dist/indexer/chunker.js.map +1 -0
- package/dist/indexer/dependency-analyzer.d.ts +60 -0
- package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
- package/dist/indexer/dependency-analyzer.js +261 -0
- package/dist/indexer/dependency-analyzer.js.map +1 -0
- package/dist/indexer/incremental.d.ts +47 -0
- package/dist/indexer/incremental.d.ts.map +1 -0
- package/dist/indexer/incremental.js +284 -0
- package/dist/indexer/incremental.js.map +1 -0
- package/dist/indexer/index.d.ts +80 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +364 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/json-template-chunker.d.ts +9 -0
- package/dist/indexer/json-template-chunker.d.ts.map +1 -0
- package/dist/indexer/json-template-chunker.js +83 -0
- package/dist/indexer/json-template-chunker.js.map +1 -0
- package/dist/indexer/liquid-chunker.d.ts +13 -0
- package/dist/indexer/liquid-chunker.d.ts.map +1 -0
- package/dist/indexer/liquid-chunker.js +272 -0
- package/dist/indexer/liquid-chunker.js.map +1 -0
- package/dist/indexer/manifest.d.ts +122 -0
- package/dist/indexer/manifest.d.ts.map +1 -0
- package/dist/indexer/manifest.js +262 -0
- package/dist/indexer/manifest.js.map +1 -0
- package/dist/indexer/progress-tracker.d.ts +35 -0
- package/dist/indexer/progress-tracker.d.ts.map +1 -0
- package/dist/indexer/progress-tracker.js +33 -0
- package/dist/indexer/progress-tracker.js.map +1 -0
- package/dist/indexer/scanner.d.ts +16 -0
- package/dist/indexer/scanner.d.ts.map +1 -0
- package/dist/indexer/scanner.js +159 -0
- package/dist/indexer/scanner.js.map +1 -0
- package/dist/indexer/symbol-extractor.d.ts +18 -0
- package/dist/indexer/symbol-extractor.d.ts.map +1 -0
- package/dist/indexer/symbol-extractor.js +351 -0
- package/dist/indexer/symbol-extractor.js.map +1 -0
- package/dist/indexer/types.d.ts +34 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/insights/complexity-analyzer.d.ts +82 -0
- package/dist/insights/complexity-analyzer.d.ts.map +1 -0
- package/dist/insights/complexity-analyzer.js +356 -0
- package/dist/insights/complexity-analyzer.js.map +1 -0
- package/dist/insights/formatters/index.d.ts +11 -0
- package/dist/insights/formatters/index.d.ts.map +1 -0
- package/dist/insights/formatters/index.js +20 -0
- package/dist/insights/formatters/index.js.map +1 -0
- package/dist/insights/formatters/json.d.ts +7 -0
- package/dist/insights/formatters/json.d.ts.map +1 -0
- package/dist/insights/formatters/json.js +14 -0
- package/dist/insights/formatters/json.js.map +1 -0
- package/dist/insights/formatters/sarif.d.ts +6 -0
- package/dist/insights/formatters/sarif.d.ts.map +1 -0
- package/dist/insights/formatters/sarif.js +113 -0
- package/dist/insights/formatters/sarif.js.map +1 -0
- package/dist/insights/formatters/text.d.ts +6 -0
- package/dist/insights/formatters/text.d.ts.map +1 -0
- package/dist/insights/formatters/text.js +154 -0
- package/dist/insights/formatters/text.js.map +1 -0
- package/dist/insights/types.d.ts +73 -0
- package/dist/insights/types.d.ts.map +1 -0
- package/dist/insights/types.js +9 -0
- package/dist/insights/types.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/path-matching.d.ts +69 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +123 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/result.d.ts +65 -0
- package/dist/utils/result.d.ts.map +1 -0
- package/dist/utils/result.js +67 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/version.d.ts +22 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +28 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/vectordb/batch-insert.d.ts +14 -0
- package/dist/vectordb/batch-insert.d.ts.map +1 -0
- package/dist/vectordb/batch-insert.js +185 -0
- package/dist/vectordb/batch-insert.js.map +1 -0
- package/dist/vectordb/boosting/composer.d.ts +51 -0
- package/dist/vectordb/boosting/composer.d.ts.map +1 -0
- package/dist/vectordb/boosting/composer.js +65 -0
- package/dist/vectordb/boosting/composer.js.map +1 -0
- package/dist/vectordb/boosting/index.d.ts +22 -0
- package/dist/vectordb/boosting/index.d.ts.map +1 -0
- package/dist/vectordb/boosting/index.js +22 -0
- package/dist/vectordb/boosting/index.js.map +1 -0
- package/dist/vectordb/boosting/strategies.d.ts +40 -0
- package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
- package/dist/vectordb/boosting/strategies.js +174 -0
- package/dist/vectordb/boosting/strategies.js.map +1 -0
- package/dist/vectordb/boosting/types.d.ts +20 -0
- package/dist/vectordb/boosting/types.d.ts.map +1 -0
- package/dist/vectordb/boosting/types.js +2 -0
- package/dist/vectordb/boosting/types.js.map +1 -0
- package/dist/vectordb/intent-classifier.d.ts +99 -0
- package/dist/vectordb/intent-classifier.d.ts.map +1 -0
- package/dist/vectordb/intent-classifier.js +193 -0
- package/dist/vectordb/intent-classifier.js.map +1 -0
- package/dist/vectordb/lancedb.d.ts +45 -0
- package/dist/vectordb/lancedb.d.ts.map +1 -0
- package/dist/vectordb/lancedb.js +203 -0
- package/dist/vectordb/lancedb.js.map +1 -0
- package/dist/vectordb/maintenance.d.ts +18 -0
- package/dist/vectordb/maintenance.d.ts.map +1 -0
- package/dist/vectordb/maintenance.js +87 -0
- package/dist/vectordb/maintenance.js.map +1 -0
- package/dist/vectordb/query.d.ts +34 -0
- package/dist/vectordb/query.d.ts.map +1 -0
- package/dist/vectordb/query.js +303 -0
- package/dist/vectordb/query.js.map +1 -0
- package/dist/vectordb/relevance.d.ts +15 -0
- package/dist/vectordb/relevance.d.ts.map +1 -0
- package/dist/vectordb/relevance.js +19 -0
- package/dist/vectordb/relevance.js.map +1 -0
- package/dist/vectordb/types.d.ts +29 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +2 -0
- package/dist/vectordb/types.js.map +1 -0
- package/dist/vectordb/version.d.ts +16 -0
- package/dist/vectordb/version.d.ts.map +1 -0
- package/dist/vectordb/version.js +40 -0
- package/dist/vectordb/version.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU cache for embeddings with configurable max size.
|
|
3
|
+
* Wraps any EmbeddingService to add caching functionality.
|
|
4
|
+
*
|
|
5
|
+
* Benefits:
|
|
6
|
+
* - Faster repeated searches
|
|
7
|
+
* - Reduced CPU usage
|
|
8
|
+
* - Better user experience for common queries
|
|
9
|
+
*/
|
|
10
|
+
export class CachedEmbeddings {
|
|
11
|
+
cache = new Map();
|
|
12
|
+
maxSize;
|
|
13
|
+
underlying;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new cached embeddings service
|
|
16
|
+
* @param underlying - The underlying embedding service to wrap
|
|
17
|
+
* @param maxSize - Maximum number of embeddings to cache (default: 1000)
|
|
18
|
+
*/
|
|
19
|
+
constructor(underlying, maxSize = 1000) {
|
|
20
|
+
this.underlying = underlying;
|
|
21
|
+
this.maxSize = maxSize;
|
|
22
|
+
}
|
|
23
|
+
async initialize() {
|
|
24
|
+
return this.underlying.initialize();
|
|
25
|
+
}
|
|
26
|
+
async embed(text) {
|
|
27
|
+
// Check cache first
|
|
28
|
+
const cached = this.cache.get(text);
|
|
29
|
+
if (cached) {
|
|
30
|
+
return cached;
|
|
31
|
+
}
|
|
32
|
+
// Generate embedding
|
|
33
|
+
const result = await this.underlying.embed(text);
|
|
34
|
+
// Add to cache with LRU eviction
|
|
35
|
+
if (this.cache.size >= this.maxSize) {
|
|
36
|
+
// Remove oldest entry (first key in Map)
|
|
37
|
+
const firstKey = this.cache.keys().next().value;
|
|
38
|
+
if (firstKey !== undefined) {
|
|
39
|
+
this.cache.delete(firstKey);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this.cache.set(text, result);
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
async embedBatch(texts) {
|
|
46
|
+
const results = [];
|
|
47
|
+
const uncachedTexts = [];
|
|
48
|
+
const uncachedIndices = [];
|
|
49
|
+
// Check cache for each text
|
|
50
|
+
for (let i = 0; i < texts.length; i++) {
|
|
51
|
+
const cached = this.cache.get(texts[i]);
|
|
52
|
+
if (cached) {
|
|
53
|
+
results[i] = cached;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
uncachedTexts.push(texts[i]);
|
|
57
|
+
uncachedIndices.push(i);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Generate embeddings for uncached texts
|
|
61
|
+
if (uncachedTexts.length > 0) {
|
|
62
|
+
const newEmbeddings = await this.underlying.embedBatch(uncachedTexts);
|
|
63
|
+
// Store in cache and results
|
|
64
|
+
for (let i = 0; i < newEmbeddings.length; i++) {
|
|
65
|
+
const text = uncachedTexts[i];
|
|
66
|
+
const embedding = newEmbeddings[i];
|
|
67
|
+
const resultIndex = uncachedIndices[i];
|
|
68
|
+
// Add to cache with LRU eviction
|
|
69
|
+
if (this.cache.size >= this.maxSize) {
|
|
70
|
+
const firstKey = this.cache.keys().next().value;
|
|
71
|
+
if (firstKey !== undefined) {
|
|
72
|
+
this.cache.delete(firstKey);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
this.cache.set(text, embedding);
|
|
76
|
+
results[resultIndex] = embedding;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return results;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Gets the current cache size
|
|
83
|
+
*/
|
|
84
|
+
getCacheSize() {
|
|
85
|
+
return this.cache.size;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Gets cache statistics
|
|
89
|
+
*/
|
|
90
|
+
getCacheStats() {
|
|
91
|
+
return {
|
|
92
|
+
size: this.cache.size,
|
|
93
|
+
maxSize: this.maxSize,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Clears the cache
|
|
98
|
+
*/
|
|
99
|
+
clearCache() {
|
|
100
|
+
this.cache.clear();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Checks if a text is in the cache
|
|
104
|
+
*/
|
|
105
|
+
has(text) {
|
|
106
|
+
return this.cache.has(text);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/embeddings/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EmbeddingService } from './types.js';
|
|
2
|
+
export declare class LocalEmbeddings implements EmbeddingService {
|
|
3
|
+
private extractor;
|
|
4
|
+
private readonly modelName;
|
|
5
|
+
private initPromise;
|
|
6
|
+
initialize(): Promise<void>;
|
|
7
|
+
embed(text: string): Promise<Float32Array>;
|
|
8
|
+
embedBatch(texts: string[]): Promise<Float32Array[]>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ9C,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,WAAW,CAA8B;IAE3C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmB1C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAkB3D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { pipeline, env } from '@xenova/transformers';
|
|
2
|
+
import { EmbeddingError, wrapError } from '../errors/index.js';
|
|
3
|
+
import { DEFAULT_EMBEDDING_MODEL } from '../constants.js';
|
|
4
|
+
// Configure transformers.js to cache models locally
|
|
5
|
+
env.allowRemoteModels = true;
|
|
6
|
+
env.allowLocalModels = true;
|
|
7
|
+
export class LocalEmbeddings {
|
|
8
|
+
extractor = null;
|
|
9
|
+
modelName = DEFAULT_EMBEDDING_MODEL;
|
|
10
|
+
initPromise = null;
|
|
11
|
+
async initialize() {
|
|
12
|
+
// Prevent multiple simultaneous initializations
|
|
13
|
+
if (this.initPromise) {
|
|
14
|
+
return this.initPromise;
|
|
15
|
+
}
|
|
16
|
+
if (this.extractor) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
this.initPromise = (async () => {
|
|
20
|
+
try {
|
|
21
|
+
// This downloads ~100MB on first run, then caches in ~/.cache/huggingface
|
|
22
|
+
this.extractor = await pipeline('feature-extraction', this.modelName);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
this.initPromise = null;
|
|
26
|
+
throw wrapError(error, 'Failed to initialize embedding model');
|
|
27
|
+
}
|
|
28
|
+
})();
|
|
29
|
+
return this.initPromise;
|
|
30
|
+
}
|
|
31
|
+
async embed(text) {
|
|
32
|
+
await this.initialize();
|
|
33
|
+
if (!this.extractor) {
|
|
34
|
+
throw new EmbeddingError('Embedding model not initialized');
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const output = await this.extractor(text, {
|
|
38
|
+
pooling: 'mean',
|
|
39
|
+
normalize: true,
|
|
40
|
+
});
|
|
41
|
+
return output.data;
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw wrapError(error, 'Failed to generate embedding', { textLength: text.length });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async embedBatch(texts) {
|
|
48
|
+
await this.initialize();
|
|
49
|
+
if (!this.extractor) {
|
|
50
|
+
throw new EmbeddingError('Embedding model not initialized');
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Process embeddings with Promise.all for concurrent execution
|
|
54
|
+
// Each call is sequential but Promise.all allows task interleaving
|
|
55
|
+
const results = await Promise.all(texts.map(text => this.embed(text)));
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw wrapError(error, 'Failed to generate batch embeddings', { batchSize: texts.length });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/embeddings/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAkC,MAAM,sBAAsB,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,oDAAoD;AACpD,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC7B,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAE5B,MAAM,OAAO,eAAe;IAClB,SAAS,GAAqC,IAAI,CAAC;IAC1C,SAAS,GAAG,uBAAuB,CAAC;IAC7C,WAAW,GAAyB,IAAI,CAAC;IAEjD,KAAK,CAAC,UAAU;QACd,gDAAgD;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC;gBACH,0EAA0E;gBAC1E,IAAI,CAAC,SAAS,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAA8B,CAAC;YACrG,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,MAAM,SAAS,CAAC,KAAK,EAAE,sCAAsC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;gBACxC,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,IAAoB,CAAC;QACrC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,KAAK,EAAE,8BAA8B,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC;YACH,+DAA+D;YAC/D,mEAAmE;YACnE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACpC,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,SAAS,CAAC,KAAK,EAAE,qCAAqC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { EMBEDDING_DIMENSIONS } from '../constants.js';
|
|
2
|
+
export interface EmbeddingService {
|
|
3
|
+
initialize(): Promise<void>;
|
|
4
|
+
embed(text: string): Promise<Float32Array>;
|
|
5
|
+
embedBatch(texts: string[]): Promise<Float32Array[]>;
|
|
6
|
+
}
|
|
7
|
+
export declare const EMBEDDING_DIMENSION = 384;
|
|
8
|
+
export { EMBEDDING_DIMENSIONS };
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACtD;AAED,eAAO,MAAM,mBAAmB,MAAuB,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAQvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAExD,4BAA4B;AAC5B,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error codes for all Lien-specific errors.
|
|
3
|
+
* Used to identify error types programmatically.
|
|
4
|
+
*/
|
|
5
|
+
export declare enum LienErrorCode {
|
|
6
|
+
CONFIG_NOT_FOUND = "CONFIG_NOT_FOUND",
|
|
7
|
+
CONFIG_INVALID = "CONFIG_INVALID",
|
|
8
|
+
INDEX_NOT_FOUND = "INDEX_NOT_FOUND",
|
|
9
|
+
INDEX_CORRUPTED = "INDEX_CORRUPTED",
|
|
10
|
+
EMBEDDING_MODEL_FAILED = "EMBEDDING_MODEL_FAILED",
|
|
11
|
+
EMBEDDING_GENERATION_FAILED = "EMBEDDING_GENERATION_FAILED",
|
|
12
|
+
FILE_NOT_FOUND = "FILE_NOT_FOUND",
|
|
13
|
+
FILE_NOT_READABLE = "FILE_NOT_READABLE",
|
|
14
|
+
INVALID_PATH = "INVALID_PATH",
|
|
15
|
+
INVALID_INPUT = "INVALID_INPUT",
|
|
16
|
+
INTERNAL_ERROR = "INTERNAL_ERROR"
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,aAAa;IAEvB,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IAGjC,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IAGnC,sBAAsB,2BAA2B;IACjD,2BAA2B,gCAAgC;IAG3D,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAG7B,aAAa,kBAAkB;IAG/B,cAAc,mBAAmB;CAClC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error codes for all Lien-specific errors.
|
|
3
|
+
* Used to identify error types programmatically.
|
|
4
|
+
*/
|
|
5
|
+
export var LienErrorCode;
|
|
6
|
+
(function (LienErrorCode) {
|
|
7
|
+
// Configuration
|
|
8
|
+
LienErrorCode["CONFIG_NOT_FOUND"] = "CONFIG_NOT_FOUND";
|
|
9
|
+
LienErrorCode["CONFIG_INVALID"] = "CONFIG_INVALID";
|
|
10
|
+
// Index
|
|
11
|
+
LienErrorCode["INDEX_NOT_FOUND"] = "INDEX_NOT_FOUND";
|
|
12
|
+
LienErrorCode["INDEX_CORRUPTED"] = "INDEX_CORRUPTED";
|
|
13
|
+
// Embeddings
|
|
14
|
+
LienErrorCode["EMBEDDING_MODEL_FAILED"] = "EMBEDDING_MODEL_FAILED";
|
|
15
|
+
LienErrorCode["EMBEDDING_GENERATION_FAILED"] = "EMBEDDING_GENERATION_FAILED";
|
|
16
|
+
// File System
|
|
17
|
+
LienErrorCode["FILE_NOT_FOUND"] = "FILE_NOT_FOUND";
|
|
18
|
+
LienErrorCode["FILE_NOT_READABLE"] = "FILE_NOT_READABLE";
|
|
19
|
+
LienErrorCode["INVALID_PATH"] = "INVALID_PATH";
|
|
20
|
+
// Tool Input
|
|
21
|
+
LienErrorCode["INVALID_INPUT"] = "INVALID_INPUT";
|
|
22
|
+
// System
|
|
23
|
+
LienErrorCode["INTERNAL_ERROR"] = "INTERNAL_ERROR";
|
|
24
|
+
})(LienErrorCode || (LienErrorCode = {}));
|
|
25
|
+
//# sourceMappingURL=codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,aAuBX;AAvBD,WAAY,aAAa;IACvB,gBAAgB;IAChB,sDAAqC,CAAA;IACrC,kDAAiC,CAAA;IAEjC,QAAQ;IACR,oDAAmC,CAAA;IACnC,oDAAmC,CAAA;IAEnC,aAAa;IACb,kEAAiD,CAAA;IACjD,4EAA2D,CAAA;IAE3D,cAAc;IACd,kDAAiC,CAAA;IACjC,wDAAuC,CAAA;IACvC,8CAA6B,CAAA;IAE7B,aAAa;IACb,gDAA+B,CAAA;IAE/B,SAAS;IACT,kDAAiC,CAAA;AACnC,CAAC,EAvBW,aAAa,KAAb,aAAa,QAuBxB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { LienErrorCode } from './codes.js';
|
|
2
|
+
export { LienErrorCode } from './codes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Severity levels for errors
|
|
5
|
+
*/
|
|
6
|
+
export type ErrorSeverity = 'low' | 'medium' | 'high' | 'critical';
|
|
7
|
+
/**
|
|
8
|
+
* Base error class for all Lien-specific errors
|
|
9
|
+
*/
|
|
10
|
+
export declare class LienError extends Error {
|
|
11
|
+
readonly code: LienErrorCode;
|
|
12
|
+
readonly context?: Record<string, unknown> | undefined;
|
|
13
|
+
readonly severity: ErrorSeverity;
|
|
14
|
+
readonly recoverable: boolean;
|
|
15
|
+
readonly retryable: boolean;
|
|
16
|
+
constructor(message: string, code: LienErrorCode, context?: Record<string, unknown> | undefined, severity?: ErrorSeverity, recoverable?: boolean, retryable?: boolean);
|
|
17
|
+
/**
|
|
18
|
+
* Serialize error to JSON for MCP responses
|
|
19
|
+
*/
|
|
20
|
+
toJSON(): {
|
|
21
|
+
error: string;
|
|
22
|
+
code: LienErrorCode;
|
|
23
|
+
severity: ErrorSeverity;
|
|
24
|
+
recoverable: boolean;
|
|
25
|
+
context: Record<string, unknown> | undefined;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Check if this error is retryable
|
|
29
|
+
*/
|
|
30
|
+
isRetryable(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check if this error is recoverable
|
|
33
|
+
*/
|
|
34
|
+
isRecoverable(): boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Configuration-related errors (loading, parsing, migration)
|
|
38
|
+
*/
|
|
39
|
+
export declare class ConfigError extends LienError {
|
|
40
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Indexing-related errors (file processing, chunking)
|
|
44
|
+
*/
|
|
45
|
+
export declare class IndexingError extends LienError {
|
|
46
|
+
readonly file?: string | undefined;
|
|
47
|
+
constructor(message: string, file?: string | undefined, context?: Record<string, unknown>);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Embedding generation errors
|
|
51
|
+
*/
|
|
52
|
+
export declare class EmbeddingError extends LienError {
|
|
53
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Vector database errors (connection, query, storage)
|
|
57
|
+
*/
|
|
58
|
+
export declare class DatabaseError extends LienError {
|
|
59
|
+
constructor(message: string, context?: Record<string, unknown>);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Helper function to wrap unknown errors with context
|
|
63
|
+
* @param error - Unknown error object to wrap
|
|
64
|
+
* @param context - Context message describing what operation failed
|
|
65
|
+
* @param additionalContext - Optional additional context data
|
|
66
|
+
* @returns LienError with proper message and context
|
|
67
|
+
*/
|
|
68
|
+
export declare function wrapError(error: unknown, context: string, additionalContext?: Record<string, unknown>): LienError;
|
|
69
|
+
/**
|
|
70
|
+
* Type guard to check if an error is a LienError
|
|
71
|
+
*/
|
|
72
|
+
export declare function isLienError(error: unknown): error is LienError;
|
|
73
|
+
/**
|
|
74
|
+
* Extract error message from unknown error type
|
|
75
|
+
* @param error - Unknown error object
|
|
76
|
+
* @returns Error message string
|
|
77
|
+
*/
|
|
78
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
79
|
+
/**
|
|
80
|
+
* Extract stack trace from unknown error type
|
|
81
|
+
* @param error - Unknown error object
|
|
82
|
+
* @returns Stack trace string or undefined
|
|
83
|
+
*/
|
|
84
|
+
export declare function getErrorStack(error: unknown): string | undefined;
|
|
85
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnE;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGhB,IAAI,EAAE,aAAa;aACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;aACjC,QAAQ,EAAE,aAAa;aACvB,WAAW,EAAE,OAAO;aACpB,SAAS,EAAE,OAAO;gBALlC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACjC,QAAQ,GAAE,aAAwB,EAClC,WAAW,GAAE,OAAc,EAC3B,SAAS,GAAE,OAAe;IAW5C;;OAEG;IACH,MAAM;;;;;;;IAUN;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;aAGxB,IAAI,CAAC,EAAE,MAAM;gBAD7B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKpC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,SAAS,CAgBX;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKhE"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { LienErrorCode } from './codes.js';
|
|
2
|
+
// Re-export for consumers
|
|
3
|
+
export { LienErrorCode } from './codes.js';
|
|
4
|
+
/**
|
|
5
|
+
* Base error class for all Lien-specific errors
|
|
6
|
+
*/
|
|
7
|
+
export class LienError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
context;
|
|
10
|
+
severity;
|
|
11
|
+
recoverable;
|
|
12
|
+
retryable;
|
|
13
|
+
constructor(message, code, context, severity = 'medium', recoverable = true, retryable = false) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.code = code;
|
|
16
|
+
this.context = context;
|
|
17
|
+
this.severity = severity;
|
|
18
|
+
this.recoverable = recoverable;
|
|
19
|
+
this.retryable = retryable;
|
|
20
|
+
this.name = 'LienError';
|
|
21
|
+
// Maintains proper stack trace for where our error was thrown (only available on V8)
|
|
22
|
+
if (Error.captureStackTrace) {
|
|
23
|
+
Error.captureStackTrace(this, this.constructor);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Serialize error to JSON for MCP responses
|
|
28
|
+
*/
|
|
29
|
+
toJSON() {
|
|
30
|
+
return {
|
|
31
|
+
error: this.message,
|
|
32
|
+
code: this.code,
|
|
33
|
+
severity: this.severity,
|
|
34
|
+
recoverable: this.recoverable,
|
|
35
|
+
context: this.context,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check if this error is retryable
|
|
40
|
+
*/
|
|
41
|
+
isRetryable() {
|
|
42
|
+
return this.retryable;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if this error is recoverable
|
|
46
|
+
*/
|
|
47
|
+
isRecoverable() {
|
|
48
|
+
return this.recoverable;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Configuration-related errors (loading, parsing, migration)
|
|
53
|
+
*/
|
|
54
|
+
export class ConfigError extends LienError {
|
|
55
|
+
constructor(message, context) {
|
|
56
|
+
super(message, LienErrorCode.CONFIG_INVALID, context, 'medium', true, false);
|
|
57
|
+
this.name = 'ConfigError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Indexing-related errors (file processing, chunking)
|
|
62
|
+
*/
|
|
63
|
+
export class IndexingError extends LienError {
|
|
64
|
+
file;
|
|
65
|
+
constructor(message, file, context) {
|
|
66
|
+
super(message, LienErrorCode.INTERNAL_ERROR, { ...context, file }, 'medium', true, false);
|
|
67
|
+
this.file = file;
|
|
68
|
+
this.name = 'IndexingError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Embedding generation errors
|
|
73
|
+
*/
|
|
74
|
+
export class EmbeddingError extends LienError {
|
|
75
|
+
constructor(message, context) {
|
|
76
|
+
super(message, LienErrorCode.EMBEDDING_GENERATION_FAILED, context, 'high', true, true);
|
|
77
|
+
this.name = 'EmbeddingError';
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Vector database errors (connection, query, storage)
|
|
82
|
+
*/
|
|
83
|
+
export class DatabaseError extends LienError {
|
|
84
|
+
constructor(message, context) {
|
|
85
|
+
super(message, LienErrorCode.INTERNAL_ERROR, context, 'high', true, true);
|
|
86
|
+
this.name = 'DatabaseError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Helper function to wrap unknown errors with context
|
|
91
|
+
* @param error - Unknown error object to wrap
|
|
92
|
+
* @param context - Context message describing what operation failed
|
|
93
|
+
* @param additionalContext - Optional additional context data
|
|
94
|
+
* @returns LienError with proper message and context
|
|
95
|
+
*/
|
|
96
|
+
export function wrapError(error, context, additionalContext) {
|
|
97
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
98
|
+
const stack = error instanceof Error ? error.stack : undefined;
|
|
99
|
+
const wrappedError = new LienError(`${context}: ${message}`, LienErrorCode.INTERNAL_ERROR, additionalContext);
|
|
100
|
+
// Preserve original stack trace if available
|
|
101
|
+
if (stack) {
|
|
102
|
+
wrappedError.stack = `${wrappedError.stack}\n\nCaused by:\n${stack}`;
|
|
103
|
+
}
|
|
104
|
+
return wrappedError;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Type guard to check if an error is a LienError
|
|
108
|
+
*/
|
|
109
|
+
export function isLienError(error) {
|
|
110
|
+
return error instanceof LienError;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Extract error message from unknown error type
|
|
114
|
+
* @param error - Unknown error object
|
|
115
|
+
* @returns Error message string
|
|
116
|
+
*/
|
|
117
|
+
export function getErrorMessage(error) {
|
|
118
|
+
if (error instanceof Error) {
|
|
119
|
+
return error.message;
|
|
120
|
+
}
|
|
121
|
+
return String(error);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Extract stack trace from unknown error type
|
|
125
|
+
* @param error - Unknown error object
|
|
126
|
+
* @returns Stack trace string or undefined
|
|
127
|
+
*/
|
|
128
|
+
export function getErrorStack(error) {
|
|
129
|
+
if (error instanceof Error) {
|
|
130
|
+
return error.stack;
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { DetectionResult, DetectionOptions } from './types.js';
|
|
2
|
+
/** Detection result with internal priority for conflict resolution */
|
|
3
|
+
export type DetectionWithPriority = DetectionResult & {
|
|
4
|
+
priority: number;
|
|
5
|
+
};
|
|
6
|
+
/** Detections grouped by confidence level */
|
|
7
|
+
export interface GroupedDetections {
|
|
8
|
+
high: DetectionWithPriority[];
|
|
9
|
+
medium: DetectionWithPriority[];
|
|
10
|
+
low: DetectionWithPriority[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Group detections by confidence level.
|
|
14
|
+
*/
|
|
15
|
+
export declare function groupByConfidence(detections: DetectionWithPriority[]): GroupedDetections;
|
|
16
|
+
/**
|
|
17
|
+
* Select the winner from a list using priority (highest priority wins).
|
|
18
|
+
* Returns the winner and the remaining (skipped) detections.
|
|
19
|
+
*
|
|
20
|
+
* @throws Error if detections array is empty
|
|
21
|
+
*/
|
|
22
|
+
export declare function selectByPriority(detections: DetectionWithPriority[]): {
|
|
23
|
+
winner: DetectionWithPriority;
|
|
24
|
+
skipped: DetectionWithPriority[];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Resolve conflicts when multiple frameworks are detected at the same path.
|
|
28
|
+
*
|
|
29
|
+
* Resolution rules (applied in order):
|
|
30
|
+
* 1. Multiple HIGH confidence → keep ALL (hybrid project support)
|
|
31
|
+
* 2. Single HIGH confidence → keep it, skip lower confidence
|
|
32
|
+
* 3. No HIGH but have MEDIUM → use priority to select winner
|
|
33
|
+
* 4. Only LOW confidence → use priority to select winner
|
|
34
|
+
*
|
|
35
|
+
* @param detections - All detected frameworks with their priorities
|
|
36
|
+
* @param relativePath - Path being analyzed (for logging)
|
|
37
|
+
* @returns Array of resolved detection results
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveFrameworkConflicts(detections: DetectionWithPriority[], relativePath: string): DetectionResult[];
|
|
40
|
+
/**
|
|
41
|
+
* Run all framework detectors at a path and collect results.
|
|
42
|
+
*
|
|
43
|
+
* @param rootDir - Project root directory
|
|
44
|
+
* @param relativePath - Path relative to root being scanned
|
|
45
|
+
* @returns Array of detection results with priorities
|
|
46
|
+
*/
|
|
47
|
+
export declare function runAllDetectors(rootDir: string, relativePath: string): Promise<DetectionWithPriority[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Detect all frameworks in a monorepo by recursively scanning subdirectories
|
|
50
|
+
* @param rootDir - Absolute path to project root
|
|
51
|
+
* @param options - Detection options (max depth, skip dirs)
|
|
52
|
+
* @returns Array of detected frameworks with their paths
|
|
53
|
+
*/
|
|
54
|
+
export declare function detectAllFrameworks(rootDir: string, options?: Partial<DetectionOptions>): Promise<DetectionResult[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Get a human-readable summary of detected frameworks
|
|
57
|
+
*/
|
|
58
|
+
export declare function getDetectionSummary(results: DetectionResult[]): string;
|
|
59
|
+
//# sourceMappingURL=detector-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector-service.d.ts","sourceRoot":"","sources":["../../src/frameworks/detector-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAA2B,MAAM,YAAY,CAAC;AAGxF,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,EAAE,CAAC;IAC9B,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,GAAG,EAAE,qBAAqB,EAAE,CAAC;CAC9B;AA4BD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,iBAAiB,CAMxF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,qBAAqB,EAAE,GAClC;IAAE,MAAM,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,qBAAqB,EAAE,CAAA;CAAE,CASrE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,qBAAqB,EAAE,EACnC,YAAY,EAAE,MAAM,GACnB,eAAe,EAAE,CA4CnB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAkBlC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,eAAe,EAAE,CAAC,CAY5B;AAgFD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAmBtE"}
|