@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,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene Framing Tools
|
|
3
|
+
*
|
|
4
|
+
* Helps with pacing and scene transitions.
|
|
5
|
+
* Based on the Alexandrian principle: "Cut to the next meaningful choice."
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { sessionManager } from "../state/manager.js";
|
|
9
|
+
// Input schemas
|
|
10
|
+
const AnalyzeSceneInput = z.object({
|
|
11
|
+
sessionId: z.string(),
|
|
12
|
+
currentActivity: z.string().describe("What's happening now"),
|
|
13
|
+
playerEnergy: z.enum(["high", "medium", "low"]).describe("GM's read on player engagement"),
|
|
14
|
+
minutesInScene: z.number().min(0).describe("How long the scene has been running"),
|
|
15
|
+
});
|
|
16
|
+
const SuggestSceneCutInput = z.object({
|
|
17
|
+
sessionId: z.string(),
|
|
18
|
+
currentLocation: z.string().describe("Where the scene is taking place"),
|
|
19
|
+
partyIntention: z.string().describe("What the party is trying to do"),
|
|
20
|
+
includeInterruptions: z.boolean().default(true).describe("Whether to suggest interruptions"),
|
|
21
|
+
});
|
|
22
|
+
const FrameSceneInput = z.object({
|
|
23
|
+
sessionId: z.string(),
|
|
24
|
+
locationId: z.string().optional().describe("Location ID for the new scene"),
|
|
25
|
+
locationName: z.string().optional().describe("Location name if no ID"),
|
|
26
|
+
timeOfDay: z.string().optional().describe("Time context (morning, evening, etc.)"),
|
|
27
|
+
mood: z.string().optional().describe("Desired mood for the scene"),
|
|
28
|
+
focusOn: z.array(z.string()).optional().describe("Elements to emphasize"),
|
|
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 time of day description
|
|
41
|
+
*/
|
|
42
|
+
function getTimeOfDay(hour) {
|
|
43
|
+
if (hour >= 5 && hour < 8)
|
|
44
|
+
return "early morning";
|
|
45
|
+
if (hour >= 8 && hour < 12)
|
|
46
|
+
return "morning";
|
|
47
|
+
if (hour >= 12 && hour < 14)
|
|
48
|
+
return "midday";
|
|
49
|
+
if (hour >= 14 && hour < 17)
|
|
50
|
+
return "afternoon";
|
|
51
|
+
if (hour >= 17 && hour < 20)
|
|
52
|
+
return "evening";
|
|
53
|
+
if (hour >= 20 && hour < 23)
|
|
54
|
+
return "night";
|
|
55
|
+
return "late night";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get location from generated content
|
|
59
|
+
*/
|
|
60
|
+
function getLocation(session, locationId) {
|
|
61
|
+
if (!session.generation?.generatedContent?.locations) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const locations = session.generation.generatedContent.locations;
|
|
65
|
+
return locations.find(l => l.id === locationId) || null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* analyze_scene tool
|
|
69
|
+
*/
|
|
70
|
+
export const analyzeSceneTool = {
|
|
71
|
+
name: "analyze_scene",
|
|
72
|
+
description: "Evaluate current scene for pacing issues. Helps identify when to cut or change direction.",
|
|
73
|
+
inputSchema: {
|
|
74
|
+
type: "object",
|
|
75
|
+
properties: {
|
|
76
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
77
|
+
currentActivity: { type: "string", description: "What's happening now" },
|
|
78
|
+
playerEnergy: {
|
|
79
|
+
type: "string",
|
|
80
|
+
enum: ["high", "medium", "low"],
|
|
81
|
+
description: "GM's read on player engagement",
|
|
82
|
+
},
|
|
83
|
+
minutesInScene: { type: "number", minimum: 0, description: "Real-time minutes in scene" },
|
|
84
|
+
},
|
|
85
|
+
required: ["sessionId", "currentActivity", "playerEnergy", "minutesInScene"],
|
|
86
|
+
},
|
|
87
|
+
handler: async (args) => {
|
|
88
|
+
const input = AnalyzeSceneInput.parse(args);
|
|
89
|
+
const session = await sessionManager.get(input.sessionId);
|
|
90
|
+
if (!session) {
|
|
91
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
92
|
+
}
|
|
93
|
+
const activityLower = input.currentActivity.toLowerCase();
|
|
94
|
+
// Detect scene type
|
|
95
|
+
const isCombat = activityLower.includes("combat") || activityLower.includes("fight") || session.combat !== null;
|
|
96
|
+
const isInvestigation = activityLower.includes("search") || activityLower.includes("investigate") || activityLower.includes("look");
|
|
97
|
+
const isConversation = activityLower.includes("talk") || activityLower.includes("conversation") || activityLower.includes("negotiate");
|
|
98
|
+
const isTravel = activityLower.includes("travel") || activityLower.includes("journey") || activityLower.includes("walk");
|
|
99
|
+
// Pacing thresholds (in real-time minutes)
|
|
100
|
+
const thresholds = {
|
|
101
|
+
combat: { normal: 20, long: 35 },
|
|
102
|
+
investigation: { normal: 15, long: 25 },
|
|
103
|
+
conversation: { normal: 10, long: 20 },
|
|
104
|
+
travel: { normal: 5, long: 10 },
|
|
105
|
+
default: { normal: 15, long: 25 },
|
|
106
|
+
};
|
|
107
|
+
let sceneType = "default";
|
|
108
|
+
if (isCombat)
|
|
109
|
+
sceneType = "combat";
|
|
110
|
+
else if (isInvestigation)
|
|
111
|
+
sceneType = "investigation";
|
|
112
|
+
else if (isConversation)
|
|
113
|
+
sceneType = "conversation";
|
|
114
|
+
else if (isTravel)
|
|
115
|
+
sceneType = "travel";
|
|
116
|
+
const threshold = thresholds[sceneType];
|
|
117
|
+
// Calculate pacing status
|
|
118
|
+
let pacing;
|
|
119
|
+
if (input.minutesInScene < 3) {
|
|
120
|
+
pacing = "rushed";
|
|
121
|
+
}
|
|
122
|
+
else if (input.minutesInScene > threshold.long || (input.minutesInScene > threshold.normal && input.playerEnergy === "low")) {
|
|
123
|
+
pacing = "dragging";
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
pacing = "good";
|
|
127
|
+
}
|
|
128
|
+
// Generate suggestions based on analysis
|
|
129
|
+
const suggestions = [];
|
|
130
|
+
if (pacing === "dragging") {
|
|
131
|
+
if (isConversation) {
|
|
132
|
+
suggestions.push("Have the NPC make a decision, reveal something, or end the conversation");
|
|
133
|
+
suggestions.push("Interrupt with an external event (noise, arrival, urgent message)");
|
|
134
|
+
}
|
|
135
|
+
else if (isInvestigation) {
|
|
136
|
+
suggestions.push("Provide a definitive clue or confirm there's nothing more here");
|
|
137
|
+
suggestions.push("Introduce a complication (someone notices them, time pressure)");
|
|
138
|
+
}
|
|
139
|
+
else if (isTravel) {
|
|
140
|
+
suggestions.push("Skip ahead: 'After an uneventful journey, you arrive...'");
|
|
141
|
+
suggestions.push("Interrupt with an encounter only if it advances the story");
|
|
142
|
+
}
|
|
143
|
+
else if (isCombat) {
|
|
144
|
+
suggestions.push("Have enemies retreat, surrender, or the environment change");
|
|
145
|
+
suggestions.push("Describe a decisive moment that could end things");
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
suggestions.push("Identify the next meaningful choice and cut to it");
|
|
149
|
+
suggestions.push("Ask 'What are you trying to accomplish?' to refocus");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else if (pacing === "rushed") {
|
|
153
|
+
suggestions.push("Let the moment breathe - not everything needs immediate resolution");
|
|
154
|
+
suggestions.push("Add sensory details to ground the scene");
|
|
155
|
+
}
|
|
156
|
+
// Check for clock pressure
|
|
157
|
+
const clockPressure = (session.activeClocks || []).length > 0;
|
|
158
|
+
if (clockPressure && pacing !== "rushed") {
|
|
159
|
+
suggestions.push("Reminder: Active clocks running - consider time pressure");
|
|
160
|
+
}
|
|
161
|
+
// Low energy specific suggestions
|
|
162
|
+
if (input.playerEnergy === "low" && pacing !== "rushed") {
|
|
163
|
+
suggestions.push("Players seem disengaged - consider a dramatic reveal or action beat");
|
|
164
|
+
suggestions.push("Ask players what they want to focus on next");
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
sceneType,
|
|
168
|
+
pacing,
|
|
169
|
+
analysis: {
|
|
170
|
+
minutesInScene: input.minutesInScene,
|
|
171
|
+
playerEnergy: input.playerEnergy,
|
|
172
|
+
thresholdNormal: threshold.normal,
|
|
173
|
+
thresholdLong: threshold.long,
|
|
174
|
+
},
|
|
175
|
+
suggestions,
|
|
176
|
+
recommendation: pacing === "dragging"
|
|
177
|
+
? "Consider cutting to the next meaningful choice"
|
|
178
|
+
: pacing === "rushed"
|
|
179
|
+
? "Let the scene develop before moving on"
|
|
180
|
+
: "Pacing is good - continue as needed",
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* suggest_scene_cut tool
|
|
186
|
+
*/
|
|
187
|
+
export const suggestSceneCutTool = {
|
|
188
|
+
name: "suggest_scene_cut",
|
|
189
|
+
description: "Recommend how to transition to the next meaningful moment.",
|
|
190
|
+
inputSchema: {
|
|
191
|
+
type: "object",
|
|
192
|
+
properties: {
|
|
193
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
194
|
+
currentLocation: { type: "string", description: "Where the scene is taking place" },
|
|
195
|
+
partyIntention: { type: "string", description: "What the party is trying to do" },
|
|
196
|
+
includeInterruptions: { type: "boolean", description: "Include interruption suggestions" },
|
|
197
|
+
},
|
|
198
|
+
required: ["sessionId", "currentLocation", "partyIntention"],
|
|
199
|
+
},
|
|
200
|
+
handler: async (args) => {
|
|
201
|
+
const input = SuggestSceneCutInput.parse(args);
|
|
202
|
+
const session = await sessionManager.get(input.sessionId);
|
|
203
|
+
if (!session) {
|
|
204
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
205
|
+
}
|
|
206
|
+
const intentionLower = input.partyIntention.toLowerCase();
|
|
207
|
+
// Determine likely destination/outcome
|
|
208
|
+
let cutTo;
|
|
209
|
+
let transition;
|
|
210
|
+
let meaningfulChoice;
|
|
211
|
+
if (intentionLower.includes("travel") || intentionLower.includes("go to") || intentionLower.includes("head to")) {
|
|
212
|
+
// Travel intention - cut to arrival
|
|
213
|
+
const destination = input.partyIntention.replace(/.*(?:travel|go|head) (?:to|toward) /i, "").trim() || "destination";
|
|
214
|
+
cutTo = `Arrival at ${destination}`;
|
|
215
|
+
transition = `After an uneventful journey, you arrive at ${destination}...`;
|
|
216
|
+
meaningfulChoice = "How do you approach? What's the first thing you do?";
|
|
217
|
+
}
|
|
218
|
+
else if (intentionLower.includes("rest") || intentionLower.includes("sleep") || intentionLower.includes("camp")) {
|
|
219
|
+
// Rest intention - cut to morning or interruption
|
|
220
|
+
cutTo = "End of rest period";
|
|
221
|
+
transition = "The night passes. As dawn breaks...";
|
|
222
|
+
meaningfulChoice = "A new day begins. What's your first priority?";
|
|
223
|
+
}
|
|
224
|
+
else if (intentionLower.includes("wait") || intentionLower.includes("watch") || intentionLower.includes("stake out")) {
|
|
225
|
+
// Waiting intention - cut to the event or confirm nothing happens
|
|
226
|
+
cutTo = "Result of the watch";
|
|
227
|
+
transition = "Time passes. Eventually...";
|
|
228
|
+
meaningfulChoice = "Something approaches / Nothing happens - what's your next move?";
|
|
229
|
+
}
|
|
230
|
+
else if (intentionLower.includes("search") || intentionLower.includes("look for") || intentionLower.includes("investigate")) {
|
|
231
|
+
// Search intention - cut to finding or exhausting options
|
|
232
|
+
cutTo = "Search complete";
|
|
233
|
+
transition = "After thorough searching...";
|
|
234
|
+
meaningfulChoice = "You find [X] / You've searched everywhere. What now?";
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Generic intention - identify the obstacle or outcome
|
|
238
|
+
cutTo = "Next obstacle or decision point";
|
|
239
|
+
transition = "Moving forward...";
|
|
240
|
+
meaningfulChoice = "You encounter [obstacle/choice]. How do you proceed?";
|
|
241
|
+
}
|
|
242
|
+
// Generate interruption options if requested
|
|
243
|
+
const interruptions = [];
|
|
244
|
+
if (input.includeInterruptions) {
|
|
245
|
+
// Check for active clocks
|
|
246
|
+
if (session.activeClocks && session.activeClocks.length > 0) {
|
|
247
|
+
const clock = session.activeClocks[0];
|
|
248
|
+
interruptions.push({
|
|
249
|
+
type: "clock_event",
|
|
250
|
+
description: `Clock '${clock.name}' advances - signs of ${clock.doom} become visible`,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
// Generic interruption options
|
|
254
|
+
interruptions.push({
|
|
255
|
+
type: "arrival",
|
|
256
|
+
description: "Someone arrives with urgent news or a demand",
|
|
257
|
+
});
|
|
258
|
+
interruptions.push({
|
|
259
|
+
type: "discovery",
|
|
260
|
+
description: "They notice something unexpected in the environment",
|
|
261
|
+
});
|
|
262
|
+
interruptions.push({
|
|
263
|
+
type: "complication",
|
|
264
|
+
description: "An obstacle or enemy appears",
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
// Check discovered leads for potential hooks
|
|
268
|
+
const leadHooks = [];
|
|
269
|
+
if (session.discoveredLeads && session.discoveredLeads.length > 0) {
|
|
270
|
+
const recentLeads = session.discoveredLeads.slice(-3);
|
|
271
|
+
for (const lead of recentLeads) {
|
|
272
|
+
leadHooks.push(`Follow up on: "${lead.information}"`);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
currentLocation: input.currentLocation,
|
|
277
|
+
partyIntention: input.partyIntention,
|
|
278
|
+
suggestion: {
|
|
279
|
+
cutTo,
|
|
280
|
+
transition,
|
|
281
|
+
meaningfulChoice,
|
|
282
|
+
},
|
|
283
|
+
interruptions: input.includeInterruptions ? interruptions : undefined,
|
|
284
|
+
availableHooks: leadHooks.length > 0 ? leadHooks : undefined,
|
|
285
|
+
tip: "The best cuts skip empty time while landing on moments where player choice matters.",
|
|
286
|
+
};
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* frame_scene tool
|
|
291
|
+
*/
|
|
292
|
+
export const frameSceneTool = {
|
|
293
|
+
name: "frame_scene",
|
|
294
|
+
description: "Generate an opening description for a new scene. Uses location data and tone.",
|
|
295
|
+
inputSchema: {
|
|
296
|
+
type: "object",
|
|
297
|
+
properties: {
|
|
298
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
299
|
+
locationId: { type: "string", description: "Location ID from world pack" },
|
|
300
|
+
locationName: { type: "string", description: "Location name if no ID" },
|
|
301
|
+
timeOfDay: { type: "string", description: "Time context (optional)" },
|
|
302
|
+
mood: { type: "string", description: "Desired mood (optional)" },
|
|
303
|
+
focusOn: {
|
|
304
|
+
type: "array",
|
|
305
|
+
items: { type: "string" },
|
|
306
|
+
description: "Elements to emphasize (optional)",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
required: ["sessionId"],
|
|
310
|
+
},
|
|
311
|
+
handler: async (args) => {
|
|
312
|
+
const input = FrameSceneInput.parse(args);
|
|
313
|
+
const session = await sessionManager.get(input.sessionId);
|
|
314
|
+
if (!session) {
|
|
315
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
316
|
+
}
|
|
317
|
+
// Get location details if ID provided
|
|
318
|
+
let location = null;
|
|
319
|
+
if (input.locationId) {
|
|
320
|
+
location = getLocation(session, input.locationId);
|
|
321
|
+
}
|
|
322
|
+
const locationName = location?.name || input.locationName || "the area";
|
|
323
|
+
const timeOfDay = input.timeOfDay || getTimeOfDay(session.gameTime.hour);
|
|
324
|
+
// Build sensory elements
|
|
325
|
+
const sensoryDetails = [];
|
|
326
|
+
if (location) {
|
|
327
|
+
// Use location atmosphere
|
|
328
|
+
sensoryDetails.push(`Atmosphere: ${location.atmosphere}`);
|
|
329
|
+
// Add features
|
|
330
|
+
if (location.features && location.features.length > 0) {
|
|
331
|
+
sensoryDetails.push(`Features: ${location.features.slice(0, 3).join(", ")}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Add time-based sensory hints
|
|
335
|
+
const timeDetails = {
|
|
336
|
+
"early morning": "The air is cool, dew still clinging to surfaces. Early light casts long shadows.",
|
|
337
|
+
"morning": "Bright daylight illuminates the area. The day's activity is building.",
|
|
338
|
+
"midday": "The sun is high, shadows at their shortest. Heat radiates from exposed surfaces.",
|
|
339
|
+
"afternoon": "Golden afternoon light slants across the scene. The day begins to wind down.",
|
|
340
|
+
"evening": "Sunset colors paint the sky. Shadows lengthen as darkness approaches.",
|
|
341
|
+
"night": "Darkness has fallen. Torchlight or moonlight provides the only illumination.",
|
|
342
|
+
"late night": "Deep night. The world is quiet, sounds carrying far in the stillness.",
|
|
343
|
+
};
|
|
344
|
+
if (timeDetails[timeOfDay]) {
|
|
345
|
+
sensoryDetails.push(`Time: ${timeDetails[timeOfDay]}`);
|
|
346
|
+
}
|
|
347
|
+
// Build the framing components
|
|
348
|
+
const framingElements = {
|
|
349
|
+
location: locationName,
|
|
350
|
+
timeContext: `${formatGameTime(session.gameTime)} - ${timeOfDay}`,
|
|
351
|
+
atmosphere: location?.atmosphere || input.mood || "neutral",
|
|
352
|
+
sensory: sensoryDetails,
|
|
353
|
+
};
|
|
354
|
+
// Generate description structure
|
|
355
|
+
const descriptionTemplate = {
|
|
356
|
+
opening: `You arrive at ${locationName} as ${timeOfDay} settles in.`,
|
|
357
|
+
atmosphere: location?.atmosphere || "The atmosphere is expectant.",
|
|
358
|
+
details: location?.features?.slice(0, 2).join(". ") || "Take in your surroundings.",
|
|
359
|
+
focus: input.focusOn ? `You notice: ${input.focusOn.join(", ")}` : undefined,
|
|
360
|
+
};
|
|
361
|
+
// Generate prompt for players
|
|
362
|
+
const prompts = [
|
|
363
|
+
"What catches your attention first?",
|
|
364
|
+
"How do you approach?",
|
|
365
|
+
"What's your first move?",
|
|
366
|
+
];
|
|
367
|
+
return {
|
|
368
|
+
framing: framingElements,
|
|
369
|
+
description: descriptionTemplate,
|
|
370
|
+
promptForPlayers: prompts[Math.floor(Math.random() * prompts.length)],
|
|
371
|
+
tip: "Establish the scene quickly, then ask what they do. Don't over-describe before players engage.",
|
|
372
|
+
};
|
|
373
|
+
},
|
|
374
|
+
};
|
|
375
|
+
export const sceneFramingTools = [
|
|
376
|
+
analyzeSceneTool,
|
|
377
|
+
suggestSceneCutTool,
|
|
378
|
+
frameSceneTool,
|
|
379
|
+
];
|
|
380
|
+
//# sourceMappingURL=scene-framing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-framing.js","sourceRoot":"","sources":["../../src/tools/scene-framing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session tools - session management and notes
|
|
3
|
+
*/
|
|
4
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
5
|
+
/**
|
|
6
|
+
* create_session tool
|
|
7
|
+
*/
|
|
8
|
+
export declare const createSessionTool: MCPToolEntry;
|
|
9
|
+
/**
|
|
10
|
+
* get_session tool
|
|
11
|
+
*/
|
|
12
|
+
export declare const getSessionTool: MCPToolEntry;
|
|
13
|
+
/**
|
|
14
|
+
* list_sessions tool
|
|
15
|
+
*/
|
|
16
|
+
export declare const listSessionsTool: MCPToolEntry;
|
|
17
|
+
/**
|
|
18
|
+
* add_note tool
|
|
19
|
+
*/
|
|
20
|
+
export declare const addNoteTool: MCPToolEntry;
|
|
21
|
+
/**
|
|
22
|
+
* search_notes tool
|
|
23
|
+
*/
|
|
24
|
+
export declare const searchNotesTool: MCPToolEntry;
|
|
25
|
+
/**
|
|
26
|
+
* delete_session tool
|
|
27
|
+
*/
|
|
28
|
+
export declare const deleteSessionTool: MCPToolEntry;
|
|
29
|
+
export declare const sessionTools: MCPToolEntry[];
|
|
30
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/tools/sessions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAC;AA+BpE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAsC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAwC5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YA8B9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,YAuCzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAwC7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YA0B/B,CAAC;AAEF,eAAO,MAAM,YAAY,gBAOxB,CAAC"}
|