Commit Graph

5256 Commits

Author SHA1 Message Date
gsxdsm 375c4df8b3
feat(mobile): surface "Link an existing PR" in PR sidebar empty state (#5963)
* feat(mobile): surface "Link an existing PR" in PR sidebar empty state

The mobile link-PR building blocks (MobileLinkPrForm, linkMobilePr,
parseGitHubPrReference) existed and were tested, but had no entry point —
only unlink was wired up. Add a "Link an existing PR" action to the no-PR
empty state that opens MobileLinkPrForm and refetches the sidebar on
success, mirroring desktop's link flow (GitHub-scoped via worktree.set).

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

* Polish mobile PR link empty state

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-06-22 15:16:42 -07:00
Brennan Benson 20a51978e5
Polish setup guide integration layout (#5856) 2026-06-22 15:15:03 -07:00
Anddy Sahir Agudelo b98fd2ff8b
feat: copy a file from the explorer to the OS clipboard (#5990)
* feat: copy a file from the explorer to the OS clipboard

Add a "Copy" action to the file explorer context menu that puts the
actual file on the system clipboard, so pasting in Finder/Explorer/a
file manager drops the file itself instead of its path as text.

- macOS: write a public.file-url buffer; Finder synthesizes the legacy
  file types it needs for paste.
- Windows: Set-Clipboard -LiteralPath populates the CF_HDROP file drop
  list that Explorer pastes as a file.
- Linux: best-effort, picked by desktop — text/uri-list on KDE,
  x-special/gnome-copied-files on GNOME-family — via wl-copy or xclip.
- Local files only; the action is hidden for remote/SSH files and the
  web client, where no OS clipboard reference is possible.

The platform logic never throws: failures resolve to a structured
result and the renderer surfaces an error toast.

* Review copy-file clipboard safety

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 15:02:38 -07:00
Robert V Hudson 41add74a08
fix: improve terminal contrast in light themes (Tango Light + xterm minimumContrastRatio) (#5986)
* fix: darken Builtin Tango Light ANSI colors for readability

Nine ANSI colors had contrast ratios below 3:1 against the white
background, making CLI output unreadable in light mode. Darkened
to readable Tango shades while keeping the warm palette identity.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: enable xterm minimumContrastRatio and add light theme tests

xterm.js minimumContrastRatio (4.5) auto-adjusts low-contrast ANSI
foreground colors at render time — a safety net for all themes,
including custom imports. Added test coverage for this option and
for the Tango Light ANSI color contrast assertions.

Co-Authored-By: Claude <noreply@anthropic.com>

* chore: trigger CI re-run

---------

Co-authored-by: zhangqinzhong <vhudsongit@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-06-22 14:53:34 -07:00
Rogerio Saulo 1b62f6511e
fix(terminal): attach dropped image files via bracketed paste (#6013)
* fix(terminal): attach dropped image files via bracketed paste

Dragging an image file into a terminal pane wrote the shell-escaped path
as raw PTY input. Terminal TUIs (Claude Code, Codex, etc.) only turn a
path into an image attachment when it arrives as a *bracketed paste*, so
dropped images showed up as a literal path instead of an `[Image]`
placeholder — unlike iTerm2/Warp, which wrap dropped paths in bracketed
paste, and unlike Orca's own clipboard screenshot flow (#2842).

Route dropped image files (by extension, mirroring IMAGE_MIME_TYPES)
through `wrapTerminalBracketedPasteText` with the raw, un-escaped path so
the file-existence check those tools run on the pasted path succeeds.
Non-image drops keep the original shell-escaped, space-separated
behaviour for use in shell commands.

* fix(terminal): separate image paste from following non-image path

A mixed drop where an image precedes a non-image path concatenated the
two: the image bracketed-paste payload has no trailing space, so the
next shell-escaped path was appended directly after it. Add a single
separating space after an image payload only when the next path is a
non-image — back-to-back image pastes are self-delimiting and a stray
space between them would land in the TUI input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Review terminal image drop path handling

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 14:53:03 -07:00
gsxdsm b58478eae0
fix: close mirrored editor tabs on the host so they stop reopening (#5975)
* fix: close mirrored editor tabs on the host so they stop reopening

On web and mobile companions, editor file tabs are mirrored from the
host's runtime-session snapshot, which the host derives from its
authoritative `openFiles`. Closing a mirrored tab only removed it
locally, so the next snapshot re-mirrored the still-open host file and
the tab immediately reopened.

Route the close to the host from the single chokepoint every editor
close funnels through (`store.closeFile`): when the file is mirrored and
a web runtime session is active, send `session.tabs.close` for the host
tab id. The RPC's recorded close-intent suppresses re-mirroring until the
host snapshot catches up, so the local removal is not undone. No-op for
the host's own (non-mirrored) files.

Also fix the desktop `ui:closeSessionTab` handler so a companion-driven
editor close goes through `closeFile` (clears `openFiles`) instead of
`closeUnifiedTab` (tab strip only), which had the same re-mirror bug for
mobile-originated closes.

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

* Fix mirrored editor close import cycle

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

---------

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 14:51:43 -07:00
Ben Newell 10789669ec
fix(file-explorer): allow filtered folder toggles (#5977)
* fix(file-explorer): allow filtered folder toggles

* fix(file-explorer): keep filtered collapse while typing

* fix filtered explorer drag expansion

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 14:04:51 -07:00
github-actions[bot] 63d1e2421d release: v1.4.92-rc.0 2026-06-22 21:00:49 +00:00
Jinwoo Hong 5549ed9c87
Fix open-in launcher path classification (#6098)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 13:49:08 -07:00
buf0-bot[bot] c6146f8cd0
fix: localize terminal ID context menu label
Fix Spanish and Chinese locale values for the terminal context menu Copy Terminal ID item.
2026-06-22 13:48:54 -07:00
Damir Vandic bbc5951958
Reduce idle remote runtime workspace work (#5895)
* Fix idle remote runtime session work

* fix: stamp remote/SSH worktrees with their repo execution host

Remote-runtime and SSH worktrees are fetched/created/reparented through the
owning host, which reports them from its own perspective (hostId defaults to
"local"). After the per-worktree hostId override in #2, that bogus "local"
overrode the repo's runtime owner, so terminals/sessions for a remote worktree
resolved to the local machine instead of the remote (clicking an omarchy-office
worktree opened a shell on the local omarchy-thinkpad).

Re-stamp every runtime worktree payload with the repo's execution host via a
shared withRepoHostId helper, applied at all worktreesByRepo ingress points:
toVisibleWorktrees (fetch), createWorktree, and applyWorktreeLineageUpdate.
Local-owned repos are left untouched, so an explicit local worktree still
overrides a runtime repo owner. Mirrors how repos already get repoWithFetchedOwner.

* fix: auto-discover remote runtime projects on connect

PR #2 gated the global session-tab sync to web clients only, removing the
desktop path that eagerly populated remote projects. With no on-connect repo
fetch left, remote projects only appeared after the user opened the
Add-Project dropdown (which calls fetchRuntimeEnvironmentRepos directly).

Seed an initial repo/worktree/lineage refresh for every runtime environment
that is already connected when useIpcEvents mounts, and for each one that
becomes connected afterward. Reuses the debounced/throttled refresh scheduler,
and works regardless of whether the remote server emits client events.

* fix: tighten idle runtime refresh behavior

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 13:44:25 -07:00
Brennan Benson 3cc610bcc3
Keep closed tab agents from reappearing (#6095) 2026-06-22 13:36:05 -07:00
Lesley Murfin 28824cda78
Don't show local Windows shells for serve-runtime worktrees (#5947)
* Don't show local Windows shells for serve-runtime worktrees

The Windows shell menu (PowerShell/CMD/Git Bash) was offered for a
serve/remote-runtime worktree whose host is not Windows (e.g. a Linux
orca serve), where those local shell choices are meaningless and the
plain New Terminal already opens the runtime's default shell. AND a new
runtimeHostIsNonWindows exclusion into the existing shouldShowWindowsShellMenu
gate, keyed on the probed runtime host platform so a LOCAL Windows-WSL
project runtime (hostPlatform === win32) keeps its shell menu. Adds
regression tests.

Rebased onto current main (was 75 commits stale); net delta unchanged.

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

* Hide runtime Windows shells until host is known

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

---------

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 13:35:32 -07:00
Lesley Murfin 65e2bd0557
Fix floating workspace terminal `selector_not_found` on a remote runtime (#5946)
* Fix floating workspace terminal selector_not_found on a remote runtime

resolveWorktreeSelector threw selector_not_found for the floating-terminal
sentinel id (global-floating-terminal) because it is a repo-less synthetic
session with no entry in the worktree catalog. A remote client paired to this
serve sends that sentinel, so the normal id: lookup failed and the floating
pane rendered black. Resolve the sentinel (bare and id:-prefixed) to a virtual
ResolvedWorktree rooted at the serve user's home so the PTY spawns in a real
existing dir; unknown id selectors still throw selector_not_found. Adds two
regression tests.

Rebased onto current main (was 75 commits stale); net delta unchanged.

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

* Scope floating terminal selector to terminal launches

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

---------

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 13:33:37 -07:00
JinHyeok Jeong e253d46e72
Harden mobile session tab sync
Harden mobile session-tab snapshot reconciliation and terminal creation. Rejects stale mobile snapshots, tombstones locally closed tabs until the publisher catches up, rolls back half-created terminal tabs when their surface never appears, and scopes terminal-create idempotency by worktree.
2026-06-22 13:31:10 -07:00
audichuang 423c2befe1
fix(mobile): keep iOS terminal inputs on the default keyboard (#5876)
* fix(mobile): keep iOS terminal inputs on the default keyboard

iOS treated keyboardType="ascii-capable" as an ASCII-only input surface,
which hides non-Latin keyboards (Zhuyin, Japanese, Korean) from the iOS
keyboard switcher, so terminal users could not switch away from English.

Use the system default keyboard for terminal inputs on every platform so
IMEs stay selectable, while keeping autoCorrect/spellCheck off so commands,
flags, and paths are not rewritten by the OS keyboard. The keyboard-type
helpers now return a single 'default' value; their dead per-platform
branching was removed.

Fixes #5525.

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

* fix(mobile): tighten terminal keyboard comment

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

---------

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 13:24:43 -07:00
Jinwoo Hong 338540bf73
fix: refit after single terminal restore (#6089)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 12:29:18 -07:00
Jinjing 36f8056446
Resolve and clear push targets for linked hosted reviews (#6092)
* Resolve push targets for linked hosted reviews

Automatically resolve and persist push targets for linked GitHub PRs
and GitLab MRs to align source control actions with the review branch.

- Add `ensureHostedReviewPushTarget` to hydrate missing push targets
- Implement GitLab MR push target resolution alongside GitHub PRs
- Block actions from fallback to unrelated upstreams while resolving
- Prevent duplicate concurrent API lookups with in-flight tracking

* Clear stale review push targets when unlinking or replacing reviews

- Ensure unlinking a hosted review or replacing it with another provider
  properly clears the previously associated push target, preventing pushes
  from being steered to outdated review heads.
- Encode explicit push target clears as null over JSON-RPC to bypass the
  automatic omission of undefined properties during transit, then map them
  back to undefined in the main runtime database.
- Add stricter validation to ensure pull request and merge request IDs are
  positive integers, ignoring invalid or dummy numbers like zero.
2026-06-22 11:15:09 -07:00
Jinwoo Hong 7b8adaf5f9
Improve Android mobile release dispatch (#6087)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 10:51:31 -07:00
Jinwoo Hong c6ff9751fa
Hide Codex worker sessions from history (#6062) 2026-06-22 05:22:06 -04:00
github-actions[bot] b1fccada6f Update README downloads badge 2026-06-22 08:29:54 +00:00
Jinwoo Hong a99be09ada
Remove mobile settings enable toggle (#6070)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 01:19:23 -07:00
Neil 531bcc9a0e
build: publish linux arm64 release artifacts (#4755) 2026-06-22 01:07:16 -07:00
Jinwoo Hong 24000561b4
Classify Claude CLI usage shell failures (#6065)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 00:58:32 -07:00
Jinjing b7a2488b8a
Prevent truncation of long workspace and branch names in sidebar (#6058)
Long branch names and workspace titles were getting truncated, hiding
important identity context from developers.

* Add a dynamic `TruncatedSidebarLabel` component that measures text
  overflow and renders a tooltip only when the text is actually truncated.
* Use the new label for branch names in `WorktreeCard`, disabling its
  nested tooltip when parent hover details are active to prevent conflict.
* Update `WorktreeCardDetailsHover` to use `break-words` instead of
  truncating, ensuring full branch and workspace identities wrap and remain
  fully readable in the details panel.
2026-06-22 00:44:06 -07:00
Jinjing 8503110761
Improve mobile emulator start script (#6063)
* Enhance mobile emulator script with --port option and robust IP lookup

Introduce support for configuring the Metro bundler port via --port, and
allow overriding the CLI command name using the ORCA_CLI environment variable.

Additionally, improve LAN IP detection and verification so that Metro URLs
are correctly resolved and tested for reachability. Finally, fix the
worktree argument passed during the emulator attach step.

* Improve mobile emulator script shutdown
2026-06-22 00:41:50 -07:00
Jinjing e2b87dd864
Fix hold-to-talk dictation release matching on keyup (#6056)
Track the specific key and modifier identities from the initial keydown
to construct a robust release matcher. This ensures hold dictation stops
reliably on keyup, even if modifier state flags have already dropped
or if keys are released in a different order.
2026-06-22 00:31:51 -07:00
Jinjing bed2c00df8
fix(i18n): translate new worktree branch deletion messages for v1.4.91 (#6061)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 00:31:29 -07:00
Lesley Murfin a24c91de0d
fix(terminal): don't apply native-Windows ConPTY cursor stripping to remote serve PTYs
Closes #6008
2026-06-22 00:00:44 -07:00
Jinjing c139c704af
Add visible PR comment queue action (#6057) 2026-06-21 23:59:29 -07:00
Jinjing bbfaee424b
Rank Settings search results by relevance (#6050)
* Rank settings search results by relevance

* Keep Settings search content matching ranked entries

* rm design doc
2026-06-21 23:54:06 -07:00
Jinjing a459100d87
Introduce MobileWorkspaceNameInput with delayed auto-focus (#5968)
- Delays input focus by 220ms to ensure animating bottom drawers settle before the soft keyboard is requested, improving focus reliability on mobile.
- Replaces standard TextInputs with this component in tasks workspace creation and the NewWorktreeModal.
2026-06-21 23:51:00 -07:00
Trevin Chow c6d11efbf2
Make PR comments sidebar easier to triage and read (#5996)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-21 23:49:43 -07:00
Jinwoo Hong a2e0bbc5f6
Fix early PTY startup output races (#6015) 2026-06-22 02:48:45 -04:00
Jinwoo Hong 52f45b3559
Handle literal Codex hook trust keys (#5872) 2026-06-21 23:33:57 -07:00
Trevin Chow bfb778570a
feat(tabs): redesign tab splits and terminal pane discoverability (#5927)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-21 23:09:01 -07:00
github-actions[bot] c0f1d386c7 release: v1.4.91-rc.0 2026-06-22 05:58:59 +00:00
Jinjing 0aedaf2d69
Fix agent hooks CLI runtime client test
Exercise the agent hooks CLI test through main() with a mocked RuntimeClient class so typecheck no longer relies on a partial object cast.
2026-06-21 22:51:44 -07:00
Brennan Benson 88da1808f7
Prevent stale sleeping agents from resuming (#6018)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 22:39:09 -07:00
Jinjing fc254deef5
Default new worktree card style on for fresh profiles (#6047)
Enable `experimentalNewWorktreeCardStyle` by default on new profiles where
onboarding is open, or when creating a brand-new config file.

- Avoids visual disruption for existing users who already completed
  onboarding by keeping the old style active for them.
- Preserves explicit user opt-outs during migrations and CLI updates.
- Ensures the offline CLI handler mirrors this logic when creating the
  initial configuration file before the desktop client loads.
2026-06-21 22:35:48 -07:00
OrcaWin c1e071870b
Dispose worktree change refresh queues (#6040)
Co-authored-by: Neil <neil@stably.ai>
2026-06-21 21:58:15 -07:00
Maplume 2e03b14cc3
fix(i18n): correct Chinese MT errors and translate Settings panel strings (#5915)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-21 21:23:36 -07:00
Brennan Benson 6c93d311cf
Keep workspace board above the status bar (#6035)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 21:22:22 -07:00
Jinwoo Hong a8feafe92a
Fix mobile file tab close sync
Close mobile session file tabs through the underlying editor file so desktop stops republishing closed docs/files.
2026-06-21 19:41:48 -07:00
Jinwoo Hong d9b2d89406
Fix Windows NeoVim open-in launcher (#6026) 2026-06-21 21:57:33 -04:00
Brennan Benson 36bdd06aa8
Prevent duplicate startup command echoes (#6023)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 18:51:44 -07:00
Brennan Benson 8228155e4d
Improve preserved branch cleanup after squash merges (#6014)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 18:48:59 -07:00
OrcaWin 2ed4346c2d
Coalesce renderer worktree change refreshes (#6020)
Co-authored-by: Neil <neil@stably.ai>
2026-06-21 18:41:12 -07:00
Brennan Benson 1b5c4738d2
Prevent duplicate agent resume tabs after wake (#5882)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 18:38:41 -07:00
Brennan Benson 8c2a34c39d
Align folder workspace sidebar indentation (#6019)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 18:34:48 -07:00