Skip to content

Orca v0.5.7

Choose a tag to compare

@github-actions github-actions released this 07 Oct 13:20
· 298 commits to main since this release

Orca v0.5.7

Changes since v0.5.6:

  • orca exec and the TUI stop cleanly on SIGINT, SIGTERM, and SIGHUP. They
    stop running work and MCP servers, record how the session ended, and exit
    with 128 + the signal. Two copies of one stop request that arrive together
    count once.
  • On Windows, Ctrl+C through the npm launcher now reaches orca.exe instead
    of killing it.
  • A message typed before a conversation resumed at launch has loaded is held,
    and is sent after the command-line prompt, in order.
  • MCP:
    • Esc cancels a call waiting on a reconnecting server, and a streamed call
      that keeps sending.
    • stdio servers get answers to ping while idle.
    • A cut-short resource list says so.
    • A login can be cancelled before the browser opens.
    • A failure shows at once and is reported only once.
  • orca mcp add and remove keep each entry's comments with it in a
    multi-line inline array.
  • ORCA_HOME now also covers the TUI's input history and saved workflows, and
    a blank ORCA_HOME counts as unset.
  • On Windows, files under a deeply nested ORCA_HOME are written correctly
    past the 260-character path limit.

Changes

Stopping on a signal

  • orca exec handles SIGINT and SIGTERM from the moment it starts, before the
    runtime or any MCP server does.

    • A signal that arrives while MCP servers are still connecting stops the
      stdio servers, records the run as cancelled, and exits with 130 for SIGINT
      or 143 for SIGTERM. JSONL output ends with a cancelled session.completed.
    • Before, such a signal ended the process at once, so servers could keep
      running and the session had no terminal record.
  • The TUI quits on SIGTERM, SIGHUP, or a SIGINT sent by another process, the
    way an ordinary exit does:

    • it interrupts the running turn;
    • it stops MCP servers, those still connecting too;
    • it saves the session;
    • it restores the terminal and prints orca --resume <SESSION_ID>.

    The exit code is 128 + the signal: 130, 129, or 143. After SIGHUP the
    terminal is gone, so nothing more is drawn and no resume hint is printed.
    In orca attach, only the attach connection closes; the daemon's session
    is unaffected.

  • Cleanup has 10 seconds. After that, or at a second signal, Orca exits at
    once.

  • A signal that arrives within half a second of the first counts as the same
    one.

    • Each of these can deliver one stop request twice: closing a terminal
      window, the npm launcher, and a job runner signalling the whole process
      group. The copy no longer cuts the cleanup short.
    • A signal after that still exits at once.
    • orca daemon follows the same rule while it shuts down.
  • On Windows, the npm launcher no longer terminates orca.exe on Ctrl+C. The
    console delivers Ctrl+C to orca.exe directly, so orca exec cleans up and
    exits with 130.

Starting the TUI with a resumed conversation

  • When orca --continue or orca --resume <id> opens, a message you send
    before the conversation has loaded is held. The input box clears, and the
    message is listed above it until it can be queued.
  • Once the history loads, the command-line prompt goes first, then the held
    messages, in order, queued like messages sent during a running turn.
  • Before, a message typed early could run ahead of the command-line prompt,
    and the loaded history pushed it off the screen.
  • When the conversation cannot be opened and no prompt was given, the
    conversation now also says Unable to restore saved conversation.

MCP

  • Cancelling.

    • Esc now stops a call that waits for a server while another request
      reconnects it, within about 25 ms, and the call is never sent.
    • A streamed tool call is cancelled even while the server keeps sending
      progress.
  • stdio servers while idle. Orca answers a stdio server's ping at any
    time, not only while a request is in flight.

    • A server request Orca does not handle gets JSON-RPC error -32601.
    • So does an elicitation that arrives with no tool call running.
    • Requests and answers no longer interleave on the server's stdin.
  • Resource lists. A resources/list or resources/templates/list result
    may stop early, after 100 pages or at a repeated cursor. When it does, a line
    in errors names the server and says why, so the model knows the list is
    incomplete:

    incomplete resources/list result for '<server>': MCP list stopped after 100 pages
    

    See Compatibility for the output shape.

  • Server state.

    • A short restart after Esc that fails because the server cannot start
      marks it failed at once, instead of at its next call. That holds even
      when another request was holding the server.
    • A reconnect that finds the server already replaced no longer clears a
      failure recorded meanwhile.
    • A failure that /mcp already showed is no longer reported again as a
      startup warning when your first message takes over the servers.
  • Login.

    • Cancelling a login during OAuth discovery or client registration, before
      the browser opens, takes effect within 100 ms and frees the callback port.
    • When the cancel and the browser's return cross, /mcp shows how the login
      actually ended. Once the browser is back the login finishes, and l says
      login to MCP server <name> is finishing and can no longer be cancelled.

Configuration

  • orca mcp add, orca mcp remove, and a saved "always allow" rule now keep
    comments with their entries in a multi-line inline array, one entry per
    line (mcp_servers = [ … ], rules = [ … ]):

    • removing an entry also removes the comment lines just above it, and the
      comment at the end of its line;
    • a new entry goes on its own line, after the last entry and its comment;
    • a comment before ] stays last;
    • an array that remove empties keeps its multi-line form.

    Single-line arrays and [[mcp_servers]] tables behave as before.

  • ORCA_HOME now also decides where the TUI keeps its input history, and
    where workflows saved with user scope go ($ORCA_HOME/workflows). The
    saved-workflow list reads from there too, now on Windows as well.

  • An ORCA_HOME that is set but empty or blank counts as unset, so Orca uses
    ~/.orca. Before, it could make Orca look for its tools in the current
    folder.

Windows

  • Atomic file writes (configuration edits, memory) and image assets now work
    when the path is longer than 260 characters, as under a deeply nested
    ORCA_HOME. Before, such a write failed with The system cannot find the path specified.

Compatibility

  • list_mcp_resources and list_mcp_resource_templates called with server
    now return the same object as without it, {"resources": [...], "errors": [...]}, with resourceTemplates for templates. Before, they
    returned a bare array. A server that is not connected, or whose list
    request fails, still fails the call.
  • A response sent as text/event-stream whose body is bare JSON, with no
    SSE framing, now fails with missing result. Before, Orca parsed the
    leftover bytes as JSON.
  • The TUI now exits with 128 + the signal on SIGINT, SIGTERM, or SIGHUP.
    Before, the signal killed it.
  • A second Ctrl+C sent to orca exec within half a second of the first no
    longer exits at once. One sent later still does.

Configurations and sessions from v0.5.6 remain readable.

Verification

cargo fmt --all -- --check
node --test scripts/test-validate-runtime-surface-contract.mjs
node scripts/validate-runtime-surface-contract.mjs
node --test scripts/test-validate-windows-platform-boundaries.mjs
node scripts/validate-windows-platform-boundaries.mjs
node scripts/release/verify-version-sync.mjs
node scripts/release/test-verify-version-sync.mjs
node scripts/release/test-stage-npm.mjs
node scripts/release/test-verify-published.mjs
node scripts/test-repository-hygiene.mjs
node --test tests/npm_launcher_contract.test.mjs
cargo nextest run --workspace --all-targets --locked --profile ci --no-fail-fast --retries 0
cargo nextest run -p orca-tui --lib --locked --profile ci-serial --retries 0
cargo nextest run --test tui_pty_contract --locked --profile ci-serial --retries 0
npm --prefix site run build
npm --prefix site run check:seo

Upgrade

npm install -g @blade-ai/orca@0.5.7
orca --version