@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.
Files changed (70) hide show
  1. package/CHANGELOG.md +21 -2
  2. package/README.md +9 -2
  3. package/dist/entry-tools/analyze-symbol-service.d.ts +12 -0
  4. package/dist/entry-tools/analyze-symbol-service.js +7 -0
  5. package/dist/entry-tools/batch-class-members-service.d.ts +1 -0
  6. package/dist/entry-tools/batch-class-members-service.js +2 -0
  7. package/dist/entry-tools/batch-class-source-service.d.ts +1 -0
  8. package/dist/entry-tools/batch-class-source-service.js +2 -0
  9. package/dist/entry-tools/batch-mappings-service.d.ts +1 -0
  10. package/dist/entry-tools/batch-mappings-service.js +1 -0
  11. package/dist/entry-tools/batch-symbol-exists-service.d.ts +1 -0
  12. package/dist/entry-tools/batch-symbol-exists-service.js +2 -0
  13. package/dist/entry-tools/compare-minecraft-service.d.ts +9 -0
  14. package/dist/entry-tools/compare-minecraft-service.js +3 -1
  15. package/dist/entry-tools/inspect-minecraft/handlers/class-members.js +1 -0
  16. package/dist/entry-tools/inspect-minecraft/handlers/class-overview.js +3 -1
  17. package/dist/entry-tools/inspect-minecraft/handlers/class-source.js +1 -0
  18. package/dist/entry-tools/inspect-minecraft/handlers/list-files.js +1 -0
  19. package/dist/entry-tools/inspect-minecraft/handlers/search.js +2 -1
  20. package/dist/entry-tools/inspect-minecraft/internal.d.ts +17 -0
  21. package/dist/entry-tools/inspect-minecraft/internal.js +10 -0
  22. package/dist/entry-tools/inspect-minecraft-service.d.ts +40 -0
  23. package/dist/entry-tools/validate-project/cases/project-summary.d.ts +6 -1
  24. package/dist/entry-tools/validate-project/cases/project-summary.js +83 -9
  25. package/dist/entry-tools/validate-project/internal.d.ts +29 -18
  26. package/dist/entry-tools/validate-project/internal.js +37 -19
  27. package/dist/entry-tools/validate-project-service.d.ts +15 -1
  28. package/dist/entry-tools/validate-project-service.js +3 -2
  29. package/dist/entry-tools/verify-mixin-target-service.d.ts +2 -0
  30. package/dist/entry-tools/verify-mixin-target-service.js +1 -0
  31. package/dist/gradle-paths.d.ts +8 -3
  32. package/dist/gradle-paths.js +34 -5
  33. package/dist/index.js +29 -9
  34. package/dist/mapping/loaders/tiny-loom.d.ts +1 -1
  35. package/dist/mapping/loaders/tiny-loom.js +5 -2
  36. package/dist/mapping/types.d.ts +5 -0
  37. package/dist/mapping-service.d.ts +6 -1
  38. package/dist/mapping-service.js +26 -18
  39. package/dist/mixin-validator.d.ts +1 -1
  40. package/dist/mixin-validator.js +1 -1
  41. package/dist/source/access-validate.js +12 -8
  42. package/dist/source/artifact-resolver.d.ts +7 -1
  43. package/dist/source/artifact-resolver.js +120 -7
  44. package/dist/source/class-source/members-builder.d.ts +1 -0
  45. package/dist/source/class-source/members-builder.js +1 -1
  46. package/dist/source/class-source.d.ts +1 -0
  47. package/dist/source/class-source.js +9 -1
  48. package/dist/source/indexer.js +17 -0
  49. package/dist/source/lifecycle/diff.js +6 -6
  50. package/dist/source/lifecycle/mapping-helpers.d.ts +3 -3
  51. package/dist/source/lifecycle/mapping-helpers.js +17 -9
  52. package/dist/source/lifecycle/trace.js +2 -2
  53. package/dist/source/search.js +1 -0
  54. package/dist/source/state.d.ts +5 -0
  55. package/dist/source/state.js +5 -0
  56. package/dist/source/symbol-resolver.js +4 -1
  57. package/dist/source/validate-mixin/pipeline/mapping-health.js +2 -1
  58. package/dist/source/validate-mixin/pipeline/resolve.js +1 -0
  59. package/dist/source/validate-mixin/pipeline/target-lookup.js +12 -7
  60. package/dist/source-resolver.d.ts +1 -0
  61. package/dist/source-resolver.js +1 -1
  62. package/dist/source-service.d.ts +35 -1
  63. package/dist/source-service.js +5 -2
  64. package/dist/tool-contract-manifest.d.ts +1 -1
  65. package/dist/tool-contract-manifest.js +2 -2
  66. package/dist/tool-schemas.d.ts +91 -0
  67. package/dist/tool-schemas.js +20 -0
  68. package/docs/README-ja.md +4 -2
  69. package/docs/tool-reference.md +13 -7
  70. package/package.json +15 -3
