@adhisang/minecraft-modding-mcp 4.1.1 → 4.2.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.
Files changed (64) hide show
  1. package/CHANGELOG.md +7 -2
  2. package/README.md +5 -2
  3. package/dist/entry-tools/analyze-symbol-service.d.ts +12 -0
  4. package/dist/entry-tools/analyze-symbol-service.js +7 -0
  5. package/dist/entry-tools/batch-class-members-service.d.ts +1 -0
  6. package/dist/entry-tools/batch-class-members-service.js +2 -0
  7. package/dist/entry-tools/batch-class-source-service.d.ts +1 -0
  8. package/dist/entry-tools/batch-class-source-service.js +2 -0
  9. package/dist/entry-tools/batch-mappings-service.d.ts +1 -0
  10. package/dist/entry-tools/batch-mappings-service.js +1 -0
  11. package/dist/entry-tools/batch-symbol-exists-service.d.ts +1 -0
  12. package/dist/entry-tools/batch-symbol-exists-service.js +2 -0
  13. package/dist/entry-tools/compare-minecraft-service.d.ts +9 -0
  14. package/dist/entry-tools/compare-minecraft-service.js +3 -1
  15. package/dist/entry-tools/inspect-minecraft/handlers/class-members.js +1 -0
  16. package/dist/entry-tools/inspect-minecraft/handlers/class-overview.js +3 -1
  17. package/dist/entry-tools/inspect-minecraft/handlers/class-source.js +1 -0
  18. package/dist/entry-tools/inspect-minecraft/handlers/list-files.js +1 -0
  19. package/dist/entry-tools/inspect-minecraft/handlers/search.js +2 -1
  20. package/dist/entry-tools/inspect-minecraft/internal.d.ts +17 -0
  21. package/dist/entry-tools/inspect-minecraft/internal.js +10 -0
  22. package/dist/entry-tools/inspect-minecraft-service.d.ts +40 -0
  23. package/dist/entry-tools/validate-project/cases/project-summary.js +8 -3
  24. package/dist/entry-tools/validate-project/internal.d.ts +6 -2
  25. package/dist/entry-tools/validate-project/internal.js +9 -7
  26. package/dist/entry-tools/validate-project-service.d.ts +10 -0
  27. package/dist/entry-tools/validate-project-service.js +1 -0
  28. package/dist/entry-tools/verify-mixin-target-service.d.ts +2 -0
  29. package/dist/entry-tools/verify-mixin-target-service.js +1 -0
  30. package/dist/gradle-paths.d.ts +8 -3
  31. package/dist/gradle-paths.js +34 -5
  32. package/dist/index.js +24 -7
  33. package/dist/mapping/loaders/tiny-loom.d.ts +1 -1
  34. package/dist/mapping/loaders/tiny-loom.js +5 -2
  35. package/dist/mapping/types.d.ts +5 -0
  36. package/dist/mapping-service.d.ts +1 -0
  37. package/dist/mapping-service.js +16 -13
  38. package/dist/mixin-validator.d.ts +1 -1
  39. package/dist/mixin-validator.js +1 -1
  40. package/dist/source/access-validate.js +12 -8
  41. package/dist/source/artifact-resolver.d.ts +5 -0
  42. package/dist/source/artifact-resolver.js +23 -7
  43. package/dist/source/class-source/members-builder.d.ts +1 -0
  44. package/dist/source/class-source/members-builder.js +1 -1
  45. package/dist/source/class-source.d.ts +1 -0
  46. package/dist/source/class-source.js +9 -1
  47. package/dist/source/lifecycle/diff.js +6 -6
  48. package/dist/source/lifecycle/mapping-helpers.d.ts +3 -3
  49. package/dist/source/lifecycle/mapping-helpers.js +17 -9
  50. package/dist/source/lifecycle/trace.js +2 -2
  51. package/dist/source/search.js +1 -0
  52. package/dist/source/symbol-resolver.js +4 -1
  53. package/dist/source/validate-mixin/pipeline/mapping-health.js +2 -1
  54. package/dist/source/validate-mixin/pipeline/resolve.js +1 -0
  55. package/dist/source/validate-mixin/pipeline/target-lookup.js +12 -7
  56. package/dist/source-service.d.ts +18 -1
  57. package/dist/source-service.js +2 -2
  58. package/dist/tool-contract-manifest.d.ts +1 -1
  59. package/dist/tool-contract-manifest.js +2 -2
  60. package/dist/tool-schemas.d.ts +91 -0
  61. package/dist/tool-schemas.js +20 -0
  62. package/docs/README-ja.md +2 -2
  63. package/docs/tool-reference.md +4 -1
  64. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,11 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project aims to follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [4.2.0] - 2026-05-17
