prts-mcp-ts 0.1.0 → 0.2.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/README.md +9 -3
- package/dist/config.d.ts +17 -0
- package/dist/config.js +27 -1
- package/dist/config.js.map +1 -1
- package/dist/data/operator.d.ts +2 -0
- package/dist/data/operator.js +95 -0
- package/dist/data/operator.js.map +1 -1
- package/dist/data/story.d.ts +80 -0
- package/dist/data/story.js +207 -0
- package/dist/data/story.js.map +1 -0
- package/dist/data/sync.d.ts +32 -0
- package/dist/data/sync.js +127 -0
- package/dist/data/sync.js.map +1 -1
- package/dist/server.js +258 -26
- package/dist/server.js.map +1 -1
- package/package.json +20 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
明日方舟同人创作辅助 MCP Server,TypeScript 版本。通过 **Streamable HTTP 传输**(单端点 `/mcp`)对外提供服务,适合部署在个人服务器或云环境,供他人通过 HTTP 接入。
|
|
4
4
|
|
|
5
|
-
提供工具集:`search_prts` / `read_prts_page` / `get_operator_archives` / `get_operator_voicelines`
|
|
5
|
+
提供工具集:`search_prts` / `read_prts_page` / `get_operator_archives` / `get_operator_voicelines` / `get_operator_basic_info` / `list_story_events` / `list_stories` / `read_story` / `read_activity`
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -52,7 +52,12 @@ npm start # 运行编译后的版本
|
|
|
52
52
|
|
|
53
53
|
## 数据机制
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
服务器启动时自动同步两类数据:
|
|
56
|
+
|
|
57
|
+
- **干员数据**(`/data/gamedata` volume):从 [ArknightsGameData](https://github.com/Kengxxiao/ArknightsGameData) 同步
|
|
58
|
+
- **剧情数据**(`/data/storyjson` volume):从 [ArknightsStoryJson](https://github.com/3aKHP/ArknightsStoryJson) Releases 下载 `zh_CN.zip`
|
|
59
|
+
|
|
60
|
+
镜像内置 bundled 数据作为网络不可用时的离线保底。
|
|
56
61
|
|
|
57
62
|
---
|
|
58
63
|
|
|
@@ -62,7 +67,8 @@ npm start # 运行编译后的版本
|
|
|
62
67
|
|------|--------|------|
|
|
63
68
|
| `PORT` | `3000` | 监听端口 |
|
|
64
69
|
| `HOST` | `0.0.0.0` | 监听地址 |
|
|
65
|
-
| `GAMEDATA_PATH` | 未设置 |
|
|
70
|
+
| `GAMEDATA_PATH` | 未设置 | 设置后指向自定义干员数据目录,**auto-sync 被禁用** |
|
|
71
|
+
| `STORYJSON_PATH` | 未设置 | 设置后指向本地 `zh_CN.zip`,**剧情 auto-sync 被禁用** |
|
|
66
72
|
| `GITHUB_TOKEN` | 空 | 用于提高 GitHub API 限额,降低限流风险 |
|
|
67
73
|
|
|
68
74
|
---
|
package/dist/config.d.ts
CHANGED
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
*
|
|
14
14
|
* BUNDLED_GAMEDATA_PATH — read-only fallback baked into the Docker image.
|
|
15
15
|
* Always /app/data/gamedata inside the container.
|
|
16
|
+
*
|
|
17
|
+
* effective_storyjson_zip — priority:
|
|
18
|
+
* 1. STORYJSON_PATH env var — user-supplied zip path.
|
|
19
|
+
* 2. /data/storyjson/zh_CN.zip — Docker volume mount-point.
|
|
20
|
+
* 3. /app/data/storyjson/zh_CN.zip — bundled zip (only inside Docker).
|
|
21
|
+
* 4. null — no story data available.
|
|
16
22
|
*/
|
|
17
23
|
export declare const PRTS_API_ENDPOINT = "https://prts.wiki/api.php";
|
|
18
24
|
export declare const USER_AGENT = "PRTS-MCP-Bot/0.1 (Arknights fan-creation helper)";
|
|
@@ -36,6 +42,17 @@ export interface Config {
|
|
|
36
42
|
* when neither location has data.
|
|
37
43
|
*/
|
|
38
44
|
effectiveExcelPath: string | null;
|
|
45
|
+
/**
|
|
46
|
+
* Configured storyjson zip path (STORYJSON_PATH env var or default).
|
|
47
|
+
* This is the sync write target, not necessarily the file that exists.
|
|
48
|
+
*/
|
|
49
|
+
storyjsonZip: string;
|
|
50
|
+
/**
|
|
51
|
+
* The storyjson zip story.ts should actually read from.
|
|
52
|
+
* Null when no zip is found anywhere.
|
|
53
|
+
*/
|
|
54
|
+
effectiveStoryjsonZip: string | null;
|
|
39
55
|
}
|
|
40
56
|
export declare function hasOperatorData(cfg: Config): boolean;
|
|
57
|
+
export declare function hasStoryData(cfg: Config): boolean;
|
|
41
58
|
export declare function loadConfig(): Config;
|
package/dist/config.js
CHANGED
|
@@ -13,10 +13,16 @@
|
|
|
13
13
|
*
|
|
14
14
|
* BUNDLED_GAMEDATA_PATH — read-only fallback baked into the Docker image.
|
|
15
15
|
* Always /app/data/gamedata inside the container.
|
|
16
|
+
*
|
|
17
|
+
* effective_storyjson_zip — priority:
|
|
18
|
+
* 1. STORYJSON_PATH env var — user-supplied zip path.
|
|
19
|
+
* 2. /data/storyjson/zh_CN.zip — Docker volume mount-point.
|
|
20
|
+
* 3. /app/data/storyjson/zh_CN.zip — bundled zip (only inside Docker).
|
|
21
|
+
* 4. null — no story data available.
|
|
16
22
|
*/
|
|
17
23
|
import { existsSync } from "node:fs";
|
|
18
24
|
import { homedir } from "node:os";
|
|
19
|
-
import { join } from "node:path";
|
|
25
|
+
import { dirname, join } from "node:path";
|
|
20
26
|
// ---------------------------------------------------------------------------
|
|
21
27
|
// Constants
|
|
22
28
|
// ---------------------------------------------------------------------------
|
|
@@ -28,11 +34,16 @@ const REQUIRED_OPERATOR_FILES = [
|
|
|
28
34
|
"character_table.json",
|
|
29
35
|
"handbook_info_table.json",
|
|
30
36
|
"charword_table.json",
|
|
37
|
+
"story_review_table.json",
|
|
31
38
|
];
|
|
32
39
|
/** Fixed volume mount-point inside Docker. */
|
|
33
40
|
const DOCKER_VOLUME_PATH = "/data/gamedata";
|
|
34
41
|
/** Bundled data baked into the image at build time. */
|
|
35
42
|
export const BUNDLED_GAMEDATA_PATH = "/app/data/gamedata";
|
|
43
|
+
/** Fixed storyjson volume mount-point inside Docker. */
|
|
44
|
+
const DOCKER_STORYJSON_ZIP = "/data/storyjson/zh_CN.zip";
|
|
45
|
+
/** Bundled storyjson zip baked into the image at build time. */
|
|
46
|
+
const BUNDLED_STORYJSON_ZIP = "/app/data/storyjson/zh_CN.zip";
|
|
36
47
|
// ---------------------------------------------------------------------------
|
|
37
48
|
// Path resolution
|
|
38
49
|
// ---------------------------------------------------------------------------
|
|
@@ -58,6 +69,9 @@ function filesComplete(excel) {
|
|
|
58
69
|
export function hasOperatorData(cfg) {
|
|
59
70
|
return cfg.effectiveExcelPath !== null;
|
|
60
71
|
}
|
|
72
|
+
export function hasStoryData(cfg) {
|
|
73
|
+
return cfg.effectiveStoryjsonZip !== null;
|
|
74
|
+
}
|
|
61
75
|
export function loadConfig() {
|
|
62
76
|
const isCustomGamedata = "GAMEDATA_PATH" in process.env;
|
|
63
77
|
const gamedataPath = isCustomGamedata
|
|
@@ -70,12 +84,24 @@ export function loadConfig() {
|
|
|
70
84
|
effectiveExcelPath = ep;
|
|
71
85
|
else if (filesComplete(bep))
|
|
72
86
|
effectiveExcelPath = bep;
|
|
87
|
+
// storyjson zip: default is alongside gamedata in the user data dir.
|
|
88
|
+
const defaultStoryjsonZip = join(dirname(gamedataPath), "storyjson", "zh_CN.zip");
|
|
89
|
+
const storyjsonZip = process.env["STORYJSON_PATH"] ?? defaultStoryjsonZip;
|
|
90
|
+
let effectiveStoryjsonZip = null;
|
|
91
|
+
if (existsSync(storyjsonZip))
|
|
92
|
+
effectiveStoryjsonZip = storyjsonZip;
|
|
93
|
+
else if (existsSync(DOCKER_STORYJSON_ZIP))
|
|
94
|
+
effectiveStoryjsonZip = DOCKER_STORYJSON_ZIP;
|
|
95
|
+
else if (existsSync(BUNDLED_STORYJSON_ZIP))
|
|
96
|
+
effectiveStoryjsonZip = BUNDLED_STORYJSON_ZIP;
|
|
73
97
|
return {
|
|
74
98
|
gamedataPath,
|
|
75
99
|
isCustomGamedata,
|
|
76
100
|
excelPath: ep,
|
|
77
101
|
bundledExcelPath: bep,
|
|
78
102
|
effectiveExcelPath,
|
|
103
|
+
storyjsonZip,
|
|
104
|
+
effectiveStoryjsonZip,
|
|
79
105
|
};
|
|
80
106
|
}
|
|
81
107
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG,kDAAkD,CAAC;AAC7E,iDAAiD;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,MAAM,uBAAuB,GAAG;IAC9B,sBAAsB;IACtB,0BAA0B;IAC1B,qBAAqB;IACrB,yBAAyB;CACjB,CAAC;AAEX,8CAA8C;AAC9C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAE5C,uDAAuD;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAE1D,wDAAwD;AACxD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD,gEAAgE;AAChE,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AAE9D,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,0BAA0B;IACjC,qEAAqE;IACrE,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,MAAM;QAAE,OAAO,kBAAkB,CAAC;IAEvE,2CAA2C;IAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,EAAE,CAAC;AAElE,SAAS,SAAS,CAAC,YAAoB;IACrC,OAAO,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAiCD,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,GAAG,CAAC,kBAAkB,KAAK,IAAI,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,qBAAqB,KAAK,IAAI,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,gBAAgB,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IACxD,MAAM,YAAY,GAAG,gBAAgB;QACnC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAE;QAC/B,CAAC,CAAC,qBAAqB,CAAC;IAE1B,MAAM,EAAE,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAE7C,IAAI,kBAAkB,GAAkB,IAAI,CAAC;IAC7C,IAAI,aAAa,CAAC,EAAE,CAAC;QAAE,kBAAkB,GAAG,EAAE,CAAC;SAC1C,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,kBAAkB,GAAG,GAAG,CAAC;IAEtD,qEAAqE;IACrE,MAAM,mBAAmB,GAAG,IAAI,CAC9B,OAAO,CAAC,YAAY,CAAC,EACrB,WAAW,EACX,WAAW,CACZ,CAAC;IACF,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,mBAAmB,CAAC;IAEvD,IAAI,qBAAqB,GAAkB,IAAI,CAAC;IAChD,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,qBAAqB,GAAG,YAAY,CAAC;SAC9D,IAAI,UAAU,CAAC,oBAAoB,CAAC;QACvC,qBAAqB,GAAG,oBAAoB,CAAC;SAC1C,IAAI,UAAU,CAAC,qBAAqB,CAAC;QACxC,qBAAqB,GAAG,qBAAqB,CAAC;IAEhD,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,GAAG;QACrB,kBAAkB;QAClB,YAAY;QACZ,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
|
package/dist/data/operator.d.ts
CHANGED
|
@@ -9,3 +9,5 @@
|
|
|
9
9
|
export declare function getOperatorArchives(name: string): string;
|
|
10
10
|
/** Return formatted voice-line text for an operator by Chinese name. */
|
|
11
11
|
export declare function getOperatorVoicelines(name: string): string;
|
|
12
|
+
/** Return basic profile info for an operator by Chinese name. */
|
|
13
|
+
export declare function getOperatorBasicInfo(name: string): string;
|
package/dist/data/operator.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { existsSync, readFileSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { loadConfig, hasOperatorData } from "../config.js";
|
|
11
|
+
import { stripWikitext } from "../utils/sanitizer.js";
|
|
11
12
|
let _characterTable = null;
|
|
12
13
|
let _handbookTable = null;
|
|
13
14
|
let _charwordTable = null;
|
|
@@ -143,4 +144,98 @@ export function getOperatorVoicelines(name) {
|
|
|
143
144
|
return `干员 '${name}' 暂无语音数据。`;
|
|
144
145
|
return `# ${name} - 语音记录\n\n` + lines.join("\n");
|
|
145
146
|
}
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// Basic info
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
const PROFESSION_ZH = {
|
|
151
|
+
CASTER: "术师",
|
|
152
|
+
MEDIC: "医疗",
|
|
153
|
+
PIONEER: "先锋",
|
|
154
|
+
SNIPER: "狙击",
|
|
155
|
+
SPECIAL: "特种",
|
|
156
|
+
SUPPORT: "辅助",
|
|
157
|
+
TANK: "重装",
|
|
158
|
+
WARRIOR: "近卫",
|
|
159
|
+
};
|
|
160
|
+
const POSITION_ZH = {
|
|
161
|
+
RANGED: "远程",
|
|
162
|
+
MELEE: "近战",
|
|
163
|
+
ALL: "通用",
|
|
164
|
+
NONE: "-",
|
|
165
|
+
};
|
|
166
|
+
/** Return basic profile info for an operator by Chinese name. */
|
|
167
|
+
export function getOperatorBasicInfo(name) {
|
|
168
|
+
const cfg = loadConfig();
|
|
169
|
+
if (!hasOperatorData(cfg))
|
|
170
|
+
return missingDataMessage();
|
|
171
|
+
let charId;
|
|
172
|
+
try {
|
|
173
|
+
charId = resolveCharId(name);
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return err instanceof Error ? err.message : String(err);
|
|
177
|
+
}
|
|
178
|
+
if (charId === null) {
|
|
179
|
+
return `未找到干员 '${name}'。请使用游戏内中文名称(如'阿米娅')。`;
|
|
180
|
+
}
|
|
181
|
+
let ct;
|
|
182
|
+
try {
|
|
183
|
+
ct = getCharacterTable();
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return err instanceof Error ? err.message : String(err);
|
|
187
|
+
}
|
|
188
|
+
const info = ct[charId];
|
|
189
|
+
if (!info)
|
|
190
|
+
return `干员 '${name}' 暂无基本信息。`;
|
|
191
|
+
const rarityRaw = info.rarity ?? "";
|
|
192
|
+
const rarity = rarityRaw.startsWith("TIER_")
|
|
193
|
+
? rarityRaw.replace("TIER_", "") + "★"
|
|
194
|
+
: rarityRaw;
|
|
195
|
+
const profession = PROFESSION_ZH[info.profession ?? ""] ?? (info.profession ?? "");
|
|
196
|
+
const position = POSITION_ZH[info.position ?? ""] ?? (info.position ?? "");
|
|
197
|
+
const affiliationParts = [info.nationId, info.groupId, info.teamId].filter(Boolean);
|
|
198
|
+
const affiliation = affiliationParts.length > 0 ? affiliationParts.join(" / ") : "-";
|
|
199
|
+
const lines = [`# ${name} - 干员基本信息\n`];
|
|
200
|
+
lines.push(`- **编号**:${info.displayNumber ?? ""}`);
|
|
201
|
+
lines.push(`- **英文名**:${info.appellation ?? ""}`);
|
|
202
|
+
lines.push(`- **稀有度**:${rarity}`);
|
|
203
|
+
lines.push(`- **职业**:${profession}(${info.subProfessionId ?? ""})`);
|
|
204
|
+
lines.push(`- **站位**:${position}`);
|
|
205
|
+
lines.push(`- **所属**:${affiliation}`);
|
|
206
|
+
if (info.tagList && info.tagList.length > 0) {
|
|
207
|
+
lines.push(`- **招募标签**:${info.tagList.join("、")}`);
|
|
208
|
+
}
|
|
209
|
+
if (info.description) {
|
|
210
|
+
lines.push(`- **攻击属性**:${stripWikitext(info.description)}`);
|
|
211
|
+
}
|
|
212
|
+
if (info.itemUsage) {
|
|
213
|
+
lines.push(`\n**图鉴**:${info.itemUsage}`);
|
|
214
|
+
}
|
|
215
|
+
if (info.itemDesc) {
|
|
216
|
+
lines.push(`\n> ${info.itemDesc}`);
|
|
217
|
+
}
|
|
218
|
+
if (info.itemObtainApproach) {
|
|
219
|
+
lines.push(`\n**获取方式**:${info.itemObtainApproach}`);
|
|
220
|
+
}
|
|
221
|
+
const talents = info.talents ?? [];
|
|
222
|
+
if (talents.length > 0) {
|
|
223
|
+
lines.push("\n## 天赋");
|
|
224
|
+
for (const slot of talents) {
|
|
225
|
+
const candidates = slot.candidates ?? [];
|
|
226
|
+
let chosen;
|
|
227
|
+
for (let i = candidates.length - 1; i >= 0; i--) {
|
|
228
|
+
const c = candidates[i];
|
|
229
|
+
if (c.name && c.name !== "???") {
|
|
230
|
+
chosen = c;
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (chosen) {
|
|
235
|
+
lines.push(`- **${chosen.name ?? ""}**:${stripWikitext(chosen.description ?? "")}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return lines.join("\n");
|
|
240
|
+
}
|
|
146
241
|
//# sourceMappingURL=operator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operator.js","sourceRoot":"","sources":["../../src/data/operator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"operator.js","sourceRoot":"","sources":["../../src/data/operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story data reader for PRTS-MCP (TypeScript).
|
|
3
|
+
*
|
|
4
|
+
* Reads from the bundled/synced zh_CN.zip (ArknightsStoryJson fork release).
|
|
5
|
+
* Mirrors python/src/prts_mcp/data/story.py.
|
|
6
|
+
*
|
|
7
|
+
* Zip internal layout (all paths prefixed with "zh_CN/"):
|
|
8
|
+
* zh_CN/storyinfo.json — {story_key: summary_text}
|
|
9
|
+
* zh_CN/gamedata/excel/story_review_table.json — event metadata + ordered chapter list
|
|
10
|
+
* zh_CN/gamedata/story/{story_key}.json — per-chapter dialogue JSON
|
|
11
|
+
*/
|
|
12
|
+
export interface StoryLine {
|
|
13
|
+
type: "dialog" | "narration" | "choice";
|
|
14
|
+
role: string | null;
|
|
15
|
+
text: string;
|
|
16
|
+
}
|
|
17
|
+
export interface StoryChapter {
|
|
18
|
+
storyKey: string;
|
|
19
|
+
storyCode: string;
|
|
20
|
+
storyName: string;
|
|
21
|
+
avgTag: string | null;
|
|
22
|
+
eventName: string;
|
|
23
|
+
storyInfo: string;
|
|
24
|
+
lines: StoryLine[];
|
|
25
|
+
}
|
|
26
|
+
export interface EventInfo {
|
|
27
|
+
eventId: string;
|
|
28
|
+
name: string;
|
|
29
|
+
entryType: string;
|
|
30
|
+
storyCount: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ChapterSummary {
|
|
33
|
+
storyKey: string;
|
|
34
|
+
storyCode: string;
|
|
35
|
+
storyName: string;
|
|
36
|
+
avgTag: string | null;
|
|
37
|
+
sortOrder: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ActivityResult {
|
|
40
|
+
eventId: string;
|
|
41
|
+
eventName: string;
|
|
42
|
+
totalChapters: number;
|
|
43
|
+
hasMore: boolean;
|
|
44
|
+
chapters: StoryChapter[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Return a list of events from story_review_table.json.
|
|
48
|
+
*
|
|
49
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
50
|
+
* @param category Optional filter — "main" or "activities".
|
|
51
|
+
*/
|
|
52
|
+
export declare function listStoryEvents(zipPath: string, category?: string): EventInfo[];
|
|
53
|
+
/**
|
|
54
|
+
* Return ordered chapter list for an event.
|
|
55
|
+
*
|
|
56
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
57
|
+
* @param eventId Event key, e.g. "act31side".
|
|
58
|
+
* @throws Error if eventId is not found in story_review_table.
|
|
59
|
+
*/
|
|
60
|
+
export declare function listStories(zipPath: string, eventId: string): ChapterSummary[];
|
|
61
|
+
/**
|
|
62
|
+
* Read and parse a single story chapter from the zip.
|
|
63
|
+
*
|
|
64
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
65
|
+
* @param storyKey Story key from storyTxt / storyinfo.json.
|
|
66
|
+
* @param includeNarration Whether to include narration/scene lines (default true).
|
|
67
|
+
* @throws Error if the story file is not found in the zip.
|
|
68
|
+
*/
|
|
69
|
+
export declare function readStory(zipPath: string, storyKey: string, includeNarration?: boolean): StoryChapter;
|
|
70
|
+
/**
|
|
71
|
+
* Read all chapters of an activity in official story order.
|
|
72
|
+
*
|
|
73
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
74
|
+
* @param eventId Event key, e.g. "act31side".
|
|
75
|
+
* @param includeNarration Whether to include narration lines (default true).
|
|
76
|
+
* @param page 1-based page index. undefined = return all chapters.
|
|
77
|
+
* @param pageSize Chapters per page when page is set (default 5).
|
|
78
|
+
* @throws Error if eventId is not found.
|
|
79
|
+
*/
|
|
80
|
+
export declare function readActivity(zipPath: string, eventId: string, includeNarration?: boolean, page?: number, pageSize?: number): ActivityResult;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story data reader for PRTS-MCP (TypeScript).
|
|
3
|
+
*
|
|
4
|
+
* Reads from the bundled/synced zh_CN.zip (ArknightsStoryJson fork release).
|
|
5
|
+
* Mirrors python/src/prts_mcp/data/story.py.
|
|
6
|
+
*
|
|
7
|
+
* Zip internal layout (all paths prefixed with "zh_CN/"):
|
|
8
|
+
* zh_CN/storyinfo.json — {story_key: summary_text}
|
|
9
|
+
* zh_CN/gamedata/excel/story_review_table.json — event metadata + ordered chapter list
|
|
10
|
+
* zh_CN/gamedata/story/{story_key}.json — per-chapter dialogue JSON
|
|
11
|
+
*/
|
|
12
|
+
import AdmZip from "adm-zip";
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Zip path constants
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const STORY_REVIEW_TABLE = "zh_CN/gamedata/excel/story_review_table.json";
|
|
17
|
+
function storyZipPath(storyKey) {
|
|
18
|
+
return `zh_CN/gamedata/story/${storyKey}.json`;
|
|
19
|
+
}
|
|
20
|
+
// entryType → category filter mapping (mirrors Python _CATEGORY_MAP)
|
|
21
|
+
const CATEGORY_MAP = {
|
|
22
|
+
main: ["MAINLINE"],
|
|
23
|
+
activities: ["ACTIVITY", "MINI_ACTIVITY"],
|
|
24
|
+
};
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Text cleaning
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
const RICH_TAG_RE = /<[^>]+>/g;
|
|
29
|
+
function cleanText(text) {
|
|
30
|
+
return text.replace(/\{@nickname\}/g, "博士").replace(RICH_TAG_RE, "").trim();
|
|
31
|
+
}
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Internal helpers
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
function readZipEntry(zip, path) {
|
|
36
|
+
const entry = zip.getEntry(path);
|
|
37
|
+
if (!entry)
|
|
38
|
+
throw new Error(`Entry not found in zip: ${path}`);
|
|
39
|
+
return entry.getData().toString("utf-8");
|
|
40
|
+
}
|
|
41
|
+
function parseJsonFromZip(zip, path) {
|
|
42
|
+
return JSON.parse(readZipEntry(zip, path));
|
|
43
|
+
}
|
|
44
|
+
function parseStoryList(storyList, includeNarration) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
for (const item of storyList) {
|
|
47
|
+
const prop = (item.prop ?? "").toLowerCase();
|
|
48
|
+
const attrs = (item.attributes ?? {});
|
|
49
|
+
if (prop === "name") {
|
|
50
|
+
const name = String(attrs["name"] ?? "");
|
|
51
|
+
const content = String(attrs["content"] ?? "");
|
|
52
|
+
if (content) {
|
|
53
|
+
lines.push({
|
|
54
|
+
type: "dialog",
|
|
55
|
+
role: name ? cleanText(name) : null,
|
|
56
|
+
text: cleanText(content),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (includeNarration &&
|
|
61
|
+
(prop === "sticker" || prop === "subtitle" || prop === "animtext")) {
|
|
62
|
+
// Sticker uses "text" OR "content" field — check both (see porting guide §4.2)
|
|
63
|
+
const content = String(attrs["content"] ?? attrs["text"] ?? "");
|
|
64
|
+
if (content) {
|
|
65
|
+
lines.push({ type: "narration", role: null, text: cleanText(content) });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else if (prop === "decision") {
|
|
69
|
+
const options = attrs["options"];
|
|
70
|
+
if (Array.isArray(options)) {
|
|
71
|
+
for (const opt of options) {
|
|
72
|
+
let text = "";
|
|
73
|
+
if (typeof opt === "string")
|
|
74
|
+
text = opt;
|
|
75
|
+
else if (opt !== null && typeof opt === "object") {
|
|
76
|
+
text = String(opt["text"] ?? "");
|
|
77
|
+
}
|
|
78
|
+
if (text) {
|
|
79
|
+
lines.push({ type: "choice", role: null, text: cleanText(text) });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// All other props (Dialog, Background, PlayMusic, etc.) are skipped.
|
|
85
|
+
}
|
|
86
|
+
return lines;
|
|
87
|
+
}
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Public API
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
/**
|
|
92
|
+
* Return a list of events from story_review_table.json.
|
|
93
|
+
*
|
|
94
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
95
|
+
* @param category Optional filter — "main" or "activities".
|
|
96
|
+
*/
|
|
97
|
+
export function listStoryEvents(zipPath, category) {
|
|
98
|
+
const allowedTypes = category ? (CATEGORY_MAP[category] ?? null) : null;
|
|
99
|
+
const zip = new AdmZip(zipPath);
|
|
100
|
+
const table = parseJsonFromZip(zip, STORY_REVIEW_TABLE);
|
|
101
|
+
const events = [];
|
|
102
|
+
for (const [eventId, entry] of Object.entries(table)) {
|
|
103
|
+
const entryType = entry.entryType ?? "NONE";
|
|
104
|
+
if (allowedTypes !== null && !allowedTypes.includes(entryType))
|
|
105
|
+
continue;
|
|
106
|
+
events.push({
|
|
107
|
+
eventId,
|
|
108
|
+
name: entry.name ?? eventId,
|
|
109
|
+
entryType,
|
|
110
|
+
storyCount: (entry.infoUnlockDatas ?? []).length,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return events;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Return ordered chapter list for an event.
|
|
117
|
+
*
|
|
118
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
119
|
+
* @param eventId Event key, e.g. "act31side".
|
|
120
|
+
* @throws Error if eventId is not found in story_review_table.
|
|
121
|
+
*/
|
|
122
|
+
export function listStories(zipPath, eventId) {
|
|
123
|
+
const zip = new AdmZip(zipPath);
|
|
124
|
+
const table = parseJsonFromZip(zip, STORY_REVIEW_TABLE);
|
|
125
|
+
const entry = table[eventId];
|
|
126
|
+
if (!entry)
|
|
127
|
+
throw new Error(`Event not found: "${eventId}"`);
|
|
128
|
+
const datas = (entry.infoUnlockDatas ?? []).slice();
|
|
129
|
+
datas.sort((a, b) => (a.storySort ?? 0) - (b.storySort ?? 0));
|
|
130
|
+
const chapters = [];
|
|
131
|
+
for (const d of datas) {
|
|
132
|
+
if (!d.storyTxt)
|
|
133
|
+
continue;
|
|
134
|
+
chapters.push({
|
|
135
|
+
storyKey: d.storyTxt,
|
|
136
|
+
storyCode: d.storyCode ?? "",
|
|
137
|
+
storyName: d.storyName ?? "",
|
|
138
|
+
avgTag: d.avgTag ?? null,
|
|
139
|
+
sortOrder: d.storySort ?? 0,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return chapters;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Read and parse a single story chapter from the zip.
|
|
146
|
+
*
|
|
147
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
148
|
+
* @param storyKey Story key from storyTxt / storyinfo.json.
|
|
149
|
+
* @param includeNarration Whether to include narration/scene lines (default true).
|
|
150
|
+
* @throws Error if the story file is not found in the zip.
|
|
151
|
+
*/
|
|
152
|
+
export function readStory(zipPath, storyKey, includeNarration = true) {
|
|
153
|
+
const innerPath = storyZipPath(storyKey);
|
|
154
|
+
const zip = new AdmZip(zipPath);
|
|
155
|
+
const raw = parseJsonFromZip(zip, innerPath);
|
|
156
|
+
const lines = parseStoryList(raw.storyList ?? [], includeNarration);
|
|
157
|
+
return {
|
|
158
|
+
storyKey,
|
|
159
|
+
storyCode: raw.storyCode ?? "",
|
|
160
|
+
storyName: raw.storyName ?? "",
|
|
161
|
+
avgTag: raw.avgTag ?? null,
|
|
162
|
+
eventName: raw.eventName ?? "",
|
|
163
|
+
storyInfo: raw.storyInfo ?? "",
|
|
164
|
+
lines,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Read all chapters of an activity in official story order.
|
|
169
|
+
*
|
|
170
|
+
* @param zipPath Absolute path to zh_CN.zip.
|
|
171
|
+
* @param eventId Event key, e.g. "act31side".
|
|
172
|
+
* @param includeNarration Whether to include narration lines (default true).
|
|
173
|
+
* @param page 1-based page index. undefined = return all chapters.
|
|
174
|
+
* @param pageSize Chapters per page when page is set (default 5).
|
|
175
|
+
* @throws Error if eventId is not found.
|
|
176
|
+
*/
|
|
177
|
+
export function readActivity(zipPath, eventId, includeNarration = true, page, pageSize = 5) {
|
|
178
|
+
const summaries = listStories(zipPath, eventId);
|
|
179
|
+
const total = summaries.length;
|
|
180
|
+
let selected;
|
|
181
|
+
let hasMore;
|
|
182
|
+
if (page !== undefined) {
|
|
183
|
+
const start = (page - 1) * pageSize;
|
|
184
|
+
const end = start + pageSize;
|
|
185
|
+
selected = summaries.slice(start, end);
|
|
186
|
+
hasMore = end < total;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
selected = summaries;
|
|
190
|
+
hasMore = false;
|
|
191
|
+
}
|
|
192
|
+
const chapters = [];
|
|
193
|
+
let eventName = "";
|
|
194
|
+
for (const summary of selected) {
|
|
195
|
+
try {
|
|
196
|
+
const chapter = readStory(zipPath, summary.storyKey, includeNarration);
|
|
197
|
+
if (!eventName)
|
|
198
|
+
eventName = chapter.eventName;
|
|
199
|
+
chapters.push(chapter);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// Story file missing from zip — skip silently (see porting guide §10)
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return { eventId, eventName, totalChapters: total, hasMore, chapters };
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=story.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story.js","sourceRoot":"","sources":["../../src/data/story.ts"],"names":[],"mappings":"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"}
|
package/dist/data/sync.d.ts
CHANGED
|
@@ -53,3 +53,35 @@ export declare function downloadFiles(spec: RepoSpec, sha: string, timeoutMs?: n
|
|
|
53
53
|
export declare function syncRepo(spec: RepoSpec): Promise<SyncResult>;
|
|
54
54
|
/** Sync each RepoSpec sequentially and return all results. */
|
|
55
55
|
export declare function syncAll(specs: RepoSpec[]): Promise<SyncResult[]>;
|
|
56
|
+
/** Describes a GitHub Release asset to download as a local zip. */
|
|
57
|
+
export interface ReleaseSpec {
|
|
58
|
+
owner: string;
|
|
59
|
+
repo: string;
|
|
60
|
+
/** Asset filename in the release, e.g. "zh_CN.zip". */
|
|
61
|
+
assetName: string;
|
|
62
|
+
/** Absolute destination path for the downloaded zip. */
|
|
63
|
+
localZip: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetch the latest release tag and asset download URL.
|
|
67
|
+
* Returns null on any network or API failure.
|
|
68
|
+
*/
|
|
69
|
+
export declare function checkLatestRelease(spec: ReleaseSpec, timeoutMs?: number): Promise<{
|
|
70
|
+
tag: string;
|
|
71
|
+
url: string;
|
|
72
|
+
} | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Download the release asset zip atomically, then write cache metadata.
|
|
75
|
+
* Uses write-to-tmp-then-rename for crash safety.
|
|
76
|
+
*/
|
|
77
|
+
export declare function downloadReleaseAsset(spec: ReleaseSpec, tag: string, assetUrl: string, timeoutMs?: number): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* Check latest GitHub Release and download the zip if the tag has changed.
|
|
80
|
+
*
|
|
81
|
+
* Decision tree mirrors syncRepo:
|
|
82
|
+
* 1. Cache is fresh AND zip exists → up_to_date (skip API call)
|
|
83
|
+
* 2. Network failure → offline_fallback / no_data
|
|
84
|
+
* 3. Tag unchanged AND zip exists → up_to_date (refresh fetchedAt)
|
|
85
|
+
* 4. Tag changed or zip missing → downloadReleaseAsset → updated / fallback
|
|
86
|
+
*/
|
|
87
|
+
export declare function syncRelease(spec: ReleaseSpec): Promise<SyncResult>;
|
package/dist/data/sync.js
CHANGED
|
@@ -18,6 +18,7 @@ export const GAMEDATA_FILES = [
|
|
|
18
18
|
"zh_CN/gamedata/excel/character_table.json",
|
|
19
19
|
"zh_CN/gamedata/excel/handbook_info_table.json",
|
|
20
20
|
"zh_CN/gamedata/excel/charword_table.json",
|
|
21
|
+
"zh_CN/gamedata/excel/story_review_table.json",
|
|
21
22
|
];
|
|
22
23
|
const GITHUB_UA = "PRTS-MCP-Bot/0.1 (Arknights fan-creation helper)";
|
|
23
24
|
/** Skip the upstream SHA check if cached data is fresher than this (seconds). */
|
|
@@ -212,4 +213,130 @@ export async function syncAll(specs) {
|
|
|
212
213
|
}
|
|
213
214
|
return results;
|
|
214
215
|
}
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Release-based sync (for zh_CN.zip from GitHub Releases)
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
const GITHUB_RELEASES_LATEST_URL = "https://api.github.com/repos/{owner}/{repo}/releases/latest";
|
|
220
|
+
const TAG_PREFIX = "upstream-";
|
|
221
|
+
function releaseCachePath(spec) {
|
|
222
|
+
return join(dirname(spec.localZip), "release_meta.json");
|
|
223
|
+
}
|
|
224
|
+
async function loadReleaseMeta(spec) {
|
|
225
|
+
try {
|
|
226
|
+
const text = await readFile(releaseCachePath(spec), "utf-8");
|
|
227
|
+
return JSON.parse(text);
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async function saveReleaseMeta(spec, meta) {
|
|
234
|
+
const p = releaseCachePath(spec);
|
|
235
|
+
await mkdir(dirname(p), { recursive: true });
|
|
236
|
+
await writeFile(p, JSON.stringify(meta, null, 2), "utf-8");
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Fetch the latest release tag and asset download URL.
|
|
240
|
+
* Returns null on any network or API failure.
|
|
241
|
+
*/
|
|
242
|
+
export async function checkLatestRelease(spec, timeoutMs = 10_000) {
|
|
243
|
+
const url = GITHUB_RELEASES_LATEST_URL.replace("{owner}", spec.owner).replace("{repo}", spec.repo);
|
|
244
|
+
try {
|
|
245
|
+
const res = await fetch(url, {
|
|
246
|
+
headers: githubHeaders(),
|
|
247
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
248
|
+
});
|
|
249
|
+
if (!res.ok)
|
|
250
|
+
throw new Error(`HTTP ${res.status}`);
|
|
251
|
+
const data = (await res.json());
|
|
252
|
+
const asset = data.assets.find((a) => a.name === spec.assetName);
|
|
253
|
+
if (!asset)
|
|
254
|
+
return null;
|
|
255
|
+
return { tag: data.tag_name, url: asset.browser_download_url };
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Download the release asset zip atomically, then write cache metadata.
|
|
263
|
+
* Uses write-to-tmp-then-rename for crash safety.
|
|
264
|
+
*/
|
|
265
|
+
export async function downloadReleaseAsset(spec, tag, assetUrl, timeoutMs = 120_000) {
|
|
266
|
+
const tmp = spec.localZip + ".tmp";
|
|
267
|
+
await mkdir(dirname(spec.localZip), { recursive: true });
|
|
268
|
+
try {
|
|
269
|
+
const res = await fetch(assetUrl, {
|
|
270
|
+
headers: githubHeaders(),
|
|
271
|
+
redirect: "follow",
|
|
272
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
273
|
+
});
|
|
274
|
+
if (!res.ok)
|
|
275
|
+
throw new Error(`HTTP ${res.status} downloading ${spec.assetName}`);
|
|
276
|
+
await writeFile(tmp, Buffer.from(await res.arrayBuffer()));
|
|
277
|
+
await rename(tmp, spec.localZip);
|
|
278
|
+
const commitSha = tag.startsWith(TAG_PREFIX) ? tag.slice(TAG_PREFIX.length) : tag;
|
|
279
|
+
await saveReleaseMeta(spec, {
|
|
280
|
+
repo: `${spec.owner}/${spec.repo}`,
|
|
281
|
+
branch: "releases",
|
|
282
|
+
commitSha,
|
|
283
|
+
fetchedAt: new Date().toISOString(),
|
|
284
|
+
files: [spec.assetName],
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
catch (err) {
|
|
288
|
+
try {
|
|
289
|
+
await unlink(tmp);
|
|
290
|
+
}
|
|
291
|
+
catch { /* best-effort */ }
|
|
292
|
+
throw err;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Check latest GitHub Release and download the zip if the tag has changed.
|
|
297
|
+
*
|
|
298
|
+
* Decision tree mirrors syncRepo:
|
|
299
|
+
* 1. Cache is fresh AND zip exists → up_to_date (skip API call)
|
|
300
|
+
* 2. Network failure → offline_fallback / no_data
|
|
301
|
+
* 3. Tag unchanged AND zip exists → up_to_date (refresh fetchedAt)
|
|
302
|
+
* 4. Tag changed or zip missing → downloadReleaseAsset → updated / fallback
|
|
303
|
+
*/
|
|
304
|
+
export async function syncRelease(spec) {
|
|
305
|
+
// Use a dummy RepoSpec so the result shape is compatible with syncAll logging.
|
|
306
|
+
const dummySpec = {
|
|
307
|
+
owner: spec.owner,
|
|
308
|
+
repo: spec.repo,
|
|
309
|
+
branch: "releases",
|
|
310
|
+
files: [spec.assetName],
|
|
311
|
+
localRoot: dirname(spec.localZip),
|
|
312
|
+
};
|
|
313
|
+
const cache = await loadReleaseMeta(spec);
|
|
314
|
+
const zipOk = existsSync(spec.localZip);
|
|
315
|
+
if (cache !== null && zipOk && cacheIsFresh(cache)) {
|
|
316
|
+
return { spec: dummySpec, status: "up_to_date", commitSha: cache.commitSha, error: null };
|
|
317
|
+
}
|
|
318
|
+
const latest = await checkLatestRelease(spec);
|
|
319
|
+
if (latest === null) {
|
|
320
|
+
return zipOk
|
|
321
|
+
? { spec: dummySpec, status: "offline_fallback", commitSha: cache?.commitSha ?? null, error: "Network unavailable" }
|
|
322
|
+
: { spec: dummySpec, status: "no_data", commitSha: null, error: "Network unavailable and no cached zip" };
|
|
323
|
+
}
|
|
324
|
+
const commitSha = latest.tag.startsWith(TAG_PREFIX)
|
|
325
|
+
? latest.tag.slice(TAG_PREFIX.length)
|
|
326
|
+
: latest.tag;
|
|
327
|
+
if (cache !== null && cache.commitSha === commitSha && zipOk) {
|
|
328
|
+
await saveReleaseMeta(spec, { ...cache, fetchedAt: new Date().toISOString() });
|
|
329
|
+
return { spec: dummySpec, status: "up_to_date", commitSha, error: null };
|
|
330
|
+
}
|
|
331
|
+
try {
|
|
332
|
+
await downloadReleaseAsset(spec, latest.tag, latest.url);
|
|
333
|
+
return { spec: dummySpec, status: "updated", commitSha, error: null };
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
const error = errorMessage(err);
|
|
337
|
+
return zipOk
|
|
338
|
+
? { spec: dummySpec, status: "offline_fallback", commitSha: cache?.commitSha ?? null, error }
|
|
339
|
+
: { spec: dummySpec, status: "no_data", commitSha: null, error };
|
|
340
|
+
}
|
|
341
|
+
}
|
|
215
342
|
//# sourceMappingURL=sync.js.map
|
package/dist/data/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/data/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/data/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -4,10 +4,11 @@ import express from "express";
|
|
|
4
4
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
5
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
import { loadConfig } from "./config.js";
|
|
7
|
+
import { loadConfig, hasStoryData } from "./config.js";
|
|
8
8
|
import { searchPrts, readPage } from "./api/prtsWiki.js";
|
|
9
|
-
import { getOperatorArchives, getOperatorVoicelines } from "./data/operator.js";
|
|
10
|
-
import { syncAll, GAMEDATA_FILES } from "./data/sync.js";
|
|
9
|
+
import { getOperatorArchives, getOperatorVoicelines, getOperatorBasicInfo } from "./data/operator.js";
|
|
10
|
+
import { syncAll, syncRelease, GAMEDATA_FILES } from "./data/sync.js";
|
|
11
|
+
import { listStoryEvents as _listStoryEvents, listStories as _listStories, readStory as _readStory, readActivity as _readActivity, } from "./data/story.js";
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
// Logging
|
|
13
14
|
// ---------------------------------------------------------------------------
|
|
@@ -16,12 +17,45 @@ function log(level, msg) {
|
|
|
16
17
|
process.stderr.write(`${ts} ${level} prts_mcp.server: ${msg}\n`);
|
|
17
18
|
}
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
20
|
+
// Story formatting helpers
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
function formatLine(line) {
|
|
23
|
+
if (line.type === "dialog") {
|
|
24
|
+
return `${line.role ?? "(旁白)"}:${line.text}`;
|
|
25
|
+
}
|
|
26
|
+
else if (line.type === "narration") {
|
|
27
|
+
return `*${line.text}*`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return `【选项】${line.text}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function formatChapter(chapter) {
|
|
34
|
+
const parts = [];
|
|
35
|
+
parts.push(`【${chapter.eventName}】${chapter.storyName}`);
|
|
36
|
+
if (chapter.storyInfo)
|
|
37
|
+
parts.push(`简介:${chapter.storyInfo}\n`);
|
|
38
|
+
for (const line of chapter.lines) {
|
|
39
|
+
parts.push(formatLine(line));
|
|
40
|
+
}
|
|
41
|
+
return parts.join("\n");
|
|
42
|
+
}
|
|
43
|
+
function requireStoryZip() {
|
|
44
|
+
const cfg = loadConfig();
|
|
45
|
+
if (!hasStoryData(cfg)) {
|
|
46
|
+
throw new Error("剧情数据暂不可用。容器启动时的 auto-sync 可能仍在进行中,请稍后重试;" +
|
|
47
|
+
"若持续出现此提示,请检查网络连接,或提供 STORYJSON_PATH 指向本地 zh_CN.zip。" +
|
|
48
|
+
`(当前同步目标路径:${cfg.storyjsonZip})`);
|
|
49
|
+
}
|
|
50
|
+
return cfg.effectiveStoryjsonZip;
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
19
53
|
// MCP Server factory — one instance per session
|
|
20
54
|
// ---------------------------------------------------------------------------
|
|
21
55
|
function createMcpServer() {
|
|
22
56
|
const server = new McpServer({
|
|
23
57
|
name: "PRTS_Wiki_Assistant",
|
|
24
|
-
version: "0.
|
|
58
|
+
version: "0.2.0",
|
|
25
59
|
});
|
|
26
60
|
server.tool("search_prts", "搜索 PRTS 明日方舟中文维基词条。返回匹配的词条标题和摘要。", { query: z.string(), limit: z.number().int().min(1).max(20).default(5) }, async ({ query, limit }) => {
|
|
27
61
|
const results = await searchPrts(query, limit);
|
|
@@ -45,6 +79,171 @@ function createMcpServer() {
|
|
|
45
79
|
const text = getOperatorVoicelines(operator_name);
|
|
46
80
|
return { content: [{ type: "text", text }] };
|
|
47
81
|
});
|
|
82
|
+
server.tool("get_operator_basic_info", '获取指定干员的基本信息:职业、稀有度、所属、招募标签、天赋等(使用游戏内中文名,如"阿米娅")。', { operator_name: z.string() }, ({ operator_name }) => {
|
|
83
|
+
const text = getOperatorBasicInfo(operator_name);
|
|
84
|
+
return { content: [{ type: "text", text }] };
|
|
85
|
+
});
|
|
86
|
+
// -------------------------------------------------------------------------
|
|
87
|
+
// Story tools
|
|
88
|
+
// -------------------------------------------------------------------------
|
|
89
|
+
server.tool("list_story_events", [
|
|
90
|
+
"列出明日方舟剧情活动列表。",
|
|
91
|
+
"category 可选过滤:\"main\"(主线)或 \"activities\"(活动 + 插曲)。",
|
|
92
|
+
"不传 category 则返回全部条目。",
|
|
93
|
+
"返回格式:每行 - [类型] 活动ID:名称(N 章)",
|
|
94
|
+
"获取活动 ID 后,可调用 list_stories 查看该活动的章节列表。",
|
|
95
|
+
].join(" "), { category: z.string().optional() }, ({ category }) => {
|
|
96
|
+
let zipPath;
|
|
97
|
+
try {
|
|
98
|
+
zipPath = requireStoryZip();
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return { content: [{ type: "text", text: e instanceof Error ? e.message : String(e) }] };
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const events = _listStoryEvents(zipPath, category);
|
|
105
|
+
if (events.length === 0) {
|
|
106
|
+
return { content: [{ type: "text", text: "未找到匹配的活动。" }] };
|
|
107
|
+
}
|
|
108
|
+
const lines = events.map((ev) => `- [${ev.entryType}] ${ev.eventId}:${ev.name}(${ev.storyCount} 章)`);
|
|
109
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
return { content: [{ type: "text", text: `读取剧情数据失败:${e instanceof Error ? e.message : String(e)}` }] };
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
server.tool("list_stories", [
|
|
116
|
+
"列出指定活动的所有章节,按官方顺序排列。",
|
|
117
|
+
"event_id 为活动 ID(可从 list_story_events 获取,如 \"act31side\")。",
|
|
118
|
+
"返回格式:每行 - 关卡代码 [标签] 章节名(key: 章节key)",
|
|
119
|
+
"获取章节 key 后,可调用 read_story 阅读具体章节内容。",
|
|
120
|
+
].join(" "), { event_id: z.string() }, ({ event_id }) => {
|
|
121
|
+
let zipPath;
|
|
122
|
+
try {
|
|
123
|
+
zipPath = requireStoryZip();
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
return { content: [{ type: "text", text: e instanceof Error ? e.message : String(e) }] };
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const chapters = _listStories(zipPath, event_id);
|
|
130
|
+
if (chapters.length === 0) {
|
|
131
|
+
return { content: [{ type: "text", text: `活动 "${event_id}" 没有章节数据。` }] };
|
|
132
|
+
}
|
|
133
|
+
const lines = chapters.map((ch) => {
|
|
134
|
+
const tag = ch.avgTag ? `[${ch.avgTag}] ` : "";
|
|
135
|
+
return `- ${ch.storyCode} ${tag}${ch.storyName}(key: ${ch.storyKey})`;
|
|
136
|
+
});
|
|
137
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
141
|
+
if (msg.includes("not found")) {
|
|
142
|
+
return {
|
|
143
|
+
content: [
|
|
144
|
+
{
|
|
145
|
+
type: "text",
|
|
146
|
+
text: `未找到活动:"${event_id}"。请先调用 list_story_events 确认活动 ID。`,
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return { content: [{ type: "text", text: `读取章节列表失败:${msg}` }] };
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
server.tool("read_story", [
|
|
155
|
+
"阅读指定章节的完整剧情内容。",
|
|
156
|
+
"story_key 为章节 key(可从 list_stories 获取,如 \"activities/act31side/level_act31side_01_beg\")。",
|
|
157
|
+
"include_narration 控制是否包含旁白/场景描述(默认 true)。",
|
|
158
|
+
].join(" "), {
|
|
159
|
+
story_key: z.string(),
|
|
160
|
+
include_narration: z.boolean().default(true),
|
|
161
|
+
}, ({ story_key, include_narration }) => {
|
|
162
|
+
let zipPath;
|
|
163
|
+
try {
|
|
164
|
+
zipPath = requireStoryZip();
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
return { content: [{ type: "text", text: e instanceof Error ? e.message : String(e) }] };
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const chapter = _readStory(zipPath, story_key, include_narration);
|
|
171
|
+
return { content: [{ type: "text", text: formatChapter(chapter) }] };
|
|
172
|
+
}
|
|
173
|
+
catch (e) {
|
|
174
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
175
|
+
if (msg.includes("not found") || msg.includes("Entry not found")) {
|
|
176
|
+
return {
|
|
177
|
+
content: [
|
|
178
|
+
{
|
|
179
|
+
type: "text",
|
|
180
|
+
text: `未找到剧情:"${story_key}"。请通过 list_stories 确认章节 key。`,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return { content: [{ type: "text", text: `读取剧情失败:${msg}` }] };
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
server.tool("read_activity", [
|
|
189
|
+
"阅读指定活动的完整剧情(按官方顺序,合并所有章节)。",
|
|
190
|
+
"event_id 为活动 ID(可从 list_story_events 获取)。",
|
|
191
|
+
"include_narration 控制是否包含旁白(默认 true)。",
|
|
192
|
+
"page 为章节分页(从 1 开始),不传则返回全部章节。",
|
|
193
|
+
"page_size 控制每页章节数(默认 5)。",
|
|
194
|
+
"返回内容含 total_chapters 和 has_more,便于判断是否还有后续内容。",
|
|
195
|
+
].join(" "), {
|
|
196
|
+
event_id: z.string(),
|
|
197
|
+
include_narration: z.boolean().default(true),
|
|
198
|
+
page: z.number().int().min(1).optional(),
|
|
199
|
+
page_size: z.number().int().min(1).max(20).default(5),
|
|
200
|
+
}, ({ event_id, include_narration, page, page_size }) => {
|
|
201
|
+
let zipPath;
|
|
202
|
+
try {
|
|
203
|
+
zipPath = requireStoryZip();
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
return { content: [{ type: "text", text: e instanceof Error ? e.message : String(e) }] };
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
209
|
+
const result = _readActivity(zipPath, event_id, include_narration, page, page_size);
|
|
210
|
+
const parts = [];
|
|
211
|
+
if (result.eventName) {
|
|
212
|
+
parts.push(`# ${result.eventName}(共 ${result.totalChapters} 章${result.hasMore ? ",当前为部分内容" : ""})`);
|
|
213
|
+
}
|
|
214
|
+
for (const chapter of result.chapters) {
|
|
215
|
+
const tag = chapter.avgTag ? ` [${chapter.avgTag}]` : "";
|
|
216
|
+
parts.push(`\n=== ${chapter.storyCode}${tag} ${chapter.storyName} ===`);
|
|
217
|
+
if (chapter.storyInfo)
|
|
218
|
+
parts.push(`简介:${chapter.storyInfo}`);
|
|
219
|
+
for (const line of chapter.lines) {
|
|
220
|
+
parts.push(formatLine(line));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (result.chapters.length === 0) {
|
|
224
|
+
parts.push("该活动暂无可读取的章节数据。");
|
|
225
|
+
}
|
|
226
|
+
if (result.hasMore) {
|
|
227
|
+
const nextPage = (page ?? 1) + 1;
|
|
228
|
+
parts.push(`\n[还有更多章节,请调用 read_activity(event_id="${event_id}", page=${nextPage})]`);
|
|
229
|
+
}
|
|
230
|
+
return { content: [{ type: "text", text: parts.join("\n") }] };
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
234
|
+
if (msg.includes("not found")) {
|
|
235
|
+
return {
|
|
236
|
+
content: [
|
|
237
|
+
{
|
|
238
|
+
type: "text",
|
|
239
|
+
text: `未找到活动:"${event_id}"。请先调用 list_story_events 确认活动 ID。`,
|
|
240
|
+
},
|
|
241
|
+
],
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
return { content: [{ type: "text", text: `读取活动剧情失败:${msg}` }] };
|
|
245
|
+
}
|
|
246
|
+
});
|
|
48
247
|
return server;
|
|
49
248
|
}
|
|
50
249
|
// ---------------------------------------------------------------------------
|
|
@@ -52,40 +251,73 @@ function createMcpServer() {
|
|
|
52
251
|
// ---------------------------------------------------------------------------
|
|
53
252
|
function runStartupSync() {
|
|
54
253
|
const cfg = loadConfig();
|
|
254
|
+
// Gamedata sync
|
|
55
255
|
if (cfg.isCustomGamedata) {
|
|
56
256
|
log("INFO", `GAMEDATA_PATH is custom (${cfg.gamedataPath}); auto-sync disabled.`);
|
|
57
|
-
return;
|
|
58
257
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
258
|
+
else {
|
|
259
|
+
const specs = [
|
|
260
|
+
{
|
|
261
|
+
owner: "Kengxxiao",
|
|
262
|
+
repo: "ArknightsGameData",
|
|
263
|
+
branch: "master",
|
|
264
|
+
files: GAMEDATA_FILES,
|
|
265
|
+
localRoot: cfg.gamedataPath,
|
|
266
|
+
},
|
|
267
|
+
];
|
|
268
|
+
syncAll(specs)
|
|
269
|
+
.then((results) => {
|
|
270
|
+
for (const r of results) {
|
|
271
|
+
const sha = r.commitSha ? r.commitSha.slice(0, 8) : "unknown";
|
|
272
|
+
if (r.status === "updated") {
|
|
273
|
+
log("INFO", `Data updated from GitHub (${r.spec.repo} @ ${sha}).`);
|
|
274
|
+
}
|
|
275
|
+
else if (r.status === "up_to_date") {
|
|
276
|
+
log("INFO", `Data is up to date (${r.spec.repo} @ ${sha}).`);
|
|
277
|
+
}
|
|
278
|
+
else if (r.status === "offline_fallback") {
|
|
279
|
+
log("WARN", `Network unavailable; using cached data (${r.spec.repo} @ ${sha}). Error: ${r.error}`);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
log("ERROR", `Sync failed for ${r.spec.repo} — no data. Error: ${r.error}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
})
|
|
286
|
+
.catch((err) => {
|
|
287
|
+
log("ERROR", `Startup sync threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
// Storyjson release sync (always attempt unless user supplied STORYJSON_PATH)
|
|
291
|
+
if (!process.env["STORYJSON_PATH"]) {
|
|
292
|
+
const releaseSpec = {
|
|
293
|
+
owner: "3aKHP",
|
|
294
|
+
repo: "ArknightsStoryJson",
|
|
295
|
+
assetName: "zh_CN.zip",
|
|
296
|
+
localZip: cfg.storyjsonZip,
|
|
297
|
+
};
|
|
298
|
+
syncRelease(releaseSpec)
|
|
299
|
+
.then((r) => {
|
|
71
300
|
const sha = r.commitSha ? r.commitSha.slice(0, 8) : "unknown";
|
|
72
301
|
if (r.status === "updated") {
|
|
73
|
-
log("INFO", `
|
|
302
|
+
log("INFO", `Storyjson updated from GitHub Release (${r.spec.repo} @ ${sha}).`);
|
|
74
303
|
}
|
|
75
304
|
else if (r.status === "up_to_date") {
|
|
76
|
-
log("INFO", `
|
|
305
|
+
log("INFO", `Storyjson is up to date (${r.spec.repo} @ ${sha}).`);
|
|
77
306
|
}
|
|
78
307
|
else if (r.status === "offline_fallback") {
|
|
79
|
-
log("WARN", `Network unavailable; using cached
|
|
308
|
+
log("WARN", `Network unavailable; using cached storyjson (${r.spec.repo} @ ${sha}). Error: ${r.error}`);
|
|
80
309
|
}
|
|
81
310
|
else {
|
|
82
|
-
log("ERROR", `
|
|
311
|
+
log("ERROR", `Storyjson sync failed for ${r.spec.repo} — no zip. Error: ${r.error}`);
|
|
83
312
|
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
313
|
+
})
|
|
314
|
+
.catch((err) => {
|
|
315
|
+
log("ERROR", `Storyjson sync threw unexpectedly: ${err instanceof Error ? err.message : String(err)}`);
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
log("INFO", `STORYJSON_PATH is set (${process.env["STORYJSON_PATH"]}); story auto-sync disabled.`);
|
|
320
|
+
}
|
|
89
321
|
}
|
|
90
322
|
// ---------------------------------------------------------------------------
|
|
91
323
|
// Express + StreamableHTTP
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prts-mcp-ts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCP Server for Arknights PRTS Wiki & game data (TypeScript / Streamable HTTP)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -25,14 +25,33 @@
|
|
|
25
25
|
"url": "https://github.com/3aKHP/prts-mcp.git",
|
|
26
26
|
"directory": "ts"
|
|
27
27
|
},
|
|
28
|
+
"homepage": "https://github.com/3aKHP/prts-mcp",
|
|
29
|
+
"bugs": "https://github.com/3aKHP/prts-mcp/issues",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"keywords": [
|
|
32
|
+
"mcp",
|
|
33
|
+
"mcp-server",
|
|
34
|
+
"model-context-protocol",
|
|
35
|
+
"arknights",
|
|
36
|
+
"prts",
|
|
37
|
+
"prts-wiki",
|
|
38
|
+
"game-data",
|
|
39
|
+
"claude",
|
|
40
|
+
"anthropic",
|
|
41
|
+
"fanfiction",
|
|
42
|
+
"ai-agent",
|
|
43
|
+
"streamable-http"
|
|
44
|
+
],
|
|
28
45
|
"volta": {
|
|
29
46
|
"node": "24.14.0"
|
|
30
47
|
},
|
|
31
48
|
"dependencies": {
|
|
32
49
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
|
+
"adm-zip": "^0.5.16",
|
|
33
51
|
"express": "^5.2.1"
|
|
34
52
|
},
|
|
35
53
|
"devDependencies": {
|
|
54
|
+
"@types/adm-zip": "^0.5.7",
|
|
36
55
|
"@types/express": "^5.0.6",
|
|
37
56
|
"@types/node": "^24.0.0",
|
|
38
57
|
"tsx": "^4.21.0",
|