* fix: beta workflow no longer auto-bumps minor version
Changes to beta-release.yml:
- Beta now bumps patch instead of minor (9.3.1 → 9.3.2-beta.1)
- Allows patch releases without being forced into minor bumps
- Increment beta number if already a beta version
Changes to release.yml:
- Added "none" bump option to release beta version as-is
- Added version status display showing main/beta versions and
what the release version will be
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: remove redundant β character from version badge
The version string now includes "-beta.N" suffix, making the
separate β indicator redundant.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: improve version consistency in release workflows
beta-release.yml:
- Changed from already_beta to needs_update flag
- Only skip updates when computed version matches current
- PyPI versioning now detects existing prereleases and keeps
the same base version instead of always bumping patch
release.yml:
- Preview step outputs stripped_version to GITHUB_OUTPUT
- Compute step uses previewed value for "none" bump option
- Added sanity check warning if versions diverge unexpectedly
This ensures the released version matches what was shown to the
user and prevents unnecessary patch bumps on consecutive beta runs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
- Replace direct push with PR creation to bypass branch protection rules
- Add bot check to both jobs to prevent loops and double-publish
- Remove needs dependency so PyPI publish runs in parallel
- Simplify by not auto-merging the version PR
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix Git URL in README for package installation
Updated the Git URL for adding the package to include the branch name.
* fix: Clean up Claude Code config from all scopes to prevent stale config conflicts (#664)
- Add RemoveFromAllScopes helper to remove from local/user/project scopes
- Use explicit --scope local when registering
- Update manual snippets to show multi-scope cleanup
- Handle legacy 'unityMCP' naming in all scopes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Make Claude Code status check thread-safe (#664)
The background thread status check was accessing main-thread-only Unity
APIs (Application.platform, EditorPrefs via HttpEndpointUtility and
AssetPathUtility), causing "GetString can only be called from main thread"
errors.
Now all main-thread-only values are captured before Task.Run() and passed
as parameters to CheckStatusWithProjectDir().
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Persist client dropdown selection and remove dead IO code
- Remember last selected client in EditorPrefs so it restores on window
reopen (prevents hiding config issues by defaulting to first client)
- Remove dead Outbound class, _outbox BlockingCollection, and writer
thread that was never used (nothing ever enqueued to outbox)
- Keep only failure IO logs, remove verbose success logging
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Auto-detect beta package to enable UseBetaServer + workflow updates
- Add IsPreReleaseVersion() helper to detect beta/alpha/rc package versions
- UseBetaServer now defaults to true only for prerelease package versions
- Main branch users get false default, beta branch users get true default
- Update beta-release.yml to set Unity package version with -beta.1 suffix
- Update release.yml to merge beta → main and strip beta suffix
- Fix CodexConfigHelperTests to explicitly set UseBetaServer for determinism
- Use EditorConfigurationCache consistently for UseBetaServer access
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Address code review feedback for thread-safety and validation
- Add thread-safe overloads for GetBetaServerFromArgs/List that accept
pre-captured useBetaServer and gitUrlOverride parameters
- Use EditorConfigurationCache.SetUseBetaServer() in McpAdvancedSection
for atomic cache + EditorPrefs update
- Add semver validation guard in beta-release.yml before version arithmetic
- Add semver validation guard in release.yml after stripping prerelease suffix
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Complete thread-safety for GetBetaServerFromArgs overloads
- Add packageSource parameter to thread-safe overloads to avoid calling
GetMcpServerPackageSource() (which uses EditorPrefs) from background threads
- Apply quoteFromPath logic to gitUrlOverride and packageSource paths to
handle local paths with spaces correctly
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Patch legacy connection pool in transport tests to prevent real Unity discovery
The auto-select tests were failing because they only patched PluginHub
but not the fallback legacy connection pool discovery. When PluginHub
returns no results, the middleware falls back to discovering instances
via get_unity_connection_pool(), which found the real running Unity.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: add TestPyPI toggle for pre-release server package testing
- Add UseTestPyPI editor preference key
- Add TestPyPI toggle to Advanced settings UI with tooltip
- Configure uvx to use test.pypi.org when TestPyPI mode enabled
- Skip version pinning in TestPyPI mode to get latest pre-release
- Update ConfigJsonBuilder to handle TestPyPI index URL
* Update .meta file
* fix: Use PyPI pre-release versions instead of TestPyPI for beta server
TestPyPI has polluted packages (broken httpx, mcp, fastapi) that cause
server startup failures. Switch to publishing beta versions directly to
PyPI as pre-releases (e.g., 9.3.0b20260127).
Key changes:
- beta-release.yml: Publish to PyPI instead of TestPyPI, use beta suffix
- Use --prerelease explicit with version specifier (>=0.0.0a0) to only
get prereleases of our package, not broken dependency prereleases
- Default "Use Beta Server" toggle to true on beta branch
- Rename UI label from "Use TestPyPI" to "Use Beta Server"
- Add UseTestPyPI to EditorPrefsWindow known prefs
- Add search field and refresh button to EditorPrefsWindow
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat: Add beta mode indicator to UI badge and server version logging
- Show "β" suffix on version badge when beta server mode is enabled
- Badge updates dynamically when toggle changes
- Add server version to startup log: "MCP for Unity Server v9.2.0 starting up"
- Add version field to /health endpoint response
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactor: Rename UseTestPyPI to UseBetaServer and fix EditorPrefs margin
- Rename EditorPref key from UseTestPyPI to UseBetaServer for clarity
- Rename all related variables and UXML element names
- Increase bottom margin on EditorPrefs search bar to prevent clipping first entry
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactor: Address code review feedback
- Centralize beta server uvx args in AssetPathUtility.GetBetaServerFromArgs()
to avoid duplication between HTTP and stdio transports
- Cache server version at startup instead of calling get_package_version()
on every /health request
- Add robustness to beta version parsing in workflow: strip existing
pre-release suffix and validate X.Y.Z format before parsing
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Prioritize explicit fromUrl override and optimize search filter
- GetBetaServerFromArgs/GetBetaServerFromArgsList now check for explicit
GitUrlOverride before applying beta server mode, ensuring local dev
paths and custom URLs are honored
- EditorPrefsWindow search filter uses IndexOf with OrdinalIgnoreCase
instead of ToLowerInvariant().Contains() for fewer allocations
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Marcus Sanatan <msanatan@gmail.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
- Refactor dev version suffix to follow PEP 440 standard (X.Y.Z.devN+gSHA)
- Replace date+SHA suffix with structured devN+local identifier format
- Maintain backward compatibility while improving version string readability
- Include short git SHA as local version identifier for traceability
Publishes dev versions to TestPyPI when Server/ changes are pushed to beta.
Only triggers when there are actual changes to avoid wasted cycles.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>