# Changelog All notable changes to Synaptic AI Pro for Unity will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.2.23] - 2026-05-22 ### Fixed (ESC-0107: `run_csharp` returned `result: null` for almost every snippet) - **Return-value capture**: `Mono.CSharp.Evaluator.Run` discards return values, so `return X;` snippets always reported null. New approach: detect the last top-level `return` keyword (depth-aware: skips braces, parens, brackets, strings, comments) and rewrite `[prefix...] return X;` → `[prefix...] SynapticPro.NexusCSharpEval.__SetResult(X);`. Run the rewritten statements, then read the static sink back into the response. Captures values from `foreach (...) { ... } return Y;` (with braces), `if (...) { ... } return X;`, multi-statement bodies with multiplication (`var x = 5; return x * 2;`), and the simple `return "hello";` case. - **Bare-expression mode preserved**: snippets without `;` still go through `Evaluator.Evaluate` directly. - **`Debug.Log` output capture**: `Application.logMessageReceived` is now subscribed while a `Run` call is in progress so `Debug.Log` / `LogWarning` / `LogError` lines are mirrored into the `output` field. Previously only `Console.Out` was captured, which Unity's logging doesn't route through. ### Fixed (ESC-0108: HTTP server WebSocket dies after ~30s) - `http-server.js` heartbeat replaced `ws.ping()/pong` with last-message-seen timestamps. Mono `ClientWebSocket` doesn't auto-pong protocol-level pings (unlike .NET 5+), so the Node side terminated the link every interval. New `UNITY_STALE_TIMEOUT_MS` (default 60s) only closes when no inbound frame arrives — Unity already emits heartbeat / operation-response traffic, so live connections stay open. ### Fixed (HTTP server died on macOS/Linux during domain reload) - Replaced `Process.Start` with piped stdout/stderr with a `nohup node ... >log 2>&1 Synaptic Pro > MCP Server: Start`. - Manual `AI Reconnect` and the new `Auto Reconnect` toggle in Setup → AI Connection also force `enableMCP = true` so the next domain reload doesn't revert. - Successful `ConnectToMCPServer` persists `enableMCP=true`. ### Fixed (Port-mapping JSON corruption infinite loop) - `NexusProjectPortManager.LoadMapping` recovery now deletes `.backup` before `File.Move` (Windows otherwise threw on existing target, the silent catch left the corrupt file in place, and the next frame parsed it again — Console flooded at frame rate). Also writes a fresh empty mapping immediately so subsequent readers see valid JSON. ### Added - **Setup Window → AI Connection tab → Connection Controls Bar**: live MCP connection status, `AI Reconnect` button (silent), `Auto Reconnect` checkbox, `Discord` shortcut. Surfaces the Tools-menu items where users already troubleshoot. `MCP Server: Start/Stop` stays in the menu (advanced). ### Limitations - `Mono.CSharp.Evaluator` (Unity 2022+ Mono build) does not parse generic TYPE instantiation: `new List()`, `new Dictionary()`, `new HashSet()` silently return `result: null`. Workarounds: use arrays (`new int[] {1, 2, 3}`), `System.Collections.ArrayList`, or generic METHOD calls which DO work (`FindObjectsByType(...)`, `GetComponent()`). --- ## [1.2.22] - 2026-05-21 — Emergency Hotfix ### Critical Fix - **MCP timeout regression (ESC-0102)**: `SynLog.Info` called `EditorPrefs.GetBool` on every log invocation. `EditorPrefs` is main-thread only — calling it from `ListenForMessages` (Task.Run background thread, e.g. WebSocket `ReceiveAsync` handlers) threw silently and killed the listener Task. Every MCP command from Claude Desktop / Cursor then timed out. - **Fix**: `SynLog` now caches the verbose flag in a `volatile bool` at `[InitializeOnLoadMethod]` time. Info/Warn read the cache (thread-safe). `Set` updates both the cache and `EditorPrefs`. - Introduced in v1.2.20 with the SynLog wrapper; surfaced under load with the v1.2.21 detached-spawn pipeline. Affected all platforms (Win + Mac). - **`NexusEditorMCPService.lastConnectionCheckTime` epoch mismatch**: Written via `ThreadSafeTime()` (Stopwatch-since-classload), compared against `Time.realtimeSinceStartup` (Editor-since-startup). After the first domain reload Stopwatch reset to 0 while `Time.realtimeSinceStartup` kept counting — the gate `currentTime - lastConnectionCheckTime > 2f` became permanently true, forcing the reconnect phase to fire every frame and tearing down established sessions. - **Fix**: `Update()` calibrates `ThreadSafeTime()` against `Time.realtimeSinceStartup` on the first main-thread tick. Both sides now share the same epoch. ### Added - **`unity_run_csharp` meta-tool (SuperSave) / `run_csharp` Editor operation**: Equivalent of Blender's `run_python`. Execute arbitrary C# against the running Editor (UnityEngine / UnityEditor / Linq / Newtonsoft.Json pre-imported). Uses `Mono.CSharp.Evaluator` (instance API, all-AppDomain assembly injection) — does NOT trigger an AssemblyReload, so the connection stays alive. ### Diagnostics - `index-supersave.js`: added `wss.on('error')` + per-socket `ws.on('error')`, connection-info logging, `unityWebSocket assigned` confirmation, `readyState !== OPEN` precheck, and `send()` callback so write failures surface immediately instead of bleeding into the 60s timeout. - `NexusWebSocketClient.ReceiveLoop` (HTTP-bridge path): added missing `EndOfMessage` concatenation. Messages over 4096B were truncated mid-chunk and failed JSON parse. --- ## [1.2.21] - 2026-05-20 ### Fixed - **Windows HTTP Server Cascade Kill (ESC-0095)**: Root cause finally identified. Unity Editor on Windows assigns itself a Win32 Job Object with `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`. Any child process started via `Process.Start` inherits the Job and gets killed when Unity manipulates it on assembly reload / PlayMode transitions. This is the long-standing reason HTTP server "dies" after several script edits — and why the v1.2.10 → v1.2.11 internal-to-external rewrite did not fix it (the external Node.js was still inside Unity's Job). - **Fix**: Replaced `Process.Start` on Windows with `CreateProcessW` P/Invoke using `CREATE_BREAKAWAY_FROM_JOB | DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP`. The spawned `node.exe` now runs fully independent of Unity's Job Object. - **PID Recovery**: Node PID stored in `SessionState` + `EditorPrefs`. After domain reload, `[InitializeOnLoadMethod]` re-attaches by PID and only reconnects the WebSocket — the HTTP process itself survives. - **Parent Watchdog (orphan guard)**: `http-server.js` now accepts `--parent-pid={UnityPID}` and self-terminates if Unity dies. Prevents zombie `node.exe` even when `BREAKAWAY` succeeds. - **Detached log file**: `--log={path}` routes Node output to a file because stdout pipes break under `DETACHED_PROCESS`. Logs land in `MCPServer/logs/http-server.log`. - **Fallback**: If `CREATE_BREAKAWAY_FROM_JOB` is denied (ACCESS_DENIED — Unity's Job missing `JOB_OBJECT_LIMIT_BREAKAWAY_OK`), retries with `DETACHED_PROCESS` only. Behaviour matches v1.2.20 in that fallback case, but the parent-PID watchdog still guards orphans. - **macOS / Linux behaviour unchanged**: Those platforms have no Job-Object-equivalent cascade-kill mechanism, so the legacy `Process.Start` path is retained. ### Reference - Burst Compiler (Unity's own package) uses the same `CREATE_BREAKAWAY_FROM_JOB` technique for the same reason. See `BclApp.cs` in `com.unity.burst`. --- ## [1.2.20] - 2026-05-10 ### Fixed - **Async Thread Crash on Disconnect (ESC-0025)**: `OnConnectionLost()` accessed `Time.realtimeSinceStartup` from non-main threads, throwing `get_realtimeSinceStartup_Injected can only be called from the main thread` and killing `ListenForMessages`. After this exception, all subsequent tool executions failed silently until Unity restart. - Added `ThreadSafeTime()` helper using `System.Diagnostics.Stopwatch` for thread-agnostic timing - `OnConnectionLost()` now uses `ThreadSafeTime()` when called from async/WebSocket contexts - Reported repeatedly on Windows v1.2.19; should now self-recover instead of requiring restart - **Main Window Repaint Recursion**: `ThrottledRepaint()` was calling itself instead of `Repaint()`, causing infinite recursion when triggered. Fixed to call `Repaint()` properly. ### Changed - **Editor Log Volume**: Introduced `SynLog` wrapper allowing internal Info/Warning logs to be toggled via Setup Window → HTTP Server tab → "Verbose Logs". Errors are always logged. - **Setup Window Min Size**: Reduced from 800×800 to 480×480 so the window fits on smaller laptop screens and can be docked alongside other panels. ### Safeguards - **Auto-Update Path Validation**: Backup/replace of `Synaptic AI Pro/` is now gated by file-size (≥100KB) and marker-file checks before deleting the existing installation. Failed downloads or partial archives no longer wipe the working folder. --- ## [1.2.19] - 2026-04-23 ### Fixed - **Windows HTTP WebSocket Stability**: Fixed HTTP server tab becoming unresponsive on Windows (contributed by OverlordMethuselah777) - Added reentrancy guard to prevent concurrent Connect() calls - Connect timeout (5 seconds) prevents indefinite hang - Background tasks properly tracked and awaited on disconnect - **MCP Reconnect Storm Prevention**: Fixed reconnect phase machine firing unlimited background tasks - Added MIN_RECONNECT_INTERVAL (10s) hard gate between reconnect attempts - All fire-and-forget tasks now tracked with fault logging - Connect timeout (5s) added to MCP WebSocket handshake - **Setup Window UI Freeze**: Port check moved to background thread (contributed by OverlordMethuselah777) - Port check throttled to every 2 seconds with cached result - **Main Window Repaint Flood**: Added ThrottledRepaint() at 10Hz cap (contributed by OverlordMethuselah777) ### Added - **MCP Server Start/Stop Menu**: Tools > Synaptic Pro > MCP Server: Start/Stop (contributed by OverlordMethuselah777) - enableMCP master switch, persisted via EditorPrefs ### Changed - **Assembly Definition**: Fixed VFX Graph versionDefines expression --- ## [1.2.18] - 2026-04-15 ### Added - **Auto-Update System**: One-click update check on startup (once per day) - BOOTH/site version: auto-download and replace - Asset Store version: browser redirect - **WebSocket Heartbeat**: ping/pong keepalive for connection stability --- ## [1.2.17] - 2026-04-14 ### Fixed - **HTTP Server Tab Performance**: Reduced UI overhead --- ## [1.2.16] - 2026-04-13 ### Fixed - **Unity 6 GUILayout**: Layout compatibility fix - **Auto-Start**: Domain reload behavior corrected --- ## [1.2.15] - 2026-04-12 ### Fixed - **Setup Window Freeze**: Fixed freeze on large projects --- ## [1.2.14] - 2026-04-11 ### Fixed - **"Hold on" Dialog**: Fixed blocking dialog issue - **Windows Command Path**: Enhanced Node.js detection - **Node.js Process Cleanup**: Improved cleanup on exit - **MCP Port Conflict**: Fixed with multiple Claude Code sessions --- ## [1.2.13] - 2026-04-10 ### Fixed - **Setup Window Repaint Loop**: Fixed continuous repaint --- ## [1.2.12] - 2026-04-09 ### Fixed - **Windows Path with Spaces**: HTTP server startup fix --- ## [1.2.11] - 2026-04-08 ### Changed - **HTTP Server Externalized**: HTTP Server now runs as external Node.js process (`http-server.js`) - Resolves domain reload and Play Mode stability issues - HTTP and WebSocket on same port (default: 8086) - Unity connects via WebSocket automatically - Project-specific port settings (each Unity project can use different port) ### Added - **http-server.js**: New standalone HTTP server - All endpoints: `/`, `/health`, `/tools`, `/categories`, `/tools/search`, `/execute`, `/batch`, `/resources` - Same port for HTTP and WebSocket (no port conflict with MCP) - Auto-reconnect on connection loss ### Removed - **Internal HTTP Server (C#)**: Removed `NexusHTTPServer.cs` - replaced by external Node.js server --- ## [1.2.10] - 2026-04-06 ### Fixed - **MCP Dual-Process Startup Bug**: Fixed critical issue where Claude Code/VSCode starts two MCP processes simultaneously - Root cause: When extension starts MCP, PID-A listens successfully, PID-B gets EADDRINUSE - Silent `uncaughtException` handler swallowed error, PID-A dies (stdin closed), PID-B survives but never listened - Result: MCP stdio works but WebSocket connection fails - Solution: Added `startServerWithRetry()` with 5 retry attempts and `requestShutdownFromPriorProcess()` WebSocket handover - Added shutdown message handler for graceful process takeover - Fixed in both `index.js` and `index-supersave.js` ### Added - **MCP Resources**: New `resources/list` and `resources/read` protocol support - `synaptic://tools/reference` - Compact tools reference (~31KB) - `synaptic://tools/reference/full` - Full markdown reference with inputSchema (~103KB) - Enables prompt caching for reduced token usage - **HTTP Resources Endpoints**: New endpoints for tools reference - `GET /resources` - List available resources - `GET /resources/read?uri=...` - Read resource by URI - Root `/` endpoint now includes full tools reference with inputSchema --- ## [1.2.9] - 2026-04-03 ### Added - **Export Package Tool**: New `unity_export_package` tool to create .unitypackage files - Export multiple asset paths at once (comma-separated) - Optional dependency inclusion - Custom output path or auto-generated with timestamp --- ## [1.2.8] - 2026-04-03 ### Added - **Tool Search Endpoint**: New `GET /tools/search` endpoint for keyword-based tool discovery - Search by keyword in tool name, title, and description - Optional category filter: `?q=material&category=Material` - Configurable result limit: `?q=camera&limit=10` - Relevance scoring for better results ranking - Example: `curl "http://localhost:8086/tools/search?q=material&limit=5"` - **MCP Search Tool**: New `search_tools` meta-tool for MCP server - Search tools without knowing exact category - Parameters: `query`, `category` (optional), `limit` (optional) - Returns ranked results with score - **Console Log Filtering**: New filtering options for `unity_analyze_console_logs` to reduce token usage - `excludeSynaptic` (default: true): Auto-exclude internal Synaptic logs ([Synaptic], [NexusConsole], etc.) - `filter`: Include only logs containing specified text - `exclude`: Exclude logs matching patterns (comma-separated) - `groupByMessage`: Group duplicate messages with count instead of repeating - Reduces token usage significantly (1,500-2,000 → 50-100 tokens for typical queries) ### Improved - **HTTP Server Port Recovery**: Now forcefully kills any process blocking the port on startup - No more "port already in use" errors after domain reload - Works on Windows (netstat/taskkill) and macOS/Linux (lsof/kill) - Reduced retry count (5→3) and delay (2s→500ms) for faster startup ### Fixed - **MeshRenderer Material Assignment**: Fixed JSON serialization error when setting material via `unity_update_component` - Root cause: `Color.linear` property caused circular reference during serialization - Added `ConvertValueForSerialization` handlers for Material, Texture, and UnityEngine.Object types - Now returns safe serializable object with `name`, `shader`, `assetPath`, `instanceId` --- ## [1.2.7] - 2026-03-27 ### Fixed - **Windows Domain Reload Recovery**: Fixed critical issue where HTTP server could not restart after script recompilation on Windows - Root cause: Port remained occupied during domain reload due to HttpListener not being properly released - Added `ForceReleasePort()` method called before assembly reload - Direct Abort/Stop/Close on HttpListener object for immediate port release - Added `GC.Collect()` and `GC.WaitForPendingFinalizers()` to ensure port is released - Replaced `Thread.Abort()` (deprecated in .NET Core) with `Thread.Join(500)` for graceful thread termination - 100ms sleep after cleanup to ensure OS releases the port - Resolves "Failed to start HTTP server" error that previously required Unity restart - **HTTP Server Retry Settings**: Increased retry attempts for better Windows compatibility - Auto-start retries: 5 → 15 attempts - Auto-start retry delay: 0.5s → 1.0s - Manual start retries: 3 → 5 attempts - Manual start retry delay: 500ms → 1000ms - Provides more time for Windows to release ports after domain reload --- ## [1.2.6] - 2026-03-23 ### Fixed - **HTTP Server Port Stability**: Improved port release and binding reliability - Added `Abort()` call on Stop for immediate port release - Added retry logic on Start to handle TIME_WAIT state (common on Windows) - Up to 5 retries with 500ms delay for robust port binding - Prevents "port already in use" errors after rapid restart cycles --- ## [1.2.5] - 2026-02-27 ### Added - **HTTP Prompt Endpoint**: New `GET /prompt` endpoint to fetch AI control instructions directly - No more manual copy-paste from Setup Window - Returns the full AI control prompt with endpoint documentation - Useful for automation and custom integrations - **Test Runner Auto-Execution**: `unity_run_tests` now supports automated test execution - `operation="run"` - Start test execution (EditMode or PlayMode) - `operation="results"` - Get test progress and results - `operation="list"` - List available tests - Uses Unity TestRunnerApi with ICallbacks for reliable async execution - Returns detailed results: passed/failed/skipped counts, duration, error messages ### Fixed - **Windows Claude Desktop Auto-Setup**: Fixed one-click setup not detecting Claude Desktop config on Windows - Added support for Microsoft Store version (`%LOCALAPPDATA%\Packages\Claude_*`) - Added multiple path candidates (`%APPDATA%\Claude`, `%LOCALAPPDATA%\Claude`) - Improved detection logic to find existing config files first - Added detailed debug logging for troubleshooting - **VFX Graph Tools**: Fixed critical reflection issues in VFX Graph manipulation tools - `unity_vfx_add_context`: Fixed "Index out of range" error when adding contexts - `unity_vfx_add_parameter`: Fixed "Index out of range" error when adding parameters - `unity_vfx_add_block`: Fixed "AddChild failed" error when adding blocks - `unity_vfx_set_attribute`: Fixed "Ambiguous match found" error when setting attributes - Improved compatibility with Unity 2022.3 LTS and newer VFX Graph versions - Added child count verification to detect successful adds despite internal exceptions - **HTTP Server Play Mode Stability**: Fixed server becoming unresponsive after Play mode transitions - Added `playModeStateChanged` handler to restart server during Play mode changes - Server now cleanly stops before entering/exiting Play mode and restarts after - Prevents port occupation issues that caused "server not responding" errors - **Animator Controller Editor Refresh**: Fixed Animator window not updating after script-based changes - Added `AssetDatabase.ImportAsset(..., ForceUpdate)` after controller modifications - Animator window now immediately reflects changes from AI tools - **MCP Connection Messages**: Improved connection error messages - Reduced console log noise (only logs 1st and every 5th attempt) - Clearer message when MCP server is not running - Suggests starting Claude Desktop/Cursor and using AI Reconnect ## [1.2.4] - 2026-02-03 ### Added - **Dynamic Meta-Tools**: New universal tools for inspecting and modifying any Unity component - `unity_dynamic_inspect`: Inspect GameObjects, components, scene, hierarchy, prefabs, project - Discovers all serialized properties with types and current values - Supports depth-limited hierarchy traversal - Wildcard search for prefabs (e.g., `Assets/**/*.prefab`) - `unity_dynamic_modify`: Modify any component property using property paths - Supports nested properties (e.g., `m_Lens.FieldOfView`) - Auto-creates components with `createIfMissing` option - Handles Vector2/3/4, Color, Enum, and all basic types - `unity_dynamic_create`: Universal creation tool - GameObjects (empty or primitives) - Prefab instantiation from any asset path - Scene loading (single or additive) - Component addition to existing objects - **SuperSave Mode Meta-Tools**: Same functionality available as `inspect`, `modify`, `create` in token-saving mode ### Fixed - **HTTP Server Port Cleanup**: Fixed port remaining occupied after script recompilation - Added `AssemblyReloadEvents.beforeAssemblyReload` handler to stop server before domain reload - Added `EditorApplication.quitting` handler to stop server on editor quit - Prevents "port already in use" errors after script changes - **Script Creation Path**: `unity_create_script` now supports custom path parameter - Previously always created scripts in `Assets/Synaptic_Generated/` - Now accepts `path` parameter (e.g., `Assets/Scripts/Player/`) - AI can organize scripts in proper project folders - **Node.js Path Detection for Windows**: Fixed MCP server not starting on Windows when Node.js is installed on D: drive or non-standard locations - Added `FindNodePath()` function to detect Node.js across multiple installation paths - Supports nvm-windows, Volta, fnm, and manual installations - Searches D:, E: drives for users who install on secondary drives - Falls back to PATH if not found in common locations - Config now writes full Node.js path instead of just "node" - **Prefab/Asset Contamination in Scene Analysis**: Fixed critical bug where prefabs loaded in memory were incorrectly included in scene analysis - `unity_analyze_draw_calls` was reporting objects from prefabs as if they existed in the scene - `unity_search_objects` and `unity_cleanup_empty_objects` had the same issue - Added `EditorUtility.IsPersistent()` check to exclude non-scene objects - Now only returns objects that actually exist in loaded scenes --- ## [1.2.3] - 2026-01-24 ### Fixed - **HTTP API Tool Mapping**: Fixed unmapped tools returning "Unknown operation" error - Tools without explicit mapping now correctly strip `unity_` prefix - `/execute`, `/batch`, `/tool/:name` endpoints all work with any tool - Example: `unity_get_scene_summary` → `GET_SCENE_SUMMARY` --- ## [1.2.2] - 2026-01-22 ### Fixed - **Token SuperSave Mode**: Fixed execute tool not sending commands to Unity - Command name now uses lowercase to match Unity's `ConvertCommandToOperationType` - Fixed PORT environment variable (was MCP_PORT) - **MCP Config Generation**: All config generators now use selected server mode - Fixed `GenerateGeminiConfig()` - was hardcoded to index.js - Fixed `GenerateWindsurfConfig()` - was hardcoded to index.js - Fixed `GenerateClaudeCodeSpecificConfig()` - was hardcoded to index.js - Now correctly uses `GetServerScriptPath()` for all clients - **GetGameObjectsList**: Added parameter aliases for more intuitive usage - `tag` → `tagFilter` - `layer` → `layerFilter` - `name` → `nameFilter` - **GetComponentDetails**: Now returns useful info for all component types - Previously returned `null` for unhandled component types - Now returns basic serializable properties (up to 10) - Falls back to `{ type_name: "ComponentName" }` if no properties available --- ## [1.2.1] - 2026-01-20 ### Fixed - **Token SuperSave Mode**: Added missing shutdown handlers to `index-supersave.js` - SIGINT/SIGTERM signal handling - stdin close detection for proper MCP client cleanup - Graceful WebSocket and server shutdown --- ## [1.2.0] - 2026-01-19 ### Added - Token SuperSave Mode ★ - **New MCP Server Mode**: 99% context reduction with only 3 meta-tools - `list_categories()` - Discover available tool categories - `list_tools(category)` - See tools & parameters in a category - `execute(tool, params)` - Run any of 350+ tools by name - Works with ALL MCP clients (no dynamic tool loading required) - Best for long AI sessions - more context for conversation - Now set as **Recommended** and default in Setup Window - **Changelog Dialog**: Shows what's new on startup/import - "Don't show on startup" toggle - Manual access: Tools → Synaptic Pro → What's New - Version-aware: Only shows once per version ### Changed - **Setup Window Redesigned**: - Token SuperSave Mode at top with ★ Recommended label - Green highlight for recommended option - Updated tool counts (350+ tools) - Clearer mode descriptions ### Improved - **Error Messages**: Better debugging experience - "Did you mean...?" suggestions for unknown tools - Detailed troubleshooting for connection errors - Timeout error explanations - Tool info included in error context - **Tool Registry**: Dynamic loading from tool-registry.json - No more hardcoded tool definitions in supersave mode - Easier maintenance and updates --- ## [1.1.9] - 2026-01-15 ### Fixed - **Batch Tool (`unity_execute_batch`)**: Fixed batch execution not working - Added missing `EXECUTE_BATCH` operation mapping in MCP service - HTTP Server now auto-converts `operations` format to Unity's `tasks` format - Both formats now work: `operations` (user-friendly) and `tasks` (native) - **MCP stdio Protocol**: Changed `console.log` to `console.error` in index.js - Prevents log messages from corrupting JSON-RPC communication - Fixes "Unexpected token" JSON parse errors for some users --- ## [1.1.8] - 2025-01-15 ### Added - **Sphere Skybox Mode**: New `sphere`/`dome`/`landscape` type for `unity_create_skybox_from_image` - Creates inverted sphere mesh with texture on inside - Perfect for regular landscape photos (non-360°) - Parameters: `radius`, `followCamera`, `objectName` - `SkySphereCameraFollow` component keeps sphere centered on camera - Best for wide panoramic shots and scenic backgrounds ### Fixed - **Shader PackageRequirements**: Added `PackageRequirements` tags to URP SubShaders - SynapticWater.shader: URP SubShader now skipped when URP package not installed - SynapticCaustics.shader: Same fix applied - Resolves shader compilation errors for users without URP - Built-in fallback SubShader works correctly on all pipelines ### Changed - **MCP Server Name**: Changed from `unity` to `unity-synaptic` across all configurations - Prevents conflicts with other Unity MCP integrations - Updated: Claude Desktop, Claude Code, Windsurf, Gemini CLI, Codex CLI, Cline - TOML configs use quoted key: `[mcp_servers."unity-synaptic"]` - Permissions updated: `mcp__unity-synaptic` - Mentions updated: `@unity-synaptic` ### Improved - **HTTP Server Auto-Start**: Server automatically restarts after Unity recompilation - New "Auto-Start on Load" toggle in HTTP Server tab - Settings persist via EditorPrefs - Similar to MCP Auto-Reconnect feature - **HTTP Server Tool Registry**: Now loads all tools from tool-registry.json - Previously only 13 hardcoded tools available - Now exposes all 351 tools via HTTP API - `/tools` endpoint shows full tool catalog --- ## [1.1.7] - 2025-01-13 ### Added - **HTTP Server Tab**: Direct HTTP API access to Unity tools - New "HTTP Server" tab in Synaptic Setup window - Start/Stop HTTP server with one click - Default port: 8086 (configurable) - Endpoints: `/health`, `/tools`, `/scene`, `/tool/{name}` - CORS support, API docs in UI, cURL examples - **NexusHTTPServer.cs**: Runtime HTTP server component - HttpListener-based, thread-safe request handling - **unity_instantiate_prefab Tool**: Place prefabs/FBX assets from project into scene - Supports any asset path (e.g., `Assets/Models/Chair.fbx`, `Assets/Prefabs/Player.prefab`) - Optional parameters: name, position, rotation, scale, parent - Works with .prefab, .fbx, and other importable 3D formats - Resolves user request for placing existing project assets via CLI - **execute_menu_item Tool**: Execute Unity menu items via MCP - Trigger any Unity Editor menu command (e.g., "File/Save", "Edit/Play") - Enables automation of Editor workflows - **InstanceID Support**: GameObject lookup by InstanceID - `FindGameObjectByNameOrId()` helper method - Accepts both name strings and integer InstanceIDs - More reliable object identification in complex scenes - **Start MCP Server Menu**: Tools/Synaptic Pro/Start MCP Server - Handles paths with spaces correctly - Port-in-use check prevents duplicate server instances - Cross-platform support (Windows/macOS) ### Improved - **MCP Auto-Retry System**: Enhanced for long compilations - Increased from 10 to 30 retries - Total wait time: up to 5 minutes (was 2.5 min) - Applies to: index.js, index-essential.js, hub-server.js - Prevents timeout errors during large project recompilation ### Changed - **Menu Items**: Removed emojis from Auto Reconnect menus --- ## [1.1.6] - 2025-12-29 ### Fixed - Build Errors - **NexusEventMonitor.cs**: Fixed Editor-only API usage causing build failures - `CompilationPipeline` now wrapped in `#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER` - `OnGUI()` method with `EditorStyles`, `EditorGUILayout` now wrapped in `#if UNITY_EDITOR` - Resolves: CS0103 errors for `CompilationPipeline`, `EditorApplication`, `EditorUtility`, `EditorStyles`, `EditorGUILayout` --- ## [1.1.5] - 2025-12-13 ### 🚀 Major Update - 42,600+ lines added! ### Added - AI Systems - **GOAP (Goal-Oriented Action Planning) Runtime Engine** - `GOAPAgent.cs` - Full agent implementation with planning & execution - `GOAPPlanner.cs` - A* search-based planner for action sequences - `GOAPActionBase.cs` - Base class for custom actions - `GOAPDynamicAction.cs` - Runtime-configurable actions - `GOAPGoal.cs` - Goal definition with priorities - `WorldState.cs` - State representation for planning - MCP Tools: CREATE_GOAP_AGENT, ADD_GOAP_ACTION, ADD_GOAP_GOAL, SET_WORLD_STATE, etc. - **Behavior Tree Runtime** - `BTNode.cs` - Base node with Success/Failure/Running states - `BTComposites.cs` - Selector, Sequence, Parallel nodes - `BTDecorators.cs` - Inverter, Repeater, Succeeder, UntilFail, Cooldown - `BTLeaves.cs` - Wait, Log, SetBlackboard, CheckBlackboard, MoveTo, etc. - `BehaviorTreeRunner.cs` - Runtime executor with blackboard - MCP Tools: CREATE_BEHAVIOR_TREE, ADD_BT_NODE, SET_BT_BLACKBOARD, etc. ### Added - Shaders (URP/HDRP/Built-in Compatible) - **SynapticWaterPro.shader** - Advanced ocean with Gerstner waves, foam, refraction, caustics - **SynapticSkyPro.shader** - Procedural sky with volumetric clouds, day/night cycle - **SynapticToonPro.shader** - Anime-style cel shading with outline, rim light - **SynapticGrassPro.shader** - GPU-instanced grass with wind animation - **GrassInstancer.compute** - Compute shader for grass placement - **CloudNoise.compute** - Procedural cloud generation - Runtime controllers: DissolveController, ShieldController, GrassRenderer ### Added - Water System - **OceanSystem.cs** - Wave simulation and water surface management - **Buoyancy.cs** - Physics-based floating objects - **WaterPhysics.cs** - Water interaction and splash effects - MCP Tools: CREATE_OCEAN_SYSTEM, ADD_BUOYANCY ### Added - VFX Graph Editing (6 New Tools) - `unity_vfx_set_output` - Change blendMode, texture, softParticle - `unity_vfx_set_block_value` - Modify block values (color, size, turbulence) - `unity_vfx_set_spawn_rate` - Adjust spawn rate - `unity_vfx_list_blocks` - List all contexts/blocks with indices - `unity_vfx_remove_block` - Remove blocks from contexts - `unity_vfx_get_block_info` - Get detailed block information - New VFXBuilder methods: SetOutputSettings, SetBlockValue, SetSpawnRate, ListBlocks, RemoveBlock, GetBlockInfo ### Added - VFX Textures (150+ CC0 Kenney Textures) - Fire/Flame: flame_01~06, fire_01~02, flare_01 - Smoke: smoke_01~10, whitePuff00~24, blackSmoke00~24 - Explosion: explosion00~08 - Sparks: spark_01~07 - Magic: magic_01~05, star_01~09, twirl_01~03 - Trails: trace_01~07 - Effects: muzzle_01~05, slash_01~04, light_01~03, circle_01~05 - CC0 License - free to use and redistribute - `SetParticleTexture()` method for easy texture assignment ### Added - MCP Auto-Retry System - Automatic 3 retry attempts with 3-second intervals - Handles Unity recompilation gracefully - Success response includes retry info when applicable - Clear error messages after all retries exhausted ### Added - Script Safety Features - `READ_SCRIPT` requirement before editing (like Claude Code) - `UpdateScriptVariable` now requires prior read ### Fixed - VFX - **Fire Preset**: Now with natural flickering - Random lifetime (0.8-2.0s), size (0.3-0.7), angle (0-360°) - Random velocity spread, angular velocity for rotation - Enhanced turbulence (intensity 3.0, frequency 5) - **Color Attribute**: Uses Vector3 (RGB) instead of Vector4 - **VFXSlotFloat3 Angle**: Float → Vector3 conversion added ### Fixed - Serialization - **Vector3 circular reference**: GET_TERRAIN_INFO, GET_LIGHTING_INFO, GET_UI_INFO, GET_PHYSICS_INFO - Using `Vector3ToString()` helper throughout ### Fixed - MCP Tools - `unity_update_component`: Accepts both `gameObject`/`component` and `gameObjectName`/`componentName` - `unity_set_property`: Fixed `propertyName` → `property` mapping - Weather system controllers now properly attached (Rain, Snow, Wind, Lightning, Thunderstorm) ### Fixed - Build Errors - Editor-only code properly wrapped in `#if UNITY_EDITOR` - Debug namespace ambiguity resolved - Shader function redefinition and LerpWhiteTo errors ### Changed - **Auto Reconnect Menu**: Shows "Enable" when OFF, "Disable" when ON - **Tool Registry**: Regenerated with 342+ tools - **VFX Presets**: Now use Kenney textures by default ### Technical Stats - 93 files changed - 42,641 insertions, 6,561 deletions - New Runtime scripts: 15+ - New Shaders: 6 - New MCP Tools: 20+ ## [1.1.4] - 2025-11-26 ### Added - **HTTP API Endpoints**: Direct Unity control from AI CLIs without MCP - `GET /health` - Check Unity connection status - `GET /tools` - List all 246 available tools with descriptions - `POST /tool/:toolName` - Execute any Unity tool via HTTP - Compatible with Claude Code, Codex CLI, Gemini CLI, and custom AI tools - Full tool-registry.json integration for tool discovery ### Fixed - **WebSocket Message Handling**: Improved operationId recognition - NexusEditorMCPService now correctly reads operationId from parameters - Fixed timeout issues when calling tools via HTTP endpoints - Unified response format between MCP stdio and HTTP/WebSocket paths ### Changed - Version bumped to 1.1.4 across all components - package.json, MCPServer/package.json - NexusWebSocketClient.cs, NexusEditorMCPService.cs - NexusSetupWindow.cs, NexusSetupManager.cs ## [1.1.3] - 2025-11-25 ### Added - **LM Studio Essential Mode**: New lightweight 80-tool configuration optimized for LM Studio and Cursor - 80 carefully selected essential tools (67% reduction from full 246 tools) - 62% smaller file size (90KB vs 239KB) - Perfect for local AI workflows without subscription costs - Includes: GameObject, Camera, Scene, UI, Screenshot, Animation basics - Removed: Scripting, GOAP, Weather, Advanced VFX, Batch operations - **3-Mode Setup Window**: Easy selection for different AI clients - Claude Desktop/Cursor (Full 246 tools) - Cursor/LM Studio Essential (80 tools) ← NEW! - GitHub Copilot (Dynamic 8→N tools) - **index-essential.js**: Optimized server script for essential mode ### Fixed - **LM Studio Configuration**: Added missing `cwd` parameter to LM Studio mcp.json - Tools now correctly loaded and recognized by LM Studio - Proper working directory ensures Node.js modules load correctly ## [1.1.2] - 2025-11-24 ### Fixed - **Cinemachine 3.x Complete Support**: Full API compatibility - Fixed all 27 compilation errors when using Cinemachine 3.1.5 - API Changes: Enum names (PositionModes, RotationModes, UpdateMethods) - API Changes: LensSettings.Orthographic → ModeOverride pattern - API Changes: ICinemachineCamera → CinemachineCamera casting - API Changes: Component property structs (PositionComposer, RotationComposer, Deoccluder) - API Changes: InputAxisController.Controllers.Length → Count - API Changes: ImpulseSource.SignalDefinition → ImpulseDefinition - API Changes: CinemachineDeoccluder.ObstacleAvoidance → AvoidObstacles - FreeLook implementation: Added missing CinemachineRotationComposer component - Added GetNoiseProfile() helper function for CM3 - Readonly struct property handling (get-modify-set pattern) - **Advanced Material Properties**: JSON parsing - Fixed nested `properties` parameter parsing - Properties now correctly applied (color, metallic, smoothness, emission) - Added detailed debug logging for property parsing - Backward compatibility maintained for direct parameter format ### Improved - **FreeLook Camera UX**: Clearer error handling - Made `follow` parameter required (removed confusing auto-dummy-target) - Detailed error messages with cause + solutions + example code - Tool description improvements in index.js and tool-registry.json - Success messages show all created components - Cleanup on error (removes partially-created camera objects) ### Technical - Both Cinemachine 2.9.x and 3.1.x fully supported via preprocessor directives - No breaking changes - all existing code continues to work - Enhanced logging throughout Cinemachine operations ## [1.1.1] - 2025-11-23 ### Fixed - **Cinemachine Compatibility**: Both v2 and v3 support - Fixed assembly reference issues for Cinemachine 2.9.7 - Added proper version detection for Cinemachine v2 (`CINEMACHINE_2`) and v3 (`CINEMACHINE_3`) - Assembly definition now handles both `Cinemachine` (v2) and `Unity.Cinemachine` + `Unity.Splines` (v3) - **URP Material Support**: Universal Render Pipeline compatibility - Added render pipeline detection with caching for performance - `CreatePrimitiveWithMaterial()` helper automatically applies URP/HDRP/Legacy shaders - Fixed pink material issue in URP projects when creating primitives - Updated all GameObject creation functions to use pipeline-compatible materials - Updated all game template functions (FPS, Platformer, RPG, Puzzle, Racing, Strategy) - Shader not found warnings added for debugging ### Improved - **Code Quality**: Refactored primitive creation - Eliminated code duplication in `CreateGameObject()` function - Centralized material creation logic - Performance optimization: Cached render pipeline detection - Updated 50+ primitive creation locations across codebase ## [1.1.0] - 2025-11-23 ### Added #### Dynamic Tool Loading System (GitHub Copilot Support) - **MCP Hub Server** (`hub-server.js`): Dynamic tool loading for GitHub Copilot - Starts with 8 essential management tools - Dynamic tool loading via `select_tools()` by category or keywords - Support for `notifications/tools/list_changed` (MCP spec 2025-06-18) - Automatic tool list refresh in GitHub Copilot (VS Code) - **No OpenAI API required**: Text-based keyword matching and category search - 31 tool categories for comprehensive Unity feature coverage - Access all 246 tools dynamically without hitting IDE tool limits - Unity WebSocket integration (port 8080) matching index.js protocol #### Prompt Caching Support (Claude Desktop) - **Tool Catalog Resource** (`unity://tools/catalog`): Dramatic session capacity improvement - **Verified Results (11 actual tool calls)**: - First request: 57,511 tokens (tool definitions cached) - 2-11 requests average: 1,596 tokens/call - **Token reduction: 97.2%** per subsequent call - Total used: 73,476 tokens (11 calls) - Remaining: 116,524 tokens (190,000 budget) - **Session Capacity**: ~84 total tool calls per session - Practical development: 70-90 operations - With heavy data fetching: 50-60 operations - **Use Cases Enabled**: - Create 3 UI screens (20 ops each) = 60 calls - 10 debugging iterations - 20 adjustments/confirmations - Total: 90 operations in single session #### Lightweight Scene Information Tools - **unity_get_scene_summary**: Fast scene overview (<200KB) - Scene name, GameObject count, cameras, lights - Root GameObjects list (max 50) - Replaces heavy `unity_get_scene_info` for large scenes - **unity_get_gameobjects_list**: Filtered GameObject queries (<50KB) - Filter by layer, tag, name (contains), active state - Returns GameObject names, IDs, paths, metadata - Max 100 results per query - **unity_get_gameobject_detail**: Individual GameObject inspection (<10KB) - Detailed transform, components, children, parent info - Find by name or instanceId - Component-specific details (MeshRenderer, Light, Camera, etc.) - **unity_get_scene_changes_since**: Incremental scene updates - Timestamp-based differential updates - Returns added, removed, modified GameObjects - Efficient monitoring for large scenes #### Setup Window AI Client Selection - **AI Tool Selection UI**: Choose between Full Mode and Dynamic Mode - Claude Desktop / Cursor: Full Mode (246 tools, prompt caching) - GitHub Copilot: Dynamic Mode (8→dynamic tools, notifications) - Mode-specific setup instructions and success messages - Automatic server path selection (index.js or hub-server.js) #### Infrastructure - **Tool Loader System** (`utils/tool-loader.js`) - **31 tool categories**: GameObject, Transform, Material, Lighting, Camera, Physics, UI, Animation, Cinemachine, Scene, GOAP, Audio, Input, VFX, Shader, Weather, TimeOfDay, Editor, Package, Build, Monitoring, AssetManagement, Optimization, Batch, GameSystems, AI, Debug, Timeline, Scripting, Screenshot, Utility - **Text-based keyword matching** with relevance scoring (no API required) - Category-based filtering with default presets - Multi-keyword support with score boosting - Input normalization (arrays, strings, comma/pipe separated) - **Tool Registry** (`tool-registry.json`) - Pre-generated metadata for all 246 tools - Category assignments and descriptions - **No external API dependency**: Generated via `generate-simple-registry.js` - Tool name, title, description, and category information - **Optional OpenAI Integration** (`utils/embedding.js`) - Semantic search enhancement (if OPENAI_API_KEY provided) - Automatic fallback to text matching when unavailable - Not required for normal operation ### Changed - **MCP Server Architecture**: Dual-mode support - `index.js`: Full Mode server (246 tools, all clients) - `hub-server.js`: Dynamic Mode server (GitHub Copilot only) - **Setup Window**: Enhanced with AI client selection - Visual selection buttons with mode explanations - Dynamic info boxes based on selection - Mode-specific success messages - **Tool Count**: Corrected to 246 unique tools - Verified count (247 registrations, 1 duplicate removed) - Updated all user-facing documentation ### Technical Details - **MCP Capabilities**: - Full Mode: `tools: {}, resources: {}` (Prompt Caching via unity://tools/catalog) - Dynamic Mode: `tools: { listChanged: true }` (Notifications for dynamic tool updates) - **Hub Server Communication**: - Unity WebSocket server on port 8080 - Request/response tracking with pendingRequests Map - Protocol matching index.js for consistency - Proper error handling and message routing - **Tool Search System**: - Primary: Text-based keyword matching with relevance scoring - Fallback chain: Multi-keyword matching → category filtering - No external API calls required for normal operation - Optional: OpenAI Embedding enhancement (if API key provided) - **Supported AI Clients**: - ✅ Claude Desktop: Full Mode with Prompt Caching (~52% token reduction verified) - ✅ Cursor: Full Mode (246 tools, 80-tool warning can be ignored) - ✅ GitHub Copilot: Dynamic Mode with notifications support (tested) - **Session Lifespan Improvements**: - First call: 57,511 tokens (tool definitions cached) - Subsequent calls: ~1,596 tokens average - **Result: ~84 total tool calls per session** (vs ~13 without caching) - **6.5x capacity increase** verified with real usage ### Dependencies - **Added**: `openai` ^4.20.0 (optional - for enhanced semantic search only) - **Not required**: Hub server works with text-based keyword matching by default - Only needed if you want embedding-based semantic search enhancement ### Performance - Scene information retrieval: 80-95% size reduction for large scenes - Claude Desktop token usage: 52% reduction verified - GitHub Copilot: All 246 tools accessible within 80-tool limit ## [1.0.3] - 2025-11-21 ### Added - **One-Touch MCP Setup**: Automatic configuration for multiple AI tools with a single click - Configure Claude Desktop, Cursor, and VS Code simultaneously - `~/.cursor/mcp.json` automatically created for Cursor - `.vscode/mcp.json` automatically created for VS Code - **Smart Merge**: Preserves existing MCP server configurations, only adds/updates unity-synaptic - No manual path configuration needed - Setup Window button: "Complete MCP Setup" - **unity_capture_grid**: Auto-split Game View into grid and capture all cells - Grid sizes: "2x2", "3x3", "4x4", up to "5x5" - Each cell saved as separate file with position info (basename_r0_c0.png, etc.) - Perfect for systematic UI analysis and debugging - Works with Canvas Overlay UI - **unity_capture_ui_element**: Capture specific UI element by GameObject name - Automatically finds element and calculates screen bounds - Works with all Canvas render modes (Overlay, Camera, World Space) - No need to manually specify coordinates - Example: `elementName: "MoveButton"` captures just that button - **unity_get_screenshot_result**: Async result retrieval for Play mode captures - Call after 3 seconds when capture returns `"status": "pending"` - Returns screenshot path, width, height - Works with all async capture operations ### Fixed - **Screenshot Capture**: Complete overhaul of all screenshot tools to properly capture Canvas/UI - **CaptureGameView**: - Automatically enters Play mode if needed to capture Canvas Overlay - 60-frame wait for rendering stabilization before capture - Captures at native Game View resolution (fixed 3024x40 bug) - Exits Play mode automatically after capture - MCP tool description enhanced to force LLM to wait 3 seconds - **CaptureRegion**: - Game View mode now requires Play mode for Canvas Overlay capture - Captures full screenshot then extracts specified region - Uses actual screenshot dimensions instead of fixed resolution - Correctly captures Canvas elements in all render modes - **CaptureUIElement**: - Fixed Canvas Overlay coordinate conversion (use GetWorldCorners directly) - Fixed Y-coordinate inversion bug (both GetWorldCorners and GetPixels use bottom-left origin) - Added dimension validation before texture creation - Added debug logging for troubleshooting - **All Capture Tools**: - Auto-append .png extension if not specified - Case-insensitive extension check - Improved error messages ### Technical Details - **60-Frame Wait Mechanism**: `ScreenshotFrameUpdate()` method ensures UI is fully rendered - **EditorPrefs State Persistence**: Survives domain reload when entering Play mode - **Canvas Overlay Support**: Direct coordinate usage without WorldToScreenPoint conversion - **Y-Coordinate Fix**: No coordinate transformation needed (both systems use bottom-left origin) - **Async Workflow**: LLM instructions updated to "WAIT EXACTLY 3 SECONDS" before result retrieval - All screenshot tools now use proper resolution detection - Canvas Overlay (Screen Space - Overlay) now correctly captured in Play mode - Canvas Camera and World Space modes work in both Edit and Play mode ## [1.0.2] - 2025-11-20 ### Fixed - **Windows Compatibility**: Resolved MCP server startup issues on Windows - **Cinemachine 3.x Support**: Added automatic API detection for Cinemachine 3.0+ - Package now supports both Cinemachine 2.9.7 and 3.x versions - Automatic detection and adaptation to installed version ## [1.0.1] - 2025-11-19 ### Added - **Screenshot Capture Tools**: Three new MCP tools for visual analysis - `CaptureGameView`: Capture the Game View window - `CaptureSceneView`: Capture the Scene View window - `CaptureRegion`: Capture specific regions with coordinates - Enables Claude Vision to analyze Unity UI layouts ### Known Issues - Screenshot capture may not correctly capture Canvas/UI elements (fixed in v1.0.3) ## [1.0.0] - 2025-11-15 ### Added - Initial release of Synaptic AI Pro for Unity - 235+ professional MCP tools for Unity Editor control - Natural language interface through Claude AI - Scene management and GameObject manipulation - Advanced lighting and rendering controls - Physics and animation systems - GOAP AI system with natural language planning - Comprehensive documentation and examples - Unity 2022.3+ and Unity 6.0+ support