Skip to content

chore: bump version to 10.0.0#1224

Merged
github-actions[bot] merged 65 commits into
mainfrom
release/v10.0.0
Jun 30, 2026
Merged

chore: bump version to 10.0.0#1224
github-actions[bot] merged 65 commits into
mainfrom
release/v10.0.0

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated version bump to 10.0.0.

actions-user and others added 30 commits June 15, 2026 07:17
…529986410

chore: sync main (v9.7.3) into beta
Spec for the brand-standardization / README+distribution / unified-analytics
program, informed by a 4-agent inventory+research pass. Decomposes into 3
focused upstream PRs. Awaiting review before implementation.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…lve brand)

- Web analytics: GoatCounter (free, GH Pages, exportable) + Cloudflare fallback
- Brand: evolve indigo + Satoshi, refine mark
- Editor casing: apply, user reviews diff
- manifest.json name: keep 'Unity MCP'
- Packaging: single phased PR (P1 brand -> P2 README -> P3 analytics)

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
User-designed split-cube mark (two iso cube-halves + 3-rung bridge).
Ocean palette: blue cube #60A5FA / teal cube #2DD4BF / cyan bridge #22D3EE.
Colored mark is theme-independent (renders on light + dark).

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
- sharp generator (npm run gen:brand) for favicon.png(48), favicon-32,
  apple-touch(180), android-chrome(192/512), package-icon(128)
- fixes the broken 1024x576 favicon.png
- hero banner (logo.png) + og social-card + github-social-preview rendered
  with the Ocean mark, wordmark, tagline
- sync docs/images/logo.png hero

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…for Unity'

Single ProductInfo.{ProductName,MenuRoot} const; routes all user-facing
'MCP For Unity' (capital F) display strings to it. Internal identifiers,
namespaces, and manifest.json 'Unity MCP' unchanged.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
README capabilities/clients/versions/architecture/positioning + badges;
PyPI project.urls; Server/README docs link + badges; zh re-sync;
docs/MAINTAINER_ACTIONS.md. Sponsor/citation content preserved.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…docs

Brand: favicon/social-card/theme-color/icon headTags; navbar uses colored
logo-mark.svg for both light & dark.
Analytics: pypistats+goatcounter fetch (TDD, 3 tests), env-gated cookieless
GoatCounter, /stats page, daily stats workflow, external-analytics doc.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
- standardize 5 stray 'MCP For Unity' doc-comments -> 'MCP for Unity'
- external-analytics: link in-product telemetry doc instead of plain ref
- fetch-stats: anchor output path to import.meta.url (run-from-anywhere)
- zh README: add Docs badge for EN/zh badge-row parity

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
Per request, stop publishing adoption numbers to outsiders:
- remove the public /stats page + public data.json + navbar link
- workflow now posts a unified PyPI+traffic table to $GITHUB_STEP_SUMMARY
  (visible only to repo collaborators); drops to contents: read, no commits
- fetch-stats emits Markdown (renderSummary, +2 tests) instead of a public JSON
- public side keeps only the README downloads badge (PyPI counts are public anyway)

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…led proxy

Adds GitHub real-account signals to the private maintainer summary and reorders
it honest-first:
- In-product DAU/WAU flagged as the true active-user metric (pending Coplay read API)
- Unique repo cloners/viewers (14d) via GitHub traffic API (needs STATS_GITHUB_TOKEN
  PAT with Administration: read; default token 401s)
- GitHub stars/forks (public, real accounts)
- PyPI downloads kept but explicitly labeled inflated install events, not users
All fetches graceful on failure; 6 unit tests; build green.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
Drop the old logo's forced 676x380 (1.78:1) sizing that squished the new
2560x880 (2.9:1) hero banner; set width=820, let height auto-compute.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
Swap the wide hero banner for a compact mark + wordmark lockup, served via
<picture> so the wordmark flips light/dark with the GitHub theme (the colored
Ocean mark is theme-independent). Applies to EN + zh READMEs. Removes the
now-orphaned docs/images/logo.png banner copy (the docs site keeps its own).

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
- docs-deploy.yml: map GOATCOUNTER_CODE into the Build env so the cookieless
  beacon actually activates when the maintainer sets the variable (was a
  producer-without-consumer gap that silently disabled docs traffic)
