Releases: imrj05/orbit
Release list
Orbit Pi 0.2.3
Added
- Add MCP server management, settings UI, and status (#45)
- Check installed packages for updates and surface a notice (#43)
Changed
- Feat/add star the repo button (#44)
What's Changed
- feat(plugins): surface a notice when installed packages have updates by @rj05xdev in #43
- Feat/add star the repo button by @imrj05 in #44
- feat(mcp): add MCP server management, settings UI, and status by @imrj05 in #45
Full Changelog: v0.2.2...v0.2.3
Orbit Pi 0.2.2
Added
-
Hover hints now carry the shortcut: the model and thinking chips, New Task,
the sidebar's Search/Usage rows, the top-bar panel toggles, the Git page
tabs, and the workspace + use registry-backed tooltips ("Choose Model
(⌘⇧M)"), and hovering a session row shows the ⌘1…⌘9 slot that opens it. -
A single command registry now backs the keymap, the command palette, and
Settings → Shortcuts, so a chord, its chip, and the action it runs can never
drift apart. The palette gained Rename Session, Pin / Unpin, Clone
Session, Delete Session, Choose Model (⌘⇧M), Choose Thinking
Level (⌘⇧T), Review Changes (⌘⇧R), and Keyboard Shortcuts (⌘/). -
Session management is number- and cycle-addressable: ⌘1…⌘9
(Ctrl+1…9) open the Nth session in the sidebar's visible order, and
Ctrl+Tab / Ctrl+Shift+Tab cycle to the next or previous session. The
palette also lists Next Session and Previous Session. -
The Review pane is fully keyboard operable:
Tab/Shift+Tabmove between
the workbench's focus stops, arrows walk the changed-files tree,Enter
opens a file or toggles a folder,n/pjump between changed files,
[/]jump between hunks,e/cexpand or collapse every file, and
Escapereturns to the chat. The composer's autocomplete and the terminal
keepTabfor their own use.
Changed
- The Git page tabs moved from ⌘1…⌘5 to ⌘⌥1…⌘⌥5 (Ctrl+Alt+1…5) so
the number keys can address sessions directly.
Fixed
-
Orbit and
orbit-rpcalso probe~/.pi/agent/binfor thepilauncher,
alongside the npm/pnpm/bun home dirs they already checked. A bundled.app
never inherits the shell PATH that contains it, so a pi installed there used
to read as missing. -
Shortcuts that were advertised but macOS-only (
cmd-editor clipboard and
undo, Files close, Git page tabs) now use the platform modifier, so Windows
and Linux get the same keys. The ⌘. abort chord was dead — gpui names the key
., notperiod— and now fires. -
Compaction and branch summaries now appear in the transcript as boundary
cards: Compaction — Compacted from 150K tokens (click to expand the
summary) and Branch summary. A successful compaction also re-reads pi's
compacted context right away, so the summarized history is replaced by the
summary the moment it lands instead of lingering until the session is
reopened.
What's Changed
Full Changelog: v0.2.1...v0.2.2
Orbit Pi 0.2.1
Changed
- Dropdown menus across the app now match the branch selector's popover
style: one surface treatment, roomier rows with the same hover, and the
current choice marked with the active fill and a check. This covers the Git
page's Sync and "…" menus, changed-file and merge/rebase menus, the Review
source menu, the Usage filter and row menus, the composer's add/mode
popups, and the sidebar session menu; the branch, label, template, and
Settings pickers now share the same row treatment. Right-click context
menus stay compact.
Fixed
-
The Issue page's Label dropdown now closes when its trigger is clicked a
second time. The popup dismissed on mouse-down and the trigger's mouse-up
re-opened it on the same click; the trigger now honors the same gesture
guard every other dropdown uses. -
New Task now starts a fresh session when pi has exited instead of doing
nothing. With no turn in flight the button sentnew_sessionto the live
process, so while the reconnect banner was up the command went into the dead
process's stdin and was never answered; it now spawns a replacement whenever
the process is not alive, dropping the corpse and its stale exit banner. The
sidebar's workspace + gets the same fix.
What's Changed
- fix(session): respawn pi when New Task runs with a dead process by @imrj05 in #40
- Unify dropdown menus on the branch selector's picker style by @imrj05 in #41
Full Changelog: v0.2.0...v0.2.1
Orbit Pi 0.2.0
Added
-
The Git page's Issues and Pull requests forms now discover the repository's own
templates (.github/ISSUE_TEMPLATE/Markdown and YAML issue forms, plus
.github/PULL_REQUEST_TEMPLATE.mdand its variants). A lone template applies
automatically; with several, a Template picker (including Blank) chooses one.
The choice prefills the title prefix and body skeleton — a YAML issue form is flattened
into Markdown — and itslabels:ride along on Create. -
The Git page's Issues and Pull requests forms can now draft their title and
Markdown body with a Generate button. Add optional notes (or leave them blank) and
Orbit makes the same one-shot, tool-freepi -pcall the commit-message generator uses,
reading the branch, its commits, and its changed files; when pi is missing or has no
credentials it falls back to a local heuristic built from those same facts. Nothing is
created until you review the draft and press Create. -
Every icon-only button across the app now carries the same native tooltip the
send / stop button has — a localized label, usually with its keyboard shortcut
(e.g.Toggle Terminal (⌘J)). Covers the top bar, sidebar, transcript copy /
diff controls, composer add button, window caption buttons, Explorer, Review
pane, Git, Usage, terminal, settings, and the picker / dialog controls. -
The sidebar's Projects list now defaults to most recent activity, with a
sort control on the header to order workspace groups by recently added, name
(A–Z or Z–A), or session count, or fall back to the manual added order. The
choice persists in~/.orbit-pi/workspaces.jsonand each project now records
when it was added. -
Each project in the sidebar can now wear its own mark: pick from a curated
set of the bundled HugeIcons and tint it with one of eight semantic colors
(which follow the active palette). Reach it from the workspace header's⋯
menu → Icon & color, with a Reset back to the folder default. The choice
persists in~/.orbit-pi/workspaces.jsonbeside the project list.
Fixed
-
Images in issue/PR bodies, comments, and transcripts now render. The markdown image
element forced a definiteheight: 0, and gpui derives a missing width from a definite
height before the image decodes (0 × ratio), so a loaded screenshot collapsed to a 0×0
box with only its border visible. The height is left auto now: the image scales to the
reading column and taffy keeps its aspect ratio. -
Screenshots in replies load again when GitHub stored them as signed
private-user-images.githubusercontent.com/…?jwt=…URLs. That JWT expires within
minutes, so the app got a 404 and showed the alt-text fallback; the renderer rewrites
the URL to the durablegithub.com/user-attachments/assets/<uuid>form encoded in the
filename, which serves the same image. -
GitHub issue/PR bodies and comments now render screenshots that GitHub stored as raw
HTML<img src="…">tags when the line is inside a blockquote or list item — a quoted
bug report is a common case. Previously only a standalone top-level<img>line became
an image, so these showed the tag as text; the whole tag/its URL rendered as a link. -
The New pull request form's Base branch picker, and the Template pickers on
both new-issue/new-PR forms, no longer float over the wrong part of the form or paint
behind its fields. They are anchored to the chip that opens them (opening upward at the
bottom of the PR form), draw above the form, and use the top branch selector's dropdown
chip (glyph, value, chevron) and picker surface — list inset, rows, and search row for
the branch list. -
The Issues tab's Label picker — the list filter chip and the detail view's
Edit labels button — no longer opens at the page's top-right over the issue list.
It anchors to the button that opened it, opens directly beneath it, and uses the same
picker surface and rows as the branch selector. -
The conversation rail's active tick now follows every navigation path, not
just wheel and scrollbar gestures. Clicking a tick and pressing ⌘↑/⌘↓ scroll
the list programmatically, which never fired gpui's scroll handler, so the
highlight stayed on the turn the reader left behind. Repeated ⌘↑/⌘↓ presses
also walked a single turn and stalled; they now step through the transcript,
and ⌘↑ from the live edge jumps back to the previous turn instead of doing
nothing. The viewport hint wins while a run streams too, so scrolling up to
read history moves the rail even mid-stream. -
The sidebar's project headers now stay pinned as you scroll through any
expanded group, not just the active workspace. Previously only the open
workspace's header was sticky, so a long list under the first project pinned
while every other expanded project scrolled its header away. -
The "open in" menu's app icons are crisp and no longer tiny. macOS returns an
icon whose largest representation is 1024×1024, and the menu embedded that PNG
unchanged, so the renderer's single bilinear pass had to squeeze it into a
14px slot — the blur. Icons are now rasterized to exactly the pixel size the
menu draws (36×36 for the now-18px slot, matching a Retina blit 1:1), which
also drops each embedded icon from roughly 1 MB to 2 KB.
What's Changed
- feat(sidebar): workspace sorting, custom workspace marks, and UI polish by @rj05xdev in #37
- feat(ui): native tooltips for icon-only controls + rail/scroll fixes by @rj05xdev in #38
- feat(git): AI-draft issues/PRs against repo templates; fix Git page pickers & image rendering by @rj05xdev in #39
Full Changelog: v0.0.19...v0.2.0
Orbit Pi 0.0.19
Changed
- The Review pane gained view controls. The changed files collapse to their
headers or expand back in one click (each header is its own toggle), long lines
wrap or unwrap (unwrapping pans only the diff body — the file name and change
counts stay fixed at the pane's edges), the diff switches between unified and
side-by-side rows, and the pane can own the page — the session view yields and
the sessions sidebar opens beside it — or minimize to a rail, returning to the
docked side pane first. All icon toggles with tooltips.
Added
- Settings → Agent → Behavior now lets Enter queue a follow-up (the existing
default) or steer the running task. The preference persists across launches
without changing pi’s settings or messages already queued. - Compact Send/Steer/Queue hints on the right side of the composer footer,
immediately left of the context-window indicator, plus send/steer/stop tooltips.
Settings → Shortcuts reflects the selected default. Hints remain visible with
an empty draft; the newline shortcut stays in Settings rather than adding
clutter below the composer. - Transcript tool cards show the file's language icon on
read/edit/
writerows and on the changed-files summary.web_fetchrows show the URL
as a clickable link with the scheme hidden, andweb_searchrows show the
query instead of the raw arguments JSON. - Bare
http(s)://URLs in user and assistant prose are links now: accent
colored, underlined, marked with the HugeIcons external-link arrow, and
opened in the default browser on click. Markdown[label](url)links keep
their own label.
Changed
- Alt/Option+Enter uses the opposite sending mode; ⌘⇧Enter / Ctrl+Shift+Enter
remains an explicit steer. Idle sends still start a normal prompt, and
Shift+Enter still inserts a new line. Steering and alternate-send shortcuts
are scoped to the chat input so they cannot submit drafts from other fields.
Fixed
- File icons render everywhere they are used (the Explorer tree,
@file
mention rows, attachment chips, and Git changed-file rows). The bundled Nerd
Fonts symbols face was embedded in the app but never registered with the text
system, so every devicon silently fell back to a text extension badge.
Fixed
- Dragging the header of a window that is maximized on the primary display no
longer locks the app up: the drag now starts the system's caption-move
command instead of posting a non-client left-button message, which GPUI
dispatches back into the drag region and the drag region answers with another
post. Restoring and moving at the start of the drag behave like a native
titlebar. - The Git page's Back button leaves the page again: the leading controls (Back
and the page title) now sit outside the window drag region, so pressing them
no longer starts a window move that swallows the click. The empty bar after
the controls still drags the window.
What's Changed
- feat(composer): configure Enter behavior and show footer hints by @dimixar in #33
- refactor(review): remove AI review and enrich the Review pane by @imrj05 in #34
- fix(windows): repair header drag and the Git page Back button by @imrj05 in #35
- feat(transcript): file icons on tool cards and clickable URLs by @imrj05 in #36
Full Changelog: v0.0.18...v0.0.19
Orbit Pi 0.0.18
Added
- Default session model — Settings → Agent can pick the model and thinking level
every new session starts on, whichever workflow mode it runs in. The choice lives
in Orbit's own~/.orbit-pi/session-defaults.json(pi's global settings file is
untouched), rides the spawn flags for a session's first turn and
set_model/set_thinking_levelRPC for every later session in a live process,
and leaves pi's own default alone when unset. The thinking options are the levels
pi itself derives for the selected model, so the control tracks the model rather
than the live session. Resumed sessions keep the model in their file; the
composer chip still changes model / thinking per session. - Zed design tokens —
theme/tokens.rsports Zed's sizing system: dynamic
spacing with Compact / Default / Comfortable density, text / headline / icon /
button sizes, list, popover, context-menu, modal, tooltip, input and scrollbar
metrics, the corner-radius scale, elevation shadows withelevation_1/2/3, and
motion durations. Tokens equal Zed's default pixels at Orbit's defaults and
follow the UI font size and Spacing Density settings.
Changed
- Context menus (sidebar session / workspace, Explorer, Git sync / branch / file)
now follow Zed's context-menu metrics: 200px minimum width, 23px entries,
14px text and icons, Base04 / Base06 insets,ListSeparatorspacing, an 8px
radius with Zed's lighter popover shadow, and an 8px window-edge margin.
Their sizes now scale with the UI font size. - Tooltips use Zed's tooltip metrics: offset off the cursor, 14px text, and
wrapping at 288px instead of overflowing on one line. - Extension dialogs use Zed's modal layout:
ModalHeader/ section / footer
insets, a Small headline, a 32px input field, 32px confirm buttons, and the
four-layer modal shadow. - The remaining floating modals — provider usage / API key / provider editor
(Settings), the update dialog, and the custom-UI card — use Zed's
ModalSurface(elevation_3): the four-layer shadow, an 8px radius, and
ModalHeader/ section /ModalFooterinsets. The legacy heavier
popover_shadowhelper is gone. - Sidebar session and workspace rows use Zed's list-item tokens: a 4px
(rounded_sm) hover/selection radius,TextSizefor title / label / metadata
text, andDynamicSpacingfor their padding and gaps. - Transcript chrome follows the token scales: message-row padding, user-bubble
radius / padding / text, tool and question card shells and headers, tool error
strips, and the usage footer metric and breakdown card now readTextSize,
DynamicSpacing,Radius, andBufferLineHeightinstead of ad-hoc px. - Settings chrome follows the token scales: the page header, section labels,
grouped boards, andsetting_rowlayout useTextSize/DynamicSpacing/
Radius, the row separators use the 1px hairline token, and keycap chips size
toButtonSize::Defaultheight. Setting cards and toolbars migrate next. - Spacing is unified on
DynamicSpacing. The ad-hocTheme::spacehelper — which
scaled with density but ignored the UI font size — is removed, and its ~185
call sites (mostly the Git panel, Usage page, and Settings) now resolve through
the token scale, so they follow the UI font size too. - UI type is unified on
TextSize. ~370.text_size(theme.ui_px(…))sites snap
onto the 10 / 12 / 14 / 16 scale (XSmall/Small/Default/Large); at
most a 1px shift each. Sub-10px badge glyphs and 17px+ display headings, which
the UI scale doesn't cover, keep their sizing. - Corner radii are unified on
Radius. gpui's fixedrounded_sm/md/lg/xlhelpers
and every on-scalerounded(px(N))(2/4/6/8/12) now resolve through the theme,
so card, chip, and input corners also follow the UI font size. - One-shot transitions adopt
AnimationDuration(Fast, 150ms). Looping affordances
(spinner, shimmer, streaming) and feedback timers keep their own cadences, which
the three-value token scale doesn't cover. - The settings page is fully on the token scales. Its side nav, headers, sections,
rows, toolbars, select popups, cards, and modals now readDynamicSpacing/
TextSize/Radius/ButtonSize; the last gpui spacing utilities and raw px
literals are gone, leaving only bespoke geometry (avatar / dot / toggle sizes,
fixed panel and modal widths). - The Usage page (and its chart / heatmap / table / filters / tooltip modules) is on
the same scales: all spacing, type, and on-scale radii resolve through the tokens;
only chart and table geometry keeps its own px. - Every input box follows the
InputFieldtokens. The branch picker's create-branch
field (previously frameless) now usesinput_field_frame, and the Ask panel's
custom-answer field usesDynamicSpacingoffsets; all other single-line inputs
already routed throughinput_field_frame/picker_search_frame. The main
composer, file editor, and inline tree rename stay bespoke components. - Every search box is the picker search row (
picker_search_frame), matching the
command palette: the settings / Git / Usage searches and the skills filter were
boxedInputFields and now share the palette's flat 36px row, so all searches
read identically. The Git panel's issue / pull-request search grows to fill its
filter bar and shrinks when tight (min 160px) instead of a fixed 200px, so the
Pulls tab no longer overflows with its extra state chip. - The session-details title (rename) input follows the
InputFieldtokens: its
block usesDynamicSpacing/input::gap/input_label/input_field_frame,
and the Generate-title and Update buttons size toButtonSize::Large(32px) so
the row lines up with the 32px field. - Picker ↑/↓ now scroll the focused row into view. The command palette,
workspace picker, and branch picker set a positiveScrollHandleoffset,
but gpui stores it negative once scrolled down (the model selector already
negated it) — so the list never actually scrolled and the highlight walked
off-screen, looking like ↑/↓ did nothing. They negate it now, and the palette
also scrolls against its actual (window-capped) list height instead of the
uncappedlist_max_h. Two command-palette tests cover the ↑/↓ move and its
scroll-into-view; the scroll test fails on the old sign. - The model picker had the same ↑/↓-doesn't-stick symptom for four reasons,
all now fixed. (1) Its open-time "pin the highlight to the active model"
re-ran on every render for the first 400 ms (the hover-suppression
window), so a ↓ pressed right after opening was silently snapped back; the
pin now runs only on a genuine open / catalog change. (2) Its deferred scroll
re-targeted the active model for up to 250 ms after open; it now follows the
current highlight. (3) pi re-reports the whole catalog on everyget_state,
andset_catalogre-armed the pin and re-scrolled to the active model each
time — so any periodic sync undid an ↑/↓ while the popup was open. An
unchangedset_catalogis now a no-op. (4) The pin stayed armed until the
popup's first render, so a ↑/↓ arriving before that frame (or right after a
scope change / catalog refresh re-armed it) was undone by it; a deliberate
↑/↓ now cancels the pin. Covered end to end as well: a test opens the real
OrbitAppwith the realbind_keys, asserts the popup's filter actually
holds focus, and steps the highlight through several presses. - Picker rows no longer move the keyboard highlight on hover: the command
palette, workspace picker, and extension-dialog option rows usedon_hoverto
follow the pointer, andon_hoverre-fires whenever hit-testing changes — so
scrolling a row under a stationary pointer hijacked the highlight. They use
on_mouse_movenow, so only real pointer movement moves it. - Single-line inputs no longer wrap. Every
ComposerInputcapped at
with_max_lines(1)— the session-details name, the Git branch field, the
provider / model / plugin / skill filters, the usage searches, the extension
dialog, and the find bar — now also setswith_wrap(false), so a long value is
clipped at the edge instead of wrapping into a second row and painting the
editor's vertical scrollbar. Non-wrapping text also scrolls horizontally to
follow the caret, so typing past the field's width still shows what you type
(clipped to the text area, so the code editor's gutter stays put). - The Git panel's tab strip is on the §5 button language: each tab is a
button_frame(ButtonSize::Medium)— the same 28px height,Base08padding,
Base04gap,button::RADIUS(4px), and Default label as the branch chip and
the panel's filter chips — so the tabs and the chips beside them read as one
system. The tab strip and branch row areBase40tall, and the whole panel's
spacing resolves throughDynamicSpacing(one sharedtab_barfor Changes /
History / Graph / Issues / Pulls). - The sidebar's New Task, Search, and Usage controls share one
button_frame(ButtonSize::Large): the hand-rolled 28px Search / Usage rows
now match the New Task button's height,Base08padding,button::RADIUS
(4px), and Default label, while keeping their ghost treatment (no fill or
border, hover only) — one evenly sized stack. - The model selector's option rows keep the picker's two-line token height. A
capped list is a flex column, so withoutflex_noneevery row shrinks toward
thepicker_entryminimum (31px) instead ofpicker::two_line_entry_height
(50px), leaving the 28px leading provider / thinking chip with almost no
vertical padding. The no-match empty row, its provider-header gap, and the
row's hover highlight are on the same tokens /on_mouse_moveas the other
pickers.
Fixed...
Orbit Pi 0.0.17
Added
- Workflow modes — plan, build, or answer instead of one undifferentiated
chat. A session is scoped Plan, Build, or Ask from the New Task
page or the composer chip, per session. Plan and Ask are read-only: the
bundledorbit-workflow-extensiondisables the write tools, gatesbashto
a read-only allowlist, and injects mode guidance, re-arming live sessions
from~/.orbit-pi/workflow.jsonwith no restart. - AI review agent — a read-only reviewer over the current change set or the
whole project, from the Review pane's sparkles menu or the command palette.
It runs on its own pi process scoped to Ask mode (so the chat session and
transcript are untouched), launched withORBIT_REVIEW=1so the access guard
never blocks its read-onlygit diff. Findings parse from a fenced JSON
block into severity-chipped rows that scroll the diff to the offending file;
the answer's prose is kept when no findings parse.
What's Changed
Full Changelog: v0.0.16...v0.0.17
Orbit Pi 0.0.16
Added
- Add structured data, harden headers, and extend cache windows
- Rebuild landing around story sections and refresh OG
Changed
- Feat/UI refinement (#23)
What's Changed
Full Changelog: v0.0.15...v0.0.16
Orbit Pi 0.0.15
Core Changes
- feat(session): confirm renames with a success check on the update button
- Refactor/transcript UI: #22
Credits
Huge thanks to @rajeshwar-hyphun, and @imrj05 for helping!
What's Changed
- Refactor/transcript UI by @rajeshwar-hyphun in #22
New Contributors
- @rajeshwar-hyphun made their first contribution in #22
Full Changelog: v0.0.14...v0.0.15
Orbit Pi 0.0.14
Full Changelog: v0.0.13...v0.0.14