Repository navigation
v0.7.4
Fixed
execute_codestrict filesystem safety no longer classifies quoted backslash-only separator literals (such aspath.Replace("\\", "/")) as absolute/UNC paths. Windows drive/rooted/UNC paths with actual path content, Unix system paths, home/config paths, traversal and filesystem-write checks remain enforced. The safety defaults and per-call overrides are unchanged; this remains a defensive heuristic, not a complete sandbox.- Declare the uGUI package dependency and reference
UnityEngine.UIfrom the editor and test assemblies. Fresh package imports can now resolve UI and EventSystems types used by inspection, input simulation and UI tools (PR #62, issue #61). execute_codeworks more than once per code reload on CoreCLR editors (Unity 7). Every snippet compiled to the sameSnippetassembly name; Mono accepts duplicate names fromAssembly.Load(byte[]), but Unity's collectible load context rejects them, so every call after the first failed withCOMPILATION_BACKEND_UNAVAILABLE. Output assemblies now get a unique name.- The dotnet-hosted Roslyn path no longer waits ~20 s per compile.
/shared:falseis not a toggle: csc reads it as the pipe name of a compiler server calledfalse, waits for it, then falls back to compiling in-process. csc compiles in-process by default, so the flag is dropped (24.5 s -> 0.55 s in a Unity 7 Editor). - The dotnet compiler host is also found in Unity 7's
DotNetSdklayout (DotNetSdk/dotnet+DotNetSdk/sdk/<version>/Roslyn/bincore/csc.dll), and a missing Mono reference profile no longer fails the toolchain: it only backfilled references the editor had not loaded itself. Mono stays the preferred host, so existing editors resolve the same toolchain as before. - The keepalive broker no longer keeps editor sockets alive. On macOS/Linux, CoreCLR editors start children without closing the editor's descriptors, so the broker held e.g. the asset-import worker IPC listener after Unity exited; the broker now closes inherited sockets before opening its own. On Windows, both Mono and CoreCLR create children with
bInheritHandles: TRUE; the broker is now started through ShellExecute (hidden window), which does not inherit handles. An already-running broker is reused as before, so the change applies the next time the broker is started. - Object ids stay numeric on Unity 7. Unity 7 formats
EntityId.ToString()asindex:version(for example28613:256), so ids handed to clients were no longer numeric and the by-id/by-name auto-detection treated them as names: parent/target ids failed withUI_PARENT_NOT_UNIQUE/INVALID_OBJECT_QUERY. Unity 7 now uses the publicEntityId.ToULong/FromULonground trip;index:versioninput is still accepted, and 6.4-6.x keep their existing format. - UI creation accepts TMP's built-in settings on com.unity.ugui 7 (Unity 7). ugui 7 no longer ships TMP Essential Resources: it uses a TMP Settings asset inside the package when the project has none. TMP text creation used to require
Resources/TMP Settingsand refused withTMP_RESOURCES_NOT_IMPORTED. The lookup now also finds the package asset, the way TMP does; older ugui versions without an import still report the error. - The Edit Mode video decoder is found on Unity 6+.
UnityEditorInternal.Media.MediaDecodermoved fromUnityEditor.CoreModuletoUnityEditor.MediaModule, so frame extraction reportedVIDEO_DECODER_UNAVAILABLEon Unity 6 and 7. The decoder is now looked up next toMediaTime, falling back to the old assembly. - Camera
clearFlagsreportsSolidColoron every runtime.CameraClearFlags.ColorandSolidColorshare a value, andEnum.ToStringpicks a different alias on Mono (SolidColor) and CoreCLR (Color). - Tests: the TMP material fixture reads
TMP_Asset.materialas a field or a property (it is a property in com.unity.ugui 2.0+) and skips when TMP settings are unavailable instead of when no font asset exists (ugui ships font assets in the package); the exported Core tool count accounts for the two Input System-only tools in projects using the legacy Input Manager. - Integration follow-ups preserve TMP's actual project-over-built-in settings selection through its side-effect-free editor resolver; older TMP packages still require imported Resources rather than accepting an unrelated settings asset. The compiler toolchain assertion permits a CoreCLR-only SDK, and object lookup recognizes valid
index:versionidentifiers while retaining id-first/name-fallback behavior for numeric and colon-containing names. Regression cases include uncached numeric EntityId parsing on Unity 7, serialized component references, TMP resolver selection and native media-module decoder discovery. - Synthetic mouse/touch device names end in a non-numeric suffix. Input System's unique-name helper otherwise parses a random GUID's trailing digits as an Int32 and can throw an overflow before a click/drag starts. Four deterministic mouse/touch regressions retain another device so headless tests cannot bypass the unique-name path; ownership-prefix checks and cleanup remain unchanged.
Pull requests and issues
- PR #62 fixes the missing uGUI dependency/assembly references reported in issue #61. PR #60 adds Unity 7/CoreCLR compatibility, inherited-socket cleanup, TMP/decoder discovery and stable camera flag names; the integration includes the follow-up fixes above.
Validation
-
Maintainer release checks on macOS (2026-11-02), including the strict-filesystem separator fix: graphics-enabled full EditMode runs each passed 855 tests, zero failures, one skipped out of 856 in Unity 2022.3.62f3c1 / Input System 1.14.0 and Unity 6000.3.12f1 / Input System 1.19.0 / uGUI 2.0.0, both with dual input backends and TMP Resources. The only skip requires an already-installed ffmpeg; native decoder pixel/timestamp tests passed. A clean Unity 6 package import with no direct uGUI dependency resolved uGUI transitively and compiled without the UI/EventSystems errors; an earlier PR-integration legacy-input/no-TMP run passed 827 tests with zero failures and three explicit environment skips. The actual FunplayMcp project's Player settings and dependency manifests retained their original SHA256 hashes.
-
A standalone macOS inherited-socket harness kept an intentionally leaked listener alive without broker cleanup and released it with the fix while the broker remained healthy. The four deterministic synthetic-device name regressions failed before the suffix fix and passed in both final full suites. Unity 7 and Windows were not independently live-tested by the maintainer; the reported Windows Script Updater crash still needs confirmation on that exact Editor/platform.
-
Contributor-reported validation from PR #60, before maintainer integration: macOS, same source referenced by two projects, Unity 6000.3.13f1 (legacy Input Manager, no TMP resources imported) and Unity 7000.0.0a12 (Input System, ugui 7.0). Full
Funplay.Editor.TestsEditMode runs:unmodified v0.7.3 this change Unity 6000.3.13f1 788 passed / 2 failed 800 passed / 0 failed / 23 skipped Unity 7000.0.0a12 772 passed / 26 failed 801 passed / 0 failed / 25 skipped -
Contributor-reported live checks on both editors: repeated
execute_code, dotnet-hosted compile, and broker survival across domain reloads with zero failed requests. On Unity 7, TMP text creation was also exercised for real through the built-in settings rather than skipped. -
The Windows ShellExecute change is based on the .NET 10 / Mono / Wine sources and has not been run on Windows.