@creeperhost/modlens-mcp 1.6.21 → 1.6.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +13 -5
  2. package/dist/hosted-oauth.d.ts +36 -0
  3. package/dist/hosted-oauth.d.ts.map +1 -0
  4. package/dist/hosted-oauth.js +522 -0
  5. package/dist/hosted-oauth.js.map +1 -0
  6. package/dist/hosted-policy.d.ts +7 -3
  7. package/dist/hosted-policy.d.ts.map +1 -1
  8. package/dist/hosted-policy.js +104 -7
  9. package/dist/hosted-policy.js.map +1 -1
  10. package/dist/minecraft.d.ts +2 -0
  11. package/dist/minecraft.d.ts.map +1 -1
  12. package/dist/minecraft.js +16 -0
  13. package/dist/minecraft.js.map +1 -1
  14. package/dist/repositories/mcVersion.d.ts +1 -0
  15. package/dist/repositories/mcVersion.d.ts.map +1 -1
  16. package/dist/repositories/mcVersion.js +11 -0
  17. package/dist/repositories/mcVersion.js.map +1 -1
  18. package/dist/runtime/companion.d.ts +3 -3
  19. package/dist/runtime/modlens-agent.jar +0 -0
  20. package/dist/runtime/protocol.d.ts +2 -2
  21. package/dist/server.js +69 -11
  22. package/dist/server.js.map +1 -1
  23. package/dist/tools/hosted-mc-index.d.ts +8 -0
  24. package/dist/tools/hosted-mc-index.d.ts.map +1 -0
  25. package/dist/tools/hosted-mc-index.js +92 -0
  26. package/dist/tools/hosted-mc-index.js.map +1 -0
  27. package/dist/tools/mc-fts.d.ts +2 -0
  28. package/dist/tools/mc-fts.d.ts.map +1 -1
  29. package/dist/tools/mc-fts.js +8 -0
  30. package/dist/tools/mc-fts.js.map +1 -1
  31. package/dist/tools/vanilla.d.ts +30 -1
  32. package/dist/tools/vanilla.d.ts.map +1 -1
  33. package/dist/tools/vanilla.js +184 -25
  34. package/dist/tools/vanilla.js.map +1 -1
  35. package/package.json +2 -1
  36. package/scripts/test-hosted-oauth.mjs +186 -0
  37. package/scripts/test-hosted-policy.mjs +67 -8
