@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,512 @@
1
+ /**
2
+ * World Pack Augmentation Tools
3
+ *
4
+ * Add new content to existing world packs.
5
+ */
6
+ import { z } from "zod";
7
+ import { randomUUID } from "crypto";
8
+ import { worldPackManager, saveWorldPack } from "../../state/worldpacks.js";
9
+ const StartAugmentationInput = z.object({
10
+ packId: z.string().describe("World pack ID to augment"),
11
+ request: z.object({
12
+ monsters: z.number().optional().describe("Number of monsters to add"),
13
+ items: z.number().optional().describe("Number of items to add"),
14
+ npcs: z.number().optional().describe("Number of NPCs to add"),
15
+ locations: z.number().optional().describe("Number of locations to add"),
16
+ encounters: z.number().optional().describe("Number of encounters to add"),
17
+ archetypes: z.number().optional().describe("Number of archetypes to add"),
18
+ }).describe("Content counts to generate"),
19
+ theme: z.string().optional().describe("Theme or focus for new content (e.g., 'ice-themed enemies', 'merchant guild')"),
20
+ locationContext: z.string().optional().describe("If adding to a specific location, its ID or description"),
21
+ });
22
+ /**
23
+ * start_augmentation tool
24
+ */
25
+ export const startAugmentationTool = {
26
+ name: "start_augmentation",
27
+ description: "Start adding new content to an existing world pack. Returns generation prompts for the requested content types.",
28
+ inputSchema: {
29
+ type: "object",
30
+ properties: {
31
+ packId: { type: "string", description: "World pack ID to augment" },
32
+ request: {
33
+ type: "object",
34
+ description: "Content counts to generate",
35
+ properties: {
36
+ monsters: { type: "number", description: "Number of monsters to add" },
37
+ items: { type: "number", description: "Number of items to add" },
38
+ npcs: { type: "number", description: "Number of NPCs to add" },
39
+ locations: { type: "number", description: "Number of locations to add" },
40
+ encounters: { type: "number", description: "Number of encounters to add" },
41
+ archetypes: { type: "number", description: "Number of archetypes to add" },
42
+ },
43
+ },
44
+ theme: { type: "string", description: "Theme or focus for new content" },
45
+ locationContext: { type: "string", description: "Location ID or description for contextual content" },
46
+ },
47
+ required: ["packId", "request"],
48
+ },
49
+ handler: async (args) => {
50
+ const input = StartAugmentationInput.parse(args);
51
+ // Load the world pack
52
+ const worldPack = await worldPackManager.get(input.packId);
53
+ if (!worldPack) {
54
+ throw new Error(`World pack not found: ${input.packId}`);
55
+ }
56
+ const augmentationId = randomUUID().slice(0, 8);
57
+ // Build context from existing world
58
+ const worldContext = buildWorldContext(worldPack);
59
+ const existingContent = summarizeExistingContent(worldPack);
60
+ // Generate prompts for each requested content type
61
+ const prompts = [];
62
+ const themeClause = input.theme ? `\n\nTheme/Focus: ${input.theme}` : "";
63
+ const locationClause = input.locationContext
64
+ ? `\n\nLocation Context: ${input.locationContext}`
65
+ : "";
66
+ if (input.request.monsters && input.request.monsters > 0) {
67
+ prompts.push({
68
+ type: "monsters",
69
+ count: input.request.monsters,
70
+ prompt: buildMonsterPrompt(worldContext, existingContent, input.request.monsters, themeClause + locationClause),
71
+ });
72
+ }
73
+ if (input.request.items && input.request.items > 0) {
74
+ prompts.push({
75
+ type: "items",
76
+ count: input.request.items,
77
+ prompt: buildItemPrompt(worldContext, existingContent, input.request.items, themeClause + locationClause),
78
+ });
79
+ }
80
+ if (input.request.npcs && input.request.npcs > 0) {
81
+ prompts.push({
82
+ type: "npcs",
83
+ count: input.request.npcs,
84
+ prompt: buildNPCPrompt(worldContext, existingContent, input.request.npcs, themeClause + locationClause),
85
+ });
86
+ }
87
+ if (input.request.locations && input.request.locations > 0) {
88
+ prompts.push({
89
+ type: "locations",
90
+ count: input.request.locations,
91
+ prompt: buildLocationPrompt(worldContext, existingContent, input.request.locations, themeClause),
92
+ });
93
+ }
94
+ if (input.request.encounters && input.request.encounters > 0) {
95
+ prompts.push({
96
+ type: "encounters",
97
+ count: input.request.encounters,
98
+ prompt: buildEncounterPrompt(worldContext, existingContent, input.request.encounters, themeClause + locationClause),
99
+ });
100
+ }
101
+ if (input.request.archetypes && input.request.archetypes > 0) {
102
+ prompts.push({
103
+ type: "archetypes",
104
+ count: input.request.archetypes,
105
+ prompt: buildArchetypePrompt(worldContext, existingContent, input.request.archetypes, themeClause),
106
+ });
107
+ }
108
+ if (prompts.length === 0) {
109
+ throw new Error("No content requested. Specify at least one content type with count > 0.");
110
+ }
111
+ return {
112
+ augmentationId,
113
+ packId: input.packId,
114
+ packName: worldPack.meta.name,
115
+ theme: input.theme || null,
116
+ prompts,
117
+ existingCounts: worldPack.meta.contentCounts,
118
+ message: `Augmentation ready for ${worldPack.meta.name}. Execute each prompt and call merge_augmentation with the results.`,
119
+ };
120
+ },
121
+ };
122
+ // Minimal schemas for content validation - ensure required fields are present
123
+ const ContentIdSchema = z.object({ id: z.string().min(1) }).passthrough();
124
+ const MergeAugmentationInput = z.object({
125
+ packId: z.string().describe("World pack ID to merge into"),
126
+ content: z.object({
127
+ monsters: z.array(ContentIdSchema).optional(),
128
+ items: z.array(ContentIdSchema).optional(),
129
+ npcs: z.array(ContentIdSchema.extend({ locations: z.array(z.string()).optional() })).optional(),
130
+ locations: z.array(ContentIdSchema).optional(),
131
+ encounters: z.array(ContentIdSchema.extend({ locationId: z.string().optional() })).optional(),
132
+ archetypes: z.array(ContentIdSchema).optional(),
133
+ }).describe("New content to merge"),
134
+ autoLink: z.boolean().optional().describe("Auto-link NPCs to locations, monsters to encounters (default: true)"),
135
+ });
136
+ /**
137
+ * merge_augmentation tool
138
+ */
139
+ export const mergeAugmentationTool = {
140
+ name: "merge_augmentation",
141
+ description: "Merge newly generated content into an existing world pack.",
142
+ inputSchema: {
143
+ type: "object",
144
+ properties: {
145
+ packId: { type: "string", description: "World pack ID to merge into" },
146
+ content: {
147
+ type: "object",
148
+ description: "New content arrays to merge",
149
+ properties: {
150
+ monsters: { type: "array", description: "New monsters" },
151
+ items: { type: "array", description: "New items" },
152
+ npcs: { type: "array", description: "New NPCs" },
153
+ locations: { type: "array", description: "New locations" },
154
+ encounters: { type: "array", description: "New encounters" },
155
+ archetypes: { type: "array", description: "New archetypes" },
156
+ },
157
+ },
158
+ autoLink: { type: "boolean", description: "Auto-link content (default: true)" },
159
+ },
160
+ required: ["packId", "content"],
161
+ },
162
+ handler: async (args) => {
163
+ const input = MergeAugmentationInput.parse(args);
164
+ const autoLink = input.autoLink !== false;
165
+ // Load the world pack
166
+ const worldPack = await worldPackManager.get(input.packId);
167
+ if (!worldPack) {
168
+ throw new Error(`World pack not found: ${input.packId}`);
169
+ }
170
+ const added = {};
171
+ // Merge each content type
172
+ // Note: Type assertions used because Zod's passthrough() validates id at runtime,
173
+ // but TypeScript can't infer the full shape. LLM-generated content has full structure.
174
+ if (input.content.monsters?.length) {
175
+ for (const monster of input.content.monsters) {
176
+ if (monster.id && !worldPack.monsters[monster.id]) {
177
+ worldPack.monsters[monster.id] = monster;
178
+ added.monsters = (added.monsters || 0) + 1;
179
+ }
180
+ }
181
+ }
182
+ if (input.content.items?.length) {
183
+ for (const item of input.content.items) {
184
+ if (item.id && !worldPack.items[item.id]) {
185
+ worldPack.items[item.id] = item;
186
+ added.items = (added.items || 0) + 1;
187
+ }
188
+ }
189
+ }
190
+ if (input.content.npcs?.length) {
191
+ for (const npc of input.content.npcs) {
192
+ if (npc.id && !worldPack.npcs[npc.id]) {
193
+ worldPack.npcs[npc.id] = npc;
194
+ added.npcs = (added.npcs || 0) + 1;
195
+ // Auto-link: add NPC to their locations
196
+ if (autoLink && npc.locations?.length) {
197
+ for (const locId of npc.locations) {
198
+ if (worldPack.locations[locId]) {
199
+ // Initialize npcs array if missing
200
+ if (!Array.isArray(worldPack.locations[locId].npcs)) {
201
+ worldPack.locations[locId].npcs = [];
202
+ }
203
+ if (!worldPack.locations[locId].npcs.includes(npc.id)) {
204
+ worldPack.locations[locId].npcs.push(npc.id);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ if (input.content.locations?.length) {
213
+ for (const location of input.content.locations) {
214
+ if (location.id && !worldPack.locations[location.id]) {
215
+ worldPack.locations[location.id] = location;
216
+ added.locations = (added.locations || 0) + 1;
217
+ }
218
+ }
219
+ }
220
+ if (input.content.encounters?.length) {
221
+ for (const encounter of input.content.encounters) {
222
+ if (encounter.id && !worldPack.encounters[encounter.id]) {
223
+ worldPack.encounters[encounter.id] = encounter;
224
+ added.encounters = (added.encounters || 0) + 1;
225
+ // Auto-link: add encounter to location if specified
226
+ if (autoLink && encounter.locationId && worldPack.locations[encounter.locationId]) {
227
+ // Initialize encounters array if missing
228
+ if (!Array.isArray(worldPack.locations[encounter.locationId].encounters)) {
229
+ worldPack.locations[encounter.locationId].encounters = [];
230
+ }
231
+ if (!worldPack.locations[encounter.locationId].encounters.includes(encounter.id)) {
232
+ worldPack.locations[encounter.locationId].encounters.push(encounter.id);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ if (input.content.archetypes?.length) {
239
+ for (const archetype of input.content.archetypes) {
240
+ if (archetype.id && !worldPack.archetypes[archetype.id]) {
241
+ worldPack.archetypes[archetype.id] = archetype;
242
+ added.archetypes = (added.archetypes || 0) + 1;
243
+ }
244
+ }
245
+ }
246
+ // Update content counts
247
+ worldPack.meta.contentCounts = {
248
+ archetypes: Object.keys(worldPack.archetypes).length,
249
+ items: Object.keys(worldPack.items).length,
250
+ monsters: Object.keys(worldPack.monsters).length,
251
+ encounters: Object.keys(worldPack.encounters).length,
252
+ conditions: Object.keys(worldPack.conditions).length,
253
+ locations: Object.keys(worldPack.locations).length,
254
+ npcs: Object.keys(worldPack.npcs).length,
255
+ factions: Object.keys(worldPack.factions || {}).length,
256
+ };
257
+ // Save the updated pack
258
+ await saveWorldPack(input.packId, worldPack);
259
+ return {
260
+ packId: input.packId,
261
+ packName: worldPack.meta.name,
262
+ added,
263
+ newCounts: worldPack.meta.contentCounts,
264
+ message: `Merged ${Object.values(added).reduce((a, b) => a + b, 0)} new items into ${worldPack.meta.name}.`,
265
+ };
266
+ },
267
+ };
268
+ // Helper functions
269
+ function buildWorldContext(pack) {
270
+ return `World: ${pack.meta.name}
271
+ Tagline: ${pack.meta.tagline}
272
+ Visual Style: ${pack.meta.aesthetic.visualStyle}
273
+ Tone: ${pack.meta.aesthetic.tone}
274
+ Themes: ${pack.meta.aesthetic.themes.join(", ")}
275
+ Lethality: ${pack.meta.settings.lethality}
276
+ Magic Level: ${pack.meta.settings.magicLevel}
277
+ Technology: ${pack.meta.settings.technologyLevel}
278
+ Supernatural: ${pack.meta.settings.supernaturalPresence}`;
279
+ }
280
+ function summarizeExistingContent(pack) {
281
+ const monsters = Object.values(pack.monsters).slice(0, 5).map(m => `${m.name} (${m.threat})`);
282
+ const npcs = Object.values(pack.npcs).slice(0, 5).map(n => n.name);
283
+ const locations = Object.values(pack.locations).slice(0, 5).map(l => `${l.name} (${l.type})`);
284
+ const items = Object.values(pack.items).slice(0, 5).map(i => `${i.name} (${i.kind})`);
285
+ return `Existing Content (samples):
286
+ - Monsters: ${monsters.join(", ")}${Object.keys(pack.monsters).length > 5 ? ` (+${Object.keys(pack.monsters).length - 5} more)` : ""}
287
+ - NPCs: ${npcs.join(", ")}${Object.keys(pack.npcs).length > 5 ? ` (+${Object.keys(pack.npcs).length - 5} more)` : ""}
288
+ - Locations: ${locations.join(", ")}${Object.keys(pack.locations).length > 5 ? ` (+${Object.keys(pack.locations).length - 5} more)` : ""}
289
+ - Items: ${items.join(", ")}${Object.keys(pack.items).length > 5 ? ` (+${Object.keys(pack.items).length - 5} more)` : ""}`;
290
+ }
291
+ function buildMonsterPrompt(worldContext, existing, count, extra) {
292
+ return {
293
+ system: `You are adding monsters to an existing RPG world pack. Create monsters that fit the established aesthetic and fill gaps in the existing roster. Each monster needs combat stats, behavior, and narrative hooks.
294
+
295
+ Abilities range from -3 to +3. Threat tiers: minion, standard, elite, boss.
296
+ Output valid JSON only.`,
297
+ user: `${worldContext}
298
+
299
+ ${existing}
300
+ ${extra}
301
+
302
+ Generate ${count} NEW monsters that complement the existing roster. Output JSON:
303
+ {
304
+ "monsters": [
305
+ {
306
+ "id": "monster:unique-slug",
307
+ "name": "Monster Name",
308
+ "description": "Physical description and lore",
309
+ "threatTier": "standard",
310
+ "hp": 10,
311
+ "armor": 1,
312
+ "abilities": { "STR": 1, "AGI": 0, "WIT": -1, "CON": 1 },
313
+ "attacks": [
314
+ { "name": "Attack Name", "damage": "d6+1", "description": "How it attacks" }
315
+ ],
316
+ "specialAbilities": ["Ability description"],
317
+ "behavior": "How it acts in combat",
318
+ "morale": "When it flees or surrenders",
319
+ "loot": ["What it drops"],
320
+ "habitat": "Where it's found",
321
+ "encounterHooks": ["Why PCs might face it"]
322
+ }
323
+ ]
324
+ }`,
325
+ outputSchemaName: "MonstersArray",
326
+ };
327
+ }
328
+ function buildItemPrompt(worldContext, existing, count, extra) {
329
+ return {
330
+ system: `You are adding items to an existing RPG world pack. Create items that fit the world's technology and magic level. Include weapons, armor, consumables, and special items.
331
+
332
+ Item kinds: weapon, armor, consumable, special, misc.
333
+ Output valid JSON only.`,
334
+ user: `${worldContext}
335
+
336
+ ${existing}
337
+ ${extra}
338
+
339
+ Generate ${count} NEW items. Output JSON:
340
+ {
341
+ "items": [
342
+ {
343
+ "id": "item:unique-slug",
344
+ "name": "Item Name",
345
+ "kind": "weapon",
346
+ "description": "What it looks like and does",
347
+ "properties": ["property1", "property2"],
348
+ "value": "common",
349
+ "damage": "d6",
350
+ "armor": 0,
351
+ "effect": "Special effect if any"
352
+ }
353
+ ]
354
+ }
355
+
356
+ Value: worthless, common, uncommon, rare, legendary.
357
+ Include damage only for weapons, armor only for armor.`,
358
+ outputSchemaName: "ItemsArray",
359
+ };
360
+ }
361
+ function buildNPCPrompt(worldContext, existing, count, extra) {
362
+ return {
363
+ system: `You are adding NPCs to an existing RPG world pack. Create memorable characters with distinct personalities, motivations, and narrative hooks.
364
+
365
+ Output valid JSON only.`,
366
+ user: `${worldContext}
367
+
368
+ ${existing}
369
+ ${extra}
370
+
371
+ Generate ${count} NEW NPCs. Output JSON:
372
+ {
373
+ "npcs": [
374
+ {
375
+ "id": "npc:unique-slug",
376
+ "name": "NPC Name",
377
+ "description": "Physical description",
378
+ "personality": "How they act and speak",
379
+ "motivation": "What they want",
380
+ "attitude": "friendly",
381
+ "narrativeRole": "ally",
382
+ "dialogueHints": ["Speech pattern or catchphrase"],
383
+ "locations": ["location:id-if-applicable"],
384
+ "secrets": ["Hidden information"],
385
+ "relationships": { "npc:other-id": "relationship description" }
386
+ }
387
+ ]
388
+ }
389
+
390
+ Attitude: hostile, unfriendly, neutral, friendly, allied.
391
+ Narrative roles: ally, neutral, antagonist, quest_giver, merchant, information.`,
392
+ outputSchemaName: "NPCsArray",
393
+ };
394
+ }
395
+ function buildLocationPrompt(worldContext, existing, count, extra) {
396
+ return {
397
+ system: `You are adding locations to an existing RPG world pack. Create explorable places with atmosphere, features, and adventure hooks.
398
+
399
+ Location types: settlement, dungeon, wilderness, landmark, building.
400
+ Output valid JSON only.`,
401
+ user: `${worldContext}
402
+
403
+ ${existing}
404
+ ${extra}
405
+
406
+ Generate ${count} NEW locations. Output JSON:
407
+ {
408
+ "locations": [
409
+ {
410
+ "id": "location:unique-slug",
411
+ "name": "Location Name",
412
+ "type": "settlement",
413
+ "description": "What the place looks like",
414
+ "atmosphere": "How it feels to be there",
415
+ "features": ["Notable feature 1", "Notable feature 2"],
416
+ "connections": [],
417
+ "encounters": [],
418
+ "npcs": [],
419
+ "secrets": ["Hidden things to discover"],
420
+ "gmNotes": "Running tips for the GM"
421
+ }
422
+ ]
423
+ }`,
424
+ outputSchemaName: "LocationsArray",
425
+ };
426
+ }
427
+ function buildEncounterPrompt(worldContext, existing, count, extra) {
428
+ return {
429
+ system: `You are adding encounters to an existing RPG world pack. Create combat, social, and event encounters that fit the world's tone.
430
+
431
+ Encounter types: combat, social, event, exploration.
432
+ Output valid JSON only.`,
433
+ user: `${worldContext}
434
+
435
+ ${existing}
436
+ ${extra}
437
+
438
+ Generate ${count} NEW encounters. Output JSON:
439
+ {
440
+ "encounters": [
441
+ {
442
+ "id": "encounter:unique-slug",
443
+ "name": "Encounter Name",
444
+ "type": "combat",
445
+ "description": "What's happening",
446
+ "setup": "How the encounter begins",
447
+ "locationId": "location:id-or-null",
448
+ "combat": {
449
+ "monsters": [
450
+ { "monsterId": "monster:existing-id", "count": 2 }
451
+ ],
452
+ "tactics": "How enemies fight",
453
+ "terrain": "Environmental factors"
454
+ },
455
+ "rewards": ["What PCs gain"],
456
+ "outcomes": {
457
+ "victory": "What happens on success",
458
+ "defeat": "What happens on failure",
459
+ "retreat": "What happens if they flee"
460
+ }
461
+ }
462
+ ]
463
+ }
464
+
465
+ For social encounters, use "social" object instead of "combat".
466
+ For events, use "event" object with triggers and consequences.`,
467
+ outputSchemaName: "EncountersArray",
468
+ };
469
+ }
470
+ function buildArchetypePrompt(worldContext, existing, count, extra) {
471
+ return {
472
+ system: `You are adding playable archetypes to an existing RPG world pack. Create character classes that fit the world and offer distinct playstyles.
473
+
474
+ Abilities: STR, AGI, WIT, CON (range -2 to +2 for starting).
475
+ Output valid JSON only.`,
476
+ user: `${worldContext}
477
+
478
+ ${existing}
479
+ ${extra}
480
+
481
+ Generate ${count} NEW archetypes. Output JSON:
482
+ {
483
+ "archetypes": [
484
+ {
485
+ "id": "archetype:unique-slug",
486
+ "name": "Archetype Name",
487
+ "tagline": "One-line concept",
488
+ "description": "What this archetype is about",
489
+ "starting": {
490
+ "abilities": { "STR": 0, "AGI": 1, "WIT": 1, "CON": 0 },
491
+ "hp": 8,
492
+ "maxHp": 8
493
+ },
494
+ "startingItems": ["item:existing-id"],
495
+ "features": [
496
+ {
497
+ "id": "feature-slug",
498
+ "name": "Feature Name",
499
+ "description": "What it does",
500
+ "type": "passive"
501
+ }
502
+ ],
503
+ "playstyle": "How to play this archetype",
504
+ "background": "Typical backstory hooks",
505
+ "flavor": "Narrative description"
506
+ }
507
+ ]
508
+ }`,
509
+ outputSchemaName: "ArchetypesArray",
510
+ };
511
+ }
512
+ //# sourceMappingURL=augment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"augment.js","sourceRoot":"","sources":["../../../src/tools/augmentation/augment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGpC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC1E,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;IACtH,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;CAC3G,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,iHAAiH;IAC9H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;YACnE,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;gBACzC,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;oBACtE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;oBAChE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC9D,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;oBACxE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;oBAC1E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;iBAC3E;aACF;YACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACxE,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;SACtG;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;KAChC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjD,sBAAsB;QACtB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhD,oCAAoC;QACpC,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE5D,mDAAmD;QACnD,MAAM,OAAO,GAIR,EAAE,CAAC;QAER,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe;YAC1C,CAAC,CAAC,yBAAyB,KAAK,CAAC,eAAe,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;gBAC7B,MAAM,EAAE,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAAC;aAChH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,MAAM,EAAE,eAAe,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAC;aAC1G,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;gBACzB,MAAM,EAAE,cAAc,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC;aACxG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS;gBAC9B,MAAM,EAAE,mBAAmB,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;aACjG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;gBAC/B,MAAM,EAAE,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,GAAG,cAAc,CAAC;aACpH,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU;gBAC/B,MAAM,EAAE,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;aACnG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO;YACL,cAAc;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,OAAO;YACP,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa;YAC5C,OAAO,EAAE,0BAA0B,SAAS,CAAC,IAAI,CAAC,IAAI,qEAAqE;SAC5H,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAE1E,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;QAC7C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;QAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC/F,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;QAC9C,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC7F,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;KAChD,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;CACjH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,4DAA4D;IACzE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;YACtE,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6BAA6B;gBAC1C,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;oBACxD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE;oBAClD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE;oBAChD,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE;oBAC1D,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;oBAC5D,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;iBAC7D;aACF;YACD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,mCAAmC,EAAE;SAChF;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;KAChC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC;QAE1C,sBAAsB;QACtB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,GAA2B,EAAE,CAAC;QAEzC,0BAA0B;QAC1B,kFAAkF;QAClF,uFAAuF;QACvF,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnC,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC7C,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClD,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAyD,CAAC;oBAC3F,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACvC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAmD,CAAC;oBAC/E,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACtC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAiD,CAAC;oBAC3E,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAEnC,wCAAwC;oBACxC,IAAI,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;wBACtC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;4BAClC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gCAC/B,mCAAmC;gCACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oCACpD,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;gCACvC,CAAC;gCACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oCACtD,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gCAC/C,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACpC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrD,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAA2D,CAAC;oBAC/F,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACjD,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;oBACxD,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAA6D,CAAC;oBACnG,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAE/C,oDAAoD;oBACpD,IAAI,QAAQ,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;wBAClF,yCAAyC;wBACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;4BACzE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;wBAC5D,CAAC;wBACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;4BACjF,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBAC1E,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACrC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACjD,IAAI,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;oBACxD,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAA6D,CAAC;oBACnG,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,SAAS,CAAC,IAAI,CAAC,aAAa,GAAG;YAC7B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM;YACpD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM;YAC1C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM;YAChD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM;YACpD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM;YACpD,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM;YAClD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM;YACxC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM;SACvD,CAAC;QAEF,wBAAwB;QACxB,MAAM,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAE7C,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI;YAC7B,KAAK;YACL,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa;YACvC,OAAO,EAAE,UAAU,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,mBAAmB,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG;SAC5G,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,mBAAmB;AAEnB,SAAS,iBAAiB,CAAC,IAAsB;IAC/C,OAAO,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI;WACtB,IAAI,CAAC,IAAI,CAAC,OAAO;gBACZ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;UACtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;aAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;eAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU;cAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe;gBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAsB;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAEtF,OAAO;cACK,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;UAC1H,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;eACrG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;WAC7H,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC3H,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAC9F,OAAO;QACL,MAAM,EAAE;;;wBAGY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;;;;;;EAsBd;QACE,gBAAgB,EAAE,eAAe;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAC3F,OAAO;QACL,MAAM,EAAE;;;wBAGY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;;uDAkBuC;QACnD,gBAAgB,EAAE,YAAY;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAC1F,OAAO;QACL,MAAM,EAAE;;wBAEY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;;;;gFAoBgE;QAC5E,gBAAgB,EAAE,WAAW;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAC/F,OAAO;QACL,MAAM,EAAE;;;wBAGY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;EAiBd;QACE,gBAAgB,EAAE,gBAAgB;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAChG,OAAO;QACL,MAAM,EAAE;;;wBAGY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;+DA4B+C;QAC3D,gBAAgB,EAAE,iBAAiB;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAAa,EAAE,KAAa;IAChG,OAAO;QACL,MAAM,EAAE;;;wBAGY;QACpB,IAAI,EAAE,GAAG,YAAY;;EAEvB,QAAQ;EACR,KAAK;;WAEI,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2Bd;QACE,gBAAgB,EAAE,iBAAiB;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Augmentation tools - add new content to existing world packs
3
+ */
4
+ export { startAugmentationTool, mergeAugmentationTool } from "./augment.js";
5
+ export declare const augmentationTools: import("@mythxengine/types").MCPToolEntry[];
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/augmentation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAI5E,eAAO,MAAM,iBAAiB,6CAAiD,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Augmentation tools - add new content to existing world packs
3
+ */
4
+ export { startAugmentationTool, mergeAugmentationTool } from "./augment.js";
5
+ import { startAugmentationTool, mergeAugmentationTool } from "./augment.js";
6
+ export const augmentationTools = [startAugmentationTool, mergeAugmentationTool];
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/augmentation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Character tools - CRUD operations for characters
3
+ */
4
+ import type { MCPToolEntry } from "@mythxengine/types";
5
+ /**
6
+ * create_character tool
7
+ */
8
+ export declare const createCharacterTool: MCPToolEntry;
9
+ /**
10
+ * get_character tool
11
+ */
12
+ export declare const getCharacterTool: MCPToolEntry;
13
+ /**
14
+ * update_character tool
15
+ */
16
+ export declare const updateCharacterTool: MCPToolEntry;
17
+ /**
18
+ * list_characters tool
19
+ */
20
+ export declare const listCharactersTool: MCPToolEntry;
21
+ /**
22
+ * delete_character tool
23
+ */
24
+ export declare const deleteCharacterTool: MCPToolEntry;
25
+ export declare const characterTools: MCPToolEntry[];
26
+ //# sourceMappingURL=characters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"characters.d.ts","sourceRoot":"","sources":["../../src/tools/characters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AA4D7E;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAwEjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YA0B9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAmJjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,YA+BhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAgCjC,CAAC;AAEF,eAAO,MAAM,cAAc,gBAM1B,CAAC"}