Skip to content

v0.6.3

Choose a tag to compare

@github-actions github-actions released this 06 Sep 23:41
· 16 commits to main since this release

Added

  • Every command that reaches the bridge now ends with one dim [editor] ... line, and every
    --json envelope carries the same data as an editor object: edit/play/paused mode, the
    active scene with dirty and untitled flags, the Console window's error and warning counts,
    how many errors or warnings the command itself produced, and, only when true, compile
    errors, compiling, importing, building, an open prefab stage, an active or armed recording.
    The bridge attaches the summary to responses it already produces on the main thread, so it
    costs no request and no editor frame; measured medians are unchanged. UCP_EDITOR_STATE=0
    disables it. Agents no longer have to discover a red console or a dirty scene three
    commands later.
  • Modal dialogs are detected before a request is sent. The bridge's handshake reports how long
    ago Unity's main thread last ticked; when it is stale the CLI enumerates the editor's dialog
    windows, answers the ones it recognises per --dialog-policy (Safe Mode, Packages with
    Errors, version mismatch, project upgrade), and otherwise fails within about a tenth of a
    second naming the dialog and its buttons instead of waiting out the request timeout. A
    dialog that appears later, while a request is already waiting, is reported the same way when
    that request times out (recognised prompts are answered so a retry succeeds). The line and
    the JSON envelope carry a MODAL entry.
  • Added ucp editor dialog to list the editor's open modal dialogs and --answer <button> to
    press one deliberately (exact, then substring, case-insensitive). Windows only for now.
  • ucp connect now reports whether Unity's main thread is actually serving requests
    (mainThreadResponsive in JSON, a "Main thread:" line in text), and ucp open no longer
    returns while the editor is still in its first import or compile behind a live bridge socket.
    Previously a fresh editor looked "connected" seconds after launch and the first real command
    then sat in the request timeout.
  • Added a UI Toolkit authoring loop through ucp ui list|lint|inspect|screenshot|check for
    Unity 6 and newer. list discovers UXML documents and .ucp-ui.json scenarios; lint runs
    Unity's own UXML, USS, and TSS importers and then clones each document, so an unknown element
    or a broken stylesheet is reported against the asset with a line number instead of surfacing
    later as a console error; inspect instantiates a document in a transient editor panel and
    returns a bounded resolved tree with layout, world bounds, a fixed resolved-style allowlist,
    and per-binding results; screenshot captures that panel to a PNG once geometry and pixels
    have stopped changing; check chains lint, inspect, an audit, and capture across every
    requested state and exits non-zero on failure. Nothing loads or dirties a scene, and lint
    also works in batch mode. Contributed by @quentinleon (#3).
  • Added strict .ucp-ui.json scenarios: named states with deep data overlays, an allowlisted
    set block (text, value, enabled, display, visibility, tooltip, class:<name>),
    and collections that populate either an eager repeat grid or a harness-owned virtualized
    ListView from a JSON pointer such as /items. UXML DataBinding paths are written as
    usual and adapted to the JSON data source on the fly. --data-json and --data-file overlay
    data for one run without editing the fixture; --width/--height override the viewport as a
    pair. Unknown fields, ambiguous selectors, and out-of-range values are rejected with a
    location such as Assets/UI/Inventory.ucp-ui.json#states.populated.set[1].value.
  • Added an audit to ui check: binding failures, focusable elements with zero size or outside
    the viewport, and duplicated static names, with complete counts even when the returned detail
    list is capped at 200. --fail-on-warnings turns warnings into a failed exit for both lint
    and check.
  • UI render commands run asynchronously in the bridge under a 300-second ceiling, report a
    domain reload or editor shutdown mid-operation as a structured editor_shutdown result, and
    recover a finished result through ui/status if the completion notification was lost. Their
    CLI timeout therefore defaults to 310 seconds; every other command keeps the 30-second
    default, and an explicit --timeout still wins.
  • Added a ucp-ui micro-skill, a UI Toolkit section in the omni skill, and a
    docs/authoring/ui-toolkit.md reference page with the scenario schema.

Changed

  • Object ids on the wire are now 64-bit integers. Unity 6000.5 replaced 32-bit instance ids
    with EntityId, whose upper word is a per-session stamp; truncating one to int produced a
    number that resolved to nothing (only the hierarchy-scan fallback kept object commands
    working, and prefab create, material texture references, and get-property on a fresh id
    failed outright). Every instanceId the bridge returns or accepts is a long; on 6000.0
    through 6000.4 the numbers are unchanged, on 6000.5 and newer they are wide (for example
    568105589213680530). The CLI already parsed ids as 64-bit. Clients that store ids in a
    JavaScript number should treat them as opaque strings above 2^53.
  • The Unity compatibility matrix and release validation now request slots 6000.0 through
    6000.6. A slot without an installed editor falls back to the nearest installed one and is
    reported as covered rather than re-run. On 6000.5 and newer the matrix lifts
    com.unity.ai.navigation, com.unity.collab-proxy, com.unity.inputsystem,
    com.unity.timeline, and com.unity.visualscripting to the versions bundled with 6000.5
    (the pinned older ones no longer compile there). For every slot it reconciles the manifest's
    com.unity.modules.* entries with what that editor ships, so a manifest last rewritten by
    6000.5 (which added physicscore2d and dropped vr) no longer parks an older editor on
    "Packages with Errors".

Fixed

  • Commands no longer race a pending script compile. The bridge reports compiling in its
    handshake (cached from the main thread's last pump), and a command that connects while Unity
    is compiling waits for the domain reload to finish before sending its request instead of
    failing with "the bridge closed the connection during ...". ucp compile --no-wait followed
    by any other command now behaves like ucp compile followed by that command.
  • Fixed ucp play failing with "the bridge closed the connection during 'play'" when Unity
    tears the domain down before the response to the play request is flushed (seen on 6000.4).
    The request had already taken effect; the command now proceeds to its state confirmation
    instead of reporting a lost connection.
  • Fixed the CLI sometimes resolving a project's editor to one of Unity's AssetImportWorker
    processes, which carry the same -projectPath; window focus and dialog detection were flaky
    as a result.
  • Fixed ucp open and every other command that finds a running editor without a bridge never
    answering Unity's startup prompts. The dialog policy (--dialog-policy, default auto) was
    only applied inside the bridge wait loop, but an editor parked on "Enter Safe Mode?" or
    "Packages with Errors" is handled by an earlier readiness check that timed out and printed
    advice to re-run with the policy that was already in effect. That check now answers dialogs
    on every poll, and reports which button it pressed.
  • Fixed ucp run-tests failing its console guard on log lines a test explicitly declared as
    expected. Unity's runner brackets LogAssert.ignoreFailingMessages sections with
    IgnoreFailingMessages:true/false marker lines; the guard now skips everything inside such a
    window (and the markers), so tests that deliberately import a broken asset no longer show up
    as an extra failed "test".
  • Fixed the bridge's edit-mode test assembly failing to compile on Unity 6000.5, where
    Object.GetInstanceID() is obsolete-as-error; the one remaining direct call in the tests now
    goes through the EntityId-aware compat helper the rest of the package already uses.
  • Removed the empty UCP.Bridge.Runtime assembly definition. Every install logged Assembly for Assembly Definition File 'Packages/com.ucp.bridge/Runtime/UCP.Bridge.Runtime.asmdef' will not be compiled, because it has no scripts associated with it on import, which also meant
    every "clean console" check started at one warning. Nothing referenced the assembly.
    Reported by @quentinleon (#4).