@@ -0,0 +1,92 @@
1
+ import { mcPaths } from "../minecraft.js";
2
+ import { hasSrgMappings } from "../mappings.js";
3
+ import { validateVersion } from "../validate.js";
4
+ import { isDecompileDone } from "../java-tools.js";
5
+ import { indexMcVersion, isMcVersionIndexed } from "./mc-fts.js";
6
+ import { decompileMcVersion, ensureMcSourceNames, hasPendingMinecraftClassPreparation } from "./vanilla.js";
7
+ const jobs = new Map();
8
+ const queue = [];
9
+ const completed = new Set();
10
+ let running = false;
11
+ function pump() {
12
+ if (running || !queue.length)
13
+ return;
14
+ const job = queue.shift();
15
+ running = true;
16
+ job.state = "running";
17
+ void (async () => {
18
+ try {
19
+ if (!await isMcVersionIndexed(job.version)) {
20
+ // Let requested classes finish first; later class jobs use a separate cache.
21
+ for (let i = 0; i < 120 && hasPendingMinecraftClassPreparation(job.version); i++) {
22
+ await new Promise(resolve => setTimeout(resolve, 250));
23
+ }
24
+ await decompileMcVersion(job.version);
25
+ let done = false;
26
+ for (let i = 0; i < 1800; i++) {
27
+ const status = await isDecompileDone(mcPaths.decompiled(job.version));
28
+ if (status === "done") {
29
+ done = true;
30
+ break;
31
+ }
32
+ if (status === "error")
33
+ throw new Error(`Minecraft ${job.version} decompilation failed`);
34
+ await new Promise(resolve => setTimeout(resolve, 2000));
35
+ }
36
+ if (!done)
37
+ throw new Error(`Minecraft ${job.version} decompilation timed out`);
38
+ if (hasSrgMappings(job.version))
39
+ await ensureMcSourceNames(job.version);
40
+ const indexed = await indexMcVersion(job.version);
41
+ if (indexed.status === "partial" || indexed.skipped)
42
+ throw new Error(`Minecraft ${job.version} source indexing incomplete`);
43
+ }
44
+ completed.add(job.version);
45
+ jobs.delete(job.version);
46
+ }
47
+ catch (error) {
48
+ job.state = "failed";
49
+ job.retryAfter = Date.now() + 60_000;
50
+ console.error("[modlens] Minecraft version indexing failed", job.version, error);
51
+ }
52
+ finally {
53
+ running = false;
54
+ pump();
55
+ }
56
+ })();
57
+ }
58
+ /** Schedule one private full-version build after an authorized hosted Minecraft request. */
59
+ export function scheduleHostedMinecraftVersionIndex(version) {
60
+ if (typeof version !== "string")
61
+ return;
62
+ try {
63
+ validateVersion(version);
64
+ }
65
+ catch {
66
+ return;
67
+ }
68
+ if (completed.has(version))
69
+ return;
70
+ let job = jobs.get(version);
71
+ if (job?.state === "failed" && (job.retryAfter ?? 0) <= Date.now()) {
72
+ jobs.delete(version);
73
+ job = undefined;
74
+ }
75
+ if (job || queue.length >= 16)
76
+ return;
77
+ job = { version, state: "queued" };
78
+ jobs.set(version, job);
79
+ queue.push(job);
80
+ pump();
81
+ }
82
+ export async function hostedMinecraftVersionIndexStatus(version) {
83
+ validateVersion(version);
84
+ const indexed = await isMcVersionIndexed(version);
85
+ const job = jobs.get(version);
86
+ const decompile = await isDecompileDone(mcPaths.decompiled(version));
87
+ const status = indexed ? "ready" : job?.state === "failed" ? "failed"
88
+ : job?.state === "queued" ? "queued" : job?.state === "running" ? "preparing"
89
+ : decompile === "done" ? "needs_index" : decompile === "running" ? "decompiling" : "not_started";
90
+ return { version, complete: indexed, status };
91
+ }
92
+ //# sourceMappingURL=hosted-mc-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-mc-index.js","sourceRoot":"","sources":["../../src/tools/hosted-mc-index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export declare function indexMcVersion(version: string, force?: boolean): Promis
9
9
  indexed: number;
10
10
  skipped: number;
11
11
  }>;
