@mythxengine/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/assemble.test.d.ts +2 -0
  3. package/dist/__tests__/assemble.test.d.ts.map +1 -0
  4. package/dist/__tests__/assemble.test.js +81 -0
  5. package/dist/__tests__/assemble.test.js.map +1 -0
  6. package/dist/index.d.ts +10 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +38 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +9 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +202 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/server.d.ts +41 -0
  15. package/dist/server.d.ts.map +1 -0
  16. package/dist/server.js +91 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/state/manager.d.ts +88 -0
  19. package/dist/state/manager.d.ts.map +1 -0
  20. package/dist/state/manager.js +308 -0
  21. package/dist/state/manager.js.map +1 -0
  22. package/dist/state/rules.d.ts +30 -0
  23. package/dist/state/rules.d.ts.map +1 -0
  24. package/dist/state/rules.js +61 -0
  25. package/dist/state/rules.js.map +1 -0
  26. package/dist/state/worldpacks.d.ts +43 -0
  27. package/dist/state/worldpacks.d.ts.map +1 -0
  28. package/dist/state/worldpacks.js +125 -0
  29. package/dist/state/worldpacks.js.map +1 -0
  30. package/dist/tools/augmentation/augment.d.ts +15 -0
  31. package/dist/tools/augmentation/augment.d.ts.map +1 -0
  32. package/dist/tools/augmentation/augment.js +512 -0
  33. package/dist/tools/augmentation/augment.js.map +1 -0
  34. package/dist/tools/augmentation/index.d.ts +6 -0
  35. package/dist/tools/augmentation/index.d.ts.map +1 -0
  36. package/dist/tools/augmentation/index.js +7 -0
  37. package/dist/tools/augmentation/index.js.map +1 -0
  38. package/dist/tools/characters.d.ts +26 -0
  39. package/dist/tools/characters.d.ts.map +1 -0
  40. package/dist/tools/characters.js +362 -0
  41. package/dist/tools/characters.js.map +1 -0
  42. package/dist/tools/clocks.d.ts +33 -0
  43. package/dist/tools/clocks.d.ts.map +1 -0
  44. package/dist/tools/clocks.js +438 -0
  45. package/dist/tools/clocks.js.map +1 -0
  46. package/dist/tools/combat.d.ts +38 -0
  47. package/dist/tools/combat.d.ts.map +1 -0
  48. package/dist/tools/combat.js +574 -0
  49. package/dist/tools/combat.js.map +1 -0
  50. package/dist/tools/dice.d.ts +9 -0
  51. package/dist/tools/dice.d.ts.map +1 -0
  52. package/dist/tools/dice.js +287 -0
  53. package/dist/tools/dice.js.map +1 -0
  54. package/dist/tools/encounters.d.ts +21 -0
  55. package/dist/tools/encounters.d.ts.map +1 -0
  56. package/dist/tools/encounters.js +521 -0
  57. package/dist/tools/encounters.js.map +1 -0
  58. package/dist/tools/engagement.d.ts +25 -0
  59. package/dist/tools/engagement.d.ts.map +1 -0
  60. package/dist/tools/engagement.js +491 -0
  61. package/dist/tools/engagement.js.map +1 -0
  62. package/dist/tools/expansion/archetype.d.ts +12 -0
  63. package/dist/tools/expansion/archetype.d.ts.map +1 -0
  64. package/dist/tools/expansion/archetype.js +157 -0
  65. package/dist/tools/expansion/archetype.js.map +1 -0
  66. package/dist/tools/expansion/index.d.ts +12 -0
  67. package/dist/tools/expansion/index.d.ts.map +1 -0
  68. package/dist/tools/expansion/index.js +21 -0
  69. package/dist/tools/expansion/index.js.map +1 -0
  70. package/dist/tools/expansion/location.d.ts +12 -0
  71. package/dist/tools/expansion/location.d.ts.map +1 -0
  72. package/dist/tools/expansion/location.js +149 -0
  73. package/dist/tools/expansion/location.js.map +1 -0
  74. package/dist/tools/expansion/monster.d.ts +12 -0
  75. package/dist/tools/expansion/monster.d.ts.map +1 -0
  76. package/dist/tools/expansion/monster.js +157 -0
  77. package/dist/tools/expansion/monster.js.map +1 -0
  78. package/dist/tools/expansion/npc.d.ts +12 -0
  79. package/dist/tools/expansion/npc.d.ts.map +1 -0
  80. package/dist/tools/expansion/npc.js +153 -0
  81. package/dist/tools/expansion/npc.js.map +1 -0
  82. package/dist/tools/generation/archetypes.d.ts +12 -0
  83. package/dist/tools/generation/archetypes.d.ts.map +1 -0
  84. package/dist/tools/generation/archetypes.js +129 -0
  85. package/dist/tools/generation/archetypes.js.map +1 -0
  86. package/dist/tools/generation/arcs.d.ts +13 -0
  87. package/dist/tools/generation/arcs.d.ts.map +1 -0
  88. package/dist/tools/generation/arcs.js +186 -0
  89. package/dist/tools/generation/arcs.js.map +1 -0
  90. package/dist/tools/generation/encounters.d.ts +12 -0
  91. package/dist/tools/generation/encounters.d.ts.map +1 -0
  92. package/dist/tools/generation/encounters.js +169 -0
  93. package/dist/tools/generation/encounters.js.map +1 -0
  94. package/dist/tools/generation/index.d.ts +19 -0
  95. package/dist/tools/generation/index.d.ts.map +1 -0
  96. package/dist/tools/generation/index.js +42 -0
  97. package/dist/tools/generation/index.js.map +1 -0
  98. package/dist/tools/generation/items.d.ts +12 -0
  99. package/dist/tools/generation/items.d.ts.map +1 -0
  100. package/dist/tools/generation/items.js +149 -0
  101. package/dist/tools/generation/items.js.map +1 -0
  102. package/dist/tools/generation/locations.d.ts +12 -0
  103. package/dist/tools/generation/locations.d.ts.map +1 -0
  104. package/dist/tools/generation/locations.js +131 -0
  105. package/dist/tools/generation/locations.js.map +1 -0
  106. package/dist/tools/generation/monsters.d.ts +12 -0
  107. package/dist/tools/generation/monsters.d.ts.map +1 -0
  108. package/dist/tools/generation/monsters.js +154 -0
  109. package/dist/tools/generation/monsters.js.map +1 -0
  110. package/dist/tools/generation/narrative.d.ts +12 -0
  111. package/dist/tools/generation/narrative.d.ts.map +1 -0
  112. package/dist/tools/generation/narrative.js +129 -0
  113. package/dist/tools/generation/narrative.js.map +1 -0
  114. package/dist/tools/generation/npcs.d.ts +12 -0
  115. package/dist/tools/generation/npcs.d.ts.map +1 -0
  116. package/dist/tools/generation/npcs.js +136 -0
  117. package/dist/tools/generation/npcs.js.map +1 -0
  118. package/dist/tools/generation/resume.d.ts +12 -0
  119. package/dist/tools/generation/resume.d.ts.map +1 -0
  120. package/dist/tools/generation/resume.js +288 -0
  121. package/dist/tools/generation/resume.js.map +1 -0
  122. package/dist/tools/generation/rules-prompt.d.ts +23 -0
  123. package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
  124. package/dist/tools/generation/rules-prompt.js +209 -0
  125. package/dist/tools/generation/rules-prompt.js.map +1 -0
  126. package/dist/tools/generation/seed.d.ts +12 -0
  127. package/dist/tools/generation/seed.d.ts.map +1 -0
  128. package/dist/tools/generation/seed.js +171 -0
  129. package/dist/tools/generation/seed.js.map +1 -0
  130. package/dist/tools/generation/situations.d.ts +13 -0
  131. package/dist/tools/generation/situations.d.ts.map +1 -0
  132. package/dist/tools/generation/situations.js +247 -0
  133. package/dist/tools/generation/situations.js.map +1 -0
  134. package/dist/tools/gm-guidance.d.ts +13 -0
  135. package/dist/tools/gm-guidance.d.ts.map +1 -0
  136. package/dist/tools/gm-guidance.js +395 -0
  137. package/dist/tools/gm-guidance.js.map +1 -0
  138. package/dist/tools/index.d.ts +33 -0
  139. package/dist/tools/index.d.ts.map +1 -0
  140. package/dist/tools/index.js +80 -0
  141. package/dist/tools/index.js.map +1 -0
  142. package/dist/tools/investigation.d.ts +41 -0
  143. package/dist/tools/investigation.d.ts.map +1 -0
  144. package/dist/tools/investigation.js +586 -0
  145. package/dist/tools/investigation.js.map +1 -0
  146. package/dist/tools/leads.d.ts +29 -0
  147. package/dist/tools/leads.d.ts.map +1 -0
  148. package/dist/tools/leads.js +460 -0
  149. package/dist/tools/leads.js.map +1 -0
  150. package/dist/tools/players.d.ts +30 -0
  151. package/dist/tools/players.d.ts.map +1 -0
  152. package/dist/tools/players.js +448 -0
  153. package/dist/tools/players.js.map +1 -0
  154. package/dist/tools/portable-clues.d.ts +29 -0
  155. package/dist/tools/portable-clues.d.ts.map +1 -0
  156. package/dist/tools/portable-clues.js +490 -0
  157. package/dist/tools/portable-clues.js.map +1 -0
  158. package/dist/tools/relationships.d.ts +29 -0
  159. package/dist/tools/relationships.d.ts.map +1 -0
  160. package/dist/tools/relationships.js +471 -0
  161. package/dist/tools/relationships.js.map +1 -0
  162. package/dist/tools/scene-framing.d.ts +21 -0
  163. package/dist/tools/scene-framing.d.ts.map +1 -0
  164. package/dist/tools/scene-framing.js +380 -0
  165. package/dist/tools/scene-framing.js.map +1 -0
  166. package/dist/tools/sessions.d.ts +30 -0
  167. package/dist/tools/sessions.d.ts.map +1 -0
  168. package/dist/tools/sessions.js +253 -0
  169. package/dist/tools/sessions.js.map +1 -0
  170. package/dist/tools/time.d.ts +26 -0
  171. package/dist/tools/time.d.ts.map +1 -0
  172. package/dist/tools/time.js +438 -0
  173. package/dist/tools/time.js.map +1 -0
  174. package/dist/tools/turns.d.ts +38 -0
  175. package/dist/tools/turns.d.ts.map +1 -0
  176. package/dist/tools/turns.js +560 -0
  177. package/dist/tools/turns.js.map +1 -0
  178. package/dist/tools/worldpack/assemble.d.ts +20 -0
  179. package/dist/tools/worldpack/assemble.d.ts.map +1 -0
  180. package/dist/tools/worldpack/assemble.js +237 -0
  181. package/dist/tools/worldpack/assemble.js.map +1 -0
  182. package/dist/tools/worldpack/docs-generator.d.ts +18 -0
  183. package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
  184. package/dist/tools/worldpack/docs-generator.js +264 -0
  185. package/dist/tools/worldpack/docs-generator.js.map +1 -0
  186. package/dist/tools/worldpack/export.d.ts +12 -0
  187. package/dist/tools/worldpack/export.d.ts.map +1 -0
  188. package/dist/tools/worldpack/export.js +209 -0
  189. package/dist/tools/worldpack/export.js.map +1 -0
  190. package/dist/tools/worldpack/index.d.ts +15 -0
  191. package/dist/tools/worldpack/index.d.ts.map +1 -0
  192. package/dist/tools/worldpack/index.js +30 -0
  193. package/dist/tools/worldpack/index.js.map +1 -0
  194. package/dist/tools/worldpack/lookup.d.ts +19 -0
  195. package/dist/tools/worldpack/lookup.d.ts.map +1 -0
  196. package/dist/tools/worldpack/lookup.js +320 -0
  197. package/dist/tools/worldpack/lookup.js.map +1 -0
  198. package/dist/tools/worldpack/manage.d.ts +20 -0
  199. package/dist/tools/worldpack/manage.d.ts.map +1 -0
  200. package/dist/tools/worldpack/manage.js +101 -0
  201. package/dist/tools/worldpack/manage.js.map +1 -0
  202. package/dist/tools/worldpack/save-result.d.ts +12 -0
  203. package/dist/tools/worldpack/save-result.d.ts.map +1 -0
  204. package/dist/tools/worldpack/save-result.js +222 -0
  205. package/dist/tools/worldpack/save-result.js.map +1 -0
  206. package/dist/tools/worldpack/summary.d.ts +13 -0
  207. package/dist/tools/worldpack/summary.d.ts.map +1 -0
  208. package/dist/tools/worldpack/summary.js +180 -0
  209. package/dist/tools/worldpack/summary.js.map +1 -0
  210. package/dist/tools/worldpack/validate.d.ts +12 -0
  211. package/dist/tools/worldpack/validate.d.ts.map +1 -0
  212. package/dist/tools/worldpack/validate.js +388 -0
  213. package/dist/tools/worldpack/validate.js.map +1 -0
  214. package/package.json +59 -0
