@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,308 @@
1
+ /**
2
+ * File-based session state persistence
3
+ * Adapted from rogue-borg shared-mcp-state
4
+ */
5
+ import { readFile, writeFile, mkdir, rm, readdir, rename } from "fs/promises";
6
+ import { join } from "path";
7
+ import { randomUUID } from "crypto";
8
+ import { z } from "zod";
9
+ import { createEmptySession } from "@mythxengine/types";
10
+ // Zod schema for manifest validation
11
+ const ManifestStepSchema = z.object({
12
+ type: z.string(),
13
+ stepId: z.string().optional(),
14
+ status: z.enum(["in_progress", "completed", "failed"]),
15
+ file: z.string().optional(),
16
+ completedAt: z.string().optional(),
17
+ error: z.string().optional(),
18
+ generatedIds: z.array(z.string()).optional(),
19
+ });
20
+ const GenerationManifestSchema = z.object({
21
+ sessionId: z.string(),
22
+ campaignSeed: z.string(),
23
+ tier: z.enum(["small", "medium", "large"]),
24
+ rulesConfig: z.unknown().optional(),
25
+ settings: z.object({
26
+ lethality: z.enum(["low", "medium", "high", "brutal"]).optional(),
27
+ magicLevel: z.enum(["none", "rare", "common", "high"]).optional(),
28
+ technologyLevel: z.enum(["primitive", "medieval", "renaissance", "industrial", "modern", "futuristic"]).optional(),
29
+ supernaturalPresence: z.enum(["subtle", "common", "pervasive"]).optional(),
30
+ }).optional(),
31
+ createdAt: z.string(),
32
+ status: z.enum(["seeding", "generating", "expanding", "assembling", "complete"]),
33
+ steps: z.array(ManifestStepSchema),
34
+ });
35
+ // Default data directory
36
+ const DATA_DIR = process.env.RPG_MCP_DATA_DIR || join(process.cwd(), "data");
37
+ const GENERATION_DIR = join(DATA_DIR, "generation");
38
+ function getSessionPath(sessionId) {
39
+ return join(DATA_DIR, `${sessionId}.session.json`);
40
+ }
41
+ // ============================================================================
42
+ // Generation Directory Helpers
43
+ // ============================================================================
44
+ /**
45
+ * Get the generation directory for a session
46
+ */
47
+ export function getGenerationDir(sessionId) {
48
+ validateSessionId(sessionId);
49
+ return join(GENERATION_DIR, sessionId);
50
+ }
51
+ /**
52
+ * Ensure the generation directory exists
53
+ */
54
+ export async function ensureGenerationDir(sessionId) {
55
+ const dir = getGenerationDir(sessionId);
56
+ await mkdir(dir, { recursive: true });
57
+ await mkdir(join(dir, "expansions"), { recursive: true });
58
+ return dir;
59
+ }
60
+ /**
61
+ * Write a step file atomically (temp file + rename)
62
+ */
63
+ export async function writeStepFile(sessionId, filename, data) {
64
+ const dir = getGenerationDir(sessionId);
65
+ const targetPath = join(dir, filename);
66
+ const tempPath = join(dir, `.${randomUUID()}.tmp`);
67
+ await writeFile(tempPath, JSON.stringify(data, null, 2), "utf-8");
68
+ await rename(tempPath, targetPath);
69
+ }
70
+ /**
71
+ * Read a step file
72
+ */
73
+ export async function readStepFile(sessionId, filename) {
74
+ const dir = getGenerationDir(sessionId);
75
+ const path = join(dir, filename);
76
+ try {
77
+ const content = await readFile(path, "utf-8");
78
+ return JSON.parse(content);
79
+ }
80
+ catch (error) {
81
+ if (error.code === "ENOENT") {
82
+ return null;
83
+ }
84
+ throw error;
85
+ }
86
+ }
87
+ /**
88
+ * Read the generation manifest with validation
89
+ */
90
+ export async function readManifest(sessionId) {
91
+ const result = await readStepFile(sessionId, "manifest.json");
92
+ if (result === null) {
93
+ return null;
94
+ }
95
+ // Validate manifest structure
96
+ const parsed = GenerationManifestSchema.safeParse(result);
97
+ if (!parsed.success) {
98
+ throw new Error(`Invalid manifest format: ${parsed.error.message}`);
99
+ }
100
+ return parsed.data;
101
+ }
102
+ /**
103
+ * Write the generation manifest atomically
104
+ */
105
+ export async function writeManifest(sessionId, manifest) {
106
+ await writeStepFile(sessionId, "manifest.json", manifest);
107
+ }
108
+ /**
109
+ * Create initial manifest for a new generation session
110
+ */
111
+ export function createManifest(sessionId, campaignSeed, tier, settings, rulesConfig) {
112
+ return {
113
+ sessionId,
114
+ campaignSeed,
115
+ tier,
116
+ rulesConfig,
117
+ settings,
118
+ createdAt: new Date().toISOString(),
119
+ status: "seeding",
120
+ steps: [],
121
+ };
122
+ }
123
+ /**
124
+ * Add a step to the manifest
125
+ */
126
+ export function addManifestStep(manifest, type, file) {
127
+ const step = {
128
+ type,
129
+ status: "in_progress",
130
+ file,
131
+ };
132
+ manifest.steps.push(step);
133
+ return step;
134
+ }
135
+ /**
136
+ * Find a step in the manifest by type
137
+ */
138
+ export function findManifestStep(manifest, type) {
139
+ return manifest.steps.find((s) => s.type === type);
140
+ }
141
+ /**
142
+ * Update a step's status in the manifest
143
+ * @returns true if step was found and updated, false otherwise
144
+ */
145
+ export function updateManifestStep(manifest, type, updates) {
146
+ const step = manifest.steps.find((s) => s.type === type);
147
+ if (step) {
148
+ Object.assign(step, updates);
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+ /**
154
+ * List all step files in the generation directory
155
+ */
156
+ export async function listStepFiles(sessionId) {
157
+ const dir = getGenerationDir(sessionId);
158
+ try {
159
+ const files = await readdir(dir);
160
+ return files.filter((f) => f.endsWith(".json") && f !== "manifest.json");
161
+ }
162
+ catch (error) {
163
+ if (error.code === "ENOENT") {
164
+ return [];
165
+ }
166
+ throw error;
167
+ }
168
+ }
169
+ /**
170
+ * List all expansion files in the generation directory
171
+ */
172
+ export async function listExpansionFiles(sessionId) {
173
+ const dir = join(getGenerationDir(sessionId), "expansions");
174
+ try {
175
+ const files = await readdir(dir);
176
+ return files.filter((f) => f.endsWith(".json"));
177
+ }
178
+ catch (error) {
179
+ if (error.code === "ENOENT") {
180
+ return [];
181
+ }
182
+ throw error;
183
+ }
184
+ }
185
+ // ============================================================================
186
+ // Session State Persistence
187
+ // ============================================================================
188
+ /**
189
+ * Validate session ID format
190
+ */
191
+ function validateSessionId(sessionId) {
192
+ if (!/^[a-z0-9-_]+$/i.test(sessionId)) {
193
+ throw new Error(`Invalid session ID: ${sessionId}. Must contain only alphanumeric characters, hyphens, and underscores`);
194
+ }
195
+ }
196
+ /**
197
+ * Load a session from disk
198
+ */
199
+ export async function loadSession(sessionId) {
200
+ validateSessionId(sessionId);
201
+ try {
202
+ const path = getSessionPath(sessionId);
203
+ const content = await readFile(path, "utf-8");
204
+ return JSON.parse(content);
205
+ }
206
+ catch (error) {
207
+ if (error.code === "ENOENT") {
208
+ return null;
209
+ }
210
+ throw error;
211
+ }
212
+ }
213
+ /**
214
+ * Save a session to disk
215
+ */
216
+ export async function saveSession(state) {
217
+ await mkdir(DATA_DIR, { recursive: true });
218
+ const path = getSessionPath(state.metadata.id);
219
+ const updated = {
220
+ ...state,
221
+ metadata: {
222
+ ...state.metadata,
223
+ updatedAt: new Date().toISOString(),
224
+ },
225
+ };
226
+ await writeFile(path, JSON.stringify(updated, null, 2), "utf-8");
227
+ }
228
+ /**
229
+ * Get or create a session
230
+ */
231
+ export async function getOrCreateSession(sessionId, name) {
232
+ validateSessionId(sessionId);
233
+ const existing = await loadSession(sessionId);
234
+ if (existing) {
235
+ return existing;
236
+ }
237
+ const newSession = createEmptySession(sessionId, name || sessionId);
238
+ await saveSession(newSession);
239
+ return newSession;
240
+ }
241
+ /**
242
+ * Delete a session
243
+ */
244
+ export async function deleteSession(sessionId) {
245
+ validateSessionId(sessionId);
246
+ try {
247
+ const path = getSessionPath(sessionId);
248
+ await rm(path, { force: true });
249
+ }
250
+ catch {
251
+ // Ignore errors (file may not exist)
252
+ }
253
+ }
254
+ /**
255
+ * List all sessions
256
+ */
257
+ export async function listSessions() {
258
+ try {
259
+ await mkdir(DATA_DIR, { recursive: true });
260
+ const files = await readdir(DATA_DIR);
261
+ return files
262
+ .filter((f) => f.endsWith(".session.json"))
263
+ .map((f) => f.replace(".session.json", ""));
264
+ }
265
+ catch {
266
+ return [];
267
+ }
268
+ }
269
+ /**
270
+ * Session state manager class for convenient access
271
+ */
272
+ export class SessionManager {
273
+ cache = new Map();
274
+ async get(sessionId) {
275
+ // Check cache first
276
+ const cached = this.cache.get(sessionId);
277
+ if (cached) {
278
+ return cached;
279
+ }
280
+ const session = await loadSession(sessionId);
281
+ if (session) {
282
+ this.cache.set(sessionId, session);
283
+ }
284
+ return session;
285
+ }
286
+ async getOrCreate(sessionId, name) {
287
+ const session = await getOrCreateSession(sessionId, name);
288
+ this.cache.set(sessionId, session);
289
+ return session;
290
+ }
291
+ async save(state) {
292
+ await saveSession(state);
293
+ this.cache.set(state.metadata.id, state);
294
+ }
295
+ async delete(sessionId) {
296
+ await deleteSession(sessionId);
297
+ this.cache.delete(sessionId);
298
+ }
299
+ async list() {
300
+ return listSessions();
301
+ }
302
+ clearCache() {
303
+ this.cache.clear();
304
+ }
305
+ }
306
+ // Singleton instance
307
+ export const sessionManager = new SessionManager();
308
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Rules Context Loading
3
+ *
4
+ * Helper functions to load rules context from sessions and world packs.
5
+ */
6
+ import type { SessionState } from "@mythxengine/types";
7
+ import { type RulesContext } from "@mythxengine/engine";
8
+ /**
9
+ * Get the rules context for a session.
10
+ *
11
+ * If the session has a worldPackId, loads the world pack's rules.
12
+ * Otherwise, returns the default rules context.
13
+ *
14
+ * @param session - The session state
15
+ * @returns RulesContext for the session
16
+ */
17
+ export declare function getRulesForSession(session: SessionState): Promise<RulesContext>;
18
+ /**
19
+ * Get rules context directly from a world pack ID.
20
+ *
21
+ * @param packId - World pack ID
22
+ * @returns RulesContext for the world pack, or default if not found
23
+ */
24
+ export declare function getRulesForWorldPack(packId: string): Promise<RulesContext>;
25
+ /**
26
+ * Clear the rules cache (useful when world pack is updated)
27
+ * @param packId - If provided, clears only that pack's cache. Otherwise clears all.
28
+ */
29
+ export declare function clearRulesCache(packId?: string): void;
30
+ //# sourceMappingURL=rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/state/rules.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,qBAAqB,CAAC;AAQ7B;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAMrD"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Rules Context Loading
3
+ *
4
+ * Helper functions to load rules context from sessions and world packs.
5
+ */
6
+ import { createRulesContext, getDefaultRulesContext, } from "@mythxengine/engine";
7
+ import { worldPackManager } from "./worldpacks.js";
8
+ /**
9
+ * Cache for rules contexts by world pack ID
10
+ */
11
+ const rulesCache = new Map();
12
+ /**
13
+ * Get the rules context for a session.
14
+ *
15
+ * If the session has a worldPackId, loads the world pack's rules.
16
+ * Otherwise, returns the default rules context.
17
+ *
18
+ * @param session - The session state
19
+ * @returns RulesContext for the session
20
+ */
21
+ export async function getRulesForSession(session) {
22
+ if (!session.worldPackId) {
23
+ return getDefaultRulesContext();
24
+ }
25
+ return getRulesForWorldPack(session.worldPackId);
26
+ }
27
+ /**
28
+ * Get rules context directly from a world pack ID.
29
+ *
30
+ * @param packId - World pack ID
31
+ * @returns RulesContext for the world pack, or default if not found
32
+ */
33
+ export async function getRulesForWorldPack(packId) {
34
+ // Check cache
35
+ const cached = rulesCache.get(packId);
36
+ if (cached) {
37
+ return cached;
38
+ }
39
+ // Load world pack
40
+ const worldPack = await worldPackManager.get(packId);
41
+ if (!worldPack) {
42
+ return getDefaultRulesContext();
43
+ }
44
+ // Create and cache
45
+ const rules = createRulesContext(worldPack.rules);
46
+ rulesCache.set(packId, rules);
47
+ return rules;
48
+ }
49
+ /**
50
+ * Clear the rules cache (useful when world pack is updated)
51
+ * @param packId - If provided, clears only that pack's cache. Otherwise clears all.
52
+ */
53
+ export function clearRulesCache(packId) {
54
+ if (packId) {
55
+ rulesCache.delete(packId);
56
+ }
57
+ else {
58
+ rulesCache.clear();
59
+ }
60
+ }
61
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/state/rules.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,GAA8B,IAAI,GAAG,EAAE,CAAC;AAExD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IAC5D,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,cAAc;IACd,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAED,mBAAmB;IACnB,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClD,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,IAAI,MAAM,EAAE,CAAC;QACX,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * World pack persistence
3
+ *
4
+ * Manages saving/loading world packs to disk.
5
+ */
6
+ import type { WorldContentPack } from "@mythxengine/worlds";
7
+ /**
8
+ * Get the directory for a world's generated books
9
+ */
10
+ export declare function getWorldBooksDir(packId: string): string;
11
+ /**
12
+ * Get the directory for shared rules
13
+ */
14
+ export declare function getRulesDir(): string;
15
+ /**
16
+ * Save a world pack to disk
17
+ */
18
+ export declare function saveWorldPack(packId: string, worldPack: WorldContentPack): Promise<void>;
19
+ /**
20
+ * Load a world pack from disk
21
+ */
22
+ export declare function loadWorldPack(packId: string): Promise<WorldContentPack | null>;
23
+ /**
24
+ * Delete a world pack
25
+ */
26
+ export declare function deleteWorldPack(packId: string): Promise<void>;
27
+ /**
28
+ * List all world packs
29
+ */
30
+ export declare function listWorldPacks(): Promise<string[]>;
31
+ /**
32
+ * World pack manager class for convenient access
33
+ */
34
+ export declare class WorldPackManager {
35
+ private cache;
36
+ get(packId: string): Promise<WorldContentPack | null>;
37
+ save(packId: string, pack: WorldContentPack): Promise<void>;
38
+ delete(packId: string): Promise<void>;
39
+ list(): Promise<string[]>;
40
+ clearCache(): void;
41
+ }
42
+ export declare const worldPackManager: WorldPackManager;
43
+ //# sourceMappingURL=worldpacks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worldpacks.d.ts","sourceRoot":"","sources":["../../src/state/worldpacks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAY5D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAaD;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAapF;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAUxD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAA4C;IAEnD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAcrD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,UAAU,IAAI,IAAI;CAGnB;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * World pack persistence
3
+ *
4
+ * Manages saving/loading world packs to disk.
5
+ */
6
+ import { readFile, writeFile, mkdir, rm, readdir } from "fs/promises";
7
+ import { join } from "path";
8
+ // Default data directory
9
+ const DATA_DIR = process.env.RPG_MCP_DATA_DIR || join(process.cwd(), "data");
10
+ const WORLDS_DIR = join(DATA_DIR, "worlds");
11
+ const BOOKS_DIR = join(DATA_DIR, "books");
12
+ const RULES_DIR = join(DATA_DIR, "rules");
13
+ function getWorldPackPath(packId) {
14
+ return join(WORLDS_DIR, `${packId}.world.json`);
15
+ }
16
+ /**
17
+ * Get the directory for a world's generated books
18
+ */
19
+ export function getWorldBooksDir(packId) {
20
+ validatePackId(packId);
21
+ return join(BOOKS_DIR, packId);
22
+ }
23
+ /**
24
+ * Get the directory for shared rules
25
+ */
26
+ export function getRulesDir() {
27
+ return RULES_DIR;
28
+ }
29
+ /**
30
+ * Validate pack ID format
31
+ */
32
+ function validatePackId(packId) {
33
+ if (!/^[a-z0-9-_]+$/i.test(packId)) {
34
+ throw new Error(`Invalid pack ID: ${packId}. Must contain only alphanumeric characters, hyphens, and underscores`);
35
+ }
36
+ }
37
+ /**
38
+ * Save a world pack to disk
39
+ */
40
+ export async function saveWorldPack(packId, worldPack) {
41
+ validatePackId(packId);
42
+ await mkdir(WORLDS_DIR, { recursive: true });
43
+ const path = getWorldPackPath(packId);
44
+ await writeFile(path, JSON.stringify(worldPack, null, 2), "utf-8");
45
+ }
46
+ /**
47
+ * Load a world pack from disk
48
+ */
49
+ export async function loadWorldPack(packId) {
50
+ validatePackId(packId);
51
+ try {
52
+ const path = getWorldPackPath(packId);
53
+ const content = await readFile(path, "utf-8");
54
+ return JSON.parse(content);
55
+ }
56
+ catch (error) {
57
+ if (error.code === "ENOENT") {
58
+ return null;
59
+ }
60
+ throw error;
61
+ }
62
+ }
63
+ /**
64
+ * Delete a world pack
65
+ */
66
+ export async function deleteWorldPack(packId) {
67
+ validatePackId(packId);
68
+ try {
69
+ const path = getWorldPackPath(packId);
70
+ await rm(path, { force: true });
71
+ }
72
+ catch {
73
+ // Ignore errors (file may not exist)
74
+ }
75
+ }
76
+ /**
77
+ * List all world packs
78
+ */
79
+ export async function listWorldPacks() {
80
+ try {
81
+ await mkdir(WORLDS_DIR, { recursive: true });
82
+ const files = await readdir(WORLDS_DIR);
83
+ return files
84
+ .filter((f) => f.endsWith(".world.json"))
85
+ .map((f) => f.replace(".world.json", ""));
86
+ }
87
+ catch {
88
+ return [];
89
+ }
90
+ }
91
+ /**
92
+ * World pack manager class for convenient access
93
+ */
94
+ export class WorldPackManager {
95
+ cache = new Map();
96
+ async get(packId) {
97
+ // Check cache first
98
+ const cached = this.cache.get(packId);
99
+ if (cached) {
100
+ return cached;
101
+ }
102
+ const pack = await loadWorldPack(packId);
103
+ if (pack) {
104
+ this.cache.set(packId, pack);
105
+ }
106
+ return pack;
107
+ }
108
+ async save(packId, pack) {
109
+ await saveWorldPack(packId, pack);
110
+ this.cache.set(packId, pack);
111
+ }
112
+ async delete(packId) {
113
+ await deleteWorldPack(packId);
114
+ this.cache.delete(packId);
115
+ }
116
+ async list() {
117
+ return listWorldPacks();
118
+ }
119
+ clearCache() {
120
+ this.cache.clear();
121
+ }
122
+ }
123
+ // Singleton instance
124
+ export const worldPackManager = new WorldPackManager();
125
+ //# sourceMappingURL=worldpacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worldpacks.js","sourceRoot":"","sources":["../../src/state/worldpacks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * World Pack Augmentation Tools
3
+ *
4
+ * Add new content to existing world packs.
5
+ */
6
+ import type { MCPToolEntry } from "@mythxengine/types";
7
+ /**
8
+ * start_augmentation tool
9
+ */
10
+ export declare const startAugmentationTool: MCPToolEntry;
11
+ /**
12
+ * merge_augmentation tool
13
+ */
14
+ export declare const mergeAugmentationTool: MCPToolEntry;
15
+ //# sourceMappingURL=augment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"augment.d.ts","sourceRoot":"","sources":["../../../src/tools/augmentation/augment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkBvD;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAiHnC,CAAC;AAkBF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YA6InC,CAAC"}