Browse Source

cocos mcp

baxi 1 week ago
parent
commit
c4767194cb
100 changed files with 3854 additions and 0 deletions
  1. 44 0
      extensions/cocos-mcp-server/INSTALL.md
  2. 0 0
      extensions/cocos-mcp-server/dist/auth/device-identity.js
  3. 0 0
      extensions/cocos-mcp-server/dist/auth/knowledge-client.js
  4. 0 0
      extensions/cocos-mcp-server/dist/auth/license-manager.js
  5. 0 0
      extensions/cocos-mcp-server/dist/auth/server-config.js
  6. 0 0
      extensions/cocos-mcp-server/dist/auth/session-manager.js
  7. 0 0
      extensions/cocos-mcp-server/dist/auth/update-checker.js
  8. 0 0
      extensions/cocos-mcp-server/dist/auth/vber-subscription.js
  9. 0 0
      extensions/cocos-mcp-server/dist/compat/api-adapter.js
  10. 0 0
      extensions/cocos-mcp-server/dist/compat/version-detector.js
  11. 508 0
      extensions/cocos-mcp-server/dist/headless/headless-screenshot.js
  12. 0 0
      extensions/cocos-mcp-server/dist/main.js
  13. 0 0
      extensions/cocos-mcp-server/dist/mcp-client-configs.js
  14. 0 0
      extensions/cocos-mcp-server/dist/mcp-config-manager.js
  15. 0 0
      extensions/cocos-mcp-server/dist/mcp-server.js
  16. 0 0
      extensions/cocos-mcp-server/dist/panels/default/index.js
  17. 0 0
      extensions/cocos-mcp-server/dist/panels/tool-manager/index.js
  18. 0 0
      extensions/cocos-mcp-server/dist/scene.js
  19. 0 0
      extensions/cocos-mcp-server/dist/settings.js
  20. 0 0
      extensions/cocos-mcp-server/dist/sidecar-executor.js
  21. 0 0
      extensions/cocos-mcp-server/dist/tools/asset-advanced-tools.js
  22. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/cocos-tools.js
  23. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/animation-guide.js
  24. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/asset-guide.js
  25. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/builder-guide.js
  26. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/capture-guide.js
  27. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/component-guide.js
  28. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/composite-guide.js
  29. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/editor-guide.js
  30. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/index.js
  31. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/node-guide.js
  32. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/prefab-guide.js
  33. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/scene-guide.js
  34. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/template-guide.js
  35. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/types.js
  36. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/validate-guide.js
  37. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/view-guide.js
  38. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-file-writer.js
  39. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-handler.js
  40. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-presets.js
  41. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/asset-handler.js
  42. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/builder-handler.js
  43. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/capture-handler.js
  44. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/component-handler.js
  45. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/composite-handler.js
  46. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/devtools-handler.js
  47. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/editor-handler.js
  48. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/font-handler.js
  49. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/knowledge-handler.js
  50. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/node-handler.js
  51. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/prefab-handler.js
  52. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/scene-handler.js
  53. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/spine-handler.js
  54. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/template-handler.js
  55. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/validate-handler.js
  56. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/handlers/view-handler.js
  57. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/asset-ref-resolver.js
  58. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/async-utils.js
  59. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/builtin-prefab-loader.js
  60. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/component-knowledge.js
  61. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/editor-mode.js
  62. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/file-guard.js
  63. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/headless-runner.js
  64. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/mcp-logger.js
  65. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/message-recorder.js
  66. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/node-resolver.js
  67. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/node-tree-cache.js
  68. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/param-validator.js
  69. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/png-encoder.js
  70. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/prefab-factory.js
  71. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/project-context.js
  72. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/response-enhancer.js
  73. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/scene-setup.js
  74. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/smart-defaults.js
  75. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/type-inference.js
  76. 0 0
      extensions/cocos-mcp-server/dist/tools/cocos/utils/viewport-context.js
  77. 0 0
      extensions/cocos-mcp-server/dist/tools/component-tools.js
  78. 0 0
      extensions/cocos-mcp-server/dist/tools/debug-tools.js
  79. 0 0
      extensions/cocos-mcp-server/dist/tools/node-tools.js
  80. 0 0
      extensions/cocos-mcp-server/dist/tools/prefab-tools.js
  81. 0 0
      extensions/cocos-mcp-server/dist/tools/preferences-tools.js
  82. 0 0
      extensions/cocos-mcp-server/dist/tools/project-tools.js
  83. 0 0
      extensions/cocos-mcp-server/dist/tools/reference-image-tools.js
  84. 0 0
      extensions/cocos-mcp-server/dist/tools/scene-tools.js
  85. 0 0
      extensions/cocos-mcp-server/dist/tools/scene-view-tools.js
  86. 0 0
      extensions/cocos-mcp-server/dist/tools/server-tools.js
  87. 0 0
      extensions/cocos-mcp-server/dist/tools/tool-manager.js
  88. 0 0
      extensions/cocos-mcp-server/dist/types/index.js
  89. 243 0
      extensions/cocos-mcp-server/i18n/ar.js
  90. 243 0
      extensions/cocos-mcp-server/i18n/de.js
  91. 244 0
      extensions/cocos-mcp-server/i18n/en.js
  92. 243 0
      extensions/cocos-mcp-server/i18n/es.js
  93. 243 0
      extensions/cocos-mcp-server/i18n/fr.js
  94. 243 0
      extensions/cocos-mcp-server/i18n/ja.js
  95. 243 0
      extensions/cocos-mcp-server/i18n/ko.js
  96. 243 0
      extensions/cocos-mcp-server/i18n/pt.js
  97. 243 0
      extensions/cocos-mcp-server/i18n/ru.js
  98. 244 0
      extensions/cocos-mcp-server/i18n/vi.js
  99. 243 0
      extensions/cocos-mcp-server/i18n/zh.js
  100. 627 0
      extensions/cocos-mcp-server/package-lock.json

+ 44 - 0
extensions/cocos-mcp-server/INSTALL.md

@@ -0,0 +1,44 @@
+# Cocos Creator MCP Server v1.7.9
+
+## 安装说明
+
+1. 将整个文件夹复制到 Cocos Creator 项目的 `extensions` 目录
+2. 重启 Cocos Creator 或刷新扩展 (Ctrl+R / Cmd+R)
+3. 在扩展菜单中启用 "Cocos MCP Server"
+4. 打开扩展面板配置服务器设置
+
+## 使用配置
+
+### Claude Desktop
+```json
+{
+  "mcpServers": {
+    "cocos-creator": {
+      "type": "http",
+      "url": "http://127.0.0.1:3000/mcp"
+    }
+  }
+}
+```
+
+### Cursor
+```json
+{
+  "mcpServers": {
+    "cocos-creator": {
+      "url": "http://127.0.0.1:3000/mcp"
+    }
+  }
+}
+```
+
+## 技术支持
+
+- 📧 邮箱: a549623165@gmail.com
+- 💬 微信: lidaxian-AI | 客服微信: vberai-support
+- 🐙 GitHub: https://github.com/DaxianLee
+- 🛒 购买/续费: https://www.vberai.com/game-engines/cocos
+
+---
+构建信息: v1.7.9 (production) - 2026-07-18 16:06:14
+作者: 李大仙 (LiDaxian)

File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/device-identity.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/knowledge-client.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/license-manager.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/server-config.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/session-manager.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/update-checker.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/auth/vber-subscription.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/compat/api-adapter.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/compat/version-detector.js


+ 508 - 0
extensions/cocos-mcp-server/dist/headless/headless-screenshot.js

