@adhisang/minecraft-modding-mcp 4.0.0 → 4.1.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 (174) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +36 -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 +97 -0
  47. package/dist/entry-tools/validate-project/cases/project-summary.js +346 -0
  48. package/dist/entry-tools/validate-project/internal.d.ts +135 -0
  49. package/dist/entry-tools/validate-project/internal.js +287 -0
  50. package/dist/entry-tools/validate-project-service.d.ts +63 -47
  51. package/dist/entry-tools/validate-project-service.js +12 -562
  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 +142 -1352
  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 +3 -144
  84. package/dist/mapping-service.js +19 -1201
  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 +110 -0
  100. package/dist/source/artifact-resolver.js +1174 -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 +505 -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 +21 -0
  134. package/dist/source/state.js +19 -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-service.d.ts +147 -170
  152. package/dist/source-service.js +67 -6116
  153. package/dist/stage-emitter.d.ts +13 -0
  154. package/dist/stage-emitter.js +30 -0
  155. package/dist/stdio-supervisor.d.ts +61 -0
  156. package/dist/stdio-supervisor.js +326 -9
  157. package/dist/tool-contract-manifest.d.ts +1 -1
  158. package/dist/tool-contract-manifest.js +23 -6
  159. package/dist/tool-guidance.d.ts +82 -0
  160. package/dist/tool-guidance.js +734 -0
  161. package/dist/tool-schema-registry.d.ts +16 -0
  162. package/dist/tool-schema-registry.js +37 -0
  163. package/dist/tool-schemas.d.ts +3518 -0
  164. package/dist/tool-schemas.js +813 -0
  165. package/dist/types.d.ts +36 -0
  166. package/dist/version-service.js +7 -6
  167. package/dist/workspace-context-cache.d.ts +32 -0
  168. package/dist/workspace-context-cache.js +66 -0
  169. package/dist/workspace-mapping-service.d.ts +16 -0
  170. package/dist/workspace-mapping-service.js +173 -1
  171. package/docs/README-ja.md +414 -0
  172. package/docs/examples.md +483 -0
  173. package/docs/tool-reference.md +459 -0
  174. package/package.json +3 -2