12
+ /** Add one already-decompiled class to source search without marking the whole version indexed. */
13
+ export declare function indexMcClass(version: string, className: string, sourcePath?: string): Promise<void>;
12
14
  /**
13
15
  * search_mc_indexed
14
16
  * Fast FTS search over indexed MC source. Supports:
@@ -1 +1 @@
1
- {"version":3,"file":"mc-fts.d.ts","sourceRoot":"","sources":["../../src/tools/mc-fts.ts"],"names":[],"mappings":"AAmCA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CACpD,CAAC,CA0CD;AAID;;;;;;GAMG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,GACX,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAMxD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,SAAK,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CnF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAQ3E;AAID;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACnC,IAAI,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB/D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACX,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAIxD;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,MAAM,EACZ,SAAS,SAAK,EACd,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCpH;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CACzC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,EACV,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAc1F"}
1
+ {"version":3,"file":"mc-fts.d.ts","sourceRoot":"","sources":["../../src/tools/mc-fts.ts"],"names":[],"mappings":"AAmCA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CACpD,CAAC,CA2CD;AAED,mGAAmG;AACnG,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,SAAwC,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxI;AAID;;;;;;GAMG;AACH,wBAAsB,eAAe,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,GACX,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAMxD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG1E;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,SAAK,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA2CnF;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAQ3E;AAID;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACnC,IAAI,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB/D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACX,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAIxD;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,IAAI,EAAE,MAAM,EACZ,SAAS,SAAK,EACd,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAsCpH;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CACzC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,EACV,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAc1F"}
@@ -71,9 +71,17 @@ export async function indexMcVersion(version, force = false) {
71
71
  }
72
72
  }
73
73
  }
74
+ if (skipped || !javaFiles.length)
75
+ return { status: "partial", indexed, skipped };
74
76
  await updateMcVersion(mcVersionId, { indexed: true });
75
77
  return { status: "done", indexed, skipped };
76
78
  }
79
+ /** Add one already-decompiled class to source search without marking the whole version indexed. */
80
+ export async function indexMcClass(version, className, sourcePath = mcPaths.classFile(version, className)) {
81
+ const content = await readFile(sourcePath, "utf8");
82
+ const mcVersionId = await ensureMcVersionRecord(version);
83
+ await upsertMcSourceFile(mcVersionId, className, content);
84
+ }
77
85
  /**
78
86
  * search_mc_indexed
79
87
  * Fast FTS search over indexed MC source. Supports:
@@ -1 +1 @@
1
- {"version":3,"file":"mc-fts.js","sourceRoot":"","sources":["../../src/tools/mc-fts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mc-fts.js","sourceRoot":"","sources":["../../src/tools/mc-fts.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,35 @@ export declare function getMcIndex(version: string): Promise<JarIndex>;
4
4
  export declare function searchMinecraftClass(version: string, query?: string | null): Promise<string[]>;
5
5
  /** get_minecraft_source — decompile a single class with optional line-range slicing. */
6
6
  export declare function getMinecraftSource(version: string, className: string, startLine?: number, endLine?: number, maxLines?: number): Promise<string>;
7
+ /** Metadata from the operator's existing cache; never starts a decompile or returns source text. */
8
+ export declare function getMinecraftSourceInfo(version: string, className: string): Promise<{
9
+ version: string;
10
+ className: string;
11
+ cached: boolean;
12
+ totalLines: null;
13
+ } | {
14
+ version: string;
15
+ className: string;
16
+ cached: boolean;
17
+ totalLines: number;
18
+ }>;
19
+ export declare function hasPendingMinecraftClassPreparation(version: string): boolean;
20
+ /** Public source requests prepare the server cache and index, returning metadata only. */
21
+ export declare function prepareMinecraftSource(version: string, className: string): Promise<{
22
+ indexed: boolean;
23
+ status: string;
24
+ version: string;
25
+ className: string;
26
+ cached: boolean;
27
+ totalLines: null;
28
+ } | {
29
+ indexed: boolean;
30
+ status: string;
31
+ version: string;
32
+ className: string;
33
+ cached: boolean;
34
+ totalLines: number;
35
+ }>;
7
36
  /** get_mc_class_bytecode */
8
37
  export declare function getMcClassBytecode(version: string, className: string): Promise<string>;
9
38
  /** get_mc_class_members */
@@ -61,7 +90,7 @@ export declare function diffMcVersions(versionA: string, versionB: string): Prom
61
90
  added: string[];
62
91
  removed: string[];
63
92
  }>;
64
- /** decompile_minecraft_version — background Vineflower decompile of the entire JAR. */
93
+ export declare function ensureMcSourceNames(version: string): Promise<void>;
65
94
  export declare function decompileMcVersion(version: string, force?: boolean): Promise<{
66
95
  status: string;
67
96
  outDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"vanilla.d.ts","sourceRoot":"","sources":["../../src/tools/vanilla.ts"],"names":[],"mappings":"AAcA,OAAO,EAC0C,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA0CzF,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgBnE;AAkCD,6BAA6B;AAC7B,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKpG;AAED,wFAAwF;AACxF,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED,4BAA4B;AAC5B,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM5F;AAED,2BAA2B;AAC3B,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOzE;AAED,yBAAyB;AACzB,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;;;GAkBrE;AAED,yBAAyB;AACzB,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;GAiBxE;AAED,4EAA4E;AAC5E,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;GAUtE;AAED,uFAAuF;AACvF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ;;;;;;;;GA0CtE;AAED,wDAAwD;AACxD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,MAAM;;;;GAU7D;AAED,iFAAiF;AACjF,wBAAsB,YAAY,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,EAC5D,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAqD9D;AA6DD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;cAE9C,MAAM;aAAO,MAAM;eAAS,MAAM;sBAAgB,MAAM,EAAE;;;GA6EzF;AA2ED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EnE;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAC9B,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,GAAE,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,YAA0B,GACtF,OAAO,CAAC,MAAM,CAAC,CAyGjB"}
