@taptap/instant-games-open-mcp 1.22.0-beta.6 → 1.22.0-beta.7
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 +10 -2
- package/dist/maker.js +441 -20
- package/dist/proxy.js +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -66,6 +66,7 @@ maker_push_current_directory
|
|
|
66
66
|
说明:
|
|
67
67
|
|
|
68
68
|
- Maker MCP 依赖用户本机已有 Git。工具只检测并给出安装引导,不会代替用户安装 Git。
|
|
69
|
+
- 用户说“更新 mcp / 更新 taptap mcp / 刷新 mcp 缓存 / tap mcp 有新版本”时,应调用 `maker_get_mcp_update_guide`。该工具只返回 Windows 或 macOS/Linux 的更新引导、安装检查、配置位置提醒和重启提示,不直接执行更新命令;由用户本地 AI 客户端按返回命令操作。
|
|
69
70
|
- 用户说“我要开发maker游戏 / 本地maker开发 / 拉取maker游戏到本地 / 把maker游戏代码拉到本地 / clone maker项目 / 下载maker游戏代码 / 初始化maker开发目录 / 配置maker本地开发 / 继续开发maker项目”时,应触发 Maker 本地开发初始化流程。
|
|
70
71
|
- 如果 `maker_status` 或 `maker_check_environment` 显示 Git 缺失,必须持续提示用户自行安装 Git;在 `git --version` 可用前,不执行 clone、fetch、commit 或 push。
|
|
71
72
|
- Maker API、git 和 TapTap token 默认走 PAT-first:如果用户还没有 PAT,引导用户打开临时 PAT 页面 `https://fuping.agnt.xd.com/pat-tokens` 新建 PAT;用户提供 PAT 后调用 `maker_exchange_pat(manual_pat)` 保存。
|
|
@@ -79,10 +80,17 @@ maker_push_current_directory
|
|
|
79
80
|
- JWT 仅作为 legacy fallback 保留:`maker_exchange_jwt(manual_jwt)`、`JWT` / `MAKER_JWT` 仍可用于旧后端或创建新 PAT。
|
|
80
81
|
- Maker app 必须先通过 `maker_list_apps` 展示给用户选择,再调用 clone。
|
|
81
82
|
- Maker 后端地址按 `TAPTAP_MCP_ENV` 从 `src/maker/config.ts` 的环境配置表读取,本地 MCP 配置只需要切 `rnd` / `production`。
|
|
82
|
-
- 如果用户直接说“构建 / build / 重新构建游戏”,本地 Maker MCP 应调用 `maker_build_current_directory
|
|
83
|
+
- 如果用户直接说“构建 / build / 重新构建游戏”,本地 Maker MCP 应调用 `maker_build_current_directory`。该工具会强制检查本地 Maker 项目是否有未提交改动。
|
|
84
|
+
- 如果构建前发现本地有改动且尚未保存自动提交偏好,工具会停止并提示用户选择:`提交本地改动并触发构建(以后都是如此)`,或明确不提交、只构建云端已有版本。
|
|
85
|
+
- 用户选择 `提交本地改动并触发构建(以后都是如此)` 后,应调用 `maker_submit_current_directory` 并传入 `remember_build_submit_preference=true`;提交成功后会在当前项目 `.maker-mcp/config.json` 记住偏好。
|
|
86
|
+
- 保存偏好后,后续用户说“构建”且本地有改动时,`maker_build_current_directory` 会默认自动提交并依赖 Maker 自动构建,不再重复询问。
|
|
87
|
+
- 只有当用户明确说“不提交 / 直接构建云端版本”时,才可再次调用 `maker_build_current_directory` 并传入 `confirm_remote_build_without_submit=true`。
|
|
88
|
+
- 用户说“查看结果 / 预览 / 跑一下 / 验证一下 / 看看效果”时,也按构建流程处理;如果本地有改动,先提醒提交后自动构建。
|
|
83
89
|
- 构建转发会从 MCP 包自身定位 `dist/proxy.js`;`cwd` / `target_dir` 只用于识别 Maker 游戏项目,不要求游戏目录存在 MCP 的 `dist/proxy.js`。
|
|
90
|
+
- 用户未指定构建入口且本地存在 `scripts/main.lua` 时,Maker MCP 默认向远端 build 传 `scriptsPath="scripts"` 和 `entry="main.lua"`,避免第一次构建多一轮“入口配置缺失”的提示;用户显式传入口或多人入口时优先生效。
|
|
84
91
|
- 如需在当前游戏项目里直接暴露远端全量 `taptap-proxy` tools,再使用 `maker_configure_remote_proxy` 写入 `.mcp.json` 并重启 MCP 会话。
|
|
85
|
-
-
|
|
92
|
+
- `maker_get_mcp_update_guide` 默认生成 `@taptap/instant-games-open-mcp@beta` 和 `taptap-maker` 的 npx 缓存更新步骤;更新后当前 MCP 会话通常不会热加载,必须重启 MCP 客户端或新开 Claude Code / Codex / Cursor 窗口,再调用 `maker_status` 验证。
|
|
93
|
+
- 用户说“帮我提交/提交代码”时使用 `maker_submit_current_directory`,会对当前 Maker 项目执行 commit + push;Maker 提交成功后会自动触发构建,不需要再手动调用构建工具。
|
|
86
94
|
- “帮我提交代码到maker / taptap制造 / tap制造 / tap”也应触发 `maker_submit_current_directory`。
|
|
87
95
|
- Maker 项目提交不走通用 Git skill 的任务号、新分支规则;冲突时先和用户确认 pull/rebase 流程。
|
|
88
96
|
- 如果 commit 已完成但 push 失败,Maker MCP 会返回 commit hash、ahead 状态、exit code、stderr/stdout 和下一步建议,便于开发期排查。
|
package/dist/maker.js
CHANGED
|
@@ -25751,7 +25751,7 @@ function requireMakerJwt(manualJwt) {
|
|
|
25751
25751
|
var BUILT_IN_MAKER_CLIENT_ID = "m2dnabebip3fpardnm";
|
|
25752
25752
|
var MAKER_CLIENT_ID_ENV = "TAPTAP_MAKER_CLIENT_ID";
|
|
25753
25753
|
var TAPTAP_CLIENT_ID_ENV = "TAPTAP_MCP_CLIENT_ID";
|
|
25754
|
-
var MAKER_VERSION = true ? "1.22.0-beta.
|
|
25754
|
+
var MAKER_VERSION = true ? "1.22.0-beta.7" : "dev";
|
|
25755
25755
|
async function startTapDeviceLogin() {
|
|
25756
25756
|
ensureMakerClientId();
|
|
25757
25757
|
const environment = EnvConfig.environment;
|
|
@@ -26595,6 +26595,30 @@ async function pushMakerProject(options) {
|
|
|
26595
26595
|
status: "pushed"
|
|
26596
26596
|
};
|
|
26597
26597
|
}
|
|
26598
|
+
async function readMakerProjectLocalChanges(cwd) {
|
|
26599
|
+
ensureGitAvailable();
|
|
26600
|
+
const requestedDir = path6.resolve(cwd);
|
|
26601
|
+
if (!isGitRepo(requestedDir)) {
|
|
26602
|
+
throw new Error(`${requestedDir} is not a git repository.`);
|
|
26603
|
+
}
|
|
26604
|
+
const projectRoot = (await readGit(["rev-parse", "--show-toplevel"], requestedDir)).trim();
|
|
26605
|
+
const configPath = path6.join(projectRoot, ".maker-mcp", "config.json");
|
|
26606
|
+
if (!fs4.existsSync(configPath)) {
|
|
26607
|
+
throw new Error(
|
|
26608
|
+
`${projectRoot} is not bound to a Maker project. .maker-mcp/config.json is missing.`
|
|
26609
|
+
);
|
|
26610
|
+
}
|
|
26611
|
+
const rawStatus = await readGit(["status", "--porcelain", "-z"], projectRoot);
|
|
26612
|
+
const files = parseGitStatusFiles(rawStatus).filter(
|
|
26613
|
+
(file2) => file2 !== ".maker-mcp" && !file2.startsWith(".maker-mcp/")
|
|
26614
|
+
);
|
|
26615
|
+
return {
|
|
26616
|
+
hasChanges: files.length > 0,
|
|
26617
|
+
projectRoot,
|
|
26618
|
+
files,
|
|
26619
|
+
rawStatus
|
|
26620
|
+
};
|
|
26621
|
+
}
|
|
26598
26622
|
function ensureTargetCanBindApp(target, appId) {
|
|
26599
26623
|
const existingConfig = loadProjectConfig(target);
|
|
26600
26624
|
if (!(existingConfig == null ? void 0 : existingConfig.project_id) || existingConfig.project_id === appId) {
|
|
@@ -26625,6 +26649,22 @@ function generateCommitMessage(status) {
|
|
|
26625
26649
|
}
|
|
26626
26650
|
return "chore: update maker project";
|
|
26627
26651
|
}
|
|
26652
|
+
function parseGitStatusFiles(status) {
|
|
26653
|
+
const entries = status.split("\0").filter(Boolean);
|
|
26654
|
+
const files = [];
|
|
26655
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
26656
|
+
const entry = entries[index];
|
|
26657
|
+
const statusCode = entry.slice(0, 2);
|
|
26658
|
+
const file2 = entry.slice(3);
|
|
26659
|
+
if (file2) {
|
|
26660
|
+
files.push(file2);
|
|
26661
|
+
}
|
|
26662
|
+
if (statusCode.includes("R") || statusCode.includes("C")) {
|
|
26663
|
+
index += 1;
|
|
26664
|
+
}
|
|
26665
|
+
}
|
|
26666
|
+
return files;
|
|
26667
|
+
}
|
|
26628
26668
|
async function readAheadState(cwd) {
|
|
26629
26669
|
var _a2;
|
|
26630
26670
|
try {
|
|
@@ -42380,8 +42420,257 @@ function isElectron() {
|
|
|
42380
42420
|
return "type" in process6;
|
|
42381
42421
|
}
|
|
42382
42422
|
|
|
42423
|
+
// src/maker/system/updateGuide.ts
|
|
42424
|
+
var DEFAULT_PACKAGE_SPEC = "@taptap/instant-games-open-mcp@beta";
|
|
42425
|
+
var DEFAULT_BIN = "taptap-maker";
|
|
42426
|
+
var UPDATE_BINS = [
|
|
42427
|
+
"taptap-maker",
|
|
42428
|
+
"instant-games-open-mcp",
|
|
42429
|
+
"taptap-mcp-proxy"
|
|
42430
|
+
];
|
|
42431
|
+
function createMakerMcpUpdateGuide(options = {}) {
|
|
42432
|
+
const platform = options.platform || process.platform;
|
|
42433
|
+
const packageSpec = options.packageSpec || DEFAULT_PACKAGE_SPEC;
|
|
42434
|
+
const bin = isMakerMcpUpdateBin(options.bin) ? options.bin : DEFAULT_BIN;
|
|
42435
|
+
const client = options.client || "unknown";
|
|
42436
|
+
const isWindows = platform === "win32";
|
|
42437
|
+
return [
|
|
42438
|
+
"TapTap Maker MCP update guide",
|
|
42439
|
+
"",
|
|
42440
|
+
`- platform: ${isWindows ? "Windows PowerShell" : "macOS / Linux"}`,
|
|
42441
|
+
`- client: ${client}`,
|
|
42442
|
+
`- package: ${packageSpec}`,
|
|
42443
|
+
`- bin: ${bin}`,
|
|
42444
|
+
"",
|
|
42445
|
+
"Important",
|
|
42446
|
+
"",
|
|
42447
|
+
"- 本工具不会直接执行更新命令,只返回适合当前平台的更新引导。",
|
|
42448
|
+
"- 请由当前本地 AI 客户端在用户机器的 shell 中执行下列命令。",
|
|
42449
|
+
"- 推荐把 Maker MCP 安装到 user/global scope,不建议放在当前项目目录或仓库级配置。",
|
|
42450
|
+
"- 如果现在是 project/local scope,也可以继续更新;后续可让 Claude Code / Codex / Cursor 迁移到 user/global scope。",
|
|
42451
|
+
"- 更新 npx 缓存后,当前 MCP 会话通常不会热加载;请重启 MCP 客户端,或新开 Claude Code / Codex / Cursor 窗口。",
|
|
42452
|
+
"- 重启后调用 maker_status,确认新 MCP 已生效。",
|
|
42453
|
+
"",
|
|
42454
|
+
isWindows ? createWindowsGuide(packageSpec, bin) : createPosixGuide(packageSpec, bin)
|
|
42455
|
+
].join("\n");
|
|
42456
|
+
}
|
|
42457
|
+
function createWindowsGuide(packageSpec, bin) {
|
|
42458
|
+
return [
|
|
42459
|
+
"Windows PowerShell",
|
|
42460
|
+
"",
|
|
42461
|
+
"Step 0: 安装检查和配置位置提醒",
|
|
42462
|
+
"",
|
|
42463
|
+
"```powershell",
|
|
42464
|
+
"node --version",
|
|
42465
|
+
"npm --version",
|
|
42466
|
+
"npx --version",
|
|
42467
|
+
"",
|
|
42468
|
+
"# 1. 项目级 .mcp.json(Claude Code / Codex 都可能读取)",
|
|
42469
|
+
"if (Test-Path .mcp.json) {",
|
|
42470
|
+
" if (Select-String -Path .mcp.json -Pattern 'taptap|instant-games-open-mcp|taptap-maker' -Quiet) {",
|
|
42471
|
+
' Write-Host "ℹ️ 当前目录 .mcp.json 包含 TapTap MCP。更新可以继续;建议后续迁移到 user/global scope。"',
|
|
42472
|
+
" }",
|
|
42473
|
+
"}",
|
|
42474
|
+
"",
|
|
42475
|
+
"# 2. Claude Code user/project scope",
|
|
42476
|
+
'$cj = "$env:USERPROFILE\\.claude.json"',
|
|
42477
|
+
"if (Test-Path $cj) {",
|
|
42478
|
+
" $json = Get-Content $cj -Raw | ConvertFrom-Json",
|
|
42479
|
+
" if ($json.mcpServers) {",
|
|
42480
|
+
" $json.mcpServers.PSObject.Properties | Where-Object { $_.Name -match 'taptap' } | ForEach-Object {",
|
|
42481
|
+
' Write-Host "✅ Claude Code user scope 已安装:$($_.Name)"',
|
|
42482
|
+
" }",
|
|
42483
|
+
" }",
|
|
42484
|
+
" if ($json.projects) {",
|
|
42485
|
+
" $json.projects.PSObject.Properties | ForEach-Object {",
|
|
42486
|
+
" $projectPath = $_.Name",
|
|
42487
|
+
" $servers = $_.Value.mcpServers",
|
|
42488
|
+
" if ($servers) {",
|
|
42489
|
+
" $servers.PSObject.Properties | Where-Object { $_.Name -match 'taptap' } | ForEach-Object {",
|
|
42490
|
+
' Write-Host "ℹ️ Claude Code project scope TapTap MCP:$($_.Name) under $projectPath。建议后续迁移到 user/global scope。"',
|
|
42491
|
+
" }",
|
|
42492
|
+
" }",
|
|
42493
|
+
" }",
|
|
42494
|
+
" }",
|
|
42495
|
+
"}",
|
|
42496
|
+
"",
|
|
42497
|
+
"# 3. 常见项目级 MCP / AI 客户端配置。只查已知路径,避免扫到源码或游戏资源。",
|
|
42498
|
+
"$projectConfigPaths = @('.codex\\config.toml', '.codex\\mcp.json', '.cursor\\mcp.json', '.vscode\\mcp.json', 'codex.toml')",
|
|
42499
|
+
"foreach ($f in $projectConfigPaths) {",
|
|
42500
|
+
" if ((Test-Path $f) -and (Select-String -Path $f -Pattern 'taptap|instant-games-open-mcp|taptap-maker' -Quiet)) {",
|
|
42501
|
+
' Write-Host "ℹ️ $f 包含 TapTap MCP。更新可以继续;建议后续迁移到 user/global scope。"',
|
|
42502
|
+
" }",
|
|
42503
|
+
"}",
|
|
42504
|
+
"```",
|
|
42505
|
+
"",
|
|
42506
|
+
"Step 1: 对比远端和本地 npx 缓存版本",
|
|
42507
|
+
"",
|
|
42508
|
+
"```powershell",
|
|
42509
|
+
`npm view ${quotePowerShell(packageSpec)} version`,
|
|
42510
|
+
"$NpxDir = Join-Path (npm config get cache) '_npx'",
|
|
42511
|
+
"$LocalVersions = @()",
|
|
42512
|
+
"Get-ChildItem $NpxDir -Directory -ErrorAction SilentlyContinue | ForEach-Object {",
|
|
42513
|
+
" $p = Join-Path $_.FullName 'node_modules\\@taptap\\instant-games-open-mcp\\package.json'",
|
|
42514
|
+
" if (Test-Path $p) {",
|
|
42515
|
+
" $version = (Get-Content $p -Raw | ConvertFrom-Json).version",
|
|
42516
|
+
' $LocalVersions += "$($_.Name) -> $version"',
|
|
42517
|
+
" }",
|
|
42518
|
+
"}",
|
|
42519
|
+
"$LocalVersions",
|
|
42520
|
+
"```",
|
|
42521
|
+
"",
|
|
42522
|
+
"如果远端和本地版本已经一致,可以结束更新缓存流程,但仍建议重启或新开窗口确认。",
|
|
42523
|
+
"",
|
|
42524
|
+
"Step 2: 清理 TapTap MCP 的 npx 缓存",
|
|
42525
|
+
"",
|
|
42526
|
+
"```powershell",
|
|
42527
|
+
"$NpxDir = Join-Path (npm config get cache) '_npx'",
|
|
42528
|
+
"Get-ChildItem $NpxDir -Directory -ErrorAction SilentlyContinue | ForEach-Object {",
|
|
42529
|
+
" if (Test-Path (Join-Path $_.FullName 'node_modules\\@taptap\\instant-games-open-mcp')) {",
|
|
42530
|
+
" Remove-Item -Recurse -Force $_.FullName",
|
|
42531
|
+
" }",
|
|
42532
|
+
"}",
|
|
42533
|
+
"```",
|
|
42534
|
+
"",
|
|
42535
|
+
"Step 3: 预热下载新版本",
|
|
42536
|
+
"",
|
|
42537
|
+
"```powershell",
|
|
42538
|
+
"$env:TAPTAP_MCP_ENV = 'rnd'",
|
|
42539
|
+
"$log = Join-Path $env:TEMP 'taptap-mcp-warmup.log'",
|
|
42540
|
+
"$proc = Start-Process -FilePath npx `",
|
|
42541
|
+
` -ArgumentList ${formatPowerShellArgumentList(createNpxWarmupArgs(packageSpec, bin))} \``,
|
|
42542
|
+
' -RedirectStandardOutput $log -RedirectStandardError "$log.err" `',
|
|
42543
|
+
" -WindowStyle Hidden -PassThru",
|
|
42544
|
+
"Start-Sleep -Seconds 25",
|
|
42545
|
+
"Stop-Process -Id $proc.Id -Force -ErrorAction SilentlyContinue",
|
|
42546
|
+
"```",
|
|
42547
|
+
"",
|
|
42548
|
+
"Step 4: 验证缓存版本",
|
|
42549
|
+
"",
|
|
42550
|
+
"```powershell",
|
|
42551
|
+
"$NpxDir = Join-Path (npm config get cache) '_npx'",
|
|
42552
|
+
"Get-ChildItem $NpxDir -Directory -ErrorAction SilentlyContinue | ForEach-Object {",
|
|
42553
|
+
" $p = Join-Path $_.FullName 'node_modules\\@taptap\\instant-games-open-mcp\\package.json'",
|
|
42554
|
+
' if (Test-Path $p) { "$($_.Name) -> $((Get-Content $p -Raw | ConvertFrom-Json).version)" }',
|
|
42555
|
+
"}",
|
|
42556
|
+
"```",
|
|
42557
|
+
"",
|
|
42558
|
+
"Step 5: 生效方式",
|
|
42559
|
+
"",
|
|
42560
|
+
"请重启 MCP 客户端,或新开 Claude Code / Codex / Cursor 窗口。当前会话通常不会热加载新 MCP;重启后调用 maker_status 验证。"
|
|
42561
|
+
].join("\n");
|
|
42562
|
+
}
|
|
42563
|
+
function createPosixGuide(packageSpec, bin) {
|
|
42564
|
+
return [
|
|
42565
|
+
"macOS / Linux",
|
|
42566
|
+
"",
|
|
42567
|
+
"Step 0: 安装检查和配置位置提醒",
|
|
42568
|
+
"",
|
|
42569
|
+
"```bash",
|
|
42570
|
+
"node --version",
|
|
42571
|
+
"npm --version",
|
|
42572
|
+
"npx --version",
|
|
42573
|
+
"",
|
|
42574
|
+
"# 1. 项目级 .mcp.json",
|
|
42575
|
+
'[ -f .mcp.json ] && grep -qiE "taptap|instant-games-open-mcp|taptap-maker" .mcp.json && \\',
|
|
42576
|
+
' echo "ℹ️ 当前目录 .mcp.json 包含 TapTap MCP。更新可以继续;建议后续迁移到 user/global scope。"',
|
|
42577
|
+
"",
|
|
42578
|
+
"# 2. Claude Code user/project scope。没有 jq 时跳过,不阻塞更新。",
|
|
42579
|
+
'CJ="$HOME/.claude.json"',
|
|
42580
|
+
'if [ -f "$CJ" ] && command -v jq >/dev/null 2>&1; then',
|
|
42581
|
+
" jq -r '",
|
|
42582
|
+
" .mcpServers // {} | to_entries[]",
|
|
42583
|
+
' | select(.key | test("taptap"; "i"))',
|
|
42584
|
+
' | "✅ Claude Code user scope 已安装: \\(.key)"',
|
|
42585
|
+
` ' "$CJ"`,
|
|
42586
|
+
" jq -r '",
|
|
42587
|
+
" .projects // {} | to_entries[]",
|
|
42588
|
+
" | . as $p | $p.value.mcpServers // {} | to_entries[]",
|
|
42589
|
+
' | select(.key | test("taptap"; "i"))',
|
|
42590
|
+
' | "ℹ️ Claude Code project scope TapTap MCP: \\($p.key) -> \\(.key)。建议后续迁移到 user/global scope。"',
|
|
42591
|
+
` ' "$CJ"`,
|
|
42592
|
+
"fi",
|
|
42593
|
+
"",
|
|
42594
|
+
"# 3. 常见项目级 MCP / AI 客户端配置。只查已知路径,避免扫到源码或游戏资源。",
|
|
42595
|
+
"for f in .codex/config.toml .codex/mcp.json .cursor/mcp.json .vscode/mcp.json codex.toml; do",
|
|
42596
|
+
' [ -f "$f" ] && grep -qiE "taptap|instant-games-open-mcp|taptap-maker" "$f" && \\',
|
|
42597
|
+
' echo "ℹ️ $f 包含 TapTap MCP。更新可以继续;建议后续迁移到 user/global scope。"',
|
|
42598
|
+
"done",
|
|
42599
|
+
"```",
|
|
42600
|
+
"",
|
|
42601
|
+
"Step 1: 对比远端和本地 npx 缓存版本",
|
|
42602
|
+
"",
|
|
42603
|
+
"```bash",
|
|
42604
|
+
`npm view ${quotePosix(packageSpec)} version`,
|
|
42605
|
+
'NPX_DIR="$(npm config get cache)/_npx"',
|
|
42606
|
+
'for d in "$NPX_DIR"/*/; do',
|
|
42607
|
+
' p="$d/node_modules/@taptap/instant-games-open-mcp/package.json"',
|
|
42608
|
+
' [ -f "$p" ] && echo "$(basename "$d") -> $(node -p "require(process.argv[1]).version" "$p")"',
|
|
42609
|
+
"done",
|
|
42610
|
+
"```",
|
|
42611
|
+
"",
|
|
42612
|
+
"如果远端和本地版本已经一致,可以结束更新缓存流程,但仍建议重启或新开窗口确认。",
|
|
42613
|
+
"",
|
|
42614
|
+
"Step 2: 清理 TapTap MCP 的 npx 缓存",
|
|
42615
|
+
"",
|
|
42616
|
+
"```bash",
|
|
42617
|
+
'NPX_DIR="$(npm config get cache)/_npx"',
|
|
42618
|
+
'for d in "$NPX_DIR"/*/; do',
|
|
42619
|
+
' [ -d "$d/node_modules/@taptap/instant-games-open-mcp" ] && rm -rf "$d"',
|
|
42620
|
+
"done",
|
|
42621
|
+
"```",
|
|
42622
|
+
"",
|
|
42623
|
+
"Step 3: 预热下载新版本",
|
|
42624
|
+
"",
|
|
42625
|
+
"```bash",
|
|
42626
|
+
`TAPTAP_MCP_ENV=rnd ${formatPosixNpxWarmup(packageSpec, bin)} \\`,
|
|
42627
|
+
" < /dev/null > /tmp/taptap-mcp-warmup.log 2>&1 &",
|
|
42628
|
+
'PID=$!; sleep 25; kill "$PID" 2>/dev/null; wait "$PID" 2>/dev/null',
|
|
42629
|
+
"```",
|
|
42630
|
+
"",
|
|
42631
|
+
"Step 4: 验证缓存版本",
|
|
42632
|
+
"",
|
|
42633
|
+
"```bash",
|
|
42634
|
+
'NPX_DIR="$(npm config get cache)/_npx"',
|
|
42635
|
+
'for d in "$NPX_DIR"/*/; do',
|
|
42636
|
+
' p="$d/node_modules/@taptap/instant-games-open-mcp/package.json"',
|
|
42637
|
+
' [ -f "$p" ] && echo "$(basename "$d") -> $(node -p "require(process.argv[1]).version" "$p")"',
|
|
42638
|
+
"done",
|
|
42639
|
+
"```",
|
|
42640
|
+
"",
|
|
42641
|
+
"Step 5: 生效方式",
|
|
42642
|
+
"",
|
|
42643
|
+
"请重启 MCP 客户端,或新开 Claude Code / Codex / Cursor 窗口。当前会话通常不会热加载新 MCP;重启后调用 maker_status 验证。"
|
|
42644
|
+
].join("\n");
|
|
42645
|
+
}
|
|
42646
|
+
function createNpxWarmupArgs(packageSpec, bin) {
|
|
42647
|
+
if (bin === "instant-games-open-mcp") {
|
|
42648
|
+
return ["-y", "--prefer-online", packageSpec];
|
|
42649
|
+
}
|
|
42650
|
+
return ["-y", "--prefer-online", "-p", packageSpec, bin];
|
|
42651
|
+
}
|
|
42652
|
+
function isMakerMcpUpdateBin(value) {
|
|
42653
|
+
return typeof value === "string" && UPDATE_BINS.includes(value);
|
|
42654
|
+
}
|
|
42655
|
+
function quotePowerShell(value) {
|
|
42656
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
42657
|
+
}
|
|
42658
|
+
function formatPowerShellArgumentList(args) {
|
|
42659
|
+
return args.map(quotePowerShell).join(",");
|
|
42660
|
+
}
|
|
42661
|
+
function formatPosixNpxWarmup(packageSpec, bin) {
|
|
42662
|
+
const args = createNpxWarmupArgs(packageSpec, bin);
|
|
42663
|
+
return ["npx", ...args].map(quotePosix).join(" ");
|
|
42664
|
+
}
|
|
42665
|
+
function quotePosix(value) {
|
|
42666
|
+
if (/^[A-Za-z0-9_./:=@+-]+$/.test(value)) {
|
|
42667
|
+
return value;
|
|
42668
|
+
}
|
|
42669
|
+
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
42670
|
+
}
|
|
42671
|
+
|
|
42383
42672
|
// src/maker/server/mcp.ts
|
|
42384
|
-
var VERSION = true ? "1.22.0-beta.
|
|
42673
|
+
var VERSION = true ? "1.22.0-beta.7" : "dev";
|
|
42385
42674
|
var DEFAULT_PROXY_MCP_NAME = "taptap-proxy";
|
|
42386
42675
|
var DEFAULT_PROXY_PACKAGE = "@taptap/instant-games-open-mcp@1.22.0";
|
|
42387
42676
|
var DEFAULT_BUILD_TIMEOUT_MS = 10 * 60 * 1e3;
|
|
@@ -42473,6 +42762,29 @@ var tools = [
|
|
|
42473
42762
|
properties: {}
|
|
42474
42763
|
}
|
|
42475
42764
|
},
|
|
42765
|
+
{
|
|
42766
|
+
name: "maker_get_mcp_update_guide",
|
|
42767
|
+
description: 'Return platform-specific instructions for updating the local npx cache of @taptap/instant-games-open-mcp. Use when the user says "更新 mcp", "更新 taptap mcp", "刷新 mcp 缓存", or asks how to update Maker MCP. This tool only returns guidance and MUST NOT update npm cache by itself. After calling it, the AI client should run the returned commands in the user local shell, then tell the user to restart or open a new MCP client window for changes to take effect.',
|
|
42768
|
+
inputSchema: {
|
|
42769
|
+
type: "object",
|
|
42770
|
+
properties: {
|
|
42771
|
+
package_spec: {
|
|
42772
|
+
type: "string",
|
|
42773
|
+
description: "Optional npm package spec to update. Defaults to @taptap/instant-games-open-mcp@beta."
|
|
42774
|
+
},
|
|
42775
|
+
bin: {
|
|
42776
|
+
type: "string",
|
|
42777
|
+
enum: ["taptap-maker", "instant-games-open-mcp", "taptap-mcp-proxy"],
|
|
42778
|
+
description: "Optional bin to warm up after cache cleanup. Defaults to taptap-maker."
|
|
42779
|
+
},
|
|
42780
|
+
client: {
|
|
42781
|
+
type: "string",
|
|
42782
|
+
enum: ["codex", "claude", "cursor", "unknown"],
|
|
42783
|
+
description: "Optional current AI client name for tailored restart wording. Defaults to unknown."
|
|
42784
|
+
}
|
|
42785
|
+
}
|
|
42786
|
+
}
|
|
42787
|
+
},
|
|
42476
42788
|
{
|
|
42477
42789
|
name: "maker_setup_guide",
|
|
42478
42790
|
description: `Show setup guidance when the current directory is not bound to a Maker project yet. Use this for user intents like "我要开发maker游戏", "本地maker开发", "拉取maker游戏到本地", "把maker游戏代码拉到本地", "clone maker游戏", "下载maker项目代码", "初始化maker项目", or "配置maker本地开发". In Codex/MCP mode, first make sure Git is installed by checking maker_status or maker_check_environment. If Git is missing, keep showing the install guidance and do not clone. If PAT is missing, ask the user to open the temporary PAT page ${TEMP_MAKER_PAT_TOKENS_URL}, create a PAT, give it to the agent, then call maker_exchange_pat; maker_exchange_pat automatically lists apps after saving PAT. If PAT already exists, maker_status automatically lists apps. Ask the user to choose an app, then maker_clone_to_current_directory. Do not ask for app_id upfront and do not run shell commands.`,
|
|
@@ -42559,7 +42871,7 @@ var tools = [
|
|
|
42559
42871
|
},
|
|
42560
42872
|
{
|
|
42561
42873
|
name: "maker_submit_current_directory",
|
|
42562
|
-
description: 'Alias for maker_push_current_directory. Requires local Git. If Git is missing, stop and show install guidance; do not stage, commit, or push. Use this in Maker projects when the user says "帮我提交", "帮我提交代码", "提交", "提交代码", "帮我提交代码到maker", "帮我提交代码到taptap制造", "帮我提交代码到tap制造", or "帮我提交代码到tap". This bypasses local generic Git branch/task-id rules and pushes directly to the Maker remote configured for the current directory.',
|
|
42874
|
+
description: 'Alias for maker_push_current_directory. Requires local Git. If Git is missing, stop and show install guidance; do not stage, commit, or push. Use this in Maker projects when the user says "帮我提交", "帮我提交代码", "提交", "提交代码", "帮我提交代码到maker", "帮我提交代码到taptap制造", "帮我提交代码到tap制造", or "帮我提交代码到tap". If the user chooses "提交本地改动并触发构建(以后都是如此)" from a build local-change prompt, call this tool with remember_build_submit_preference=true. This saves a project preference so future build requests with local changes submit automatically. This bypasses local generic Git branch/task-id rules and pushes directly to the Maker remote configured for the current directory.',
|
|
42563
42875
|
inputSchema: {
|
|
42564
42876
|
type: "object",
|
|
42565
42877
|
properties: {
|
|
@@ -42575,6 +42887,10 @@ var tools = [
|
|
|
42575
42887
|
type: "array",
|
|
42576
42888
|
items: { type: "string" },
|
|
42577
42889
|
description: "Optional files to stage. Defaults to all changes."
|
|
42890
|
+
},
|
|
42891
|
+
remember_build_submit_preference: {
|
|
42892
|
+
type: "boolean",
|
|
42893
|
+
description: 'Set true only when the user explicitly chooses "提交本地改动并触发构建(以后都是如此)". After a successful submit, future build requests with local changes will automatically submit instead of asking again.'
|
|
42578
42894
|
}
|
|
42579
42895
|
}
|
|
42580
42896
|
}
|
|
@@ -42615,7 +42931,7 @@ var tools = [
|
|
|
42615
42931
|
},
|
|
42616
42932
|
{
|
|
42617
42933
|
name: "maker_build_current_directory",
|
|
42618
|
-
description: 'Build the current Maker game by forwarding to the remote TapTap Maker MCP build tool. MUST use this for user requests like "构建", "build", "重新构建游戏", "帮我构建maker游戏", "compile", or "run" in a Maker project. Do not write local build scripts. Uses saved Tap auth and current .maker-mcp/config.json project binding to call the remote build tool through taptap-proxy.',
|
|
42934
|
+
description: 'Build the current Maker game by forwarding to the remote TapTap Maker MCP build tool. MUST use this for user requests like "构建", "build", "重新构建游戏", "帮我构建maker游戏", "compile", or "run" in a Maker project. The tool itself enforces a local-change guard before remote build: if local Maker project changes exist, it will stop unless confirm_remote_build_without_submit is true or the project has saved build_local_changes_policy=auto_submit. Explain to the user that direct build only uses the Maker remote committed version and may not include local edits. The primary option should be "提交本地改动并触发构建(以后都是如此)"; if the user chooses it, call maker_submit_current_directory with remember_build_submit_preference=true. Successful Maker submit is commit + push and automatically triggers build, so do not call manual build again unless the user explicitly asks. If auto_submit preference is already saved, this build tool will submit local changes automatically and rely on Maker auto build. If the user explicitly says not to submit and wants to build the remote version, call this tool with confirm_remote_build_without_submit=true. Do not write local build scripts. Uses saved Tap auth and current .maker-mcp/config.json project binding to call the remote build tool through taptap-proxy.',
|
|
42619
42935
|
inputSchema: {
|
|
42620
42936
|
type: "object",
|
|
42621
42937
|
properties: {
|
|
@@ -42625,11 +42941,11 @@ var tools = [
|
|
|
42625
42941
|
},
|
|
42626
42942
|
entry: {
|
|
42627
42943
|
type: "string",
|
|
42628
|
-
description: 'Optional single-player Lua entry file relative to scriptsPath, e.g. "main.lua".
|
|
42944
|
+
description: 'Optional single-player Lua entry file relative to scriptsPath, e.g. "main.lua". If omitted and local scripts/main.lua exists with no explicit multiplayer entries, Maker MCP sends entry="main.lua" and scriptsPath="scripts" by default to avoid remote entry-missing prompts. Otherwise omit to let the remote build tool infer/default.'
|
|
42629
42945
|
},
|
|
42630
42946
|
scriptsPath: {
|
|
42631
42947
|
type: "string",
|
|
42632
|
-
description: 'Optional scripts directory relative to workspace.
|
|
42948
|
+
description: 'Optional scripts directory relative to workspace. If omitted and local scripts/main.lua exists with no explicit entry overrides, Maker MCP sends scriptsPath="scripts" by default.'
|
|
42633
42949
|
},
|
|
42634
42950
|
entry_client: {
|
|
42635
42951
|
type: "string",
|
|
@@ -42655,6 +42971,10 @@ var tools = [
|
|
|
42655
42971
|
timeout_ms: {
|
|
42656
42972
|
type: "number",
|
|
42657
42973
|
description: "Optional remote build timeout in milliseconds. Defaults to 10 minutes. If timed out, do not retry blindly; inspect remote build logs first."
|
|
42974
|
+
},
|
|
42975
|
+
confirm_remote_build_without_submit: {
|
|
42976
|
+
type: "boolean",
|
|
42977
|
+
description: "Set true only after the user explicitly confirms they do not want to submit local changes and want to build the current Maker remote committed version."
|
|
42658
42978
|
}
|
|
42659
42979
|
}
|
|
42660
42980
|
}
|
|
@@ -42697,6 +43017,21 @@ async function startMakerMcpServer() {
|
|
|
42697
43017
|
]
|
|
42698
43018
|
};
|
|
42699
43019
|
}
|
|
43020
|
+
if (name === "maker_get_mcp_update_guide") {
|
|
43021
|
+
const args = request.params.arguments || {};
|
|
43022
|
+
return {
|
|
43023
|
+
content: [
|
|
43024
|
+
{
|
|
43025
|
+
type: "text",
|
|
43026
|
+
text: createMakerMcpUpdateGuide({
|
|
43027
|
+
packageSpec: args.package_spec,
|
|
43028
|
+
bin: args.bin,
|
|
43029
|
+
client: args.client
|
|
43030
|
+
})
|
|
43031
|
+
}
|
|
43032
|
+
]
|
|
43033
|
+
};
|
|
43034
|
+
}
|
|
42700
43035
|
if (name === "maker_tap_login_start") {
|
|
42701
43036
|
const session = await startTapDeviceLogin();
|
|
42702
43037
|
return {
|
|
@@ -42927,6 +43262,9 @@ async function startMakerMcpServer() {
|
|
|
42927
43262
|
forcePat: args.force_pat === true,
|
|
42928
43263
|
onProgress: progressReporter.report
|
|
42929
43264
|
});
|
|
43265
|
+
if (args.remember_build_submit_preference && !result.failure) {
|
|
43266
|
+
rememberBuildSubmitPreference(targetDir);
|
|
43267
|
+
}
|
|
42930
43268
|
progressSummary = progressReporter.finish();
|
|
42931
43269
|
} catch (error2) {
|
|
42932
43270
|
progressReporter.finish();
|
|
@@ -42980,6 +43318,7 @@ async function startMakerMcpServer() {
|
|
|
42980
43318
|
serverUrl: args.server_url,
|
|
42981
43319
|
env: args.env,
|
|
42982
43320
|
timeoutMs: args.timeout_ms,
|
|
43321
|
+
confirmRemoteBuildWithoutSubmit: args.confirm_remote_build_without_submit,
|
|
42983
43322
|
onProgress: progressReporter.report
|
|
42984
43323
|
});
|
|
42985
43324
|
progressSummary = progressReporter.finish();
|
|
@@ -43040,6 +43379,10 @@ async function formatStatus() {
|
|
|
43040
43379
|
const projectSection = identify.projectId ? [
|
|
43041
43380
|
"当前目录已绑定 Maker 项目。",
|
|
43042
43381
|
"如果用户要求“帮我提交代码 / 提交并推送 / push / 帮我提交代码到maker / 帮我提交代码到taptap制造 / 帮我提交代码到tap制造 / 帮我提交代码到tap”,必须调用 maker_submit_current_directory 或 maker_push_current_directory。",
|
|
43382
|
+
"如果用户要求“构建 / build / 重新构建 / 查看结果 / 预览 / 跑一下 / 验证一下”,必须先经过 maker_build_current_directory 的本地改动强制检查;有本地改动时不要静默构建云端旧版本,应询问用户是否提交。",
|
|
43383
|
+
"优先选项文案应是“提交本地改动并触发构建(以后都是如此)”;用户选择后调用 maker_submit_current_directory,并设置 remember_build_submit_preference=true。",
|
|
43384
|
+
"Maker 提交等于 commit + push,提交成功后会自动触发构建,不要再额外调用 build;保存偏好后,后续构建遇到本地改动会自动提交。",
|
|
43385
|
+
"用户明确说不提交、直接构建云端版本时,才允许调用 maker_build_current_directory 并设置 confirm_remote_build_without_submit=true。",
|
|
43043
43386
|
"不要套用本地通用 Git skill 的任务号、默认分支保护、新建分支规则;Maker push 按远端 Maker 仓库当前分支直接提交并推送。"
|
|
43044
43387
|
].join("\n") : pat ? await formatAutoProjectListFromPat() : formatIdentifyHint();
|
|
43045
43388
|
return [
|
|
@@ -43069,6 +43412,19 @@ async function formatStatus() {
|
|
|
43069
43412
|
projectSection
|
|
43070
43413
|
].filter(Boolean).join("\n");
|
|
43071
43414
|
}
|
|
43415
|
+
function rememberBuildSubmitPreference(targetDir) {
|
|
43416
|
+
const identify = identifyMakerProject({ cwd: targetDir });
|
|
43417
|
+
if (!identify.projectRoot || !identify.projectId) {
|
|
43418
|
+
throw new Error(
|
|
43419
|
+
`${targetDir} is not bound to a Maker project. Cannot save build submit preference.`
|
|
43420
|
+
);
|
|
43421
|
+
}
|
|
43422
|
+
saveProjectConfig(identify.projectRoot, {
|
|
43423
|
+
...identify.config || { project_id: identify.projectId },
|
|
43424
|
+
project_id: identify.projectId,
|
|
43425
|
+
build_local_changes_policy: "auto_submit"
|
|
43426
|
+
});
|
|
43427
|
+
}
|
|
43072
43428
|
async function formatAutoProjectListFromPat() {
|
|
43073
43429
|
try {
|
|
43074
43430
|
const projects = await listMakerProjects();
|
|
@@ -43398,6 +43754,30 @@ function formatDuration(ms) {
|
|
|
43398
43754
|
return `${minutes}m ${seconds}s`;
|
|
43399
43755
|
}
|
|
43400
43756
|
async function buildCurrentDirectory(options) {
|
|
43757
|
+
var _a2;
|
|
43758
|
+
const localChanges = await readMakerProjectLocalChanges(options.targetDir);
|
|
43759
|
+
if (localChanges.hasChanges && !options.confirmRemoteBuildWithoutSubmit) {
|
|
43760
|
+
const config2 = loadProjectConfig(localChanges.projectRoot);
|
|
43761
|
+
if ((config2 == null ? void 0 : config2.build_local_changes_policy) === "auto_submit") {
|
|
43762
|
+
(_a2 = options.onProgress) == null ? void 0 : _a2.call(options, {
|
|
43763
|
+
progress: 0,
|
|
43764
|
+
total: 100,
|
|
43765
|
+
phase: "auto_submit",
|
|
43766
|
+
message: "Auto-submitting local Maker changes before build"
|
|
43767
|
+
});
|
|
43768
|
+
const submitResult = await (options.submitLocalChanges || pushMakerProject)({
|
|
43769
|
+
cwd: localChanges.projectRoot,
|
|
43770
|
+
onProgress: options.onProgress
|
|
43771
|
+
});
|
|
43772
|
+
return {
|
|
43773
|
+
mode: "submitted_for_auto_build",
|
|
43774
|
+
projectRoot: localChanges.projectRoot,
|
|
43775
|
+
projectId: config2.project_id,
|
|
43776
|
+
submitResult
|
|
43777
|
+
};
|
|
43778
|
+
}
|
|
43779
|
+
throw new Error(formatLocalChangesBeforeBuildMessage(localChanges.files));
|
|
43780
|
+
}
|
|
43401
43781
|
const proxy = createRemoteProxyContext({
|
|
43402
43782
|
targetDir: options.targetDir,
|
|
43403
43783
|
serverUrl: options.serverUrl,
|
|
@@ -43432,8 +43812,8 @@ async function buildCurrentDirectory(options) {
|
|
|
43432
43812
|
timeout: timeoutMs,
|
|
43433
43813
|
resetTimeoutOnProgress: true,
|
|
43434
43814
|
onprogress: (progress) => {
|
|
43435
|
-
var
|
|
43436
|
-
(
|
|
43815
|
+
var _a3;
|
|
43816
|
+
(_a3 = options.onProgress) == null ? void 0 : _a3.call(options, {
|
|
43437
43817
|
progress: progress.progress,
|
|
43438
43818
|
total: progress.total,
|
|
43439
43819
|
phase: "remote_build",
|
|
@@ -43443,6 +43823,7 @@ async function buildCurrentDirectory(options) {
|
|
|
43443
43823
|
}
|
|
43444
43824
|
);
|
|
43445
43825
|
return {
|
|
43826
|
+
mode: "remote_build",
|
|
43446
43827
|
projectRoot: proxy.projectRoot,
|
|
43447
43828
|
projectId: proxy.projectId,
|
|
43448
43829
|
projectPath: proxy.projectPath,
|
|
@@ -43456,6 +43837,22 @@ async function buildCurrentDirectory(options) {
|
|
|
43456
43837
|
await client.close();
|
|
43457
43838
|
}
|
|
43458
43839
|
}
|
|
43840
|
+
function formatLocalChangesBeforeBuildMessage(files) {
|
|
43841
|
+
const visibleFiles = files.slice(0, 20);
|
|
43842
|
+
const hiddenCount = Math.max(0, files.length - visibleFiles.length);
|
|
43843
|
+
return [
|
|
43844
|
+
"Current Maker project has local changes that are not submitted.",
|
|
43845
|
+
"",
|
|
43846
|
+
"当前有本地修改还没有提交。直接构建只会构建 Maker 云端已有版本,可能看不到这些新修改。",
|
|
43847
|
+
"请先询问用户选择:",
|
|
43848
|
+
"- 提交本地改动并触发构建(以后都是如此):调用 maker_submit_current_directory,并设置 remember_build_submit_preference=true;提交会同时保存并推送到 Maker,提交成功后自动触发构建,不要再额外调用 build。后续构建遇到本地改动会默认自动提交。",
|
|
43849
|
+
"- 如果用户明确说不提交、直接构建云端版本,再调用 maker_build_current_directory,并设置 confirm_remote_build_without_submit=true。",
|
|
43850
|
+
"",
|
|
43851
|
+
"local_changes:",
|
|
43852
|
+
...visibleFiles.map((file2) => `- ${file2}`),
|
|
43853
|
+
...hiddenCount > 0 ? [`- ... and ${hiddenCount} more`] : []
|
|
43854
|
+
].join("\n");
|
|
43855
|
+
}
|
|
43459
43856
|
function createBuildArgs(projectRoot, options) {
|
|
43460
43857
|
const buildArgs = {};
|
|
43461
43858
|
if (options.entry) {
|
|
@@ -43464,6 +43861,10 @@ function createBuildArgs(projectRoot, options) {
|
|
|
43464
43861
|
if (options.scriptsPath) {
|
|
43465
43862
|
buildArgs.scriptsPath = options.scriptsPath;
|
|
43466
43863
|
}
|
|
43864
|
+
if (!options.entry && !options.scriptsPath && !options.entryClient && !options.entryServer && !options.multiplayer && fs6.existsSync(path9.join(projectRoot, "scripts", "main.lua"))) {
|
|
43865
|
+
buildArgs.entry = "main.lua";
|
|
43866
|
+
buildArgs.scriptsPath = "scripts";
|
|
43867
|
+
}
|
|
43467
43868
|
if (options.entryClient) {
|
|
43468
43869
|
buildArgs.entry_client = options.entryClient;
|
|
43469
43870
|
}
|
|
@@ -43507,6 +43908,25 @@ function formatRemoteToolResult(result) {
|
|
|
43507
43908
|
}).join("\n");
|
|
43508
43909
|
}
|
|
43509
43910
|
function formatBuildResult(result, progressSummary) {
|
|
43911
|
+
if (result.mode === "submitted_for_auto_build") {
|
|
43912
|
+
return [
|
|
43913
|
+
result.submitResult.pushed ? "✓ Maker project submitted; Maker auto build triggered" : result.submitResult.status === "clean" ? "Maker project has no changes to submit; Maker auto build was not triggered" : "✗ Maker project submit failed; Maker auto build was not triggered",
|
|
43914
|
+
"",
|
|
43915
|
+
`- project_root: ${result.projectRoot}`,
|
|
43916
|
+
`- project_id: ${result.projectId}`,
|
|
43917
|
+
"- build_local_changes_policy: auto_submit",
|
|
43918
|
+
`- branch: ${result.submitResult.branch}`,
|
|
43919
|
+
`- status: ${result.submitResult.status}`,
|
|
43920
|
+
`- committed: ${result.submitResult.committed ? "yes" : "no"}`,
|
|
43921
|
+
result.submitResult.commitHash ? `- commit_hash: ${result.submitResult.commitHash}` : "",
|
|
43922
|
+
result.submitResult.message ? `- commit_message: ${result.submitResult.message}` : "",
|
|
43923
|
+
result.submitResult.ahead ? `- git_state: ${result.submitResult.ahead}` : "",
|
|
43924
|
+
...formatProgressSummary(progressSummary),
|
|
43925
|
+
"",
|
|
43926
|
+
"note: Maker submit is commit + push; successful submit automatically triggers build.",
|
|
43927
|
+
...result.submitResult.failure ? ["", ...formatMakerFailureLines(result.submitResult.failure)] : []
|
|
43928
|
+
].filter(Boolean).join("\n");
|
|
43929
|
+
}
|
|
43510
43930
|
return [
|
|
43511
43931
|
"✓ Remote Maker build finished",
|
|
43512
43932
|
"",
|
|
@@ -43539,20 +43959,21 @@ function formatPushResult(targetDir, result, progressSummary) {
|
|
|
43539
43959
|
if (!result.failure) {
|
|
43540
43960
|
return lines.join("\n");
|
|
43541
43961
|
}
|
|
43962
|
+
return [...lines, "", ...formatMakerFailureLines(result.failure)].filter(Boolean).join("\n");
|
|
43963
|
+
}
|
|
43964
|
+
function formatMakerFailureLines(failure) {
|
|
43542
43965
|
return [
|
|
43543
|
-
...lines,
|
|
43544
|
-
"",
|
|
43545
43966
|
"failure:",
|
|
43546
|
-
`- stage: ${
|
|
43547
|
-
`- classification: ${
|
|
43548
|
-
`- exit_code: ${
|
|
43549
|
-
|
|
43550
|
-
|
|
43551
|
-
${indent(
|
|
43552
|
-
|
|
43553
|
-
${indent(
|
|
43554
|
-
`- next_action: ${
|
|
43555
|
-
].filter(Boolean)
|
|
43967
|
+
`- stage: ${failure.stage}`,
|
|
43968
|
+
`- classification: ${failure.classification}`,
|
|
43969
|
+
`- exit_code: ${failure.exitCode ?? "(none)"}`,
|
|
43970
|
+
failure.command ? `- command: ${failure.command}` : "",
|
|
43971
|
+
failure.stderr ? `- stderr:
|
|
43972
|
+
${indent(failure.stderr)}` : "",
|
|
43973
|
+
failure.stdout ? `- stdout:
|
|
43974
|
+
${indent(failure.stdout)}` : "",
|
|
43975
|
+
`- next_action: ${failure.nextAction}`
|
|
43976
|
+
].filter(Boolean);
|
|
43556
43977
|
}
|
|
43557
43978
|
function formatToolException(toolName, error2) {
|
|
43558
43979
|
const message = error2 instanceof Error ? error2.message : String(error2);
|
package/dist/proxy.js
CHANGED
|
@@ -29137,7 +29137,7 @@ var LogWriter = class {
|
|
|
29137
29137
|
};
|
|
29138
29138
|
|
|
29139
29139
|
// src/mcp-proxy/proxy.ts
|
|
29140
|
-
var VERSION = true ? "1.22.0-beta.
|
|
29140
|
+
var VERSION = true ? "1.22.0-beta.7" : "dev";
|
|
29141
29141
|
var TapTapMCPProxy = class {
|
|
29142
29142
|
constructor(config2) {
|
|
29143
29143
|
this.connected = false;
|
package/dist/server.js
CHANGED
|
@@ -6078,7 +6078,7 @@ class MultiplayerManager {
|
|
|
6078
6078
|
// 导出
|
|
6079
6079
|
// export default MultiplayerManager;
|
|
6080
6080
|
// module.exports = MultiplayerManager;
|
|
6081
|
-
// window.MultiplayerManager = MultiplayerManager;`}]}}};var ws;ws="1.22.0-beta.
|
|
6081
|
+
// window.MultiplayerManager = MultiplayerManager;`}]}}};var ws;ws="1.22.0-beta.7";async function MRe(){return Go(Rm,"api_event_relations")}async function NRe(){return Go(Rm,"protocol_template")}async function SD(){return Go(Rm,"complete_example")}async function jRe(){return`# TapTap 多人联机集成指南
|
|
6082
6082
|
|
|
6083
6083
|
---
|
|
6084
6084
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taptap/instant-games-open-mcp",
|
|
3
|
-
"version": "1.22.0-beta.
|
|
3
|
+
"version": "1.22.0-beta.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "TapTap Open API MCP Server - Documentation and Management APIs for TapTap Minigame and H5 Games (Leaderboard, and more features coming)",
|
|
6
6
|
"main": "dist/server.js",
|