mcp-local-rag 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +10 -15
  2. package/dist/cli/common.d.ts +14 -0
  3. package/dist/cli/common.d.ts.map +1 -0
  4. package/dist/cli/common.js +25 -0
  5. package/dist/cli/common.js.map +1 -0
  6. package/dist/cli/delete.d.ts +8 -0
  7. package/dist/cli/delete.d.ts.map +1 -0
  8. package/dist/cli/delete.js +164 -0
  9. package/dist/cli/delete.js.map +1 -0
  10. package/dist/cli/ingest.d.ts +21 -8
  11. package/dist/cli/ingest.d.ts.map +1 -1
  12. package/dist/cli/ingest.js +110 -60
  13. package/dist/cli/ingest.js.map +1 -1
  14. package/dist/cli/list.d.ts +23 -0
  15. package/dist/cli/list.d.ts.map +1 -0
  16. package/dist/cli/list.js +142 -0
  17. package/dist/cli/list.js.map +1 -0
  18. package/dist/cli/options.d.ts +49 -0
  19. package/dist/cli/options.d.ts.map +1 -0
  20. package/dist/cli/options.js +193 -0
  21. package/dist/cli/options.js.map +1 -0
  22. package/dist/cli/query.d.ts +23 -0
  23. package/dist/cli/query.d.ts.map +1 -0
  24. package/dist/cli/query.js +162 -0
  25. package/dist/cli/query.js.map +1 -0
  26. package/dist/cli/status.d.ts +8 -0
  27. package/dist/cli/status.d.ts.map +1 -0
  28. package/dist/cli/status.js +78 -0
  29. package/dist/cli/status.js.map +1 -0
  30. package/dist/cli-main.d.ts +4 -2
  31. package/dist/cli-main.d.ts.map +1 -1
  32. package/dist/cli-main.js +21 -4
  33. package/dist/cli-main.js.map +1 -1
  34. package/dist/index.js +5 -4
  35. package/dist/index.js.map +1 -1
  36. package/dist/server/index.js +1 -1
  37. package/dist/server/index.js.map +1 -1
  38. package/dist/server/types.d.ts +1 -1
  39. package/dist/server/types.d.ts.map +1 -1
  40. package/dist/utils/raw-data-utils.d.ts +116 -0
  41. package/dist/utils/raw-data-utils.d.ts.map +1 -0
  42. package/dist/utils/raw-data-utils.js +202 -0
  43. package/dist/utils/raw-data-utils.js.map +1 -0
  44. package/package.json +3 -4
  45. package/skills/mcp-local-rag/SKILL.md +25 -35
  46. package/skills/mcp-local-rag/references/cli-reference.md +77 -0
  47. package/skills/mcp-local-rag/references/html-ingestion.md +11 -7
  48. package/skills/mcp-local-rag/references/query-optimization.md +1 -1
  49. package/skills/mcp-local-rag/references/cli-ingest.md +0 -45
package/README.md CHANGED
@@ -119,27 +119,22 @@ HTML is automatically cleaned—you get the article content, not the boilerplate
119
119
 
120
120
  > **Note:** The RAG server itself doesn't fetch web content—your AI assistant retrieves it and passes the HTML to `ingest_data`. This keeps the server fully local while letting you index any content your assistant can access. Please respect website terms of service and copyright when ingesting external content.
121
121
 
122
- ### Bulk Ingestion (CLI)
122
+ ### CLI Commands
123
123
 
124
- For ingesting multiple files or an entire directory, use the CLI command instead of calling `ingest_file` repeatedly:
124
+ All MCP tools are also available as CLI commands no MCP server needed:
125
125
 
126
126
  ```bash
127
- npx mcp-local-rag ingest --db-path ./lancedb --base-dir ./docs ./docs/
127
+ npx mcp-local-rag ingest ./docs/ # Bulk ingest files
128
+ npx mcp-local-rag query "authentication API" # Search documents
129
+ npx mcp-local-rag list # Show ingestion status
130
+ npx mcp-local-rag status # Database stats
131
+ npx mcp-local-rag delete ./docs/old.pdf # Remove content
132
+ npx mcp-local-rag delete --source "https://..." # Remove by source URL
128
133
  ```
129
134
 
