@adhisang/minecraft-modding-mcp 4.0.0 → 4.1.1

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 (176) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +40 -23
  3. package/dist/build-suggested-call.d.ts +29 -0
  4. package/dist/build-suggested-call.js +58 -0
  5. package/dist/cache-registry.d.ts +3 -1
  6. package/dist/cache-registry.js +50 -6
  7. package/dist/entry-tools/analyze-symbol-service.d.ts +16 -16
  8. package/dist/entry-tools/batch-class-members-service.d.ts +34 -0
  9. package/dist/entry-tools/batch-class-members-service.js +97 -0
  10. package/dist/entry-tools/batch-class-source-service.d.ts +37 -0
  11. package/dist/entry-tools/batch-class-source-service.js +100 -0
  12. package/dist/entry-tools/batch-mappings-service.d.ts +36 -0
  13. package/dist/entry-tools/batch-mappings-service.js +66 -0
  14. package/dist/entry-tools/batch-runner.d.ts +72 -0
  15. package/dist/entry-tools/batch-runner.js +90 -0
  16. package/dist/entry-tools/batch-symbol-exists-service.d.ts +46 -0
  17. package/dist/entry-tools/batch-symbol-exists-service.js +113 -0
  18. package/dist/entry-tools/compare-minecraft-service.d.ts +6 -6
  19. package/dist/entry-tools/inspect-minecraft/handlers/artifact.d.ts +5 -0
  20. package/dist/entry-tools/inspect-minecraft/handlers/artifact.js +83 -0
  21. package/dist/entry-tools/inspect-minecraft/handlers/class-members.d.ts +6 -0
  22. package/dist/entry-tools/inspect-minecraft/handlers/class-members.js +80 -0
  23. package/dist/entry-tools/inspect-minecraft/handlers/class-overview.d.ts +5 -0
  24. package/dist/entry-tools/inspect-minecraft/handlers/class-overview.js +248 -0
  25. package/dist/entry-tools/inspect-minecraft/handlers/class-source.d.ts +5 -0
  26. package/dist/entry-tools/inspect-minecraft/handlers/class-source.js +60 -0
  27. package/dist/entry-tools/inspect-minecraft/handlers/file.d.ts +5 -0
  28. package/dist/entry-tools/inspect-minecraft/handlers/file.js +54 -0
  29. package/dist/entry-tools/inspect-minecraft/handlers/list-files.d.ts +5 -0
  30. package/dist/entry-tools/inspect-minecraft/handlers/list-files.js +100 -0
  31. package/dist/entry-tools/inspect-minecraft/handlers/search.d.ts +5 -0
  32. package/dist/entry-tools/inspect-minecraft/handlers/search.js +155 -0
  33. package/dist/entry-tools/inspect-minecraft/handlers/versions.d.ts +6 -0
  34. package/dist/entry-tools/inspect-minecraft/handlers/versions.js +49 -0
  35. package/dist/entry-tools/inspect-minecraft/internal.d.ts +1042 -0
  36. package/dist/entry-tools/inspect-minecraft/internal.js +448 -0
  37. package/dist/entry-tools/inspect-minecraft-service.d.ts +193 -308
  38. package/dist/entry-tools/inspect-minecraft-service.js +20 -1244
  39. package/dist/entry-tools/manage-cache-service.d.ts +16 -16
  40. package/dist/entry-tools/validate-project/cases/access-transformer.d.ts +6 -0
  41. package/dist/entry-tools/validate-project/cases/access-transformer.js +106 -0
  42. package/dist/entry-tools/validate-project/cases/access-widener.d.ts +6 -0
  43. package/dist/entry-tools/validate-project/cases/access-widener.js +86 -0
  44. package/dist/entry-tools/validate-project/cases/mixin.d.ts +6 -0
  45. package/dist/entry-tools/validate-project/cases/mixin.js +90 -0
  46. package/dist/entry-tools/validate-project/cases/project-summary.d.ts +102 -0
  47. package/dist/entry-tools/validate-project/cases/project-summary.js +415 -0
  48. package/dist/entry-tools/validate-project/internal.d.ts +142 -0
  49. package/dist/entry-tools/validate-project/internal.js +303 -0
  50. package/dist/entry-tools/validate-project-service.d.ts +67 -47
  51. package/dist/entry-tools/validate-project-service.js +13 -563
  52. package/dist/entry-tools/verify-mixin-target-service.d.ts +133 -0
  53. package/dist/entry-tools/verify-mixin-target-service.js +323 -0
  54. package/dist/error-mapping.d.ts +40 -0
  55. package/dist/error-mapping.js +139 -0
  56. package/dist/errors.d.ts +6 -0
  57. package/dist/errors.js +6 -0
  58. package/dist/index.d.ts +2 -0
  59. package/dist/index.js +147 -1354
  60. package/dist/mapping/internal-types.d.ts +54 -0
  61. package/dist/mapping/internal-types.js +14 -0
  62. package/dist/mapping/loaders/mojang.d.ts +2 -0
  63. package/dist/mapping/loaders/mojang.js +64 -0
  64. package/dist/mapping/loaders/tiny-loom.d.ts +2 -0
  65. package/dist/mapping/loaders/tiny-loom.js +73 -0
  66. package/dist/mapping/loaders/tiny-maven.d.ts +2 -0
  67. package/dist/mapping/loaders/tiny-maven.js +104 -0
  68. package/dist/mapping/loaders/types.d.ts +14 -0
  69. package/dist/mapping/loaders/types.js +2 -0
  70. package/dist/mapping/lookup.d.ts +52 -0
  71. package/dist/mapping/lookup.js +496 -0
  72. package/dist/mapping/parsers/normalize.d.ts +10 -0
  73. package/dist/mapping/parsers/normalize.js +52 -0
  74. package/dist/mapping/parsers/proguard.d.ts +20 -0
  75. package/dist/mapping/parsers/proguard.js +138 -0
  76. package/dist/mapping/parsers/symbol-records.d.ts +27 -0
  77. package/dist/mapping/parsers/symbol-records.js +216 -0
  78. package/dist/mapping/parsers/tiny.d.ts +9 -0
  79. package/dist/mapping/parsers/tiny.js +96 -0
  80. package/dist/mapping/types.d.ts +147 -0
  81. package/dist/mapping/types.js +2 -0
  82. package/dist/mapping-pipeline-service.js +3 -2
  83. package/dist/mapping-service.d.ts +8 -145
  84. package/dist/mapping-service.js +30 -1207
  85. package/dist/mixin/access-validators.d.ts +9 -0
  86. package/dist/mixin/access-validators.js +257 -0
  87. package/dist/mixin/annotation-validators.d.ts +5 -0
  88. package/dist/mixin/annotation-validators.js +162 -0
  89. package/dist/mixin/helpers.d.ts +28 -0
  90. package/dist/mixin/helpers.js +315 -0
  91. package/dist/mixin/parsed-validator.d.ts +8 -0
  92. package/dist/mixin/parsed-validator.js +337 -0
  93. package/dist/mixin/types.d.ts +208 -0
  94. package/dist/mixin/types.js +28 -0
  95. package/dist/mixin-validator.d.ts +9 -201
  96. package/dist/mixin-validator.js +8 -1020
  97. package/dist/source/access-validate.d.ts +4 -0
  98. package/dist/source/access-validate.js +254 -0
  99. package/dist/source/artifact-resolver.d.ts +111 -0
  100. package/dist/source/artifact-resolver.js +1271 -0
  101. package/dist/source/cache-metrics.d.ts +26 -0
  102. package/dist/source/cache-metrics.js +172 -0
  103. package/dist/source/class-source/members-builder.d.ts +34 -0
  104. package/dist/source/class-source/members-builder.js +46 -0
  105. package/dist/source/class-source/snippet-builder.d.ts +19 -0
  106. package/dist/source/class-source/snippet-builder.js +46 -0
  107. package/dist/source/class-source-helpers.d.ts +34 -0
  108. package/dist/source/class-source-helpers.js +140 -0
  109. package/dist/source/class-source.d.ts +42 -0
  110. package/dist/source/class-source.js +883 -0
  111. package/dist/source/descriptor-utils.d.ts +6 -0
  112. package/dist/source/descriptor-utils.js +37 -0
  113. package/dist/source/file-access.d.ts +4 -0
  114. package/dist/source/file-access.js +102 -0
  115. package/dist/source/indexer.d.ts +82 -0
  116. package/dist/source/indexer.js +522 -0
  117. package/dist/source/lifecycle/diff-utils.d.ts +9 -0
  118. package/dist/source/lifecycle/diff-utils.js +107 -0
  119. package/dist/source/lifecycle/diff.d.ts +2 -0
  120. package/dist/source/lifecycle/diff.js +265 -0
  121. package/dist/source/lifecycle/mapping-helpers.d.ts +22 -0
  122. package/dist/source/lifecycle/mapping-helpers.js +327 -0
  123. package/dist/source/lifecycle/runtime-check.d.ts +2 -0
  124. package/dist/source/lifecycle/runtime-check.js +142 -0
  125. package/dist/source/lifecycle/trace.d.ts +2 -0
  126. package/dist/source/lifecycle/trace.js +231 -0
  127. package/dist/source/lifecycle.d.ts +4 -0
  128. package/dist/source/lifecycle.js +5 -0
  129. package/dist/source/search.d.ts +51 -0
  130. package/dist/source/search.js +676 -0
  131. package/dist/source/shared-utils.d.ts +6 -0
  132. package/dist/source/shared-utils.js +55 -0
  133. package/dist/source/state.d.ts +26 -0
  134. package/dist/source/state.js +24 -0
  135. package/dist/source/symbol-resolver.d.ts +3 -0
  136. package/dist/source/symbol-resolver.js +212 -0
  137. package/dist/source/validate-mixin/pipeline/mapping-health.d.ts +3 -0
  138. package/dist/source/validate-mixin/pipeline/mapping-health.js +41 -0
  139. package/dist/source/validate-mixin/pipeline/parse.d.ts +2 -0
  140. package/dist/source/validate-mixin/pipeline/parse.js +10 -0
  141. package/dist/source/validate-mixin/pipeline/resolve.d.ts +3 -0
  142. package/dist/source/validate-mixin/pipeline/resolve.js +78 -0
  143. package/dist/source/validate-mixin/pipeline/target-lookup.d.ts +6 -0
  144. package/dist/source/validate-mixin/pipeline/target-lookup.js +260 -0
  145. package/dist/source/validate-mixin/pipeline-context.d.ts +72 -0
  146. package/dist/source/validate-mixin/pipeline-context.js +93 -0
  147. package/dist/source/validate-mixin.d.ts +22 -0
  148. package/dist/source/validate-mixin.js +799 -0
  149. package/dist/source/workspace-target.d.ts +18 -0
  150. package/dist/source/workspace-target.js +305 -0
  151. package/dist/source-resolver.d.ts +1 -0
  152. package/dist/source-resolver.js +1 -1
  153. package/dist/source-service.d.ts +164 -170
  154. package/dist/source-service.js +70 -6116
  155. package/dist/stage-emitter.d.ts +13 -0
  156. package/dist/stage-emitter.js +30 -0
  157. package/dist/stdio-supervisor.d.ts +61 -0
  158. package/dist/stdio-supervisor.js +326 -9
  159. package/dist/tool-contract-manifest.d.ts +1 -1
  160. package/dist/tool-contract-manifest.js +23 -6
  161. package/dist/tool-guidance.d.ts +82 -0
  162. package/dist/tool-guidance.js +734 -0
  163. package/dist/tool-schema-registry.d.ts +16 -0
  164. package/dist/tool-schema-registry.js +37 -0
  165. package/dist/tool-schemas.d.ts +3518 -0
  166. package/dist/tool-schemas.js +813 -0
  167. package/dist/types.d.ts +36 -0
  168. package/dist/version-service.js +7 -6
  169. package/dist/workspace-context-cache.d.ts +32 -0
  170. package/dist/workspace-context-cache.js +66 -0
  171. package/dist/workspace-mapping-service.d.ts +16 -0
  172. package/dist/workspace-mapping-service.js +173 -1
  173. package/docs/README-ja.md +416 -0
  174. package/docs/examples.md +483 -0
  175. package/docs/tool-reference.md +462 -0
  176. package/package.json +17 -4
