diff --git a/.agent/rules/project-rules.md b/.agent/rules/project-rules.md new file mode 100644 index 0000000..e13e627 --- /dev/null +++ b/.agent/rules/project-rules.md @@ -0,0 +1,30 @@ +--- +trigger: always_on +--- + +# MCP Bridge Development Rules + +## 1. Critical Workflow +- **Reload Required**: Any changes to `main.js`, `package.json`, `scene-script.js`, or `panel/` MUST be followed by reloading the plugin ("Reload Package") or restarting the editor. Hot reload does not apply to main process scripts. +- **Test-Driven**: Always create a standalone test script in `test/` (e.g., `test/test_feature.js`) for new features. Tests must direct HTTP requests to verify functionality. + +## 2. Architecture & IPC +- **Process Isolation**: + - `scene-script.js` (Renderer Process) CANNOT access `Editor.assetdb` or `Editor.FileSystem`. + - `main.js` (Main Process) CANNOT access `cc` (Cocos Engine) directly. + - **Rule**: Resolve asset paths (URL -> UUID) in `main.js` using `Editor.assetdb.urlToUuid()` BEFORE calling `callSceneScript`. Pass UUIDs to the scene script. +- **Logging**: + - Use `addLog(type, message)` in `main.js` instead of `console.log` to ensure logs are captured by the `read_console` tool and visible in the panel. + +## 3. Coding Standards +- **Safe Editing**: Be extremely careful when editing `main.js` to avoid duplicate code blocks or closing braces. Use `view_file` to verify context. +- **Undo/Redo**: + - All scene-modifying actions (node transform, property changes) SHOULD support Undo/Redo. + - Use `Editor.Ipc.sendToMain('scene:undo-record', ...)` if modifying via scene script, or wrap operations in `manage_undo` groups. + +## 4. Feature Specifics +- **Particle Systems (VFX)**: + - Always set `particleSystem.custom = true` when modifying properties via script. + - Ensure a valid `texture` is set (or load a default one like `db://internal/image/default_sprite_splash.png`) to avoid invisible particles. +- **Resource Loading**: + - Built-in assets (`db://internal/...`) may need specific extensions (`.png`, `.jpg`) depending on the editor version. Try multiple paths if lookup fails.