@adhisang/minecraft-modding-mcp 4.1.0 → 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 +21 -2
- package/README.md +9 -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.d.ts +6 -1
- package/dist/entry-tools/validate-project/cases/project-summary.js +83 -9
- package/dist/entry-tools/validate-project/internal.d.ts +29 -18
- package/dist/entry-tools/validate-project/internal.js +37 -19
- package/dist/entry-tools/validate-project-service.d.ts +15 -1
- package/dist/entry-tools/validate-project-service.js +3 -2
- 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 +29 -9
- 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 +6 -1
- package/dist/mapping-service.js +26 -18
- 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 +7 -1
- package/dist/source/artifact-resolver.js +120 -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/indexer.js +17 -0
- 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/state.d.ts +5 -0
- package/dist/source/state.js +5 -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-resolver.d.ts +1 -0
- package/dist/source-resolver.js +1 -1
- package/dist/source-service.d.ts +35 -1
- package/dist/source-service.js +5 -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 +4 -2
- package/docs/tool-reference.md +13 -7
- package/package.json +15 -3
package/dist/source/indexer.js
CHANGED
|
@@ -323,6 +323,23 @@ export async function ingestIfNeeded(svc, resolved) {
|
|
|
323
323
|
touchCacheMetrics(svc, resolved.artifactId, touchedAt);
|
|
324
324
|
return;
|
|
325
325
|
}
|
|
326
|
+
const inflight = svc.state.inflightArtifactIngests.get(resolved.artifactId);
|
|
327
|
+
if (inflight) {
|
|
328
|
+
await inflight;
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
const ingestPromise = rebuildMissingArtifactIndex(svc, resolved, reason);
|
|
332
|
+
svc.state.inflightArtifactIngests.set(resolved.artifactId, ingestPromise);
|
|
333
|
+
try {
|
|
334
|
+
await ingestPromise;
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
if (svc.state.inflightArtifactIngests.get(resolved.artifactId) === ingestPromise) {
|
|
338
|
+
svc.state.inflightArtifactIngests.delete(resolved.artifactId);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
async function rebuildMissingArtifactIndex(svc, resolved, reason) {
|
|
326
343
|
svc.metrics.recordArtifactCacheMiss();
|
|
327
344
|
svc.metrics.recordReindex();
|
|
328
345
|
log("info", "index.rebuild.start", {
|
|
@@ -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
|
});
|
package/dist/source/state.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export declare class SourceServiceState {
|
|
|
14
14
|
* tiny-remapper run.
|
|
15
15
|
*/
|
|
16
16
|
readonly inflightRemaps: Map<string, Promise<string>>;
|
|
17
|
+
/**
|
|
18
|
+
* Process-local artifact ingest jobs keyed by artifactId. This collapses
|
|
19
|
+
* concurrent class source/member lookups inside one MCP server process.
|
|
20
|
+
*/
|
|
21
|
+
readonly inflightArtifactIngests: Map<string, Promise<void>>;
|
|
17
22
|
readonly lru: LruList<{
|
|
18
23
|
totalContentBytes: number;
|
|
19
24
|
updatedAt: string;
|
package/dist/source/state.js
CHANGED
|
@@ -14,6 +14,11 @@ export class SourceServiceState {
|
|
|
14
14
|
* tiny-remapper run.
|
|
15
15
|
*/
|
|
16
16
|
inflightRemaps = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* Process-local artifact ingest jobs keyed by artifactId. This collapses
|
|
19
|
+
* concurrent class source/member lookups inside one MCP server process.
|
|
20
|
+
*/
|
|
21
|
+
inflightArtifactIngests = new Map();
|
|
17
22
|
lru = new LruList();
|
|
18
23
|
}
|
|
19
24
|
//# sourceMappingURL=state.js.map
|
|
@@ -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);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Config, MappingVariant, ResolvedSourceArtifact, SourceTargetInput } from "./types.js";
|
|
2
2
|
export type { MappingVariant } from "./types.js";
|
|
3
|
+
export declare function artifactIdForJar(inputKind: string, artifactPath: string, signature: string, suffix?: string, mappingVariant?: MappingVariant): string;
|
|
3
4
|
export interface ResolveSourceTargetOptions {
|
|
4
5
|
allowDecompile: boolean;
|
|
5
6
|
preferBinaryOnly?: boolean;
|
package/dist/source-resolver.js
CHANGED
|
@@ -133,7 +133,7 @@ async function resolveGradleCacheCoordinateCandidate(coordinate) {
|
|
|
133
133
|
function resolveRemoteBinaryCandidate(coordinate, repos) {
|
|
134
134
|
return buildRemoteBinaryUrls(repos, coordinate);
|
|
135
135
|
}
|
|
136
|
-
function artifactIdForJar(inputKind, artifactPath, signature, suffix, mappingVariant = "pass") {
|
|
136
|
+
export function artifactIdForJar(inputKind, artifactPath, signature, suffix, mappingVariant = "pass") {
|
|
137
137
|
const parts = [inputKind, artifactPath, signature, suffix ?? "source"];
|
|
138
138
|
if (mappingVariant === "mojang-remapped") {
|
|
139
139
|
parts.push("mojang-remapped");
|
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;
|
|
@@ -50,6 +51,23 @@ export type ResolveArtifactOutput = {
|
|
|
50
51
|
warnings: string[];
|
|
51
52
|
sampleEntries?: string[];
|
|
52
53
|
};
|
|
54
|
+
export type ProbeMinecraftArtifactInput = {
|
|
55
|
+
target: {
|
|
56
|
+
kind: "version";
|
|
57
|
+
value: string;
|
|
58
|
+
};
|
|
59
|
+
mapping?: SourceMapping;
|
|
60
|
+
sourcePriority?: MappingSourcePriority;
|
|
61
|
+
projectPath?: string;
|
|
62
|
+
gradleUserHome?: string;
|
|
63
|
+
scope?: ArtifactScope;
|
|
64
|
+
preferProjectVersion?: boolean;
|
|
65
|
+
};
|
|
66
|
+
export type ProbeMinecraftArtifactOutput = {
|
|
67
|
+
artifactId: string;
|
|
68
|
+
mappingApplied: SourceMapping;
|
|
69
|
+
warnings?: string[];
|
|
70
|
+
};
|
|
53
71
|
export type ArtifactContentsSummary = {
|
|
54
72
|
sourceKind: "source-jar" | "decompiled-binary";
|
|
55
73
|
indexedContentKinds: string[];
|
|
@@ -89,6 +107,7 @@ export type SearchClassSourceInput = {
|
|
|
89
107
|
cursor?: string;
|
|
90
108
|
queryNamespace?: SourceMapping;
|
|
91
109
|
sourcePriority?: MappingSourcePriority;
|
|
110
|
+
gradleUserHome?: string;
|
|
92
111
|
};
|
|
93
112
|
export type SearchClassSourceOutput = {
|
|
94
113
|
hits: SearchSourceHit[];
|
|
@@ -149,6 +168,7 @@ export type ResolveWorkspaceSymbolInput = {
|
|
|
149
168
|
descriptor?: string;
|
|
150
169
|
sourceMapping: SourceMapping;
|
|
151
170
|
sourcePriority?: MappingSourcePriority;
|
|
171
|
+
gradleUserHome?: string;
|
|
152
172
|
maxCandidates?: number;
|
|
153
173
|
};
|
|
154
174
|
export type ResolveWorkspaceSymbolOutput = MappingSymbolResolutionOutput & {
|
|
@@ -164,6 +184,7 @@ export type GetClassSourceInput = {
|
|
|
164
184
|
sourcePriority?: MappingSourcePriority;
|
|
165
185
|
allowDecompile?: boolean;
|
|
166
186
|
projectPath?: string;
|
|
187
|
+
gradleUserHome?: string;
|
|
167
188
|
scope?: ArtifactScope;
|
|
168
189
|
preferProjectVersion?: boolean;
|
|
169
190
|
strictVersion?: boolean;
|
|
@@ -225,6 +246,7 @@ export type GetClassMembersInput = {
|
|
|
225
246
|
memberPattern?: string;
|
|
226
247
|
maxMembers?: number;
|
|
227
248
|
projectPath?: string;
|
|
249
|
+
gradleUserHome?: string;
|
|
228
250
|
scope?: ArtifactScope;
|
|
229
251
|
preferProjectVersion?: boolean;
|
|
230
252
|
strictVersion?: boolean;
|
|
@@ -286,6 +308,7 @@ export type TraceSymbolLifecycleInput = {
|
|
|
286
308
|
toVersion?: string;
|
|
287
309
|
mapping?: SourceMapping;
|
|
288
310
|
sourcePriority?: MappingSourcePriority;
|
|
311
|
+
gradleUserHome?: string;
|
|
289
312
|
includeSnapshots?: boolean;
|
|
290
313
|
maxVersions?: number;
|
|
291
314
|
includeTimeline?: boolean;
|
|
@@ -336,6 +359,7 @@ export type DiffClassSignaturesInput = {
|
|
|
336
359
|
toVersion: string;
|
|
337
360
|
mapping?: SourceMapping;
|
|
338
361
|
sourcePriority?: MappingSourcePriority;
|
|
362
|
+
gradleUserHome?: string;
|
|
339
363
|
includeFullDiff?: boolean;
|
|
340
364
|
};
|
|
341
365
|
export type DiffClassSignaturesOutput = {
|
|
@@ -401,6 +425,7 @@ export type ValidateMixinInput = {
|
|
|
401
425
|
sourcePriority?: MappingSourcePriority;
|
|
402
426
|
scope?: ArtifactScope;
|
|
403
427
|
projectPath?: string;
|
|
428
|
+
gradleUserHome?: string;
|
|
404
429
|
preferProjectVersion?: boolean;
|
|
405
430
|
minSeverity?: "error" | "warning" | "all";
|
|
406
431
|
hideUncertain?: boolean;
|
|
@@ -472,6 +497,7 @@ export type ValidateAccessWidenerInput = {
|
|
|
472
497
|
mapping?: SourceMapping;
|
|
473
498
|
sourcePriority?: MappingSourcePriority;
|
|
474
499
|
projectPath?: string;
|
|
500
|
+
gradleUserHome?: string;
|
|
475
501
|
scope?: ArtifactScope;
|
|
476
502
|
preferProjectVersion?: boolean;
|
|
477
503
|
};
|
|
@@ -482,6 +508,7 @@ export type ValidateAccessTransformerInput = {
|
|
|
482
508
|
atNamespace?: AccessTransformerNamespace;
|
|
483
509
|
sourcePriority?: MappingSourcePriority;
|
|
484
510
|
projectPath?: string;
|
|
511
|
+
gradleUserHome?: string;
|
|
485
512
|
scope?: ArtifactScope;
|
|
486
513
|
preferProjectVersion?: boolean;
|
|
487
514
|
};
|
|
@@ -508,6 +535,7 @@ export declare class SourceService {
|
|
|
508
535
|
workspaceContextCache?: WorkspaceContextCache;
|
|
509
536
|
});
|
|
510
537
|
resolveArtifact(input: ResolveArtifactInput): Promise<ResolveArtifactOutput>;
|
|
538
|
+
probeMinecraftArtifact(input: ProbeMinecraftArtifactInput): Promise<ProbeMinecraftArtifactOutput>;
|
|
511
539
|
synthesizeWorkspaceTarget(input: ResolveArtifactInput, workspace: import("./types.js").WorkspaceTargetInput): ReturnType<typeof workspaceTarget.synthesizeWorkspaceTarget>;
|
|
512
540
|
synthesizeDependencyTarget(input: ResolveArtifactInput, dep: import("./types.js").DependencyTargetInput): ReturnType<typeof workspaceTarget.synthesizeDependencyTarget>;
|
|
513
541
|
loadOrDetectWorkspaceContext(projectPath: string): ReturnType<typeof workspaceTarget.loadOrDetectWorkspaceContext>;
|
|
@@ -515,6 +543,7 @@ export declare class SourceService {
|
|
|
515
543
|
version: string;
|
|
516
544
|
awNamespace: SourceMapping;
|
|
517
545
|
projectPath?: string;
|
|
546
|
+
gradleUserHome?: string;
|
|
518
547
|
scope?: ArtifactScope;
|
|
519
548
|
preferProjectVersion?: boolean;
|
|
520
549
|
}): Promise<RuntimeValidationProvenance<SourceMapping>>;
|
|
@@ -526,6 +555,7 @@ export declare class SourceService {
|
|
|
526
555
|
version: string;
|
|
527
556
|
atNamespace: AccessTransformerNamespace;
|
|
528
557
|
projectPath?: string;
|
|
558
|
+
gradleUserHome?: string;
|
|
529
559
|
scope?: ArtifactScope;
|
|
530
560
|
preferProjectVersion?: boolean;
|
|
531
561
|
}): Promise<RuntimeValidationProvenance<AccessTransformerNamespace>>;
|
|
@@ -538,15 +568,18 @@ export declare class SourceService {
|
|
|
538
568
|
discoverVersionSourceJar(input: {
|
|
539
569
|
version: string;
|
|
540
570
|
projectPath?: string;
|
|
571
|
+
gradleUserHome?: string;
|
|
541
572
|
}): ReturnType<typeof artifactResolver.discoverVersionSourceJar>;
|
|
542
573
|
discoverAccessWidenerRuntimeCandidates(input: {
|
|
543
574
|
version: string;
|
|
544
575
|
projectPath?: string;
|
|
576
|
+
gradleUserHome?: string;
|
|
545
577
|
requestedScope: ArtifactScope;
|
|
546
578
|
}): ReturnType<typeof artifactResolver.discoverAccessWidenerRuntimeCandidates>;
|
|
547
579
|
discoverAccessTransformerRuntimeCandidates(input: {
|
|
548
580
|
version: string;
|
|
549
581
|
projectPath?: string;
|
|
582
|
+
gradleUserHome?: string;
|
|
550
583
|
requestedScope: ArtifactScope;
|
|
551
584
|
atNamespace: AccessTransformerNamespace;
|
|
552
585
|
loader: import("./workspace-mapping-service.js").WorkspaceProjectLoader | "unknown";
|
|
@@ -580,7 +613,7 @@ export declare class SourceService {
|
|
|
580
613
|
getClassMembers(input: GetClassMembersInput): Promise<GetClassMembersOutput>;
|
|
581
614
|
validateMixin(input: ValidateMixinInput, options?: ValidateMixinOptions): Promise<ValidateMixinOutput>;
|
|
582
615
|
validateMixinSingle(input: validateMixinModule.ValidateMixinSingleInput): Promise<MixinValidationResult>;
|
|
583
|
-
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<{
|
|
584
617
|
members: SignatureMember[];
|
|
585
618
|
failedNames: Set<string>;
|
|
586
619
|
}>;
|
|
@@ -595,6 +628,7 @@ export declare class SourceService {
|
|
|
595
628
|
sourceMapping: SourceMapping;
|
|
596
629
|
targetMapping: SourceMapping;
|
|
597
630
|
sourcePriority: MappingSourcePriority | undefined;
|
|
631
|
+
gradleUserHome?: string;
|
|
598
632
|
warnings: string[];
|
|
599
633
|
context: string;
|
|
600
634
|
}): Promise<string>;
|
package/dist/source-service.js
CHANGED
|
@@ -67,6 +67,9 @@ export class SourceService {
|
|
|
67
67
|
async resolveArtifact(input) {
|
|
68
68
|
return artifactResolver.resolveArtifact(this, input);
|
|
69
69
|
}
|
|
70
|
+
async probeMinecraftArtifact(input) {
|
|
71
|
+
return artifactResolver.probeMinecraftArtifact(this, input);
|
|
72
|
+
}
|
|
70
73
|
async synthesizeWorkspaceTarget(input, workspace) {
|
|
71
74
|
return workspaceTarget.synthesizeWorkspaceTarget(this, input, workspace);
|
|
72
75
|
}
|
|
@@ -173,8 +176,8 @@ export class SourceService {
|
|
|
173
176
|
async validateMixinSingle(input) {
|
|
174
177
|
return validateMixinModule.validateMixinSingle(this, input);
|
|
175
178
|
}
|
|
176
|
-
async remapSignatureMembers(members, kind, version, sourceMapping, targetMapping, sourcePriority, warnings, projectPath) {
|
|
177
|
-
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);
|
|
178
181
|
}
|
|
179
182
|
async validateAccessWidener(input) {
|
|
180
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 |",
|