@@ -0,0 +1,521 @@
1
+ /**
2
+ * Encounter Builder Tools
3
+ *
4
+ * On-demand encounter generation and management.
5
+ * Supports the Alexandrian principle: "Build toolkits you can deploy flexibly."
6
+ */
7
+ import { z } from "zod";
8
+ import { sessionManager } from "../state/manager.js";
9
+ // Difficulty levels
10
+ const DIFFICULTIES = ["easy", "medium", "hard", "deadly"];
11
+ // Encounter types
12
+ const ENCOUNTER_TYPES = ["combat", "social", "puzzle", "environmental"];
13
+ // Input schemas
14
+ const GenerateEncounterInput = z.object({
15
+ sessionId: z.string(),
16
+ difficulty: z.enum(DIFFICULTIES).describe("How challenging the encounter should be"),
17
+ type: z.enum(ENCOUNTER_TYPES).default("combat").describe("Type of encounter"),
18
+ locationId: z.string().optional().describe("Use location-appropriate content"),
19
+ theme: z.string().optional().describe("Theme like 'ambush', 'negotiation', 'chase'"),
20
+ includeMonsterIds: z.array(z.string()).optional().describe("Force specific monsters"),
21
+ excludeMonsterIds: z.array(z.string()).optional().describe("Exclude these monsters"),
22
+ });
23
+ const ScaleEncounterInput = z.object({
24
+ sessionId: z.string(),
25
+ encounterId: z.string(),
26
+ targetDifficulty: z.enum(DIFFICULTIES),
27
+ method: z.enum(["add_monsters", "remove_monsters", "adjust_hp", "add_minions"]).default("add_monsters"),
28
+ });
29
+ const GetEncounterSuggestionsInput = z.object({
30
+ sessionId: z.string(),
31
+ locationId: z.string().optional(),
32
+ situationId: z.string().optional(),
33
+ mood: z.string().optional(),
34
+ limit: z.number().min(1).max(10).default(5),
35
+ });
36
+ /**
37
+ * Get monsters from session
38
+ */
39
+ function getMonsters(session) {
40
+ if (!session.generation?.generatedContent?.monsters) {
41
+ return [];
42
+ }
43
+ return session.generation.generatedContent.monsters;
44
+ }
45
+ /**
46
+ * Get locations from session
47
+ */
48
+ function getLocations(session) {
49
+ if (!session.generation?.generatedContent?.locations) {
50
+ return [];
51
+ }
52
+ return session.generation.generatedContent.locations;
53
+ }
54
+ /**
55
+ * Get encounters from session
56
+ */
57
+ function getEncounters(session) {
58
+ if (!session.generation?.generatedContent?.encounters) {
59
+ return [];
60
+ }
61
+ return session.generation.generatedContent.encounters;
62
+ }
63
+ /**
64
+ * Calculate threat value for a monster
65
+ */
66
+ function getThreatValue(monster) {
67
+ const tierValues = { minion: 1, standard: 2, elite: 4, boss: 8 };
68
+ return tierValues[monster.threatTier] || 2;
69
+ }
70
+ /**
71
+ * Calculate party strength
72
+ */
73
+ function getPartyStrength(session) {
74
+ const characters = Object.values(session.characters);
75
+ if (characters.length === 0)
76
+ return 4; // Default party of 4
77
+ return characters.length;
78
+ }
79
+ /**
80
+ * Get target threat total for difficulty
81
+ */
82
+ function getTargetThreat(difficulty, partySize) {
83
+ const base = partySize * 2;
84
+ switch (difficulty) {
85
+ case "easy": return { min: base * 0.5, max: base * 0.75 };
86
+ case "medium": return { min: base * 0.75, max: base * 1.25 };
87
+ case "hard": return { min: base * 1.25, max: base * 2 };
88
+ case "deadly": return { min: base * 2, max: base * 3 };
89
+ }
90
+ }
91
+ /**
92
+ * Select monsters to meet threat target
93
+ */
94
+ function selectMonsters(available, target, include = [], exclude = []) {
95
+ const selected = [];
96
+ let currentThreat = 0;
97
+ // Filter available monsters
98
+ let pool = available.filter(m => !exclude.includes(m.id));
99
+ // First, add any required monsters
100
+ for (const monsterId of include) {
101
+ const monster = pool.find(m => m.id === monsterId);
102
+ if (monster) {
103
+ selected.push({ monster, count: 1 });
104
+ currentThreat += getThreatValue(monster);
105
+ }
106
+ }
107
+ // Sort remaining by threat tier for variety
108
+ pool = pool.filter(m => !include.includes(m.id));
109
+ pool.sort((a, b) => getThreatValue(a) - getThreatValue(b));
110
+ // Fill to target
111
+ while (currentThreat < target.min && pool.length > 0) {
112
+ // Pick a monster that fits
113
+ const remaining = target.max - currentThreat;
114
+ // Try to find something that fits well
115
+ let picked;
116
+ for (const monster of pool) {
117
+ if (getThreatValue(monster) <= remaining + 1) {
118
+ picked = monster;
119
+ break;
120
+ }
121
+ }
122
+ // If nothing fits, take the smallest
123
+ if (!picked) {
124
+ picked = pool[0];
125
+ }
126
+ // Add to selection
127
+ const existing = selected.find(s => s.monster.id === picked.id);
128
+ if (existing) {
129
+ existing.count++;
130
+ }
131
+ else {
132
+ selected.push({ monster: picked, count: 1 });
133
+ }
134
+ currentThreat += getThreatValue(picked);
135
+ // Don't add too many of one type
136
+ if (existing && existing.count >= 4) {
137
+ pool = pool.filter(m => m.id !== picked.id);
138
+ }
139
+ }
140
+ return selected;
141
+ }
142
+ /**
143
+ * generate_encounter tool
144
+ */
145
+ export const generateEncounterTool = {
146
+ name: "generate_encounter",
147
+ description: "Create an encounter matching the specified parameters. Uses available monsters from the world pack.",
148
+ inputSchema: {
149
+ type: "object",
150
+ properties: {
151
+ sessionId: { type: "string", description: "Session ID" },
152
+ difficulty: {
153
+ type: "string",
154
+ enum: DIFFICULTIES,
155
+ description: "How challenging: easy, medium, hard, deadly",
156
+ },
157
+ type: {
158
+ type: "string",
159
+ enum: ENCOUNTER_TYPES,
160
+ description: "Encounter type",
161
+ },
162
+ locationId: { type: "string", description: "Location ID for context" },
163
+ theme: { type: "string", description: "Theme like 'ambush', 'negotiation'" },
164
+ includeMonsterIds: {
165
+ type: "array",
166
+ items: { type: "string" },
167
+ description: "Force specific monsters",
168
+ },
169
+ excludeMonsterIds: {
170
+ type: "array",
171
+ items: { type: "string" },
172
+ description: "Exclude these monsters",
173
+ },
174
+ },
175
+ required: ["sessionId", "difficulty"],
176
+ },
177
+ handler: async (args) => {
178
+ const input = GenerateEncounterInput.parse(args);
179
+ const session = await sessionManager.get(input.sessionId);
180
+ if (!session) {
181
+ throw new Error(`Session not found: ${input.sessionId}`);
182
+ }
183
+ const monsters = getMonsters(session);
184
+ const locations = getLocations(session);
185
+ if (monsters.length === 0 && input.type === "combat") {
186
+ return {
187
+ error: "No monsters available. Generate monsters first with generate_monsters.",
188
+ suggestion: "Create a world pack with monsters before generating combat encounters.",
189
+ };
190
+ }
191
+ // Get location context if provided
192
+ let location;
193
+ if (input.locationId) {
194
+ location = locations.find(l => l.id === input.locationId);
195
+ }
196
+ const partySize = getPartyStrength(session);
197
+ const target = getTargetThreat(input.difficulty, partySize);
198
+ // Generate based on type
199
+ if (input.type === "combat") {
200
+ // Filter monsters by theme if provided
201
+ let availableMonsters = monsters;
202
+ if (input.theme) {
203
+ const themeLower = input.theme.toLowerCase();
204
+ const themeMonsters = monsters.filter(m => m.tags?.some(t => t.toLowerCase().includes(themeLower)) ||
205
+ m.name.toLowerCase().includes(themeLower) ||
206
+ m.description.toLowerCase().includes(themeLower));
207
+ if (themeMonsters.length > 0) {
208
+ availableMonsters = themeMonsters;
209
+ }
210
+ }
211
+ // Select monsters
212
+ const selected = selectMonsters(availableMonsters, target, input.includeMonsterIds || [], input.excludeMonsterIds || []);
213
+ if (selected.length === 0) {
214
+ return {
215
+ error: "Could not select appropriate monsters for this encounter.",
216
+ suggestion: "Try different parameters or add more monsters to the world.",
217
+ };
218
+ }
219
+ // Calculate actual threat
220
+ const totalThreat = selected.reduce((sum, s) => sum + getThreatValue(s.monster) * s.count, 0);
221
+ // Generate encounter details
222
+ const encounterName = input.theme
223
+ ? `${input.theme.charAt(0).toUpperCase() + input.theme.slice(1)} Encounter`
224
+ : `${input.difficulty.charAt(0).toUpperCase() + input.difficulty.slice(1)} Combat`;
225
+ // Build setup based on theme
226
+ let setup = "The enemies become aware of the party's presence.";
227
+ let tactics = "Fight until reduced to half HP, then consider retreat.";
228
+ if (input.theme) {
229
+ const themeLower = input.theme.toLowerCase();
230
+ if (themeLower.includes("ambush")) {
231
+ setup = "The enemies lie in wait, hidden. They strike when the party is vulnerable.";
232
+ tactics = "Focus fire on isolated targets. Use terrain for cover.";
233
+ }
234
+ else if (themeLower.includes("chase")) {
235
+ setup = "The enemies are fleeing (or pursuing). This is a running battle.";
236
+ tactics = "Split up to confuse pursuers. Use obstacles to slow the other side.";
237
+ }
238
+ else if (themeLower.includes("defense")) {
239
+ setup = "The enemies are defending a position. They have prepared.";
240
+ tactics = "Hold ground. Use chokepoints and ranged attacks.";
241
+ }
242
+ }
243
+ // Use monster tactics if available
244
+ const primaryMonster = selected.reduce((best, curr) => getThreatValue(curr.monster) > getThreatValue(best.monster) ? curr : best).monster;
245
+ if (primaryMonster.tactics) {
246
+ tactics = primaryMonster.tactics;
247
+ }
248
+ const encounter = {
249
+ id: `encounter:generated-${Date.now()}`,
250
+ name: encounterName,
251
+ type: "combat",
252
+ difficulty: input.difficulty,
253
+ threatTotal: totalThreat,
254
+ partySize,
255
+ monsters: selected.map(s => ({
256
+ id: s.monster.id,
257
+ name: s.monster.name,
258
+ count: s.count,
259
+ threatTier: s.monster.threatTier,
260
+ hp: s.monster.hp,
261
+ })),
262
+ setup,
263
+ tactics,
264
+ environment: location?.atmosphere || "Standard terrain with some cover available.",
265
+ outcomes: {
266
+ victory: {
267
+ description: "The enemies are defeated.",
268
+ loot: "Search the fallen for valuables.",
269
+ },
270
+ defeat: {
271
+ description: "The party is overwhelmed.",
272
+ consequences: ["Captured", "Robbed and left for dead", "Forced to flee"],
273
+ },
274
+ escape: {
275
+ how: "Disengage and flee the area.",
276
+ consequences: ["Enemies may pursue", "Lost opportunity"],
277
+ },
278
+ },
279
+ locationId: input.locationId,
280
+ theme: input.theme,
281
+ };
282
+ return {
283
+ message: `Generated ${input.difficulty} combat encounter`,
284
+ encounter,
285
+ notes: {
286
+ balanceCheck: totalThreat >= target.min && totalThreat <= target.max
287
+ ? "Within target range"
288
+ : totalThreat > target.max
289
+ ? "Slightly overtuned - consider removing a monster"
290
+ : "Slightly undertuned - consider adding minions",
291
+ },
292
+ };
293
+ }
294
+ else {
295
+ // Non-combat encounter
296
+ const encounter = {
297
+ id: `encounter:generated-${Date.now()}`,
298
+ name: `${input.type.charAt(0).toUpperCase() + input.type.slice(1)} Challenge`,
299
+ type: input.type,
300
+ difficulty: input.difficulty,
301
+ description: input.type === "social"
302
+ ? "A social situation requiring negotiation, persuasion, or deception."
303
+ : input.type === "puzzle"
304
+ ? "A puzzle or riddle that must be solved to proceed."
305
+ : "An environmental hazard or obstacle to overcome.",
306
+ setup: `Present the ${input.type} challenge with clear stakes.`,
307
+ resolution: {
308
+ success: "The challenge is overcome. Progress is made.",
309
+ failure: "The challenge defeats them. New complications arise.",
310
+ partial: "Partial success with complications or costs.",
311
+ },
312
+ difficultyGuidance: {
313
+ easy: "DC 8 - Most attempts should succeed",
314
+ medium: "DC 12 - Fair challenge, competent characters succeed often",
315
+ hard: "DC 16 - Difficult, requires skill or luck",
316
+ deadly: "DC 20 - Near impossible without special preparation",
317
+ }[input.difficulty],
318
+ locationId: input.locationId,
319
+ theme: input.theme,
320
+ };
321
+ return {
322
+ message: `Generated ${input.difficulty} ${input.type} encounter`,
323
+ encounter,
324
+ };
325
+ }
326
+ },
327
+ };
328
+ /**
329
+ * scale_encounter tool
330
+ */
331
+ export const scaleEncounterTool = {
332
+ name: "scale_encounter",
333
+ description: "Adjust the difficulty of an existing encounter.",
334
+ inputSchema: {
335
+ type: "object",
336
+ properties: {
337
+ sessionId: { type: "string", description: "Session ID" },
338
+ encounterId: { type: "string", description: "Encounter ID to scale" },
339
+ targetDifficulty: {
340
+ type: "string",
341
+ enum: DIFFICULTIES,
342
+ description: "New target difficulty",
343
+ },
344
+ method: {
345
+ type: "string",
346
+ enum: ["add_monsters", "remove_monsters", "adjust_hp", "add_minions"],
347
+ description: "How to adjust difficulty",
348
+ },
349
+ },
350
+ required: ["sessionId", "encounterId", "targetDifficulty"],
351
+ },
352
+ handler: async (args) => {
353
+ const input = ScaleEncounterInput.parse(args);
354
+ const session = await sessionManager.get(input.sessionId);
355
+ if (!session) {
356
+ throw new Error(`Session not found: ${input.sessionId}`);
357
+ }
358
+ const encounters = getEncounters(session);
359
+ const monsters = getMonsters(session);
360
+ const encounter = encounters.find(e => e.id === input.encounterId);
361
+ if (!encounter) {
362
+ return {
363
+ error: `Encounter not found: ${input.encounterId}`,
364
+ suggestion: "Use get_encounter_suggestions to find available encounters.",
365
+ };
366
+ }
367
+ const partySize = getPartyStrength(session);
368
+ const target = getTargetThreat(input.targetDifficulty, partySize);
369
+ // Calculate current threat
370
+ let currentThreat = 0;
371
+ const currentMonsters = [];
372
+ if (encounter.monsters) {
373
+ for (const m of encounter.monsters) {
374
+ const monster = monsters.find(mon => mon.id === m.monsterId);
375
+ if (monster) {
376
+ const threat = getThreatValue(monster) * m.count;
377
+ currentThreat += threat;
378
+ currentMonsters.push({
379
+ id: monster.id,
380
+ name: monster.name,
381
+ count: m.count,
382
+ threat,
383
+ });
384
+ }
385
+ }
386
+ }
387
+ // Determine adjustment
388
+ const adjustments = [];
389
+ const targetMid = (target.min + target.max) / 2;
390
+ if (input.method === "add_monsters" && currentThreat < targetMid) {
391
+ const needed = Math.ceil((targetMid - currentThreat) / 2);
392
+ adjustments.push(`Add ${needed} standard monster(s) or equivalent`);
393
+ }
394
+ else if (input.method === "remove_monsters" && currentThreat > targetMid) {
395
+ const toRemove = Math.ceil((currentThreat - targetMid) / 2);
396
+ adjustments.push(`Remove ${toRemove} threat worth of monsters`);
397
+ }
398
+ else if (input.method === "adjust_hp") {
399
+ const ratio = targetMid / currentThreat;
400
+ const percentage = Math.round((ratio - 1) * 100);
401
+ if (percentage > 0) {
402
+ adjustments.push(`Increase monster HP by ${percentage}%`);
403
+ }
404
+ else if (percentage < 0) {
405
+ adjustments.push(`Decrease monster HP by ${Math.abs(percentage)}%`);
406
+ }
407
+ }
408
+ else if (input.method === "add_minions") {
409
+ const needed = Math.ceil((targetMid - currentThreat));
410
+ adjustments.push(`Add ${needed} minion-tier creature(s)`);
411
+ }
412
+ if (adjustments.length === 0) {
413
+ adjustments.push("Encounter is already at target difficulty");
414
+ }
415
+ return {
416
+ encounter: {
417
+ id: encounter.id,
418
+ name: encounter.name,
419
+ currentDifficulty: encounter.difficulty,
420
+ targetDifficulty: input.targetDifficulty,
421
+ },
422
+ analysis: {
423
+ currentThreat,
424
+ targetRange: target,
425
+ currentMonsters,
426
+ },
427
+ adjustments,
428
+ method: input.method,
429
+ };
430
+ },
431
+ };
432
+ /**
433
+ * get_encounter_suggestions tool
434
+ */
435
+ export const getEncounterSuggestionsTool = {
436
+ name: "get_encounter_suggestions",
437
+ description: "List encounters that fit the current context.",
438
+ inputSchema: {
439
+ type: "object",
440
+ properties: {
441
+ sessionId: { type: "string", description: "Session ID" },
442
+ locationId: { type: "string", description: "Filter by location" },
443
+ situationId: { type: "string", description: "Filter by situation" },
444
+ mood: { type: "string", description: "Desired mood" },
445
+ limit: { type: "number", minimum: 1, maximum: 10, description: "Max results" },
446
+ },
447
+ required: ["sessionId"],
448
+ },
449
+ handler: async (args) => {
450
+ const input = GetEncounterSuggestionsInput.parse(args);
451
+ const session = await sessionManager.get(input.sessionId);
452
+ if (!session) {
453
+ throw new Error(`Session not found: ${input.sessionId}`);
454
+ }
455
+ const encounters = getEncounters(session);
456
+ const locations = getLocations(session);
457
+ const monsters = getMonsters(session);
458
+ if (encounters.length === 0) {
459
+ return {
460
+ message: "No pre-defined encounters available.",
461
+ suggestions: [],
462
+ tip: "Use generate_encounter to create encounters on-demand.",
463
+ };
464
+ }
465
+ // Filter encounters
466
+ let filtered = encounters;
467
+ // Filter by location
468
+ if (input.locationId) {
469
+ const location = locations.find(l => l.id === input.locationId);
470
+ if (location && location.encounters) {
471
+ filtered = filtered.filter(e => location.encounters.includes(e.id));
472
+ }
473
+ }
474
+ // Filter by mood/type match (simple text matching)
475
+ if (input.mood) {
476
+ const moodLower = input.mood.toLowerCase();
477
+ const moodMatches = filtered.filter(e => e.description?.toLowerCase().includes(moodLower) ||
478
+ e.name?.toLowerCase().includes(moodLower));
479
+ if (moodMatches.length > 0) {
480
+ filtered = moodMatches;
481
+ }
482
+ }
483
+ // Limit results
484
+ const limited = filtered.slice(0, input.limit);
485
+ // Enrich with monster names
486
+ const suggestions = limited.map(e => {
487
+ const monsterNames = [];
488
+ if (e.monsters) {
489
+ for (const m of e.monsters) {
490
+ const monster = monsters.find(mon => mon.id === m.monsterId);
491
+ if (monster) {
492
+ monsterNames.push(`${m.count}x ${monster.name}`);
493
+ }
494
+ }
495
+ }
496
+ return {
497
+ id: e.id,
498
+ name: e.name,
499
+ type: e.type,
500
+ difficulty: e.difficulty,
501
+ description: e.description,
502
+ monsters: monsterNames.length > 0 ? monsterNames : undefined,
503
+ };
504
+ });
505
+ return {
506
+ message: `Found ${suggestions.length} encounter(s)`,
507
+ suggestions,
508
+ filters: {
509
+ locationId: input.locationId,
510
+ situationId: input.situationId,
511
+ mood: input.mood,
512
+ },
513
+ };
514
+ },
515
+ };
516
+ export const encounterTools = [
517
+ generateEncounterTool,
518
+ scaleEncounterTool,
519
+ getEncounterSuggestionsTool,
520
+ ];
521
+ //# sourceMappingURL=encounters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encounters.js","sourceRoot":"","sources":["../../src/tools/encounters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,oBAAoB;AACpB,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAGnE,kBAAkB;AAClB,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAU,CAAC;AAEjF,gBAAgB;AAChB,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACpF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC7E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACpF,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrF,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACrF,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;CACxG,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5C,CAAC,CAAC;AA0CH;;GAEG;AACH,SAAS,WAAW,CAAC,OAAuE;IAC1F,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAqB,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAwE;IAC5F,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAuB,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAyE;IAC9F,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAyB,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,OAAgB;IACtC,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACjE,OAAO,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAgD;IACxE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB;IAC5D,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,UAAsB,EAAE,SAAiB;IAChE,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;IAC3B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;QAC1D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QACxD,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACzD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,SAAoB,EACpB,MAAoC,EACpC,UAAoB,EAAE,EACtB,UAAoB,EAAE;IAEtB,MAAM,QAAQ,GAA+C,EAAE,CAAC;IAChE,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,4BAA4B;IAC5B,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,mCAAmC;IACnC,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACrC,aAAa,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,iBAAiB;IACjB,OAAO,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,2BAA2B;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC;QAE7C,uCAAuC;QACvC,IAAI,MAA2B,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,GAAG,OAAO,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,MAAO,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,aAAa,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAExC,iCAAiC;QACjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAO,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,qGAAqG;IAClH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,6CAA6C;aAC3D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,gBAAgB;aAC9B;YACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACtE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YAC5E,iBAAiB,EAAE;gBACjB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,yBAAyB;aACvC;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wBAAwB;aACtC;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;KACtC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjD,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,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO;gBACL,KAAK,EAAE,wEAAwE;gBAC/E,UAAU,EAAE,wEAAwE;aACrF,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,IAAI,QAA8B,CAAC;QACnC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAE5D,yBAAyB;QACzB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,uCAAuC;YACvC,IAAI,iBAAiB,GAAG,QAAQ,CAAC;YACjC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACvD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACzC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACjD,CAAC;gBACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,iBAAiB,GAAG,aAAa,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,MAAM,QAAQ,GAAG,cAAc,CAC7B,iBAAiB,EACjB,MAAM,EACN,KAAK,CAAC,iBAAiB,IAAI,EAAE,EAC7B,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAC9B,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,KAAK,EAAE,2DAA2D;oBAClE,UAAU,EAAE,6DAA6D;iBAC1E,CAAC;YACJ,CAAC;YAED,0BAA0B;YAC1B,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAE9F,6BAA6B;YAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK;gBAC/B,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;gBAC3E,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YAErF,6BAA6B;YAC7B,IAAI,KAAK,GAAG,mDAAmD,CAAC;YAChE,IAAI,OAAO,GAAG,wDAAwD,CAAC;YAEvE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,KAAK,GAAG,4EAA4E,CAAC;oBACrF,OAAO,GAAG,wDAAwD,CAAC;gBACrE,CAAC;qBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,KAAK,GAAG,kEAAkE,CAAC;oBAC3E,OAAO,GAAG,qEAAqE,CAAC;gBAClF,CAAC;qBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1C,KAAK,GAAG,2DAA2D,CAAC;oBACpE,OAAO,GAAG,kDAAkD,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CACpD,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC1E,CAAC,OAAO,CAAC;YACV,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC3B,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;YACnC,CAAC;YAED,MAAM,SAAS,GAAG;gBAChB,EAAE,EAAE,uBAAuB,IAAI,CAAC,GAAG,EAAE,EAAE;gBACvC,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,WAAW,EAAE,WAAW;gBACxB,SAAS;gBAET,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC3B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;oBAChB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI;oBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU;oBAChC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;iBACjB,CAAC,CAAC;gBAEH,KAAK;gBACL,OAAO;gBACP,WAAW,EAAE,QAAQ,EAAE,UAAU,IAAI,6CAA6C;gBAElF,QAAQ,EAAE;oBACR,OAAO,EAAE;wBACP,WAAW,EAAE,2BAA2B;wBACxC,IAAI,EAAE,kCAAkC;qBACzC;oBACD,MAAM,EAAE;wBACN,WAAW,EAAE,2BAA2B;wBACxC,YAAY,EAAE,CAAC,UAAU,EAAE,0BAA0B,EAAE,gBAAgB,CAAC;qBACzE;oBACD,MAAM,EAAE;wBACN,GAAG,EAAE,8BAA8B;wBACnC,YAAY,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;qBACzD;iBACF;gBAED,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,aAAa,KAAK,CAAC,UAAU,mBAAmB;gBACzD,SAAS;gBACT,KAAK,EAAE;oBACL,YAAY,EAAE,WAAW,IAAI,MAAM,CAAC,GAAG,IAAI,WAAW,IAAI,MAAM,CAAC,GAAG;wBAClE,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG;4BACxB,CAAC,CAAC,kDAAkD;4BACpD,CAAC,CAAC,+CAA+C;iBACtD;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,uBAAuB;YACvB,MAAM,SAAS,GAAG;gBAChB,EAAE,EAAE,uBAAuB,IAAI,CAAC,GAAG,EAAE,EAAE;gBACvC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY;gBAC7E,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAE5B,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAClC,CAAC,CAAC,qEAAqE;oBACvE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;wBACvB,CAAC,CAAC,oDAAoD;wBACtD,CAAC,CAAC,kDAAkD;gBAExD,KAAK,EAAE,eAAe,KAAK,CAAC,IAAI,+BAA+B;gBAE/D,UAAU,EAAE;oBACV,OAAO,EAAE,8CAA8C;oBACvD,OAAO,EAAE,sDAAsD;oBAC/D,OAAO,EAAE,8CAA8C;iBACxD;gBAED,kBAAkB,EAAE;oBAClB,IAAI,EAAE,qCAAqC;oBAC3C,MAAM,EAAE,4DAA4D;oBACpE,IAAI,EAAE,2CAA2C;oBACjD,MAAM,EAAE,qDAAqD;iBAC9D,CAAC,KAAK,CAAC,UAAU,CAAC;gBAEnB,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,aAAa,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,YAAY;gBAChE,SAAS;aACV,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iDAAiD;IAC9D,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACrE,gBAAgB,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,uBAAuB;aACrC;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,CAAC;gBACrE,WAAW,EAAE,0BAA0B;aACxC;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,kBAAkB,CAAC;KAC3D;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9C,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,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEtC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,wBAAwB,KAAK,CAAC,WAAW,EAAE;gBAClD,UAAU,EAAE,6DAA6D;aAC1E,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAElE,2BAA2B;QAC3B,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,MAAM,eAAe,GAAuE,EAAE,CAAC;QAE/F,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC7D,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;oBACjD,aAAa,IAAI,MAAM,CAAC;oBACxB,eAAe,CAAC,IAAI,CAAC;wBACnB,EAAE,EAAE,OAAO,CAAC,EAAE;wBACd,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,MAAM;qBACP,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,IAAI,aAAa,GAAG,SAAS,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,WAAW,CAAC,IAAI,CAAC,OAAO,MAAM,oCAAoC,CAAC,CAAC;QACtE,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,IAAI,aAAa,GAAG,SAAS,EAAE,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,WAAW,CAAC,IAAI,CAAC,UAAU,QAAQ,2BAA2B,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,SAAS,GAAG,aAAa,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACjD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,0BAA0B,UAAU,GAAG,CAAC,CAAC;YAC5D,CAAC;iBAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC1B,WAAW,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC;YACtD,WAAW,CAAC,IAAI,CAAC,OAAO,MAAM,0BAA0B,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAChE,CAAC;QAED,OAAO;YACL,SAAS,EAAE;gBACT,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,iBAAiB,EAAE,SAAS,CAAC,UAAU;gBACvC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;aACzC;YACD,QAAQ,EAAE;gBACR,aAAa;gBACb,WAAW,EAAE,MAAM;gBACnB,eAAe;aAChB;YACD,WAAW;YACX,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAiB;IACvD,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,+CAA+C;IAC5D,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;YACjE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;YACnE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;YACrD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;SAC/E;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEvD,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,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAEtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,sCAAsC;gBAC/C,WAAW,EAAE,EAAE;gBACf,GAAG,EAAE,wDAAwD;aAC9D,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,IAAI,QAAQ,GAAG,UAAU,CAAC;QAE1B,qBAAqB;QACrB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACpC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAChD,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC1C,CAAC;YACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,QAAQ,GAAG,WAAW,CAAC;YACzB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/C,4BAA4B;QAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAClC,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC7D,IAAI,OAAO,EAAE,CAAC;wBACZ,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aAC7D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,SAAS,WAAW,CAAC,MAAM,eAAe;YACnD,WAAW;YACX,OAAO,EAAE;gBACP,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,qBAAqB;IACrB,kBAAkB;IAClB,2BAA2B;CAC5B,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Engagement Hook Generator
3
+ *
4
+ * Tools for "treasure, personal, mystery" engagement encodings.
5
+ * Based on Alexandrian: "Make lore stick via treasure, mystery, personal ties."
6
+ */
7
+ import type { MCPToolEntry } from "@mythxengine/types";
8
+ /**
9
+ * personalize_content tool
10
+ */
11
+ export declare const personalizeContentTool: MCPToolEntry;
12
+ /**
13
+ * treasurify_information tool
14
+ */
15
+ export declare const treasurifyInformationTool: MCPToolEntry;
16
+ /**
17
+ * mystify_content tool
18
+ */
19
+ export declare const mystifyContentTool: MCPToolEntry;
20
+ /**
21
+ * generate_engagement_hooks tool
22
+ */
23
+ export declare const generateEngagementHooksTool: MCPToolEntry;
24
+ export declare const engagementTools: MCPToolEntry[];
25
+ //# sourceMappingURL=engagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engagement.d.ts","sourceRoot":"","sources":["../../src/tools/engagement.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+FvD;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAkHpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,YA4GvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAqHhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,YAgLzC,CAAC;AAEF,eAAO,MAAM,eAAe,gBAK3B,CAAC"}