- MAINTAINER_ACTIONS.md: rewrite the stats section to match the shipped private
  design (drop the stale 'grant Actions write + commit data.json' over-priv item,
  add the required STATS_GITHUB_TOKEN PAT, fix the social-preview note)
- docusaurus.config.js: wire favicon-32.png (was an orphaned generated asset)
- lowercase 3 stray 'MCP For Unity' refs in roslyn.md / migrations/v6.md
- remove internal docs/superpowers/ spec+plan scratch from the PR (contradicted
  the shipped Ocean/private design); gitignore superpowers artifacts

Whole-branch review: 6/6 Critical/Important confirmed, 0 refuted, all docs/config
hygiene — build/tests/security/correctness all clean. These are the fixes.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
Maintainer manages these org-gated actions directly. The analytics provisioning
steps (GoatCounter, STATS_GITHUB_TOKEN PAT) remain documented in
website/docs/architecture/external-analytics.md.

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…dges

Center the <picture> logo header (EN + zh) via <p align=center>, and remove the
Website/Visit and PyPI-version badges from the badge row (kept Downloads, Release,
CI, OpenUPM, Stars, Docs, Discord, Unity, Python, MCP, MIT).

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…drop How-it-compares

- center the full hero (language switcher + sponsor + badges + tagline + gif) via
  <div align=center>, matching the centered logo (EN + zh)
- replace the repetitive all-stdio clients table with a clean inline client list
- replace the plain mermaid 'How it works' with a one-line flow + architecture link
- remove 'How it compares' (the hand-rolled-scripting comparison added nothing; the
  Aura framing already lives in the 'Unity AI Tools by Aura' section)

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…brief What-it-does, trim quickstart

- replace the badge banner row with a clean Discord / Wiki link pair after the logo
- move Recent Updates to the top (before What it does)
- make What it does brief; move the full tool catalog to a Wiki (docs) hyperlink
- delete the How it works section
- drop the Asset Store alternative-install reference from the quickstart

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…s, bigger Recent Updates

- favicon now rasterized from the full logo-mark.svg (was the simplified
  favicon-safe mini, which dropped the inner edges, 3rd rung, and node dots);
  remove the now-unused logo-mark-mini.svg
- add docs/images/connector.svg (blue node — cyan bridge — teal node, echoing the
  split-cube 'two things connected') and use it between English/中文 and Discord/Wiki
- bump the Recent Updates summary to an <h3> (one size up)

Claude-Session: https://claude.ai/code/session_01XFiuAUxNS9riUJFFBEHvui
…combine clients+quickstart

- revert Recent Updates summary <h3> -> <strong> (the <h3> made GitHub render a
  heading-anchor chain icon, and tools/sync_release_notes.py regenerates it as
  <strong> anyway, so the heading was both buggy and non-durable)
- put English/中文 and Discord/Wiki on a single line under the logo at the same size
- merge 'Supported clients & versions' + '60-second quickstart' into one ## Quickstart
…hinese

Mirror the EN restructure on the zh README — one-line English↔中文 | Discord↔Wiki
nav with the brand connector, Recent Updates moved to the top, brief 它能做什么 with
the tool catalog behind a link, combined ## 快速开始, dropped badges/工作原理/Asset Store/
the giant inline tool list. Kept the zh-only detail sections (手动配置, 多实例, Roslyn,
故障排除, 贡献, 遥测) and rewrote the authored copy to read like native dev Chinese,
not machine translation.
README-zh.md edits + .meta/uv.lock churn on brand-distribution-analytics, committed
(not stashed) so the feature branch can be checked out in the main worktree for editor
testing. Untracked .agents/ and AGENTS.md intentionally left out.

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
… 2D image)

