@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.
- package/LICENSE +21 -0
- package/dist/__tests__/assemble.test.d.ts +2 -0
- package/dist/__tests__/assemble.test.d.ts.map +1 -0
- package/dist/__tests__/assemble.test.js +81 -0
- package/dist/__tests__/assemble.test.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +202 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +91 -0
- package/dist/server.js.map +1 -0
- package/dist/state/manager.d.ts +88 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +308 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/rules.d.ts +30 -0
- package/dist/state/rules.d.ts.map +1 -0
- package/dist/state/rules.js +61 -0
- package/dist/state/rules.js.map +1 -0
- package/dist/state/worldpacks.d.ts +43 -0
- package/dist/state/worldpacks.d.ts.map +1 -0
- package/dist/state/worldpacks.js +125 -0
- package/dist/state/worldpacks.js.map +1 -0
- package/dist/tools/augmentation/augment.d.ts +15 -0
- package/dist/tools/augmentation/augment.d.ts.map +1 -0
- package/dist/tools/augmentation/augment.js +512 -0
- package/dist/tools/augmentation/augment.js.map +1 -0
- package/dist/tools/augmentation/index.d.ts +6 -0
- package/dist/tools/augmentation/index.d.ts.map +1 -0
- package/dist/tools/augmentation/index.js +7 -0
- package/dist/tools/augmentation/index.js.map +1 -0
- package/dist/tools/characters.d.ts +26 -0
- package/dist/tools/characters.d.ts.map +1 -0
- package/dist/tools/characters.js +362 -0
- package/dist/tools/characters.js.map +1 -0
- package/dist/tools/clocks.d.ts +33 -0
- package/dist/tools/clocks.d.ts.map +1 -0
- package/dist/tools/clocks.js +438 -0
- package/dist/tools/clocks.js.map +1 -0
- package/dist/tools/combat.d.ts +38 -0
- package/dist/tools/combat.d.ts.map +1 -0
- package/dist/tools/combat.js +574 -0
- package/dist/tools/combat.js.map +1 -0
- package/dist/tools/dice.d.ts +9 -0
- package/dist/tools/dice.d.ts.map +1 -0
- package/dist/tools/dice.js +287 -0
- package/dist/tools/dice.js.map +1 -0
- package/dist/tools/encounters.d.ts +21 -0
- package/dist/tools/encounters.d.ts.map +1 -0
- package/dist/tools/encounters.js +521 -0
- package/dist/tools/encounters.js.map +1 -0
- package/dist/tools/engagement.d.ts +25 -0
- package/dist/tools/engagement.d.ts.map +1 -0
- package/dist/tools/engagement.js +491 -0
- package/dist/tools/engagement.js.map +1 -0
- package/dist/tools/expansion/archetype.d.ts +12 -0
- package/dist/tools/expansion/archetype.d.ts.map +1 -0
- package/dist/tools/expansion/archetype.js +157 -0
- package/dist/tools/expansion/archetype.js.map +1 -0
- package/dist/tools/expansion/index.d.ts +12 -0
- package/dist/tools/expansion/index.d.ts.map +1 -0
- package/dist/tools/expansion/index.js +21 -0
- package/dist/tools/expansion/index.js.map +1 -0
- package/dist/tools/expansion/location.d.ts +12 -0
- package/dist/tools/expansion/location.d.ts.map +1 -0
- package/dist/tools/expansion/location.js +149 -0
- package/dist/tools/expansion/location.js.map +1 -0
- package/dist/tools/expansion/monster.d.ts +12 -0
- package/dist/tools/expansion/monster.d.ts.map +1 -0
- package/dist/tools/expansion/monster.js +157 -0
- package/dist/tools/expansion/monster.js.map +1 -0
- package/dist/tools/expansion/npc.d.ts +12 -0
- package/dist/tools/expansion/npc.d.ts.map +1 -0
- package/dist/tools/expansion/npc.js +153 -0
- package/dist/tools/expansion/npc.js.map +1 -0
- package/dist/tools/generation/archetypes.d.ts +12 -0
- package/dist/tools/generation/archetypes.d.ts.map +1 -0
- package/dist/tools/generation/archetypes.js +129 -0
- package/dist/tools/generation/archetypes.js.map +1 -0
- package/dist/tools/generation/arcs.d.ts +13 -0
- package/dist/tools/generation/arcs.d.ts.map +1 -0
- package/dist/tools/generation/arcs.js +186 -0
- package/dist/tools/generation/arcs.js.map +1 -0
- package/dist/tools/generation/encounters.d.ts +12 -0
- package/dist/tools/generation/encounters.d.ts.map +1 -0
- package/dist/tools/generation/encounters.js +169 -0
- package/dist/tools/generation/encounters.js.map +1 -0
- package/dist/tools/generation/index.d.ts +19 -0
- package/dist/tools/generation/index.d.ts.map +1 -0
- package/dist/tools/generation/index.js +42 -0
- package/dist/tools/generation/index.js.map +1 -0
- package/dist/tools/generation/items.d.ts +12 -0
- package/dist/tools/generation/items.d.ts.map +1 -0
- package/dist/tools/generation/items.js +149 -0
- package/dist/tools/generation/items.js.map +1 -0
- package/dist/tools/generation/locations.d.ts +12 -0
- package/dist/tools/generation/locations.d.ts.map +1 -0
- package/dist/tools/generation/locations.js +131 -0
- package/dist/tools/generation/locations.js.map +1 -0
- package/dist/tools/generation/monsters.d.ts +12 -0
- package/dist/tools/generation/monsters.d.ts.map +1 -0
- package/dist/tools/generation/monsters.js +154 -0
- package/dist/tools/generation/monsters.js.map +1 -0
- package/dist/tools/generation/narrative.d.ts +12 -0
- package/dist/tools/generation/narrative.d.ts.map +1 -0
- package/dist/tools/generation/narrative.js +129 -0
- package/dist/tools/generation/narrative.js.map +1 -0
- package/dist/tools/generation/npcs.d.ts +12 -0
- package/dist/tools/generation/npcs.d.ts.map +1 -0
- package/dist/tools/generation/npcs.js +136 -0
- package/dist/tools/generation/npcs.js.map +1 -0
- package/dist/tools/generation/resume.d.ts +12 -0
- package/dist/tools/generation/resume.d.ts.map +1 -0
- package/dist/tools/generation/resume.js +288 -0
- package/dist/tools/generation/resume.js.map +1 -0
- package/dist/tools/generation/rules-prompt.d.ts +23 -0
- package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
- package/dist/tools/generation/rules-prompt.js +209 -0
- package/dist/tools/generation/rules-prompt.js.map +1 -0
- package/dist/tools/generation/seed.d.ts +12 -0
- package/dist/tools/generation/seed.d.ts.map +1 -0
- package/dist/tools/generation/seed.js +171 -0
- package/dist/tools/generation/seed.js.map +1 -0
- package/dist/tools/generation/situations.d.ts +13 -0
- package/dist/tools/generation/situations.d.ts.map +1 -0
- package/dist/tools/generation/situations.js +247 -0
- package/dist/tools/generation/situations.js.map +1 -0
- package/dist/tools/gm-guidance.d.ts +13 -0
- package/dist/tools/gm-guidance.d.ts.map +1 -0
- package/dist/tools/gm-guidance.js +395 -0
- package/dist/tools/gm-guidance.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +80 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/investigation.d.ts +41 -0
- package/dist/tools/investigation.d.ts.map +1 -0
- package/dist/tools/investigation.js +586 -0
- package/dist/tools/investigation.js.map +1 -0
- package/dist/tools/leads.d.ts +29 -0
- package/dist/tools/leads.d.ts.map +1 -0
- package/dist/tools/leads.js +460 -0
- package/dist/tools/leads.js.map +1 -0
- package/dist/tools/players.d.ts +30 -0
- package/dist/tools/players.d.ts.map +1 -0
- package/dist/tools/players.js +448 -0
- package/dist/tools/players.js.map +1 -0
- package/dist/tools/portable-clues.d.ts +29 -0
- package/dist/tools/portable-clues.d.ts.map +1 -0
- package/dist/tools/portable-clues.js +490 -0
- package/dist/tools/portable-clues.js.map +1 -0
- package/dist/tools/relationships.d.ts +29 -0
- package/dist/tools/relationships.d.ts.map +1 -0
- package/dist/tools/relationships.js +471 -0
- package/dist/tools/relationships.js.map +1 -0
- package/dist/tools/scene-framing.d.ts +21 -0
- package/dist/tools/scene-framing.d.ts.map +1 -0
- package/dist/tools/scene-framing.js +380 -0
- package/dist/tools/scene-framing.js.map +1 -0
- package/dist/tools/sessions.d.ts +30 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +253 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/time.d.ts +26 -0
- package/dist/tools/time.d.ts.map +1 -0
- package/dist/tools/time.js +438 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/turns.d.ts +38 -0
- package/dist/tools/turns.d.ts.map +1 -0
- package/dist/tools/turns.js +560 -0
- package/dist/tools/turns.js.map +1 -0
- package/dist/tools/worldpack/assemble.d.ts +20 -0
- package/dist/tools/worldpack/assemble.d.ts.map +1 -0
- package/dist/tools/worldpack/assemble.js +237 -0
- package/dist/tools/worldpack/assemble.js.map +1 -0
- package/dist/tools/worldpack/docs-generator.d.ts +18 -0
- package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
- package/dist/tools/worldpack/docs-generator.js +264 -0
- package/dist/tools/worldpack/docs-generator.js.map +1 -0
- package/dist/tools/worldpack/export.d.ts +12 -0
- package/dist/tools/worldpack/export.d.ts.map +1 -0
- package/dist/tools/worldpack/export.js +209 -0
- package/dist/tools/worldpack/export.js.map +1 -0
- package/dist/tools/worldpack/index.d.ts +15 -0
- package/dist/tools/worldpack/index.d.ts.map +1 -0
- package/dist/tools/worldpack/index.js +30 -0
- package/dist/tools/worldpack/index.js.map +1 -0
- package/dist/tools/worldpack/lookup.d.ts +19 -0
- package/dist/tools/worldpack/lookup.d.ts.map +1 -0
- package/dist/tools/worldpack/lookup.js +320 -0
- package/dist/tools/worldpack/lookup.js.map +1 -0
- package/dist/tools/worldpack/manage.d.ts +20 -0
- package/dist/tools/worldpack/manage.d.ts.map +1 -0
- package/dist/tools/worldpack/manage.js +101 -0
- package/dist/tools/worldpack/manage.js.map +1 -0
- package/dist/tools/worldpack/save-result.d.ts +12 -0
- package/dist/tools/worldpack/save-result.d.ts.map +1 -0
- package/dist/tools/worldpack/save-result.js +222 -0
- package/dist/tools/worldpack/save-result.js.map +1 -0
- package/dist/tools/worldpack/summary.d.ts +13 -0
- package/dist/tools/worldpack/summary.d.ts.map +1 -0
- package/dist/tools/worldpack/summary.js +180 -0
- package/dist/tools/worldpack/summary.js.map +1 -0
- package/dist/tools/worldpack/validate.d.ts +12 -0
- package/dist/tools/worldpack/validate.d.ts.map +1 -0
- package/dist/tools/worldpack/validate.js +388 -0
- package/dist/tools/worldpack/validate.js.map +1 -0
- 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"}
|