@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,460 @@
1
+ /**
2
+ * Lead/Clue Discovery Tools
3
+ *
4
+ * Tools for managing leads (clues) during gameplay.
5
+ * Based on The Alexandrian's Three Clue Rule and node-based design.
6
+ */
7
+ import { z } from "zod";
8
+ import { sessionManager } from "../state/manager.js";
9
+ // Input schemas
10
+ const GetAvailableLeadsInput = z.object({
11
+ sessionId: z.string(),
12
+ locationId: z.string().optional().describe("Filter by location"),
13
+ npcId: z.string().optional().describe("Filter by NPC source"),
14
+ prominence: z.enum(["obvious", "available", "hidden", "obscured"]).optional(),
15
+ });
16
+ const RevealLeadInput = z.object({
17
+ sessionId: z.string(),
18
+ leadId: z.string(),
19
+ discoveryMethod: z.string(),
20
+ discoveryContext: z.string().optional(),
21
+ });
22
+ const SearchLeadsInput = z.object({
23
+ sessionId: z.string(),
24
+ query: z.string(),
25
+ });
26
+ const GetDiscoveredLeadsInput = z.object({
27
+ sessionId: z.string(),
28
+ });
29
+ const SuggestLeadOpportunityInput = z.object({
30
+ sessionId: z.string(),
31
+ targetSituationId: z.string(),
32
+ });
33
+ /**
34
+ * Format game time as human-readable string
35
+ */
36
+ function formatGameTime(time) {
37
+ const hour12 = time.hour % 12 || 12;
38
+ const ampm = time.hour < 12 ? "AM" : "PM";
39
+ const min = time.minute.toString().padStart(2, "0");
40
+ return `Day ${time.day}, ${hour12}:${min} ${ampm}`;
41
+ }
42
+ /**
43
+ * Get all situations from generated content
44
+ */
45
+ function getSituations(session) {
46
+ if (!session.generation?.generatedContent?.situations) {
47
+ return [];
48
+ }
49
+ return session.generation.generatedContent.situations;
50
+ }
51
+ /**
52
+ * Get all leads across all situations
53
+ */
54
+ function getAllLeads(situations) {
55
+ const leads = [];
56
+ for (const situation of situations) {
57
+ if (situation.outgoingLeads) {
58
+ leads.push(...situation.outgoingLeads);
59
+ }
60
+ }
61
+ return leads;
62
+ }
63
+ /**
64
+ * Check if a lead's prerequisites are met
65
+ */
66
+ function checkPrerequisites(lead, flags, gameTime) {
67
+ if (!lead.prerequisites) {
68
+ return { available: true };
69
+ }
70
+ // Check required flags
71
+ if (lead.prerequisites.requiredFlags) {
72
+ for (const flag of lead.prerequisites.requiredFlags) {
73
+ if (!flags.includes(flag)) {
74
+ return { available: false, reason: `Missing required flag: ${flag}` };
75
+ }
76
+ }
77
+ }
78
+ // Check blocked flags
79
+ if (lead.prerequisites.blockedByFlags) {
80
+ for (const flag of lead.prerequisites.blockedByFlags) {
81
+ if (flags.includes(flag)) {
82
+ return { available: false, reason: `Blocked by flag: ${flag}` };
83
+ }
84
+ }
85
+ }
86
+ // Check time window
87
+ if (lead.prerequisites.timeWindow) {
88
+ const { after, before } = lead.prerequisites.timeWindow;
89
+ if (after) {
90
+ if (gameTime.day < after.day || (gameTime.day === after.day && gameTime.hour < after.hour)) {
91
+ return { available: false, reason: `Not yet available (after Day ${after.day}, ${after.hour}:00)` };
92
+ }
93
+ }
94
+ if (before) {
95
+ if (gameTime.day > before.day || (gameTime.day === before.day && gameTime.hour >= before.hour)) {
96
+ return { available: false, reason: `No longer available (before Day ${before.day}, ${before.hour}:00)` };
97
+ }
98
+ }
99
+ }
100
+ return { available: true };
101
+ }
102
+ /**
103
+ * get_available_leads tool
104
+ */
105
+ export const getAvailableLeadsTool = {
106
+ name: "get_available_leads",
107
+ description: "List leads that are currently available for discovery. Filter by location, NPC, or prominence.",
108
+ inputSchema: {
109
+ type: "object",
110
+ properties: {
111
+ sessionId: { type: "string", description: "Session ID" },
112
+ locationId: { type: "string", description: "Filter by location ID" },
113
+ npcId: { type: "string", description: "Filter by NPC source ID" },
114
+ prominence: {
115
+ type: "string",
116
+ enum: ["obvious", "available", "hidden", "obscured"],
117
+ description: "Filter by prominence level",
118
+ },
119
+ },
120
+ required: ["sessionId"],
121
+ },
122
+ handler: async (args) => {
123
+ const input = GetAvailableLeadsInput.parse(args);
124
+ const session = await sessionManager.get(input.sessionId);
125
+ if (!session) {
126
+ throw new Error(`Session not found: ${input.sessionId}`);
127
+ }
128
+ const situations = getSituations(session);
129
+ if (situations.length === 0) {
130
+ return {
131
+ message: "No situations found. Generate situations first.",
132
+ leads: [],
133
+ };
134
+ }
135
+ const allLeads = getAllLeads(situations);
136
+ const discoveredIds = (session.discoveredLeads || []).map(d => d.leadId);
137
+ // Filter leads
138
+ const availableLeads = allLeads.filter(lead => {
139
+ // Skip already discovered
140
+ if (discoveredIds.includes(lead.id)) {
141
+ return false;
142
+ }
143
+ // Check prerequisites
144
+ const prereqCheck = checkPrerequisites(lead, session.flags, session.gameTime);
145
+ if (!prereqCheck.available) {
146
+ return false;
147
+ }
148
+ // Apply filters
149
+ if (input.prominence && lead.prominence !== input.prominence) {
150
+ return false;
151
+ }
152
+ if (input.locationId && lead.discovery.sourceId !== input.locationId) {
153
+ // Also check if method is "location" and sourceId matches
154
+ if (lead.discovery.method !== "location" || lead.discovery.sourceId !== input.locationId) {
155
+ return false;
156
+ }
157
+ }
158
+ if (input.npcId && lead.discovery.sourceId !== input.npcId) {
159
+ if (lead.discovery.method !== "npc" || lead.discovery.sourceId !== input.npcId) {
160
+ return false;
161
+ }
162
+ }
163
+ return true;
164
+ });
165
+ // Get target situation names for context
166
+ const situationMap = new Map(situations.map(s => [s.id, s.name]));
167
+ const leads = availableLeads.map(lead => ({
168
+ id: lead.id,
169
+ targetSituation: {
170
+ id: lead.targetSituationId,
171
+ name: situationMap.get(lead.targetSituationId) || "Unknown",
172
+ },
173
+ information: lead.information,
174
+ prominence: lead.prominence,
175
+ discovery: lead.discovery,
176
+ requiresTest: !!lead.discovery.test,
177
+ }));
178
+ return {
179
+ message: `${leads.length} lead(s) available`,
180
+ leads,
181
+ discoveredCount: discoveredIds.length,
182
+ totalCount: allLeads.length,
183
+ };
184
+ },
185
+ };
186
+ /**
187
+ * reveal_lead tool
188
+ */
189
+ export const revealLeadTool = {
190
+ name: "reveal_lead",
191
+ description: "Mark a lead as discovered by the players.",
192
+ inputSchema: {
193
+ type: "object",
194
+ properties: {
195
+ sessionId: { type: "string", description: "Session ID" },
196
+ leadId: { type: "string", description: "Lead ID to reveal" },
197
+ discoveryMethod: { type: "string", description: "How it was discovered" },
198
+ discoveryContext: { type: "string", description: "Additional context about discovery" },
199
+ },
200
+ required: ["sessionId", "leadId", "discoveryMethod"],
201
+ },
202
+ handler: async (args) => {
203
+ const input = RevealLeadInput.parse(args);
204
+ const session = await sessionManager.get(input.sessionId);
205
+ if (!session) {
206
+ throw new Error(`Session not found: ${input.sessionId}`);
207
+ }
208
+ const situations = getSituations(session);
209
+ const allLeads = getAllLeads(situations);
210
+ const lead = allLeads.find(l => l.id === input.leadId);
211
+ if (!lead) {
212
+ throw new Error(`Lead not found: ${input.leadId}`);
213
+ }
214
+ // Initialize discoveredLeads if needed
215
+ if (!session.discoveredLeads) {
216
+ session.discoveredLeads = [];
217
+ }
218
+ // Check if already discovered
219
+ if (session.discoveredLeads.some(d => d.leadId === input.leadId)) {
220
+ return {
221
+ message: "Lead already discovered",
222
+ lead: {
223
+ id: lead.id,
224
+ information: lead.information,
225
+ targetSituationId: lead.targetSituationId,
226
+ },
227
+ alreadyDiscovered: true,
228
+ };
229
+ }
230
+ // Record discovery
231
+ const discovered = {
232
+ leadId: lead.id,
233
+ targetSituationId: lead.targetSituationId,
234
+ discoveredAt: { ...session.gameTime },
235
+ discoveryMethod: input.discoveryMethod,
236
+ discoveryContext: input.discoveryContext,
237
+ information: lead.information,
238
+ };
239
+ session.discoveredLeads.push(discovered);
240
+ await sessionManager.save(session);
241
+ // Get target situation name
242
+ const targetSituation = situations.find(s => s.id === lead.targetSituationId);
243
+ return {
244
+ message: "Lead discovered!",
245
+ lead: {
246
+ id: lead.id,
247
+ information: lead.information,
248
+ targetSituation: {
249
+ id: lead.targetSituationId,
250
+ name: targetSituation?.name || "Unknown",
251
+ },
252
+ },
253
+ discoveredAt: formatGameTime(session.gameTime),
254
+ discoveryMethod: input.discoveryMethod,
255
+ totalDiscovered: session.discoveredLeads.length,
256
+ };
257
+ },
258
+ };
259
+ /**
260
+ * search_leads tool
261
+ */
262
+ export const searchLeadsTool = {
263
+ name: "search_leads",
264
+ description: "Search for leads by keyword across all lead information.",
265
+ inputSchema: {
266
+ type: "object",
267
+ properties: {
268
+ sessionId: { type: "string", description: "Session ID" },
269
+ query: { type: "string", description: "Search query" },
270
+ },
271
+ required: ["sessionId", "query"],
272
+ },
273
+ handler: async (args) => {
274
+ const input = SearchLeadsInput.parse(args);
275
+ const session = await sessionManager.get(input.sessionId);
276
+ if (!session) {
277
+ throw new Error(`Session not found: ${input.sessionId}`);
278
+ }
279
+ const situations = getSituations(session);
280
+ const allLeads = getAllLeads(situations);
281
+ const discoveredIds = (session.discoveredLeads || []).map(d => d.leadId);
282
+ const queryLower = input.query.toLowerCase();
283
+ const matches = allLeads.filter(lead => {
284
+ return (lead.information.toLowerCase().includes(queryLower) ||
285
+ lead.discovery.description.toLowerCase().includes(queryLower) ||
286
+ (lead.gmNotes && lead.gmNotes.toLowerCase().includes(queryLower)));
287
+ });
288
+ const situationMap = new Map(situations.map(s => [s.id, s.name]));
289
+ const results = matches.map(lead => ({
290
+ id: lead.id,
291
+ information: lead.information,
292
+ targetSituation: {
293
+ id: lead.targetSituationId,
294
+ name: situationMap.get(lead.targetSituationId) || "Unknown",
295
+ },
296
+ prominence: lead.prominence,
297
+ discoveryMethod: lead.discovery.method,
298
+ alreadyDiscovered: discoveredIds.includes(lead.id),
299
+ }));
300
+ return {
301
+ message: `Found ${results.length} lead(s) matching '${input.query}'`,
302
+ results,
303
+ };
304
+ },
305
+ };
306
+ /**
307
+ * get_discovered_leads tool
308
+ */
309
+ export const getDiscoveredLeadsTool = {
310
+ name: "get_discovered_leads",
311
+ description: "List all leads that players have discovered.",
312
+ inputSchema: {
313
+ type: "object",
314
+ properties: {
315
+ sessionId: { type: "string", description: "Session ID" },
316
+ },
317
+ required: ["sessionId"],
318
+ },
319
+ handler: async (args) => {
320
+ const input = GetDiscoveredLeadsInput.parse(args);
321
+ const session = await sessionManager.get(input.sessionId);
322
+ if (!session) {
323
+ throw new Error(`Session not found: ${input.sessionId}`);
324
+ }
325
+ if (!session.discoveredLeads || session.discoveredLeads.length === 0) {
326
+ return {
327
+ message: "No leads discovered yet",
328
+ leads: [],
329
+ };
330
+ }
331
+ const situations = getSituations(session);
332
+ const situationMap = new Map(situations.map(s => [s.id, s.name]));
333
+ const leads = session.discoveredLeads.map(d => ({
334
+ id: d.leadId,
335
+ information: d.information,
336
+ targetSituation: {
337
+ id: d.targetSituationId,
338
+ name: situationMap.get(d.targetSituationId) || "Unknown",
339
+ },
340
+ discoveredAt: formatGameTime(d.discoveredAt),
341
+ discoveryMethod: d.discoveryMethod,
342
+ discoveryContext: d.discoveryContext,
343
+ }));
344
+ return {
345
+ message: `${leads.length} lead(s) discovered`,
346
+ leads,
347
+ };
348
+ },
349
+ };
350
+ /**
351
+ * suggest_lead_opportunity tool
352
+ */
353
+ export const suggestLeadOpportunityTool = {
354
+ name: "suggest_lead_opportunity",
355
+ description: "Suggest ways to naturally surface leads pointing to a target situation. Supports the Three Clue Rule.",
356
+ inputSchema: {
357
+ type: "object",
358
+ properties: {
359
+ sessionId: { type: "string", description: "Session ID" },
360
+ targetSituationId: { type: "string", description: "Situation ID to find leads for" },
361
+ },
362
+ required: ["sessionId", "targetSituationId"],
363
+ },
364
+ handler: async (args) => {
365
+ const input = SuggestLeadOpportunityInput.parse(args);
366
+ const session = await sessionManager.get(input.sessionId);
367
+ if (!session) {
368
+ throw new Error(`Session not found: ${input.sessionId}`);
369
+ }
370
+ const situations = getSituations(session);
371
+ const targetSituation = situations.find(s => s.id === input.targetSituationId);
372
+ if (!targetSituation) {
373
+ throw new Error(`Situation not found: ${input.targetSituationId}`);
374
+ }
375
+ const discoveredIds = (session.discoveredLeads || []).map(d => d.leadId);
376
+ // Find all leads pointing to this situation
377
+ const leadsToTarget = [];
378
+ for (const situation of situations) {
379
+ for (const lead of situation.outgoingLeads || []) {
380
+ if (lead.targetSituationId === input.targetSituationId) {
381
+ const isDiscovered = discoveredIds.includes(lead.id);
382
+ const prereqCheck = checkPrerequisites(lead, session.flags, session.gameTime);
383
+ leadsToTarget.push({
384
+ lead,
385
+ sourceSituation: situation,
386
+ status: isDiscovered ? "discovered" : prereqCheck.available ? "available" : "blocked",
387
+ blockReason: prereqCheck.reason,
388
+ });
389
+ }
390
+ }
391
+ }
392
+ // Also include direct discovery methods
393
+ const directDiscovery = targetSituation.entryPoints.directDiscovery.map(d => ({
394
+ method: d.method,
395
+ description: d.description,
396
+ locationId: d.locationId,
397
+ npcId: d.npcId,
398
+ }));
399
+ // Calculate Three Clue Rule status
400
+ const availableEntryPoints = leadsToTarget.filter(l => l.status === "available").length + directDiscovery.length;
401
+ const threeClueStatus = availableEntryPoints >= 3 ? "satisfied" : availableEntryPoints >= 2 ? "adequate" : "at_risk";
402
+ // Generate suggestions
403
+ const suggestions = [];
404
+ // Suggest available leads
405
+ const availableLeads = leadsToTarget.filter(l => l.status === "available");
406
+ for (const { lead, sourceSituation } of availableLeads.slice(0, 3)) {
407
+ if (lead.discovery.method === "npc") {
408
+ suggestions.push(`NPC can mention: "${lead.information}" (from ${sourceSituation.name})`);
409
+ }
410
+ else if (lead.discovery.method === "location") {
411
+ suggestions.push(`At location, players can find: ${lead.discovery.description}`);
412
+ }
413
+ else if (lead.discovery.method === "observation") {
414
+ suggestions.push(`Players might notice: ${lead.discovery.description}`);
415
+ }
416
+ else {
417
+ suggestions.push(`Via ${lead.discovery.method}: ${lead.discovery.description}`);
418
+ }
419
+ }
420
+ // Suggest direct discovery
421
+ for (const d of directDiscovery.slice(0, 2)) {
422
+ suggestions.push(`Direct discovery via ${d.method}: ${d.description}`);
423
+ }
424
+ return {
425
+ targetSituation: {
426
+ id: targetSituation.id,
427
+ name: targetSituation.name,
428
+ },
429
+ threeClueRule: {
430
+ status: threeClueStatus,
431
+ availableEntryPoints,
432
+ minimumTarget: targetSituation.entryPoints.minimumLeadsTarget,
433
+ message: threeClueStatus === "satisfied"
434
+ ? "Three Clue Rule satisfied - multiple paths to discovery"
435
+ : threeClueStatus === "adequate"
436
+ ? "Two entry points available - consider adding another"
437
+ : "At risk - players may get stuck without more leads",
438
+ },
439
+ leads: leadsToTarget.map(({ lead, sourceSituation, status, blockReason }) => ({
440
+ id: lead.id,
441
+ fromSituation: sourceSituation.name,
442
+ prominence: lead.prominence,
443
+ discoveryMethod: lead.discovery.method,
444
+ discoveryDescription: lead.discovery.description,
445
+ status,
446
+ blockReason,
447
+ })),
448
+ directDiscovery,
449
+ suggestions,
450
+ };
451
+ },
452
+ };
453
+ export const leadTools = [
454
+ getAvailableLeadsTool,
455
+ revealLeadTool,
456
+ searchLeadsTool,
457
+ getDiscoveredLeadsTool,
458
+ suggestLeadOpportunityTool,
459
+ ];
460
+ //# sourceMappingURL=leads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leads.js","sourceRoot":"","sources":["../../src/tools/leads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Player management tools - CRUD operations for players
3
+ */
4
+ import type { MCPToolEntry } from "@mythxengine/types";
5
+ /**
6
+ * create_player tool
7
+ */
8
+ export declare const createPlayerTool: MCPToolEntry;
9
+ /**
10
+ * get_player tool
11
+ */
12
+ export declare const getPlayerTool: MCPToolEntry;
13
+ /**
14
+ * list_players tool
15
+ */
16
+ export declare const listPlayersTool: MCPToolEntry;
17
+ /**
18
+ * update_player tool
19
+ */
20
+ export declare const updatePlayerTool: MCPToolEntry;
21
+ /**
22
+ * delete_player tool
23
+ */
24
+ export declare const deletePlayerTool: MCPToolEntry;
25
+ /**
26
+ * assign_character tool
27
+ */
28
+ export declare const assignCharacterTool: MCPToolEntry;
29
+ export declare const playerTools: MCPToolEntry[];
30
+ //# sourceMappingURL=players.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"players.d.ts","sourceRoot":"","sources":["../../src/tools/players.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAU,MAAM,oBAAoB,CAAC;AAkE/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAoG9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YA0C3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAuC7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YA0G9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAqD9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YA+CjC,CAAC;AAEF,eAAO,MAAM,WAAW,gBAOvB,CAAC"}