Skip to content

Orbit Pi 0.2.7

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Oct 05:12
· 1 commit to main since this release
06b0b30

Added

  • The Worktrees page opens with a short How worktrees work primer: what a
    worktree is, how to create and open one, the optional
    .orbit/worktree-setup.sh step, and the folder-vs-branch rule. It is
    dismissible and stays gone once closed.
  • Git worktrees as first-class workspaces. A new Worktrees page (workspace
    header menu or the Open Worktrees command) lists every worktree Git
    reports, creates one from a new or existing branch (name, branch, and path
    are independent concepts), opens it as the active workspace — Explorer,
    terminal, Git page, Review, MCP scope, and the agent all follow its path —
    and supports rename (directory only, never the branch), move, lock/unlock,
    remove with a dirty-worktree confirmation, and advanced prune/repair. The
    status bar's Work in chip switches between the main working directory and
    any linked worktree and opens the create dialog with a suggested but fully
    editable (custom) worktree name; the default root is repo/.wt, configurable
    globally (Settings → Worktrees) and per repository (.orbit/worktree.json),
    and an optional setup script (default .orbit/worktree-setup.sh, explicitly
    allowed per repository on first use) runs asynchronously after creation with
    ORBIT_ROOT_PATH and ORBIT_WORKTREE_PATH, keeping the worktree on failure.
    Sessions record and restore the worktree path; an unavailable worktree is
    surfaced instead of silently falling back to the main repository. See
    crates/orbit-pi/docs/worktrees.md.

Changed

  • Refresh (⌘R, the File menu, or the command palette) now refreshes the
    whole app, not just the session list. It re-reads sessions and settings from
    disk, re-lists the active repository's worktrees, rebuilds the Explorer tree
    and the Review diff, refreshes Git status, re-scans the Usage analytics,
    re-reads the MCP config, and re-asks the running agent for its model/skill
    catalog, session stats, and provider auth/quota. The menu and palette entry
    is now labelled Refresh rather than Refresh Sessions.
  • Quieter chrome on the work surfaces:
    • The sidebar's "star the project" card is gone — the same link stays in
      Settings → About.
    • Appearance drops the duplicate palette-swatch strip beside each theme
      picker.
    • The Usage page's cards lose their explanatory subtitles; the metric
      captions that carry data stay.
    • The status bar drops the redundant branch-count chip (the branch chip's
      own popover lists every branch) and hides the MCP indicator while every
      server is connected.
    • The composer's Plan/Build/Ask chip is the single home for the workflow
      scope: the new-task page no longer draws its own centred Mode control
      (a block of tiles in the empty state). The chip sits with the other
      agent controls on every composer, new task included, and still holds the
      choice as pending until the session id exists.
    • Settings → General states the notification trigger once — "When a run
      finishes or pi needs an answer" — instead of repeating it on each of the
      three channel rows.
    • The pull-request detail page drops its metadata rail, which only
      repeated the chips above it (review, checks, changes, branches). It now
      reads as one centred column, with the opened/updated times folded into
      the header line and the checkout/close/open actions moved below the
      review actions.
    • The pull-request list row now splits identity (number, title, labels,
      author, branches) from status (review, checks, diffstat, time), which
      reads down the right edge, and merged/closed rows carry their own state
      glyph instead of a recoloured open-PR icon.
    • The issue pages get the same treatment: the list row moves its comment
      count into the right status column, and the detail page drops its rail —
      assignees, the labels editor, and the updated time fold into the header
      as one centred reading column.
    • Inline code in the transcript keeps the body ink and its wash instead of
      painting the glyphs in the accent. A code-heavy answer used to become a
      field of ember and read as one long link; now only links carry the
      accent, and code is marked by the mono face and the chip wash.
    • The sidebar wordmark is held to a quieter size, so it labels the
      workbench instead of reading as the column's headline.
    • An expanded command tool call now reads as one terminal surface. The
      Command and Output sections sit on a single recessed code plane
      (code_bg) divided by a hairline, each with its label and copy control on
      a shared axis, instead of two label-plus-body groups floating on the card
      with only a gap between them. The command keeps its $ prompt gutter, so
      a wrapped command hangs under the first line.
    • Settled tool activity is monochrome. Tool glyphs used to shift the accent
      into a per-kind hue (amber for run, cyan for explore, green for mutate,
      violet for web); a long transcript became a field of tinted badges. The
      glyph shape already names the kind, so settled work now uses one muted
      ink. Running still takes the accent and failure still takes red.
    • Transcript cards (tool, summary, thought, ask) use the plain border
      hairline instead of border_strong. border_strong is the focus/hover
      edge; using it at rest made every card read a step too loud.

