Commit graph

993 commits

Author SHA1 Message Date
Jinjing
18bc9013d9
fix: remove --delete-branch from mergePR to prevent worktree error (#143) 2026-03-27 12:57:22 -07:00
Jinjing
a728982a1d
fix: Add --yes flag to gh pr merge command (#142)
* fix: squash and merge issue

- fix: squash and merge issue

* fix: use GH_PROMPT_DISABLED instead of invalid --yes flag
2026-03-27 12:49:17 -07:00
Jinjing
59c5f29e25
fix: force-refresh PR status and checks when manually refreshing (#141)
The refresh button was serving cached data instead of fetching fresh
PR status and checks. Added force option to bypass cache TTL on
manual refresh, and ensured checks are fetched for the correct
(refreshed) PR number.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 12:35:24 -07:00
Jinjing
cff5b034e4
feat: add revert/discard support for untracked files in source control (#140)
- Enhance discardChanges to handle untracked files by deleting them instead of git checkout
- Add path traversal protection to prevent discarding files outside the worktree
- Extract source control action logic into getSourceControlActions helper
- Show revert button for untracked files with confirmation dialog
- Add tests for both backend and frontend logic

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 12:35:19 -07:00
Jinwoo Hong
00332fbd3e 1.0.53 2026-03-27 15:15:19 -04:00
Jinwoo Hong
3e65d7e5aa
fix: Windows terminal blank/unresponsive (#139)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 15:11:35 -04:00
Jinjing
30c8bf89c6
feat: auto-fetch PR on worktree change and refresh in empty state (#138)
* feat: auto-fetch PR data on worktree change and add refresh to empty state

Add useEffect to fetch PR data when the active worktree/branch changes,
and add a refresh button with loading spinner to the "no PR found" empty
state. Extract check helpers to separate file to stay within line limit.

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

* refactor: replace custom PullRequestIcon SVG with lucide GitPullRequest

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 10:43:58 -07:00
Jinjing
056c5e0781 1.0.52 2026-03-27 09:59:26 -07:00
Jinjing
dd4eb42f5d
Improve smart worktree sorting (#137) 2026-03-27 09:47:17 -07:00
Jinjing
97ef6d5e20
feat: add merge PR functionality across stack (#135)
- feat: add merge PR functionality across stack
2026-03-26 23:45:36 -07:00
Jinjing
c342676074 1.0.51 2026-03-26 23:33:59 -07:00
Jinjing
4a11ab2dc9
fix: refactor code and address review findings (#134)
- chore: remove auto-review context file
- WIP: Changes before auto-review fixes
2026-03-26 23:31:53 -07:00
Jinjing
9e2d838b74
fix(updater): show download progress toast and enable toast feedback for settings check (#133)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 17:22:03 -07:00
Jinjing
b891b07189
feat: reduce GitHub API usage with gh api --cache for conditional requests (#132)
- Use gh api --cache for issues, issue lists, and PR checks endpoints so 304 Not Modified responses don't count against the rate limit
- Pass branch to getPRChecks to enable the check-runs REST endpoint with caching
- Extract mapping functions into separate mappers.ts to keep client.ts within 300-line limit
- Extract mapIssueInfo() helper to deduplicate issue mapping logic
- Remove dead re-exports from client.ts
- Fix reference instability in ChecksPanel poll dependency array

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 17:15:49 -07:00
Jinjing
a5167c5a03
Revert "fix(ui): unify split download button" (#131) 2026-03-26 16:42:41 -07:00
Jinjing
e70706c1b0
fix(ui): unify split download button into single cohesive element (#130)
Merge the separate download action button and dismiss button into one
unified button element. The dismiss icon now appears on hover only,
eliminating the visual split.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 16:31:53 -07:00
Matheus Nogueira
1a10fbfbe6 1.0.50 2026-03-26 20:21:19 -03:00
Matheus Nogueira
390c3f5ceb
fix(terminal): support Ctrl/Cmd+Shift+C copy shortcut (#129) 2026-03-26 20:20:42 -03:00
Jinjing
0d58a0bc45
feat: reduce GitHub API usage for checks and improve cache invalidation (#127)
- Fix ChecksPanel memory leak: add cancelled flag to prevent schedulePoll after unmount
- Include status in check signature for proper backoff reset on state transitions
- ChecksPanel lint: use ternary instead of if/else
- Don't cache empty string on gh CLI failure so login detection retries
- Clear checksCache on refreshAllGitHub to ensure fresh data
- Remove dead fetchIssueList code and supporting infrastructure
2026-03-26 16:14:05 -07:00
Jinjing
d7895d575d
style: remove redundant PR state label from worktree card header (#128)
The PR state (merged/open/closed/draft) is already accessible via tooltip,
so the inline text label in the header is unnecessary visual noise.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 16:06:59 -07:00
Jinjing
30c01f4c29 1.0.49 2026-03-26 15:56:30 -07:00
Jinwoo Hong
796296ee25
feat: VS Code-style preview tabs for editor (#126)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:53:46 -07:00
Neil
605aba900b 1.0.48 2026-03-26 14:48:02 -07:00
Neil
f5f125e7db fix: prevent macOS auto-update from appearing to fail silently
Two issues caused "Restart to Update" to not apply the update on macOS:

1. Premature window destruction: quitAndInstall() destroyed all windows
   before calling autoUpdater.quitAndInstall(). On macOS, MacUpdater
   delegates to Squirrel.Mac which may not be ready yet — it registers
   a listener and returns. With zero windows, the dock "activate" handler
   would re-open the old version, making it appear the update failed.
   Fix: remove close listeners (so windows don't block quit) but don't
   destroy them. Let Squirrel.Mac handle the actual quit.

2. Premature "ready to install" status: electron-updater fires its
   'update-downloaded' event after downloading the ZIP from GitHub, but
   BEFORE Squirrel.Mac finishes downloading from the localhost proxy.
   The UI showed "ready to install" when the update wasn't actually
   installable yet. Fix: on macOS, defer the 'downloaded' status until
   Electron's native autoUpdater confirms Squirrel has the update.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:47:47 -07:00
Neil
bad6ad51a9 1.0.47 2026-03-26 14:21:15 -07:00
Neil
464287db31 fix: include arch in DMG artifact name to prevent x64/arm64 collision
Both x64 and arm64 DMGs were named identically (orca-{version}.dmg),
causing one to overwrite the other during release upload.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 14:21:03 -07:00
Neil
0100a98bfc 1.0.46 2026-03-26 13:05:01 -07:00
Jinwoo Hong
4d4d1ad2a6
fix: preserve 'show active only' filter when creating a worktree (#117)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 13:04:41 -07:00
Neil
c3d5b62644 1.0.45 2026-03-26 12:53:32 -07:00
Neil
38c5b6b970
fix: stabilize active worktree order in 'recent' sort (#116)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 12:51:05 -07:00
Jinjing
406f95b072
style: adjust worktree card comment styling and status indicator padding (#115)
Remove italic from comment text and tweak status indicator top padding from 3px to 2px.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 08:21:39 -07:00
Jinjing
149acf26bb
fix: address review findings in updater flow (#114)
- Add console.error logging to startup update check catch block
- Add state guard to downloadUpdate() to prevent calls outside 'available' state
- Track and dismiss 'available' toast when download starts or completes
- Include version number in downloading status text

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 07:35:52 -07:00
Neil
6650289dcb
Update README.md 2026-03-26 01:48:34 -07:00
Neil
8b8ef58245
Revise README heading and add link
Updated heading structure and added link formatting.
2026-03-26 01:48:01 -07:00
Neil
e0c90f0c06
Update project title link in README 2026-03-26 01:47:22 -07:00
Neil
954678011a
Fix Markdown link formatting in README 2026-03-26 01:46:22 -07:00
Neil
4a3e1e2b1f
Update README.md 2026-03-26 01:46:00 -07:00
Jinjing
00f82f9004 1.0.44 2026-03-26 00:28:52 -07:00
Jinjing
d127b2cfb3
feat: polish UI with softer borders, smaller labels, and PR state colors (#113)
Soften border opacity across UI components, move label default to text-xs,
simplify worktree group tones, and color PR icons by state.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 00:20:58 -07:00
Neil
27b29a0f8d
fix: make release publish atomic to prevent update 404s (#112)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-26 00:02:31 -07:00
Neil
c04275a5f2 1.0.43 2026-03-25 23:45:50 -07:00
Neil
f473e3f53e
fix: exclude xterm helper textarea from editable target check (#111)
PR #103 added a blanket isEditableTarget() guard that inadvertently
matched xterm.js's internal <textarea class="xterm-helper-textarea">,
blocking Cmd+D (split pane), Shift+Enter (newline), and all other
terminal shortcuts whenever the terminal was focused.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 23:44:30 -07:00
Jinjing
8adecbecce
feat: replace monospace body font with Geist Sans (#110)
Switch the app-wide font from SF Mono/monospace to Geist Sans for a
more polished, modern UI. Bundle the variable woff2 font in assets for
cross-platform support. Remove font-mono from sidebar and settings
components while keeping monospace in terminal/editor contexts.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 23:16:22 -07:00
Jinjing
902e2271b9
fix: handle orphaned worktree deletion with disk cleanup (#109)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 23:14:48 -07:00
Jinjing
69978c93f5
test: expand test coverage and extract worktree logic into testable module (#108)
Add comprehensive tests for worktree parsing, GitHub check status derivation,
hooks YAML parsing, persistence store, layout serialization, store cascades,
and terminal helpers. Extract pure functions from worktrees.ts into
worktree-logic.ts for better testability.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 22:34:20 -07:00
Neil
951ab72d7b 1.0.42 2026-03-25 22:27:15 -07:00
Neil
3d4ed411c5
feat: editable diff views for unstaged changes (#107)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 22:25:36 -07:00
Neil
0bea9aa4ff
Clickable Claude Code #PR (#106) 2026-03-25 22:24:19 -07:00
Neil
0785dd7b7b
fix: fetch latest remote before worktree creation & improve settings spacing (#105)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 22:16:11 -07:00
Jinjing
4c0eee235b
fix: extract path-security helpers, add tests, and improve type safety (#102)
* fix: extract path-security helpers and refactor IPC modules

- Extracted path-security helpers from filesystem.ts into filesystem-auth.ts to fix max-lines lint error (402 -> 293 lines)
- Extracted duplicated ENOENT detection into isENOENT() helper to eliminate code duplication
- Fixed missing curly braces on single-line if-return in isDescendantOrEqual (lint violation)
- Replaced any with unknown in test files to satisfy lint rules
- All tests passing (29/29)
- Lint clean (0 errors, 0 warnings)

* fix: bundle preload deps for sandbox mode and fix editor test types

The sandbox: true change in createMainWindow broke the app because
electron-vite was externalizing @electron-toolkit/preload, producing
a require() call that fails in sandboxed preload scripts. Exclude it
from externalization so it gets bundled inline.

Also fix type errors in editor.test.ts from the partial store setup.

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 09:59:19 -07:00