@mythxengine/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/__tests__/assemble.test.d.ts +2 -0
- package/dist/__tests__/assemble.test.d.ts.map +1 -0
- package/dist/__tests__/assemble.test.js +81 -0
- package/dist/__tests__/assemble.test.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +202 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +91 -0
- package/dist/server.js.map +1 -0
- package/dist/state/manager.d.ts +88 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +308 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/rules.d.ts +30 -0
- package/dist/state/rules.d.ts.map +1 -0
- package/dist/state/rules.js +61 -0
- package/dist/state/rules.js.map +1 -0
- package/dist/state/worldpacks.d.ts +43 -0
- package/dist/state/worldpacks.d.ts.map +1 -0
- package/dist/state/worldpacks.js +125 -0
- package/dist/state/worldpacks.js.map +1 -0
- package/dist/tools/augmentation/augment.d.ts +15 -0
- package/dist/tools/augmentation/augment.d.ts.map +1 -0
- package/dist/tools/augmentation/augment.js +512 -0
- package/dist/tools/augmentation/augment.js.map +1 -0
- package/dist/tools/augmentation/index.d.ts +6 -0
- package/dist/tools/augmentation/index.d.ts.map +1 -0
- package/dist/tools/augmentation/index.js +7 -0
- package/dist/tools/augmentation/index.js.map +1 -0
- package/dist/tools/characters.d.ts +26 -0
- package/dist/tools/characters.d.ts.map +1 -0
- package/dist/tools/characters.js +362 -0
- package/dist/tools/characters.js.map +1 -0
- package/dist/tools/clocks.d.ts +33 -0
- package/dist/tools/clocks.d.ts.map +1 -0
- package/dist/tools/clocks.js +438 -0
- package/dist/tools/clocks.js.map +1 -0
- package/dist/tools/combat.d.ts +38 -0
- package/dist/tools/combat.d.ts.map +1 -0
- package/dist/tools/combat.js +574 -0
- package/dist/tools/combat.js.map +1 -0
- package/dist/tools/dice.d.ts +9 -0
- package/dist/tools/dice.d.ts.map +1 -0
- package/dist/tools/dice.js +287 -0
- package/dist/tools/dice.js.map +1 -0
- package/dist/tools/encounters.d.ts +21 -0
- package/dist/tools/encounters.d.ts.map +1 -0
- package/dist/tools/encounters.js +521 -0
- package/dist/tools/encounters.js.map +1 -0
- package/dist/tools/engagement.d.ts +25 -0
- package/dist/tools/engagement.d.ts.map +1 -0
- package/dist/tools/engagement.js +491 -0
- package/dist/tools/engagement.js.map +1 -0
- package/dist/tools/expansion/archetype.d.ts +12 -0
- package/dist/tools/expansion/archetype.d.ts.map +1 -0
- package/dist/tools/expansion/archetype.js +157 -0
- package/dist/tools/expansion/archetype.js.map +1 -0
- package/dist/tools/expansion/index.d.ts +12 -0
- package/dist/tools/expansion/index.d.ts.map +1 -0
- package/dist/tools/expansion/index.js +21 -0
- package/dist/tools/expansion/index.js.map +1 -0
- package/dist/tools/expansion/location.d.ts +12 -0
- package/dist/tools/expansion/location.d.ts.map +1 -0
- package/dist/tools/expansion/location.js +149 -0
- package/dist/tools/expansion/location.js.map +1 -0
- package/dist/tools/expansion/monster.d.ts +12 -0
- package/dist/tools/expansion/monster.d.ts.map +1 -0
- package/dist/tools/expansion/monster.js +157 -0
- package/dist/tools/expansion/monster.js.map +1 -0
- package/dist/tools/expansion/npc.d.ts +12 -0
- package/dist/tools/expansion/npc.d.ts.map +1 -0
- package/dist/tools/expansion/npc.js +153 -0
- package/dist/tools/expansion/npc.js.map +1 -0
- package/dist/tools/generation/archetypes.d.ts +12 -0
- package/dist/tools/generation/archetypes.d.ts.map +1 -0
- package/dist/tools/generation/archetypes.js +129 -0
- package/dist/tools/generation/archetypes.js.map +1 -0
- package/dist/tools/generation/arcs.d.ts +13 -0
- package/dist/tools/generation/arcs.d.ts.map +1 -0
- package/dist/tools/generation/arcs.js +186 -0
- package/dist/tools/generation/arcs.js.map +1 -0
- package/dist/tools/generation/encounters.d.ts +12 -0
- package/dist/tools/generation/encounters.d.ts.map +1 -0
- package/dist/tools/generation/encounters.js +169 -0
- package/dist/tools/generation/encounters.js.map +1 -0
- package/dist/tools/generation/index.d.ts +19 -0
- package/dist/tools/generation/index.d.ts.map +1 -0
- package/dist/tools/generation/index.js +42 -0
- package/dist/tools/generation/index.js.map +1 -0
- package/dist/tools/generation/items.d.ts +12 -0
- package/dist/tools/generation/items.d.ts.map +1 -0
- package/dist/tools/generation/items.js +149 -0
- package/dist/tools/generation/items.js.map +1 -0
- package/dist/tools/generation/locations.d.ts +12 -0
- package/dist/tools/generation/locations.d.ts.map +1 -0
- package/dist/tools/generation/locations.js +131 -0
- package/dist/tools/generation/locations.js.map +1 -0
- package/dist/tools/generation/monsters.d.ts +12 -0
- package/dist/tools/generation/monsters.d.ts.map +1 -0
- package/dist/tools/generation/monsters.js +154 -0
- package/dist/tools/generation/monsters.js.map +1 -0
- package/dist/tools/generation/narrative.d.ts +12 -0
- package/dist/tools/generation/narrative.d.ts.map +1 -0
- package/dist/tools/generation/narrative.js +129 -0
- package/dist/tools/generation/narrative.js.map +1 -0
- package/dist/tools/generation/npcs.d.ts +12 -0
- package/dist/tools/generation/npcs.d.ts.map +1 -0
- package/dist/tools/generation/npcs.js +136 -0
- package/dist/tools/generation/npcs.js.map +1 -0
- package/dist/tools/generation/resume.d.ts +12 -0
- package/dist/tools/generation/resume.d.ts.map +1 -0
- package/dist/tools/generation/resume.js +288 -0
- package/dist/tools/generation/resume.js.map +1 -0
- package/dist/tools/generation/rules-prompt.d.ts +23 -0
- package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
- package/dist/tools/generation/rules-prompt.js +209 -0
- package/dist/tools/generation/rules-prompt.js.map +1 -0
- package/dist/tools/generation/seed.d.ts +12 -0
- package/dist/tools/generation/seed.d.ts.map +1 -0
- package/dist/tools/generation/seed.js +171 -0
- package/dist/tools/generation/seed.js.map +1 -0
- package/dist/tools/generation/situations.d.ts +13 -0
- package/dist/tools/generation/situations.d.ts.map +1 -0
- package/dist/tools/generation/situations.js +247 -0
- package/dist/tools/generation/situations.js.map +1 -0
- package/dist/tools/gm-guidance.d.ts +13 -0
- package/dist/tools/gm-guidance.d.ts.map +1 -0
- package/dist/tools/gm-guidance.js +395 -0
- package/dist/tools/gm-guidance.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +80 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/investigation.d.ts +41 -0
- package/dist/tools/investigation.d.ts.map +1 -0
- package/dist/tools/investigation.js +586 -0
- package/dist/tools/investigation.js.map +1 -0
- package/dist/tools/leads.d.ts +29 -0
- package/dist/tools/leads.d.ts.map +1 -0
- package/dist/tools/leads.js +460 -0
- package/dist/tools/leads.js.map +1 -0
- package/dist/tools/players.d.ts +30 -0
- package/dist/tools/players.d.ts.map +1 -0
- package/dist/tools/players.js +448 -0
- package/dist/tools/players.js.map +1 -0
- package/dist/tools/portable-clues.d.ts +29 -0
- package/dist/tools/portable-clues.d.ts.map +1 -0
- package/dist/tools/portable-clues.js +490 -0
- package/dist/tools/portable-clues.js.map +1 -0
- package/dist/tools/relationships.d.ts +29 -0
- package/dist/tools/relationships.d.ts.map +1 -0
- package/dist/tools/relationships.js +471 -0
- package/dist/tools/relationships.js.map +1 -0
- package/dist/tools/scene-framing.d.ts +21 -0
- package/dist/tools/scene-framing.d.ts.map +1 -0
- package/dist/tools/scene-framing.js +380 -0
- package/dist/tools/scene-framing.js.map +1 -0
- package/dist/tools/sessions.d.ts +30 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +253 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/time.d.ts +26 -0
- package/dist/tools/time.d.ts.map +1 -0
- package/dist/tools/time.js +438 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/turns.d.ts +38 -0
- package/dist/tools/turns.d.ts.map +1 -0
- package/dist/tools/turns.js +560 -0
- package/dist/tools/turns.js.map +1 -0
- package/dist/tools/worldpack/assemble.d.ts +20 -0
- package/dist/tools/worldpack/assemble.d.ts.map +1 -0
- package/dist/tools/worldpack/assemble.js +237 -0
- package/dist/tools/worldpack/assemble.js.map +1 -0
- package/dist/tools/worldpack/docs-generator.d.ts +18 -0
- package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
- package/dist/tools/worldpack/docs-generator.js +264 -0
- package/dist/tools/worldpack/docs-generator.js.map +1 -0
- package/dist/tools/worldpack/export.d.ts +12 -0
- package/dist/tools/worldpack/export.d.ts.map +1 -0
- package/dist/tools/worldpack/export.js +209 -0
- package/dist/tools/worldpack/export.js.map +1 -0
- package/dist/tools/worldpack/index.d.ts +15 -0
- package/dist/tools/worldpack/index.d.ts.map +1 -0
- package/dist/tools/worldpack/index.js +30 -0
- package/dist/tools/worldpack/index.js.map +1 -0
- package/dist/tools/worldpack/lookup.d.ts +19 -0
- package/dist/tools/worldpack/lookup.d.ts.map +1 -0
- package/dist/tools/worldpack/lookup.js +320 -0
- package/dist/tools/worldpack/lookup.js.map +1 -0
- package/dist/tools/worldpack/manage.d.ts +20 -0
- package/dist/tools/worldpack/manage.d.ts.map +1 -0
- package/dist/tools/worldpack/manage.js +101 -0
- package/dist/tools/worldpack/manage.js.map +1 -0
- package/dist/tools/worldpack/save-result.d.ts +12 -0
- package/dist/tools/worldpack/save-result.d.ts.map +1 -0
- package/dist/tools/worldpack/save-result.js +222 -0
- package/dist/tools/worldpack/save-result.js.map +1 -0
- package/dist/tools/worldpack/summary.d.ts +13 -0
- package/dist/tools/worldpack/summary.d.ts.map +1 -0
- package/dist/tools/worldpack/summary.js +180 -0
- package/dist/tools/worldpack/summary.js.map +1 -0
- package/dist/tools/worldpack/validate.d.ts +12 -0
- package/dist/tools/worldpack/validate.d.ts.map +1 -0
- package/dist/tools/worldpack/validate.js +388 -0
- package/dist/tools/worldpack/validate.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mystery/Investigation Mode Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for tracking investigations, evidence, hypotheses, and null results.
|
|
5
|
+
* Based on Alexandrian principles: Three Clue Rule and hypothesis testing.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { sessionManager } from "../state/manager.js";
|
|
9
|
+
// Investigation status
|
|
10
|
+
const INVESTIGATION_STATUS = ["active", "solved", "cold", "abandoned"];
|
|
11
|
+
// Hypothesis status
|
|
12
|
+
const HYPOTHESIS_STATUS = ["active", "confirmed", "refuted", "abandoned"];
|
|
13
|
+
// Test result
|
|
14
|
+
const TEST_RESULTS = ["untested", "supports", "refutes", "inconclusive"];
|
|
15
|
+
// Input schemas
|
|
16
|
+
const StartInvestigationInput = z.object({
|
|
17
|
+
sessionId: z.string(),
|
|
18
|
+
name: z.string(),
|
|
19
|
+
truth: z.object({
|
|
20
|
+
summary: z.string(),
|
|
21
|
+
perpetrator: z.string().optional(),
|
|
22
|
+
motive: z.string().optional(),
|
|
23
|
+
method: z.string().optional(),
|
|
24
|
+
keyFacts: z.array(z.string()),
|
|
25
|
+
}),
|
|
26
|
+
situationIds: z.array(z.string()).optional(),
|
|
27
|
+
openQuestions: z.array(z.string()).optional(),
|
|
28
|
+
});
|
|
29
|
+
const AddEvidenceInput = z.object({
|
|
30
|
+
sessionId: z.string(),
|
|
31
|
+
investigationId: z.string(),
|
|
32
|
+
description: z.string(),
|
|
33
|
+
source: z.string(),
|
|
34
|
+
connects: z.array(z.string()).optional(),
|
|
35
|
+
isRedHerring: z.boolean().optional(),
|
|
36
|
+
});
|
|
37
|
+
const AddHypothesisInput = z.object({
|
|
38
|
+
sessionId: z.string(),
|
|
39
|
+
investigationId: z.string(),
|
|
40
|
+
statement: z.string(),
|
|
41
|
+
supportingEvidence: z.array(z.string()).optional(),
|
|
42
|
+
});
|
|
43
|
+
const TestHypothesisInput = z.object({
|
|
44
|
+
sessionId: z.string(),
|
|
45
|
+
investigationId: z.string(),
|
|
46
|
+
hypothesisId: z.string(),
|
|
47
|
+
test: z.string(),
|
|
48
|
+
result: z.enum(TEST_RESULTS),
|
|
49
|
+
});
|
|
50
|
+
const RecordNullResultInput = z.object({
|
|
51
|
+
sessionId: z.string(),
|
|
52
|
+
investigationId: z.string(),
|
|
53
|
+
search: z.string(),
|
|
54
|
+
location: z.string().optional(),
|
|
55
|
+
meaning: z.string(),
|
|
56
|
+
});
|
|
57
|
+
const GetInvestigationInput = z.object({
|
|
58
|
+
sessionId: z.string(),
|
|
59
|
+
investigationId: z.string(),
|
|
60
|
+
});
|
|
61
|
+
const SuggestNextStepsInput = z.object({
|
|
62
|
+
sessionId: z.string(),
|
|
63
|
+
investigationId: z.string(),
|
|
64
|
+
});
|
|
65
|
+
const UpdateInvestigationStatusInput = z.object({
|
|
66
|
+
sessionId: z.string(),
|
|
67
|
+
investigationId: z.string(),
|
|
68
|
+
status: z.enum(INVESTIGATION_STATUS),
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Format game time
|
|
72
|
+
*/
|
|
73
|
+
function formatGameTime(time) {
|
|
74
|
+
const hour12 = time.hour % 12 || 12;
|
|
75
|
+
const ampm = time.hour < 12 ? "AM" : "PM";
|
|
76
|
+
const min = time.minute.toString().padStart(2, "0");
|
|
77
|
+
return `Day ${time.day}, ${hour12}:${min} ${ampm}`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get investigations from session
|
|
81
|
+
*/
|
|
82
|
+
function getInvestigations(session) {
|
|
83
|
+
return session.worldState.investigations || [];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Save investigations to session
|
|
87
|
+
*/
|
|
88
|
+
function saveInvestigations(session, investigations) {
|
|
89
|
+
session.worldState.investigations = investigations;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* start_investigation tool
|
|
93
|
+
*/
|
|
94
|
+
export const startInvestigationTool = {
|
|
95
|
+
name: "start_investigation",
|
|
96
|
+
description: "Begin tracking a mystery. Define the truth (GM-only) to enable hypothesis testing.",
|
|
97
|
+
inputSchema: {
|
|
98
|
+
type: "object",
|
|
99
|
+
properties: {
|
|
100
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
101
|
+
name: { type: "string", description: "Investigation name" },
|
|
102
|
+
truth: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
summary: { type: "string", description: "What actually happened" },
|
|
106
|
+
perpetrator: { type: "string", description: "Who did it" },
|
|
107
|
+
motive: { type: "string", description: "Why they did it" },
|
|
108
|
+
method: { type: "string", description: "How they did it" },
|
|
109
|
+
keyFacts: { type: "array", items: { type: "string" }, description: "Key facts to discover" },
|
|
110
|
+
},
|
|
111
|
+
required: ["summary", "keyFacts"],
|
|
112
|
+
},
|
|
113
|
+
situationIds: { type: "array", items: { type: "string" }, description: "Related situation IDs" },
|
|
114
|
+
openQuestions: { type: "array", items: { type: "string" }, description: "Initial questions to answer" },
|
|
115
|
+
},
|
|
116
|
+
required: ["sessionId", "name", "truth"],
|
|
117
|
+
},
|
|
118
|
+
handler: async (args) => {
|
|
119
|
+
const input = StartInvestigationInput.parse(args);
|
|
120
|
+
const session = await sessionManager.get(input.sessionId);
|
|
121
|
+
if (!session) {
|
|
122
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
123
|
+
}
|
|
124
|
+
const investigations = getInvestigations(session);
|
|
125
|
+
// Generate ID
|
|
126
|
+
const id = `investigation:${input.name.toLowerCase().replace(/\s+/g, "-")}-${Date.now()}`;
|
|
127
|
+
// Check for duplicate
|
|
128
|
+
if (investigations.some(i => i.name === input.name)) {
|
|
129
|
+
throw new Error(`Investigation '${input.name}' already exists`);
|
|
130
|
+
}
|
|
131
|
+
const investigation = {
|
|
132
|
+
id,
|
|
133
|
+
name: input.name,
|
|
134
|
+
status: "active",
|
|
135
|
+
truth: input.truth,
|
|
136
|
+
evidence: [],
|
|
137
|
+
hypotheses: [],
|
|
138
|
+
nullResults: [],
|
|
139
|
+
openQuestions: input.openQuestions || [],
|
|
140
|
+
situationIds: input.situationIds || [],
|
|
141
|
+
};
|
|
142
|
+
investigations.push(investigation);
|
|
143
|
+
saveInvestigations(session, investigations);
|
|
144
|
+
await sessionManager.save(session);
|
|
145
|
+
return {
|
|
146
|
+
message: `Investigation '${input.name}' started`,
|
|
147
|
+
investigation: {
|
|
148
|
+
id: investigation.id,
|
|
149
|
+
name: investigation.name,
|
|
150
|
+
status: investigation.status,
|
|
151
|
+
keyFactsToDiscover: input.truth.keyFacts.length,
|
|
152
|
+
openQuestions: investigation.openQuestions,
|
|
153
|
+
},
|
|
154
|
+
tip: "Players don't see the 'truth' - use it to evaluate hypotheses and guide clue placement.",
|
|
155
|
+
};
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* add_evidence tool
|
|
160
|
+
*/
|
|
161
|
+
export const addEvidenceTool = {
|
|
162
|
+
name: "add_evidence",
|
|
163
|
+
description: "Record evidence discovered during investigation.",
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: "object",
|
|
166
|
+
properties: {
|
|
167
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
168
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
169
|
+
description: { type: "string", description: "What was found" },
|
|
170
|
+
source: { type: "string", description: "Where/how it was found" },
|
|
171
|
+
connects: { type: "array", items: { type: "string" }, description: "Other evidence IDs this connects to" },
|
|
172
|
+
isRedHerring: { type: "boolean", description: "GM flag: is this misleading?" },
|
|
173
|
+
},
|
|
174
|
+
required: ["sessionId", "investigationId", "description", "source"],
|
|
175
|
+
},
|
|
176
|
+
handler: async (args) => {
|
|
177
|
+
const input = AddEvidenceInput.parse(args);
|
|
178
|
+
const session = await sessionManager.get(input.sessionId);
|
|
179
|
+
if (!session) {
|
|
180
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
181
|
+
}
|
|
182
|
+
const investigations = getInvestigations(session);
|
|
183
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
184
|
+
if (!investigation) {
|
|
185
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
186
|
+
}
|
|
187
|
+
const evidenceId = `evidence-${investigation.evidence.length + 1}`;
|
|
188
|
+
investigation.evidence.push({
|
|
189
|
+
id: evidenceId,
|
|
190
|
+
description: input.description,
|
|
191
|
+
source: input.source,
|
|
192
|
+
discoveredAt: { ...session.gameTime },
|
|
193
|
+
connects: input.connects,
|
|
194
|
+
isRedHerring: input.isRedHerring,
|
|
195
|
+
});
|
|
196
|
+
saveInvestigations(session, investigations);
|
|
197
|
+
await sessionManager.save(session);
|
|
198
|
+
return {
|
|
199
|
+
message: "Evidence recorded",
|
|
200
|
+
evidence: {
|
|
201
|
+
id: evidenceId,
|
|
202
|
+
description: input.description,
|
|
203
|
+
source: input.source,
|
|
204
|
+
discoveredAt: formatGameTime(session.gameTime),
|
|
205
|
+
},
|
|
206
|
+
totalEvidence: investigation.evidence.length,
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* add_hypothesis tool
|
|
212
|
+
*/
|
|
213
|
+
export const addHypothesisTool = {
|
|
214
|
+
name: "add_hypothesis",
|
|
215
|
+
description: "Record a player theory about the mystery.",
|
|
216
|
+
inputSchema: {
|
|
217
|
+
type: "object",
|
|
218
|
+
properties: {
|
|
219
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
220
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
221
|
+
statement: { type: "string", description: "The hypothesis (e.g., 'The butler did it')" },
|
|
222
|
+
supportingEvidence: { type: "array", items: { type: "string" }, description: "Evidence IDs that support this" },
|
|
223
|
+
},
|
|
224
|
+
required: ["sessionId", "investigationId", "statement"],
|
|
225
|
+
},
|
|
226
|
+
handler: async (args) => {
|
|
227
|
+
const input = AddHypothesisInput.parse(args);
|
|
228
|
+
const session = await sessionManager.get(input.sessionId);
|
|
229
|
+
if (!session) {
|
|
230
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
231
|
+
}
|
|
232
|
+
const investigations = getInvestigations(session);
|
|
233
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
234
|
+
if (!investigation) {
|
|
235
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
236
|
+
}
|
|
237
|
+
const hypothesisId = `hypothesis-${investigation.hypotheses.length + 1}`;
|
|
238
|
+
investigation.hypotheses.push({
|
|
239
|
+
id: hypothesisId,
|
|
240
|
+
statement: input.statement,
|
|
241
|
+
status: "active",
|
|
242
|
+
supportingEvidence: input.supportingEvidence || [],
|
|
243
|
+
contradictingEvidence: [],
|
|
244
|
+
tests: [],
|
|
245
|
+
});
|
|
246
|
+
saveInvestigations(session, investigations);
|
|
247
|
+
await sessionManager.save(session);
|
|
248
|
+
// Check if hypothesis aligns with truth
|
|
249
|
+
const truth = investigation.truth;
|
|
250
|
+
const statementLower = input.statement.toLowerCase();
|
|
251
|
+
let alignmentHint = "";
|
|
252
|
+
if (truth.perpetrator && statementLower.includes(truth.perpetrator.toLowerCase())) {
|
|
253
|
+
alignmentHint = "This hypothesis touches on the truth.";
|
|
254
|
+
}
|
|
255
|
+
else if (truth.motive && statementLower.includes(truth.motive.toLowerCase())) {
|
|
256
|
+
alignmentHint = "This hypothesis relates to the motive.";
|
|
257
|
+
}
|
|
258
|
+
else if (truth.method && statementLower.includes(truth.method.toLowerCase())) {
|
|
259
|
+
alignmentHint = "This hypothesis relates to the method.";
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
message: "Hypothesis recorded",
|
|
263
|
+
hypothesis: {
|
|
264
|
+
id: hypothesisId,
|
|
265
|
+
statement: input.statement,
|
|
266
|
+
status: "active",
|
|
267
|
+
supportingEvidence: input.supportingEvidence || [],
|
|
268
|
+
},
|
|
269
|
+
totalHypotheses: investigation.hypotheses.length,
|
|
270
|
+
gmNote: alignmentHint || undefined,
|
|
271
|
+
};
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
/**
|
|
275
|
+
* test_hypothesis tool
|
|
276
|
+
*/
|
|
277
|
+
export const testHypothesisTool = {
|
|
278
|
+
name: "test_hypothesis",
|
|
279
|
+
description: "Record the result of testing a hypothesis. Supports the 'null result' principle.",
|
|
280
|
+
inputSchema: {
|
|
281
|
+
type: "object",
|
|
282
|
+
properties: {
|
|
283
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
284
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
285
|
+
hypothesisId: { type: "string", description: "Hypothesis ID" },
|
|
286
|
+
test: { type: "string", description: "What was done to test it" },
|
|
287
|
+
result: {
|
|
288
|
+
type: "string",
|
|
289
|
+
enum: TEST_RESULTS,
|
|
290
|
+
description: "Result: supports, refutes, or inconclusive",
|
|
291
|
+
},
|
|
292
|
+
},
|
|
293
|
+
required: ["sessionId", "investigationId", "hypothesisId", "test", "result"],
|
|
294
|
+
},
|
|
295
|
+
handler: async (args) => {
|
|
296
|
+
const input = TestHypothesisInput.parse(args);
|
|
297
|
+
const session = await sessionManager.get(input.sessionId);
|
|
298
|
+
if (!session) {
|
|
299
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
300
|
+
}
|
|
301
|
+
const investigations = getInvestigations(session);
|
|
302
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
303
|
+
if (!investigation) {
|
|
304
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
305
|
+
}
|
|
306
|
+
const hypothesis = investigation.hypotheses.find(h => h.id === input.hypothesisId);
|
|
307
|
+
if (!hypothesis) {
|
|
308
|
+
throw new Error(`Hypothesis not found: ${input.hypothesisId}`);
|
|
309
|
+
}
|
|
310
|
+
// Add test result
|
|
311
|
+
hypothesis.tests.push({
|
|
312
|
+
description: input.test,
|
|
313
|
+
result: input.result,
|
|
314
|
+
});
|
|
315
|
+
// Update hypothesis status based on results
|
|
316
|
+
const supports = hypothesis.tests.filter(t => t.result === "supports").length;
|
|
317
|
+
const refutes = hypothesis.tests.filter(t => t.result === "refutes").length;
|
|
318
|
+
if (refutes >= 2 || (refutes >= 1 && supports === 0)) {
|
|
319
|
+
hypothesis.status = "refuted";
|
|
320
|
+
}
|
|
321
|
+
else if (supports >= 3 && refutes === 0) {
|
|
322
|
+
hypothesis.status = "confirmed";
|
|
323
|
+
}
|
|
324
|
+
saveInvestigations(session, investigations);
|
|
325
|
+
await sessionManager.save(session);
|
|
326
|
+
return {
|
|
327
|
+
message: `Hypothesis test recorded: ${input.result}`,
|
|
328
|
+
hypothesis: {
|
|
329
|
+
id: hypothesis.id,
|
|
330
|
+
statement: hypothesis.statement,
|
|
331
|
+
status: hypothesis.status,
|
|
332
|
+
testCount: hypothesis.tests.length,
|
|
333
|
+
supports,
|
|
334
|
+
refutes,
|
|
335
|
+
},
|
|
336
|
+
tip: input.result === "refutes"
|
|
337
|
+
? "Null results help players eliminate false theories - this is good investigation design."
|
|
338
|
+
: undefined,
|
|
339
|
+
};
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* record_null_result tool
|
|
344
|
+
*/
|
|
345
|
+
export const recordNullResultTool = {
|
|
346
|
+
name: "record_null_result",
|
|
347
|
+
description: "Log a search that found nothing. Critical for hypothesis testing.",
|
|
348
|
+
inputSchema: {
|
|
349
|
+
type: "object",
|
|
350
|
+
properties: {
|
|
351
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
352
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
353
|
+
search: { type: "string", description: "What they searched for" },
|
|
354
|
+
location: { type: "string", description: "Where they searched" },
|
|
355
|
+
meaning: { type: "string", description: "GM note: why nothing was found" },
|
|
356
|
+
},
|
|
357
|
+
required: ["sessionId", "investigationId", "search", "meaning"],
|
|
358
|
+
},
|
|
359
|
+
handler: async (args) => {
|
|
360
|
+
const input = RecordNullResultInput.parse(args);
|
|
361
|
+
const session = await sessionManager.get(input.sessionId);
|
|
362
|
+
if (!session) {
|
|
363
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
364
|
+
}
|
|
365
|
+
const investigations = getInvestigations(session);
|
|
366
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
367
|
+
if (!investigation) {
|
|
368
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
369
|
+
}
|
|
370
|
+
investigation.nullResults.push({
|
|
371
|
+
search: input.search,
|
|
372
|
+
location: input.location,
|
|
373
|
+
timestamp: { ...session.gameTime },
|
|
374
|
+
meaning: input.meaning,
|
|
375
|
+
});
|
|
376
|
+
saveInvestigations(session, investigations);
|
|
377
|
+
await sessionManager.save(session);
|
|
378
|
+
return {
|
|
379
|
+
message: "Null result recorded",
|
|
380
|
+
nullResult: {
|
|
381
|
+
search: input.search,
|
|
382
|
+
location: input.location,
|
|
383
|
+
timestamp: formatGameTime(session.gameTime),
|
|
384
|
+
},
|
|
385
|
+
totalNullResults: investigation.nullResults.length,
|
|
386
|
+
principle: "Null results are valuable - they help players eliminate false theories and narrow their focus.",
|
|
387
|
+
};
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
/**
|
|
391
|
+
* get_investigation_status tool
|
|
392
|
+
*/
|
|
393
|
+
export const getInvestigationStatusTool = {
|
|
394
|
+
name: "get_investigation_status",
|
|
395
|
+
description: "Get the current state of an investigation including evidence, hypotheses, and progress.",
|
|
396
|
+
inputSchema: {
|
|
397
|
+
type: "object",
|
|
398
|
+
properties: {
|
|
399
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
400
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
401
|
+
},
|
|
402
|
+
required: ["sessionId", "investigationId"],
|
|
403
|
+
},
|
|
404
|
+
handler: async (args) => {
|
|
405
|
+
const input = GetInvestigationInput.parse(args);
|
|
406
|
+
const session = await sessionManager.get(input.sessionId);
|
|
407
|
+
if (!session) {
|
|
408
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
409
|
+
}
|
|
410
|
+
const investigations = getInvestigations(session);
|
|
411
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
412
|
+
if (!investigation) {
|
|
413
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
414
|
+
}
|
|
415
|
+
// Calculate progress (how many key facts have been discovered)
|
|
416
|
+
const keyFactsDiscovered = investigation.truth.keyFacts.filter(fact => {
|
|
417
|
+
const factLower = fact.toLowerCase();
|
|
418
|
+
return investigation.evidence.some(e => e.description.toLowerCase().includes(factLower) ||
|
|
419
|
+
factLower.includes(e.description.toLowerCase()));
|
|
420
|
+
});
|
|
421
|
+
return {
|
|
422
|
+
id: investigation.id,
|
|
423
|
+
name: investigation.name,
|
|
424
|
+
status: investigation.status,
|
|
425
|
+
progress: {
|
|
426
|
+
keyFactsTotal: investigation.truth.keyFacts.length,
|
|
427
|
+
keyFactsHinted: keyFactsDiscovered.length,
|
|
428
|
+
evidenceCount: investigation.evidence.length,
|
|
429
|
+
hypothesesActive: investigation.hypotheses.filter(h => h.status === "active").length,
|
|
430
|
+
hypothesesRefuted: investigation.hypotheses.filter(h => h.status === "refuted").length,
|
|
431
|
+
nullResultsCount: investigation.nullResults.length,
|
|
432
|
+
},
|
|
433
|
+
evidence: investigation.evidence.map(e => ({
|
|
434
|
+
id: e.id,
|
|
435
|
+
description: e.description,
|
|
436
|
+
source: e.source,
|
|
437
|
+
discoveredAt: formatGameTime(e.discoveredAt),
|
|
438
|
+
})),
|
|
439
|
+
hypotheses: investigation.hypotheses.map(h => ({
|
|
440
|
+
id: h.id,
|
|
441
|
+
statement: h.statement,
|
|
442
|
+
status: h.status,
|
|
443
|
+
testCount: h.tests.length,
|
|
444
|
+
})),
|
|
445
|
+
openQuestions: investigation.openQuestions,
|
|
446
|
+
// GM-only section
|
|
447
|
+
gmInfo: {
|
|
448
|
+
truth: investigation.truth,
|
|
449
|
+
redHerrings: investigation.evidence.filter(e => e.isRedHerring).length,
|
|
450
|
+
nullResults: investigation.nullResults,
|
|
451
|
+
},
|
|
452
|
+
};
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
/**
|
|
456
|
+
* suggest_next_steps tool
|
|
457
|
+
*/
|
|
458
|
+
export const suggestNextStepsTool = {
|
|
459
|
+
name: "suggest_investigation_steps",
|
|
460
|
+
description: "Get suggestions for moving the investigation forward.",
|
|
461
|
+
inputSchema: {
|
|
462
|
+
type: "object",
|
|
463
|
+
properties: {
|
|
464
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
465
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
466
|
+
},
|
|
467
|
+
required: ["sessionId", "investigationId"],
|
|
468
|
+
},
|
|
469
|
+
handler: async (args) => {
|
|
470
|
+
const input = SuggestNextStepsInput.parse(args);
|
|
471
|
+
const session = await sessionManager.get(input.sessionId);
|
|
472
|
+
if (!session) {
|
|
473
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
474
|
+
}
|
|
475
|
+
const investigations = getInvestigations(session);
|
|
476
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
477
|
+
if (!investigation) {
|
|
478
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
479
|
+
}
|
|
480
|
+
const suggestions = [];
|
|
481
|
+
const questions = [];
|
|
482
|
+
const tests = [];
|
|
483
|
+
// Suggest based on undiscovered key facts
|
|
484
|
+
const undiscoveredFacts = investigation.truth.keyFacts.filter(fact => {
|
|
485
|
+
const factLower = fact.toLowerCase();
|
|
486
|
+
return !investigation.evidence.some(e => e.description.toLowerCase().includes(factLower));
|
|
487
|
+
});
|
|
488
|
+
if (undiscoveredFacts.length > 0) {
|
|
489
|
+
suggestions.push(`Key fact still hidden: Consider placing a clue about "${undiscoveredFacts[0]}"`);
|
|
490
|
+
}
|
|
491
|
+
// Suggest based on active hypotheses needing tests
|
|
492
|
+
const untestedHypotheses = investigation.hypotheses.filter(h => h.status === "active" && h.tests.length === 0);
|
|
493
|
+
for (const h of untestedHypotheses.slice(0, 2)) {
|
|
494
|
+
tests.push(`Test hypothesis: "${h.statement}" - what would prove or disprove this?`);
|
|
495
|
+
}
|
|
496
|
+
// Add open questions
|
|
497
|
+
questions.push(...investigation.openQuestions.slice(0, 3));
|
|
498
|
+
// Suggest connections if evidence is disconnected
|
|
499
|
+
const unconnectedEvidence = investigation.evidence.filter(e => !e.connects || e.connects.length === 0);
|
|
500
|
+
if (unconnectedEvidence.length > 2) {
|
|
501
|
+
suggestions.push("Consider how evidence pieces connect - players may need help seeing patterns.");
|
|
502
|
+
}
|
|
503
|
+
// If many null results, players might be stuck
|
|
504
|
+
if (investigation.nullResults.length >= 3) {
|
|
505
|
+
suggestions.push("Multiple null results recorded - consider providing a more obvious lead.");
|
|
506
|
+
}
|
|
507
|
+
// Three Clue Rule check
|
|
508
|
+
if (investigation.evidence.length < 3 && undiscoveredFacts.length > 0) {
|
|
509
|
+
suggestions.push("Three Clue Rule: Ensure there are multiple paths to remaining key facts.");
|
|
510
|
+
}
|
|
511
|
+
return {
|
|
512
|
+
investigation: {
|
|
513
|
+
id: investigation.id,
|
|
514
|
+
name: investigation.name,
|
|
515
|
+
},
|
|
516
|
+
suggestions,
|
|
517
|
+
openQuestions: questions,
|
|
518
|
+
hypothesesToTest: tests,
|
|
519
|
+
status: {
|
|
520
|
+
evidenceCount: investigation.evidence.length,
|
|
521
|
+
activeHypotheses: investigation.hypotheses.filter(h => h.status === "active").length,
|
|
522
|
+
remainingKeyFacts: undiscoveredFacts.length,
|
|
523
|
+
},
|
|
524
|
+
};
|
|
525
|
+
},
|
|
526
|
+
};
|
|
527
|
+
/**
|
|
528
|
+
* update_investigation_status tool
|
|
529
|
+
*/
|
|
530
|
+
export const updateInvestigationStatusTool = {
|
|
531
|
+
name: "update_investigation_status",
|
|
532
|
+
description: "Mark an investigation as solved, cold, or abandoned.",
|
|
533
|
+
inputSchema: {
|
|
534
|
+
type: "object",
|
|
535
|
+
properties: {
|
|
536
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
537
|
+
investigationId: { type: "string", description: "Investigation ID" },
|
|
538
|
+
status: {
|
|
539
|
+
type: "string",
|
|
540
|
+
enum: INVESTIGATION_STATUS,
|
|
541
|
+
description: "New status",
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
required: ["sessionId", "investigationId", "status"],
|
|
545
|
+
},
|
|
546
|
+
handler: async (args) => {
|
|
547
|
+
const input = UpdateInvestigationStatusInput.parse(args);
|
|
548
|
+
const session = await sessionManager.get(input.sessionId);
|
|
549
|
+
if (!session) {
|
|
550
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
551
|
+
}
|
|
552
|
+
const investigations = getInvestigations(session);
|
|
553
|
+
const investigation = investigations.find(i => i.id === input.investigationId);
|
|
554
|
+
if (!investigation) {
|
|
555
|
+
throw new Error(`Investigation not found: ${input.investigationId}`);
|
|
556
|
+
}
|
|
557
|
+
const previousStatus = investigation.status;
|
|
558
|
+
investigation.status = input.status;
|
|
559
|
+
saveInvestigations(session, investigations);
|
|
560
|
+
await sessionManager.save(session);
|
|
561
|
+
return {
|
|
562
|
+
message: `Investigation status updated: ${previousStatus} → ${input.status}`,
|
|
563
|
+
investigation: {
|
|
564
|
+
id: investigation.id,
|
|
565
|
+
name: investigation.name,
|
|
566
|
+
status: investigation.status,
|
|
567
|
+
},
|
|
568
|
+
summary: {
|
|
569
|
+
evidenceCollected: investigation.evidence.length,
|
|
570
|
+
hypothesesTested: investigation.hypotheses.filter(h => h.tests.length > 0).length,
|
|
571
|
+
keyFactsDiscovered: investigation.truth.keyFacts.filter(fact => investigation.evidence.some(e => e.description.toLowerCase().includes(fact.toLowerCase()))).length,
|
|
572
|
+
},
|
|
573
|
+
};
|
|
574
|
+
},
|
|
575
|
+
};
|
|
576
|
+
export const investigationTools = [
|
|
577
|
+
startInvestigationTool,
|
|
578
|
+
addEvidenceTool,
|
|
579
|
+
addHypothesisTool,
|
|
580
|
+
testHypothesisTool,
|
|
581
|
+
recordNullResultTool,
|
|
582
|
+
getInvestigationStatusTool,
|
|
583
|
+
suggestNextStepsTool,
|
|
584
|
+
updateInvestigationStatusTool,
|
|
585
|
+
];
|
|
586
|
+
//# sourceMappingURL=investigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investigation.js","sourceRoot":"","sources":["../../src/tools/investigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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 type { MCPToolEntry } from "@mythxengine/types";
|
|
8
|
+
/**
|
|
9
|
+
* get_available_leads tool
|
|
10
|
+
*/
|
|
11
|
+
export declare const getAvailableLeadsTool: MCPToolEntry;
|
|
12
|
+
/**
|
|
13
|
+
* reveal_lead tool
|
|
14
|
+
*/
|
|
15
|
+
export declare const revealLeadTool: MCPToolEntry;
|
|
16
|
+
/**
|
|
17
|
+
* search_leads tool
|
|
18
|
+
*/
|
|
19
|
+
export declare const searchLeadsTool: MCPToolEntry;
|
|
20
|
+
/**
|
|
21
|
+
* get_discovered_leads tool
|
|
22
|
+
*/
|
|
23
|
+
export declare const getDiscoveredLeadsTool: MCPToolEntry;
|
|
24
|
+
/**
|
|
25
|
+
* suggest_lead_opportunity tool
|
|
26
|
+
*/
|
|
27
|
+
export declare const suggestLeadOpportunityTool: MCPToolEntry;
|
|
28
|
+
export declare const leadTools: MCPToolEntry[];
|
|
29
|
+
//# sourceMappingURL=leads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leads.d.ts","sourceRoot":"","sources":["../../src/tools/leads.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAoKjF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YA4FnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YA8E5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAoD7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YA6CpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,YAkHxC,CAAC;AAEF,eAAO,MAAM,SAAS,gBAMrB,CAAC"}
|