Commit Graph
2116 Commits
Author SHA1 Message Date
Neil daa6e2da43 Remove redundant sidebar live width effect (#3160) 2026-05-29 07:01:41 -07:00
Neil eaf26490dc Remove onboarding detour reset effect (#3122)
* Remove onboarding detour reset effect

* Document onboarding detour effect cleanup
2026-05-29 05:24:45 -07:00
Neil f0ef3cd462 Derive automation run history selection during render (#3104) 2026-05-29 04:36:09 -07:00
Neil 5a31f53325 Move combobox open focus out of effects (#3100) 2026-05-29 04:25:26 -07:00
Neil 90bab84ffe Remove confirmation dialog mirror effect (#3091) 2026-05-29 04:02:59 -07:00
Neil e69d2cf7bf Remove tour select portal effects (#3087) 2026-05-29 03:50:05 -07:00
Neil 536d3d7c8f Remove untitled rename reset effect (#3083) 2026-05-29 03:43:29 -07:00
Neil 8366a2a679 Move onboarding persisted theme ref out of effect (#3069)
* Move onboarding persisted theme ref out of effect

* Record onboarding theme ref effect cleanup audit
2026-05-29 03:06:28 -07:00
Neil 6a4ad9dadc Move feature wall telemetry refs out of effect (#3068)
* Move feature wall telemetry refs out of effect

* Record feature wall telemetry effect cleanup audit
2026-05-29 02:56:31 -07:00
Neil 2a5601da64 Move kanban drag ref mirrors out of effects (#3067)
* Move kanban drag ref mirrors out of effects

* Record kanban drag ref effect cleanup audit
2026-05-29 02:53:59 -07:00
Neil 3895662c01 Move onboarding agent ref mirrors out of effects (#3066)
* Move onboarding agent ref mirrors out of effects

* Record onboarding agent ref effect cleanup audit
2026-05-29 02:51:16 -07:00
Neil 0b9c528368 Move notification settings ref sync out of effect (#3065)
* Move notification settings ref sync out of effect

* Record notification step effect cleanup audit
2026-05-29 02:48:28 -07:00
Neil 7a1c4fd4fb Move quick command dialog reset out of effect (#3064)
* Move quick command dialog reset out of effect

* Record quick command dialog effect cleanup audit
2026-05-29 02:46:15 -07:00
Neil f0b5ed9946 Move kanban column width sync out of effects (#3063)
* Move kanban column width sync out of effects

* Record kanban column effect cleanup audit
2026-05-29 02:43:01 -07:00
Neil c35977fd46 Prune workspace board selection during render (#3062)
* Prune workspace board selection during render

* Record kanban selection effect cleanup audit
2026-05-29 02:38:55 -07:00
Neil e9f034c17f Move feature tour step resets out of effects (#3060)
* Move feature tour step resets out of effects

* Record feature tour reset cleanup audit
2026-05-29 02:32:49 -07:00
Neil 35eb24632b Derive agent fallback disclosure latch during render (#3059)
* Derive agent fallback disclosure latch during render

* Record agent step effect cleanup audit
2026-05-29 02:29:30 -07:00
Neil 6e54af1ba5 Reset project group dialogs during render (#3058)
* Reset project group dialogs during render

* Record project group dialog effect cleanup audit
2026-05-29 02:26:32 -07:00
Neil b4137a548b Reset quick open query during render (#3056)
* Reset quick open query during render

* Record quick open effect cleanup audit
2026-05-29 02:20:45 -07:00
Neil 16f6027032 Initialize repo combobox open state (#3055)
* Initialize repo combobox open state

* Record repo combobox effect cleanup audit
2026-05-29 02:17:23 -07:00
Neil 45209a54cd Remove static feature tour step repair effects (#3054)
* Remove static feature tour step repair effects

* Record feature tour effect cleanup audit
2026-05-29 02:14:15 -07:00
Neil 7c7ecd3496 Remove inactive title rename draft sync (#3053)
* Remove inactive title rename draft sync

* Record title rename effect cleanup audit
2026-05-29 02:11:07 -07:00
Neil 3614dcba0e Reset browser favicon fallback during render (#3052)
* Reset browser favicon fallback during render

* Record browser favicon effect cleanup audit
2026-05-29 02:08:16 -07:00
Neil f0d32e5d9d Collapse status account menus in open handler (#3051)
* Collapse status account menus in open handler

* Record status bar effect cleanup audit
2026-05-29 02:05:19 -07:00
Neil ff5b0daf3d fix: release CDP proxy resources on startup failure 2026-05-29 02:03:16 -07:00
Neil 582a0486c4 fix: clean up notification sound playback listeners 2026-05-29 02:02:03 -07:00
Neil 1236729b24 fix: abort relay requests on dispatcher dispose 2026-05-29 02:00:53 -07:00
Neil 539f704bdb fix runtime rpc keepalive cleanup (#3045) 2026-05-29 01:59:32 -07:00
Neil 07644ac97c Remove diff note draft sync effect (#3044) 2026-05-29 01:58:59 -07:00
Neil 9a7d2a2180 fix speech model download cancellation (#3043) 2026-05-29 01:57:20 -07:00
Neil e211e56ed5 Derive sidebar filter command selection (#3042) 2026-05-29 01:54:00 -07:00
Neil 31a2cb9770 Derive PR reviewer filter mode (#3041) 2026-05-29 01:53:53 -07:00
Neil 068c203b5b Audit React perf effects (#3038) 2026-05-29 01:53:43 -07:00
Jinwoo HongandOrca c27a406d48 Detect Antigravity dispatch injection readiness (#3031)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 22:17:49 -07:00
Jinwoo HongandOrca 476f9084ec Add workspace sidebar drag autoscroll (#3027)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 21:52:08 -07:00
Neil 3d9d4179a1 Add custom repo hex color picker (#3022) 2026-05-28 19:38:41 -07:00
Jinwoo HongandOrca 09e3dfbc23 Add experimental compact worktree card setting (#3021)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 21:41:48 -04:00
Jinwoo Hong 29916cafe0 Use amber for permission status indicator
Change StatusIndicator permission state from red to amber and add a focused render regression test.
2026-05-28 21:37:56 -04:00
Jinjing 41f0bc6394 test: preserve ssh mock event listeners (#3015)
* test: preserve ssh mock event listeners

* test: reuse runtime file command helper
2026-05-28 18:30:35 -07:00
Jinwoo HongandOrca 153fd863c6 Refresh GitHub issues after creation (#3018)
Implements the no-cache GitHub issue list refresh path described in docs/refresh-github-issues-after-create.md.

Co-authored-by: Orca <help@stably.ai>
2026-05-28 21:14:58 -04:00
bf51593706 fix(worktree): make generated workspace names unique across repos (#2857)
Auto-generated workspace names walked the marine-creature list in order
and deduped only within the active repo (the default when workspaces are
nested), so the first auto-named worktree in every repo landed on
"Nautilus". That guaranteed identical branch names across repos, which
appear flat and indistinguishable in the sidebar.

The in-order walk also produced "Nautilus-2", "Nautilus-3", ... within a
single repo: the suggester ignores branches left behind by deleted
worktrees, so it kept re-proposing "Nautilus", and the create-time retry
loop suffixed it to dodge the lingering branch. Random selection now
yields a fresh creature each time instead of marching the same name.

- Dedup against worktrees in every repo, not just the active one
- Pick randomly from the unused pool instead of the first list entry
- Lowercase the result to match branch-name convention (fix/seahorse)
- Expand the corpus 260 -> 552 (more marine species plus public-domain
  mythological sea creatures) so random picks rarely repeat

getSuggestedCreatureName drops the now-unused repoId/nestWorkspaces
params; the RNG is injectable for deterministic tests.

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 20:41:10 -04:00
a538431140 refactor(sidebar): compact worktree cards and consolidate title-row icons (#2843)
* fix(sidebar): omit branch line when it duplicates the workspace name

Un-renamed worktrees default their display name to the branch, so the
gray branch sub-line repeated the title verbatim. Hide it when the two
match, and add a native title tooltip to the title so a clipped name is
still recoverable now that the branch line no longer serves as the
untruncated copy.

* refactor(sidebar): collapse worktree card to one line when it has no second-line content

The unread bell used to stack vertically under the status dot, forcing a
height floor that left a blank band beneath single-line titles. Move the
bell inline into the title row's right cluster (leading the PR/ports
indicators) so the left column is just the dot and the card height tracks
its content. Gate the branch/badge sub-line so it only renders when it
carries something, and lift PR/review/ports indicators onto the title row
so they don't strand on their own line once the branch is hidden. Replace
the spelled-out "primary" badge with a compact amber star.

* refactor(sidebar): make CacheTimer presentational; fix card test mocks

Pass the resolved cache start time and TTL into CacheTimer as props so the
card and the timer no longer double-subscribe to the same store slices —
the card already derives the start time to gate its metadata row. Collapse
the now single-child status-dot wrapper. Add the new
usePromptCacheCountdownStartedAt export to the ./CacheTimer mocks the card
tests rely on.

* fix(sidebar): keep compact card title recovery accessible

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 20:40:24 -04:00
Jinjing ccf9d7ef22 fix: address review findings (#3017) 2026-05-28 17:35:48 -07:00
Jinjing bda658a364 Add agent enablement controls (#2972)
* Add agent enablement controls

Implements the Enable/Disable Agents Dashboard behavior described in docs/enable-disable-agents-dashboard.md, including persisted agent enablement state, filtered launch surfaces, and settings UI affordances.

* Clarify agent availability controls

* Respect disabled agents across workspace and AI defaults

- Filter disabled TUI agents from mobile and quick workspace selection
- Avoid implicitly choosing disabled agents for commit/PR AI settings
- Broadcast settings changes to open windows for disabled-agent updates

* rm design doc

* fix: complete agent enablement propagation
2026-05-28 17:29:49 -07:00
Trevin Chowandgithub-actions[bot] 10d5c66be3 fix(sidebar): pin the correct repo header when scrolling between groups (#2869)
* release: v0.0.1-rc.0 [rc-slot:2026-05-26-15]

* fix(sidebar): pin the correct repo header when scrolling between groups

The sticky-header swap was gated on scrollOffset >= header.start + 8px (the
inter-group spacer), so once the next repo's header row reached the top the
previous repo's opaque header stayed pinned over it — the wrong repo appeared
sticky while the next repo's worktrees scrolled underneath. Hand off the moment
the header row reaches the top; the pinned header still drops its spacer to sit
flush, so there is no position shift on swap.

Update the scroll-adjustment tests to assert activation at the row top and add
a regression case at scrollOffset === start.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-05-28 20:19:58 -04:00
Trevin Chow 10f97509ea fix: preserve unmerged branch when removing a worktree (#2927) (#2939)
fix: preserve unmerged branch when removing a worktree (#2927)
2026-05-28 20:19:53 -04:00
9d82dbabe3 fix: sync worktree card title on terminal branch switch (#2895)
* fix: sync worktree card title on terminal branch switch

When a worktree has no custom name, mergeWorktree derives its displayName
from the branch. A branch switch made in a terminal reaches the renderer
only via the git-status poll, which patched branch/head but never the
derived title — leaving the card title frozen on the old branch name while
the subtitle correctly updated.

updateWorktreeGitIdentity now re-derives displayName from the new branch
when the title was auto-derived (matches the old branch), and leaves
user-set custom names untouched.

* fix: reuse branch display name helper

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 19:58:07 -04:00
f9712ede01 fix: stop worktree jumping to top of sidebar on re-click (#2889)
* fix: stop worktree jumping to top of sidebar on re-click

Returning to a worktree whose terminals had slept or disconnected
bounced it to the top of its repo group, as if there were activity.

The sidebar sorts by lastActivityAt, and click-driven activity is meant
to be suppressed via the pendingActivationSpawn tag. But setActiveWorktree
only applied that tag on a worktree's first activation. When the user
returned to a worktree with no live PTYs, the allDead branch bumped the
PTY generation, remounting the pane and fresh-spawning a PTY. That spawn
was untagged, so updateTabPtyId treated it as real activity: it stamped
lastActivityAt and bumped sortEpoch, floating the worktree to the top.

Tag the tabs whenever the allDead generation bump fires, not only on
first activation -- the respawn it triggers is always a click side-effect.
The flag is consumed on the next updateTabPtyId, so genuine later activity
still updates recency. This matches the intent already documented in the
terminals slice.

* fix activation spawn recency suppression

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 19:57:53 -04:00
7795fbff91 Fix terminal focus after tab bar menu launches (#2883)
* Fix tab menu terminal focus

* Fix tab menu terminal focus race

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 19:50:03 -04:00
Trevin Chow 7d409005bc fix(cli): reject RPC promptly when runtime closes socket without responding (#2891)
sendRequest handled the socket's 'error', 'data', and 'connect' events but
never 'close'. A clean peer close (FIN, no error) before a terminal frame —
e.g. the runtime crashing or closing the connection mid-request — left the
promise unsettled until the full timeout fired: 60s by default, up to 10min
once keepalive frames had refreshed the client-side timer.

Add a socket.once('close', ...) that rejects with runtime_unavailable when
the socket closes before a terminal frame settles the request. finish()
already guards against double-settle, so this no-ops on the normal
success/error paths that call socket.end().
2026-05-28 19:48:08 -04:00