mcp-local-rag 0.14.1 → 0.14.2

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 (58) hide show
  1. package/README.md +116 -5
  2. package/dist/cli/common.d.ts +37 -0
  3. package/dist/cli/common.d.ts.map +1 -1
  4. package/dist/cli/common.js +81 -1
  5. package/dist/cli/common.js.map +1 -1
  6. package/dist/cli/delete.js +3 -3
  7. package/dist/cli/delete.js.map +1 -1
  8. package/dist/cli/ingest.d.ts +22 -5
  9. package/dist/cli/ingest.d.ts.map +1 -1
  10. package/dist/cli/ingest.js +117 -65
  11. package/dist/cli/ingest.js.map +1 -1
  12. package/dist/cli/list.d.ts +6 -1
  13. package/dist/cli/list.d.ts.map +1 -1
  14. package/dist/cli/list.js +158 -34
  15. package/dist/cli/list.js.map +1 -1
  16. package/dist/cli/options.d.ts +22 -0
  17. package/dist/cli/options.d.ts.map +1 -1
  18. package/dist/cli/options.js +36 -25
  19. package/dist/cli/options.js.map +1 -1
  20. package/dist/cli/query.d.ts.map +1 -1
  21. package/dist/cli/query.js +2 -3
  22. package/dist/cli/query.js.map +1 -1
  23. package/dist/cli/read-neighbors.js +2 -2
  24. package/dist/cli/read-neighbors.js.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/parser/index.d.ts +47 -10
  28. package/dist/parser/index.d.ts.map +1 -1
  29. package/dist/parser/index.js +70 -14
  30. package/dist/parser/index.js.map +1 -1
  31. package/dist/server/error-utils.d.ts +40 -0
  32. package/dist/server/error-utils.d.ts.map +1 -1
  33. package/dist/server/error-utils.js +66 -0
  34. package/dist/server/error-utils.js.map +1 -1
  35. package/dist/server/index.d.ts +92 -36
  36. package/dist/server/index.d.ts.map +1 -1
  37. package/dist/server/index.js +281 -70
  38. package/dist/server/index.js.map +1 -1
  39. package/dist/server/types.d.ts +55 -6
  40. package/dist/server/types.d.ts.map +1 -1
  41. package/dist/server-main.d.ts.map +1 -1
  42. package/dist/server-main.js +88 -3
  43. package/dist/server-main.js.map +1 -1
  44. package/dist/utils/base-dirs.d.ts +203 -0
  45. package/dist/utils/base-dirs.d.ts.map +1 -0
  46. package/dist/utils/base-dirs.js +407 -0
  47. package/dist/utils/base-dirs.js.map +1 -0
  48. package/dist/utils/raw-data-utils.d.ts +15 -5
  49. package/dist/utils/raw-data-utils.d.ts.map +1 -1
  50. package/dist/utils/raw-data-utils.js +39 -8
  51. package/dist/utils/raw-data-utils.js.map +1 -1
  52. package/dist/utils/sensitive-path.d.ts +23 -0
  53. package/dist/utils/sensitive-path.d.ts.map +1 -0
  54. package/dist/utils/sensitive-path.js +91 -0
  55. package/dist/utils/sensitive-path.js.map +1 -0
  56. package/package.json +7 -7
  57. package/skills/mcp-local-rag/SKILL.md +21 -0
  58. package/skills/mcp-local-rag/references/cli-reference.md +4 -4
package/README.md CHANGED
@@ -33,7 +33,7 @@ Semantic search with keyword boost for exact technical terms — fully private,
33
33
 
34
34
  ## Quick Start
35
35
 
