@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,471 @@
|
|
|
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 { z } from "zod";
|
|
8
|
+
import { sessionManager } from "../state/manager.js";
|
|
9
|
+
// Attitude levels
|
|
10
|
+
const ATTITUDES = ["hostile", "unfriendly", "neutral", "friendly", "allied"];
|
|
11
|
+
// Impact levels
|
|
12
|
+
const IMPACTS = ["very_negative", "negative", "neutral", "positive", "very_positive"];
|
|
13
|
+
// Input schemas
|
|
14
|
+
const GetRelationshipInput = z.object({
|
|
15
|
+
sessionId: z.string(),
|
|
16
|
+
npcId: z.string(),
|
|
17
|
+
});
|
|
18
|
+
const UpdateRelationshipInput = z.object({
|
|
19
|
+
sessionId: z.string(),
|
|
20
|
+
npcId: z.string(),
|
|
21
|
+
interaction: z.string().describe("Description of what happened"),
|
|
22
|
+
impact: z.enum(IMPACTS).describe("How this affected the relationship"),
|
|
23
|
+
attitudeChange: z.enum(ATTITUDES).optional().describe("Explicit attitude change"),
|
|
24
|
+
addKnows: z.array(z.string()).optional(),
|
|
25
|
+
addOwes: z.array(z.string()).optional(),
|
|
26
|
+
addFears: z.array(z.string()).optional(),
|
|
27
|
+
addWants: z.array(z.string()).optional(),
|
|
28
|
+
removeKnows: z.array(z.string()).optional(),
|
|
29
|
+
removeOwes: z.array(z.string()).optional(),
|
|
30
|
+
removeFears: z.array(z.string()).optional(),
|
|
31
|
+
removeWants: z.array(z.string()).optional(),
|
|
32
|
+
});
|
|
33
|
+
const ListRelationshipsInput = z.object({
|
|
34
|
+
sessionId: z.string(),
|
|
35
|
+
attitudeFilter: z.enum(ATTITUDES).optional(),
|
|
36
|
+
});
|
|
37
|
+
const GetDispositionInput = z.object({
|
|
38
|
+
sessionId: z.string(),
|
|
39
|
+
npcId: z.string(),
|
|
40
|
+
});
|
|
41
|
+
const InitializeRelationshipInput = z.object({
|
|
42
|
+
sessionId: z.string(),
|
|
43
|
+
npcId: z.string(),
|
|
44
|
+
npcName: z.string(),
|
|
45
|
+
initialAttitude: z.enum(ATTITUDES).default("neutral"),
|
|
46
|
+
knows: z.array(z.string()).optional(),
|
|
47
|
+
wants: z.array(z.string()).optional(),
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Format game time as human-readable string
|
|
51
|
+
*/
|
|
52
|
+
function formatGameTime(time) {
|
|
53
|
+
const hour12 = time.hour % 12 || 12;
|
|
54
|
+
const ampm = time.hour < 12 ? "AM" : "PM";
|
|
55
|
+
const min = time.minute.toString().padStart(2, "0");
|
|
56
|
+
return `Day ${time.day}, ${hour12}:${min} ${ampm}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Calculate attitude shift from impact
|
|
60
|
+
*/
|
|
61
|
+
function calculateAttitudeShift(currentAttitude, impact) {
|
|
62
|
+
const attitudeIndex = ATTITUDES.indexOf(currentAttitude);
|
|
63
|
+
let shift = 0;
|
|
64
|
+
switch (impact) {
|
|
65
|
+
case "very_negative":
|
|
66
|
+
shift = -2;
|
|
67
|
+
break;
|
|
68
|
+
case "negative":
|
|
69
|
+
shift = -1;
|
|
70
|
+
break;
|
|
71
|
+
case "neutral":
|
|
72
|
+
shift = 0;
|
|
73
|
+
break;
|
|
74
|
+
case "positive":
|
|
75
|
+
shift = 1;
|
|
76
|
+
break;
|
|
77
|
+
case "very_positive":
|
|
78
|
+
shift = 2;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
const newIndex = Math.max(0, Math.min(ATTITUDES.length - 1, attitudeIndex + shift));
|
|
82
|
+
return ATTITUDES[newIndex];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get relationship summary text
|
|
86
|
+
*/
|
|
87
|
+
function getAttitudeSummary(attitude) {
|
|
88
|
+
switch (attitude) {
|
|
89
|
+
case "hostile":
|
|
90
|
+
return "Actively antagonistic, may attack or sabotage";
|
|
91
|
+
case "unfriendly":
|
|
92
|
+
return "Distrustful, uncooperative, may withhold help";
|
|
93
|
+
case "neutral":
|
|
94
|
+
return "No strong feelings, will deal fairly";
|
|
95
|
+
case "friendly":
|
|
96
|
+
return "Positive disposition, inclined to help";
|
|
97
|
+
case "allied":
|
|
98
|
+
return "Strong bond, will go out of their way to assist";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* get_relationship tool
|
|
103
|
+
*/
|
|
104
|
+
export const getRelationshipTool = {
|
|
105
|
+
name: "get_relationship",
|
|
106
|
+
description: "Get an NPC's current attitude and interaction history with the party.",
|
|
107
|
+
inputSchema: {
|
|
108
|
+
type: "object",
|
|
109
|
+
properties: {
|
|
110
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
111
|
+
npcId: { type: "string", description: "NPC ID" },
|
|
112
|
+
},
|
|
113
|
+
required: ["sessionId", "npcId"],
|
|
114
|
+
},
|
|
115
|
+
handler: async (args) => {
|
|
116
|
+
const input = GetRelationshipInput.parse(args);
|
|
117
|
+
const session = await sessionManager.get(input.sessionId);
|
|
118
|
+
if (!session) {
|
|
119
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
120
|
+
}
|
|
121
|
+
if (!session.relationships || !session.relationships[input.npcId]) {
|
|
122
|
+
return {
|
|
123
|
+
message: `No relationship tracked for NPC: ${input.npcId}`,
|
|
124
|
+
exists: false,
|
|
125
|
+
hint: "Use initialize_relationship or update_relationship to start tracking",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const rel = session.relationships[input.npcId];
|
|
129
|
+
return {
|
|
130
|
+
npcId: rel.npcId,
|
|
131
|
+
npcName: rel.npcName,
|
|
132
|
+
attitude: rel.attitude,
|
|
133
|
+
attitudeSummary: getAttitudeSummary(rel.attitude),
|
|
134
|
+
history: rel.history.map(h => ({
|
|
135
|
+
timestamp: formatGameTime(h.timestamp),
|
|
136
|
+
interaction: h.interaction,
|
|
137
|
+
impact: h.impact,
|
|
138
|
+
})),
|
|
139
|
+
knows: rel.knows,
|
|
140
|
+
owes: rel.owes,
|
|
141
|
+
fears: rel.fears,
|
|
142
|
+
wants: rel.wants,
|
|
143
|
+
characterAttitudes: rel.characterAttitudes,
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* initialize_relationship tool
|
|
149
|
+
*/
|
|
150
|
+
export const initializeRelationshipTool = {
|
|
151
|
+
name: "initialize_relationship",
|
|
152
|
+
description: "Start tracking a relationship with an NPC.",
|
|
153
|
+
inputSchema: {
|
|
154
|
+
type: "object",
|
|
155
|
+
properties: {
|
|
156
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
157
|
+
npcId: { type: "string", description: "NPC ID" },
|
|
158
|
+
npcName: { type: "string", description: "NPC name for display" },
|
|
159
|
+
initialAttitude: {
|
|
160
|
+
type: "string",
|
|
161
|
+
enum: ATTITUDES,
|
|
162
|
+
description: "Starting attitude (default: neutral)",
|
|
163
|
+
},
|
|
164
|
+
knows: {
|
|
165
|
+
type: "array",
|
|
166
|
+
items: { type: "string" },
|
|
167
|
+
description: "What the NPC knows about the party",
|
|
168
|
+
},
|
|
169
|
+
wants: {
|
|
170
|
+
type: "array",
|
|
171
|
+
items: { type: "string" },
|
|
172
|
+
description: "What the NPC wants from the party",
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
required: ["sessionId", "npcId", "npcName"],
|
|
176
|
+
},
|
|
177
|
+
handler: async (args) => {
|
|
178
|
+
const input = InitializeRelationshipInput.parse(args);
|
|
179
|
+
const session = await sessionManager.get(input.sessionId);
|
|
180
|
+
if (!session) {
|
|
181
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
182
|
+
}
|
|
183
|
+
// Initialize relationships if needed
|
|
184
|
+
if (!session.relationships) {
|
|
185
|
+
session.relationships = {};
|
|
186
|
+
}
|
|
187
|
+
// Check if already exists
|
|
188
|
+
if (session.relationships[input.npcId]) {
|
|
189
|
+
return {
|
|
190
|
+
message: `Relationship already exists for ${input.npcName}`,
|
|
191
|
+
exists: true,
|
|
192
|
+
relationship: session.relationships[input.npcId],
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Create new relationship
|
|
196
|
+
const relationship = {
|
|
197
|
+
npcId: input.npcId,
|
|
198
|
+
npcName: input.npcName,
|
|
199
|
+
attitude: input.initialAttitude,
|
|
200
|
+
history: [],
|
|
201
|
+
knows: input.knows || [],
|
|
202
|
+
owes: [],
|
|
203
|
+
fears: [],
|
|
204
|
+
wants: input.wants || [],
|
|
205
|
+
};
|
|
206
|
+
session.relationships[input.npcId] = relationship;
|
|
207
|
+
await sessionManager.save(session);
|
|
208
|
+
return {
|
|
209
|
+
message: `Relationship initialized for ${input.npcName}`,
|
|
210
|
+
relationship: {
|
|
211
|
+
npcId: relationship.npcId,
|
|
212
|
+
npcName: relationship.npcName,
|
|
213
|
+
attitude: relationship.attitude,
|
|
214
|
+
attitudeSummary: getAttitudeSummary(relationship.attitude),
|
|
215
|
+
knows: relationship.knows,
|
|
216
|
+
wants: relationship.wants,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* update_relationship tool
|
|
223
|
+
*/
|
|
224
|
+
export const updateRelationshipTool = {
|
|
225
|
+
name: "update_relationship",
|
|
226
|
+
description: "Record an interaction and update NPC relationship. Automatically adjusts attitude based on impact.",
|
|
227
|
+
inputSchema: {
|
|
228
|
+
type: "object",
|
|
229
|
+
properties: {
|
|
230
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
231
|
+
npcId: { type: "string", description: "NPC ID" },
|
|
232
|
+
interaction: { type: "string", description: "What happened" },
|
|
233
|
+
impact: {
|
|
234
|
+
type: "string",
|
|
235
|
+
enum: IMPACTS,
|
|
236
|
+
description: "How this affected the relationship",
|
|
237
|
+
},
|
|
238
|
+
attitudeChange: {
|
|
239
|
+
type: "string",
|
|
240
|
+
enum: ATTITUDES,
|
|
241
|
+
description: "Explicit attitude override (optional)",
|
|
242
|
+
},
|
|
243
|
+
addKnows: { type: "array", items: { type: "string" }, description: "Add to what NPC knows" },
|
|
244
|
+
addOwes: { type: "array", items: { type: "string" }, description: "Add debts/favors" },
|
|
245
|
+
addFears: { type: "array", items: { type: "string" }, description: "Add fears" },
|
|
246
|
+
addWants: { type: "array", items: { type: "string" }, description: "Add wants" },
|
|
247
|
+
removeKnows: { type: "array", items: { type: "string" }, description: "Remove from knows" },
|
|
248
|
+
removeOwes: { type: "array", items: { type: "string" }, description: "Remove debts" },
|
|
249
|
+
removeFears: { type: "array", items: { type: "string" }, description: "Remove fears" },
|
|
250
|
+
removeWants: { type: "array", items: { type: "string" }, description: "Remove wants" },
|
|
251
|
+
},
|
|
252
|
+
required: ["sessionId", "npcId", "interaction", "impact"],
|
|
253
|
+
},
|
|
254
|
+
handler: async (args) => {
|
|
255
|
+
const input = UpdateRelationshipInput.parse(args);
|
|
256
|
+
const session = await sessionManager.get(input.sessionId);
|
|
257
|
+
if (!session) {
|
|
258
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
259
|
+
}
|
|
260
|
+
// Initialize relationships if needed
|
|
261
|
+
if (!session.relationships) {
|
|
262
|
+
session.relationships = {};
|
|
263
|
+
}
|
|
264
|
+
// Get or create relationship
|
|
265
|
+
let rel = session.relationships[input.npcId];
|
|
266
|
+
let isNew = false;
|
|
267
|
+
if (!rel) {
|
|
268
|
+
// Try to get NPC name from session NPCs
|
|
269
|
+
const npc = session.npcs[input.npcId];
|
|
270
|
+
const npcName = npc?.name || input.npcId;
|
|
271
|
+
rel = {
|
|
272
|
+
npcId: input.npcId,
|
|
273
|
+
npcName: npcName,
|
|
274
|
+
attitude: "neutral",
|
|
275
|
+
history: [],
|
|
276
|
+
knows: [],
|
|
277
|
+
owes: [],
|
|
278
|
+
fears: [],
|
|
279
|
+
wants: [],
|
|
280
|
+
};
|
|
281
|
+
session.relationships[input.npcId] = rel;
|
|
282
|
+
isNew = true;
|
|
283
|
+
}
|
|
284
|
+
const previousAttitude = rel.attitude;
|
|
285
|
+
// Calculate new attitude
|
|
286
|
+
const newAttitude = input.attitudeChange || calculateAttitudeShift(rel.attitude, input.impact);
|
|
287
|
+
rel.attitude = newAttitude;
|
|
288
|
+
// Add history entry
|
|
289
|
+
rel.history.push({
|
|
290
|
+
timestamp: { ...session.gameTime },
|
|
291
|
+
interaction: input.interaction,
|
|
292
|
+
impact: input.impact,
|
|
293
|
+
});
|
|
294
|
+
// Update lists
|
|
295
|
+
if (input.addKnows) {
|
|
296
|
+
rel.knows.push(...input.addKnows.filter(k => !rel.knows.includes(k)));
|
|
297
|
+
}
|
|
298
|
+
if (input.addOwes) {
|
|
299
|
+
rel.owes.push(...input.addOwes.filter(o => !rel.owes.includes(o)));
|
|
300
|
+
}
|
|
301
|
+
if (input.addFears) {
|
|
302
|
+
rel.fears.push(...input.addFears.filter(f => !rel.fears.includes(f)));
|
|
303
|
+
}
|
|
304
|
+
if (input.addWants) {
|
|
305
|
+
rel.wants.push(...input.addWants.filter(w => !rel.wants.includes(w)));
|
|
306
|
+
}
|
|
307
|
+
if (input.removeKnows) {
|
|
308
|
+
rel.knows = rel.knows.filter(k => !input.removeKnows.includes(k));
|
|
309
|
+
}
|
|
310
|
+
if (input.removeOwes) {
|
|
311
|
+
rel.owes = rel.owes.filter(o => !input.removeOwes.includes(o));
|
|
312
|
+
}
|
|
313
|
+
if (input.removeFears) {
|
|
314
|
+
rel.fears = rel.fears.filter(f => !input.removeFears.includes(f));
|
|
315
|
+
}
|
|
316
|
+
if (input.removeWants) {
|
|
317
|
+
rel.wants = rel.wants.filter(w => !input.removeWants.includes(w));
|
|
318
|
+
}
|
|
319
|
+
await sessionManager.save(session);
|
|
320
|
+
const attitudeChanged = previousAttitude !== newAttitude;
|
|
321
|
+
return {
|
|
322
|
+
message: isNew
|
|
323
|
+
? `Relationship created and updated for ${rel.npcName}`
|
|
324
|
+
: `Relationship updated for ${rel.npcName}`,
|
|
325
|
+
npcId: rel.npcId,
|
|
326
|
+
npcName: rel.npcName,
|
|
327
|
+
interaction: input.interaction,
|
|
328
|
+
impact: input.impact,
|
|
329
|
+
attitudeChange: attitudeChanged ? {
|
|
330
|
+
from: previousAttitude,
|
|
331
|
+
to: newAttitude,
|
|
332
|
+
summary: getAttitudeSummary(newAttitude),
|
|
333
|
+
} : null,
|
|
334
|
+
currentAttitude: {
|
|
335
|
+
level: rel.attitude,
|
|
336
|
+
summary: getAttitudeSummary(rel.attitude),
|
|
337
|
+
},
|
|
338
|
+
totalInteractions: rel.history.length,
|
|
339
|
+
};
|
|
340
|
+
},
|
|
341
|
+
};
|
|
342
|
+
/**
|
|
343
|
+
* list_relationships tool
|
|
344
|
+
*/
|
|
345
|
+
export const listRelationshipsTool = {
|
|
346
|
+
name: "list_relationships",
|
|
347
|
+
description: "List all tracked NPC relationships.",
|
|
348
|
+
inputSchema: {
|
|
349
|
+
type: "object",
|
|
350
|
+
properties: {
|
|
351
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
352
|
+
attitudeFilter: {
|
|
353
|
+
type: "string",
|
|
354
|
+
enum: ATTITUDES,
|
|
355
|
+
description: "Filter by attitude level",
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
required: ["sessionId"],
|
|
359
|
+
},
|
|
360
|
+
handler: async (args) => {
|
|
361
|
+
const input = ListRelationshipsInput.parse(args);
|
|
362
|
+
const session = await sessionManager.get(input.sessionId);
|
|
363
|
+
if (!session) {
|
|
364
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
365
|
+
}
|
|
366
|
+
if (!session.relationships || Object.keys(session.relationships).length === 0) {
|
|
367
|
+
return {
|
|
368
|
+
message: "No relationships tracked",
|
|
369
|
+
relationships: [],
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
let relationships = Object.values(session.relationships);
|
|
373
|
+
if (input.attitudeFilter) {
|
|
374
|
+
relationships = relationships.filter(r => r.attitude === input.attitudeFilter);
|
|
375
|
+
}
|
|
376
|
+
// Sort by attitude (hostile first, then by interaction count)
|
|
377
|
+
relationships.sort((a, b) => {
|
|
378
|
+
const attitudeOrder = ATTITUDES.indexOf(a.attitude) - ATTITUDES.indexOf(b.attitude);
|
|
379
|
+
if (attitudeOrder !== 0)
|
|
380
|
+
return attitudeOrder;
|
|
381
|
+
return b.history.length - a.history.length;
|
|
382
|
+
});
|
|
383
|
+
const result = relationships.map(rel => ({
|
|
384
|
+
npcId: rel.npcId,
|
|
385
|
+
npcName: rel.npcName,
|
|
386
|
+
attitude: rel.attitude,
|
|
387
|
+
attitudeSummary: getAttitudeSummary(rel.attitude),
|
|
388
|
+
interactionCount: rel.history.length,
|
|
389
|
+
lastInteraction: rel.history.length > 0
|
|
390
|
+
? {
|
|
391
|
+
when: formatGameTime(rel.history[rel.history.length - 1].timestamp),
|
|
392
|
+
what: rel.history[rel.history.length - 1].interaction,
|
|
393
|
+
impact: rel.history[rel.history.length - 1].impact,
|
|
394
|
+
}
|
|
395
|
+
: null,
|
|
396
|
+
hasDebts: rel.owes.length > 0,
|
|
397
|
+
hasFears: rel.fears.length > 0,
|
|
398
|
+
hasWants: rel.wants.length > 0,
|
|
399
|
+
}));
|
|
400
|
+
return {
|
|
401
|
+
message: `${result.length} relationship(s) tracked`,
|
|
402
|
+
relationships: result,
|
|
403
|
+
};
|
|
404
|
+
},
|
|
405
|
+
};
|
|
406
|
+
/**
|
|
407
|
+
* get_npc_disposition tool
|
|
408
|
+
*/
|
|
409
|
+
export const getNpcDispositionTool = {
|
|
410
|
+
name: "get_npc_disposition",
|
|
411
|
+
description: "Quick check: How does this NPC feel about the party?",
|
|
412
|
+
inputSchema: {
|
|
413
|
+
type: "object",
|
|
414
|
+
properties: {
|
|
415
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
416
|
+
npcId: { type: "string", description: "NPC ID" },
|
|
417
|
+
},
|
|
418
|
+
required: ["sessionId", "npcId"],
|
|
419
|
+
},
|
|
420
|
+
handler: async (args) => {
|
|
421
|
+
const input = GetDispositionInput.parse(args);
|
|
422
|
+
const session = await sessionManager.get(input.sessionId);
|
|
423
|
+
if (!session) {
|
|
424
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
425
|
+
}
|
|
426
|
+
if (!session.relationships || !session.relationships[input.npcId]) {
|
|
427
|
+
// Check if NPC exists in session
|
|
428
|
+
const npc = session.npcs[input.npcId];
|
|
429
|
+
if (npc) {
|
|
430
|
+
return {
|
|
431
|
+
npcId: input.npcId,
|
|
432
|
+
npcName: npc.name,
|
|
433
|
+
attitude: "unknown",
|
|
434
|
+
summary: "No interactions recorded yet",
|
|
435
|
+
suggestion: "Consider initializing relationship when first meaningful interaction occurs",
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
return {
|
|
439
|
+
npcId: input.npcId,
|
|
440
|
+
attitude: "unknown",
|
|
441
|
+
summary: "NPC not found in session",
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
const rel = session.relationships[input.npcId];
|
|
445
|
+
const recentHistory = rel.history.slice(-3);
|
|
446
|
+
return {
|
|
447
|
+
npcId: rel.npcId,
|
|
448
|
+
npcName: rel.npcName,
|
|
449
|
+
attitude: rel.attitude,
|
|
450
|
+
summary: getAttitudeSummary(rel.attitude),
|
|
451
|
+
recentInteractions: recentHistory.map(h => ({
|
|
452
|
+
interaction: h.interaction,
|
|
453
|
+
impact: h.impact,
|
|
454
|
+
})),
|
|
455
|
+
keyContext: {
|
|
456
|
+
knows: rel.knows.slice(0, 3),
|
|
457
|
+
owes: rel.owes.slice(0, 2),
|
|
458
|
+
fears: rel.fears.slice(0, 2),
|
|
459
|
+
wants: rel.wants.slice(0, 2),
|
|
460
|
+
},
|
|
461
|
+
};
|
|
462
|
+
},
|
|
463
|
+
};
|
|
464
|
+
export const relationshipTools = [
|
|
465
|
+
getRelationshipTool,
|
|
466
|
+
initializeRelationshipTool,
|
|
467
|
+
updateRelationshipTool,
|
|
468
|
+
listRelationshipsTool,
|
|
469
|
+
getNpcDispositionTool,
|
|
470
|
+
];
|
|
471
|
+
//# sourceMappingURL=relationships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationships.js","sourceRoot":"","sources":["../../src/tools/relationships.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene Framing Tools
|
|
3
|
+
*
|
|
4
|
+
* Helps with pacing and scene transitions.
|
|
5
|
+
* Based on the Alexandrian principle: "Cut to the next meaningful choice."
|
|
6
|
+
*/
|
|
7
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
8
|
+
/**
|
|
9
|
+
* analyze_scene tool
|
|
10
|
+
*/
|
|
11
|
+
export declare const analyzeSceneTool: MCPToolEntry;
|
|
12
|
+
/**
|
|
13
|
+
* suggest_scene_cut tool
|
|
14
|
+
*/
|
|
15
|
+
export declare const suggestSceneCutTool: MCPToolEntry;
|
|
16
|
+
/**
|
|
17
|
+
* frame_scene tool
|
|
18
|
+
*/
|
|
19
|
+
export declare const frameSceneTool: MCPToolEntry;
|
|
20
|
+
export declare const sceneFramingTools: MCPToolEntry[];
|
|
21
|
+
//# sourceMappingURL=scene-framing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-framing.d.ts","sourceRoot":"","sources":["../../src/tools/scene-framing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,oBAAoB,CAAC;AA2EjE;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAkH9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YA0GjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAqG5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,gBAI7B,CAAC"}
|