@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
@@ -138,7 +138,10 @@ function buildProvenance(input) {
138
138
  }
139
139
  export async function discoverVersionSourceJar(_svc, input) {
140
140
  const normalizedProjectPath = normalizeOptionalProjectPath(input.projectPath);
141
- const searchRoots = buildVersionSourceSearchRoots(normalizedProjectPath);
141
+ const searchRoots = buildVersionSourceSearchRoots({
142
+ projectPath: normalizedProjectPath,
143
+ gradleUserHome: input.gradleUserHome
144
+ });
142
145
  const searchedPaths = [];
143
146
  const candidates = [];
144
147
  const seen = new Set();
@@ -267,7 +270,8 @@ export async function probeMinecraftArtifact(svc, input) {
267
270
  }
268
271
  const versionSourceDiscovery = await svc.discoverVersionSourceJar({
269
272
  version: resolvedVersion,
270
- projectPath: input.projectPath
273
+ projectPath: input.projectPath,
274
+ gradleUserHome: input.gradleUserHome
271
275
  });
272
276
  if (!versionSourceDiscovery.selectedSourceJarPath) {
273
277
  throw createError({
@@ -311,7 +315,10 @@ export async function discoverAccessWidenerRuntimeCandidates(_svc, input) {
311
315
  const normalizedProjectPathLower = normalizedProjectPath
312
316
  ? normalizePathStyle(normalizedProjectPath).toLowerCase()
313
317
  : undefined;
314
- const searchRoots = buildVersionSourceSearchRoots(normalizedProjectPath);
318
+ const searchRoots = buildVersionSourceSearchRoots({
319
+ projectPath: normalizedProjectPath,
320
+ gradleUserHome: input.gradleUserHome
321
+ });
315
322
  const searchedPaths = [];
316
323
  const candidates = [];
317
324
  const seen = new Set();
@@ -381,7 +388,10 @@ export async function discoverAccessTransformerRuntimeCandidates(_svc, input) {
381
388
  const normalizedProjectPathLower = normalizedProjectPath
382
389
  ? normalizePathStyle(normalizedProjectPath).toLowerCase()
383
390
  : undefined;
384
- const searchRoots = buildLoaderRuntimeSearchRoots(normalizedProjectPath);
391
+ const searchRoots = buildLoaderRuntimeSearchRoots({
392
+ projectPath: normalizedProjectPath,
393
+ gradleUserHome: input.gradleUserHome
394
+ });
385
395
  const searchedPaths = [];
386
396
  const candidates = [];
387
397
  const seen = new Set();
@@ -491,6 +501,7 @@ export async function resolveAccessWidenerRuntimeArtifact(svc, input) {
491
501
  const discovery = await svc.discoverAccessWidenerRuntimeCandidates({
492
502
  version,
493
503
  projectPath: normalizedProjectPath,
504
+ gradleUserHome: input.gradleUserHome,
494
505
  requestedScope
495
506
  });
496
507
  if (!discovery.selected) {
@@ -622,6 +633,7 @@ export async function resolveAccessTransformerRuntimeArtifact(svc, input) {
622
633
  const discovery = await svc.discoverAccessTransformerRuntimeCandidates({
623
634
  version,
624
635
  projectPath: normalizedProjectPath,
636
+ gradleUserHome: input.gradleUserHome,
625
637
  requestedScope,
626
638
  atNamespace: input.atNamespace,
627
639
  loader
@@ -790,7 +802,8 @@ async function computeBinaryRemapGate(svc, input) {
790
802
  const health = await svc.mappingService.checkMappingHealth({
791
803
  version: input.version,
792
804
  requestedMapping: "mojang",
793
- sourcePriority: input.sourcePriority
805
+ sourcePriority: input.sourcePriority,
806
+ gradleUserHome: input.gradleUserHome
794
807
  });
795
808
  mojangAvailable = health.mojangMappingsAvailable;
796
809
  }
@@ -1026,7 +1039,8 @@ export async function resolveArtifact(svc, input) {
1026
1039
  scope !== "vanilla") {
1027
1040
  versionSourceDiscovery = await svc.discoverVersionSourceJar({
1028
1041
  version: resolvedVersion,
1029
- projectPath: input.projectPath
1042
+ projectPath: input.projectPath,
1043
+ gradleUserHome: input.gradleUserHome
1030
1044
  });
1031
1045
  if (versionSourceDiscovery.selectedSourceJarPath) {
1032
1046
  resolvedTarget = {
@@ -1045,6 +1059,7 @@ export async function resolveArtifact(svc, input) {
1045
1059
  version: resolvedVersion,
1046
1060
  targetKind: kind,
1047
1061
  sourcePriority: input.sourcePriority,
1062
+ gradleUserHome: input.gradleUserHome,
1048
1063
  forceBinaryRemapDisabled: dependencyOrigin
1049
1064
  });
1050
1065
  if (binaryRemapGate.warnings.length > 0) {
@@ -1137,7 +1152,8 @@ export async function resolveArtifact(svc, input) {
1137
1152
  version: resolved.version,
1138
1153
  sourceMapping: "obfuscated",
1139
1154
  targetMapping: effectiveMapping,
1140
- sourcePriority: input.sourcePriority
1155
+ sourcePriority: input.sourcePriority,
1156
+ gradleUserHome: input.gradleUserHome
1141
1157
  });
1142
1158
  additionalTransformChain.push(...mappingAvailability.transformChain);
1143
1159
  if (mappingAvailability.warnings.length > 0) {
@@ -20,6 +20,7 @@ export type RemapMembersInput = {
20
20
  mappingApplied: SourceMapping;
21
21
  requestedMapping: SourceMapping;
22
22
  sourcePriority: MappingSourcePriority | undefined;
23
+ gradleUserHome?: string;
23
24
  memberPattern: string | undefined;
24
25
  warnings: string[];
25
26
  };
@@ -3,7 +3,7 @@ export async function remapAndCountMembers(svc, input) {
3
3
  if (input.version == null) {
4
4
  return members;
5
5
  }
6
- const result = await svc.remapSignatureMembers(members, kind, input.version, input.mappingApplied, input.requestedMapping, input.sourcePriority, input.warnings);
6
+ const result = await svc.remapSignatureMembers(members, kind, input.version, input.mappingApplied, input.requestedMapping, input.sourcePriority, input.warnings, undefined, input.gradleUserHome);
7
7
  return result.members;
8
8
  };
9
9
  let constructors = await remap(input.signatureConstructors, "method");
@@ -9,6 +9,7 @@ export declare function resolveClassNameForLookup(svc: SourceService, input: {
9
9
  sourceMapping: SourceMapping;
10
10
  targetMapping: SourceMapping;
11
11
  sourcePriority: MappingSourcePriority | undefined;
12
+ gradleUserHome?: string;
12
13
  warnings: string[];
13
14
  context: string;
14
15
  }): Promise<string>;
@@ -108,7 +108,8 @@ export async function resolveClassNameForLookup(svc, input) {
108
108
  name: input.className,
109
109
  sourceMapping: input.sourceMapping,
110
110
  targetMapping: input.targetMapping,
111
- sourcePriority: input.sourcePriority
111
+ sourcePriority: input.sourcePriority,
112
+ gradleUserHome: input.gradleUserHome
112
113
  });
113
114
  if (mapped.resolved && mapped.resolvedSymbol) {
114
115
  return mapped.resolvedSymbol.name;
@@ -401,6 +402,7 @@ export async function getClassSource(svc, input) {
401
402
  sourcePriority: input.sourcePriority,
402
403
  allowDecompile: input.allowDecompile,
403
404
  projectPath: input.projectPath,
405
+ gradleUserHome: input.gradleUserHome,
404
406
  scope: input.scope,
405
407
  preferProjectVersion: input.preferProjectVersion,
406
408
  strictVersion: input.strictVersion
@@ -488,6 +490,7 @@ export async function getClassSource(svc, input) {
488
490
  sourceMapping: requestedMapping,
489
491
  targetMapping: activeMappingApplied,
490
492
  sourcePriority: input.sourcePriority,
493
+ gradleUserHome: input.gradleUserHome,
491
494
  warnings,
492
495
  context: "source lookup"
493
496
  });
@@ -499,6 +502,7 @@ export async function getClassSource(svc, input) {
499
502
  sourceMapping: requestedMapping,
500
503
  targetMapping: activeMappingApplied,
501
504
  sourcePriority: input.sourcePriority,
505
+ gradleUserHome: input.gradleUserHome,
502
506
  warnings,
503
507
  context: "source lookup"
504
508
  });
@@ -528,6 +532,7 @@ export async function getClassSource(svc, input) {
528
532
  sourceMapping: requestedMapping,
529
533
  targetMapping: activeMappingApplied,
530
534
  sourcePriority: input.sourcePriority,
535
+ gradleUserHome: input.gradleUserHome,
531
536
  warnings,
532
537
  context: "source lookup"
533
538
  });
@@ -659,6 +664,7 @@ export async function getClassMembers(svc, input) {
659
664
  sourcePriority: input.sourcePriority,
660
665
  allowDecompile: input.allowDecompile,
661
666
  projectPath: input.projectPath,
667
+ gradleUserHome: input.gradleUserHome,
662
668
  scope: input.scope,
663
669
  preferProjectVersion: input.preferProjectVersion,
664
670
  strictVersion: input.strictVersion
@@ -726,6 +732,7 @@ export async function getClassMembers(svc, input) {
726
732
  sourceMapping: requestedMapping,
727
733
  targetMapping: mappingApplied,
728
734
  sourcePriority: input.sourcePriority,
735
+ gradleUserHome: input.gradleUserHome,
729
736
  warnings,
730
737
  context: "binary lookup"
731
738
  });
@@ -775,6 +782,7 @@ export async function getClassMembers(svc, input) {
775
782
  mappingApplied,
776
783
  requestedMapping,
777
784
  sourcePriority: input.sourcePriority,
785
+ gradleUserHome: input.gradleUserHome,
778
786
  memberPattern,
779
787
  warnings
780
788
  });
@@ -63,10 +63,10 @@ export async function diffClassSignatures(svc, input) {
63
63
  });
64
64
  }
65
65
  const mappingWarnings = [];
66
- const obfuscatedFromClassName = await resolveToObfuscatedClassName(svc, className, fromVersion, mapping, input.sourcePriority, mappingWarnings);
66
+ const obfuscatedFromClassName = await resolveToObfuscatedClassName(svc, className, fromVersion, mapping, input.sourcePriority, mappingWarnings, input.gradleUserHome);
67
67
  const obfuscatedToClassName = fromVersion === toVersion
68
68
  ? obfuscatedFromClassName
69
- : await resolveToObfuscatedClassName(svc, className, toVersion, mapping, input.sourcePriority, mappingWarnings);
69
+ : await resolveToObfuscatedClassName(svc, className, toVersion, mapping, input.sourcePriority, mappingWarnings, input.gradleUserHome);
70
70
  const [fromResolved, toResolved] = await Promise.all([
71
71
  svc.versionService.resolveVersionJar(fromVersion),
72
72
  svc.versionService.resolveVersionJar(toVersion)
@@ -176,8 +176,8 @@ export async function diffClassSignatures(svc, input) {
176
176
  // Remap diff delta members for non-obfuscated mappings
177
177
  const remapDelta = async (delta, kind) => {
178
178
  const [addedResult, removedResult] = await Promise.all([
179
- svc.remapSignatureMembers(delta.added, kind, toVersion, "obfuscated", mapping, input.sourcePriority, warnings),
180
- svc.remapSignatureMembers(delta.removed, kind, fromVersion, "obfuscated", mapping, input.sourcePriority, warnings)
179
+ svc.remapSignatureMembers(delta.added, kind, toVersion, "obfuscated", mapping, input.sourcePriority, warnings, undefined, input.gradleUserHome),
180
+ svc.remapSignatureMembers(delta.removed, kind, fromVersion, "obfuscated", mapping, input.sourcePriority, warnings, undefined, input.gradleUserHome)
181
181
  ]);
182
182
  const remappedModified = await Promise.all(delta.modified.map(async (change) => {
183
183
  if (!change.from || !change.to) {
@@ -194,8 +194,8 @@ export async function diffClassSignatures(svc, input) {
194
194
  });
195
195
  }
196
196
  const [fromResult, toResult] = await Promise.all([
197
- svc.remapSignatureMembers([change.from], kind, fromVersion, "obfuscated", mapping, input.sourcePriority, warnings),
198
- svc.remapSignatureMembers([change.to], kind, toVersion, "obfuscated", mapping, input.sourcePriority, warnings)
197
+ svc.remapSignatureMembers([change.from], kind, fromVersion, "obfuscated", mapping, input.sourcePriority, warnings, undefined, input.gradleUserHome),
198
+ svc.remapSignatureMembers([change.to], kind, toVersion, "obfuscated", mapping, input.sourcePriority, warnings, undefined, input.gradleUserHome)
199
199
  ]);
200
200
  const fromMember = fromResult.members[0];
201
201
  const toMember = toResult.members[0];
@@ -11,12 +11,12 @@ export declare function rejectLifecycleClassLikeInput(svc: SourceService, input:
11
11
  sourcePriority?: MappingSourcePriority;
12
12
  }): void;
13
13
  export declare function releaseLifecycleMappingGraph(svc: SourceService, version: string, sourcePriority: MappingSourcePriority | undefined): void;
14
- export declare function resolveToObfuscatedClassName(svc: SourceService, className: string, version: string, mapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[]): Promise<string>;
15
- export declare function resolveToObfuscatedMemberName(svc: SourceService, name: string, ownerInSourceMapping: string, descriptor: string | undefined, kind: "field" | "method", version: string, mapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[]): Promise<{
14
+ export declare function resolveToObfuscatedClassName(svc: SourceService, className: string, version: string, mapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], gradleUserHome?: string): Promise<string>;
15
+ export declare function resolveToObfuscatedMemberName(svc: SourceService, name: string, ownerInSourceMapping: string, descriptor: string | undefined, kind: "field" | "method", version: string, mapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], gradleUserHome?: string): Promise<{
16
16
  name: string;
17
17
  descriptor?: string;
18
18
  }>;
19
- export declare function remapSignatureMembers(svc: SourceService, members: SignatureMember[], kind: "field" | "method", version: string, sourceMapping: SourceMapping, targetMapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], projectPath?: string): Promise<{
19
+ export declare function remapSignatureMembers(svc: SourceService, members: SignatureMember[], kind: "field" | "method", version: string, sourceMapping: SourceMapping, targetMapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], projectPath?: string, gradleUserHome?: string): Promise<{
20
20
  members: SignatureMember[];
21
21
  failedNames: Set<string>;
22
22
  }>;
@@ -58,18 +58,19 @@ export function releaseLifecycleMappingGraph(svc, version, sourcePriority) {
58
58
  svc.mappingService.releaseGraphCacheEntry(version, sourcePriority);
59
59
  }
60
60
  }
61
- export async function resolveToObfuscatedClassName(svc, className, version, mapping, sourcePriority, warnings) {
61
+ export async function resolveToObfuscatedClassName(svc, className, version, mapping, sourcePriority, warnings, gradleUserHome) {
62
62
  return svc.resolveClassNameForLookup({
63
63
  className,
64
64
  version,
65
65
  sourceMapping: mapping,
66
66
  targetMapping: "obfuscated",
67
67
  sourcePriority,
68
+ gradleUserHome,
68
69
  warnings,
69
70
  context: "bytecode lookup"
70
71
  });
71
72
  }
72
- export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapping, descriptor, kind, version, mapping, sourcePriority, warnings) {
73
+ export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapping, descriptor, kind, version, mapping, sourcePriority, warnings, gradleUserHome) {
73
74
  if (mapping === "obfuscated") {
74
75
  return {
75
76
  name,
@@ -89,7 +90,8 @@ export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapp
89
90
  descriptor,
90
91
  sourceMapping: mapping,
91
92
  targetMapping: "obfuscated",
92
- sourcePriority
93
+ sourcePriority,
94
+ gradleUserHome
93
95
  })
94
96
  : await svc.mappingService.findMapping({
95
97
  version,
@@ -108,7 +110,8 @@ export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapp
108
110
  : undefined,
109
111
  sourceMapping: mapping,
110
112
  targetMapping: "obfuscated",
111
- sourcePriority
113
+ sourcePriority,
114
+ gradleUserHome
112
115
  });
113
116
  warnings.push(...mapped.warnings);
114
117
  if (mapped.resolved && mapped.resolvedSymbol) {
@@ -127,7 +130,8 @@ export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapp
127
130
  signatureMode: "exact",
128
131
  sourceMapping: mapping,
129
132
  targetMapping: "obfuscated",
130
- sourcePriority
133
+ sourcePriority,
134
+ gradleUserHome
131
135
  });
132
136
  warnings.push(...fallbackMapped.warnings);
133
137
  if (fallbackMapped.resolved && fallbackMapped.resolvedSymbol) {
@@ -147,7 +151,7 @@ export async function resolveToObfuscatedMemberName(svc, name, ownerInSourceMapp
147
151
  descriptor: kind === "method" ? descriptor : undefined
148
152
  };
149
153
  }
150
- export async function remapSignatureMembers(svc, members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath) {
154
+ export async function remapSignatureMembers(svc, members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath, gradleUserHome) {
151
155
  const failedNames = new Set();
152
156
  if (sourceMapping === targetMapping) {
153
157
  return { members, failedNames };
@@ -174,7 +178,8 @@ export async function remapSignatureMembers(svc, members, kind, version, sourceM
174
178
  sourceMapping,
175
179
  targetMapping,
176
180
  sourcePriority,
177
- projectPath
181
+ projectPath,
182
+ gradleUserHome
178
183
  });
179
184
  if (mapped.resolved && mapped.resolvedSymbol) {
180
185
  ownerToRemapped.set(obfuscatedFqn, mapped.resolvedSymbol.name);
@@ -207,7 +212,8 @@ export async function remapSignatureMembers(svc, members, kind, version, sourceM
207
212
  sourceMapping,
208
213
  targetMapping,
209
214
  sourcePriority,
210
- projectPath
215
+ projectPath,
216
+ gradleUserHome
211
217
  });
212
218
  if (mapped.resolved && mapped.resolvedSymbol) {
213
219
  ownerToRemapped.set(dotFqn, mapped.resolvedSymbol.name);
@@ -242,7 +248,8 @@ export async function remapSignatureMembers(svc, members, kind, version, sourceM
242
248
  sourceMapping,
243
249
  targetMapping,
244
250
  sourcePriority,
245
- projectPath
251
+ projectPath,
252
+ gradleUserHome
246
253
  });
247
254
  if (exactResult.resolved && exactResult.resolvedSymbol) {
248
255
  memberKeyToRemapped.set(key, exactResult.resolvedSymbol.name);
@@ -270,6 +277,7 @@ export async function remapSignatureMembers(svc, members, kind, version, sourceM
270
277
  targetMapping,
271
278
  sourcePriority,
272
279
  projectPath,
280
+ gradleUserHome,
273
281
  disambiguation: {
274
282
  ownerHint: targetOwner,
275
283
  descriptorHint: remappedDescriptorHint
@@ -123,8 +123,8 @@ export async function traceSymbolLifecycle(svc, input) {
123
123
  const versionWarnings = [];
124
124
  try {
125
125
  const [obfuscatedClassName, obfuscatedMethod, resolvedJar] = await Promise.all([
126
- resolveToObfuscatedClassName(svc, userClassName, version, mapping, input.sourcePriority, versionWarnings),
127
- resolveToObfuscatedMemberName(svc, userMethodName, userClassName, descriptor, "method", version, mapping, input.sourcePriority, versionWarnings),
126
+ resolveToObfuscatedClassName(svc, userClassName, version, mapping, input.sourcePriority, versionWarnings, input.gradleUserHome),
127
+ resolveToObfuscatedMemberName(svc, userMethodName, userClassName, descriptor, "method", version, mapping, input.sourcePriority, versionWarnings, input.gradleUserHome),
128
128
  svc.versionService.resolveVersionJar(version)
129
129
  ]);
130
130
  const signature = await svc.explorerService.getSignature({
@@ -250,6 +250,7 @@ export async function searchClassSource(svc, input) {
250
250
  sourceMapping: input.queryNamespace,
251
251
  targetMapping: artifactMapping,
252
252
  sourcePriority: input.sourcePriority,
253
+ gradleUserHome: input.gradleUserHome,
253
254
  signatureMode: "name-only",
254
255
  maxCandidates: 5
255
256
  });
@@ -106,6 +106,7 @@ export async function resolveWorkspaceSymbol(svc, input) {
106
106
  sourceMapping: input.sourceMapping,
107
107
  targetMapping: mappingApplied,
108
108
  sourcePriority: input.sourcePriority,
109
+ gradleUserHome: input.gradleUserHome,
109
110
  maxCandidates: input.maxCandidates
110
111
  });
111
112
  return {
@@ -121,7 +122,8 @@ export async function resolveWorkspaceSymbol(svc, input) {
121
122
  className,
122
123
  classNameMapping: input.sourceMapping,
123
124
  includeKinds: ["class"],
124
- sourcePriority: input.sourcePriority
125
+ sourcePriority: input.sourcePriority,
126
+ gradleUserHome: input.gradleUserHome
125
127
  });
126
128
  const resolvedClass = matrix.classIdentity[mappingApplied];
127
129
  if (!resolvedClass) {
@@ -180,6 +182,7 @@ export async function resolveWorkspaceSymbol(svc, input) {
180
182
  sourceMapping: input.sourceMapping,
181
183
  targetMapping: mappingApplied,
182
184
  sourcePriority: input.sourcePriority,
185
+ gradleUserHome: input.gradleUserHome,
183
186
  maxCandidates: input.maxCandidates
184
187
  });
185
188
  const filtered = mapped.candidates.filter((candidate) => candidate.kind === kind);
@@ -5,7 +5,8 @@ export async function runMappingHealthStage(svc, ctx) {
5
5
  const health = await svc.mappingService.checkMappingHealth({
6
6
  version: ctx.version,
7
7
  requestedMapping: ctx.requestedMapping,
8
- sourcePriority: ctx.currentSourcePriority
8
+ sourcePriority: ctx.currentSourcePriority,
9
+ gradleUserHome: ctx.input.gradleUserHome
9
10
  });
10
11
  const jarAvailable = existsSync(ctx.jarPath);
11
12
  ctx.healthReport = {
@@ -36,6 +36,7 @@ export async function runResolveStage(svc, ctx) {
36
36
  mapping: ctx.requestedMapping,
37
37
  sourcePriority: ctx.currentSourcePriority,
38
38
  projectPath: ctx.input.projectPath,
39
+ gradleUserHome: ctx.input.gradleUserHome,
39
40
  scope: ctx.input.scope,
40
41
  preferProjectVersion: false
41
42
  });
@@ -9,7 +9,8 @@ function findValidateMixinClassMapping(svc, input) {
9
9
  sourceMapping: input.sourceMapping,
10
10
  targetMapping: input.targetMapping,
11
11
  sourcePriority: input.sourcePriority,
12
- projectPath: input.projectPath
12
+ projectPath: input.projectPath,
13
+ gradleUserHome: input.gradleUserHome
13
14
  });
14
15
  }
15
16
  const cacheKey = [
@@ -18,7 +19,8 @@ function findValidateMixinClassMapping(svc, input) {
18
19
  input.sourceMapping,
19
20
  input.targetMapping,
20
21
  input.sourcePriority,
21
- input.projectPath ?? ""
22
+ input.projectPath ?? "",
23
+ input.gradleUserHome ?? ""
22
24
  ].join("\0");
23
25
  const cached = cache.get(cacheKey);
24
26
  if (cached) {
@@ -31,7 +33,8 @@ function findValidateMixinClassMapping(svc, input) {
31
33
  sourceMapping: input.sourceMapping,
32
34
  targetMapping: input.targetMapping,
33
35
  sourcePriority: input.sourcePriority,
34
- projectPath: input.projectPath
36
+ projectPath: input.projectPath,
37
+ gradleUserHome: input.gradleUserHome
35
38
  }).catch((error) => {
36
39
  cache.delete(cacheKey);
37
40
  throw error;
@@ -78,6 +81,7 @@ export async function processSingleMixinTarget(svc, ctx, target, targetIndex) {
78
81
  targetMapping: ctx.signatureLookupMapping,
79
82
  sourcePriority: ctx.currentSourcePriority,
80
83
  projectPath: ctx.input.projectPath,
84
+ gradleUserHome: ctx.input.gradleUserHome,
81
85
  batchCaches: ctx.input.batchCaches
82
86
  });
83
87
  if (mapped.resolved && mapped.resolvedSymbol) {
@@ -110,9 +114,9 @@ export async function processSingleMixinTarget(svc, ctx, target, targetIndex) {
110
114
  if (ctx.requestedMapping !== ctx.signatureLookupMapping) {
111
115
  try {
112
116
  const [ctorResult, methodResult, fieldResult] = await Promise.all([
113
- svc.remapSignatureMembers(sig.constructors, "method", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath),
114
- svc.remapSignatureMembers(sig.methods, "method", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath),
115
- svc.remapSignatureMembers(sig.fields, "field", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath)
117
+ svc.remapSignatureMembers(sig.constructors, "method", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath, ctx.input.gradleUserHome),
118
+ svc.remapSignatureMembers(sig.methods, "method", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath, ctx.input.gradleUserHome),
119
+ svc.remapSignatureMembers(sig.fields, "field", ctx.version, ctx.signatureLookupMapping, ctx.requestedMapping, ctx.currentSourcePriority, ctx.warnings, ctx.input.projectPath, ctx.input.gradleUserHome)
116
120
  ]);
117
121
  constructors = ctorResult.members;
118
122
  methods = methodResult.members;
@@ -160,7 +164,8 @@ export async function processSingleMixinTarget(svc, ctx, target, targetIndex) {
160
164
  try {
161
165
  const existenceCheck = await svc.mappingService.checkSymbolExists({
162
166
  version: ctx.version, kind: "class", name: resolvedClassName,
163
- sourceMapping: ctx.requestedMapping, nameMode: "auto", sourcePriority: ctx.currentSourcePriority
167
+ sourceMapping: ctx.requestedMapping, nameMode: "auto", sourcePriority: ctx.currentSourcePriority,
168
+ gradleUserHome: ctx.input.gradleUserHome
164
169
  });
165
170
  if (existenceCheck.resolved) {
166
171
  ctx.symbolExistsButSignatureFailed.add(target.className);
@@ -26,6 +26,7 @@ export type ResolveArtifactInput = {
26
26
  sourcePriority?: MappingSourcePriority;
27
27
  allowDecompile?: boolean;
28
28
  projectPath?: string;
29
+ gradleUserHome?: string;
29
30
  scope?: ArtifactScope;
30
31
  preferProjectVersion?: boolean;
31
32
  strictVersion?: boolean;
@@ -58,6 +59,7 @@ export type ProbeMinecraftArtifactInput = {
58
59
  mapping?: SourceMapping;
59
60
  sourcePriority?: MappingSourcePriority;
60
61
  projectPath?: string;
62
+ gradleUserHome?: string;
61
63
  scope?: ArtifactScope;
62
64
  preferProjectVersion?: boolean;
63
65
  };
@@ -105,6 +107,7 @@ export type SearchClassSourceInput = {
105
107
  cursor?: string;
106
108
  queryNamespace?: SourceMapping;
107
109
  sourcePriority?: MappingSourcePriority;
110
+ gradleUserHome?: string;
108
111
  };
109
112
  export type SearchClassSourceOutput = {
110
113
  hits: SearchSourceHit[];
@@ -165,6 +168,7 @@ export type ResolveWorkspaceSymbolInput = {
165
168
  descriptor?: string;
166
169
  sourceMapping: SourceMapping;
167
170
  sourcePriority?: MappingSourcePriority;
171
+ gradleUserHome?: string;
168
172
  maxCandidates?: number;
169
173
  };
170
174
  export type ResolveWorkspaceSymbolOutput = MappingSymbolResolutionOutput & {
@@ -180,6 +184,7 @@ export type GetClassSourceInput = {
180
184
  sourcePriority?: MappingSourcePriority;
181
185
  allowDecompile?: boolean;
182
186
  projectPath?: string;
187
+ gradleUserHome?: string;
183
188
  scope?: ArtifactScope;
184
189
  preferProjectVersion?: boolean;
185
190
  strictVersion?: boolean;
@@ -241,6 +246,7 @@ export type GetClassMembersInput = {
241
246
  memberPattern?: string;
242
247
  maxMembers?: number;
243
248
  projectPath?: string;
249
+ gradleUserHome?: string;
244
250
  scope?: ArtifactScope;
245
251
  preferProjectVersion?: boolean;
246
252
  strictVersion?: boolean;
@@ -302,6 +308,7 @@ export type TraceSymbolLifecycleInput = {
302
308
  toVersion?: string;
303
309
  mapping?: SourceMapping;
304
310
  sourcePriority?: MappingSourcePriority;
311
+ gradleUserHome?: string;
305
312
  includeSnapshots?: boolean;
306
313
  maxVersions?: number;
307
314
  includeTimeline?: boolean;
@@ -352,6 +359,7 @@ export type DiffClassSignaturesInput = {
352
359
  toVersion: string;
353
360
  mapping?: SourceMapping;
354
361
  sourcePriority?: MappingSourcePriority;
362
+ gradleUserHome?: string;
355
363
  includeFullDiff?: boolean;
356
364
  };
357
365
  export type DiffClassSignaturesOutput = {
@@ -417,6 +425,7 @@ export type ValidateMixinInput = {
417
425
  sourcePriority?: MappingSourcePriority;
418
426
  scope?: ArtifactScope;
419
427
  projectPath?: string;
428
+ gradleUserHome?: string;
420
429
  preferProjectVersion?: boolean;
421
430
  minSeverity?: "error" | "warning" | "all";
422
431
  hideUncertain?: boolean;
@@ -488,6 +497,7 @@ export type ValidateAccessWidenerInput = {
488
497
  mapping?: SourceMapping;
489
498
  sourcePriority?: MappingSourcePriority;
490
499
  projectPath?: string;
500
+ gradleUserHome?: string;
491
501
  scope?: ArtifactScope;
492
502
  preferProjectVersion?: boolean;
493
503
  };
@@ -498,6 +508,7 @@ export type ValidateAccessTransformerInput = {
498
508
  atNamespace?: AccessTransformerNamespace;
499
509
  sourcePriority?: MappingSourcePriority;
500
510
  projectPath?: string;
511
+ gradleUserHome?: string;
501
512
  scope?: ArtifactScope;
502
513
  preferProjectVersion?: boolean;
503
514
  };
@@ -532,6 +543,7 @@ export declare class SourceService {
532
543
  version: string;
533
544
  awNamespace: SourceMapping;
534
545
  projectPath?: string;
546
+ gradleUserHome?: string;
535
547
  scope?: ArtifactScope;
536
548
  preferProjectVersion?: boolean;
537
549
  }): Promise<RuntimeValidationProvenance<SourceMapping>>;
@@ -543,6 +555,7 @@ export declare class SourceService {
543
555
  version: string;
544
556
  atNamespace: AccessTransformerNamespace;
545
557
  projectPath?: string;
558
+ gradleUserHome?: string;
546
559
  scope?: ArtifactScope;
547
560
  preferProjectVersion?: boolean;
548
561
  }): Promise<RuntimeValidationProvenance<AccessTransformerNamespace>>;
@@ -555,15 +568,18 @@ export declare class SourceService {
555
568
  discoverVersionSourceJar(input: {
556
569
  version: string;
557
570
  projectPath?: string;
571
+ gradleUserHome?: string;
558
572
  }): ReturnType<typeof artifactResolver.discoverVersionSourceJar>;
559
573
  discoverAccessWidenerRuntimeCandidates(input: {
560
574
  version: string;
561
575
  projectPath?: string;
576
+ gradleUserHome?: string;
562
577
  requestedScope: ArtifactScope;
563
578
  }): ReturnType<typeof artifactResolver.discoverAccessWidenerRuntimeCandidates>;
564
579
  discoverAccessTransformerRuntimeCandidates(input: {
565
580
  version: string;
566
581
  projectPath?: string;
582
+ gradleUserHome?: string;
567
583
  requestedScope: ArtifactScope;
568
584
  atNamespace: AccessTransformerNamespace;
569
585
  loader: import("./workspace-mapping-service.js").WorkspaceProjectLoader | "unknown";
@@ -597,7 +613,7 @@ export declare class SourceService {
597
613
  getClassMembers(input: GetClassMembersInput): Promise<GetClassMembersOutput>;
598
614
  validateMixin(input: ValidateMixinInput, options?: ValidateMixinOptions): Promise<ValidateMixinOutput>;
599
615
  validateMixinSingle(input: validateMixinModule.ValidateMixinSingleInput): Promise<MixinValidationResult>;
600
- remapSignatureMembers(members: SignatureMember[], kind: "field" | "method", version: string, sourceMapping: SourceMapping, targetMapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], projectPath?: string): Promise<{
616
+ remapSignatureMembers(members: SignatureMember[], kind: "field" | "method", version: string, sourceMapping: SourceMapping, targetMapping: SourceMapping, sourcePriority: MappingSourcePriority | undefined, warnings: string[], projectPath?: string, gradleUserHome?: string): Promise<{
601
617
  members: SignatureMember[];
602
618
  failedNames: Set<string>;
603
619
  }>;
@@ -612,6 +628,7 @@ export declare class SourceService {
612
628
  sourceMapping: SourceMapping;
613
629
  targetMapping: SourceMapping;
614
630
  sourcePriority: MappingSourcePriority | undefined;
631
+ gradleUserHome?: string;
615
632
  warnings: string[];
616
633
  context: string;
617
634
  }): Promise<string>;
@@ -176,8 +176,8 @@ export class SourceService {
176
176
  async validateMixinSingle(input) {
177
177
  return validateMixinModule.validateMixinSingle(this, input);
178
178
  }
179
- async remapSignatureMembers(members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath) {
180
- return lifecycle.remapSignatureMembers(this, members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath);
179
+ async remapSignatureMembers(members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath, gradleUserHome) {
180
+ return lifecycle.remapSignatureMembers(this, members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath, gradleUserHome);
181
181
  }
182
182
  async validateAccessWidener(input) {
183
183
  return accessValidate.validateAccessWidener(this, input);
@@ -1,4 +1,4 @@
1
- export declare const TOOL_SURFACE_SECTION_IDS: readonly ["v3-entry-tools", "source-exploration", "version-comparison-symbol-tracking", "mapping-symbols", "nbt-utilities", "mod-analysis", "validation", "registry-diagnostics", "batch-lookup"];
1
+ export declare const TOOL_SURFACE_SECTION_IDS: readonly ["top-level-workflow-tools", "source-exploration", "version-comparison-symbol-tracking", "mapping-symbols", "nbt-utilities", "mod-analysis", "validation", "registry-diagnostics", "batch-lookup"];
2
2
  export type ToolSurfaceSectionId = (typeof TOOL_SURFACE_SECTION_IDS)[number];
3
3
  export type ToolSurfaceLocale = "en" | "ja";
4
4
  export declare function renderToolSurfaceSection(locale: ToolSurfaceLocale, sectionId: ToolSurfaceSectionId): string;
@@ -1,5 +1,5 @@
1
1
  export const TOOL_SURFACE_SECTION_IDS = [
2
- "v3-entry-tools",
2
+ "top-level-workflow-tools",
3
3
  "source-exploration",
4
4
  "version-comparison-symbol-tracking",
5
5
  "mapping-symbols",
@@ -10,7 +10,7 @@ export const TOOL_SURFACE_SECTION_IDS = [
10
10
  "batch-lookup"
11
11
  ];
12
12
  const SECTION_ROWS = {
13
- "v3-entry-tools": {
13
+ "top-level-workflow-tools": {
14
14
  en: [
15
15
  "| `inspect-minecraft` | Inspect versions, artifacts, classes, files, source text, and workspace-aware lookup flows |",
16
16
  "| `analyze-symbol` | Handle symbol existence checks, namespace mapping, lifecycle tracing, workspace symbol resolution, and API overviews |",