Commit Graph
3283 Commits
Author SHA1 Message Date
Jinwoo Hong 9f317e9870 feat: prompt cache timer for Claude agents (#390) 2026-04-08 12:49:38 -07:00
Matheus Nogueira 82941850b6 Reapply "feat: unified tabs system with titlebar integration (#371)" (#384)
This reverts commit 72890a3c89.
2026-04-08 15:58:32 -03:00
Jinjing 94ac8058aa Revert "fix: keep-alive editor panes to preserve scroll position" (#385) 2026-04-08 00:41:08 -07:00
Jinjing 9180fd3118 fix: reduce worktree card gap from 8px to 6px (#386) 2026-04-08 00:39:33 -07:00
Brennan BensonandClaude Opus 4.6 c533784d65 feat: add custom title support for terminal panes (#382)
* WIP: Changes before auto-review fixes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add custom title support for terminal panes

Users can set a custom title on individual terminal panes via the
right-click context menu ("Set Title...") or by clicking an existing
title. Titles display as a minimal floating label at the top of each
pane with inline editing (Enter to save, Escape to cancel). An X
button on hover removes the title.

Titles persist across restarts via titlesByLeafId in
TerminalLayoutSnapshot, piggybacking on the existing session:set flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address review findings for pane title feature

- Guard rename input against double-submit on Enter/Escape + blur race
- Memoize persistLayoutSnapshot with useCallback to prevent keyboard
  listener re-registration on every render
- Eagerly update paneTitlesRef in onPaneClosed so persistLayoutSnapshot
  sees correct data before React flushes state
- Document portal rendering's implicit dependency on paneTitles state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: write pane titles in shutdown snapshot even when buffers are empty

captureBuffers had an early return when no terminal scrollback content
existed, which skipped writing titlesByLeafId to the layout snapshot.
This caused titles to be lost on restart for fresh or cleared panes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: remove design doc from PR

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 00:02:12 -07:00
Jinjing 72890a3c89 Revert "feat: unified tabs system with titlebar integration (#371)" (#384) 2026-04-07 23:56:17 -07:00
Jinjing d46ed1282e feat: add consistent gaps between worktree cards (#383)
* feat: add consistent gaps between worktree cards

Use TanStack Virtual's built-in `gap` option (8px) instead of padding
on the wrapper div. The virtualizer accounts for the gap directly in
its position calculations, guaranteeing consistent spacing between
cards regardless of estimation/measurement mismatches.

* test: update estimate tests for virtualizer gap change
2026-04-07 23:32:55 -07:00
Jinjing 5d8e69a235 feat: auto-reveal active file in explorer on tab switch (#380)
* feat: auto-reveal active file in explorer on tab switch

Adds useFileExplorerAutoReveal hook that scrolls the file explorer to
show the active editor file when switching tabs, mirroring VS Code's
explorer.autoReveal behavior. Files already visible in the tree get
scrolled to directly; files with collapsed ancestors trigger the reveal
machinery with flash disabled to avoid visual noise.

* refactor: extract file explorer handlers to fix max-lines lint rule

Move handleClick, handleDoubleClick, and handleWheelCapture into a
dedicated useFileExplorerHandlers hook to bring FileExplorer.tsx under
the 400-line limit.
2026-04-07 22:09:50 -07:00
Jinwoo HongandClaude Opus 4.6 f6ec69c969 feat: add WSL support for repos on WSL filesystems (#375)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 21:02:36 -04:00
Jinwoo Hong beb62ff580 feat: add PR comments to checks panel (#376) 2026-04-07 17:58:40 -07:00
Brennan BensonandClaude Opus 4.6 755690b5a2 fix: keep-alive editor panes to preserve scroll position (#373)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 17:28:22 -07:00
Jinwoo HongandClaude Opus 4.6 dd4e7b8497 feat: enhance Add Repo with modal flow and clone from URL (#372)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 13:31:18 -07:00
NeilandClaude Opus 4.6 165502121b feat: polish markdown preview and rich editor (#369)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 13:03:43 -07:00
Matheus NogueiraandClaude Opus 4.6 9e431e6ca7 feat: unified tabs system with titlebar integration (#371)
* feat: add unified TabsSlice and tab bar UX improvements

Introduce content-agnostic Tab/TabGroup model (Step 1 of unified tabs
migration). TabsSlice coexists alongside legacy TerminalSlice/EditorSlice
and provides unified CRUD, neighbor selection, preview replacement, pin
support, and session hydration from both legacy and unified formats.

Also fixes several tab bar UX issues:
- Tab bar always visible (even with 1 tab)
- New terminal tabs appear at end of tab bar, not index 0
- Closing last terminal with editor files open switches to editor view
  instead of deactivating the worktree
- New terminal tabs receive focus immediately

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: extract tabs-helpers, tabs-hydration, and reconcile-order modules

Split tabs.ts (503 countable lines) and useTerminalTabs.ts (325 countable
lines) to stay under the max-lines lint limit without eslint-disable:

- tabs-helpers.ts: pure lookup/update functions + generic patchTab helper
- tabs-hydration.ts: session hydration for unified and legacy formats
- reconcile-order.ts: shared tab order reconciliation (was duplicated in
  TabBar.tsx, useTerminalTabs unifiedTabs memo, handleNewTab, and
  handleCloseTabsToRight)

Includes tests for all three extracted modules (29 new tests).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: move tab bar into the titlebar row

Render the TabBar inside the titlebar via a React portal, sharing the
same row as the "Orca" title. The left section of the titlebar matches
the sidebar width so tabs start exactly where the sidebar ends.

This saves ~36px of vertical space by eliminating the separate tab bar
row. Empty space after tabs remains window-draggable; individual tabs
and the "+" button opt out with -webkit-app-region: no-drag.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: prevent middle-click paste when closing tabs

Close tabs on auxclick instead of mousedown for middle-click. Closing on
mousedown removed the tab element before mouseup fired, causing the
mouseup to fall through to the terminal canvas and trigger an X11
primary selection paste on Linux.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: extract terminal tab actions to fix lint errors

Memoize `tabs` and `worktreeFiles` to fix useMemo unstable dependency
warnings. Extract action callbacks (close, activate, create, etc.) into
terminal-tab-actions.ts to bring useTerminalTabs.ts under the 300-line
max-lines limit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 16:33:25 -03:00
Neil 09c5e76694 fix: exit expanded mode before splitting pane (#368) 2026-04-07 01:00:19 -07:00
Neil 0f65b11962 fix: terminal content not resizing on pane expand (#367) 2026-04-07 00:48:29 -07:00
Jinjing d7633c9875 move GitHub star button to bottom of landing page and auto-hide (#366)
Reposition the star button below the shortcuts section at the page
bottom. Hide it entirely once the user has both added a repo and
starred the project, so it doesn't distract returning users.
2026-04-07 00:21:56 -07:00
Jinjing c652990bb5 refactor: replace allowPrerelease workaround with generic feed URL (#365)
* fix(renderer): fix unescaped quote lint error in GeneralPane

* refactor: replace allowPrerelease workaround with generic feed URL

Use electron-updater's generic provider pointed at GitHub's
/releases/latest/download/ so the manifest always comes from the latest
stable release. This eliminates the client-side RC filtering, the GitHub
releases API fallback, and the manual-download path entirely.
2026-04-07 00:16:19 -07:00
Neil 4de80194c7 fix: resolve posix_spawnp failure on macOS Intel (#364) 2026-04-07 00:13:51 -07:00
NeilandClaude Opus 4.6 c0b6687e13 feat: add native desktop notifications (#180)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:24:02 -07:00
NeilandClaude Opus 4.6 af43e3daaa fix: clean up settings page header and scrollbars (#362)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:09:39 -07:00
NeilandClaude Opus 4.6 450b2a2842 perf: eliminate useEffect anti-patterns causing extra re-renders (#361)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:02:23 -07:00
Jinwoo HongandClaude Opus 4.6 9b2b85c59d feat: add non-git folder support (#356)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:54:02 -07:00
NeilandClaude Opus 4.6 37ae8ce525 feat: add Star on GitHub button to landing page (#360)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:45:00 -07:00
Brennan BensonandClaude Opus 4.6 001846ccc3 feat: preserve scroll position per file in editor (#349)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:14:12 -07:00
Jinjing 499bde7b2e fix: correctly capture data-file path in dev environment (#357) 2026-04-06 21:49:15 -07:00
Jinjing e5f10f8092 feat: preserve opened editor files across app restarts (#355)
Persist edit-mode files in the workspace session so they are restored
on restart. Diffs and conflict views are intentionally excluded as they
depend on transient git state.
2026-04-06 20:48:52 -07:00
Jinwoo HongandClaude Opus 4.6 2939caf476 fix: make persistence data file path lazy so dev mode uses orca-dev (#354)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 19:12:22 -07:00
Jinjing 36085a0b89 fix: exclude RC/prerelease versions from auto-updater (#350)
* fix: fall back to stable release when electron-updater picks an RC

When the latest GitHub release is an RC, electron-updater (with
allowPrerelease enabled) reports it as available and never considers
older stable releases. Previously the code simply rejected the RC and
sent not-available, silently hiding real stable updates.

Now the update-available handler calls findFallbackReleaseVersion()
when it detects a prerelease, which queries the GitHub releases API
(filtering out prereleases/drafts) to find the newest stable version
newer than what's running and offers it as a manual download.

* fix: persist check timestamp when RC fallback fetch fails

The .catch path in the update-available RC handler was missing
recordCompletedUpdateCheck(), which meant a failed GitHub API call
during fallback would not persist the check timestamp. On next app
launch the interval check could fire immediately instead of waiting
the full 36 hours.
2026-04-06 18:02:41 -07:00
Jinjing 5d6fb3923f feat: add file duplicate to file explorer context menu (#351)
* feat: add file duplicate option to file explorer context menu

* fix: address review findings
2026-04-06 17:39:31 -07:00
Matheus Nogueira 132e033292 Scope zoom shortcuts to editor content outside terminal tabs (#348) 2026-04-06 21:07:08 -03:00
Matheus Nogueira e42ae3f0f0 Fix terminal zoom shortcuts on Linux layouts (#347) 2026-04-06 20:42:55 -03:00
Brennan BensonandClaude Opus 4.6 697c963986 fix: dynamic estimateSize for worktree cards to prevent overlap (#346)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 16:35:48 -07:00
Jinjing 85dd635598 fix: address review findings (#345) 2026-04-06 15:33:59 -07:00
Jinwoo HongandClaude Opus 4.6 d4a2d25942 feat: add Cmd/Ctrl+L to toggle right sidebar visibility (#343)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 14:42:48 -07:00
Jinjing 6c423f15f0 feat: improve terminal font compatibility across platforms (#342)
* feat: improve terminal compatibility with default fonts across platforms

Add cross-platform monospace font fallback chain (SF Mono, Menlo, Monaco,
Cascadia Mono, Consolas, DejaVu Sans Mono, Liberation Mono) so the terminal
renders correctly on macOS, Windows, and Linux out of the box.

- Platform-aware default font in settings (SF Mono / Cascadia Mono / DejaVu)
- buildFontFamily deduplicates user font against full fallback chain
- Error handling for pty spawn failures with user-facing error banner
- Zero-dimension diagnostic when terminal container has no layout
- WebGL context loss / unavailability logging for debugging

* feat: improve terminal font fallback and pty error handling

- Add cross-platform terminal font fallbacks
- Surface pty spawn errors to terminal UI
- Fix max-lines eslint error in TerminalPane
- Fix curly braces eslint error in constants.ts
2026-04-06 14:33:33 -07:00
NeilandClaude Opus 4.6 d50807f7c3 fix: cmd+w closes active terminal pane, not entire tab (#335)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 13:33:48 -07:00
Jinjing 5545c28d18 fix: show error toast when quitAndInstall fails (#333)
Without this, a failed restart is a silent no-op. Now all three
call sites (settings pane, auto-restart, and "Restart Now" toast
action) surface the failure to the user and reset autoRestartAfterDownload
to avoid a stuck state.
2026-04-06 12:41:18 -07:00
Jinjing 51f26d1ca8 feat: extract headless autosave controller and bypass beforeunload during updater restart (#330)
Move editor autosave/save-queue logic out of EditorPanel into a
standalone controller that survives tab switches without keeping
the full editor UI mounted. Add updater lifecycle events so
beforeunload guards step aside during quitAndInstall, preventing
stale dirty-file prompts from blocking app restarts.
2026-04-06 11:59:08 -07:00
Jinjing 8c130591c3 fix: address review findings (#329) 2026-04-06 11:56:12 -07:00
Jinwoo HongandClaude Opus 4.6 3211c1e15d feat: restore active terminals on app restart (#328)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 11:32:20 -07:00
Jinwoo HongandClaude Opus 4.6 1e95418122 Fix Orca CLI runtime bootstrap recovery (#324)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 11:32:16 -07:00
Jinjing 541dfebc70 feat: save dirty editor files before auto-update quitAndInstall (#327)
* feat: save dirty editor files before auto-update quitAndInstall

Dispatch a custom event from the preload quitAndInstall to flush unsaved
editor buffers before Electron's quitAndInstall bypasses the normal close
sequence. The EditorPanel claims the event, saves all dirty files via the
existing queueSave path, and resolves/rejects so the updater knows whether
it is safe to proceed.

* fix: address review findings

- Wrap save-before-update in try/catch so a save failure never silently
  prevents the update from installing
- Move detail.claim() inside try/catch to prevent promise hang on
  unexpected errors
- Add duplicate dirty tab detection to reject when the same file is
  dirty in multiple tabs (prevents silent write races)
2026-04-06 09:17:42 -07:00
Jinjing f4ce41951e fix: address review findings (#323)
- Cap module-scoped caches (combinedDiffViewStateCache, combinedDiffScrollTopCache)
  at 20 entries with LRU eviction to prevent unbounded memory growth
- Promote generationRef to useState for use in React key prop so key changes
  are properly tracked by React's rendering cycle
2026-04-06 00:01:02 -07:00
NeilandClaude Opus 4.6 93de627208 fix: show error toast when adding non-git folder (#321)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 23:36:30 -07:00
Jingyue Wu 77f6021aff fix: titlebar alignment in fullscreen and on windows (#277) 2026-04-05 23:34:12 -07:00
NeilandClaude Opus 4.6 7c7ec172e0 feat: check git and gh availability on landing page (#322)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 23:34:00 -07:00
Jinwoo HongandClaude Opus 4.6 4dec80386a feat: search by comment, PR number/title, and issue number/title (#320)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 22:48:46 -07:00
Jinjing b82a8a62dc fix: improve delete worktree failure toast messages (#319)
- Show user-friendly guidance instead of raw git stderr when worktree
  deletion fails due to changed files, directing users to Force Delete.
- Extract toast message logic to reusable getDeleteWorktreeToastCopy
  function with comprehensive test coverage.
2026-04-05 17:59:09 -07:00
Ruan Gustavo a4ac7db972 fix: remove macOS traffic light padding on Windows (#317) 2026-04-05 17:49:29 -07:00