@vibgrate/cli 2026.813.1 → 2026.814.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.
- package/DOCS.md +258 -22
- package/NOTICE +7 -0
- package/README.md +273 -11
- package/dist/agent-5ANHRYEI.js +26 -0
- package/dist/{agent-N3CP3SPI.js.map → agent-5ANHRYEI.js.map} +1 -1
- package/dist/approvals-T2KXPJLV.js +9 -0
- package/dist/approvals-T2KXPJLV.js.map +1 -0
- package/dist/baseline-WVD6P5IO.js +9 -0
- package/dist/{baseline-ZMRZRGFI.js.map → baseline-WVD6P5IO.js.map} +1 -1
- package/dist/{checkpoint-4WFZMKEO.js → checkpoint-UYMYMMQO.js} +6 -3
- package/dist/checkpoint-UYMYMMQO.js.map +1 -0
- package/dist/chunk-2H2U3DC7.js +6 -0
- package/dist/{chunk-RT7P5AYU.js.map → chunk-2H2U3DC7.js.map} +1 -1
- package/dist/chunk-2U37PFB2.js +64 -0
- package/dist/chunk-2U37PFB2.js.map +1 -0
- package/dist/{chunk-GOPANQZT.js → chunk-54RGT2T5.js} +3 -3
- package/dist/{chunk-GOPANQZT.js.map → chunk-54RGT2T5.js.map} +1 -1
- package/dist/{chunk-OYHAF2J2.js → chunk-5GLQNMTI.js} +5 -5
- package/dist/{chunk-OYHAF2J2.js.map → chunk-5GLQNMTI.js.map} +1 -1
- package/dist/{chunk-EWZKOU66.js → chunk-75LJM5XD.js} +30 -66
- package/dist/chunk-75LJM5XD.js.map +1 -0
- package/dist/{chunk-KF2QT6RY.js → chunk-7NMXE6KG.js} +4 -4
- package/dist/{chunk-KF2QT6RY.js.map → chunk-7NMXE6KG.js.map} +1 -1
- package/dist/{chunk-UZP623Y4.js → chunk-7QDHQLUS.js} +4 -4
- package/dist/{chunk-UZP623Y4.js.map → chunk-7QDHQLUS.js.map} +1 -1
- package/dist/chunk-AJS4EL2C.js +266 -0
- package/dist/chunk-AJS4EL2C.js.map +1 -0
- package/dist/{chunk-Z3MUWXP3.js → chunk-BH54SLGZ.js} +4 -4
- package/dist/{chunk-Z3MUWXP3.js.map → chunk-BH54SLGZ.js.map} +1 -1
- package/dist/{chunk-CJNWHXQD.js → chunk-DSUGC7F5.js} +4 -4
- package/dist/{chunk-CJNWHXQD.js.map → chunk-DSUGC7F5.js.map} +1 -1
- package/dist/{chunk-FBVKQXBH.js → chunk-FOW5IF73.js} +3 -3
- package/dist/{chunk-FBVKQXBH.js.map → chunk-FOW5IF73.js.map} +1 -1
- package/dist/{chunk-6GQLEDVK.js → chunk-IHLLWBZU.js} +6 -5
- package/dist/chunk-IHLLWBZU.js.map +1 -0
- package/dist/{chunk-RHKJPTON.js → chunk-IHXNOY3R.js} +208 -56
- package/dist/chunk-IHXNOY3R.js.map +1 -0
- package/dist/{chunk-5JJBGBP2.js → chunk-JCN6MSXQ.js} +7 -7
- package/dist/{chunk-5JJBGBP2.js.map → chunk-JCN6MSXQ.js.map} +1 -1
- package/dist/{chunk-YJU7S7N6.js → chunk-KGPX4EUN.js} +4 -4
- package/dist/{chunk-YJU7S7N6.js.map → chunk-KGPX4EUN.js.map} +1 -1
- package/dist/{chunk-ADP6ITGF.js → chunk-N3XFY3PX.js} +68 -11
- package/dist/chunk-N3XFY3PX.js.map +1 -0
- package/dist/{chunk-JYM4QT6F.js → chunk-NKFXXP6W.js} +5 -5
- package/dist/{chunk-JYM4QT6F.js.map → chunk-NKFXXP6W.js.map} +1 -1
- package/dist/{chunk-5ROZODMW.js → chunk-TFAXW7VM.js} +2 -2
- package/dist/chunk-TFAXW7VM.js.map +1 -0
- package/dist/{chunk-6423BHLN.js → chunk-TNROG5CO.js} +19 -9
- package/dist/chunk-TNROG5CO.js.map +1 -0
- package/dist/chunk-TVDYEHIM.js +174 -0
- package/dist/chunk-TVDYEHIM.js.map +1 -0
- package/dist/{chunk-7ZHSSGUF.js → chunk-WQLZSVNF.js} +4 -3
- package/dist/chunk-WQLZSVNF.js.map +1 -0
- package/dist/{chunk-3WUTQYRY.js → chunk-WWGLVF7D.js} +9 -8
- package/dist/chunk-WWGLVF7D.js.map +1 -0
- package/dist/{chunk-KBP7GJV6.js → chunk-X76VPOYH.js} +19 -9
- package/dist/chunk-X76VPOYH.js.map +1 -0
- package/dist/{chunk-IJQOZ6ZD.js → chunk-YNV5M3JW.js} +8 -8
- package/dist/chunk-YNV5M3JW.js.map +1 -0
- package/dist/{chunk-Z3AYOZ3C.js → chunk-YQNTIBKS.js} +6 -6
- package/dist/{chunk-Z3AYOZ3C.js.map → chunk-YQNTIBKS.js.map} +1 -1
- package/dist/cli.js +1130 -489
- package/dist/cli.js.map +1 -1
- package/dist/embed-worker-main.js +4 -3
- package/dist/embed-worker-main.js.map +1 -1
- package/dist/{ensure-map-PHAJACFF.js → ensure-map-HQ7A5NDL.js} +15 -14
- package/dist/{ensure-map-PHAJACFF.js.map → ensure-map-HQ7A5NDL.js.map} +1 -1
- package/dist/fastembed-S6YEJYQV.js +292 -0
- package/dist/fastembed-S6YEJYQV.js.map +1 -0
- package/dist/graph-backend-W2TNTMY7.js +14 -0
- package/dist/{graph-backend-4B3MTVIW.js.map → graph-backend-W2TNTMY7.js.map} +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +14 -13
- package/dist/index.js.map +1 -1
- package/dist/{interactive-WUXMXFNM.js → interactive-EW2VJ3BZ.js} +32 -30
- package/dist/interactive-EW2VJ3BZ.js.map +1 -0
- package/dist/load-64RK5O6C.js +10 -0
- package/dist/{load-EUZSV73H.js.map → load-64RK5O6C.js.map} +1 -1
- package/dist/{run-outcome-O5PR7ZCK.js → run-outcome-6QNQIHPV.js} +6 -5
- package/dist/run-outcome-6QNQIHPV.js.map +1 -0
- package/dist/runtime-session-RJHH3KMF.js +21 -0
- package/dist/{runtime-session-PPQDTFIK.js.map → runtime-session-RJHH3KMF.js.map} +1 -1
- package/dist/session-4BGYASOH.js +16 -0
- package/dist/{session-WS7SOVJE.js.map → session-4BGYASOH.js.map} +1 -1
- package/dist/session-store-AQUORKWB.js +4 -0
- package/dist/{session-store-KGONLWHN.js.map → session-store-AQUORKWB.js.map} +1 -1
- package/dist/{stream-json-7MK3QQYG.js → stream-json-GY5N7WZT.js} +76 -24
- package/dist/stream-json-GY5N7WZT.js.map +1 -0
- package/dist/version-DPAMQW6M.js +4 -0
- package/dist/version-DPAMQW6M.js.map +1 -0
- package/dist/{vg-mcp-bridge-DQLCHBI6.js → vg-mcp-bridge-IGHJKKSL.js} +11 -10
- package/dist/vg-mcp-bridge-IGHJKKSL.js.map +1 -0
- package/dist/{vgd-Y25XSQGZ.js → vgd-ORPA5C2K.js} +12 -11
- package/dist/vgd-ORPA5C2K.js.map +1 -0
- package/dist/worktree-session-D575IQWM.js +82 -0
- package/dist/worktree-session-D575IQWM.js.map +1 -0
- package/package.json +4 -2
- package/dist/agent-N3CP3SPI.js +0 -24
- package/dist/baseline-ZMRZRGFI.js +0 -9
- package/dist/checkpoint-4WFZMKEO.js.map +0 -1
- package/dist/chunk-3WUTQYRY.js.map +0 -1
- package/dist/chunk-5ROZODMW.js.map +0 -1
- package/dist/chunk-6423BHLN.js.map +0 -1
- package/dist/chunk-6GQLEDVK.js.map +0 -1
- package/dist/chunk-7ZHSSGUF.js.map +0 -1
- package/dist/chunk-ADP6ITGF.js.map +0 -1
- package/dist/chunk-EWZKOU66.js.map +0 -1
- package/dist/chunk-IJQOZ6ZD.js.map +0 -1
- package/dist/chunk-KBP7GJV6.js.map +0 -1
- package/dist/chunk-RHKJPTON.js.map +0 -1
- package/dist/chunk-RT7P5AYU.js +0 -6
- package/dist/chunk-Z7FM3ETS.js +0 -126
- package/dist/chunk-Z7FM3ETS.js.map +0 -1
- package/dist/graph-backend-4B3MTVIW.js +0 -13
- package/dist/interactive-WUXMXFNM.js.map +0 -1
- package/dist/load-EUZSV73H.js +0 -9
- package/dist/run-outcome-O5PR7ZCK.js.map +0 -1
- package/dist/runtime-session-PPQDTFIK.js +0 -20
- package/dist/session-WS7SOVJE.js +0 -15
- package/dist/session-store-KGONLWHN.js +0 -4
- package/dist/stream-json-7MK3QQYG.js.map +0 -1
- package/dist/vg-mcp-bridge-DQLCHBI6.js.map +0 -1
- package/dist/vgd-Y25XSQGZ.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { resolveEmbedModel, loadEmbedder } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
import { resolveEmbedModel, loadEmbedder } from './chunk-X76VPOYH.js';
|
|
2
|
+
import './chunk-2U37PFB2.js';
|
|
3
|
+
import './chunk-75LJM5XD.js';
|
|
4
|
+
import './chunk-2H2U3DC7.js';
|
|
4
5
|
import './chunk-BWPBB45M.js';
|
|
5
6
|
import './chunk-JFGYT6BI.js';
|
|
6
7
|
import './chunk-BPF3YX2U.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/vgd/embed-worker.ts","../src/runtime/vgd/embed-worker-main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/runtime/vgd/embed-worker.ts","../src/runtime/vgd/embed-worker-main.ts"],"names":[],"mappings":"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","file":"embed-worker-main.js","sourcesContent":["/**\n * The vgd embedding worker — the ONLY process that loads the native embedding\n * backend.\n *\n * `fastembed`/`onnxruntime-node` can abort its host process outright (a\n * blocked postinstall SIGTRAPs on first inference; see\n * `engine/embed-health.ts`), and no try/catch survives a signal. Keeping the\n * addon here means the worst case is a dead worker that vgd restarts or gives\n * up on, instead of a dead daemon — or, as it was before any of this, a dead\n * language server mid-request.\n *\n * Protocol: newline-delimited JSON on stdin/stdout, one response per request,\n * correlated by `id`. Deliberately tiny and dependency-free so the process\n * starts fast: the expensive part is the model load, which happens once on the\n * first request and is then reused for the life of the worker.\n *\n * stdout carries protocol frames ONLY. Anything diagnostic goes to stderr, so\n * a chatty dependency writing to stdout cannot corrupt the stream.\n */\nimport * as readline from 'node:readline';\nimport { loadEmbedder, resolveEmbedModel, type Embedder } from '../../engine/embeddings.js';\n\nexport interface EmbedWorkerRequest {\n id: number;\n op: 'ping' | 'embed' | 'model';\n /** Texts to embed (`embed`). */\n texts?: string[];\n /** Treat the single text as a query rather than a document. */\n query?: boolean;\n}\n\nexport type EmbedWorkerResponse =\n | { id: number; ok: true; op: 'ping'; model: string }\n | { id: number; ok: true; op: 'model'; model: string; loaded: boolean }\n | { id: number; ok: true; op: 'embed'; vectors: number[][] }\n | { id: number; ok: false; error: string };\n\nlet embedder: Embedder | null = null;\nlet loadFailed = false;\n\n/**\n * Load once, reuse forever. A failure is remembered so a broken environment\n * does not re-attempt (and re-log) on every request; the broker sees the error\n * and falls back to lexical.\n */\nasync function ensureEmbedder(): Promise<Embedder | null> {\n if (embedder) return embedder;\n if (loadFailed) return null;\n const loaded = await loadEmbedder({});\n if (!loaded) {\n loadFailed = true;\n return null;\n }\n embedder = loaded;\n return embedder;\n}\n\nexport async function handleWorkerRequest(req: EmbedWorkerRequest): Promise<EmbedWorkerResponse> {\n switch (req.op) {\n case 'ping':\n return { id: req.id, ok: true, op: 'ping', model: resolveEmbedModel() };\n case 'model': {\n const e = await ensureEmbedder();\n return { id: req.id, ok: true, op: 'model', model: e?.id ?? resolveEmbedModel(), loaded: !!e };\n }\n case 'embed': {\n const texts = Array.isArray(req.texts) ? req.texts : [];\n if (!texts.length) return { id: req.id, ok: true, op: 'embed', vectors: [] };\n const e = await ensureEmbedder();\n if (!e) return { id: req.id, ok: false, error: 'embedding backend unavailable' };\n // A single query goes through embedQuery: some models prepend a\n // different instruction prefix for queries than for documents, and\n // silently using the document path would degrade ranking.\n const vectors =\n req.query && texts.length === 1 ? [await e.embedQuery(texts[0]!)] : await e.embed(texts);\n return { id: req.id, ok: true, op: 'embed', vectors };\n }\n default:\n return { id: req.id, ok: false, error: `unknown op \"${String((req as { op?: unknown }).op)}\"` };\n }\n}\n\n/** Wire stdin/stdout up to {@link handleWorkerRequest}. Exported for tests. */\nexport function runEmbedWorker(): void {\n const rl = readline.createInterface({ input: process.stdin });\n const write = (res: EmbedWorkerResponse): void => {\n process.stdout.write(JSON.stringify(res) + '\\n');\n };\n rl.on('line', (line: string) => {\n const text = line.trim();\n if (!text) return;\n let req: EmbedWorkerRequest;\n try {\n req = JSON.parse(text) as EmbedWorkerRequest;\n } catch {\n return; // an unparseable frame has no id to answer on\n }\n // Requests are handled concurrently on purpose: a slow corpus embed must\n // not block a single interactive query behind it.\n void handleWorkerRequest(req)\n .then(write)\n .catch((err: unknown) =>\n write({ id: req.id, ok: false, error: err instanceof Error ? err.message : String(err) }),\n );\n });\n rl.on('close', () => process.exit(0));\n}\n","/**\n * Entry point for the vgd embedding worker child process.\n *\n * Kept separate from `embed-worker.ts` so that module can be imported by tests\n * without starting a readline loop on stdin.\n */\nimport { runEmbedWorker } from './embed-worker.js';\n\nrunEmbedWorker();\n"]}
|
|
@@ -1,29 +1,30 @@
|
|
|
1
|
-
export { ensureCodeMap } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { ensureCodeMap } from './chunk-BH54SLGZ.js';
|
|
2
|
+
import './chunk-JCN6MSXQ.js';
|
|
3
3
|
import './chunk-CT5BS56U.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-N6ZMZ5AI.js';
|
|
4
|
+
import './chunk-TNROG5CO.js';
|
|
5
|
+
import './chunk-WWGLVF7D.js';
|
|
7
6
|
import './chunk-HTLDXEHW.js';
|
|
7
|
+
import './chunk-N6ZMZ5AI.js';
|
|
8
8
|
import './chunk-VIWZ4QT7.js';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-7QDHQLUS.js';
|
|
10
|
+
import './chunk-J7LKEB2R.js';
|
|
11
|
+
import './chunk-KGPX4EUN.js';
|
|
10
12
|
import './chunk-CQDUBAQY.js';
|
|
11
13
|
import './chunk-OV4KGXPD.js';
|
|
14
|
+
import './chunk-WQLZSVNF.js';
|
|
12
15
|
import './chunk-5I4VSBWQ.js';
|
|
13
16
|
import './chunk-DT4KIVRI.js';
|
|
14
17
|
import './chunk-CRAMOEBE.js';
|
|
15
18
|
import './chunk-3LSG7Z4I.js';
|
|
16
|
-
import './chunk-J7LKEB2R.js';
|
|
17
|
-
import './chunk-YJU7S7N6.js';
|
|
18
19
|
import './chunk-UTNNGKKX.js';
|
|
19
20
|
import './chunk-RXP66R2E.js';
|
|
20
|
-
import './chunk-
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
21
|
+
import './chunk-X76VPOYH.js';
|
|
22
|
+
import './chunk-2U37PFB2.js';
|
|
23
|
+
import './chunk-75LJM5XD.js';
|
|
24
|
+
import './chunk-2H2U3DC7.js';
|
|
24
25
|
import './chunk-BWPBB45M.js';
|
|
25
26
|
import './chunk-JFGYT6BI.js';
|
|
26
27
|
import './chunk-BPF3YX2U.js';
|
|
27
28
|
import './chunk-Z6ZWNWWR.js';
|
|
28
|
-
//# sourceMappingURL=ensure-map-
|
|
29
|
-
//# sourceMappingURL=ensure-map-
|
|
29
|
+
//# sourceMappingURL=ensure-map-HQ7A5NDL.js.map
|
|
30
|
+
//# sourceMappingURL=ensure-map-HQ7A5NDL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ensure-map-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ensure-map-HQ7A5NDL.js"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import './chunk-Z6ZWNWWR.js';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as https from 'https';
|
|
4
|
+
import { createRequire } from 'module';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { pathToFileURL } from 'url';
|
|
7
|
+
|
|
8
|
+
var nativeDeps = null;
|
|
9
|
+
function unwrapCjs(mod, key) {
|
|
10
|
+
for (const candidate of [mod, mod?.default, mod?.default?.default]) {
|
|
11
|
+
if (candidate?.[key] !== void 0) return candidate;
|
|
12
|
+
}
|
|
13
|
+
return mod;
|
|
14
|
+
}
|
|
15
|
+
async function importNative(spec) {
|
|
16
|
+
const hostDir = process.env.VIBGRATE_EMBEDDER_PATH;
|
|
17
|
+
let hostError;
|
|
18
|
+
if (hostDir) {
|
|
19
|
+
try {
|
|
20
|
+
const req = createRequire(path.join(hostDir, "package.json"));
|
|
21
|
+
return await import(pathToFileURL(req.resolve(spec)).href);
|
|
22
|
+
} catch (e) {
|
|
23
|
+
hostError = e instanceof Error ? e.message : String(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
return await import(spec);
|
|
28
|
+
} catch (e) {
|
|
29
|
+
const own = e instanceof Error ? e.message : String(e);
|
|
30
|
+
throw new Error(hostError ? `${own} (host ${hostDir}: ${hostError})` : own);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function ensureNativeDeps() {
|
|
34
|
+
if (nativeDeps) return nativeDeps;
|
|
35
|
+
const [ortMod, tokMod, tarMod] = await Promise.all([
|
|
36
|
+
importNative("onnxruntime-node"),
|
|
37
|
+
importNative("@anush008/tokenizers"),
|
|
38
|
+
importNative("tar")
|
|
39
|
+
]);
|
|
40
|
+
nativeDeps = {
|
|
41
|
+
ort: unwrapCjs(ortMod, "InferenceSession"),
|
|
42
|
+
tokenizers: unwrapCjs(tokMod, "Tokenizer"),
|
|
43
|
+
tar: unwrapCjs(tarMod, "x")
|
|
44
|
+
};
|
|
45
|
+
return nativeDeps;
|
|
46
|
+
}
|
|
47
|
+
function native() {
|
|
48
|
+
if (!nativeDeps) throw new Error("embedding backend used before ensureNativeDeps()");
|
|
49
|
+
return nativeDeps;
|
|
50
|
+
}
|
|
51
|
+
var ExecutionProvider = /* @__PURE__ */ ((ExecutionProvider2) => {
|
|
52
|
+
ExecutionProvider2["CPU"] = "cpu";
|
|
53
|
+
ExecutionProvider2["CUDA"] = "cuda";
|
|
54
|
+
ExecutionProvider2["WebGL"] = "webgl";
|
|
55
|
+
ExecutionProvider2["WASM"] = "wasm";
|
|
56
|
+
ExecutionProvider2["XNNPACK"] = "xnnpack";
|
|
57
|
+
return ExecutionProvider2;
|
|
58
|
+
})(ExecutionProvider || {});
|
|
59
|
+
var EmbeddingModel = /* @__PURE__ */ ((EmbeddingModel2) => {
|
|
60
|
+
EmbeddingModel2["AllMiniLML6V2"] = "fast-all-MiniLM-L6-v2";
|
|
61
|
+
EmbeddingModel2["BGEBaseEN"] = "fast-bge-base-en";
|
|
62
|
+
EmbeddingModel2["BGEBaseENV15"] = "fast-bge-base-en-v1.5";
|
|
63
|
+
EmbeddingModel2["BGESmallEN"] = "fast-bge-small-en";
|
|
64
|
+
EmbeddingModel2["BGESmallENV15"] = "fast-bge-small-en-v1.5";
|
|
65
|
+
EmbeddingModel2["BGESmallZH"] = "fast-bge-small-zh-v1.5";
|
|
66
|
+
EmbeddingModel2["MLE5Large"] = "fast-multilingual-e5-large";
|
|
67
|
+
EmbeddingModel2["CUSTOM"] = "custom";
|
|
68
|
+
return EmbeddingModel2;
|
|
69
|
+
})(EmbeddingModel || {});
|
|
70
|
+
function normalize(v) {
|
|
71
|
+
const norm = Math.sqrt(v.reduce((acc, val) => acc + val * val, 0));
|
|
72
|
+
const epsilon = 1e-12;
|
|
73
|
+
return v.map((val) => val / Math.max(norm, epsilon));
|
|
74
|
+
}
|
|
75
|
+
function getEmbeddings(data, dimensions) {
|
|
76
|
+
const [x, y, z] = dimensions;
|
|
77
|
+
const flat = Array.prototype.slice;
|
|
78
|
+
return new Array(x).fill(void 0).map((_, index) => {
|
|
79
|
+
const startIndex = index * y * z;
|
|
80
|
+
return flat.call(data, startIndex, startIndex + z);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function renderProgress(model, received, total) {
|
|
84
|
+
const pct = total > 0 ? Math.min(100, Math.floor(received / total * 100)) : 0;
|
|
85
|
+
const width = 20;
|
|
86
|
+
const filled = Math.floor(pct / 100 * width);
|
|
87
|
+
const bar = "=".repeat(filled) + " ".repeat(width - filled);
|
|
88
|
+
process.stderr.write(`\rDownloading ${model} [${bar}] ${pct}%`);
|
|
89
|
+
if (total > 0 && received >= total) process.stderr.write("\n");
|
|
90
|
+
}
|
|
91
|
+
var FlagEmbedding = class _FlagEmbedding {
|
|
92
|
+
constructor(tokenizer, session, model) {
|
|
93
|
+
this.tokenizer = tokenizer;
|
|
94
|
+
this.session = session;
|
|
95
|
+
this.model = model;
|
|
96
|
+
}
|
|
97
|
+
tokenizer;
|
|
98
|
+
session;
|
|
99
|
+
model;
|
|
100
|
+
static async init({
|
|
101
|
+
model = "fast-bge-small-en-v1.5" /* BGESmallENV15 */,
|
|
102
|
+
executionProviders = ["cpu" /* CPU */],
|
|
103
|
+
maxLength = 512,
|
|
104
|
+
cacheDir = "local_cache",
|
|
105
|
+
showDownloadProgress = true,
|
|
106
|
+
modelAbsoluteDirPath = "",
|
|
107
|
+
modelName = ""
|
|
108
|
+
} = {}) {
|
|
109
|
+
await ensureNativeDeps();
|
|
110
|
+
if (model === "custom" /* CUSTOM */) {
|
|
111
|
+
if (!modelAbsoluteDirPath) {
|
|
112
|
+
throw new Error("For custom model, modelAbsoluteDirPath is required in FlagEmbedding.init");
|
|
113
|
+
}
|
|
114
|
+
if (!modelName) {
|
|
115
|
+
throw new Error("For custom model, modelName is required in FlagEmbedding.init");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const modelDir = model === "custom" /* CUSTOM */ ? modelAbsoluteDirPath : await _FlagEmbedding.retrieveModel(model, cacheDir, showDownloadProgress);
|
|
119
|
+
const tokenizer = this.loadTokenizer(modelDir, maxLength);
|
|
120
|
+
const defaultModelName = model === "fast-multilingual-e5-large" /* MLE5Large */ || model === "fast-all-MiniLM-L6-v2" /* AllMiniLML6V2 */ ? "model.onnx" : "model_optimized.onnx";
|
|
121
|
+
const modelPath = path.join(modelDir, modelName || defaultModelName);
|
|
122
|
+
if (!fs.existsSync(modelPath)) {
|
|
123
|
+
throw new Error(`Model file not found at ${modelPath}`);
|
|
124
|
+
}
|
|
125
|
+
const session = await native().ort.InferenceSession.create(modelPath, {
|
|
126
|
+
executionProviders,
|
|
127
|
+
graphOptimizationLevel: "all"
|
|
128
|
+
});
|
|
129
|
+
return new _FlagEmbedding(tokenizer, session, model);
|
|
130
|
+
}
|
|
131
|
+
static loadTokenizer(modelDir, maxLength) {
|
|
132
|
+
const tokenizerPath = path.join(modelDir, "tokenizer.json");
|
|
133
|
+
if (!fs.existsSync(tokenizerPath)) {
|
|
134
|
+
throw new Error(`Tokenizer file not found at ${tokenizerPath}`);
|
|
135
|
+
}
|
|
136
|
+
const configPath = path.join(modelDir, "config.json");
|
|
137
|
+
if (!fs.existsSync(configPath)) {
|
|
138
|
+
throw new Error(`Config file not found at ${configPath}`);
|
|
139
|
+
}
|
|
140
|
+
const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
141
|
+
const tokenizerConfigPath = path.join(modelDir, "tokenizer_config.json");
|
|
142
|
+
if (!fs.existsSync(tokenizerConfigPath)) {
|
|
143
|
+
throw new Error(`Tokenizer file not found at ${tokenizerConfigPath}`);
|
|
144
|
+
}
|
|
145
|
+
const tokenizerConfig = JSON.parse(fs.readFileSync(tokenizerConfigPath, "utf-8"));
|
|
146
|
+
maxLength = Math.min(maxLength, Number(tokenizerConfig["model_max_length"]));
|
|
147
|
+
const tokensMapPath = path.join(modelDir, "special_tokens_map.json");
|
|
148
|
+
if (!fs.existsSync(tokensMapPath)) {
|
|
149
|
+
throw new Error(`Tokens map file not found at ${tokensMapPath}`);
|
|
150
|
+
}
|
|
151
|
+
const tokensMap = JSON.parse(fs.readFileSync(tokensMapPath, "utf-8"));
|
|
152
|
+
const { Tokenizer, AddedToken } = native().tokenizers;
|
|
153
|
+
const tokenizer = Tokenizer.fromFile(tokenizerPath);
|
|
154
|
+
tokenizer.setTruncation(maxLength);
|
|
155
|
+
tokenizer.setPadding({
|
|
156
|
+
maxLength,
|
|
157
|
+
padId: config["pad_token_id"],
|
|
158
|
+
padToken: tokenizerConfig["pad_token"]
|
|
159
|
+
});
|
|
160
|
+
for (const token of Object.values(tokensMap)) {
|
|
161
|
+
if (typeof token === "string") {
|
|
162
|
+
tokenizer.addSpecialTokens([token]);
|
|
163
|
+
} else if (isAddedTokenMap(token)) {
|
|
164
|
+
const addedToken = new AddedToken(token.content, true, {
|
|
165
|
+
singleWord: token.single_word,
|
|
166
|
+
leftStrip: token.lstrip,
|
|
167
|
+
rightStrip: token.rstrip,
|
|
168
|
+
normalized: token.normalized
|
|
169
|
+
});
|
|
170
|
+
tokenizer.addAddedTokens([addedToken]);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return tokenizer;
|
|
174
|
+
}
|
|
175
|
+
static async downloadFileFromGCS(outputFilePath, model, showDownloadProgress = true) {
|
|
176
|
+
if (fs.existsSync(outputFilePath)) {
|
|
177
|
+
return outputFilePath;
|
|
178
|
+
}
|
|
179
|
+
if (model === "fast-all-MiniLM-L6-v2" /* AllMiniLML6V2 */) {
|
|
180
|
+
model = "sentence-transformers" + model.substring(model.indexOf("-"));
|
|
181
|
+
}
|
|
182
|
+
const url = `https://storage.googleapis.com/qdrant-fastembed/${model}.tar.gz`;
|
|
183
|
+
const fileStream = fs.createWriteStream(outputFilePath);
|
|
184
|
+
return new Promise((resolve, reject) => {
|
|
185
|
+
https.get(url, { headers: { "User-Agent": "Mozilla/5.0" } }, (response) => {
|
|
186
|
+
const totalSizeInBytes = parseInt(response.headers["content-length"] || "0", 10);
|
|
187
|
+
if (totalSizeInBytes === 0) {
|
|
188
|
+
console.warn(`Warning: Content-length header is missing or zero in the response from ${url}.`);
|
|
189
|
+
}
|
|
190
|
+
if (showDownloadProgress) {
|
|
191
|
+
let received = 0;
|
|
192
|
+
response.on("data", (chunk) => {
|
|
193
|
+
received += chunk.length;
|
|
194
|
+
renderProgress(model, received, totalSizeInBytes);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
response.on("error", reject);
|
|
198
|
+
response.pipe(fileStream);
|
|
199
|
+
fileStream.on("finish", () => {
|
|
200
|
+
fileStream.close();
|
|
201
|
+
resolve(outputFilePath);
|
|
202
|
+
});
|
|
203
|
+
fileStream.on("error", reject);
|
|
204
|
+
}).on("error", (error) => {
|
|
205
|
+
fs.unlink(outputFilePath, () => {
|
|
206
|
+
reject(error);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
static async decompressToCache(targzPath, cacheDir) {
|
|
212
|
+
if (path.extname(targzPath) === ".gz") {
|
|
213
|
+
await native().tar.x({ file: targzPath, cwd: cacheDir });
|
|
214
|
+
} else {
|
|
215
|
+
throw new Error(`Unsupported file extension: ${targzPath}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
static async retrieveModel(model, cacheDir, showDownloadProgress = true) {
|
|
219
|
+
if (!fs.existsSync(cacheDir)) {
|
|
220
|
+
fs.mkdirSync(cacheDir, { mode: 511 });
|
|
221
|
+
}
|
|
222
|
+
const modelDir = path.join(cacheDir, model);
|
|
223
|
+
if (fs.existsSync(modelDir)) {
|
|
224
|
+
return modelDir;
|
|
225
|
+
}
|
|
226
|
+
const modelTarGz = path.join(cacheDir, `${model}.tar.gz`);
|
|
227
|
+
await this.downloadFileFromGCS(modelTarGz, model, showDownloadProgress);
|
|
228
|
+
await this.decompressToCache(modelTarGz, cacheDir);
|
|
229
|
+
fs.unlinkSync(modelTarGz);
|
|
230
|
+
return modelDir;
|
|
231
|
+
}
|
|
232
|
+
async *embed(textStrings, batchSize = 256) {
|
|
233
|
+
for (let i = 0; i < textStrings.length; i += batchSize) {
|
|
234
|
+
const batchTexts = textStrings.slice(i, i + batchSize);
|
|
235
|
+
const encodedTexts = await Promise.all(batchTexts.map((textString) => this.tokenizer.encode(textString)));
|
|
236
|
+
const idsArray = [];
|
|
237
|
+
const maskArray = [];
|
|
238
|
+
const typeIdsArray = [];
|
|
239
|
+
for (const text of encodedTexts) {
|
|
240
|
+
idsArray.push(text.getIds().map(BigInt));
|
|
241
|
+
maskArray.push(text.getAttentionMask().map(BigInt));
|
|
242
|
+
typeIdsArray.push(text.getTypeIds().map(BigInt));
|
|
243
|
+
}
|
|
244
|
+
const maxLength = idsArray[0].length;
|
|
245
|
+
const dims = [batchTexts.length, maxLength];
|
|
246
|
+
const ort = native().ort;
|
|
247
|
+
const inputs = {
|
|
248
|
+
input_ids: new ort.Tensor("int64", BigInt64Array.from(idsArray.flat()), dims),
|
|
249
|
+
attention_mask: new ort.Tensor("int64", BigInt64Array.from(maskArray.flat()), dims),
|
|
250
|
+
token_type_ids: new ort.Tensor("int64", BigInt64Array.from(typeIdsArray.flat()), dims)
|
|
251
|
+
};
|
|
252
|
+
if (this.model === "fast-multilingual-e5-large" /* MLE5Large */) {
|
|
253
|
+
delete inputs.token_type_ids;
|
|
254
|
+
}
|
|
255
|
+
const output = await this.session.run(inputs);
|
|
256
|
+
const hidden = output.last_hidden_state;
|
|
257
|
+
const embeddings = getEmbeddings(hidden.data, hidden.dims);
|
|
258
|
+
yield embeddings.map(normalize);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
passageEmbed(texts, batchSize = 256) {
|
|
262
|
+
return this.embed(
|
|
263
|
+
texts.map((text) => `passage: ${text}`),
|
|
264
|
+
batchSize
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
async queryEmbed(query) {
|
|
268
|
+
return (await this.embed([`query: ${query}`]).next()).value[0];
|
|
269
|
+
}
|
|
270
|
+
listSupportedModels() {
|
|
271
|
+
return [
|
|
272
|
+
{ model: "fast-bge-small-en" /* BGESmallEN */, dim: 384, description: "Fast English model" },
|
|
273
|
+
{ model: "fast-bge-small-en-v1.5" /* BGESmallENV15 */, dim: 384, description: "v1.5 release of the fast, default English model" },
|
|
274
|
+
{ model: "fast-bge-base-en" /* BGEBaseEN */, dim: 768, description: "Base English model" },
|
|
275
|
+
{ model: "fast-bge-base-en-v1.5" /* BGEBaseENV15 */, dim: 768, description: "v1.5 release of Base English model" },
|
|
276
|
+
{ model: "fast-bge-small-zh-v1.5" /* BGESmallZH */, dim: 512, description: "v1.5 release of the fast, Chinese model" },
|
|
277
|
+
{ model: "fast-all-MiniLM-L6-v2" /* AllMiniLML6V2 */, dim: 384, description: "Sentence Transformer model, MiniLM-L6-v2" },
|
|
278
|
+
{
|
|
279
|
+
model: "fast-multilingual-e5-large" /* MLE5Large */,
|
|
280
|
+
dim: 1024,
|
|
281
|
+
description: "Multilingual model, e5-large. Recommend using this model for non-English languages"
|
|
282
|
+
}
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
function isAddedTokenMap(token) {
|
|
287
|
+
return typeof token === "object" && token !== null && "token" in token && "single_word" in token && "rstrip" in token && "lstrip" in token && "normalized" in token;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export { EmbeddingModel, ExecutionProvider, FlagEmbedding, ensureNativeDeps };
|
|
291
|
+
//# sourceMappingURL=fastembed-S6YEJYQV.js.map
|
|
292
|
+
//# sourceMappingURL=fastembed-S6YEJYQV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vendor/fastembed/index.ts"],"names":["ExecutionProvider","EmbeddingModel"],"mappings":"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","file":"fastembed-S6YEJYQV.js","sourcesContent":["/**\n * Vendored dense-embedding backend, adapted from fastembed-js v2.1.0\n * (https://github.com/Anush008/fastembed-js, MIT © Anush008) — see NOTICE.\n *\n * Why vendored instead of depended on: upstream `fastembed` pins\n * `onnxruntime-node@1.21.0` (whose `global-agent@3` chain drags in the\n * deprecated `boolean` package) and `tar@^6.2.0` (deprecated, and subject to\n * GHSA-23hp-3jrh-7fpw, fixed in tar 7.5.19). Those resolutions are baked into\n * every end-user install of `@vibgrate/cli` — package-manager overrides don't\n * propagate to consumers — so `npm install -g @vibgrate/cli` printed\n * `npm warn deprecated` on every install/update. Vendoring the one file the\n * CLI actually uses lets us declare `onnxruntime-node@^1.27` (global-agent@4,\n * no deprecated deps) and `tar@^7.5.19` directly.\n *\n * Deliberate divergences from upstream, beyond the dependency bumps:\n * - Only the dense `FlagEmbedding` path is kept. The sparse SPLADE path\n * (`SparseTextEmbedding`) is unused by the CLI and is dropped, which also\n * drops upstream's `@huggingface/hub` dependency.\n * - Upstream's `progress` dependency is replaced by a ~10-line stderr\n * progress line (only shown when `showDownloadProgress` is set).\n * - `import * as tar` (tar 7 has no default export) — the same adaptation the\n * monorepo previously carried as a pnpm patch.\n *\n * Loaded lazily via dynamic import (see engine/embeddings.ts): the modules it\n * needs (`onnxruntime-node`, `@anush008/tokenizers`, `tar`) are OPTIONAL\n * dependencies, so this module must never be imported statically from any\n * always-loaded path — and it must not import them statically either. They are\n * loaded on demand by `ensureNativeDeps()`, which prefers a host-supplied\n * install (`VIBGRATE_EMBEDDER_PATH` — the VS Code extension installs the\n * native deps into its own storage on consent, since the bundled engine ships\n * without them) over this package's own dependency tree.\n */\nimport * as fs from 'node:fs';\nimport * as https from 'node:https';\nimport { createRequire } from 'node:module';\nimport * as path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { Tokenizer } from '@anush008/tokenizers';\nimport type { InferenceSession, Tensor } from 'onnxruntime-node';\n\n/** The lazily-loaded optional modules the dense backend runs on. */\nexport interface NativeDeps {\n ort: typeof import('onnxruntime-node');\n tokenizers: typeof import('@anush008/tokenizers');\n tar: typeof import('tar');\n}\n\nlet nativeDeps: NativeDeps | null = null;\n\n/** A CJS module imported over ESM may nest its exports a `default` deep. */\nfunction unwrapCjs(mod: any, key: string): any {\n for (const candidate of [mod, mod?.default, mod?.default?.default]) {\n if (candidate?.[key] !== undefined) return candidate;\n }\n return mod;\n}\n\n/**\n * Import one optional module, preferring the host dir a consenting editor\n * integration installed it into (`VIBGRATE_EMBEDDER_PATH`) over this package's\n * own tree — the copy the user consented to is the one that loads. On failure\n * the error names every path tried, so \"not installed\" stays actionable.\n */\nasync function importNative(spec: string): Promise<any> {\n const hostDir = process.env.VIBGRATE_EMBEDDER_PATH;\n let hostError: string | undefined;\n if (hostDir) {\n try {\n const req = createRequire(path.join(hostDir, 'package.json'));\n return await import(pathToFileURL(req.resolve(spec)).href);\n } catch (e) {\n hostError = e instanceof Error ? e.message : String(e);\n }\n }\n try {\n return await import(spec);\n } catch (e) {\n const own = e instanceof Error ? e.message : String(e);\n throw new Error(hostError ? `${own} (host ${hostDir}: ${hostError})` : own);\n }\n}\n\n/**\n * Load (once) the optional native modules the backend needs. Exported so the\n * engine's loader can surface a missing/broken install as \"not-installed\" with\n * the real reason, before any model work starts. A failed load is not cached —\n * an install that completes mid-session takes effect on the next call.\n */\nexport async function ensureNativeDeps(): Promise<NativeDeps> {\n if (nativeDeps) return nativeDeps;\n const [ortMod, tokMod, tarMod] = await Promise.all([\n importNative('onnxruntime-node'),\n importNative('@anush008/tokenizers'),\n importNative('tar'),\n ]);\n nativeDeps = {\n ort: unwrapCjs(ortMod, 'InferenceSession'),\n tokenizers: unwrapCjs(tokMod, 'Tokenizer'),\n tar: unwrapCjs(tarMod, 'x'),\n };\n return nativeDeps;\n}\n\n/** The loaded modules — callable only after `ensureNativeDeps()` resolved. */\nfunction native(): NativeDeps {\n if (!nativeDeps) throw new Error('embedding backend used before ensureNativeDeps()');\n return nativeDeps;\n}\n\nexport enum ExecutionProvider {\n CPU = 'cpu',\n CUDA = 'cuda',\n WebGL = 'webgl',\n WASM = 'wasm',\n XNNPACK = 'xnnpack',\n}\n\nexport enum EmbeddingModel {\n AllMiniLML6V2 = 'fast-all-MiniLM-L6-v2',\n BGEBaseEN = 'fast-bge-base-en',\n BGEBaseENV15 = 'fast-bge-base-en-v1.5',\n BGESmallEN = 'fast-bge-small-en',\n BGESmallENV15 = 'fast-bge-small-en-v1.5',\n BGESmallZH = 'fast-bge-small-zh-v1.5',\n MLE5Large = 'fast-multilingual-e5-large',\n CUSTOM = 'custom',\n}\n\nexport interface InitOptions {\n model?: EmbeddingModel;\n executionProviders?: ExecutionProvider[];\n maxLength?: number;\n cacheDir?: string;\n showDownloadProgress?: boolean;\n /** Required (with `modelName`) when `model` is `EmbeddingModel.CUSTOM`. */\n modelAbsoluteDirPath?: string;\n modelName?: string;\n}\n\ninterface ModelInfo {\n model: EmbeddingModel;\n dim: number;\n description: string;\n}\n\nfunction normalize(v: number[]): number[] {\n const norm = Math.sqrt(v.reduce((acc, val) => acc + val * val, 0));\n const epsilon = 1e-12;\n return v.map((val) => val / Math.max(norm, epsilon));\n}\n\n/** Slice the flat [batch, seqLen, dim] output into one CLS vector per input. */\nfunction getEmbeddings(data: ArrayLike<number>, dimensions: readonly number[]): number[][] {\n const [x, y, z] = dimensions as [number, number, number];\n const flat = Array.prototype.slice as (this: ArrayLike<number>, a: number, b: number) => number[];\n return new Array(x).fill(undefined).map((_, index) => {\n const startIndex = index * y * z;\n return flat.call(data, startIndex, startIndex + z);\n });\n}\n\n/** Minimal stderr progress line, replacing upstream's `progress` dependency. */\nfunction renderProgress(model: string, received: number, total: number): void {\n const pct = total > 0 ? Math.min(100, Math.floor((received / total) * 100)) : 0;\n const width = 20;\n const filled = Math.floor((pct / 100) * width);\n const bar = '='.repeat(filled) + ' '.repeat(width - filled);\n process.stderr.write(`\\rDownloading ${model} [${bar}] ${pct}%`);\n if (total > 0 && received >= total) process.stderr.write('\\n');\n}\n\nexport class FlagEmbedding {\n private constructor(\n private readonly tokenizer: Tokenizer,\n private readonly session: InferenceSession,\n private readonly model: EmbeddingModel,\n ) {}\n\n static async init({\n model = EmbeddingModel.BGESmallENV15,\n executionProviders = [ExecutionProvider.CPU],\n maxLength = 512,\n cacheDir = 'local_cache',\n showDownloadProgress = true,\n modelAbsoluteDirPath = '',\n modelName = '',\n }: InitOptions = {}): Promise<FlagEmbedding> {\n await ensureNativeDeps();\n if (model === EmbeddingModel.CUSTOM) {\n if (!modelAbsoluteDirPath) {\n throw new Error('For custom model, modelAbsoluteDirPath is required in FlagEmbedding.init');\n }\n if (!modelName) {\n throw new Error('For custom model, modelName is required in FlagEmbedding.init');\n }\n }\n const modelDir =\n model === EmbeddingModel.CUSTOM\n ? modelAbsoluteDirPath\n : await FlagEmbedding.retrieveModel(model, cacheDir, showDownloadProgress);\n const tokenizer = this.loadTokenizer(modelDir, maxLength);\n const defaultModelName =\n model === EmbeddingModel.MLE5Large || model === EmbeddingModel.AllMiniLML6V2\n ? 'model.onnx'\n : 'model_optimized.onnx';\n const modelPath = path.join(modelDir, modelName || defaultModelName);\n if (!fs.existsSync(modelPath)) {\n throw new Error(`Model file not found at ${modelPath}`);\n }\n const session = await native().ort.InferenceSession.create(modelPath, {\n executionProviders,\n graphOptimizationLevel: 'all',\n });\n return new FlagEmbedding(tokenizer, session, model);\n }\n\n private static loadTokenizer(modelDir: string, maxLength: number): Tokenizer {\n const tokenizerPath = path.join(modelDir, 'tokenizer.json');\n if (!fs.existsSync(tokenizerPath)) {\n throw new Error(`Tokenizer file not found at ${tokenizerPath}`);\n }\n const configPath = path.join(modelDir, 'config.json');\n if (!fs.existsSync(configPath)) {\n throw new Error(`Config file not found at ${configPath}`);\n }\n const config = JSON.parse(fs.readFileSync(configPath, 'utf-8')) as Record<string, unknown>;\n const tokenizerConfigPath = path.join(modelDir, 'tokenizer_config.json');\n if (!fs.existsSync(tokenizerConfigPath)) {\n throw new Error(`Tokenizer file not found at ${tokenizerConfigPath}`);\n }\n const tokenizerConfig = JSON.parse(fs.readFileSync(tokenizerConfigPath, 'utf-8')) as Record<string, unknown>;\n maxLength = Math.min(maxLength, Number(tokenizerConfig['model_max_length']));\n const tokensMapPath = path.join(modelDir, 'special_tokens_map.json');\n if (!fs.existsSync(tokensMapPath)) {\n throw new Error(`Tokens map file not found at ${tokensMapPath}`);\n }\n const tokensMap = JSON.parse(fs.readFileSync(tokensMapPath, 'utf-8')) as Record<string, unknown>;\n\n const { Tokenizer, AddedToken } = native().tokenizers;\n const tokenizer = Tokenizer.fromFile(tokenizerPath);\n tokenizer.setTruncation(maxLength);\n tokenizer.setPadding({\n maxLength,\n padId: config['pad_token_id'] as number,\n padToken: tokenizerConfig['pad_token'] as string,\n });\n for (const token of Object.values(tokensMap)) {\n if (typeof token === 'string') {\n tokenizer.addSpecialTokens([token]);\n } else if (isAddedTokenMap(token)) {\n const addedToken = new AddedToken(token.content, true, {\n singleWord: token.single_word,\n leftStrip: token.lstrip,\n rightStrip: token.rstrip,\n normalized: token.normalized,\n });\n tokenizer.addAddedTokens([addedToken]);\n }\n }\n return tokenizer;\n }\n\n private static async downloadFileFromGCS(\n outputFilePath: string,\n model: string,\n showDownloadProgress = true,\n ): Promise<string> {\n if (fs.existsSync(outputFilePath)) {\n return outputFilePath;\n }\n // The AllMiniLML6V2 model URL doesn't follow the same naming convention as\n // the other models, so \"fast-all-MiniLM-L6-v2\" becomes\n // \"sentence-transformers-all-MiniLM-L6-v2\" in the download URL while the\n // GCS directory name stays \"fast-all-MiniLM-L6-v2\".\n if (model === EmbeddingModel.AllMiniLML6V2) {\n model = 'sentence-transformers' + model.substring(model.indexOf('-'));\n }\n const url = `https://storage.googleapis.com/qdrant-fastembed/${model}.tar.gz`;\n const fileStream = fs.createWriteStream(outputFilePath);\n return new Promise((resolve, reject) => {\n https\n .get(url, { headers: { 'User-Agent': 'Mozilla/5.0' } }, (response) => {\n const totalSizeInBytes = parseInt(response.headers['content-length'] || '0', 10);\n if (totalSizeInBytes === 0) {\n console.warn(`Warning: Content-length header is missing or zero in the response from ${url}.`);\n }\n if (showDownloadProgress) {\n let received = 0;\n response.on('data', (chunk: Buffer) => {\n received += chunk.length;\n renderProgress(model, received, totalSizeInBytes);\n });\n }\n response.on('error', reject);\n response.pipe(fileStream);\n fileStream.on('finish', () => {\n fileStream.close();\n resolve(outputFilePath);\n });\n fileStream.on('error', reject);\n })\n .on('error', (error) => {\n fs.unlink(outputFilePath, () => {\n reject(error);\n });\n });\n });\n }\n\n private static async decompressToCache(targzPath: string, cacheDir: string): Promise<void> {\n if (path.extname(targzPath) === '.gz') {\n await native().tar.x({ file: targzPath, cwd: cacheDir });\n } else {\n throw new Error(`Unsupported file extension: ${targzPath}`);\n }\n }\n\n private static async retrieveModel(model: EmbeddingModel, cacheDir: string, showDownloadProgress = true): Promise<string> {\n if (!fs.existsSync(cacheDir)) {\n fs.mkdirSync(cacheDir, { mode: 0o777 });\n }\n const modelDir = path.join(cacheDir, model);\n if (fs.existsSync(modelDir)) {\n return modelDir;\n }\n const modelTarGz = path.join(cacheDir, `${model}.tar.gz`);\n await this.downloadFileFromGCS(modelTarGz, model, showDownloadProgress);\n await this.decompressToCache(modelTarGz, cacheDir);\n fs.unlinkSync(modelTarGz);\n return modelDir;\n }\n\n async *embed(textStrings: string[], batchSize = 256): AsyncGenerator<number[][]> {\n for (let i = 0; i < textStrings.length; i += batchSize) {\n const batchTexts = textStrings.slice(i, i + batchSize);\n const encodedTexts = await Promise.all(batchTexts.map((textString) => this.tokenizer.encode(textString)));\n const idsArray: bigint[][] = [];\n const maskArray: bigint[][] = [];\n const typeIdsArray: bigint[][] = [];\n for (const text of encodedTexts) {\n idsArray.push(text.getIds().map(BigInt));\n maskArray.push(text.getAttentionMask().map(BigInt));\n typeIdsArray.push(text.getTypeIds().map(BigInt));\n }\n const maxLength = idsArray[0]!.length;\n const dims = [batchTexts.length, maxLength];\n const ort = native().ort;\n const inputs: Record<string, Tensor> = {\n input_ids: new ort.Tensor('int64', BigInt64Array.from(idsArray.flat()), dims),\n attention_mask: new ort.Tensor('int64', BigInt64Array.from(maskArray.flat()), dims),\n token_type_ids: new ort.Tensor('int64', BigInt64Array.from(typeIdsArray.flat()), dims),\n };\n // MLE5Large's graph has no token_type_ids input.\n if (this.model === EmbeddingModel.MLE5Large) {\n delete inputs.token_type_ids;\n }\n const output = await this.session.run(inputs);\n const hidden = output.last_hidden_state!;\n const embeddings = getEmbeddings(hidden.data as ArrayLike<number>, hidden.dims);\n yield embeddings.map(normalize);\n }\n }\n\n passageEmbed(texts: string[], batchSize = 256): AsyncGenerator<number[][]> {\n return this.embed(\n texts.map((text) => `passage: ${text}`),\n batchSize,\n );\n }\n\n async queryEmbed(query: string): Promise<number[]> {\n return (await this.embed([`query: ${query}`]).next()).value![0]!;\n }\n\n listSupportedModels(): ModelInfo[] {\n return [\n { model: EmbeddingModel.BGESmallEN, dim: 384, description: 'Fast English model' },\n { model: EmbeddingModel.BGESmallENV15, dim: 384, description: 'v1.5 release of the fast, default English model' },\n { model: EmbeddingModel.BGEBaseEN, dim: 768, description: 'Base English model' },\n { model: EmbeddingModel.BGEBaseENV15, dim: 768, description: 'v1.5 release of Base English model' },\n { model: EmbeddingModel.BGESmallZH, dim: 512, description: 'v1.5 release of the fast, Chinese model' },\n { model: EmbeddingModel.AllMiniLML6V2, dim: 384, description: 'Sentence Transformer model, MiniLM-L6-v2' },\n {\n model: EmbeddingModel.MLE5Large,\n dim: 1024,\n description: 'Multilingual model, e5-large. Recommend using this model for non-English languages',\n },\n ];\n }\n}\n\ninterface AddedTokenMap {\n content: string;\n single_word: boolean;\n lstrip: boolean;\n rstrip: boolean;\n normalized: boolean;\n}\n\nfunction isAddedTokenMap(token: unknown): token is AddedTokenMap {\n return (\n typeof token === 'object' &&\n token !== null &&\n 'token' in token &&\n 'single_word' in token &&\n 'rstrip' in token &&\n 'lstrip' in token &&\n 'normalized' in token\n );\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { localGraphBackend, resolveGraphBackend, vgdGraphBackend } from './chunk-54RGT2T5.js';
|
|
2
|
+
import './chunk-RBIRXQR6.js';
|
|
3
|
+
import './chunk-J7LKEB2R.js';
|
|
4
|
+
import './chunk-KGPX4EUN.js';
|
|
5
|
+
import './chunk-X76VPOYH.js';
|
|
6
|
+
import './chunk-2U37PFB2.js';
|
|
7
|
+
import './chunk-75LJM5XD.js';
|
|
8
|
+
import './chunk-2H2U3DC7.js';
|
|
9
|
+
import './chunk-BWPBB45M.js';
|
|
10
|
+
import './chunk-JFGYT6BI.js';
|
|
11
|
+
import './chunk-BPF3YX2U.js';
|
|
12
|
+
import './chunk-Z6ZWNWWR.js';
|
|
13
|
+
//# sourceMappingURL=graph-backend-W2TNTMY7.js.map
|
|
14
|
+
//# sourceMappingURL=graph-backend-W2TNTMY7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"graph-backend-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"graph-backend-W2TNTMY7.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { G as GraphNode, a as GraphEdge, A as Area, R as ResolverKind, V as VgGr
|
|
|
2
2
|
export { e as AnalysisTier, C as Centrality, D as DerivedBy, f as EpistemicTier, g as FactConfidence, h as FactKind, i as GraphMeta, j as GraphSummaries, H as HubBlastSummary, N as NodeKind, P as Provenance, S as SCHEMA_VERSION, k as Span, T as Toolchain, U as Unknown } from './types-DLH-Ritr.js';
|
|
3
3
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
4
4
|
|
|
5
|
-
declare const VERSION = "2026.
|
|
5
|
+
declare const VERSION = "2026.814.2";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Analysis stage: importance, centrality, hubs, communities, and surprise.
|
|
@@ -471,8 +471,9 @@ declare function parseSource(rel: string, langId: string, source: string): Promi
|
|
|
471
471
|
/**
|
|
472
472
|
* Local-embedding semantic search for `vg ask --semantic`/`--deep` (no API key).
|
|
473
473
|
*
|
|
474
|
-
* The embedding backend is
|
|
475
|
-
*
|
|
474
|
+
* The embedding backend is OPTIONAL and lazily loaded (the vendored
|
|
475
|
+
* `src/vendor/fastembed` dense backend over `onnxruntime-node`, local ONNX)
|
|
476
|
+
* so the core install stays lean and `ask` never breaks:
|
|
476
477
|
* if the backend or model isn't available it degrades to (prefix-fuzzy) lexical
|
|
477
478
|
* search with a clear note. Per-repo vectors live in a binary `*.embeddings`
|
|
478
479
|
* file **alongside the code map** (global store under Application Support /
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
export { GraphSource, createServer, exportGraph, formatForExt, serveStdio } from './chunk-
|
|
2
|
-
export { refreshIfStale } from './chunk-
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export { FREE_PACK, TOOLS, coveringTests, detectRunner, shortestPath, testsToRun } from './chunk-3WUTQYRY.js';
|
|
6
|
-
import './chunk-N6ZMZ5AI.js';
|
|
1
|
+
export { GraphSource, createServer, exportGraph, formatForExt, serveStdio } from './chunk-YNV5M3JW.js';
|
|
2
|
+
export { refreshIfStale } from './chunk-IHLLWBZU.js';
|
|
3
|
+
export { ASSISTANTS, ResourceLimitError, SKIP_DIRS, SKIP_FILES, UsageError, analyze, applyCoverage, assistantById, buildFacts, buildGraph, decodeScipIndex, discover, driftCount, groundGraph, hasDrift, installAssistant, loadCoverage, loadSnapshot, probeFreshness, resolveLimits, scipEdges, uninstallAssistant, verifyDeterminism, writeSnapshot } from './chunk-TNROG5CO.js';
|
|
4
|
+
export { FREE_PACK, TOOLS, coveringTests, detectRunner, shortestPath, testsToRun } from './chunk-WWGLVF7D.js';
|
|
7
5
|
import './chunk-HTLDXEHW.js';
|
|
6
|
+
import './chunk-N6ZMZ5AI.js';
|
|
8
7
|
export { applyStaticTestLinkage, buildModuleResolver, isTestFile, parseJsonc, relativeResolver } from './chunk-VIWZ4QT7.js';
|
|
9
|
-
export { addLibrary, inventory as dependencyInventory, driftFor, enrichOnline, libId, loadCatalog, readDoc, resolveLib, saveCatalog, searchSymbols } from './chunk-
|
|
8
|
+
export { addLibrary, inventory as dependencyInventory, driftFor, enrichOnline, libId, loadCatalog, readDoc, resolveLib, saveCatalog, searchSymbols } from './chunk-7QDHQLUS.js';
|
|
9
|
+
export { findNodes, nodeById, resolveOne } from './chunk-J7LKEB2R.js';
|
|
10
|
+
export { CAPSULE_COMPILER_ID, CAPSULE_RANKING_VERSION, TASK_CAPSULE_SCHEMA_VERSION, buildCodeContext, buildTaskCapsule, capsuleToCodeContext, readSavings, recordSaving, savingsRecorded, summarizeCapsule } from './chunk-DSUGC7F5.js';
|
|
11
|
+
export { GraphIndex, identifierParts, impactOf, queryGraph, queryGraphSemantic } from './chunk-KGPX4EUN.js';
|
|
10
12
|
export { discoverModels } from './chunk-CQDUBAQY.js';
|
|
11
13
|
import './chunk-OV4KGXPD.js';
|
|
14
|
+
export { SCHEMA_VERSION, loadGraph } from './chunk-WQLZSVNF.js';
|
|
12
15
|
import './chunk-5I4VSBWQ.js';
|
|
13
16
|
import './chunk-DT4KIVRI.js';
|
|
14
17
|
import './chunk-CRAMOEBE.js';
|
|
15
18
|
import './chunk-3LSG7Z4I.js';
|
|
16
|
-
export { findNodes, nodeById, resolveOne } from './chunk-J7LKEB2R.js';
|
|
17
|
-
export { GraphIndex, identifierParts, impactOf, queryGraph, queryGraphSemantic } from './chunk-YJU7S7N6.js';
|
|
18
19
|
export { LANGUAGES, allLanguageIds, grammarsSourceDir, langById, langForExtension, parseSource } from './chunk-UTNNGKKX.js';
|
|
19
20
|
import { redactUrlCredentials, redactSecrets } from './chunk-RXP66R2E.js';
|
|
20
|
-
export { cosine, embeddingsCached, embeddingsPath, embeddingsPathFor, getNodeEmbeddings, loadEmbedder, nodeEmbedText } from './chunk-
|
|
21
|
-
|
|
22
|
-
export { defaultGraphPath, legacyGraphPath, parseGraph, preferInRepoGraph, renderHtml, renderReport, resolveGraphPath, serializeGraph, stableStringify, vibgrateDir, writeArtifacts } from './chunk-
|
|
23
|
-
export { VERSION } from './chunk-
|
|
21
|
+
export { cosine, embeddingsCached, embeddingsPath, embeddingsPathFor, getNodeEmbeddings, loadEmbedder, nodeEmbedText } from './chunk-X76VPOYH.js';
|
|
22
|
+
import './chunk-2U37PFB2.js';
|
|
23
|
+
export { defaultGraphPath, legacyGraphPath, parseGraph, preferInRepoGraph, renderHtml, renderReport, resolveGraphPath, serializeGraph, stableStringify, vibgrateDir, writeArtifacts } from './chunk-75LJM5XD.js';
|
|
24
|
+
export { VERSION } from './chunk-2H2U3DC7.js';
|
|
24
25
|
import './chunk-BWPBB45M.js';
|
|
25
26
|
import './chunk-JFGYT6BI.js';
|
|
26
27
|
import './chunk-BPF3YX2U.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/engine/push.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBO,SAAS,aAAA,CAAc,IAAA,EAAc,KAAA,EAAgB,YAAA,EAA4C;AACtG,EAAA,MAAM,MAAM,GAAA,CAAI,IAAA,EAAM,CAAC,WAAA,EAAa,MAAM,CAAC,CAAA,IAAK,0CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,IAAI,IAAA,EAAM,CAAC,aAAa,cAAA,EAAgB,MAAM,CAAC,CAAA,IAAK,MAAA;AACnE,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,EAAM,CAAC,UAAU,OAAA,EAAS,mBAAmB,CAAC,CAAA,IAAK,MAAA;AACzE,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,cAAA;AAAA,IACf,YAAA,EAAc,OAAA;AAAA,IACd,YAAA;AAAA,IACA,GAAA,EAAK,EAAE,GAAA,EAAK,QAAA,EAAU,IAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,MAAA,EAAO;AAAA,IAC/C,YAAY,SAAA,GAAY,EAAE,WAAW,oBAAA,CAAqB,SAAS,GAAE,GAAI,MAAA;AAAA,IACzE,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,KAAA,EAAO,YAAY,KAAK;AAAA,GAC1B;AACF;AAOO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM;AAC5B,MAAA,MAAM,YAAY,CAAA,CAAE,SAAA,GAAY,cAAc,CAAA,CAAE,SAAS,IAAI,CAAA,CAAE,SAAA;AAC/D,MAAA,MAAM,MAAM,CAAA,CAAE,GAAA,GAAM,cAAc,CAAA,CAAE,GAAG,IAAI,CAAA,CAAE,GAAA;AAC7C,MAAA,OAAO,SAAA,KAAc,CAAA,CAAE,SAAA,IAAa,GAAA,KAAQ,CAAA,CAAE,GAAA,GAAM,EAAE,GAAG,CAAA,EAAG,SAAA,EAAW,GAAA,EAAI,GAAI,CAAA;AAAA,IACjF,CAAC;AAAA,GACH;AACF;AAEA,SAAS,GAAA,CAAI,MAAc,IAAA,EAA+B;AACxD,EAAA,IAAI;AACF,IAAA,OAAO,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,EAAE,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,CAAA,CAAE,IAAA,EAAK,IAAK,IAAA;AAAA,EAC9E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"index.js","sourcesContent":["import { execFileSync } from 'node:child_process';\nimport { redactSecrets, redactUrlCredentials } from '../core-open/utils/redact.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * The deferred, decoupled push envelope (VG-PACKAGE-AND-SCHEMA §7). In the open\n * CLI `vg push` is **specified but not built**: it assembles and redacts the\n * envelope and prints a notice, but performs **no network upload**. Nothing in\n * the free path depends on it. Drift-over-time/governance is the separate\n * commercial product.\n */\n\nexport interface GraphUploadEnvelope {\n schemaVersion: 'vg-graph/1.0';\n artifactType: 'graph';\n scanIngestId?: string;\n vcs: { sha: string; shortSha: string; branch: string };\n repository?: { name?: string; remoteUrl?: string };\n generatedAt: string;\n graph: VgGraph;\n}\n\nexport function buildEnvelope(root: string, graph: VgGraph, scanIngestId?: string): GraphUploadEnvelope {\n const sha = git(root, ['rev-parse', 'HEAD']) ?? '0000000000000000000000000000000000000000';\n const branch = git(root, ['rev-parse', '--abbrev-ref', 'HEAD']) ?? 'HEAD';\n const remoteUrl = git(root, ['config', '--get', 'remote.origin.url']) ?? undefined;\n return {\n schemaVersion: 'vg-graph/1.0',\n artifactType: 'graph',\n scanIngestId,\n vcs: { sha, shortSha: sha.slice(0, 12), branch },\n repository: remoteUrl ? { remoteUrl: redactUrlCredentials(remoteUrl) } : undefined,\n generatedAt: graph.generatedAt,\n graph: redactGraph(graph),\n };\n}\n\n/**\n * Redaction pass (GUARDRAILS §1: redact before storage). The graph is structure,\n * not content, but we defensively scrub any signature/name that matches a\n * credential-shaped pattern, and strip credentials from the remote URL.\n */\nexport function redactGraph(graph: VgGraph): VgGraph {\n return {\n ...graph,\n nodes: graph.nodes.map((n) => {\n const signature = n.signature ? redactSecrets(n.signature) : n.signature;\n const doc = n.doc ? redactSecrets(n.doc) : n.doc;\n return signature !== n.signature || doc !== n.doc ? { ...n, signature, doc } : n;\n }),\n };\n}\n\nfunction git(root: string, args: string[]): string | null {\n try {\n return execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim() || null;\n } catch {\n return null;\n }\n}\n"]}
|