@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Proto Labs AI
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemble.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/assemble.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mergeById } from "../tools/worldpack/assemble.js";
|
|
3
|
+
describe("mergeById", () => {
|
|
4
|
+
it("returns base items when no expansions", () => {
|
|
5
|
+
const base = [
|
|
6
|
+
{ id: "a", name: "Alpha" },
|
|
7
|
+
{ id: "b", name: "Beta" },
|
|
8
|
+
];
|
|
9
|
+
const result = mergeById(base, []);
|
|
10
|
+
expect(result).toEqual(base);
|
|
11
|
+
});
|
|
12
|
+
it("adds new items from expansions", () => {
|
|
13
|
+
const base = [{ id: "a", name: "Alpha" }];
|
|
14
|
+
const expanded = [{ id: "b", name: "Beta" }];
|
|
15
|
+
const result = mergeById(base, expanded);
|
|
16
|
+
expect(result).toHaveLength(2);
|
|
17
|
+
expect(result.find((i) => i.id === "b")).toEqual({ id: "b", name: "Beta" });
|
|
18
|
+
});
|
|
19
|
+
it("deep merges matching items by ID", () => {
|
|
20
|
+
const base = [
|
|
21
|
+
{ id: "x", name: "Original", value: 1, nested: { a: 10, b: 20 } },
|
|
22
|
+
];
|
|
23
|
+
const expanded = [
|
|
24
|
+
{ id: "x", value: 99, nested: { b: 200 } },
|
|
25
|
+
];
|
|
26
|
+
const result = mergeById(base, expanded);
|
|
27
|
+
expect(result[0]).toEqual({
|
|
28
|
+
id: "x",
|
|
29
|
+
name: "Original", // preserved
|
|
30
|
+
value: 99, // overwritten
|
|
31
|
+
nested: { a: 10, b: 200 }, // deep merged
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it("does not mutate original arrays", () => {
|
|
35
|
+
const base = [{ id: "a", name: "Original", nested: { a: 1 } }];
|
|
36
|
+
const expanded = [{ id: "a", nested: { b: 2 } }];
|
|
37
|
+
const baseCopy = JSON.parse(JSON.stringify(base));
|
|
38
|
+
mergeById(base, expanded);
|
|
39
|
+
expect(base).toEqual(baseCopy);
|
|
40
|
+
});
|
|
41
|
+
it("handles complex archetype-like expansion", () => {
|
|
42
|
+
const base = [
|
|
43
|
+
{
|
|
44
|
+
id: "fighter",
|
|
45
|
+
name: "Fighter",
|
|
46
|
+
features: ["Attack", "Defend"],
|
|
47
|
+
stats: { hp: 12, armor: 2 },
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
const expanded = [
|
|
51
|
+
{
|
|
52
|
+
id: "fighter",
|
|
53
|
+
name: "Fighter",
|
|
54
|
+
features: ["Attack", "Defend"],
|
|
55
|
+
stats: { hp: 12, armor: 2 },
|
|
56
|
+
skills: ["Cleave", "Shield Bash"],
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
const result = mergeById(base, expanded);
|
|
60
|
+
const fighter = result[0];
|
|
61
|
+
expect(fighter.name).toBe("Fighter");
|
|
62
|
+
expect(fighter.features).toEqual(["Attack", "Defend"]);
|
|
63
|
+
expect(fighter.stats).toEqual({ hp: 12, armor: 2 });
|
|
64
|
+
expect(fighter.skills).toEqual(["Cleave", "Shield Bash"]);
|
|
65
|
+
});
|
|
66
|
+
it("preserves order with base items first", () => {
|
|
67
|
+
const base = [
|
|
68
|
+
{ id: "a", value: 1 },
|
|
69
|
+
{ id: "b", value: 2 },
|
|
70
|
+
];
|
|
71
|
+
const expanded = [
|
|
72
|
+
{ id: "c", value: 3 },
|
|
73
|
+
{ id: "a", value: 100 },
|
|
74
|
+
];
|
|
75
|
+
const result = mergeById(base, expanded);
|
|
76
|
+
const ids = result.map((i) => i.id);
|
|
77
|
+
expect(ids).toEqual(["a", "b", "c"]);
|
|
78
|
+
expect(result[0].value).toBe(100); // merged value
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=assemble.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemble.test.js","sourceRoot":"","sources":["../../src/__tests__/assemble.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RPG MCP Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server for tabletop RPG game mechanics.
|
|
6
|
+
* Provides tools for dice rolling, character management, combat tracking,
|
|
7
|
+
* and session persistence.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RPG MCP Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server for tabletop RPG game mechanics.
|
|
6
|
+
* Provides tools for dice rolling, character management, combat tracking,
|
|
7
|
+
* and session persistence.
|
|
8
|
+
*/
|
|
9
|
+
import { createMCPServer, startMCPServer } from "./server.js";
|
|
10
|
+
import { createToolRegistry } from "./tools/index.js";
|
|
11
|
+
import { createResourceHandler } from "./resources/index.js";
|
|
12
|
+
const SERVER_NAME = "rpg-mcp";
|
|
13
|
+
const SERVER_VERSION = "0.1.0";
|
|
14
|
+
async function main() {
|
|
15
|
+
// Create tool registry
|
|
16
|
+
const tools = createToolRegistry();
|
|
17
|
+
// Create resource handler
|
|
18
|
+
const resources = createResourceHandler();
|
|
19
|
+
// Create server
|
|
20
|
+
const server = createMCPServer({
|
|
21
|
+
name: SERVER_NAME,
|
|
22
|
+
version: SERVER_VERSION,
|
|
23
|
+
}, {
|
|
24
|
+
tools,
|
|
25
|
+
resources,
|
|
26
|
+
onError: (error, toolName) => ({
|
|
27
|
+
message: `Error in ${toolName}: ${error.message}`,
|
|
28
|
+
isError: true,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
// Start server
|
|
32
|
+
await startMCPServer(server, SERVER_NAME);
|
|
33
|
+
}
|
|
34
|
+
main().catch((error) => {
|
|
35
|
+
console.error("Fatal error:", error);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,KAAK,UAAU,IAAI;IACjB,uBAAuB;IACvB,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAE1C,gBAAgB;IAChB,MAAM,MAAM,GAAG,eAAe,CAC5B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,KAAK;QACL,SAAS;QACT,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,YAAY,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE;YACjD,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CACF,CAAC;IAEF,eAAe;IACf,MAAM,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAiOvD"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resource handlers
|
|
3
|
+
*/
|
|
4
|
+
import { sessionManager, listSessions } from "../state/manager.js";
|
|
5
|
+
import { worldPackManager, listWorldPacks } from "../state/worldpacks.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create resource handler for session data
|
|
8
|
+
*/
|
|
9
|
+
export function createResourceHandler() {
|
|
10
|
+
return {
|
|
11
|
+
async list() {
|
|
12
|
+
const sessionIds = await listSessions();
|
|
13
|
+
const resources = [];
|
|
14
|
+
// Add sessions list resource
|
|
15
|
+
resources.push({
|
|
16
|
+
uri: "rpg://sessions",
|
|
17
|
+
name: "All Sessions",
|
|
18
|
+
mimeType: "application/json",
|
|
19
|
+
});
|
|
20
|
+
// Add world packs list resource
|
|
21
|
+
resources.push({
|
|
22
|
+
uri: "rpg://worlds",
|
|
23
|
+
name: "All World Packs",
|
|
24
|
+
mimeType: "application/json",
|
|
25
|
+
});
|
|
26
|
+
// Add individual world pack resources
|
|
27
|
+
const packIds = await listWorldPacks();
|
|
28
|
+
for (const packId of packIds) {
|
|
29
|
+
const pack = await worldPackManager.get(packId);
|
|
30
|
+
if (pack) {
|
|
31
|
+
resources.push({
|
|
32
|
+
uri: `rpg://worlds/${packId}`,
|
|
33
|
+
name: pack.meta.name,
|
|
34
|
+
mimeType: "application/json",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Add individual session resources
|
|
39
|
+
for (const id of sessionIds) {
|
|
40
|
+
const session = await sessionManager.get(id);
|
|
41
|
+
if (session) {
|
|
42
|
+
resources.push({
|
|
43
|
+
uri: `rpg://session/${id}`,
|
|
44
|
+
name: session.metadata.name,
|
|
45
|
+
mimeType: "application/json",
|
|
46
|
+
});
|
|
47
|
+
// Add character resources for this session
|
|
48
|
+
for (const [charId, char] of Object.entries(session.characters)) {
|
|
49
|
+
resources.push({
|
|
50
|
+
uri: `rpg://session/${id}/character/${charId}`,
|
|
51
|
+
name: `${char.name} (${session.metadata.name})`,
|
|
52
|
+
mimeType: "application/json",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Add generation resource if generation session exists
|
|
56
|
+
if (session.generation) {
|
|
57
|
+
resources.push({
|
|
58
|
+
uri: `rpg://generation/${id}`,
|
|
59
|
+
name: `Generation State (${session.metadata.name})`,
|
|
60
|
+
mimeType: "application/json",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return resources;
|
|
66
|
+
},
|
|
67
|
+
async read(uri) {
|
|
68
|
+
const url = new URL(uri);
|
|
69
|
+
if (url.protocol !== "rpg:") {
|
|
70
|
+
throw new Error(`Unknown protocol: ${url.protocol}`);
|
|
71
|
+
}
|
|
72
|
+
const path = url.pathname.replace(/^\/\//, "");
|
|
73
|
+
const parts = path.split("/");
|
|
74
|
+
// rpg://sessions
|
|
75
|
+
if (path === "sessions") {
|
|
76
|
+
const sessionIds = await listSessions();
|
|
77
|
+
const sessions = await Promise.all(sessionIds.map(async (id) => {
|
|
78
|
+
const session = await sessionManager.get(id);
|
|
79
|
+
return session
|
|
80
|
+
? {
|
|
81
|
+
id: session.metadata.id,
|
|
82
|
+
name: session.metadata.name,
|
|
83
|
+
createdAt: session.metadata.createdAt,
|
|
84
|
+
characterCount: Object.keys(session.characters).length,
|
|
85
|
+
}
|
|
86
|
+
: null;
|
|
87
|
+
}));
|
|
88
|
+
return {
|
|
89
|
+
contents: [
|
|
90
|
+
{
|
|
91
|
+
uri,
|
|
92
|
+
mimeType: "application/json",
|
|
93
|
+
text: JSON.stringify({ sessions: sessions.filter(Boolean) }, null, 2),
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// rpg://session/:id
|
|
99
|
+
if (parts[0] === "session" && parts.length === 2) {
|
|
100
|
+
const sessionId = parts[1];
|
|
101
|
+
const session = await sessionManager.get(sessionId);
|
|
102
|
+
if (!session) {
|
|
103
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
contents: [
|
|
107
|
+
{
|
|
108
|
+
uri,
|
|
109
|
+
mimeType: "application/json",
|
|
110
|
+
text: JSON.stringify(session, null, 2),
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
// rpg://session/:id/character/:charId
|
|
116
|
+
if (parts[0] === "session" && parts[2] === "character" && parts.length === 4) {
|
|
117
|
+
const sessionId = parts[1];
|
|
118
|
+
const characterId = parts[3];
|
|
119
|
+
const session = await sessionManager.get(sessionId);
|
|
120
|
+
if (!session) {
|
|
121
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
122
|
+
}
|
|
123
|
+
const character = session.characters[characterId];
|
|
124
|
+
if (!character) {
|
|
125
|
+
throw new Error(`Character not found: ${characterId}`);
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
contents: [
|
|
129
|
+
{
|
|
130
|
+
uri,
|
|
131
|
+
mimeType: "application/json",
|
|
132
|
+
text: JSON.stringify(character, null, 2),
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// rpg://generation/:sessionId
|
|
138
|
+
if (parts[0] === "generation" && parts.length === 2) {
|
|
139
|
+
const sessionId = parts[1];
|
|
140
|
+
const session = await sessionManager.get(sessionId);
|
|
141
|
+
if (!session) {
|
|
142
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
143
|
+
}
|
|
144
|
+
if (!session.generation) {
|
|
145
|
+
throw new Error(`No generation state for session: ${sessionId}`);
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
contents: [
|
|
149
|
+
{
|
|
150
|
+
uri,
|
|
151
|
+
mimeType: "application/json",
|
|
152
|
+
text: JSON.stringify(session.generation, null, 2),
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// rpg://worlds
|
|
158
|
+
if (path === "worlds") {
|
|
159
|
+
const packIds = await listWorldPacks();
|
|
160
|
+
const packs = await Promise.all(packIds.map(async (id) => {
|
|
161
|
+
const pack = await worldPackManager.get(id);
|
|
162
|
+
return pack
|
|
163
|
+
? {
|
|
164
|
+
id: pack.meta.id,
|
|
165
|
+
name: pack.meta.name,
|
|
166
|
+
tagline: pack.meta.tagline,
|
|
167
|
+
contentCounts: pack.meta.contentCounts,
|
|
168
|
+
}
|
|
169
|
+
: null;
|
|
170
|
+
}));
|
|
171
|
+
return {
|
|
172
|
+
contents: [
|
|
173
|
+
{
|
|
174
|
+
uri,
|
|
175
|
+
mimeType: "application/json",
|
|
176
|
+
text: JSON.stringify({ worlds: packs.filter(Boolean) }, null, 2),
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// rpg://worlds/:packId
|
|
182
|
+
if (parts[0] === "worlds" && parts.length === 2) {
|
|
183
|
+
const packId = parts[1];
|
|
184
|
+
const pack = await worldPackManager.get(packId);
|
|
185
|
+
if (!pack) {
|
|
186
|
+
throw new Error(`World pack not found: ${packId}`);
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
contents: [
|
|
190
|
+
{
|
|
191
|
+
uri,
|
|
192
|
+
mimeType: "application/json",
|
|
193
|
+
text: JSON.stringify(pack, null, 2),
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server factory
|
|
3
|
+
* Adapted from rogue-borg shared-mcp-server
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
|
+
import type { MCPToolRegistry } from "@mythxengine/types";
|
|
7
|
+
export interface MCPServerConfig {
|
|
8
|
+
name: string;
|
|
9
|
+
version: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ResourceHandler {
|
|
12
|
+
list: () => Promise<Array<{
|
|
13
|
+
uri: string;
|
|
14
|
+
name: string;
|
|
15
|
+
mimeType?: string;
|
|
16
|
+
}>>;
|
|
17
|
+
read: (uri: string) => Promise<{
|
|
18
|
+
contents: Array<{
|
|
19
|
+
uri: string;
|
|
20
|
+
mimeType: string;
|
|
21
|
+
text: string;
|
|
22
|
+
}>;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export interface MCPServerOptions {
|
|
26
|
+
tools: MCPToolRegistry;
|
|
27
|
+
resources?: ResourceHandler;
|
|
28
|
+
onError?: (error: Error, toolName: string) => {
|
|
29
|
+
message: string;
|
|
30
|
+
isError: boolean;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create an MCP server with the given tools
|
|
35
|
+
*/
|
|
36
|
+
export declare function createMCPServer(config: MCPServerConfig, options: MCPServerOptions): Server;
|
|
37
|
+
/**
|
|
38
|
+
* Start the MCP server with stdio transport
|
|
39
|
+
*/
|
|
40
|
+
export declare function startMCPServer(server: Server, serverName: string): Promise<void>;
|
|
41
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACtG;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAuFR;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server factory
|
|
3
|
+
* Adapted from rogue-borg shared-mcp-server
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Create an MCP server with the given tools
|
|
10
|
+
*/
|
|
11
|
+
export function createMCPServer(config, options) {
|
|
12
|
+
const server = new Server({
|
|
13
|
+
name: config.name,
|
|
14
|
+
version: config.version,
|
|
15
|
+
}, {
|
|
16
|
+
capabilities: {
|
|
17
|
+
tools: {
|
|
18
|
+
listChanged: false,
|
|
19
|
+
},
|
|
20
|
+
resources: options.resources ? {} : undefined,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
// List tools handler
|
|
24
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
25
|
+
tools: Array.from(options.tools.values()).map((tool) => ({
|
|
26
|
+
name: tool.name,
|
|
27
|
+
description: tool.description,
|
|
28
|
+
inputSchema: tool.inputSchema,
|
|
29
|
+
})),
|
|
30
|
+
}));
|
|
31
|
+
// Call tool handler
|
|
32
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
33
|
+
const toolName = request.params.name;
|
|
34
|
+
const tool = options.tools.get(toolName);
|
|
35
|
+
if (!tool) {
|
|
36
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const args = request.params.arguments || {};
|
|
40
|
+
const result = await tool.handler(args);
|
|
41
|
+
// If result already has content field, return as-is
|
|
42
|
+
if (result && typeof result === "object" && "content" in result) {
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
// Wrap result in standard MCP format
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: "text",
|
|
50
|
+
text: typeof result === "string" ? result : JSON.stringify(result, null, 2),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
57
|
+
if (options.onError) {
|
|
58
|
+
const customError = options.onError(error instanceof Error ? error : new Error(String(error)), toolName);
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: customError.message }],
|
|
61
|
+
isError: customError.isError,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
content: [{ type: "text", text: `Error: ${errorMessage}` }],
|
|
66
|
+
isError: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// Resource handlers (if provided)
|
|
71
|
+
if (options.resources) {
|
|
72
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
73
|
+
const resources = await options.resources.list();
|
|
74
|
+
return { resources };
|
|
75
|
+
});
|
|
76
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
77
|
+
const result = await options.resources.read(request.params.uri);
|
|
78
|
+
return result;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return server;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Start the MCP server with stdio transport
|
|
85
|
+
*/
|
|
86
|
+
export async function startMCPServer(server, serverName) {
|
|
87
|
+
const transport = new StdioServerTransport();
|
|
88
|
+
await server.connect(transport);
|
|
89
|
+
console.error(`${serverName} MCP Server running on stdio`);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based session state persistence
|
|
3
|
+
* Adapted from rogue-borg shared-mcp-state
|
|
4
|
+
*/
|
|
5
|
+
import type { SessionState, GenerationManifest, ManifestStep } from "@mythxengine/types";
|
|
6
|
+
/**
|
|
7
|
+
* Get the generation directory for a session
|
|
8
|
+
*/
|
|
9
|
+
export declare function getGenerationDir(sessionId: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Ensure the generation directory exists
|
|
12
|
+
*/
|
|
13
|
+
export declare function ensureGenerationDir(sessionId: string): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Write a step file atomically (temp file + rename)
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeStepFile(sessionId: string, filename: string, data: unknown): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Read a step file
|
|
20
|
+
*/
|
|
21
|
+
export declare function readStepFile(sessionId: string, filename: string): Promise<unknown | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Read the generation manifest with validation
|
|
24
|
+
*/
|
|
25
|
+
export declare function readManifest(sessionId: string): Promise<GenerationManifest | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Write the generation manifest atomically
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeManifest(sessionId: string, manifest: GenerationManifest): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Create initial manifest for a new generation session
|
|
32
|
+
*/
|
|
33
|
+
export declare function createManifest(sessionId: string, campaignSeed: string, tier: "small" | "medium" | "large", settings?: GenerationManifest["settings"], rulesConfig?: unknown): GenerationManifest;
|
|
34
|
+
/**
|
|
35
|
+
* Add a step to the manifest
|
|
36
|
+
*/
|
|
37
|
+
export declare function addManifestStep(manifest: GenerationManifest, type: string, file?: string): ManifestStep;
|
|
38
|
+
/**
|
|
39
|
+
* Find a step in the manifest by type
|
|
40
|
+
*/
|
|
41
|
+
export declare function findManifestStep(manifest: GenerationManifest, type: string): ManifestStep | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Update a step's status in the manifest
|
|
44
|
+
* @returns true if step was found and updated, false otherwise
|
|
45
|
+
*/
|
|
46
|
+
export declare function updateManifestStep(manifest: GenerationManifest, type: string, updates: Partial<ManifestStep>): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* List all step files in the generation directory
|
|
49
|
+
*/
|
|
50
|
+
export declare function listStepFiles(sessionId: string): Promise<string[]>;
|
|
51
|
+
/**
|
|
52
|
+
* List all expansion files in the generation directory
|
|
53
|
+
*/
|
|
54
|
+
export declare function listExpansionFiles(sessionId: string): Promise<string[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Load a session from disk
|
|
57
|
+
*/
|
|
58
|
+
export declare function loadSession(sessionId: string): Promise<SessionState | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Save a session to disk
|
|
61
|
+
*/
|
|
62
|
+
export declare function saveSession(state: SessionState): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Get or create a session
|
|
65
|
+
*/
|
|
66
|
+
export declare function getOrCreateSession(sessionId: string, name?: string): Promise<SessionState>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete a session
|
|
69
|
+
*/
|
|
70
|
+
export declare function deleteSession(sessionId: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* List all sessions
|
|
73
|
+
*/
|
|
74
|
+
export declare function listSessions(): Promise<string[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Session state manager class for convenient access
|
|
77
|
+
*/
|
|
78
|
+
export declare class SessionManager {
|
|
79
|
+
private cache;
|
|
80
|
+
get(sessionId: string): Promise<SessionState | null>;
|
|
81
|
+
getOrCreate(sessionId: string, name?: string): Promise<SessionState>;
|
|
82
|
+
save(state: SessionState): Promise<void>;
|
|
83
|
+
delete(sessionId: string): Promise<void>;
|
|
84
|
+
list(): Promise<string[]>;
|
|
85
|
+
clearCache(): void;
|
|
86
|
+
}
|
|
87
|
+
export declare const sessionManager: SessionManager;
|
|
88
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}
|