@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,560 @@
1
+ /**
2
+ * Turn management tools - coordinate multi-player turn taking
3
+ */
4
+ import { z } from "zod";
5
+ import { createTurnState } from "@mythxengine/types";
6
+ import { sessionManager } from "../state/manager.js";
7
+ // Input schemas
8
+ const StartTurnsInput = z.object({
9
+ sessionId: z.string(),
10
+ strategy: z.enum(["round_robin", "gm_directed", "free_form"]).optional().default("round_robin"),
11
+ playerIds: z.array(z.string()).optional(),
12
+ });
13
+ const GetCurrentTurnInput = z.object({
14
+ sessionId: z.string(),
15
+ });
16
+ const AdvanceTurnInput = z.object({
17
+ sessionId: z.string(),
18
+ });
19
+ const EndTurnsInput = z.object({
20
+ sessionId: z.string(),
21
+ });
22
+ const RequestPlayerInputInput = z.object({
23
+ sessionId: z.string(),
24
+ playerId: z.string(),
25
+ prompt: z.string(),
26
+ choices: z.array(z.string()).optional(),
27
+ context: z.string().optional(),
28
+ });
29
+ const SubmitPlayerActionInput = z.object({
30
+ sessionId: z.string(),
31
+ playerId: z.string(),
32
+ action: z.string(),
33
+ });
34
+ const GetAIPlayerContextInput = z.object({
35
+ sessionId: z.string(),
36
+ playerId: z.string(),
37
+ });
38
+ const SubmitAIPlayerActionInput = z.object({
39
+ sessionId: z.string(),
40
+ playerId: z.string(),
41
+ action: z.string(),
42
+ reasoning: z.string().optional(),
43
+ });
44
+ /**
45
+ * Get PC players (excluding GM and spectators)
46
+ */
47
+ function getPCPlayers(players) {
48
+ return Object.values(players).filter((p) => p.role === "pc" && p.status === "active");
49
+ }
50
+ /**
51
+ * start_turns tool
52
+ */
53
+ export const startTurnsTool = {
54
+ name: "start_turns",
55
+ description: "Begin turn-based coordination for multi-player gameplay",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {
59
+ sessionId: { type: "string", description: "Session ID" },
60
+ strategy: {
61
+ type: "string",
62
+ enum: ["round_robin", "gm_directed", "free_form"],
63
+ description: "Turn strategy (default: round_robin)",
64
+ },
65
+ playerIds: {
66
+ type: "array",
67
+ items: { type: "string" },
68
+ description: "Specific player IDs for turn order (default: all PC players)",
69
+ },
70
+ },
71
+ required: ["sessionId"],
72
+ },
73
+ handler: async (args) => {
74
+ const input = StartTurnsInput.parse(args);
75
+ const session = await sessionManager.get(input.sessionId);
76
+ if (!session) {
77
+ throw new Error(`Session not found: ${input.sessionId}`);
78
+ }
79
+ if (session.turns) {
80
+ throw new Error("Turns already active. Call end_turns first.");
81
+ }
82
+ const players = session.players || {};
83
+ // Determine turn order
84
+ let turnOrder;
85
+ if (input.playerIds && input.playerIds.length > 0) {
86
+ // Validate all player IDs exist
87
+ for (const id of input.playerIds) {
88
+ if (!players[id]) {
89
+ throw new Error(`Player not found: ${id}`);
90
+ }
91
+ }
92
+ turnOrder = input.playerIds;
93
+ }
94
+ else {
95
+ // Default to all PC players
96
+ turnOrder = getPCPlayers(players).map((p) => p.id);
97
+ }
98
+ if (turnOrder.length === 0) {
99
+ throw new Error("No players available for turn order. Create players first.");
100
+ }
101
+ session.turns = createTurnState(input.strategy, turnOrder);
102
+ await sessionManager.save(session);
103
+ const currentPlayer = players[session.turns.currentPlayerId];
104
+ return {
105
+ message: `Turns started with ${input.strategy} strategy`,
106
+ turns: {
107
+ strategy: session.turns.strategy,
108
+ round: session.turns.round,
109
+ turnOrder: turnOrder.map((id) => ({
110
+ playerId: id,
111
+ playerName: players[id].name,
112
+ controlType: players[id].controlType,
113
+ })),
114
+ currentPlayer: {
115
+ id: currentPlayer.id,
116
+ name: currentPlayer.name,
117
+ controlType: currentPlayer.controlType,
118
+ },
119
+ },
120
+ };
121
+ },
122
+ };
123
+ /**
124
+ * get_current_turn tool
125
+ */
126
+ export const getCurrentTurnTool = {
127
+ name: "get_current_turn",
128
+ description: "Get the current turn state and active player",
129
+ inputSchema: {
130
+ type: "object",
131
+ properties: {
132
+ sessionId: { type: "string", description: "Session ID" },
133
+ },
134
+ required: ["sessionId"],
135
+ },
136
+ handler: async (args) => {
137
+ const input = GetCurrentTurnInput.parse(args);
138
+ const session = await sessionManager.get(input.sessionId);
139
+ if (!session) {
140
+ throw new Error(`Session not found: ${input.sessionId}`);
141
+ }
142
+ if (!session.turns) {
143
+ return {
144
+ active: false,
145
+ message: "No turn coordination active",
146
+ };
147
+ }
148
+ const players = session.players || {};
149
+ const currentPlayer = session.turns.currentPlayerId
150
+ ? players[session.turns.currentPlayerId]
151
+ : null;
152
+ let character = null;
153
+ if (currentPlayer?.characterId && session.characters[currentPlayer.characterId]) {
154
+ const c = session.characters[currentPlayer.characterId];
155
+ character = {
156
+ id: c.id,
157
+ name: c.name,
158
+ hp: c.hp,
159
+ conditions: c.conditions.map((cond) => cond.name),
160
+ };
161
+ }
162
+ return {
163
+ active: true,
164
+ strategy: session.turns.strategy,
165
+ round: session.turns.round,
166
+ turnIndex: session.turns.turnIndex,
167
+ totalPlayers: session.turns.turnOrder.length,
168
+ waitingForHumanInput: session.turns.waitingForHumanInput,
169
+ currentPlayer: currentPlayer
170
+ ? {
171
+ id: currentPlayer.id,
172
+ name: currentPlayer.name,
173
+ controlType: currentPlayer.controlType,
174
+ status: currentPlayer.status,
175
+ pendingAction: currentPlayer.pendingAction,
176
+ character,
177
+ }
178
+ : null,
179
+ turnOrder: session.turns.turnOrder.map((id, idx) => ({
180
+ playerId: id,
181
+ playerName: players[id]?.name || "Unknown",
182
+ controlType: players[id]?.controlType || "unknown",
183
+ isCurrent: idx === session.turns.turnIndex,
184
+ })),
185
+ };
186
+ },
187
+ };
188
+ /**
189
+ * advance_turn tool
190
+ */
191
+ export const advanceTurnTool = {
192
+ name: "advance_turn",
193
+ description: "Move to the next player in turn order",
194
+ inputSchema: {
195
+ type: "object",
196
+ properties: {
197
+ sessionId: { type: "string", description: "Session ID" },
198
+ },
199
+ required: ["sessionId"],
200
+ },
201
+ handler: async (args) => {
202
+ const input = AdvanceTurnInput.parse(args);
203
+ const session = await sessionManager.get(input.sessionId);
204
+ if (!session) {
205
+ throw new Error(`Session not found: ${input.sessionId}`);
206
+ }
207
+ if (!session.turns) {
208
+ throw new Error("No turn coordination active. Call start_turns first.");
209
+ }
210
+ const players = session.players || {};
211
+ // Clear any pending action from current player
212
+ const currentPlayerId = session.turns.currentPlayerId;
213
+ if (currentPlayerId && players[currentPlayerId]) {
214
+ delete players[currentPlayerId].pendingAction;
215
+ players[currentPlayerId].status = "active";
216
+ }
217
+ // Advance to next player
218
+ session.turns.turnIndex = (session.turns.turnIndex + 1) % session.turns.turnOrder.length;
219
+ // Check if we've completed a round
220
+ const newRound = session.turns.turnIndex === 0;
221
+ if (newRound) {
222
+ session.turns.round++;
223
+ }
224
+ session.turns.currentPlayerId = session.turns.turnOrder[session.turns.turnIndex];
225
+ session.turns.waitingForHumanInput = false;
226
+ const newPlayer = players[session.turns.currentPlayerId];
227
+ let character = null;
228
+ if (newPlayer?.characterId && session.characters[newPlayer.characterId]) {
229
+ const c = session.characters[newPlayer.characterId];
230
+ character = {
231
+ id: c.id,
232
+ name: c.name,
233
+ hp: c.hp,
234
+ };
235
+ }
236
+ await sessionManager.save(session);
237
+ return {
238
+ message: newRound
239
+ ? `Round ${session.turns.round} begins. ${newPlayer.name}'s turn.`
240
+ : `${newPlayer.name}'s turn.`,
241
+ newRound,
242
+ round: session.turns.round,
243
+ currentPlayer: {
244
+ id: newPlayer.id,
245
+ name: newPlayer.name,
246
+ controlType: newPlayer.controlType,
247
+ character,
248
+ },
249
+ };
250
+ },
251
+ };
252
+ /**
253
+ * end_turns tool
254
+ */
255
+ export const endTurnsTool = {
256
+ name: "end_turns",
257
+ description: "End turn-based coordination and return to free-form play",
258
+ inputSchema: {
259
+ type: "object",
260
+ properties: {
261
+ sessionId: { type: "string", description: "Session ID" },
262
+ },
263
+ required: ["sessionId"],
264
+ },
265
+ handler: async (args) => {
266
+ const input = EndTurnsInput.parse(args);
267
+ const session = await sessionManager.get(input.sessionId);
268
+ if (!session) {
269
+ throw new Error(`Session not found: ${input.sessionId}`);
270
+ }
271
+ if (!session.turns) {
272
+ return {
273
+ message: "No turn coordination was active",
274
+ };
275
+ }
276
+ const summary = {
277
+ totalRounds: session.turns.round,
278
+ strategy: session.turns.strategy,
279
+ };
280
+ // Clear pending actions from all players
281
+ const players = session.players || {};
282
+ for (const player of Object.values(players)) {
283
+ delete player.pendingAction;
284
+ if (player.status === "waiting_for_input") {
285
+ player.status = "active";
286
+ }
287
+ }
288
+ session.turns = null;
289
+ await sessionManager.save(session);
290
+ return {
291
+ message: `Turns ended after ${summary.totalRounds} rounds`,
292
+ ...summary,
293
+ };
294
+ },
295
+ };
296
+ /**
297
+ * request_player_input tool
298
+ */
299
+ export const requestPlayerInputTool = {
300
+ name: "request_player_input",
301
+ description: "Mark a human player as awaiting input for their turn",
302
+ inputSchema: {
303
+ type: "object",
304
+ properties: {
305
+ sessionId: { type: "string", description: "Session ID" },
306
+ playerId: { type: "string", description: "Player ID" },
307
+ prompt: { type: "string", description: "What we're asking the player to decide" },
308
+ choices: {
309
+ type: "array",
310
+ items: { type: "string" },
311
+ description: "Optional preset choices",
312
+ },
313
+ context: {
314
+ type: "string",
315
+ description: "Additional context (scene, situation)",
316
+ },
317
+ },
318
+ required: ["sessionId", "playerId", "prompt"],
319
+ },
320
+ handler: async (args) => {
321
+ const input = RequestPlayerInputInput.parse(args);
322
+ const session = await sessionManager.get(input.sessionId);
323
+ if (!session) {
324
+ throw new Error(`Session not found: ${input.sessionId}`);
325
+ }
326
+ const players = session.players || {};
327
+ const player = players[input.playerId];
328
+ if (!player) {
329
+ throw new Error(`Player not found: ${input.playerId}`);
330
+ }
331
+ if (player.controlType !== "human") {
332
+ throw new Error(`Player '${player.name}' is AI-controlled, not human`);
333
+ }
334
+ player.status = "waiting_for_input";
335
+ player.pendingAction = {
336
+ prompt: input.prompt,
337
+ choices: input.choices,
338
+ context: input.context,
339
+ requestedAt: new Date().toISOString(),
340
+ };
341
+ if (session.turns) {
342
+ session.turns.waitingForHumanInput = true;
343
+ }
344
+ await sessionManager.save(session);
345
+ return {
346
+ message: `Awaiting input from ${player.name}`,
347
+ player: {
348
+ id: player.id,
349
+ name: player.name,
350
+ },
351
+ pendingAction: player.pendingAction,
352
+ };
353
+ },
354
+ };
355
+ /**
356
+ * submit_player_action tool
357
+ */
358
+ export const submitPlayerActionTool = {
359
+ name: "submit_player_action",
360
+ description: "Record a human player's chosen action",
361
+ inputSchema: {
362
+ type: "object",
363
+ properties: {
364
+ sessionId: { type: "string", description: "Session ID" },
365
+ playerId: { type: "string", description: "Player ID" },
366
+ action: { type: "string", description: "The action the player chose" },
367
+ },
368
+ required: ["sessionId", "playerId", "action"],
369
+ },
370
+ handler: async (args) => {
371
+ const input = SubmitPlayerActionInput.parse(args);
372
+ const session = await sessionManager.get(input.sessionId);
373
+ if (!session) {
374
+ throw new Error(`Session not found: ${input.sessionId}`);
375
+ }
376
+ const players = session.players || {};
377
+ const player = players[input.playerId];
378
+ if (!player) {
379
+ throw new Error(`Player not found: ${input.playerId}`);
380
+ }
381
+ // Clear pending action and update status
382
+ const previousPrompt = player.pendingAction?.prompt;
383
+ delete player.pendingAction;
384
+ player.status = "active";
385
+ player.lastActiveAt = new Date().toISOString();
386
+ if (session.turns) {
387
+ session.turns.waitingForHumanInput = false;
388
+ }
389
+ await sessionManager.save(session);
390
+ return {
391
+ message: `${player.name} chose: ${input.action}`,
392
+ player: {
393
+ id: player.id,
394
+ name: player.name,
395
+ },
396
+ action: input.action,
397
+ previousPrompt,
398
+ };
399
+ },
400
+ };
401
+ /**
402
+ * get_ai_player_context tool
403
+ */
404
+ export const getAIPlayerContextTool = {
405
+ name: "get_ai_player_context",
406
+ description: "Get full context for an AI player to make a decision",
407
+ inputSchema: {
408
+ type: "object",
409
+ properties: {
410
+ sessionId: { type: "string", description: "Session ID" },
411
+ playerId: { type: "string", description: "AI player ID" },
412
+ },
413
+ required: ["sessionId", "playerId"],
414
+ },
415
+ handler: async (args) => {
416
+ const input = GetAIPlayerContextInput.parse(args);
417
+ const session = await sessionManager.get(input.sessionId);
418
+ if (!session) {
419
+ throw new Error(`Session not found: ${input.sessionId}`);
420
+ }
421
+ const players = session.players || {};
422
+ const player = players[input.playerId];
423
+ if (!player) {
424
+ throw new Error(`Player not found: ${input.playerId}`);
425
+ }
426
+ if (player.controlType !== "ai") {
427
+ throw new Error(`Player '${player.name}' is human-controlled, not AI`);
428
+ }
429
+ // Get linked character
430
+ let character = null;
431
+ if (player.characterId && session.characters[player.characterId]) {
432
+ character = session.characters[player.characterId];
433
+ }
434
+ // Get other party members
435
+ const partyMembers = Object.values(players)
436
+ .filter((p) => p.id !== player.id && p.role === "pc" && p.characterId)
437
+ .map((p) => {
438
+ const c = session.characters[p.characterId];
439
+ return c
440
+ ? {
441
+ playerId: p.id,
442
+ playerName: p.name,
443
+ characterId: c.id,
444
+ characterName: c.name,
445
+ hp: c.hp,
446
+ conditions: c.conditions.map((cond) => cond.name),
447
+ }
448
+ : null;
449
+ })
450
+ .filter(Boolean);
451
+ // Get combat state if active
452
+ let combat = null;
453
+ if (session.combat?.active) {
454
+ const enemies = session.combat.turnOrder
455
+ .filter((id) => session.enemies[id])
456
+ .map((id) => {
457
+ const e = session.enemies[id];
458
+ return {
459
+ id: e.id,
460
+ name: e.name,
461
+ hp: e.hp,
462
+ conditions: e.conditions.map((c) => c.name),
463
+ };
464
+ });
465
+ combat = {
466
+ active: true,
467
+ round: session.combat.round,
468
+ currentTurnId: session.combat.currentTurnId,
469
+ enemies,
470
+ };
471
+ }
472
+ // Get recent notes for context
473
+ const recentNotes = session.notes.slice(-5).map((n) => ({
474
+ content: n.content,
475
+ tags: n.tags,
476
+ }));
477
+ return {
478
+ player: {
479
+ id: player.id,
480
+ name: player.name,
481
+ aiPersona: player.aiPersona,
482
+ },
483
+ character,
484
+ partyMembers,
485
+ combat,
486
+ gameTime: session.gameTime,
487
+ recentNotes,
488
+ turnState: session.turns
489
+ ? {
490
+ round: session.turns.round,
491
+ strategy: session.turns.strategy,
492
+ }
493
+ : null,
494
+ };
495
+ },
496
+ };
497
+ /**
498
+ * submit_ai_player_action tool
499
+ */
500
+ export const submitAIPlayerActionTool = {
501
+ name: "submit_ai_player_action",
502
+ description: "Record an AI player's decided action",
503
+ inputSchema: {
504
+ type: "object",
505
+ properties: {
506
+ sessionId: { type: "string", description: "Session ID" },
507
+ playerId: { type: "string", description: "AI player ID" },
508
+ action: { type: "string", description: "The action the AI decided on" },
509
+ reasoning: {
510
+ type: "string",
511
+ description: "Brief reasoning for the choice (optional)",
512
+ },
513
+ },
514
+ required: ["sessionId", "playerId", "action"],
515
+ },
516
+ handler: async (args) => {
517
+ const input = SubmitAIPlayerActionInput.parse(args);
518
+ const session = await sessionManager.get(input.sessionId);
519
+ if (!session) {
520
+ throw new Error(`Session not found: ${input.sessionId}`);
521
+ }
522
+ const players = session.players || {};
523
+ const player = players[input.playerId];
524
+ if (!player) {
525
+ throw new Error(`Player not found: ${input.playerId}`);
526
+ }
527
+ if (player.controlType !== "ai") {
528
+ throw new Error(`Player '${player.name}' is human-controlled, not AI`);
529
+ }
530
+ player.status = "active";
531
+ player.lastActiveAt = new Date().toISOString();
532
+ await sessionManager.save(session);
533
+ // Get character name for the response
534
+ const characterName = player.characterId
535
+ ? session.characters[player.characterId]?.name || "Unknown"
536
+ : player.name;
537
+ return {
538
+ message: `${characterName} (AI: ${player.name}) acts: ${input.action}`,
539
+ player: {
540
+ id: player.id,
541
+ name: player.name,
542
+ characterName,
543
+ aiPersona: player.aiPersona,
544
+ },
545
+ action: input.action,
546
+ reasoning: input.reasoning,
547
+ };
548
+ },
549
+ };
550
+ export const turnTools = [
551
+ startTurnsTool,
552
+ getCurrentTurnTool,
553
+ advanceTurnTool,
554
+ endTurnsTool,
555
+ requestPlayerInputTool,
556
+ submitPlayerActionTool,
557
+ getAIPlayerContextTool,
558
+ submitAIPlayerActionTool,
559
+ ];
560
+ //# sourceMappingURL=turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.js","sourceRoot":"","sources":["../../src/tools/turns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Assemble World Pack Tool
3
+ *
4
+ * Combines all generated content into a complete WorldContentPack.
5
+ */
6
+ import type { MCPToolEntry } from "@mythxengine/types";
7
+ /**
8
+ * assemble_world_pack tool
9
+ */
10
+ export declare const assembleWorldPackTool: MCPToolEntry;
11
+ /**
12
+ * Merge base content with expansions by ID using lodash deep merge
13
+ * Expansions extend base content rather than replacing it
14
+ */
15
+ declare function mergeById<T extends {
16
+ id: string;
17
+ }>(base: T[], expanded: T[]): T[];
18
+ export declare const assembleTools: MCPToolEntry[];
19
+ export { mergeById };
20
+ //# sourceMappingURL=assemble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../src/tools/worldpack/assemble.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AA8BzE;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAgKnC,CAAC;AAEF;;;GAGG;AACH,iBAAS,SAAS,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAc1E;AAkHD,eAAO,MAAM,aAAa,gBAA0B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,CAAC"}