Commit Graph

5378 Commits

Author SHA1 Message Date
Jinwoo Hong ce403c09d5
Add GitHub task close reason parity (#6141)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 15:18:46 -07:00
Brennan Benson a2fd8c11c2
Reduce source-control background load during refreshes (#6189)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 15:06:38 -07:00
Brennan Benson cf39bd7abe
Find projects and repo groups from Cmd+J (#6193)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 14:55:59 -07:00
gatsby74 0880021665
feat(shortcuts): add assignable shortcut to toggle sleeping workspaces
Adds an unbound sidebar.sleepingWorkspaces.toggle keybinding action, wires it to the global shortcut dispatcher, and shows assigned shortcut labels in the workspace-board filter menu.

Also resolves the PR against current main and removes an unnecessary exhaustive-switch fallback that blocked current lint.
2026-06-23 14:26:01 -07:00
github-actions[bot] 30a1a52459 release: v1.4.94 2026-06-23 20:51:54 +00:00
Wolfie 7c5e8a7f30
feat: floating workspace shortcuts and tab shortcut affordances (#6077)
* feat: add floating workspace shortcuts

* test: shim localStorage in happy-dom tests

* refactor: tighten floating shortcut tests and docs

- Drop unrelated localStorage test shim (local Node 25 only; CI runs Node 24)
- Add why-comments for minify/minimize macOS-only and unbound defaults
- Assert minify bounds via getMinifiedFloatingTerminalBounds() not magic numbers
- Cover out-of-range tab index and no-active-tab rename edge cases

* test: cover custom floating shortcut bindings on Linux/Windows

Proves user-assigned overrides for floatingWorkspace.maximize/minify fire
on platforms where the default bindings are intentionally empty.

* feat: show keybinding hints in floating panel control tooltips

Maximize/restore and minimize tooltips now surface their live shortcut as
"Label (shortcut)", matching the repo convention (e.g. ReviewPRViewAnimatedVisual).
Degrades to a bare label when the action is unbound (Win/Linux defaults,
and minimize on every platform).

* feat: rework floating panel resize shortcut to Cmd+Opt+Shift+A

- Move maximize/restore default from Cmd+Opt+Up to Cmd+Opt+Shift+A so it
  shares the Cmd+Opt+A toggle anchor and stays one-handed.
- Open-into-maximized: pressing the chord while the panel is closed opens
  it straight into the maximized state (one-shot intent bridges the
  closed->mounted gap), regardless of last saved size. While open it
  remains a maximize<->restore toggle returning to saved dimensions.
- Drop the minify action and its Cmd+Opt+Down default entirely; it was
  introduced earlier in this PR and is not in main, so this trims unshipped
  surface rather than removing an existing feature.

Maximize tooltip now surfaces the new chord. Adds panel tests for the
open-maximized intent and updates keybinding default tests.

* feat: surface tab shortcut affordances

* refactor: address 5.5 Pro review on tab shortcut affordances

- Add Darwin Option-composed (Cmd+Opt+Shift+A) maximize capture/round-trip regression
- Replace 'Unassigned' string-sentinel checks with useOptionalShortcutLabel (string | null)
- Add TTL guard + unit tests so a stale open-maximized intent cannot leak into a later open

* feat: show default agent shortcut in new tab menu

* fix: address PR review on tab tooltip a11y, i18n, and test guards

* Fix floating workspace shortcut edge cases

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

---------

Co-authored-by: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-23 13:37:17 -07:00
Jinwoo Hong eb650d6cb8
Make mobile pairing QR codes larger (#6192)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 13:22:51 -07:00
github-actions[bot] 02e5464d2a release: v1.4.94-rc.2 2026-06-23 20:13:45 +00:00
Jinwoo Hong b4d2e9810d
Restore pre-culprit workspace liveness boundary (#6196)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 13:12:47 -07:00
Ricardo Sawir ffa80eb5bb
Fix Windows directory cwd prefixes (#6116) 2026-06-23 13:00:09 -07:00
AJ 0797966d39
Preserve unsaved diff-note draft on outside click (#6188)
* Preserve unsaved diff-note draft on outside click

Clicking outside the diff-note popover while it held unsaved text
discarded the draft. Dismiss-on-outside-click now only fires when the
draft is empty or whitespace-only; with content the popover stays open
so an accidental click can't lose an in-progress note. Escape and the
Cancel button still dismiss explicitly.

Mirror the draft into a ref so the document mousedown listener (empty
dependency array) reads the freshest body, matching the existing
onCancelRef/topRef pattern in the component.

* Preserve large diff-note drafts on outside click

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-23 12:50:00 -07:00
github-actions[bot] ab04b1b99b release: v1.4.94-rc.1 2026-06-23 19:20:18 +00:00
Jinwoo Hong dd421a054b
Fix Codex session history titles from injected context (#6151)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 12:19:15 -07:00
Jinwoo Hong b8becaae39
Remove active-worktree gating from restored session visibility (#6185)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 12:08:19 -07:00
Brennan Benson 83f49818d3
Detect remote agents from shell PATH (#6157)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 11:31:41 -07:00
Salah Alkhwlani 03fd869b92
feat(ai-vault): support OpenCode SQLite session storage (#5925)
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-23 11:18:17 -07:00
Brennan Benson 8c4f57e8ef
Reduce repeated git probes during worktree refresh (#6153)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 11:07:49 -07:00
Brennan Benson fac7e0440c
Prevent sidebar crashes from missing worktree titles (#6127)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 11:07:09 -07:00
Jinjing 0c8c248199
fix: address review findings (#6182) 2026-06-23 10:58:38 -07:00
Jinjing 0e6ecc3fc1
Prevent restored inactive terminal tabs from being flagged as orphans (#6179)
Consolidate session binding resolution into a dedicated helper that scans
active PTY states, restored tab PTY IDs, and split-pane layout wake
hints. This ensures that deferred-reattach terminal sessions are not
falsely classified as orphaned before their UI panes mount.
2026-06-23 10:43:44 -07:00
Jinjing 953b325180
Scope Claude Keychain lookup and disable PTY fallback for system auth (#6180)
* Scope Claude Keychain lookup and disable PTY fallback for system auth

* Scope macOS Keychain credential lookups to the config directory first to support Claude Code 2.1+, falling back to the legacy system default.
* Disable Claude CLI PTY execution fallback for system-default accounts during usage refreshes to avoid launching unexpected browser auth flows.

* Disable Claude PTY fallback when auth preparation is unavailable

Treat missing Claude auth preparation as system-default. This aligns
the PTY fallback gate to prevent background refreshes from triggering
interactive authentication flows when no auth is configured.
2026-06-23 10:38:37 -07:00
Jinjing 9bd439ccb4
Remove textContentType none from iOS terminal input (#6176)
- iOS `textContentType` overrides `autoComplete` and restricts keyboard
  layouts, preventing switching to non-Latin input methods (IMEs).
- Use `autoComplete="off"` instead to ensure the keyboard remains
  default and IME switching stays available.
- Update tests to assert these changes.
2026-06-23 10:34:32 -07:00
Jinjing aec7bb6aa0
Scope GitHub Project rows to selected repos (#6174)
* Scope GitHub Project rows to selected repos

Adds the selected-repo Project scoping implementation and documents the UI behavior in docs/github-project-selected-repo-popup.md.

* rm design doc

* fix: address review findings
2026-06-23 10:22:54 -07:00
Jinjing 3e955c0377
Support clicking orchestration task links to focus assigned terminals (#6178)
Introduce support for detecting and activating 'task_' prefixed links
in terminal panes.

Because orchestration tasks are stable records but can be retried
onto new dispatches, clicking a task link queries the runtime database
via 'orchestration.dispatchShow' to retrieve the latest assigned
terminal handle, then navigates to that terminal.
2026-06-23 10:18:44 -07:00
github-actions[bot] 86a2b4cb8a release: v1.4.94-rc.0 2026-06-23 17:16:17 +00:00
Jinjing 999fbd4217
Prevent redundant SIGWINCH signals on terminal tab restoration (#6177)
Avoid triggering unnecessary terminal PTY resizes and SIGWINCH signals
when restoring terminal tabs or replaying hidden snapshot backlogs. This
prevents alternate-screen TUIs from resetting their viewports or
scrolling to the top when switching tabs.

- Track hidden startup measurement as state and clear it after first visibility
- Suppress forwarding terminal resizes while a pane is hidden
- Avoid resizing or sending SIGWINCH on snapshot replay when dimensions are unchanged
2026-06-23 10:15:06 -07:00
Jinjing bc0ad79820
Keep repos visible when project group metadata is missing (#6113)
* Keep repos visible with missing project groups

* Preserve shared project metadata on host refresh

* Prune stale source repos in projects and fix sidebar group rendering

- Filter sourceRepoIds against currently known repo IDs to prevent
  removed or stale remote repos from lingering in shared project metadata.
- Prevent project-group assigned repos from rendering as missing metadata
  fallback rows if the group exists.

* Preserve multi-host project metadata and source repos on refresh

- Keep source repos owned by other hosts during a single-host refresh
- Ensure client-local Windows runtime preferences are not overwritten
  by remote refreshes, while allowing local refreshes to clear them
- Prevent sidebar key errors when repo groups have not yet loaded
2026-06-23 08:49:53 -07:00
github-actions[bot] 73cc134722 Update README downloads badge 2026-06-23 13:17:51 +00:00
github-actions[bot] f8b3d9db88 release: v1.4.93 2026-06-23 08:15:17 +00:00
Jinjing 9607b30fde
Align experimental worktree cards with status lane pullback (#6158)
- Apply extra left-padding pullback to experimental cards when the status lane is shown, keeping title text aligned to tree steps.
- Use negative left margin on shallow rows when the minimum content inset clamps the padding adjustment.
- Resolve experimental card style setting dynamically in the folder workspace panel instead of hardcoding it.
2026-06-23 01:14:16 -07:00
Jinjing b43b4356db
Remove deferred sidebar worktree activation (#6155)
Remove the logic that defers activation of slept worktrees behind the
input-quiet scheduler when clicked in the sidebar.

Since the underlying state transition and terminal preparation are
already properly deferred where needed, sidebar clicks can update the
active workspace immediately. This simplifies the activation flow and
eliminates complex cancellation race conditions.
2026-06-23 01:06:17 -07:00
Jinjing b99983e913
Speed up Markdown preview local images (#6124)
* Speed up Markdown preview local images

Implement fast local image prewarming for Markdown preview as described in docs/markdown-preview-fast-local-images.md.

* Encode markdown image paths to support spaces on insertion

Unescaped spaces and delimiters in markdown image destinations can make
screenshot filenames with spaces render as literal text or broken partial
paths.

- Encode the image basename using encodeURIComponent when inserting.
- Preserve encoded local image paths during markdown round trips.
- Remove outdated markdown-preview-fast-local-images design doc.
2026-06-23 00:48:57 -07:00
Jinjing a7a22d5e18
Display draft PR status under tasks (#6119)
* fix: address review findings

* Improve accessibility and refactor GitHub work item status helpers

- Add aria-label and aria-hidden attributes to the task ID pill and icons to make them screen-reader friendly.
- Refactor getTaskPageGitHubPRIconTone to use an exhaustive switch statement with explicit type-safety fallbacks.
- Add comprehensive test coverage for draft checks, state labels, and icon tone edge cases.
2026-06-23 00:38:17 -07:00
Brennan Benson 5311ab3867
Group agent session history by project (#5432)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 00:27:21 -07:00
Jinwoo Hong edf98f6578
Add copy link action for linked work items (#6140)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 00:25:56 -07:00
Brennan Benson 17dee0861f
Fix terminal tab switch resume rendering (#6041)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 00:23:34 -07:00
Jinwoo Hong 20a3999968
Fix source control base branch truncation (#6146)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 00:10:55 -07:00
Wolfie b6271bd9f6
feat(activity): focus filter with Cmd/Ctrl+F in Agents view (#6046)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-22 23:20:33 -07:00
Brennan Benson 23db6a7110
Preserve linked work drafts during workspace startup (#6107)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 23:18:04 -07:00
ChaDongWun 814363c45f
fix: preserve source control commit drafts across remounts (#6120)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-06-22 22:45:00 -07:00
Ricardo Sawir 6090c671c4
Show project icon colors for provider-backed headers (#6118) 2026-06-22 22:28:11 -07:00
Jinwoo Hong d34c7fd589
fix: restore Linux chrome-sandbox postinstall (#6133)
* fix: restore linux chrome sandbox postinstall

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

* fix: check unprivileged user namespaces for sandbox

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

* fix: always repair linux chrome sandbox permissions

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-22 21:55:08 -07:00
github-actions[bot] 1bbac5c1da release: v1.4.92-rc.1 2026-06-23 04:41:17 +00:00
Jinwoo Hong fe8eb45ca2
Add relay upstream negative cache (#6105) 2026-06-23 00:33:52 -04:00
Jinwoo Hong f3e379d6dc
fix: cache macos computer-use snapshot ax reads (#6130)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 20:57:13 -07:00
Jinwoo Hong 5d7368dcd2
Fix Fira Code ligature repaint in terminals (#6123)
* Fix terminal ligature repaint after addon attach

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

* Fix terminal preview test mock types

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-22 20:55:05 -07:00
Jinwoo Hong c36109ee80
fix: normalize MSYS cwd for Windows terminals (#6126) 2026-06-22 20:54:41 -07:00
Jinwoo Hong 092fd6cde3
Prune stale worktree virtual row cache (#6117)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 20:48:47 -07:00
Omar Shahine bf2a6c1040
Don't enqueue local PR refresh for remote-host repos (fix renderer OOM crash) (#6094)
* Don't enqueue local PR refresh for remote-host repos (fix renderer OOM)

The renderer enqueues GitHub PR refreshes for worktrees. Remote/SSH/runtime
worktrees are meant to refresh through the runtime route (getRuntimeRepoTarget),
but when that route is unavailable — host not the active environment, or
disconnected — the call falls through to the local `gh:enqueuePRRefresh` IPC.
The local handler only resolves repos registered in the local store, so it
rejects every such call with "Access denied: unknown repository path".

With a remote worktree active (e.g. a runtime "Project server" workspace), this
fires on a loop (worktree activation + SWR polling), flooding the renderer with
failed invokes and unhandled rejections. Observed hundreds of these per session;
the renderer JS heap climbs to the V8 ceiling (~3.5GB) and V8 aborts the process
(crash-reports.json: renderer crash, exitCode 5, usedHeapMB == heapLimitMB).

Add isLocalHostPRRefreshCandidate and gate all four enqueue sites on it, so the
local handler only ever receives local-host candidates. Remote candidates with
no available runtime route are skipped (their PR status refreshes once the host
is active/reconnected) instead of spamming a handler that can't serve them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: cover local executionHostId in PR-refresh host guard

Address CodeRabbit nitpick on #6094: add a positive case where a local repo
carries an explicit executionHostId === LOCAL_EXECUTION_HOST_ID, completing
predicate coverage for isLocalHostPRRefreshCandidate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: route PR refreshes by repo host

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

* fix: skip disconnected SSH PR refreshes

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

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 20:47:18 -07:00
Neil f5b50b6091
Document Orca CLI card status (#6122) 2026-06-22 20:43:57 -07:00