Commit Graph
555 Commits
Author SHA1 Message Date
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
Jinwoo Hong c8a8ef1b5c fix: stop smart sort from reordering after focus (#730) 2026-04-16 15:17:48 -07:00
Brennan Benson 48c24935c3 fix: prevent split-group container teardown when switching worktrees (#726) 2026-04-16 14:29:33 -07:00
Jinjing 19d22b0667 feat: add View button to delete failure toasts for worktree navigation (#725)
When a worktree delete fails, users may want to inspect the worktree
to understand why. Add a "View" button that navigates to the worktree
via activateAndRevealWorktree on all delete failure toasts.
2026-04-16 13:41:02 -07:00
Jinjing 2e2e151aa0 Change New Markdown shortcut from ⌘⇧N to ⌘⇧M (#724)
⌘⇧N conflicts with the well-known "New Window" convention in VS Code
and Chrome. ⌘⇧M is a clear mnemonic for Markdown and doesn't clash
with any existing shortcut. Also adds New Browser Tab and New Markdown
entries to the Settings keyboard shortcuts pane.
2026-04-16 13:35:47 -07:00
Brennan Benson 7db6270b91 Show split actions on the active pane header (#695) 2026-04-16 11:59:36 -07:00
Jinjing 22e2b90ad8 fix: exclude orphaned worktrees from active agent count (#709)
tabsByWorktree can retain entries for worktrees deleted outside Orca or
whose cleanup didn't complete. This caused phantom agents to appear in
the titlebar count. Now both countWorkingAgents and
getWorkingAgentsPerWorktree filter against worktreesByRepo as the source
of truth.
2026-04-16 00:54:41 -07:00
Jinjing a928d56a50 fix: improve new-tab button spacing and dropdown alignment (#708)
Increase gap between last tab and the "+" button (ml-0.5 → ml-2),
add more vertical padding to dropdown menu items (py-0.5 → py-1.5),
and align dropdown to open rightward (align end → start).
2026-04-16 00:39:55 -07:00
Jinwoo Hong a51efc1fbf fix: resolve invalid nested button DOM in worktree group headers (#706) 2026-04-15 23:45:58 -07:00
Dylan Klohr 9ff4951ac4 fix: support option/alt+arrow word navigation in terminal (#699) 2026-04-15 23:45:44 -07:00
Jinwoo Hong ca75b16b33 fix: add version manager bin paths to startup PATH for GUI-launched apps (#702) 2026-04-15 23:37:16 -07:00
Jinwoo Hong e17d917afe fix: prevent title bar flickering with multiple split-pane agents (#701) 2026-04-15 22:59:42 -07:00
Jinjing c2d312888e fix: prevent ProseMirror from overwriting native drag selection in rich markdown editor (#704)
Add two workarounds for Chrome/ProseMirror drag-selection breakage:

1. DragSelectionGuard extension — suppresses selectionchange → selectionToDOM
   during active drags, blocks CellSelection transactions from prosemirror-tables,
   and restores native selection post-mouseup to preserve table-cell highlighting.

2. safeReactNodeViewRenderer — patches handleSelectionUpdate so selectNode/
   deselectNode only fire for actual NodeSelections, preventing React re-renders
   mid-drag that disrupt native selection tracking (Tiptap #7647).
2026-04-15 22:58:16 -07:00
Jinjing bb53c4a7b6 fix: address auto-review findings (#703) 2026-04-15 22:54:03 -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
Jinjing 53b75f6f16 Revert "Add terminal jump-to-present control (#660)" (#697)
This reverts commit d256879f3e.
2026-04-15 22:08:25 -07:00
Jinwoo Hong a68bab60a6 fix: prevent stale terminal buffer flash on tab switch (#694) 2026-04-15 21:12:54 -07:00
Jinjing 0c48f0ac3c fix: close editor/diff tabs should navigate to visual neighbor tab (#693)
closeFile() only removed the file from openFiles and picked the next
active file by array position. Terminal and browser closes already went
through closeUnifiedTab() which uses pickNeighbor(group.tabOrder) for
visual neighbor selection. Add the same closeUnifiedTab() call to
closeFile() so editor, diff, and conflict-review tab closes behave
consistently.

Also update the /electron skill with Orca-specific CDP launch recipe
and broader trigger keywords for more reliable invocation.
2026-04-15 21:06:37 -07:00
Jinwoo Hong 8c3501f8c5 fix: improve PDF viewer by hiding sidebar and removing padding (#689) 2026-04-15 20:34:34 -07:00
Jinjing 3466e552d0 fix: return error objects from IPC repo handlers instead of throwing (#691)
* fix: return error objects from IPC repo handlers instead of throwing

Electron IPC does not preserve Error objects across the process boundary,
so throwing from main-process handlers can result in opaque failures on
the renderer side. Switch repos:add and repos:addRemote to return
{ repo: Repo } | { error: string } discriminated unions, and update all
call sites to check for the error variant.

* fix: address review findings

- Add explicit return type to repos:add handler for type safety
- Log errors in NonGitFolderDialog catch block (direct IPC call
  bypasses store toast handling)

* fix: show toast on remote folder add failure

The NonGitFolderDialog calls addRemote directly (bypassing the store),
so errors were silently swallowed. Show a toast so the user sees feedback.
2026-04-15 20:33:26 -07:00
Brennan Benson 67ea84a0fb fix: restore worktree sidebar scroll viewport (#688) 2026-04-15 20:16:52 -07:00
Brennan Benson 30d6f11d70 feat: add split editor button to tab header (#687) 2026-04-15 19:35:44 -07:00
Brennan Benson 5b86271acd fix: correct terminal split icon arrow directions (#686) 2026-04-15 19:07:00 -07:00
Brennan Benson 883a8f435b Disambiguate terminal split from tab group split labels (#684) 2026-04-15 18:41:51 -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
Brennan Benson e73f831490 fix: return to Orca landing screen after closing last terminal (#677) 2026-04-15 16:08:08 -07:00
Brennan Benson ae54be0450 Align workspace chrome and split tab headers (#679) 2026-04-15 16:07:15 -07:00
Brennan Benson 1c93270157 feat: add New Markdown option to tab group plus icon (#678) 2026-04-15 15:32:49 -07:00
Brennan Benson aad7d04997 Fix split pane shortcuts targeting hidden worktrees (#676) 2026-04-15 14:16:39 -07:00
Brennan Benson e4cdb29a01 feat: enable split groups renderer path (#669) 2026-04-15 13:12:54 -07:00
Jinwoo Hong f5b716a760 feat: add browser tab search to Cmd+J jump palette (#675) 2026-04-15 12:54:56 -07:00
Jinwoo Hong 97f3cd5199 feat: add pinned worktrees to sidebar (#674) 2026-04-15 12:23:13 -07:00
Jinwoo Hong 6507ff8564 fix: prevent markdown files from appearing dirty on open (#673) 2026-04-15 11:38:40 -07:00
Jinjing d43dd038dc fix: prevent stale base ref errors when switching repos (#670)
Reset defaultBaseRef to null on repo change so effectiveBaseRef becomes
falsy until the IPC resolves, preventing branch compare from firing with
a stale cross-repo value. Also fix loading→error→loading flicker by only
resetting to loading state on first request or when base ref changes.
2026-04-15 00:51:19 -07:00
Jinwoo Hong 3632436ca6 feat: add Cmd+F find-in-page to browser pane (#668) 2026-04-15 00:47:05 -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
Neil 306118dbee refactor: eliminate useEffect anti-patterns (audit pass 2) (#665)
* refactor: eliminate useEffect anti-patterns across 5 components

- MonacoEditor, RichMarkdownEditor: assign callback/prop refs directly
  during render instead of via useEffect, so ProseMirror and Monaco
  handlers always read the current closure rather than a one-render-
  stale copy.

- SettingsFormControls (FontAutocomplete): replace useEffect that reset
  highlightedIndex on filteredSuggestions/open changes with the
  "adjusting state during render" pattern (track prevOpen /
  prevFilteredSuggestions), so the correct item is highlighted on the
  same paint as the dropdown opens or the filter updates.

- ChecksPanel: replace useEffect that reset 5 local state fields on
  activeWorktreeId change with the "adjusting during render" pattern
  (track prevActiveWorktreeId), so stale title/loading UI from the
  previous worktree is cleared before the first paint of the new one.

- SshPassphraseDialog: split one useEffect that both reset form state
  and focused the input into (a) during-render state reset and (b) a
  focused DOM-only useEffect, so the cleared input is visible
  immediately rather than after a post-paint effect flush.

* fix: resync font autocomplete highlight on value change
2026-04-14 23:28:58 -07:00
Jinwoo Hong 81144f29db fix: prevent window re-maximize when opening browser tab (#666) 2026-04-14 23:20:43 -07:00
Brennan Benson 66456acf8d refactor: extract tab group workspace model and host (#664) 2026-04-14 21:39:45 -07:00
RamziandJinwoo-H a7399cf11f fix: plug memory leaks, unbounded caches, and disk accumulation (#595)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-14 21:07:48 -07:00
Brennan Benson c889e95d65 refactor: gate split group surface ownership in Terminal.tsx (#642) 2026-04-14 20:19:11 -07:00
Colin ChambachanandClaude Sonnet 4.6 d256879f3e Add terminal jump-to-present control (#660)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 19:42:28 -07:00
RamziandJinwoo-H fb5afc3aab feat: add .mmd/.mermaid file viewer with rendered diagram toggle (#597)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-14 19:26:55 -07:00
Brennan Benson 3b897d255d feat: add split group UI with tab-bar context menus and resize handles (#646) 2026-04-14 19:01:11 -07:00
Jinwoo Hong 42e04268fb fix: harden SSH connection reliability and add passphrase prompt (#636) 2026-04-14 18:29:50 -07:00
Jinwoo Hong 8c016c91b2 fix: restore mermaid labels in markdown preview (#659) 2026-04-14 17:06:08 -07:00
Brennan Benson cfe49ff404 fix: restore worktrees through tab group ownership (#645) 2026-04-14 17:01:58 -07:00
Brennan Benson c4460f8820 fix: harden terminal pane lifecycle for split groups (#641) 2026-04-14 16:23:01 -07:00
Jinjing 92353e7233 Fix cursor jump when typing in markdown list items (#658)
The debounced onUpdate serialization feeds back through the content prop,
and if the user types between the debounce firing and the useEffect
running, the stale prop triggers setContent — resetting the cursor.
Skip the destructive setContent when the content prop matches our own
last serialization (lastCommittedMarkdownRef).
2026-04-14 16:09:49 -07:00