Commit Graph
628 Commits
Author SHA1 Message Date
Shamoun f8ffc1fb35 fix: pass SSH connectionId for fs:listFiles (#790) 2026-04-18 21:49:41 -07:00
Neil c86721f434 fix(new-workspace): clean up backgrounds, contrast, and loading UX (#816)
- fix(new-workspace): clean up backgrounds, contrast, and loading UX

Address feedback on the NewWorkspacePage: drop the LightRays backdrop, repo
badge-color radial gradient, and custom dark bg override so the page uses
standard bg-background. Switch card surfaces from translucent bg-background/X
to bg-muted/50 so cards read as distinct from the page in both themes. Give
the unselected source toggles a visible bg+border. Size the task list card to
its content (capped at viewport) instead of always stretching. Add a 3-row
shimmer skeleton while the initial fetch is in flight (only when nothing is
cached).
2026-04-18 21:34:25 -07:00
82fe59fc23 fix: correct IME candidate window position when typing Japanese in terminal (#798)
* fix: correct IME candidate window position when typing Japanese in terminal

Two fixes for the IME candidate window appearing offset from the cursor:

1. CSS: Add \left: 0\ to \.xterm .xterm-helpers\ in terminal.css.
   xterm.css sets position:absolute;top:0 but omits left, leaving
   left:auto. In Electron's Blink this can resolve to a non-zero value
   and shift the IME window away from the cursor.

2. JS: Add a capture-phase compositionstart listener in openTerminal().
   xterm.js repositions the textarea on compositionupdate but not on
   compositionstart. The OS reads the textarea's screen rect at
   compositionstart to place the IME candidate window, so the window
   can appear at a stale position. The listener force-syncs the textarea
   to the exact cursor pixel position before the OS opens the window.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: remove compositionstart listener on pane disposal to prevent memory leak

Store the handler reference in ManagedPaneInternal.compositionHandler so
disposePane() can call removeEventListener with the exact same function
reference, preventing the closure from holding the terminal alive after
the pane is closed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor(terminal): derive IME cell dimensions from public xterm API

Computes cell width/height from the .xterm-screen element's bounding
rect and uses terminal.textarea (public) instead of reaching into
terminal._core. Avoids the `any`-cast access to xterm internals so
future xterm.js upgrades don't silently regress the IME position fix.

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-04-18 21:24:37 -07:00
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
keiju-fujiwaraandNeil 5d985a6563 fix: suppress Enter submit during IME composition in workflow creation popup (#804)
* fix: guard Enter submit against IME composition in workflow creation popup

Pressing Enter during Japanese IME conversion was triggering workflow
submission instead of only confirming the candidate. Extract
shouldSuppressEnterSubmit() and check event.isComposing before submit
in NewWorkspaceComposerModal, NewWorkspacePage, and the task search
handler. Fixes #742.

* fix: use nativeEvent.isComposing for React SyntheticEvent in task search handler

* refactor: move new-workspace-enter-guard to src/renderer/src/lib

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-04-18 21:17:24 -07:00
Jinjing 159081c2e6 style(rich-md): show pointer cursor on links only while modifier held (#814)
Rich markdown links open on Cmd/Ctrl-click (plain click must place the
caret inside contenteditable). Toggle a root class on keydown/keyup of
the platform modifier so the pointer cursor appears only while the
modifier is held, matching VS Code's link affordance.
2026-04-18 21:13:00 -07:00
Jinwoo Hong 58b43e0d17 fix(github): Needs My Review tab returns no results (#815) 2026-04-18 21:12:45 -07:00
Jinjing d45755274f Squashed commits (#813)
- style: update markdown preview cursor styles for link interactions

- feat(editor): open in-worktree .md links as preview edit tabs

Cmd/Ctrl-click on a markdown link now routes through a shared classifier
and dispatcher. Links resolving to .md files inside the active worktree
open as preview tabs; external URLs and non-markdown files delegate to
the OS handler. Cmd/Ctrl+Shift-click is preserved as the OS escape hatch
with existence precheck and a toast for dangling targets.

Supports #L10 / #L10C5 and trailing :line:col anchors by flipping the
target to source view before reveal. Preview replacement is scoped to
the active tab group, and evicted previews are pushed onto the
recently-closed stack so Cmd/Ctrl+Shift+T restores them.
2026-04-18 20:51:17 -07:00
Neil c409904453 fix(feedback): include app version + OS metadata in submissions (#812) 2026-04-18 20:20:37 -07:00
Jinwoo Hong 301ce7aea4 fix: resolve Radix Dialog accessibility warnings and duplicate React key (#810)
Add visually-hidden DialogTitle and DialogDescription to
NewWorkspaceComposerModal and ImageViewer to satisfy Radix UI's
accessibility requirements for screen readers.

Remove duplicate 'copilot' entry in AGENT_CATALOG that caused
React's "two children with the same key" warning.
2026-04-18 22:28:11 -04:00
Jinjing ffcc144a75 fix(source-control): do not reset defaultBaseRef on worktree switch (#811)
The defaultBaseRef resolver is repo-scoped, not worktree-scoped. Resetting
it to 'origin/main' on every worktree switch within the same repo clobbered
the correct value (e.g. 'origin/master'), causing persistent 'Branch compare
unavailable' errors.
2026-04-18 19:02:14 -07:00
Jinjing 756a7fa7b9 fix(quick-open): reset scroll and add padding so top result isn't clipped (#808)
The Cmd+P dialog's first result sometimes appeared flush against (or
behind) the input's bottom border. cmdk moves selection to the first
result on query change but never resets the list's scrollTop, and the
list had no padding buffer between the input border and the first item.

- reset scrollTop on query/visible change (mirrors WorktreeJumpPalette)
- add p-2 padding so the selection highlight never touches the border
2026-04-18 17:51:21 -07:00
Jinjing 828b1412d9 fix(sidebar): keep resize stable when dragging over PDF viewer (#807)
Chromium's native PDF <embed> captures pointer events internally, so
mouseup never reaches the window and the sidebar keeps following the
cursor. Mount a transparent full-viewport overlay during drag so events
propagate to the window listeners.
2026-04-18 17:50:44 -07:00
Jinwoo Hong 5ec70ed539 fix: gracefully handle EPERM during PTY overlay creation on Windows (#752) 2026-04-18 16:37:46 -07:00
Jinwoo Hong e8b8b5f96e fix(terminal): prevent WebGL context leak and atomic generation bump (#806) 2026-04-18 16:35:26 -07:00
Matt Van HornandJinwoo-H 3918e4cfcf fix(terminal-search): make Cmd+F match highlights high-contrast (#756)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-18 15:20:15 -07:00
Jinwoo Hong 669dbbe83f feat(browser): add profile picker for multi-profile cookie import (#805) 2026-04-18 14:59:39 -07:00
Neil 499854c136 fix(shutdown): clear layout ptyIdsByLeafId so shutdown doesn't zombie-remount (#797) 2026-04-18 11:08:22 -07: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
Jinjing 2688c0fee3 feat(editor): preserve Cmd+B for bold in markdown editor (#802)
* feat(editor): preserve Cmd+B for bold in markdown editor

Carve out bare Cmd/Ctrl+B from the main-process before-input-event
interceptor when the TipTap markdown editor is focused, so its bold
keymap can run instead of toggling the left sidebar. Focus state is
mirrored from renderer to main via a one-way IPC send, with default-deny
resets on crash/navigate/destroy and sender validation so only the main
window's webContents can mutate the flag.

* fix: add oxlint max-lines disable to createMainWindow.ts
2026-04-18 10:08:25 -07:00
Jinjing c2ed4fbd3b fix(terminal-host): avoid reattach to terminating session, force-kill on dispose (#801)
Reattaching to a session where kill() has been called but the subprocess hasn't
exited yet races the in-flight exit. Treat terminating sessions the same as
fully-exited ones in createOrAttach, and have Session.dispose() force-kill a
stuck subprocess and notify attached clients so we don't leak the process when
the killTimer is cleared mid-flight.
2026-04-18 09:24:27 -07:00
Neil 3a67eb0f9c support orca 2026-04-18 00:10:27 -07:00
Jinjing d2b270df88 Cmd+J: search both browser tabs and worktrees in a single merged list (#796)
* wip

* fix: don't truncate worktrees on empty-query open
2026-04-17 23:52:28 -07:00
Neil a4899dbbf1 feat(settings): center jumped-to sidebar sections and flash their border (#795) 2026-04-17 23:30:47 -07:00
Jinjing f2eb4f4866 fix(tab-group): make split-right/split-down move the source tab instead of duplicating (#794)
Split actions from the tab context menu used copyUnifiedTabToGroup for editors
and spawned a fresh browser tab, so splitting produced two copies of the same
file/URL rather than moving the active tab into the new pane. Delegate to
dropUnifiedTab to share the drag-to-split move path; keep the new-terminal
behavior for single-tab terminal groups since moving the only tab would
collapse the split.
2026-04-17 23:22:47 -07:00
Neil c20a44a9a4 fix(sidebar): make left sidebar expand/collapse instant (#793) 2026-04-17 23:17:45 -07:00
Neil 2499497f54 feat: restructure new-workspace flow and add Tasks sidebar nav (#792)
Split the "new workspace" and "tasks" entry points: the Plus button and Cmd/Ctrl+N
now open the lightweight composer modal, while the Tasks page is reached via a
dedicated Codex-style button above the Workspaces header in the sidebar.

- Add SidebarNav with a Tasks button (GH + Linear icons on the right)
- NewWorkspacePage becomes a pure tasks list (drops embedded composer card)
- Landing, AddRepoDialog, WorktreeList, SidebarHeader, App shortcut all switched
  to openModal('new-workspace-composer')
- Normalize SidebarHeader row height so it matches the Tasks button above
2026-04-17 23:08:47 -07:00
Neil 481bbeb985 fix(feedback): proxy submission through main process to bypass CORS (#791)
The packaged Mac build loads the renderer from file://, which makes a
cross-origin POST via renderer fetch() fail CORS preflight — causing
"Failed to submit feedback" in production while dev (http://localhost)
works. Route submission through a new feedback:submit IPC handler that
uses Electron's net.fetch in the main process (no CORS), mirroring the
pattern already used by updater-changelog/updater-nudge.
2026-04-17 22:47:44 -07:00
Jinwoo Hong 6c6416a949 feat(codex-accounts): shared runtime home for account switching (#768) 2026-04-17 21:51:06 -07:00
Jinwoo Hong be7ee2fc38 fix: update tests for Safari/Firefox browser detection and ZDOTDIR (#788) 2026-04-17 21:31:39 -07:00
Brennan Benson 68e3a00ddf fix: reflect external file changes in editor tabs (#735) 2026-04-17 20:30:44 -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
Neil 8d3494fe07 feat(composer): support drag-and-drop files and folders onto the composer (#787)
Files dropped onto the new-workspace composer (modal or full page) are
appended as attachment chips; folders are inserted inline at the textarea
caret with shell-style quoting so users can reference working directories
from the OS file browser without leaving the prompt.
2026-04-17 19:14:51 -07:00
Honglei LiuandClaude Opus 4.7 5b71303bbd feat(terminal): add Nerd Fonts to default font fallback chain (#783)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 18:49:43 -07:00
Neil 3d40d4a3db Use overlay sheet for GitHub item drawer on new-workspace page (#785) 2026-04-17 18:20:54 -07:00
Neil 818210f3e2 fix(ui): invert GitHub Copilot icon in dark mode (#786) 2026-04-17 18:20:38 -07:00
Brennan Benson 9826d94485 fix terminal split remounts when daemon is disabled (#782) 2026-04-17 17:41:45 -07:00
Brennan Benson 2d755ba386 fix: free WebGL contexts for hidden worktrees to prevent terminal dying (#777) 2026-04-17 17:15:27 -07:00
Neil 451b6e652f fix(terminal): stop re-running composer prompt on user-initiated splits (#778) 2026-04-17 16:48:54 -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 fbbebe98eb perf: make worktree creation click snappy (#776) 2026-04-17 16:02:30 -07:00
Neil 1111b72b15 fix(settings): track scroll indicator at viewport midpoint (#775) 2026-04-17 16:01:25 -07:00
Neil aa75adedf7 feat(settings): gate persistent terminal daemon behind experimental toggle (#774) 2026-04-17 16:00:16 -07:00
Neil 1daf9d1b94 fix(composer): tighten worktree composer card typography and sizing (#773) 2026-04-17 15:32:04 -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 7c6d408f16 fix: resolve posix_spawnp failure in daemon's node-pty spawn (#762) 2026-04-17 10:37:56 -07:00
Jinjing c655c13629 feat(settings): give browser its own settings pane (#764)
- Move browser-related settings out of the in-browser gear dialog and
  out of General into a dedicated Browser pane in Settings, and route
  the browser gear button to open it.
2026-04-17 10:35:52 -07:00
Jinjing 949f3e396a fix: remove smooth scroll animation on settings section navigation (#765) 2026-04-17 10:27:52 -07:00
Jinjing 6767157fe0 feat: add double-click-to-rename for editor tabs and file explorer (#760)
- fix: prevent Escape-cancelled rename from committing via trailing blur

Users can now double-click a filename in editor tabs or the file explorer to rename it inline. Both flows share a common renameFileOnDisk() function that handles:
- Quiescing in-flight autosaves before rename to prevent recreating old paths
- Remapping all open editor tabs to the renamed file/directory
- Undo/redo support via the file explorer undo stack

The shared Escape-cancel logic prevents a race condition where blur could fire and commit the rename after user cancelled with Escape.
2026-04-17 10:16:38 -07:00