Commit Graph
1697 Commits
Author SHA1 Message Date
Jinjing cf2303d471 fix: address review findings (#2999) 2026-05-28 11:00:33 -07:00
Neil 5d2b801caa Fix sidebar reveal under sticky headers (#2988) 2026-05-28 01:57:59 -07:00
Neil aba3ee6e0a fix: reset agent terminal cursor on idle 2026-05-28 01:26:27 -07:00
Jinjing b1d87f310d Revert "Fix sidebar scroll restore below sticky headers" (#2985) 2026-05-28 01:22:00 -07:00
Jinwoo HongandOrca 2cbefdca12 Widen SSH status popover (#2980)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 00:56:49 -07:00
Jinjing c29b0373bf Open attached workspace for GitHub PRs (#2979)
- Detect existing non-archived workspaces linked to GitHub PRs and open them instead of starting duplicates.
- Show the attached workspace label in PR lists and detail pages, with a menu action to start a new workspace when needed.
2026-05-28 00:42:21 -07:00
Jinjing 0c69a713a2 Fix sidebar scroll restore below sticky headers (#2976)
* Fix sidebar scroll restore below sticky headers

* Split virtualized scroll anchor state
2026-05-28 00:25:19 -07:00
Jinjing d963a03051 Show favicons on browser tabs (#2977)
* Show favicons on browser tabs

Reference design: docs/browser-tab-favicons.md

* rm design doc

* Keep browser tab favicons visible
2026-05-28 00:07:51 -07:00
Neil b3a1535f6d Fix terminal side-effect drain stalls (#2975) 2026-05-27 23:41:41 -07:00
Jinwoo HongandOrca 0ce5a525fd Fix terminal file links with tilde and spaces (#2971)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 22:32:07 -07:00
Neil 286a92ff23 Add hidden admin restart action (#2970) 2026-05-27 22:12:10 -07:00
Neil f276b51294 Fix inactive hook completions with empty terminal layouts (#2962)
Treat empty terminal layout snapshots like temporarily missing layout metadata for agent hook routing, and let inactive hook completion notifications fall back to tab-level PTY liveness in that same state.

Verified locally with focused format, lint, unit tests, and droid notification E2E.
2026-05-27 18:54:45 -07:00
Jinwoo HongandOrca 5d9e4a2811 Fix project settings search for repo matches (#2944)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 17:33:30 -07:00
Neil 83539739f8 Fix left sidebar resize hit target 2026-05-27 16:59:50 -07:00
Jinwoo HongandOrca c43de76af9 Fix terminal URL click fallback (#2942)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 16:58:06 -07:00
Neil 3c5c062b27 fix: ignore onboarding portal interactions for skip confirm (#2938) 2026-05-27 16:49:07 -07:00
Brennan BensonandOrca 76ae675a01 Add nested repo group imports (#2866)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 16:22:03 -07:00
Brennan BensonandOrca a15b13b02d Customize Source Control AI prompts (#2916)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 16:03:36 -07:00
Brennan Benson fab37014fa Fix Resolve with AI icon (#2918) 2026-05-27 15:45:52 -07:00
659fe79226 feat: add source control action to abort merge (#2092)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-05-27 14:59:23 -07:00
Trevin Chowandbrennanb2025 a65f7b4216 feat: auto-rename workspace branch from the first prompt (#2888)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-05-27 14:09:43 -07:00
Jinwoo HongandOrca 770536ef7e Auto-detect repo icons when adding projects (#2786)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 13:48:40 -07:00
Jinjing 8014516253 Add failed automation rerun action (#2913)
* Add rerun action for failed automations

Adds a recoverable failed automation rerun action in the run detail view, with pending-state handling and focused view-state coverage.

Design doc: docs/failed-automation-rerun-action.md

* Rebuild Electron binary before PR tests

- Ensure Node-based unit tests can import `electron` after install blocks package postinstall
- Generate Electron's required `path.txt` in the PR workflow
2026-05-27 11:28:16 -07:00
Jinwoo HongandOrca df911ba59a Fix terminal URL click fallback regression (#2914)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 11:27:09 -07:00
48a1923756 fix(terminal): flatten multiline quick commands into shell list (#2903)
Multiline quick commands should behave like a shell command list, not a series of already-queued PTY lines. When a foreground command reads stdin, raw newline delivery can be consumed before the shell sees later cd/pwd lines; terminal paste avoids that but shows the whole block as pasted input before execution.

Flatten newline-separated quick commands into a semicolon-delimited command list before active-pane dispatch and new-tab startup queuing. The shell parses the list once, so later commands run after earlier foreground commands exit and directory changes remain in the active shell.

Fixes #2844

Co-authored-by: Prethish-Complyance <prethish@complyance.io>
Co-authored-by: Orca <help@stably.ai>
2026-05-27 01:06:47 -07:00
Neil c40a430596 Fix Antigravity agent status stability (#2904) 2026-05-27 00:53:10 -07:00
Jinjing 5783c4192b Improve Linear issue editing flow (#2901)
* fix: address review findings

* fix: update Linear RPC test
2026-05-26 23:15:33 -07:00
Jinwoo HongandOrca 3f8fad9e9e Improve mobile terminal startup and scrolling (#2828)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 00:59:14 -04:00
Brennan BensonandOrca 54c2ef89da Handle force delete for orphaned worktree directories (#2757)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 20:28:51 -07:00
Neil 3134496a6d fix: clean up PDF scale event listener (#2875) 2026-05-26 20:13:34 -07:00
Trevin ChowandNeil b2b5cac9a9 Add per-file line counts to the source control sidebar (#2865)
* Add per-file line counts to the source control sidebar

Show +N/-N (green/red) next to each file in the Changes, Untracked, and
Committed-on-branch sections so the magnitude of a change is visible at a
glance. Counts are computed per staging area via `git diff --numstat`;
untracked/new files count their full contents as additions and binary
files show no count.

Consolidate numstat parsing and binary-buffer detection into shared
modules reused by the local status path, the SSH/relay path, and the
existing branch-compare code. Include added/removed in the status-entry
equality check so the sidebar doesn't re-render on unchanged polls.

* fix: harden source control line counts

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-05-26 20:09:54 -07:00
Jinjing 6a9be249f5 feat: add external task filter links (#2871) 2026-05-26 20:07:03 -07:00
Trevin Chow 286729fc7d fix(worktree): match slash-named branches in base-ref search (#2861)
Match single-token base-ref search against both leaf and ancestor segments for local and remote slash-named branches. Keeps the SSH relay argv in parity and adds regression coverage.
2026-05-26 19:33:37 -07:00
Jinwoo HongandOrca 4d59f3b9e5 Fix wrapped terminal file links (#2690)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 19:14:04 -07:00
Jinjing cf5dfd7127 fix: address review findings (#2868) 2026-05-26 18:44:57 -07:00
Neil 9b2c05fa77 Fix keyboard layout shortcut dispatch
Fix shortcut dispatch so app commands follow the produced logical key for the active keyboard layout, while preserving intentional physical-code fallbacks for terminal byte paths and unavailable logical keys.\n\nCloses #2858
2026-05-26 18:28:55 -07:00
Brennan BensonandOrca 91991d6186 Improve refresh local base ref UX (#2570)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 18:28:41 -07:00
Trevin ChowandNeil 1790e3bb9b fix(sidebar): keep scroll position stable when deleting a workspace (#2863)
* fix(sidebar): keep scroll position stable when deleting a workspace

Deleting a workspace made the sidebar scroll and shift instead of just
removing the row. Two causes: the scroll-anchor restore fell straight to
scrollToIndex(align:'start') — snapping the anchor row to the viewport
top — whenever the post-delete virtual window briefly lacked the row's
DOM node; and scroll preservation was only wired to the context menu at
click time, never to the async removal that actually drops the row.

Restore now pins from the measured slot before that snapping fallback,
and removeWorktree records the top-row anchor in the same tick it removes
the row, covering every delete entry point (modal, card, SSH, batch).

* fix(sidebar): preserve delete scroll anchor

Keep virtualized scroll listener registration stable across row changes so cleanup cannot overwrite the pre-delete anchor after the row list mutates.

Add a regression test for the listener dependency contract.

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-05-26 17:49:49 -07:00
Jinwoo HongandOrca c134b1c31d Fix hidden browser automation paintability (#2851)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 16:27:23 -07:00
Neil e896dd3eb7 Recover hidden terminal output from main-owned state (#2848)
* fix: avoid renderer stalls on terminal backlogs

* Recover hidden terminal output from main state
2026-05-26 16:01:56 -07:00
Neil 0d758753e1 Fix blocked terminal clipboard write guidance
Show a one-time in-app hint when a terminal clipboard write is blocked, deep-link to the exact setting, and keep OSC 52 writes opt-in.
2026-05-26 15:56:35 -07:00
Brennan BensonandOrca 656dab3afd Redesign tour intro preview (#2852)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 15:20:43 -07:00
Neil a6f9a5826e Add Command Code agent status tracking
Adds Command Code hook installation, status normalization, launch seeding, and terminal-output fallback detection for working/done sidebar status. Includes review hardening for long-running tool repaint cadence and prompt sanitization across split ANSI chunks.
2026-05-26 14:45:34 -07:00
Neil c64777d1bc fix: stabilize release e2e failures 2026-05-26 13:25:54 -07:00
Xipeng Jin 97ad9e5e11 Center Settings content in right pane (#2772) 2026-05-26 12:00:45 -07:00
Jinjing c6aa8f6e83 Remove ready-to-merge badge from checks panel (#2846) 2026-05-26 11:23:30 -07:00
Trevin ChowandJinjing 64af9a01c1 fix(sidebar): indent worktree rows under their project header (#2841)
* fix(sidebar): indent worktree rows under their project header

Top-level worktree rows had no left padding, so their status dots sat
flush with the project folder icon. Indent each worktree group by one
LINEAGE_INDENT step so the dots nest under the folder icon, giving clear
parent-to-child visual hierarchy. Nested/lineage cards inherit the base
inset and keep their relative indentation.

* Avoid ungrouped workspace indentation

* review: cover grouped sidebar indentation

- reuse the WorktreeList render helper in the lineage test

- add the grouped project assertion that fails if the indent is reverted

- mock DropdownMenuSeparator for grouped project rendering

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-05-26 11:14:32 -07:00
Jinjing bfb060e08e Clear delivered diff notes after sending (#2820) 2026-05-26 09:33:51 -07:00
Neil f8fd8f1e7d fix: reuse smart GitHub lookup on create (#2831) 2026-05-26 01:58:48 -07:00
twoTimesAgnewandNeil 4f2c671e62 Squashed commits (#2049)
- feat(settings): restore divider + inactive pane stub in preview

The new xterm-based preview lost the visual feedback for terminal divider
color/thickness and inactive pane opacity that the old TerminalThemePreview
used to give. Bring back the same two-pane shape — real xterm on the left,
configurable-width divider in the middle, small color-only stub on the
right — so changing divider color, divider thickness, or inactive pane
opacity has immediate visible feedback in the Dark/Light theme previews
and the Typography preview.

Switch the preview prop from themeOverride: ITheme to modeOverride: 'dark'
| 'light' so the preview can derive both the theme and the matching
divider color from a single resolveEffectiveTerminalAppearance call —
keeps the dark/light variant rules in lockstep with live panes.

- feat(settings): drop cursor preview; add dark/light toggle to typography preview

Cursor preview was high-friction (xterm cursor blink only animates on
focus, and every workaround for that was either intrusive or fragile)
and low-value — the bar/block/underline toggle is visually obvious from
the controls themselves. Remove it. The Cursor section is back to a
single-column layout.

Add a Moon/Sun toggle to the Typography preview's card header so users
can flip the preview between dark and light themes without changing the
app theme. Toggle is hidden when themeOverride is set (Dark/Light theme
sections already pin a specific theme). Initial mode follows the active
app theme; flipping it doesn't change app settings.

- fix(settings): defer cursor preview focus by one frame

Use terminal.focus() (which already uses preventScroll: true internally)
and defer it via requestAnimationFrame. Focusing synchronously inside a
React effect can land before xterm finishes wiring the textarea focus
subscription, leaving _isFocused stale and the blink interval paused
even though the textarea has DOM focus. One frame is enough for xterm's
setup to complete.

- fix(settings): blink cursor preview as soon as Settings opens

Drop the first-render guard so the cursor preview blinks immediately on
mount, not just after a cursor setting change. Switch to focusing the
xterm helper textarea directly with preventScroll: true so the page
doesn't jump to the preview when Settings first opens — the preview can
be below the fold and a scroll-into-view would be jarring.

- fix(settings): focus preview on cursor changes so blink demonstrates

xterm only animates cursor blink when the terminal has focus, so the
Cursor section's blink toggle had no visible effect unless the user
clicked into the preview. Add an opt-in autoFocusOnCursorChange prop
that focuses the preview whenever cursorStyle/Blink/Opacity changes —
the user is interacting with cursor controls so a brief focus snap is
expected. Skip the first run so opening Settings doesn't steal initial
focus from elsewhere on the page. Only the Cursor preview opts in;
Typography and theme previews keep natural focus behavior.

- fix(settings): fit preview at default font, mirror cursor inactive style, share with theme sections

Three follow-ups from visual testing:

1. Trim preview content and pin cols=36 so PREVIEW_BUFFER fits in the
   ~312px-wide xterm canvas at the default 14px font. Larger fonts still
   extend past the right edge (clipped, not wrapped) — same behavior as
   before, just with the default size now on the right side of "fits".

2. Mirror cursorInactiveStyle to cursorStyle so the cursor shape always
   reflects the user's choice. xterm renders an outline cursor when
   unfocused by default, which masked shape changes in the preview because
   it's read-only and never gets focus. Blink still requires focus — same
   as a real terminal pane.

3. Replace TerminalThemePreview with TerminalSettingsPreview in the dark
   and light theme sections. Adds a themeOverride prop on the preview so
   each section can pin a specific theme regardless of the active app
   theme. Drops the static two-pane mock + palette grid in favor of the
   richer code/test/diff buffer the user prefers.

- fix(settings): preview lifecycle and font hover preview

Three issues from initial visual testing:

1. Buffer accumulated on theme/settings changes. terminal.clear() keeps
   the row the cursor sits on, and PREVIEW_BUFFER ends mid-line on the
   prompt — so a follow-up clear+write left the trailing prompt fragment
   and appended the new buffer beneath it. Switch to terminal.reset()
   which restores cursor home and wipes the buffer.

2. Long lines wrapped because FitAddon shrunk cols to fit the 360px
   container. Drop FitAddon (and the resize observer that supported it),
   pin cols=50 / rows=15 in the constructor, and let the container clip
   horizontal overflow at large fonts. Lines never break mid-content now.

3. Add hover-to-preview to the font picker. FontAutocomplete fires a new
   onPreviewFontFamily callback as the user moves through dropdown
   options; TerminalPane lifts a previewFontFamily state and hands it to
   both Typography and Cursor previews so users see each font without
   committing the selection.

- fix(settings): preserve Ghostty context and honor opacity in preview

Per final review: the original Ghostty rationale comments inside
applyTerminalAppearance were lost when the composition was extracted —
restore them on each branch of composeActiveTerminalTheme. And the preview
needs allowTransparency true when the user has set a sub-1 background
opacity, otherwise xterm renders the rgba background fully opaque.

- feat(settings): show live preview in Typography and Cursor sections

- fix(settings): make preview read-only via xterm and track theme bg

Per code review: tabIndex/aria-hidden on the wrapper don't reach xterm's
internal textarea — disableStdin does. And bg-black on the wrapper showed
a stark black ring around light-mode previews; track the composed theme's
background instead so the padding band always matches the canvas.

- fix(settings): suppress false-positive exhaustive-deps warning

- feat(settings): add TerminalSettingsPreview component

Implements Tasks 3-7 of the terminal-settings-preview plan: a live
read-only xterm.js preview card (DOM renderer) that mutates font/cursor
options directly, repaints the ANSI buffer on theme changes, manages the
LigaturesAddon on toggle, and refits on ResizeObserver events.

- fix(terminal): tighten composeActiveTerminalTheme docs + cover zero opacity

Per code review: lead the JSDoc with the why (preview reuse) instead of
narrating the merge steps, and add a test that pins zero-background-opacity
behavior so a future truthy-only guard refactor doesn't silently drop it.

- refactor(terminal): extract composeActiveTerminalTheme helper

- fix(settings): split def/render syntax colors and harden marker test

Per code review: the prompt() comment leaked a layout detail (360px), and
def/render were collapsed into a single yellow span — losing the function-
name color distinction the preview is meant to demonstrate. Strip ANSI in
the marker test so future re-coloring doesn't break it.

- feat(settings): add terminal preview content module

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-05-26 01:51:27 -07:00