Commit Graph
112 Commits
Author SHA1 Message Date
Kelvin AmoabaandJinwoo-H ab81f04fae persist sidebar collapsed groups across navigation and restart (#722)
* fix: persist sidebar collapsed groups across navigation and restart

The sidebar's collapsed-group state was stored as local React state in
WorktreeList, so the Sidebar unmount/remount triggered by navigating into
Settings discarded it — returning to the main view re-expanded every
previously collapsed group. Lift the state into the UI slice alongside
groupBy/sortBy/filterRepoIds and persist it via the existing ui:set IPC
so collapse state also survives app restarts.

* fix: clear collapsed groups when switching groupBy mode

Prevents stale keys from accumulating across mode switches and avoids
cross-mode key collisions that could leave groups unexpectedly collapsed.

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-19 00:23:52 -04:00
DrakontiaandCopilot 747424d950 fix: use -i flag for GitHub Copilot CLI prompt injection (#799)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-18 11:07:48 -07:00
Neil 3a67eb0f9c support orca 2026-04-18 00:10:27 -07:00
Neil 8dbfec4e20 feat: when closing a tab, go to previous tab (MRU) not nearest neighbor (#784) 2026-04-17 19:43:22 -07:00
DrakontiaandCopilot 2931f66e78 feat: add GitHub Copilot CLI as a supported agent (#770)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-17 16:47:59 -07:00
Neil aa75adedf7 feat(settings): gate persistent terminal daemon behind experimental toggle (#774) 2026-04-17 16:00:16 -07:00
Jinjing 023d65ebfa feat(worktree): add skip delete confirmation preference (#771)
- feat(worktree): add skip delete confirmation preference
2026-04-17 15:29:19 -07:00
Neil 71fd14f369 feat: default setup script to new tab (#772)
Change the default setupScriptLaunchMode from 'split-vertical' to
'new-tab' so setup output runs in a background Setup tab by default
instead of crowding the primary terminal pane. Users can still opt
back into split-vertical or split-horizontal in Terminal settings.
2026-04-17 15:27:27 -07:00
Jinwoo Hong fd4f986c59 feat: terminal persistence via out-of-process daemon (#729) 2026-04-17 01:42:41 -04:00
Jinwoo Hong 39832c7801 feat: Ghostty-style macOS Option key mode setting (#748)
* feat: add Ghostty-style macOS Option key mode setting

Disable xterm's macOptionIsMeta by default so non-US keyboard layouts
can compose characters (e.g. @ on German, € on French). Add a
user-facing "Option as Alt" setting with four modes — Both, Left,
Right, Off — mirroring Ghostty's macos-option-as-alt. Core readline
shortcuts (Option+B/F/D) are automatically compensated when Option is
in compose mode. The setting applies live to existing terminal panes.

* fix: track Option key location from modifier keydown, not character key

KeyboardEvent.location on a character key (e.g. Period) reports that
key's own position (always 0), not which modifier is held. Left/right
Option mode was broken because we read location from the character
event. Fix by recording the Option key's location from its own
keydown/keyup events and passing it as a separate parameter.
2026-04-17 01:37:22 -04:00
Neil eec2f9137e feat: configurable setup script launch location (#745)
Adds a Terminal settings control for where the repo setup script runs
on workspace create: vertical split (default, preserves prior behavior),
horizontal split, or a separate "Setup" tab that does not steal focus
from the primary terminal.
2026-04-16 21:20:38 -07:00
Neil 7df0d9686c feat: GitHub PR/issue drawer on new-workspace page (#744) 2026-04-16 21:14:24 -07:00
Jinwoo Hong 961f507ed3 feat: improve cookie import robustness and cross-platform support (#736) 2026-04-16 20:44:10 -07:00
Jinwoo Hong 63b2353cfd feat: browser URL history and address bar autocomplete (#738) 2026-04-16 20:07:46 -07:00
Neil d2a53c8fcc New workspace create page (#710)
* New workspace page with agent catalog, composer modal, and terminal integration

* fix lint

* better blank state

* fix: resolve typecheck errors in new-workspace flow

- widen activateAndRevealWorktree's issueCommand to accept direct
  command shape used by NewWorkspacePage, not just the main-process
  runner-script variant
- use a ref object in pty-connection tests to dodge TS narrowing the
  captured callback to never across the mock closure boundary

* fix: bound worktree name auto-suffix loop to prevent OOM in tests

The auto-suffix loop in createLocalWorktree had no termination cap.
When tests (or a misconfigured env) mocked getBranchConflictKind /
getPRForBranch to always return a collision, the loop ran forever and
the vitest worker crashed with "Ineffective mark-compacts near heap
limit".

Cap the search at 100 suffixes, and if all fail, fall back to the
original specific error messages (branch already exists / PR already
owns the name) instead of a generic failure.

Update the two tests that asserted the old throw-on-first-conflict
behavior to verify the new auto-suffix path end-to-end.
2026-04-16 15:41:40 -07:00
Jinjing 250dd77414 fix: prevent phantom notifications when shutting down worktree terminals (#700)
Unregister PTY data handlers before killing PTYs during worktree
shutdown so the final data flush cannot trigger bell/agent-status
notifications. Also cancels accumulated closure state (staleTitleTimer,
agent tracker) via teardown callbacks, and adds a hasLivePtys guard
at notification dispatch time as a belt-and-suspenders check.
2026-04-15 22:39:23 -07:00
Jinwoo Hong 3b53441b96 feat: split smart sort and recent sort into separate modes (#680) 2026-04-15 17:54:06 -07:00
Jinwoo Hong ae11e7fefb fix: position browser context menu at cursor with edge flipping (#682) 2026-04-15 16:55:27 -07:00
Jinwoo Hong 97f3cd5199 feat: add pinned worktrees to sidebar (#674) 2026-04-15 12:23:13 -07:00
Brennan Benson 90b7f61e65 refactor: dark-launch split groups with correctness fixes (#643)
* refactor: enable split groups

* Fix split groups terminal host rollout

* refactor: remove split groups from add-tab menu

* refactor: dark-launch split groups with correctness fixes
2026-04-15 00:01:40 -07:00
Jinwoo Hong 81144f29db fix: prevent window re-maximize when opening browser tab (#666) 2026-04-14 23:20:43 -07:00
Jinwoo Hong 42e04268fb fix: harden SSH connection reliability and add passphrase prompt (#636) 2026-04-14 18:29:50 -07:00
Brennan Benson 741974c59c refactor: add split group model foundations (#644) 2026-04-14 14:39:01 -07:00
Jinwoo Hong 170610d1b2 fix: resolve Windows freeze when switching worktrees with right sidebar open (#628) 2026-04-14 00:45:04 -07:00
Jinjing 0ad3fda397 fix: harden active agent hovercard (#621) 2026-04-13 22:49:15 -07:00
Jinjing 130c3e9697 feat: scope terminal shell history per worktree (#620)
* feat: scope terminal shell history per worktree

Each worktree gets its own HISTFILE so ArrowUp only surfaces commands
from the current worktree. Integrates with the new LocalPtyProvider
architecture: history env injection runs after buildSpawnEnv but before
spawnShellWithFallback, and onBeforeFallbackSpawn keeps HISTFILE in
sync when the shell falls back.

* fix: align preload type declaration with implementation

Add missing command field to PtyApi.spawn in index.d.ts to match
the runtime index.ts signature, fixing TS2769 overload conflict.

* chore: remove terminal-history-scope-design.md from tracked files

* fix: mock terminal-history in worktrees test

The deleteWorktreeHistoryDir import pulls in electron's app module.
Add a vi.mock so the test doesn't hit the real electron export.
2026-04-13 22:42:53 -07:00
75ce59c3c9 fix: paste on right-click in Windows terminals (#571)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
2026-04-13 22:24:28 -04:00
Jinwoo Hong cc66e120eb feat: Add SSH remote support (beta) (#590) 2026-04-13 19:23:09 -07:00
Jinwoo Hong e7f6344e89 Browser v2: workspace model, session profiles, and cookie import (#577) 2026-04-13 10:03:32 -07:00
Jinjing f9e803082c feat: implement on-demand update notification nudge (#570)
* wip

* feat: implement on-demand update notification nudge

* fix: address CI lint failures
2026-04-12 21:30:15 -07:00
Brennan Benson 71a0069910 Revert "Split-screen tab groups with canonical group/item model" (#551) 2026-04-12 15:20:31 -07:00
Neil 1395b6f516 Support Pi titlebar status tracking (#530) 2026-04-12 01:20:20 -07:00
Brennan Benson 839d87181b Split-screen tab groups with canonical group/item model (#520) 2026-04-12 01:10:32 -07:00
Neil 5041afb052 fix: keep OpenCode activity and notifications in sync (#527) 2026-04-12 00:10:52 -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
Neil c4aabcc4e5 fix: audit terminal shortcut interception (#519) 2026-04-11 23:24:04 -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
Jinwoo Hong 331e7dedb8 Add usage status bar and Codex account switching (#483) 2026-04-11 11:23:44 -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 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
Jinjing a666ecb347 feat: enable open-links-in-app by default (#460) 2026-04-10 20:27:33 -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
Jinwoo Hong 4389c65876 Add browser context grab feature (#451) 2026-04-10 14:13:35 -07:00
Brennan Benson 7b63288f68 feat: GitHub issue command automation for worktree creation (#441)
* feat: add shared issue command config and worktree automation

- Add shared top-level issue command support in orca.yaml with per-user .orca override read/write paths
- Surface the issue command in repository settings and the create-worktree dialog
- Queue issue-command terminal splits independently from setup-runner splits
- Preserve user checkbox state and repo-switch draft saves for issue command configuration
- Add parser, activation, and terminal-state test coverage for the new flow

* fix: clarify custom issue command settings label

* docs: clarify issue command effect behavior

* docs: unify issue command examples

* fix: keep issue command examples on one line

* style: use direct useEffect import in add worktree dialog
2026-04-10 13:52:46 -07:00
Jinwoo Hong 1b3719cb4c Add Codex usage tracking (#444) 2026-04-10 10:04:57 -07:00
Jinwoo Hong c6ff6da3a8 Add in-app browser tabs (#430) 2026-04-10 00:04:42 -07:00
Alexander 7a7d287ed2 feat: focus-follows-mouse setting for terminal panes (#389) 2026-04-09 17:02:01 -07:00
Jinwoo Hong 4d5da8c0a9 Add Claude usage tracking analytics (#417) 2026-04-09 12:28:59 -07:00
Jinjing 265c2ddd68 Remove macOS notification permission checking (#404)
* fix: address review findings

* fix: mock process.platform as darwin in system-denied test

The test exercises the macOS notification permission gate, which only
checks systemPreferences.getNotificationSettings on darwin. Without
mocking the platform, Linux CI takes the non-darwin path and the
assertion fails.

* chore: remove stale test files

* refactor: remove macOS notification permission checking

The systemPreferences.getNotificationSettings() check added friction
without meaningful benefit — macOS handles permission prompting natively
when a notification is posted, making the manual check redundant.
Removes getPermissionStatus(), the system-denied dispatch reason,
the IPC handler, the renderer permission-blocked banner, and all
related tests.
2026-04-08 20:59:49 -07:00
Neil b60341ff0c Revert "fix: prevent terminal reset when splitting tab groups" (#403) 2026-04-08 20:45:23 -07:00