rag-lite-ts 1.0.1

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +240 -0
  3. package/dist/api-errors.d.ts +90 -0
  4. package/dist/api-errors.d.ts.map +1 -0
  5. package/dist/api-errors.js +320 -0
  6. package/dist/api-errors.js.map +1 -0
  7. package/dist/chunker.d.ts +47 -0
  8. package/dist/chunker.d.ts.map +1 -0
  9. package/dist/chunker.js +256 -0
  10. package/dist/chunker.js.map +1 -0
  11. package/dist/cli/indexer.d.ts +11 -0
  12. package/dist/cli/indexer.d.ts.map +1 -0
  13. package/dist/cli/indexer.js +272 -0
  14. package/dist/cli/indexer.js.map +1 -0
  15. package/dist/cli/search.d.ts +7 -0
  16. package/dist/cli/search.d.ts.map +1 -0
  17. package/dist/cli/search.js +206 -0
  18. package/dist/cli/search.js.map +1 -0
  19. package/dist/cli.d.ts +3 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +362 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config.d.ts +90 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +281 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/db.d.ts +90 -0
  28. package/dist/db.d.ts.map +1 -0
  29. package/dist/db.js +340 -0
  30. package/dist/db.js.map +1 -0
  31. package/dist/embedder.d.ts +101 -0
  32. package/dist/embedder.d.ts.map +1 -0
  33. package/dist/embedder.js +323 -0
  34. package/dist/embedder.js.map +1 -0
  35. package/dist/error-handler.d.ts +91 -0
  36. package/dist/error-handler.d.ts.map +1 -0
  37. package/dist/error-handler.js +196 -0
  38. package/dist/error-handler.js.map +1 -0
  39. package/dist/file-processor.d.ts +59 -0
  40. package/dist/file-processor.d.ts.map +1 -0
  41. package/dist/file-processor.js +312 -0
  42. package/dist/file-processor.js.map +1 -0
  43. package/dist/index-manager.d.ts +99 -0
  44. package/dist/index-manager.d.ts.map +1 -0
  45. package/dist/index-manager.js +444 -0
  46. package/dist/index-manager.js.map +1 -0
  47. package/dist/index.d.ts +13 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +21 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/indexer.d.ts +7 -0
  52. package/dist/indexer.d.ts.map +1 -0
  53. package/dist/indexer.js +51 -0
  54. package/dist/indexer.js.map +1 -0
  55. package/dist/ingestion.d.ts +175 -0
  56. package/dist/ingestion.d.ts.map +1 -0
  57. package/dist/ingestion.js +705 -0
  58. package/dist/ingestion.js.map +1 -0
  59. package/dist/mcp-server.d.ts +14 -0
  60. package/dist/mcp-server.d.ts.map +1 -0
  61. package/dist/mcp-server.js +680 -0
  62. package/dist/mcp-server.js.map +1 -0
  63. package/dist/path-manager.d.ts +42 -0
  64. package/dist/path-manager.d.ts.map +1 -0
  65. package/dist/path-manager.js +66 -0
  66. package/dist/path-manager.js.map +1 -0
  67. package/dist/preprocess.d.ts +19 -0
  68. package/dist/preprocess.d.ts.map +1 -0
  69. package/dist/preprocess.js +203 -0
  70. package/dist/preprocess.js.map +1 -0
  71. package/dist/preprocessors/index.d.ts +17 -0
  72. package/dist/preprocessors/index.d.ts.map +1 -0
  73. package/dist/preprocessors/index.js +38 -0
  74. package/dist/preprocessors/index.js.map +1 -0
  75. package/dist/preprocessors/mdx.d.ts +25 -0
  76. package/dist/preprocessors/mdx.d.ts.map +1 -0
  77. package/dist/preprocessors/mdx.js +101 -0
  78. package/dist/preprocessors/mdx.js.map +1 -0
  79. package/dist/preprocessors/mermaid.d.ts +68 -0
  80. package/dist/preprocessors/mermaid.d.ts.map +1 -0
  81. package/dist/preprocessors/mermaid.js +329 -0
  82. package/dist/preprocessors/mermaid.js.map +1 -0
  83. package/dist/preprocessors/registry.d.ts +56 -0
  84. package/dist/preprocessors/registry.d.ts.map +1 -0
  85. package/dist/preprocessors/registry.js +179 -0
  86. package/dist/preprocessors/registry.js.map +1 -0
  87. package/dist/reranker.d.ts +40 -0
  88. package/dist/reranker.d.ts.map +1 -0
  89. package/dist/reranker.js +212 -0
  90. package/dist/reranker.js.map +1 -0
  91. package/dist/resource-manager-demo.d.ts +7 -0
  92. package/dist/resource-manager-demo.d.ts.map +1 -0
  93. package/dist/resource-manager-demo.js +52 -0
  94. package/dist/resource-manager-demo.js.map +1 -0
  95. package/dist/resource-manager.d.ts +129 -0
  96. package/dist/resource-manager.d.ts.map +1 -0
  97. package/dist/resource-manager.js +389 -0
  98. package/dist/resource-manager.js.map +1 -0
  99. package/dist/search-standalone.d.ts +7 -0
  100. package/dist/search-standalone.d.ts.map +1 -0
  101. package/dist/search-standalone.js +117 -0
  102. package/dist/search-standalone.js.map +1 -0
  103. package/dist/search.d.ts +92 -0
  104. package/dist/search.d.ts.map +1 -0
  105. package/dist/search.js +454 -0
  106. package/dist/search.js.map +1 -0
  107. package/dist/test-utils.d.ts +36 -0
  108. package/dist/test-utils.d.ts.map +1 -0
  109. package/dist/test-utils.js +27 -0
  110. package/dist/test-utils.js.map +1 -0
  111. package/dist/tokenizer.d.ts +21 -0
  112. package/dist/tokenizer.d.ts.map +1 -0
  113. package/dist/tokenizer.js +59 -0
  114. package/dist/tokenizer.js.map +1 -0
  115. package/dist/types.d.ts +44 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +3 -0
  118. package/dist/types.js.map +1 -0
  119. package/dist/vector-index.d.ts +64 -0
  120. package/dist/vector-index.d.ts.map +1 -0
  121. package/dist/vector-index.js +308 -0
  122. package/dist/vector-index.js.map +1 -0
  123. package/package.json +80 -0
