Files
cc-3-8-x-mcp/cli/src/cli/fix-borders-cmd.js
T
furao fc93911d31 feat: 新增 fix-borders —— 修复 Cocos 重启把九宫格 border 重置成 0 的 meta
Cocos 重启/重新导入有时把已设九宫格的图 meta 里 subMetas.*.userData.border*
重置成 0(九宫格丢失)。新增功能扫 git 改动的 .meta,把「git 有值、工作区被
清 0」的 border 还原成 git 的正确值,只动 border 字段、保留 meta 其它改动。

- cli/src/editor/fix-borders.js: 核心(git 对比 + 精准还原)
- cli fix-borders 命令(main.js 注册)
- MCP tool meta_fix_reset_border(main.js wrapper + server/tools.js)
- 跨平台纯 JS + git,带 dry-run

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 18:34:53 +08:00

60 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================
// cli/fix-borders-cmd.js — fix-borders 子命令
//
// 用法:
// cocos-mcp-cli fix-borders [--project <dir>] [--dry-run]
//
// 修复 Cocos 重启把图片九宫格 bordersubMetas.*.userData.border*)重置成 0 的 meta
// 扫 git 改动的 .meta,把「git 里有值、工作区被清 0」的 border 还原成 git 的值。
// 只动 border 字段、保留 meta 其它改动。
// --dry-run 只预览不写;--project 指定项目路径(默认当前目录)。
// ============================================================
'use strict';
const { fixResetBorders } = require('../editor/fix-borders.js');
function die(msg) { process.stderr.write('Error: ' + msg + '\n'); process.exit(1); }
function cmdFixBorders(argv) {
let project = process.cwd();
let dryRun = false;
for (let i = 0; i < argv.length; i++) {
const a = argv[i];
if (a === '--dry-run') {
dryRun = true;
} else if (a === '--project' || a === '-p') {
project = argv[++i];
} else if (a === '--help' || a === '-h') {
process.stdout.write(
'cocos-mcp-cli fix-borders — 修复 Cocos 重启把九宫格 border 重置成 0 的 meta\n\n' +
' --project, -p <dir> 项目路径(git 仓库或其子目录,默认当前目录)\n' +
' --dry-run 只预览将还原哪些,不写文件\n\n' +
'原理:扫 git 改动的 .meta,把「git 有值、工作区被清 0」的 border 还原成 git 的值。\n');
return;
} else {
die('未知参数 "' + a + '"');
}
}
let r;
try {
r = fixResetBorders(project, { dryRun: dryRun });
} catch (e) {
die(e.message);
}
process.stdout.write(
(dryRun ? '[dry-run] ' : '') +
'扫描 ' + r.scanned + ' 个改动 meta,还原 border' +
r.fixedFiles + ' 个 meta / ' + r.fixedFrames + ' 个 sprite-frame\n');
if (r.details.length) {
process.stdout.write(r.details.slice(0, 50).join('\n') + '\n');
if (r.details.length > 50) process.stdout.write('...(共 ' + r.details.length + ' 处,此处只列前 50\n');
}
}
module.exports = { cmdFixBorders };