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 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/cli/search.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgM/F"}
@@ -0,0 +1,206 @@
1
+ import { existsSync } from 'fs';
2
+ import { openDatabase } from '../db.js';
3
+ import { config, EXIT_CODES, ConfigurationError } from '../config.js';
4
+ /**
5
+ * Run search from CLI
6
+ * @param query - Search query string
7
+ * @param options - CLI options including top-k and rerank settings
8
+ */
9
+ export async function runSearch(query, options = {}) {
10
+ try {
11
+ // Search uses the model that was used during ingestion (stored in database)
12
+ const effectiveConfig = config;
13
+ // Validate query
14
+ if (!query || query.trim().length === 0) {
15
+ console.error('Error: Search query cannot be empty');
16
+ console.error('');
17
+ console.error('Usage: raglite search <query>');
18
+ console.error('');
19
+ console.error('Examples:');
20
+ console.error(' raglite search "machine learning"');
21
+ console.error(' raglite search "how to install"');
22
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
23
+ }
24
+ // Validate query length
25
+ if (query.trim().length > 500) {
26
+ console.error('Error: Search query is too long (maximum 500 characters)');
27
+ console.error('');
28
+ console.error('Please use a shorter, more specific query.');
29
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
30
+ }
31
+ // Check if database exists
32
+ if (!existsSync(effectiveConfig.db_file)) {
33
+ console.error('Error: No database found. You need to ingest documents first.');
34
+ console.error('');
35
+ console.error('To get started:');
36
+ console.error('1. First ingest your documents: raglite ingest <path>');
37
+ console.error('2. Then search: raglite search "your query"');
38
+ console.error('');
39
+ console.error('Examples:');
40
+ console.error(' raglite ingest ./docs/ # Ingest all .md/.txt files');
41
+ console.error(' raglite search "machine learning" # Search your documents');
42
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
43
+ }
44
+ // Check if vector index exists
45
+ if (!existsSync(effectiveConfig.index_file)) {
46
+ console.error('Error: No vector index found. The ingestion may not have completed successfully.');
47
+ console.error('');
48
+ console.error('To fix this:');
49
+ console.error('1. Try re-ingesting: raglite ingest <path>');
50
+ console.error('2. Or rebuild the index: raglite rebuild');
51
+ console.error('');
52
+ console.error('If the problem persists, check that your documents were processed correctly.');
53
+ process.exit(EXIT_CODES.INDEX_ERROR);
54
+ }
55
+ console.log(`Searching for: "${query}"`);
56
+ console.log('Loading search engine...');
57
+ console.log('');
58
+ // Initialize components
59
+ let db, embedder, indexManager, searchEngine;
60
+ try {
61
+ // Open database connection
62
+ db = await openDatabase(effectiveConfig.db_file);
63
+ // Read the model that was used during ingestion from the database
64
+ const { getStoredModelInfo } = await import('../db.js');
65
+ const storedModel = await getStoredModelInfo(db);
66
+ const modelToUse = storedModel ? storedModel.modelName : effectiveConfig.embedding_model;
67
+ console.log(`Using model from ingestion: ${modelToUse}`);
68
+ // Initialize embedding engine with the correct model
69
+ const { EmbeddingEngine } = await import('../embedder.js');
70
+ embedder = new EmbeddingEngine(modelToUse);
71
+ await embedder.loadModel();
72
+ // Initialize index manager (which handles the vector index and hash mapping)
73
+ const { IndexManager } = await import('../index-manager.js');
74
+ const { getModelDefaults } = await import('../config.js');
75
+ const modelDefaults = getModelDefaults(modelToUse);
76
+ indexManager = new IndexManager(effectiveConfig.index_file, effectiveConfig.db_file, modelDefaults.dimensions, modelToUse);
77
+ await indexManager.initialize();
78
+ // Create search engine with index manager
79
+ const enableReranking = options.rerank !== undefined ? options.rerank : effectiveConfig.rerank_enabled;
80
+ const { SearchEngine } = await import('../search.js');
81
+ searchEngine = SearchEngine.createWithComponents(embedder, indexManager, db, enableReranking);
82
+ await searchEngine.initialize();
83
+ // Prepare search options
84
+ const searchOptions = {};
85
+ if (options['top-k'] !== undefined) {
86
+ searchOptions.top_k = options['top-k'];
87
+ }
88
+ if (options.rerank !== undefined) {
89
+ searchOptions.rerank = options.rerank;
90
+ }
91
+ // Perform search
92
+ const startTime = Date.now();
93
+ const results = await searchEngine.search(query, searchOptions);
94
+ const searchTime = Date.now() - startTime;
95
+ // Display results
96
+ if (results.length === 0) {
97
+ console.log('No results found.');
98
+ console.log('\nTips:');
99
+ console.log('- Try different keywords or phrases');
100
+ console.log('- Make sure you have ingested relevant documents');
101
+ console.log('- Check if your query matches the content of your documents');
102
+ }
103
+ else {
104
+ console.log(`Found ${results.length} result${results.length === 1 ? '' : 's'} in ${searchTime}ms:\n`);
105
+ results.forEach((result, index) => {
106
+ console.log(`${index + 1}. ${result.document.title}`);
107
+ console.log(` Source: ${result.document.source}`);
108
+ console.log(` Score: ${(result.score * 100).toFixed(1)}%`);
109
+ console.log(` Text: ${truncateText(result.text, 200)}`);
110
+ console.log('');
111
+ });
112
+ // Show search statistics
113
+ const stats = await searchEngine.getStats();
114
+ console.log('─'.repeat(50));
115
+ console.log(`Search completed in ${searchTime}ms`);
116
+ console.log(`Searched ${stats.totalChunks} chunks`);
117
+ if (stats.rerankingEnabled) {
118
+ console.log('Reranking: enabled');
119
+ }
120
+ }
121
+ }
122
+ finally {
123
+ // Cleanup resources
124
+ if (db) {
125
+ await db.close();
126
+ }
127
+ }
128
+ }
129
+ catch (error) {
130
+ console.error('\n' + '='.repeat(50));
131
+ console.error('SEARCH FAILED');
132
+ console.error('='.repeat(50));
133
+ if (error instanceof ConfigurationError) {
134
+ console.error('Configuration Error:');
135
+ console.error(error.message);
136
+ process.exit(error.exitCode);
137
+ }
138
+ else if (error instanceof Error) {
139
+ console.error('Error:', error.message);
140
+ console.error('');
141
+ if (error.message.includes('SQLITE') || error.message.includes('database')) {
142
+ console.error('Database Error:');
143
+ console.error('- The database may be corrupted or inaccessible');
144
+ console.error('- Try rebuilding the index: raglite rebuild');
145
+ console.error('- Ensure the database file is not locked by another process');
146
+ console.error('- Check file permissions and available disk space');
147
+ process.exit(EXIT_CODES.DATABASE_ERROR);
148
+ }
149
+ else if (error.message.includes('model') || error.message.includes('ONNX')) {
150
+ console.error('Model Error:');
151
+ console.error('- The embedding model failed to load');
152
+ console.error('- Try restarting the search command');
153
+ console.error('- Ensure you have internet connection for model download');
154
+ console.error('- Check available disk space in the models directory');
155
+ process.exit(EXIT_CODES.MODEL_ERROR);
156
+ }
157
+ else if (error.message.includes('index') || error.message.includes('vector')) {
158
+ console.error('Vector Index Error:');
159
+ console.error('- The vector index may be corrupted or incompatible');
160
+ console.error('- Try rebuilding the index: raglite rebuild');
161
+ console.error('- Ensure the index file is not corrupted');
162
+ console.error('- Check available disk space');
163
+ process.exit(EXIT_CODES.INDEX_ERROR);
164
+ }
165
+ else if (error.message.includes('not initialized') || error.message.includes('empty')) {
166
+ console.error('No Data Found:');
167
+ console.error('- Make sure you have ingested documents first');
168
+ console.error('- Run: raglite ingest <path>');
169
+ console.error('- Check that your documents contain searchable text');
170
+ console.error('- Verify documents are in supported formats (.md, .txt)');
171
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
172
+ }
173
+ else {
174
+ console.error('General Error:');
175
+ console.error('- An unexpected error occurred during search');
176
+ console.error('- Try running the search again');
177
+ console.error('- If the problem persists, try: raglite rebuild');
178
+ console.error('- Check that your query is valid and not too complex');
179
+ process.exit(EXIT_CODES.GENERAL_ERROR);
180
+ }
181
+ }
182
+ else {
183
+ console.error('Unknown error:', String(error));
184
+ process.exit(EXIT_CODES.GENERAL_ERROR);
185
+ }
186
+ }
187
+ }
188
+ /**
189
+ * Truncate text to specified length with ellipsis
190
+ * @param text - Text to truncate
191
+ * @param maxLength - Maximum length before truncation
192
+ * @returns Truncated text with ellipsis if needed
193
+ */
194
+ function truncateText(text, maxLength) {
195
+ if (text.length <= maxLength) {
196
+ return text;
197
+ }
198
+ // Try to break at word boundary
199
+ const truncated = text.substring(0, maxLength);
200
+ const lastSpaceIndex = truncated.lastIndexOf(' ');
201
+ if (lastSpaceIndex > maxLength * 0.8) {
202
+ return truncated.substring(0, lastSpaceIndex) + '...';
203
+ }
204
+ return truncated + '...';
205
+ }
206
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/cli/search.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,362 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'fs';
3
+ import { fileURLToPath } from 'url';
4
+ import { dirname, join } from 'path';
5
+ import { EXIT_CODES, ConfigurationError } from './config.js';
6
+ // Get package.json for version info
7
+ const __filename = fileURLToPath(import.meta.url);
8
+ const __dirname = dirname(__filename);
9
+ const packageJsonPath = join(__dirname, '..', 'package.json');
10
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
11
+ /**
12
+ * Display help information
13
+ */
14
+ function showHelp() {
15
+ console.log(`
16
+ RAG-lite TS v${packageJson.version}
17
+ Local-first TypeScript retrieval engine for semantic search
18
+
19
+ Usage:
20
+ raglite <command> [options]
21
+
22
+ Commands:
23
+ ingest <path> Ingest documents from file or directory
24
+ search <query> Search indexed documents
25
+ rebuild Rebuild the vector index
26
+ help Show this help message
27
+
28
+ Examples:
29
+ raglite ingest ./docs/ # Ingest all .md/.txt files in docs/
30
+ raglite ingest ./readme.md # Ingest single file
31
+ raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2 # Use higher quality model
32
+ raglite ingest ./docs/ --path-strategy relative --path-base /project # Use relative paths
33
+ raglite search "machine learning" # Search for documents about machine learning
34
+ raglite search "API documentation" --top-k 10 # Get top 10 results
35
+
36
+ raglite rebuild # Rebuild the entire index
37
+
38
+ Options for search:
39
+ --top-k <number> Number of results to return (default: 10)
40
+ --rerank Enable reranking for better results
41
+ --no-rerank Disable reranking
42
+
43
+ Options for ingest:
44
+ --model <name> Use specific embedding model
45
+ --rebuild-if-needed Automatically rebuild if model mismatch detected (WARNING: rebuilds entire index)
46
+ --path-strategy <strategy> Path storage strategy: 'relative' (default) or 'absolute'
47
+ --path-base <path> Base directory for relative paths (defaults to current directory)
48
+
49
+ Available models:
50
+ sentence-transformers/all-MiniLM-L6-v2 (384 dim, fast, default)
51
+ Xenova/all-mpnet-base-v2 (768 dim, higher quality)
52
+
53
+ For more information, visit: https://github.com/your-repo/rag-lite-ts
54
+ `);
55
+ }
56
+ /**
57
+ * Parse command line arguments
58
+ */
59
+ function parseArgs() {
60
+ const args = process.argv.slice(2);
61
+ if (args.length === 0) {
62
+ return { command: 'help', args: [], options: {} };
63
+ }
64
+ const command = args[0];
65
+ const remainingArgs = [];
66
+ const options = {};
67
+ // Parse arguments and options
68
+ for (let i = 1; i < args.length; i++) {
69
+ const arg = args[i];
70
+ if (arg.startsWith('--')) {
71
+ const optionName = arg.slice(2);
72
+ // Handle boolean flags
73
+ if (optionName === 'rerank') {
74
+ options.rerank = true;
75
+ }
76
+ else if (optionName === 'no-rerank') {
77
+ options.rerank = false;
78
+ }
79
+ else if (optionName === 'rebuild-if-needed') {
80
+ options.rebuildIfNeeded = true;
81
+ }
82
+ else if (optionName === 'help') {
83
+ return { command: 'help', args: [], options: {} };
84
+ }
85
+ else {
86
+ // Handle options with values
87
+ const nextArg = args[i + 1];
88
+ if (nextArg && !nextArg.startsWith('--')) {
89
+ options[optionName] = nextArg;
90
+ i++; // Skip the next argument as it's the value
91
+ }
92
+ else {
93
+ options[optionName] = true;
94
+ }
95
+ }
96
+ }
97
+ else {
98
+ remainingArgs.push(arg);
99
+ }
100
+ }
101
+ return { command, args: remainingArgs, options };
102
+ }
103
+ /**
104
+ * Validate command line arguments
105
+ */
106
+ function validateArgs(command, args, options) {
107
+ switch (command) {
108
+ case 'ingest':
109
+ if (args.length === 0) {
110
+ console.error('Error: ingest command requires a path argument');
111
+ console.error('');
112
+ console.error('Usage: raglite ingest <path>');
113
+ console.error('');
114
+ console.error('Examples:');
115
+ console.error(' raglite ingest ./docs/ # Ingest all .md/.txt files in docs/');
116
+ console.error(' raglite ingest ./readme.md # Ingest single file');
117
+ console.error(' raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2 # Use higher quality model');
118
+ console.error('');
119
+ console.error('Options:');
120
+ console.error(' --model <name> Use specific embedding model');
121
+ console.error(' --rebuild-if-needed Automatically rebuild if model mismatch detected');
122
+ console.error('');
123
+ console.error('The path can be either a file (.md or .txt) or a directory.');
124
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
125
+ }
126
+ break;
127
+ case 'search':
128
+ if (args.length === 0) {
129
+ console.error('Error: search command requires a query argument');
130
+ console.error('');
131
+ console.error('Usage: raglite search <query> [options]');
132
+ console.error('');
133
+ console.error('Examples:');
134
+ console.error(' raglite search "machine learning"');
135
+ console.error(' raglite search "API documentation" --top-k 10');
136
+ console.error(' raglite search "tutorial" --rerank');
137
+ console.error('');
138
+ console.error('Options:');
139
+ console.error(' --top-k <number> Number of results to return (default: 10)');
140
+ console.error(' --rerank Enable reranking for better results');
141
+ console.error(' --no-rerank Disable reranking');
142
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
143
+ }
144
+ break;
145
+ case 'rebuild':
146
+ // No arguments required
147
+ break;
148
+ case 'help':
149
+ // No validation needed
150
+ break;
151
+ default:
152
+ console.error(`Error: Unknown command '${command}'`);
153
+ console.error('');
154
+ console.error('Available commands: ingest, search, rebuild, help');
155
+ console.error('Run "raglite help" for detailed usage information');
156
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
157
+ }
158
+ // Validate numeric options
159
+ if (options['top-k'] !== undefined) {
160
+ const topK = parseInt(options['top-k'], 10);
161
+ if (isNaN(topK) || topK <= 0) {
162
+ console.error('Error: --top-k must be a positive number');
163
+ console.error('');
164
+ console.error('Examples:');
165
+ console.error(' --top-k 5 # Return 5 results');
166
+ console.error(' --top-k 20 # Return 20 results');
167
+ console.error('');
168
+ console.error('Valid range: 1-100 results');
169
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
170
+ }
171
+ if (topK > 100) {
172
+ console.warn(`Warning: Large --top-k value (${topK}) may impact performance. Consider using a smaller value.`);
173
+ }
174
+ options['top-k'] = topK;
175
+ }
176
+ // Validate model option (only for ingest command)
177
+ if (options.model !== undefined) {
178
+ if (command !== 'ingest') {
179
+ console.error(`Error: --model option is only available for the 'ingest' command`);
180
+ console.error('');
181
+ console.error('The search command automatically uses the model that was used during ingestion.');
182
+ console.error('To search with a different model, you need to re-ingest with that model first.');
183
+ console.error('');
184
+ console.error('Examples:');
185
+ console.error(' raglite ingest ./docs/ --model Xenova/all-mpnet-base-v2');
186
+ console.error(' raglite search "your query" # Uses the model from ingestion');
187
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
188
+ }
189
+ const supportedModels = [
190
+ 'sentence-transformers/all-MiniLM-L6-v2',
191
+ 'Xenova/all-mpnet-base-v2'
192
+ ];
193
+ if (!supportedModels.includes(options.model)) {
194
+ console.error(`Error: Unsupported model '${options.model}'`);
195
+ console.error('');
196
+ console.error('Supported models:');
197
+ console.error(' sentence-transformers/all-MiniLM-L6-v2 (384 dim, fast, default)');
198
+ console.error(' Xenova/all-mpnet-base-v2 (768 dim, higher quality)');
199
+ console.error('');
200
+ console.error('Examples:');
201
+ console.error(' --model sentence-transformers/all-MiniLM-L6-v2');
202
+ console.error(' --model Xenova/all-mpnet-base-v2');
203
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
204
+ }
205
+ }
206
+ // Validate path-strategy option (only for ingest command)
207
+ if (options['path-strategy'] !== undefined) {
208
+ if (command !== 'ingest') {
209
+ console.error(`Error: --path-strategy option is only available for the 'ingest' command`);
210
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
211
+ }
212
+ const supportedStrategies = ['absolute', 'relative'];
213
+ if (!supportedStrategies.includes(options['path-strategy'])) {
214
+ console.error(`Error: Unsupported path strategy '${options['path-strategy']}'`);
215
+ console.error('');
216
+ console.error('Supported strategies:');
217
+ console.error(' relative Store paths relative to base directory (default, portable)');
218
+ console.error(' absolute Store absolute paths (legacy mode)');
219
+ console.error('');
220
+ console.error('Examples:');
221
+ console.error(' --path-strategy relative');
222
+ console.error(' --path-strategy absolute');
223
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
224
+ }
225
+ }
226
+ // Validate path-base option (only for ingest command)
227
+ if (options['path-base'] !== undefined) {
228
+ if (command !== 'ingest') {
229
+ console.error(`Error: --path-base option is only available for the 'ingest' command`);
230
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
231
+ }
232
+ if (typeof options['path-base'] !== 'string' || options['path-base'].trim() === '') {
233
+ console.error('Error: --path-base must be a non-empty directory path');
234
+ console.error('');
235
+ console.error('Examples:');
236
+ console.error(' --path-base /project/docs');
237
+ console.error(' --path-base ./my-docs');
238
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Main CLI entry point
244
+ */
245
+ async function main() {
246
+ try {
247
+ const { command, args, options } = parseArgs();
248
+ // Validate arguments
249
+ validateArgs(command, args, options);
250
+ // Handle commands
251
+ switch (command) {
252
+ case 'help':
253
+ showHelp();
254
+ break;
255
+ case 'ingest':
256
+ const { runIngest } = await import('./cli/indexer.js');
257
+ await runIngest(args[0], options);
258
+ break;
259
+ case 'search':
260
+ const { runSearch } = await import('./cli/search.js');
261
+ const query = args.join(' '); // Join all args as query
262
+ await runSearch(query, options);
263
+ break;
264
+ case 'rebuild':
265
+ const { runRebuild } = await import('./cli/indexer.js');
266
+ await runRebuild();
267
+ break;
268
+ default:
269
+ console.error(`Error: Unknown command '${command}'`);
270
+ process.exit(1);
271
+ }
272
+ }
273
+ catch (error) {
274
+ // Handle different error types with appropriate exit codes
275
+ if (error instanceof ConfigurationError) {
276
+ console.error('Configuration Error:');
277
+ console.error(error.message);
278
+ process.exit(error.exitCode);
279
+ }
280
+ else if (error instanceof Error) {
281
+ console.error('Error:', error.message);
282
+ // Provide context-specific help for common errors
283
+ if (error.message.includes('ENOENT')) {
284
+ console.error('');
285
+ console.error('This usually means a file or directory was not found.');
286
+ console.error('Please check that the path exists and you have read permissions.');
287
+ process.exit(EXIT_CODES.FILE_NOT_FOUND);
288
+ }
289
+ else if (error.message.includes('EACCES') || error.message.includes('permission')) {
290
+ console.error('');
291
+ console.error('Permission denied. Please check file/directory permissions.');
292
+ process.exit(EXIT_CODES.PERMISSION_ERROR);
293
+ }
294
+ else if (error.message.includes('SQLITE') || error.message.includes('database')) {
295
+ console.error('');
296
+ console.error('Database error. Try running "raglite rebuild" to fix index issues.');
297
+ process.exit(EXIT_CODES.DATABASE_ERROR);
298
+ }
299
+ else if (error.message.includes('model') || error.message.includes('ONNX')) {
300
+ console.error('');
301
+ console.error('Model loading error. The embedding model will be downloaded automatically on first run.');
302
+ process.exit(EXIT_CODES.MODEL_ERROR);
303
+ }
304
+ else {
305
+ process.exit(EXIT_CODES.GENERAL_ERROR);
306
+ }
307
+ }
308
+ else {
309
+ console.error('Unknown error:', String(error));
310
+ process.exit(EXIT_CODES.GENERAL_ERROR);
311
+ }
312
+ }
313
+ }
314
+ // Handle unhandled promise rejections
315
+ process.on('unhandledRejection', (reason, promise) => {
316
+ console.error('🚨 Unhandled Promise Rejection:');
317
+ console.error('Reason:', reason);
318
+ console.error('Promise:', promise);
319
+ console.error('');
320
+ console.error('This is usually caused by an async operation that failed without proper error handling.');
321
+ console.error('The system will exit to prevent undefined behavior.');
322
+ console.error('');
323
+ console.error('If this error persists, please report it with the above details.');
324
+ process.exit(EXIT_CODES.GENERAL_ERROR);
325
+ });
326
+ // Handle uncaught exceptions
327
+ process.on('uncaughtException', (error) => {
328
+ console.error('🚨 Uncaught Exception:');
329
+ console.error('Error:', error.message);
330
+ console.error('');
331
+ if (error.stack) {
332
+ console.error('Stack trace:');
333
+ console.error(error.stack);
334
+ console.error('');
335
+ }
336
+ console.error('This indicates a serious error in the application.');
337
+ console.error('The system will exit immediately to prevent data corruption.');
338
+ console.error('');
339
+ console.error('Please report this issue with the above details.');
340
+ process.exit(EXIT_CODES.GENERAL_ERROR);
341
+ });
342
+ // Handle process termination signals gracefully
343
+ process.on('SIGINT', () => {
344
+ console.log('\n\nReceived SIGINT (Ctrl+C). Shutting down gracefully...');
345
+ console.log('If you need to force quit, press Ctrl+C again.');
346
+ process.exit(EXIT_CODES.SUCCESS);
347
+ });
348
+ process.on('SIGTERM', () => {
349
+ console.log('\n\nReceived SIGTERM. Shutting down gracefully...');
350
+ process.exit(EXIT_CODES.SUCCESS);
351
+ });
352
+ // Run the CLI
353
+ main().catch((error) => {
354
+ console.error('Fatal error:', error instanceof Error ? error.message : String(error));
355
+ if (error instanceof ConfigurationError) {
356
+ process.exit(error.exitCode);
357
+ }
358
+ else {
359
+ process.exit(EXIT_CODES.GENERAL_ERROR);
360
+ }
361
+ });
362
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7D,oCAAoC;AACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE;;GAEG;AACH,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;eACC,WAAW,CAAC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjC,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAKhB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEhC,uBAAuB;YACvB,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACxB,CAAC;iBAAM,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBACtC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACzB,CAAC;iBAAM,IAAI,UAAU,KAAK,mBAAmB,EAAE,CAAC;gBAC9C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YACjC,CAAC;iBAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzC,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;oBAC9B,CAAC,EAAE,CAAC,CAAC,2CAA2C;gBAClD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,IAAc,EAAE,OAA4B;IACjF,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;gBACzF,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACzE,OAAO,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;gBACvG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;gBAC3F,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM;QAER,KAAK,QAAQ;YACX,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACjE,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAEtD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBACjF,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAExD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM;QAER,KAAK,SAAS;YACZ,wBAAwB;YACxB,MAAM;QAER,KAAK,MAAM;YACT,uBAAuB;YACvB,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,GAAG,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,2DAA2D,CAAC,CAAC;QACjH,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAClD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;YACjG,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;YAChG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,eAAe,GAAG;YACtB,wCAAwC;YACxC,0BAA0B;SAC3B,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;YACzF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO,CAAC,WAAW,CAAC,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;YACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACnF,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;QAE/C,qBAAqB;QACrB,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAErC,kBAAkB;QAClB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,QAAQ,EAAE,CAAC;gBACX,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBACvD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAClC,MAAM;YAER,KAAK,QAAQ;gBACX,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB;gBACvD,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChC,MAAM;YAER,KAAK,SAAS;gBACZ,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBACxD,MAAM,UAAU,EAAE,CAAC;gBACnB,MAAM;YAER;gBACE,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,GAAG,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,2DAA2D;QAC3D,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAEvC,kDAAkD;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;gBAClF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;gBACzG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED,sCAAsC;AACtC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IACnD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;IACzG,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACrE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAClF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC9E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,gDAAgD;AAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,cAAc;AACd,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtF,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC"}