Commit Graph
3741 Commits
Author SHA1 Message Date
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
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 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
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
Neil 50e2376df8 fix: autofocus composer prompt and make "Use" open composer directly (#758) 2026-04-17 00:56:59 -07:00
Jinjing 6bf6a4bda1 fix: remove max-width cap on right sidebar drag resize (#727) (#757)
The right sidebar drag was hard-capped at 500px, so long file names
(e.g. construction drawing sheets, multi-part document names) always
truncated with no way to reveal them.

The cap is now window-relative — users can drag the sidebar up to
(window width − 320px reserve) so the left sidebar and editor can
still breathe. Persistence clamp split so the right sidebar keeps a
loose 4000px safety net for corrupted values, while the left sidebar
stays at 500px.
2026-04-17 00:38:47 -07:00
Jinjing eced42167f fix: show pointer cursor when hovering titlebar agent badge (#754)
The badge's inner dot and count spans inherited the titlebar's
-webkit-app-region: drag, which overrode the button's cursor: pointer.
Disable pointer events on the children so hover/click hit-test the
button itself (which opts out of the drag region).
2026-04-17 00:09:03 -07:00
Neil ee69e110fc Compser template (#753) 2026-04-16 23:55:37 -07:00
Jinjing fcbdd95b43 fix: auto-focus rich markdown editor on mount (#750)
* fix: auto-focus rich markdown editor on mount

Match MonacoEditor's behavior so opening a new markdown file (Cmd+Shift+N)
or switching to a rich-markdown tab lands the cursor in the editor. Guards
against focus theft from modals/dialogs and passes `scrollIntoView: false`
so the focus call doesn't race with useEditorScrollRestore's RAF retry loop.

* fix: use 'start' position to avoid AllSelection on empty editor

Passing null to commands.focus() keeps the editor's current selection,
which for a fresh empty document is an AllSelection — rendered as a
visible 0-width highlight inside the placeholder instead of a normal
caret. 'start' resolves to a proper TextSelection at doc start.

Also update review-and-submit skill to push before gh pr create.
2026-04-16 23:30:14 -07:00
Jinjing d1a3324e7e fix: make Cmd+J worktree jump scroll instant (#751)
Remove `scroll-smooth` from the virtualized sidebar viewport so palette
reveals land immediately instead of animating the full cross-list
distance at the browser's default smooth-scroll speed.

Single-card stepping (Cmd+Shift+↑/↓) no longer glides either — the
brevity of the movement makes instant feel snappier, and it avoids
the state-machine risk of toggling `scroll-behavior` inline when
tanstack virtual can also issue follow-up scroll corrections after
dynamic item measurement.
2026-04-16 23:25:17 -07:00
Neil 6e1cb1c6cf fix: boot to landing before shutting down active worktree (#749) 2026-04-16 22:56:01 -07:00
Jinwoo Hong fd4f986c59 feat: terminal persistence via out-of-process daemon (#729) 2026-04-17 01:42:41 -04:00
Jinwoo Hong 39832c7801 feat: Ghostty-style macOS Option key mode setting (#748)
* feat: add Ghostty-style macOS Option key mode setting

Disable xterm's macOptionIsMeta by default so non-US keyboard layouts
can compose characters (e.g. @ on German, € on French). Add a
user-facing "Option as Alt" setting with four modes — Both, Left,
Right, Off — mirroring Ghostty's macos-option-as-alt. Core readline
shortcuts (Option+B/F/D) are automatically compensated when Option is
in compose mode. The setting applies live to existing terminal panes.

* fix: track Option key location from modifier keydown, not character key

KeyboardEvent.location on a character key (e.g. Period) reports that
key's own position (always 0), not which modifier is held. Left/right
Option mode was broken because we read location from the character
event. Fix by recording the Option key's location from its own
keydown/keyup events and passing it as a separate parameter.
2026-04-17 01:37:22 -04:00
Neil 42e01f240c perf: speed up NewWorkspacePage first paint (#746)
* perf: speed up NewWorkspacePage first paint

- SWR cache + inflight dedup for gh work-items in store
- Prefetch on openNewWorkspacePage, sidebar Plus hover, Landing hover
- Seed list synchronously from cache to kill the double-fetch on mount
- Module-scoped detectAgents promise cache (one IPC per session)
- Consolidate useComposerState store subs via useShallow
- Hoist Intl.RelativeTimeFormat to module scope (was per row)
- LightRays: count 6->3, blur 44->20, drop mix-blend-screen,
  willChange compositor hint, prefers-reduced-motion bailout

* perf: drop redundant runIssueAutomation state + effect

Derived-state-via-effect anti-pattern: runIssueAutomation was just a
mirror of canOfferIssueAutomation toggled through a useEffect, so
shouldRunIssueAutomation was effectively canOfferIssueAutomation one
render late. Compute during render instead.

* fix: prefetch under the exact cache key the page will read

Sidebar and Landing were calling prefetchWorkItems with no query, warming
the cache at '::'' which NewWorkspacePage never reads. Pass the user's
default-preset query so hover-prefetch actually hits the key the page
looks up on mount.
2026-04-16 22:03:24 -07:00
Neil 2871294290 feat: nicer composer prompt scrollbar and inline '>' prefix (#747)
* feat: nicer composer prompt scrollbar and inline '>' prefix

Style the workspace composer prompt with a sleek scrollbar, and render the
'>' prefix as an inline-feeling overlay that scrolls with the text. Scrolling
is hoisted onto an outer wrapper so the '>' and typed text share a single
native scroll container — no cross-layer paint delay, no wobble.

* docs: fix stale comment describing abandoned translateY approach
2026-04-16 21:58:54 -07:00
Neil eec2f9137e feat: configurable setup script launch location (#745)
Adds a Terminal settings control for where the repo setup script runs
on workspace create: vertical split (default, preserves prior behavior),
horizontal split, or a separate "Setup" tab that does not steal focus
from the primary terminal.
2026-04-16 21:20:38 -07:00
Brennan Benson ad472f89d4 Fix split-pane console regressions and terminal context menu dismiss (#743) 2026-04-16 21:16:02 -07:00
Neil 7df0d9686c feat: GitHub PR/issue drawer on new-workspace page (#744) 2026-04-16 21:14:24 -07:00
Neil 480c19f5f0 fix: pinned 'Add folder/repo' footer in repo combobox (#741)
- Changed 'repositories' → 'repos/folders' in search placeholder and empty state
- Added always-visible 'Add folder/repo' button with FolderPlus icon in popover footer
- Button calls existing addRepo store action (same folder picker flow)
- Auto-selects newly added repo on success
- Made Command controlled to clear selection highlight when hovering footer
2026-04-16 20:55:10 -07:00
Jinwoo Hong 961f507ed3 feat: improve cookie import robustness and cross-platform support (#736) 2026-04-16 20:44:10 -07:00
Neil e8e5258138 fix: slugify prompt fallback in composer workspace name (#740) 2026-04-16 20:39:32 -07:00
Brennan Benson 31d402baa5 Prevent replaying split pane startup commands (#737) 2026-04-16 20:36:37 -07:00
Neil a3dd4e8fb3 feat: open composer modal from Cmd+J with GH URL support (#739) 2026-04-16 20:33:54 -07:00
Jinwoo Hong 63b2353cfd feat: browser URL history and address bar autocomplete (#738) 2026-04-16 20:07:46 -07:00
Jingyue WuandJinwoo-H eb8901ce36 feat: file explorer shortcuts + fix worktree switch shortcut hinting (#719)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-16 18:40:34 -07:00
Brennan Benson 5c664fc0b9 feat: support dragging tabs into new split panes (#732) 2026-04-16 16:47:11 -07:00
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