Commit Graph

429 Commits

Author SHA1 Message Date
Jinwoo Hong 73c1a922ff
Refine Codex accounts settings layout (#528) 2026-04-12 00:41:20 -07:00
Neil 5041afb052
fix: keep OpenCode activity and notifications in sync (#527) 2026-04-12 00:10:52 -07:00
Jinwoo Hong a0735030d8
Refactor browser manager internals and fix grab shortcuts (#525) 2026-04-11 23:52:39 -07:00
Jinjing fd33d9cc2d
feat: make titlebar agent status configurable (#526)
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
2026-04-11 23:52:21 -07:00
Jinjing 206eb50ab2
fix: preserve terminals on manual quit (#524) 2026-04-11 23:50:58 -07:00
Jinjing a9b3ae6de4
fix: prevent Cmd+Shift+G from opening sidebar during terminal search (#523)
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
2026-04-11 23:38:24 -07:00
Jinjing 54202211a5
reduce sidebar card horizontal padding (#522)
px-3 → px-2 for a more compact sidebar layout.
2026-04-11 23:35:48 -07:00
Neil c4aabcc4e5
fix: audit terminal shortcut interception (#519) 2026-04-11 23:24:04 -07:00
Jinjing c4bd5e492b
fix: highlight file search matches on reveal (#518) 2026-04-11 22:53:01 -07:00
Alexander 74e008c616
Add Cmd+G / Cmd+Shift+G terminal search navigation (#440)
* Add design spec for terminal search next/prev shortcuts

Cmd+G / Cmd+Shift+G to navigate search matches when the
search bar is already open, following macOS conventions.

* Address review: isEditableTarget bypass, incremental option, native Cmd+G conflict

* Spec: clarify mod-key check placement and ref sync on empty query

* Add implementation plan for terminal search next/prev shortcuts

* Plan: merge Task 3+4 to avoid compile break, fix stale note, add reorder rationale

* Plan: import SearchState type in TerminalSearch instead of inline duplication

* test: add failing tests for search-navigate key matching

* feat: add Cmd+G / Cmd+Shift+G search navigation to keyboard handler

* feat: wire searchStateRef through TerminalPane and TerminalSearch

* refactor: use searchOpenRef to avoid listener re-registration on search toggle

* test: add Ctrl+Shift+G → previous on Linux/Windows test case
2026-04-11 22:52:32 -07:00
Neil 97c11176e1
Autofocus worktree delete confirmation (#517) 2026-04-11 22:47:51 -07:00
Neil e5890f8e3f
Fix stale test mocks after runner migration (#516) 2026-04-11 22:47:30 -07:00
Jinjing ee41552b14
fix: prevent double IPC registration on macOS (#515) 2026-04-11 22:33:37 -07:00
Jinjing 3a0ba5c4e0
feat: replace update toasts with update card (#514)
* fix(UpdateCard): align downloading state layout to prevent height jumping

* feat: replace update toasts with update card

* test: update async updater expectations after merge

* test: align updater tests with card flow
2026-04-11 22:11:02 -07:00
Jinjing 79f3376332
fix: address review findings (#508)
- 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
2026-04-11 18:12:05 -07:00
Jinjing 410af305e3
feat(editor): support contextual copy in diff view (#507)
- 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.
2026-04-11 18:09:08 -07:00
Jinjing 1e77b62616
fix: preserve scroll position when resizing terminal panes (#506)
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.
2026-04-11 18:01:16 -07:00
Jinjing 2dbe17cd95
Add "Create new worktree" entry in Cmd+J jump palette (#505)
- 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
2026-04-11 17:40:47 -07:00
Jinjing 12bb3bd8c8
fix: align traffic lights with titlebar content at any zoom level (#413) (#504)
- Dynamically reposition macOS traffic lights via setWindowButtonPosition
  when UI zoom changes (IPC ui:sync-traffic-lights)
- Hide left sidebar toggle in settings view to fix PopperAnchor warning
2026-04-11 17:18:06 -07:00
Jinjing 40d431795f
fix: show honest message when update check fails during release transition (#501)
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.
2026-04-11 16:28:39 -07:00
Neil e927e502ac
Fix terminal links opening externally on cmd/ctrl-click (#497)
* Suppress default terminal link navigation

* Honor default in-app terminal link routing

* Always route terminal links through Orca
2026-04-11 15:56:23 -07:00
Jinwoo Hong f43bf4f90e
fix: close orphaned dev Electron app after Ctrl+C (#498) 2026-04-11 15:50:21 -07:00
Neil aeb8002df7
Support shift+cmd/ctrl-click for external terminal links (#495) 2026-04-11 15:33:09 -07:00
Neil 49c7b788c3
Fix Codex CLI detection for Electron tracking (#496) 2026-04-11 15:32:47 -07:00
Jinjing fe04818b0c
fix: intercept Cmd+V at keydown level so image paste works in terminal (#494)
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.
2026-04-11 15:01:22 -07:00
Jinjing 55bc0f8b33
Revert "Revert "test: verify auto-update notification flow"" (#479)
* 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>
2026-04-11 14:35:15 -07:00
Ramzi 916d98106d
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>
2026-04-11 14:02:37 -07:00
Colin Chambachan c24c20e59f
Refresh worktree quick jump UI (#487) 2026-04-11 12:43:30 -07:00
Yax Patel 788b71f131
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>
2026-04-11 12:30:41 -07:00
Jinwoo Hong 331e7dedb8
Add usage status bar and Codex account switching (#483) 2026-04-11 11:23:44 -07:00
Jinjing 988fa02456
Revert "test: verify auto-update notification flow" (#478) 2026-04-11 06:06:40 -07:00
Jinjing 9e7f70714f
test: verify auto-update notification flow (#477) 2026-04-11 06:04:21 -07:00
Jinjing 9e02a887f5
Fix keyboard shortcuts not working when browser tab has focus (#476)
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).
2026-04-11 05:52:39 -07:00
Jinjing 624ce44c0a
Rename fish-themed worktree names to magical marine creatures (#475)
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.
2026-04-11 05:44:16 -07:00
Jinjing 8ccab252ea
make new browser tab focus on address bar (#474)
* 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.
2026-04-11 05:36:09 -07:00
Jinjing 7e58514ba5
Add dedicated Browser settings section and fix dialog footer gaps (#472)
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.
2026-04-11 05:07:01 -07:00
Jinjing fc2f10f731
Tone down primary badge and merged PR icon colors (#471)
Make the "primary" worktree badge neutral instead of blue, and
slightly reduce merged PR icon saturation for a less distracting
sidebar.
2026-04-11 04:49:48 -07:00
Neil ca041b66fe
Add richer in-app feedback dialog (#468)
* Add richer feedback dialog

* Keep anonymous submission client-side only

* Use lowercase feedback API host

* Fallback feedback submission when api host is unavailable
2026-04-11 00:52:53 -07:00
Jinjing 3cb9c99743
fix: use e.code for tab switch shortcut to fix macOS Shift+bracket detection (#470)
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).
2026-04-11 00:52:20 -07:00
Jinjing 696590918c
feat: Quick Jump to Worktree palette (Cmd+J) (#469)
* 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).
2026-04-10 23:37:23 -07:00
Jinjing a6b12e9672
fix: address review findings (#467)
- Guard Cmd+C handler to skip text inputs (address bar, etc.)
- Wrap capturePage in try/finally to always restore grab overlay
- Clear grab toast timer on component unmount
- Fix lint: add curly braces, remove useless return
2026-04-10 22:39:28 -07:00
Colin Chambachan 4c9670bffc
feat: use fish species for default worktree names (#462) 2026-04-10 22:16:50 -07:00
Jinjing 821e205c6f
fix: preserve terminal session state during periodic saves (#461) 2026-04-10 21:06:37 -07:00
Jinjing a666ecb347
feat: enable open-links-in-app by default (#460) 2026-04-10 20:27:33 -07:00
Jinjing dad6713553
fix: clear browser tab state on worktree shutdown (#458)
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.
2026-04-10 20:17:50 -07:00
Jinjing 7c71afce55
fix: replace branch-name heuristic with isMainWorktree for primary badge (#457)
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.
2026-04-10 19:58:45 -07:00
Jinjing 0f819032a0
feat: auto-refresh File Explorer via filesystem watcher (#456)
* fix: address review findings

* feat: add filesystem watcher for auto-refreshing File Explorer

Adds @parcel/watcher-based filesystem watching so the File Explorer
automatically reflects external changes (creates, deletes, renames)
without manual refresh.
2026-04-10 19:50:14 -07:00
Jinjing aef508d2b3
fix: address review findings (#455) 2026-04-10 19:37:36 -07:00
Brennan Benson 02ac8f48e9
fix: show update prompt for unrecognized orca.yaml keys (#454) 2026-04-10 18:28:59 -07:00
Colin Chambachan 874ba49789
fix: preserve reverse search shortcut (#453)
* fix: preserve reverse search shortcut

* test: cover cmd+r reverse search regression
2026-04-10 16:34:25 -07:00