130
- Supports PDF, DOCX, TXT, and Markdown (same as MCP tools). HTML is only supported via `ingest_data`, not CLI.
135
+ Global options (`--db-path`, `--cache-dir`, `--model-name`) go before the subcommand. Run `npx mcp-local-rag --help` for details.
131
136
 
132
- Key options:
133
-
134
- | Option | Default | Description |
135
- |--------|---------|-------------|
136
- | `--db-path <path>` | `./lancedb/` | LanceDB database path |
137
- | `--base-dir <path>` | cwd | Base directory for documents |
138
- | `--model-name <name>` | `Xenova/all-MiniLM-L6-v2` | Embedding model |
139
- | `--cache-dir <path>` | `./models/` | Model cache directory |
140
- | `--max-file-size <n>` | `104857600` | Max file size in bytes |
141
-
142
- This processes all supported files recursively and runs optimization once at the end — much faster than per-file ingestion for large batches.
137
+ `query`, `list`, `status`, and `delete` output JSON to stdout for piping (e.g., `| jq`). `ingest` outputs progress to stderr.
143
138
 
144
139
  > ⚠️ **CLI options must match your MCP server config.** Especially `--model-name` — using a different embedding model against an existing database produces incompatible vectors, silently degrading search quality.
145
140
 
@@ -0,0 +1,14 @@
1
+ import { Embedder } from '../embedder/index.js';
2
+ import { VectorStore } from '../vectordb/index.js';
3
+ import type { ResolvedGlobalConfig } from './options.js';
4
+ /**
5
+ * Create an uninitialized VectorStore from resolved global config.
6
+ * Callers are responsible for calling initialize() before use.
7
+ */
8
+ export declare function createVectorStore(config: ResolvedGlobalConfig): VectorStore;
9
+ /**
10
+ * Create an uninitialized Embedder from resolved global config.
11
+ * Callers are responsible for managing the Embedder lifecycle.
12
+ */
13
+ export declare function createEmbedder(config: ResolvedGlobalConfig): Embedder;
14
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/cli/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,WAAW,CAK3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAMrE"}
@@ -0,0 +1,25 @@
1
+ // Shared CLI component helpers — factory functions for VectorStore and Embedder
2
+ import { Embedder } from '../embedder/index.js';
3
+ import { VectorStore } from '../vectordb/index.js';
4
+ /**
5
+ * Create an uninitialized VectorStore from resolved global config.
6
+ * Callers are responsible for calling initialize() before use.
7
+ */
8
+ export function createVectorStore(config) {
9
+ return new VectorStore({
10
+ dbPath: config.dbPath,
11
+ tableName: 'chunks',
12
+ });
13
+ }
14
+ /**
15
+ * Create an uninitialized Embedder from resolved global config.
16
+ * Callers are responsible for managing the Embedder lifecycle.
17
+ */
18
+ export function createEmbedder(config) {
19
+ return new Embedder({
20
+ modelPath: config.modelName,
21
+ batchSize: 16,
22
+ cacheDir: config.cacheDir,
23
+ });
24
+ }
25
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/cli/common.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,OAAO,IAAI,WAAW,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,QAAQ;KACpB,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAA4B;IACzD,OAAO,IAAI,QAAQ,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { GlobalOptions } from './options.js';
2
+ /**
3
+ * Run the delete CLI subcommand.
4
+ * @param args - Arguments after "delete"
5
+ * @param globalOptions - Global options parsed before the subcommand
6
+ */
7
+ export declare function runDelete(args: string[], globalOptions?: GlobalOptions): Promise<void>;
8
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/cli/delete.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAkFjD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGhG"}
@@ -0,0 +1,164 @@
1
+ // CLI delete subcommand — delete ingested content by file path or source URL
2
+ import { unlink } from 'node:fs/promises';
3
+ import { resolve } from 'node:path';
4
+ import { generateMetaJsonPath, generateRawDataPath, isRawDataPath, } from '../utils/raw-data-utils.js';
5
+ import { createVectorStore } from './common.js';
6
+ import { resolveGlobalConfig, validatePath } from './options.js';
7
+ // ============================================
8
+ // Help
9
+ // ============================================
10
+ const HELP_TEXT = `Usage: mcp-local-rag [global-options] delete [--source <url>] [<file-path>]
11
+
12
+ Delete ingested content by file path or source URL.
13
+
14
+ Either <file-path> or --source is required (not both).
15
+
16
+ Arguments:
17
+ <file-path> File path of ingested content to delete
18
+
19
+ Options:
20
+ --source <url> Delete by source URL (for content ingested via ingest_data)
21
+ -h, --help Show this help
22
+
23
+ Global options (must appear before "delete"):
24
+ --db-path <path> LanceDB database path
25
+ --cache-dir <path> Model cache directory
26
+ --model-name <name> Embedding model`;
27
+ /**
28
+ * Parse delete-specific CLI arguments.
29
+ * Accepts a positional <file-path>, --source <url>, and -h/--help.
30
+ * Unknown flags or conflicting args cause exit(1).
31
+ */
32
+ function parseArgs(args) {
33
+ let help = false;
34
+ let source;
35
+ let filePath;
36
+ let i = 0;
37
+ while (i < args.length) {
38
+ const arg = args[i];
39
+ if (arg === '-h' || arg === '--help') {
40
+ help = true;
41
+ i++;
42
+ }
43
+ else if (arg === '--source') {
44
+ const value = args[++i];
45
+ if (value === undefined || value.startsWith('-')) {
46
+ console.error('Missing value for --source');
47
+ console.error(HELP_TEXT);
48
+ process.exit(1);
49
+ }
50
+ source = value;
51
+ i++;
52
+ }
53
+ else if (arg.startsWith('-')) {
54
+ console.error(`Unknown option: ${arg}`);
55
+ console.error(HELP_TEXT);
56
+ process.exit(1);
57
+ }
58
+ else {
59
+ // Positional argument: file-path
60
+ filePath = arg;
61
+ i++;
62
+ }
63
+ }
64
+ const result = { help };
65
+ if (source !== undefined)
66
+ result.source = source;
67
+ if (filePath !== undefined)
68
+ result.filePath = filePath;
69
+ return result;
70
+ }
71
+ // ============================================
72
+ // Main Entry Point
73
+ // ============================================
74
+ /**
75
+ * Run the delete CLI subcommand.
76
+ * @param args - Arguments after "delete"
77
+ * @param globalOptions - Global options parsed before the subcommand
78
+ */
79
+ export async function runDelete(args, globalOptions = {}) {
80
+ // Parse CLI options
81
+ const parsed = parseArgs(args);
82
+ // Handle --help
83
+ if (parsed.help) {
84
+ console.error(HELP_TEXT);
85
+ process.exit(0);
86
+ }
87
+ // Validate: either file-path or --source required, not both
88
+ if (!parsed.filePath && !parsed.source) {
89
+ console.error('Either <file-path> or --source is required');
90
+ console.error(HELP_TEXT);
91
+ process.exit(1);
92
+ }
93
+ if (parsed.filePath && parsed.source) {
94
+ console.error('Cannot specify both <file-path> and --source');
95
+ console.error(HELP_TEXT);
96
+ process.exit(1);
97
+ }
98
+ // Resolve global config
99
+ const globalConfig = resolveGlobalConfig(globalOptions);
100
+ try {
101
+ // Create and initialize VectorStore (no Embedder needed for delete)
102
+ const vectorStore = createVectorStore(globalConfig);
103
+ await vectorStore.initialize();
104
+ // Determine target file path
105
+ let targetPath;
106
+ if (parsed.source) {
107
+ // Generate raw-data path from source URL
108
+ targetPath = generateRawDataPath(globalConfig.dbPath, parsed.source, 'markdown');
109
+ }
110
+ else {
111
+ // Use provided file path, resolve to absolute
112
+ targetPath = resolve(parsed.filePath);
113
+ // Validate path (reject sensitive system directories)
114
+ const pathError = validatePath(targetPath, '<file-path>');
115
+ if (pathError) {
116
+ console.error(pathError);
117
+ process.exitCode = 1;
118
+ return;
119
+ }
120
+ }
121
+ // Delete chunks from VectorStore
122
+ await vectorStore.deleteChunks(targetPath);
123
+ // Clean up physical raw-data files if applicable
124
+ if (isRawDataPath(targetPath)) {
125
+ try {
126
+ await unlink(targetPath);
127
+ }
128
+ catch (error) {
129
+ // Ignore ENOENT (file already deleted / never existed)
130
+ if (!(error instanceof Error) ||
131
+ !('code' in error) ||
132
+ error.code !== 'ENOENT') {
133
+ throw error;
134
+ }
135
+ }
136
+ try {
137
+ await unlink(generateMetaJsonPath(targetPath));
138
+ }
139
+ catch (error) {
140
+ // Ignore ENOENT
141
+ if (!(error instanceof Error) ||
142
+ !('code' in error) ||
143
+ error.code !== 'ENOENT') {
144
+ throw error;
145
+ }
146
+ }
147
+ }
148
+ // Optimize VectorStore after deletion
149
+ await vectorStore.optimize();
150
+ // Output result JSON to stdout
151
+ const result = {
152
+ filePath: targetPath,
153
+ deleted: true,
154
+ timestamp: new Date().toISOString(),
155
+ };
156
+ process.stdout.write(JSON.stringify(result));
157
+ }
158
+ catch (error) {
159
+ const reason = error instanceof Error ? error.message : String(error);
160
+ console.error(`Error: ${reason}`);
161
+ process.exit(1);
162
+ }
163
+ }
164
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/cli/delete.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,37 @@
1
- interface CliOptions {
2
- dbPath?: string | undefined;
1
+ import type { GlobalOptions, ResolvedGlobalConfig } from './options.js';
2
+ interface IngestConfig {
3
+ baseDir: string;
4
+ dbPath: string;
5
+ cacheDir: string;
6
+ modelName: string;
7
+ maxFileSize: number;
8
+ }
9
+ interface IngestCliOptions {
3
10
  baseDir?: string | undefined;
4
- cacheDir?: string | undefined;
5
- modelName?: string | undefined;
6
11
  maxFileSize?: number | undefined;
7
12
  }
8
13
  interface ParsedArgs {
9
14
  positional: string | undefined;
10
- options: CliOptions;
15
+ options: IngestCliOptions;
11
16
  help: boolean;
12
17
  }
13
18
  /**
14
- * Parse CLI arguments into options and a positional path.
15
- * Flags: --db-path, --base-dir, --cache-dir, --model-name, --max-file-size, -h/--help
19
+ * Parse ingest-specific CLI arguments into options and a positional path.
20
+ * Flags: --base-dir, --max-file-size, -h/--help
21
+ * Unknown flags (including global flags passed after subcommand) cause an error.
16
22
  */
17
23
  export declare function parseArgs(args: string[]): ParsedArgs;
24
+ /**
25
+ * Resolve ingest config by merging global config with ingest-specific options.
26
+ * Ingest-specific: baseDir, maxFileSize (CLI flags > env vars > defaults).
27
+ * Validates all resolved values before returning.
28
+ */
29
+ export declare function resolveConfig(globalConfig: ResolvedGlobalConfig, ingestOptions?: IngestCliOptions): IngestConfig;
18
30
  /**
19
31
  * Run the ingest CLI subcommand.
20
32
  * @param args - Arguments after "ingest" (e.g., option flags and file/directory path)
33
+ * @param globalOptions - Global options parsed before the subcommand
21
34
  */
22
- export declare function runIngest(args: string[]): Promise<void>;
35
+ export declare function runIngest(args: string[], globalOptions?: GlobalOptions): Promise<void>;
23
36
  export {};
24
37
  //# sourceMappingURL=ingest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"AA8BA,UAAU,UAAU;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAE,OAAO,CAAA;CACd;AAiCD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiDpD;AAmJD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgG7D"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAavE,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAQD,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;CACd;AAgCD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqDpD;AAiBD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,oBAAoB,EAClC,aAAa,GAAE,gBAAqB,GACnC,YAAY,CA8Bd;AAuJD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FhG"}
@@ -1,40 +1,44 @@
1
1
  // CLI ingest subcommand — bulk file ingestion with single optimize() at end
2
2
  import { randomUUID } from 'node:crypto';
3
- import { readdir, stat } from 'node:fs/promises';
3
+ import { opendir, stat } from 'node:fs/promises';
4
4
  import { extname, join, resolve } from 'node:path';
5
5
  import { SemanticChunker } from '../chunker/index.js';
6
- import { Embedder } from '../embedder/index.js';
7
6
  import { DocumentParser, SUPPORTED_EXTENSIONS } from '../parser/index.js';
8
- import { VectorStore } from '../vectordb/index.js';
7
+ import { createEmbedder, createVectorStore } from './common.js';
8
+ import { resolveGlobalConfig, validateMaxFileSize, validatePath } from './options.js';
9
+ // ============================================
10
+ // Constants
11
+ // ============================================
12
+ const MAX_DEPTH = 10;
9
13
  // ============================================
10
14
  // Defaults
11
15
  // ============================================
12
- const DEFAULTS = {
13
- dbPath: './lancedb/',
14
- cacheDir: './models/',
15
- modelName: 'Xenova/all-MiniLM-L6-v2',
16
+ const INGEST_DEFAULTS = {
16
17
  maxFileSize: 104857600,
17
18
  };
18
19
  // ============================================
19
20
  // Help
20
21
  // ============================================
21
- const HELP_TEXT = `Usage: mcp-local-rag ingest [options] <path>
22
+ const HELP_TEXT = `Usage: mcp-local-rag [global-options] ingest [options] <path>
22
23
 
23
24
  Ingest a single file or all supported files under a directory.
24
25
 
25
26
  Options:
26
- --db-path <path> LanceDB database path (default: ${DEFAULTS.dbPath})
27
27
  --base-dir <path> Base directory for documents (default: cwd)
28
- --cache-dir <path> Model cache directory (default: ${DEFAULTS.cacheDir})
29
- --model-name <name> Embedding model (default: ${DEFAULTS.modelName})
30
- --max-file-size <n> Max file size in bytes (default: ${DEFAULTS.maxFileSize})
31
- -h, --help Show this help`;
28
+ --max-file-size <n> Max file size in bytes (default: ${INGEST_DEFAULTS.maxFileSize})
29
+ -h, --help Show this help
30
+
31
+ Global options (must appear before "ingest"):
32
+ --db-path <path> LanceDB database path
33
+ --cache-dir <path> Model cache directory
34
+ --model-name <name> Embedding model`;
32
35
  // ============================================
33
36
  // Arg Parsing
34
37
  // ============================================
35
38
  /**
36
- * Parse CLI arguments into options and a positional path.
37
- * Flags: --db-path, --base-dir, --cache-dir, --model-name, --max-file-size, -h/--help
39
+ * Parse ingest-specific CLI arguments into options and a positional path.
40
+ * Flags: --base-dir, --max-file-size, -h/--help
41
+ * Unknown flags (including global flags passed after subcommand) cause an error.
38
42
  */
39
43
  export function parseArgs(args) {
40
44
  const options = {};
@@ -49,24 +53,23 @@ export function parseArgs(args) {
49
53
  help = true;
50
54
  i++;
51
55
  break;
52
- case '--db-path':
53
- options.dbPath = args[++i];
54
- i++;
55
- break;
56
- case '--base-dir':
57
- options.baseDir = args[++i];
58
- i++;
59
- break;
60
- case '--cache-dir':
61
- options.cacheDir = args[++i];
62
- i++;
63
- break;
64
- case '--model-name':
65
- options.modelName = args[++i];
56
+ case '--base-dir': {
57
+ const value = args[++i];
58
+ if (value === undefined || value.startsWith('-')) {
59
+ console.error('Missing value for --base-dir');
60
+ process.exit(1);
61
+ }
62
+ options.baseDir = value;
66
63
  i++;
67
64
  break;
65
+ }
68
66
  case '--max-file-size': {
69
- const parsed = Number.parseInt(args[++i] ?? '', 10);
67
+ const raw = args[++i];
68
+ if (raw === undefined || raw.startsWith('-')) {
69
+ console.error('Missing value for --max-file-size');
70
+ process.exit(1);
71
+ }
72
+ const parsed = Number.parseInt(raw, 10);
70
73
  options.maxFileSize = Number.isNaN(parsed) ? undefined : parsed;
71
74
  i++;
72
75
  break;
@@ -77,6 +80,11 @@ export function parseArgs(args) {
77
80
  console.error(HELP_TEXT);
78
81
  process.exit(1);
79
82
  }
83
+ if (positional !== undefined) {
84
+ console.error(`Unexpected argument: ${arg}`);
85
+ console.error('Only one path is accepted. Use a directory to ingest multiple files.');
86
+ process.exit(1);
87
+ }
80
88
  positional = arg;
81
89
  i++;
82
90
  break;
@@ -91,24 +99,40 @@ export function parseArgs(args) {
91
99
  * Ensure maxFileSize is a valid number, falling back to default if NaN.
92
100
  */
93
101
  function sanitizeMaxFileSize(value) {
94
- return Number.isNaN(value) ? DEFAULTS.maxFileSize : value;
102
+ return Number.isNaN(value) ? INGEST_DEFAULTS.maxFileSize : value;
95
103
  }
96
104
  // ============================================
97
105
  // Config Resolution
98
106
  // ============================================
99
107
  /**
100
- * Resolve config with priority: CLI flags > environment variables > defaults.
108
+ * Resolve ingest config by merging global config with ingest-specific options.
109
+ * Ingest-specific: baseDir, maxFileSize (CLI flags > env vars > defaults).
110
+ * Validates all resolved values before returning.
101
111
  */
102
- function resolveConfig(cliOptions = {}) {
112
+ export function resolveConfig(globalConfig, ingestOptions = {}) {
113
+ const baseDir = ingestOptions.baseDir ?? process.env['BASE_DIR'] ?? process.cwd();
114
+ const maxFileSize = sanitizeMaxFileSize(ingestOptions.maxFileSize ??
115
+ (process.env['MAX_FILE_SIZE']
116
+ ? Number.parseInt(process.env['MAX_FILE_SIZE'], 10)
117
+ : INGEST_DEFAULTS.maxFileSize));
118
+ // Validate baseDir path
119
+ const baseDirError = validatePath(baseDir, '--base-dir');
120
+ if (baseDirError) {
121
+ console.error(baseDirError);
122
+ process.exit(1);
123
+ }
124
+ // Validate maxFileSize range
125
+ const maxFileSizeError = validateMaxFileSize(maxFileSize);
126
+ if (maxFileSizeError) {
127
+ console.error(maxFileSizeError);
128
+ process.exit(1);
129
+ }
103
130
  return {
104
- baseDir: cliOptions.baseDir ?? process.env['BASE_DIR'] ?? process.cwd(),
105
- dbPath: cliOptions.dbPath ?? process.env['DB_PATH'] ?? DEFAULTS.dbPath,
106
- cacheDir: cliOptions.cacheDir ?? process.env['CACHE_DIR'] ?? DEFAULTS.cacheDir,
107
- modelName: cliOptions.modelName ?? process.env['MODEL_NAME'] ?? DEFAULTS.modelName,
108
- maxFileSize: sanitizeMaxFileSize(cliOptions.maxFileSize ??
109
- (process.env['MAX_FILE_SIZE']
110
- ? Number.parseInt(process.env['MAX_FILE_SIZE'], 10)
111
- : DEFAULTS.maxFileSize)),
131
+ dbPath: globalConfig.dbPath,
132
+ cacheDir: globalConfig.cacheDir,
133
+ modelName: globalConfig.modelName,
134
+ baseDir,
135
+ maxFileSize,
112
136
  };
113
137
  }
114
138
  // ============================================
@@ -117,8 +141,8 @@ function resolveConfig(cliOptions = {}) {
117
141
  /**
118
142
  * Collect files to ingest from a path.
119
143
  * - If path is a file with supported extension, return [path].
120
- * - If path is a directory, recursively scan for supported files.
121
- * - Exclude dbPath and cacheDir directories.
144
+ * - If path is a directory, walk with BFS up to MAX_DEPTH levels.
145
+ * - Skip symlinks, permission errors, and excluded directories.
122
146
  */
123
147
  async function collectFiles(targetPath, excludePaths) {
124
148
  const resolved = resolve(targetPath);
@@ -132,12 +156,43 @@ async function collectFiles(targetPath, excludePaths) {
132
156
  return [resolved];
133
157
  }
134
158
  if (info.isDirectory()) {
135
- const entries = await readdir(resolved, { recursive: true, withFileTypes: true });
136
- return entries
137
- .filter((e) => e.isFile() && SUPPORTED_EXTENSIONS.has(extname(e.name).toLowerCase()))
138
- .map((e) => join(e.parentPath, e.name))
139
- .filter((filePath) => !excludePaths.some((ep) => filePath.startsWith(ep)))
140
- .sort();
159
+ const files = [];
160
+ let depthLimited = false;
161
+ const queue = [{ dirPath: resolved, depth: 0 }];
162
+ while (queue.length > 0) {
163
+ const { dirPath, depth } = queue.shift();
164
+ if (depth >= MAX_DEPTH) {
165
+ depthLimited = true;
166
+ continue;
167
+ }
168
+ let dir;
169
+ try {
170
+ dir = await opendir(dirPath);
171
+ }
172
+ catch {
173
+ console.error(`Warning: cannot read directory: ${dirPath}`);
174
+ continue;
175
+ }
176
+ for await (const entry of dir) {
177
+ const fullPath = join(dirPath, entry.name);
178
+ if (!fullPath.startsWith(resolved))
179
+ continue;
180
+ if (entry.isSymbolicLink())
181
+ continue;
182
+ if (excludePaths.some((ep) => fullPath.startsWith(ep)))
183
+ continue;
184
+ if (entry.isDirectory()) {
185
+ queue.push({ dirPath: fullPath, depth: depth + 1 });
186
+ }
187
+ else if (entry.isFile() && SUPPORTED_EXTENSIONS.has(extname(entry.name).toLowerCase())) {
188
+ files.push(fullPath);
189
+ }
190
+ }
191
+ }
192
+ if (depthLimited) {
193
+ console.error(`Warning: some directories were skipped because they exceed the maximum depth (${MAX_DEPTH})`);
194
+ }
195
+ return files.sort();
141
196
  }
142
197
  return [];
143
198
  }
@@ -205,8 +260,9 @@ async function ingestSingleFile(filePath, parser, chunker, embedder, vectorStore
205
260
  /**
206
261
  * Run the ingest CLI subcommand.
207
262
  * @param args - Arguments after "ingest" (e.g., option flags and file/directory path)
263
+ * @param globalOptions - Global options parsed before the subcommand
208
264
  */
209
- export async function runIngest(args) {
265
+ export async function runIngest(args, globalOptions = {}) {
210
266
  // Parse CLI options
211
267
  const { positional, options, help } = parseArgs(args);
212
268
  // Handle --help
@@ -231,7 +287,8 @@ export async function runIngest(args) {
231
287
  process.exit(1);
232
288
  }
233
289
  // Resolve config: CLI flags > env vars > defaults
234
- const config = resolveConfig(options);
290
+ const globalConfig = resolveGlobalConfig(globalOptions);
291
+ const config = resolveConfig(globalConfig, options);
235
292
  const excludePaths = [`${resolve(config.dbPath)}/`, `${resolve(config.cacheDir)}/`];
236
293
  // Collect files
237
294
  const files = await collectFiles(targetPath, excludePaths);
@@ -246,15 +303,8 @@ export async function runIngest(args) {
246
303
  maxFileSize: config.maxFileSize,
247
304
  });
248
305
  const chunker = new SemanticChunker();
249
- const embedder = new Embedder({
250
- modelPath: config.modelName,
251
- batchSize: 16,
252
- cacheDir: config.cacheDir,
253
- });
254
- const vectorStore = new VectorStore({
255
- dbPath: config.dbPath,
256
- tableName: 'chunks',
257
- });
306
+ const embedder = createEmbedder(globalConfig);
307
+ const vectorStore = createVectorStore(globalConfig);
258
308
  await vectorStore.initialize();
259
309
  // Process each file
260
310
  const summary = { succeeded: 0, failed: 0, totalChunks: 0 };
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest.js","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAErF,+CAA+C;AAC/C,YAAY;AACZ,+CAA+C;AAE/C,MAAM,SAAS,GAAG,EAAE,CAAA;AA+BpB,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,SAAS;CACd,CAAA;AAEV,+CAA+C;AAC/C,OAAO;AACP,+CAA+C;AAE/C,MAAM,SAAS,GAAG;;;;;;4DAM0C,eAAe,CAAC,WAAW;;;;;;yCAM9C,CAAA;AAEzC,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,OAAO,GAAqB,EAAE,CAAA;IACpC,IAAI,UAA8B,CAAA;IAClC,IAAI,IAAI,GAAG,KAAK,CAAA;IAEhB,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,IAAI,GAAG,IAAI,CAAA;gBACX,CAAC,EAAE,CAAA;gBACH,MAAK;YACP,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;oBAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,OAAO,CAAC,OAAO,GAAG,KAAK,CAAA;gBACvB,CAAC,EAAE,CAAA;gBACH,MAAK;YACP,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;gBACrB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7C,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;oBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;gBACvC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;gBAC/D,CAAC,EAAE,CAAA;gBACH,MAAK;YACP,CAAC;YACD;gBACE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAA;oBACvC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAA;oBAC5C,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAA;oBACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACjB,CAAC;gBACD,UAAU,GAAG,GAAG,CAAA;gBAChB,CAAC,EAAE,CAAA;gBACH,MAAK;QACT,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACtC,CAAC;AAED,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAA;AAClE,CAAC;AAED,+CAA+C;AAC/C,oBAAoB;AACpB,+CAA+C;AAE/C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,YAAkC,EAClC,gBAAkC,EAAE;IAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACjF,MAAM,WAAW,GAAG,mBAAmB,CACrC,aAAa,CAAC,WAAW;QACvB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC3B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACnD,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CACnC,CAAA;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACxD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAA;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,SAAS,EAAE,YAAY,CAAC,SAAS;QACjC,OAAO;QACP,WAAW;KACZ,CAAA;AACH,CAAC;AAED,+CAA+C;AAC/C,kBAAkB;AAClB,+CAA+C;AAE/C;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,YAAsB;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEjC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CACX,+BAA+B,GAAG,gBAAgB,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1F,CAAA;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,YAAY,GAAG,KAAK,CAAA;QAExB,MAAM,KAAK,GAAyC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAErF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;YAEzC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBACvB,YAAY,GAAG,IAAI,CAAA;gBACnB,SAAQ;YACV,CAAC;YAED,IAAI,GAAwC,CAAA;YAC5C,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;YAC9B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAA;gBAC3D,SAAQ;YACV,CAAC;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBAE1C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAQ;gBAC5C,IAAI,KAAK,CAAC,cAAc,EAAE;oBAAE,SAAQ;gBACpC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBAAE,SAAQ;gBAEhE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;gBACrD,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACzF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,iFAAiF,SAAS,GAAG,CAC9F,CAAA;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED,+CAA+C;AAC/C,qBAAqB;AACrB,+CAA+C;AAE/C;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAC7B,QAAgB,EAChB,MAAsB,EACtB,OAAwB,EACxB,QAAkB,EAClB,WAAwB;IAExB,aAAa;IACb,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACrD,IAAI,IAAY,CAAA;IAChB,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACxD,IAAI,GAAG,MAAM,CAAC,OAAO,CAAA;QACrB,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAA;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,GAAG,MAAM,CAAC,OAAO,CAAA;QACrB,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAA;IAC9B,CAAC;IAED,aAAa;IACb,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAA;QAC/E,OAAO,CAAC,CAAA;IACV,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAEvE,uCAAuC;IACvC,MAAM,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IAExC,sBAAsB;IACtB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,MAAM,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,UAAU,EAAE;YAChB,QAAQ;YACR,UAAU,EAAE,KAAK,CAAC,KAAK;YACvB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE;gBACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ;gBAC/C,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;aAC1C;YACD,SAAS,EAAE,KAAK;YAChB,SAAS;SACV,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,gBAAgB;IAChB,MAAM,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;IAE5C,OAAO,YAAY,CAAC,MAAM,CAAA;AAC5B,CAAC;AAED,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,gBAA+B,EAAE;IAC/E,oBAAoB;IACpB,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAErD,gBAAgB;IAChB,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC7D,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACjF,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAA;IAE7B,uBAAuB;IACvB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,kDAAkD;IAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACnD,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAEnF,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAA;IAEzD,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;IACnD,MAAM,WAAW,CAAC,UAAU,EAAE,CAAA;IAE9B,oBAAoB;IACpB,MAAM,OAAO,GAAkB,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAA;IAE1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAA;QAE1C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;YAC3F,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACrB,4CAA4C;gBAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,QAAQ,yBAAyB,CAAC,CAAA;gBAC5D,OAAO,CAAC,SAAS,EAAE,CAAA;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,QAAQ,YAAY,UAAU,UAAU,CAAC,CAAA;gBACnE,OAAO,CAAC,SAAS,EAAE,CAAA;gBACnB,OAAO,CAAC,WAAW,IAAI,UAAU,CAAA;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACrE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,QAAQ,gBAAgB,MAAM,EAAE,CAAC,CAAA;YAC3D,OAAO,CAAC,MAAM,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAA;IAE5B,gBAAgB;IAChB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACjB,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;IACvC,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IAChD,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC7C,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC;AACH,CAAC"}