@@ -0,0 +1,323 @@
1
+ import { pipeline } from '@huggingface/transformers';
2
+ import { createHash } from 'crypto';
3
+ import { config } from './config.js';
4
+ import { handleError, ErrorCategory, ErrorSeverity, safeExecute } from './error-handler.js';
5
+ /**
6
+ * List of supported embedding models
7
+ */
8
+ const SUPPORTED_MODELS = [
9
+ 'sentence-transformers/all-MiniLM-L6-v2',
10
+ 'Xenova/all-mpnet-base-v2'
11
+ ];
12
+ /**
13
+ * Embedding engine using transformers.js for generating embeddings
14
+ */
15
+ export class EmbeddingEngine {
16
+ model = null;
17
+ modelVersion = null;
18
+ modelName;
19
+ batchSize;
20
+ constructor(modelName, batchSize) {
21
+ this.modelName = modelName || config.embedding_model;
22
+ this.batchSize = batchSize || config.batch_size;
23
+ // Validate that the model is supported
24
+ if (!SUPPORTED_MODELS.includes(this.modelName)) {
25
+ throw new Error(`Unsupported model: ${this.modelName}\n` +
26
+ `Supported models: ${SUPPORTED_MODELS.join(', ')}`);
27
+ }
28
+ console.log(`🤖 EmbeddingEngine initialized with model: ${this.modelName}, batchSize: ${this.batchSize}`);
29
+ }
30
+ /**
31
+ * Load the embedding model
32
+ * @throws {Error} If model loading fails
33
+ */
34
+ async loadModel() {
35
+ await safeExecute(async () => {
36
+ console.log(`Loading embedding model: ${this.modelName}`);
37
+ // Initialize the feature extraction pipeline
38
+ // Let transformers.js handle model caching automatically
39
+ try {
40
+ this.model = await pipeline('feature-extraction', this.modelName, {
41
+ cache_dir: config.model_cache_path,
42
+ local_files_only: false,
43
+ dtype: 'fp32' // Explicitly specify dtype to suppress warning
44
+ });
45
+ }
46
+ catch (error) {
47
+ // Enhanced error handling for model download failures
48
+ if (error instanceof Error && (error.message.includes('network') ||
49
+ error.message.includes('download') ||
50
+ error.message.includes('fetch') ||
51
+ error.message.includes('ENOTFOUND') ||
52
+ error.message.includes('ECONNREFUSED') ||
53
+ error.message.includes('timeout'))) {
54
+ throw new Error(`Failed to download model '${this.modelName}'. ` +
55
+ `Check your internet connection or see models/README.md for offline setup instructions.`);
56
+ }
57
+ throw error;
58
+ }
59
+ // Generate model version hash
60
+ this.modelVersion = this.generateModelVersion();
61
+ console.log(`Model loaded successfully. Version: ${this.modelVersion}`);
62
+ }, 'Model Loading', {
63
+ category: ErrorCategory.MODEL,
64
+ severity: ErrorSeverity.FATAL,
65
+ exitCode: 6
66
+ });
67
+ }
68
+ /**
69
+ * Generate embeddings for a batch of texts
70
+ * @param texts - Array of text strings to embed
71
+ * @returns Promise resolving to array of embedding results
72
+ */
73
+ async embedBatch(texts) {
74
+ if (!this.model) {
75
+ throw new Error('Model not loaded. Call loadModel() first.');
76
+ }
77
+ if (texts.length === 0) {
78
+ return [];
79
+ }
80
+ // Split into smaller batches based on configured batch size
81
+ const results = [];
82
+ for (let i = 0; i < texts.length; i += this.batchSize) {
83
+ const batch = texts.slice(i, i + this.batchSize);
84
+ const batchResults = await this.processBatchWithErrorHandling(batch, i);
85
+ results.push(...batchResults);
86
+ }
87
+ return results;
88
+ }
89
+ /**
90
+ * Process a single batch with error handling for individual chunks
91
+ * @param batch - Array of text strings in this batch
92
+ * @param startIndex - Starting index for this batch in the original array
93
+ * @returns Promise resolving to array of embedding results
94
+ */
95
+ async processBatchWithErrorHandling(batch, startIndex) {
96
+ return await safeExecute(async () => {
97
+ // Try to process the entire batch first
98
+ const embeddings = await this.model(batch, {
99
+ pooling: 'mean',
100
+ normalize: true
101
+ });
102
+ // Convert to EmbeddingResult format
103
+ const results = [];
104
+ const embeddingData = embeddings.tolist();
105
+ for (let i = 0; i < batch.length; i++) {
106
+ const embedding_id = this.generateEmbeddingId(batch[i], startIndex + i);
107
+ const vector = new Float32Array(embeddingData[i]);
108
+ results.push({
109
+ embedding_id,
110
+ vector
111
+ });
112
+ }
113
+ return results;
114
+ }, `Batch Embedding (${batch.length} chunks)`, {
115
+ category: ErrorCategory.EMBEDDING,
116
+ severity: ErrorSeverity.ERROR,
117
+ skipError: true,
118
+ fallbackValue: []
119
+ }) || await this.fallbackToIndividualProcessing(batch, startIndex);
120
+ }
121
+ /**
122
+ * Fallback to individual chunk processing when batch fails
123
+ */
124
+ async fallbackToIndividualProcessing(batch, startIndex) {
125
+ handleError(`Batch processing failed for ${batch.length} chunks, falling back to individual processing`, 'Embedding Batch Processing', {
126
+ category: ErrorCategory.EMBEDDING,
127
+ severity: ErrorSeverity.WARNING,
128
+ skipError: true
129
+ });
130
+ const results = [];
131
+ for (let i = 0; i < batch.length; i++) {
132
+ const singleResult = await safeExecute(() => this.processSingleChunk(batch[i], startIndex + i), `Individual Chunk Embedding (${startIndex + i})`, {
133
+ category: ErrorCategory.EMBEDDING,
134
+ severity: ErrorSeverity.WARNING,
135
+ skipError: true
136
+ });
137
+ if (singleResult) {
138
+ results.push(singleResult);
139
+ }
140
+ }
141
+ return results;
142
+ }
143
+ /**
144
+ * Process a single chunk with error handling
145
+ * @param text - Text to embed
146
+ * @param index - Index of this chunk
147
+ * @returns Promise resolving to embedding result or null if failed
148
+ */
149
+ async processSingleChunk(text, index) {
150
+ try {
151
+ const embeddings = await this.model([text], {
152
+ pooling: 'mean',
153
+ normalize: true
154
+ });
155
+ const embeddingData = embeddings.tolist();
156
+ const embedding_id = this.generateEmbeddingId(text, index);
157
+ const vector = new Float32Array(embeddingData[0]);
158
+ return {
159
+ embedding_id,
160
+ vector
161
+ };
162
+ }
163
+ catch (error) {
164
+ // Return null to indicate failure
165
+ throw error;
166
+ }
167
+ }
168
+ /**
169
+ * Generate embedding for a single text
170
+ * @param text - Text string to embed
171
+ * @returns Promise resolving to embedding result
172
+ */
173
+ async embedSingle(text) {
174
+ const results = await this.embedBatch([text]);
175
+ if (results.length === 0) {
176
+ throw new Error('Failed to generate embedding for single text');
177
+ }
178
+ return results[0];
179
+ }
180
+ /**
181
+ * Generate embeddings for document chunks with progress logging
182
+ * Optimized for large document ingestion with batch processing
183
+ * @param chunks - Array of text chunks from documents
184
+ * @returns Promise resolving to array of embedding results
185
+ */
186
+ async embedDocumentBatch(chunks) {
187
+ if (!this.model) {
188
+ throw new Error('Model not loaded. Call loadModel() first.');
189
+ }
190
+ if (chunks.length === 0) {
191
+ return [];
192
+ }
193
+ console.log(`Processing ${chunks.length} chunk${chunks.length === 1 ? '' : 's'} in batches of ${this.batchSize}...`);
194
+ const results = [];
195
+ const totalBatches = Math.ceil(chunks.length / this.batchSize);
196
+ let processedChunks = 0;
197
+ let skippedChunks = 0;
198
+ for (let batchIndex = 0; batchIndex < totalBatches; batchIndex++) {
199
+ const startIdx = batchIndex * this.batchSize;
200
+ const endIdx = Math.min(startIdx + this.batchSize, chunks.length);
201
+ const batch = chunks.slice(startIdx, endIdx);
202
+ try {
203
+ const batchResults = await this.processBatchWithErrorHandling(batch, startIdx);
204
+ results.push(...batchResults);
205
+ processedChunks += batchResults.length;
206
+ skippedChunks += (batch.length - batchResults.length);
207
+ // Progress logging - more frequent updates for better user experience
208
+ const progressInterval = Math.max(1, Math.floor(totalBatches / 20)); // Show progress every 5%
209
+ if ((batchIndex + 1) % progressInterval === 0 || batchIndex === totalBatches - 1) {
210
+ const percentage = Math.round(((batchIndex + 1) / totalBatches) * 100);
211
+ console.log(`Processed ${processedChunks} of ${chunks.length} chunks (${percentage}%)${skippedChunks > 0 ? ` - ${skippedChunks} skipped` : ''}`);
212
+ }
213
+ }
214
+ catch (error) {
215
+ console.error(`Failed to process batch ${batchIndex + 1}/${totalBatches}:`, error instanceof Error ? error.message : String(error));
216
+ skippedChunks += batch.length;
217
+ }
218
+ }
219
+ if (skippedChunks > 0) {
220
+ console.log(`✓ Embedding complete: ${processedChunks} successful, ${skippedChunks} skipped due to errors`);
221
+ }
222
+ else {
223
+ console.log(`✓ Embedding complete: ${processedChunks} chunks processed successfully`);
224
+ }
225
+ return results;
226
+ }
227
+ /**
228
+ * Get the current model version identifier
229
+ * @returns Model version string
230
+ */
231
+ getModelVersion() {
232
+ if (!this.modelVersion) {
233
+ throw new Error('Model not loaded. Call loadModel() first.');
234
+ }
235
+ return this.modelVersion;
236
+ }
237
+ /**
238
+ * Check if the model is loaded
239
+ * @returns True if model is loaded
240
+ */
241
+ isLoaded() {
242
+ return this.model !== null;
243
+ }
244
+ /**
245
+ * Get the model name
246
+ * @returns Model name string
247
+ */
248
+ getModelName() {
249
+ return this.modelName;
250
+ }
251
+ /**
252
+ * Get the batch size
253
+ * @returns Batch size number
254
+ */
255
+ getBatchSize() {
256
+ return this.batchSize;
257
+ }
258
+ /**
259
+ * Generate a deterministic model version identifier
260
+ * Uses model name and configuration for consistent versioning
261
+ * @returns Model version string
262
+ */
263
+ generateModelVersion() {
264
+ // Create a deterministic hash based on model name and configuration
265
+ // This ensures the same model configuration always produces the same version
266
+ const configData = JSON.stringify({
267
+ model: this.modelName,
268
+ // Add other relevant config that affects embeddings
269
+ quantized: false,
270
+ revision: 'main'
271
+ });
272
+ const hash = createHash('sha256').update(configData).digest('hex').substring(0, 16);
273
+ return `${this.modelName.replace('/', '_')}_${hash}`;
274
+ }
275
+ /**
276
+ * Generate a deterministic embedding ID for a text chunk
277
+ * @param text - The text content
278
+ * @param index - Index in the batch
279
+ * @returns Deterministic embedding ID
280
+ */
281
+ generateEmbeddingId(text, index) {
282
+ // Create deterministic ID based on content hash only
283
+ // This ensures the same text always gets the same ID regardless of processing order
284
+ const contentHash = createHash('sha256').update(text.trim()).digest('hex');
285
+ return contentHash.substring(0, 32);
286
+ }
287
+ }
288
+ /**
289
+ * Singleton instance for the embedding engine
290
+ * Ensures model is loaded only once across the application
291
+ */
292
+ let embeddingEngineInstance = null;
293
+ /**
294
+ * Get the singleton embedding engine instance
295
+ * @param modelName - Optional model name override
296
+ * @param batchSize - Optional batch size override
297
+ * @returns EmbeddingEngine instance
298
+ */
299
+ export function getEmbeddingEngine(modelName, batchSize) {
300
+ // Always create a new instance if specific parameters are provided
301
+ // This ensures we don't use cached instances with wrong configuration
302
+ if (modelName || batchSize) {
303
+ embeddingEngineInstance = new EmbeddingEngine(modelName, batchSize);
304
+ }
305
+ else if (!embeddingEngineInstance) {
306
+ embeddingEngineInstance = new EmbeddingEngine();
307
+ }
308
+ return embeddingEngineInstance;
309
+ }
310
+ /**
311
+ * Initialize the embedding engine and load the model
312
+ * @param modelName - Optional model name override
313
+ * @param batchSize - Optional batch size override
314
+ * @returns Promise resolving to the loaded embedding engine
315
+ */
316
+ export async function initializeEmbeddingEngine(modelName, batchSize) {
317
+ const engine = getEmbeddingEngine(modelName, batchSize);
318
+ if (!engine.isLoaded()) {
319
+ await engine.loadModel();
320
+ }
321
+ return engine;
322
+ }
323
+ //# sourceMappingURL=embedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../src/embedder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Centralized error handling utilities for RAG-lite TS
3
+ * Provides consistent error handling patterns across the application
4
+ */
5
+ /**
6
+ * Error categories for different types of failures
7
+ */
8
+ export declare enum ErrorCategory {
9
+ CONFIGURATION = "Configuration",
10
+ DATABASE = "Database",
11
+ MODEL = "Model",
12
+ INDEX = "Index",
13
+ FILE_SYSTEM = "File System",
14
+ EMBEDDING = "Embedding",
15
+ NETWORK = "Network",
16
+ VALIDATION = "Validation",
17
+ GENERAL = "General"
18
+ }
19
+ /**
20
+ * Error severity levels
21
+ */
22
+ export declare enum ErrorSeverity {
23
+ FATAL = "FATAL",// System must exit immediately
24
+ ERROR = "ERROR",// Operation failed but system can continue
25
+ WARNING = "WARNING",// Potential issue but operation can continue
26
+ INFO = "INFO"
27
+ }
28
+ /**
29
+ * Enhanced error class with category and severity
30
+ */
31
+ export declare class CategorizedError extends Error {
32
+ category: ErrorCategory;
33
+ severity: ErrorSeverity;
34
+ exitCode: number;
35
+ originalError?: Error | undefined;
36
+ constructor(message: string, category: ErrorCategory, severity?: ErrorSeverity, exitCode?: number, originalError?: Error | undefined);
37
+ }
38
+ /**
39
+ * Handle errors with appropriate logging and exit behavior
40
+ * @param error - Error to handle
41
+ * @param context - Context where error occurred
42
+ * @param options - Handling options
43
+ */
44
+ export declare function handleError(error: Error | string, context: string, options?: {
45
+ category?: ErrorCategory;
46
+ severity?: ErrorSeverity;
47
+ exitCode?: number;
48
+ skipError?: boolean;
49
+ showStack?: boolean;
50
+ }): void;
51
+ /**
52
+ * Wrapper for try-catch blocks with consistent error handling
53
+ * @param operation - Function to execute
54
+ * @param context - Context description
55
+ * @param options - Error handling options
56
+ */
57
+ export declare function safeExecute<T>(operation: () => Promise<T> | T, context: string, options?: {
58
+ category?: ErrorCategory;
59
+ severity?: ErrorSeverity;
60
+ exitCode?: number;
61
+ skipError?: boolean;
62
+ fallbackValue?: T;
63
+ }): Promise<T | undefined>;
64
+ /**
65
+ * Validate that a condition is true, throw categorized error if not
66
+ * @param condition - Condition to check
67
+ * @param message - Error message if condition fails
68
+ * @param category - Error category
69
+ * @param exitCode - Exit code for fatal errors
70
+ */
71
+ export declare function assert(condition: boolean, message: string, category?: ErrorCategory, exitCode?: number): asserts condition;
72
+ /**
73
+ * Log progress with error context
74
+ * @param message - Progress message
75
+ * @param current - Current progress value
76
+ * @param total - Total progress value
77
+ */
78
+ export declare function logProgress(message: string, current?: number, total?: number): void;
79
+ /**
80
+ * Create a categorized error for common scenarios
81
+ */
82
+ export declare const createError: {
83
+ configuration: (message: string, exitCode?: 3) => CategorizedError;
84
+ database: (message: string, exitCode?: 5) => CategorizedError;
85
+ model: (message: string, exitCode?: 6) => CategorizedError;
86
+ index: (message: string, exitCode?: 7) => CategorizedError;
87
+ fileSystem: (message: string, exitCode?: 4) => CategorizedError;
88
+ embedding: (message: string, severity?: ErrorSeverity) => CategorizedError;
89
+ validation: (message: string, exitCode?: 2) => CategorizedError;
90
+ };
91
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,aAAa;IACvB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,KAAK,UAAU,CAAO,+BAA+B;IACrD,KAAK,UAAU,CAAO,2CAA2C;IACjE,OAAO,YAAY,CAAG,6CAA6C;IACnE,IAAI,SAAS;CACd;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IAGhC,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,MAAM;IAChB,aAAa,CAAC,EAAE,KAAK;gBAJ5B,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAE,aAAmC,EAC7C,QAAQ,GAAE,MAAiC,EAC3C,aAAa,CAAC,EAAE,KAAK,YAAA;CAK/B;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,GAAG,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GACL,IAAI,CAsCN;AA4DD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,CAAC;CACd,GACL,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAqBxB;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CACpB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAAwC,EAClD,QAAQ,GAAE,MAAiC,GAC1C,OAAO,CAAC,SAAS,CAInB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAUnF;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;6BACG,MAAM;wBAGX,MAAM;qBAGT,MAAM;qBAGN,MAAM;0BAGD,MAAM;yBAGP,MAAM;0BAGL,MAAM;CAE7B,CAAC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Centralized error handling utilities for RAG-lite TS
3
+ * Provides consistent error handling patterns across the application
4
+ */
5
+ import { EXIT_CODES } from './config.js';
6
+ /**
7
+ * Error categories for different types of failures
8
+ */
9
+ export var ErrorCategory;
10
+ (function (ErrorCategory) {
11
+ ErrorCategory["CONFIGURATION"] = "Configuration";
12
+ ErrorCategory["DATABASE"] = "Database";
13
+ ErrorCategory["MODEL"] = "Model";
14
+ ErrorCategory["INDEX"] = "Index";
15
+ ErrorCategory["FILE_SYSTEM"] = "File System";
16
+ ErrorCategory["EMBEDDING"] = "Embedding";
17
+ ErrorCategory["NETWORK"] = "Network";
18
+ ErrorCategory["VALIDATION"] = "Validation";
19
+ ErrorCategory["GENERAL"] = "General";
20
+ })(ErrorCategory || (ErrorCategory = {}));
21
+ /**
22
+ * Error severity levels
23
+ */
24
+ export var ErrorSeverity;
25
+ (function (ErrorSeverity) {
26
+ ErrorSeverity["FATAL"] = "FATAL";
27
+ ErrorSeverity["ERROR"] = "ERROR";
28
+ ErrorSeverity["WARNING"] = "WARNING";
29
+ ErrorSeverity["INFO"] = "INFO"; // Informational message
30
+ })(ErrorSeverity || (ErrorSeverity = {}));
31
+ /**
32
+ * Enhanced error class with category and severity
33
+ */
34
+ export class CategorizedError extends Error {
35
+ category;
36
+ severity;
37
+ exitCode;
38
+ originalError;
39
+ constructor(message, category, severity = ErrorSeverity.ERROR, exitCode = EXIT_CODES.GENERAL_ERROR, originalError) {
40
+ super(message);
41
+ this.category = category;
42
+ this.severity = severity;
43
+ this.exitCode = exitCode;
44
+ this.originalError = originalError;
45
+ this.name = 'CategorizedError';
46
+ }
47
+ }
48
+ /**
49
+ * Handle errors with appropriate logging and exit behavior
50
+ * @param error - Error to handle
51
+ * @param context - Context where error occurred
52
+ * @param options - Handling options
53
+ */
54
+ export function handleError(error, context, options = {}) {
55
+ const { category = ErrorCategory.GENERAL, severity = ErrorSeverity.ERROR, exitCode = EXIT_CODES.GENERAL_ERROR, skipError = false, showStack = false } = options;
56
+ const errorMessage = error instanceof Error ? error.message : String(error);
57
+ const timestamp = new Date().toISOString();
58
+ // Format error message based on severity
59
+ const severityPrefix = severity === ErrorSeverity.FATAL ? '🚨' :
60
+ severity === ErrorSeverity.ERROR ? '❌' :
61
+ severity === ErrorSeverity.WARNING ? '⚠️' : 'ℹ️';
62
+ const logMessage = `${severityPrefix} [${timestamp}] ${severity} in ${context} (${category}): ${errorMessage}`;
63
+ if (severity === ErrorSeverity.FATAL || severity === ErrorSeverity.ERROR) {
64
+ console.error(logMessage);
65
+ }
66
+ else {
67
+ console.log(logMessage);
68
+ }
69
+ // Show stack trace for debugging if requested
70
+ if (showStack && error instanceof Error && error.stack) {
71
+ console.error('Stack trace:', error.stack);
72
+ }
73
+ // Handle based on severity
74
+ if (severity === ErrorSeverity.FATAL) {
75
+ console.error('\nThe system cannot continue and will exit immediately.');
76
+ provideContextualGuidance(category, exitCode);
77
+ process.exit(exitCode);
78
+ }
79
+ else if (severity === ErrorSeverity.ERROR && !skipError) {
80
+ console.error('Operation failed. See error details above.');
81
+ }
82
+ }
83
+ /**
84
+ * Provide contextual guidance based on error category and exit code
85
+ */
86
+ function provideContextualGuidance(category, exitCode) {
87
+ console.error('\nTroubleshooting guidance:');
88
+ switch (category) {
89
+ case ErrorCategory.CONFIGURATION:
90
+ console.error('- Check your configuration file for syntax errors');
91
+ console.error('- Ensure all required fields are present and valid');
92
+ console.error('- Verify numeric values are positive numbers');
93
+ break;
94
+ case ErrorCategory.DATABASE:
95
+ console.error('- Try running "raglite rebuild" to fix database issues');
96
+ console.error('- Check that the database file is not locked by another process');
97
+ console.error('- Ensure you have write permissions in the current directory');
98
+ console.error('- Verify sufficient disk space is available');
99
+ break;
100
+ case ErrorCategory.MODEL:
101
+ console.error('- Ensure you have internet connection for model download');
102
+ console.error('- Check available disk space in the models directory');
103
+ console.error('- Try clearing the model cache and downloading again');
104
+ console.error('- Verify your system has sufficient memory (2GB+ recommended)');
105
+ break;
106
+ case ErrorCategory.INDEX:
107
+ console.error('- Try running "raglite rebuild" to recreate the vector index');
108
+ console.error('- Check available disk space for index files');
109
+ console.error('- Ensure the index file is not corrupted or locked');
110
+ break;
111
+ case ErrorCategory.FILE_SYSTEM:
112
+ console.error('- Check that files and directories exist and are accessible');
113
+ console.error('- Verify you have read/write permissions');
114
+ console.error('- Ensure paths are spelled correctly');
115
+ break;
116
+ case ErrorCategory.EMBEDDING:
117
+ console.error('- Check that the embedding model is properly loaded');
118
+ console.error('- Verify input text is not empty or malformed');
119
+ console.error('- Ensure sufficient memory for batch processing');
120
+ break;
121
+ case ErrorCategory.NETWORK:
122
+ console.error('- Check your internet connection');
123
+ console.error('- Verify firewall settings allow model downloads');
124
+ console.error('- Try again later if servers are temporarily unavailable');
125
+ break;
126
+ default:
127
+ console.error('- Check the error message above for specific details');
128
+ console.error('- Try running the command again');
129
+ console.error('- If the problem persists, please report it as a bug');
130
+ }
131
+ }
132
+ /**
133
+ * Wrapper for try-catch blocks with consistent error handling
134
+ * @param operation - Function to execute
135
+ * @param context - Context description
136
+ * @param options - Error handling options
137
+ */
138
+ export async function safeExecute(operation, context, options = {}) {
139
+ try {
140
+ return await operation();
141
+ }
142
+ catch (error) {
143
+ handleError(error, context, options);
144
+ if (options.fallbackValue !== undefined) {
145
+ return options.fallbackValue;
146
+ }
147
+ if (options.skipError) {
148
+ return undefined;
149
+ }
150
+ // Re-throw if not skipping and no fallback
151
+ if (options.severity !== ErrorSeverity.FATAL) {
152
+ throw error;
153
+ }
154
+ return undefined; // This won't be reached due to process.exit in FATAL
155
+ }
156
+ }
157
+ /**
158
+ * Validate that a condition is true, throw categorized error if not
159
+ * @param condition - Condition to check
160
+ * @param message - Error message if condition fails
161
+ * @param category - Error category
162
+ * @param exitCode - Exit code for fatal errors
163
+ */
164
+ export function assert(condition, message, category = ErrorCategory.VALIDATION, exitCode = EXIT_CODES.GENERAL_ERROR) {
165
+ if (!condition) {
166
+ throw new CategorizedError(message, category, ErrorSeverity.FATAL, exitCode);
167
+ }
168
+ }
169
+ /**
170
+ * Log progress with error context
171
+ * @param message - Progress message
172
+ * @param current - Current progress value
173
+ * @param total - Total progress value
174
+ */
175
+ export function logProgress(message, current, total) {
176
+ const timestamp = new Date().toISOString();
177
+ let progressMsg = `ℹ️ [${timestamp}] ${message}`;
178
+ if (current !== undefined && total !== undefined) {
179
+ const percentage = Math.round((current / total) * 100);
180
+ progressMsg += ` (${current}/${total} - ${percentage}%)`;
181
+ }
182
+ console.log(progressMsg);
183
+ }
184
+ /**
185
+ * Create a categorized error for common scenarios
186
+ */
187
+ export const createError = {
188
+ configuration: (message, exitCode = EXIT_CODES.CONFIGURATION_ERROR) => new CategorizedError(message, ErrorCategory.CONFIGURATION, ErrorSeverity.FATAL, exitCode),
189
+ database: (message, exitCode = EXIT_CODES.DATABASE_ERROR) => new CategorizedError(message, ErrorCategory.DATABASE, ErrorSeverity.FATAL, exitCode),
190
+ model: (message, exitCode = EXIT_CODES.MODEL_ERROR) => new CategorizedError(message, ErrorCategory.MODEL, ErrorSeverity.FATAL, exitCode),
191
+ index: (message, exitCode = EXIT_CODES.INDEX_ERROR) => new CategorizedError(message, ErrorCategory.INDEX, ErrorSeverity.FATAL, exitCode),
192
+ fileSystem: (message, exitCode = EXIT_CODES.FILE_NOT_FOUND) => new CategorizedError(message, ErrorCategory.FILE_SYSTEM, ErrorSeverity.FATAL, exitCode),
193
+ embedding: (message, severity = ErrorSeverity.ERROR) => new CategorizedError(message, ErrorCategory.EMBEDDING, severity),
194
+ validation: (message, exitCode = EXIT_CODES.INVALID_ARGUMENTS) => new CategorizedError(message, ErrorCategory.VALIDATION, ErrorSeverity.FATAL, exitCode)
195
+ };
196
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAN,IAAY,aAUX;AAVD,WAAY,aAAa;IACvB,gDAA+B,CAAA;IAC/B,sCAAqB,CAAA;IACrB,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,4CAA2B,CAAA;IAC3B,wCAAuB,CAAA;IACvB,oCAAmB,CAAA;IACnB,0CAAyB,CAAA;IACzB,oCAAmB,CAAA;AACrB,CAAC,EAVW,aAAa,KAAb,aAAa,QAUxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,8BAAa,CAAA,CAAS,wBAAwB;AAChD,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAGhC;IACA;IACA;IACA;IALT,YACE,OAAe,EACR,QAAuB,EACvB,WAA0B,aAAa,CAAC,KAAK,EAC7C,WAAmB,UAAU,CAAC,aAAa,EAC3C,aAAqB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QALR,aAAQ,GAAR,QAAQ,CAAe;QACvB,aAAQ,GAAR,QAAQ,CAAqC;QAC7C,aAAQ,GAAR,QAAQ,CAAmC;QAC3C,kBAAa,GAAb,aAAa,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,KAAqB,EACrB,OAAe,EACf,UAMI,EAAE;IAEN,MAAM,EACJ,QAAQ,GAAG,aAAa,CAAC,OAAO,EAChC,QAAQ,GAAG,aAAa,CAAC,KAAK,EAC9B,QAAQ,GAAG,UAAU,CAAC,aAAa,EACnC,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,KAAK,EAClB,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,yCAAyC;IACzC,MAAM,cAAc,GAAG,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,QAAQ,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvE,MAAM,UAAU,GAAG,GAAG,cAAc,KAAK,SAAS,KAAK,QAAQ,OAAO,OAAO,KAAK,QAAQ,MAAM,YAAY,EAAE,CAAC;IAE/G,IAAI,QAAQ,KAAK,aAAa,CAAC,KAAK,IAAI,QAAQ,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,8CAA8C;IAC9C,IAAI,SAAS,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,QAAQ,KAAK,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,QAAuB,EAAE,QAAgB;IAC1E,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE7C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,aAAa,CAAC,aAAa;YAC9B,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,MAAM;QAER,KAAK,aAAa,CAAC,QAAQ;YACzB,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,MAAM;QAER,KAAK,aAAa,CAAC,KAAK;YACtB,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,MAAM;QAER,KAAK,aAAa,CAAC,KAAK;YACtB,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,MAAM;QAER,KAAK,aAAa,CAAC,WAAW;YAC5B,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC7E,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,MAAM;QAER,KAAK,aAAa,CAAC,SAAS;YAC1B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,MAAM;QAER,KAAK,aAAa,CAAC,OAAO;YACxB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAA+B,EAC/B,OAAe,EACf,UAMI,EAAE;IAEN,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC,aAAa,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,qDAAqD;IACzE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,SAAkB,EAClB,OAAe,EACf,WAA0B,aAAa,CAAC,UAAU,EAClD,WAAmB,UAAU,CAAC,aAAa;IAE3C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,OAAgB,EAAE,KAAc;IAC3E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,WAAW,GAAG,OAAO,SAAS,KAAK,OAAO,EAAE,CAAC;IAEjD,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACvD,WAAW,IAAI,KAAK,OAAO,IAAI,KAAK,MAAM,UAAU,IAAI,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,mBAAmB,EAAE,EAAE,CAC5E,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IAE3F,QAAQ,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,EAAE,CAClE,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEtF,KAAK,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,CAC5D,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEnF,KAAK,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,EAAE,CAC5D,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEnF,UAAU,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,cAAc,EAAE,EAAE,CACpE,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEzF,SAAS,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAC7D,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;IAElE,UAAU,EAAE,CAAC,OAAe,EAAE,QAAQ,GAAG,UAAU,CAAC,iBAAiB,EAAE,EAAE,CACvE,IAAI,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;CACzF,CAAC"}