@mythxengine/mcp-server 0.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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/assemble.test.d.ts +2 -0
  3. package/dist/__tests__/assemble.test.d.ts.map +1 -0
  4. package/dist/__tests__/assemble.test.js +81 -0
  5. package/dist/__tests__/assemble.test.js.map +1 -0
  6. package/dist/index.d.ts +10 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +38 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +9 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +202 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/server.d.ts +41 -0
  15. package/dist/server.d.ts.map +1 -0
  16. package/dist/server.js +91 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/state/manager.d.ts +88 -0
  19. package/dist/state/manager.d.ts.map +1 -0
  20. package/dist/state/manager.js +308 -0
  21. package/dist/state/manager.js.map +1 -0
  22. package/dist/state/rules.d.ts +30 -0
  23. package/dist/state/rules.d.ts.map +1 -0
  24. package/dist/state/rules.js +61 -0
  25. package/dist/state/rules.js.map +1 -0
  26. package/dist/state/worldpacks.d.ts +43 -0
  27. package/dist/state/worldpacks.d.ts.map +1 -0
  28. package/dist/state/worldpacks.js +125 -0
  29. package/dist/state/worldpacks.js.map +1 -0
  30. package/dist/tools/augmentation/augment.d.ts +15 -0
  31. package/dist/tools/augmentation/augment.d.ts.map +1 -0
  32. package/dist/tools/augmentation/augment.js +512 -0
  33. package/dist/tools/augmentation/augment.js.map +1 -0
  34. package/dist/tools/augmentation/index.d.ts +6 -0
  35. package/dist/tools/augmentation/index.d.ts.map +1 -0
  36. package/dist/tools/augmentation/index.js +7 -0
  37. package/dist/tools/augmentation/index.js.map +1 -0
  38. package/dist/tools/characters.d.ts +26 -0
  39. package/dist/tools/characters.d.ts.map +1 -0
  40. package/dist/tools/characters.js +362 -0
  41. package/dist/tools/characters.js.map +1 -0
  42. package/dist/tools/clocks.d.ts +33 -0
  43. package/dist/tools/clocks.d.ts.map +1 -0
  44. package/dist/tools/clocks.js +438 -0
  45. package/dist/tools/clocks.js.map +1 -0
  46. package/dist/tools/combat.d.ts +38 -0
  47. package/dist/tools/combat.d.ts.map +1 -0
  48. package/dist/tools/combat.js +574 -0
  49. package/dist/tools/combat.js.map +1 -0
  50. package/dist/tools/dice.d.ts +9 -0
  51. package/dist/tools/dice.d.ts.map +1 -0
  52. package/dist/tools/dice.js +287 -0
  53. package/dist/tools/dice.js.map +1 -0
  54. package/dist/tools/encounters.d.ts +21 -0
  55. package/dist/tools/encounters.d.ts.map +1 -0
  56. package/dist/tools/encounters.js +521 -0
  57. package/dist/tools/encounters.js.map +1 -0
  58. package/dist/tools/engagement.d.ts +25 -0
  59. package/dist/tools/engagement.d.ts.map +1 -0
  60. package/dist/tools/engagement.js +491 -0
  61. package/dist/tools/engagement.js.map +1 -0
  62. package/dist/tools/expansion/archetype.d.ts +12 -0
  63. package/dist/tools/expansion/archetype.d.ts.map +1 -0
  64. package/dist/tools/expansion/archetype.js +157 -0
  65. package/dist/tools/expansion/archetype.js.map +1 -0
  66. package/dist/tools/expansion/index.d.ts +12 -0
  67. package/dist/tools/expansion/index.d.ts.map +1 -0
  68. package/dist/tools/expansion/index.js +21 -0
  69. package/dist/tools/expansion/index.js.map +1 -0
  70. package/dist/tools/expansion/location.d.ts +12 -0
  71. package/dist/tools/expansion/location.d.ts.map +1 -0
  72. package/dist/tools/expansion/location.js +149 -0
  73. package/dist/tools/expansion/location.js.map +1 -0
  74. package/dist/tools/expansion/monster.d.ts +12 -0
  75. package/dist/tools/expansion/monster.d.ts.map +1 -0
  76. package/dist/tools/expansion/monster.js +157 -0
  77. package/dist/tools/expansion/monster.js.map +1 -0
  78. package/dist/tools/expansion/npc.d.ts +12 -0
  79. package/dist/tools/expansion/npc.d.ts.map +1 -0
  80. package/dist/tools/expansion/npc.js +153 -0
  81. package/dist/tools/expansion/npc.js.map +1 -0
  82. package/dist/tools/generation/archetypes.d.ts +12 -0
  83. package/dist/tools/generation/archetypes.d.ts.map +1 -0
  84. package/dist/tools/generation/archetypes.js +129 -0
  85. package/dist/tools/generation/archetypes.js.map +1 -0
  86. package/dist/tools/generation/arcs.d.ts +13 -0
  87. package/dist/tools/generation/arcs.d.ts.map +1 -0
  88. package/dist/tools/generation/arcs.js +186 -0
  89. package/dist/tools/generation/arcs.js.map +1 -0
  90. package/dist/tools/generation/encounters.d.ts +12 -0
  91. package/dist/tools/generation/encounters.d.ts.map +1 -0
  92. package/dist/tools/generation/encounters.js +169 -0
  93. package/dist/tools/generation/encounters.js.map +1 -0
  94. package/dist/tools/generation/index.d.ts +19 -0
  95. package/dist/tools/generation/index.d.ts.map +1 -0
  96. package/dist/tools/generation/index.js +42 -0
  97. package/dist/tools/generation/index.js.map +1 -0
  98. package/dist/tools/generation/items.d.ts +12 -0
  99. package/dist/tools/generation/items.d.ts.map +1 -0
  100. package/dist/tools/generation/items.js +149 -0
  101. package/dist/tools/generation/items.js.map +1 -0
  102. package/dist/tools/generation/locations.d.ts +12 -0
  103. package/dist/tools/generation/locations.d.ts.map +1 -0
  104. package/dist/tools/generation/locations.js +131 -0
  105. package/dist/tools/generation/locations.js.map +1 -0
  106. package/dist/tools/generation/monsters.d.ts +12 -0
  107. package/dist/tools/generation/monsters.d.ts.map +1 -0
  108. package/dist/tools/generation/monsters.js +154 -0
  109. package/dist/tools/generation/monsters.js.map +1 -0
  110. package/dist/tools/generation/narrative.d.ts +12 -0
  111. package/dist/tools/generation/narrative.d.ts.map +1 -0
  112. package/dist/tools/generation/narrative.js +129 -0
  113. package/dist/tools/generation/narrative.js.map +1 -0
  114. package/dist/tools/generation/npcs.d.ts +12 -0
  115. package/dist/tools/generation/npcs.d.ts.map +1 -0
  116. package/dist/tools/generation/npcs.js +136 -0
  117. package/dist/tools/generation/npcs.js.map +1 -0
  118. package/dist/tools/generation/resume.d.ts +12 -0
  119. package/dist/tools/generation/resume.d.ts.map +1 -0
  120. package/dist/tools/generation/resume.js +288 -0
  121. package/dist/tools/generation/resume.js.map +1 -0
  122. package/dist/tools/generation/rules-prompt.d.ts +23 -0
  123. package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
  124. package/dist/tools/generation/rules-prompt.js +209 -0
  125. package/dist/tools/generation/rules-prompt.js.map +1 -0
  126. package/dist/tools/generation/seed.d.ts +12 -0
  127. package/dist/tools/generation/seed.d.ts.map +1 -0
  128. package/dist/tools/generation/seed.js +171 -0
  129. package/dist/tools/generation/seed.js.map +1 -0
  130. package/dist/tools/generation/situations.d.ts +13 -0
  131. package/dist/tools/generation/situations.d.ts.map +1 -0
  132. package/dist/tools/generation/situations.js +247 -0
  133. package/dist/tools/generation/situations.js.map +1 -0
  134. package/dist/tools/gm-guidance.d.ts +13 -0
  135. package/dist/tools/gm-guidance.d.ts.map +1 -0
  136. package/dist/tools/gm-guidance.js +395 -0
  137. package/dist/tools/gm-guidance.js.map +1 -0
  138. package/dist/tools/index.d.ts +33 -0
  139. package/dist/tools/index.d.ts.map +1 -0
  140. package/dist/tools/index.js +80 -0
  141. package/dist/tools/index.js.map +1 -0
  142. package/dist/tools/investigation.d.ts +41 -0
  143. package/dist/tools/investigation.d.ts.map +1 -0
  144. package/dist/tools/investigation.js +586 -0
  145. package/dist/tools/investigation.js.map +1 -0
  146. package/dist/tools/leads.d.ts +29 -0
  147. package/dist/tools/leads.d.ts.map +1 -0
  148. package/dist/tools/leads.js +460 -0
  149. package/dist/tools/leads.js.map +1 -0
  150. package/dist/tools/players.d.ts +30 -0
  151. package/dist/tools/players.d.ts.map +1 -0
  152. package/dist/tools/players.js +448 -0
  153. package/dist/tools/players.js.map +1 -0
  154. package/dist/tools/portable-clues.d.ts +29 -0
  155. package/dist/tools/portable-clues.d.ts.map +1 -0
  156. package/dist/tools/portable-clues.js +490 -0
  157. package/dist/tools/portable-clues.js.map +1 -0
  158. package/dist/tools/relationships.d.ts +29 -0
  159. package/dist/tools/relationships.d.ts.map +1 -0
  160. package/dist/tools/relationships.js +471 -0
  161. package/dist/tools/relationships.js.map +1 -0
  162. package/dist/tools/scene-framing.d.ts +21 -0
  163. package/dist/tools/scene-framing.d.ts.map +1 -0
  164. package/dist/tools/scene-framing.js +380 -0
  165. package/dist/tools/scene-framing.js.map +1 -0
  166. package/dist/tools/sessions.d.ts +30 -0
  167. package/dist/tools/sessions.d.ts.map +1 -0
  168. package/dist/tools/sessions.js +253 -0
  169. package/dist/tools/sessions.js.map +1 -0
  170. package/dist/tools/time.d.ts +26 -0
  171. package/dist/tools/time.d.ts.map +1 -0
  172. package/dist/tools/time.js +438 -0
  173. package/dist/tools/time.js.map +1 -0
  174. package/dist/tools/turns.d.ts +38 -0
  175. package/dist/tools/turns.d.ts.map +1 -0
  176. package/dist/tools/turns.js +560 -0
  177. package/dist/tools/turns.js.map +1 -0
  178. package/dist/tools/worldpack/assemble.d.ts +20 -0
  179. package/dist/tools/worldpack/assemble.d.ts.map +1 -0
  180. package/dist/tools/worldpack/assemble.js +237 -0
  181. package/dist/tools/worldpack/assemble.js.map +1 -0
  182. package/dist/tools/worldpack/docs-generator.d.ts +18 -0
  183. package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
  184. package/dist/tools/worldpack/docs-generator.js +264 -0
  185. package/dist/tools/worldpack/docs-generator.js.map +1 -0
  186. package/dist/tools/worldpack/export.d.ts +12 -0
  187. package/dist/tools/worldpack/export.d.ts.map +1 -0
  188. package/dist/tools/worldpack/export.js +209 -0
  189. package/dist/tools/worldpack/export.js.map +1 -0
  190. package/dist/tools/worldpack/index.d.ts +15 -0
  191. package/dist/tools/worldpack/index.d.ts.map +1 -0
  192. package/dist/tools/worldpack/index.js +30 -0
  193. package/dist/tools/worldpack/index.js.map +1 -0
  194. package/dist/tools/worldpack/lookup.d.ts +19 -0
  195. package/dist/tools/worldpack/lookup.d.ts.map +1 -0
  196. package/dist/tools/worldpack/lookup.js +320 -0
  197. package/dist/tools/worldpack/lookup.js.map +1 -0
  198. package/dist/tools/worldpack/manage.d.ts +20 -0
  199. package/dist/tools/worldpack/manage.d.ts.map +1 -0
  200. package/dist/tools/worldpack/manage.js +101 -0
  201. package/dist/tools/worldpack/manage.js.map +1 -0
  202. package/dist/tools/worldpack/save-result.d.ts +12 -0
  203. package/dist/tools/worldpack/save-result.d.ts.map +1 -0
  204. package/dist/tools/worldpack/save-result.js +222 -0
  205. package/dist/tools/worldpack/save-result.js.map +1 -0
  206. package/dist/tools/worldpack/summary.d.ts +13 -0
  207. package/dist/tools/worldpack/summary.d.ts.map +1 -0
  208. package/dist/tools/worldpack/summary.js +180 -0
  209. package/dist/tools/worldpack/summary.js.map +1 -0
  210. package/dist/tools/worldpack/validate.d.ts +12 -0
  211. package/dist/tools/worldpack/validate.d.ts.map +1 -0
  212. package/dist/tools/worldpack/validate.js +388 -0
  213. package/dist/tools/worldpack/validate.js.map +1 -0
  214. package/package.json +59 -0
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Resume Generation Tool
3
+ *
4
+ * Resumes an interrupted world generation session from file-based state.
5
+ */
6
+ import { z } from "zod";
7
+ import { createEmptyGenerationSession } from "@mythxengine/types";
8
+ import { sessionManager, readManifest, readStepFile, listStepFiles, listExpansionFiles, getGenerationDir, } from "../../state/manager.js";
9
+ // Basic validation schema for generated content items (must have id)
10
+ const ContentItemSchema = z.object({ id: z.string().min(1) }).passthrough();
11
+ // Validation helpers
12
+ function isValidContentArray(data) {
13
+ if (!Array.isArray(data))
14
+ return false;
15
+ // Validate that all items have id field
16
+ for (const item of data) {
17
+ const result = ContentItemSchema.safeParse(item);
18
+ if (!result.success)
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ function isValidWorldSeed(data) {
24
+ // World seed should be an object with meta field at minimum
25
+ if (typeof data !== "object" || data === null)
26
+ return false;
27
+ return "meta" in data;
28
+ }
29
+ const ResumeGenerationInput = z.object({
30
+ sessionId: z.string(),
31
+ reconstruct: z.boolean().optional().default(false).describe("If true, reconstruct session.generation from step files"),
32
+ });
33
+ /**
34
+ * Analyze step files vs manifest to find discrepancies
35
+ */
36
+ async function analyzeGenerationState(sessionId, manifest) {
37
+ const steps = [];
38
+ const completedSteps = [];
39
+ const incompleteSteps = [];
40
+ const failedSteps = [];
41
+ const missingFiles = [];
42
+ if (!manifest) {
43
+ return { steps, completedSteps, incompleteSteps, failedSteps, missingFiles };
44
+ }
45
+ // Check each step in manifest
46
+ for (const step of manifest.steps) {
47
+ const stepStatus = {
48
+ type: step.type,
49
+ status: step.status,
50
+ file: step.file,
51
+ error: step.error,
52
+ generatedIds: step.generatedIds,
53
+ };
54
+ if (step.status === "completed") {
55
+ // Verify file exists
56
+ if (step.file) {
57
+ const data = await readStepFile(sessionId, step.file);
58
+ if (data) {
59
+ completedSteps.push(step.type);
60
+ }
61
+ else {
62
+ stepStatus.status = "missing";
63
+ missingFiles.push(step.file);
64
+ }
65
+ }
66
+ else {
67
+ completedSteps.push(step.type);
68
+ }
69
+ }
70
+ else if (step.status === "in_progress") {
71
+ incompleteSteps.push(step.type);
72
+ }
73
+ else if (step.status === "failed") {
74
+ failedSteps.push(step.type);
75
+ }
76
+ steps.push(stepStatus);
77
+ }
78
+ // Check for orphan files not in manifest
79
+ const stepFiles = await listStepFiles(sessionId);
80
+ const expansionFiles = await listExpansionFiles(sessionId);
81
+ const allFiles = [...stepFiles, ...expansionFiles.map((f) => `expansions/${f}`)];
82
+ for (const file of allFiles) {
83
+ const inManifest = manifest.steps.some((s) => s.file === file);
84
+ if (!inManifest) {
85
+ // Orphan file - has data but not tracked in manifest
86
+ const type = file.replace(".json", "").replace("expansions/", "");
87
+ steps.push({
88
+ type: `orphan:${type}`,
89
+ status: "completed",
90
+ file,
91
+ });
92
+ }
93
+ }
94
+ return { steps, completedSteps, incompleteSteps, failedSteps, missingFiles };
95
+ }
96
+ /**
97
+ * Reconstruct session.generation from step files
98
+ */
99
+ async function reconstructSessionGeneration(sessionId, manifest) {
100
+ const session = await sessionManager.get(sessionId);
101
+ if (!session) {
102
+ throw new Error(`Session not found: ${sessionId}`);
103
+ }
104
+ // Initialize generation if needed
105
+ if (!session.generation) {
106
+ session.generation = createEmptyGenerationSession();
107
+ }
108
+ // Load world seed with validation
109
+ const seedData = await readStepFile(sessionId, "seed.json");
110
+ if (seedData && isValidWorldSeed(seedData)) {
111
+ session.generation.worldSeed = seedData;
112
+ }
113
+ // Load base content types
114
+ const contentTypes = [
115
+ { file: "archetypes.json", key: "archetypes" },
116
+ { file: "monsters.json", key: "monsters" },
117
+ { file: "items.json", key: "items" },
118
+ { file: "encounters.json", key: "encounters" },
119
+ { file: "locations.json", key: "locations" },
120
+ { file: "npcs.json", key: "npcs" },
121
+ { file: "narrative.json", key: "narrative" },
122
+ { file: "situations.json", key: "situations" },
123
+ { file: "arcs.json", key: "arcs" },
124
+ ];
125
+ for (const { file, key } of contentTypes) {
126
+ const data = await readStepFile(sessionId, file);
127
+ if (data) {
128
+ if (key === "narrative") {
129
+ // Narrative is a plain object, not an array
130
+ if (typeof data === "object" && data !== null) {
131
+ session.generation.generatedContent.narrative = data;
132
+ }
133
+ }
134
+ else {
135
+ // Handle wrapped arrays (e.g., { archetypes: [...] }) or direct arrays
136
+ const dataObj = data;
137
+ const unwrapped = dataObj[key] ?? data;
138
+ // Validate array items have id field before assignment
139
+ if (isValidContentArray(unwrapped)) {
140
+ session.generation.generatedContent[key] = unwrapped;
141
+ }
142
+ }
143
+ }
144
+ }
145
+ // Load expansion files with validation
146
+ const expansionFiles = await listExpansionFiles(sessionId);
147
+ for (const file of expansionFiles) {
148
+ const data = await readStepFile(sessionId, `expansions/${file}`);
149
+ if (!data)
150
+ continue;
151
+ // Validate expansion data has id field
152
+ const validationResult = ContentItemSchema.safeParse(data);
153
+ if (!validationResult.success)
154
+ continue;
155
+ if (file.startsWith("location-")) {
156
+ session.generation.expansions.locations.push(data);
157
+ }
158
+ else if (file.startsWith("archetype-")) {
159
+ session.generation.expansions.archetypes.push(data);
160
+ }
161
+ else if (file.startsWith("npc-")) {
162
+ session.generation.expansions.npcs.push(data);
163
+ }
164
+ else if (file.startsWith("monster-")) {
165
+ session.generation.expansions.monsters.push(data);
166
+ }
167
+ }
168
+ // Reconstruct history from manifest steps
169
+ session.generation.history = manifest.steps.map((step, index) => ({
170
+ id: `reconstructed-${index}`,
171
+ type: step.type,
172
+ startedAt: manifest.createdAt,
173
+ completedAt: step.completedAt || null,
174
+ status: step.status,
175
+ error: step.error,
176
+ generatedIds: step.generatedIds || [],
177
+ }));
178
+ // Update status
179
+ session.generation.status = manifest.status;
180
+ // Save reconstructed session
181
+ await sessionManager.save(session);
182
+ }
183
+ /**
184
+ * resume_generation tool
185
+ */
186
+ export const resumeGenerationTool = {
187
+ name: "resume_generation",
188
+ description: "Resume an interrupted world generation session. Reads manifest and step files to report status and optionally reconstruct session state.",
189
+ inputSchema: {
190
+ type: "object",
191
+ properties: {
192
+ sessionId: { type: "string", description: "Session ID" },
193
+ reconstruct: {
194
+ type: "boolean",
195
+ description: "If true, reconstruct session.generation from step files",
196
+ },
197
+ },
198
+ required: ["sessionId"],
199
+ },
200
+ handler: async (args) => {
201
+ const input = ResumeGenerationInput.parse(args);
202
+ // Check if session exists
203
+ const session = await sessionManager.get(input.sessionId);
204
+ if (!session) {
205
+ throw new Error(`Session not found: ${input.sessionId}`);
206
+ }
207
+ // Read manifest
208
+ const manifest = await readManifest(input.sessionId);
209
+ const generationDir = getGenerationDir(input.sessionId);
210
+ // If no manifest, check if generation dir exists
211
+ if (!manifest) {
212
+ const stepFiles = await listStepFiles(input.sessionId);
213
+ if (stepFiles.length === 0) {
214
+ return {
215
+ sessionId: input.sessionId,
216
+ generationDir,
217
+ manifestStatus: "no_manifest",
218
+ steps: [],
219
+ completedSteps: [],
220
+ incompleteSteps: [],
221
+ failedSteps: [],
222
+ missingFiles: [],
223
+ reconstructed: false,
224
+ message: "No generation manifest found. Start a new world generation with generate_world_seed.",
225
+ };
226
+ }
227
+ // Has orphan files but no manifest
228
+ return {
229
+ sessionId: input.sessionId,
230
+ generationDir,
231
+ manifestStatus: "no_manifest",
232
+ steps: stepFiles.map((f) => ({
233
+ type: `orphan:${f.replace(".json", "")}`,
234
+ status: "completed",
235
+ file: f,
236
+ })),
237
+ completedSteps: [],
238
+ incompleteSteps: [],
239
+ failedSteps: [],
240
+ missingFiles: [],
241
+ reconstructed: false,
242
+ message: `Found ${stepFiles.length} orphan step files but no manifest. Manual recovery may be needed.`,
243
+ };
244
+ }
245
+ // Analyze current state
246
+ const analysis = await analyzeGenerationState(input.sessionId, manifest);
247
+ // Optionally reconstruct session state
248
+ let reconstructed = false;
249
+ if (input.reconstruct && analysis.completedSteps.length > 0) {
250
+ await reconstructSessionGeneration(input.sessionId, manifest);
251
+ reconstructed = true;
252
+ }
253
+ // Build result message
254
+ let message = "";
255
+ if (analysis.completedSteps.length === 0) {
256
+ message = "Generation not started or no steps completed.";
257
+ }
258
+ else if (analysis.incompleteSteps.length > 0) {
259
+ message = `Generation interrupted. ${analysis.completedSteps.length} steps completed, ${analysis.incompleteSteps.length} in progress: ${analysis.incompleteSteps.join(", ")}. Re-run the interrupted generation tool.`;
260
+ }
261
+ else if (analysis.failedSteps.length > 0) {
262
+ message = `Generation has ${analysis.failedSteps.length} failed steps: ${analysis.failedSteps.join(", ")}. Re-run the failed generation tool.`;
263
+ }
264
+ else if (analysis.missingFiles.length > 0) {
265
+ message = `Warning: ${analysis.missingFiles.length} step files missing. May need to re-run those steps.`;
266
+ }
267
+ else {
268
+ message = `Generation complete with ${analysis.completedSteps.length} steps. Ready for assemble_world_pack.`;
269
+ }
270
+ if (reconstructed) {
271
+ message += " Session state reconstructed from step files.";
272
+ }
273
+ return {
274
+ sessionId: input.sessionId,
275
+ generationDir,
276
+ manifestStatus: manifest.status,
277
+ steps: analysis.steps,
278
+ completedSteps: analysis.completedSteps,
279
+ incompleteSteps: analysis.incompleteSteps,
280
+ failedSteps: analysis.failedSteps,
281
+ missingFiles: analysis.missingFiles,
282
+ reconstructed,
283
+ message,
284
+ };
285
+ },
286
+ };
287
+ export const resumeTools = [resumeGenerationTool];
288
+ //# sourceMappingURL=resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/tools/generation/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Rules Prompt Builder
3
+ *
4
+ * Generates rules description text for LLM prompts based on world pack rules config.
5
+ * Used by all generation tools to communicate effective rules to the LLM.
6
+ */
7
+ import type { WorldRulesConfig } from "@mythxengine/types";
8
+ /**
9
+ * Build the rules section for generation prompts.
10
+ *
11
+ * If no custom rules are provided, returns default rules description.
12
+ * If custom rules are provided, merges with defaults and describes the effective rules.
13
+ */
14
+ export declare function buildRulesPromptSection(rules?: WorldRulesConfig): string;
15
+ /**
16
+ * Build HP guidelines based on rules
17
+ */
18
+ export declare function buildHPGuidelines(_rules?: WorldRulesConfig): string;
19
+ /**
20
+ * Build monster HP guidelines by threat tier
21
+ */
22
+ export declare function buildMonsterHPGuidelines(_rules?: WorldRulesConfig): string;
23
+ //# sourceMappingURL=rules-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-prompt.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/rules-prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,oBAAoB,CAAC;AAG9E;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAwBxE;AAsLD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAOnE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAO1E"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Rules Prompt Builder
3
+ *
4
+ * Generates rules description text for LLM prompts based on world pack rules config.
5
+ * Used by all generation tools to communicate effective rules to the LLM.
6
+ */
7
+ import { BASE_ABILITIES, BASE_DIFFICULTIES, BASE_CRITICALS, BASE_DEFENSE, BASE_DAMAGE } from "@mythxengine/types";
8
+ /**
9
+ * Build the rules section for generation prompts.
10
+ *
11
+ * If no custom rules are provided, returns default rules description.
12
+ * If custom rules are provided, merges with defaults and describes the effective rules.
13
+ */
14
+ export function buildRulesPromptSection(rules) {
15
+ if (!rules) {
16
+ return getDefaultRulesSection();
17
+ }
18
+ const sections = [];
19
+ // Abilities section
20
+ sections.push(buildAbilitiesSection(rules));
21
+ // Difficulties section
22
+ sections.push(buildDifficultiesSection(rules));
23
+ // Mechanics section
24
+ sections.push(buildMechanicsSection(rules));
25
+ // Custom tests section
26
+ if (rules.customTests?.tests && rules.customTests.tests.length > 0) {
27
+ sections.push(buildCustomTestsSection(rules));
28
+ }
29
+ return `## Game Rules
30
+
31
+ ${sections.join("\n\n")}`;
32
+ }
33
+ /**
34
+ * Default rules section when no custom rules are provided
35
+ */
36
+ function getDefaultRulesSection() {
37
+ return `## Game Rules
38
+
39
+ ### Abilities
40
+ Four core abilities with modifiers from -3 to +3:
41
+ - **STR** (Strength): Physical power, melee damage, carrying
42
+ - **AGI** (Agility): Speed, reflexes, ranged attacks, defense
43
+ - **WIT** (Wit): Intelligence, perception, social, magic
44
+ - **CON** (Constitution): Toughness, HP, endurance, resistance
45
+
46
+ ### Difficulty Levels
47
+ - EASY: DC 8
48
+ - STANDARD: DC 12
49
+ - HARD: DC 16
50
+ - EXTREME: DC 20
51
+
52
+ ### Combat Mechanics
53
+ - Defense: 10 + AGI modifier
54
+ - Attack: d20 + ability + skill vs Defense
55
+ - Critical: Natural 20 (auto-success, 2x damage), Natural 1 (auto-fail)
56
+ - Damage: Weapon die + ability modifier - armor (minimum 0)
57
+
58
+ ### HP Guidelines
59
+ - Low: 8-10 HP
60
+ - Medium: 10-12 HP
61
+ - High: 12-14 HP
62
+ - Tank: 14-16 HP`;
63
+ }
64
+ /**
65
+ * Build abilities section from config
66
+ */
67
+ function buildAbilitiesSection(rules) {
68
+ const abilities = getEffectiveAbilities(rules);
69
+ const abilityLines = abilities.map(a => `- **${a.id}** (${a.name}): ${a.description} [${a.minValue} to ${a.maxValue}]`);
70
+ return `### Abilities
71
+ ${abilityLines.join("\n")}`;
72
+ }
73
+ /**
74
+ * Get effective abilities (merged with defaults)
75
+ */
76
+ function getEffectiveAbilities(rules) {
77
+ const config = rules.abilities;
78
+ if (!config) {
79
+ return BASE_ABILITIES;
80
+ }
81
+ // Replace mode
82
+ if (config.replace && config.replace.length > 0) {
83
+ return config.replace;
84
+ }
85
+ // Start with base abilities
86
+ let abilities = [...BASE_ABILITIES];
87
+ // Apply overrides
88
+ if (config.override) {
89
+ abilities = abilities.map(a => {
90
+ const override = config.override?.[a.id];
91
+ if (override) {
92
+ return { ...a, ...override };
93
+ }
94
+ return a;
95
+ });
96
+ }
97
+ // Add new abilities
98
+ if (config.add && config.add.length > 0) {
99
+ abilities = [...abilities, ...config.add];
100
+ }
101
+ return abilities;
102
+ }
103
+ /**
104
+ * Build difficulties section from config
105
+ */
106
+ function buildDifficultiesSection(rules) {
107
+ const config = rules.difficulties;
108
+ // Get effective difficulties
109
+ let difficulties = BASE_DIFFICULTIES;
110
+ if (config?.replace && config.replace.length > 0) {
111
+ difficulties = config.replace;
112
+ }
113
+ else if (config?.add && config.add.length > 0) {
114
+ difficulties = [...difficulties, ...config.add];
115
+ }
116
+ // Sort by target value for consistent display
117
+ const sorted = [...difficulties].sort((a, b) => a.target - b.target);
118
+ const diffLines = sorted.map(d => `- ${d.name.toUpperCase()}: DC ${d.target}`);
119
+ return `### Difficulty Levels
120
+ ${diffLines.join("\n")}`;
121
+ }
122
+ /**
123
+ * Build mechanics section from config
124
+ */
125
+ function buildMechanicsSection(rules) {
126
+ const mechanics = rules.mechanics;
127
+ const lines = [];
128
+ // Defense
129
+ const defense = mechanics?.defense ?? BASE_DEFENSE;
130
+ const defenseAbility = defense.ability ?? "AGI";
131
+ lines.push(`- Defense: ${defense.base} + ${defenseAbility} modifier`);
132
+ // Attack
133
+ lines.push(`- Attack: d20 + ability + skill vs Defense`);
134
+ // Criticals
135
+ const criticals = mechanics?.criticals ?? BASE_CRITICALS;
136
+ const critSuccessOn = criticals.successOn?.join(", ") ?? "20";
137
+ const critFailOn = criticals.failureOn?.join(", ") ?? "1";
138
+ const autoSuccess = criticals.autoSuccess !== false ? "auto-success" : "no auto-success";
139
+ const autoFail = criticals.autoFailure !== false ? "auto-fail" : "no auto-fail";
140
+ const critMult = criticals.damageMultiplier ?? 2;
141
+ lines.push(`- Critical Success: Natural ${critSuccessOn} (${autoSuccess}, ${critMult}x damage)`);
142
+ lines.push(`- Critical Failure: Natural ${critFailOn} (${autoFail})`);
143
+ // Roll-under (if enabled)
144
+ if (mechanics?.rollUnder?.enabled) {
145
+ const rollUnder = mechanics.rollUnder;
146
+ lines.push(`- Roll-Under System: Roll ${rollUnder.dice} under ability score to succeed`);
147
+ if (rollUnder.criticalSuccessRange) {
148
+ lines.push(` - Critical Success: Roll ${rollUnder.criticalSuccessRange[0]}-${rollUnder.criticalSuccessRange[1]}`);
149
+ }
150
+ if (rollUnder.criticalFailureRange) {
151
+ lines.push(` - Critical Failure: Roll ${rollUnder.criticalFailureRange[0]}-${rollUnder.criticalFailureRange[1]}`);
152
+ }
153
+ }
154
+ // Damage
155
+ const damage = mechanics?.damage ?? BASE_DAMAGE;
156
+ const damageComponents = ["Weapon die"];
157
+ if (damage.addAbility !== false)
158
+ damageComponents.push("ability modifier");
159
+ if (damage.subtractArmor !== false)
160
+ damageComponents.push("- armor");
161
+ lines.push(`- Damage: ${damageComponents.join(" + ")} (minimum ${damage.minimumDamage ?? 0})`);
162
+ // Resistance/Vulnerability
163
+ const resMult = mechanics?.resistanceMultiplier ?? 0.5;
164
+ const vulnMult = mechanics?.vulnerabilityMultiplier ?? 2;
165
+ lines.push(`- Resistance: ${resMult}x damage`);
166
+ lines.push(`- Vulnerability: ${vulnMult}x damage`);
167
+ return `### Combat Mechanics
168
+ ${lines.join("\n")}`;
169
+ }
170
+ /**
171
+ * Build custom tests section
172
+ */
173
+ function buildCustomTestsSection(rules) {
174
+ const tests = rules.customTests?.tests ?? [];
175
+ const testLines = tests.map(test => {
176
+ const triggers = test.triggers.join(", ");
177
+ const rollDesc = test.roll.underAbility
178
+ ? `Roll ${test.roll.dice} under ${test.roll.underAbility}`
179
+ : `Roll ${test.roll.dice} + ${test.roll.ability ?? "ability"} vs DC`;
180
+ return `- **${test.name}** (${test.id}): ${test.description}
181
+ - Triggers: ${triggers}
182
+ - Roll: ${rollDesc}`;
183
+ });
184
+ return `### Custom Tests
185
+ ${testLines.join("\n")}`;
186
+ }
187
+ /**
188
+ * Build HP guidelines based on rules
189
+ */
190
+ export function buildHPGuidelines(_rules) {
191
+ // Could be enhanced to read from rules config if we add HP guidelines there
192
+ return `### HP Guidelines
193
+ - Low: 8-10 HP
194
+ - Medium: 10-12 HP
195
+ - High: 12-14 HP
196
+ - Tank: 14-16 HP`;
197
+ }
198
+ /**
199
+ * Build monster HP guidelines by threat tier
200
+ */
201
+ export function buildMonsterHPGuidelines(_rules) {
202
+ // Could be enhanced to scale with rules config
203
+ return `### Monster HP by Threat Tier
204
+ - Minion: 4-6 HP
205
+ - Standard: 10-14 HP
206
+ - Elite: 18-24 HP
207
+ - Boss: 30-40 HP`;
208
+ }
209
+ //# sourceMappingURL=rules-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-prompt.js","sourceRoot":"","sources":["../../../src/tools/generation/rules-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * World Seed Generation Tool
3
+ *
4
+ * Creates the foundation for a new world from a campaign seed prompt.
5
+ */
6
+ import type { MCPToolEntry } from "@mythxengine/types";
7
+ /**
8
+ * generate_world_seed tool
9
+ */
10
+ export declare const generateWorldSeedTool: MCPToolEntry;
11
+ export declare const seedTools: MCPToolEntry[];
12
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/seed.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAyBvD;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAgKnC,CAAC;AAEF,eAAO,MAAM,SAAS,gBAA0B,CAAC"}