@creeperhost/modlens-mcp 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +938 -0
- package/dist/access-flags.d.ts +58 -0
- package/dist/access-flags.d.ts.map +1 -0
- package/dist/access-flags.js +79 -0
- package/dist/access-flags.js.map +1 -0
- package/dist/access-flags.test.d.ts +2 -0
- package/dist/access-flags.test.d.ts.map +1 -0
- package/dist/access-flags.test.js +189 -0
- package/dist/access-flags.test.js.map +1 -0
- package/dist/batch-ingest.d.ts +2 -0
- package/dist/batch-ingest.d.ts.map +1 -0
- package/dist/batch-ingest.js +54 -0
- package/dist/batch-ingest.js.map +1 -0
- package/dist/batch-resolve-mixins.d.ts +2 -0
- package/dist/batch-resolve-mixins.d.ts.map +1 -0
- package/dist/batch-resolve-mixins.js +36 -0
- package/dist/batch-resolve-mixins.js.map +1 -0
- package/dist/cache.d.ts +16 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +36 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1318 -0
- package/dist/cli.js.map +1 -0
- package/dist/curseforge.d.ts +53 -0
- package/dist/curseforge.d.ts.map +1 -0
- package/dist/curseforge.js +104 -0
- package/dist/curseforge.js.map +1 -0
- package/dist/db-backend.d.ts +17 -0
- package/dist/db-backend.d.ts.map +1 -0
- package/dist/db-backend.js +40 -0
- package/dist/db-backend.js.map +1 -0
- package/dist/db.d.ts +11 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +55 -0
- package/dist/db.js.map +1 -0
- package/dist/embed-queue.d.ts +12 -0
- package/dist/embed-queue.d.ts.map +1 -0
- package/dist/embed-queue.js +103 -0
- package/dist/embed-queue.js.map +1 -0
- package/dist/embeddings.d.ts +21 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +55 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/env-path.d.ts +19 -0
- package/dist/env-path.d.ts.map +1 -0
- package/dist/env-path.js +40 -0
- package/dist/env-path.js.map +1 -0
- package/dist/fetch-utils.d.ts +24 -0
- package/dist/fetch-utils.d.ts.map +1 -0
- package/dist/fetch-utils.js +73 -0
- package/dist/fetch-utils.js.map +1 -0
- package/dist/fetch-utils.test.d.ts +2 -0
- package/dist/fetch-utils.test.d.ts.map +1 -0
- package/dist/fetch-utils.test.js +133 -0
- package/dist/fetch-utils.test.js.map +1 -0
- package/dist/generated/sqlite/browser.d.ts +55 -0
- package/dist/generated/sqlite/browser.d.ts.map +1 -0
- package/dist/generated/sqlite/browser.js +18 -0
- package/dist/generated/sqlite/browser.js.map +1 -0
- package/dist/generated/sqlite/client.d.ts +72 -0
- package/dist/generated/sqlite/client.d.ts.map +1 -0
- package/dist/generated/sqlite/client.js +33 -0
- package/dist/generated/sqlite/client.js.map +1 -0
- package/dist/generated/sqlite/commonInputTypes.d.ts +387 -0
- package/dist/generated/sqlite/commonInputTypes.d.ts.map +1 -0
- package/dist/generated/sqlite/commonInputTypes.js +11 -0
- package/dist/generated/sqlite/commonInputTypes.js.map +1 -0
- package/dist/generated/sqlite/enums.d.ts +2 -0
- package/dist/generated/sqlite/enums.d.ts.map +1 -0
- package/dist/generated/sqlite/enums.js +11 -0
- package/dist/generated/sqlite/enums.js.map +1 -0
- package/dist/generated/sqlite/internal/class.d.ts +226 -0
- package/dist/generated/sqlite/internal/class.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/class.js +84 -0
- package/dist/generated/sqlite/internal/class.js.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespace.d.ts +1344 -0
- package/dist/generated/sqlite/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespace.js +220 -0
- package/dist/generated/sqlite/internal/prismaNamespace.js.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts +204 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.d.ts.map +1 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js +191 -0
- package/dist/generated/sqlite/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/generated/sqlite/models/DocEntry.d.ts +1223 -0
- package/dist/generated/sqlite/models/DocEntry.d.ts.map +1 -0
- package/dist/generated/sqlite/models/DocEntry.js +2 -0
- package/dist/generated/sqlite/models/DocEntry.js.map +1 -0
- package/dist/generated/sqlite/models/McSourceFile.d.ts +1289 -0
- package/dist/generated/sqlite/models/McSourceFile.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McSourceFile.js +2 -0
- package/dist/generated/sqlite/models/McSourceFile.js.map +1 -0
- package/dist/generated/sqlite/models/McVersion.d.ts +1315 -0
- package/dist/generated/sqlite/models/McVersion.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McVersion.js +2 -0
- package/dist/generated/sqlite/models/McVersion.js.map +1 -0
- package/dist/generated/sqlite/models/McVersionDiff.d.ts +1061 -0
- package/dist/generated/sqlite/models/McVersionDiff.d.ts.map +1 -0
- package/dist/generated/sqlite/models/McVersionDiff.js +2 -0
- package/dist/generated/sqlite/models/McVersionDiff.js.map +1 -0
- package/dist/generated/sqlite/models/Mod.d.ts +2396 -0
- package/dist/generated/sqlite/models/Mod.d.ts.map +1 -0
- package/dist/generated/sqlite/models/Mod.js +2 -0
- package/dist/generated/sqlite/models/Mod.js.map +1 -0
- package/dist/generated/sqlite/models/ModClass.d.ts +1254 -0
- package/dist/generated/sqlite/models/ModClass.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModClass.js +2 -0
- package/dist/generated/sqlite/models/ModClass.js.map +1 -0
- package/dist/generated/sqlite/models/ModSourceFile.d.ts +1283 -0
- package/dist/generated/sqlite/models/ModSourceFile.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModSourceFile.js +2 -0
- package/dist/generated/sqlite/models/ModSourceFile.js.map +1 -0
- package/dist/generated/sqlite/models/ModTag.d.ts +1278 -0
- package/dist/generated/sqlite/models/ModTag.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModTag.js +2 -0
- package/dist/generated/sqlite/models/ModTag.js.map +1 -0
- package/dist/generated/sqlite/models/ModVersionDiff.d.ts +1073 -0
- package/dist/generated/sqlite/models/ModVersionDiff.d.ts.map +1 -0
- package/dist/generated/sqlite/models/ModVersionDiff.js +2 -0
- package/dist/generated/sqlite/models/ModVersionDiff.js.map +1 -0
- package/dist/generated/sqlite/models/Primer.d.ts +1319 -0
- package/dist/generated/sqlite/models/Primer.d.ts.map +1 -0
- package/dist/generated/sqlite/models/Primer.js +2 -0
- package/dist/generated/sqlite/models/Primer.js.map +1 -0
- package/dist/generated/sqlite/models.d.ts +12 -0
- package/dist/generated/sqlite/models.d.ts.map +1 -0
- package/dist/generated/sqlite/models.js +2 -0
- package/dist/generated/sqlite/models.js.map +1 -0
- package/dist/jar.d.ts +7 -0
- package/dist/jar.d.ts.map +1 -0
- package/dist/jar.js +52 -0
- package/dist/jar.js.map +1 -0
- package/dist/java-tools.d.ts +46 -0
- package/dist/java-tools.d.ts.map +1 -0
- package/dist/java-tools.js +263 -0
- package/dist/java-tools.js.map +1 -0
- package/dist/launcher.d.ts +3 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +105 -0
- package/dist/launcher.js.map +1 -0
- package/dist/mappings.d.ts +95 -0
- package/dist/mappings.d.ts.map +1 -0
- package/dist/mappings.js +1094 -0
- package/dist/mappings.js.map +1 -0
- package/dist/mappings.test.d.ts +2 -0
- package/dist/mappings.test.d.ts.map +1 -0
- package/dist/mappings.test.js +161 -0
- package/dist/mappings.test.js.map +1 -0
- package/dist/minecraft.d.ts +21 -0
- package/dist/minecraft.d.ts.map +1 -0
- package/dist/minecraft.js +70 -0
- package/dist/minecraft.js.map +1 -0
- package/dist/modpacks-ch.d.ts +224 -0
- package/dist/modpacks-ch.d.ts.map +1 -0
- package/dist/modpacks-ch.js +146 -0
- package/dist/modpacks-ch.js.map +1 -0
- package/dist/modrinth.d.ts +67 -0
- package/dist/modrinth.d.ts.map +1 -0
- package/dist/modrinth.js +88 -0
- package/dist/modrinth.js.map +1 -0
- package/dist/platform-adapter.d.ts +23 -0
- package/dist/platform-adapter.d.ts.map +1 -0
- package/dist/platform-adapter.js +2 -0
- package/dist/platform-adapter.js.map +1 -0
- package/dist/platform.d.ts +47 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +175 -0
- package/dist/platform.js.map +1 -0
- package/dist/processor.d.ts +51 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +655 -0
- package/dist/processor.js.map +1 -0
- package/dist/processor.test.d.ts +2 -0
- package/dist/processor.test.d.ts.map +1 -0
- package/dist/processor.test.js +629 -0
- package/dist/processor.test.js.map +1 -0
- package/dist/repositories/embeddings-sqlite.d.ts +38 -0
- package/dist/repositories/embeddings-sqlite.d.ts.map +1 -0
- package/dist/repositories/embeddings-sqlite.js +208 -0
- package/dist/repositories/embeddings-sqlite.js.map +1 -0
- package/dist/repositories/embeddings.d.ts +40 -0
- package/dist/repositories/embeddings.d.ts.map +1 -0
- package/dist/repositories/embeddings.js +136 -0
- package/dist/repositories/embeddings.js.map +1 -0
- package/dist/repositories/index.d.ts +2 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +15 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/mcVersion.d.ts +16 -0
- package/dist/repositories/mcVersion.d.ts.map +1 -0
- package/dist/repositories/mcVersion.js +52 -0
- package/dist/repositories/mcVersion.js.map +1 -0
- package/dist/repositories/mod.d.ts +241 -0
- package/dist/repositories/mod.d.ts.map +1 -0
- package/dist/repositories/mod.js +342 -0
- package/dist/repositories/mod.js.map +1 -0
- package/dist/repositories/packs.d.ts +44 -0
- package/dist/repositories/packs.d.ts.map +1 -0
- package/dist/repositories/packs.js +138 -0
- package/dist/repositories/packs.js.map +1 -0
- package/dist/search-adapter.d.ts +34 -0
- package/dist/search-adapter.d.ts.map +1 -0
- package/dist/search-adapter.js +195 -0
- package/dist/search-adapter.js.map +1 -0
- package/dist/search.d.ts +6 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +54 -0
- package/dist/search.js.map +1 -0
- package/dist/search.test.d.ts +2 -0
- package/dist/search.test.d.ts.map +1 -0
- package/dist/search.test.js +71 -0
- package/dist/search.test.js.map +1 -0
- package/dist/security.d.ts +98 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +446 -0
- package/dist/security.js.map +1 -0
- package/dist/security.test.d.ts +2 -0
- package/dist/security.test.d.ts.map +1 -0
- package/dist/security.test.js +687 -0
- package/dist/security.test.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1465 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +1113 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/bytecode.d.ts +129 -0
- package/dist/tools/bytecode.d.ts.map +1 -0
- package/dist/tools/bytecode.js +679 -0
- package/dist/tools/bytecode.js.map +1 -0
- package/dist/tools/catalog.d.ts +54 -0
- package/dist/tools/catalog.d.ts.map +1 -0
- package/dist/tools/catalog.js +249 -0
- package/dist/tools/catalog.js.map +1 -0
- package/dist/tools/compat-check.d.ts +23 -0
- package/dist/tools/compat-check.d.ts.map +1 -0
- package/dist/tools/compat-check.js +250 -0
- package/dist/tools/compat-check.js.map +1 -0
- package/dist/tools/compat-check.test.d.ts +2 -0
- package/dist/tools/compat-check.test.d.ts.map +1 -0
- package/dist/tools/compat-check.test.js +179 -0
- package/dist/tools/compat-check.test.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +10 -0
- package/dist/tools/diagnostics.d.ts.map +1 -0
- package/dist/tools/diagnostics.js +133 -0
- package/dist/tools/diagnostics.js.map +1 -0
- package/dist/tools/diagnostics.test.d.ts +2 -0
- package/dist/tools/diagnostics.test.d.ts.map +1 -0
- package/dist/tools/diagnostics.test.js +168 -0
- package/dist/tools/diagnostics.test.js.map +1 -0
- package/dist/tools/docs.d.ts +19 -0
- package/dist/tools/docs.d.ts.map +1 -0
- package/dist/tools/docs.js +230 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/embed-registry.d.ts +125 -0
- package/dist/tools/embed-registry.d.ts.map +1 -0
- package/dist/tools/embed-registry.js +560 -0
- package/dist/tools/embed-registry.js.map +1 -0
- package/dist/tools/gradle.d.ts +16 -0
- package/dist/tools/gradle.d.ts.map +1 -0
- package/dist/tools/gradle.js +182 -0
- package/dist/tools/gradle.js.map +1 -0
- package/dist/tools/graphify.d.ts +144 -0
- package/dist/tools/graphify.d.ts.map +1 -0
- package/dist/tools/graphify.js +798 -0
- package/dist/tools/graphify.js.map +1 -0
- package/dist/tools/graphify.test.d.ts +2 -0
- package/dist/tools/graphify.test.d.ts.map +1 -0
- package/dist/tools/graphify.test.js +39 -0
- package/dist/tools/graphify.test.js.map +1 -0
- package/dist/tools/ingest.d.ts +85 -0
- package/dist/tools/ingest.d.ts.map +1 -0
- package/dist/tools/ingest.js +477 -0
- package/dist/tools/ingest.js.map +1 -0
- package/dist/tools/ingest.test.d.ts +2 -0
- package/dist/tools/ingest.test.d.ts.map +1 -0
- package/dist/tools/ingest.test.js +340 -0
- package/dist/tools/ingest.test.js.map +1 -0
- package/dist/tools/kubejs.d.ts +37 -0
- package/dist/tools/kubejs.d.ts.map +1 -0
- package/dist/tools/kubejs.js +245 -0
- package/dist/tools/kubejs.js.map +1 -0
- package/dist/tools/mappings.d.ts +17 -0
- package/dist/tools/mappings.d.ts.map +1 -0
- package/dist/tools/mappings.js +85 -0
- package/dist/tools/mappings.js.map +1 -0
- package/dist/tools/mc-fts.d.ts +101 -0
- package/dist/tools/mc-fts.d.ts.map +1 -0
- package/dist/tools/mc-fts.js +279 -0
- package/dist/tools/mc-fts.js.map +1 -0
- package/dist/tools/mcmeta.d.ts +41 -0
- package/dist/tools/mcmeta.d.ts.map +1 -0
- package/dist/tools/mcmeta.js +365 -0
- package/dist/tools/mcmeta.js.map +1 -0
- package/dist/tools/mixin-scan.d.ts +113 -0
- package/dist/tools/mixin-scan.d.ts.map +1 -0
- package/dist/tools/mixin-scan.js +433 -0
- package/dist/tools/mixin-scan.js.map +1 -0
- package/dist/tools/mod-data.d.ts +83 -0
- package/dist/tools/mod-data.d.ts.map +1 -0
- package/dist/tools/mod-data.js +630 -0
- package/dist/tools/mod-data.js.map +1 -0
- package/dist/tools/mod-tags.d.ts +59 -0
- package/dist/tools/mod-tags.d.ts.map +1 -0
- package/dist/tools/mod-tags.js +279 -0
- package/dist/tools/mod-tags.js.map +1 -0
- package/dist/tools/mod-tags.test.d.ts +2 -0
- package/dist/tools/mod-tags.test.d.ts.map +1 -0
- package/dist/tools/mod-tags.test.js +75 -0
- package/dist/tools/mod-tags.test.js.map +1 -0
- package/dist/tools/modpacks-ch.d.ts +257 -0
- package/dist/tools/modpacks-ch.d.ts.map +1 -0
- package/dist/tools/modpacks-ch.js +516 -0
- package/dist/tools/modpacks-ch.js.map +1 -0
- package/dist/tools/packtools.d.ts +113 -0
- package/dist/tools/packtools.d.ts.map +1 -0
- package/dist/tools/packtools.js +809 -0
- package/dist/tools/packtools.js.map +1 -0
- package/dist/tools/packtools.test.d.ts +2 -0
- package/dist/tools/packtools.test.d.ts.map +1 -0
- package/dist/tools/packtools.test.js +99 -0
- package/dist/tools/packtools.test.js.map +1 -0
- package/dist/tools/platform.d.ts +68 -0
- package/dist/tools/platform.d.ts.map +1 -0
- package/dist/tools/platform.js +452 -0
- package/dist/tools/platform.js.map +1 -0
- package/dist/tools/primers.d.ts +36 -0
- package/dist/tools/primers.d.ts.map +1 -0
- package/dist/tools/primers.js +451 -0
- package/dist/tools/primers.js.map +1 -0
- package/dist/tools/reports.d.ts +19 -0
- package/dist/tools/reports.d.ts.map +1 -0
- package/dist/tools/reports.js +573 -0
- package/dist/tools/reports.js.map +1 -0
- package/dist/tools/source.d.ts +10 -0
- package/dist/tools/source.d.ts.map +1 -0
- package/dist/tools/source.js +101 -0
- package/dist/tools/source.js.map +1 -0
- package/dist/tools/vanilla-data.d.ts +127 -0
- package/dist/tools/vanilla-data.d.ts.map +1 -0
- package/dist/tools/vanilla-data.js +824 -0
- package/dist/tools/vanilla-data.js.map +1 -0
- package/dist/tools/vanilla.d.ts +171 -0
- package/dist/tools/vanilla.d.ts.map +1 -0
- package/dist/tools/vanilla.js +612 -0
- package/dist/tools/vanilla.js.map +1 -0
- package/dist/tools/version-diff.d.ts +113 -0
- package/dist/tools/version-diff.d.ts.map +1 -0
- package/dist/tools/version-diff.js +519 -0
- package/dist/tools/version-diff.js.map +1 -0
- package/dist/tools/version-diff.test.d.ts +2 -0
- package/dist/tools/version-diff.test.d.ts.map +1 -0
- package/dist/tools/version-diff.test.js +102 -0
- package/dist/tools/version-diff.test.js.map +1 -0
- package/dist/validate.d.ts +19 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +54 -0
- package/dist/validate.js.map +1 -0
- package/dist/validate.test.d.ts +2 -0
- package/dist/validate.test.d.ts.map +1 -0
- package/dist/validate.test.js +73 -0
- package/dist/validate.test.js.map +1 -0
- package/package.json +62 -0
- package/prisma/backends/schema.sqlite.prisma +215 -0
- package/prisma/backends/template.db +0 -0
- package/prisma/schema.prisma +303 -0
- package/scripts/backup.mjs +151 -0
- package/scripts/build-template-db.mjs +38 -0
- package/scripts/check-atm10.mjs +27 -0
- package/scripts/check-sync.mjs +13 -0
- package/scripts/create-fts-index.mjs +50 -0
- package/scripts/enable-pgvector.mjs +90 -0
- package/scripts/enable-sqlite-vec.mjs +158 -0
- package/scripts/migrate-backend.mjs +188 -0
- package/scripts/migrate-embed-provenance.mjs +80 -0
- package/scripts/migrate-metadata-source.mjs +62 -0
- package/scripts/migrate-mod-source-files.mjs +67 -0
- package/scripts/post-update.mjs +77 -0
- package/scripts/verify-atm10.mjs +63 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { PlatformAdapter } from "./platform-adapter.js";
|
|
2
|
+
export interface CFProject {
|
|
3
|
+
id: number;
|
|
4
|
+
name: string;
|
|
5
|
+
slug: string;
|
|
6
|
+
links: {
|
|
7
|
+
sourceUrl?: string;
|
|
8
|
+
websiteUrl?: string;
|
|
9
|
+
};
|
|
10
|
+
latestFiles: CFFile[];
|
|
11
|
+
}
|
|
12
|
+
export interface CFFile {
|
|
13
|
+
id: number;
|
|
14
|
+
displayName: string;
|
|
15
|
+
fileName: string;
|
|
16
|
+
fileDate: string;
|
|
17
|
+
downloadUrl: string;
|
|
18
|
+
gameVersions: string[];
|
|
19
|
+
}
|
|
20
|
+
export declare function lookupByFingerprint(murmur2: number): Promise<CFProject | null>;
|
|
21
|
+
export declare function getProject(modId: number): Promise<CFProject | null>;
|
|
22
|
+
export declare function getLatestFile(modId: number, mcVersion?: string): Promise<CFFile | null>;
|
|
23
|
+
export interface CFSearchHit {
|
|
24
|
+
id: number;
|
|
25
|
+
name: string;
|
|
26
|
+
slug: string;
|
|
27
|
+
summary: string;
|
|
28
|
+
downloadCount: number;
|
|
29
|
+
dateModified: string;
|
|
30
|
+
latestFiles: CFFile[];
|
|
31
|
+
links: {
|
|
32
|
+
sourceUrl?: string;
|
|
33
|
+
websiteUrl?: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Search CurseForge mods by name/keyword. Requires CURSEFORGE_API_KEY.
|
|
38
|
+
* Returns null if no API key is configured.
|
|
39
|
+
*/
|
|
40
|
+
export declare function searchMods(query: string, opts?: {
|
|
41
|
+
loader?: string;
|
|
42
|
+
mcVersion?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Promise<CFSearchHit[] | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Get all files for a CF project, optionally filtered by MC version.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getProjectFiles(modId: number, opts?: {
|
|
49
|
+
mcVersion?: string;
|
|
50
|
+
limit?: number;
|
|
51
|
+
}): Promise<CFFile[]>;
|
|
52
|
+
export declare const curseforgePlatformAdapter: PlatformAdapter;
|
|
53
|
+
//# sourceMappingURL=curseforge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curseforge.d.ts","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAY7D,MAAM,WAAW,SAAS;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC;IACpD,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAapF;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAKzE;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO7F;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACnE,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAc/B;AAUD;;GAEG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,eAAO,MAAM,yBAAyB,EAAE,eAevC,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { fetchWithRetry, safeJson } from "./fetch-utils.js";
|
|
2
|
+
const CF_BASE = "https://api.curseforge.com/v1";
|
|
3
|
+
const CF_KEY = process.env.CURSEFORGE_API_KEY ?? "";
|
|
4
|
+
const MINECRAFT_GAME_ID = 432;
|
|
5
|
+
const headers = {
|
|
6
|
+
"x-api-key": CF_KEY,
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
"User-Agent": "modlens-mcp/1.0",
|
|
9
|
+
};
|
|
10
|
+
export async function lookupByFingerprint(murmur2) {
|
|
11
|
+
if (!Number.isFinite(murmur2) || murmur2 < 0)
|
|
12
|
+
throw new Error(`Invalid murmur2 fingerprint: expected non-negative integer, got ${murmur2}`);
|
|
13
|
+
const res = await fetchWithRetry(`${CF_BASE}/fingerprints/${MINECRAFT_GAME_ID}`, {
|
|
14
|
+
method: "POST",
|
|
15
|
+
headers,
|
|
16
|
+
body: JSON.stringify({ fingerprints: [murmur2] }),
|
|
17
|
+
});
|
|
18
|
+
if (!res.ok)
|
|
19
|
+
return null;
|
|
20
|
+
const data = await safeJson(res, "CurseForge fingerprint");
|
|
21
|
+
const match = data.data.exactMatches[0];
|
|
22
|
+
if (!match)
|
|
23
|
+
return null;
|
|
24
|
+
return getProject(match.id);
|
|
25
|
+
}
|
|
26
|
+
export async function getProject(modId) {
|
|
27
|
+
const res = await fetchWithRetry(`${CF_BASE}/mods/${modId}`, { headers });
|
|
28
|
+
if (!res.ok)
|
|
29
|
+
return null;
|
|
30
|
+
const data = await safeJson(res, "CurseForge project");
|
|
31
|
+
return data.data;
|
|
32
|
+
}
|
|
33
|
+
export async function getLatestFile(modId, mcVersion) {
|
|
34
|
+
const project = await getProject(modId);
|
|
35
|
+
if (!project)
|
|
36
|
+
return null;
|
|
37
|
+
const files = project.latestFiles.filter((f) => mcVersion ? f.gameVersions.includes(mcVersion) : true);
|
|
38
|
+
return files[0] ?? null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Search CurseForge mods by name/keyword. Requires CURSEFORGE_API_KEY.
|
|
42
|
+
* Returns null if no API key is configured.
|
|
43
|
+
*/
|
|
44
|
+
export async function searchMods(query, opts = {}) {
|
|
45
|
+
if (!CF_KEY)
|
|
46
|
+
return null;
|
|
47
|
+
const params = new URLSearchParams({
|
|
48
|
+
gameId: String(MINECRAFT_GAME_ID),
|
|
49
|
+
classId: "6", // 6 = Mods category on CurseForge
|
|
50
|
+
searchFilter: query,
|
|
51
|
+
pageSize: String(opts.limit ?? 20),
|
|
52
|
+
});
|
|
53
|
+
if (opts.mcVersion)
|
|
54
|
+
params.set("gameVersion", opts.mcVersion);
|
|
55
|
+
if (opts.loader)
|
|
56
|
+
params.set("modLoaderType", modloaderToEnum(opts.loader));
|
|
57
|
+
const res = await fetchWithRetry(`${CF_BASE}/mods/search?${params}`, { headers });
|
|
58
|
+
if (!res.ok)
|
|
59
|
+
return null;
|
|
60
|
+
const data = await safeJson(res, "CurseForge search");
|
|
61
|
+
return data.data;
|
|
62
|
+
}
|
|
63
|
+
/** Map a loader string to CurseForge's modLoaderType enum value. */
|
|
64
|
+
function modloaderToEnum(loader) {
|
|
65
|
+
const map = {
|
|
66
|
+
forge: "1", fabric: "4", quilt: "5", neoforge: "6",
|
|
67
|
+
};
|
|
68
|
+
return map[loader.toLowerCase()] ?? "0";
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get all files for a CF project, optionally filtered by MC version.
|
|
72
|
+
*/
|
|
73
|
+
export async function getProjectFiles(modId, opts = {}) {
|
|
74
|
+
if (!CF_KEY)
|
|
75
|
+
return [];
|
|
76
|
+
const params = new URLSearchParams({ pageSize: String(opts.limit ?? 20) });
|
|
77
|
+
if (opts.mcVersion)
|
|
78
|
+
params.set("gameVersion", opts.mcVersion);
|
|
79
|
+
const res = await fetchWithRetry(`${CF_BASE}/mods/${modId}/files?${params}`, { headers });
|
|
80
|
+
if (!res.ok)
|
|
81
|
+
return [];
|
|
82
|
+
const data = await safeJson(res, "CurseForge files");
|
|
83
|
+
return data.data;
|
|
84
|
+
}
|
|
85
|
+
export const curseforgePlatformAdapter = {
|
|
86
|
+
name: "curseforge",
|
|
87
|
+
async lookup({ murmur2 }) {
|
|
88
|
+
if (!murmur2)
|
|
89
|
+
return null;
|
|
90
|
+
const m = parseInt(murmur2, 10);
|
|
91
|
+
if (isNaN(m))
|
|
92
|
+
return null;
|
|
93
|
+
const proj = await lookupByFingerprint(m).catch(() => null);
|
|
94
|
+
if (!proj)
|
|
95
|
+
return null;
|
|
96
|
+
return {
|
|
97
|
+
platform: "curseforge",
|
|
98
|
+
projectId: proj.id,
|
|
99
|
+
slug: proj.slug,
|
|
100
|
+
sourceUrl: proj.links?.sourceUrl,
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=curseforge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curseforge.js","sourceRoot":"","sources":["../src/curseforge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend detection from DATABASE_URL shape.
|
|
3
|
+
* This is the single runtime signal for which DB driver to use.
|
|
4
|
+
*/
|
|
5
|
+
export type Backend = "postgres" | "pglite" | "sqlite";
|
|
6
|
+
export declare function detectBackend(): Backend;
|
|
7
|
+
/**
|
|
8
|
+
* Serialize an array to a JSON string for SQLite String columns.
|
|
9
|
+
* On postgres/pglite, returns the original value unchanged.
|
|
10
|
+
*/
|
|
11
|
+
export declare function serializeArray<T>(value: T[]): T[] | string;
|
|
12
|
+
/**
|
|
13
|
+
* Deserialize a SQLite JSON string column back to an array.
|
|
14
|
+
* On postgres/pglite, returns the original value unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export declare function deserializeArray<T>(value: T[] | string | null | undefined): T[];
|
|
17
|
+
//# sourceMappingURL=db-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-backend.d.ts","sourceRoot":"","sources":["../src/db-backend.ts"],"names":[],"mappings":"AACA;;;GAGG;AAEH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,wBAAgB,aAAa,IAAI,OAAO,CAOvC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAG1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAK/E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/db-backend.ts
|
|
2
|
+
/**
|
|
3
|
+
* Backend detection from DATABASE_URL shape.
|
|
4
|
+
* This is the single runtime signal for which DB driver to use.
|
|
5
|
+
*/
|
|
6
|
+
export function detectBackend() {
|
|
7
|
+
const url = process.env.DATABASE_URL ?? "";
|
|
8
|
+
if (url.startsWith("postgresql://") || url.startsWith("postgres://"))
|
|
9
|
+
return "postgres";
|
|
10
|
+
if (url.startsWith("pglite://") || url.startsWith("pglite:"))
|
|
11
|
+
return "pglite";
|
|
12
|
+
// SQLite is the default: explicit `file:`/`.db` URLs, and also the no-URL
|
|
13
|
+
// case (zero-config embedded backend the launcher bootstraps on first run).
|
|
14
|
+
return "sqlite";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Serialize an array to a JSON string for SQLite String columns.
|
|
18
|
+
* On postgres/pglite, returns the original value unchanged.
|
|
19
|
+
*/
|
|
20
|
+
export function serializeArray(value) {
|
|
21
|
+
if (detectBackend() === "sqlite")
|
|
22
|
+
return JSON.stringify(value);
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Deserialize a SQLite JSON string column back to an array.
|
|
27
|
+
* On postgres/pglite, returns the original value unchanged.
|
|
28
|
+
*/
|
|
29
|
+
export function deserializeArray(value) {
|
|
30
|
+
if (typeof value === "string") {
|
|
31
|
+
try {
|
|
32
|
+
return JSON.parse(value);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return value ?? [];
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=db-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-backend.js","sourceRoot":"","sources":["../src/db-backend.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;GAGG;AAIH,MAAM,UAAU,aAAa;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,UAAU,CAAC;IACxF,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9E,0EAA0E;IAC1E,4EAA4E;IAC5E,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,KAAU;IACxC,IAAI,aAAa,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAI,KAAsC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAQ,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;IACjE,CAAC;IACD,OAAQ,KAAa,IAAI,EAAE,CAAC;AAChC,CAAC"}
|
package/dist/db.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the shared Prisma client, initializing it on first call.
|
|
4
|
+
* Backend is detected from DATABASE_URL shape (see db-backend.ts).
|
|
5
|
+
* PGlite and SQLite branches are wired in P3 and P2 respectively.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getDb(): Promise<PrismaClient>;
|
|
8
|
+
/** @deprecated Use `await getDb()` instead. Kept for incremental migration. */
|
|
9
|
+
export declare function db(): PrismaClient;
|
|
10
|
+
export declare function disconnect(): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=db.d.ts.map
|
package/dist/db.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C;;;;GAIG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,CAoCnD;AAED,+EAA+E;AAC/E,wBAAgB,EAAE,IAAI,YAAY,CAOjC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhD"}
|
package/dist/db.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
import { detectBackend } from "./db-backend.js";
|
|
3
|
+
let _client = null;
|
|
4
|
+
/**
|
|
5
|
+
* Returns the shared Prisma client, initializing it on first call.
|
|
6
|
+
* Backend is detected from DATABASE_URL shape (see db-backend.ts).
|
|
7
|
+
* PGlite and SQLite branches are wired in P3 and P2 respectively.
|
|
8
|
+
*/
|
|
9
|
+
export async function getDb() {
|
|
10
|
+
if (_client)
|
|
11
|
+
return _client;
|
|
12
|
+
const backend = detectBackend();
|
|
13
|
+
if (backend === "sqlite") {
|
|
14
|
+
const url = process.env.DATABASE_URL ?? "";
|
|
15
|
+
const { PrismaBetterSQLite3 } = await import("@prisma/adapter-better-sqlite3");
|
|
16
|
+
const adapter = new PrismaBetterSQLite3({ url });
|
|
17
|
+
const { PrismaClient: SQLiteClient } = await import("./generated/sqlite/client.js");
|
|
18
|
+
_client = new SQLiteClient({ adapter });
|
|
19
|
+
return _client;
|
|
20
|
+
}
|
|
21
|
+
if (backend === "pglite") {
|
|
22
|
+
const { PGlite } = await import("@electric-sql/pglite");
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
24
|
+
// @ts-ignore — optional peer dep, present only at runtime on supported platforms
|
|
25
|
+
const { PrismaPGlite } = await import("@prisma/adapter-pglite");
|
|
26
|
+
// pglite:///absolute/path → /absolute/path
|
|
27
|
+
// pglite://relative/path → relative/path
|
|
28
|
+
const dataDir = (process.env.DATABASE_URL ?? "").replace(/^pglite:\/\//, "");
|
|
29
|
+
if (!dataDir) {
|
|
30
|
+
throw new Error("DATABASE_URL for PGlite must be pglite:///path/to/data — data directory path is empty.");
|
|
31
|
+
}
|
|
32
|
+
const pg = await PGlite.create(dataDir);
|
|
33
|
+
const adapter = new PrismaPGlite(pg);
|
|
34
|
+
_client = new PrismaClient({ adapter });
|
|
35
|
+
return _client;
|
|
36
|
+
}
|
|
37
|
+
_client = new PrismaClient({
|
|
38
|
+
log: process.env.DEBUG ? ["query", "error"] : ["error"],
|
|
39
|
+
});
|
|
40
|
+
return _client;
|
|
41
|
+
}
|
|
42
|
+
/** @deprecated Use `await getDb()` instead. Kept for incremental migration. */
|
|
43
|
+
export function db() {
|
|
44
|
+
if (!_client) {
|
|
45
|
+
_client = new PrismaClient({
|
|
46
|
+
log: process.env.DEBUG ? ["query", "error"] : ["error"],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return _client;
|
|
50
|
+
}
|
|
51
|
+
export async function disconnect() {
|
|
52
|
+
await _client?.$disconnect();
|
|
53
|
+
_client = null;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=db.js.map
|
package/dist/db.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,IAAI,OAAO,GAAwB,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK;IACvB,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3C,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;QACpF,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAA4B,CAAC;QACnE,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACxD,6DAA6D;QAC7D,iFAAiF;QACjF,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAChE,2CAA2C;QAC3C,0CAA0C;QAC1C,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACX,wFAAwF,CAC3F,CAAC;QACN,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,IAAI,YAAY,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;KAC1D,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,EAAE;IACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,GAAG,IAAI,YAAY,CAAC;YACvB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAC1D,CAAC,CAAC;IACP,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,MAAM,OAAO,EAAE,WAAW,EAAE,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Add a mod to the embedding queue.
|
|
3
|
+
* Safe to call multiple times — duplicates are ignored.
|
|
4
|
+
* Returns immediately; embedding happens in the background.
|
|
5
|
+
*/
|
|
6
|
+
export declare function enqueueModEmbed(dbId: number): void;
|
|
7
|
+
/**
|
|
8
|
+
* Scan the DB for mods that are decompiled but not fully embedded and enqueue
|
|
9
|
+
* them. Call once at server startup so restarts don't leave things stuck.
|
|
10
|
+
*/
|
|
11
|
+
export declare function startupEmbedScan(): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=embed-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-queue.d.ts","sourceRoot":"","sources":["../src/embed-queue.ts"],"names":[],"mappings":"AA4BA;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAetD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background semantic embedding queue.
|
|
3
|
+
*
|
|
4
|
+
* A single-worker FIFO queue that embeds decompiled mod source files into
|
|
5
|
+
* pgvector one mod at a time. This prevents overwhelming Ollama when multiple
|
|
6
|
+
* mods finish decompiling simultaneously.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Deduplication: adding the same dbId twice is a no-op
|
|
10
|
+
* - Retry loop: each item is retried (with backoff) until remaining === 0
|
|
11
|
+
* - Availability check: if Ollama goes down mid-queue, the worker pauses and
|
|
12
|
+
* retries the current item on the next drain cycle
|
|
13
|
+
* - Startup scan: call startupEmbedScan() on server start to re-queue any
|
|
14
|
+
* mods that were partially embedded before a restart
|
|
15
|
+
*/
|
|
16
|
+
import { isOllamaAvailable } from "./embeddings.js";
|
|
17
|
+
import { indexModSourceSemantic } from "./tools/mc-fts.js";
|
|
18
|
+
import { getDb } from "./db.js";
|
|
19
|
+
// ── Queue state (module-level singleton) ──────────────────────────────────────
|
|
20
|
+
const pending = new Set(); // dbIds waiting to be embedded
|
|
21
|
+
let running = false; // true while the worker loop is active
|
|
22
|
+
const MAX_RETRIES = 8;
|
|
23
|
+
const RETRY_DELAY_MS = 10_000; // 10 s between retries when Ollama is slow
|
|
24
|
+
const OLLAMA_WAIT_MS = 30_000; // 30 s wait when Ollama is unreachable
|
|
25
|
+
// ── Public API ────────────────────────────────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Add a mod to the embedding queue.
|
|
28
|
+
* Safe to call multiple times — duplicates are ignored.
|
|
29
|
+
* Returns immediately; embedding happens in the background.
|
|
30
|
+
*/
|
|
31
|
+
export function enqueueModEmbed(dbId) {
|
|
32
|
+
pending.add(dbId);
|
|
33
|
+
void drainQueue();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Scan the DB for mods that are decompiled but not fully embedded and enqueue
|
|
37
|
+
* them. Call once at server startup so restarts don't leave things stuck.
|
|
38
|
+
*/
|
|
39
|
+
export async function startupEmbedScan() {
|
|
40
|
+
if (!await isOllamaAvailable())
|
|
41
|
+
return; // skip silently if Ollama is off
|
|
42
|
+
// One fast query: find all mod_ids that still have unembedded source files
|
|
43
|
+
const db = await getDb();
|
|
44
|
+
const rows = await db.$queryRawUnsafe(`SELECT DISTINCT mod_id FROM mod_source_files WHERE embedding IS NULL`);
|
|
45
|
+
for (const { mod_id } of rows) {
|
|
46
|
+
pending.add(mod_id);
|
|
47
|
+
}
|
|
48
|
+
if (pending.size > 0) {
|
|
49
|
+
console.error(`[embed-queue] startup scan: ${pending.size} mod(s) queued for embedding`);
|
|
50
|
+
void drainQueue();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ── Worker ────────────────────────────────────────────────────────────────────
|
|
54
|
+
async function drainQueue() {
|
|
55
|
+
if (running)
|
|
56
|
+
return; // already active
|
|
57
|
+
running = true;
|
|
58
|
+
try {
|
|
59
|
+
while (pending.size > 0) {
|
|
60
|
+
// Check Ollama before dequeuing — if it's down, hold all items
|
|
61
|
+
if (!await isOllamaAvailable()) {
|
|
62
|
+
console.error("[embed-queue] Ollama unavailable — pausing, will retry in 30 s");
|
|
63
|
+
await delay(OLLAMA_WAIT_MS);
|
|
64
|
+
continue; // re-check without dequeuing
|
|
65
|
+
}
|
|
66
|
+
const [dbId] = pending; // peek — remove only after success
|
|
67
|
+
pending.delete(dbId);
|
|
68
|
+
// Retry this item until fully embedded or max retries exceeded
|
|
69
|
+
let attempts = 0;
|
|
70
|
+
while (attempts < MAX_RETRIES) {
|
|
71
|
+
try {
|
|
72
|
+
const result = await indexModSourceSemantic(dbId);
|
|
73
|
+
if (result.remaining === 0)
|
|
74
|
+
break; // done
|
|
75
|
+
// Some files remain (Ollama timed out mid-batch) — retry
|
|
76
|
+
console.error(`[embed-queue] mod #${dbId}: ${result.remaining} files remaining — retry ${attempts + 1}/${MAX_RETRIES}`);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error(`[embed-queue] mod #${dbId} error:`, err);
|
|
80
|
+
}
|
|
81
|
+
attempts++;
|
|
82
|
+
await delay(RETRY_DELAY_MS);
|
|
83
|
+
// Re-check Ollama before next attempt
|
|
84
|
+
if (!await isOllamaAvailable()) {
|
|
85
|
+
// Put it back and stop — will resume on next enqueue or startup
|
|
86
|
+
pending.add(dbId);
|
|
87
|
+
console.error("[embed-queue] Ollama went away — requeueing mod #" + dbId);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (attempts >= MAX_RETRIES) {
|
|
92
|
+
console.error(`[embed-queue] mod #${dbId} gave up after ${MAX_RETRIES} attempts`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
running = false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function delay(ms) {
|
|
101
|
+
return new Promise(r => setTimeout(r, ms));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=embed-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-queue.js","sourceRoot":"","sources":["../src/embed-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama embeddings client.
|
|
3
|
+
* All semantic-search features are optional — if Ollama is not running,
|
|
4
|
+
* isOllamaAvailable() returns false and callers fall back to keyword search.
|
|
5
|
+
*
|
|
6
|
+
* Environment variables:
|
|
7
|
+
* OLLAMA_URL Base URL (default: http://localhost:11434)
|
|
8
|
+
* OLLAMA_EMBED_MODEL Model to use (default: nomic-embed-text)
|
|
9
|
+
*/
|
|
10
|
+
/** Generate an embedding vector for a text string. Throws on Ollama error. */
|
|
11
|
+
export declare function embed(text: string): Promise<number[]>;
|
|
12
|
+
/** Returns false if Ollama is not reachable. Use to gate optional semantic features. */
|
|
13
|
+
export declare function isOllamaAvailable(): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Split text into overlapping chunks for embedding long documents.
|
|
16
|
+
* @param text Full text to split
|
|
17
|
+
* @param maxChars Max characters per chunk (default 1500 ≈ 375 tokens)
|
|
18
|
+
* @param overlap Character overlap between consecutive chunks (default 200)
|
|
19
|
+
*/
|
|
20
|
+
export declare function chunkText(text: string, maxChars?: number, overlap?: number): string[];
|
|
21
|
+
//# sourceMappingURL=embeddings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,8EAA8E;AAC9E,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS3D;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAS1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAO,EAAE,OAAO,SAAM,GAAG,MAAM,EAAE,CAUhF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama embeddings client.
|
|
3
|
+
* All semantic-search features are optional — if Ollama is not running,
|
|
4
|
+
* isOllamaAvailable() returns false and callers fall back to keyword search.
|
|
5
|
+
*
|
|
6
|
+
* Environment variables:
|
|
7
|
+
* OLLAMA_URL Base URL (default: http://localhost:11434)
|
|
8
|
+
* OLLAMA_EMBED_MODEL Model to use (default: nomic-embed-text)
|
|
9
|
+
*/
|
|
10
|
+
const OLLAMA_URL = () => process.env.OLLAMA_URL ?? "http://localhost:11434";
|
|
11
|
+
const EMBED_MODEL = () => process.env.OLLAMA_EMBED_MODEL ?? "nomic-embed-text";
|
|
12
|
+
/** Generate an embedding vector for a text string. Throws on Ollama error. */
|
|
13
|
+
export async function embed(text) {
|
|
14
|
+
const res = await fetch(`${OLLAMA_URL()}/api/embeddings`, {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers: { "Content-Type": "application/json" },
|
|
17
|
+
body: JSON.stringify({ model: EMBED_MODEL(), prompt: text }),
|
|
18
|
+
});
|
|
19
|
+
if (!res.ok)
|
|
20
|
+
throw new Error(`Ollama embed failed: ${res.status}`);
|
|
21
|
+
const body = await res.json();
|
|
22
|
+
return body.embedding;
|
|
23
|
+
}
|
|
24
|
+
/** Returns false if Ollama is not reachable. Use to gate optional semantic features. */
|
|
25
|
+
export async function isOllamaAvailable() {
|
|
26
|
+
try {
|
|
27
|
+
const res = await fetch(`${OLLAMA_URL()}/api/tags`, {
|
|
28
|
+
signal: AbortSignal.timeout(2000),
|
|
29
|
+
});
|
|
30
|
+
return res.ok;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Split text into overlapping chunks for embedding long documents.
|
|
38
|
+
* @param text Full text to split
|
|
39
|
+
* @param maxChars Max characters per chunk (default 1500 ≈ 375 tokens)
|
|
40
|
+
* @param overlap Character overlap between consecutive chunks (default 200)
|
|
41
|
+
*/
|
|
42
|
+
export function chunkText(text, maxChars = 1500, overlap = 200) {
|
|
43
|
+
if (maxChars <= overlap)
|
|
44
|
+
throw new Error(`chunkText: maxChars (${maxChars}) must be greater than overlap (${overlap})`);
|
|
45
|
+
if (text.length <= maxChars)
|
|
46
|
+
return [text];
|
|
47
|
+
const chunks = [];
|
|
48
|
+
let start = 0;
|
|
49
|
+
while (start < text.length) {
|
|
50
|
+
chunks.push(text.slice(start, start + maxChars));
|
|
51
|
+
start += maxChars - overlap;
|
|
52
|
+
}
|
|
53
|
+
return chunks;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=embeddings.js.map
|