Skip to content

UnityLeanMcp v0.8.0-preview.9

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Sep 05:42
· 68 commits to main since this release
6ef02f7

feat: Bumo VERSION to 0.8.0-preview.9

fix(diagnostics): handle cross-platform path rooting in BuildFileUri on Unix

test: modernize test strategy for faster execution and sub-3s local loop

  • Add static test assets (DummyTest.cs, DummyExecuteClass.cs) to eliminate dynamic fixture swapping and 22+ domain reloads
  • Reuse SharedClient in UnityIntegrationFixture to eliminate 70+ dotnet.exe child process spawns
  • Add BusyGracePeriod to UnityClient to accelerate mock tiered autowaiting tests
  • Partition tests into Unit, Subsystem, and UnityIntegration xUnit traits for fast local loops
  • Record test performance learnings in FINDINGS.md

fix(runner): eliminate NTFS completion race condition via operation-scoped result files (#87)

feat(diagnostics): wire compiler diagnostic parser, cap warnings, and add file URIs (#86)

  • Implement unified diagnostic formatting in DiagnosticFormatter with RFC 8089 file URIs
  • Cap warnings at 10 to preserve agent context window and omit truncation notice when <= 10
  • Position unfiltered compilation errors at the end of the message for LLM recency attention
  • Display category headers (Warnings: and Errors:) only when both categories exist
  • Unify compilation diagnostics formatting across unity_refresh, unity_run_tests, and unity_eval
  • Add comprehensive test cases and record learnings in FINDINGS.md

refactor(mcp): resolve issues #88, #89, and #90

  • Replace hardcoded mutating command checks in UnityLeanMcpServer with polymorphic ICommandHandler properties (IsMutating, RequiresCompilationSettled) (#88)

  • Decompose UnityClient and UnityProcessManager to respect Single Responsibility Principle by extracting UnityLogScanner, UnitySocketTransport, and OperationPoller (#89)

  • Remove unused Structured* response models in Models.cs and deprecate ExecuteMethodAsync (#90)

  • Add DecomposedComponentsTests test suite and update documentation / FINDINGS.md

refactor(mcp): optimize agent workflow and eliminate dual payload returns

  • Eliminate dual payload returns (human text + JSON) across all MCP tools to halve token consumption
  • Disambiguate void statement completions from explicit null returns in unity_eval
  • Clarify unity_refresh tool descriptions and server instructions regarding auto-refresh
  • Protect interactive Unity GUI Editor instances from accidental termination in unity_stop via force parameter
  • Update build.sh to handle Windows locked DLL publishing using .old fallback

refactor(mcp): retire unity_status and implement tiered autowaiting (#84)

  • Remove unity_status from the public MCP tool catalog to reduce prompt token overhead and eliminate redundant pre-flight LLM reasoning turns, while preserving IUnityClient.GetStatusAsync internally for testing and status inspection.
  • Implement tiered autowaiting across all mutating operations (refresh, eval, run_tests):
    • Autowait without arbitrary timeouts for transient compilation/updating states (BUSY compile, COMPILING, UPDATING) while streaming progress notifications.
    • Observe a 3-second grace period for foreign mutating operations (BUSY ) before failing fast with an actionable recovery message directing users/agents to unity_stop.
  • Add early worker-thread rejection for mutating commands in UnityLeanMcpServer to prevent main-thread dispatching deadlocks and queue pollution during active operations.
  • Update PollRefreshHandler and GetStatusAsync to prioritize durable operation records.
  • Update README.md and record architectural learnings in FINDINGS.md.
  • Add comprehensive TieredAutowaitingTests test suite and update existing test fixtures.

feat(eval): support multiline C# snippets with using hoisting and zero default usings

  • Detect and extract top-level using statements to file scope outside runner method

  • Blank out extracted using characters with spaces to preserve line offsets for Roslyn diagnostics

  • Preserve IDisposable using statements and using var declarations inside method body

  • Remove implicit default using statements from EvalHandler.cs to eliminate namespace collisions

  • Fully qualify runner method signature with System.Threading.Tasks types so zero-using snippets compile cleanly

  • Update unity_eval tool and parameter descriptions to clarify raw multiline statements and no default imports

  • Add defensive unwrapping for JSON-encoded string inputs

  • Update test suite and documentation; all 206 tests passing

refactor(eval): require explicit returns and enable single-pass AST classification

  • Require explicit 'return ;' statements when returning values to the caller

  • Support natural void completion and early exits with 'return;' without code modification

  • Compile user snippets verbatim as valid C# in a single pass without speculative wrapping

  • Inspect snippet syntax trees via lightweight Roslyn reflection (<0.05ms) in HasTopLevelValueReturn

  • Update MCP tool descriptions, unit tests, and integration tests accordingly

  • Record Roslyn reflection quirks and dynamic evaluation findings in FINDINGS.md

refactor(mcp): retire unity_execute_method in favor of unity_eval

refactor(mcp): merge unity_recompile into unity_refresh with optional clean flag

refactor: rename project from UnityCliRunner to UnityLeanMcp

  • Rename Unity package to com.pereviader.unityleanmcp and Editor assembly to UnityLeanMcp.Editor
  • Rename .NET MCP server project, assembly, and namespaces to UnityLeanMcp.Mcp
  • Update server identifier to unity-lean-mcp across configs, workflows, and documentation
  • Remove legacy unity-cli fallbacks

refactor(mcp): streamline unity_status output to concise raw state token

feat(install): Update install api to allow not displaying the success popup

feat: auto-refresh in eval and guide AI tools to avoid redundant refresh calls