Fixed

  • Hover fills no longer square off rounded cards. gpui 0.2.2 clips
    overflow_hidden to a rectangle, not the border radius, so a full-bleed
    child background painted square corners over the rounded edge. The tool
    card's header (the reported case), its error strip and detail surface, the
    summary card's header, the code-block title strip, and the MCP server rows'
    first/last entries now carry the matching corner radius themselves.
  • Two tr! call sites bound the wrong placeholder name, so the literal token
    was printed instead of the value: the tool-detail and edit-diff fold labels
    showed Show all %{count} lines (the call bound total for a %{count}
    key), and a failed branch creation toasted Branch create failed: %{err}
    (the call bound error). Both now bind the declared name.
    scripts/check_i18n.py gained a placeholder pass so the class cannot
    recur — it validates every tr! call's bindings against its key's
    %{…} placeholders and exits non-zero on a mismatch.
  • A truncated tool result no longer renders its truncated chip twice in
    the activity row; the chip was queued twice back-to-back.
  • The transcript no longer writes a per-render [card-dbg] line to stderr
    for every read/edit/write tool card.
  • The transcript's tok/s rate reads correctly again. It was measured
    client-side from the gaps between pi's streamed deltas, but pi emits the
    response in bursts, so that window collapsed to a fraction of the real
    generation and the rate ballooned (e.g. 600 tok/s against a true ~100).
    The settled rate now uses pi's own per-call durationMs, and the live rate
    divides by the time since the turn's turn_start — the same clock basis —
    so the two figures agree.
  • Baseten's provider-usage readout works again. Its billing summary requires
    an explicit ISO 8601 start_date/end_date range (31 days maximum), so the
    old ?window=30d query returned HTTP 400 and the Providers page showed an
    error instead of a spend figure. The adapter now asks for a rolling 30-day
    window and sums the response's dedicated_usage, training_usage, and
    model_apis_usage totals — the shape Baseten actually returns — showing the
    combined spend with a per-category breakdown.
  • The issue and pull-request detail headers no longer collapse their meta
    line to one character per line. The text beside the state chip is now
    flex_1 + whitespace_normal, so it takes the column's remaining width
    and wraps there instead of shrinking inside a wrapping flex row and
    overrunning the rows beneath it.
  • A review or comment card with no body (a bare approval, for example) no
    longer draws a stray hairline across its bottom — the header rule that
    separates a body from its header now appears only when there is a body.
  • RPC patch auto-apply now locates the pi package for pi's managed
    installer
    as well as npm/pnpm/bun globals. The managed launcher at
    <agent>/bin/pi is not inside a node_modules, so the old ancestor walk
    never reached the package at
    <agent>/install/releases/<version>/node_modules/@earendil-works/pi-coding-agent
    and the Settings → Runtime row read pi package not found. Resolution now
    handles that layout on every platform — via PI_MANAGED_INSTALL_ROOT,
    install/current-version, or the newest release — searches the usual
    install roots when even the launcher is missing. The resolved path is
    recorded in ~/.orbit-pi/rpc-patches/config.json (shown as Package
    root
    in Settings); the live launcher stays authoritative, so the row
    follows pi update to the new release dir and the saved path is only the
    fallback when no launcher resolves. Override for a single run with
    PI_PACKAGE_ROOT; the bundled contrib/pi-*-rpc/apply.mjs scripts honour it
    and fall back to the managed layout, so hand-runs work too.

What's Changed

  • fix(rpc-patches): locate pi package from the managed installer by @imrj05 in #54
  • feat: add Git worktrees as first-class workspaces by @imrj05 in #55

Full Changelog: v0.2.6...v0.2.7