Add a `showTitlebarAgentActivity` setting under Appearance > Titlebar
that lets users toggle the agent activity badge in the titlebar.
- Add `showTitlebarAgentActivity` to GlobalSettings (default: true)
- Add toggle in AppearancePane under a new "Titlebar" sub-section
- Upgrade badge from Tooltip to HoverCard with per-worktree breakdown
- Show dimmed idle state when no agents are active
- Fix badge/tab overlap when sidebar is closed (min-w-0 + conditional shrink-0)
- Extract countWorkingAgentsForTab helper for reuse by per-worktree counter
Cmd+Shift+G was opening the source control sidebar even when terminal
search was active, because both App.tsx and keyboard-handlers.ts
registered capture-phase keydown listeners on window with no
coordination between them.
Fix with two layers:
- App.tsx: skip Cmd+Shift+G when [data-terminal-search-root] is in the
DOM (reliable regardless of listener registration order)
- App.tsx: bail on defaultPrevented as a general guard
- keyboard-handlers.ts: upgrade stopPropagation to
stopImmediatePropagation for the search navigate handler
- Delete empty blocks on Cmd+X (match VS Code behavior)
- Preserve rich formatting on clipboard (text/html + text/plain)
- Fix cursor placement after cutting last block (clamp position)
- Guard against null clipboardData to prevent silent data loss
- Extracted contextual copy setup logic into `useContextualCopySetup` hook.
- Replaced direct `setupContextualCopy` usage in `MonacoEditor` with the new hook.
- Added `useContextualCopySetup` to `DiffViewer` to enable contextual copy in diffs.
- Bound copy handlers to both original and modified diff editors.
- Updated `EditorContent` to pass `filePath` and `relativePath` down to `DiffViewer`.
- Made `onSave` optional in `propsRef` since it's not strictly required in diff views.
fitAddon.fit() triggers an xterm.js buffer reflow that can leave the
viewport at a stale scroll offset, making the terminal appear scrolled
up away from the prompt. Before each fit(), capture whether the terminal
was scrolled to the bottom, and restore that position afterwards. If the
user had manually scrolled up to read history, their position is kept.
- Show a "Create new worktree…" option when search yields no matches
- Pre-select it so Enter immediately opens the create dialog
- Replace inline SVG with lucide Plus icon
- Simplify palette item styling (rounded-xl, neutral selection colors)
- Add primary badge, CornerDownLeft hint, and layout refinements
- Remove unused badgeLabel field from search results
Previously, user-initiated update checks during a GitHub release
transition sent 'not-available', falsely telling users they were on
the latest version. Now all benign check failures send 'idle', and the
toast controller converts user-initiated checking→idle into a neutral
"unable to check" message that covers both release transitions and
network blips honestly.
Chromium does not fire a paste event when the clipboard contains only
image data (no text) and the target is a textarea — which is how
xterm.js receives focus. The previous handler relied solely on the
paste ClipboardEvent, so image-only pastes were silently discarded.
Move paste interception to a keydown listener for Cmd+V / Ctrl+V that
checks the clipboard via Electron's main-process API. Text is tried
first (single IPC call, fast path), and image check only runs when
text is empty. The paste event handler is kept as fallback for
non-keyboard triggers (Edit menu, etc.). Also adds image support to
the context menu paste path for consistency.
* Revert "Revert "test: verify auto-update notification flow" (#478)"
This reverts commit 988fa02456.
* test: fix missing ipc events mock in useIpcEvents.test.ts
* Add usage status bar and Codex account switching (#483)
* 1.1.14
* feat: add active agent count in top bar (#484)
* feat: add active agent count in top bar
* fix: pass missing runtime pane title setters to pty connection
---------
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
* Add "No login required" to README features (#486)
* Add "No login required" to top of README features
Highlight that Orca needs no account or login — users bring their own
Claude Code or Codex subscription directly.
* Simplify no-login line and add Codex account switching section
- Trim "No login required" to just the essentials
- Add [New] Hot Swap Codex Accounts section with gif demo
* Fix README badge layout — remove blank lines inside HTML blocks (#488)
Blank lines inside <p> tags cause GitHub to render each badge as a
separate paragraph instead of inline on one row.
* Add Codex account switcher gif (#489)
The gif was referenced in README but never committed.
* Refresh worktree quick jump UI (#487)
* fix: Warp-parity keyboard shortcuts — image paste and line-kill bindings (#491)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
* Nicer agent list (#492)
* test: mock more missing IPC handlers and store actions in useIpcEvents tests
---------
Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Yax Patel <74978532+ypatel2022@users.noreply.github.com>
Co-authored-by: Colin Chambachan <colin.chambachan@gmail.com>
Co-authored-by: Ramzi <79337754+heyramzi@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
* feat: add active agent count in top bar
* fix: pass missing runtime pane title setters to pty connection
---------
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
When a <webview> guest has focus, keyboard events go to the guest's own
webContents and never reach the renderer's window-level keydown handler.
Forward app shortcuts from the guest's before-input-event through IPC so
they work consistently regardless of which surface has focus.
Shortcuts fixed: Cmd+Shift+B (new browser tab), Cmd+T (new terminal tab),
Cmd+W (close active tab), Cmd+Shift+]/[ (switch tabs), Cmd+J (worktree
palette), Cmd+P (quick open), Cmd+1-9 (jump to worktree).
Replace FISH_NAMES with MARINE_CREATURES, default from Salmon to
Nautilus. Remove commonly eaten food fish and add cephalopods, marine
mammals, seabirds, deep-sea creatures, and mythical sea beings.
* Fix browser tab focus and grab shortcut behavior
* fix: resolve focus stealing and iframe grabbing edge cases
- Move post-navigation focus handoff to the start of programmatic navigations to prevent stealing focus if the user clicks the address bar while the page is loading.
- Add IFRAME to the isEditable check in the grab shortcut guest forwarder to prevent stealing native copy from cross-origin iframes.
Move "Open Links In Orca" into its own Browser section under General
settings and register it in the search index so searching "browser"
actually finds it. Also drop the sm:gap-0 override on dialog footers
so button spacing stays consistent at all breakpoints.
* Add richer feedback dialog
* Keep anonymous submission client-side only
* Use lowercase feedback API host
* Fallback feedback submission when api host is unavailable
On macOS, Shift+[ reports '{' as e.key (the shifted character), breaking
the Cmd+Shift+[ / ] tab switch shortcut. Switch to e.code which always
reports 'BracketLeft'/'BracketRight' regardless of modifier state.
Also use reconcileTabOrder so tab switching works even when
tabBarOrderByWorktree is unset (e.g. restored session worktrees).
* wip in the design doc
* fix: use Ctrl+Shift+J for worktree palette on non-darwin platforms
To avoid colliding with Ctrl+J (Line Feed) on Windows/Linux, we now
use Ctrl+Shift+J for the worktree jump palette on those platforms,
leaving Cmd+J for macOS.
* refactor: migrate QuickOpen to cmdk and unify overlay state
- Migrated `QuickOpen.tsx` to use `cmdk` (`CommandDialog`) for visual and
behavioral consistency with the new worktree jump palette, while keeping
the existing custom fuzzy match algorithm.
- Unified the overlay state systems (`activeModal`, `quickOpenVisible`,
`worktreePaletteVisible`) into a single `activeModal` union type.
- This automatically handles mutual exclusion without boilerplate
toggle logic spread across components.
* fix: forward QuickOpen and worktree shortcuts from browser guests
Added main-process interceptors for `Cmd/Ctrl+P` and `Cmd/Ctrl+1-9`
so that QuickOpen and numeric worktree jumping continue to work
even when an embedded browser guest (webview) has keyboard focus.
* fix: address review findings
- Set spawnEnv.SHELL before pty.spawn() in the fallback loop so the
child process inherits the correct SHELL value instead of the stale
original.
- Remove dead Cmd+P and Cmd+1-9 renderer keydown handlers from App.tsx;
these are now handled via IPC from createMainWindow.ts before-input-event
(the IPC handlers in useIpcEvents.ts have the same view-state guards).
Browser tabs are factored into getWorktreeStatus, so leaving them
behind after shutdown keeps the sidebar dot green even though all
terminals are dead. Clear browserTabsByWorktree and
activeBrowserTabIdByWorktree during shutdown so the status indicator
transitions to inactive.
The old code used a hardcoded PRIMARY_BRANCHES set (main, master, develop,
dev) to decide badge styling, which was misleading — a non-primary worktree
on "main" got a badge nearly identical to the actual primary worktree.
Now we use the authoritative `isMainWorktree` flag from git, show a
"primary" badge next to the display name, and always show the branch name
in the subtitle row regardless of branch naming conventions.