- package.json: remove unused react-dnd-html5-backend and react-refresh, pin babel-plugin-macros to ^2.8.0
- CustomAIClient: exclude apiKey from localStorage persistence, normalize base URL without auto-appending /v1, bound local requests cache to 20 items, add cancel token support with axios, restrict markdown tool parsing to side-effect-free tools, return empty results for asset/resource searches
- UseGenerateEvents: use activeUserId in getAiGeneratedEvent polling
- EditorFunctions: validate batch entries before scene insertion in put2dInstances and put3dInstances, fix instance rotation with setAngle for 3D
- Preferences: fix temperature input to support 0 and clamp 0.0-1.0, exclude apiKey from localStorage
- Generation & Usage: route requests and events by local ID prefix, partition status requests, decouple BYOK checks from subscription status
- Tests: reset state in beforeEach, update tests for base URL normalization, side-effect-free tools, and empty search results
- Add CustomAIClient with full OpenAI chat completions, reasoning/thinking extraction, tool calling, and local request caching
- Add complete tool schemas and robust argument extractors for all 29 GDevelop editor functions
- Add AI Settings tab in Preferences to configure custom endpoint URL, API Key, Model ID, temperature, and streaming
- Bypass cloud subscription/credit entitlement gates and S3 presigned URL uploads when custom endpoint is active
- Support batch instance placement in put_2d_instances / put_3d_instances and flexible parameter aliases
Adds `newIDE/visual-tests`: tests that manipulate the editor like a user would - in a real browser, with real clicks and real drag and drops and check after every single manipulation that nothing is broken.
Only show in developer changelog
- This pathfinding works in 2D and 3D is more flexible than the "grid-based" existing pathfinding.
- For 3D models, you can optionally choose, like for 3D physics, to follow the exact mesh of the 3D model for pathfinding - allowing characters and objects to move on or around the 3D model naturally.
- It handles "crowds" of characters, which can all go to a destination avoiding each others.
A gameplay test plays a game: it presses keys, moves the mouse, touches the screen, then checks that what should happen actually happens. For example, if the coin is collected, the score goes up, the enemy hurts the player... Tests run in a preview of the game, usually much faster than real time. [Read more about them on this page](https://wiki.gdevelop.io/gdevelop5/interface/gameplay-tests/)