@@ -0,0 +1,18 @@
1
+ import type { SourceService } from "../source-service.js";
2
+ import type { ArtifactScope, DependencyResolutionProvenance, DependencyTargetInput, SourceMapping, SourceTargetInput, WorkspaceResolutionProvenance, WorkspaceTargetInput } from "../types.js";
3
+ import type { WorkspaceContext } from "../workspace-context-cache.js";
4
+ import type { ResolveArtifactInput } from "../source-service.js";
5
+ export declare function loadOrDetectWorkspaceContext(svc: SourceService, projectPath: string): Promise<WorkspaceContext>;
6
+ export declare function synthesizeWorkspaceTarget(svc: SourceService, input: ResolveArtifactInput, workspace: WorkspaceTargetInput): Promise<{
7
+ target: SourceTargetInput;
8
+ scope?: ArtifactScope;
9
+ mapping?: SourceMapping;
10
+ provenance: WorkspaceResolutionProvenance;
11
+ warnings: string[];
12
+ }>;
13
+ export declare function synthesizeDependencyTarget(svc: SourceService, input: ResolveArtifactInput, dep: DependencyTargetInput): Promise<{
14
+ target: SourceTargetInput;
15
+ provenance: DependencyResolutionProvenance;
16
+ requestedMapping?: SourceMapping;
17
+ warnings: string[];
18
+ }>;
@@ -0,0 +1,305 @@
1
+ import { buildSuggestedCall } from "../build-suggested-call.js";
2
+ import { ERROR_CODES, createError } from "../errors.js";
3
+ import { isSafeMavenVersionToken } from "../workspace-mapping-service.js";
4
+ import { normalizeMapping } from "./shared-utils.js";
5
+ // Env toggles are read at call time, not at module load: tests dynamically
6
+ // re-import source-service.ts with a cache-busting query to flip the flag,
7
+ // but cannot bust this module's cache through that path.
8
+ export async function loadOrDetectWorkspaceContext(svc, projectPath) {
9
+ const cached = svc.workspaceContextCache.read(projectPath);
10
+ if (cached && !cached.partial) {
11
+ return cached;
12
+ }
13
+ const [minecraftVersion, mappingResult, loaderResult] = await Promise.all([
14
+ svc.workspaceMappingService.detectProjectMinecraftVersion(projectPath),
15
+ svc.workspaceMappingService.detectCompileMapping({ projectPath }).catch(() => undefined),
16
+ svc.workspaceMappingService.detectProjectLoader(projectPath).catch(() => undefined)
17
+ ]);
18
+ const evidence = [];
19
+ if (minecraftVersion) {
20
+ evidence.push({
21
+ source: "gradle.properties",
22
+ field: "minecraft_version",
23
+ value: minecraftVersion
24
+ });
25
+ }
26
+ if (mappingResult?.resolved && mappingResult.evidence[0]) {
27
+ evidence.push({
28
+ source: mappingResult.evidence[0].filePath,
29
+ field: "compileMapping",
30
+ value: mappingResult.mappingApplied
31
+ });
32
+ }
33
+ if (loaderResult?.resolved && loaderResult.evidence[0]) {
34
+ evidence.push({
35
+ source: loaderResult.evidence[0].filePath,
36
+ field: "loader",
37
+ value: loaderResult.loader
38
+ });
39
+ }
40
+ const ctx = {
41
+ projectPath,
42
+ minecraftVersion,
43
+ compileMapping: mappingResult?.resolved ? mappingResult.mappingApplied : undefined,
44
+ loader: loaderResult?.resolved ? loaderResult.loader : undefined,
45
+ detectedAt: Date.now(),
46
+ evidence,
47
+ dependencyVersions: cached?.dependencyVersions ?? new Map(),
48
+ partial: false
49
+ };
50
+ svc.workspaceContextCache.write(ctx);
51
+ return ctx;
52
+ }
53
+ export async function synthesizeWorkspaceTarget(svc, input, workspace) {
54
+ if (process.env.WORKSPACE_TARGET_OFF === "1") {
55
+ throw createError({
56
+ code: ERROR_CODES.INVALID_INPUT,
57
+ message: 'target.kind="workspace" is disabled by WORKSPACE_TARGET_OFF=1.',
58
+ details: {
59
+ fieldErrors: [{ path: "target.kind", message: 'target.kind="workspace" is disabled.' }]
60
+ }
61
+ });
62
+ }
63
+ const projectPath = input.projectPath?.trim();
64
+ if (!projectPath) {
65
+ throw createError({
66
+ code: ERROR_CODES.INVALID_INPUT,
67
+ message: 'projectPath is required when target.kind="workspace".',
68
+ details: {
69
+ fieldErrors: [{ path: "projectPath", message: 'projectPath is required when target.kind="workspace".' }]
70
+ }
71
+ });
72
+ }
73
+ const cachedBefore = svc.workspaceContextCache.read(projectPath);
74
+ const cacheHit = Boolean(cachedBefore && !cachedBefore.partial);
75
+ const ctx = cacheHit ? cachedBefore : await svc.loadOrDetectWorkspaceContext(projectPath);
76
+ const warnings = [];
77
+ const resolvedVersion = ctx.minecraftVersion;
78
+ if (!resolvedVersion) {
79
+ throw createError({
80
+ code: ERROR_CODES.WORKSPACE_VERSION_UNRESOLVED,
81
+ message: `Could not detect a Minecraft version for projectPath "${projectPath}".`,
82
+ details: {
83
+ projectPath,
84
+ strict: workspace.strict === true,
85
+ nextAction: "Set minecraft_version in gradle.properties or pass target.kind=\"version\" with an explicit Minecraft version.",
86
+ ...buildSuggestedCall({
87
+ tool: "resolve-artifact",
88
+ params: {
89
+ target: { kind: "version", value: "<your-mc-version>" },
90
+ projectPath
91
+ }
92
+ })
93
+ }
94
+ });
95
+ }
96
+ const requestedMapping = normalizeMapping(input.mapping);
97
+ let effectiveMapping;
98
+ if (input.mapping) {
99
+ effectiveMapping = requestedMapping;
100
+ if (ctx.compileMapping && ctx.compileMapping !== requestedMapping) {
101
+ warnings.push(`Compile mapping mismatch (workspace=${ctx.compileMapping}, requested=${requestedMapping}); using requested mapping.`);
102
+ }
103
+ }
104
+ else {
105
+ effectiveMapping = ctx.compileMapping ?? "obfuscated";
106
+ }
107
+ const effectiveScope = workspace.scope ?? input.scope ?? (ctx.loader ? "merged" : "vanilla");
108
+ const provenance = {
109
+ projectPath,
110
+ detected: {
111
+ minecraftVersion: ctx.minecraftVersion,
112
+ compileMapping: ctx.compileMapping,
113
+ loader: ctx.loader
114
+ },
115
+ source: ctx.evidence
116
+ .map((entry) => `${entry.source}:${entry.field}`)
117
+ .join("; ") || (cacheHit ? "workspace-context-cache" : "workspace-detection"),
118
+ cacheHit,
119
+ warnings: [...warnings]
120
+ };
121
+ return {
122
+ target: { kind: "version", value: resolvedVersion },
123
+ scope: effectiveScope,
124
+ mapping: effectiveMapping,
125
+ provenance,
126
+ warnings
127
+ };
128
+ }
129
+ export async function synthesizeDependencyTarget(svc, input, dep) {
130
+ if (process.env.DEPENDENCY_TARGET_OFF === "1") {
131
+ throw createError({
132
+ code: ERROR_CODES.INVALID_INPUT,
133
+ message: 'target.kind="dependency" is disabled by DEPENDENCY_TARGET_OFF=1.',
134
+ details: {
135
+ fieldErrors: [{ path: "target.kind", message: 'target.kind="dependency" is disabled.' }]
136
+ }
137
+ });
138
+ }
139
+ const group = dep.group?.trim();
140
+ const name = dep.name?.trim();
141
+ if (!group || !name) {
142
+ throw createError({
143
+ code: ERROR_CODES.INVALID_INPUT,
144
+ message: 'target.kind="dependency" requires non-empty group and name.',
145
+ details: {
146
+ fieldErrors: [
147
+ ...(group ? [] : [{ path: "target.group", message: "group is required" }]),
148
+ ...(name ? [] : [{ path: "target.name", message: "name is required" }])
149
+ ]
150
+ }
151
+ });
152
+ }
153
+ if (group.includes("/") ||
154
+ group.includes("\\") ||
155
+ group.includes("..") ||
156
+ group.includes("\0") ||
157
+ name.includes("/") ||
158
+ name.includes("\\") ||
159
+ name.includes("..") ||
160
+ name.includes("\0")) {
161
+ throw createError({
162
+ code: ERROR_CODES.INVALID_INPUT,
163
+ message: 'target.kind="dependency" group/name must not contain path traversal characters.',
164
+ details: {
165
+ fieldErrors: [{ path: "target", message: "group and name must not contain '/', '\\', '..', or NUL." }]
166
+ }
167
+ });
168
+ }
169
+ if (dep.version) {
170
+ if (!isSafeMavenVersionToken(dep.version)) {
171
+ throw createError({
172
+ code: ERROR_CODES.INVALID_INPUT,
173
+ message: 'target.kind="dependency" version must be a safe Maven coordinate segment.',
174
+ details: {
175
+ fieldErrors: [
176
+ {
177
+ path: "target.version",
178
+ message: "version must contain only [A-Za-z0-9._+-] characters, must not start with '.', and must not include '..'."
179
+ }
180
+ ]
181
+ }
182
+ });
183
+ }
184
+ const coordinate = `${group}:${name}:${dep.version}`;
185
+ return {
186
+ target: { kind: "coordinate", value: coordinate },
187
+ requestedMapping: input.mapping ? normalizeMapping(input.mapping) : undefined,
188
+ warnings: [],
189
+ provenance: {
190
+ group,
191
+ name,
192
+ resolvedVersion: dep.version,
193
+ source: "explicit",
194
+ cacheHit: false
195
+ }
196
+ };
197
+ }
198
+ if (dep.versionFromProject === false) {
199
+ throw createError({
200
+ code: ERROR_CODES.INVALID_INPUT,
201
+ message: 'target.kind="dependency" requires version when versionFromProject=false.',
202
+ details: {
203
+ fieldErrors: [
204
+ { path: "target.version", message: "version is required when versionFromProject=false." }
205
+ ]
206
+ }
207
+ });
208
+ }
209
+ const projectPath = input.projectPath?.trim();
210
+ if (!projectPath) {
211
+ throw createError({
212
+ code: ERROR_CODES.INVALID_INPUT,
213
+ message: 'projectPath is required when target.kind="dependency" without an explicit version.',
214
+ details: {
215
+ fieldErrors: [{ path: "projectPath", message: 'projectPath is required for dependency target without version.' }]
216
+ }
217
+ });
218
+ }
219
+ const cacheKey = `${group}:${name}`;
220
+ const ctxBefore = svc.workspaceContextCache.read(projectPath);
221
+ const cachedVersion = ctxBefore?.dependencyVersions.get(cacheKey);
222
+ const warningsBucket = [];
223
+ if (cachedVersion) {
224
+ const coordinate = `${group}:${name}:${cachedVersion}`;
225
+ return {
226
+ target: { kind: "coordinate", value: coordinate },
227
+ requestedMapping: input.mapping ? normalizeMapping(input.mapping) : undefined,
228
+ warnings: [],
229
+ provenance: {
230
+ group,
231
+ name,
232
+ resolvedVersion: cachedVersion,
233
+ source: "workspace-context-cache",
234
+ cacheHit: true
235
+ }
236
+ };
237
+ }
238
+ const result = await svc.workspaceMappingService.detectDependencyVersion(projectPath, group, name);
239
+ if (!result.resolved) {
240
+ const ambiguous = result.candidatesSeen.length > 1;
241
+ const message = ambiguous
242
+ ? `Multiple cached versions for ${group}:${name} in ~/.gradle/caches/modules-2 (${result.candidatesSeen.join(", ")}); refusing to pick without project-specific evidence.`
243
+ : `Could not resolve a version for dependency ${group}:${name} from gradle.properties or modules-2 cache.`;
244
+ const nextAction = ambiguous
245
+ ? `Set ${name}_version (or another supported gradle.properties key) so the project's intended version is unambiguous, or pass an explicit version on the dependency target.`
246
+ : "Provide an explicit version on the dependency target, or add a property to gradle.properties so detectDependencyVersion can find it.";
247
+ throw createError({
248
+ code: ERROR_CODES.DEPENDENCY_VERSION_UNRESOLVED,
249
+ message,
250
+ details: {
251
+ group,
252
+ name,
253
+ attempts: result.attempts,
254
+ candidatesSeen: result.candidatesSeen,
255
+ ambiguous,
256
+ nextAction,
257
+ ...buildSuggestedCall({
258
+ tool: "resolve-artifact",
259
+ params: {
260
+ target: {
261
+ kind: "dependency",
262
+ group,
263
+ name,
264
+ version: "<your-version>"
265
+ },
266
+ projectPath
267
+ }
268
+ })
269
+ }
270
+ });
271
+ }
272
+ const ctxAfter = svc.workspaceContextCache.read(projectPath);
273
+ if (ctxAfter) {
274
+ const updatedDeps = new Map(ctxAfter.dependencyVersions);
275
+ updatedDeps.set(cacheKey, result.version);
276
+ svc.workspaceContextCache.write({ ...ctxAfter, dependencyVersions: updatedDeps });
277
+ }
278
+ else {
279
+ const updatedDeps = new Map();
280
+ updatedDeps.set(cacheKey, result.version);
281
+ svc.workspaceContextCache.write({
282
+ projectPath,
283
+ detectedAt: Date.now(),
284
+ evidence: [],
285
+ dependencyVersions: updatedDeps,
286
+ partial: true
287
+ });
288
+ }
289
+ const coordinate = `${group}:${name}:${result.version}`;
290
+ return {
291
+ target: { kind: "coordinate", value: coordinate },
292
+ requestedMapping: input.mapping ? normalizeMapping(input.mapping) : undefined,
293
+ warnings: warningsBucket,
294
+ provenance: {
295
+ group,
296
+ name,
297
+ resolvedVersion: result.version,
298
+ source: result.source,
299
+ candidatesSeen: result.candidatesSeen,
300
+ attempts: result.attempts,
301
+ cacheHit: false
302
+ }
303
+ };
304
+ }
305
+ //# sourceMappingURL=workspace-target.js.map
@@ -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;
@@ -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");