Providers: Tripo/Meshy/Hunyuan (3D gen), Sketchfab (3D import), fal.ai/OpenRouter
(2D image). Hybrid arch: GUI configures keys, MCP tools trigger, C# executes the
provider call and imports. OS-secure-store key handling; keys never cross the bridge.

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
…8 integration)

Partial — phases 0,2-7 to be authored just-in-time during incremental execution
(plan-authoring workflow rate-limited on those phases). Phase 1 is fully detailed
and serves as the task-granularity template.

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
…ase 0)

- Register 'asset_gen' tool group (off by default, parity with vfx/animation)
- EditorPrefKeys.AssetGen.* consts (non-secret config only; keys go to secure store)
- AssetGenPrefs helper (provider/format/output-root/normalize/enabled) + EditMode tests
- Python scaffold test asserts group present and disabled by default

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
…/import_model/generate_image)

Thin key-free pass-throughs in group asset_gen mirroring the C# command names:
camelCase param mapping, None-strip, async status/job_id (manage_packages shape).
CLI group 'asset-gen' registered in cli/main.py. No key/secret param exists on any
tool; tests assert sent payloads carry no key/secret/token. 34 tests pass.

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
… (Phase 1)

OS secure store per platform: macOS Keychain (/usr/bin/security), Windows Credential
Manager (advapi32 P/Invoke), Linux secret-tool; AES-256-CBC+HMAC encrypt-then-MAC
fallback (CI-safe, master secret + machine id via PBKDF2, ciphertext under user
app-data, never in repo). Env override (MCPFORUNITY_<P>_API_KEY, read-only) layered on
top; SecretRedactor scrubs auth tokens. Keys never touch EditorPrefs/bridge/logs/git.
EditMode tests for fallback round-trip, encryption-at-rest, env override, redaction.
Compiles clean on Unity 2021.3.45f2 (floor).

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
Scriptwonder and others added 28 commits June 28, 2026 19:25
… deadlock

ImportModel.HandleCommand was synchronous and blocked on .GetAwaiter().GetResult() for the
Sketchfab search/preview UnityWebRequest calls. UnityWebRequest completes on the editor
loop, which a blocked main thread cannot pump — freezing the editor. Make HandleCommand
(and Search/Preview) async Task<object> (CommandRegistry detects the Task return type) and
add a HandleCommand_IsAsync regression guard. Surfaced via live in-editor testing.

Claude-Session: https://claude.ai/code/session_01Tjpb5gYgUe2AUJuRdXr7Lv
Design + step-by-step plan for a DCC-agnostic import_model_file tool and a
blender-to-unity handoff skill (FBX-default, filesystem-seam handoff).

Claude-Session: https://claude.ai/code/session_01NoHk4f7N1vUFs7gu817ihm
Adds ImportModelFile tool (import_model_file command) that copies an
on-disk model file (FBX/OBJ/GLB/glTF/zip) under Assets/ and runs it
through the shared ModelImportPipeline. Returns {asset_path, asset_guid}.
Adds ImportModelFileHandlerTests covering missing-source, unsupported
extension, and a real OBJ import.

Claude-Session: https://claude.ai/code/session_01NoHk4f7N1vUFs7gu817ihm
…zation + scale note

Blender FBX imports ~100x oversized; import_model_file target_size only acts when
Auto-normalize is on and is unreliable for Blender FBX (target_size=2 measured 200m
in a live test). Step 4 now measures the placed model's world bounds and sets
localScale to hit the target size deterministically. Adds a Scale note + checklist item.

Claude-Session: https://claude.ai/code/session_01NoHk4f7N1vUFs7gu817ihm
…ge_path

Security review + code review of the asset-gen feature surfaced concrete issues;
this fixes them and adds regression tests (request-shaping layer, FakeHttpTransport).

Security
- SafeZipExtractor enforces an extension allowlist; ModelImportPipeline passes an
  inert model/texture allowlist so a provider archive can't drop a .cs/.dll under
  Assets/ and have the Editor compile/load it (code execution on import).