@@ -58,6 +58,7 @@ export const subjectSchema = z.discriminatedUnion("kind", [
58
58
  mapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
59
59
  scope: z.enum(["vanilla", "merged", "loader"]).optional(),
60
60
  projectPath: nonEmptyString.optional(),
61
+ gradleUserHome: nonEmptyString.optional(),
61
62
  preferProjectVersion: z.boolean().optional(),
62
63
  strictVersion: z.boolean().optional()
63
64
  }),
@@ -67,6 +68,7 @@ export const subjectSchema = z.discriminatedUnion("kind", [
67
68
  mapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
68
69
  scope: z.enum(["vanilla", "merged", "loader"]).optional(),
69
70
  projectPath: nonEmptyString.optional(),
71
+ gradleUserHome: nonEmptyString.optional(),
70
72
  preferProjectVersion: z.boolean().optional(),
71
73
  strictVersion: z.boolean().optional()
72
74
  }),
@@ -77,6 +79,7 @@ export const subjectSchema = z.discriminatedUnion("kind", [
77
79
  mapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
78
80
  scope: z.enum(["vanilla", "merged", "loader"]).optional(),
79
81
  projectPath: nonEmptyString.optional(),
82
+ gradleUserHome: nonEmptyString.optional(),
80
83
  preferProjectVersion: z.boolean().optional(),
81
84
  strictVersion: z.boolean().optional()
82
85
  }),
@@ -101,6 +104,7 @@ export const subjectSchema = z.discriminatedUnion("kind", [
101
104
  projectPath: nonEmptyString,
102
105
  mapping: z.enum(["obfuscated", "mojang", "intermediary", "yarn"]).optional(),
103
106
  scope: z.enum(["vanilla", "merged", "loader"]).optional(),
107
+ gradleUserHome: nonEmptyString.optional(),
104
108
  preferProjectVersion: z.boolean().optional(),
105
109
  strictVersion: z.boolean().optional(),
106
110
  focus: workspaceFocusSchema.optional()
@@ -171,6 +175,7 @@ export function buildClassSubject(subject) {
171
175
  className: workspaceFocus.className,
172
176
  artifact: workspaceFocus.artifact,
173
177
  projectPath: subject.projectPath,
178
+ ...(subject.gradleUserHome !== undefined ? { gradleUserHome: subject.gradleUserHome } : {}),
174
179
  mapping: subject.mapping,
175
180
  scope: subject.scope,
176
181
  preferProjectVersion: subject.preferProjectVersion,
@@ -198,6 +203,7 @@ export async function resolveWorkspaceArtifactReference(deps, subject, artifactR
198
203
  mapping: subject.mapping,
199
204
  scope: subject.scope,
200
205
  projectPath: subject.projectPath,
206
+ ...(subject.gradleUserHome !== undefined ? { gradleUserHome: subject.gradleUserHome } : {}),
201
207
  preferProjectVersion: subject.preferProjectVersion,
202
208
  strictVersion: subject.strictVersion
203
209
  });
@@ -343,6 +349,7 @@ export async function resolveBinaryBackedClass(deps, className, input) {
343
349
  kind: "class",
344
350
  name: className,
345
351
  sourceMapping: input.mapping ?? "obfuscated",
352
+ ...(input.gradleUserHome !== undefined ? { gradleUserHome: input.gradleUserHome } : {}),
346
353
  nameMode: className.includes(".") ? "fqcn" : "auto",
347
354
  maxCandidates: 10
348
355
  });
@@ -391,6 +398,7 @@ export async function resolveArtifactReference(deps, subject, task) {
391
398
  mapping: subject.mapping,
392
399
  scope: subject.scope,
393
400
  projectPath: subject.projectPath,
401
+ ...(subject.gradleUserHome !== undefined ? { gradleUserHome: subject.gradleUserHome } : {}),
394
402
  preferProjectVersion: subject.preferProjectVersion,
395
403
  strictVersion: subject.strictVersion
396
404
  });
@@ -414,6 +422,7 @@ export async function resolveArtifactReference(deps, subject, task) {
414
422
  mapping: subject.mapping,
415
423
  scope: subject.scope,
416
424
  projectPath: subject.projectPath,
425
+ ...(subject.gradleUserHome !== undefined ? { gradleUserHome: subject.gradleUserHome } : {}),
417
426
  preferProjectVersion: subject.preferProjectVersion ?? true,
418
427
  strictVersion: subject.strictVersion
419
428
  });