@@ -0,0 +1,100 @@
1
+ import { buildEntryToolResult, createNextAction, createSummarySubject } from "../../response-contract.js";
2
+ import { capArray, nextActionsOrUndefined } from "../../request-normalizers.js";
3
+ import { hasPartialVanillaCoverage, resolveArtifactReference } from "../internal.js";
4
+ export async function handleListFiles(deps, subject, detail, include, limit, cursor) {
5
+ const artifact = await resolveArtifactReference(deps, subject, "list-files");
6
+ const files = await deps.listArtifactFiles({
7
+ artifactId: artifact.artifactId,
8
+ limit,
9
+ cursor
10
+ });
11
+ const sampled = capArray(files.items, 10);
12
+ const partialCoverage = subject.kind === "workspace" && hasPartialVanillaCoverage(artifact.artifact);
13
+ const nextActions = [
14
+ ...(files.items.length > 0
15
+ ? [
16
+ createNextAction("inspect-minecraft", {
17
+ task: "file",
18
+ subject: {
19
+ kind: "file",
20
+ filePath: files.items[0],
21
+ artifact: {
22
+ type: "resolved-id",
23
+ artifactId: artifact.artifactId
24
+ }
25
+ }
26
+ })
27
+ ]
28
+ : []),
29
+ ...(partialCoverage
30
+ ? [
31
+ createNextAction("inspect-minecraft", {
32
+ task: "class-source",
33
+ subject: {
34
+ kind: "workspace",
35
+ projectPath: subject.projectPath,
36
+ mapping: subject.mapping,
37
+ scope: subject.scope,
38
+ preferProjectVersion: subject.preferProjectVersion,
39
+ strictVersion: subject.strictVersion,
40
+ focus: {
41
+ kind: "class",
42
+ className: "net.minecraft.world.item.Item"
43
+ }
44
+ }
45
+ })
46
+ ]
47
+ : [])
48
+ ];
49
+ const summary = {
50
+ status: partialCoverage ? "partial" : "ok",
51
+ headline: `Listed ${files.items.length} files for ${artifact.artifactId}.`,
52
+ subject: createSummarySubject({
53
+ task: "list-files",
54
+ requested: subject,
55
+ artifactId: artifact.artifactId
56
+ }),
57
+ counts: {
58
+ files: files.items.length
59
+ },
60
+ nextActions: nextActionsOrUndefined(nextActions),
61
+ ...(partialCoverage
62
+ ? {
63
+ notes: [
64
+ "This listing is partial because the resolved source artifact does not contain net.minecraft entries."
65
+ ]
66
+ }
67
+ : {})
68
+ };
69
+ return {
70
+ ...buildEntryToolResult({
71
+ task: "list-files",
72
+ summary,
73
+ detail,
74
+ include,
75
+ blocks: {
76
+ subject: {
77
+ requested: subject,
78
+ resolved: {
79
+ artifactId: artifact.artifactId
80
+ }
81
+ },
82
+ files: {
83
+ items: detail === "summary" ? sampled.items : files.items,
84
+ nextCursor: files.nextCursor,
85
+ ...(partialCoverage
86
+ ? {
87
+ coverage: {
88
+ sourceCoverage: "partial",
89
+ missingNamespaces: ["net.minecraft"]
90
+ }
91
+ }
92
+ : {})
93
+ }
94
+ },
95
+ alwaysBlocks: ["subject"]
96
+ }),
97
+ warnings: [...artifact.warnings, ...files.warnings]
98
+ };
99
+ }
100
+ //# sourceMappingURL=list-files.js.map
@@ -0,0 +1,5 @@
1
+ import { type DetailLevel } from "../../response-contract.js";
2
+ import { type Subject, type InspectMinecraftDeps } from "../internal.js";
3
+ export declare function handleSearch(deps: InspectMinecraftDeps, subject: Subject, detail: DetailLevel, include: string[], limit: number | undefined, cursor: string | undefined): Promise<{
4
+ warnings: string[];
5
+ }>;
@@ -0,0 +1,155 @@
1
+ import { buildEntryToolResult, createNextAction, createSummarySubject } from "../../response-contract.js";
2
+ import { capArray, nextActionsOrUndefined } from "../../request-normalizers.js";
3
+ import { classNameToFilePath, hasPartialVanillaCoverage, hitTargetsVanillaNamespace, looksLikeClassQuery, requireWorkspaceSearchFocus, resolveWorkspaceArtifactReference, summarizeRequestedSubject, invalidTaskSubjectError, resolveBinaryBackedClass, resolveArtifactReference } from "../internal.js";
4
+ export async function handleSearch(deps, subject, detail, include, limit, cursor) {
5
+ if (subject.kind !== "search" && !(subject.kind === "workspace" && subject.focus?.kind === "search")) {
6
+ invalidTaskSubjectError("search", subject);
7
+ }
8
+ const searchSubject = subject.kind === "search" ? subject : requireWorkspaceSearchFocus(subject);
9
+ const requestedSubject = summarizeRequestedSubject(subject);
10
+ const queryMode = searchSubject.queryMode ?? "auto";
11
+ const artifact = subject.kind === "search"
12
+ ? await resolveArtifactReference(deps, subject, "search")
13
+ : await resolveWorkspaceArtifactReference(deps, subject, searchSubject.artifact);
14
+ const search = await deps.searchClassSource({
15
+ artifactId: artifact.artifactId,
16
+ query: searchSubject.query,
17
+ intent: searchSubject.intent,
18
+ match: searchSubject.match,
19
+ queryMode,
20
+ limit,
21
+ cursor,
22
+ scope: searchSubject.packagePrefix || searchSubject.fileGlob || searchSubject.symbolKind
23
+ ? {
24
+ packagePrefix: searchSubject.packagePrefix,
25
+ fileGlob: searchSubject.fileGlob,
26
+ symbolKind: searchSubject.symbolKind
27
+ }
28
+ : undefined
29
+ });
30
+ const needsBinaryBackedClassHit = subject.kind === "workspace" &&
31
+ hasPartialVanillaCoverage(artifact.artifact) &&
32
+ looksLikeClassQuery(searchSubject.query) &&
33
+ !search.hits.some((hit) => hitTargetsVanillaNamespace(hit));
34
+ const binaryBackedClassHit = needsBinaryBackedClassHit
35
+ ? await resolveBinaryBackedClass(deps, searchSubject.query, {
36
+ version: artifact.version,
37
+ mapping: subject.mapping
38
+ })
39
+ : undefined;
40
+ const binaryBackedHitRecord = binaryBackedClassHit == null
41
+ ? undefined
42
+ : {
43
+ filePath: classNameToFilePath(binaryBackedClassHit.className),
44
+ score: 100,
45
+ matchedIn: "symbol",
46
+ reasonCodes: ["binary-class-lookup"],
47
+ symbol: {
48
+ symbolKind: "class",
49
+ symbolName: binaryBackedClassHit.className.split(".").at(-1) ?? binaryBackedClassHit.className,
50
+ qualifiedName: binaryBackedClassHit.className,
51
+ line: 1
52
+ }
53
+ };
54
+ const effectiveHits = binaryBackedHitRecord == null
55
+ ? search.hits
56
+ : [
57
+ binaryBackedHitRecord,
58
+ ...search.hits.filter((hit) => hit.filePath !== binaryBackedHitRecord.filePath)
59
+ ];
60
+ const sampledHits = capArray(effectiveHits, 5);
61
+ const isAutoSeparatorMiss = effectiveHits.length === 0 &&
62
+ queryMode === "auto" &&
63
+ /[._$]/.test(searchSubject.query);
64
+ const literalRetrySubject = subject.kind === "search"
65
+ ? {
66
+ ...subject,
67
+ queryMode: "literal"
68
+ }
69
+ : {
70
+ ...subject,
71
+ focus: {
72
+ ...searchSubject,
73
+ kind: "search",
74
+ queryMode: "literal"
75
+ }
76
+ };
77
+ const summary = {
78
+ status: effectiveHits.length > 0 ? "ok" : "not_found",
79
+ headline: effectiveHits.length > 0
80
+ ? `Found ${effectiveHits.length} source hits for ${searchSubject.query}.`
81
+ : `No source hits were found for ${searchSubject.query}.`,
82
+ subject: createSummarySubject({
83
+ task: "search",
84
+ requested: requestedSubject,
85
+ query: searchSubject.query,
86
+ artifactId: artifact.artifactId
87
+ }),
88
+ counts: {
89
+ hits: effectiveHits.length
90
+ },
91
+ nextActions: nextActionsOrUndefined([
92
+ ...(effectiveHits.length > 0
93
+ ? [
94
+ createNextAction("inspect-minecraft", {
95
+ task: "file",
96
+ subject: {
97
+ kind: "file",
98
+ filePath: effectiveHits[0].filePath,
99
+ artifact: {
100
+ type: "resolved-id",
101
+ artifactId: artifact.artifactId
102
+ }
103
+ },
104
+ include: ["source"]
105
+ })
106
+ ]
107
+ : []),
108
+ ...(isAutoSeparatorMiss
109
+ ? [
110
+ createNextAction("inspect-minecraft", {
111
+ task: "search",
112
+ subject: literalRetrySubject
113
+ })
114
+ ]
115
+ : [])
116
+ ]),
117
+ ...(isAutoSeparatorMiss
118
+ ? {
119
+ notes: [
120
+ "Separator query returned no indexed hits. Retry with queryMode=\"literal\" for an explicit full substring scan."
121
+ ]
122
+ }
123
+ : binaryBackedClassHit
124
+ ? {
125
+ notes: [
126
+ "Source coverage was partial, so inspect-minecraft returned a binary-backed class match for the vanilla symbol."
127
+ ]
128
+ }
129
+ : {})
130
+ };
131
+ return {
132
+ ...buildEntryToolResult({
133
+ task: "search",
134
+ summary,
135
+ detail,
136
+ include,
137
+ blocks: {
138
+ subject: {
139
+ requested: requestedSubject,
140
+ resolved: {
141
+ artifactId: artifact.artifactId
142
+ }
143
+ },
144
+ search: {
145
+ query: searchSubject.query,
146
+ hits: detail === "summary" ? sampledHits.items : effectiveHits,
147
+ nextCursor: search.nextCursor
148
+ }
149
+ },
150
+ alwaysBlocks: ["subject"]
151
+ }),
152
+ warnings: [...artifact.warnings, ...(binaryBackedClassHit?.warnings ?? [])]
153
+ };
154
+ }
155
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1,6 @@
1
+ import { type DetailLevel } from "../../response-contract.js";
2
+ import { type InspectMinecraftDeps } from "../internal.js";
3
+ import { type InspectMinecraftInput } from "../../inspect-minecraft-service.js";
4
+ export declare function handleVersions(deps: InspectMinecraftDeps, input: InspectMinecraftInput, detail: DetailLevel, include: string[]): Promise<{
5
+ warnings: never[];
6
+ }>;
@@ -0,0 +1,49 @@
1
+ import { buildEntryToolResult, createNextAction, createSummarySubject } from "../../response-contract.js";
2
+ import { nextActionsOrUndefined } from "../../request-normalizers.js";
3
+ export async function handleVersions(deps, input, detail, include) {
4
+ const versions = await deps.listVersions({
5
+ includeSnapshots: input.includeSnapshots,
6
+ limit: input.limit
7
+ });
8
+ const summary = {
9
+ status: "ok",
10
+ headline: `Found ${versions.totalAvailable} Minecraft versions.`,
11
+ subject: createSummarySubject({
12
+ task: "versions",
13
+ kind: "versions",
14
+ includeSnapshots: input.includeSnapshots === false ? undefined : input.includeSnapshots,
15
+ limit: input.limit
16
+ }),
17
+ counts: {
18
+ releases: versions.releases.length,
19
+ snapshots: versions.snapshots?.length ?? 0
20
+ },
21
+ nextActions: nextActionsOrUndefined([
22
+ createNextAction("inspect-minecraft", {
23
+ task: "artifact",
24
+ subject: {
25
+ kind: "version",
26
+ version: versions.latest.release ?? versions.releases[0]?.id
27
+ }
28
+ })
29
+ ])
30
+ };
31
+ return {
32
+ ...buildEntryToolResult({
33
+ task: "versions",
34
+ summary,
35
+ detail,
36
+ include,
37
+ blocks: {
38
+ versions: {
39
+ latest: versions.latest,
40
+ releases: detail === "summary" ? versions.releases.slice(0, 5) : versions.releases,
41
+ snapshots: input.includeSnapshots ? versions.snapshots : undefined,
42
+ cached: versions.cached
43
+ }
44
+ }
45
+ }),
46
+ warnings: []
47
+ };
48
+ }
49
+ //# sourceMappingURL=versions.js.map