@ssmeo/mcp-local-rag 0.18.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.de.md +441 -0
- package/README.es.md +441 -0
- package/README.fr.md +441 -0
- package/README.md +530 -0
- package/README.pt-BR.md +441 -0
- package/README.zh-CN.md +441 -0
- package/dist/bin/install-skills.d.ts +19 -0
- package/dist/bin/install-skills.d.ts.map +1 -0
- package/dist/bin/install-skills.js +218 -0
- package/dist/bin/install-skills.js.map +1 -0
- package/dist/chunker/index.d.ts +24 -0
- package/dist/chunker/index.d.ts.map +1 -0
- package/dist/chunker/index.js +2 -0
- package/dist/chunker/index.js.map +1 -0
- package/dist/chunker/semantic-chunker.d.ts +96 -0
- package/dist/chunker/semantic-chunker.d.ts.map +1 -0
- package/dist/chunker/semantic-chunker.js +362 -0
- package/dist/chunker/semantic-chunker.js.map +1 -0
- package/dist/chunker/sentence-splitter.d.ts +32 -0
- package/dist/chunker/sentence-splitter.d.ts.map +1 -0
- package/dist/chunker/sentence-splitter.js +231 -0
- package/dist/chunker/sentence-splitter.js.map +1 -0
- package/dist/chunker/token-containment.d.ts +39 -0
- package/dist/chunker/token-containment.d.ts.map +1 -0
- package/dist/chunker/token-containment.js +83 -0
- package/dist/chunker/token-containment.js.map +1 -0
- package/dist/cli/common.d.ts +34 -0
- package/dist/cli/common.d.ts.map +1 -0
- package/dist/cli/common.js +121 -0
- package/dist/cli/common.js.map +1 -0
- package/dist/cli/delete.d.ts +3 -0
- package/dist/cli/delete.d.ts.map +1 -0
- package/dist/cli/delete.js +169 -0
- package/dist/cli/delete.js.map +1 -0
- package/dist/cli/file-collection.d.ts +2 -0
- package/dist/cli/file-collection.d.ts.map +1 -0
- package/dist/cli/file-collection.js +53 -0
- package/dist/cli/file-collection.js.map +1 -0
- package/dist/cli/ingest.d.ts +69 -0
- package/dist/cli/ingest.d.ts.map +1 -0
- package/dist/cli/ingest.js +323 -0
- package/dist/cli/ingest.js.map +1 -0
- package/dist/cli/list.d.ts +27 -0
- package/dist/cli/list.d.ts.map +1 -0
- package/dist/cli/list.js +207 -0
- package/dist/cli/list.js.map +1 -0
- package/dist/cli/options.d.ts +89 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +244 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/query.d.ts +17 -0
- package/dist/cli/query.d.ts.map +1 -0
- package/dist/cli/query.js +194 -0
- package/dist/cli/query.js.map +1 -0
- package/dist/cli/read-neighbors.d.ts +3 -0
- package/dist/cli/read-neighbors.d.ts.map +1 -0
- package/dist/cli/read-neighbors.js +192 -0
- package/dist/cli/read-neighbors.js.map +1 -0
- package/dist/cli/status.d.ts +6 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +78 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/sync.d.ts +6 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +271 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli-main.d.ts +9 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +60 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/embedder/index.d.ts +143 -0
- package/dist/embedder/index.d.ts.map +1 -0
- package/dist/embedder/index.js +429 -0
- package/dist/embedder/index.js.map +1 -0
- package/dist/embedder/remote.d.ts +51 -0
- package/dist/embedder/remote.d.ts.map +1 -0
- package/dist/embedder/remote.js +182 -0
- package/dist/embedder/remote.js.map +1 -0
- package/dist/features/list.d.ts +37 -0
- package/dist/features/list.d.ts.map +1 -0
- package/dist/features/list.js +41 -0
- package/dist/features/list.js.map +1 -0
- package/dist/features/sync.d.ts +219 -0
- package/dist/features/sync.d.ts.map +1 -0
- package/dist/features/sync.js +461 -0
- package/dist/features/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/compute.d.ts +63 -0
- package/dist/ingest/compute.d.ts.map +1 -0
- package/dist/ingest/compute.js +161 -0
- package/dist/ingest/compute.js.map +1 -0
- package/dist/ingest/file.d.ts +40 -0
- package/dist/ingest/file.d.ts.map +1 -0
- package/dist/ingest/file.js +74 -0
- package/dist/ingest/file.js.map +1 -0
- package/dist/ingest/visual.d.ts +52 -0
- package/dist/ingest/visual.d.ts.map +1 -0
- package/dist/ingest/visual.js +294 -0
- package/dist/ingest/visual.js.map +1 -0
- package/dist/parser/docx-parser.d.ts +12 -0
- package/dist/parser/docx-parser.d.ts.map +1 -0
- package/dist/parser/docx-parser.js +375 -0
- package/dist/parser/docx-parser.js.map +1 -0
- package/dist/parser/html-parser.d.ts +16 -0
- package/dist/parser/html-parser.d.ts.map +1 -0
- package/dist/parser/html-parser.js +119 -0
- package/dist/parser/html-parser.js.map +1 -0
- package/dist/parser/index.d.ts +125 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +364 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/pdf-extract.d.ts +49 -0
- package/dist/parser/pdf-extract.d.ts.map +1 -0
- package/dist/parser/pdf-extract.js +114 -0
- package/dist/parser/pdf-extract.js.map +1 -0
- package/dist/parser/pdf-filter.d.ts +91 -0
- package/dist/parser/pdf-filter.d.ts.map +1 -0
- package/dist/parser/pdf-filter.js +522 -0
- package/dist/parser/pdf-filter.js.map +1 -0
- package/dist/parser/title-extractor.d.ts +28 -0
- package/dist/parser/title-extractor.d.ts.map +1 -0
- package/dist/parser/title-extractor.js +105 -0
- package/dist/parser/title-extractor.js.map +1 -0
- package/dist/pdf-visual/captioner.d.ts +11 -0
- package/dist/pdf-visual/captioner.d.ts.map +1 -0
- package/dist/pdf-visual/captioner.js +48 -0
- package/dist/pdf-visual/captioner.js.map +1 -0
- package/dist/pdf-visual/captioners/fast.d.ts +7 -0
- package/dist/pdf-visual/captioners/fast.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/fast.js +108 -0
- package/dist/pdf-visual/captioners/fast.js.map +1 -0
- package/dist/pdf-visual/captioners/quality.d.ts +7 -0
- package/dist/pdf-visual/captioners/quality.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/quality.js +101 -0
- package/dist/pdf-visual/captioners/quality.js.map +1 -0
- package/dist/pdf-visual/captioners/shared.d.ts +81 -0
- package/dist/pdf-visual/captioners/shared.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/shared.js +156 -0
- package/dist/pdf-visual/captioners/shared.js.map +1 -0
- package/dist/pdf-visual/detector.d.ts +9 -0
- package/dist/pdf-visual/detector.d.ts.map +1 -0
- package/dist/pdf-visual/detector.js +269 -0
- package/dist/pdf-visual/detector.js.map +1 -0
- package/dist/pdf-visual/index.d.ts +13 -0
- package/dist/pdf-visual/index.d.ts.map +1 -0
- package/dist/pdf-visual/index.js +53 -0
- package/dist/pdf-visual/index.js.map +1 -0
- package/dist/pdf-visual/renderer.d.ts +9 -0
- package/dist/pdf-visual/renderer.d.ts.map +1 -0
- package/dist/pdf-visual/renderer.js +186 -0
- package/dist/pdf-visual/renderer.js.map +1 -0
- package/dist/pdf-visual/types.d.ts +53 -0
- package/dist/pdf-visual/types.d.ts.map +1 -0
- package/dist/pdf-visual/types.js +17 -0
- package/dist/pdf-visual/types.js.map +1 -0
- package/dist/server/error-utils.d.ts +63 -0
- package/dist/server/error-utils.d.ts.map +1 -0
- package/dist/server/error-utils.js +124 -0
- package/dist/server/error-utils.js.map +1 -0
- package/dist/server/index.d.ts +216 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1068 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/list-scanner.d.ts +30 -0
- package/dist/server/list-scanner.d.ts.map +1 -0
- package/dist/server/list-scanner.js +50 -0
- package/dist/server/list-scanner.js.map +1 -0
- package/dist/server/tool-definitions.d.ts +8 -0
- package/dist/server/tool-definitions.d.ts.map +1 -0
- package/dist/server/tool-definitions.js +181 -0
- package/dist/server/tool-definitions.js.map +1 -0
- package/dist/server/tool-input.d.ts +37 -0
- package/dist/server/tool-input.d.ts.map +1 -0
- package/dist/server/tool-input.js +211 -0
- package/dist/server/tool-input.js.map +1 -0
- package/dist/server/types.d.ts +307 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +3 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server-main.d.ts +40 -0
- package/dist/server-main.d.ts.map +1 -0
- package/dist/server-main.js +254 -0
- package/dist/server-main.js.map +1 -0
- package/dist/utils/base-dirs.d.ts +145 -0
- package/dist/utils/base-dirs.d.ts.map +1 -0
- package/dist/utils/base-dirs.js +344 -0
- package/dist/utils/base-dirs.js.map +1 -0
- package/dist/utils/errors.d.ts +32 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +61 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/limits.d.ts +26 -0
- package/dist/utils/limits.d.ts.map +1 -0
- package/dist/utils/limits.js +28 -0
- package/dist/utils/limits.js.map +1 -0
- package/dist/utils/list-sources.d.ts +38 -0
- package/dist/utils/list-sources.d.ts.map +1 -0
- package/dist/utils/list-sources.js +40 -0
- package/dist/utils/list-sources.js.map +1 -0
- package/dist/utils/raw-data-utils.d.ts +76 -0
- package/dist/utils/raw-data-utils.d.ts.map +1 -0
- package/dist/utils/raw-data-utils.js +202 -0
- package/dist/utils/raw-data-utils.js.map +1 -0
- package/dist/utils/scan.d.ts +114 -0
- package/dist/utils/scan.d.ts.map +1 -0
- package/dist/utils/scan.js +209 -0
- package/dist/utils/scan.js.map +1 -0
- package/dist/utils/scope-match.d.ts +38 -0
- package/dist/utils/scope-match.d.ts.map +1 -0
- package/dist/utils/scope-match.js +86 -0
- package/dist/utils/scope-match.js.map +1 -0
- package/dist/utils/sensitive-path.d.ts +9 -0
- package/dist/utils/sensitive-path.d.ts.map +1 -0
- package/dist/utils/sensitive-path.js +78 -0
- package/dist/utils/sensitive-path.js.map +1 -0
- package/dist/utils/sync-path-key.d.ts +14 -0
- package/dist/utils/sync-path-key.d.ts.map +1 -0
- package/dist/utils/sync-path-key.js +27 -0
- package/dist/utils/sync-path-key.js.map +1 -0
- package/dist/utils/type-guards.d.ts +18 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +34 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/visual-profile.d.ts +10 -0
- package/dist/utils/visual-profile.d.ts.map +1 -0
- package/dist/utils/visual-profile.js +15 -0
- package/dist/utils/visual-profile.js.map +1 -0
- package/dist/vectordb/index.d.ts +132 -0
- package/dist/vectordb/index.d.ts.map +1 -0
- package/dist/vectordb/index.js +617 -0
- package/dist/vectordb/index.js.map +1 -0
- package/dist/vectordb/search-filters.d.ts +15 -0
- package/dist/vectordb/search-filters.d.ts.map +1 -0
- package/dist/vectordb/search-filters.js +129 -0
- package/dist/vectordb/search-filters.js.map +1 -0
- package/dist/vectordb/types.d.ts +194 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +237 -0
- package/dist/vectordb/types.js.map +1 -0
- package/package.json +108 -0
- package/skills/mcp-local-rag/SKILL.md +234 -0
- package/skills/mcp-local-rag/references/cli-reference.md +190 -0
- package/skills/mcp-local-rag/references/html-ingestion.md +78 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { GlobalOptions } from './options.js';
|
|
2
|
+
interface ListCliOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Collected `--base-dir` values in CLI order. Repeatable: each flag
|
|
5
|
+
* occurrence appends one entry. `undefined` means the flag was not
|
|
6
|
+
* provided.
|
|
7
|
+
*/
|
|
8
|
+
baseDirs?: string[] | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Repeatable `--scope` prefixes in CLI order; multiple flags union.
|
|
11
|
+
* `undefined` means no scope. Trailing-separator equivalence is
|
|
12
|
+
* `scope-match.ts`'s job.
|
|
13
|
+
*/
|
|
14
|
+
scope?: string[] | undefined;
|
|
15
|
+
}
|
|
16
|
+
interface ParsedArgs {
|
|
17
|
+
options: ListCliOptions;
|
|
18
|
+
help: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** No positional arguments; an unknown flag exits 1. */
|
|
21
|
+
export declare function parseArgs(args: string[]): ParsedArgs;
|
|
22
|
+
/**
|
|
23
|
+
* Run the list CLI subcommand.
|
|
24
|
+
*/
|
|
25
|
+
export declare function runList(args: string[], globalOptions?: GlobalOptions): Promise<void>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AA+DjD,UAAU,cAAc;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7B;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,OAAO,CAAA;CACd;AAwDD,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsDpD;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG9F"}
|
package/dist/cli/list.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// CLI list subcommand — list files and ingestion status
|
|
2
|
+
import { resolve, sep } from 'node:path';
|
|
3
|
+
import { listDocuments } from '../features/list.js';
|
|
4
|
+
import { displayPath } from '../utils/base-dirs.js';
|
|
5
|
+
import { MAX_SCAN_DEPTH } from '../utils/limits.js';
|
|
6
|
+
import { bfsCollectSupportedFiles } from '../utils/scan.js';
|
|
7
|
+
import { nonAbsolutePrefixes } from '../utils/scope-match.js';
|
|
8
|
+
import { createVectorStore, formatCliError, resolveCliBaseDirsOrExit } from './common.js';
|
|
9
|
+
import { consumeBaseDirArg, requireFlagValue, resolveGlobalConfig, validatePath, } from './options.js';
|
|
10
|
+
// ============================================
|
|
11
|
+
// Helpers
|
|
12
|
+
// ============================================
|
|
13
|
+
/** Lexicographic order, independent of locale. */
|
|
14
|
+
function compareStrings(a, b) {
|
|
15
|
+
if (a < b) {
|
|
16
|
+
return -1;
|
|
17
|
+
}
|
|
18
|
+
return a > b ? 1 : 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Delegates traversal to {@link bfsCollectSupportedFiles} and renders the
|
|
22
|
+
* `list`-specific warnings, annotated with `displayPath`.
|
|
23
|
+
*/
|
|
24
|
+
async function scanRoot(root, excludePaths, scope) {
|
|
25
|
+
const { files, unreadableDirs, depthLimited } = await bfsCollectSupportedFiles(root, excludePaths, {
|
|
26
|
+
scope,
|
|
27
|
+
});
|
|
28
|
+
const warnings = [];
|
|
29
|
+
for (const { dirPath, code } of unreadableDirs) {
|
|
30
|
+
warnings.push(`cannot read directory: ${displayPath(dirPath)} (${code})`);
|
|
31
|
+
}
|
|
32
|
+
if (depthLimited) {
|
|
33
|
+
warnings.push(`some directories under ${displayPath(root)} were skipped because they exceed the maximum depth (${MAX_SCAN_DEPTH})`);
|
|
34
|
+
}
|
|
35
|
+
return { files, warnings };
|
|
36
|
+
}
|
|
37
|
+
// ============================================
|
|
38
|
+
// Help
|
|
39
|
+
// ============================================
|
|
40
|
+
const HELP_TEXT = `Usage: mcp-local-rag [global-options] list [options]
|
|
41
|
+
|
|
42
|
+
List files and their ingestion status.
|
|
43
|
+
|
|
44
|
+
Options:
|
|
45
|
+
--base-dir <path> Base directory to scan for files (repeatable: pass once per root; default: BASE_DIRS/BASE_DIR env or cwd)
|
|
46
|
+
--scope <prefix> Restrict results to a path prefix (must be absolute; a relative prefix matches nothing; repeatable for multiple prefixes)
|
|
47
|
+
-h, --help Show this help
|
|
48
|
+
|
|
49
|
+
Global options (must appear before "list"):
|
|
50
|
+
--db-path <path> LanceDB database path
|
|
51
|
+
--cache-dir <path> Model cache directory
|
|
52
|
+
--model-name <name> Embedding model`;
|
|
53
|
+
// ============================================
|
|
54
|
+
// Arg Parsing
|
|
55
|
+
// ============================================
|
|
56
|
+
/** No positional arguments; an unknown flag exits 1. */
|
|
57
|
+
export function parseArgs(args) {
|
|
58
|
+
const options = {};
|
|
59
|
+
let help = false;
|
|
60
|
+
let i = 0;
|
|
61
|
+
while (i < args.length) {
|
|
62
|
+
const arg = args[i] ?? '';
|
|
63
|
+
switch (arg) {
|
|
64
|
+
case '-h':
|
|
65
|
+
case '--help':
|
|
66
|
+
help = true;
|
|
67
|
+
i++;
|
|
68
|
+
break;
|
|
69
|
+
case '--base-dir': {
|
|
70
|
+
// Repeatable: each `--base-dir <path>` occurrence appends one entry
|
|
71
|
+
// to `options.baseDirs`. The accumulator is lazily initialized so an
|
|
72
|
+
// absent flag leaves `options.baseDirs` as `undefined`, which the
|
|
73
|
+
// resolver treats as "fall through to env / cwd".
|
|
74
|
+
if (options.baseDirs === undefined) {
|
|
75
|
+
options.baseDirs = [];
|
|
76
|
+
}
|
|
77
|
+
const valueIndex = consumeBaseDirArg(args, i, options.baseDirs);
|
|
78
|
+
i = valueIndex + 1;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case '--scope': {
|
|
82
|
+
// Repeatable prefix filter (mirrors `query --scope`). Trim and reject
|
|
83
|
+
// empty/whitespace locally — the same non-empty check `normalizeScope`
|
|
84
|
+
// applies at the MCP boundary, kept module-private there. Trailing-
|
|
85
|
+
// separator equivalence is handled downstream in `scope-match.ts`.
|
|
86
|
+
const value = requireFlagValue(args, i, '--scope').trim();
|
|
87
|
+
if (value.length === 0) {
|
|
88
|
+
console.error('--scope value must not be empty');
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
const scope = options.scope ?? [];
|
|
92
|
+
scope.push(value);
|
|
93
|
+
options.scope = scope;
|
|
94
|
+
i += 2;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
default:
|
|
98
|
+
if (arg.startsWith('-')) {
|
|
99
|
+
console.error(`Unknown option: ${arg}`);
|
|
100
|
+
console.error(HELP_TEXT);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
console.error(`Unexpected argument: ${arg}`);
|
|
104
|
+
console.error('The list command does not accept positional arguments.');
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { options, help };
|
|
109
|
+
}
|
|
110
|
+
// ============================================
|
|
111
|
+
// Main Entry Point
|
|
112
|
+
// ============================================
|
|
113
|
+
/**
|
|
114
|
+
* Run the list CLI subcommand.
|
|
115
|
+
*/
|
|
116
|
+
export async function runList(args, globalOptions = {}) {
|
|
117
|
+
// Parse CLI options
|
|
118
|
+
const { options, help } = parseArgs(args);
|
|
119
|
+
// Handle --help
|
|
120
|
+
if (help) {
|
|
121
|
+
console.error(HELP_TEXT);
|
|
122
|
+
process.exit(0);
|
|
123
|
+
}
|
|
124
|
+
// Resolve global config
|
|
125
|
+
const globalConfig = resolveGlobalConfig(globalOptions);
|
|
126
|
+
// Validate CLI-supplied paths against the sensitive-path policy BEFORE
|
|
127
|
+
// calling the resolver, so the user sees a `--base-dir`-attributed error
|
|
128
|
+
// without an unnecessary realpath round-trip on a rejected path.
|
|
129
|
+
const cliBaseDirs = options.baseDirs ?? [];
|
|
130
|
+
for (const root of cliBaseDirs) {
|
|
131
|
+
const baseDirError = validatePath(root, '--base-dir');
|
|
132
|
+
if (baseDirError) {
|
|
133
|
+
console.error(baseDirError);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Resolver errors exit non-zero and do NOT fall back. Warnings go to stderr,
|
|
138
|
+
// so the JSON-only stdout contract survives.
|
|
139
|
+
const { config: baseDirsConfig, warnings: baseDirsWarnings } = await resolveCliBaseDirsOrExit(cliBaseDirs);
|
|
140
|
+
for (const warning of baseDirsWarnings) {
|
|
141
|
+
console.error(warning.message);
|
|
142
|
+
}
|
|
143
|
+
// A non-absolute `--scope` prefix matches nothing (scan matching is
|
|
144
|
+
// absolute-path based) but silently yields an empty result for that prefix.
|
|
145
|
+
// Surface it as a non-fatal stderr warning without changing result semantics
|
|
146
|
+
// or the exit code — relative is unhelpful, not an error.
|
|
147
|
+
if (options.scope) {
|
|
148
|
+
for (const prefix of nonAbsolutePrefixes(options.scope)) {
|
|
149
|
+
console.error(`Warning [scope]: "${prefix}" is not an absolute path; it matches nothing.`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Scan/display the normal-path roots (`rawBaseDirs`) so scanned paths match
|
|
153
|
+
// the resolve()-stored DB keys; the realpath'd `baseDirs` are the security
|
|
154
|
+
// boundary, not used here. `rawBaseDirs[0]` is the legacy `baseDir` field.
|
|
155
|
+
const rawBaseDirs = baseDirsConfig.rawBaseDirs;
|
|
156
|
+
const firstRawBaseDir = rawBaseDirs[0];
|
|
157
|
+
if (firstRawBaseDir === undefined) {
|
|
158
|
+
// Cannot happen in non-degraded mode: the resolver always returns at least
|
|
159
|
+
// one effective root. Surface as a programming error rather than emitting
|
|
160
|
+
// an empty `baseDir` field.
|
|
161
|
+
throw new Error('internal: resolver returned no effective base directories');
|
|
162
|
+
}
|
|
163
|
+
const baseDir = firstRawBaseDir;
|
|
164
|
+
const vectorStore = createVectorStore(globalConfig);
|
|
165
|
+
try {
|
|
166
|
+
await vectorStore.initialize();
|
|
167
|
+
// Build exclude paths (resolved to absolute, platform-aware trailing
|
|
168
|
+
// separator). Applied uniformly to every root so dbPath/cacheDir remain
|
|
169
|
+
// excluded under each root even when they happen to live below one of
|
|
170
|
+
// them.
|
|
171
|
+
const excludePaths = [
|
|
172
|
+
`${resolve(globalConfig.dbPath)}${sep}`,
|
|
173
|
+
`${resolve(globalConfig.cacheDir)}${sep}`,
|
|
174
|
+
];
|
|
175
|
+
const ingested = await vectorStore.listFiles();
|
|
176
|
+
const listed = await listDocuments({
|
|
177
|
+
roots: rawBaseDirs,
|
|
178
|
+
dbPath: globalConfig.dbPath,
|
|
179
|
+
ingested,
|
|
180
|
+
scope: options.scope,
|
|
181
|
+
scan: (root, scope) => scanRoot(root, excludePaths, scope),
|
|
182
|
+
});
|
|
183
|
+
for (const warning of listed.warnings) {
|
|
184
|
+
console.error(`Warning [${warning.baseDir}]: ${warning.message}`);
|
|
185
|
+
}
|
|
186
|
+
const files = listed.files;
|
|
187
|
+
files.sort((a, b) => compareStrings(a.filePath, b.filePath));
|
|
188
|
+
const sources = listed.sources;
|
|
189
|
+
const result = {
|
|
190
|
+
baseDirs: [...rawBaseDirs],
|
|
191
|
+
baseDir,
|
|
192
|
+
files,
|
|
193
|
+
sources,
|
|
194
|
+
};
|
|
195
|
+
// Output JSON to stdout
|
|
196
|
+
process.stdout.write(JSON.stringify(result, null, 2));
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
const message = formatCliError(error);
|
|
200
|
+
console.error(`Failed to list files: ${message}`);
|
|
201
|
+
process.exitCode = 1;
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
await vectorStore.close();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/cli/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type QualityProfile } from '../utils/visual-profile.js';
|
|
2
|
+
/**
|
|
3
|
+
* Delegates to `checkSensitivePath`, so the CLI and MCP entry points share one
|
|
4
|
+
* policy. Returns an error message, or `undefined` when valid.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validatePath(value: string, flagName: string): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Validate model name against allowed pattern.
|
|
9
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateModelName(value: string): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Validate max file size is within acceptable range.
|
|
14
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateMaxFileSize(value: number): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Validate chunk minimum length is within acceptable range.
|
|
19
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateChunkMinLength(value: number): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Consume the value after a `--base-dir` and append it to `collected`, so the
|
|
24
|
+
* flag can repeat with its order preserved. Returns the value's index, or
|
|
25
|
+
* exits 1 when the value is missing.
|
|
26
|
+
*
|
|
27
|
+
* Shared because `ingest`, `list` and `sync` must stay in lockstep here.
|
|
28
|
+
*/
|
|
29
|
+
export declare function consumeBaseDirArg(argv: string[], flagIndex: number, collected: string[]): number;
|
|
30
|
+
/**
|
|
31
|
+
* Read the required value after a value-taking flag, exiting 1 when the next
|
|
32
|
+
* token is absent or is itself a flag. The caller advances by 2. Numeric flags
|
|
33
|
+
* validate the returned string themselves.
|
|
34
|
+
*/
|
|
35
|
+
export declare function requireFlagValue(argv: string[], flagIndex: number, flag: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Read the `--visual-quality` value, exiting 1 when it is missing or outside
|
|
38
|
+
* the profile vocabulary. Shared by `ingest` and `sync` so both subcommands
|
|
39
|
+
* accept and reject exactly the same values with the same message.
|
|
40
|
+
*/
|
|
41
|
+
export declare function requireVisualQuality(argv: string[], flagIndex: number): QualityProfile;
|
|
42
|
+
export interface GlobalOptions {
|
|
43
|
+
dbPath?: string | undefined;
|
|
44
|
+
cacheDir?: string | undefined;
|
|
45
|
+
modelName?: string | undefined;
|
|
46
|
+
}
|
|
47
|
+
export interface ParsedGlobalResult {
|
|
48
|
+
globalOptions: GlobalOptions;
|
|
49
|
+
remainingArgs: string[];
|
|
50
|
+
}
|
|
51
|
+
export interface ResolvedGlobalConfig {
|
|
52
|
+
dbPath: string;
|
|
53
|
+
cacheDir: string;
|
|
54
|
+
modelName: string;
|
|
55
|
+
}
|
|
56
|
+
export declare const GLOBAL_DEFAULTS: {
|
|
57
|
+
readonly dbPath: './lancedb/';
|
|
58
|
+
readonly cacheDir: './models/';
|
|
59
|
+
readonly modelName: 'Xenova/all-MiniLM-L6-v2';
|
|
60
|
+
};
|
|
61
|
+
export declare const ROOT_HELP_TEXT: string;
|
|
62
|
+
/**
|
|
63
|
+
* Extract global options, which are recognized only BEFORE the subcommand.
|
|
64
|
+
* Everything after it is forwarded as-is.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseGlobalOptions(args: string[]): ParsedGlobalResult;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve global config with priority: CLI flags > environment variables > defaults.
|
|
69
|
+
* Validates all resolved values before returning.
|
|
70
|
+
*/
|
|
71
|
+
export declare function resolveGlobalConfig(options: GlobalOptions): ResolvedGlobalConfig;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve RAG_DEVICE. The value is passed through to transformers.js — no
|
|
74
|
+
* allowlist is maintained here. Whitespace-only is treated as unset.
|
|
75
|
+
*/
|
|
76
|
+
export declare function resolveDevice(value: string | undefined): string;
|
|
77
|
+
/**
|
|
78
|
+
* Resolve RAG_DTYPE, passed through with no allowlist like RAG_DEVICE. Unset
|
|
79
|
+
* resolves to `undefined`, NOT a default: that is the only signal separating
|
|
80
|
+
* "unset" from an explicit `RAG_DTYPE=fp32`, and it gates the failure-path
|
|
81
|
+
* error enrichment. The fp32 default lives in `Embedder.initialize()` alone.
|
|
82
|
+
*/
|
|
83
|
+
export declare function resolveDtype(value: string | undefined): string | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Resolve RAG_EMBEDDING_SERVER_URL. Unset or whitespace-only resolves to
|
|
86
|
+
* `undefined`, which keeps the local Transformers.js pipeline selected.
|
|
87
|
+
*/
|
|
88
|
+
export declare function resolveEmbeddingServerUrl(value: string | undefined): string | undefined;
|
|
89
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAMlF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAMD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAShG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOxF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAStF;AAMD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAMD,eAAO,MAAM,eAAe;aAC1B,MAAM,EAAE,YAAY;aACpB,QAAQ,EAAE,WAAW;aACrB,SAAS,EAAE,yBAAyB;CAC5B,CAAA;AAMV,eAAO,MAAM,cAAc,QAgBiC,CAAA;AAM5D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAsDrE;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,oBAAoB,CA0BhF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAK1E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAKvF"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
// Shared CLI global options — parsed before subcommand routing
|
|
2
|
+
import { MAX_CHUNK_MIN_LENGTH, MAX_FILE_SIZE_LIMIT } from '../utils/limits.js';
|
|
3
|
+
import { checkSensitivePath } from '../utils/sensitive-path.js';
|
|
4
|
+
import { isQualityProfile } from '../utils/visual-profile.js';
|
|
5
|
+
// ============================================
|
|
6
|
+
// Validation Helpers
|
|
7
|
+
// ============================================
|
|
8
|
+
/**
|
|
9
|
+
* Delegates to `checkSensitivePath`, so the CLI and MCP entry points share one
|
|
10
|
+
* policy. Returns an error message, or `undefined` when valid.
|
|
11
|
+
*/
|
|
12
|
+
export function validatePath(value, flagName) {
|
|
13
|
+
return checkSensitivePath(value, flagName);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate model name against allowed pattern.
|
|
17
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
18
|
+
*/
|
|
19
|
+
export function validateModelName(value) {
|
|
20
|
+
const pattern = /^[a-zA-Z0-9_\-./]+$/;
|
|
21
|
+
if (!pattern.test(value)) {
|
|
22
|
+
return `Invalid model name: ${value}. Only alphanumeric, '_', '-', '.', '/' allowed.`;
|
|
23
|
+
}
|
|
24
|
+
if (value.includes('..')) {
|
|
25
|
+
return `Invalid model name: ${value}. Path traversal ('..') is not allowed.`;
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate max file size is within acceptable range.
|
|
31
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
32
|
+
*/
|
|
33
|
+
export function validateMaxFileSize(value) {
|
|
34
|
+
if (!Number.isFinite(value) || value < 1 || value > MAX_FILE_SIZE_LIMIT) {
|
|
35
|
+
return `--max-file-size must be between 1 and ${MAX_FILE_SIZE_LIMIT} (500MB)`;
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate chunk minimum length is within acceptable range.
|
|
41
|
+
* Returns an error message if invalid, or undefined if valid.
|
|
42
|
+
*/
|
|
43
|
+
export function validateChunkMinLength(value) {
|
|
44
|
+
if (!Number.isFinite(value) || value < 1 || value > MAX_CHUNK_MIN_LENGTH) {
|
|
45
|
+
return `--chunk-min-length must be between 1 and ${MAX_CHUNK_MIN_LENGTH}`;
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
// ============================================
|
|
50
|
+
// Repeatable --base-dir parsing
|
|
51
|
+
// ============================================
|
|
52
|
+
/**
|
|
53
|
+
* Consume the value after a `--base-dir` and append it to `collected`, so the
|
|
54
|
+
* flag can repeat with its order preserved. Returns the value's index, or
|
|
55
|
+
* exits 1 when the value is missing.
|
|
56
|
+
*
|
|
57
|
+
* Shared because `ingest`, `list` and `sync` must stay in lockstep here.
|
|
58
|
+
*/
|
|
59
|
+
export function consumeBaseDirArg(argv, flagIndex, collected) {
|
|
60
|
+
const valueIndex = flagIndex + 1;
|
|
61
|
+
const value = argv[valueIndex];
|
|
62
|
+
if (value === undefined || value.startsWith('-')) {
|
|
63
|
+
console.error('Missing value for --base-dir');
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
collected.push(value);
|
|
67
|
+
return valueIndex;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Read the required value after a value-taking flag, exiting 1 when the next
|
|
71
|
+
* token is absent or is itself a flag. The caller advances by 2. Numeric flags
|
|
72
|
+
* validate the returned string themselves.
|
|
73
|
+
*/
|
|
74
|
+
export function requireFlagValue(argv, flagIndex, flag) {
|
|
75
|
+
const value = argv[flagIndex + 1];
|
|
76
|
+
if (value === undefined || value.startsWith('-')) {
|
|
77
|
+
console.error(`Missing value for ${flag}`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read the `--visual-quality` value, exiting 1 when it is missing or outside
|
|
84
|
+
* the profile vocabulary. Shared by `ingest` and `sync` so both subcommands
|
|
85
|
+
* accept and reject exactly the same values with the same message.
|
|
86
|
+
*/
|
|
87
|
+
export function requireVisualQuality(argv, flagIndex) {
|
|
88
|
+
const value = requireFlagValue(argv, flagIndex, '--visual-quality');
|
|
89
|
+
if (!isQualityProfile(value)) {
|
|
90
|
+
console.error(`Invalid value for --visual-quality: "${value.slice(0, 100)}". Expected "fast" or "quality".`);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
return value;
|
|
94
|
+
}
|
|
95
|
+
// ============================================
|
|
96
|
+
// Defaults
|
|
97
|
+
// ============================================
|
|
98
|
+
export const GLOBAL_DEFAULTS = {
|
|
99
|
+
dbPath: './lancedb/',
|
|
100
|
+
cacheDir: './models/',
|
|
101
|
+
modelName: 'Xenova/all-MiniLM-L6-v2',
|
|
102
|
+
};
|
|
103
|
+
// ============================================
|
|
104
|
+
// Help
|
|
105
|
+
// ============================================
|
|
106
|
+
export const ROOT_HELP_TEXT = `Usage: mcp-local-rag [options] <command>
|
|
107
|
+
|
|
108
|
+
Options:
|
|
109
|
+
--db-path <path> LanceDB database path (default: ${GLOBAL_DEFAULTS.dbPath})
|
|
110
|
+
--cache-dir <path> Model cache directory (default: ${GLOBAL_DEFAULTS.cacheDir})
|
|
111
|
+
--model-name <name> Embedding model (default: ${GLOBAL_DEFAULTS.modelName})
|
|
112
|
+
-h, --help Show this help
|
|
113
|
+
|
|
114
|
+
Commands:
|
|
115
|
+
ingest <path> Ingest files into the vector database
|
|
116
|
+
sync [path] Incrementally synchronize indexed files with disk
|
|
117
|
+
query <text> Search ingested documents
|
|
118
|
+
read-neighbors Read N chunks before and after a target chunk within the same document
|
|
119
|
+
list List files and ingestion status
|
|
120
|
+
status Show database status
|
|
121
|
+
delete <path> Delete ingested content
|
|
122
|
+
skills install Install Claude Code / Codex skills`;
|
|
123
|
+
// ============================================
|
|
124
|
+
// Global Option Parsing
|
|
125
|
+
// ============================================
|
|
126
|
+
/**
|
|
127
|
+
* Extract global options, which are recognized only BEFORE the subcommand.
|
|
128
|
+
* Everything after it is forwarded as-is.
|
|
129
|
+
*/
|
|
130
|
+
export function parseGlobalOptions(args) {
|
|
131
|
+
const globalOptions = {};
|
|
132
|
+
let help = false;
|
|
133
|
+
let i = 0;
|
|
134
|
+
// Parse global flags until we hit a non-flag (subcommand) or end of args
|
|
135
|
+
while (i < args.length) {
|
|
136
|
+
const arg = args[i] ?? '';
|
|
137
|
+
switch (arg) {
|
|
138
|
+
case '-h':
|
|
139
|
+
case '--help':
|
|
140
|
+
help = true;
|
|
141
|
+
i++;
|
|
142
|
+
break;
|
|
143
|
+
case '--db-path': {
|
|
144
|
+
globalOptions.dbPath = requireFlagValue(args, i, '--db-path');
|
|
145
|
+
i += 2;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case '--cache-dir': {
|
|
149
|
+
globalOptions.cacheDir = requireFlagValue(args, i, '--cache-dir');
|
|
150
|
+
i += 2;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
case '--model-name': {
|
|
154
|
+
globalOptions.modelName = requireFlagValue(args, i, '--model-name');
|
|
155
|
+
i += 2;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
default:
|
|
159
|
+
// If arg starts with -, it's an unknown global flag
|
|
160
|
+
if (arg.startsWith('-')) {
|
|
161
|
+
console.error(`Unknown global option: ${arg}`);
|
|
162
|
+
console.error('Run "mcp-local-rag --help" for available options.');
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
// First non-global-flag token: treat as subcommand boundary.
|
|
166
|
+
// Everything from here onward is returned as remainingArgs.
|
|
167
|
+
if (help) {
|
|
168
|
+
// If --help was seen before subcommand, show root help
|
|
169
|
+
console.error(ROOT_HELP_TEXT);
|
|
170
|
+
process.exit(0);
|
|
171
|
+
}
|
|
172
|
+
return { globalOptions, remainingArgs: args.slice(i) };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// All args consumed (no subcommand found)
|
|
176
|
+
if (help) {
|
|
177
|
+
console.error(ROOT_HELP_TEXT);
|
|
178
|
+
process.exit(0);
|
|
179
|
+
}
|
|
180
|
+
return { globalOptions, remainingArgs: [] };
|
|
181
|
+
}
|
|
182
|
+
// ============================================
|
|
183
|
+
// Config Resolution
|
|
184
|
+
// ============================================
|
|
185
|
+
/**
|
|
186
|
+
* Resolve global config with priority: CLI flags > environment variables > defaults.
|
|
187
|
+
* Validates all resolved values before returning.
|
|
188
|
+
*/
|
|
189
|
+
export function resolveGlobalConfig(options) {
|
|
190
|
+
const dbPath = options.dbPath ?? process.env['DB_PATH'] ?? GLOBAL_DEFAULTS.dbPath;
|
|
191
|
+
const cacheDir = options.cacheDir ?? process.env['CACHE_DIR'] ?? GLOBAL_DEFAULTS.cacheDir;
|
|
192
|
+
const modelName = options.modelName ?? process.env['MODEL_NAME'] ?? GLOBAL_DEFAULTS.modelName;
|
|
193
|
+
// Validate paths
|
|
194
|
+
const dbPathError = validatePath(dbPath, '--db-path');
|
|
195
|
+
if (dbPathError) {
|
|
196
|
+
console.error(dbPathError);
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
const cacheDirError = validatePath(cacheDir, '--cache-dir');
|
|
200
|
+
if (cacheDirError) {
|
|
201
|
+
console.error(cacheDirError);
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
// Validate model name
|
|
205
|
+
const modelNameError = validateModelName(modelName);
|
|
206
|
+
if (modelNameError) {
|
|
207
|
+
console.error(modelNameError);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
return { dbPath, cacheDir, modelName };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Resolve RAG_DEVICE. The value is passed through to transformers.js — no
|
|
214
|
+
* allowlist is maintained here. Whitespace-only is treated as unset.
|
|
215
|
+
*/
|
|
216
|
+
export function resolveDevice(value) {
|
|
217
|
+
if (!value || value.trim() === '') {
|
|
218
|
+
return 'cpu';
|
|
219
|
+
}
|
|
220
|
+
return value.trim();
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Resolve RAG_DTYPE, passed through with no allowlist like RAG_DEVICE. Unset
|
|
224
|
+
* resolves to `undefined`, NOT a default: that is the only signal separating
|
|
225
|
+
* "unset" from an explicit `RAG_DTYPE=fp32`, and it gates the failure-path
|
|
226
|
+
* error enrichment. The fp32 default lives in `Embedder.initialize()` alone.
|
|
227
|
+
*/
|
|
228
|
+
export function resolveDtype(value) {
|
|
229
|
+
if (!value || value.trim() === '') {
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
return value.trim();
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Resolve RAG_EMBEDDING_SERVER_URL. Unset or whitespace-only resolves to
|
|
236
|
+
* `undefined`, which keeps the local Transformers.js pipeline selected.
|
|
237
|
+
*/
|
|
238
|
+
export function resolveEmbeddingServerUrl(value) {
|
|
239
|
+
if (!value || value.trim() === '') {
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
return value.trim().replace(/\/+$/, '');
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { GlobalOptions } from './options.js';
|
|
2
|
+
interface QueryCliOptions {
|
|
3
|
+
limit?: number | undefined;
|
|
4
|
+
scope?: string[] | undefined;
|
|
5
|
+
}
|
|
6
|
+
interface ParsedArgs {
|
|
7
|
+
queryText: string | undefined;
|
|
8
|
+
options: QueryCliOptions;
|
|
9
|
+
help: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function parseArgs(args: string[]): ParsedArgs;
|
|
12
|
+
/**
|
|
13
|
+
* Run the query CLI subcommand.
|
|
14
|
+
*/
|
|
15
|
+
export declare function runQuery(args: string[], globalOptions?: GlobalOptions): Promise<void>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/cli/query.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAOjD,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7B;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,eAAe,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;CACd;AA2ED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqCpD;AAuBD;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F/F"}
|