36
- Set `BASE_DIR` to the folder you want to search. Documents must live under it.
36
+ Set `BASE_DIR` to the folder you want to search (or `BASE_DIRS` for multiple roots — see [Configuration](#configuration)). Documents must live under one of the configured roots.
37
37
 
38
38
  Add the MCP server to your AI coding tool:
39
39
 
@@ -206,7 +206,7 @@ Pass the `filePath` and `chunkIndex` from the search result. The response includ
206
206
  #### Managing Files
207
207
 
208
208
  ```
209
- "List all files in BASE_DIR and their ingested status" # See what's indexed
209
+ "List all files in configured base directories and their ingested status" # See what's indexed
210
210
  "Delete old-spec.pdf from RAG" # Remove a file
211
211
  "Show RAG server status" # Check system health
212
212
  ```
@@ -237,6 +237,15 @@ npx mcp-local-rag delete --source "https://..." # Remove by source URL
237
237
  npx mcp-local-rag --db-path ./my-db query "auth" --base-dir ./docs
238
238
  ```
239
239
 
240
+ The `--base-dir` flag is repeatable on `ingest` and `list`; pass it once per root:
241
+
242
+ ```bash
243
+ npx mcp-local-rag ingest --base-dir ./docs --base-dir ./specs ./docs/readme.md
244
+ npx mcp-local-rag list --base-dir ./docs --base-dir ./specs
245
+ ```
246
+
247
+ The positional path to `ingest` must sit inside one of the configured roots. When at least one `--base-dir` is supplied, CLI roots replace any env-var roots (no merge).
248
+
240
249
  **Environment variables** — set in your shell:
241
250
 
242
251
  ```bash
@@ -245,6 +254,13 @@ export BASE_DIR=./docs
245
254
  npx mcp-local-rag query "auth"
246
255
  ```
247
256
 
257
+ For multiple roots, use `BASE_DIRS` (JSON array of non-empty path strings):
258
+
259
+ ```bash
260
+ export BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]'
261
+ npx mcp-local-rag list
262
+ ```
263
+
248
264
  **Sharing config between MCP and CLI** — if your MCP client inherits shell environment variables, you can set them in your shell profile (e.g., `~/.zshrc`) so both use the same values. Otherwise, set them explicitly in your MCP config as well.
249
265
 
250
266
  ```bash
@@ -359,7 +375,8 @@ The MCP server is configured by environment variables only — pass them through
359
375
 
360
376
  | Environment Variable | CLI Flag | Default | Description |
361
377
  |---------------------|----------|---------|-------------|
362
- | `BASE_DIR` | `--base-dir` | Current directory | Document root directory (security boundary) |
378
+ | `BASE_DIR` | `--base-dir` (repeatable) | Current directory | Single document root directory (security boundary). See [Document Roots](#document-roots-base_dir-and-base_dirs) for multi-root setup. |
379
+ | `BASE_DIRS` | — | (unset) | JSON array of document roots (security boundary). Takes precedence over `BASE_DIR`. See [Document Roots](#document-roots-base_dir-and-base_dirs). |
363
380
  | `DB_PATH` | `--db-path` | `./lancedb/` | Vector database location |
364
381
  | `CACHE_DIR` | `--cache-dir` | `./models/` | Model cache directory |
365
382
  | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | HuggingFace model ID ([available models](https://huggingface.co/models?library=transformers.js&pipeline_tag=feature-extraction)) |
@@ -374,6 +391,89 @@ The MCP server is configured by environment variables only — pass them through
374
391
 
375
392
  ⚠️ Changing `MODEL_NAME` changes embedding dimensions. Delete `DB_PATH` and re-ingest after switching models.
376
393
 
394
+ ### Document Roots (`BASE_DIR` and `BASE_DIRS`)
395
+
396
+ mcp-local-rag enforces a security boundary: only files under a configured root are accessible to ingest, list, delete, or read-neighbor operations.
397
+
398
+ **Single root** — use `BASE_DIR`:
399
+
400
+ ```bash
401
+ export BASE_DIR=/Users/me/Documents/work
402
+ ```
403
+
404
+ **Multiple roots** — use `BASE_DIRS` with a JSON array:
405
+
406
+ ```bash
407
+ export BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]'
408
+ ```
409
+
410
+ Only JSON-array syntax is supported. Delimiter syntax such as `BASE_DIRS=/a:/b` is intentionally **not** supported (avoids ambiguity with spaces, colons, commas, and Windows paths).
411
+
412
+ **Resolution order** (highest precedence first):
413
+
414
+ 1. CLI `--base-dir <path>` flags (repeatable on `ingest` and `list`)
415
+ 2. `BASE_DIRS` environment variable
416
+ 3. `BASE_DIR` environment variable
417
+ 4. `process.cwd()` (current working directory)
418
+
419
+ CLI roots **replace** env roots — they are never merged. `BASE_DIRS` and `BASE_DIR` are never merged either: `BASE_DIRS` wins when both are set.
420
+
421
+ **Precedence warning** — when `BASE_DIRS` and `BASE_DIR` are both set (and no CLI `--base-dir` is supplied), `BASE_DIR` is ignored and a warning is surfaced. The warning is visible:
422
+
423
+ - In MCP tool responses (as an additional content block, on every tool — including `status`, `query_documents`, `ingest_file`, `ingest_data`, `list_files`, `delete_file`, `read_chunk_neighbors`).
424
+ - On CLI `stderr`.
425
+
426
+ Unset `BASE_DIR` (or remove `BASE_DIRS`) to silence the warning.
427
+
428
+ **Nested-root pruning** — if one configured root sits inside another after realpath resolution, the nested child is dropped to avoid duplicate scan results. A pruning warning is surfaced the same way as the precedence warning. The surviving parent root still defines the security boundary.
429
+
430
+ **Invalid `BASE_DIRS`** — when `BASE_DIRS` is not a valid JSON array of non-empty strings (malformed JSON, empty array, non-string elements, ...), root-dependent MCP tools return a structured error and CLI subcommands exit non-zero. There is **no silent fallback** to `BASE_DIR` or `cwd`. The MCP `status` tool remains callable so you can diagnose the config error through your MCP client.
431
+
432
+ **MCP client examples** — multi-root setup:
433
+
434
+ Cursor (`~/.cursor/mcp.json`):
435
+ ```json
436
+ {
437
+ "mcpServers": {
438
+ "local-rag": {
439
+ "command": "npx",
440
+ "args": ["-y", "mcp-local-rag"],
441
+ "env": {
442
+ "BASE_DIRS": "[\"/Users/me/Documents/work\",\"/Users/me/Projects/specs\"]"
443
+ }
444
+ }
445
+ }
446
+ }
447
+ ```
448
+
449
+ Codex (`~/.codex/config.toml`):
450
+ ```toml
451
+ [mcp_servers.local-rag]
452
+ command = "npx"
453
+ args = ["-y", "mcp-local-rag"]
454
+
455
+ [mcp_servers.local-rag.env]
456
+ BASE_DIRS = "[\"/Users/me/Documents/work\",\"/Users/me/Projects/specs\"]"
457
+ ```
458
+
459
+ Claude Code:
460
+ ```bash
461
+ claude mcp add local-rag --scope user \
462
+ --env BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]' \
463
+ -- npx -y mcp-local-rag
464
+ ```
465
+
466
+ **CLI examples** — multi-root invocations:
467
+
468
+ ```bash
469
+ # Repeatable --base-dir
470
+ npx mcp-local-rag ingest --base-dir /Users/me/work --base-dir /Users/me/specs /Users/me/work/readme.md
471
+ npx mcp-local-rag list --base-dir /Users/me/work --base-dir /Users/me/specs
472
+
473
+ # Or via BASE_DIRS env
474
+ BASE_DIRS='["/Users/me/work","/Users/me/specs"]' npx mcp-local-rag list
475
+ ```
476
+
377
477
  ### Client-Specific Setup
378
478
 
379
479
  **Cursor** — Global: `~/.cursor/mcp.json`, Project: `.cursor/mcp.json`
@@ -417,7 +517,7 @@ The embedding model (~90MB) downloads on first use. Takes 1-2 minutes, then work
417
517
 
418
518
  ### Security
419
519
 
420
- - **Path restriction**: Only files within `BASE_DIR` are accessible
520
+ - **Path restriction**: Only files within a configured root (`BASE_DIR` or any `BASE_DIRS` / `--base-dir` entry) are accessible. Symlinks resolving outside all configured roots, and sibling-prefix paths (e.g. `/foo/barista` for root `/foo/bar`), are rejected.
421
521
  - **Local only**: No network requests after model download
422
522
  - **Model sources** (all official HuggingFace repositories):
423
523
  - Embedder: [`Xenova/all-MiniLM-L6-v2`](https://huggingface.co/Xenova/all-MiniLM-L6-v2)
@@ -465,7 +565,18 @@ Check chunk count with `status`. Large documents with many chunks may slow queri
465
565
 
466
566
  ### "Path outside BASE_DIR"
467
567
 
468
- Ensure file paths are within `BASE_DIR`. Use absolute paths.
568
+ Ensure file paths are within one of the configured roots (`BASE_DIR`, any `BASE_DIRS` entry, or any CLI `--base-dir`). Use absolute paths.
569
+
570
+ ### "BASE_DIRS must be a JSON array..."
571
+
572
+ `BASE_DIRS` accepts only a JSON array of one or more non-empty path strings. Examples:
573
+
574
+ - Valid: `BASE_DIRS='["/Users/me/work","/Users/me/specs"]'`
575
+ - Invalid: `BASE_DIRS=/a:/b` (delimiter syntax not supported)
576
+ - Invalid: `BASE_DIRS='[]'` (empty array)
577
+ - Invalid: `BASE_DIRS='["",""]'` (empty string element)
578
+
579
+ When invalid, root-dependent operations fail with a clear error rather than silently falling back. The MCP `status` tool remains callable so you can inspect the diagnostic.
469
580
 
470
581
  ### MCP client doesn't see tools
471
582
 
@@ -1,4 +1,5 @@
1
1
  import { Embedder } from '../embedder/index.js';
2
+ import { type BaseDirsConfig, type BaseDirsConfigWarning } from '../utils/base-dirs.js';
2
3
  import { VectorStore } from '../vectordb/index.js';
3
4
  import { type ResolvedGlobalConfig } from './options.js';
4
5
  /**
@@ -11,4 +12,40 @@ export declare function createVectorStore(config: ResolvedGlobalConfig): VectorS
11
12
  * Callers are responsible for managing the Embedder lifecycle.
12
13
  */
13
14
  export declare function createEmbedder(config: ResolvedGlobalConfig): Embedder;
15
+ /**
16
+ * Result of {@link resolveCliBaseDirsOrExit}. Resolution warnings travel with
17
+ * the config so subcommands can render them per their own UI contract (CLI
18
+ * subcommands generally write them to stderr).
19
+ */
20
+ export interface CliBaseDirsResolution {
21
+ config: BaseDirsConfig;
22
+ warnings: BaseDirsConfigWarning[];
23
+ }
24
+ /**
25
+ * Resolve effective base directories for a CLI subcommand using the shared
26
+ * resolver, surfacing any configuration error as a process-level failure.
27
+ *
28
+ * Inputs (single source of truth for CLI precedence — kept here so per-
29
+ * subcommand entry points don't each replicate the env-fallback chain):
30
+ * - `cliRoots`: repeated `--base-dir` flag values in CLI order. When non-
31
+ * empty, REPLACES env roots — no merge.
32
+ * - `process.env['BASE_DIRS']`: JSON array, used only when CLI roots are
33
+ * absent.
34
+ * - `process.env['BASE_DIR']`: single path, used only when CLI roots and
35
+ * `BASE_DIRS` are absent.
36
+ * - `process.cwd()`: final fallback.
37
+ *
38
+ * Failure mode: a `BaseDirsConfigError` (invalid `BASE_DIRS` JSON, missing
39
+ * directory, not-a-directory, ...) is reported to stderr and exits with
40
+ * code 1. This is intentional: the resolver explicitly does NOT fall back
41
+ * (see §Technical Decisions → Resolution order in the multi-base-dirs
42
+ * plan), so CLI consumers should fail fast rather than silently degrading
43
+ * to `cwd`.
44
+ *
45
+ * Warnings (`base-dirs-overrides-base-dir`, `nested-root-pruned`) are
46
+ * returned to the caller rather than written here, so each subcommand can
47
+ * decide its own rendering (JSON-output subcommands like `list` may need
48
+ * to keep stderr clean even when warnings are present).
49
+ */
50
+ export declare function resolveCliBaseDirsOrExit(cliRoots: string[]): Promise<CliBaseDirsResolution>;
14
51
  //# sourceMappingURL=common.d.ts.map
@@ -1 +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,EAAE,KAAK,oBAAoB,EAAiB,MAAM,cAAc,CAAA;AAEvE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,WAAW,CAK3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAOrE"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/cli/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAG3B,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,KAAK,oBAAoB,EAA+B,MAAM,cAAc,CAAA;AAErF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,GAAG,WAAW,CAK3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CAOrE;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,EAAE,qBAAqB,EAAE,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAqDjG"}
@@ -1,7 +1,10 @@
1
1
  // Shared CLI component helpers — factory functions for VectorStore and Embedder
2
+ // plus base-directory resolution shared by every subcommand that scans files.
2
3
  import { Embedder } from '../embedder/index.js';
4
+ import { parseBaseDirsEnv, resolveBaseDirs, } from '../utils/base-dirs.js';
5
+ import { checkSensitivePath } from '../utils/sensitive-path.js';
3
6
  import { VectorStore } from '../vectordb/index.js';
4
- import { resolveDevice } from './options.js';
7
+ import { resolveDevice, validatePath } from './options.js';
5
8
  /**
6
9
  * Create an uninitialized VectorStore from resolved global config.
7
10
  * Callers are responsible for calling initialize() before use.
@@ -24,4 +27,81 @@ export function createEmbedder(config) {
24
27
  device: resolveDevice(process.env['RAG_DEVICE']),
25
28
  });
26
29
  }
30
+ /**
31
+ * Resolve effective base directories for a CLI subcommand using the shared
32
+ * resolver, surfacing any configuration error as a process-level failure.
33
+ *
34
+ * Inputs (single source of truth for CLI precedence — kept here so per-
35
+ * subcommand entry points don't each replicate the env-fallback chain):
36
+ * - `cliRoots`: repeated `--base-dir` flag values in CLI order. When non-
37
+ * empty, REPLACES env roots — no merge.
38
+ * - `process.env['BASE_DIRS']`: JSON array, used only when CLI roots are
39
+ * absent.
40
+ * - `process.env['BASE_DIR']`: single path, used only when CLI roots and
41
+ * `BASE_DIRS` are absent.
42
+ * - `process.cwd()`: final fallback.
43
+ *
44
+ * Failure mode: a `BaseDirsConfigError` (invalid `BASE_DIRS` JSON, missing
45
+ * directory, not-a-directory, ...) is reported to stderr and exits with
46
+ * code 1. This is intentional: the resolver explicitly does NOT fall back
47
+ * (see §Technical Decisions → Resolution order in the multi-base-dirs
48
+ * plan), so CLI consumers should fail fast rather than silently degrading
49
+ * to `cwd`.
50
+ *
51
+ * Warnings (`base-dirs-overrides-base-dir`, `nested-root-pruned`) are
52
+ * returned to the caller rather than written here, so each subcommand can
53
+ * decide its own rendering (JSON-output subcommands like `list` may need
54
+ * to keep stderr clean even when warnings are present).
55
+ */
56
+ export async function resolveCliBaseDirsOrExit(cliRoots) {
57
+ // Screen the raw env-supplied paths before the resolver realpath-
58
+ // normalizes them, so a literal `BASE_DIR=/etc` is rejected with the
59
+ // env var as the attribution surface.
60
+ if (cliRoots.length === 0) {
61
+ if (process.env['BASE_DIRS'] !== undefined && process.env['BASE_DIRS'].length > 0) {
62
+ const parsed = parseBaseDirsEnv(process.env['BASE_DIRS']);
63
+ if (parsed.ok) {
64
+ for (const raw of parsed.value) {
65
+ const sensitive = checkSensitivePath(raw, 'BASE_DIRS');
66
+ if (sensitive) {
67
+ console.error(sensitive);
68
+ process.exit(1);
69
+ }
70
+ }
71
+ }
72
+ // Malformed BASE_DIRS surfaces below via resolveBaseDirs.
73
+ }
74
+ else if (process.env['BASE_DIR'] !== undefined && process.env['BASE_DIR'].trim().length > 0) {
75
+ const sensitive = checkSensitivePath(process.env['BASE_DIR'], 'BASE_DIR');
76
+ if (sensitive) {
77
+ console.error(sensitive);
78
+ process.exit(1);
79
+ }
80
+ }
81
+ }
82
+ const result = await resolveBaseDirs({
83
+ cliRoots,
84
+ envBaseDirs: process.env['BASE_DIRS'],
85
+ envBaseDir: process.env['BASE_DIR'],
86
+ cwd: process.cwd(),
87
+ });
88
+ if (!result.ok) {
89
+ console.error(result.error.message);
90
+ process.exit(1);
91
+ }
92
+ // Apply the sensitive-path policy uniformly to every effective root
93
+ // (CLI, env, or cwd). Pre-multi-root code validated `BASE_DIR` here; the
94
+ // same policy must continue to apply to `BASE_DIRS` entries and to CLI
95
+ // roots that pre-validation in the subcommand may have missed (e.g.
96
+ // realpath-resolved targets of symlinks). Reported under `--base-dir`
97
+ // because that is the flag the user most directly controls.
98
+ for (const root of result.config.baseDirs) {
99
+ const sensitive = validatePath(root, '--base-dir');
100
+ if (sensitive) {
101
+ console.error(sensitive);
102
+ process.exit(1);
103
+ }
104
+ }
105
+ return { config: result.config, warnings: result.warnings };
106
+ }
27
107
  //# sourceMappingURL=common.js.map
@@ -1 +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;AAClD,OAAO,EAA6B,aAAa,EAAE,MAAM,cAAc,CAAA;AAEvE;;;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;QACzB,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACjD,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/cli/common.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // CLI delete subcommand — delete ingested content by file path or source URL
2
2
  import { unlink } from 'node:fs/promises';
3
3
  import { resolve } from 'node:path';
4
- import { generateMetaJsonPath, generateRawDataPath, isRawDataPath, } from '../utils/raw-data-utils.js';
4
+ import { generateMetaJsonPath, generateRawDataPath, isPathInRawDataDirLexical, } from '../utils/raw-data-utils.js';
5
5
  import { createVectorStore } from './common.js';
6
6
  import { resolveGlobalConfig, validatePath } from './options.js';
7
7
  // ============================================
@@ -120,8 +120,8 @@ export async function runDelete(args, globalOptions = {}) {
120
120
  }
121
121
  // Delete chunks from VectorStore
122
122
  await vectorStore.deleteChunks(targetPath);
123
- // Clean up physical raw-data files if applicable
124
- if (isRawDataPath(targetPath)) {
123
+ // Clean up physical raw-data files if applicable.
124
+ if (isPathInRawDataDirLexical(targetPath, globalConfig.dbPath)) {
125
125
  try {
126
126
  await unlink(targetPath);
127
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/cli/delete.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/cli/delete.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,12 @@ import { SemanticChunker } from '../chunker/index.js';
2
2
  import type { Embedder } from '../embedder/index.js';
3
3
  import { DocumentParser } from '../parser/index.js';
4
4
  import type { QualityProfile } from '../pdf-visual/types.js';
5
+ import type { BaseDirsConfig, BaseDirsConfigWarning } from '../utils/base-dirs.js';
5
6
  import type { VectorStore } from '../vectordb/index.js';
6
7
  import type { GlobalOptions, ResolvedGlobalConfig } from './options.js';
7
8
  interface IngestConfig {
8
- baseDir: string;
9
+ baseDirs: BaseDirsConfig;
10
+ baseDirsWarnings: BaseDirsConfigWarning[];
9
11
  dbPath: string;
10
12
  cacheDir: string;
11
13
  modelName: string;
@@ -13,7 +15,12 @@ interface IngestConfig {
13
15
  chunkMinLength?: number;
14
16
  }
15
17
  interface IngestCliOptions {
16
- baseDir?: string | undefined;
18
+ /**
19
+ * Collected `--base-dir` values in CLI order. Repeatable: each flag
20
+ * occurrence appends one entry. An empty array means the flag was not
21
+ * provided (resolver then falls through to env / cwd).
22
+ */
23
+ baseDirs?: string[] | undefined;
17
24
  maxFileSize?: number | undefined;
18
25
  chunkMinLength?: number | undefined;
19
26
  visual?: boolean | undefined;
@@ -37,10 +44,20 @@ interface ParsedArgs {
37
44
  export declare function parseArgs(args: string[]): ParsedArgs;
38
45
  /**
39
46
  * Resolve ingest config by merging global config with ingest-specific options.
40
- * Ingest-specific: baseDir, maxFileSize (CLI flags > env vars > defaults).
41
- * Validates all resolved values before returning.
47
+ *
48
+ * Base directories are resolved via the shared CLI resolver
49
+ * ({@link resolveCliBaseDirsOrExit}) which applies the documented precedence
50
+ * (CLI roots > `BASE_DIRS` > `BASE_DIR` > `cwd`), realpath-normalizes every
51
+ * effective root, dedupes exact duplicates, and prunes nested roots. CLI
52
+ * roots are pre-validated against the sensitive-path policy here so the
53
+ * user sees `--base-dir`-attributed errors before the resolver touches the
54
+ * filesystem.
55
+ *
56
+ * Other ingest-specific values (maxFileSize, chunkMinLength) follow the
57
+ * existing CLI > env > defaults order and are validated against the same
58
+ * ranges as before.
42
59
  */
43
- export declare function resolveConfig(globalConfig: ResolvedGlobalConfig, ingestOptions?: IngestCliOptions): IngestConfig;
60
+ export declare function resolveConfig(globalConfig: ResolvedGlobalConfig, ingestOptions?: IngestCliOptions): Promise<IngestConfig>;
44
61
  /**
45
62
  * Options for `ingestSingleFile`. Discriminated on `visual` so the visual
46
63
  * path is type-only callable with the VLM config it actually needs:
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAwB,MAAM,oBAAoB,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAmBvE,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;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD,UAAU,gBAAgB;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CAC3C;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;CACd;AAmCD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA6FpD;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,oBAAoB,EAClC,aAAa,GAAE,gBAAqB,GACnC,YAAY,CA+Cd;AAgFD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAC9B;IACE,MAAM,EAAE,IAAI,CAAA;IACZ,OAAO,EAAE,cAAc,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAAA;AAEL;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,CAuGjB;AAMD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HhG"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/cli/ingest.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAwB,MAAM,oBAAoB,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAoBvE,UAAU,YAAY;IACpB,QAAQ,EAAE,cAAc,CAAA;IACxB,gBAAgB,EAAE,qBAAqB,EAAE,CAAA;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD,UAAU,gBAAgB;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,cAAc,GAAG,SAAS,CAAA;CAC3C;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,IAAI,EAAE,OAAO,CAAA;CACd;AAmCD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA+FpD;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,oBAAoB,EAClC,aAAa,GAAE,gBAAqB,GACnC,OAAO,CAAC,YAAY,CAAC,CAyDvB;AAmHD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE,GAC9B;IACE,MAAM,EAAE,IAAI,CAAA;IACZ,OAAO,EAAE,cAAc,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5B,CAAA;AAEL;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,MAAM,CAAC,CAuGjB;AAMD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0IhG"}