9
+
10
+ ### Added
11
+ - Cache-backed source, mapping, validation, batch, and workflow tools now accept `gradleUserHome` so callers can use Loom caches from a non-default Gradle User Home instead of the MCP process default.
12
+
8
13
  ## [4.1.1] - 2026-05-10
9
14
 
10
15
  ### Documentation
@@ -160,8 +165,8 @@ and this project aims to follow [Semantic Versioning](https://semver.org/spec/v2
160
165
  ## [3.0.0] - 2026-03-09
161
166
 
162
167
  ### Added
163
- - v3 entry tools: `inspect-minecraft`, `analyze-symbol`, `compare-minecraft`, `analyze-mod`, `validate-project`, and `manage-cache` now provide summary-first starting points for the main Minecraft, symbol, mod, validation, and cache workflows while keeping expert tools available for follow-up work.
164
- - The new v3 entry tools share `detail` / `include` response shaping and always return `result.summary` inside the standard `{ result?, error?, meta }` envelope, reducing default payload size and making next actions explicit.
168
+ - Top-level workflow tools: `inspect-minecraft`, `analyze-symbol`, `compare-minecraft`, `analyze-mod`, `validate-project`, and `manage-cache` now provide summary-first starting points for the main Minecraft, symbol, mod, validation, and cache workflows while keeping expert tools available for follow-up work.
169
+ - The new top-level workflow tools share `detail` / `include` response shaping and always return `result.summary` inside the standard `{ result?, error?, meta }` envelope, reducing default payload size and making next actions explicit.
165
170
  - `analyze-mod` now exposes `executionMode="preview" | "apply"` for safe remap planning and execution, and `manage-cache` now exposes the same preview/apply model for cache deletion, pruning, and rebuild workflows.
166
171
 
167
172
  ### Fixed
package/README.md CHANGED
@@ -134,6 +134,8 @@ Pass environment variables to override defaults:
134
134
  }
