@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,438 @@
1
+ /**
2
+ * Situation Clock Runtime Tools
3
+ *
4
+ * Tools for managing situation clocks during gameplay.
5
+ * Clocks track what happens if PCs don't intervene in a situation.
6
+ */
7
+ import { z } from "zod";
8
+ import { gameTimeToMinutes, formatDuration, } from "@mythxengine/types";
9
+ import { sessionManager } from "../state/manager.js";
10
+ // Input schemas
11
+ const StartClockInput = z.object({
12
+ sessionId: z.string(),
13
+ situationId: z.string(),
14
+ clockId: z.string().optional().describe("Optional clock ID if situation has multiple clocks"),
15
+ });
16
+ const TickClockInput = z.object({
17
+ sessionId: z.string(),
18
+ clockId: z.string(),
19
+ });
20
+ const GetActiveClocksInput = z.object({
21
+ sessionId: z.string(),
22
+ });
23
+ const PauseClockInput = z.object({
24
+ sessionId: z.string(),
25
+ clockId: z.string(),
26
+ });
27
+ const CheckClockTriggersInput = z.object({
28
+ sessionId: z.string(),
29
+ });
30
+ /**
31
+ * Format game time as human-readable string
32
+ */
33
+ function formatGameTime(time) {
34
+ const hour12 = time.hour % 12 || 12;
35
+ const ampm = time.hour < 12 ? "AM" : "PM";
36
+ const min = time.minute.toString().padStart(2, "0");
37
+ return `Day ${time.day}, ${hour12}:${min} ${ampm}`;
38
+ }
39
+ /**
40
+ * Get situation from generated content
41
+ */
42
+ function getSituation(session, situationId) {
43
+ if (!session.generation?.generatedContent?.situations) {
44
+ return null;
45
+ }
46
+ const situations = session.generation.generatedContent.situations;
47
+ return situations.find(s => s.id === situationId) || null;
48
+ }
49
+ /**
50
+ * start_situation_clock tool
51
+ */
52
+ export const startClockTool = {
53
+ name: "start_situation_clock",
54
+ description: "Start a situation clock. The clock tracks what happens if PCs don't intervene.",
55
+ inputSchema: {
56
+ type: "object",
57
+ properties: {
58
+ sessionId: { type: "string", description: "Session ID" },
59
+ situationId: { type: "string", description: "Situation ID containing the clock" },
60
+ clockId: { type: "string", description: "Optional clock ID if situation has multiple clocks" },
61
+ },
62
+ required: ["sessionId", "situationId"],
63
+ },
64
+ handler: async (args) => {
65
+ const input = StartClockInput.parse(args);
66
+ const session = await sessionManager.get(input.sessionId);
67
+ if (!session) {
68
+ throw new Error(`Session not found: ${input.sessionId}`);
69
+ }
70
+ // Find the situation
71
+ const situation = getSituation(session, input.situationId);
72
+ if (!situation) {
73
+ throw new Error(`Situation not found: ${input.situationId}`);
74
+ }
75
+ if (!situation.clock) {
76
+ throw new Error(`Situation '${situation.name}' has no clock defined`);
77
+ }
78
+ const clock = situation.clock;
79
+ // Check if clock ID matches (if provided)
80
+ if (input.clockId && clock.id !== input.clockId) {
81
+ throw new Error(`Clock ID mismatch: expected '${input.clockId}', found '${clock.id}'`);
82
+ }
83
+ // Initialize activeClocks if needed
84
+ if (!session.activeClocks) {
85
+ session.activeClocks = [];
86
+ }
87
+ // Check if clock is already active
88
+ const existingClock = session.activeClocks.find(c => c.clockId === clock.id);
89
+ if (existingClock) {
90
+ throw new Error(`Clock '${clock.name}' is already active`);
91
+ }
92
+ // Create active clock
93
+ const activeClock = {
94
+ clockId: clock.id,
95
+ situationId: input.situationId,
96
+ name: clock.name,
97
+ doom: clock.doom,
98
+ currentStage: 0,
99
+ startedAt: { ...session.gameTime },
100
+ paused: false,
101
+ totalStages: clock.stages.length,
102
+ stages: clock.stages,
103
+ };
104
+ session.activeClocks.push(activeClock);
105
+ await sessionManager.save(session);
106
+ const firstStage = clock.stages[0];
107
+ return {
108
+ message: `Clock '${clock.name}' started`,
109
+ clock: {
110
+ id: clock.id,
111
+ name: clock.name,
112
+ doom: clock.doom,
113
+ startedAt: formatGameTime(session.gameTime),
114
+ currentStage: 0,
115
+ currentStageName: firstStage?.name || "Unknown",
116
+ totalStages: clock.stages.length,
117
+ paused: false,
118
+ },
119
+ warning: `The clock is now ticking toward: ${clock.doom}`,
120
+ };
121
+ },
122
+ };
123
+ /**
124
+ * tick_clock tool
125
+ */
126
+ export const tickClockTool = {
127
+ name: "tick_clock",
128
+ description: "Manually advance a clock to its next stage. Use for event-based triggers or GM override.",
129
+ inputSchema: {
130
+ type: "object",
131
+ properties: {
132
+ sessionId: { type: "string", description: "Session ID" },
133
+ clockId: { type: "string", description: "Clock ID to advance" },
134
+ },
135
+ required: ["sessionId", "clockId"],
136
+ },
137
+ handler: async (args) => {
138
+ const input = TickClockInput.parse(args);
139
+ const session = await sessionManager.get(input.sessionId);
140
+ if (!session) {
141
+ throw new Error(`Session not found: ${input.sessionId}`);
142
+ }
143
+ if (!session.activeClocks) {
144
+ throw new Error("No active clocks in session");
145
+ }
146
+ const clockIndex = session.activeClocks.findIndex(c => c.clockId === input.clockId);
147
+ if (clockIndex === -1) {
148
+ throw new Error(`Clock not found: ${input.clockId}`);
149
+ }
150
+ const clock = session.activeClocks[clockIndex];
151
+ if (clock.paused) {
152
+ throw new Error(`Clock '${clock.name}' is paused`);
153
+ }
154
+ const previousStage = clock.currentStage;
155
+ const previousStageDef = clock.stages[previousStage];
156
+ // Check if already at final stage
157
+ if (clock.currentStage >= clock.totalStages - 1) {
158
+ // Clock has reached doom
159
+ const finalStage = clock.stages[clock.totalStages - 1];
160
+ // Apply consequences
161
+ const consequences = finalStage.consequences;
162
+ if (consequences.setFlags) {
163
+ for (const flag of consequences.setFlags) {
164
+ if (!session.flags.includes(flag)) {
165
+ session.flags.push(flag);
166
+ }
167
+ }
168
+ }
169
+ // Remove clock from active list
170
+ session.activeClocks.splice(clockIndex, 1);
171
+ await sessionManager.save(session);
172
+ return {
173
+ message: `DOOM: Clock '${clock.name}' has reached its conclusion!`,
174
+ doom: clock.doom,
175
+ finalStage: {
176
+ name: finalStage.name,
177
+ description: finalStage.description,
178
+ narrative: consequences.narrative,
179
+ },
180
+ flagsSet: consequences.setFlags || [],
181
+ clockRemoved: true,
182
+ };
183
+ }
184
+ // Advance to next stage
185
+ clock.currentStage++;
186
+ const newStage = clock.stages[clock.currentStage];
187
+ // Apply consequences of the new stage
188
+ const consequences = newStage.consequences;
189
+ if (consequences.setFlags) {
190
+ for (const flag of consequences.setFlags) {
191
+ if (!session.flags.includes(flag)) {
192
+ session.flags.push(flag);
193
+ }
194
+ }
195
+ }
196
+ if (consequences.removeFlags) {
197
+ session.flags = session.flags.filter(f => !consequences.removeFlags.includes(f));
198
+ }
199
+ await sessionManager.save(session);
200
+ return {
201
+ message: `Clock '${clock.name}' advanced to stage ${clock.currentStage + 1}/${clock.totalStages}`,
202
+ previousStage: {
203
+ index: previousStage,
204
+ name: previousStageDef.name,
205
+ },
206
+ currentStage: {
207
+ index: clock.currentStage,
208
+ name: newStage.name,
209
+ description: newStage.description,
210
+ narrative: consequences.narrative,
211
+ },
212
+ stagesRemaining: clock.totalStages - clock.currentStage - 1,
213
+ doom: clock.doom,
214
+ flagsSet: consequences.setFlags || [],
215
+ };
216
+ },
217
+ };
218
+ /**
219
+ * get_active_clocks tool
220
+ */
221
+ export const getActiveClocksTool = {
222
+ name: "get_active_clocks",
223
+ description: "List all active situation clocks with their current status.",
224
+ inputSchema: {
225
+ type: "object",
226
+ properties: {
227
+ sessionId: { type: "string", description: "Session ID" },
228
+ },
229
+ required: ["sessionId"],
230
+ },
231
+ handler: async (args) => {
232
+ const input = GetActiveClocksInput.parse(args);
233
+ const session = await sessionManager.get(input.sessionId);
234
+ if (!session) {
235
+ throw new Error(`Session not found: ${input.sessionId}`);
236
+ }
237
+ if (!session.activeClocks || session.activeClocks.length === 0) {
238
+ return {
239
+ message: "No active clocks",
240
+ clocks: [],
241
+ };
242
+ }
243
+ const clocks = session.activeClocks.map(clock => {
244
+ const currentStageDef = clock.stages[clock.currentStage];
245
+ const minutesSinceStart = gameTimeToMinutes(session.gameTime) - gameTimeToMinutes(clock.startedAt);
246
+ return {
247
+ id: clock.clockId,
248
+ name: clock.name,
249
+ situationId: clock.situationId,
250
+ doom: clock.doom,
251
+ startedAt: formatGameTime(clock.startedAt),
252
+ minutesSinceStart,
253
+ timeSinceStart: formatDuration(minutesSinceStart),
254
+ currentStage: clock.currentStage + 1,
255
+ totalStages: clock.totalStages,
256
+ currentStageName: currentStageDef?.name || "Unknown",
257
+ stagesRemaining: clock.totalStages - clock.currentStage - 1,
258
+ paused: clock.paused,
259
+ };
260
+ });
261
+ return {
262
+ message: `${clocks.length} active clock(s)`,
263
+ currentTime: formatGameTime(session.gameTime),
264
+ clocks,
265
+ };
266
+ },
267
+ };
268
+ /**
269
+ * pause_clock tool
270
+ */
271
+ export const pauseClockTool = {
272
+ name: "pause_clock",
273
+ description: "Pause an active clock. Time-based triggers will not fire while paused.",
274
+ inputSchema: {
275
+ type: "object",
276
+ properties: {
277
+ sessionId: { type: "string", description: "Session ID" },
278
+ clockId: { type: "string", description: "Clock ID to pause" },
279
+ },
280
+ required: ["sessionId", "clockId"],
281
+ },
282
+ handler: async (args) => {
283
+ const input = PauseClockInput.parse(args);
284
+ const session = await sessionManager.get(input.sessionId);
285
+ if (!session) {
286
+ throw new Error(`Session not found: ${input.sessionId}`);
287
+ }
288
+ if (!session.activeClocks) {
289
+ throw new Error("No active clocks in session");
290
+ }
291
+ const clock = session.activeClocks.find(c => c.clockId === input.clockId);
292
+ if (!clock) {
293
+ throw new Error(`Clock not found: ${input.clockId}`);
294
+ }
295
+ clock.paused = true;
296
+ await sessionManager.save(session);
297
+ return {
298
+ message: `Clock '${clock.name}' paused`,
299
+ clock: {
300
+ id: clock.clockId,
301
+ name: clock.name,
302
+ paused: true,
303
+ currentStage: clock.currentStage + 1,
304
+ totalStages: clock.totalStages,
305
+ },
306
+ };
307
+ },
308
+ };
309
+ /**
310
+ * resume_clock tool
311
+ */
312
+ export const resumeClockTool = {
313
+ name: "resume_clock",
314
+ description: "Resume a paused clock.",
315
+ inputSchema: {
316
+ type: "object",
317
+ properties: {
318
+ sessionId: { type: "string", description: "Session ID" },
319
+ clockId: { type: "string", description: "Clock ID to resume" },
320
+ },
321
+ required: ["sessionId", "clockId"],
322
+ },
323
+ handler: async (args) => {
324
+ const input = PauseClockInput.parse(args);
325
+ const session = await sessionManager.get(input.sessionId);
326
+ if (!session) {
327
+ throw new Error(`Session not found: ${input.sessionId}`);
328
+ }
329
+ if (!session.activeClocks) {
330
+ throw new Error("No active clocks in session");
331
+ }
332
+ const clock = session.activeClocks.find(c => c.clockId === input.clockId);
333
+ if (!clock) {
334
+ throw new Error(`Clock not found: ${input.clockId}`);
335
+ }
336
+ clock.paused = false;
337
+ await sessionManager.save(session);
338
+ return {
339
+ message: `Clock '${clock.name}' resumed`,
340
+ clock: {
341
+ id: clock.clockId,
342
+ name: clock.name,
343
+ paused: false,
344
+ currentStage: clock.currentStage + 1,
345
+ totalStages: clock.totalStages,
346
+ doom: clock.doom,
347
+ },
348
+ };
349
+ },
350
+ };
351
+ /**
352
+ * check_clock_triggers tool
353
+ */
354
+ export const checkClockTriggersTool = {
355
+ name: "check_clock_triggers",
356
+ description: "Check if any time-based clock stages have triggered based on current game time.",
357
+ inputSchema: {
358
+ type: "object",
359
+ properties: {
360
+ sessionId: { type: "string", description: "Session ID" },
361
+ },
362
+ required: ["sessionId"],
363
+ },
364
+ handler: async (args) => {
365
+ const input = CheckClockTriggersInput.parse(args);
366
+ const session = await sessionManager.get(input.sessionId);
367
+ if (!session) {
368
+ throw new Error(`Session not found: ${input.sessionId}`);
369
+ }
370
+ if (!session.activeClocks || session.activeClocks.length === 0) {
371
+ return {
372
+ message: "No active clocks",
373
+ triggered: [],
374
+ approaching: [],
375
+ };
376
+ }
377
+ const currentMinutes = gameTimeToMinutes(session.gameTime);
378
+ const triggered = [];
379
+ const approaching = [];
380
+ for (const clock of session.activeClocks) {
381
+ if (clock.paused)
382
+ continue;
383
+ const startMinutes = gameTimeToMinutes(clock.startedAt);
384
+ const elapsedMinutes = currentMinutes - startMinutes;
385
+ // Check stages beyond current
386
+ for (let i = clock.currentStage + 1; i < clock.stages.length; i++) {
387
+ const stage = clock.stages[i];
388
+ const trigger = stage.trigger;
389
+ if (trigger.type === "time" && trigger.minutesFromStart !== undefined) {
390
+ const minutesUntilTrigger = trigger.minutesFromStart - elapsedMinutes;
391
+ if (minutesUntilTrigger <= 0) {
392
+ // This stage has triggered!
393
+ triggered.push({
394
+ clockId: clock.clockId,
395
+ clockName: clock.name,
396
+ stage: i + 1,
397
+ stageName: stage.name,
398
+ stageDescription: stage.description,
399
+ });
400
+ }
401
+ else if (minutesUntilTrigger <= 60) {
402
+ // Approaching within 1 hour
403
+ approaching.push({
404
+ clockId: clock.clockId,
405
+ clockName: clock.name,
406
+ nextStage: i + 1,
407
+ nextStageName: stage.name,
408
+ minutesUntilTrigger,
409
+ timeUntilTrigger: formatDuration(minutesUntilTrigger),
410
+ });
411
+ }
412
+ // Only check the next time-based stage
413
+ break;
414
+ }
415
+ }
416
+ }
417
+ return {
418
+ message: triggered.length > 0
419
+ ? `${triggered.length} clock stage(s) have triggered!`
420
+ : "No clock triggers at current time",
421
+ currentTime: formatGameTime(session.gameTime),
422
+ triggered,
423
+ approaching,
424
+ hint: triggered.length > 0
425
+ ? "Use tick_clock to advance these clocks and apply consequences"
426
+ : undefined,
427
+ };
428
+ },
429
+ };
430
+ export const clockTools = [
431
+ startClockTool,
432
+ tickClockTool,
433
+ getActiveClocksTool,
434
+ pauseClockTool,
435
+ resumeClockTool,
436
+ checkClockTriggersTool,
437
+ ];
438
+ //# sourceMappingURL=clocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clocks.js","sourceRoot":"","sources":["../../src/tools/clocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Combat tools - combat tracker and resolution
3
+ */
4
+ import type { MCPToolEntry } from "@mythxengine/types";
5
+ /**
6
+ * start_combat tool
7
+ */
8
+ export declare const startCombatTool: MCPToolEntry;
9
+ /**
10
+ * roll_initiative tool
11
+ */
12
+ export declare const rollInitiativeTool: MCPToolEntry;
13
+ /**
14
+ * attack tool
15
+ */
16
+ export declare const attackTool: MCPToolEntry;
17
+ /**
18
+ * apply_damage tool
19
+ */
20
+ export declare const applyDamageTool: MCPToolEntry;
21
+ /**
22
+ * add_combat_condition tool
23
+ */
24
+ export declare const addCombatConditionTool: MCPToolEntry;
25
+ /**
26
+ * next_turn tool
27
+ */
28
+ export declare const nextTurnTool: MCPToolEntry;
29
+ /**
30
+ * end_combat tool
31
+ */
32
+ export declare const endCombatTool: MCPToolEntry;
33
+ /**
34
+ * get_combat_state tool
35
+ */
36
+ export declare const getCombatStateTool: MCPToolEntry;
37
+ export declare const combatTools: MCPToolEntry[];
38
+ //# sourceMappingURL=combat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combat.d.ts","sourceRoot":"","sources":["../../src/tools/combat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAA+B,MAAM,oBAAoB,CAAC;AAmFpF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAoD7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAwDhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,YA+HxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAwC7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAiGpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAoE1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAwC3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAuChC,CAAC;AAEF,eAAO,MAAM,WAAW,gBASvB,CAAC"}