Commit Graph
1877 Commits
Author SHA1 Message Date
Jinjing 0bbf2d7a8f feat: cross-repo issues view in new workspace page (#942)
* feat: cross-repo issues view with multi-repo selection

- Add multi-repo selection via RepoMultiCombobox with persisted defaultRepoSelection setting (null = sticky-all)
- Stamp repoId on GitHubWorkItem at the renderer fetch boundary; merge items from all selected repos with per-repo failure tracking
- Extract task-query helpers (tokenize/strip/parseTaskQuery) to src/shared and add unit tests
- Refactor NewWorkspacePage row to <div role=button> to allow nested interactive elements without invalid-HTML hydration errors
- fix(repo-combobox): toggle all-repos selection on repeat click

* fix(tasks): route Use CTA to item's own repo in cross-repo view

handleUseWorkItem previously referenced a removed 'repoId' state; use item.repoId so launching from a merged cross-repo list targets the correct repo.

* test(e2e): add tasks page smoke test
2026-04-22 10:58:18 -07:00
Neil 7ae95cd3d0 fix(terminal): layout-aware default for macOS Option-as-Alt (#903) (#909) 2026-04-22 00:32:11 -07:00
Neil 369ddb6fe6 Simplify new workspace quick-create and wire Use button to direct launch (#913)
* Refine workspace composer controls

* Working repo autofocus

* after selects

* Simplify workspace quick create dialog

* Refine quick create form focus flow

* autofocus fix

* normal dialog

* base dialogs

* Wire Use button to launch workspace directly

Skips the composer modal for the common case: creates the workspace,
activates it, launches the default agent, and pastes the work-item URL
into the agent's input as a reviewable draft. Falls back to the modal
when setupRunPolicy is 'ask' or no compatible agent is detected.

* Stretch combobox dropdowns to trigger width

Repository and Agent rows in the quick-create dialog now span the full
dialog width like the Workspace Name input, and their dropdown popovers
inherit the trigger width so the entries align edge-to-edge with the
trigger instead of clipping to a fixed 288/320px.
2026-04-21 15:55:18 -07:00
Neil 35f5fe72e6 feat(editor): open HTML preview to the side (#908) 2026-04-21 15:52:28 -07:00
Jinjing 89954334a3 fix: route Cmd/Ctrl+N through main-process shortcut allowlist (#895)
Ensures the new-workspace composer opens even when focus is inside a
contentEditable surface (markdown rich editor) or a browser-guest
webContents, both of which bypass the renderer's window-level keydown.
2026-04-21 10:32:31 -07:00
Jinwoo Hong 4a90181ffb feat(browser): search suggestion in address bar dropdown (#893) 2026-04-21 10:04:56 -07:00
Jinwoo Hong 5f3055fb3f feat(browser): duplicate tab, search engine, address bar history fix (#892) 2026-04-21 09:52:40 -07:00
DrakontiaandCopilot 53f911ddc3 Support GitHub Copilot CLI agent detection (#866)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-20 23:44:37 -07:00
Brennan Benson 933d59f165 diff-comments: copy-only flow in Source Control (#884) 2026-04-20 21:50:31 -07:00
Kelvin Amoaba bf21a028b9 feat: add terminal line height setting (#712)
Add a configurable line height multiplier (1-3) to terminal appearance
settings under Typography, persisted and applied to all terminal panes.
2026-04-20 21:23:43 -07:00
Jinwoo Hong 7a9bc4ef6d feat: computer use via agent-browser CDP bridge (#856) 2026-04-20 20:56:14 -07:00
Neil c6f6300bcf feat(terminal): add "Copy on Select" clipboard setting (default off) (#862)
Adds an opt-in terminal setting that automatically copies the current
selection to the system clipboard as the user selects, mirroring X11 /
gnome-terminal behavior. xterm.js has no native option for this, so the
renderer hooks `onSelectionChange` per pane and writes via the existing
clipboard IPC. Defaults to false so existing users keep the explicit
Cmd/Ctrl+Shift+C copy flow.

Closes #860
2026-04-20 00:28:29 -07:00
Jinwoo Hong 8dcb234d22 feat(browser): multi-profile session management with per-tab switching (#823) 2026-04-19 19:48:26 -07:00
Brennan Benson 222d70e063 feat: add idempotent E2E test suite with headless Electron support (#671) 2026-04-19 12:09:32 -07:00
Honglei LiuandClaude Opus 4.7 f8a1a57825 fix(sidebar): sort Recent mode by lastActivityAt, not sortOrder (#825)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 10:36:27 -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
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
Neil 3a67eb0f9c support orca 2026-04-18 00:10:27 -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
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 aa75adedf7 feat(settings): gate persistent terminal daemon behind experimental toggle (#774) 2026-04-17 16:00:16 -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 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 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
Neil 7df0d9686c feat: GitHub PR/issue drawer on new-workspace page (#744) 2026-04-16 21:14:24 -07:00
Jinwoo Hong 961f507ed3 feat: improve cookie import robustness and cross-platform support (#736) 2026-04-16 20:44:10 -07:00
Jinwoo Hong 63b2353cfd feat: browser URL history and address bar autocomplete (#738) 2026-04-16 20:07:46 -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
Jinjing 250dd77414 fix: prevent phantom notifications when shutting down worktree terminals (#700)
Unregister PTY data handlers before killing PTYs during worktree
shutdown so the final data flush cannot trigger bell/agent-status
notifications. Also cancels accumulated closure state (staleTitleTimer,
agent tracker) via teardown callbacks, and adds a hasLivePtys guard
at notification dispatch time as a belt-and-suspenders check.
2026-04-15 22:39:23 -07:00
Jinwoo Hong 3b53441b96 feat: split smart sort and recent sort into separate modes (#680) 2026-04-15 17:54:06 -07:00
Jinwoo Hong ae11e7fefb fix: position browser context menu at cursor with edge flipping (#682) 2026-04-15 16:55:27 -07:00
Jinwoo Hong 97f3cd5199 feat: add pinned worktrees to sidebar (#674) 2026-04-15 12:23:13 -07:00
Brennan Benson 90b7f61e65 refactor: dark-launch split groups with correctness fixes (#643)
* refactor: enable split groups

* Fix split groups terminal host rollout

* refactor: remove split groups from add-tab menu

* refactor: dark-launch split groups with correctness fixes
2026-04-15 00:01:40 -07:00
Jinwoo Hong 81144f29db fix: prevent window re-maximize when opening browser tab (#666) 2026-04-14 23:20:43 -07:00
Jinwoo Hong 42e04268fb fix: harden SSH connection reliability and add passphrase prompt (#636) 2026-04-14 18:29:50 -07:00
Brennan Benson 741974c59c refactor: add split group model foundations (#644) 2026-04-14 14:39:01 -07:00
Jinwoo Hong 170610d1b2 fix: resolve Windows freeze when switching worktrees with right sidebar open (#628) 2026-04-14 00:45:04 -07:00
Jinjing 0ad3fda397 fix: harden active agent hovercard (#621) 2026-04-13 22:49:15 -07:00
Jinjing 130c3e9697 feat: scope terminal shell history per worktree (#620)
* feat: scope terminal shell history per worktree

Each worktree gets its own HISTFILE so ArrowUp only surfaces commands
from the current worktree. Integrates with the new LocalPtyProvider
architecture: history env injection runs after buildSpawnEnv but before
spawnShellWithFallback, and onBeforeFallbackSpawn keeps HISTFILE in
sync when the shell falls back.

* fix: align preload type declaration with implementation

Add missing command field to PtyApi.spawn in index.d.ts to match
the runtime index.ts signature, fixing TS2769 overload conflict.

* chore: remove terminal-history-scope-design.md from tracked files

* fix: mock terminal-history in worktrees test

The deleteWorktreeHistoryDir import pulls in electron's app module.
Add a vi.mock so the test doesn't hit the real electron export.
2026-04-13 22:42:53 -07:00
75ce59c3c9 fix: paste on right-click in Windows terminals (#571)
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
2026-04-13 22:24:28 -04:00
Jinwoo Hong cc66e120eb feat: Add SSH remote support (beta) (#590) 2026-04-13 19:23:09 -07:00
Jinwoo Hong e7f6344e89 Browser v2: workspace model, session profiles, and cookie import (#577) 2026-04-13 10:03:32 -07:00
Jinjing f9e803082c feat: implement on-demand update notification nudge (#570)
* wip

* feat: implement on-demand update notification nudge

* fix: address CI lint failures
2026-04-12 21:30:15 -07:00
Brennan Benson 71a0069910 Revert "Split-screen tab groups with canonical group/item model" (#551) 2026-04-12 15:20:31 -07:00
Neil 1395b6f516 Support Pi titlebar status tracking (#530) 2026-04-12 01:20:20 -07:00
Brennan Benson 839d87181b Split-screen tab groups with canonical group/item model (#520) 2026-04-12 01:10:32 -07:00
Neil 5041afb052 fix: keep OpenCode activity and notifications in sync (#527) 2026-04-12 00:10:52 -07:00
Jinjing fd33d9cc2d feat: make titlebar agent status configurable (#526)
Add a `showTitlebarAgentActivity` setting under Appearance > Titlebar
that lets users toggle the agent activity badge in the titlebar.

- Add `showTitlebarAgentActivity` to GlobalSettings (default: true)
- Add toggle in AppearancePane under a new "Titlebar" sub-section
- Upgrade badge from Tooltip to HoverCard with per-worktree breakdown
- Show dimmed idle state when no agents are active
- Fix badge/tab overlap when sidebar is closed (min-w-0 + conditional shrink-0)
- Extract countWorkingAgentsForTab helper for reuse by per-worktree counter
2026-04-11 23:52:21 -07:00