@@ -0,0 +1,508 @@
+#!/usr/bin/env node
+/**
+ * Headless content screenshot for Cocos Creator 3.x web builds.
+ *
+ * Why this exists: in the editor's edit-mode the render pipeline does NOT
+ * rasterize scene geometry into a custom RenderTexture, and the in-editor
+ * gameView preview runs in a separate engine context the MCP scene process
+ * can't reach. So the only way to get a REAL engine render of just the Canvas
+ * content (no editor chrome) is to run the actual runtime. This script loads a
+ * web build in headless Chrome, switches to the target scene, waits for it to
+ * render, and screenshots the game canvas — producing a content-only PNG at the
+ * design resolution with a transparent (or chosen) background.
+ *
+ * Pipeline: static-serve the web build -> headless Chrome -> wait engine boot
+ *   -> director.loadScene(name) -> wait assets+layout+frames -> canvas screenshot.
+ *
+ * Usage:
+ *   node headless-screenshot.js --build <web-build-dir> --scene <name|db://...>
+ *        [--out <png>] [--width N] [--height N]
+ *        [--bg r,g,b,a]  (0-255; default transparent)
+ *        [--chrome <path>] [--timeout ms] [--keep-fps]
+ *
+ * Exit 0 on success; prints a JSON result line (success,path,width,height,opaquePixels...).
+ */
+
+const http = require('http');
+const fs = require('fs');
+const path = require('path');
+const zlib = require('zlib');
+
+// ---- self-contained PNG encoder (RGBA8 -> PNG, no external deps) ----
+// Kept inline so this script is a single portable file (works in the cocosMcp
+// repo and in any copy, e.g. dropped into the RT project). Mirrors the logic of
+// cocosMcp/source/tools/cocos/utils/png-encoder.ts.
+const PNG_SIG = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+let _crc;
+function crcTable() {
+    if (_crc) return _crc;
+    _crc = new Array(256);
+    for (let n = 0; n < 256; n++) { let c = n; for (let k = 0; k < 8; k++) c = (c & 1) ? (0xedb88320 ^ (c >>> 1)) : (c >>> 1); _crc[n] = c >>> 0; }
+    return _crc;
+}
+function crc32(buf) { const t = crcTable(); let c = 0xffffffff; for (let i = 0; i < buf.length; i++) c = t[(c ^ buf[i]) & 0xff] ^ (c >>> 8); return (c ^ 0xffffffff) >>> 0; }
+function pngChunk(type, data) {
+    const tb = Buffer.from(type, 'ascii'), lb = Buffer.alloc(4), cb = Buffer.alloc(4);
+    lb.writeUInt32BE(data.length, 0);
+    cb.writeUInt32BE(crc32(Buffer.concat([tb, data])), 0);
+    return Buffer.concat([lb, tb, data, cb]);
+}
+function encodePng(opts) {
+    const { width, height, flipY } = opts;
+    const src = Buffer.isBuffer(opts.rgba) ? opts.rgba : Buffer.from(opts.rgba);
+    const rowBytes = width * 4;
+    const raw = Buffer.alloc((rowBytes + 1) * height);
+    for (let y = 0; y < height; y++) {
+        const sy = flipY ? (height - 1 - y) : y;
+        raw[y * (rowBytes + 1)] = 0;
+        src.copy(raw, y * (rowBytes + 1) + 1, sy * rowBytes, sy * rowBytes + rowBytes);
+    }
+    const ihdr = Buffer.alloc(13);
+    ihdr.writeUInt32BE(width, 0); ihdr.writeUInt32BE(height, 4);
+    ihdr.writeUInt8(8, 8); ihdr.writeUInt8(6, 9); ihdr.writeUInt8(0, 10); ihdr.writeUInt8(0, 11); ihdr.writeUInt8(0, 12);
+    return Buffer.concat([PNG_SIG, pngChunk('IHDR', ihdr), pngChunk('IDAT', zlib.deflateSync(raw)), pngChunk('IEND', Buffer.alloc(0))]);
+}
+
+// ---- arg parsing ----
+function parseArgs(argv) {
+    const a = {};
+    for (let i = 2; i < argv.length; i++) {
+        const k = argv[i];
+        if (k.startsWith('--')) {
+            const key = k.slice(2);
+            const next = argv[i + 1];
+            if (next === undefined || next.startsWith('--')) { a[key] = true; }
+            else { a[key] = next; i++; }
+        }
+    }
+    return a;
+}
+const args = parseArgs(process.argv);
+
+function fail(msg) {
+    console.log(JSON.stringify({ success: false, error: msg }));
+    process.exit(1);
+}
+
+const BUILD_DIR = args.build && path.resolve(args.build);
+if (!BUILD_DIR || !fs.existsSync(path.join(BUILD_DIR, 'index.html'))) {
+    fail(`--build must point to a web build dir containing index.html (got: ${args.build})`);
+}
+// Scene: accept a db:// path or a bare name; we use the basename without extension.
+let sceneArg = args.scene;
+if (!sceneArg || sceneArg === true) fail('--scene <name|db://assets/.../X.scene> is required');
+const sceneName = String(sceneArg).replace(/^db:\/\//, '').replace(/\.scene$/, '').split('/').pop();
+
+const OUT = args.out ? path.resolve(args.out) : path.join(require('os').tmpdir(), `cocos3x_headless_${sceneName}.png`);
+const WANT_W = args.width ? parseInt(args.width, 10) : 0;
+const WANT_H = args.height ? parseInt(args.height, 10) : 0;
+let BG = { r: 0, g: 0, b: 0, a: 0 };
+if (args.bg && args.bg !== true) {
+    const p = String(args.bg).split(',').map(s => parseInt(s.trim(), 10));
+    BG = { r: p[0] || 0, g: p[1] || 0, b: p[2] || 0, a: p[3] === undefined ? 255 : p[3] };
+}
+const TIMEOUT = args.timeout ? parseInt(args.timeout, 10) : 30000;
+const KEEP_FPS = !!args['keep-fps'];
+// Optional: deactivate node(s) by name before capture (comma-separated). Useful to
+// drop a scene's full-screen background to verify a truly transparent capture.
+const HIDE_NODES = (args.hide && args.hide !== true) ? String(args.hide).split(',').map(s => s.trim()).filter(Boolean) : [];
+
+// Locate system Chrome (avoid bundling Chromium).
+function findChrome() {
+    if (args.chrome && args.chrome !== true) return args.chrome;
+    const candidates = [
+        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
+        '/Applications/Chromium.app/Contents/MacOS/Chromium',
+        '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge',
+    ];
+    for (const c of candidates) if (fs.existsSync(c)) return c;
+    return null;
+}
+
+// ---- minimal static file server for the build dir ----
+const MIME = {
+    '.html': 'text/html', '.js': 'text/javascript', '.json': 'application/json',
+    '.css': 'text/css', '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
+    '.wasm': 'application/wasm', '.bin': 'application/octet-stream', '.mp3': 'audio/mpeg',
+    '.ttf': 'font/ttf', '.plist': 'application/xml', '.svg': 'image/svg+xml',
+};
+function startServer(root) {
+    return new Promise((resolve) => {
+        const server = http.createServer((req, res) => {
+            let urlPath = decodeURIComponent(req.url.split('?')[0]);
+            if (urlPath === '/') urlPath = '/index.html';
+            const filePath = path.join(root, urlPath);
+            if (!filePath.startsWith(root) || !fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {
+                res.writeHead(404); res.end('not found'); return;
+            }
+            res.setHeader('Access-Control-Allow-Origin', '*');
+            res.setHeader('Content-Type', MIME[path.extname(filePath)] || 'application/octet-stream');
+            fs.createReadStream(filePath).pipe(res);
+        });
+        server.listen(0, '127.0.0.1', () => resolve(server));
+    });
+}
+
+// ---- in-page driver: boot wait + loadScene + readiness + transparent bg ----
+// Runs inside the headless page. Returns {ok, w, h, err}.
+function pageDriver(sceneName, wantW, wantH, bg, keepFps, hideNodes) {
+    return new Promise((resolve) => {
+        const T0 = Date.now();
+        const HARD = 25000;
+        function err(m) { resolve({ ok: false, err: m, t: Date.now() - T0 }); }
+
+        // 1) Wait for the engine to FULLY boot AND the start scene to actually be
+        //    running before we switch scenes. Proceeding as soon as `director` exists
+        //    races the in-flight start-scene load, which then clobbers our loadScene
+        //    (capturing the start scene instead of the target). Require getScene() to
+        //    return a real scene, then a short settle.
+        let bootSeenAt = 0;
+        (function waitEngine() {
+            const cc = window.cc;
+            const scene = cc && cc.director && cc.director.getScene ? cc.director.getScene() : null;
+            const booted = cc && cc.director && cc.game && cc.game.canvas && scene && scene.name;
+            if (booted) {
+                if (!bootSeenAt) bootSeenAt = Date.now();
+                // Let the start scene fully settle so its async load can't clobber ours.
+                if (Date.now() - bootSeenAt >= 600) { afterEngine(cc); return; }
+            }
+            if (Date.now() - T0 > HARD) { err('engine did not boot (no running scene)'); return; }
+            setTimeout(waitEngine, 50);
+        })();
+
+        function afterEngine(cc) {
+            try {
+                const dr = cc.view && cc.view.getDesignResolutionSize ? cc.view.getDesignResolutionSize() : null;
+                const W = wantW || (dr && dr.width) || 960;
+                const H = wantH || (dr && dr.height) || 640;
+                window.__shot = { W: Math.round(W), H: Math.round(H) };
+
+                // Switch to the target scene (the build starts at the project start scene).
+                let switched = false;
+                // loadScene returns false synchronously for an unknown scene and never
+                // calls back — guard with that and a timeout so a bad scene name yields
+                // a clean error instead of hanging until the outer timeout.
+                const ret = cc.director.loadScene(sceneName, function (e) {
+                    switched = true;
+                    if (e) { err('loadScene("' + sceneName + '") failed: ' + (e.message || e)); return; }
+                    const cur = cc.director.getScene();
+                    window.__loadedScene = cur ? cur.name : null;
+                    afterScene(cc, Math.round(W), Math.round(H));
+                });
+                if (ret === false) { err('Scene not found in build: "' + sceneName + '". Check the scene name/path, or rebuild (rebuild:true) if it was added/renamed.'); return; }
+                setTimeout(() => { if (!switched) err('loadScene("' + sceneName + '") timed out (scene may not exist in the build).'); }, 8000);
+            } catch (e) { err('afterEngine: ' + (e && e.message || e)); }
+        }
+
+        function afterScene(cc, W, H) {
+            try {
+                // Hide the FPS/profiler stats overlay so it isn't captured as content.
+                // Must be DETERMINISTIC for pixel-diff baselines: the engine can
+                // (re)create the PROFILER_NODE on scene load and re-show stats a frame
+                // later, so a one-shot hideStats() races. We hide it three ways and
+                // re-apply every frame (see hideProfiler in the per-frame hook below):
+                //   1) cc.profiler.hideStats()  2) deactivate the PROFILER_NODE
+                //   3) zero the profiler setting so it can't re-show.
+                const hideProfiler = () => {
+                    if (keepFps) return;
+                    try { if (cc.profiler && cc.profiler.hideStats) cc.profiler.hideStats(); } catch (e) {}
+                    try {
+                        const sc = cc.director.getScene();
+                        if (sc) {
+                            for (const n of sc.children) {
+                                if (n && n.name === 'PROFILER_NODE') { n.active = false; }
+                            }
+                        }
+                    } catch (e) {}
+                    try { if (cc.settings && cc.settings.overrideSettings) cc.settings.overrideSettings('profiling', 'showFPS', false); } catch (e) {}
+                };
+                hideProfiler();
+                window.__hideProfiler = hideProfiler;
+
+                // Optionally deactivate named nodes (e.g. a full-screen Background) so
+                // a truly transparent capture can be produced for verification.
+                if (hideNodes && hideNodes.length) {
+                    try {
+                        const sc0 = cc.director.getScene();
+                        const want = new Set(hideNodes);
+                        (function walk(n) {
+                            if (!n) return;
+                            if (want.has(n.name)) n.active = false;
+                            (n.children || []).forEach(walk);
+                        })(sc0);
+                    } catch (e) {}
+                }
+
+                // The web build's style.css gives <body> an opaque grey background.
+                // With a transparent canvas, that grey would show through the canvas
+                // compositing (and leak into the element screenshot). Null out the
+                // page background so only the canvas content is captured.
+                if (bg.a === 0) {
+                    try {
+                        document.documentElement.style.background = 'transparent';
+                        document.body.style.background = 'transparent';
+                        const c = cc.game.canvas;
+                        if (c) c.style.background = 'transparent';
+                    } catch (e) {}
+                }
+
+                // Make the on-screen canvas exactly the design resolution and force
+                // the Canvas camera(s) to clear to the requested (transparent) color.
+                const scene = cc.director.getScene();
+                const Color = cc.Color;
+                const cams = [];
+                (function walk(n) {
+                    if (!n) return;
+                    if (n.getComponent) {
+                        const cam = n.getComponent(cc.Camera);
+                        if (cam) cams.push(cam);
+                    }
+                    (n.children || []).forEach(walk);
+                })(scene);
+                const diag = { forcedAlpha: !!window.__forcedAlpha, camCount: cams.length, camInfo: [] };
+                const FLAG = cc.gfx.ClearFlagBit;
+                // Re-apply the requested clear color to every camera (component +
+                // low-level render camera) BEFORE EACH DRAW. The engine re-syncs the
+                // low-level camera from the component each frame, so a one-shot set is
+                // overwritten — re-applying every frame keeps it stuck until capture.
+                const applyClear = () => {
+                    // Keep the FPS overlay hidden every frame (it can re-show otherwise).
+                    hideProfiler();
+                    for (const cam of cams) {
+                        try {
+                            cam.clearColor = new Color(bg.r, bg.g, bg.b, bg.a);
+                            cam.clearFlags = FLAG.ALL;
+                            const low = cam.camera;
+                            if (low) {
+                                if (low.clearColor && typeof low.clearColor.set === 'function') {
+                                    low.clearColor.set(bg.r / 255, bg.g / 255, bg.b / 255, bg.a / 255);
+                                } else {
+                                    low.clearColor = { x: bg.r / 255, y: bg.g / 255, z: bg.b / 255, w: bg.a / 255 };
+                                }
+                                if ('clearFlag' in low) low.clearFlag = FLAG.ALL;
+                            }
+                        } catch (e) {}
+                    }
+                };
+                applyClear();
+                try { cc.director.on(cc.Director.EVENT_BEFORE_DRAW, applyClear); } catch (e) {}
+                window.__applyClear = applyClear;
+                for (const cam of cams) {
+                    const low = cam.camera;
+                    diag.camInfo.push({ node: cam.node && cam.node.name, afterClear: [cam.clearColor.r, cam.clearColor.g, cam.clearColor.b, cam.clearColor.a], clearFlags: cam.clearFlags, lowClear: low && low.clearColor ? [Math.round(low.clearColor.x * 255), Math.round(low.clearColor.y * 255), Math.round(low.clearColor.z * 255), Math.round(low.clearColor.w * 255)] : null });
+                }
+                window.__diag = diag;
+                // NOTE: do NOT force canvas.width/height here — the engine's design
+                // resolution policy already sizes the backbuffer, and resizing
+                // mid-switch can capture a stale/previous scene. The page viewport is
+                // set to the target size before load so the canvas comes up correct.
+                diag.canvasWH = [cc.game.canvas.width, cc.game.canvas.height];
+
+                // Wait for several real frames, then read the WebGL pixels DIRECTLY
+                // off the backbuffer (inside the AFTER_DRAW handler, before the browser
+                // composites/clears). This bypasses puppeteer's element-screenshot
+                // compositing — which leaks the page background and drops alpha — and
+                // gives the exact canvas content with a correct alpha channel.
+                const canvas = cc.game.canvas;
+                const gl = canvas.getContext('webgl2') || canvas.getContext('webgl');
+                let frames = 0;
+                let done = false;
+                const finish = (rgbaBase64) => {
+                    if (done) return; done = true;
+                    cc.director.off(cc.Director.EVENT_AFTER_DRAW, onDraw);
+                    // Report the ACTUAL backbuffer dimensions (the PNG must match what
+                    // gl.readPixels returned, not the requested size which the engine's
+                    // resolution policy may have adjusted).
+                    resolve({ ok: true, w: canvas.width, h: canvas.height, requestedW: W, requestedH: H, frames: frames, diag: window.__diag, rgbaBase64: rgbaBase64, glReadback: !!rgbaBase64 });
+                };
+                const grab = () => {
+                    try {
+                        try { const s = cc.director.getScene(); window.__diag.sceneAtGrab = s ? s.name : null; window.__diag.topKids = s ? s.children.map(function(c){return c.name;}) : null; } catch (e) {}
+                        if (gl && !window.__diag.glAlpha) {
+                            const a = gl.getContextAttributes ? gl.getContextAttributes() : null;
+                            window.__diag.glAlpha = a ? a.alpha : null;
+                            window.__diag.glPreserve = a ? a.preserveDrawingBuffer : null;
+                        }
+                        const cw = canvas.width, ch = canvas.height;
+                        const buf = new Uint8Array(cw * ch * 4);
+                        gl.readPixels(0, 0, cw, ch, gl.RGBA, gl.UNSIGNED_BYTE, buf);
+                        // base64-encode in-page (binary-safe).
+                        let bin = '';
+                        const CHUNK = 0x8000;
+                        for (let i = 0; i < buf.length; i += CHUNK) {
+                            bin += String.fromCharCode.apply(null, buf.subarray(i, i + CHUNK));
+                        }
+                        return btoa(bin);
+                    } catch (e) { return null; }
+                };
+                // Give the freshly-loaded scene time to (a) finish loading async
+                // sprite/font textures and (b) settle layout, BEFORE we start counting
+                // the frames we capture. Reading too early can grab the previous scene
+                // (preserveDrawingBuffer keeps the last frame) or a half-loaded one.
+                const SETTLE_MS = 1200;
+                const t0 = Date.now();
+                let counting = false;
+                const onDraw = () => {
+                    if (!counting) {
+                        if (Date.now() - t0 < SETTLE_MS) return;
+                        counting = true; frames = 0;
+                    }
+                    frames++;
+                    if (frames >= 4) {
+                        const data = gl ? grab() : null;
+                        finish(data);
+                    }
+                };
+                cc.director.on(cc.Director.EVENT_AFTER_DRAW, onDraw);
+                // Safety timeout: if AFTER_DRAW stalls, grab whatever is there.
+                setTimeout(() => { if (!done) finish(gl ? grab() : null); }, SETTLE_MS + 4000);
+            } catch (e) { err('afterScene: ' + (e && e.message || e)); }
+        }
+    });
+}
+
+// ---- main ----
+(async () => {
+    const chromePath = findChrome();
+    if (!chromePath) fail('No Chrome/Chromium/Edge found. Pass --chrome <path>.');
+
+    // Resolve puppeteer-core. Modern puppeteer-core ships as ESM, which can't be
+    // require()'d from CommonJS (and we run under ELECTRON_RUN_AS_NODE), so load it
+    // via dynamic import(). Try a passed --puppeteer path, then common locations,
+    // so this single file works both in-repo and when copied into the extension.
+    let puppeteer;
+    const { pathToFileURL } = require('url');
+    const ppCandidates = [
+        'puppeteer-core',
+        path.join(__dirname, 'node_modules', 'puppeteer-core'),
+        path.join(__dirname, '..', 'node_modules', 'puppeteer-core'),
+        path.join(__dirname, '..', '..', 'node_modules', 'puppeteer-core'),
+        // 通用兜底:从调用进程的工作目录解析(不再硬编码任何作者机器上的绝对路径)。
+        path.join(process.cwd(), 'node_modules', 'puppeteer-core'),
+    ];
+    if (args['puppeteer'] && args['puppeteer'] !== true) ppCandidates.unshift(args['puppeteer']);
+    let ppErr = '';
+    for (const c of ppCandidates) {
+        try {
+            // For bare specifiers, import by name; for filesystem paths, import the
+            // package's resolved entry. Resolve via require.resolve first so import()
+            // gets the actual ESM entry file URL.
+            let mod;
+            if (c.startsWith('/') || c.startsWith('.')) {
+                let entry;
+                try { entry = require.resolve(c); } catch (e) { entry = path.join(c, 'lib', 'esm', 'puppeteer', 'puppeteer-core.js'); }
+                mod = await import(pathToFileURL(entry).href);
+            } else {
+                mod = await import(c);
+            }
+            puppeteer = mod.default || mod;
+            if (puppeteer && (puppeteer.launch || (puppeteer.default && puppeteer.default.launch))) {
+                puppeteer = puppeteer.launch ? puppeteer : puppeteer.default;
+                break;
+            }
+            puppeteer = null;
+        } catch (e) { ppErr = String(e && e.message || e); }
+    }
+    if (!puppeteer || typeof puppeteer.launch !== 'function') {
+        fail('puppeteer-core not loadable (ESM import failed). Last error: ' + ppErr + '. Pass --puppeteer <dir>.');
+    }
+
+    const server = await startServer(BUILD_DIR);
+    const port = server.address().port;
+    const url = `http://127.0.0.1:${port}/index.html`;
+
+    let browser;
+    try {
+        browser = await puppeteer.launch({
+            executablePath: chromePath,
+            headless: 'new',
+            args: [
+                '--no-sandbox',
+                '--disable-setuid-sandbox',
+                '--use-gl=angle',
+                '--use-angle=swiftshader',           // software WebGL — reliable in headless
+                '--enable-webgl',
+                '--ignore-gpu-blocklist',
+                '--hide-scrollbars',
+                '--mute-audio',
+                '--force-device-scale-factor=1',
+            ],
+        });
+        const page = await browser.newPage();
+        await page.setViewport({ width: Math.max(WANT_W || 960, 320), height: Math.max(WANT_H || 640, 240), deviceScaleFactor: 1 });
+
+        const pageErrors = [];
+        page.on('pageerror', e => pageErrors.push(String(e && e.message || e)));
+        page.on('console', m => { if (m.type() === 'error') pageErrors.push('console.error: ' + m.text()); });
+
+        // Patch HTMLCanvasElement.getContext BEFORE any page script runs:
+        //  - alpha:true so a transparent backbuffer is possible (the engine otherwise
+        //    creates the context opaque from cc.macro.ENABLE_TRANSPARENT_CANVAS=false,
+        //    which we can't reliably flip before context creation);
+        //  - preserveDrawingBuffer:true so gl.readPixels returns the rendered frame
+        //    instead of a cleared buffer.
+        // We then read the canvas pixels directly (in the page driver) and encode the
+        // PNG in Node — bypassing puppeteer's element screenshot, which composites the
+        // canvas against the page's grey body background and drops the alpha channel.
+        await page.evaluateOnNewDocument((wantAlpha) => {
+            try {
+                const orig = HTMLCanvasElement.prototype.getContext;
+                HTMLCanvasElement.prototype.getContext = function (type, attrs) {
+                    if (type === 'webgl' || type === 'webgl2' || type === 'experimental-webgl') {
+                        attrs = Object.assign({}, attrs, { preserveDrawingBuffer: true });
+                        if (wantAlpha) { attrs.alpha = true; attrs.premultipliedAlpha = true; window.__forcedAlpha = true; }
+                        else { attrs.alpha = false; }
+                    }
+                    return orig.call(this, type, attrs);
+                };
+            } catch (e) { /* ignore */ }
+        }, BG.a === 0);
+
+        await page.goto(url, { waitUntil: 'networkidle2', timeout: TIMEOUT });
+
+        const driveResult = await page.evaluate(pageDriver, sceneName, WANT_W, WANT_H, BG, KEEP_FPS, HIDE_NODES);
+        if (!driveResult || !driveResult.ok) {
+            fail(`in-page driver failed: ${driveResult && driveResult.err}. pageErrors=${JSON.stringify(pageErrors.slice(0, 5))}`);
+        }
+        const W = driveResult.w, H = driveResult.h;
+
+        let pngBuf;
+        let opaquePixels;
+        if (driveResult.rgbaBase64) {
+            // Direct WebGL readback path (preferred): exact content + correct alpha.
+            const rgba = Buffer.from(driveResult.rgbaBase64, 'base64');
+            opaquePixels = 0;
+            for (let i = 3; i < rgba.length; i += 4) if (rgba[i] !== 0) opaquePixels++;
+            // gl.readPixels is bottom-up; flip to top-down for PNG.
+            pngBuf = encodePng({ rgba, width: W, height: H, flipY: true });
+        } else {
+            // Fallback: puppeteer element screenshot (may include page bg / no alpha).
+            const canvasEl = await page.$('#GameCanvas') || await page.$('canvas');
+            if (!canvasEl) fail('No game canvas element found and no GL readback.');
+            pngBuf = await canvasEl.screenshot({ omitBackground: BG.a === 0, type: 'png' });
+        }
+        fs.writeFileSync(OUT, pngBuf);
+
+        console.log(JSON.stringify({
+            success: true,
+            path: OUT,
+            width: W,
+            height: H,
+            bytes: pngBuf.length,
+            scene: sceneName,
+            background: BG,
+            frames: driveResult.frames,
+            opaquePixels: opaquePixels,
+            captureMethod: driveResult.rgbaBase64 ? 'gl-readback' : 'puppeteer-screenshot',
+            diag: driveResult.diag,
+            pageErrors: pageErrors.slice(0, 3),
+        }));
+        await browser.close();
+        server.close();
+        process.exit(0);
+    } catch (e) {
+        try { if (browser) await browser.close(); } catch (_) {}
+        try { server.close(); } catch (_) {}
+        fail('headless run error: ' + (e && e.message || e));
+    }
+})();

File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/main.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/mcp-client-configs.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/mcp-config-manager.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/mcp-server.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/panels/default/index.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/panels/tool-manager/index.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/scene.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/settings.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/sidecar-executor.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/asset-advanced-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/cocos-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/animation-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/asset-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/builder-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/capture-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/component-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/composite-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/editor-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/index.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/node-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/prefab-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/scene-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/template-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/types.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/validate-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/data/tool-guides/view-guide.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-file-writer.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/animation-presets.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/asset-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/builder-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/capture-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/component-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/composite-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/devtools-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/editor-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/font-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/knowledge-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/node-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/prefab-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/scene-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/spine-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/template-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/validate-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/handlers/view-handler.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/asset-ref-resolver.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/async-utils.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/builtin-prefab-loader.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/component-knowledge.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/editor-mode.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/file-guard.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/headless-runner.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/mcp-logger.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/message-recorder.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/node-resolver.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/node-tree-cache.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/param-validator.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/png-encoder.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/prefab-factory.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/project-context.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/response-enhancer.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/scene-setup.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/smart-defaults.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/type-inference.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/cocos/utils/viewport-context.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/component-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/debug-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/node-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/prefab-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/preferences-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/project-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/reference-image-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/scene-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/scene-view-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/server-tools.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/tools/tool-manager.js


File diff suppressed because it is too large
+ 0 - 0
extensions/cocos-mcp-server/dist/types/index.js


+ 243 - 0
extensions/cocos-mcp-server/i18n/ar.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "خادم Cocos MCP",
+    "description": "خادم AI MCP لـ Cocos Creator 3.8",
+    "panel_title": "خادم MCP",
+    "open_panel": "فتح لوحة MCP",
+    "start_server": "بدء الخادم",
+    "stop_server": "إيقاف الخادم",
+    "server_status": "حالة الخادم",
+    "port": "المنفذ",
+    "settings": "الإعدادات",
+    "connected": "متصل",
+    "disconnected": "غير متصل",
+    "server_running": "الخادم يعمل على المنفذ {0}",
+    "server_stopped": "تم إيقاف الخادم",
+    "auto_start": "بدء تلقائي",
+    "debug_log": "سجل التصحيح",
+    "max_connections": "الحد الأقصى للاتصالات",
+    "connection_info": "معلومات الاتصال",
+    "http_url": "رابط HTTP",
+    "copy": "نسخ",
+    "save_settings": "حفظ",
+    "settings_saved": "تم حفظ الإعدادات بنجاح",
+    "server_started": "تم بدء خادم MCP",
+    "server_stopped_msg": "تم إيقاف خادم MCP",
+    "failed_to_start": "فشل في بدء الخادم",
+    "failed_to_stop": "فشل في إيقاف الخادم",
+    "failed_to_save": "فشل في حفظ الإعدادات",
+    "url_copied": "تم نسخ رابط HTTP إلى الحافظة",
+    "tool_manager": "مدير الأدوات",
+    "open_tool_manager": "فتح مدير الأدوات",
+    "create_config": "إنشاء تكوين",
+    "edit_config": "تعديل التكوين",
+    "delete_config": "حذف التكوين",
+    "import_config": "استيراد التكوين",
+    "export_config": "تصدير التكوين",
+    "apply_config": "تطبيق التكوين",
+    "select_all": "تحديد الكل",
+    "deselect_all": "إلغاء تحديد الكل",
+    "save_changes": "حفظ التغييرات",
+    "config_name": "اسم التكوين",
+    "config_description": "وصف التكوين",
+    "current_config": "التكوين الحالي",
+    "tool_management": "إدارة الأدوات",
+    "total_tools": "إجمالي الأدوات",
+    "enabled_tools": "مفعّلة",
+    "disabled_tools": "معطّلة",
+    "no_config_selected": "لم يتم تحديد تكوين",
+    "select_config_first": "يرجى تحديد أو إنشاء تكوين أولاً",
+    "config_created": "تم إنشاء التكوين بنجاح",
+    "config_updated": "تم تحديث التكوين بنجاح",
+    "config_deleted": "تم حذف التكوين بنجاح",
+    "config_applied": "تم تطبيق التكوين بنجاح",
+    "config_exported": "تم تصدير التكوين بنجاح",
+    "config_imported": "تم استيراد التكوين بنجاح",
+    "confirm_delete": "تأكيد الحذف",
+    "delete_config_confirm": "هل أنت متأكد من حذف التكوين \"{0}\"؟ لا يمكن التراجع عن هذا الإجراء.",
+    "max_config_slots_reached": "تم الوصول إلى الحد الأقصى لعدد التكوينات ({0})",
+    "invalid_config_format": "تنسيق التكوين غير صالح",
+    "invalid_json_format": "تنسيق JSON أو بنية التكوين غير صالحة",
+    "server_tab": "الخادم",
+    "tools_tab": "إدارة الأدوات",
+    "available_tools": "الأدوات المتاحة",
+    "scene_tools": "أدوات المشهد",
+    "node_tools": "أدوات العقد",
+    "component_tools": "أدوات المكونات",
+    "prefab_tools": "أدوات القوالب",
+    "project_tools": "أدوات المشروع",
+    "debug_tools": "أدوات التصحيح",
+    "preferences_tools": "التفضيلات",
+    "server_tools": "أدوات الخادم",
+    "broadcast_tools": "أدوات البث",
+    "scene_advanced_tools": "أدوات المشهد المتقدمة",
+    "scene_view_tools": "أدوات عرض المشهد",
+    "reference_image_tools": "أدوات الصور المرجعية",
+    "asset_advanced_tools": "أدوات الأصول المتقدمة",
+    "validation_tools": "أدوات التحقق",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "البريد الإلكتروني",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "رمز الجهاز",
+    "purchase_renew": "شراء / تجديد",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "اختر طريقة تسجيل الدخول",
+    "auth_subtitle": "أدخل بريدك الإلكتروني ورمز التفعيل",
+    "email_label": "عنوان البريد الإلكتروني",
+    "activation_code_label": "رمز التفعيل",
+    "email_placeholder": "أدخل البريد الإلكتروني",
+    "code_placeholder": "أدخل الرمز (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "تفعيل",
+    "deactivate_button": "إلغاء التفعيل",
+    "activating": "جارٍ التفعيل...",
+    "deactivating": "جارٍ إلغاء التفعيل...",
+    "license_status": "حالة الترخيص",
+    "license_type": "نوع الترخيص",
+    "expiry_date": "تاريخ الانتهاء",
+    "days_remaining": "الأيام المتبقية",
+    "days_unit": "ي",
+    "permanent": "دائم",
+    "expiry_warning_title": "الترخيص على وشك الانتهاء",
+    "expiry_warning_message": "سينتهي ترخيصك خلال {0} أيام. يرجى التجديد لتجنب انقطاع الخدمة.",
+    "renew_now": "تجديد الآن",
+    "i_understand": "فهمت",
+    "activation_success": "تم تفعيل الترخيص بنجاح!",
+    "activation_failed": "فشل التفعيل: {0}",
+    "invalid_code": "تنسيق رمز التفعيل غير صالح",
+    "purchase_license": "شراء ترخيص",
+    "renew_license": "تجديد الترخيص",
+    "contact_support": "الدعم",
+    "language_switch": "العربية",
+    "version_label": "الإصدار",
+    "license_required": "مطلوب ترخيص لبدء الخادم",
+    "license_check_failed": "فشل التحقق من الترخيص",
+
+    "status_stopped": "متوقف",
+    "status_running": "يعمل",
+    "status_error": "فشل الاتصال",
+    "config_tab": "إعداد سريع",
+    "status_label": "الحالة",
+    "connections_count": "الاتصالات",
+    "transport_protocol": "بروتوكول النقل",
+    "transport_type": "نوع النقل",
+    "mcp_url": "رابط MCP",
+    "port_fallback_title": "المنفذ {0} غير متاح — تم التبديل إلى {1}",
+    "port_fallback_reason": "المنفذ {0} محجوز من قبل النظام أو محظور بواسطة جدار الحماية/برنامج مكافحة الفيروسات (شائع في نظام Windows المثبت عليه Hyper-V أو WSL2 أو Docker). الخادم يعمل بشكل طبيعي على المنفذ الجديد.",
+    "port_fallback_resynced": "تم تحديث إعدادات العملاء التالية: {0}. أعد تشغيلها ليصبح المنفذ الجديد ساري المفعول.",
+    "port_fallback_no_clients": "إذا سبق أن أعددت عملاء الذكاء الاصطناعي، فأعد إعدادهم على المنفذ الجديد من خلال الإعداد بنقرة واحدة.",
+    "port_fallback_dismiss": "حسنًا",
+    "port_label": "المنفذ",
+    "auto_start_label": "بدء تلقائي",
+    "debug_log_label": "سجل التصحيح",
+    "max_connections_label": "الحد الأقصى للاتصالات",
+    "server_settings_title": "إعدادات الخادم",
+    "server_status_title": "حالة الخادم",
+    "connection_info_title": "معلومات الاتصال",
+    "tools_count": "{0} أدوات",
+    "tools_stats": "{0} أدوات ({1} مفعّلة / {2} معطّلة)",
+    "quick_config_title": "إعداد سريع لعملاء MCP",
+    "quick_config_desc": "تكوين خادم MCP تلقائيًا في محررات AI وأدوات CLI",
+    "server_info": "معلومات الخادم",
+    "server_name_label": "اسم الخادم",
+    "server_address": "عنوان الخادم",
+    "timeout_ms": "مهلة الانتظار (مللي ثانية)",
+    "auto_config_title": "إعداد تلقائي (IDE + Codex CLI)",
+    "add_all": "إضافة الكل",
+    "remove_all": "إزالة الكل",
+    "auto_config_note": "انقر لتعديل ملفات التكوين تلقائيًا (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "مُعدّ",
+    "not_configured": "غير مُعدّ",
+    "auto_config_btn": "إعداد تلقائي",
+    "delete_btn": "حذف",
+    "copy_config": "نسخ التكوين",
+    "open_config": "فتح التكوين",
+    "manual_config_title": "إعداد يدوي (Claude CLI + Gemini CLI)",
+    "refresh_commands": "تحديث الأوامر",
+    "manual_config_note": "أدوات CLI التالية تتطلب تنفيذًا يدويًا في الطرفية",
+    "config_scope": "نطاق التكوين:",
+    "scope_user": "مستوى المستخدم",
+    "scope_project": "مستوى المشروع",
+    "operation_log": "سجل العمليات",
+    "no_logs": "لا توجد سجلات",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "مبني على بروتوكول Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "نظام الأدوات - 13 أداة intent-level، أكثر من 150 عملية محرر، توزيع أكواد الإجراءات",
+    "config_copyright_line1": "إعداد سريع - يدعم Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "يرجى إدخال البريد الإلكتروني ورمز التفعيل",
+    "permanent_label": "دائم",
+    "logout_button": "تسجيل الخروج",
+    "invite_code_label": "رمز الدعوة",
+    "copy_button": "نسخ",
+    "change_code_button": "تغيير الرمز",
+    "change_code_title": "تغيير رمز التفعيل",
+    "change_code_desc": "أدخل رمز التفعيل الجديد. سيتم إلغاء ربط الجهاز الحالي أولاً.",
+    "confirm_change": "تأكيد",
+    "cancel": "إلغاء",
+    "code_required": "يرجى إدخال رمز التفعيل",
+    "expiry_inline_warning": "ينتهي قريبًا!",
+    "store_purchase_hint": "إذا اشتريت هذا الإضافة من Cocos Store، يرجى الاتصال بي للحصول على رمز التفعيل.",
+    "license_expired_title": "انتهت صلاحية الترخيص",
+    "license_expired_message": "انتهت صلاحية ترخيصك ولا يمكن بدء الخادم. يرجى التجديد أو إعادة التفعيل للمتابعة.",
+    "go_to_login": "الذهاب لتسجيل الدخول",
+
+    "log_load_config_failed": "فشل في تحميل حالة التكوين: {0}",
+    "log_gen_cli_failed": "فشل في إنشاء أوامر CLI: {0}",
+    "log_add_client_failed": "فشل في الإضافة إلى {0}: {1}",
+    "log_remove_client_failed": "فشل في الإزالة من {0}: {1}",
+    "quick_config_dialog_title": "تكوين بنقرة واحدة",
+    "config_operation_failed": "فشلت عملية التكوين",
+    "config_file_not_found_changed_path": "فشل التكوين: لم يتم العثور على ملف التكوين. ربما تم تثبيت {0} في مسار مخصص.",
+    "log_batch_add_failed": "فشل الإضافة الجماعية: {0}",
+    "log_batch_remove_failed": "فشل الإزالة الجماعية: {0}",
+    "log_copied_config": "تم نسخ تكوين {0} إلى الحافظة",
+    "log_gen_config_failed": "فشل في إنشاء التكوين",
+    "log_copy_config_failed": "فشل في نسخ التكوين: {0}",
+    "log_copied_command": "تم نسخ أمر {0} إلى الحافظة",
+    "log_copy_command_failed": "فشل في نسخ الأمر: {0}",
+    "log_opened_config_file": "تم فتح ملف التكوين: {0}",
+    "log_open_config_failed": "فشل في فتح ملف التكوين",
+    "log_open_config_error": "فشل في فتح ملف التكوين: {0}",
+
+    "update_available_title": "تحديث متاح",
+    "update_new_version": "الإصدار الجديد v{0} متاح!",
+    "update_now": "التحديث الآن",
+    "update_not_now": "ليس الآن",
+    "update_skip_version": "تخطي v{0}",
+    "check_for_updates": "التحقق من التحديثات",
+    "update_checking": "جارٍ التحقق...",
+    "update_no_update": "أنت تستخدم أحدث إصدار",
+    "update_urgency_critical": "تحديث عاجل",
+    "update_urgency_high": "تحديث مهم",
+    "update_current_version": "الإصدار الحالي: v{0}",
+    "update_changelog": "سجل التغييرات",
+    "auth_choose_subtitle": "اختر طريقة تسجيل الدخول للمتابعة",
+    "update_changelog_empty": "لم يتم توفير ملاحظات إصدار لهذه النسخة.",
+    "subscription_login_title": "حساب اشتراك VberAI",
+    "subscription_password_label": "كلمة المرور",
+    "subscription_password_placeholder": "أدخل كلمة المرور",
+    "subscription_login_button": "تسجيل الدخول باستخدام VberAI",
+    "subscription_google_button": "تسجيل الدخول باستخدام Google",
+    "subscription_google_pending": "تم فتح المتصفح. أكمل تفويض Google ثم عد إلى Cocos Creator.",
+    "subscription_google_pending_button": "في انتظار تفويض Google...",
+    "subscription_register_button": "إنشاء حساب VberAI",
+    "subscription_logging_in": "جارٍ تسجيل الدخول...",
+    "subscription_credentials_required": "يرجى إدخال البريد الإلكتروني وكلمة المرور",
+    "subscription_login_success": "تم تسجيل الدخول إلى حساب الاشتراك",
+    "subscription_login_failed": "فشل تسجيل الدخول إلى الاشتراك",
+    "subscription_not_entitled": "اشتراكك الحالي لا يتضمن Cocos 3.x MCP. قم بالترقية للمتابعة.",
+    "subscription_upgrade_to": "قم بالترقية إلى «{0}» لاستخدام هذا المنتج",
+    "subscription_upgrade_action": "ترقية الاشتراك",
+    "subscription_logged_in": "الحساب المسجّل دخوله",
+    "subscription_choose_button": "حساب اشتراك VberAI",
+    "license_choose_button": "رمز التفعيل",
+    "subscription_method_label": "اشتراك",
+    "back_to_login_choices": "← اختر طريقة تسجيل دخول أخرى",
+    "subscription_signed_out_other_device": "تم تسجيل الخروج: تم استخدام حسابك على جهاز آخر.",
+    "subscription_google_cancelled": "تم إلغاء تسجيل الدخول عبر Google.",
+    "subscription_request_timeout": "انتهت مهلة الطلب. تحقق من شبكتك وحاول مرة أخرى.",
+    "subscription_network_error": "فشل الاتصال بالشبكة. تحقق من شبكتك وحاول مرة أخرى.",
+    "subscription_server_error": "أرجع الخادم استجابة غير صالحة. حاول مرة أخرى لاحقًا.",
+    "subscription_google_authorization_failed": "لم يكتمل تفويض Google. يرجى المحاولة مرة أخرى."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/de.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP Server",
+    "description": "AI MCP Server für Cocos Creator 3.8",
+    "panel_title": "MCP Server",
+    "open_panel": "MCP-Panel öffnen",
+    "start_server": "Server starten",
+    "stop_server": "Server stoppen",
+    "server_status": "Serverstatus",
+    "port": "Port",
+    "settings": "Einstellungen",
+    "connected": "Verbunden",
+    "disconnected": "Getrennt",
+    "server_running": "Server läuft auf Port {0}",
+    "server_stopped": "Server wurde gestoppt",
+    "auto_start": "Autostart",
+    "debug_log": "Debug-Protokoll",
+    "max_connections": "Max. Verbindungen",
+    "connection_info": "Verbindungsinfo",
+    "http_url": "HTTP-URL",
+    "copy": "Kopieren",
+    "save_settings": "Speichern",
+    "settings_saved": "Einstellungen erfolgreich gespeichert",
+    "server_started": "MCP Server gestartet",
+    "server_stopped_msg": "MCP Server gestoppt",
+    "failed_to_start": "Server konnte nicht gestartet werden",
+    "failed_to_stop": "Server konnte nicht gestoppt werden",
+    "failed_to_save": "Einstellungen konnten nicht gespeichert werden",
+    "url_copied": "HTTP-URL in Zwischenablage kopiert",
+    "tool_manager": "Tool-Manager",
+    "open_tool_manager": "Tool-Manager öffnen",
+    "create_config": "Konfiguration erstellen",
+    "edit_config": "Konfiguration bearbeiten",
+    "delete_config": "Konfiguration löschen",
+    "import_config": "Konfiguration importieren",
+    "export_config": "Konfiguration exportieren",
+    "apply_config": "Konfiguration anwenden",
+    "select_all": "Alle auswählen",
+    "deselect_all": "Alle abwählen",
+    "save_changes": "Änderungen speichern",
+    "config_name": "Konfigurationsname",
+    "config_description": "Konfigurationsbeschreibung",
+    "current_config": "Aktuelle Konfiguration",
+    "tool_management": "Tool-Verwaltung",
+    "total_tools": "Gesamt",
+    "enabled_tools": "Aktiviert",
+    "disabled_tools": "Deaktiviert",
+    "no_config_selected": "Keine Konfiguration ausgewählt",
+    "select_config_first": "Bitte wählen Sie zuerst eine Konfiguration oder erstellen Sie eine neue",
+    "config_created": "Konfiguration erfolgreich erstellt",
+    "config_updated": "Konfiguration erfolgreich aktualisiert",
+    "config_deleted": "Konfiguration erfolgreich gelöscht",
+    "config_applied": "Konfiguration erfolgreich angewendet",
+    "config_exported": "Konfiguration erfolgreich exportiert",
+    "config_imported": "Konfiguration erfolgreich importiert",
+    "confirm_delete": "Löschen bestätigen",
+    "delete_config_confirm": "Möchten Sie die Konfiguration \"{0}\" wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
+    "max_config_slots_reached": "Maximale Anzahl von Konfigurationen erreicht ({0})",
+    "invalid_config_format": "Ungültiges Konfigurationsformat",
+    "invalid_json_format": "Ungültiges JSON-Format oder Konfigurationsstruktur",
+    "server_tab": "Server",
+    "tools_tab": "Tool-Verwaltung",
+    "available_tools": "Verfügbare Tools",
+    "scene_tools": "Szenen-Tools",
+    "node_tools": "Knoten-Tools",
+    "component_tools": "Komponenten-Tools",
+    "prefab_tools": "Prefab-Tools",
+    "project_tools": "Projekt-Tools",
+    "debug_tools": "Debug-Tools",
+    "preferences_tools": "Einstellungen",
+    "server_tools": "Server-Tools",
+    "broadcast_tools": "Broadcast-Tools",
+    "scene_advanced_tools": "Erweiterte Szenen-Tools",
+    "scene_view_tools": "Szenenansicht-Tools",
+    "reference_image_tools": "Referenzbild-Tools",
+    "asset_advanced_tools": "Erweiterte Asset-Tools",
+    "validation_tools": "Validierungs-Tools",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "E-Mail",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Maschinencode",
+    "purchase_renew": "Kaufen / Verlängern",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Anmeldemethode auswählen",
+    "auth_subtitle": "Geben Sie Ihre E-Mail und Ihren Aktivierungscode ein",
+    "email_label": "E-Mail-Adresse",
+    "activation_code_label": "Aktivierungscode",
+    "email_placeholder": "E-Mail eingeben",
+    "code_placeholder": "Code eingeben (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Aktivieren",
+    "deactivate_button": "Deaktivieren",
+    "activating": "Aktivierung...",
+    "deactivating": "Deaktivierung...",
+    "license_status": "Lizenzstatus",
+    "license_type": "Lizenztyp",
+    "expiry_date": "Ablaufdatum",
+    "days_remaining": "Verbleibende Tage",
+    "days_unit": "T",
+    "permanent": "Permanent",
+    "expiry_warning_title": "Lizenz läuft bald ab",
+    "expiry_warning_message": "Ihre Lizenz läuft in {0} Tagen ab. Bitte verlängern Sie, um Unterbrechungen zu vermeiden.",
+    "renew_now": "Jetzt verlängern",
+    "i_understand": "Verstanden",
+    "activation_success": "Lizenz erfolgreich aktiviert!",
+    "activation_failed": "Aktivierung fehlgeschlagen: {0}",
+    "invalid_code": "Ungültiges Aktivierungscode-Format",
+    "purchase_license": "Lizenz kaufen",
+    "renew_license": "Lizenz verlängern",
+    "contact_support": "Support",
+    "language_switch": "Deutsch",
+    "version_label": "Version",
+    "license_required": "Zum Starten des Servers ist eine Lizenz erforderlich",
+    "license_check_failed": "Lizenzprüfung fehlgeschlagen",
+
+    "status_stopped": "Gestoppt",
+    "status_running": "Läuft",
+    "status_error": "Verbindung fehlgeschlagen",
+    "config_tab": "Schnellkonfig",
+    "status_label": "Status",
+    "connections_count": "Verbindungen",
+    "transport_protocol": "Transportprotokoll",
+    "transport_type": "Transporttyp",
+    "mcp_url": "MCP-URL",
+    "port_fallback_title": "Port {0} nicht verfügbar – zu {1} gewechselt",
+    "port_fallback_reason": "Port {0} ist vom System reserviert oder wird von einer Firewall/Antivirensoftware blockiert (häufig unter Windows mit Hyper-V, WSL2 oder Docker). Der Server läuft auf dem neuen Port normal.",
+    "port_fallback_resynced": "Konfiguration aktualisiert für: {0}. Starten Sie diese Clients neu, damit der neue Port wirksam wird.",
+    "port_fallback_no_clients": "Falls Sie bereits AI-Clients eingerichtet haben, konfigurieren Sie sie über die Ein-Klick-Konfiguration erneut auf den neuen Port.",
+    "port_fallback_dismiss": "Verstanden",
+    "port_label": "Port",
+    "auto_start_label": "Autostart",
+    "debug_log_label": "Debug-Protokoll",
+    "max_connections_label": "Max. Verbindungen",
+    "server_settings_title": "Servereinstellungen",
+    "server_status_title": "Serverstatus",
+    "connection_info_title": "Verbindungsinfo",
+    "tools_count": "{0} Tools",
+    "tools_stats": "{0} Tools ({1} aktiviert / {2} deaktiviert)",
+    "quick_config_title": "MCP-Clients schnell konfigurieren",
+    "quick_config_desc": "MCP-Server automatisch in AI-Editoren und CLI-Tools konfigurieren",
+    "server_info": "Serverinfo",
+    "server_name_label": "Servername",
+    "server_address": "Serveradresse",
+    "timeout_ms": "Zeitlimit (ms)",
+    "auto_config_title": "Auto-Konfig (IDE-Editoren + Codex CLI)",
+    "add_all": "Alle hinzufügen",
+    "remove_all": "Alle entfernen",
+    "auto_config_note": "Klicken Sie, um Konfigurationsdateien automatisch zu ändern (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Konfiguriert",
+    "not_configured": "Nicht konfiguriert",
+    "auto_config_btn": "Auto-Konfig",
+    "delete_btn": "Löschen",
+    "copy_config": "Konfig kopieren",
+    "open_config": "Konfig öffnen",
+    "manual_config_title": "Manuelle Konfig (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Befehle aktualisieren",
+    "manual_config_note": "Die folgenden CLI-Tools erfordern manuelle Ausführung im Terminal",
+    "config_scope": "Konfig-Bereich:",
+    "scope_user": "Benutzerebene",
+    "scope_project": "Projektebene",
+    "operation_log": "Operationsprotokoll",
+    "no_logs": "Keine Einträge",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Basierend auf dem Streamable HTTP Protokoll (MCP 2025-03-26)",
+    "tools_copyright_line1": "Tool-System - 13 Intent-Level-Tools, 150+ Editor-Operationen, Action-Code-Dispatch",
+    "config_copyright_line1": "Schnellkonfig - Unterstützt Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Bitte geben Sie E-Mail und Aktivierungscode ein",
+    "permanent_label": "Permanent",
+    "logout_button": "Abmelden",
+    "invite_code_label": "Einladungscode",
+    "copy_button": "Kopieren",
+    "change_code_button": "Code ändern",
+    "change_code_title": "Aktivierungscode ändern",
+    "change_code_desc": "Geben Sie Ihren neuen Aktivierungscode ein. Die aktuelle Gerätebindung wird zuerst freigegeben.",
+    "confirm_change": "Bestätigen",
+    "cancel": "Abbrechen",
+    "code_required": "Bitte geben Sie einen Aktivierungscode ein",
+    "expiry_inline_warning": "Läuft bald ab!",
+    "store_purchase_hint": "Wenn Sie dieses Plugin im Cocos Store gekauft haben, kontaktieren Sie mich bitte, um Ihren Aktivierungscode zu erhalten.",
+    "license_expired_title": "Lizenz abgelaufen",
+    "license_expired_message": "Ihre Lizenz ist abgelaufen und der Server kann nicht gestartet werden. Bitte verlängern oder reaktivieren Sie, um fortzufahren.",
+    "go_to_login": "Zum Login",
+
+    "log_load_config_failed": "Konfigurationsstatus konnte nicht geladen werden: {0}",
+    "log_gen_cli_failed": "CLI-Befehle konnten nicht generiert werden: {0}",
+    "log_add_client_failed": "Hinzufügen zu {0} fehlgeschlagen: {1}",
+    "log_remove_client_failed": "Entfernen von {0} fehlgeschlagen: {1}",
+    "quick_config_dialog_title": "Ein-Klick-Konfiguration",
+    "config_operation_failed": "Konfigurationsvorgang fehlgeschlagen",
+    "config_file_not_found_changed_path": "Konfiguration fehlgeschlagen: Konfigurationsdatei nicht gefunden. {0} wurde möglicherweise in einem benutzerdefinierten Pfad installiert.",
+    "log_batch_add_failed": "Stapel-Hinzufügen fehlgeschlagen: {0}",
+    "log_batch_remove_failed": "Stapel-Entfernen fehlgeschlagen: {0}",
+    "log_copied_config": "{0}-Konfiguration in Zwischenablage kopiert",
+    "log_gen_config_failed": "Konfiguration konnte nicht generiert werden",
+    "log_copy_config_failed": "Konfiguration konnte nicht kopiert werden: {0}",
+    "log_copied_command": "{0}-Befehl in Zwischenablage kopiert",
+    "log_copy_command_failed": "Befehl konnte nicht kopiert werden: {0}",
+    "log_opened_config_file": "Konfigurationsdatei geöffnet: {0}",
+    "log_open_config_failed": "Konfigurationsdatei konnte nicht geöffnet werden",
+    "log_open_config_error": "Konfigurationsdatei konnte nicht geöffnet werden: {0}",
+
+    "update_available_title": "Update verfügbar",
+    "update_new_version": "Neue Version v{0} ist verfügbar!",
+    "update_now": "Jetzt aktualisieren",
+    "update_not_now": "Später",
+    "update_skip_version": "v{0} überspringen",
+    "check_for_updates": "Nach Updates suchen",
+    "update_checking": "Prüfe...",
+    "update_no_update": "Sie verwenden die neueste Version",
+    "update_urgency_critical": "Kritisches Update",
+    "update_urgency_high": "Wichtiges Update",
+    "update_current_version": "Aktuelle Version: v{0}",
+    "update_changelog": "Änderungsprotokoll",
+    "auth_choose_subtitle": "Wählen Sie eine Anmeldemethode, um fortzufahren",
+    "update_changelog_empty": "Für diese Version wurden keine Versionshinweise bereitgestellt.",
+    "subscription_login_title": "VberAI-Abonnementkonto",
+    "subscription_password_label": "Passwort",
+    "subscription_password_placeholder": "Passwort eingeben",
+    "subscription_login_button": "Mit VberAI anmelden",
+    "subscription_google_button": "Mit Google anmelden",
+    "subscription_google_pending": "Browser geöffnet. Schließen Sie die Google-Autorisierung ab und kehren Sie dann zu Cocos Creator zurück.",
+    "subscription_google_pending_button": "Warte auf Google-Autorisierung...",
+    "subscription_register_button": "VberAI-Konto erstellen",
+    "subscription_logging_in": "Anmeldung läuft...",
+    "subscription_credentials_required": "Bitte E-Mail und Passwort eingeben",
+    "subscription_login_success": "Bei Abonnementkonto angemeldet",
+    "subscription_login_failed": "Abonnement-Anmeldung fehlgeschlagen",
+    "subscription_not_entitled": "Ihr aktuelles Abonnement enthält Cocos 3.x MCP nicht. Führen Sie ein Upgrade durch, um fortzufahren.",
+    "subscription_upgrade_to": "Führen Sie ein Upgrade auf „{0}“ durch, um dieses Produkt zu verwenden",
+    "subscription_upgrade_action": "Abonnement upgraden",
+    "subscription_logged_in": "Angemeldetes Konto",
+    "subscription_choose_button": "VberAI-Abonnementkonto",
+    "license_choose_button": "Aktivierungscode",
+    "subscription_method_label": "Abonnement",
+    "back_to_login_choices": "← Andere Anmeldemethode wählen",
+    "subscription_signed_out_other_device": "Abgemeldet: Ihr Konto wurde auf einem anderen Gerät verwendet.",
+    "subscription_google_cancelled": "Google-Anmeldung wurde abgebrochen.",
+    "subscription_request_timeout": "Zeitüberschreitung der Anfrage. Überprüfen Sie Ihr Netzwerk und versuchen Sie es erneut.",
+    "subscription_network_error": "Netzwerkverbindung fehlgeschlagen. Überprüfen Sie Ihr Netzwerk und versuchen Sie es erneut.",
+    "subscription_server_error": "Der Server hat eine ungültige Antwort zurückgegeben. Versuchen Sie es später erneut.",
+    "subscription_google_authorization_failed": "Die Google-Autorisierung wurde nicht abgeschlossen. Bitte versuchen Sie es erneut."
+};

+ 244 - 0
extensions/cocos-mcp-server/i18n/en.js

@@ -0,0 +1,244 @@
+"use strict";
+
+module.exports = {
+    "extension_name": "Cocos MCP Server",
+    "description": "AI MCP Server for Cocos Creator 3.8",
+    "panel_title": "MCP Server",
+    "open_panel": "Open MCP Panel",
+    "start_server": "Start Server",
+    "stop_server": "Stop Server",
+    "server_status": "Server Status",
+    "port": "Port",
+    "settings": "Settings",
+    "connected": "Connected",
+    "disconnected": "Disconnected",
+    "server_running": "Server is running on port {0}",
+    "server_stopped": "Server has stopped",
+    "auto_start": "Auto Start",
+    "debug_log": "Debug Logging",
+    "max_connections": "Max Connections",
+    "connection_info": "Connection Info",
+    "http_url": "HTTP URL",
+    "copy": "Copy",
+    "save_settings": "Save Settings",
+    "settings_saved": "Settings saved successfully",
+    "server_started": "MCP Server Started",
+    "server_stopped_msg": "MCP Server Stopped",
+    "failed_to_start": "Failed to start server",
+    "failed_to_stop": "Failed to stop server",
+    "failed_to_save": "Failed to save settings",
+    "url_copied": "HTTP URL copied to clipboard",
+    "tool_manager": "Tool Manager",
+    "open_tool_manager": "Open Tool Manager",
+    "create_config": "Create Configuration",
+    "edit_config": "Edit Configuration",
+    "delete_config": "Delete Configuration",
+    "import_config": "Import Configuration",
+    "export_config": "Export Configuration",
+    "apply_config": "Apply Configuration",
+    "select_all": "Select All",
+    "deselect_all": "Deselect All",
+    "save_changes": "Save Changes",
+    "config_name": "Configuration Name",
+    "config_description": "Configuration Description",
+    "current_config": "Current Configuration",
+    "tool_management": "Tool Management",
+    "total_tools": "Total Tools",
+    "enabled_tools": "Enabled",
+    "disabled_tools": "Disabled",
+    "no_config_selected": "No Configuration Selected",
+    "select_config_first": "Please select a configuration or create a new one first",
+    "config_created": "Configuration created successfully",
+    "config_updated": "Configuration updated successfully",
+    "config_deleted": "Configuration deleted successfully",
+    "config_applied": "Configuration applied successfully",
+    "config_exported": "Configuration exported successfully",
+    "config_imported": "Configuration imported successfully",
+    "confirm_delete": "Confirm Delete",
+    "delete_config_confirm": "Are you sure you want to delete configuration \"{0}\"? This action cannot be undone.",
+    "max_config_slots_reached": "Maximum configuration slots reached ({0})",
+    "invalid_config_format": "Invalid configuration format",
+    "invalid_json_format": "Invalid JSON format or configuration structure",
+    "server_tab": "Server",
+    "tools_tab": "Tool Management",
+    "available_tools": "Available Tools",
+    "scene_tools": "Scene Tools",
+    "node_tools": "Node Tools",
+    "component_tools": "Component Tools",
+    "prefab_tools": "Prefab Tools",
+    "project_tools": "Project Tools",
+    "debug_tools": "Debug Tools",
+    "preferences_tools": "Preferences",
+    "server_tools": "Server Tools",
+    "broadcast_tools": "Broadcast Tools",
+    "scene_advanced_tools": "Advanced Scene Tools",
+    "scene_view_tools": "Scene View Tools",
+    "reference_image_tools": "Reference Image Tools",
+    "asset_advanced_tools": "Advanced Asset Tools",
+    "validation_tools": "Validation Tools",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "Email",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Machine ID",
+    "purchase_renew": "Purchase / Renew",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Choose a sign-in method",
+    "auth_subtitle": "Enter your email and activation code",
+    "auth_choose_subtitle": "Choose a sign-in method to continue",
+    "email_label": "Email Address",
+    "activation_code_label": "Activation Code",
+    "email_placeholder": "Enter email",
+    "code_placeholder": "Enter code (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Activate",
+    "deactivate_button": "Deactivate",
+    "activating": "Activating...",
+    "deactivating": "Deactivating...",
+    "license_status": "License Status",
+    "license_type": "License Type",
+    "expiry_date": "Expiry Date",
+    "days_remaining": "Days Remaining",
+    "days_unit": "d",
+    "permanent": "Permanent",
+    "expiry_warning_title": "License Expiring Soon",
+    "expiry_warning_message": "Your license will expire in {0} days. Please renew to avoid service interruption.",
+    "renew_now": "Renew Now",
+    "i_understand": "I Understand",
+    "activation_success": "License activated successfully!",
+    "activation_failed": "Activation failed: {0}",
+    "invalid_code": "Invalid activation code format",
+    "purchase_license": "Purchase License",
+    "renew_license": "Renew License",
+    "contact_support": "Support",
+    "language_switch": "English",
+    "version_label": "Version",
+    "license_required": "License required to start server",
+    "license_check_failed": "License check failed",
+
+    "status_stopped": "Stopped",
+    "status_running": "Running",
+    "status_error": "Connection Failed",
+    "config_tab": "Quick Config",
+    "status_label": "Status",
+    "connections_count": "Connections",
+    "transport_protocol": "Transport Protocol",
+    "transport_type": "Transport Type",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "Port {0} unavailable — switched to {1}",
+    "port_fallback_reason": "Port {0} is reserved by the system or blocked by a firewall/antivirus (common on Windows with Hyper-V, WSL2 or Docker installed). The server is running normally on the new port.",
+    "port_fallback_resynced": "Updated the config for: {0}. Restart these clients for the new port to take effect.",
+    "port_fallback_no_clients": "If you have already configured AI clients, re-run the one-click setup to point them at the new port.",
+    "port_fallback_dismiss": "Got it",
+    "port_label": "Port",
+    "auto_start_label": "Auto Start",
+    "debug_log_label": "Debug Log",
+    "max_connections_label": "Max Connections",
+    "server_settings_title": "Server Settings",
+    "server_status_title": "Server Status",
+    "connection_info_title": "Connection Info",
+    "tools_count": "{0} tools",
+    "tools_stats": "{0} tools ({1} enabled / {2} disabled)",
+    "quick_config_title": "Quick Config MCP Clients",
+    "quick_config_desc": "Auto-configure the current MCP server into mainstream AI editors and CLI tools",
+    "server_info": "Server Info",
+    "server_name_label": "Server Name",
+    "server_address": "Server Address",
+    "timeout_ms": "Timeout (ms)",
+    "auto_config_title": "Auto Config (IDE Editors + Codex CLI)",
+    "add_all": "Add All",
+    "remove_all": "Remove All",
+    "auto_config_note": "Click button to auto-modify config files (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Configured",
+    "not_configured": "Not Configured",
+    "auto_config_btn": "Auto Config",
+    "delete_btn": "Delete",
+    "copy_config": "Copy Config",
+    "open_config": "Open Config",
+    "manual_config_title": "Manual Config (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Refresh Commands",
+    "manual_config_note": "The following CLI tools need manual terminal command execution",
+    "config_scope": "Config Scope:",
+    "scope_user": "User Level",
+    "scope_project": "Project Level",
+    "operation_log": "Operation Log",
+    "no_logs": "No operation records",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Based on Streamable HTTP Protocol (MCP 2025-03-26)",
+    "tools_copyright_line1": "Tool System - 13 intent-level tools, 150+ editor operations, action code dispatch",
+    "config_copyright_line1": "Quick Config - Supports Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Please enter email and activation code",
+    "permanent_label": "Permanent",
+    "logout_button": "Logout",
+    "invite_code_label": "Invite Code",
+    "copy_button": "Copy",
+    "change_code_button": "Change Code",
+    "change_code_title": "Change Activation Code",
+    "change_code_desc": "Enter your new activation code. The current device binding will be released first.",
+    "confirm_change": "Confirm",
+    "cancel": "Cancel",
+    "code_required": "Please enter an activation code",
+    "expiry_inline_warning": "Expiring soon!",
+    "store_purchase_hint": "If you purchased this plugin from Cocos Store, please contact me to get your activation code.",
+    "license_expired_title": "License Expired",
+    "license_expired_message": "Your license has expired and the server cannot be started. Please renew or reactivate to continue.",
+    "go_to_login": "Go to Login",
+
+    "log_load_config_failed": "Failed to load config status: {0}",
+    "log_gen_cli_failed": "Failed to generate CLI commands: {0}",
+    "log_add_client_failed": "Failed to add to {0}: {1}",
+    "log_remove_client_failed": "Failed to remove from {0}: {1}",
+    "quick_config_dialog_title": "One-click Configuration",
+    "config_operation_failed": "Configuration operation failed",
+    "config_file_not_found_changed_path": "Configuration failed: could not find the config file. {0} may be installed in a custom path.",
+    "log_batch_add_failed": "Batch add failed: {0}",
+    "log_batch_remove_failed": "Batch remove failed: {0}",
+    "log_copied_config": "Copied {0} config to clipboard",
+    "log_gen_config_failed": "Failed to generate config",
+    "log_copy_config_failed": "Failed to copy config: {0}",
+    "log_copied_command": "Copied {0} command to clipboard",
+    "log_copy_command_failed": "Failed to copy command: {0}",
+    "log_opened_config_file": "Opened config file: {0}",
+    "log_open_config_failed": "Failed to open config file",
+    "log_open_config_error": "Failed to open config file: {0}",
+
+    "update_available_title": "Update Available",
+    "update_new_version": "New version v{0} is available!",
+    "update_now": "Update Now",
+    "update_not_now": "Not Now",
+    "update_skip_version": "Skip v{0}",
+    "check_for_updates": "Check for Updates",
+    "update_checking": "Checking...",
+    "update_no_update": "You are using the latest version",
+    "update_urgency_critical": "Critical Update",
+    "update_urgency_high": "Important Update",
+    "update_current_version": "Current version: v{0}",
+    "update_changelog": "Changelog"
+    ,"update_changelog_empty": "No release notes were provided for this version."
+    ,"subscription_login_title": "VberAI subscription account"
+    ,"subscription_password_label": "Password"
+    ,"subscription_password_placeholder": "Enter password"
+    ,"subscription_login_button": "Sign in with VberAI"
+    ,"subscription_google_button": "Sign in with Google"
+    ,"subscription_google_pending": "Browser opened. Complete Google authorization, then return to Cocos Creator."
+    ,"subscription_google_pending_button": "Waiting for Google authorization..."
+    ,"subscription_register_button": "Create a VberAI account"
+    ,"subscription_logging_in": "Signing in..."
+    ,"subscription_credentials_required": "Please enter email and password"
+    ,"subscription_login_success": "Subscription account signed in"
+    ,"subscription_login_failed": "Subscription sign-in failed"
+    ,"subscription_not_entitled": "Your current subscription does not include Cocos 3.x MCP. Upgrade to continue."
+    ,"subscription_upgrade_to": "Upgrade to {0} to use this product"
+    ,"subscription_upgrade_action": "Upgrade subscription"
+    ,"subscription_logged_in": "Signed-in account"
+    ,"subscription_choose_button": "VberAI subscription account"
+    ,"license_choose_button": "Activation code"
+    ,"subscription_method_label": "Subscription"
+    ,"back_to_login_choices": "← Choose another sign-in method"
+    ,"subscription_signed_out_other_device": "Signed out: your account was used on another device."
+    ,"subscription_google_cancelled": "Google sign-in was cancelled."
+    ,"subscription_request_timeout": "The request timed out. Check your network and try again."
+    ,"subscription_network_error": "Network connection failed. Check your network and try again."
+    ,"subscription_server_error": "The server returned an invalid response. Try again later."
+    ,"subscription_google_authorization_failed": "Google authorization was not completed. Please try again."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/es.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP Servidor",
+    "description": "Servidor AI MCP para Cocos Creator 3.8",
+    "panel_title": "Servidor MCP",
+    "open_panel": "Abrir panel MCP",
+    "start_server": "Iniciar servidor",
+    "stop_server": "Detener servidor",
+    "server_status": "Estado del servidor",
+    "port": "Puerto",
+    "settings": "Ajustes",
+    "connected": "Conectado",
+    "disconnected": "Desconectado",
+    "server_running": "El servidor está ejecutándose en el puerto {0}",
+    "server_stopped": "El servidor se ha detenido",
+    "auto_start": "Inicio automático",
+    "debug_log": "Registro de depuración",
+    "max_connections": "Conexiones máx.",
+    "connection_info": "Info de conexión",
+    "http_url": "URL HTTP",
+    "copy": "Copiar",
+    "save_settings": "Guardar",
+    "settings_saved": "Ajustes guardados correctamente",
+    "server_started": "Servidor MCP iniciado",
+    "server_stopped_msg": "Servidor MCP detenido",
+    "failed_to_start": "Error al iniciar el servidor",
+    "failed_to_stop": "Error al detener el servidor",
+    "failed_to_save": "Error al guardar los ajustes",
+    "url_copied": "URL HTTP copiada al portapapeles",
+    "tool_manager": "Gestor de herramientas",
+    "open_tool_manager": "Abrir gestor de herramientas",
+    "create_config": "Crear configuración",
+    "edit_config": "Editar configuración",
+    "delete_config": "Eliminar configuración",
+    "import_config": "Importar configuración",
+    "export_config": "Exportar configuración",
+    "apply_config": "Aplicar configuración",
+    "select_all": "Seleccionar todo",
+    "deselect_all": "Deseleccionar todo",
+    "save_changes": "Guardar cambios",
+    "config_name": "Nombre de configuración",
+    "config_description": "Descripción de configuración",
+    "current_config": "Configuración actual",
+    "tool_management": "Gestión de herramientas",
+    "total_tools": "Total de herramientas",
+    "enabled_tools": "Activadas",
+    "disabled_tools": "Desactivadas",
+    "no_config_selected": "Ninguna configuración seleccionada",
+    "select_config_first": "Por favor, seleccione o cree una configuración primero",
+    "config_created": "Configuración creada correctamente",
+    "config_updated": "Configuración actualizada correctamente",
+    "config_deleted": "Configuración eliminada correctamente",
+    "config_applied": "Configuración aplicada correctamente",
+    "config_exported": "Configuración exportada correctamente",
+    "config_imported": "Configuración importada correctamente",
+    "confirm_delete": "Confirmar eliminación",
+    "delete_config_confirm": "¿Está seguro de eliminar la configuración \"{0}\"? Esta acción no se puede deshacer.",
+    "max_config_slots_reached": "Se alcanzó el máximo de configuraciones ({0})",
+    "invalid_config_format": "Formato de configuración no válido",
+    "invalid_json_format": "Formato JSON o estructura de configuración no válidos",
+    "server_tab": "Servidor",
+    "tools_tab": "Gestión de herramientas",
+    "available_tools": "Herramientas disponibles",
+    "scene_tools": "Herramientas de escena",
+    "node_tools": "Herramientas de nodo",
+    "component_tools": "Herramientas de componente",
+    "prefab_tools": "Herramientas de prefab",
+    "project_tools": "Herramientas de proyecto",
+    "debug_tools": "Herramientas de depuración",
+    "preferences_tools": "Preferencias",
+    "server_tools": "Herramientas de servidor",
+    "broadcast_tools": "Herramientas de difusión",
+    "scene_advanced_tools": "Herramientas de escena avanzadas",
+    "scene_view_tools": "Herramientas de vista de escena",
+    "reference_image_tools": "Herramientas de imagen de referencia",
+    "asset_advanced_tools": "Herramientas de assets avanzadas",
+    "validation_tools": "Herramientas de validación",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "Correo",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Código de máquina",
+    "purchase_renew": "Comprar / Renovar",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Elegir método de inicio de sesión",
+    "auth_subtitle": "Ingrese su correo y código de activación",
+    "email_label": "Correo electrónico",
+    "activation_code_label": "Código de activación",
+    "email_placeholder": "Ingrese correo",
+    "code_placeholder": "Ingrese código (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Activar",
+    "deactivate_button": "Desactivar",
+    "activating": "Activando...",
+    "deactivating": "Desactivando...",
+    "license_status": "Estado de licencia",
+    "license_type": "Tipo de licencia",
+    "expiry_date": "Fecha de vencimiento",
+    "days_remaining": "Días restantes",
+    "days_unit": "d",
+    "permanent": "Permanente",
+    "expiry_warning_title": "La licencia expira pronto",
+    "expiry_warning_message": "Su licencia expirará en {0} días. Por favor, renueve para evitar interrupciones.",
+    "renew_now": "Renovar ahora",
+    "i_understand": "Entendido",
+    "activation_success": "¡Licencia activada correctamente!",
+    "activation_failed": "Error de activación: {0}",
+    "invalid_code": "Formato de código de activación no válido",
+    "purchase_license": "Comprar licencia",
+    "renew_license": "Renovar licencia",
+    "contact_support": "Soporte",
+    "language_switch": "Español",
+    "version_label": "Versión",
+    "license_required": "Se requiere licencia para iniciar el servidor",
+    "license_check_failed": "Error en la verificación de licencia",
+
+    "status_stopped": "Detenido",
+    "status_running": "En ejecución",
+    "status_error": "Error de conexión",
+    "config_tab": "Config rápida",
+    "status_label": "Estado",
+    "connections_count": "Conexiones",
+    "transport_protocol": "Protocolo de transporte",
+    "transport_type": "Tipo de transporte",
+    "mcp_url": "URL MCP",
+    "port_fallback_title": "Puerto {0} no disponible: se cambió a {1}",
+    "port_fallback_reason": "El puerto {0} está reservado por el sistema o bloqueado por un firewall/antivirus (habitual en Windows con Hyper-V, WSL2 o Docker). El servidor funciona con normalidad en el nuevo puerto.",
+    "port_fallback_resynced": "Se actualizó la configuración de: {0}. Reinicie estos clientes para que el nuevo puerto surta efecto.",
+    "port_fallback_no_clients": "Si ya configuró clientes de IA, vuelva a configurarlos en el nuevo puerto desde la configuración con un clic.",
+    "port_fallback_dismiss": "Entendido",
+    "port_label": "Puerto",
+    "auto_start_label": "Inicio auto",
+    "debug_log_label": "Registro de depuración",
+    "max_connections_label": "Conexiones máx.",
+    "server_settings_title": "Ajustes del servidor",
+    "server_status_title": "Estado del servidor",
+    "connection_info_title": "Info de conexión",
+    "tools_count": "{0} herramientas",
+    "tools_stats": "{0} herramientas ({1} activadas / {2} desactivadas)",
+    "quick_config_title": "Config rápida de clientes MCP",
+    "quick_config_desc": "Configurar automáticamente el servidor MCP en editores AI y herramientas CLI",
+    "server_info": "Info del servidor",
+    "server_name_label": "Nombre del servidor",
+    "server_address": "Dirección del servidor",
+    "timeout_ms": "Tiempo de espera (ms)",
+    "auto_config_title": "Config auto (IDE + Codex CLI)",
+    "add_all": "Añadir todo",
+    "remove_all": "Eliminar todo",
+    "auto_config_note": "Haga clic para modificar automáticamente los archivos de config (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Configurado",
+    "not_configured": "No configurado",
+    "auto_config_btn": "Config auto",
+    "delete_btn": "Eliminar",
+    "copy_config": "Copiar config",
+    "open_config": "Abrir config",
+    "manual_config_title": "Config manual (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Actualizar comandos",
+    "manual_config_note": "Las siguientes herramientas CLI requieren ejecución manual en terminal",
+    "config_scope": "Ámbito de config:",
+    "scope_user": "Nivel de usuario",
+    "scope_project": "Nivel de proyecto",
+    "operation_log": "Registro de operaciones",
+    "no_logs": "Sin registros",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Basado en el protocolo Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "Sistema de herramientas - 13 herramientas intent-level, 150+ operaciones de editor, despacho de código de acción",
+    "config_copyright_line1": "Config rápida - Soporta Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Por favor ingrese correo y código de activación",
+    "permanent_label": "Permanente",
+    "logout_button": "Cerrar sesión",
+    "invite_code_label": "Código de invitación",
+    "copy_button": "Copiar",
+    "change_code_button": "Cambiar código",
+    "change_code_title": "Cambiar código de activación",
+    "change_code_desc": "Ingrese su nuevo código de activación. El enlace del dispositivo actual se liberará primero.",
+    "confirm_change": "Confirmar",
+    "cancel": "Cancelar",
+    "code_required": "Por favor ingrese un código de activación",
+    "expiry_inline_warning": "¡Expira pronto!",
+    "store_purchase_hint": "Si compró este plugin en Cocos Store, contácteme para obtener su código de activación.",
+    "license_expired_title": "Licencia expirada",
+    "license_expired_message": "Su licencia ha expirado y el servidor no puede iniciarse. Renueve o reactive para continuar.",
+    "go_to_login": "Ir a inicio de sesión",
+
+    "log_load_config_failed": "Error al cargar el estado de config: {0}",
+    "log_gen_cli_failed": "Error al generar comandos CLI: {0}",
+    "log_add_client_failed": "Error al añadir a {0}: {1}",
+    "log_remove_client_failed": "Error al eliminar de {0}: {1}",
+    "quick_config_dialog_title": "Configuración con un clic",
+    "config_operation_failed": "Error en la operación de configuración",
+    "config_file_not_found_changed_path": "Error de configuración: no se encontró el archivo de configuración. Es posible que {0} se haya instalado en una ruta personalizada.",
+    "log_batch_add_failed": "Error en la adición masiva: {0}",
+    "log_batch_remove_failed": "Error en la eliminación masiva: {0}",
+    "log_copied_config": "Config de {0} copiada al portapapeles",
+    "log_gen_config_failed": "Error al generar la config",
+    "log_copy_config_failed": "Error al copiar la config: {0}",
+    "log_copied_command": "Comando {0} copiado al portapapeles",
+    "log_copy_command_failed": "Error al copiar el comando: {0}",
+    "log_opened_config_file": "Archivo de config abierto: {0}",
+    "log_open_config_failed": "Error al abrir archivo de config",
+    "log_open_config_error": "Error al abrir archivo de config: {0}",
+
+    "update_available_title": "Actualización disponible",
+    "update_new_version": "¡La nueva versión v{0} está disponible!",
+    "update_now": "Actualizar ahora",
+    "update_not_now": "Ahora no",
+    "update_skip_version": "Omitir v{0}",
+    "check_for_updates": "Buscar actualizaciones",
+    "update_checking": "Comprobando...",
+    "update_no_update": "Está usando la última versión",
+    "update_urgency_critical": "Actualización crítica",
+    "update_urgency_high": "Actualización importante",
+    "update_current_version": "Versión actual: v{0}",
+    "update_changelog": "Registro de cambios",
+    "auth_choose_subtitle": "Elige un método de inicio de sesión para continuar",
+    "update_changelog_empty": "No se proporcionaron notas de la versión para esta versión.",
+    "subscription_login_title": "Cuenta de suscripción de VberAI",
+    "subscription_password_label": "Contraseña",
+    "subscription_password_placeholder": "Introduce la contraseña",
+    "subscription_login_button": "Iniciar sesión con VberAI",
+    "subscription_google_button": "Iniciar sesión con Google",
+    "subscription_google_pending": "Navegador abierto. Completa la autorización de Google y vuelve a Cocos Creator.",
+    "subscription_google_pending_button": "Esperando la autorización de Google...",
+    "subscription_register_button": "Crear una cuenta de VberAI",
+    "subscription_logging_in": "Iniciando sesión...",
+    "subscription_credentials_required": "Introduce el correo electrónico y la contraseña",
+    "subscription_login_success": "Sesión iniciada en la cuenta de suscripción",
+    "subscription_login_failed": "Error al iniciar sesión en la suscripción",
+    "subscription_not_entitled": "Tu suscripción actual no incluye Cocos 3.x MCP. Actualiza para continuar.",
+    "subscription_upgrade_to": "Actualiza a «{0}» para usar este producto",
+    "subscription_upgrade_action": "Mejorar suscripción",
+    "subscription_logged_in": "Cuenta con sesión iniciada",
+    "subscription_choose_button": "Cuenta de suscripción de VberAI",
+    "license_choose_button": "Código de activación",
+    "subscription_method_label": "Suscripción",
+    "back_to_login_choices": "← Elegir otro método de inicio de sesión",
+    "subscription_signed_out_other_device": "Sesión cerrada: tu cuenta se usó en otro dispositivo.",
+    "subscription_google_cancelled": "Se canceló el inicio de sesión con Google.",
+    "subscription_request_timeout": "Se agotó el tiempo de la solicitud. Comprueba tu red e inténtalo de nuevo.",
+    "subscription_network_error": "Falló la conexión de red. Comprueba tu red e inténtalo de nuevo.",
+    "subscription_server_error": "El servidor devolvió una respuesta no válida. Inténtalo más tarde.",
+    "subscription_google_authorization_failed": "No se completó la autorización de Google. Inténtalo de nuevo."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/fr.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP Serveur",
+    "description": "Serveur AI MCP pour Cocos Creator 3.8",
+    "panel_title": "Serveur MCP",
+    "open_panel": "Ouvrir le panneau MCP",
+    "start_server": "Démarrer le serveur",
+    "stop_server": "Arrêter le serveur",
+    "server_status": "État du serveur",
+    "port": "Port",
+    "settings": "Paramètres",
+    "connected": "Connecté",
+    "disconnected": "Déconnecté",
+    "server_running": "Le serveur fonctionne sur le port {0}",
+    "server_stopped": "Le serveur est arrêté",
+    "auto_start": "Démarrage automatique",
+    "debug_log": "Journal de débogage",
+    "max_connections": "Connexions max",
+    "connection_info": "Infos de connexion",
+    "http_url": "URL HTTP",
+    "copy": "Copier",
+    "save_settings": "Enregistrer",
+    "settings_saved": "Paramètres enregistrés avec succès",
+    "server_started": "Serveur MCP démarré",
+    "server_stopped_msg": "Serveur MCP arrêté",
+    "failed_to_start": "Échec du démarrage du serveur",
+    "failed_to_stop": "Échec de l'arrêt du serveur",
+    "failed_to_save": "Échec de l'enregistrement",
+    "url_copied": "URL HTTP copiée dans le presse-papiers",
+    "tool_manager": "Gestionnaire d'outils",
+    "open_tool_manager": "Ouvrir le gestionnaire d'outils",
+    "create_config": "Créer une configuration",
+    "edit_config": "Modifier la configuration",
+    "delete_config": "Supprimer la configuration",
+    "import_config": "Importer la configuration",
+    "export_config": "Exporter la configuration",
+    "apply_config": "Appliquer la configuration",
+    "select_all": "Tout sélectionner",
+    "deselect_all": "Tout désélectionner",
+    "save_changes": "Enregistrer les modifications",
+    "config_name": "Nom de configuration",
+    "config_description": "Description de configuration",
+    "current_config": "Configuration actuelle",
+    "tool_management": "Gestion des outils",
+    "total_tools": "Total des outils",
+    "enabled_tools": "Activés",
+    "disabled_tools": "Désactivés",
+    "no_config_selected": "Aucune configuration sélectionnée",
+    "select_config_first": "Veuillez d'abord sélectionner ou créer une configuration",
+    "config_created": "Configuration créée avec succès",
+    "config_updated": "Configuration mise à jour avec succès",
+    "config_deleted": "Configuration supprimée avec succès",
+    "config_applied": "Configuration appliquée avec succès",
+    "config_exported": "Configuration exportée avec succès",
+    "config_imported": "Configuration importée avec succès",
+    "confirm_delete": "Confirmer la suppression",
+    "delete_config_confirm": "Voulez-vous vraiment supprimer la configuration \"{0}\" ? Cette action est irréversible.",
+    "max_config_slots_reached": "Nombre maximal de configurations atteint ({0})",
+    "invalid_config_format": "Format de configuration invalide",
+    "invalid_json_format": "Format JSON ou structure de configuration invalide",
+    "server_tab": "Serveur",
+    "tools_tab": "Gestion des outils",
+    "available_tools": "Outils disponibles",
+    "scene_tools": "Outils de scène",
+    "node_tools": "Outils de nœud",
+    "component_tools": "Outils de composant",
+    "prefab_tools": "Outils de prefab",
+    "project_tools": "Outils de projet",
+    "debug_tools": "Outils de débogage",
+    "preferences_tools": "Préférences",
+    "server_tools": "Outils serveur",
+    "broadcast_tools": "Outils de diffusion",
+    "scene_advanced_tools": "Outils de scène avancés",
+    "scene_view_tools": "Outils de vue de scène",
+    "reference_image_tools": "Outils d'image de référence",
+    "asset_advanced_tools": "Outils d'assets avancés",
+    "validation_tools": "Outils de validation",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "E-mail",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Code machine",
+    "purchase_renew": "Acheter / Renouveler",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Choisir une méthode de connexion",
+    "auth_subtitle": "Entrez votre e-mail et votre code d'activation",
+    "email_label": "Adresse e-mail",
+    "activation_code_label": "Code d'activation",
+    "email_placeholder": "Entrez l'e-mail",
+    "code_placeholder": "Entrez le code (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Activer",
+    "deactivate_button": "Désactiver",
+    "activating": "Activation...",
+    "deactivating": "Désactivation...",
+    "license_status": "État de la licence",
+    "license_type": "Type de licence",
+    "expiry_date": "Date d'expiration",
+    "days_remaining": "Jours restants",
+    "days_unit": "j",
+    "permanent": "Permanent",
+    "expiry_warning_title": "Licence bientôt expirée",
+    "expiry_warning_message": "Votre licence expirera dans {0} jours. Veuillez renouveler pour éviter toute interruption.",
+    "renew_now": "Renouveler",
+    "i_understand": "J'ai compris",
+    "activation_success": "Licence activée avec succès !",
+    "activation_failed": "Échec de l'activation : {0}",
+    "invalid_code": "Format de code d'activation invalide",
+    "purchase_license": "Acheter une licence",
+    "renew_license": "Renouveler la licence",
+    "contact_support": "Support",
+    "language_switch": "Français",
+    "version_label": "Version",
+    "license_required": "Une licence est requise pour démarrer le serveur",
+    "license_check_failed": "Échec de la vérification de licence",
+
+    "status_stopped": "Arrêté",
+    "status_running": "En cours",
+    "status_error": "Échec de connexion",
+    "config_tab": "Config rapide",
+    "status_label": "État",
+    "connections_count": "Connexions",
+    "transport_protocol": "Protocole de transport",
+    "transport_type": "Type de transport",
+    "mcp_url": "URL MCP",
+    "port_fallback_title": "Port {0} indisponible — basculé vers {1}",
+    "port_fallback_reason": "Le port {0} est réservé par le système ou bloqué par un pare-feu/antivirus (fréquent sous Windows avec Hyper-V, WSL2 ou Docker). Le serveur fonctionne normalement sur le nouveau port.",
+    "port_fallback_resynced": "Configuration mise à jour pour : {0}. Redémarrez ces clients pour que le nouveau port prenne effet.",
+    "port_fallback_no_clients": "Si vous avez déjà configuré des clients IA, reconfigurez-les sur le nouveau port via la configuration en un clic.",
+    "port_fallback_dismiss": "Compris",
+    "port_label": "Port",
+    "auto_start_label": "Démarrage auto",
+    "debug_log_label": "Journal de débogage",
+    "max_connections_label": "Connexions max",
+    "server_settings_title": "Paramètres du serveur",
+    "server_status_title": "État du serveur",
+    "connection_info_title": "Infos de connexion",
+    "tools_count": "{0} outils",
+    "tools_stats": "{0} outils ({1} activés / {2} désactivés)",
+    "quick_config_title": "Config rapide des clients MCP",
+    "quick_config_desc": "Configurer automatiquement le serveur MCP dans les éditeurs AI et outils CLI",
+    "server_info": "Infos serveur",
+    "server_name_label": "Nom du serveur",
+    "server_address": "Adresse du serveur",
+    "timeout_ms": "Délai d'attente (ms)",
+    "auto_config_title": "Config auto (IDE + Codex CLI)",
+    "add_all": "Tout ajouter",
+    "remove_all": "Tout supprimer",
+    "auto_config_note": "Cliquez pour modifier automatiquement les fichiers de config (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Configuré",
+    "not_configured": "Non configuré",
+    "auto_config_btn": "Config auto",
+    "delete_btn": "Supprimer",
+    "copy_config": "Copier la config",
+    "open_config": "Ouvrir la config",
+    "manual_config_title": "Config manuelle (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Actualiser les commandes",
+    "manual_config_note": "Les outils CLI suivants nécessitent une exécution manuelle dans le terminal",
+    "config_scope": "Portée de config :",
+    "scope_user": "Niveau utilisateur",
+    "scope_project": "Niveau projet",
+    "operation_log": "Journal des opérations",
+    "no_logs": "Aucun enregistrement",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Basé sur le protocole Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "Système d'outils - 13 outils intent-level, 150+ opérations éditeur, dispatch par code d'action",
+    "config_copyright_line1": "Config rapide - Supporte Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Veuillez entrer l'e-mail et le code d'activation",
+    "permanent_label": "Permanent",
+    "logout_button": "Déconnexion",
+    "invite_code_label": "Code d'invitation",
+    "copy_button": "Copier",
+    "change_code_button": "Changer le code",
+    "change_code_title": "Changer le code d'activation",
+    "change_code_desc": "Entrez votre nouveau code d'activation. La liaison de l'appareil actuel sera d'abord libérée.",
+    "confirm_change": "Confirmer",
+    "cancel": "Annuler",
+    "code_required": "Veuillez entrer un code d'activation",
+    "expiry_inline_warning": "Expiration imminente !",
+    "store_purchase_hint": "Si vous avez acheté ce plugin sur Cocos Store, veuillez me contacter pour obtenir votre code d'activation.",
+    "license_expired_title": "Licence expirée",
+    "license_expired_message": "Votre licence a expiré et le serveur ne peut pas être démarré. Veuillez renouveler ou réactiver pour continuer.",
+    "go_to_login": "Se connecter",
+
+    "log_load_config_failed": "Échec du chargement de la config : {0}",
+    "log_gen_cli_failed": "Échec de la génération des commandes CLI : {0}",
+    "log_add_client_failed": "Échec de l'ajout à {0} : {1}",
+    "log_remove_client_failed": "Échec de la suppression de {0} : {1}",
+    "quick_config_dialog_title": "Configuration en un clic",
+    "config_operation_failed": "Échec de l'opération de configuration",
+    "config_file_not_found_changed_path": "Échec de la configuration : fichier de configuration introuvable. {0} a peut-être été installé dans un chemin personnalisé.",
+    "log_batch_add_failed": "Échec de l'ajout groupé : {0}",
+    "log_batch_remove_failed": "Échec de la suppression groupée : {0}",
+    "log_copied_config": "Config {0} copiée dans le presse-papiers",
+    "log_gen_config_failed": "Échec de la génération de la config",
+    "log_copy_config_failed": "Échec de la copie de la config : {0}",
+    "log_copied_command": "Commande {0} copiée dans le presse-papiers",
+    "log_copy_command_failed": "Échec de la copie de la commande : {0}",
+    "log_opened_config_file": "Fichier de config ouvert : {0}",
+    "log_open_config_failed": "Échec de l'ouverture du fichier de config",
+    "log_open_config_error": "Échec de l'ouverture du fichier de config : {0}",
+
+    "update_available_title": "Mise à jour disponible",
+    "update_new_version": "La nouvelle version v{0} est disponible !",
+    "update_now": "Mettre à jour",
+    "update_not_now": "Plus tard",
+    "update_skip_version": "Ignorer v{0}",
+    "check_for_updates": "Vérifier les mises à jour",
+    "update_checking": "Vérification...",
+    "update_no_update": "Vous utilisez la dernière version",
+    "update_urgency_critical": "Mise à jour critique",
+    "update_urgency_high": "Mise à jour importante",
+    "update_current_version": "Version actuelle : v{0}",
+    "update_changelog": "Journal des modifications",
+    "auth_choose_subtitle": "Choisissez une méthode de connexion pour continuer",
+    "update_changelog_empty": "Aucune note de version n'a été fournie pour cette version.",
+    "subscription_login_title": "Compte d'abonnement VberAI",
+    "subscription_password_label": "Mot de passe",
+    "subscription_password_placeholder": "Saisissez le mot de passe",
+    "subscription_login_button": "Se connecter avec VberAI",
+    "subscription_google_button": "Se connecter avec Google",
+    "subscription_google_pending": "Navigateur ouvert. Terminez l'autorisation Google, puis revenez à Cocos Creator.",
+    "subscription_google_pending_button": "En attente de l'autorisation Google...",
+    "subscription_register_button": "Créer un compte VberAI",
+    "subscription_logging_in": "Connexion en cours...",
+    "subscription_credentials_required": "Veuillez saisir l'e-mail et le mot de passe",
+    "subscription_login_success": "Connecté au compte d'abonnement",
+    "subscription_login_failed": "Échec de la connexion à l'abonnement",
+    "subscription_not_entitled": "Votre abonnement actuel n'inclut pas Cocos 3.x MCP. Effectuez une mise à niveau pour continuer.",
+    "subscription_upgrade_to": "Passez à « {0} » pour utiliser ce produit",
+    "subscription_upgrade_action": "Mettre à niveau l'abonnement",
+    "subscription_logged_in": "Compte connecté",
+    "subscription_choose_button": "Compte d'abonnement VberAI",
+    "license_choose_button": "Code d'activation",
+    "subscription_method_label": "Abonnement",
+    "back_to_login_choices": "← Choisir une autre méthode de connexion",
+    "subscription_signed_out_other_device": "Déconnecté : votre compte a été utilisé sur un autre appareil.",
+    "subscription_google_cancelled": "La connexion Google a été annulée.",
+    "subscription_request_timeout": "La requête a expiré. Vérifiez votre réseau et réessayez.",
+    "subscription_network_error": "Échec de la connexion réseau. Vérifiez votre réseau et réessayez.",
+    "subscription_server_error": "Le serveur a renvoyé une réponse non valide. Réessayez plus tard.",
+    "subscription_google_authorization_failed": "L'autorisation Google n'a pas été effectuée. Veuillez réessayer."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/ja.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP サーバー",
+    "description": "Cocos Creator 3.8 用 AI MCP サーバー",
+    "panel_title": "MCP サーバー",
+    "open_panel": "MCP パネルを開く",
+    "start_server": "サーバー起動",
+    "stop_server": "サーバー停止",
+    "server_status": "サーバー状態",
+    "port": "ポート",
+    "settings": "設定",
+    "connected": "接続済み",
+    "disconnected": "未接続",
+    "server_running": "サーバーはポート {0} で実行中",
+    "server_stopped": "サーバーは停止しました",
+    "auto_start": "自動起動",
+    "debug_log": "デバッグログ",
+    "max_connections": "最大接続数",
+    "connection_info": "接続情報",
+    "http_url": "HTTP URL",
+    "copy": "コピー",
+    "save_settings": "設定を保存",
+    "settings_saved": "設定の保存に成功しました",
+    "server_started": "MCP サーバーが起動しました",
+    "server_stopped_msg": "MCP サーバーが停止しました",
+    "failed_to_start": "サーバーの起動に失敗しました",
+    "failed_to_stop": "サーバーの停止に失敗しました",
+    "failed_to_save": "設定の保存に失敗しました",
+    "url_copied": "HTTP URL をクリップボードにコピーしました",
+    "tool_manager": "ツールマネージャー",
+    "open_tool_manager": "ツールマネージャーを開く",
+    "create_config": "設定を作成",
+    "edit_config": "設定を編集",
+    "delete_config": "設定を削除",
+    "import_config": "設定をインポート",
+    "export_config": "設定をエクスポート",
+    "apply_config": "設定を適用",
+    "select_all": "全選択",
+    "deselect_all": "全解除",
+    "save_changes": "変更を保存",
+    "config_name": "設定名",
+    "config_description": "設定の説明",
+    "current_config": "現在の設定",
+    "tool_management": "ツール管理",
+    "total_tools": "ツール合計",
+    "enabled_tools": "有効",
+    "disabled_tools": "無効",
+    "no_config_selected": "設定が選択されていません",
+    "select_config_first": "先に設定を選択するか、新しく作成してください",
+    "config_created": "設定の作成に成功しました",
+    "config_updated": "設定の更新に成功しました",
+    "config_deleted": "設定の削除に成功しました",
+    "config_applied": "設定の適用に成功しました",
+    "config_exported": "設定のエクスポートに成功しました",
+    "config_imported": "設定のインポートに成功しました",
+    "confirm_delete": "削除の確認",
+    "delete_config_confirm": "設定 \"{0}\" を削除してもよろしいですか?この操作は元に戻せません。",
+    "max_config_slots_reached": "設定スロットの上限に達しました ({0})",
+    "invalid_config_format": "無効な設定形式",
+    "invalid_json_format": "無効なJSON形式または設定構造",
+    "server_tab": "サーバー",
+    "tools_tab": "ツール管理",
+    "available_tools": "利用可能なツール",
+    "scene_tools": "シーンツール",
+    "node_tools": "ノードツール",
+    "component_tools": "コンポーネントツール",
+    "prefab_tools": "プレハブツール",
+    "project_tools": "プロジェクトツール",
+    "debug_tools": "デバッグツール",
+    "preferences_tools": "環境設定",
+    "server_tools": "サーバーツール",
+    "broadcast_tools": "ブロードキャストツール",
+    "scene_advanced_tools": "高度なシーンツール",
+    "scene_view_tools": "シーンビューツール",
+    "reference_image_tools": "参照画像ツール",
+    "asset_advanced_tools": "高度なアセットツール",
+    "validation_tools": "検証ツール",
+    "brand_name": "LiDaxian MCP シリーズ",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "メール",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "マシンID",
+    "purchase_renew": "購入 / 更新",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "ログイン方法を選択",
+    "auth_subtitle": "メールアドレスとアクティベーションコードを入力してください",
+    "email_label": "メールアドレス",
+    "activation_code_label": "アクティベーションコード",
+    "email_placeholder": "メールを入力",
+    "code_placeholder": "コードを入力 (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "アクティベート",
+    "deactivate_button": "無効化",
+    "activating": "アクティベート中...",
+    "deactivating": "無効化中...",
+    "license_status": "ライセンス状態",
+    "license_type": "ライセンス種別",
+    "expiry_date": "有効期限",
+    "days_remaining": "残り日数",
+    "days_unit": "日",
+    "permanent": "永久",
+    "expiry_warning_title": "ライセンスの有効期限が近づいています",
+    "expiry_warning_message": "ライセンスはあと {0} 日で期限切れになります。サービスの中断を防ぐため、更新してください。",
+    "renew_now": "今すぐ更新",
+    "i_understand": "了解しました",
+    "activation_success": "ライセンスのアクティベーションに成功しました!",
+    "activation_failed": "アクティベーション失敗: {0}",
+    "invalid_code": "無効なアクティベーションコード形式",
+    "purchase_license": "ライセンスを購入",
+    "renew_license": "ライセンスを更新",
+    "contact_support": "サポート",
+    "language_switch": "日本語",
+    "version_label": "バージョン",
+    "license_required": "サーバーの起動にはライセンスが必要です",
+    "license_check_failed": "ライセンスチェックに失敗しました",
+
+    "status_stopped": "停止中",
+    "status_running": "実行中",
+    "status_error": "接続失敗",
+    "config_tab": "クイック設定",
+    "status_label": "状態",
+    "connections_count": "接続数",
+    "transport_protocol": "トランスポートプロトコル",
+    "transport_type": "トランスポートタイプ",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "ポート {0} が使用できないため、{1} に切り替えました",
+    "port_fallback_reason": "ポート {0} はシステムに予約されているか、ファイアウォール/ウイルス対策ソフトにブロックされています(Hyper-V、WSL2、Docker を導入した Windows でよく起こります)。サーバーは新しいポートで正常に動作しています。",
+    "port_fallback_resynced": "次のクライアントの設定を更新しました:{0}。新しいポートを有効にするには再起動してください。",
+    "port_fallback_no_clients": "AI クライアントを設定済みの場合は、「ワンクリック設定」で新しいポートに設定し直してください。",
+    "port_fallback_dismiss": "了解",
+    "port_label": "ポート",
+    "auto_start_label": "自動起動",
+    "debug_log_label": "デバッグログ",
+    "max_connections_label": "最大接続数",
+    "server_settings_title": "サーバー設定",
+    "server_status_title": "サーバー状態",
+    "connection_info_title": "接続情報",
+    "tools_count": "{0} ツール",
+    "tools_stats": "{0} ツール ({1} 有効 / {2} 無効)",
+    "quick_config_title": "MCP クライアントのクイック設定",
+    "quick_config_desc": "現在のMCPサーバーを主要AIエディターやCLIツールに自動設定します",
+    "server_info": "サーバー情報",
+    "server_name_label": "サーバー名",
+    "server_address": "サーバーアドレス",
+    "timeout_ms": "タイムアウト (ms)",
+    "auto_config_title": "自動設定 (IDE エディター + Codex CLI)",
+    "add_all": "すべて追加",
+    "remove_all": "すべて削除",
+    "auto_config_note": "ボタンをクリックして設定ファイルを自動変更 (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "設定済み",
+    "not_configured": "未設定",
+    "auto_config_btn": "自動設定",
+    "delete_btn": "削除",
+    "copy_config": "設定をコピー",
+    "open_config": "設定を開く",
+    "manual_config_title": "手動設定 (Claude CLI + Gemini CLI)",
+    "refresh_commands": "コマンドを更新",
+    "manual_config_note": "以下のCLIツールはターミナルで手動実行が必要です",
+    "config_scope": "設定範囲:",
+    "scope_user": "ユーザーレベル",
+    "scope_project": "プロジェクトレベル",
+    "operation_log": "操作ログ",
+    "no_logs": "操作記録なし",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Streamable HTTP プロトコル (MCP 2025-03-26) 準拠",
+    "tools_copyright_line1": "ツールシステム - 13のインテントレベルツール、150+のエディター操作、アクションコードディスパッチ",
+    "config_copyright_line1": "クイック設定 - Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI 対応",
+    "email_required": "メールとアクティベーションコードを入力してください",
+    "permanent_label": "永久",
+    "logout_button": "ログアウト",
+    "invite_code_label": "招待コード",
+    "copy_button": "コピー",
+    "change_code_button": "コード変更",
+    "change_code_title": "アクティベーションコードの変更",
+    "change_code_desc": "新しいアクティベーションコードを入力してください。現在のデバイスバインドは先に解除されます。",
+    "confirm_change": "確認",
+    "cancel": "キャンセル",
+    "code_required": "アクティベーションコードを入力してください",
+    "expiry_inline_warning": "まもなく期限切れ!",
+    "store_purchase_hint": "Cocos Store で本プラグインを購入済みの場合は、アクティベーションコードの取得にご連絡ください。",
+    "license_expired_title": "ライセンスの有効期限切れ",
+    "license_expired_message": "ライセンスの有効期限が切れたため、サーバーを起動できません。続行するには更新または再アクティベートしてください。",
+    "go_to_login": "ログインへ",
+
+    "log_load_config_failed": "設定状態の読み込みに失敗: {0}",
+    "log_gen_cli_failed": "CLIコマンドの生成に失敗: {0}",
+    "log_add_client_failed": "{0} への追加に失敗: {1}",
+    "log_remove_client_failed": "{0} からの削除に失敗: {1}",
+    "quick_config_dialog_title": "ワンクリック設定",
+    "config_operation_failed": "設定操作に失敗しました",
+    "config_file_not_found_changed_path": "設定に失敗しました: 設定ファイルが見つかりません。{0} がカスタムパスにインストールされている可能性があります。",
+    "log_batch_add_failed": "一括追加に失敗: {0}",
+    "log_batch_remove_failed": "一括削除に失敗: {0}",
+    "log_copied_config": "{0} の設定をクリップボードにコピーしました",
+    "log_gen_config_failed": "設定の生成に失敗しました",
+    "log_copy_config_failed": "設定のコピーに失敗: {0}",
+    "log_copied_command": "{0} コマンドをクリップボードにコピーしました",
+    "log_copy_command_failed": "コマンドのコピーに失敗: {0}",
+    "log_opened_config_file": "設定ファイルを開きました: {0}",
+    "log_open_config_failed": "設定ファイルを開けませんでした",
+    "log_open_config_error": "設定ファイルを開けませんでした: {0}",
+
+    "update_available_title": "アップデートがあります",
+    "update_new_version": "新バージョン v{0} がリリースされました!",
+    "update_now": "今すぐ更新",
+    "update_not_now": "後で",
+    "update_skip_version": "v{0} をスキップ",
+    "check_for_updates": "アップデートを確認",
+    "update_checking": "確認中...",
+    "update_no_update": "最新バージョンです",
+    "update_urgency_critical": "緊急アップデート",
+    "update_urgency_high": "重要なアップデート",
+    "update_current_version": "現在のバージョン: v{0}",
+    "update_changelog": "変更履歴",
+    "auth_choose_subtitle": "サインイン方法を選択して続行してください",
+    "update_changelog_empty": "このバージョンのリリースノートはありません。",
+    "subscription_login_title": "VberAI サブスクリプションアカウント",
+    "subscription_password_label": "パスワード",
+    "subscription_password_placeholder": "パスワードを入力",
+    "subscription_login_button": "VberAI アカウントでログイン",
+    "subscription_google_button": "Google でログイン",
+    "subscription_google_pending": "ブラウザを開きました。Google 認証を完了してから Cocos Creator に戻ってください。",
+    "subscription_google_pending_button": "Google 認証を待っています...",
+    "subscription_register_button": "VberAI アカウントを作成",
+    "subscription_logging_in": "ログイン中...",
+    "subscription_credentials_required": "メールアドレスとパスワードを入力してください",
+    "subscription_login_success": "サブスクリプションアカウントにログインしました",
+    "subscription_login_failed": "サブスクリプションのログインに失敗しました",
+    "subscription_not_entitled": "現在のサブスクリプションには Cocos 3.x MCP が含まれていません。続行するにはアップグレードしてください。",
+    "subscription_upgrade_to": "このプロダクトを使用するには「{0}」にアップグレードしてください",
+    "subscription_upgrade_action": "サブスクリプションをアップグレード",
+    "subscription_logged_in": "ログイン中のアカウント",
+    "subscription_choose_button": "VberAI サブスクリプションアカウント",
+    "license_choose_button": "アクティベーションコード",
+    "subscription_method_label": "サブスク",
+    "back_to_login_choices": "← 別のサインイン方法を選択",
+    "subscription_signed_out_other_device": "サインアウトしました:アカウントが別のデバイスで使用されました。",
+    "subscription_google_cancelled": "Google ログインがキャンセルされました。",
+    "subscription_request_timeout": "リクエストがタイムアウトしました。ネットワークを確認して再試行してください。",
+    "subscription_network_error": "ネットワーク接続に失敗しました。ネットワークを確認して再試行してください。",
+    "subscription_server_error": "サーバーから無効な応答が返されました。後でもう一度お試しください。",
+    "subscription_google_authorization_failed": "Google 認証が完了しませんでした。もう一度お試しください。"
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/ko.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP 서버",
+    "description": "Cocos Creator 3.8용 AI MCP 서버",
+    "panel_title": "MCP 서버",
+    "open_panel": "MCP 패널 열기",
+    "start_server": "서버 시작",
+    "stop_server": "서버 중지",
+    "server_status": "서버 상태",
+    "port": "포트",
+    "settings": "설정",
+    "connected": "연결됨",
+    "disconnected": "연결 안 됨",
+    "server_running": "서버가 포트 {0}에서 실행 중입니다",
+    "server_stopped": "서버가 중지되었습니다",
+    "auto_start": "자동 시작",
+    "debug_log": "디버그 로그",
+    "max_connections": "최대 연결 수",
+    "connection_info": "연결 정보",
+    "http_url": "HTTP URL",
+    "copy": "복사",
+    "save_settings": "설정 저장",
+    "settings_saved": "설정이 저장되었습니다",
+    "server_started": "MCP 서버가 시작되었습니다",
+    "server_stopped_msg": "MCP 서버가 중지되었습니다",
+    "failed_to_start": "서버 시작 실패",
+    "failed_to_stop": "서버 중지 실패",
+    "failed_to_save": "설정 저장 실패",
+    "url_copied": "HTTP URL이 클립보드에 복사되었습니다",
+    "tool_manager": "도구 관리자",
+    "open_tool_manager": "도구 관리자 열기",
+    "create_config": "구성 생성",
+    "edit_config": "구성 편집",
+    "delete_config": "구성 삭제",
+    "import_config": "구성 가져오기",
+    "export_config": "구성 내보내기",
+    "apply_config": "구성 적용",
+    "select_all": "전체 선택",
+    "deselect_all": "전체 해제",
+    "save_changes": "변경 사항 저장",
+    "config_name": "구성 이름",
+    "config_description": "구성 설명",
+    "current_config": "현재 구성",
+    "tool_management": "도구 관리",
+    "total_tools": "전체 도구",
+    "enabled_tools": "활성화",
+    "disabled_tools": "비활성화",
+    "no_config_selected": "선택된 구성 없음",
+    "select_config_first": "먼저 구성을 선택하거나 새로 만들어 주세요",
+    "config_created": "구성이 생성되었습니다",
+    "config_updated": "구성이 업데이트되었습니다",
+    "config_deleted": "구성이 삭제되었습니다",
+    "config_applied": "구성이 적용되었습니다",
+    "config_exported": "구성이 내보내기되었습니다",
+    "config_imported": "구성이 가져오기되었습니다",
+    "confirm_delete": "삭제 확인",
+    "delete_config_confirm": "구성 \"{0}\"을(를) 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
+    "max_config_slots_reached": "최대 구성 슬롯에 도달했습니다 ({0})",
+    "invalid_config_format": "잘못된 구성 형식",
+    "invalid_json_format": "잘못된 JSON 형식 또는 구성 구조",
+    "server_tab": "서버",
+    "tools_tab": "도구 관리",
+    "available_tools": "사용 가능한 도구",
+    "scene_tools": "씬 도구",
+    "node_tools": "노드 도구",
+    "component_tools": "컴포넌트 도구",
+    "prefab_tools": "프리팹 도구",
+    "project_tools": "프로젝트 도구",
+    "debug_tools": "디버그 도구",
+    "preferences_tools": "환경설정",
+    "server_tools": "서버 도구",
+    "broadcast_tools": "브로드캐스트 도구",
+    "scene_advanced_tools": "고급 씬 도구",
+    "scene_view_tools": "씬 뷰 도구",
+    "reference_image_tools": "참조 이미지 도구",
+    "asset_advanced_tools": "고급 에셋 도구",
+    "validation_tools": "검증 도구",
+    "brand_name": "LiDaxian MCP 시리즈",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "이메일",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "머신 코드",
+    "purchase_renew": "구매 / 갱신",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "로그인 방식 선택",
+    "auth_subtitle": "이메일과 활성화 코드를 입력하세요",
+    "email_label": "이메일 주소",
+    "activation_code_label": "활성화 코드",
+    "email_placeholder": "이메일 입력",
+    "code_placeholder": "코드 입력 (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "활성화",
+    "deactivate_button": "비활성화",
+    "activating": "활성화 중...",
+    "deactivating": "비활성화 중...",
+    "license_status": "라이선스 상태",
+    "license_type": "라이선스 유형",
+    "expiry_date": "만료일",
+    "days_remaining": "남은 일수",
+    "days_unit": "일",
+    "permanent": "영구",
+    "expiry_warning_title": "라이선스 만료 임박",
+    "expiry_warning_message": "라이선스가 {0}일 후 만료됩니다. 서비스 중단을 방지하려면 갱신해 주세요.",
+    "renew_now": "지금 갱신",
+    "i_understand": "확인했습니다",
+    "activation_success": "라이선스 활성화에 성공했습니다!",
+    "activation_failed": "활성화 실패: {0}",
+    "invalid_code": "잘못된 활성화 코드 형식",
+    "purchase_license": "라이선스 구매",
+    "renew_license": "라이선스 갱신",
+    "contact_support": "지원",
+    "language_switch": "한국어",
+    "version_label": "버전",
+    "license_required": "서버를 시작하려면 라이선스가 필요합니다",
+    "license_check_failed": "라이선스 확인 실패",
+
+    "status_stopped": "중지됨",
+    "status_running": "실행 중",
+    "status_error": "연결 실패",
+    "config_tab": "빠른 설정",
+    "status_label": "상태",
+    "connections_count": "연결 수",
+    "transport_protocol": "전송 프로토콜",
+    "transport_type": "전송 유형",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "포트 {0}을(를) 사용할 수 없어 {1}(으)로 전환했습니다",
+    "port_fallback_reason": "포트 {0}이(가) 시스템에 예약되어 있거나 방화벽/백신에 의해 차단되었습니다(Hyper-V, WSL2 또는 Docker가 설치된 Windows에서 흔합니다). 서버는 새 포트에서 정상 실행 중입니다.",
+    "port_fallback_resynced": "다음 클라이언트의 설정을 업데이트했습니다: {0}. 새 포트를 적용하려면 다시 시작하세요.",
+    "port_fallback_no_clients": "AI 클라이언트를 설정한 적이 있다면 \"원클릭 설정\"에서 새 포트로 다시 설정하세요.",
+    "port_fallback_dismiss": "확인",
+    "port_label": "포트",
+    "auto_start_label": "자동 시작",
+    "debug_log_label": "디버그 로그",
+    "max_connections_label": "최대 연결 수",
+    "server_settings_title": "서버 설정",
+    "server_status_title": "서버 상태",
+    "connection_info_title": "연결 정보",
+    "tools_count": "{0}개 도구",
+    "tools_stats": "{0}개 도구 ({1} 활성화 / {2} 비활성화)",
+    "quick_config_title": "MCP 클라이언트 빠른 설정",
+    "quick_config_desc": "현재 MCP 서버를 주요 AI 에디터 및 CLI 도구에 자동 구성합니다",
+    "server_info": "서버 정보",
+    "server_name_label": "서버 이름",
+    "server_address": "서버 주소",
+    "timeout_ms": "타임아웃 (ms)",
+    "auto_config_title": "자동 구성 (IDE 에디터 + Codex CLI)",
+    "add_all": "전체 추가",
+    "remove_all": "전체 삭제",
+    "auto_config_note": "버튼을 클릭하여 구성 파일을 자동 수정합니다 (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "구성됨",
+    "not_configured": "미구성",
+    "auto_config_btn": "자동 구성",
+    "delete_btn": "삭제",
+    "copy_config": "구성 복사",
+    "open_config": "구성 열기",
+    "manual_config_title": "수동 구성 (Claude CLI + Gemini CLI)",
+    "refresh_commands": "명령 새로고침",
+    "manual_config_note": "다음 CLI 도구는 터미널에서 수동 실행이 필요합니다",
+    "config_scope": "구성 범위:",
+    "scope_user": "사용자 수준",
+    "scope_project": "프로젝트 수준",
+    "operation_log": "작업 로그",
+    "no_logs": "작업 기록 없음",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Streamable HTTP 프로토콜 (MCP 2025-03-26) 기반",
+    "tools_copyright_line1": "도구 시스템 - 13개 인텐트 레벨 도구, 150+ 에디터 작업, 액션 코드 디스패치",
+    "config_copyright_line1": "빠른 설정 - Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI 지원",
+    "email_required": "이메일과 활성화 코드를 입력하세요",
+    "permanent_label": "영구",
+    "logout_button": "로그아웃",
+    "invite_code_label": "초대 코드",
+    "copy_button": "복사",
+    "change_code_button": "코드 변경",
+    "change_code_title": "활성화 코드 변경",
+    "change_code_desc": "새 활성화 코드를 입력하세요. 현재 기기 바인딩이 먼저 해제됩니다.",
+    "confirm_change": "확인",
+    "cancel": "취소",
+    "code_required": "활성화 코드를 입력하세요",
+    "expiry_inline_warning": "곧 만료됩니다!",
+    "store_purchase_hint": "Cocos Store에서 본 플러그인을 구매하셨다면, 활성화 코드를 받으시려면 연락해 주세요.",
+    "license_expired_title": "라이선스 만료",
+    "license_expired_message": "라이선스가 만료되어 서버를 시작할 수 없습니다. 계속 사용하려면 갱신하거나 다시 활성화하세요.",
+    "go_to_login": "로그인으로 이동",
+
+    "log_load_config_failed": "구성 상태 로드 실패: {0}",
+    "log_gen_cli_failed": "CLI 명령 생성 실패: {0}",
+    "log_add_client_failed": "{0}에 추가 실패: {1}",
+    "log_remove_client_failed": "{0}에서 삭제 실패: {1}",
+    "quick_config_dialog_title": "원클릭 구성",
+    "config_operation_failed": "구성 작업 실패",
+    "config_file_not_found_changed_path": "구성 실패: 구성 파일을 찾을 수 없습니다. {0}이 사용자 지정 경로에 설치되었을 수 있습니다.",
+    "log_batch_add_failed": "일괄 추가 실패: {0}",
+    "log_batch_remove_failed": "일괄 삭제 실패: {0}",
+    "log_copied_config": "{0} 구성을 클립보드에 복사했습니다",
+    "log_gen_config_failed": "구성 생성 실패",
+    "log_copy_config_failed": "구성 복사 실패: {0}",
+    "log_copied_command": "{0} 명령을 클립보드에 복사했습니다",
+    "log_copy_command_failed": "명령 복사 실패: {0}",
+    "log_opened_config_file": "구성 파일을 열었습니다: {0}",
+    "log_open_config_failed": "구성 파일을 열 수 없습니다",
+    "log_open_config_error": "구성 파일을 열 수 없습니다: {0}",
+
+    "update_available_title": "업데이트 가능",
+    "update_new_version": "새 버전 v{0}이 출시되었습니다!",
+    "update_now": "지금 업데이트",
+    "update_not_now": "나중에",
+    "update_skip_version": "v{0} 건너뛰기",
+    "check_for_updates": "업데이트 확인",
+    "update_checking": "확인 중...",
+    "update_no_update": "최신 버전입니다",
+    "update_urgency_critical": "긴급 업데이트",
+    "update_urgency_high": "중요 업데이트",
+    "update_current_version": "현재 버전: v{0}",
+    "update_changelog": "변경 사항",
+    "auth_choose_subtitle": "계속하려면 로그인 방법을 선택하세요",
+    "update_changelog_empty": "이 버전에 대한 릴리스 노트가 없습니다.",
+    "subscription_login_title": "VberAI 구독 계정",
+    "subscription_password_label": "비밀번호",
+    "subscription_password_placeholder": "비밀번호 입력",
+    "subscription_login_button": "VberAI 계정으로 로그인",
+    "subscription_google_button": "Google로 로그인",
+    "subscription_google_pending": "브라우저가 열렸습니다. Google 인증을 완료한 후 Cocos Creator로 돌아오세요.",
+    "subscription_google_pending_button": "Google 인증을 기다리는 중...",
+    "subscription_register_button": "VberAI 계정 만들기",
+    "subscription_logging_in": "로그인 중...",
+    "subscription_credentials_required": "이메일과 비밀번호를 입력하세요",
+    "subscription_login_success": "구독 계정에 로그인했습니다",
+    "subscription_login_failed": "구독 로그인에 실패했습니다",
+    "subscription_not_entitled": "현재 구독에는 Cocos 3.x MCP가 포함되어 있지 않습니다. 계속하려면 업그레이드하세요.",
+    "subscription_upgrade_to": "이 제품을 사용하려면 「{0}」(으)로 업그레이드하세요",
+    "subscription_upgrade_action": "구독 업그레이드",
+    "subscription_logged_in": "로그인된 계정",
+    "subscription_choose_button": "VberAI 구독 계정",
+    "license_choose_button": "활성화 코드",
+    "subscription_method_label": "구독 계정",
+    "back_to_login_choices": "← 다른 로그인 방법 선택",
+    "subscription_signed_out_other_device": "로그아웃됨: 계정이 다른 기기에서 사용되었습니다.",
+    "subscription_google_cancelled": "Google 로그인이 취소되었습니다.",
+    "subscription_request_timeout": "요청 시간이 초과되었습니다. 네트워크를 확인하고 다시 시도하세요.",
+    "subscription_network_error": "네트워크 연결에 실패했습니다. 네트워크를 확인하고 다시 시도하세요.",
+    "subscription_server_error": "서버가 잘못된 응답을 반환했습니다. 나중에 다시 시도하세요.",
+    "subscription_google_authorization_failed": "Google 인증이 완료되지 않았습니다. 다시 시도하세요."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/pt.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP Servidor",
+    "description": "Servidor AI MCP para Cocos Creator 3.8",
+    "panel_title": "Servidor MCP",
+    "open_panel": "Abrir painel MCP",
+    "start_server": "Iniciar servidor",
+    "stop_server": "Parar servidor",
+    "server_status": "Estado do servidor",
+    "port": "Porta",
+    "settings": "Configurações",
+    "connected": "Conectado",
+    "disconnected": "Desconectado",
+    "server_running": "O servidor está em execução na porta {0}",
+    "server_stopped": "O servidor foi parado",
+    "auto_start": "Início automático",
+    "debug_log": "Log de depuração",
+    "max_connections": "Conexões máx.",
+    "connection_info": "Info de conexão",
+    "http_url": "URL HTTP",
+    "copy": "Copiar",
+    "save_settings": "Salvar",
+    "settings_saved": "Configurações salvas com sucesso",
+    "server_started": "Servidor MCP iniciado",
+    "server_stopped_msg": "Servidor MCP parado",
+    "failed_to_start": "Falha ao iniciar o servidor",
+    "failed_to_stop": "Falha ao parar o servidor",
+    "failed_to_save": "Falha ao salvar configurações",
+    "url_copied": "URL HTTP copiada para a área de transferência",
+    "tool_manager": "Gerenciador de ferramentas",
+    "open_tool_manager": "Abrir gerenciador de ferramentas",
+    "create_config": "Criar configuração",
+    "edit_config": "Editar configuração",
+    "delete_config": "Excluir configuração",
+    "import_config": "Importar configuração",
+    "export_config": "Exportar configuração",
+    "apply_config": "Aplicar configuração",
+    "select_all": "Selecionar tudo",
+    "deselect_all": "Desmarcar tudo",
+    "save_changes": "Salvar alterações",
+    "config_name": "Nome da configuração",
+    "config_description": "Descrição da configuração",
+    "current_config": "Configuração atual",
+    "tool_management": "Gestão de ferramentas",
+    "total_tools": "Total de ferramentas",
+    "enabled_tools": "Ativadas",
+    "disabled_tools": "Desativadas",
+    "no_config_selected": "Nenhuma configuração selecionada",
+    "select_config_first": "Por favor, selecione ou crie uma configuração primeiro",
+    "config_created": "Configuração criada com sucesso",
+    "config_updated": "Configuração atualizada com sucesso",
+    "config_deleted": "Configuração excluída com sucesso",
+    "config_applied": "Configuração aplicada com sucesso",
+    "config_exported": "Configuração exportada com sucesso",
+    "config_imported": "Configuração importada com sucesso",
+    "confirm_delete": "Confirmar exclusão",
+    "delete_config_confirm": "Tem certeza de que deseja excluir a configuração \"{0}\"? Esta ação não pode ser desfeita.",
+    "max_config_slots_reached": "Número máximo de configurações atingido ({0})",
+    "invalid_config_format": "Formato de configuração inválido",
+    "invalid_json_format": "Formato JSON ou estrutura de configuração inválidos",
+    "server_tab": "Servidor",
+    "tools_tab": "Gestão de ferramentas",
+    "available_tools": "Ferramentas disponíveis",
+    "scene_tools": "Ferramentas de cena",
+    "node_tools": "Ferramentas de nó",
+    "component_tools": "Ferramentas de componente",
+    "prefab_tools": "Ferramentas de prefab",
+    "project_tools": "Ferramentas de projeto",
+    "debug_tools": "Ferramentas de depuração",
+    "preferences_tools": "Preferências",
+    "server_tools": "Ferramentas de servidor",
+    "broadcast_tools": "Ferramentas de broadcast",
+    "scene_advanced_tools": "Ferramentas de cena avançadas",
+    "scene_view_tools": "Ferramentas de visualização de cena",
+    "reference_image_tools": "Ferramentas de imagem de referência",
+    "asset_advanced_tools": "Ferramentas de assets avançadas",
+    "validation_tools": "Ferramentas de validação",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "E-mail",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Código da máquina",
+    "purchase_renew": "Comprar / Renovar",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Escolher método de login",
+    "auth_subtitle": "Digite seu e-mail e código de ativação",
+    "email_label": "Endereço de e-mail",
+    "activation_code_label": "Código de ativação",
+    "email_placeholder": "Digite o e-mail",
+    "code_placeholder": "Digite o código (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Ativar",
+    "deactivate_button": "Desativar",
+    "activating": "Ativando...",
+    "deactivating": "Desativando...",
+    "license_status": "Estado da licença",
+    "license_type": "Tipo de licença",
+    "expiry_date": "Data de expiração",
+    "days_remaining": "Dias restantes",
+    "days_unit": "d",
+    "permanent": "Permanente",
+    "expiry_warning_title": "Licença expirando em breve",
+    "expiry_warning_message": "Sua licença expirará em {0} dias. Por favor, renove para evitar interrupções.",
+    "renew_now": "Renovar agora",
+    "i_understand": "Entendido",
+    "activation_success": "Licença ativada com sucesso!",
+    "activation_failed": "Falha na ativação: {0}",
+    "invalid_code": "Formato de código de ativação inválido",
+    "purchase_license": "Comprar licença",
+    "renew_license": "Renovar licença",
+    "contact_support": "Suporte",
+    "language_switch": "Português",
+    "version_label": "Versão",
+    "license_required": "É necessária uma licença para iniciar o servidor",
+    "license_check_failed": "Falha na verificação de licença",
+
+    "status_stopped": "Parado",
+    "status_running": "Em execução",
+    "status_error": "Falha na conexão",
+    "config_tab": "Config rápida",
+    "status_label": "Estado",
+    "connections_count": "Conexões",
+    "transport_protocol": "Protocolo de transporte",
+    "transport_type": "Tipo de transporte",
+    "mcp_url": "URL MCP",
+    "port_fallback_title": "Porta {0} indisponível — alterada para {1}",
+    "port_fallback_reason": "A porta {0} está reservada pelo sistema ou bloqueada por firewall/antivírus (comum no Windows com Hyper-V, WSL2 ou Docker). O servidor está funcionando normalmente na nova porta.",
+    "port_fallback_resynced": "Configuração atualizada para: {0}. Reinicie esses clientes para que a nova porta tenha efeito.",
+    "port_fallback_no_clients": "Se você já configurou clientes de IA, configure-os novamente para a nova porta pela configuração com um clique.",
+    "port_fallback_dismiss": "Entendi",
+    "port_label": "Porta",
+    "auto_start_label": "Início auto",
+    "debug_log_label": "Log de depuração",
+    "max_connections_label": "Conexões máx.",
+    "server_settings_title": "Configurações do servidor",
+    "server_status_title": "Estado do servidor",
+    "connection_info_title": "Info de conexão",
+    "tools_count": "{0} ferramentas",
+    "tools_stats": "{0} ferramentas ({1} ativadas / {2} desativadas)",
+    "quick_config_title": "Config rápida de clientes MCP",
+    "quick_config_desc": "Configurar automaticamente o servidor MCP em editores AI e ferramentas CLI",
+    "server_info": "Info do servidor",
+    "server_name_label": "Nome do servidor",
+    "server_address": "Endereço do servidor",
+    "timeout_ms": "Tempo limite (ms)",
+    "auto_config_title": "Config auto (IDE + Codex CLI)",
+    "add_all": "Adicionar tudo",
+    "remove_all": "Remover tudo",
+    "auto_config_note": "Clique para modificar automaticamente os arquivos de config (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Configurado",
+    "not_configured": "Não configurado",
+    "auto_config_btn": "Config auto",
+    "delete_btn": "Excluir",
+    "copy_config": "Copiar config",
+    "open_config": "Abrir config",
+    "manual_config_title": "Config manual (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Atualizar comandos",
+    "manual_config_note": "As seguintes ferramentas CLI requerem execução manual no terminal",
+    "config_scope": "Escopo de config:",
+    "scope_user": "Nível de usuário",
+    "scope_project": "Nível de projeto",
+    "operation_log": "Log de operações",
+    "no_logs": "Sem registros",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Baseado no protocolo Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "Sistema de ferramentas - 13 ferramentas intent-level, 150+ operações de editor, despacho de código de ação",
+    "config_copyright_line1": "Config rápida - Suporta Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Por favor, digite e-mail e código de ativação",
+    "permanent_label": "Permanente",
+    "logout_button": "Sair",
+    "invite_code_label": "Código de convite",
+    "copy_button": "Copiar",
+    "change_code_button": "Alterar código",
+    "change_code_title": "Alterar código de ativação",
+    "change_code_desc": "Digite seu novo código de ativação. A vinculação do dispositivo atual será liberada primeiro.",
+    "confirm_change": "Confirmar",
+    "cancel": "Cancelar",
+    "code_required": "Por favor, digite um código de ativação",
+    "expiry_inline_warning": "Expirando em breve!",
+    "store_purchase_hint": "Se você comprou este plugin na Cocos Store, entre em contato comigo para obter seu código de ativação.",
+    "license_expired_title": "Licença expirada",
+    "license_expired_message": "Sua licença expirou e o servidor não pode ser iniciado. Renove ou reative para continuar.",
+    "go_to_login": "Ir para login",
+
+    "log_load_config_failed": "Falha ao carregar estado da config: {0}",
+    "log_gen_cli_failed": "Falha ao gerar comandos CLI: {0}",
+    "log_add_client_failed": "Falha ao adicionar a {0}: {1}",
+    "log_remove_client_failed": "Falha ao remover de {0}: {1}",
+    "quick_config_dialog_title": "Configuração com um clique",
+    "config_operation_failed": "Falha na operação de configuração",
+    "config_file_not_found_changed_path": "Falha na configuração: arquivo de configuração não encontrado. {0} pode ter sido instalado em um caminho personalizado.",
+    "log_batch_add_failed": "Falha na adição em lote: {0}",
+    "log_batch_remove_failed": "Falha na remoção em lote: {0}",
+    "log_copied_config": "Config de {0} copiada para a área de transferência",
+    "log_gen_config_failed": "Falha ao gerar config",
+    "log_copy_config_failed": "Falha ao copiar config: {0}",
+    "log_copied_command": "Comando {0} copiado para a área de transferência",
+    "log_copy_command_failed": "Falha ao copiar comando: {0}",
+    "log_opened_config_file": "Arquivo de config aberto: {0}",
+    "log_open_config_failed": "Falha ao abrir arquivo de config",
+    "log_open_config_error": "Falha ao abrir arquivo de config: {0}",
+
+    "update_available_title": "Atualização disponível",
+    "update_new_version": "A nova versão v{0} está disponível!",
+    "update_now": "Atualizar agora",
+    "update_not_now": "Agora não",
+    "update_skip_version": "Pular v{0}",
+    "check_for_updates": "Verificar atualizações",
+    "update_checking": "Verificando...",
+    "update_no_update": "Você está usando a versão mais recente",
+    "update_urgency_critical": "Atualização crítica",
+    "update_urgency_high": "Atualização importante",
+    "update_current_version": "Versão atual: v{0}",
+    "update_changelog": "Registro de alterações",
+    "auth_choose_subtitle": "Escolha um método de login para continuar",
+    "update_changelog_empty": "Nenhuma nota de versão foi fornecida para esta versão.",
+    "subscription_login_title": "Conta de assinatura VberAI",
+    "subscription_password_label": "Senha",
+    "subscription_password_placeholder": "Digite a senha",
+    "subscription_login_button": "Entrar com VberAI",
+    "subscription_google_button": "Entrar com o Google",
+    "subscription_google_pending": "Navegador aberto. Conclua a autorização do Google e volte ao Cocos Creator.",
+    "subscription_google_pending_button": "Aguardando a autorização do Google...",
+    "subscription_register_button": "Criar uma conta VberAI",
+    "subscription_logging_in": "Entrando...",
+    "subscription_credentials_required": "Digite o e-mail e a senha",
+    "subscription_login_success": "Conectado à conta de assinatura",
+    "subscription_login_failed": "Falha ao entrar na assinatura",
+    "subscription_not_entitled": "Sua assinatura atual não inclui o Cocos 3.x MCP. Faça upgrade para continuar.",
+    "subscription_upgrade_to": "Faça upgrade para \"{0}\" para usar este produto",
+    "subscription_upgrade_action": "Fazer upgrade da assinatura",
+    "subscription_logged_in": "Conta conectada",
+    "subscription_choose_button": "Conta de assinatura VberAI",
+    "license_choose_button": "Código de ativação",
+    "subscription_method_label": "Assinatura",
+    "back_to_login_choices": "← Escolher outro método de login",
+    "subscription_signed_out_other_device": "Desconectado: sua conta foi usada em outro dispositivo.",
+    "subscription_google_cancelled": "O login com o Google foi cancelado.",
+    "subscription_request_timeout": "A solicitação expirou. Verifique sua rede e tente novamente.",
+    "subscription_network_error": "Falha na conexão de rede. Verifique sua rede e tente novamente.",
+    "subscription_server_error": "O servidor retornou uma resposta inválida. Tente novamente mais tarde.",
+    "subscription_google_authorization_failed": "A autorização do Google não foi concluída. Tente novamente."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/ru.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP Сервер",
+    "description": "AI MCP сервер для Cocos Creator 3.8",
+    "panel_title": "MCP Сервер",
+    "open_panel": "Открыть панель MCP",
+    "start_server": "Запустить сервер",
+    "stop_server": "Остановить сервер",
+    "server_status": "Состояние сервера",
+    "port": "Порт",
+    "settings": "Настройки",
+    "connected": "Подключено",
+    "disconnected": "Отключено",
+    "server_running": "Сервер работает на порту {0}",
+    "server_stopped": "Сервер остановлен",
+    "auto_start": "Автозапуск",
+    "debug_log": "Журнал отладки",
+    "max_connections": "Макс. подключений",
+    "connection_info": "Информация о подключении",
+    "http_url": "HTTP URL",
+    "copy": "Копировать",
+    "save_settings": "Сохранить",
+    "settings_saved": "Настройки успешно сохранены",
+    "server_started": "MCP сервер запущен",
+    "server_stopped_msg": "MCP сервер остановлен",
+    "failed_to_start": "Не удалось запустить сервер",
+    "failed_to_stop": "Не удалось остановить сервер",
+    "failed_to_save": "Не удалось сохранить настройки",
+    "url_copied": "HTTP URL скопирован в буфер обмена",
+    "tool_manager": "Менеджер инструментов",
+    "open_tool_manager": "Открыть менеджер инструментов",
+    "create_config": "Создать конфигурацию",
+    "edit_config": "Редактировать конфигурацию",
+    "delete_config": "Удалить конфигурацию",
+    "import_config": "Импортировать конфигурацию",
+    "export_config": "Экспортировать конфигурацию",
+    "apply_config": "Применить конфигурацию",
+    "select_all": "Выбрать все",
+    "deselect_all": "Снять все",
+    "save_changes": "Сохранить изменения",
+    "config_name": "Имя конфигурации",
+    "config_description": "Описание конфигурации",
+    "current_config": "Текущая конфигурация",
+    "tool_management": "Управление инструментами",
+    "total_tools": "Всего инструментов",
+    "enabled_tools": "Включено",
+    "disabled_tools": "Отключено",
+    "no_config_selected": "Конфигурация не выбрана",
+    "select_config_first": "Пожалуйста, сначала выберите или создайте конфигурацию",
+    "config_created": "Конфигурация успешно создана",
+    "config_updated": "Конфигурация успешно обновлена",
+    "config_deleted": "Конфигурация успешно удалена",
+    "config_applied": "Конфигурация успешно применена",
+    "config_exported": "Конфигурация успешно экспортирована",
+    "config_imported": "Конфигурация успешно импортирована",
+    "confirm_delete": "Подтвердить удаление",
+    "delete_config_confirm": "Вы уверены, что хотите удалить конфигурацию \"{0}\"? Это действие нельзя отменить.",
+    "max_config_slots_reached": "Достигнуто максимальное количество конфигураций ({0})",
+    "invalid_config_format": "Недопустимый формат конфигурации",
+    "invalid_json_format": "Недопустимый формат JSON или структура конфигурации",
+    "server_tab": "Сервер",
+    "tools_tab": "Управление инструментами",
+    "available_tools": "Доступные инструменты",
+    "scene_tools": "Инструменты сцены",
+    "node_tools": "Инструменты узлов",
+    "component_tools": "Инструменты компонентов",
+    "prefab_tools": "Инструменты префабов",
+    "project_tools": "Инструменты проекта",
+    "debug_tools": "Инструменты отладки",
+    "preferences_tools": "Настройки",
+    "server_tools": "Серверные инструменты",
+    "broadcast_tools": "Инструменты трансляции",
+    "scene_advanced_tools": "Расширенные инструменты сцены",
+    "scene_view_tools": "Инструменты просмотра сцены",
+    "reference_image_tools": "Инструменты эталонных изображений",
+    "asset_advanced_tools": "Расширенные инструменты ресурсов",
+    "validation_tools": "Инструменты валидации",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "Эл. почта",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Код машины",
+    "purchase_renew": "Купить / Продлить",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Выберите способ входа",
+    "auth_subtitle": "Введите email и код активации",
+    "email_label": "Адрес электронной почты",
+    "activation_code_label": "Код активации",
+    "email_placeholder": "Введите email",
+    "code_placeholder": "Введите код (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Активировать",
+    "deactivate_button": "Деактивировать",
+    "activating": "Активация...",
+    "deactivating": "Деактивация...",
+    "license_status": "Состояние лицензии",
+    "license_type": "Тип лицензии",
+    "expiry_date": "Дата истечения",
+    "days_remaining": "Осталось дней",
+    "days_unit": "д",
+    "permanent": "Бессрочная",
+    "expiry_warning_title": "Срок лицензии скоро истекает",
+    "expiry_warning_message": "Ваша лицензия истекает через {0} дней. Пожалуйста, продлите, чтобы избежать прерывания.",
+    "renew_now": "Продлить сейчас",
+    "i_understand": "Понятно",
+    "activation_success": "Лицензия успешно активирована!",
+    "activation_failed": "Ошибка активации: {0}",
+    "invalid_code": "Неверный формат кода активации",
+    "purchase_license": "Купить лицензию",
+    "renew_license": "Продлить лицензию",
+    "contact_support": "Поддержка",
+    "language_switch": "Русский",
+    "version_label": "Версия",
+    "license_required": "Для запуска сервера требуется лицензия",
+    "license_check_failed": "Ошибка проверки лицензии",
+
+    "status_stopped": "Остановлен",
+    "status_running": "Работает",
+    "status_error": "Ошибка подключения",
+    "config_tab": "Быстрая настройка",
+    "status_label": "Состояние",
+    "connections_count": "Подключения",
+    "transport_protocol": "Транспортный протокол",
+    "transport_type": "Тип транспорта",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "Порт {0} недоступен — выполнен переход на {1}",
+    "port_fallback_reason": "Порт {0} зарезервирован системой или заблокирован брандмауэром/антивирусом (часто встречается в Windows с Hyper-V, WSL2 или Docker). Сервер нормально работает на новом порту.",
+    "port_fallback_resynced": "Обновлена конфигурация для: {0}. Перезапустите эти клиенты, чтобы новый порт вступил в силу.",
+    "port_fallback_no_clients": "Если вы уже настраивали ИИ-клиенты, перенастройте их на новый порт через конфигурацию в один клик.",
+    "port_fallback_dismiss": "Понятно",
+    "port_label": "Порт",
+    "auto_start_label": "Автозапуск",
+    "debug_log_label": "Журнал отладки",
+    "max_connections_label": "Макс. подключений",
+    "server_settings_title": "Настройки сервера",
+    "server_status_title": "Состояние сервера",
+    "connection_info_title": "Информация о подключении",
+    "tools_count": "{0} инструментов",
+    "tools_stats": "{0} инструментов ({1} включено / {2} отключено)",
+    "quick_config_title": "Быстрая настройка клиентов MCP",
+    "quick_config_desc": "Автоматическая настройка MCP сервера в AI-редакторах и CLI-инструментах",
+    "server_info": "Информация о сервере",
+    "server_name_label": "Имя сервера",
+    "server_address": "Адрес сервера",
+    "timeout_ms": "Тайм-аут (мс)",
+    "auto_config_title": "Автонастройка (IDE + Codex CLI)",
+    "add_all": "Добавить все",
+    "remove_all": "Удалить все",
+    "auto_config_note": "Нажмите для автоматического изменения файлов конфигурации (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Настроено",
+    "not_configured": "Не настроено",
+    "auto_config_btn": "Автонастройка",
+    "delete_btn": "Удалить",
+    "copy_config": "Копировать конфиг",
+    "open_config": "Открыть конфиг",
+    "manual_config_title": "Ручная настройка (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Обновить команды",
+    "manual_config_note": "Следующие CLI-инструменты требуют ручного выполнения в терминале",
+    "config_scope": "Область конфигурации:",
+    "scope_user": "Уровень пользователя",
+    "scope_project": "Уровень проекта",
+    "operation_log": "Журнал операций",
+    "no_logs": "Нет записей",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "На основе протокола Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "Система инструментов - 13 intent-level инструментов, 150+ операций редактора, диспетчеризация action-кодов",
+    "config_copyright_line1": "Быстрая настройка - Поддержка Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Пожалуйста, введите email и код активации",
+    "permanent_label": "Бессрочная",
+    "logout_button": "Выйти",
+    "invite_code_label": "Код приглашения",
+    "copy_button": "Копировать",
+    "change_code_button": "Сменить код",
+    "change_code_title": "Смена кода активации",
+    "change_code_desc": "Введите новый код активации. Привязка текущего устройства будет сначала снята.",
+    "confirm_change": "Подтвердить",
+    "cancel": "Отмена",
+    "code_required": "Пожалуйста, введите код активации",
+    "expiry_inline_warning": "Скоро истекает!",
+    "store_purchase_hint": "Если вы приобрели этот плагин в Cocos Store, свяжитесь со мной для получения кода активации.",
+    "license_expired_title": "Лицензия истекла",
+    "license_expired_message": "Ваша лицензия истекла, сервер не может быть запущен. Пожалуйста, продлите или повторно активируйте для продолжения.",
+    "go_to_login": "Перейти к входу",
+
+    "log_load_config_failed": "Не удалось загрузить состояние конфигурации: {0}",
+    "log_gen_cli_failed": "Не удалось сгенерировать команды CLI: {0}",
+    "log_add_client_failed": "Не удалось добавить в {0}: {1}",
+    "log_remove_client_failed": "Не удалось удалить из {0}: {1}",
+    "quick_config_dialog_title": "Настройка в один клик",
+    "config_operation_failed": "Операция настройки не удалась",
+    "config_file_not_found_changed_path": "Ошибка настройки: файл конфигурации не найден. Возможно, {0} установлен в пользовательский путь.",
+    "log_batch_add_failed": "Пакетное добавление не удалось: {0}",
+    "log_batch_remove_failed": "Пакетное удаление не удалось: {0}",
+    "log_copied_config": "Конфигурация {0} скопирована в буфер обмена",
+    "log_gen_config_failed": "Не удалось сгенерировать конфигурацию",
+    "log_copy_config_failed": "Не удалось скопировать конфигурацию: {0}",
+    "log_copied_command": "Команда {0} скопирована в буфер обмена",
+    "log_copy_command_failed": "Не удалось скопировать команду: {0}",
+    "log_opened_config_file": "Файл конфигурации открыт: {0}",
+    "log_open_config_failed": "Не удалось открыть файл конфигурации",
+    "log_open_config_error": "Не удалось открыть файл конфигурации: {0}",
+
+    "update_available_title": "Доступно обновление",
+    "update_new_version": "Новая версия v{0} доступна!",
+    "update_now": "Обновить сейчас",
+    "update_not_now": "Позже",
+    "update_skip_version": "Пропустить v{0}",
+    "check_for_updates": "Проверить обновления",
+    "update_checking": "Проверка...",
+    "update_no_update": "У вас последняя версия",
+    "update_urgency_critical": "Критическое обновление",
+    "update_urgency_high": "Важное обновление",
+    "update_current_version": "Текущая версия: v{0}",
+    "update_changelog": "Список изменений",
+    "auth_choose_subtitle": "Выберите способ входа, чтобы продолжить",
+    "update_changelog_empty": "Для этой версии не указаны примечания к выпуску.",
+    "subscription_login_title": "Аккаунт подписки VberAI",
+    "subscription_password_label": "Пароль",
+    "subscription_password_placeholder": "Введите пароль",
+    "subscription_login_button": "Войти через VberAI",
+    "subscription_google_button": "Войти через Google",
+    "subscription_google_pending": "Браузер открыт. Завершите авторизацию Google, затем вернитесь в Cocos Creator.",
+    "subscription_google_pending_button": "Ожидание авторизации Google...",
+    "subscription_register_button": "Создать аккаунт VberAI",
+    "subscription_logging_in": "Вход...",
+    "subscription_credentials_required": "Введите адрес электронной почты и пароль",
+    "subscription_login_success": "Вход в аккаунт подписки выполнен",
+    "subscription_login_failed": "Не удалось войти в аккаунт подписки",
+    "subscription_not_entitled": "Ваша текущая подписка не включает Cocos 3.x MCP. Оформите повышение, чтобы продолжить.",
+    "subscription_upgrade_to": "Перейдите на «{0}», чтобы использовать этот продукт",
+    "subscription_upgrade_action": "Повысить подписку",
+    "subscription_logged_in": "Вошедший аккаунт",
+    "subscription_choose_button": "Аккаунт подписки VberAI",
+    "license_choose_button": "Код активации",
+    "subscription_method_label": "Подписка",
+    "back_to_login_choices": "← Выбрать другой способ входа",
+    "subscription_signed_out_other_device": "Выполнен выход: ваш аккаунт использовался на другом устройстве.",
+    "subscription_google_cancelled": "Вход через Google отменён.",
+    "subscription_request_timeout": "Время ожидания запроса истекло. Проверьте сеть и повторите попытку.",
+    "subscription_network_error": "Сбой сетевого подключения. Проверьте сеть и повторите попытку.",
+    "subscription_server_error": "Сервер вернул недопустимый ответ. Повторите попытку позже.",
+    "subscription_google_authorization_failed": "Авторизация Google не завершена. Повторите попытку."
+};

+ 244 - 0
extensions/cocos-mcp-server/i18n/vi.js

@@ -0,0 +1,244 @@
+"use strict";
+
+module.exports = {
+    "extension_name": "Cocos MCP Server",
+    "description": "Máy chủ AI MCP cho Cocos Creator 3.8",
+    "panel_title": "Máy chủ MCP",
+    "open_panel": "Mở bảng điều khiển MCP",
+    "start_server": "Khởi động máy chủ",
+    "stop_server": "Dừng máy chủ",
+    "server_status": "Trạng thái máy chủ",
+    "port": "Cổng",
+    "settings": "Cài đặt",
+    "connected": "Đã kết nối",
+    "disconnected": "Đã ngắt kết nối",
+    "server_running": "Máy chủ đang chạy trên cổng {0}",
+    "server_stopped": "Máy chủ đã dừng",
+    "auto_start": "Tự động khởi động",
+    "debug_log": "Ghi nhật ký gỡ lỗi",
+    "max_connections": "Số kết nối tối đa",
+    "connection_info": "Thông tin kết nối",
+    "http_url": "HTTP URL",
+    "copy": "Sao chép",
+    "save_settings": "Lưu cài đặt",
+    "settings_saved": "Đã lưu cài đặt thành công",
+    "server_started": "Máy chủ MCP đã khởi động",
+    "server_stopped_msg": "Máy chủ MCP đã dừng",
+    "failed_to_start": "Không thể khởi động máy chủ",
+    "failed_to_stop": "Không thể dừng máy chủ",
+    "failed_to_save": "Không thể lưu cài đặt",
+    "url_copied": "Đã sao chép HTTP URL vào bảng nhớ tạm",
+    "tool_manager": "Trình quản lý công cụ",
+    "open_tool_manager": "Mở trình quản lý công cụ",
+    "create_config": "Tạo cấu hình",
+    "edit_config": "Chỉnh sửa cấu hình",
+    "delete_config": "Xóa cấu hình",
+    "import_config": "Nhập cấu hình",
+    "export_config": "Xuất cấu hình",
+    "apply_config": "Áp dụng cấu hình",
+    "select_all": "Chọn tất cả",
+    "deselect_all": "Bỏ chọn tất cả",
+    "save_changes": "Lưu thay đổi",
+    "config_name": "Tên cấu hình",
+    "config_description": "Mô tả cấu hình",
+    "current_config": "Cấu hình hiện tại",
+    "tool_management": "Quản lý công cụ",
+    "total_tools": "Tổng số công cụ",
+    "enabled_tools": "Đã bật",
+    "disabled_tools": "Đã tắt",
+    "no_config_selected": "Chưa chọn cấu hình",
+    "select_config_first": "Vui lòng chọn một cấu hình hoặc tạo cấu hình mới trước",
+    "config_created": "Đã tạo cấu hình thành công",
+    "config_updated": "Đã cập nhật cấu hình thành công",
+    "config_deleted": "Đã xóa cấu hình thành công",
+    "config_applied": "Đã áp dụng cấu hình thành công",
+    "config_exported": "Đã xuất cấu hình thành công",
+    "config_imported": "Đã nhập cấu hình thành công",
+    "confirm_delete": "Xác nhận xóa",
+    "delete_config_confirm": "Bạn có chắc chắn muốn xóa cấu hình \"{0}\" không? Hành động này không thể hoàn tác.",
+    "max_config_slots_reached": "Đã đạt số lượng vị trí cấu hình tối đa ({0})",
+    "invalid_config_format": "Định dạng cấu hình không hợp lệ",
+    "invalid_json_format": "Định dạng JSON hoặc cấu trúc cấu hình không hợp lệ",
+    "server_tab": "Máy chủ",
+    "tools_tab": "Quản lý công cụ",
+    "available_tools": "Công cụ khả dụng",
+    "scene_tools": "Công cụ cảnh",
+    "node_tools": "Công cụ nút",
+    "component_tools": "Công cụ thành phần",
+    "prefab_tools": "Công cụ Prefab",
+    "project_tools": "Công cụ dự án",
+    "debug_tools": "Công cụ gỡ lỗi",
+    "preferences_tools": "Tùy chọn",
+    "server_tools": "Công cụ máy chủ",
+    "broadcast_tools": "Công cụ quảng bá",
+    "scene_advanced_tools": "Công cụ cảnh nâng cao",
+    "scene_view_tools": "Công cụ khung nhìn cảnh",
+    "reference_image_tools": "Công cụ ảnh tham chiếu",
+    "asset_advanced_tools": "Công cụ tài nguyên nâng cao",
+    "validation_tools": "Công cụ kiểm tra",
+    "brand_name": "LiDaxian MCP Series",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "Email",
+    "contact_wechat": "WeChat",
+    "contact_github": "GitHub",
+    "machine_id_label": "Mã máy",
+    "purchase_renew": "Mua / Gia hạn",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "Chọn phương thức đăng nhập",
+    "auth_subtitle": "Nhập email và mã kích hoạt của bạn",
+    "email_label": "Địa chỉ email",
+    "activation_code_label": "Mã kích hoạt",
+    "email_placeholder": "Nhập email",
+    "code_placeholder": "Nhập mã (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "Kích hoạt",
+    "deactivate_button": "Hủy kích hoạt",
+    "activating": "Đang kích hoạt...",
+    "deactivating": "Đang hủy kích hoạt...",
+    "license_status": "Trạng thái giấy phép",
+    "license_type": "Loại giấy phép",
+    "expiry_date": "Ngày hết hạn",
+    "days_remaining": "Số ngày còn lại",
+    "days_unit": "ngày",
+    "permanent": "Vĩnh viễn",
+    "expiry_warning_title": "Giấy phép sắp hết hạn",
+    "expiry_warning_message": "Giấy phép của bạn sẽ hết hạn sau {0} ngày. Vui lòng gia hạn để tránh gián đoạn dịch vụ.",
+    "renew_now": "Gia hạn ngay",
+    "i_understand": "Tôi đã hiểu",
+    "activation_success": "Đã kích hoạt giấy phép thành công!",
+    "activation_failed": "Kích hoạt thất bại: {0}",
+    "invalid_code": "Định dạng mã kích hoạt không hợp lệ",
+    "purchase_license": "Mua giấy phép",
+    "renew_license": "Gia hạn giấy phép",
+    "contact_support": "Hỗ trợ",
+    "language_switch": "Tiếng Việt",
+    "version_label": "Phiên bản",
+    "license_required": "Cần có giấy phép để khởi động máy chủ",
+    "license_check_failed": "Kiểm tra giấy phép thất bại",
+
+    "status_stopped": "Đã dừng",
+    "status_running": "Đang chạy",
+    "status_error": "Kết nối thất bại",
+    "config_tab": "Cấu hình nhanh",
+    "status_label": "Trạng thái",
+    "connections_count": "Số kết nối",
+    "transport_protocol": "Giao thức truyền tải",
+    "transport_type": "Loại truyền tải",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "Cổng {0} không khả dụng — đã chuyển sang {1}",
+    "port_fallback_reason": "Cổng {0} bị hệ thống dành riêng hoặc bị tường lửa/phần mềm diệt virus chặn (thường gặp trên Windows có cài Hyper-V, WSL2 hoặc Docker). Máy chủ đang chạy bình thường trên cổng mới.",
+    "port_fallback_resynced": "Đã cập nhật cấu hình cho: {0}. Hãy khởi động lại các client này để cổng mới có hiệu lực.",
+    "port_fallback_no_clients": "Nếu bạn đã cấu hình client AI, hãy cấu hình lại sang cổng mới bằng thiết lập một chạm.",
+    "port_fallback_dismiss": "Đã hiểu",
+    "port_label": "Cổng",
+    "auto_start_label": "Tự động khởi động",
+    "debug_log_label": "Nhật ký gỡ lỗi",
+    "max_connections_label": "Số kết nối tối đa",
+    "server_settings_title": "Cài đặt máy chủ",
+    "server_status_title": "Trạng thái máy chủ",
+    "connection_info_title": "Thông tin kết nối",
+    "tools_count": "{0} công cụ",
+    "tools_stats": "{0} công cụ ({1} đã bật / {2} đã tắt)",
+    "quick_config_title": "Cấu hình nhanh máy khách MCP",
+    "quick_config_desc": "Tự động cấu hình máy chủ MCP hiện tại vào các trình soạn thảo AI phổ biến và công cụ CLI",
+    "server_info": "Thông tin máy chủ",
+    "server_name_label": "Tên máy chủ",
+    "server_address": "Địa chỉ máy chủ",
+    "timeout_ms": "Thời gian chờ (ms)",
+    "auto_config_title": "Cấu hình tự động (Trình soạn thảo IDE + Codex CLI)",
+    "add_all": "Thêm tất cả",
+    "remove_all": "Xóa tất cả",
+    "auto_config_note": "Nhấp nút để tự động sửa đổi tệp cấu hình (Cursor, Windsurf, Trae, Codex CLI)",
+    "configured": "Đã cấu hình",
+    "not_configured": "Chưa cấu hình",
+    "auto_config_btn": "Cấu hình tự động",
+    "delete_btn": "Xóa",
+    "copy_config": "Sao chép cấu hình",
+    "open_config": "Mở cấu hình",
+    "manual_config_title": "Cấu hình thủ công (Claude CLI + Gemini CLI)",
+    "refresh_commands": "Làm mới lệnh",
+    "manual_config_note": "Các công cụ CLI sau đây cần thực thi lệnh thủ công trong terminal",
+    "config_scope": "Phạm vi cấu hình:",
+    "scope_user": "Cấp người dùng",
+    "scope_project": "Cấp dự án",
+    "operation_log": "Nhật ký thao tác",
+    "no_logs": "Không có bản ghi thao tác",
+    "copyright_line": "© 2025 LiDaxian - Cocos Creator MCP Server v{0}",
+    "protocol_line": "Dựa trên giao thức Streamable HTTP (MCP 2025-03-26)",
+    "tools_copyright_line1": "Hệ thống công cụ - 13 công cụ cấp ý định, 150+ thao tác trình soạn thảo, điều phối mã action",
+    "config_copyright_line1": "Cấu hình nhanh - Hỗ trợ Cursor, Windsurf, Trae, Codex CLI, Claude CLI, Gemini CLI",
+    "email_required": "Vui lòng nhập email và mã kích hoạt",
+    "permanent_label": "Vĩnh viễn",
+    "logout_button": "Đăng xuất",
+    "invite_code_label": "Mã mời",
+    "copy_button": "Sao chép",
+    "change_code_button": "Thay đổi mã",
+    "change_code_title": "Thay đổi mã kích hoạt",
+    "change_code_desc": "Nhập mã kích hoạt mới của bạn. Liên kết thiết bị hiện tại sẽ được giải phóng trước.",
+    "confirm_change": "Xác nhận",
+    "cancel": "Hủy",
+    "code_required": "Vui lòng nhập mã kích hoạt",
+    "expiry_inline_warning": "Sắp hết hạn!",
+    "store_purchase_hint": "Nếu bạn đã mua plugin này từ Cocos Store, vui lòng liên hệ với tôi để nhận mã kích hoạt.",
+    "license_expired_title": "Giấy phép đã hết hạn",
+    "license_expired_message": "Giấy phép của bạn đã hết hạn và không thể khởi động máy chủ. Vui lòng gia hạn hoặc kích hoạt lại để tiếp tục.",
+    "go_to_login": "Đi đến đăng nhập",
+
+    "log_load_config_failed": "Không thể tải trạng thái cấu hình: {0}",
+    "log_gen_cli_failed": "Không thể tạo lệnh CLI: {0}",
+    "log_add_client_failed": "Không thể thêm vào {0}: {1}",
+    "log_remove_client_failed": "Không thể xóa khỏi {0}: {1}",
+    "quick_config_dialog_title": "Cấu hình một chạm",
+    "config_operation_failed": "Thao tác cấu hình thất bại",
+    "config_file_not_found_changed_path": "Cấu hình thất bại: không tìm thấy tệp cấu hình. {0} có thể được cài đặt trong một đường dẫn tùy chỉnh.",
+    "log_batch_add_failed": "Thêm hàng loạt thất bại: {0}",
+    "log_batch_remove_failed": "Xóa hàng loạt thất bại: {0}",
+    "log_copied_config": "Đã sao chép cấu hình {0} vào bảng nhớ tạm",
+    "log_gen_config_failed": "Không thể tạo cấu hình",
+    "log_copy_config_failed": "Không thể sao chép cấu hình: {0}",
+    "log_copied_command": "Đã sao chép lệnh {0} vào bảng nhớ tạm",
+    "log_copy_command_failed": "Không thể sao chép lệnh: {0}",
+    "log_opened_config_file": "Đã mở tệp cấu hình: {0}",
+    "log_open_config_failed": "Không thể mở tệp cấu hình",
+    "log_open_config_error": "Không thể mở tệp cấu hình: {0}",
+
+    "update_available_title": "Có bản cập nhật",
+    "update_new_version": "Đã có phiên bản mới v{0}!",
+    "update_now": "Cập nhật ngay",
+    "update_not_now": "Để sau",
+    "update_skip_version": "Bỏ qua v{0}",
+    "check_for_updates": "Kiểm tra cập nhật",
+    "update_checking": "Đang kiểm tra...",
+    "update_no_update": "Bạn đang sử dụng phiên bản mới nhất",
+    "update_urgency_critical": "Cập nhật khẩn cấp",
+    "update_urgency_high": "Cập nhật quan trọng",
+    "update_current_version": "Phiên bản hiện tại: v{0}",
+    "update_changelog": "Nhật ký thay đổi",
+    "auth_choose_subtitle": "Chọn một phương thức đăng nhập để tiếp tục",
+    "update_changelog_empty": "Không có ghi chú phát hành cho phiên bản này.",
+    "subscription_login_title": "Tài khoản đăng ký VberAI",
+    "subscription_password_label": "Mật khẩu",
+    "subscription_password_placeholder": "Nhập mật khẩu",
+    "subscription_login_button": "Đăng nhập bằng VberAI",
+    "subscription_google_button": "Đăng nhập bằng Google",
+    "subscription_google_pending": "Đã mở trình duyệt. Hoàn tất ủy quyền Google rồi quay lại Cocos Creator.",
+    "subscription_google_pending_button": "Đang chờ ủy quyền Google...",
+    "subscription_register_button": "Tạo tài khoản VberAI",
+    "subscription_logging_in": "Đang đăng nhập...",
+    "subscription_credentials_required": "Vui lòng nhập email và mật khẩu",
+    "subscription_login_success": "Đã đăng nhập tài khoản đăng ký",
+    "subscription_login_failed": "Đăng nhập đăng ký thất bại",
+    "subscription_not_entitled": "Gói đăng ký hiện tại của bạn không bao gồm Cocos 3.x MCP. Nâng cấp để tiếp tục.",
+    "subscription_upgrade_to": "Nâng cấp lên \"{0}\" để sử dụng sản phẩm này",
+    "subscription_upgrade_action": "Nâng cấp gói đăng ký",
+    "subscription_logged_in": "Tài khoản đã đăng nhập",
+    "subscription_choose_button": "Tài khoản đăng ký VberAI",
+    "license_choose_button": "Mã kích hoạt",
+    "subscription_method_label": "Đăng ký",
+    "back_to_login_choices": "← Chọn phương thức đăng nhập khác",
+    "subscription_signed_out_other_device": "Đã đăng xuất: tài khoản của bạn đã được dùng trên thiết bị khác.",
+    "subscription_google_cancelled": "Đã hủy đăng nhập Google.",
+    "subscription_request_timeout": "Yêu cầu đã hết thời gian. Kiểm tra mạng và thử lại.",
+    "subscription_network_error": "Kết nối mạng thất bại. Kiểm tra mạng và thử lại.",
+    "subscription_server_error": "Máy chủ trả về phản hồi không hợp lệ. Thử lại sau.",
+    "subscription_google_authorization_failed": "Ủy quyền Google chưa hoàn tất. Vui lòng thử lại."
+};

+ 243 - 0
extensions/cocos-mcp-server/i18n/zh.js

@@ -0,0 +1,243 @@
+"use strict";
+module.exports = {
+    "extension_name": "Cocos MCP 服务器",
+    "description": "适用于 Cocos Creator 3.8 的 AI MCP 服务器",
+    "panel_title": "MCP 服务器",
+    "open_panel": "打开 MCP 面板",
+    "start_server": "启动服务器",
+    "stop_server": "停止服务器",
+    "server_status": "服务器状态",
+    "port": "端口",
+    "settings": "设置",
+    "connected": "已连接",
+    "disconnected": "未连接",
+    "server_running": "服务器正在端口 {0} 上运行",
+    "server_stopped": "服务器已停止",
+    "auto_start": "自动启动",
+    "debug_log": "调试日志",
+    "max_connections": "最大连接数",
+    "connection_info": "连接信息",
+    "http_url": "HTTP 地址",
+    "copy": "复制",
+    "save_settings": "保存设置",
+    "settings_saved": "设置保存成功",
+    "server_started": "MCP 服务器已启动",
+    "server_stopped_msg": "MCP 服务器已停止",
+    "failed_to_start": "启动服务器失败",
+    "failed_to_stop": "停止服务器失败",
+    "failed_to_save": "保存设置失败",
+    "url_copied": "HTTP 地址已复制到剪贴板",
+    "tool_manager": "工具管理器",
+    "open_tool_manager": "打开工具管理器",
+    "create_config": "新建配置",
+    "edit_config": "编辑配置",
+    "delete_config": "删除配置",
+    "import_config": "导入配置",
+    "export_config": "导出配置",
+    "apply_config": "应用配置",
+    "select_all": "全选",
+    "deselect_all": "取消全选",
+    "save_changes": "保存更改",
+    "config_name": "配置名称",
+    "config_description": "配置描述",
+    "current_config": "当前配置",
+    "tool_management": "工具管理",
+    "total_tools": "总工具数",
+    "enabled_tools": "已启用",
+    "disabled_tools": "已禁用",
+    "no_config_selected": "没有选择配置",
+    "select_config_first": "请先选择一个配置或创建新配置",
+    "config_created": "配置创建成功",
+    "config_updated": "配置更新成功",
+    "config_deleted": "配置删除成功",
+    "config_applied": "配置应用成功",
+    "config_exported": "配置导出成功",
+    "config_imported": "配置导入成功",
+    "confirm_delete": "确认删除",
+    "delete_config_confirm": "确定要删除配置 \"{0}\" 吗?此操作不可撤销。",
+    "max_config_slots_reached": "已达到最大配置槽位数量 ({0})",
+    "invalid_config_format": "无效的配置格式",
+    "invalid_json_format": "无效的JSON格式或配置结构",
+    "server_tab": "服务器",
+    "tools_tab": "工具管理",
+    "available_tools": "可用工具",
+    "scene_tools": "场景工具",
+    "node_tools": "节点工具",
+    "component_tools": "组件工具",
+    "prefab_tools": "预制体工具",
+    "project_tools": "项目工具",
+    "debug_tools": "调试工具",
+    "preferences_tools": "偏好设置",
+    "server_tools": "服务器工具",
+    "broadcast_tools": "广播工具",
+    "scene_advanced_tools": "高级场景工具",
+    "scene_view_tools": "场景视图工具",
+    "reference_image_tools": "参考图片工具",
+    "asset_advanced_tools": "高级资源工具",
+    "validation_tools": "验证工具",
+    "brand_name": "李大仙 MCP 系列",
+    "brand_subtitle": "LiDaxian MCP Series",
+    "contact_email": "邮箱",
+    "contact_wechat": "微信",
+    "contact_github": "GitHub",
+    "machine_id_label": "机器码",
+    "purchase_renew": "购买/续费",
+    "purchase_url": "https://www.vberai.com/game-engines/cocos",
+    "auth_title": "选择登录方式",
+    "auth_subtitle": "请输入您的邮箱和激活码",
+    "auth_choose_subtitle": "请选择一种登录方式继续",
+    "email_label": "邮箱地址",
+    "activation_code_label": "激活码",
+    "email_placeholder": "请输入邮箱",
+    "code_placeholder": "请输入激活码 (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)",
+    "activate_button": "激活",
+    "deactivate_button": "取消激活",
+    "activating": "激活中...",
+    "deactivating": "取消激活中...",
+    "license_status": "授权状态",
+    "license_type": "授权类型",
+    "expiry_date": "到期日期",
+    "days_remaining": "剩余天数",
+    "days_unit": "天",
+    "permanent": "永久",
+    "expiry_warning_title": "授权即将到期",
+    "expiry_warning_message": "您的授权将在 {0} 天后到期,请及时续费以确保服务不中断。",
+    "renew_now": "立即续费",
+    "i_understand": "我知道了",
+    "activation_success": "授权激活成功!",
+    "activation_failed": "激活失败:{0}",
+    "invalid_code": "无效的激活码格式",
+    "purchase_license": "购买授权",
+    "renew_license": "续费授权",
+    "contact_support": "技术支持",
+    "language_switch": "中文",
+    "version_label": "版本",
+    "license_required": "需要授权才能启动服务器",
+    "license_check_failed": "授权检查失败",
+
+    "status_stopped": "已停止",
+    "status_running": "运行中",
+    "status_error": "连接失败",
+    "config_tab": "一键配置",
+    "status_label": "状态",
+    "connections_count": "连接数",
+    "transport_protocol": "传输协议",
+    "transport_type": "传输类型",
+    "mcp_url": "MCP URL",
+    "port_fallback_title": "端口 {0} 不可用,已自动切换到 {1}",
+    "port_fallback_reason": "端口 {0} 被系统保留或被防火墙/杀毒软件拦截(安装了 Hyper-V、WSL2 或 Docker 的 Windows 上很常见)。服务已在新端口上正常运行。",
+    "port_fallback_resynced": "已自动更新这些客户端的配置:{0}。请重启它们,新端口才会生效。",
+    "port_fallback_no_clients": "如果已配置过 AI 客户端,请在\"一键配置\"里重新配置到新端口。",
+    "port_fallback_dismiss": "知道了",
+    "port_label": "端口",
+    "auto_start_label": "自动启动",
+    "debug_log_label": "调试日志",
+    "max_connections_label": "最大连接数",
+    "server_settings_title": "服务器设置",
+    "server_status_title": "服务器状态",
+    "connection_info_title": "连接信息",
+    "tools_count": "{0} 个工具",
+    "tools_stats": "{0} 个工具 ({1} 启用 / {2} 禁用)",
+    "quick_config_title": "一键配置 MCP 客户端",
+    "quick_config_desc": "自动将当前MCP服务器配置到主流AI编辑器和CLI工具中",
+    "server_info": "服务器信息",
+    "server_name_label": "服务器名称",
+    "server_address": "服务器地址",
+    "timeout_ms": "超时时间(ms)",
+    "auto_config_title": "自动配置 (IDE编辑器 + Codex CLI)",
+    "add_all": "全部添加",
+    "remove_all": "全部删除",
+    "auto_config_note": "点击按钮将自动修改配置文件(包括Cursor、Windsurf、Trae、Codex CLI)",
+    "configured": "已配置",
+    "not_configured": "未配置",
+    "auto_config_btn": "自动配置",
+    "delete_btn": "删除",
+    "copy_config": "复制配置",
+    "open_config": "打开配置",
+    "manual_config_title": "手动配置 (Claude CLI + Gemini CLI)",
+    "refresh_commands": "刷新命令",
+    "manual_config_note": "以下CLI工具需要在终端中手动执行命令配置",
+    "config_scope": "配置范围:",
+    "scope_user": "用户级别",
+    "scope_project": "项目级别",
+    "operation_log": "操作日志",
+    "no_logs": "暂无操作记录",
+    "copyright_line": "© 2025 李大仙 (LiDaxian) - Cocos Creator MCP Server v{0}",
+    "protocol_line": "基于 Streamable HTTP 协议 (MCP 2025-03-26)",
+    "tools_copyright_line1": "工具系统 - 13个意图级工具,150+编辑器操作,action操作码分发",
+    "config_copyright_line1": "一键配置 - 支持 Cursor、Windsurf、Trae、Codex CLI、Claude CLI、Gemini CLI",
+    "email_required": "请输入邮箱和激活码",
+    "permanent_label": "永久",
+    "logout_button": "退出登录",
+    "invite_code_label": "邀请码",
+    "copy_button": "复制",
+    "change_code_button": "变更激活码",
+    "change_code_title": "变更激活码",
+    "change_code_desc": "输入新的激活码,当前设备的激活占位将被释放后重新激活。",
+    "confirm_change": "确认变更",
+    "cancel": "取消",
+    "code_required": "请输入激活码",
+    "expiry_inline_warning": "即将到期!",
+    "store_purchase_hint": "如果您已在 Cocos Store 购买了本插件,请联系我获取激活码。",
+    "license_expired_title": "授权已过期",
+    "license_expired_message": "您的授权已过期,无法启动服务。请续费或重新激活以继续使用。",
+    "go_to_login": "重新登录",
+
+    "log_load_config_failed": "加载配置状态失败: {0}",
+    "log_gen_cli_failed": "生成CLI命令失败: {0}",
+    "log_add_client_failed": "添加到{0}失败: {1}",
+    "log_remove_client_failed": "从{0}删除失败: {1}",
+    "quick_config_dialog_title": "一键配置",
+    "config_operation_failed": "配置操作失败",
+    "config_file_not_found_changed_path": "配置失败:找不到配置文件,{0} 安装时可能更改了路径",
+    "log_batch_add_failed": "批量添加失败: {0}",
+    "log_batch_remove_failed": "批量删除失败: {0}",
+    "log_copied_config": "已复制{0}配置到剪贴板",
+    "log_gen_config_failed": "生成配置失败",
+    "log_copy_config_failed": "复制配置失败: {0}",
+    "log_copied_command": "已复制{0}命令到剪贴板",
+    "log_copy_command_failed": "复制命令失败: {0}",
+    "log_opened_config_file": "已打开配置文件: {0}",
+    "log_open_config_failed": "打开配置文件失败",
+    "log_open_config_error": "打开配置文件失败: {0}",
+
+    "update_available_title": "发现新版本",
+    "update_new_version": "新版本 v{0} 已发布!",
+    "update_now": "立即更新",
+    "update_not_now": "暂不更新",
+    "update_skip_version": "跳过 v{0}",
+    "check_for_updates": "检查更新",
+    "update_checking": "检查中...",
+    "update_no_update": "当前已是最新版本",
+    "update_urgency_critical": "紧急更新",
+    "update_urgency_high": "重要更新",
+    "update_current_version": "当前版本: v{0}",
+    "update_changelog": "更新日志"
+    ,"update_changelog_empty": "该版本暂未填写更新内容。"
+    ,"subscription_login_title": "VberAI 官网订阅账号"
+    ,"subscription_password_label": "密码"
+    ,"subscription_password_placeholder": "请输入密码"
+    ,"subscription_login_button": "使用 VberAI 账号登录"
+    ,"subscription_google_button": "使用 Google 登录"
+    ,"subscription_google_pending": "已打开浏览器,请完成 Google 授权后返回 Cocos Creator。"
+    ,"subscription_google_pending_button": "正在等待 Google 授权..."
+    ,"subscription_register_button": "注册 VberAI 账号"
+    ,"subscription_logging_in": "登录中..."
+    ,"subscription_credentials_required": "请输入邮箱和密码"
+    ,"subscription_login_success": "订阅账号登录成功"
+    ,"subscription_login_failed": "订阅账号登录失败"
+    ,"subscription_not_entitled": "当前订阅计划不包含 Cocos 3.x MCP,请升级后使用。"
+    ,"subscription_upgrade_to": "升级到「{0}」即可使用"
+    ,"subscription_upgrade_action": "前往升级订阅"
+    ,"subscription_logged_in": "当前登录账号"
+    ,"subscription_choose_button": "VberAI 官网订阅账号"
+    ,"license_choose_button": "激活码授权"
+    ,"subscription_method_label": "订阅账号"
+    ,"back_to_login_choices": "← 返回选择登录方式"
+    ,"subscription_signed_out_other_device": "账号已在另一台设备登录,当前设备已退出。"
+    ,"subscription_google_cancelled": "已取消 Google 登录"
+    ,"subscription_request_timeout": "请求超时,请检查网络后重试。"
+    ,"subscription_network_error": "网络连接失败,请检查网络后重试。"
+    ,"subscription_server_error": "服务器响应异常,请稍后重试。"
+    ,"subscription_google_authorization_failed": "Google 授权未完成,请重试。"
+};

+ 627 - 0
extensions/cocos-mcp-server/package-lock.json

@@ -0,0 +1,627 @@
+{
+    "name": "cocos-mcp-server",
+    "version": "1.7.9",
+    "lockfileVersion": 3,
+    "requires": true,
+    "packages": {
+        "": {
+            "name": "cocos-mcp-server",
+            "version": "1.7.9",
+            "dependencies": {
+                "@iarna/toml": "^2.2.5",
+                "fs-extra": "^11.3.0",
+                "puppeteer-core": "^25.1.0",
+                "uuid": "^9.0.1",
+                "vue": "^3.1.4"
+            }
+        },
+        "node_modules/@babel/helper-string-parser": {
+            "version": "7.29.7",
+            "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+            "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/helper-validator-identifier": {
+            "version": "7.29.7",
+            "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+            "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@babel/parser": {
+            "version": "7.29.7",
+            "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz",
+            "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/types": "^7.29.7"
+            },
+            "bin": {
+                "parser": "bin/babel-parser.js"
+            },
+            "engines": {
+                "node": ">=6.0.0"
+            }
+        },
+        "node_modules/@babel/types": {
+            "version": "7.29.7",
+            "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz",
+            "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/helper-string-parser": "^7.29.7",
+                "@babel/helper-validator-identifier": "^7.29.7"
+            },
+            "engines": {
+                "node": ">=6.9.0"
+            }
+        },
+        "node_modules/@iarna/toml": {
+            "version": "2.2.5",
+            "resolved": "https://registry.npmmirror.com/@iarna/toml/-/toml-2.2.5.tgz",
+            "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
+            "license": "ISC"
+        },
+        "node_modules/@jridgewell/sourcemap-codec": {
+            "version": "1.5.5",
+            "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+            "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+            "license": "MIT"
+        },
+        "node_modules/@puppeteer/browsers": {
+            "version": "3.0.6",
+            "resolved": "https://registry.npmmirror.com/@puppeteer/browsers/-/browsers-3.0.6.tgz",
+            "integrity": "sha512-B/gKoqlFkzhvzsI6jo9K1cZz9o5ypviVv/xu8CwA4grZzyVwN+XfkT+tu8T1zrauuEXv6VhS2oGX+6NL95WcKA==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "modern-tar": "^0.7.6",
+                "yargs": "^18.0.0"
+            },
+            "bin": {
+                "browsers": "lib/main-cli.js"
+            },
+            "engines": {
+                "node": ">=22.12.0"
+            },
+            "peerDependencies": {
+                "proxy-agent": ">=8.0.1",
+                "yauzl": "^2.10.0 || ^3.4.0"
+            },
+            "peerDependenciesMeta": {
+                "proxy-agent": {
+                    "optional": true
+                },
+                "yauzl": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/@vue/compiler-core": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.40.tgz",
+            "integrity": "sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/parser": "^7.29.7",
+                "@vue/shared": "3.5.40",
+                "entities": "^7.0.1",
+                "estree-walker": "^2.0.2",
+                "source-map-js": "^1.2.1"
+            }
+        },
+        "node_modules/@vue/compiler-dom": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.40.tgz",
+            "integrity": "sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/compiler-core": "3.5.40",
+                "@vue/shared": "3.5.40"
+            }
+        },
+        "node_modules/@vue/compiler-sfc": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.40.tgz",
+            "integrity": "sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==",
+            "license": "MIT",
+            "dependencies": {
+                "@babel/parser": "^7.29.7",
+                "@vue/compiler-core": "3.5.40",
+                "@vue/compiler-dom": "3.5.40",
+                "@vue/compiler-ssr": "3.5.40",
+                "@vue/shared": "3.5.40",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.30.21",
+                "postcss": "^8.5.19",
+                "source-map-js": "^1.2.1"
+            }
+        },
+        "node_modules/@vue/compiler-ssr": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.40.tgz",
+            "integrity": "sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/compiler-dom": "3.5.40",
+                "@vue/shared": "3.5.40"
+            }
+        },
+        "node_modules/@vue/reactivity": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.40.tgz",
+            "integrity": "sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/shared": "3.5.40"
+            }
+        },
+        "node_modules/@vue/runtime-core": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.40.tgz",
+            "integrity": "sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/reactivity": "3.5.40",
+                "@vue/shared": "3.5.40"
+            }
+        },
+        "node_modules/@vue/runtime-dom": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.40.tgz",
+            "integrity": "sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/reactivity": "3.5.40",
+                "@vue/runtime-core": "3.5.40",
+                "@vue/shared": "3.5.40",
+                "csstype": "^3.2.3"
+            }
+        },
+        "node_modules/@vue/server-renderer": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.40.tgz",
+            "integrity": "sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/compiler-ssr": "3.5.40",
+                "@vue/runtime-dom": "3.5.40",
+                "@vue/shared": "3.5.40"
+            }
+        },
+        "node_modules/@vue/shared": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.40.tgz",
+            "integrity": "sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==",
+            "license": "MIT"
+        },
+        "node_modules/ansi-regex": {
+            "version": "6.2.2",
+            "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz",
+            "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+            }
+        },
+        "node_modules/ansi-styles": {
+            "version": "6.2.3",
+            "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz",
+            "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+            }
+        },
+        "node_modules/chromium-bidi": {
+            "version": "16.0.1",
+            "resolved": "https://registry.npmmirror.com/chromium-bidi/-/chromium-bidi-16.0.1.tgz",
+            "integrity": "sha512-J63PGu/9PpeCwLIcKYyzWP6yaVL5pxuBc0shlYCYM8BaAkmlwiQboXO1iNbOgSDbVklEyYFfNEcHD8oOAWacUA==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "mitt": "^3.0.1",
+                "zod": "^3.24.1"
+            },
+            "engines": {
+                "node": ">=20.19.0 <22.0.0 || >=22.12.0"
+            },
+            "peerDependencies": {
+                "devtools-protocol": "*"
+            }
+        },
+        "node_modules/cliui": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmmirror.com/cliui/-/cliui-9.0.1.tgz",
+            "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
+            "license": "ISC",
+            "dependencies": {
+                "string-width": "^7.2.0",
+                "strip-ansi": "^7.1.0",
+                "wrap-ansi": "^9.0.0"
+            },
+            "engines": {
+                "node": ">=20"
+            }
+        },
+        "node_modules/csstype": {
+            "version": "3.2.3",
+            "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.2.3.tgz",
+            "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
+            "license": "MIT"
+        },
+        "node_modules/devtools-protocol": {
+            "version": "0.0.1638949",
+            "resolved": "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1638949.tgz",
+            "integrity": "sha512-mXwg4Fqnv0WR4iuAT/gYUmctNkjILwXFHyZ+m7Ty1dfr0ezZt2U3gnrrJTfRobJTHoXf+IbuFvFITzLrLFjwJA==",
+            "license": "BSD-3-Clause",
+            "peer": true
+        },
+        "node_modules/emoji-regex": {
+            "version": "10.6.0",
+            "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz",
+            "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+            "license": "MIT"
+        },
+        "node_modules/entities": {
+            "version": "7.0.1",
+            "resolved": "https://registry.npmmirror.com/entities/-/entities-7.0.1.tgz",
+            "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": ">=0.12"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/entities?sponsor=1"
+            }
+        },
+        "node_modules/escalade": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=6"
+            }
+        },
+        "node_modules/estree-walker": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+            "license": "MIT"
+        },
+        "node_modules/fs-extra": {
+            "version": "11.3.6",
+            "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.6.tgz",
+            "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==",
+            "license": "MIT",
+            "dependencies": {
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^6.0.1",
+                "universalify": "^2.0.0"
+            },
+            "engines": {
+                "node": ">=14.14"
+            }
+        },
+        "node_modules/get-caller-file": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz",
+            "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+            "license": "ISC",
+            "engines": {
+                "node": "6.* || 8.* || >= 10.*"
+            }
+        },
+        "node_modules/get-east-asian-width": {
+            "version": "1.6.0",
+            "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
+            "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/graceful-fs": {
+            "version": "4.2.11",
+            "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
+            "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+            "license": "ISC"
+        },
+        "node_modules/jsonfile": {
+            "version": "6.2.1",
+            "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz",
+            "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==",
+            "license": "MIT",
+            "dependencies": {
+                "universalify": "^2.0.0"
+            },
+            "optionalDependencies": {
+                "graceful-fs": "^4.1.6"
+            }
+        },
+        "node_modules/magic-string": {
+            "version": "0.30.21",
+            "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
+            "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+            "license": "MIT",
+            "dependencies": {
+                "@jridgewell/sourcemap-codec": "^1.5.5"
+            }
+        },
+        "node_modules/mitt": {
+            "version": "3.0.1",
+            "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
+            "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+            "license": "MIT"
+        },
+        "node_modules/modern-tar": {
+            "version": "0.7.6",
+            "resolved": "https://registry.npmmirror.com/modern-tar/-/modern-tar-0.7.6.tgz",
+            "integrity": "sha512-sweCIVXzx1aIGTCdzcMlSZt1h8k5Tmk08VNAuRk3IU28XamGiOH5ypi11g6De2CH7PhYqSSnGy2A/EFhbWnVKg==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=18.0.0"
+            }
+        },
+        "node_modules/nanoid": {
+            "version": "3.3.16",
+            "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.16.tgz",
+            "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==",
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "license": "MIT",
+            "bin": {
+                "nanoid": "bin/nanoid.cjs"
+            },
+            "engines": {
+                "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+            }
+        },
+        "node_modules/picocolors": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+            "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+            "license": "ISC"
+        },
+        "node_modules/postcss": {
+            "version": "8.5.19",
+            "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.19.tgz",
+            "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==",
+            "funding": [
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/postcss/"
+                },
+                {
+                    "type": "tidelift",
+                    "url": "https://tidelift.com/funding/github/npm/postcss"
+                },
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/ai"
+                }
+            ],
+            "license": "MIT",
+            "dependencies": {
+                "nanoid": "^3.3.12",
+                "picocolors": "^1.1.1",
+                "source-map-js": "^1.2.1"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            }
+        },
+        "node_modules/puppeteer-core": {
+            "version": "25.3.0",
+            "resolved": "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-25.3.0.tgz",
+            "integrity": "sha512-fm+wpUr2oigH1PXZvwgATrM2tYWHMDG8ASzTEe9uukCye4X5Ldx1K5BTHPFKITrIWvQQAQ256d1NpbEveBcKjA==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "@puppeteer/browsers": "3.0.6",
+                "chromium-bidi": "16.0.1",
+                "devtools-protocol": "0.0.1638949",
+                "typed-query-selector": "^2.12.2",
+                "webdriver-bidi-protocol": "0.4.2",
+                "ws": "^8.21.0"
+            },
+            "engines": {
+                "node": ">=22.12.0"
+            }
+        },
+        "node_modules/source-map-js": {
+            "version": "1.2.1",
+            "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+            "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+            "license": "BSD-3-Clause",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
+        "node_modules/string-width": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz",
+            "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+            "license": "MIT",
+            "dependencies": {
+                "emoji-regex": "^10.3.0",
+                "get-east-asian-width": "^1.0.0",
+                "strip-ansi": "^7.1.0"
+            },
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
+            }
+        },
+        "node_modules/strip-ansi": {
+            "version": "7.2.0",
+            "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.2.0.tgz",
+            "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+            "license": "MIT",
+            "dependencies": {
+                "ansi-regex": "^6.2.2"
+            },
+            "engines": {
+                "node": ">=12"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+            }
+        },
+        "node_modules/typed-query-selector": {
+            "version": "2.12.2",
+            "resolved": "https://registry.npmmirror.com/typed-query-selector/-/typed-query-selector-2.12.2.tgz",
+            "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==",
+            "license": "MIT"
+        },
+        "node_modules/universalify": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz",
+            "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+            "license": "MIT",
+            "engines": {
+                "node": ">= 10.0.0"
+            }
+        },
+        "node_modules/uuid": {
+            "version": "9.0.1",
+            "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+            "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+            "funding": [
+                "https://github.com/sponsors/broofa",
+                "https://github.com/sponsors/ctavan"
+            ],
+            "license": "MIT",
+            "bin": {
+                "uuid": "dist/bin/uuid"
+            }
+        },
+        "node_modules/vue": {
+            "version": "3.5.40",
+            "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.40.tgz",
+            "integrity": "sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==",
+            "license": "MIT",
+            "dependencies": {
+                "@vue/compiler-dom": "3.5.40",
+                "@vue/compiler-sfc": "3.5.40",
+                "@vue/runtime-dom": "3.5.40",
+                "@vue/server-renderer": "3.5.40",
+                "@vue/shared": "3.5.40"
+            },
+            "peerDependencies": {
+                "typescript": "*"
+            },
+            "peerDependenciesMeta": {
+                "typescript": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/webdriver-bidi-protocol": {
+            "version": "0.4.2",
+            "resolved": "https://registry.npmmirror.com/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.2.tgz",
+            "integrity": "sha512-VSV+fzfChirL3e7jay2yUC7B4HQCGtEWEg/MSSQbK+qWbqeGlRLlXTzPpYr3XGUvbpDHumWZBJxgesg4N7dbtA==",
+            "license": "Apache-2.0"
+        },
+        "node_modules/wrap-ansi": {
+            "version": "9.0.2",
+            "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+            "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+            "license": "MIT",
+            "dependencies": {
+                "ansi-styles": "^6.2.1",
+                "string-width": "^7.0.0",
+                "strip-ansi": "^7.1.0"
+            },
+            "engines": {
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+            }
+        },
+        "node_modules/ws": {
+            "version": "8.21.1",
+            "resolved": "https://registry.npmmirror.com/ws/-/ws-8.21.1.tgz",
+            "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==",
+            "license": "MIT",
+            "engines": {
+                "node": ">=10.0.0"
+            },
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": ">=5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/y18n": {
+            "version": "5.0.8",
+            "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz",
+            "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+            "license": "ISC",
+            "engines": {
+                "node": ">=10"
+            }
+        },
+        "node_modules/yargs": {
+            "version": "18.0.0",
+            "resolved": "https://registry.npmmirror.com/yargs/-/yargs-18.0.0.tgz",
+            "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==",
+            "license": "MIT",
+            "dependencies": {
+                "cliui": "^9.0.1",
+                "escalade": "^3.1.1",
+                "get-caller-file": "^2.0.5",
+                "string-width": "^7.2.0",
+                "y18n": "^5.0.5",
+                "yargs-parser": "^22.0.0"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=23"
+            }
+        },
+        "node_modules/yargs-parser": {
+            "version": "22.0.0",
+            "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-22.0.0.tgz",
+            "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
+            "license": "ISC",
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=23"
+            }
+        },
+        "node_modules/zod": {
+            "version": "3.25.76",
+            "resolved": "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz",
+            "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+            "license": "MIT",
+            "funding": {
+                "url": "https://github.com/sponsors/colinhacks"
+            }
+        }
+    }
+}

Some files were not shown because too many files changed in this diff