135
135
  ```
136
136
 
137
+ When a build used a non-default Gradle User Home, pass `gradleUserHome` on cache-backed source, mapping, validation, and workflow calls. The server treats it as a per-call Gradle User Home and searches `<gradleUserHome>/loom-cache` and `<gradleUserHome>/caches/fabric-loom` before the MCP process default. It does not accept arbitrary Loom cache directories.
138
+
137
139
  ## Start Here
138
140
 
139
141
  These six top-level workflow tools cover the common paths and return summary-first results. They are the best default starting points for agents and MCP clients.
@@ -161,6 +163,7 @@ These notes cover high-frequency decisions during onboarding. For the full pitfa
161
163
  - `validate-project task="project-summary"` propagates `preferProjectVersion=true` across discovered Mixin, Access Widener, and Access Transformer checks. If no version can be resolved from the request or `gradle.properties`, the summary returns recovery guidance instead of guessing.
162
164
  - `validate-mixin` and `validate-project` keep `mapping-health` lightweight for `obfuscated` and `mojang` validation, avoiding full Tiny mapping graph loads unless `intermediary` or `yarn` namespaces are requested.
163
165
  - `validate-project task="project-summary"` uses a lightweight artifact probe for `tasks["minecraft.artifact.resolved"]`; it does not decompile Minecraft or rebuild the source index just to report per-probe status. Set `VALIDATE_PROJECT_TASKS_OFF=1` to omit the additive `tasks` field.
166
+ - If a workspace was built with `GRADLE_USER_HOME=/tmp/...` or another isolated Gradle home, pass that path as `gradleUserHome` so source, mapping, runtime, and project validation lookups use the same Loom cache instead of stale caches under the MCP process home.
164
167
 
165
168
  ### Inspect Minecraft source from a version
166
169
 
@@ -251,7 +254,7 @@ Start with these top-level workflow tools unless you already know the exact spec
251
254
 
252
255
  ### Top-Level Workflow Tools
253
256
 
254
- <!-- BEGIN GENERATED TOOL TABLE: v3-entry-tools -->
257
+ <!-- BEGIN GENERATED TOOL TABLE: top-level-workflow-tools -->
255
258
  | Tool | Purpose |
256
259
  | --- | --- |
257
260
  | `inspect-minecraft` | Inspect versions, artifacts, classes, files, source text, and workspace-aware lookup flows |
@@ -260,7 +263,7 @@ Start with these top-level workflow tools unless you already know the exact spec
260
263
  | `analyze-mod` | Summarize mod metadata, decompile and search mod code, inspect class source, and preview or apply remaps |
261
264
  | `validate-project` | Summarize workspaces and run direct Mixin, Access Widener, or Access Transformer validation |
262
265
  | `manage-cache` | List, verify, and preview or apply cache cleanup and rebuild operations |
263
- <!-- END GENERATED TOOL TABLE: v3-entry-tools -->
266
+ <!-- END GENERATED TOOL TABLE: top-level-workflow-tools -->
264
267
 
265
268
  ### Source Exploration
266
269
 
@@ -23,6 +23,7 @@ export declare const analyzeSymbolShape: {
23
23
  targetMapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
24
24
  classNameMapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
25
25
  projectPath: z.ZodOptional<z.ZodString>;
26
+ gradleUserHome: z.ZodOptional<z.ZodString>;
26
27
  signatureMode: z.ZodDefault<z.ZodEnum<["exact", "name-only"]>>;
27
28
  nameMode: z.ZodDefault<z.ZodEnum<["fqcn", "auto"]>>;
28
29
  includeKinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["class", "field", "method"]>, "many">>;
@@ -54,6 +55,7 @@ export declare const analyzeSymbolSchema: z.ZodEffects<z.ZodObject<{
54
55
  targetMapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
55
56
  classNameMapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
56
57
  projectPath: z.ZodOptional<z.ZodString>;
58
+ gradleUserHome: z.ZodOptional<z.ZodString>;
57
59
  signatureMode: z.ZodDefault<z.ZodEnum<["exact", "name-only"]>>;
58
60
  nameMode: z.ZodDefault<z.ZodEnum<["fqcn", "auto"]>>;
59
61
  includeKinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["class", "field", "method"]>, "many">>;
@@ -77,6 +79,7 @@ export declare const analyzeSymbolSchema: z.ZodEffects<z.ZodObject<{
77
79
  sourceMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
78
80
  targetMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
79
81
  classNameMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
82
+ gradleUserHome?: string | undefined;
80
83
  detail?: "full" | "summary" | "standard" | undefined;
81
84
  include?: string[] | undefined;
82
85
  includeKinds?: ("class" | "field" | "method")[] | undefined;
@@ -94,6 +97,7 @@ export declare const analyzeSymbolSchema: z.ZodEffects<z.ZodObject<{
94
97
  sourceMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
95
98
  targetMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
96
99
  classNameMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
100
+ gradleUserHome?: string | undefined;
97
101
  nameMode?: "auto" | "fqcn" | undefined;
98
102
  detail?: "full" | "summary" | "standard" | undefined;
99
103
  include?: string[] | undefined;
@@ -117,6 +121,7 @@ export declare const analyzeSymbolSchema: z.ZodEffects<z.ZodObject<{
117
121
  sourceMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
118
122
  targetMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
119
123
  classNameMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
124
+ gradleUserHome?: string | undefined;
120
125
  detail?: "full" | "summary" | "standard" | undefined;
121
126
  include?: string[] | undefined;
122
127
  includeKinds?: ("class" | "field" | "method")[] | undefined;
@@ -134,6 +139,7 @@ export declare const analyzeSymbolSchema: z.ZodEffects<z.ZodObject<{
134
139
  sourceMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
135
140
  targetMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
136
141
  classNameMapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
142
+ gradleUserHome?: string | undefined;
137
143
  nameMode?: "auto" | "fqcn" | undefined;
138
144
  detail?: "full" | "summary" | "standard" | undefined;
139
145
  include?: string[] | undefined;
@@ -152,6 +158,7 @@ type AnalyzeSymbolDeps = {
152
158
  descriptor?: string;
153
159
  sourceMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
154
160
  sourcePriority?: "loom-first" | "maven-first";
161
+ gradleUserHome?: string;
155
162
  nameMode?: "fqcn" | "auto";
156
163
  signatureMode?: "exact" | "name-only";
157
164
  maxCandidates?: number;
@@ -164,6 +171,7 @@ type AnalyzeSymbolDeps = {
164
171
  descriptor?: string;
165
172
  sourceMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
166
173
  targetMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
174
+ gradleUserHome?: string;
167
175
  signatureMode?: "exact" | "name-only";
168
176
  maxCandidates?: number;
169
177
  }) => Promise<FindMappingOutput>;
@@ -174,12 +182,14 @@ type AnalyzeSymbolDeps = {
174
182
  descriptor: string;
175
183
  sourceMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
176
184
  targetMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
185
+ gradleUserHome?: string;
177
186
  maxCandidates?: number;
178
187
  }) => Promise<ResolveMethodMappingExactOutput>;
179
188
  traceSymbolLifecycle: (input: {
180
189
  symbol: string;
181
190
  descriptor?: string;
182
191
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
192
+ gradleUserHome?: string;
183
193
  toVersion?: string;
184
194
  maxVersions?: number;
185
195
  }) => Promise<TraceSymbolLifecycleOutput>;
@@ -191,6 +201,7 @@ type AnalyzeSymbolDeps = {
191
201
  owner?: string;
192
202
  descriptor?: string;
193
203
  sourceMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
204
+ gradleUserHome?: string;
194
205
  maxCandidates?: number;
195
206
  }) => Promise<ResolveWorkspaceSymbolOutput>;
196
207
  getClassApiMatrix: (input: {
@@ -198,6 +209,7 @@ type AnalyzeSymbolDeps = {
198
209
  className: string;
199
210
  classNameMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
200
211
  includeKinds?: ("class" | "field" | "method")[];
212
+ gradleUserHome?: string;
201
213
  maxRows?: number;
202
214
  }) => Promise<GetClassApiMatrixOutput>;
203
215
  };
@@ -30,6 +30,7 @@ export const analyzeSymbolShape = {
30
30
  targetMapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
31
31
  classNameMapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
32
32
  projectPath: nonEmptyString.optional(),
33
+ gradleUserHome: nonEmptyString.optional(),
33
34
  signatureMode: z.enum(["exact", "name-only"]).default("exact"),
34
35
  nameMode: z.enum(["fqcn", "auto"]).default("fqcn"),
35
36
  includeKinds: z.array(z.enum(["class", "field", "method"])).optional(),
@@ -107,6 +108,7 @@ export class AnalyzeSymbolService {
107
108
  owner: input.subject.owner,
108
109
  descriptor: input.subject.descriptor,
109
110
  sourceMapping: input.sourceMapping ?? "obfuscated",
111
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
110
112
  nameMode: input.nameMode,
111
113
  signatureMode: input.signatureMode,
112
114
  maxCandidates: input.maxCandidates
@@ -152,6 +154,7 @@ export class AnalyzeSymbolService {
152
154
  descriptor: input.subject.descriptor,
153
155
  sourceMapping: input.sourceMapping ?? "obfuscated",
154
156
  targetMapping: input.targetMapping ?? "mojang",
157
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
155
158
  signatureMode: input.signatureMode,
156
159
  maxCandidates: input.maxCandidates
157
160
  });
@@ -202,6 +205,7 @@ export class AnalyzeSymbolService {
202
205
  descriptor: input.subject.descriptor,
203
206
  sourceMapping: input.sourceMapping ?? "obfuscated",
204
207
  targetMapping: input.targetMapping ?? "mojang",
208
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
205
209
  maxCandidates: input.maxCandidates
206
210
  });
207
211
  return {
@@ -243,6 +247,7 @@ export class AnalyzeSymbolService {
243
247
  : input.subject.name,
244
248
  descriptor: input.subject.descriptor,
245
249
  mapping: input.sourceMapping,
250
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
246
251
  toVersion: input.version,
247
252
  maxVersions: 5
248
253
  });
@@ -286,6 +291,7 @@ export class AnalyzeSymbolService {
286
291
  owner: input.subject.owner,
287
292
  descriptor: input.subject.descriptor,
288
293
  sourceMapping: input.sourceMapping ?? "obfuscated",
294
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
289
295
  maxCandidates: input.maxCandidates
290
296
  });
291
297
  return {
@@ -328,6 +334,7 @@ export class AnalyzeSymbolService {
328
334
  className: input.subject.name,
329
335
  classNameMapping,
330
336
  includeKinds: input.includeKinds,
337
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
331
338
  maxRows: input.maxRows
332
339
  });
333
340
  return {
@@ -19,6 +19,7 @@ export type BatchClassMembersInput = {
19
19
  sourcePriority?: MappingSourcePriority;
20
20
  allowDecompile?: boolean;
21
21
  projectPath?: string;
22
+ gradleUserHome?: string;
22
23
  scope?: ArtifactScope;
23
24
  preferProjectVersion?: boolean;
24
25
  strictVersion?: boolean;
@@ -21,6 +21,7 @@ export class BatchClassMembersService {
21
21
  sourcePriority: input.sourcePriority,
22
22
  allowDecompile: input.allowDecompile,
23
23
  projectPath: input.projectPath,
24
+ gradleUserHome: input.gradleUserHome,
24
25
  scope: input.scope,
25
26
  preferProjectVersion: input.preferProjectVersion,
26
27
  strictVersion: input.strictVersion
@@ -56,6 +57,7 @@ export class BatchClassMembersService {
56
57
  sourcePriority: input.sourcePriority,
57
58
  allowDecompile: input.allowDecompile,
58
59
  projectPath: input.projectPath,
60
+ gradleUserHome: input.gradleUserHome,
59
61
  scope: input.scope,
60
62
  preferProjectVersion: input.preferProjectVersion,
61
63
  strictVersion: input.strictVersion
@@ -17,6 +17,7 @@ export type BatchClassSourceInput = {
17
17
  sourcePriority?: MappingSourcePriority;
18
18
  allowDecompile?: boolean;
19
19
  projectPath?: string;
20
+ gradleUserHome?: string;
20
21
  scope?: ArtifactScope;
21
22
  preferProjectVersion?: boolean;
22
23
  strictVersion?: boolean;
@@ -21,6 +21,7 @@ export class BatchClassSourceService {
21
21
  sourcePriority: input.sourcePriority,
22
22
  allowDecompile: input.allowDecompile,
23
23
  projectPath: input.projectPath,
24
+ gradleUserHome: input.gradleUserHome,
24
25
  scope: input.scope,
25
26
  preferProjectVersion: input.preferProjectVersion,
26
27
  strictVersion: input.strictVersion
@@ -57,6 +58,7 @@ export class BatchClassSourceService {
57
58
  sourcePriority: input.sourcePriority,
58
59
  allowDecompile: input.allowDecompile,
59
60
  projectPath: input.projectPath,
61
+ gradleUserHome: input.gradleUserHome,
60
62
  scope: input.scope,
61
63
  preferProjectVersion: input.preferProjectVersion,
62
64
  strictVersion: input.strictVersion
@@ -23,6 +23,7 @@ export type BatchMappingsInput = {
23
23
  version: string;
24
24
  sourcePriority?: MappingSourcePriority;
25
25
  projectPath?: string;
26
+ gradleUserHome?: string;
26
27
  concurrency?: number;
27
28
  failFast?: boolean;
28
29
  compact?: boolean;
@@ -26,6 +26,7 @@ export class BatchMappingsService {
26
26
  targetMapping: entry.targetMapping,
27
27
  sourcePriority: input.sourcePriority,
28
28
  projectPath: input.projectPath,
29
+ gradleUserHome: input.gradleUserHome,
29
30
  signatureMode: entry.signatureMode,
30
31
  disambiguation: entry.disambiguation,
31
32
  maxCandidates: entry.maxCandidates
@@ -30,6 +30,7 @@ export type BatchSymbolExistsInput = {
30
30
  sourcePriority?: MappingSourcePriority;
31
31
  allowDecompile?: boolean;
32
32
  projectPath?: string;
33
+ gradleUserHome?: string;
33
34
  scope?: ArtifactScope;
34
35
  preferProjectVersion?: boolean;
35
36
  strictVersion?: boolean;
@@ -35,6 +35,7 @@ export class BatchSymbolExistsService {
35
35
  sourcePriority: input.sourcePriority,
36
36
  allowDecompile: input.allowDecompile,
37
37
  projectPath: input.projectPath,
38
+ gradleUserHome: input.gradleUserHome,
38
39
  scope: input.scope,
39
40
  preferProjectVersion: input.preferProjectVersion,
40
41
  strictVersion: input.strictVersion
@@ -71,6 +72,7 @@ export class BatchSymbolExistsService {
71
72
  descriptor: entry.descriptor,
72
73
  sourceMapping: sharedArtifact.sourceMapping,
73
74
  sourcePriority: input.sourcePriority,
75
+ gradleUserHome: input.gradleUserHome,
74
76
  nameMode: entry.nameMode,
75
77
  signatureMode: entry.signatureMode,
76
78
  maxCandidates: entry.maxCandidates,
@@ -26,12 +26,14 @@ export declare const compareMinecraftShape: {
26
26
  toVersion: z.ZodString;
27
27
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
28
28
  sourcePriority: z.ZodOptional<z.ZodEnum<["loom-first", "maven-first"]>>;
29
+ gradleUserHome: z.ZodOptional<z.ZodString>;
29
30
  }, "strip", z.ZodTypeAny, {
30
31
  kind: "class";
31
32
  className: string;
32
33
  fromVersion: string;
33
34
  toVersion: string;
34
35
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
36
+ gradleUserHome?: string | undefined;
35
37
  sourcePriority?: "loom-first" | "maven-first" | undefined;
36
38
  }, {
37
39
  kind: "class";
@@ -39,6 +41,7 @@ export declare const compareMinecraftShape: {
39
41
  fromVersion: string;
40
42
  toVersion: string;
41
43
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
44
+ gradleUserHome?: string | undefined;
42
45
  sourcePriority?: "loom-first" | "maven-first" | undefined;
43
46
  }>, z.ZodObject<{
44
47
  kind: z.ZodLiteral<"registry">;
@@ -87,12 +90,14 @@ export declare const compareMinecraftSchema: z.ZodObject<{
87
90
  toVersion: z.ZodString;
88
91
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
89
92
  sourcePriority: z.ZodOptional<z.ZodEnum<["loom-first", "maven-first"]>>;
93
+ gradleUserHome: z.ZodOptional<z.ZodString>;
90
94
  }, "strip", z.ZodTypeAny, {
91
95
  kind: "class";
92
96
  className: string;
93
97
  fromVersion: string;
94
98
  toVersion: string;
95
99
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
100
+ gradleUserHome?: string | undefined;
96
101
  sourcePriority?: "loom-first" | "maven-first" | undefined;
97
102
  }, {
98
103
  kind: "class";
@@ -100,6 +105,7 @@ export declare const compareMinecraftSchema: z.ZodObject<{
100
105
  fromVersion: string;
101
106
  toVersion: string;
102
107
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
108
+ gradleUserHome?: string | undefined;
103
109
  sourcePriority?: "loom-first" | "maven-first" | undefined;
104
110
  }>, z.ZodObject<{
105
111
  kind: z.ZodLiteral<"registry">;
@@ -136,6 +142,7 @@ export declare const compareMinecraftSchema: z.ZodObject<{
136
142
  fromVersion: string;
137
143
  toVersion: string;
138
144
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
145
+ gradleUserHome?: string | undefined;
139
146
  sourcePriority?: "loom-first" | "maven-first" | undefined;
140
147
  } | {
141
148
  kind: "registry";
@@ -161,6 +168,7 @@ export declare const compareMinecraftSchema: z.ZodObject<{
161
168
  fromVersion: string;
162
169
  toVersion: string;
163
170
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
171
+ gradleUserHome?: string | undefined;
164
172
  sourcePriority?: "loom-first" | "maven-first" | undefined;
165
173
  } | {
166
174
  kind: "registry";
@@ -191,6 +199,7 @@ type CompareMinecraftDeps = {
191
199
  toVersion: string;
192
200
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
193
201
  sourcePriority?: "loom-first" | "maven-first";
202
+ gradleUserHome?: string;
194
203
  includeFullDiff?: boolean;
195
204
  }) => Promise<DiffClassSignaturesOutput>;
196
205
  getRegistryData: (input: {
@@ -18,7 +18,8 @@ const subjectSchema = z.discriminatedUnion("kind", [
18
18
  fromVersion: nonEmptyString,
19
19
  toVersion: nonEmptyString,
20
20
  mapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
21
- sourcePriority: z.enum(["loom-first", "maven-first"]).optional()
21
+ sourcePriority: z.enum(["loom-first", "maven-first"]).optional(),
22
+ gradleUserHome: nonEmptyString.optional()
22
23
  }),
23
24
  z.object({
24
25
  kind: z.literal("registry"),
@@ -175,6 +176,7 @@ export class CompareMinecraftService {
175
176
  toVersion: input.subject.toVersion,
176
177
  mapping: input.subject.mapping,
177
178
  sourcePriority: input.subject.sourcePriority,
179
+ ...(input.subject.gradleUserHome !== undefined ? { gradleUserHome: input.subject.gradleUserHome } : {}),
178
180
  includeFullDiff: input.includeFullDiff
179
181
  });
180
182
  const changedCount = output.summary.total.added +
@@ -12,6 +12,7 @@ export async function handleClassMembers(deps, subject, detail, include, limit)
12
12
  mapping: classSubject.mapping,
13
13
  scope: classSubject.scope,
14
14
  projectPath: classSubject.projectPath,
15
+ gradleUserHome: classSubject.gradleUserHome,
15
16
  preferProjectVersion: classSubject.preferProjectVersion,
16
17
  strictVersion: classSubject.strictVersion,
17
18
  maxMembers: limit
@@ -43,7 +43,8 @@ export async function handleClassOverview(deps, subject, detail, include) {
43
43
  const partialSourceFallback = subject.kind === "workspace" && hasPartialVanillaCoverage(artifact.artifact)
44
44
  ? await resolveBinaryBackedClass(deps, className, {
45
45
  version: artifact.version,
46
- mapping: classSubject.mapping
46
+ mapping: classSubject.mapping,
47
+ gradleUserHome: classSubject.gradleUserHome
47
48
  })
48
49
  : undefined;
49
50
  if (partialSourceFallback) {
@@ -53,6 +54,7 @@ export async function handleClassOverview(deps, subject, detail, include) {
53
54
  mapping: classSubject.mapping,
54
55
  scope: classSubject.scope,
55
56
  projectPath: classSubject.projectPath,
57
+ gradleUserHome: classSubject.gradleUserHome,
56
58
  preferProjectVersion: classSubject.preferProjectVersion,
57
59
  strictVersion: classSubject.strictVersion,
58
60
  mode: "metadata"
@@ -13,6 +13,7 @@ export async function handleClassSource(deps, subject, detail, include) {
13
13
  mapping: classSubject.mapping,
14
14
  scope: classSubject.scope,
15
15
  projectPath: classSubject.projectPath,
16
+ gradleUserHome: classSubject.gradleUserHome,
16
17
  preferProjectVersion: classSubject.preferProjectVersion,
17
18
  strictVersion: classSubject.strictVersion,
18
19
  mode: include.includes("source") || detail === "full" ? "snippet" : "metadata"
@@ -35,6 +35,7 @@ export async function handleListFiles(deps, subject, detail, include, limit, cur
35
35
  projectPath: subject.projectPath,
36
36
  mapping: subject.mapping,
37
37
  scope: subject.scope,
38
+ gradleUserHome: subject.gradleUserHome,
38
39
  preferProjectVersion: subject.preferProjectVersion,
39
40
  strictVersion: subject.strictVersion,
40
41
  focus: {
@@ -34,7 +34,8 @@ export async function handleSearch(deps, subject, detail, include, limit, cursor
34
34
  const binaryBackedClassHit = needsBinaryBackedClassHit
35
35
  ? await resolveBinaryBackedClass(deps, searchSubject.query, {
36
36
  version: artifact.version,
37
- mapping: subject.mapping
37
+ mapping: subject.mapping,
38
+ gradleUserHome: subject.gradleUserHome
38
39
  })
39
40
  : undefined;
40
41
  const binaryBackedHitRecord = binaryBackedClassHit == null
@@ -251,6 +251,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
251
251
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
252
252
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
253
253
  projectPath: z.ZodOptional<z.ZodString>;
254
+ gradleUserHome: z.ZodOptional<z.ZodString>;
254
255
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
255
256
  strictVersion: z.ZodOptional<z.ZodBoolean>;
256
257
  }, "strip", z.ZodTypeAny, {
@@ -259,6 +260,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
259
260
  projectPath?: string | undefined;
260
261
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
261
262
  scope?: "vanilla" | "merged" | "loader" | undefined;
263
+ gradleUserHome?: string | undefined;
262
264
  preferProjectVersion?: boolean | undefined;
263
265
  strictVersion?: boolean | undefined;
264
266
  }, {
@@ -267,6 +269,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
267
269
  projectPath?: string | undefined;
268
270
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
269
271
  scope?: "vanilla" | "merged" | "loader" | undefined;
272
+ gradleUserHome?: string | undefined;
270
273
  preferProjectVersion?: boolean | undefined;
271
274
  strictVersion?: boolean | undefined;
272
275
  }>, z.ZodObject<{
@@ -308,6 +311,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
308
311
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
309
312
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
310
313
  projectPath: z.ZodOptional<z.ZodString>;
314
+ gradleUserHome: z.ZodOptional<z.ZodString>;
311
315
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
312
316
  strictVersion: z.ZodOptional<z.ZodBoolean>;
313
317
  }, "strip", z.ZodTypeAny, {
@@ -325,6 +329,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
325
329
  projectPath?: string | undefined;
326
330
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
327
331
  scope?: "vanilla" | "merged" | "loader" | undefined;
332
+ gradleUserHome?: string | undefined;
328
333
  preferProjectVersion?: boolean | undefined;
329
334
  strictVersion?: boolean | undefined;
330
335
  }, {
@@ -342,6 +347,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
342
347
  projectPath?: string | undefined;
343
348
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
344
349
  scope?: "vanilla" | "merged" | "loader" | undefined;
350
+ gradleUserHome?: string | undefined;
345
351
  preferProjectVersion?: boolean | undefined;
346
352
  strictVersion?: boolean | undefined;
347
353
  }>, z.ZodObject<{
@@ -384,6 +390,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
384
390
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
385
391
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
386
392
  projectPath: z.ZodOptional<z.ZodString>;
393
+ gradleUserHome: z.ZodOptional<z.ZodString>;
387
394
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
388
395
  strictVersion: z.ZodOptional<z.ZodBoolean>;
389
396
  }, "strip", z.ZodTypeAny, {
@@ -392,6 +399,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
392
399
  projectPath?: string | undefined;
393
400
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
394
401
  scope?: "vanilla" | "merged" | "loader" | undefined;
402
+ gradleUserHome?: string | undefined;
395
403
  preferProjectVersion?: boolean | undefined;
396
404
  strictVersion?: boolean | undefined;
397
405
  artifact?: {
@@ -410,6 +418,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
410
418
  projectPath?: string | undefined;
411
419
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
412
420
  scope?: "vanilla" | "merged" | "loader" | undefined;
421
+ gradleUserHome?: string | undefined;
413
422
  preferProjectVersion?: boolean | undefined;
414
423
  strictVersion?: boolean | undefined;
415
424
  artifact?: {
@@ -571,6 +580,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
571
580
  projectPath: z.ZodString;
572
581
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
573
582
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
583
+ gradleUserHome: z.ZodOptional<z.ZodString>;
574
584
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
575
585
  strictVersion: z.ZodOptional<z.ZodBoolean>;
576
586
  focus: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
@@ -786,6 +796,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
786
796
  projectPath: string;
787
797
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
788
798
  scope?: "vanilla" | "merged" | "loader" | undefined;
799
+ gradleUserHome?: string | undefined;
789
800
  preferProjectVersion?: boolean | undefined;
790
801
  strictVersion?: boolean | undefined;
791
802
  focus?: {
@@ -839,6 +850,7 @@ export declare const subjectSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject
839
850
  projectPath: string;
840
851
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
841
852
  scope?: "vanilla" | "merged" | "loader" | undefined;
853
+ gradleUserHome?: string | undefined;
842
854
  preferProjectVersion?: boolean | undefined;
843
855
  strictVersion?: boolean | undefined;
844
856
  focus?: {
@@ -922,6 +934,7 @@ export type InspectMinecraftDeps = {
922
934
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
923
935
  scope?: "vanilla" | "merged" | "loader";
924
936
  projectPath?: string;
937
+ gradleUserHome?: string;
925
938
  preferProjectVersion?: boolean;
926
939
  strictVersion?: boolean;
927
940
  }) => Promise<ResolveArtifactOutput>;
@@ -938,6 +951,7 @@ export type InspectMinecraftDeps = {
938
951
  descriptor?: string;
939
952
  sourceMapping: "obfuscated" | "mojang" | "intermediary" | "yarn";
940
953
  sourcePriority?: "loom-first" | "maven-first";
954
+ gradleUserHome?: string;
941
955
  nameMode?: "fqcn" | "auto";
942
956
  signatureMode?: "exact" | "name-only";
943
957
  maxCandidates?: number;
@@ -952,6 +966,7 @@ export type InspectMinecraftDeps = {
952
966
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
953
967
  scope?: "vanilla" | "merged" | "loader";
954
968
  projectPath?: string;
969
+ gradleUserHome?: string;
955
970
  preferProjectVersion?: boolean;
956
971
  strictVersion?: boolean;
957
972
  mode?: "metadata" | "snippet" | "full";
@@ -968,6 +983,7 @@ export type InspectMinecraftDeps = {
968
983
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
969
984
  scope?: "vanilla" | "merged" | "loader";
970
985
  projectPath?: string;
986
+ gradleUserHome?: string;
971
987
  preferProjectVersion?: boolean;
972
988
  strictVersion?: boolean;
973
989
  maxMembers?: number;
@@ -1030,6 +1046,7 @@ export declare function invalidTaskSubjectError(task: ConcreteInspectMinecraftTa
1030
1046
  export declare function resolveBinaryBackedClass(deps: InspectMinecraftDeps, className: string, input: {
1031
1047
  version?: string;
1032
1048
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn";
1049
+ gradleUserHome?: string;
1033
1050
  }): Promise<{
1034
1051
  className: string;
1035
1052
  warnings: string[];