Releases: oddgames/clibridge4unity
v1.0.69
Release-notes + CODE_EXEC line numbers.
Release notes pipeline
deploy.pynow builds release notes from.claude/RELEASE_NOTES.md(cleared after use) or synthesises fromgit log <prev>..<tag>+git diff --shortstat+ a compare link, then passes via--notes-filetogh release create. Replaces the prior--generate-noteswhich produced nothing useful on a PR-less repo.- Retroactively filled proper notes for v1.0.57 → v1.0.68 via
backfill_release_notes.py(all 12 sessions' worth of changes are now on the releases page).
CODE_EXEC stack traces now point at your line
- Roslyn backend emits a PDB alongside the PE. Syntax tree parses with
path: "Script.cs"andencoding: UTF-8— both required, otherwise Roslyn refuses withCS8055. - Assembly loaded via
Assembly.Load(peBytes, pdbBytes)so the CLR resolves sequence points at runtime. - mcs fallback:
CompilerParameters.IncludeDebugInformation = trueand-debug:full. - Runtime exceptions in
CODE_EXEC/CODE_EXEC_RETURNscripts now look likeNullReferenceException ... at Runner.Run () in Script.cs:5instead of a bare IL offset.
Install: irm https://raw.githubusercontent.com/oddgames/clibridge4unity/main/install.ps1 | iex
v1.0.68
PathResolver + "Did you mean?" suggestions on not-found errors.
PathResolver
- New
PathResolverhelper: scene-GameObject scoring (exact / prefix / substring / token-overlap) + asset suggestions viaAssetDatabase.FindAssets. - New
Response.ErrorSceneNotFound(path)/Response.ErrorAssetNotFound(path, kind)auto-appendDid you mean:suggestions. - Bulk-substituted 18 call sites across
Asset/,Component/,Prefab/, andScene/command files.
Example
Before:
Error: GameObject not found: Maine Camera
After:
Error: GameObject not found: Maine Camera
Did you mean:
Main Camera
Covers GameObject not found, GameObject not found in scene, Asset not found, Prefab not found, and Instance not found errors across INSPECTOR, DELETE, COMPONENT_SET/ADD/REMOVE, PREFAB_INSTANTIATE, PREFAB_SAVE, ASSET_MOVE/COPY/DELETE, and more.
v1.0.67
Breaking: SCENE, PREFAB_HIERARCHY, CODE_SEARCH removed. Unified into INSPECTOR and CODE_ANALYZE.
INSPECTOR expanded
INSPECTORwith no args → whole active-scene hierarchy (brief, all roots recursed) — replacesSCENE.INSPECTOR <prefab.path> --children [--brief] [--filter X]— replacesPREFAB_HIERARCHY.--filter Xmatches GameObject name OR component name (substring). Closes the "find-by-name inside a prefab asset" gap.--briefskips serialized-field dumps — components only.--max Ntruncation with a warning (default 300 nodes).
FIND scope prefixes
FIND Name/FIND scene:Name— scene (default).FIND prefab:Assets/UI/Menu.prefab/Button,Panel— find by name inside a prefab asset. Comma-separate for OR.
Deletions (no aliases)
SCENE— replaced byINSPECTOR(no args).PREFAB_HIERARCHY— replaced byINSPECTOR <path> --children --brief [--filter X].CODE_SEARCH— replaced byCODE_ANALYZE(prefix forms unchanged:method:,field:, etc.).
Cleanup
- Deleted 4 orphan helpers from
PrefabCommands.cs(BuildHierarchy, CountNodes, FindObjectsWithComponent, GetPrefabPath). - README, root CLAUDE.md, and SETUP-generated CLAUDE.md all updated.
v1.0.66
TEST multi-filter.
TEST now accepts arrays for three filter axes, all OR'd by Unity's Test Framework:
- Groups (positional, comma- or space-separated) →
testFilter.groupNames --category X,Y→testFilter.categoryNames([Category("…")]attribute)--tests A,B→testFilter.testNames(exact full names)
Examples:
TEST PlayerTests,CameraTests
TEST --category Physics,AI
TEST --tests Foo.TestA,Foo.TestB
TEST MyTest --category Physics playmode
When any filter is set, the first output line echoes it: Filter: groups=[...] categories=[...] tests=[...] mode=EditMode.
Caught mid-test: CommandArgs.Parse routes unknown tokens to Warnings (not Positional) when a flag schema is defined, so TEST Foo,Bar was silently matching nothing. Fixed by reading both lists for group tokens.
v1.0.65
Session ledger + --intent + SESSIONS command + log cleanup.
Multi-agent presence
- New
SessionLedgerdrops a per-project session file per CLI invocation; every command prints a one-line banner for every other active agent at the top of its output. --intent "..."flag — descriptive annotation shown to other agents (e.g.--intent "refactoring CameraController").SESSIONScommand lists every active CLI agent on the project with pid, age, command, intent, and cwd.- Presence-only: no locking, no RPC, no command rejection. Soft coordination for shared Unity instances.
Log cleanup
- Timeout exceptions during domain reload / asset import now log as
Warninginstead ofError— stops spamming the Unity console red for expected events. - Removed the noisy
[Bridge] ResolveCode: path=...debug log that fired on every file-pathCODE_EXEC. CommandRegistrynow unwrapsTargetInvocationException— user code that throws inside a main-thread action shows the real cause, not the reflection wrapper.
v1.0.64
Shared CodeAnalysisCore + many more CODE_ANALYZE query shapes.
Refactor
RoslynDaemon and RoslynAnalyzer (one-shot fallback) were separately maintaining ~650 lines of duplicate extraction logic. Both now delegate to a new CodeAnalysisCore with identical behaviour — future changes = one edit, not two.
New query shapes handled correctly
- Nested enums / types —
CODE_ANALYZE Quality.ShadowQualitynow recognises a nested enum insideQuality, lists its values, and reports usages across the codebase (instead of returning methods that merely use the name as a parameter type). - Constructors —
CODE_ANALYZE Foo.Fooor.ctorhits. - Indexers —
CODE_ANALYZE this/Item. - Operators + conversion operators —
operator+,op_Addition,operator MyType. - Destructors —
~Foo. - Generic / array stripping —
List<MyType>,MyGeneric<T>,Foo[][]strip to the bare identifier before lookup. - Namespaces — a query that's a namespace lists the types inside.
- Using aliases —
using Tex = Texture2D;makesCODE_ANALYZE Texresolve. - Partial classes —
Defined in:shows(partial — split across N files)when applicable. - Multi-dot paths —
Generator.Trucks.PlayerTrucknow splits correctly (last-dot) and resolves against the nested-type's bare identifier.
Bug fixes
PathResolverprecursor: member-fallback now uses exact identifier match instead of substring — a method namedOnEnableno longer matchesApply(OnEnable arg).- Grep tail renamed to
Usagesunder member-zoom for clarity; capped tighter when structured output already covers the usages.
v1.0.63
Legacy CODE_SEARCH alias + UPDATE regenerates per-project CLAUDE.md.
CODE_SEARCH restored
Muscle memory (and old scripts) kept typing CODE_SEARCH, which in v1.0.62 fell into the generic Unity pre-flight and errored with "Unity busy" during loading. Re-added as a legacy alias that forwards to CODE_ANALYZE with a one-line [deprecated] notice, and correctly bypasses the Unity pre-flight.
UPDATE refreshes CLAUDE.md
clibridge4unity UPDATE now auto-regenerates CLAUDE.md in the current project after a successful self-update (and on "already up to date" — template can shift between installs). Keeps AI tooling's command reference in sync with the CLI binary without needing a separate SETUP call.
v1.0.62
Offline commands bypass Unity pre-flight + update banner moved to the bottom.
CODE_ANALYZEdispatch moved before the Unity state pre-flight gates. Previously a busy/loading Unity would spuriously block offline Roslyn queries with "Unity is busy — Loading project". Now code queries run regardless of Unity state.CODE_SEARCHcommand removed entirely (shipped in this version — later restored as a legacy alias in v1.0.63 after user feedback).- Update banner (available new version + release notes) now prints at the bottom of command output via a
Mainfinally block, no longer throttled — the background fetch keeps the cache warm so there's zero delay.
v1.0.61
Multi-Unity workspace fix + wmic replacement for broken System.Management.
Multi-Unity handling
unityPidsis now filtered to only PIDs that match the target project (via window title and/or-projectPath). Previously, when multiple Unity instances were open, dialogs from sibling instances (e.g. another project's IL2CPP build) leaked into the target's report.- When no Unity matches the target, the error now lists every running Unity workspace (pid, project path, window title) so the user can see exactly what's open and pick one with
-d.
Under the hood
System.Managementwas silently failing under trimmed single-file publish (TypeInitializationExceptiononManagementPath). The old WMI command-line reader had been broken the whole time; window-title matching was covering for it.- Replaced with a shelled-out
wmicreader. Dropped theSystem.Managementpackage dependency entirely.
v1.0.60
CODE_EXEC path-shape guard.
If the data for CODE_EXEC / CODE_EXEC_RETURN looks like a file path (drive letter, /, ./, ~/, UNC) and ends in .cs but doesn't exist, the CLI now refuses to treat it as inline C#. Previously the path string was silently compiled as source and failed with cryptic CS1056: Unexpected character '\' errors.