@@ -436,6 +445,7 @@ async function resolveArtifactRef(deps, ref, subject) {
436
445
  mapping: "mapping" in subject ? subject.mapping : undefined,
437
446
  scope: "scope" in subject ? subject.scope : undefined,
438
447
  projectPath: "projectPath" in subject ? subject.projectPath : undefined,
448
+ ...("gradleUserHome" in subject && subject.gradleUserHome !== undefined ? { gradleUserHome: subject.gradleUserHome } : {}),
439
449
  preferProjectVersion: "preferProjectVersion" in subject ? subject.preferProjectVersion : undefined,
440
450
  strictVersion: "strictVersion" in subject ? subject.strictVersion : undefined
441
451
  });
@@ -8,6 +8,7 @@ export declare const inspectMinecraftShape: {
8
8
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
9
9
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
10
10
  projectPath: z.ZodOptional<z.ZodString>;
11
+ gradleUserHome: z.ZodOptional<z.ZodString>;
11
12
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
12
13
  strictVersion: z.ZodOptional<z.ZodBoolean>;
13
14
  }, "strip", z.ZodTypeAny, {
@@ -16,6 +17,7 @@ export declare const inspectMinecraftShape: {
16
17
  projectPath?: string | undefined;
17
18
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
18
19
  scope?: "vanilla" | "merged" | "loader" | undefined;
20
+ gradleUserHome?: string | undefined;
19
21
  preferProjectVersion?: boolean | undefined;
20
22
  strictVersion?: boolean | undefined;
21
23
  }, {
@@ -24,6 +26,7 @@ export declare const inspectMinecraftShape: {
24
26
  projectPath?: string | undefined;
25
27
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
26
28
  scope?: "vanilla" | "merged" | "loader" | undefined;
29
+ gradleUserHome?: string | undefined;
27
30
  preferProjectVersion?: boolean | undefined;
28
31
  strictVersion?: boolean | undefined;
29
32
  }>, z.ZodObject<{
@@ -65,6 +68,7 @@ export declare const inspectMinecraftShape: {
65
68
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
66
69
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
67
70
  projectPath: z.ZodOptional<z.ZodString>;
71
+ gradleUserHome: z.ZodOptional<z.ZodString>;
68
72
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
69
73
  strictVersion: z.ZodOptional<z.ZodBoolean>;
70
74
  }, "strip", z.ZodTypeAny, {
@@ -82,6 +86,7 @@ export declare const inspectMinecraftShape: {
82
86
  projectPath?: string | undefined;
83
87
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
84
88
  scope?: "vanilla" | "merged" | "loader" | undefined;
89
+ gradleUserHome?: string | undefined;
85
90
  preferProjectVersion?: boolean | undefined;
86
91
  strictVersion?: boolean | undefined;
87
92
  }, {
@@ -99,6 +104,7 @@ export declare const inspectMinecraftShape: {
99
104
  projectPath?: string | undefined;
100
105
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
101
106
  scope?: "vanilla" | "merged" | "loader" | undefined;
107
+ gradleUserHome?: string | undefined;
102
108
  preferProjectVersion?: boolean | undefined;
103
109
  strictVersion?: boolean | undefined;
104
110
  }>, z.ZodObject<{
@@ -141,6 +147,7 @@ export declare const inspectMinecraftShape: {
141
147
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
142
148
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
143
149
  projectPath: z.ZodOptional<z.ZodString>;
150
+ gradleUserHome: z.ZodOptional<z.ZodString>;
144
151
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
145
152
  strictVersion: z.ZodOptional<z.ZodBoolean>;
146
153
  }, "strip", z.ZodTypeAny, {
@@ -149,6 +156,7 @@ export declare const inspectMinecraftShape: {
149
156
  projectPath?: string | undefined;
150
157
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
151
158
  scope?: "vanilla" | "merged" | "loader" | undefined;
159
+ gradleUserHome?: string | undefined;
152
160
  preferProjectVersion?: boolean | undefined;
153
161
  strictVersion?: boolean | undefined;
154
162
  artifact?: {
@@ -167,6 +175,7 @@ export declare const inspectMinecraftShape: {
167
175
  projectPath?: string | undefined;
168
176
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
169
177
  scope?: "vanilla" | "merged" | "loader" | undefined;
178
+ gradleUserHome?: string | undefined;
170
179
  preferProjectVersion?: boolean | undefined;
171
180
  strictVersion?: boolean | undefined;
172
181
  artifact?: {
@@ -328,6 +337,7 @@ export declare const inspectMinecraftShape: {
328
337
  projectPath: z.ZodString;
329
338
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
330
339
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
340
+ gradleUserHome: z.ZodOptional<z.ZodString>;
331
341
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
332
342
  strictVersion: z.ZodOptional<z.ZodBoolean>;
333
343
  focus: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
@@ -543,6 +553,7 @@ export declare const inspectMinecraftShape: {
543
553
  projectPath: string;
544
554
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
545
555
  scope?: "vanilla" | "merged" | "loader" | undefined;
556
+ gradleUserHome?: string | undefined;
546
557
  preferProjectVersion?: boolean | undefined;
547
558
  strictVersion?: boolean | undefined;
548
559
  focus?: {
@@ -596,6 +607,7 @@ export declare const inspectMinecraftShape: {
596
607
  projectPath: string;
597
608
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
598
609
  scope?: "vanilla" | "merged" | "loader" | undefined;
610
+ gradleUserHome?: string | undefined;
599
611
  preferProjectVersion?: boolean | undefined;
600
612
  strictVersion?: boolean | undefined;
601
613
  focus?: {
@@ -659,6 +671,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
659
671
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
660
672
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
661
673
  projectPath: z.ZodOptional<z.ZodString>;
674
+ gradleUserHome: z.ZodOptional<z.ZodString>;
662
675
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
663
676
  strictVersion: z.ZodOptional<z.ZodBoolean>;
664
677
  }, "strip", z.ZodTypeAny, {
@@ -667,6 +680,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
667
680
  projectPath?: string | undefined;
668
681
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
669
682
  scope?: "vanilla" | "merged" | "loader" | undefined;
683
+ gradleUserHome?: string | undefined;
670
684
  preferProjectVersion?: boolean | undefined;
671
685
  strictVersion?: boolean | undefined;
672
686
  }, {
@@ -675,6 +689,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
675
689
  projectPath?: string | undefined;
676
690
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
677
691
  scope?: "vanilla" | "merged" | "loader" | undefined;
692
+ gradleUserHome?: string | undefined;
678
693
  preferProjectVersion?: boolean | undefined;
679
694
  strictVersion?: boolean | undefined;
680
695
  }>, z.ZodObject<{
@@ -716,6 +731,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
716
731
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
717
732
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
718
733
  projectPath: z.ZodOptional<z.ZodString>;
734
+ gradleUserHome: z.ZodOptional<z.ZodString>;
719
735
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
720
736
  strictVersion: z.ZodOptional<z.ZodBoolean>;
721
737
  }, "strip", z.ZodTypeAny, {
@@ -733,6 +749,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
733
749
  projectPath?: string | undefined;
734
750
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
735
751
  scope?: "vanilla" | "merged" | "loader" | undefined;
752
+ gradleUserHome?: string | undefined;
736
753
  preferProjectVersion?: boolean | undefined;
737
754
  strictVersion?: boolean | undefined;
738
755
  }, {
@@ -750,6 +767,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
750
767
  projectPath?: string | undefined;
751
768
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
752
769
  scope?: "vanilla" | "merged" | "loader" | undefined;
770
+ gradleUserHome?: string | undefined;
753
771
  preferProjectVersion?: boolean | undefined;
754
772
  strictVersion?: boolean | undefined;
755
773
  }>, z.ZodObject<{
@@ -792,6 +810,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
792
810
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
793
811
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
794
812
  projectPath: z.ZodOptional<z.ZodString>;
813
+ gradleUserHome: z.ZodOptional<z.ZodString>;
795
814
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
796
815
  strictVersion: z.ZodOptional<z.ZodBoolean>;
797
816
  }, "strip", z.ZodTypeAny, {
@@ -800,6 +819,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
800
819
  projectPath?: string | undefined;
801
820
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
802
821
  scope?: "vanilla" | "merged" | "loader" | undefined;
822
+ gradleUserHome?: string | undefined;
803
823
  preferProjectVersion?: boolean | undefined;
804
824
  strictVersion?: boolean | undefined;
805
825
  artifact?: {
@@ -818,6 +838,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
818
838
  projectPath?: string | undefined;
819
839
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
820
840
  scope?: "vanilla" | "merged" | "loader" | undefined;
841
+ gradleUserHome?: string | undefined;
821
842
  preferProjectVersion?: boolean | undefined;
822
843
  strictVersion?: boolean | undefined;
823
844
  artifact?: {
@@ -979,6 +1000,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
979
1000
  projectPath: z.ZodString;
980
1001
  mapping: z.ZodOptional<z.ZodEnum<["obfuscated", "mojang", "intermediary", "yarn"]>>;
981
1002
  scope: z.ZodOptional<z.ZodEnum<["vanilla", "merged", "loader"]>>;
1003
+ gradleUserHome: z.ZodOptional<z.ZodString>;
982
1004
  preferProjectVersion: z.ZodOptional<z.ZodBoolean>;
983
1005
  strictVersion: z.ZodOptional<z.ZodBoolean>;
984
1006
  focus: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
@@ -1194,6 +1216,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1194
1216
  projectPath: string;
1195
1217
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1196
1218
  scope?: "vanilla" | "merged" | "loader" | undefined;
1219
+ gradleUserHome?: string | undefined;
1197
1220
  preferProjectVersion?: boolean | undefined;
1198
1221
  strictVersion?: boolean | undefined;
1199
1222
  focus?: {
@@ -1247,6 +1270,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1247
1270
  projectPath: string;
1248
1271
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1249
1272
  scope?: "vanilla" | "merged" | "loader" | undefined;
1273
+ gradleUserHome?: string | undefined;
1250
1274
  preferProjectVersion?: boolean | undefined;
1251
1275
  strictVersion?: boolean | undefined;
1252
1276
  focus?: {
@@ -1312,6 +1336,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1312
1336
  projectPath?: string | undefined;
1313
1337
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1314
1338
  scope?: "vanilla" | "merged" | "loader" | undefined;
1339
+ gradleUserHome?: string | undefined;
1315
1340
  preferProjectVersion?: boolean | undefined;
1316
1341
  strictVersion?: boolean | undefined;
1317
1342
  } | {
@@ -1329,6 +1354,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1329
1354
  projectPath?: string | undefined;
1330
1355
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1331
1356
  scope?: "vanilla" | "merged" | "loader" | undefined;
1357
+ gradleUserHome?: string | undefined;
1332
1358
  preferProjectVersion?: boolean | undefined;
1333
1359
  strictVersion?: boolean | undefined;
1334
1360
  } | {
@@ -1337,6 +1363,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1337
1363
  projectPath?: string | undefined;
1338
1364
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1339
1365
  scope?: "vanilla" | "merged" | "loader" | undefined;
1366
+ gradleUserHome?: string | undefined;
1340
1367
  preferProjectVersion?: boolean | undefined;
1341
1368
  strictVersion?: boolean | undefined;
1342
1369
  artifact?: {
@@ -1386,6 +1413,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1386
1413
  projectPath: string;
1387
1414
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1388
1415
  scope?: "vanilla" | "merged" | "loader" | undefined;
1416
+ gradleUserHome?: string | undefined;
1389
1417
  preferProjectVersion?: boolean | undefined;
1390
1418
  strictVersion?: boolean | undefined;
1391
1419
  focus?: {
@@ -1448,6 +1476,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1448
1476
  projectPath?: string | undefined;
1449
1477
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1450
1478
  scope?: "vanilla" | "merged" | "loader" | undefined;
1479
+ gradleUserHome?: string | undefined;
1451
1480
  preferProjectVersion?: boolean | undefined;
1452
1481
  strictVersion?: boolean | undefined;
1453
1482
  } | {
@@ -1465,6 +1494,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1465
1494
  projectPath?: string | undefined;
1466
1495
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1467
1496
  scope?: "vanilla" | "merged" | "loader" | undefined;
1497
+ gradleUserHome?: string | undefined;
1468
1498
  preferProjectVersion?: boolean | undefined;
1469
1499
  strictVersion?: boolean | undefined;
1470
1500
  } | {
@@ -1473,6 +1503,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1473
1503
  projectPath?: string | undefined;
1474
1504
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1475
1505
  scope?: "vanilla" | "merged" | "loader" | undefined;
1506
+ gradleUserHome?: string | undefined;
1476
1507
  preferProjectVersion?: boolean | undefined;
1477
1508
  strictVersion?: boolean | undefined;
1478
1509
  artifact?: {
@@ -1522,6 +1553,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1522
1553
  projectPath: string;
1523
1554
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1524
1555
  scope?: "vanilla" | "merged" | "loader" | undefined;
1556
+ gradleUserHome?: string | undefined;
1525
1557
  preferProjectVersion?: boolean | undefined;
1526
1558
  strictVersion?: boolean | undefined;
1527
1559
  focus?: {
@@ -1584,6 +1616,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1584
1616
  projectPath?: string | undefined;
1585
1617
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1586
1618
  scope?: "vanilla" | "merged" | "loader" | undefined;
1619
+ gradleUserHome?: string | undefined;
1587
1620
  preferProjectVersion?: boolean | undefined;
1588
1621
  strictVersion?: boolean | undefined;
1589
1622
  } | {
@@ -1601,6 +1634,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1601
1634
  projectPath?: string | undefined;
1602
1635
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1603
1636
  scope?: "vanilla" | "merged" | "loader" | undefined;
1637
+ gradleUserHome?: string | undefined;
1604
1638
  preferProjectVersion?: boolean | undefined;
1605
1639
  strictVersion?: boolean | undefined;
1606
1640
  } | {
@@ -1609,6 +1643,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1609
1643
  projectPath?: string | undefined;
1610
1644
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1611
1645
  scope?: "vanilla" | "merged" | "loader" | undefined;
1646
+ gradleUserHome?: string | undefined;
1612
1647
  preferProjectVersion?: boolean | undefined;
1613
1648
  strictVersion?: boolean | undefined;
1614
1649
  artifact?: {
@@ -1658,6 +1693,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1658
1693
  projectPath: string;
1659
1694
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1660
1695
  scope?: "vanilla" | "merged" | "loader" | undefined;
1696
+ gradleUserHome?: string | undefined;
1661
1697
  preferProjectVersion?: boolean | undefined;
1662
1698
  strictVersion?: boolean | undefined;
1663
1699
  focus?: {
@@ -1720,6 +1756,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1720
1756
  projectPath?: string | undefined;
1721
1757
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1722
1758
  scope?: "vanilla" | "merged" | "loader" | undefined;
1759
+ gradleUserHome?: string | undefined;
1723
1760
  preferProjectVersion?: boolean | undefined;
1724
1761
  strictVersion?: boolean | undefined;
1725
1762
  } | {
@@ -1737,6 +1774,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1737
1774
  projectPath?: string | undefined;
1738
1775
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1739
1776
  scope?: "vanilla" | "merged" | "loader" | undefined;
1777
+ gradleUserHome?: string | undefined;
1740
1778
  preferProjectVersion?: boolean | undefined;
1741
1779
  strictVersion?: boolean | undefined;
1742
1780
  } | {
@@ -1745,6 +1783,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1745
1783
  projectPath?: string | undefined;
1746
1784
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1747
1785
  scope?: "vanilla" | "merged" | "loader" | undefined;
1786
+ gradleUserHome?: string | undefined;
1748
1787
  preferProjectVersion?: boolean | undefined;
1749
1788
  strictVersion?: boolean | undefined;
1750
1789
  artifact?: {
@@ -1794,6 +1833,7 @@ export declare const inspectMinecraftSchema: z.ZodEffects<z.ZodObject<{
1794
1833
  projectPath: string;
1795
1834
  mapping?: "obfuscated" | "mojang" | "intermediary" | "yarn" | undefined;
1796
1835
  scope?: "vanilla" | "merged" | "loader" | undefined;
1836
+ gradleUserHome?: string | undefined;
1797
1837
  preferProjectVersion?: boolean | undefined;
1798
1838
  strictVersion?: boolean | undefined;
1799
1839
  focus?: {
@@ -1,7 +1,11 @@
1
1
  import { type DetailLevel } from "../../response-contract.js";
2
+ import type { StageEmitter } from "../../../stage-emitter.js";
2
3
  import type { ValidateProjectInput } from "../../validate-project-service.js";
3
4
  import { type ValidateProjectDeps } from "../internal.js";
4
- export declare function handleProjectSummary(deps: ValidateProjectDeps, input: ValidateProjectInput, detail: DetailLevel, include: string[]): Promise<{
5
+ type ProjectSummaryOptions = {
6
+ stageEmitter?: StageEmitter;
7
+ };
8
+ export declare function handleProjectSummary(deps: ValidateProjectDeps, input: ValidateProjectInput, detail: DetailLevel, include: string[], options?: ProjectSummaryOptions): Promise<{
5
9
  warnings: string[];
6
10
  tasks?: {
7
11
  "workspace.detected": {
@@ -95,3 +99,4 @@ export declare function handleProjectSummary(deps: ValidateProjectDeps, input: V
95
99
  };
96
100
  } | undefined;
97
101
  }>;
102
+ export {};
@@ -2,7 +2,24 @@ import { readFile } from "node:fs/promises";
2
2
  import { buildEntryToolResult, createSummarySubject } from "../../response-contract.js";
3
3
  import { ERROR_CODES, createError } from "../../../errors.js";
4
4
  import { buildEarlyTasksForBlocked, buildFullTaskStatusReport } from "../internal.js";
5
- export async function handleProjectSummary(deps, input, detail, include) {
5
+ // Telemetry failures must not change validation outcomes; swallow rejections
6
+ // so a broken emitter does not abort the summary or count as a validation error.
7
+ async function safeEmit(emitter, stage, payload) {
8
+ if (!emitter)
9
+ return;
10
+ try {
11
+ await emitter(stage, payload);
12
+ }
13
+ catch {
14
+ // swallow telemetry failure
15
+ }
16
+ }
17
+ export async function handleProjectSummary(deps, input, detail, include, options = {}) {
18
+ // Forwarded emitter for nested validators and probes; same swallow contract
19
+ // as safeEmit so a rejecting raw emitter cannot leak into their outcomes.
20
+ const wrappedEmitter = options.stageEmitter
21
+ ? (stage, meta) => safeEmit(options.stageEmitter, stage, meta)
22
+ : undefined;
6
23
  if (input.subject.kind !== "workspace") {
7
24
  throw createError({
8
25
  code: ERROR_CODES.INVALID_INPUT,
@@ -42,7 +59,11 @@ export async function handleProjectSummary(deps, input, detail, include) {
42
59
  }
43
60
  }
44
61
  });
45
- const tasks = await buildEarlyTasksForBlocked(input.subject.projectPath, detail, include);
62
+ await safeEmit(options.stageEmitter, "validate-project:task-report", {
63
+ projectPath: input.subject.projectPath,
64
+ reason: "missing-version"
65
+ });
66
+ const tasks = await buildEarlyTasksForBlocked(input.subject.projectPath, detail, include, undefined, input.subject.gradleUserHome);
46
67
  return {
47
68
  ...baseResult,
48
69
  ...(tasks ? { tasks } : {}),
@@ -50,11 +71,16 @@ export async function handleProjectSummary(deps, input, detail, include) {
50
71
  };
51
72
  }
52
73
  const projectPath = input.subject.projectPath;
74
+ const gradleUserHome = input.subject.gradleUserHome;
75
+ const discover = input.subject.discover ?? ["mixins", "access-wideners"];
76
+ await safeEmit(options.stageEmitter, "validate-project:workspace-discovery", {
77
+ projectPath,
78
+ discover
79
+ });
53
80
  const detectedProjectVersion = input.preferProjectVersion
54
81
  ? await deps.detectProjectMinecraftVersion?.(projectPath)
55
82
  : undefined;
56
83
  const resolvedVersion = detectedProjectVersion ?? input.version;
57
- const discover = input.subject.discover ?? ["mixins", "access-wideners"];
58
84
  const [mixinConfigs, accessWideners, accessTransformers] = await Promise.all([
59
85
  discover.includes("mixins")
60
86
  ? deps.discoverMixins(projectPath, input.configPaths)
@@ -102,11 +128,18 @@ export async function handleProjectSummary(deps, input, detail, include) {
102
128
  }
103
129
  }
104
130
  });
105
- const tasks = await buildEarlyTasksForBlocked(projectPath, detail, include, {
131
+ await safeEmit(options.stageEmitter, "validate-project:task-report", {
132
+ projectPath,
133
+ reason: "version-unresolved",
106
134
  mixinDiscoveryCount: mixinConfigs.length,
107
135
  awDiscoveryCount: accessWideners.length,
108
136
  atDiscoveryCount: accessTransformers.length
109
137
  });
138
+ const tasks = await buildEarlyTasksForBlocked(projectPath, detail, include, {
139
+ mixinDiscoveryCount: mixinConfigs.length,
140
+ awDiscoveryCount: accessWideners.length,
141
+ atDiscoveryCount: accessTransformers.length
142
+ }, gradleUserHome);
110
143
  return {
111
144
  ...baseResult,
112
145
  ...(tasks ? { tasks } : {}),
@@ -144,7 +177,11 @@ export async function handleProjectSummary(deps, input, detail, include) {
144
177
  }
145
178
  }
146
179
  });
147
- const tasks = await buildEarlyTasksForBlocked(projectPath, detail, include);
180
+ await safeEmit(options.stageEmitter, "validate-project:task-report", {
181
+ projectPath,
182
+ reason: "version-not-required"
183
+ });
184
+ const tasks = await buildEarlyTasksForBlocked(projectPath, detail, include, undefined, gradleUserHome);
148
185
  return {
149
186
  ...baseResult,
150
187
  ...(tasks ? { tasks } : {}),
@@ -158,8 +195,16 @@ export async function handleProjectSummary(deps, input, detail, include) {
158
195
  let partialMixins = 0;
159
196
  let invalidMixins = 0;
160
197
  let mixinCaughtErrors = 0;
161
- for (const configPath of mixinConfigs) {
198
+ await safeEmit(options.stageEmitter, "validate-project:mixin-validation", {
199
+ targetTotal: mixinConfigs.length
200
+ });
201
+ for (const [mixinIndex, configPath] of mixinConfigs.entries()) {
162
202
  try {
203
+ await safeEmit(options.stageEmitter, "validate-project:mixin-validation", {
204
+ targetIndex: mixinIndex + 1,
205
+ targetTotal: mixinConfigs.length,
206
+ configPath
207
+ });
163
208
  const mixinResult = await deps.validateMixin({
164
209
  input: {
165
210
  mode: "config",
@@ -170,6 +215,7 @@ export async function handleProjectSummary(deps, input, detail, include) {
170
215
  sourcePriority: input.sourcePriority,
171
216
  scope: input.scope,
172
217
  projectPath,
218
+ gradleUserHome,
173
219
  preferProjectVersion: false,
174
220
  preferProjectMapping: input.preferProjectMapping,
175
221
  sourceRoots: input.sourceRoots,
@@ -180,6 +226,8 @@ export async function handleProjectSummary(deps, input, detail, include) {
180
226
  warningCategoryFilter: input.warningCategoryFilter,
181
227
  treatInfoAsWarning: input.treatInfoAsWarning,
182
228
  includeIssues: input.includeIssues
229
+ }, {
230
+ stageEmitter: wrappedEmitter
183
231
  });
184
232
  const summary = mixinResult.summary;
185
233
  validMixins += summary?.valid ?? 0;
@@ -202,14 +250,23 @@ export async function handleProjectSummary(deps, input, detail, include) {
202
250
  let validAw = 0;
203
251
  let invalidAw = 0;
204
252
  let awCaughtErrors = 0;
205
- for (const awPath of accessWideners) {
253
+ await safeEmit(options.stageEmitter, "validate-project:access-widener-validation", {
254
+ targetTotal: accessWideners.length
255
+ });
256
+ for (const [awIndex, awPath] of accessWideners.entries()) {
206
257
  try {
258
+ await safeEmit(options.stageEmitter, "validate-project:access-widener-validation", {
259
+ targetIndex: awIndex + 1,
260
+ targetTotal: accessWideners.length,
261
+ filePath: awPath
262
+ });
207
263
  const output = await deps.validateAccessWidener({
208
264
  content: await readFile(awPath, "utf8"),
209
265
  version: validationVersion,
210
266
  mapping: input.mapping,
211
267
  sourcePriority: input.sourcePriority,
212
268
  projectPath,
269
+ gradleUserHome,
213
270
  scope: input.scope,
214
271
  preferProjectVersion: input.preferProjectVersion
215
272
  });
@@ -236,8 +293,16 @@ export async function handleProjectSummary(deps, input, detail, include) {
236
293
  let validAt = 0;
237
294
  let invalidAt = 0;
238
295
  let atCaughtErrors = 0;
239
- for (const atPath of accessTransformers) {
296
+ await safeEmit(options.stageEmitter, "validate-project:access-transformer-validation", {
297
+ targetTotal: accessTransformers.length
298
+ });
299
+ for (const [atIndex, atPath] of accessTransformers.entries()) {
240
300
  try {
301
+ await safeEmit(options.stageEmitter, "validate-project:access-transformer-validation", {
302
+ targetIndex: atIndex + 1,
303
+ targetTotal: accessTransformers.length,
304
+ filePath: atPath
305
+ });
241
306
  if (!deps.validateAccessTransformer) {
242
307
  throw createError({
243
308
  code: ERROR_CODES.CONTEXT_UNRESOLVED,
@@ -250,6 +315,7 @@ export async function handleProjectSummary(deps, input, detail, include) {
250
315
  atNamespace: input.atNamespace,
251
316
  sourcePriority: input.sourcePriority,
252
317
  projectPath,
318
+ gradleUserHome,
253
319
  scope: input.scope,
254
320
  preferProjectVersion: input.preferProjectVersion
255
321
  });
@@ -315,6 +381,12 @@ export async function handleProjectSummary(deps, input, detail, include) {
315
381
  },
316
382
  alwaysBlocks: ["project"]
317
383
  });
384
+ await safeEmit(options.stageEmitter, "validate-project:task-report", {
385
+ projectPath,
386
+ mixinDiscoveryCount: mixinConfigs.length,
387
+ awDiscoveryCount: accessWideners.length,
388
+ atDiscoveryCount: accessTransformers.length
389
+ });
318
390
  const tasks = await buildFullTaskStatusReport(deps, {
319
391
  projectPath,
320
392
  detail,
@@ -322,6 +394,7 @@ export async function handleProjectSummary(deps, input, detail, include) {
322
394
  resolvedVersion: validationVersion,
323
395
  mapping: input.mapping,
324
396
  sourcePriority: input.sourcePriority,
397
+ gradleUserHome,
325
398
  scope: input.scope,
326
399
  preferProjectVersion: input.preferProjectVersion,
327
400
  mixinDiscoveryCount: mixinConfigs.length,
@@ -335,7 +408,8 @@ export async function handleProjectSummary(deps, input, detail, include) {
335
408
  atDiscoveryCount: accessTransformers.length,
336
409
  atCaughtErrors,
337
410
  atCounts: { ok: validAt, invalid: invalidAt },
338
- atDurationMs
411
+ atDurationMs,
412
+ stageEmitter: wrappedEmitter
339
413
  });
340
414
  return {
341
415
  ...baseResult,