Commit Graph

2946 Commits

Author SHA1 Message Date
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
github-actions[bot] b7fe967780 release: v1.4.35 2026-05-29 07:49:18 +00:00
Jinwoo Hong c27a406d48
Detect Antigravity dispatch injection readiness (#3031)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 22:17:49 -07:00
Jinwoo Hong 476f9084ec
Add workspace sidebar drag autoscroll (#3027)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 21:52:08 -07:00
github-actions[bot] 0caef5c340 release: v1.4.35-rc.1 2026-05-29 02:39:02 +00:00
Neil 3d9d4179a1
Add custom repo hex color picker (#3022) 2026-05-28 19:38:41 -07:00
Jinwoo Hong 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 Hong 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
Trevin Chow 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
Trevin Chow 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 Chow 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
Trevin Chow 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
Trevin Chow 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
Xipeng Jin 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
Jinwoo Hong 7e1f9d0a0c
fix: prevent hidden pet startup flash 2026-05-28 19:43:35 -04:00
Jinjing 47dffe5308
fix: address review findings (#3014) 2026-05-28 16:13:45 -07:00
Jinjing 186327af08
fix: guard ssh startup destroy errors (#3013) 2026-05-28 16:13:09 -07:00
Jinwoo Hong 9447f18e91
Avoid passive symlink macOS privacy prompts (#2793)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 16:08:12 -07:00
Brennan Benson 46ac313233
Fix nested repo project group imports (#3008)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 15:45:05 -07:00
github-actions[bot] dea710bc51 release: v1.4.35-rc.0 [rc-slot:2026-05-28-15] 2026-05-28 22:36:06 +00:00
Pim de Jong 5c2ed9c6ce
Add Notion style editable markdown toggle blocks (#1584)
* implement h1 and text toggle

* Review:
  - Details parsing is now depth-aware, so nested <details> blocks are not partially consumed.
  - Existing details blocks with raw HTML inside the summary/body now fall back to Orca’s raw HTML passthrough instead of
    becoming editable toggle nodes and escaping tags.
  - Simple supported details blocks still become editable rich toggle nodes.
  - Added regression tests for raw HTML inside details and nested details.

* placeholder and fix enter behaviour

* review findings

* Review: align toggle commands with grouped slash menu

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

* Review: finish toggle command rebase fixes

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

* Review: preserve unsupported details HTML

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

* Review: delete toggle body back into summary

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

* Review: make empty toggle backspace two-step

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

* Review: make empty toggle enter exit

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 17:48:59 -04:00
Brennan Benson 4b32afeff2
Track feature interactions (#2959)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 14:44:35 -07:00
Jinwoo Hong 638d565e5e
Improve terminal attention notifications (#2562)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 14:24:23 -07:00
Jinwoo Hong 95862116aa
fix: use Gemini BeforeTool hook for status (#2922)
* fix: disable Gemini PreToolUse hook install

* fix: use Gemini BeforeTool hook for status

- install Gemini's native BeforeTool hook instead of invalid PreToolUse\n- keep sweeping stale managed PreToolUse entries during reinstall\n- normalize Gemini BeforeTool payloads into in-flight tool status

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

* fix: cover Gemini hook migration for remote installs

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

* test: cover local Gemini hook sweep preservation

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

---------

Co-authored-by: ramzi <ramzi@upsys-consulting.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 17:10:57 -04:00
Jinwoo Hong 9348dd488f
fix: advance create workspace after PR link selection (#3010)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 16:55:22 -04:00
Jinwoo Hong ff687a37b4
Fix Windows ConPTY process-list fallback (#3009) 2026-05-28 16:49:14 -04:00
Trevin Chow 52e0f7b043
fix: bound the eager PTY buffer and stop quadratic trimming (#2931) (#2951)
* fix: bound the eager PTY buffer and stop quadratic trimming

The eager reconnection buffer trimmed with Array.shift() (O(n) per chunk,
quadratic under many small pre-attach chunks) and let a single chunk
larger than the 512 KB cap bypass trimming entirely. Replace shift with a
head index (amortized O(1), occasional compaction) and clamp an oversized
chunk to its most-recent tail so the cap always holds.

Closes #2931

* fix: enforce eager PTY buffer byte cap

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 16:44:24 -04:00
Jinwoo Hong 6df52607fc
Add live terminal input mode on mobile (#2982)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 13:41:37 -07:00
Trevin Chow f3b452fff5
Clarify orchestration reset scope flags
Clarify the CLI reset usage string and add focused handler coverage for reset flag mapping.
2026-05-28 16:40:06 -04:00
Jinjing 124dccf37c
Update mobile APK release link (#3007) 2026-05-28 13:38:57 -07:00
Brennan Benson a68f0d20f7
Track nested repo import telemetry (#3006)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 13:38:46 -07:00
github-actions[bot] 83b97d52a1 release: v1.4.34 2026-05-28 20:23:32 +00:00
Neil 99dca7e062
Fix unread badge for background agent completions
Mark background agent-complete notifications as workspace unread so the sidebar bell and Dock badge match the system notification.
2026-05-28 13:22:45 -07:00
Trevin Chow 33650832e4
fix: prevent relay fs.rename from clobbering an existing destination (#2926) (#2937)
* fix: prevent relay fs.rename from clobbering an existing destination

The remote file-explorer rename path (provider.rename -> relay
fs.rename) called fs.rename unconditionally, silently overwriting any
file/folder already at the destination. The local rename already
guards via assertFileExplorerRenameDestinationAvailable; apply the
same guard on the relay to restore local/remote parity (case-only
renames on case-insensitive filesystems still allowed).

Moved the collision helper from src/main to src/shared so both the
main process and the remotely-deployed relay share one implementation.

Closes #2926

* review: make SSH safe rename explicit

- keep relay fs.rename raw and add fs.renameNoClobber for user-facing renames
- route SSH file-explorer rename paths through renameNoClobber
- add relay/provider/runtime regression coverage and stale-relay fail-closed handling
- verified live SSH rename behavior on openclaw 2

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 16:14:57 -04:00
Jinwoo Hong b2611814e1
Fix Claude screenshot paste after interrupt (#2950)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 13:12:42 -07:00
Jinwoo Hong 248093d4fa
fix: stabilize floating workspace trigger position (#3003)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 15:57:47 -04:00
Jinwoo Hong 22cf7b084c
Speed up Quick Open ranking (#2984)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 15:49:44 -04:00
Jinwoo Hong 864dcb2330
Update mobile 0.0.10 release links
Point Android mobile download links at the published mobile-v0.0.10 release.
2026-05-28 14:36:40 -04:00
Jinwoo Hong 7cbee189f7
Show full tab titles in tab tooltips (#2986)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 11:16:32 -07:00
Jinjing cf2303d471
fix: address review findings (#2999) 2026-05-28 11:00:33 -07:00
github-actions[bot] 0c5ed1e644 release: v1.4.33 2026-05-28 09:01:02 +00:00