@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,490 @@
1
+ /**
2
+ * Portable Clues System
3
+ *
4
+ * Flexible revelations that can be delivered anywhere.
5
+ * Based on the Lazy DM pattern of "secrets and clues" abstracted from discovery.
6
+ */
7
+ import { z } from "zod";
8
+ import { sessionManager } from "../state/manager.js";
9
+ // Clue significance levels
10
+ const SIGNIFICANCE_LEVELS = ["minor", "moderate", "major", "critical"];
11
+ // Source types
12
+ const SOURCE_TYPES = ["npc", "location", "document", "observation", "item"];
13
+ // Input schemas
14
+ const CreateClueInput = z.object({
15
+ sessionId: z.string(),
16
+ information: z.string(),
17
+ significance: z.enum(SIGNIFICANCE_LEVELS),
18
+ suggestedSources: z.array(z.object({
19
+ type: z.enum(SOURCE_TYPES),
20
+ id: z.string().optional(),
21
+ description: z.string(),
22
+ })),
23
+ prerequisites: z.object({
24
+ requiredFlags: z.array(z.string()).optional(),
25
+ requiredEvidence: z.array(z.string()).optional(),
26
+ notBefore: z.object({ day: z.number(), hour: z.number() }).optional(),
27
+ }).optional(),
28
+ revealsLeadTo: z.string().optional(),
29
+ setsFlags: z.array(z.string()).optional(),
30
+ gmNotes: z.string().optional(),
31
+ });
32
+ const GetUnrevealedCluesInput = z.object({
33
+ sessionId: z.string(),
34
+ significance: z.enum(SIGNIFICANCE_LEVELS).optional(),
35
+ locationId: z.string().optional(),
36
+ npcId: z.string().optional(),
37
+ });
38
+ const RevealClueInput = z.object({
39
+ sessionId: z.string(),
40
+ clueId: z.string(),
41
+ via: z.string(),
42
+ });
43
+ const SuggestClueDeliveryInput = z.object({
44
+ sessionId: z.string(),
45
+ clueId: z.string(),
46
+ currentLocationId: z.string().optional(),
47
+ presentNpcIds: z.array(z.string()).optional(),
48
+ currentActivity: z.string().optional(),
49
+ });
50
+ const ImportLeadsInput = z.object({
51
+ sessionId: z.string(),
52
+ situationId: z.string(),
53
+ });
54
+ /**
55
+ * Format game time
56
+ */
57
+ function formatGameTime(time) {
58
+ const hour12 = time.hour % 12 || 12;
59
+ const ampm = time.hour < 12 ? "AM" : "PM";
60
+ const min = time.minute.toString().padStart(2, "0");
61
+ return `Day ${time.day}, ${hour12}:${min} ${ampm}`;
62
+ }
63
+ /**
64
+ * Get clues from session
65
+ */
66
+ function getClues(session) {
67
+ return session.worldState.portableClues || [];
68
+ }
69
+ /**
70
+ * Save clues to session
71
+ */
72
+ function saveClues(session, clues) {
73
+ session.worldState.portableClues = clues;
74
+ }
75
+ /**
76
+ * Check if clue prerequisites are met
77
+ */
78
+ function checkPrerequisites(clue, flags, gameTime, investigations) {
79
+ if (!clue.prerequisites) {
80
+ return { available: true };
81
+ }
82
+ // Check required flags
83
+ if (clue.prerequisites.requiredFlags) {
84
+ for (const flag of clue.prerequisites.requiredFlags) {
85
+ if (!flags.includes(flag)) {
86
+ return { available: false, reason: `Missing flag: ${flag}` };
87
+ }
88
+ }
89
+ }
90
+ // Check required evidence
91
+ if (clue.prerequisites.requiredEvidence) {
92
+ const allEvidence = investigations.flatMap(i => i.evidence.map(e => e.id));
93
+ for (const evidenceId of clue.prerequisites.requiredEvidence) {
94
+ if (!allEvidence.includes(evidenceId)) {
95
+ return { available: false, reason: `Missing evidence: ${evidenceId}` };
96
+ }
97
+ }
98
+ }
99
+ // Check time window
100
+ if (clue.prerequisites.notBefore) {
101
+ const { day, hour } = clue.prerequisites.notBefore;
102
+ if (gameTime.day < day || (gameTime.day === day && gameTime.hour < hour)) {
103
+ return { available: false, reason: `Not available until Day ${day}, ${hour}:00` };
104
+ }
105
+ }
106
+ return { available: true };
107
+ }
108
+ /**
109
+ * create_portable_clue tool
110
+ */
111
+ export const createPortableClueTool = {
112
+ name: "create_portable_clue",
113
+ description: "Create a revelation that can be discovered through multiple sources. The ultimate flexible clue.",
114
+ inputSchema: {
115
+ type: "object",
116
+ properties: {
117
+ sessionId: { type: "string", description: "Session ID" },
118
+ information: { type: "string", description: "What the clue reveals" },
119
+ significance: {
120
+ type: "string",
121
+ enum: SIGNIFICANCE_LEVELS,
122
+ description: "How important this clue is",
123
+ },
124
+ suggestedSources: {
125
+ type: "array",
126
+ items: {
127
+ type: "object",
128
+ properties: {
129
+ type: { type: "string", enum: SOURCE_TYPES },
130
+ id: { type: "string", description: "NPC/location/item ID" },
131
+ description: { type: "string", description: "How to deliver via this source" },
132
+ },
133
+ required: ["type", "description"],
134
+ },
135
+ description: "Ways this clue can be discovered",
136
+ },
137
+ prerequisites: {
138
+ type: "object",
139
+ properties: {
140
+ requiredFlags: { type: "array", items: { type: "string" } },
141
+ requiredEvidence: { type: "array", items: { type: "string" } },
142
+ notBefore: {
143
+ type: "object",
144
+ properties: {
145
+ day: { type: "number" },
146
+ hour: { type: "number" },
147
+ },
148
+ },
149
+ },
150
+ },
151
+ revealsLeadTo: { type: "string", description: "Situation ID this clue points to" },
152
+ setsFlags: { type: "array", items: { type: "string" }, description: "Flags to set when revealed" },
153
+ gmNotes: { type: "string", description: "GM-only notes" },
154
+ },
155
+ required: ["sessionId", "information", "significance", "suggestedSources"],
156
+ },
157
+ handler: async (args) => {
158
+ const input = CreateClueInput.parse(args);
159
+ const session = await sessionManager.get(input.sessionId);
160
+ if (!session) {
161
+ throw new Error(`Session not found: ${input.sessionId}`);
162
+ }
163
+ const clues = getClues(session);
164
+ const id = `clue:${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
165
+ const clue = {
166
+ id,
167
+ information: input.information,
168
+ significance: input.significance,
169
+ suggestedSources: input.suggestedSources,
170
+ prerequisites: input.prerequisites,
171
+ revealsLeadTo: input.revealsLeadTo,
172
+ setsFlags: input.setsFlags,
173
+ revealed: false,
174
+ gmNotes: input.gmNotes,
175
+ };
176
+ clues.push(clue);
177
+ saveClues(session, clues);
178
+ await sessionManager.save(session);
179
+ return {
180
+ message: "Portable clue created",
181
+ clue: {
182
+ id: clue.id,
183
+ information: clue.information,
184
+ significance: clue.significance,
185
+ sourceCount: clue.suggestedSources.length,
186
+ hasPrerequisites: !!clue.prerequisites,
187
+ },
188
+ tip: "This clue can now be revealed through any of its suggested sources, or improvised through other means.",
189
+ };
190
+ },
191
+ };
192
+ /**
193
+ * get_unrevealed_clues tool
194
+ */
195
+ export const getUnrevealedCluesTool = {
196
+ name: "get_unrevealed_clues",
197
+ description: "List clues that haven't been discovered yet. Filter by significance, location, or NPC.",
198
+ inputSchema: {
199
+ type: "object",
200
+ properties: {
201
+ sessionId: { type: "string", description: "Session ID" },
202
+ significance: { type: "string", enum: SIGNIFICANCE_LEVELS, description: "Filter by significance" },
203
+ locationId: { type: "string", description: "Filter by location as suggested source" },
204
+ npcId: { type: "string", description: "Filter by NPC as suggested source" },
205
+ },
206
+ required: ["sessionId"],
207
+ },
208
+ handler: async (args) => {
209
+ const input = GetUnrevealedCluesInput.parse(args);
210
+ const session = await sessionManager.get(input.sessionId);
211
+ if (!session) {
212
+ throw new Error(`Session not found: ${input.sessionId}`);
213
+ }
214
+ const clues = getClues(session);
215
+ const investigations = session.worldState.investigations || [];
216
+ // Filter unrevealed clues
217
+ let filtered = clues.filter(c => !c.revealed);
218
+ // Check prerequisites
219
+ filtered = filtered.filter(c => {
220
+ const check = checkPrerequisites(c, session.flags, session.gameTime, investigations);
221
+ return check.available;
222
+ });
223
+ // Apply filters
224
+ if (input.significance) {
225
+ filtered = filtered.filter(c => c.significance === input.significance);
226
+ }
227
+ if (input.locationId) {
228
+ filtered = filtered.filter(c => c.suggestedSources.some(s => s.type === "location" && s.id === input.locationId));
229
+ }
230
+ if (input.npcId) {
231
+ filtered = filtered.filter(c => c.suggestedSources.some(s => s.type === "npc" && s.id === input.npcId));
232
+ }
233
+ // Sort by significance (critical first)
234
+ const order = { critical: 0, major: 1, moderate: 2, minor: 3 };
235
+ filtered.sort((a, b) => order[a.significance] - order[b.significance]);
236
+ return {
237
+ message: `${filtered.length} unrevealed clue(s) available`,
238
+ clues: filtered.map(c => ({
239
+ id: c.id,
240
+ information: c.information,
241
+ significance: c.significance,
242
+ suggestedSources: c.suggestedSources.map(s => ({
243
+ type: s.type,
244
+ description: s.description,
245
+ })),
246
+ revealsLeadTo: c.revealsLeadTo,
247
+ })),
248
+ filters: {
249
+ significance: input.significance,
250
+ locationId: input.locationId,
251
+ npcId: input.npcId,
252
+ },
253
+ };
254
+ },
255
+ };
256
+ /**
257
+ * reveal_clue tool
258
+ */
259
+ export const revealClueTool = {
260
+ name: "reveal_clue",
261
+ description: "Mark a portable clue as discovered.",
262
+ inputSchema: {
263
+ type: "object",
264
+ properties: {
265
+ sessionId: { type: "string", description: "Session ID" },
266
+ clueId: { type: "string", description: "Clue ID to reveal" },
267
+ via: { type: "string", description: "How it was revealed (description)" },
268
+ },
269
+ required: ["sessionId", "clueId", "via"],
270
+ },
271
+ handler: async (args) => {
272
+ const input = RevealClueInput.parse(args);
273
+ const session = await sessionManager.get(input.sessionId);
274
+ if (!session) {
275
+ throw new Error(`Session not found: ${input.sessionId}`);
276
+ }
277
+ const clues = getClues(session);
278
+ const clue = clues.find(c => c.id === input.clueId);
279
+ if (!clue) {
280
+ throw new Error(`Clue not found: ${input.clueId}`);
281
+ }
282
+ if (clue.revealed) {
283
+ return {
284
+ message: "Clue was already revealed",
285
+ clue: {
286
+ id: clue.id,
287
+ information: clue.information,
288
+ revealedAt: clue.revealedAt ? formatGameTime(clue.revealedAt) : undefined,
289
+ revealedVia: clue.revealedVia,
290
+ },
291
+ alreadyRevealed: true,
292
+ };
293
+ }
294
+ // Mark as revealed
295
+ clue.revealed = true;
296
+ clue.revealedAt = { ...session.gameTime };
297
+ clue.revealedVia = input.via;
298
+ // Set any flags
299
+ if (clue.setsFlags) {
300
+ for (const flag of clue.setsFlags) {
301
+ if (!session.flags.includes(flag)) {
302
+ session.flags.push(flag);
303
+ }
304
+ }
305
+ }
306
+ saveClues(session, clues);
307
+ await sessionManager.save(session);
308
+ return {
309
+ message: "Clue revealed!",
310
+ clue: {
311
+ id: clue.id,
312
+ information: clue.information,
313
+ significance: clue.significance,
314
+ revealedAt: formatGameTime(session.gameTime),
315
+ revealedVia: input.via,
316
+ },
317
+ flagsSet: clue.setsFlags || [],
318
+ revealsLeadTo: clue.revealsLeadTo,
319
+ };
320
+ },
321
+ };
322
+ /**
323
+ * suggest_clue_delivery tool
324
+ */
325
+ export const suggestClueDeliveryTool = {
326
+ name: "suggest_clue_delivery",
327
+ description: "Get suggestions for how to naturally deliver a clue in the current context.",
328
+ inputSchema: {
329
+ type: "object",
330
+ properties: {
331
+ sessionId: { type: "string", description: "Session ID" },
332
+ clueId: { type: "string", description: "Clue ID" },
333
+ currentLocationId: { type: "string", description: "Current location" },
334
+ presentNpcIds: { type: "array", items: { type: "string" }, description: "NPCs present" },
335
+ currentActivity: { type: "string", description: "What's happening now" },
336
+ },
337
+ required: ["sessionId", "clueId"],
338
+ },
339
+ handler: async (args) => {
340
+ const input = SuggestClueDeliveryInput.parse(args);
341
+ const session = await sessionManager.get(input.sessionId);
342
+ if (!session) {
343
+ throw new Error(`Session not found: ${input.sessionId}`);
344
+ }
345
+ const clues = getClues(session);
346
+ const clue = clues.find(c => c.id === input.clueId);
347
+ if (!clue) {
348
+ throw new Error(`Clue not found: ${input.clueId}`);
349
+ }
350
+ const suggestions = [];
351
+ // Check each suggested source against current context
352
+ for (const source of clue.suggestedSources) {
353
+ let matchesContext = false;
354
+ if (source.type === "location" && input.currentLocationId && source.id === input.currentLocationId) {
355
+ matchesContext = true;
356
+ }
357
+ if (source.type === "npc" && input.presentNpcIds?.includes(source.id || "")) {
358
+ matchesContext = true;
359
+ }
360
+ if (source.type === "observation") {
361
+ matchesContext = true; // Can always observe
362
+ }
363
+ suggestions.push({
364
+ method: source.type,
365
+ description: source.description,
366
+ matchesContext,
367
+ });
368
+ }
369
+ // Add improvised suggestions based on activity
370
+ if (input.currentActivity) {
371
+ const activityLower = input.currentActivity.toLowerCase();
372
+ if (activityLower.includes("search") || activityLower.includes("investigate")) {
373
+ suggestions.push({
374
+ method: "discovery",
375
+ description: `During the search, they find evidence: "${clue.information}"`,
376
+ matchesContext: true,
377
+ });
378
+ }
379
+ if (activityLower.includes("conversation") || activityLower.includes("talk")) {
380
+ suggestions.push({
381
+ method: "dialogue",
382
+ description: `The NPC mentions: "${clue.information}"`,
383
+ matchesContext: true,
384
+ });
385
+ }
386
+ }
387
+ // Sort by context match
388
+ suggestions.sort((a, b) => (b.matchesContext ? 1 : 0) - (a.matchesContext ? 1 : 0));
389
+ return {
390
+ clue: {
391
+ id: clue.id,
392
+ information: clue.information,
393
+ significance: clue.significance,
394
+ },
395
+ suggestions,
396
+ context: {
397
+ currentLocationId: input.currentLocationId,
398
+ presentNpcIds: input.presentNpcIds,
399
+ currentActivity: input.currentActivity,
400
+ },
401
+ tip: "Choose a delivery method that feels natural to the current scene.",
402
+ };
403
+ },
404
+ };
405
+ /**
406
+ * import_leads_as_clues tool
407
+ */
408
+ export const importLeadsAsCluesTool = {
409
+ name: "import_leads_as_clues",
410
+ description: "Convert situation leads into portable clues for flexible delivery.",
411
+ inputSchema: {
412
+ type: "object",
413
+ properties: {
414
+ sessionId: { type: "string", description: "Session ID" },
415
+ situationId: { type: "string", description: "Situation ID to import leads from" },
416
+ },
417
+ required: ["sessionId", "situationId"],
418
+ },
419
+ handler: async (args) => {
420
+ const input = ImportLeadsInput.parse(args);
421
+ const session = await sessionManager.get(input.sessionId);
422
+ if (!session) {
423
+ throw new Error(`Session not found: ${input.sessionId}`);
424
+ }
425
+ // Get situation
426
+ const situations = session.generation?.generatedContent?.situations || [];
427
+ const situation = situations.find(s => s.id === input.situationId);
428
+ if (!situation) {
429
+ throw new Error(`Situation not found: ${input.situationId}`);
430
+ }
431
+ if (!situation.outgoingLeads || situation.outgoingLeads.length === 0) {
432
+ return {
433
+ message: "Situation has no outgoing leads to import.",
434
+ imported: 0,
435
+ };
436
+ }
437
+ const clues = getClues(session);
438
+ const imported = [];
439
+ for (const lead of situation.outgoingLeads) {
440
+ // Check if already imported
441
+ if (clues.some(c => c.gmNotes?.includes(lead.id))) {
442
+ continue;
443
+ }
444
+ // Map lead method to source type
445
+ const sourceType = (lead.discovery.method === "npc" ? "npc" :
446
+ lead.discovery.method === "location" ? "location" :
447
+ lead.discovery.method === "document" ? "document" :
448
+ lead.discovery.method === "item" ? "item" : "observation");
449
+ // Determine significance from prominence
450
+ const significance = (lead.prominence === "obvious" ? "minor" :
451
+ lead.prominence === "available" ? "moderate" :
452
+ lead.prominence === "hidden" ? "major" : "critical");
453
+ const clue = {
454
+ id: `clue:from-lead-${lead.id}-${Date.now()}`,
455
+ information: lead.information,
456
+ significance,
457
+ suggestedSources: [{
458
+ type: sourceType,
459
+ id: lead.discovery.sourceId,
460
+ description: lead.discovery.description,
461
+ }],
462
+ revealsLeadTo: lead.targetSituationId,
463
+ revealed: false,
464
+ gmNotes: `Imported from lead: ${lead.id}`,
465
+ };
466
+ clues.push(clue);
467
+ imported.push(clue.id);
468
+ }
469
+ saveClues(session, clues);
470
+ await sessionManager.save(session);
471
+ return {
472
+ message: `Imported ${imported.length} lead(s) as portable clues`,
473
+ situation: {
474
+ id: situation.id,
475
+ name: situation.name,
476
+ },
477
+ imported: imported.length,
478
+ clueIds: imported,
479
+ tip: "These clues can now be delivered flexibly through any appropriate source.",
480
+ };
481
+ },
482
+ };
483
+ export const portableClueTools = [
484
+ createPortableClueTool,
485
+ getUnrevealedCluesTool,
486
+ revealClueTool,
487
+ suggestClueDeliveryTool,
488
+ importLeadsAsCluesTool,
489
+ ];
490
+ //# sourceMappingURL=portable-clues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-clues.js","sourceRoot":"","sources":["../../src/tools/portable-clues.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,2BAA2B;AAC3B,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAU,CAAC;AAEhF,eAAe;AACf,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;AAgCrF,gBAAgB;AAChB,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACzC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;KACxB,CAAC,CAAC;IACH,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;QACtB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC7C,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;KACtE,CAAC,CAAC,QAAQ,EAAE;IACb,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;IACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,OAAgD;IAChE,OAAQ,OAAO,CAAC,UAAU,CAAC,aAAgC,IAAI,EAAE,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,OAAgD,EAAE,KAAqB;IACxF,OAAO,CAAC,UAAU,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAkB,EAClB,KAAe,EACf,QAAkB,EAClB,cAA0D;IAE1D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,UAAU,EAAE,EAAE,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QACnD,IAAI,QAAQ,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAiB;IAClD,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,kGAAkG;IAC/G,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,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,4BAA4B;aAC1C;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;wBAC5C,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;wBAC3D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;qBAC/E;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;iBAClC;gBACD,WAAW,EAAE,kCAAkC;aAChD;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAC3D,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAC9D,SAAS,EAAE;wBACT,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACvB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBACzB;qBACF;iBACF;aACF;YACD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;YAClF,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE;YAClG,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;SAC1D;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,kBAAkB,CAAC;KAC3E;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1C,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,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEhC,MAAM,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAE1E,MAAM,IAAI,GAAiB;YACzB,EAAE;YACF,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO;YACL,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;gBACzC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa;aACvC;YACD,GAAG,EAAE,wGAAwG;SAC9G,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAiB;IAClD,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,wFAAwF;IACrG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAClG,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;YACrF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;SAC5E;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElD,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,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,cAAc,GAAI,OAAO,CAAC,UAAU,CAAC,cAA6D,IAAI,EAAE,CAAC;QAE/G,0BAA0B;QAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE9C,sBAAsB;QACtB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACrF,OAAO,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1B,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CACnD,CACF,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1B,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CACzC,CACF,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;QAEvE,OAAO;YACL,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,+BAA+B;YAC1D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC7C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC,CAAC;gBACH,aAAa,EAAE,CAAC,CAAC,aAAa;aAC/B,CAAC,CAAC;YACH,OAAO,EAAE;gBACP,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;YAC5D,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;SAC1E;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC;KACzC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE1C,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,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;gBACL,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE;oBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzE,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B;gBACD,eAAe,EAAE,IAAI;aACtB,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC;QAE7B,gBAAgB;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO;YACL,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC5C,WAAW,EAAE,KAAK,CAAC,GAAG;aACvB;YACD,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;YAC9B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAiB;IACnD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,6EAA6E;IAC1F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;YACxD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YAClD,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACtE,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE;YACxF,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;SACzE;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;KAClC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEnD,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,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,WAAW,GAIZ,EAAE,CAAC;QAER,sDAAsD;QACtD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3C,IAAI,cAAc,GAAG,KAAK,CAAC;YAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,iBAAiB,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBACnG,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC5E,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,cAAc,GAAG,IAAI,CAAC,CAAC,qBAAqB;YAC9C,CAAC;YAED,WAAW,CAAC,IAAI,CAAC;gBACf,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QAED,+CAA+C;QAC/C,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;YAE1D,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9E,WAAW,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,WAAW;oBACnB,WAAW,EAAE,2CAA2C,IAAI,CAAC,WAAW,GAAG;oBAC3E,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7E,WAAW,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,UAAU;oBAClB,WAAW,EAAE,sBAAsB,IAAI,CAAC,WAAW,GAAG;oBACtD,cAAc,EAAE,IAAI;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpF,OAAO;YACL,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC;YACD,WAAW;YACX,OAAO,EAAE;gBACP,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,eAAe,EAAE,KAAK,CAAC,eAAe;aACvC;YACD,GAAG,EAAE,mEAAmE;SACzE,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAiB;IAClD,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,oEAAoE;IACjF,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,mCAAmC,EAAE;SAClF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;KACvC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE3C,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,gBAAgB;QAChB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAcvD,IAAI,EAAE,CAAC;QAET,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,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO;gBACL,OAAO,EAAE,4CAA4C;gBACrD,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC3C,4BAA4B;YAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,iCAAiC;YACjC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACjD,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;wBACjD,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAgC,CAAC;YAEhG,yCAAyC;YACzC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC7D,IAAI,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAC5C,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAuC,CAAC;YAE/F,MAAM,IAAI,GAAiB;gBACzB,EAAE,EAAE,kBAAkB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY;gBACZ,gBAAgB,EAAE,CAAC;wBACjB,IAAI,EAAE,UAAU;wBAChB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;wBAC3B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;qBACxC,CAAC;gBACF,aAAa,EAAE,IAAI,CAAC,iBAAiB;gBACrC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,uBAAuB,IAAI,CAAC,EAAE,EAAE;aAC1C,CAAC;YAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO;YACL,OAAO,EAAE,YAAY,QAAQ,CAAC,MAAM,4BAA4B;YAChE,SAAS,EAAE;gBACT,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;aACrB;YACD,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,OAAO,EAAE,QAAQ;YACjB,GAAG,EAAE,2EAA2E;SACjF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,sBAAsB;IACtB,sBAAsB;IACtB,cAAc;IACd,uBAAuB;IACvB,sBAAsB;CACvB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * NPC Relationship Tracking Tools
3
+ *
4
+ * Tools for tracking NPC attitudes and interaction history.
5
+ * Supports the GM Mastery principle: "Track how players treated them."
6
+ */
7
+ import type { MCPToolEntry } from "@mythxengine/types";
8
+ /**
9
+ * get_relationship tool
10
+ */
11
+ export declare const getRelationshipTool: MCPToolEntry;
12
+ /**
13
+ * initialize_relationship tool
14
+ */
15
+ export declare const initializeRelationshipTool: MCPToolEntry;
16
+ /**
17
+ * update_relationship tool
18
+ */
19
+ export declare const updateRelationshipTool: MCPToolEntry;
20
+ /**
21
+ * list_relationships tool
22
+ */
23
+ export declare const listRelationshipsTool: MCPToolEntry;
24
+ /**
25
+ * get_npc_disposition tool
26
+ */
27
+ export declare const getNpcDispositionTool: MCPToolEntry;
28
+ export declare const relationshipTools: MCPToolEntry[];
29
+ //# sourceMappingURL=relationships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../src/tools/relationships.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,oBAAoB,CAAC;AAgHlF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YA8CjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,YA4ExC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAiIpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAkEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YA0DnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBAM7B,CAAC"}