fix(execute_script): route to own scene script eval instead of nonexistent 'console'
This commit is contained in:
32
dist/scene.js
vendored
32
dist/scene.js
vendored
File diff suppressed because one or more lines are too long
14
dist/tools/debug-tools.js
vendored
14
dist/tools/debug-tools.js
vendored
File diff suppressed because one or more lines are too long
@@ -141,6 +141,7 @@
|
||||
"scene": {
|
||||
"script": "./dist/scene.js",
|
||||
"methods": [
|
||||
"executeScript",
|
||||
"createNewScene",
|
||||
"addComponentToNode",
|
||||
"removeComponentFromNode",
|
||||
|
||||
@@ -2,6 +2,30 @@ import { join } from 'path';
|
||||
module.paths.push(join(Editor.App.path, 'node_modules'));
|
||||
|
||||
export const methods: { [key: string]: (...any: any) => any } = {
|
||||
/**
|
||||
* Execute arbitrary JavaScript in the scene process.
|
||||
* `cc` is available in scope; the value of the last expression is returned
|
||||
* (compatible with `(function(){ ... })();` IIFE scripts).
|
||||
*/
|
||||
executeScript(script: string) {
|
||||
try {
|
||||
const cc = require('cc');
|
||||
const body = String(script).trim().replace(/;+\s*$/, '');
|
||||
let fn: Function;
|
||||
try {
|
||||
fn = new Function('cc', 'return (' + body + '\n);');
|
||||
} catch (_e) {
|
||||
fn = new Function('cc', script);
|
||||
}
|
||||
const result = fn(cc);
|
||||
let data: any = result;
|
||||
try { JSON.stringify(result); } catch (_) { data = String(result); }
|
||||
return { success: true, data: { result: data } };
|
||||
} catch (error: any) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Create a new scene
|
||||
*/
|
||||
|
||||
@@ -255,17 +255,11 @@ export class DebugTools implements ToolExecutor {
|
||||
private async executeScript(script: string): Promise<ToolResponse> {
|
||||
return new Promise((resolve) => {
|
||||
Editor.Message.request('scene', 'execute-scene-script', {
|
||||
name: 'console',
|
||||
method: 'eval',
|
||||
name: 'cocos-mcp-server',
|
||||
method: 'executeScript',
|
||||
args: [script]
|
||||
}).then((result: any) => {
|
||||
resolve({
|
||||
success: true,
|
||||
data: {
|
||||
result: result,
|
||||
message: 'Script executed successfully'
|
||||
}
|
||||
});
|
||||
resolve(result);
|
||||
}).catch((err: Error) => {
|
||||
resolve({ success: false, error: err.message });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user