@creeperhost/modlens-mcp 1.6.18 → 1.6.20
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/README.md +112 -15
- package/TESTING.md +69 -0
- package/dist/cli.js +49 -13
- package/dist/cli.js.map +1 -1
- package/dist/curseforge.d.ts +9 -7
- package/dist/curseforge.d.ts.map +1 -1
- package/dist/curseforge.js +48 -55
- package/dist/curseforge.js.map +1 -1
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +31 -1
- package/dist/db.js.map +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +1 -0
- package/dist/embeddings.js.map +1 -1
- package/dist/feed-the-beast.d.ts +5 -5
- package/dist/feed-the-beast.d.ts.map +1 -1
- package/dist/feed-the-beast.js +5 -21
- package/dist/feed-the-beast.js.map +1 -1
- package/dist/java-tools.d.ts +1 -0
- package/dist/java-tools.d.ts.map +1 -1
- package/dist/java-tools.js +31 -7
- package/dist/java-tools.js.map +1 -1
- package/dist/launcher.js +15 -0
- package/dist/launcher.js.map +1 -1
- package/dist/mappings.d.ts +4 -1
- package/dist/mappings.d.ts.map +1 -1
- package/dist/mappings.js +120 -52
- package/dist/mappings.js.map +1 -1
- package/dist/minecraft.d.ts +0 -4
- package/dist/minecraft.d.ts.map +1 -1
- package/dist/minecraft.js +7 -23
- package/dist/minecraft.js.map +1 -1
- package/dist/mod-artifacts.d.ts +4 -0
- package/dist/mod-artifacts.d.ts.map +1 -0
- package/dist/mod-artifacts.js +58 -0
- package/dist/mod-artifacts.js.map +1 -0
- package/dist/modpacks-ch.d.ts +72 -46
- package/dist/modpacks-ch.d.ts.map +1 -1
- package/dist/modpacks-ch.js +134 -20
- package/dist/modpacks-ch.js.map +1 -1
- package/dist/modrinth.d.ts +14 -6
- package/dist/modrinth.d.ts.map +1 -1
- package/dist/modrinth.js +70 -55
- package/dist/modrinth.js.map +1 -1
- package/dist/platform-adapter.d.ts +1 -0
- package/dist/platform-adapter.d.ts.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +20 -44
- package/dist/platform.js.map +1 -1
- package/dist/primer-catalog.d.ts +15 -0
- package/dist/primer-catalog.d.ts.map +1 -0
- package/dist/primer-catalog.js +43 -0
- package/dist/primer-catalog.js.map +1 -0
- package/dist/primer-content.d.ts +7 -0
- package/dist/primer-content.d.ts.map +1 -0
- package/dist/primer-content.js +185 -0
- package/dist/primer-content.js.map +1 -0
- package/dist/processor.d.ts +5 -0
- package/dist/processor.d.ts.map +1 -1
- package/dist/processor.js +166 -46
- package/dist/processor.js.map +1 -1
- package/dist/registry-submission.d.ts +34 -0
- package/dist/registry-submission.d.ts.map +1 -0
- package/dist/registry-submission.js +128 -0
- package/dist/registry-submission.js.map +1 -0
- package/dist/repositories/array-fields.d.ts +3 -0
- package/dist/repositories/array-fields.d.ts.map +1 -0
- package/dist/repositories/array-fields.js +8 -0
- package/dist/repositories/array-fields.js.map +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts.map +1 -1
- package/dist/repositories/embeddings-sqlite.js +26 -58
- package/dist/repositories/embeddings-sqlite.js.map +1 -1
- package/dist/repositories/embeddings.d.ts.map +1 -1
- package/dist/repositories/embeddings.js +26 -3
- package/dist/repositories/embeddings.js.map +1 -1
- package/dist/repositories/index.d.ts +1 -1
- package/dist/repositories/index.d.ts.map +1 -1
- package/dist/repositories/mod.d.ts +8 -5
- package/dist/repositories/mod.d.ts.map +1 -1
- package/dist/repositories/mod.js +25 -11
- package/dist/repositories/mod.js.map +1 -1
- package/dist/repositories/packs.d.ts.map +1 -1
- package/dist/repositories/packs.js +10 -2
- package/dist/repositories/packs.js.map +1 -1
- package/dist/search-adapter.d.ts +2 -0
- package/dist/search-adapter.d.ts.map +1 -1
- package/dist/search-adapter.js +21 -9
- package/dist/search-adapter.js.map +1 -1
- package/dist/security.d.ts +2 -0
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +5 -1
- package/dist/security.js.map +1 -1
- package/dist/server.js +80 -35
- package/dist/server.js.map +1 -1
- package/dist/setup.js +9 -4
- package/dist/setup.js.map +1 -1
- package/dist/sqlite-json.d.ts +3 -0
- package/dist/sqlite-json.d.ts.map +1 -0
- package/dist/sqlite-json.js +78 -0
- package/dist/sqlite-json.js.map +1 -0
- package/dist/sqlite-parameters.d.ts +3 -0
- package/dist/sqlite-parameters.d.ts.map +1 -0
- package/dist/sqlite-parameters.js +19 -0
- package/dist/sqlite-parameters.js.map +1 -0
- package/dist/sqlite-schema.d.ts +4 -0
- package/dist/sqlite-schema.d.ts.map +1 -0
- package/dist/sqlite-schema.js +76 -0
- package/dist/sqlite-schema.js.map +1 -0
- package/dist/tools/catalog.d.ts +1 -6
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/catalog.js +10 -14
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/compat-check.d.ts.map +1 -1
- package/dist/tools/compat-check.js +18 -30
- package/dist/tools/compat-check.js.map +1 -1
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/docs.d.ts.map +1 -1
- package/dist/tools/docs.js +8 -3
- package/dist/tools/docs.js.map +1 -1
- package/dist/tools/embed-registry.d.ts +20 -4
- package/dist/tools/embed-registry.d.ts.map +1 -1
- package/dist/tools/embed-registry.js +30 -19
- package/dist/tools/embed-registry.js.map +1 -1
- package/dist/tools/graphify.d.ts +19 -4
- package/dist/tools/graphify.d.ts.map +1 -1
- package/dist/tools/graphify.js +61 -13
- package/dist/tools/graphify.js.map +1 -1
- package/dist/tools/ingest.d.ts.map +1 -1
- package/dist/tools/ingest.js +4 -4
- package/dist/tools/ingest.js.map +1 -1
- package/dist/tools/kubejs.js +1 -1
- package/dist/tools/kubejs.js.map +1 -1
- package/dist/tools/mc-fts.d.ts.map +1 -1
- package/dist/tools/mc-fts.js +9 -4
- package/dist/tools/mc-fts.js.map +1 -1
- package/dist/tools/mcmeta.d.ts +10 -1
- package/dist/tools/mcmeta.d.ts.map +1 -1
- package/dist/tools/mcmeta.js +43 -29
- package/dist/tools/mcmeta.js.map +1 -1
- package/dist/tools/mixin-scan.d.ts +12 -6
- package/dist/tools/mixin-scan.d.ts.map +1 -1
- package/dist/tools/mixin-scan.js +12 -7
- package/dist/tools/mixin-scan.js.map +1 -1
- package/dist/tools/mod-data.d.ts.map +1 -1
- package/dist/tools/mod-data.js +40 -27
- package/dist/tools/mod-data.js.map +1 -1
- package/dist/tools/modpacks-ch.d.ts +9 -5
- package/dist/tools/modpacks-ch.d.ts.map +1 -1
- package/dist/tools/modpacks-ch.js +54 -33
- package/dist/tools/modpacks-ch.js.map +1 -1
- package/dist/tools/packtools.js +3 -3
- package/dist/tools/packtools.js.map +1 -1
- package/dist/tools/platform.d.ts +2 -2
- package/dist/tools/platform.d.ts.map +1 -1
- package/dist/tools/platform.js +33 -23
- package/dist/tools/platform.js.map +1 -1
- package/dist/tools/primers.d.ts +133 -22
- package/dist/tools/primers.d.ts.map +1 -1
- package/dist/tools/primers.js +391 -386
- package/dist/tools/primers.js.map +1 -1
- package/dist/tools/project.d.ts +342 -0
- package/dist/tools/project.d.ts.map +1 -0
- package/dist/tools/project.js +519 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/reports.d.ts.map +1 -1
- package/dist/tools/reports.js +5 -3
- package/dist/tools/reports.js.map +1 -1
- package/dist/tools/vanilla-data.d.ts.map +1 -1
- package/dist/tools/vanilla-data.js +3 -33
- package/dist/tools/vanilla-data.js.map +1 -1
- package/dist/tools/vanilla.d.ts +3 -1
- package/dist/tools/vanilla.d.ts.map +1 -1
- package/dist/tools/vanilla.js +26 -12
- package/dist/tools/vanilla.js.map +1 -1
- package/dist/tools/version-diff.d.ts.map +1 -1
- package/dist/tools/version-diff.js +4 -24
- package/dist/tools/version-diff.js.map +1 -1
- package/dist/version-ranges.d.ts +5 -0
- package/dist/version-ranges.d.ts.map +1 -0
- package/dist/version-ranges.js +93 -0
- package/dist/version-ranges.js.map +1 -0
- package/package.json +9 -1
- package/prisma/backends/template.db +0 -0
- package/scripts/build-template-db.mjs +3 -1
- package/scripts/enable-sqlite-vec.mjs +2 -106
- package/scripts/gradle/modlens.init.gradle +154 -0
- package/scripts/project-upload.mjs +74 -0
- package/scripts/test-minecraft-eras.mjs +202 -0
- package/scripts/test-package.mjs +105 -5
- package/scripts/test-primers-live.mjs +93 -0
- package/scripts/test-project-gradle.mjs +76 -0
- package/scripts/test-project-http.mjs +98 -0
- package/scripts/test-setup.mjs +18 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { gzipSync, gunzipSync } from "node:zlib";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { validateEmbeddingBundle, validateGraphBundle, validateEmbedRegistryIndex, validateGraphRegistryIndex } from "./security.js";
|
|
5
|
+
export async function prepareRegistryBundle(kind, path) {
|
|
6
|
+
if (!path)
|
|
7
|
+
throw new Error("Provide bundlePath from graph_export or embed_export");
|
|
8
|
+
if ((await stat(path)).size > 95_000_000)
|
|
9
|
+
throw new Error("Registry submissions must be smaller than 95 MB");
|
|
10
|
+
const input = await readFile(path);
|
|
11
|
+
const compressed = input[0] === 0x1f && input[1] === 0x8b;
|
|
12
|
+
const raw = compressed ? gunzipSync(input, { maxOutputLength: 200_000_000 }) : input;
|
|
13
|
+
const bundle = JSON.parse(raw.toString("utf8"));
|
|
14
|
+
const check = kind === "graph" ? validateGraphBundle(bundle.graph) : validateEmbeddingBundle(bundle);
|
|
15
|
+
if (!check.valid)
|
|
16
|
+
throw new Error(`Invalid ${kind} bundle: ${check.reason}`);
|
|
17
|
+
const targetType = bundle.targetType ?? "mod";
|
|
18
|
+
const targetId = bundle.targetId ?? bundle.modId;
|
|
19
|
+
const targetVersion = bundle.targetVersion ?? bundle.modVersion;
|
|
20
|
+
if (bundle.version !== 1 || !["mod", "vanilla", "modloader"].includes(targetType)
|
|
21
|
+
|| typeof targetId !== "string" || !targetId || typeof targetVersion !== "string" || !targetVersion) {
|
|
22
|
+
throw new Error("Bundle must specify version 1 and a target type, identifier and version");
|
|
23
|
+
}
|
|
24
|
+
const data = compressed ? input : gzipSync(raw);
|
|
25
|
+
const sha256 = createHash("sha256").update(data).digest("hex");
|
|
26
|
+
const file = `bundles/${kind}/${sha256}.json.gz`;
|
|
27
|
+
const common = { targetType, targetId, targetVersion, loader: bundle.loader ?? "", mcVersion: bundle.mcVersion ?? "", sha256 };
|
|
28
|
+
const entry = kind === "graph" ? { ...common, modId: targetId, version: targetVersion, graphUrl: file,
|
|
29
|
+
nodeCount: bundle.graph.nodes.length, edgeCount: bundle.graph.edges.length,
|
|
30
|
+
enriched: bundle.graph.nodes.some((n) => n.community != null), updatedAt: new Date().toISOString() }
|
|
31
|
+
: { ...common, url: file, model: bundle.model, dimensions: bundle.dimensions, entryCount: bundle.entries.length, sizeBytes: data.length };
|
|
32
|
+
return { data, file, entry };
|
|
33
|
+
}
|
|
34
|
+
/** Atomically propose the bundle and index together on a branch, then open a draft PR. */
|
|
35
|
+
export async function submitRegistryBundle(kind, registryUrl, submission) {
|
|
36
|
+
const prepared = await prepareRegistryBundle(kind, submission.bundlePath);
|
|
37
|
+
const token = process.env.MODLENS_REGISTRY_TOKEN ?? process.env.GITHUB_TOKEN;
|
|
38
|
+
if (!token)
|
|
39
|
+
throw new Error("Set MODLENS_REGISTRY_TOKEN or GITHUB_TOKEN with repository Contents and Pull requests write permissions");
|
|
40
|
+
const prefix = `MODLENS_${kind.toUpperCase()}_REGISTRY`;
|
|
41
|
+
const url = new URL(registryUrl);
|
|
42
|
+
const parts = url.pathname.split("/").filter(Boolean);
|
|
43
|
+
const repo = process.env[`${prefix}_REPO`] ?? (url.hostname === "raw.githubusercontent.com" ? parts.slice(0, 2).join("/") : "");
|
|
44
|
+
if (!/^[\w.-]+\/[\w.-]+$/.test(repo))
|
|
45
|
+
throw new Error(`Set ${prefix}_REPO to the GitHub owner/repository for this registry`);
|
|
46
|
+
const base = process.env[`${prefix}_BRANCH`] ?? (url.hostname === "raw.githubusercontent.com" ? parts[2] : undefined) ?? "main";
|
|
47
|
+
const indexPath = process.env[`${prefix}_INDEX_PATH`] ?? (url.hostname === "raw.githubusercontent.com" ? parts.slice(3).join("/") : "index.json");
|
|
48
|
+
if (!indexPath || indexPath.split("/").some(p => p === ".." || p === "." || !p))
|
|
49
|
+
throw new Error("Invalid registry index path");
|
|
50
|
+
const request = async (path, body, allowMissing = false, accept = "application/vnd.github+json") => {
|
|
51
|
+
const response = await fetch(`https://api.github.com${path}`, {
|
|
52
|
+
method: body === undefined ? "GET" : "POST", redirect: "error", signal: AbortSignal.timeout(30_000),
|
|
53
|
+
headers: { Authorization: `Bearer ${token}`, Accept: accept, "Content-Type": "application/json", "User-Agent": "modlens-mcp", "X-GitHub-Api-Version": "2026-03-10" },
|
|
54
|
+
...(body === undefined ? {} : { body: JSON.stringify(body) }),
|
|
55
|
+
});
|
|
56
|
+
if (allowMissing && response.status === 404)
|
|
57
|
+
return null;
|
|
58
|
+
// Do not include responses or headers: proxies may echo authorization material.
|
|
59
|
+
if (!response.ok)
|
|
60
|
+
throw new Error(`GitHub registry request failed (${response.status}) for ${path.split("?")[0]}`);
|
|
61
|
+
return response.json();
|
|
62
|
+
};
|
|
63
|
+
const upstream = await request(`/repos/${repo}`);
|
|
64
|
+
const ref = await request(`/repos/${repo}/git/ref/heads/${encodeURIComponent(base)}`);
|
|
65
|
+
const commit = await request(`/repos/${repo}/git/commits/${ref.object.sha}`);
|
|
66
|
+
const key = kind === "graph" ? "graphs" : "bundles";
|
|
67
|
+
const index = await request(`/repos/${repo}/contents/${indexPath.split("/").map(encodeURIComponent).join("/")}?ref=${ref.object.sha}`, undefined, true, "application/vnd.github.raw+json")
|
|
68
|
+
?? (kind === "graph" ? { version: 1, graphs: [] } : { version: 1, models: [], bundles: [] });
|
|
69
|
+
const check = kind === "graph" ? validateGraphRegistryIndex(index) : validateEmbedRegistryIndex(index);
|
|
70
|
+
if (!check.valid)
|
|
71
|
+
throw new Error(`Invalid registry index: ${check.reason}`);
|
|
72
|
+
if (index[key].some((e) => e.sha256 === prepared.entry.sha256)) {
|
|
73
|
+
return { status: "already_published", repository: repo, sha256: prepared.entry.sha256 };
|
|
74
|
+
}
|
|
75
|
+
const identity = (e) => JSON.stringify([e.targetType ?? "mod", e.targetId ?? e.modId, e.targetVersion ?? e.modVersion ?? e.version, e.loader ?? "", e.mcVersion ?? "", e.model ?? "", e.dimensions ?? ""]);
|
|
76
|
+
index[key] = [...index[key].filter((e) => identity(e) !== identity(prepared.entry)), prepared.entry];
|
|
77
|
+
if (kind === "embed")
|
|
78
|
+
index.models = [...new Set([...(index.models ?? []), prepared.entry.model])];
|
|
79
|
+
let destination = repo;
|
|
80
|
+
if (!upstream.permissions?.push) {
|
|
81
|
+
const user = await request("/user");
|
|
82
|
+
destination = `${user.login}/${repo.split("/")[1]}`;
|
|
83
|
+
let fork = await request(`/repos/${destination}`, undefined, true);
|
|
84
|
+
if (!fork) {
|
|
85
|
+
fork = await request(`/repos/${repo}/forks`, { default_branch_only: false });
|
|
86
|
+
// GitHub can return before the new fork's Git objects are ready.
|
|
87
|
+
let ready = false;
|
|
88
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
89
|
+
if (await request(`/repos/${destination}/git/commits/${ref.object.sha}`, undefined, true)) {
|
|
90
|
+
ready = true;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
await new Promise(resolve => setTimeout(resolve, 1000 * (attempt + 1)));
|
|
94
|
+
}
|
|
95
|
+
if (!ready)
|
|
96
|
+
throw new Error("Registry fork is still being created. Retry the same bundle shortly.");
|
|
97
|
+
}
|
|
98
|
+
if (fork.parent?.full_name?.toLowerCase() !== repo.toLowerCase())
|
|
99
|
+
throw new Error(`Repository ${destination} is not a fork of ${repo}`);
|
|
100
|
+
}
|
|
101
|
+
const branch = `wip/modlens-${kind}-${prepared.entry.sha256.slice(0, 20)}`;
|
|
102
|
+
const head = `${destination.split("/")[0]}:${branch}`;
|
|
103
|
+
const existing = await request(`/repos/${repo}/pulls?state=open&head=${encodeURIComponent(head)}&base=${encodeURIComponent(base)}`);
|
|
104
|
+
if (existing[0])
|
|
105
|
+
return { status: "submitted", url: existing[0].html_url, repository: repo, branch };
|
|
106
|
+
const branchRef = await request(`/repos/${destination}/git/ref/heads/${encodeURIComponent(branch)}`, undefined, true);
|
|
107
|
+
if (!branchRef) {
|
|
108
|
+
const blob = await request(`/repos/${destination}/git/blobs`, { content: prepared.data.toString("base64"), encoding: "base64" });
|
|
109
|
+
const parentDir = indexPath.includes("/") ? indexPath.slice(0, indexPath.lastIndexOf("/") + 1) : "";
|
|
110
|
+
const tree = await request(`/repos/${destination}/git/trees`, { base_tree: commit.tree.sha, tree: [
|
|
111
|
+
{ path: parentDir + prepared.file, mode: "100644", type: "blob", sha: blob.sha },
|
|
112
|
+
{ path: indexPath, mode: "100644", type: "blob", content: JSON.stringify(index, null, 2) + "\n" },
|
|
113
|
+
] });
|
|
114
|
+
const next = await request(`/repos/${destination}/git/commits`, {
|
|
115
|
+
message: `Add ${kind} bundle for ${prepared.entry.targetId} ${prepared.entry.targetVersion}`,
|
|
116
|
+
tree: tree.sha, parents: [ref.object.sha],
|
|
117
|
+
});
|
|
118
|
+
await request(`/repos/${destination}/git/refs`, { ref: `refs/heads/${branch}`, sha: next.sha });
|
|
119
|
+
}
|
|
120
|
+
const pr = await request(`/repos/${repo}/pulls`, {
|
|
121
|
+
title: `Add ${kind} bundle for ${prepared.entry.targetId} ${prepared.entry.targetVersion}`, head, base, draft: true,
|
|
122
|
+
body: [`Add a validated ${kind} bundle and its registry entry.`,
|
|
123
|
+
`Target: ${prepared.entry.targetType} ${prepared.entry.targetId} ${prepared.entry.targetVersion}`,
|
|
124
|
+
`SHA-256: ${prepared.entry.sha256}`, submission.contributor ? `Contributor: ${submission.contributor}` : "", submission.note ?? ""].filter(Boolean).join("\n\n"),
|
|
125
|
+
});
|
|
126
|
+
return { status: "submitted", url: pr.html_url, repository: repo, branch, sha256: prepared.entry.sha256 };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=registry-submission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-submission.js","sourceRoot":"","sources":["../src/registry-submission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-fields.d.ts","sourceRoot":"","sources":["../../src/repositories/array-fields.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GACnF,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { getDb } from "../db.js";
|
|
2
|
+
/** Exact JSON-array membership, including escaped strings, on SQLite. */
|
|
3
|
+
export async function sqliteArrayMemberIds(table, column, value) {
|
|
4
|
+
const db = await getDb();
|
|
5
|
+
const rows = await db.$queryRawUnsafe(`SELECT DISTINCT t.id FROM ${table} t, json_each(t.${column}) j WHERE j.value = $1`, value);
|
|
6
|
+
return rows.map(row => row.id);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=array-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-fields.js","sourceRoot":"","sources":["../../src/repositories/array-fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,KAAoC,EAAE,MAA6B,EAAE,KAAa;IAElF,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,eAAe,CACjC,6BAA6B,KAAK,mBAAmB,MAAM,wBAAwB,EAAE,KAAK,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -2,6 +2,7 @@ type VecRow = {
|
|
|
2
2
|
id: number;
|
|
3
3
|
similarity: number;
|
|
4
4
|
};
|
|
5
|
+
export declare function closeVecDb(): void;
|
|
5
6
|
export declare function upsertDocEmbedding(id: number, vec: number[]): Promise<void>;
|
|
6
7
|
export declare function searchDocsByVector(vec: number[], limit?: number): Promise<VecRow[]>;
|
|
7
8
|
export declare function upsertPrimerEmbedding(id: number, vec: number[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings-sqlite.d.ts","sourceRoot":"","sources":["../../src/repositories/embeddings-sqlite.ts"],"names":[],"mappings":"AAQA,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"embeddings-sqlite.d.ts","sourceRoot":"","sources":["../../src/repositories/embeddings-sqlite.ts"],"names":[],"mappings":"AAQA,KAAK,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBjD,wBAAgB,UAAU,IAAI,IAAI,CAGjC;AAWD,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKpF;AAID,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpF;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKvF;AAID,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9G;AAED,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,UAAU,CAAC,EAAE,MAAM,GACpE,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAMrG;AAID,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjH;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,UAAU,CAAC,EAAE,MAAM,GAC9D,OAAO,CAAC,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAMrG;AAID,wBAAsB,yBAAyB,CAC3C,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,UAAO,GACnE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAc9B;AAED,wBAAsB,4BAA4B,CAC9C,UAAU,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,UAAO,GAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAc9B;AAED,4DAA4D;AAC5D,wBAAsB,eAAe,CACjC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,GAC7D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAgBzE;AAED,6CAA6C;AAC7C,wBAAsB,mBAAmB,CACrC,KAAK,EAAE,kBAAkB,GAAG,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GACpF,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBlF"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sqlite-vec helpers for vector operations on a SQLite backend.
|
|
3
|
+
* Uses float32 blobs and cosine distance, with scope filters before the limit.
|
|
4
|
+
* Existing vec0 tables are kept in sync when present; searches also work on
|
|
5
|
+
* databases created without those optional indexes.
|
|
6
|
+
*/
|
|
7
|
+
import { sqliteDatabasePath } from "../sqlite-schema.js";
|
|
1
8
|
let _vecDb = null;
|
|
2
9
|
async function getVecDb() {
|
|
3
10
|
if (_vecDb)
|
|
4
11
|
return _vecDb;
|
|
5
12
|
const url = process.env.DATABASE_URL ?? "";
|
|
6
|
-
const path = url
|
|
13
|
+
const path = sqliteDatabasePath(url);
|
|
7
14
|
const Database = (await import("better-sqlite3")).default;
|
|
8
15
|
const db = new Database(path);
|
|
9
16
|
try {
|
|
@@ -13,12 +20,19 @@ async function getVecDb() {
|
|
|
13
20
|
sqliteVec.load(db);
|
|
14
21
|
}
|
|
15
22
|
catch {
|
|
16
|
-
|
|
23
|
+
db.close();
|
|
24
|
+
throw new Error("SQLite vector search requires the sqlite-vec package. Reinstall ModLens with optional dependencies enabled.");
|
|
17
25
|
}
|
|
18
26
|
_vecDb = db;
|
|
19
27
|
return db;
|
|
20
28
|
}
|
|
29
|
+
export function closeVecDb() {
|
|
30
|
+
_vecDb?.close();
|
|
31
|
+
_vecDb = null;
|
|
32
|
+
}
|
|
21
33
|
function float32Blob(vec) {
|
|
34
|
+
if (!vec.length || vec.some(value => !Number.isFinite(value)))
|
|
35
|
+
throw new Error("Embedding must be a non-empty finite vector");
|
|
22
36
|
const buf = Buffer.allocUnsafe(vec.length * 4);
|
|
23
37
|
for (let i = 0; i < vec.length; i++)
|
|
24
38
|
buf.writeFloatLE(vec[i], i * 4);
|
|
@@ -38,15 +52,8 @@ export async function upsertDocEmbedding(id, vec) {
|
|
|
38
52
|
}
|
|
39
53
|
export async function searchDocsByVector(vec, limit = 5) {
|
|
40
54
|
const db = await getVecDb();
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
WHERE embedding MATCH ? AND k = ?
|
|
44
|
-
ORDER BY distance`).all(float32Blob(vec), limit);
|
|
45
|
-
return rows.map((r) => ({ id: r.id, similarity: 1 - r.distance }));
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
55
|
+
return db.prepare(`SELECT id, 1 - vec_distance_cosine(embedding, ?) AS similarity
|
|
56
|
+
FROM doc_entries WHERE embedding IS NOT NULL ORDER BY similarity DESC LIMIT ?`).all(float32Blob(vec), limit);
|
|
50
57
|
}
|
|
51
58
|
// ── primers ───────────────────────────────────────────────────────────────────
|
|
52
59
|
export async function upsertPrimerEmbedding(id, vec) {
|
|
@@ -60,15 +67,8 @@ export async function upsertPrimerEmbedding(id, vec) {
|
|
|
60
67
|
}
|
|
61
68
|
export async function searchPrimersByVector(vec, limit = 5) {
|
|
62
69
|
const db = await getVecDb();
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
WHERE embedding MATCH ? AND k = ?
|
|
66
|
-
ORDER BY distance`).all(float32Blob(vec), limit);
|
|
67
|
-
return rows.map((r) => ({ id: r.id, similarity: 1 - r.distance }));
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
70
|
+
return db.prepare(`SELECT id, 1 - vec_distance_cosine(embedding, ?) AS similarity
|
|
71
|
+
FROM primers WHERE embedding IS NOT NULL ORDER BY similarity DESC LIMIT ?`).all(float32Blob(vec), limit);
|
|
72
72
|
}
|
|
73
73
|
// ── mc_source_files ───────────────────────────────────────────────────────────
|
|
74
74
|
export async function upsertSourceEmbedding(id, vec, source = "local") {
|
|
@@ -82,25 +82,9 @@ export async function upsertSourceEmbedding(id, vec, source = "local") {
|
|
|
82
82
|
}
|
|
83
83
|
export async function searchSourceByVector(vec, mcVersionId, limit = 10, provenance) {
|
|
84
84
|
const db = await getVecDb();
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
JOIN mc_source_files s ON s.id = v.rowid
|
|
89
|
-
WHERE v.embedding MATCH ? AND v.k = ? AND s.mc_version_id = ? AND s.embed_source = ?
|
|
90
|
-
ORDER BY v.distance`
|
|
91
|
-
: `SELECT v.rowid AS id, s.class_name, s.embed_source, v.distance FROM vec_mc_source v
|
|
92
|
-
JOIN mc_source_files s ON s.id = v.rowid
|
|
93
|
-
WHERE v.embedding MATCH ? AND v.k = ? AND s.mc_version_id = ?
|
|
94
|
-
ORDER BY v.distance`;
|
|
95
|
-
const args = provenance
|
|
96
|
-
? [float32Blob(vec), limit, mcVersionId, provenance]
|
|
97
|
-
: [float32Blob(vec), limit, mcVersionId];
|
|
98
|
-
const rows = db.prepare(sql).all(...args);
|
|
99
|
-
return rows.map((r) => ({ id: r.id, class_name: r.class_name, embed_source: r.embed_source, similarity: 1 - r.distance }));
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return [];
|
|
103
|
-
}
|
|
85
|
+
return db.prepare(`SELECT id, class_name, embed_source, 1 - vec_distance_cosine(embedding, ?) AS similarity
|
|
86
|
+
FROM mc_source_files WHERE mc_version_id = ? AND embedding IS NOT NULL
|
|
87
|
+
${provenance ? "AND embed_source = ?" : ""} ORDER BY similarity DESC LIMIT ?`).all(float32Blob(vec), mcVersionId, ...(provenance ? [provenance] : []), limit);
|
|
104
88
|
}
|
|
105
89
|
// ── mod_source_files ──────────────────────────────────────────────────────────
|
|
106
90
|
export async function upsertModSourceEmbedding(id, vec, source = "local") {
|
|
@@ -114,25 +98,9 @@ export async function upsertModSourceEmbedding(id, vec, source = "local") {
|
|
|
114
98
|
}
|
|
115
99
|
export async function searchModSourceByVector(vec, modId, limit = 10, provenance) {
|
|
116
100
|
const db = await getVecDb();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
JOIN mod_source_files s ON s.id = v.rowid
|
|
121
|
-
WHERE v.embedding MATCH ? AND v.k = ? AND s.mod_id = ? AND s.embed_source = ?
|
|
122
|
-
ORDER BY v.distance`
|
|
123
|
-
: `SELECT v.rowid AS id, s.class_name, s.embed_source, v.distance FROM vec_mod_source v
|
|
124
|
-
JOIN mod_source_files s ON s.id = v.rowid
|
|
125
|
-
WHERE v.embedding MATCH ? AND v.k = ? AND s.mod_id = ?
|
|
126
|
-
ORDER BY v.distance`;
|
|
127
|
-
const args = provenance
|
|
128
|
-
? [float32Blob(vec), limit, modId, provenance]
|
|
129
|
-
: [float32Blob(vec), limit, modId];
|
|
130
|
-
const rows = db.prepare(sql).all(...args);
|
|
131
|
-
return rows.map((r) => ({ id: r.id, class_name: r.class_name, embed_source: r.embed_source, similarity: 1 - r.distance }));
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
return [];
|
|
135
|
-
}
|
|
101
|
+
return db.prepare(`SELECT id, class_name, embed_source, 1 - vec_distance_cosine(embedding, ?) AS similarity
|
|
102
|
+
FROM mod_source_files WHERE mod_id = ? AND embedding IS NOT NULL
|
|
103
|
+
${provenance ? "AND embed_source = ?" : ""} ORDER BY similarity DESC LIMIT ?`).all(float32Blob(vec), modId, ...(provenance ? [provenance] : []), limit);
|
|
136
104
|
}
|
|
137
105
|
// ── Class-name → ID lookups (for diff semantic enrichment) ───────────────────
|
|
138
106
|
export async function findSourceIdsByClassNames(classNames, mcVersionId, requireEmbedding = true) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings-sqlite.js","sourceRoot":"","sources":["../../src/repositories/embeddings-sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embeddings-sqlite.js","sourceRoot":"","sources":["../../src/repositories/embeddings-sqlite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,IAAI,MAAM,GAA6C,IAAI,CAAC;AAE5D,KAAK,UAAU,QAAQ;IACnB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1D,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC;QACD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACxC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACL,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6GAA6G,CAAC,CAAC;IACnI,CAAC;IACD,MAAM,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU;IACtB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,GAAG,IAAI,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,GAAa;IAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC9H,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO,GAAG,CAAC;AACf,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EAAU,EAAE,GAAa;IAC9D,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,6BAA6B;IAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAO,MAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,sCAAsC;IACtC,IAAI,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACnH,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAa,EAAE,KAAK,GAAG,CAAC;IAC7D,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC;sFACgE,CACjF,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,CAAa,CAAC;AAC/C,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAU,EAAE,GAAa;IACjE,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAO,MAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/G,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAa,EAAE,KAAK,GAAG,CAAC;IAChE,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC;kFAC4D,CAC7E,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,CAAa,CAAC;AAC/C,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAU,EAAE,GAAa,EAAE,SAAiB,OAAO;IAC3F,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAO,MAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrJ,IAAI,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,sEAAsE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACjH,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,GAAa,EAAE,WAAmB,EAAE,KAAK,GAAG,EAAE,EAAE,UAAmB;IAEnE,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC;;UAEZ,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mCAAmC,CAChF,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAA+F,CAAC;AACnL,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAU,EAAE,GAAa,EAAE,SAAiB,OAAO;IAC9F,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,MAAO,MAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACtJ,IAAI,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,uEAAuE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAClH,CAAC;IAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,GAAa,EAAE,KAAa,EAAE,KAAK,GAAG,EAAE,EAAE,UAAmB;IAE7D,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC;;UAEZ,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mCAAmC,CAChF,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAA+F,CAAC;AAC7K,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC3C,UAAoB,EAAE,WAAmB,EAAE,gBAAgB,GAAG,IAAI;IAElE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACnB;0DAC8C,YAAY,IAAI,SAAS,EAAE,CAC5E,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,UAAU,CAA8C,CAAC;QAC/E,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAC9C,UAAoB,EAAE,KAAa,EAAE,gBAAgB,GAAG,IAAI;IAE5D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC9C,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACnB;mDACuC,YAAY,IAAI,SAAS,EAAE,CACrE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,UAAU,CAA8C,CAAC;QACzE,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,KAA6C,EAAE,GAAa;IAE5D,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACnB,kDAAkD,KAAK;4BACvC,YAAY,6BAA6B,CAC5D,CAAC,GAAG,CAAC,GAAG,GAAG,CAAwF,CAAC;QACrG,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClC,MAAM,EAAE,CAAC,CAAC,YAAY;gBACtB,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;aACtE,CAAC,CAAC,CAAC,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,GAAG,EAAE,CAAC;IACrB,CAAC;AACL,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,KAA6C,EAAE,WAAmB,EAAE,OAAe;IAEnF,MAAM,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACnB,+CAA+C,KAAK;qBAC3C,WAAW;mCACG,CAC1B,CAAC,GAAG,CAAC,OAAO,CAA0D,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,CAAC,YAAY,KAAK,OAAO;gBAAE,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;iBACnD,IAAI,CAAC,CAAC,YAAY,KAAK,UAAU;gBAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC;iBAC9D,IAAI,CAAC,CAAC,YAAY,KAAK,WAAW;gBAAE,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC;;gBAChE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC;QACnC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,+BAA+B,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/repositories/embeddings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/repositories/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,15 +7,20 @@
|
|
|
7
7
|
* Run `npm run db:vector` once after docker-compose up to enable the extension.
|
|
8
8
|
*/
|
|
9
9
|
import { getDb } from "../db.js";
|
|
10
|
+
import { detectBackend } from "../db-backend.js";
|
|
10
11
|
function vecLiteral(vec) {
|
|
11
12
|
return `[${vec.join(",")}]`;
|
|
12
13
|
}
|
|
13
14
|
// ── doc_entries ───────────────────────────────────────────────────────────────
|
|
14
15
|
export async function upsertDocEmbedding(id, vec) {
|
|
16
|
+
if (detectBackend() === "sqlite")
|
|
17
|
+
return (await import("./embeddings-sqlite.js")).upsertDocEmbedding(id, vec);
|
|
15
18
|
const db = await getDb();
|
|
16
19
|
await db.$executeRawUnsafe(`UPDATE doc_entries SET embedding = $1::vector WHERE id = $2`, vecLiteral(vec), id);
|
|
17
20
|
}
|
|
18
21
|
export async function searchDocsByVector(vec, limit = 5) {
|
|
22
|
+
if (detectBackend() === "sqlite")
|
|
23
|
+
return (await import("./embeddings-sqlite.js")).searchDocsByVector(vec, limit);
|
|
19
24
|
const db = await getDb();
|
|
20
25
|
return db.$queryRawUnsafe(`SELECT id, (1 - (embedding <=> $1::vector))::float AS similarity
|
|
21
26
|
FROM doc_entries
|
|
@@ -25,10 +30,14 @@ export async function searchDocsByVector(vec, limit = 5) {
|
|
|
25
30
|
}
|
|
26
31
|
// ── primers ───────────────────────────────────────────────────────────────────
|
|
27
32
|
export async function upsertPrimerEmbedding(id, vec) {
|
|
33
|
+
if (detectBackend() === "sqlite")
|
|
34
|
+
return (await import("./embeddings-sqlite.js")).upsertPrimerEmbedding(id, vec);
|
|
28
35
|
const db = await getDb();
|
|
29
36
|
await db.$executeRawUnsafe(`UPDATE primers SET embedding = $1::vector WHERE id = $2`, vecLiteral(vec), id);
|
|
30
37
|
}
|
|
31
38
|
export async function searchPrimersByVector(vec, limit = 5) {
|
|
39
|
+
if (detectBackend() === "sqlite")
|
|
40
|
+
return (await import("./embeddings-sqlite.js")).searchPrimersByVector(vec, limit);
|
|
32
41
|
const db = await getDb();
|
|
33
42
|
return db.$queryRawUnsafe(`SELECT id, (1 - (embedding <=> $1::vector))::float AS similarity
|
|
34
43
|
FROM primers
|
|
@@ -38,10 +47,14 @@ export async function searchPrimersByVector(vec, limit = 5) {
|
|
|
38
47
|
}
|
|
39
48
|
// ── mc_source_files ───────────────────────────────────────────────────────────
|
|
40
49
|
export async function upsertSourceEmbedding(id, vec, source = "local") {
|
|
50
|
+
if (detectBackend() === "sqlite")
|
|
51
|
+
return (await import("./embeddings-sqlite.js")).upsertSourceEmbedding(id, vec, source);
|
|
41
52
|
const db = await getDb();
|
|
42
53
|
await db.$executeRawUnsafe(`UPDATE mc_source_files SET embedding = $1::vector, embed_source = $3, embed_updated_at = NOW() WHERE id = $2`, vecLiteral(vec), id, source);
|
|
43
54
|
}
|
|
44
55
|
export async function searchSourceByVector(vec, mcVersionId, limit = 10, provenance) {
|
|
56
|
+
if (detectBackend() === "sqlite")
|
|
57
|
+
return (await import("./embeddings-sqlite.js")).searchSourceByVector(vec, mcVersionId, limit, provenance);
|
|
45
58
|
const db = await getDb();
|
|
46
59
|
if (provenance) {
|
|
47
60
|
return db.$queryRawUnsafe(`SELECT id, class_name, embed_source, (1 - (embedding <=> $1::vector))::float AS similarity
|
|
@@ -60,18 +73,22 @@ export async function searchSourceByVector(vec, mcVersionId, limit = 10, provena
|
|
|
60
73
|
export async function countUnembedded(table, mcVersionId) {
|
|
61
74
|
const db = await getDb();
|
|
62
75
|
if (table === "mc_source_files" && mcVersionId !== undefined) {
|
|
63
|
-
const rows = await db.$queryRawUnsafe(`SELECT COUNT(*)
|
|
76
|
+
const rows = await db.$queryRawUnsafe(`SELECT CAST(COUNT(*) AS TEXT) AS count FROM mc_source_files WHERE mc_version_id = $1 AND embedding IS NULL`, mcVersionId);
|
|
64
77
|
return parseInt(rows[0].count, 10);
|
|
65
78
|
}
|
|
66
|
-
const rows = await db.$queryRawUnsafe(`SELECT COUNT(*)
|
|
79
|
+
const rows = await db.$queryRawUnsafe(`SELECT CAST(COUNT(*) AS TEXT) AS count FROM ${table} WHERE embedding IS NULL`);
|
|
67
80
|
return parseInt(rows[0].count, 10);
|
|
68
81
|
}
|
|
69
82
|
// ── mod_source_files ──────────────────────────────────────────────────────────
|
|
70
83
|
export async function upsertModSourceEmbedding(id, vec, source = "local") {
|
|
84
|
+
if (detectBackend() === "sqlite")
|
|
85
|
+
return (await import("./embeddings-sqlite.js")).upsertModSourceEmbedding(id, vec, source);
|
|
71
86
|
const db = await getDb();
|
|
72
87
|
await db.$executeRawUnsafe(`UPDATE mod_source_files SET embedding = $1::vector, embed_source = $3, embed_updated_at = NOW() WHERE id = $2`, vecLiteral(vec), id, source);
|
|
73
88
|
}
|
|
74
89
|
export async function searchModSourceByVector(vec, modId, limit = 10, provenance) {
|
|
90
|
+
if (detectBackend() === "sqlite")
|
|
91
|
+
return (await import("./embeddings-sqlite.js")).searchModSourceByVector(vec, modId, limit, provenance);
|
|
75
92
|
const db = await getDb();
|
|
76
93
|
if (provenance) {
|
|
77
94
|
return db.$queryRawUnsafe(`SELECT id, class_name, embed_source, (1 - (embedding <=> $1::vector))::float AS similarity
|
|
@@ -88,6 +105,8 @@ export async function searchModSourceByVector(vec, modId, limit = 10, provenance
|
|
|
88
105
|
}
|
|
89
106
|
// ── Class-name → ID lookups (for diff semantic enrichment) ───────────────────
|
|
90
107
|
export async function findSourceIdsByClassNames(classNames, mcVersionId, requireEmbedding = true) {
|
|
108
|
+
if (detectBackend() === "sqlite")
|
|
109
|
+
return (await import("./embeddings-sqlite.js")).findSourceIdsByClassNames(classNames, mcVersionId, requireEmbedding);
|
|
91
110
|
if (classNames.length === 0)
|
|
92
111
|
return new Map();
|
|
93
112
|
const db = await getDb();
|
|
@@ -97,6 +116,8 @@ export async function findSourceIdsByClassNames(classNames, mcVersionId, require
|
|
|
97
116
|
return new Map(rows.map((r) => [r.class_name, r.id]));
|
|
98
117
|
}
|
|
99
118
|
export async function findModSourceIdsByClassNames(classNames, modId, requireEmbedding = true) {
|
|
119
|
+
if (detectBackend() === "sqlite")
|
|
120
|
+
return (await import("./embeddings-sqlite.js")).findModSourceIdsByClassNames(classNames, modId, requireEmbedding);
|
|
100
121
|
if (classNames.length === 0)
|
|
101
122
|
return new Map();
|
|
102
123
|
const db = await getDb();
|
|
@@ -107,6 +128,8 @@ export async function findModSourceIdsByClassNames(classNames, modId, requireEmb
|
|
|
107
128
|
}
|
|
108
129
|
/** Get embed_source values for a set of source file IDs. */
|
|
109
130
|
export async function getEmbedSources(table, ids) {
|
|
131
|
+
if (detectBackend() === "sqlite")
|
|
132
|
+
return (await import("./embeddings-sqlite.js")).getEmbedSources(table, ids);
|
|
110
133
|
if (ids.length === 0)
|
|
111
134
|
return new Map();
|
|
112
135
|
const db = await getDb();
|
|
@@ -116,7 +139,7 @@ export async function getEmbedSources(table, ids) {
|
|
|
116
139
|
/** Count embeddings by source provenance. */
|
|
117
140
|
export async function countEmbedsBySource(table, scopeColumn, scopeId) {
|
|
118
141
|
const db = await getDb();
|
|
119
|
-
const rows = await db.$queryRawUnsafe(`SELECT embed_source, COUNT(*)
|
|
142
|
+
const rows = await db.$queryRawUnsafe(`SELECT embed_source, CAST(COUNT(*) AS TEXT) AS count FROM ${table}
|
|
120
143
|
WHERE ${scopeColumn} = $1 AND embedding IS NOT NULL
|
|
121
144
|
GROUP BY embed_source`, scopeId);
|
|
122
145
|
const result = { local: 0, registry: 0, community: 0, unknown: 0 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/repositories/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/repositories/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function getEmbeddingsRepo(): Promise<typeof import("./embeddings-sqlite.js")>;
|
|
1
|
+
export declare function getEmbeddingsRepo(): Promise<typeof import("./embeddings-sqlite.js") | typeof import("./embeddings.js")>;
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAQA,wBAAsB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAQA,wBAAsB,iBAAiB,wFAMtC"}
|
|
@@ -36,6 +36,9 @@ export type SyncModRow = {
|
|
|
36
36
|
id: number;
|
|
37
37
|
modId: string;
|
|
38
38
|
version: string;
|
|
39
|
+
mcVersion: string;
|
|
40
|
+
loader: string;
|
|
41
|
+
jarPath: string;
|
|
39
42
|
sha512: string | null;
|
|
40
43
|
murmur2: string | null;
|
|
41
44
|
modrinthId: string | null;
|
|
@@ -49,7 +52,7 @@ export type SyncModRow = {
|
|
|
49
52
|
* "1.21.1" from matching "1.21.11" — different patch releases are not
|
|
50
53
|
* cross-compatible, so a query for one must never pull in the other.
|
|
51
54
|
*/
|
|
52
|
-
export declare function mcVersionWhere(mcVersion: string): Prisma.ModWhereInput
|
|
55
|
+
export declare function mcVersionWhere(mcVersion: string): Promise<Prisma.ModWhereInput>;
|
|
53
56
|
export declare function findModById(id: number): Promise<Mod | null>;
|
|
54
57
|
export declare function findModByJarPath(jarPath: string): Promise<Mod | null>;
|
|
55
58
|
export declare function findModByModId(modId: string): Promise<Mod | null>;
|
|
@@ -105,9 +108,9 @@ export declare function searchModsFts(query: string, opts?: {
|
|
|
105
108
|
export declare function listModsForSourceUrls(query?: string): Promise<{
|
|
106
109
|
version: string;
|
|
107
110
|
modId: string;
|
|
111
|
+
loader: string;
|
|
108
112
|
metadata: Prisma.JsonValue;
|
|
109
113
|
displayName: string;
|
|
110
|
-
loader: string;
|
|
111
114
|
}[]>;
|
|
112
115
|
export declare function createMod(data: Prisma.ModCreateInput): Promise<Mod>;
|
|
113
116
|
export declare function updateMod(id: number, data: Prisma.ModUpdateInput): Promise<Mod>;
|
|
@@ -127,8 +130,8 @@ export declare function findModClassesForCrossModSearch(where1: Prisma.ModClassW
|
|
|
127
130
|
id: number;
|
|
128
131
|
modId: number;
|
|
129
132
|
className: string;
|
|
130
|
-
superClass: string | null;
|
|
131
133
|
interfaces: string[];
|
|
134
|
+
superClass: string | null;
|
|
132
135
|
accessFlags: number;
|
|
133
136
|
})[], ({
|
|
134
137
|
mod: {
|
|
@@ -140,8 +143,8 @@ export declare function findModClassesForCrossModSearch(where1: Prisma.ModClassW
|
|
|
140
143
|
id: number;
|
|
141
144
|
modId: number;
|
|
142
145
|
className: string;
|
|
143
|
-
superClass: string | null;
|
|
144
146
|
interfaces: string[];
|
|
147
|
+
superClass: string | null;
|
|
145
148
|
accessFlags: number;
|
|
146
149
|
})[]]>;
|
|
147
150
|
/**
|
|
@@ -163,9 +166,9 @@ export declare function findModTagsByPath(tagPath: string, registry?: string): P
|
|
|
163
166
|
mod: {
|
|
164
167
|
version: string;
|
|
165
168
|
modId: string;
|
|
169
|
+
loader: string;
|
|
166
170
|
displayName: string;
|
|
167
171
|
mcVersion: string;
|
|
168
|
-
loader: string;
|
|
169
172
|
};
|
|
170
173
|
} & {
|
|
171
174
|
id: number;
|