- Add PR checks panel to right sidebar
- Stream checks from GitHub API
- Update PR title real-time with loading state
- Add error logging and dependency fixes
- Fix linting issues (curly braces, exhaustive deps)
* feat: make keyboard shortcuts work with Ctrl on Linux/Windows
All Cmd+X shortcuts now also respond to Ctrl+X on non-Mac platforms.
Tooltip hints show platform-appropriate modifier symbols.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: add cross-platform guidelines to AGENTS.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Adds clearWorkingIndicators to strip spinner/prefix/keyword markers from
terminal titles after 3s of data flow without a title update, preventing
the UI from showing a stuck "working" status after an agent exits.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Extract main process into focused modules (startup, window, menu, IPC
registration) and decompose the monolithic Terminal component into
TerminalShell, useTerminalTabs, useTerminalShortcuts, and
useTerminalSaveDialog hooks.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The cursor style sequence (e.g. \e[5 q) was being sent to the shell via
sendInput(), causing literal "[5 q" text to appear in the terminal. The
shell doesn't interpret DECSCUSR sequences. Cursor style is already
correctly applied via xterm.js terminal options.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Revert low-contrast text styles from PR #85 (worktree name, branch, repo
badge, group headers) back to full contrast. Force repo names to lowercase.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Redesign worktree cards with cleaner layout, inline PR state/CI badges,
and refined group headers. Hide redundant repo badge when grouped by repo.
Add uncaughtException handler to prevent crash on IPC pipe errors during quit.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
When a worktree is activated, update its sortOrder timestamp so that
the "recent" sort reflects the actual last-accessed time.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add copy path/relative path to line in editor tab context menu
Tracks cursor line position from Monaco editor and adds context menu
options to copy file path with line number anchor (e.g. path#L59).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: add copy path to line in Monaco editor context menu
Adds "Copy Path to Line" and "Copy Relative Path to Line" as Monaco
editor context menu actions so they appear on right-click anywhere in
the editor. Also handles right-click on line number gutter to show
the context menu there too.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: use Radix context menu for line number gutter right-click
Replaces Monaco's built-in context menu with a Radix DropdownMenu for
the line number gutter, matching the VSCode approach of intercepting
the gutter right-click and showing a custom menu. Shows the clicked
line number in the menu items.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: simplify gutter context menu to just path-to-line options
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
When macOS re-activates the app after all windows are closed, `createWindow()` is called
again but IPC handlers from the previous window were still registered, causing duplicate
handler errors and crashes. This fix removes stale handlers before re-registering them
in pty, repos, and worktrees modules, and ensures repo/worktree handlers + auto-updater
are also set up on activate. Includes minor lint/style cleanups across the codebase.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Show CI check status icons (success/failure/pending) next to the branch
name on worktree cards. Return 'neutral' instead of 'pending' when no
CI checks exist to avoid showing a misleading spinner. Fix lint errors
in client.ts (curly braces, array-type).
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Add terminal link detection that recognizes file paths with optional
line:column suffixes and opens them in the editor or externally
- Split shell IPC into separate openUrl, openFilePath, openFileUri, and
pathExists handlers with proper URL/path validation
- Register xterm link providers per pane with path existence caching
- Support OSC 8 hyperlinks for http(s) and file: protocols
- Add editor-reveal-location custom event for jumping to line/column
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Merge the separate "Link Issue" and "Edit Comment" modals into a single
"Edit Worktree Details" dialog. Add double-click on worktree cards to
open the unified editor. Context menu items now focus the relevant field.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The did-finish-load handler was killing all PTY processes, including ones
spawned during the current page load. This caused blank terminals when a
race between renderer reload and PTY creation occurred. Now each PTY is
tagged with a load generation counter, and only PTYs from previous
generations are killed on reload.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
When all PTYs are dead after shutdown, bump a generation counter on
terminal tabs so React remounts TerminalPane components with fresh
PTY connections instead of showing stale terminals.
Also converts interfaces to type aliases in types.ts to satisfy linter.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Return empty fragment instead of null to satisfy JSX.Element return type
- Remove unused paneTransportsRef parameter and PtyTransport import
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Remove unused `paneTransportsRef` from context menu hook and fix
`EditorPanel` return type to allow `null`.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Use Vite worker imports to bundle Monaco web workers instead of relying on CDN,
and correct language IDs for .tsx/.jsx files to typescriptreact/javascriptreact.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The previous approach used app.relaunch() + app.quit() to avoid a crash
dialog, but this created a race condition where the app relaunches the
old version before electron-updater's installer replaces the .app bundle.
Instead, use autoUpdater.quitAndInstall() on all platforms with proper
cleanup beforehand (kill PTY processes, flush store, destroy windows) to
ensure a clean exit without crash dialogs.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add break-all to worktree name and use proper flex layout for error
messages to prevent long text from overflowing the dialog.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Split the monolithic TerminalPane component into focused custom hooks
(lifecycle, context menu, global effects, dark mode detection) and break
the large terminal-themes-data file into organized modules.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Previously, creating a worktree would auto-filter the sidebar to the
current repo, which could be confusing. Now clears the filter so all
worktrees remain visible, relying on revealWorktreeInSidebar to scroll
to the newly created worktree.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
With allowPrerelease enabled, electron-updater may consider the current
version as an "available" update, causing the update banner to reappear
in a loop after restarting. Guard both update-available and
update-downloaded handlers to skip when the reported version matches the
running app version. Also preserve the userInitiated flag through the
same-version guard so user-initiated checks still show the "latest
version" toast.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Move activeWorktreeId/activeTabId clearing out of shutdownWorktreeTerminals
(a terminal-focused store action) and into the UI component that triggers
shutdown. The delete flow already handles this independently in worktrees.ts.
Also fix pre-existing lint issues and extract terminal helpers to separate file.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>