1
+ {"version":3,"file":"vanilla.d.ts","sourceRoot":"","sources":["../../src/tools/vanilla.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,12 @@ import { getMcJarPath, mcPaths } from "../minecraft.js";
10
10
  import { listClasses } from "../jar.js";
11
11
  import { safeRegex } from "../security.js";
12
12
  import { validateVersion, validateClassName } from "../validate.js";
13
- import { isMcVersionIndexed, searchMcIndexed } from "./mc-fts.js";
13
+ import { indexMcClass, isMcVersionIndexed, searchMcIndexed } from "./mc-fts.js";
14
14
  import { searchClasses } from "../search.js";
15
15
  import { inspectClass, getBytecode, indexJar, decompileClass, decompileJar, isDecompileDone } from "../java-tools.js";
16
16
  import { exists, ensureDir } from "../cache.js";
17
17
  import { formatClassMembers } from "../access-flags.js";
18
- import { ensureMcVersion, updateMcVersion } from "../repositories/mcVersion.js";
18
+ import { ensureMcVersion, isMcClassIndexed, updateMcVersion } from "../repositories/mcVersion.js";
19
19
  import { findModByModIdLike } from "../repositories/mod.js";
20
20
  import { searchSource } from "./source.js";
21
21
  import { hasSrgMappings, remapMcJar, applyMcpNamesToSource, applyMcpNamesToFile, hasRetroMcpMappings, remapMcJarTiny, remapJar, isUnobfuscated } from "../mappings.js";
@@ -25,7 +25,21 @@ import { hasSrgMappings, remapMcJar, applyMcpNamesToSource, applyMcpNamesToFile,
25
25
  * helpers); modern obfuscated versions use Mojang mappings. Shared by the bulk and
26
26
  * single-class decompile paths so both produce the same class names.
27
27
  */
28
+ const resolvedMcJars = new Map();
28
29
  async function resolveMcDecompileJar(version, rawJarPath) {
30
+ const existing = resolvedMcJars.get(version);
31
+ if (existing)
32
+ return existing;
33
+ const resolved = resolveMcDecompileJarUncached(version, rawJarPath);
34
+ resolvedMcJars.set(version, resolved);
35
+ try {
36
+ return await resolved;
37
+ }
38
+ finally {
39
+ resolvedMcJars.delete(version);
40
+ }
41
+ }
42
+ async function resolveMcDecompileJarUncached(version, rawJarPath) {
29
43
  if (hasSrgMappings(version)) {
30
44
  const mapped = await remapMcJar(rawJarPath, version);
31
45
  if (mapped)
@@ -108,6 +122,34 @@ export async function searchMinecraftClass(version, query) {
108
122
  const classes = listClasses(jarPath).map((c) => c.replace(/\.class$/, ""));
109
123
  return searchClasses(classes, query);
110
124
  }
125
+ const priorityClassJobs = new Map();
126
+ async function getPriorityMinecraftSource(version, internal) {
127
+ const file = mcPaths.priorityClassFile(version, internal);
128
+ const marker = `${file}.ready`;
129
+ if (await exists(marker) && await exists(file))
130
+ return readFile(file, "utf8");
131
+ const key = `${version}:${internal}`;
132
+ const existing = priorityClassJobs.get(key);
133
+ if (existing)
134
+ return existing;
135
+ const job = (async () => {
136
+ const { jarPath, remapType } = await resolveMcDecompileJar(version, await getMcJarPath(version));
137
+ let source = await decompileClass(jarPath, internal, mcPaths.priorityDecompiled(version));
138
+ if (remapType === "srg") {
139
+ await applyMcpNamesToFile(file, version);
140
+ source = await readFile(file, "utf8");
141
+ }
142
+ await writeFile(marker, "ready");
143
+ return source;
144
+ })();
145
+ priorityClassJobs.set(key, job);
146
+ try {
147
+ return await job;
148
+ }
149
+ finally {
150
+ priorityClassJobs.delete(key);
151
+ }
152
+ }
111
153
  /** get_minecraft_source — decompile a single class with optional line-range slicing. */
112
154
  export async function getMinecraftSource(version, className, startLine, endLine, maxLines) {
113
155
  validateVersion(version);
@@ -115,8 +157,15 @@ export async function getMinecraftSource(version, className, startLine, endLine,
115
157
  const internal = className.replace(/\./g, "/");
116
158
  const outDir = mcPaths.decompiled(version);
117
159
  const cached = mcPaths.classFile(version, internal);
160
+ const priority = mcPaths.priorityClassFile(version, internal);
118
161
  let source;
119
- if (await exists(cached)) {
162
+ if (await exists(`${priority}.ready`) && await exists(priority) && await isDecompileDone(outDir) !== "done") {
163
+ source = await readFile(priority, "utf8");
164
+ }
165
+ else if (await isDecompileDone(outDir) === "running") {
166
+ source = await getPriorityMinecraftSource(version, internal);
167
+ }
168
+ else if (await exists(cached)) {
120
169
  source = await readFile(cached, "utf8");
121
170
  }
122
171
  else {
@@ -142,6 +191,91 @@ export async function getMinecraftSource(version, className, startLine, endLine,
142
191
  const to = endLine ?? (from + (maxLines ?? 200));
143
192
  return lines.slice(from, to).join("\n");
144
193
  }
194
+ /** Metadata from the operator's existing cache; never starts a decompile or returns source text. */
195
+ export async function getMinecraftSourceInfo(version, className) {
196
+ validateVersion(version);
197
+ validateClassName(className);
198
+ const internal = className.replace(/\./g, "/");
199
+ const priority = mcPaths.priorityClassFile(version, internal);
200
+ const standard = mcPaths.classFile(version, internal);
201
+ const status = await isDecompileDone(mcPaths.decompiled(version));
202
+ const cached = status === "done" && await exists(standard) ? standard
203
+ : await exists(`${priority}.ready`) && await exists(priority) ? priority
204
+ : status !== "running" && await exists(standard) ? standard : undefined;
205
+ if (!cached)
206
+ return { version, className: internal, cached: false, totalLines: null };
207
+ const source = await readFile(cached, "utf8");
208
+ return { version, className: internal, cached: true, totalLines: source.split("\n").length };
209
+ }
210
+ const classPreparations = new Map();
211
+ const classPreparationQueue = [];
212
+ const activeClassPreparationVersions = new Set();
213
+ let activeClassPreparations = 0;
214
+ export function hasPendingMinecraftClassPreparation(version) {
215
+ return [...classPreparations.values()].some(job => job.version === version && job.state !== "failed");
216
+ }
217
+ function runClassPreparations() {
218
+ while (activeClassPreparations < 2 && classPreparationQueue.length) {
219
+ const next = classPreparationQueue.findIndex(job => !activeClassPreparationVersions.has(job.version));
220
+ if (next < 0)
221
+ break;
222
+ const [job] = classPreparationQueue.splice(next, 1);
223
+ job.state = "running";
224
+ activeClassPreparations++;
225
+ activeClassPreparationVersions.add(job.version);
226
+ void (async () => {
227
+ try {
228
+ const priority = mcPaths.priorityClassFile(job.version, job.className);
229
+ const standard = mcPaths.classFile(job.version, job.className);
230
+ let sourcePath = priority;
231
+ if ((!await exists(`${priority}.ready`) || !await exists(priority))
232
+ && await isDecompileDone(mcPaths.decompiled(job.version)) !== "running" && await exists(standard)) {
233
+ sourcePath = standard;
234
+ }
235
+ else {
236
+ await getPriorityMinecraftSource(job.version, job.className);
237
+ }
238
+ if (!await isMcVersionIndexed(job.version) || !await exists(standard)) {
239
+ await indexMcClass(job.version, job.className, sourcePath);
240
+ }
241
+ classPreparations.delete(`${job.version}:${job.className}`);
242
+ }
243
+ catch (error) {
244
+ job.state = "failed";
245
+ job.retryAfter = Date.now() + 60_000;
246
+ console.error("[modlens] Minecraft class preparation failed", job.version, job.className, error);
247
+ }
248
+ finally {
249
+ activeClassPreparations--;
250
+ activeClassPreparationVersions.delete(job.version);
251
+ runClassPreparations();
252
+ }
253
+ })();
254
+ }
255
+ }
256
+ /** Public source requests prepare the server cache and index, returning metadata only. */
257
+ export async function prepareMinecraftSource(version, className) {
258
+ const info = await getMinecraftSourceInfo(version, className);
259
+ const internal = info.className;
260
+ if (await isMcClassIndexed(version, internal))
261
+ return { ...info, indexed: true, status: "ready" };
262
+ const key = `${version}:${internal}`;
263
+ let job = classPreparations.get(key);
264
+ if (job?.state === "failed" && (job.retryAfter ?? 0) <= Date.now()) {
265
+ classPreparations.delete(key);
266
+ job = undefined;
267
+ }
268
+ if (!job && classPreparationQueue.length + activeClassPreparations >= 16) {
269
+ return { ...info, indexed: false, status: "busy" };
270
+ }
271
+ if (!job) {
272
+ job = { version, className: internal, state: "queued" };
273
+ classPreparations.set(key, job);
274
+ classPreparationQueue.push(job);
275
+ runClassPreparations();
276
+ }
277
+ return { ...info, indexed: false, status: job.state === "failed" ? "failed" : "preparing" };
278
+ }
145
279
  /** get_mc_class_bytecode */
146
280
  export async function getMcClassBytecode(version, className) {
147
281
  validateVersion(version);
@@ -206,6 +340,40 @@ export async function diffMcVersions(versionA, versionB) {
206
340
  return { versionA, versionB, summary: { added: added.length, removed: removed.length, common }, added, removed };
207
341
  }
208
342
  /** decompile_minecraft_version — background Vineflower decompile of the entire JAR. */
343
+ const mcpNamingJobs = new Map();
344
+ export async function ensureMcSourceNames(version) {
345
+ if (!hasSrgMappings(version))
346
+ return;
347
+ const outDir = mcPaths.decompiled(version);
348
+ const marker = join(outDir, ".mcp-names.done");
349
+ if (await exists(marker))
350
+ return;
351
+ const existing = mcpNamingJobs.get(version);
352
+ if (existing)
353
+ return existing;
354
+ const job = (async () => {
355
+ for (let i = 0; i < 360; i++) {
356
+ const status = await isDecompileDone(outDir);
357
+ if (status === "done") {
358
+ const result = await applyMcpNamesToSource(outDir, version);
359
+ await writeFile(marker, "done");
360
+ console.error(`[modlens] Applied MCP names to ${version}: ${result.replaced} replacements in ${result.files} files`);
361
+ return;
362
+ }
363
+ if (status === "error")
364
+ throw new Error(`Minecraft ${version} decompilation failed`);
365
+ await new Promise(resolve => setTimeout(resolve, 5000));
366
+ }
367
+ throw new Error(`Minecraft ${version} decompilation timed out`);
368
+ })();
369
+ mcpNamingJobs.set(version, job);
370
+ try {
371
+ await job;
372
+ }
373
+ finally {
374
+ mcpNamingJobs.delete(version);
375
+ }
376
+ }
209
377
  export async function decompileMcVersion(version, force = false) {
210
378
  const outDir = mcPaths.decompiled(version);
211
379
  const jarPath = await getMcJarPath(version);
@@ -214,6 +382,8 @@ export async function decompileMcVersion(version, force = false) {
214
382
  const status = await isDecompileDone(outDir);
215
383
  if (status === "done") {
216
384
  await updateMcVersion(dbId, { decompiled: true, decompPath: outDir });
385
+ if (hasSrgMappings(version))
386
+ void ensureMcSourceNames(version).catch(error => console.error("[modlens] Minecraft source naming failed", version, error));
217
387
  return { status: "already_done", outDir };
218
388
  }
219
389
  if (status === "running")
@@ -222,28 +392,14 @@ export async function decompileMcVersion(version, force = false) {
222
392
  // For legacy versions, remap the JAR to readable names before decompiling.
223
393
  const { jarPath: decompileJarPath, remapType } = await resolveMcDecompileJar(version, jarPath);
224
394
  const remapped = remapType !== "none";
395
+ if (remapType === "srg")
396
+ await unlink(join(outDir, ".mcp-names.done")).catch(() => { });
225
397
  await decompileJar(decompileJarPath, outDir);
226
398
  await updateMcVersion(dbId, { decompPath: outDir, jarPath });
227
399
  // For SRG versions, apply MCP human-readable names post-decompile
228
400
  // (RetroMCP versions already have final names baked in via Tiny v2)
229
- if (remapped && remapType === "srg") {
230
- // Wait for decompile to finish before applying MCP names
231
- // We schedule a background watcher that applies names when decompile completes
232
- (async () => {
233
- // Poll until done (max 30 min)
234
- for (let i = 0; i < 360; i++) {
235
- await new Promise(r => setTimeout(r, 5000));
236
- const s = await isDecompileDone(outDir);
237
- if (s === "done") {
238
- const result = await applyMcpNamesToSource(outDir, version);
239
- console.error(`[modlens] Applied MCP names to ${version}: ${result.replaced} replacements in ${result.files} files`);
240
- return;
241
- }
242
- if (s === "error")
243
- return;
244
- }
245
- })();
246
- }
401
+ if (remapped && remapType === "srg")
402
+ void ensureMcSourceNames(version).catch(error => console.error("[modlens] Minecraft source naming failed", version, error));
247
403
  return { status: "started", outDir, remapped };
248
404
  }
249
405
  /** Poll decompile status; marks DB record when done. */
@@ -253,6 +409,8 @@ export async function decompileMcVersionStatus(version) {
253
409
  if (status === "done") {
254
410
  const dbId = await ensureMcVersionRecord(version);
255
411
  await updateMcVersion(dbId, { decompiled: true, decompPath: outDir });
412
+ if (hasSrgMappings(version))
413
+ void ensureMcSourceNames(version).catch(error => console.error("[modlens] Minecraft source naming failed", version, error));
256
414
  }
257
415
  return { version, status, outDir };
258
416
  }
@@ -272,10 +430,11 @@ export async function searchMcCode(version, query, searchType, isRegex, limit) {
272
430
  const indexed = await isMcVersionIndexed(version);
273
431
  if (indexed) {
274
432
  const ftsResults = await searchMcIndexed(query, version, limit);
275
- return ftsResults.map((r) => ({
276
- file: r.className + ".java",
277
- line: 0, // FTS returns snippets, not line numbers
278
- text: r.snippet,
433
+ return Promise.all(ftsResults.map(async (r) => {
434
+ const path = mcPaths.classFile(version, r.className);
435
+ const content = await readFile(path, "utf8").catch(() => "");
436
+ const line = content.split("\n").findIndex(value => value.toLowerCase().includes(query.toLowerCase())) + 1;
437
+ return { file: r.className + ".java", line, text: r.snippet };
279
438
  }));
280
439
  }
281
440
  }