@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,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encounter Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates encounters based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { sessionManager, readManifest, writeManifest, addManifestStep, } from "../../state/manager.js";
|
|
9
|
+
import { buildRulesPromptSection } from "./rules-prompt.js";
|
|
10
|
+
const GenerateEncountersInput = z.object({
|
|
11
|
+
sessionId: z.string(),
|
|
12
|
+
count: z.number().min(1).max(30).optional().default(12).describe("Number of encounters to generate"),
|
|
13
|
+
types: z.array(z.enum(["combat", "event", "social"])).optional().describe("Encounter types to include"),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* generate_encounters tool
|
|
17
|
+
*/
|
|
18
|
+
export const generateEncountersTool = {
|
|
19
|
+
name: "generate_encounters",
|
|
20
|
+
description: "Generate encounters based on the world seed. Returns a prompt for LLM execution.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
25
|
+
count: { type: "number", description: "Number of encounters to generate (default: 12)" },
|
|
26
|
+
types: {
|
|
27
|
+
type: "array",
|
|
28
|
+
items: { type: "string", enum: ["combat", "event", "social"] },
|
|
29
|
+
description: "Encounter types to include"
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["sessionId"],
|
|
33
|
+
},
|
|
34
|
+
handler: async (args) => {
|
|
35
|
+
const input = GenerateEncountersInput.parse(args);
|
|
36
|
+
const session = await sessionManager.get(input.sessionId);
|
|
37
|
+
if (!session) {
|
|
38
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
39
|
+
}
|
|
40
|
+
if (!session.generation?.worldSeed) {
|
|
41
|
+
throw new Error("World seed not found. Call generate_world_seed first.");
|
|
42
|
+
}
|
|
43
|
+
const worldSeed = session.generation.worldSeed;
|
|
44
|
+
const stepId = randomUUID();
|
|
45
|
+
const count = input.count || 12;
|
|
46
|
+
const types = input.types || ["combat", "event", "social"];
|
|
47
|
+
// Record the generation step
|
|
48
|
+
session.generation.history.push({
|
|
49
|
+
id: stepId,
|
|
50
|
+
type: "encounters",
|
|
51
|
+
startedAt: new Date().toISOString(),
|
|
52
|
+
completedAt: null,
|
|
53
|
+
status: "in_progress",
|
|
54
|
+
generatedIds: [],
|
|
55
|
+
});
|
|
56
|
+
session.generation.status = "generating";
|
|
57
|
+
await sessionManager.save(session);
|
|
58
|
+
// Update manifest
|
|
59
|
+
const manifest = await readManifest(input.sessionId);
|
|
60
|
+
if (manifest) {
|
|
61
|
+
addManifestStep(manifest, "encounters", "encounters.json");
|
|
62
|
+
manifest.status = "generating";
|
|
63
|
+
await writeManifest(input.sessionId, manifest);
|
|
64
|
+
}
|
|
65
|
+
// Build rules section from seed (uses defaults if no custom rules)
|
|
66
|
+
const rulesSection = buildRulesPromptSection(worldSeed.rules);
|
|
67
|
+
const systemPrompt = `You are an encounter designer for tabletop RPGs. Create varied, engaging encounters that challenge players in different ways.
|
|
68
|
+
|
|
69
|
+
${rulesSection}
|
|
70
|
+
|
|
71
|
+
### Encounter Types
|
|
72
|
+
- Combat: Fights with monsters, enemies, or environmental hazards
|
|
73
|
+
- Event: Skill challenges, puzzles, traps, or environmental obstacles
|
|
74
|
+
- Social: Negotiations, interrogations, persuasion, or roleplay scenarios
|
|
75
|
+
|
|
76
|
+
### Encounter Design Guidelines
|
|
77
|
+
- Combat encounters reference monsters by ID (monster:slug-name)
|
|
78
|
+
- Social encounters reference NPCs by ID (npc:slug-name)
|
|
79
|
+
- Event encounters have choices with skill tests (use abilities and difficulties from rules above)
|
|
80
|
+
- Include GM guidance and multiple possible outcomes
|
|
81
|
+
|
|
82
|
+
Output valid JSON only.`;
|
|
83
|
+
// Calculate distribution
|
|
84
|
+
const distribution = {};
|
|
85
|
+
const perType = Math.floor(count / types.length);
|
|
86
|
+
const remainder = count % types.length;
|
|
87
|
+
types.forEach((type, i) => {
|
|
88
|
+
distribution[type] = perType + (i < remainder ? 1 : 0);
|
|
89
|
+
});
|
|
90
|
+
const userPrompt = `Generate ${count} encounters for this world:
|
|
91
|
+
|
|
92
|
+
World: ${worldSeed.name}
|
|
93
|
+
Tone: ${worldSeed.aesthetic.tone}
|
|
94
|
+
Core Conflict: ${worldSeed.coreConflict}
|
|
95
|
+
Lethality: ${worldSeed.settings.lethality}
|
|
96
|
+
Supernatural Presence: ${worldSeed.settings.supernaturalPresence}
|
|
97
|
+
|
|
98
|
+
Locations where encounters might occur:
|
|
99
|
+
${worldSeed.locationSeeds.map(l => `- ${l.name}: ${l.concept}`).join("\n")}
|
|
100
|
+
|
|
101
|
+
Monsters available:
|
|
102
|
+
${worldSeed.monsterSeeds.map(m => `- ${m.name} (${m.threat}): ${m.concept}`).join("\n")}
|
|
103
|
+
|
|
104
|
+
NPCs available:
|
|
105
|
+
${worldSeed.npcSeeds.map(n => `- ${n.name}: ${n.concept}`).join("\n")}
|
|
106
|
+
|
|
107
|
+
Encounter distribution:
|
|
108
|
+
${Object.entries(distribution).map(([type, n]) => `- ${type}: ${n} encounters`).join("\n")}
|
|
109
|
+
|
|
110
|
+
Output a JSON object:
|
|
111
|
+
{
|
|
112
|
+
"encounters": [
|
|
113
|
+
{
|
|
114
|
+
"id": "encounter:slug-name",
|
|
115
|
+
"name": "Encounter Name",
|
|
116
|
+
"type": "combat|event|social",
|
|
117
|
+
"description": "What this encounter is about",
|
|
118
|
+
"text": "Narrative text when encounter begins (read-aloud)",
|
|
119
|
+
"gmGuidance": "Tips for running this encounter",
|
|
120
|
+
"outcomes": ["Possible outcome 1", "Possible outcome 2", "Possible outcome 3"],
|
|
121
|
+
"combat": {
|
|
122
|
+
"monsters": [
|
|
123
|
+
{ "monsterId": "monster:slug-name", "count": 2 }
|
|
124
|
+
],
|
|
125
|
+
"surprise": "none|enemies|party",
|
|
126
|
+
"environment": {
|
|
127
|
+
"lighting": "bright|dim|dark",
|
|
128
|
+
"terrain": "open|cramped|hazardous",
|
|
129
|
+
"hazards": ["optional hazard descriptions"]
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"event": {
|
|
133
|
+
"choices": [
|
|
134
|
+
{
|
|
135
|
+
"text": "Choice description",
|
|
136
|
+
"test": { "ability": "STR|AGI|WIT|CON", "difficulty": 12 },
|
|
137
|
+
"successOutcome": "What happens on success",
|
|
138
|
+
"failureOutcome": "What happens on failure"
|
|
139
|
+
}
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"social": {
|
|
143
|
+
"npcIds": ["npc:slug-name"],
|
|
144
|
+
"initialAttitude": "friendly|neutral|hostile",
|
|
145
|
+
"negotiable": true
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
Notes:
|
|
152
|
+
- Include combat object only for combat encounters
|
|
153
|
+
- Include event object only for event encounters
|
|
154
|
+
- Include social object only for social encounters
|
|
155
|
+
|
|
156
|
+
Return ONLY the JSON object, no markdown formatting.`;
|
|
157
|
+
return {
|
|
158
|
+
prompt: {
|
|
159
|
+
system: systemPrompt,
|
|
160
|
+
user: userPrompt,
|
|
161
|
+
outputSchemaName: "WorldEncounter[]",
|
|
162
|
+
},
|
|
163
|
+
stepId,
|
|
164
|
+
message: `Encounter generation initiated for ${count} encounters. Execute the prompt and call save_generation_result.`,
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
export const encounterTools = [generateEncountersTool];
|
|
169
|
+
//# sourceMappingURL=encounters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encounters.js","sourceRoot":"","sources":["../../../src/tools/generation/encounters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generation tools - world content generation
|
|
3
|
+
*/
|
|
4
|
+
export { seedTools, generateWorldSeedTool } from "./seed.js";
|
|
5
|
+
export { archetypeTools, generateArchetypesTool } from "./archetypes.js";
|
|
6
|
+
export { monsterTools, generateMonstersTool } from "./monsters.js";
|
|
7
|
+
export { itemTools, generateItemsTool } from "./items.js";
|
|
8
|
+
export { encounterTools, generateEncountersTool } from "./encounters.js";
|
|
9
|
+
export { locationTools, generateLocationsTool } from "./locations.js";
|
|
10
|
+
export { npcTools, generateNPCsTool } from "./npcs.js";
|
|
11
|
+
export { narrativeTools, generateNarrativeTool } from "./narrative.js";
|
|
12
|
+
export { situationTools, generateSituationsTool } from "./situations.js";
|
|
13
|
+
export { arcTools, generateArcsTool } from "./arcs.js";
|
|
14
|
+
export { resumeTools, resumeGenerationTool } from "./resume.js";
|
|
15
|
+
/**
|
|
16
|
+
* All generation tools
|
|
17
|
+
*/
|
|
18
|
+
export declare const generationTools: import("@mythxengine/types").MCPToolEntry[];
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAchE;;GAEG;AACH,eAAO,MAAM,eAAe,6CAY3B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generation tools - world content generation
|
|
3
|
+
*/
|
|
4
|
+
export { seedTools, generateWorldSeedTool } from "./seed.js";
|
|
5
|
+
export { archetypeTools, generateArchetypesTool } from "./archetypes.js";
|
|
6
|
+
export { monsterTools, generateMonstersTool } from "./monsters.js";
|
|
7
|
+
export { itemTools, generateItemsTool } from "./items.js";
|
|
8
|
+
export { encounterTools, generateEncountersTool } from "./encounters.js";
|
|
9
|
+
export { locationTools, generateLocationsTool } from "./locations.js";
|
|
10
|
+
export { npcTools, generateNPCsTool } from "./npcs.js";
|
|
11
|
+
export { narrativeTools, generateNarrativeTool } from "./narrative.js";
|
|
12
|
+
export { situationTools, generateSituationsTool } from "./situations.js";
|
|
13
|
+
export { arcTools, generateArcsTool } from "./arcs.js";
|
|
14
|
+
export { resumeTools, resumeGenerationTool } from "./resume.js";
|
|
15
|
+
import { seedTools } from "./seed.js";
|
|
16
|
+
import { archetypeTools } from "./archetypes.js";
|
|
17
|
+
import { monsterTools } from "./monsters.js";
|
|
18
|
+
import { itemTools } from "./items.js";
|
|
19
|
+
import { encounterTools } from "./encounters.js";
|
|
20
|
+
import { locationTools } from "./locations.js";
|
|
21
|
+
import { npcTools } from "./npcs.js";
|
|
22
|
+
import { narrativeTools } from "./narrative.js";
|
|
23
|
+
import { situationTools } from "./situations.js";
|
|
24
|
+
import { arcTools } from "./arcs.js";
|
|
25
|
+
import { resumeTools } from "./resume.js";
|
|
26
|
+
/**
|
|
27
|
+
* All generation tools
|
|
28
|
+
*/
|
|
29
|
+
export const generationTools = [
|
|
30
|
+
...seedTools,
|
|
31
|
+
...archetypeTools,
|
|
32
|
+
...monsterTools,
|
|
33
|
+
...itemTools,
|
|
34
|
+
...encounterTools,
|
|
35
|
+
...locationTools,
|
|
36
|
+
...npcTools,
|
|
37
|
+
...narrativeTools,
|
|
38
|
+
...situationTools,
|
|
39
|
+
...arcTools,
|
|
40
|
+
...resumeTools,
|
|
41
|
+
];
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/generation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,aAAa;IAChB,GAAG,QAAQ;IACX,GAAG,cAAc;IACjB,GAAG,cAAc;IACjB,GAAG,QAAQ;IACX,GAAG,WAAW;CACf,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Item Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates items based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
7
|
+
/**
|
|
8
|
+
* generate_items tool
|
|
9
|
+
*/
|
|
10
|
+
export declare const generateItemsTool: MCPToolEntry;
|
|
11
|
+
export declare const itemTools: MCPToolEntry[];
|
|
12
|
+
//# sourceMappingURL=items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/items.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAezE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAmJ/B,CAAC;AAEF,eAAO,MAAM,SAAS,gBAAsB,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Item Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates items based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { sessionManager, readManifest, writeManifest, addManifestStep, } from "../../state/manager.js";
|
|
9
|
+
import { buildRulesPromptSection } from "./rules-prompt.js";
|
|
10
|
+
const GenerateItemsInput = z.object({
|
|
11
|
+
sessionId: z.string(),
|
|
12
|
+
count: z.number().min(1).max(50).optional().default(20).describe("Number of items to generate"),
|
|
13
|
+
kinds: z.array(z.enum(["weapon", "armor", "consumable", "special", "misc"])).optional().describe("Item kinds to include"),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* generate_items tool
|
|
17
|
+
*/
|
|
18
|
+
export const generateItemsTool = {
|
|
19
|
+
name: "generate_items",
|
|
20
|
+
description: "Generate items based on the world seed. Returns a prompt for LLM execution.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
25
|
+
count: { type: "number", description: "Number of items to generate (default: 20)" },
|
|
26
|
+
kinds: {
|
|
27
|
+
type: "array",
|
|
28
|
+
items: { type: "string", enum: ["weapon", "armor", "consumable", "special", "misc"] },
|
|
29
|
+
description: "Item kinds to include"
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["sessionId"],
|
|
33
|
+
},
|
|
34
|
+
handler: async (args) => {
|
|
35
|
+
const input = GenerateItemsInput.parse(args);
|
|
36
|
+
const session = await sessionManager.get(input.sessionId);
|
|
37
|
+
if (!session) {
|
|
38
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
39
|
+
}
|
|
40
|
+
if (!session.generation?.worldSeed) {
|
|
41
|
+
throw new Error("World seed not found. Call generate_world_seed first.");
|
|
42
|
+
}
|
|
43
|
+
const worldSeed = session.generation.worldSeed;
|
|
44
|
+
const stepId = randomUUID();
|
|
45
|
+
const count = input.count || 20;
|
|
46
|
+
const kinds = input.kinds || ["weapon", "armor", "consumable", "special", "misc"];
|
|
47
|
+
// Record the generation step
|
|
48
|
+
session.generation.history.push({
|
|
49
|
+
id: stepId,
|
|
50
|
+
type: "items",
|
|
51
|
+
startedAt: new Date().toISOString(),
|
|
52
|
+
completedAt: null,
|
|
53
|
+
status: "in_progress",
|
|
54
|
+
generatedIds: [],
|
|
55
|
+
});
|
|
56
|
+
session.generation.status = "generating";
|
|
57
|
+
await sessionManager.save(session);
|
|
58
|
+
// Update manifest
|
|
59
|
+
const manifest = await readManifest(input.sessionId);
|
|
60
|
+
if (manifest) {
|
|
61
|
+
addManifestStep(manifest, "items", "items.json");
|
|
62
|
+
manifest.status = "generating";
|
|
63
|
+
await writeManifest(input.sessionId, manifest);
|
|
64
|
+
}
|
|
65
|
+
// Build rules section from seed (uses defaults if no custom rules)
|
|
66
|
+
const rulesSection = buildRulesPromptSection(worldSeed.rules);
|
|
67
|
+
const systemPrompt = `You are an item designer for tabletop RPGs. Create thematic, useful items that fit the world and support different playstyles.
|
|
68
|
+
|
|
69
|
+
${rulesSection}
|
|
70
|
+
|
|
71
|
+
### Item Design Guidelines
|
|
72
|
+
- Weapons use damage dice (d4=light, d6=standard, d8=heavy, d10=two-handed, d12=devastating)
|
|
73
|
+
- Weapons specify which ability they use for attacks (reference the abilities above)
|
|
74
|
+
- Armor provides damage reduction (1=light, 2=medium, 3=heavy)
|
|
75
|
+
- Consumables have limited uses and clear effects
|
|
76
|
+
- Items should reference the world's technology level and aesthetic
|
|
77
|
+
- Include items that support each archetype's playstyle
|
|
78
|
+
|
|
79
|
+
Output valid JSON only.`;
|
|
80
|
+
// Calculate distribution
|
|
81
|
+
const distribution = {};
|
|
82
|
+
const perKind = Math.floor(count / kinds.length);
|
|
83
|
+
const remainder = count % kinds.length;
|
|
84
|
+
kinds.forEach((kind, i) => {
|
|
85
|
+
distribution[kind] = perKind + (i < remainder ? 1 : 0);
|
|
86
|
+
});
|
|
87
|
+
const userPrompt = `Generate ${count} items for this world:
|
|
88
|
+
|
|
89
|
+
World: ${worldSeed.name}
|
|
90
|
+
Tone: ${worldSeed.aesthetic.tone}
|
|
91
|
+
Technology Level: ${worldSeed.settings.technologyLevel}
|
|
92
|
+
Magic Level: ${worldSeed.settings.magicLevel}
|
|
93
|
+
Lethality: ${worldSeed.settings.lethality}
|
|
94
|
+
|
|
95
|
+
Archetypes that need equipment:
|
|
96
|
+
${worldSeed.archetypeSeeds.map(a => `- ${a.name}: ${a.concept}`).join("\n")}
|
|
97
|
+
|
|
98
|
+
Item distribution:
|
|
99
|
+
${Object.entries(distribution).map(([kind, n]) => `- ${kind}: ${n} items`).join("\n")}
|
|
100
|
+
|
|
101
|
+
Output a JSON object:
|
|
102
|
+
{
|
|
103
|
+
"items": [
|
|
104
|
+
{
|
|
105
|
+
"id": "item:slug-name",
|
|
106
|
+
"name": "Item Name",
|
|
107
|
+
"kind": "weapon|armor|consumable|special|misc",
|
|
108
|
+
"description": "What the item is and does",
|
|
109
|
+
"flavor": "Evocative description or lore",
|
|
110
|
+
"tags": ["melee", "ranged", "magical", "etc"],
|
|
111
|
+
"slots": 1,
|
|
112
|
+
"weapon": {
|
|
113
|
+
"damage": "d6",
|
|
114
|
+
"ability": "STR|AGI|WIT|CON",
|
|
115
|
+
"properties": ["optional", "tags"]
|
|
116
|
+
},
|
|
117
|
+
"armor": {
|
|
118
|
+
"damageReduction": 1,
|
|
119
|
+
"properties": ["optional", "tags"]
|
|
120
|
+
},
|
|
121
|
+
"consumable": {
|
|
122
|
+
"uses": 1,
|
|
123
|
+
"effect": "mechanical effect",
|
|
124
|
+
"effectDescription": "narrative description"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
Notes:
|
|
131
|
+
- Include weapon object only for weapons
|
|
132
|
+
- Include armor object only for armor
|
|
133
|
+
- Include consumable object only for consumables
|
|
134
|
+
- special and misc items have no subtype objects
|
|
135
|
+
|
|
136
|
+
Return ONLY the JSON object, no markdown formatting.`;
|
|
137
|
+
return {
|
|
138
|
+
prompt: {
|
|
139
|
+
system: systemPrompt,
|
|
140
|
+
user: userPrompt,
|
|
141
|
+
outputSchemaName: "WorldItem[]",
|
|
142
|
+
},
|
|
143
|
+
stepId,
|
|
144
|
+
message: `Item generation initiated for ${count} items. Execute the prompt and call save_generation_result.`,
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
export const itemTools = [generateItemsTool];
|
|
149
|
+
//# sourceMappingURL=items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/tools/generation/items.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC/F,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC1H,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,6EAA6E;IAC1F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACnF,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;gBACrF,WAAW,EAAE,uBAAuB;aACrC;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,SAOpC,CAAC;QAEF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAElF,6BAA6B;QAC7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,aAAa;YACrB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC;QACzC,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,kBAAkB;QAClB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACb,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACjD,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;YAC/B,MAAM,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED,mEAAmE;QACnE,MAAM,YAAY,GAAG,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE9D,MAAM,YAAY,GAAG;;EAEvB,YAAY;;;;;;;;;;wBAUU,CAAC;QAErB,yBAAyB;QACzB,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACxB,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,YAAY,KAAK;;SAE/B,SAAS,CAAC,IAAI;QACf,SAAS,CAAC,SAAS,CAAC,IAAI;oBACZ,SAAS,CAAC,QAAQ,CAAC,eAAe;eACvC,SAAS,CAAC,QAAQ,CAAC,UAAU;aAC/B,SAAS,CAAC,QAAQ,CAAC,SAAS;;;EAGvC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGzE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDAqChC,CAAC;QAElD,OAAO;YACL,MAAM,EAAE;gBACN,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,aAAa;aAChC;YACD,MAAM;YACN,OAAO,EAAE,iCAAiC,KAAK,6DAA6D;SAC7G,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Location Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates locations based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
7
|
+
/**
|
|
8
|
+
* generate_locations tool
|
|
9
|
+
*/
|
|
10
|
+
export declare const generateLocationsTool: MCPToolEntry;
|
|
11
|
+
export declare const locationTools: MCPToolEntry[];
|
|
12
|
+
//# sourceMappingURL=locations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/locations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAezE;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAkInC,CAAC;AAEF,eAAO,MAAM,aAAa,gBAA0B,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Location Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates locations based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { sessionManager, readManifest, writeManifest, addManifestStep, } from "../../state/manager.js";
|
|
9
|
+
import { buildRulesPromptSection } from "./rules-prompt.js";
|
|
10
|
+
const GenerateLocationsInput = z.object({
|
|
11
|
+
sessionId: z.string(),
|
|
12
|
+
count: z.number().min(1).max(20).optional().describe("Number of locations to generate (default: from world seed)"),
|
|
13
|
+
focusOn: z.array(z.string()).optional().describe("Specific location seeds to focus on (by name)"),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* generate_locations tool
|
|
17
|
+
*/
|
|
18
|
+
export const generateLocationsTool = {
|
|
19
|
+
name: "generate_locations",
|
|
20
|
+
description: "Generate locations based on the world seed. Returns a prompt for LLM execution.",
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: "object",
|
|
23
|
+
properties: {
|
|
24
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
25
|
+
count: { type: "number", description: "Number of locations to generate" },
|
|
26
|
+
focusOn: { type: "array", items: { type: "string" }, description: "Specific location seeds to focus on" },
|
|
27
|
+
},
|
|
28
|
+
required: ["sessionId"],
|
|
29
|
+
},
|
|
30
|
+
handler: async (args) => {
|
|
31
|
+
const input = GenerateLocationsInput.parse(args);
|
|
32
|
+
const session = await sessionManager.get(input.sessionId);
|
|
33
|
+
if (!session) {
|
|
34
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
35
|
+
}
|
|
36
|
+
if (!session.generation?.worldSeed) {
|
|
37
|
+
throw new Error("World seed not found. Call generate_world_seed first.");
|
|
38
|
+
}
|
|
39
|
+
const worldSeed = session.generation.worldSeed;
|
|
40
|
+
const stepId = randomUUID();
|
|
41
|
+
const locationSeeds = input.focusOn
|
|
42
|
+
? worldSeed.locationSeeds.filter(l => input.focusOn.includes(l.name))
|
|
43
|
+
: worldSeed.locationSeeds;
|
|
44
|
+
const count = input.count || locationSeeds.length;
|
|
45
|
+
// Record the generation step
|
|
46
|
+
session.generation.history.push({
|
|
47
|
+
id: stepId,
|
|
48
|
+
type: "locations",
|
|
49
|
+
startedAt: new Date().toISOString(),
|
|
50
|
+
completedAt: null,
|
|
51
|
+
status: "in_progress",
|
|
52
|
+
generatedIds: [],
|
|
53
|
+
});
|
|
54
|
+
session.generation.status = "generating";
|
|
55
|
+
await sessionManager.save(session);
|
|
56
|
+
// Update manifest
|
|
57
|
+
const manifest = await readManifest(input.sessionId);
|
|
58
|
+
if (manifest) {
|
|
59
|
+
addManifestStep(manifest, "locations", "locations.json");
|
|
60
|
+
manifest.status = "generating";
|
|
61
|
+
await writeManifest(input.sessionId, manifest);
|
|
62
|
+
}
|
|
63
|
+
// Build rules section from seed (uses defaults if no custom rules)
|
|
64
|
+
const rulesSection = buildRulesPromptSection(worldSeed.rules);
|
|
65
|
+
const systemPrompt = `You are a location designer for tabletop RPGs. Create memorable, explorable locations that serve as backdrops for adventure.
|
|
66
|
+
|
|
67
|
+
${rulesSection}
|
|
68
|
+
|
|
69
|
+
### Location Design Guidelines
|
|
70
|
+
- Each location needs a clear type (settlement, dungeon, wilderness, landmark, building)
|
|
71
|
+
- Include atmospheric details (sights, sounds, smells)
|
|
72
|
+
- List notable features players can interact with
|
|
73
|
+
- Define connections to other locations (by ID)
|
|
74
|
+
- Suggest encounters that might occur here
|
|
75
|
+
- Place NPCs where appropriate
|
|
76
|
+
- Include optional secrets for discovery
|
|
77
|
+
|
|
78
|
+
Output valid JSON only.`;
|
|
79
|
+
const userPrompt = `Generate ${count} locations for this world:
|
|
80
|
+
|
|
81
|
+
World: ${worldSeed.name}
|
|
82
|
+
Visual Style: ${worldSeed.aesthetic.visualStyle}
|
|
83
|
+
Tone: ${worldSeed.aesthetic.tone}
|
|
84
|
+
Core Conflict: ${worldSeed.coreConflict}
|
|
85
|
+
Technology Level: ${worldSeed.settings.technologyLevel}
|
|
86
|
+
Supernatural Presence: ${worldSeed.settings.supernaturalPresence}
|
|
87
|
+
|
|
88
|
+
Location seeds to develop:
|
|
89
|
+
${locationSeeds.slice(0, count).map((l, i) => `${i + 1}. ${l.name}: ${l.concept}`).join("\n")}
|
|
90
|
+
|
|
91
|
+
NPCs that might be placed:
|
|
92
|
+
${worldSeed.npcSeeds.map(n => `- ${n.name}: ${n.concept}`).join("\n")}
|
|
93
|
+
|
|
94
|
+
Output a JSON object:
|
|
95
|
+
{
|
|
96
|
+
"locations": [
|
|
97
|
+
{
|
|
98
|
+
"id": "location:slug-name",
|
|
99
|
+
"name": "Location Name",
|
|
100
|
+
"description": "2-3 sentences describing the location",
|
|
101
|
+
"type": "settlement|dungeon|wilderness|landmark|building",
|
|
102
|
+
"atmosphere": "Sensory details - what players see, hear, smell",
|
|
103
|
+
"features": ["Notable feature 1", "Notable feature 2", "Notable feature 3"],
|
|
104
|
+
"connections": ["location:other-location-id"],
|
|
105
|
+
"encounters": ["encounter:relevant-encounter-id"],
|
|
106
|
+
"npcs": ["npc:resident-npc-id"],
|
|
107
|
+
"secrets": ["Hidden thing players might discover"],
|
|
108
|
+
"gmNotes": "Tips for running scenes here"
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
Notes:
|
|
114
|
+
- Connections should form a logical network (paths, roads, doors)
|
|
115
|
+
- Not all locations need secrets
|
|
116
|
+
- Place NPCs where they logically belong
|
|
117
|
+
|
|
118
|
+
Return ONLY the JSON object, no markdown formatting.`;
|
|
119
|
+
return {
|
|
120
|
+
prompt: {
|
|
121
|
+
system: systemPrompt,
|
|
122
|
+
user: userPrompt,
|
|
123
|
+
outputSchemaName: "WorldLocation[]",
|
|
124
|
+
},
|
|
125
|
+
stepId,
|
|
126
|
+
message: `Location generation initiated for ${count} locations. Execute the prompt and call save_generation_result.`,
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
export const locationTools = [generateLocationsTool];
|
|
131
|
+
//# sourceMappingURL=locations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locations.js","sourceRoot":"","sources":["../../../src/tools/generation/locations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Monster Generation Tool
|
|
3
|
+
*
|
|
4
|
+
* Generates monsters based on the world seed.
|
|
5
|
+
*/
|
|
6
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
7
|
+
/**
|
|
8
|
+
* generate_monsters tool
|
|
9
|
+
*/
|
|
10
|
+
export declare const generateMonstersTool: MCPToolEntry;
|
|
11
|
+
export declare const monsterTools: MCPToolEntry[];
|
|
12
|
+
//# sourceMappingURL=monsters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monsters.d.ts","sourceRoot":"","sources":["../../../src/tools/generation/monsters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAgBzE;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAwJlC,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAyB,CAAC"}
|