- AssetGenJobManager refuses non-http(s) download URLs before fetching
  (file:// SSRF / local-file read into the project).

Provider correctness
- Meshy image->3D polls /openapi/v1/image-to-3d/{id} (was the v2 text URL).
- Meshy text->3D honors texture=true via the preview->refine two-phase flow.
- OpenRouter image->image attaches the reference image (content image_url part).
- fal image->image uses the /edit endpoint + image_urls array; width/height
  forwarded as image_size.
- Sketchfab search forwards categories/count/cursor/downloadable; preview doc
  corrected (returns metadata, not a base64 thumbnail).
- Job import calls AssetDatabase.Refresh() before importing a freshly written file.

Local image input (image_path)
- New LocalImage helper; image_path is read and sent inline as a base64 data URI
  for Meshy / fal / OpenRouter. Tripo rejects local images with a clear error
  (needs a hosted image_url; its upload flow is not wired).

Cleanup (no behavior change)
- Shared AssetGenPaths + ProviderHttp helpers, HttpResult.Ok, MissingKeyMessage,
  cached glTFast probe, dead-field / per-frame-alloc removal, CLI _emit.

Docs: README + manual-verification updated (image_path support; transparency is
import-flag-only; width/height fal-only).

Verified: package compiles clean; Python 1306 passed / 3 skipped. Meshy refine,
fal /edit, and image_path data-URI paths are unit-tested at the request layer
only -- live smoke per provider (real keys) still pending.

Claude-Session: https://claude.ai/code/session_015DAUrMR5UaSEzEn2wNPrEP
Informational row (not a keyed provider) with a best-effort "Blender app detected"
status and a pointer to the blender-to-unity workflow / import_model_file. BlenderMCP
runs in the AI client and isn't detectable from Unity, so this reports only the
locally installed Blender app.

- BlenderDetection helper: checks well-known install paths + PATH per platform; the
  pure DetectIn(candidates, exists) core is unit-tested with a fake predicate.
- McpAssetGenSection: AddBlenderHandoffRow() appended after the provider rows.
- README: note the tab's best-effort detection + that BlenderMCP lives in the AI client.

Verified: package compiles clean; EditMode 972/1018 pass, 0 failures (4 new
BlenderDetection tests) via tools/local_harness.py.

Claude-Session: https://claude.ai/code/session_015DAUrMR5UaSEzEn2wNPrEP
Follow-up to 2efb786, from a focused AI review of the image_path work:

- Validate image input synchronously in the handlers: reject unsupported
  extensions (LocalImage.ResolveExisting) and Tripo local-image up front, so bad
  input fails immediately instead of returning a fake "pending" that only faults
  on the next poll.
- Meshy: the "no task id" submit/refine error again includes the response body
  (the PostTask refactor had dropped it).
- Sketchfab archive allowlist: add .dds/.ktx (real GPU texture formats) so glTF
  textures in those formats aren't silently skipped on extract.
- fal: don't send image_size to the /edit (image->image) endpoint, which derives
  size from the source image; build the request_id fallback poll URL from the base
  model id rather than the /edit sub-path.
- Meshy two-phase preview+refine now runs under a 600s job timeout (was 300s) so a
  default textured text->3D has room for both tasks.

Deferred (perf-only, noted on the PR): the blanket AssetDatabase.Refresh
double-import and the synchronous main-thread base64 of large local images.

Verified: package compiles clean; EditMode 977/1023 pass, 0 failures via
tools/local_harness.py.

Claude-Session: https://claude.ai/code/session_015DAUrMR5UaSEzEn2wNPrEP
feat(asset-gen): AI Asset Generation — 3D gen/import + 2D image (BYO-key)
…66223744

chore: update Unity package to beta version 9.7.4-beta.2
…analytics

Revamp brand, docs, distribution, and analytics
…70877387

chore: update Unity package to beta version 9.7.4-beta.3
@github-actions github-actions Bot merged commit d49ae29 into main Jun 30, 2026
@github-actions github-actions Bot deleted the release/v10.0.0 branch June 30, 2026 20:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants