@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.
- package/CHANGELOG.md +7 -2
- package/README.md +5 -2
- package/dist/entry-tools/analyze-symbol-service.d.ts +12 -0
- package/dist/entry-tools/analyze-symbol-service.js +7 -0
- package/dist/entry-tools/batch-class-members-service.d.ts +1 -0
- package/dist/entry-tools/batch-class-members-service.js +2 -0
- package/dist/entry-tools/batch-class-source-service.d.ts +1 -0
- package/dist/entry-tools/batch-class-source-service.js +2 -0
- package/dist/entry-tools/batch-mappings-service.d.ts +1 -0
- package/dist/entry-tools/batch-mappings-service.js +1 -0
- package/dist/entry-tools/batch-symbol-exists-service.d.ts +1 -0
- package/dist/entry-tools/batch-symbol-exists-service.js +2 -0
- package/dist/entry-tools/compare-minecraft-service.d.ts +9 -0
- package/dist/entry-tools/compare-minecraft-service.js +3 -1
- package/dist/entry-tools/inspect-minecraft/handlers/class-members.js +1 -0
- package/dist/entry-tools/inspect-minecraft/handlers/class-overview.js +3 -1
- package/dist/entry-tools/inspect-minecraft/handlers/class-source.js +1 -0
- package/dist/entry-tools/inspect-minecraft/handlers/list-files.js +1 -0
- package/dist/entry-tools/inspect-minecraft/handlers/search.js +2 -1
- package/dist/entry-tools/inspect-minecraft/internal.d.ts +17 -0
- package/dist/entry-tools/inspect-minecraft/internal.js +10 -0
- package/dist/entry-tools/inspect-minecraft-service.d.ts +40 -0
- package/dist/entry-tools/validate-project/cases/project-summary.js +8 -3
- package/dist/entry-tools/validate-project/internal.d.ts +6 -2
- package/dist/entry-tools/validate-project/internal.js +9 -7
- package/dist/entry-tools/validate-project-service.d.ts +10 -0
- package/dist/entry-tools/validate-project-service.js +1 -0
- package/dist/entry-tools/verify-mixin-target-service.d.ts +2 -0
- package/dist/entry-tools/verify-mixin-target-service.js +1 -0
- package/dist/gradle-paths.d.ts +8 -3
- package/dist/gradle-paths.js +34 -5
- package/dist/index.js +24 -7
- package/dist/mapping/loaders/tiny-loom.d.ts +1 -1
- package/dist/mapping/loaders/tiny-loom.js +5 -2
- package/dist/mapping/types.d.ts +5 -0
- package/dist/mapping-service.d.ts +1 -0
- package/dist/mapping-service.js +16 -13
- package/dist/mixin-validator.d.ts +1 -1
- package/dist/mixin-validator.js +1 -1
- package/dist/source/access-validate.js +12 -8
- package/dist/source/artifact-resolver.d.ts +5 -0
- package/dist/source/artifact-resolver.js +23 -7
- package/dist/source/class-source/members-builder.d.ts +1 -0
- package/dist/source/class-source/members-builder.js +1 -1
- package/dist/source/class-source.d.ts +1 -0
- package/dist/source/class-source.js +9 -1
- package/dist/source/lifecycle/diff.js +6 -6
- package/dist/source/lifecycle/mapping-helpers.d.ts +3 -3
- package/dist/source/lifecycle/mapping-helpers.js +17 -9
- package/dist/source/lifecycle/trace.js +2 -2
- package/dist/source/search.js +1 -0
- package/dist/source/symbol-resolver.js +4 -1
- package/dist/source/validate-mixin/pipeline/mapping-health.js +2 -1
- package/dist/source/validate-mixin/pipeline/resolve.js +1 -0
- package/dist/source/validate-mixin/pipeline/target-lookup.js +12 -7
- package/dist/source-service.d.ts +18 -1
- package/dist/source-service.js +2 -2
- package/dist/tool-contract-manifest.d.ts +1 -1
- package/dist/tool-contract-manifest.js +2 -2
- package/dist/tool-schemas.d.ts +91 -0
- package/dist/tool-schemas.js +20 -0
- package/docs/README-ja.md +2 -2
- package/docs/tool-reference.md +4 -1
- 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(
|
|
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(
|
|
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(
|
|
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) {
|
|
@@ -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({
|
package/dist/source/search.js
CHANGED
|
@@ -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);
|
package/dist/source-service.d.ts
CHANGED
|
@@ -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>;
|
package/dist/source-service.js
CHANGED
|
@@ -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 ["
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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 |",
|