Prevent the source selection popover from opening automatically during
dialog autofocus or other programmatic focus calls upon dialog mount.
Instead, defer opening the popover until the user actively interacts
with the name input (clicks or typing) or moves focus to it from another
control within the workspace composer.
* fix: explain missing build tools when SSH relay native deps fail to compile
Deploying the relay to a remote host runs `npm install` for node-pty and
@parcel/watcher on first connect. node-pty ships no Linux prebuild, so that
install falls back to `node-gyp rebuild`, which needs a C/C++ toolchain. On a
host without one it dies with an opaque `not found: make` and the error the
user sees is just `... npm install ... failed (exit 1):` with nothing after it.
After a failed install on Linux, probe the remote for make/gcc/g++/python3 and,
when the toolchain is missing, throw an error that names what is missing and
gives the exact install command for the detected package manager
(apt-get/dnf/yum/pacman/apk/zypper), falling back to a short per-distro list.
The raw npm/node-gyp output is kept as the underlying error for triage.
Windows hosts are unaffected (node-pty has win32 prebuilds); the probe and the
rewritten message only run on Linux relays.
* fix: preserve SSH relay native install output
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
OMP creates SQLite databases like agent.db lazily under the agent PTY
directory. Proactively pre-create and link these database files (plus WAL/SHM
sidecars on Windows) to the user's persistent store so that credentials and
history are not lost in disposable overlays.
- Implement `mirrorOmpPersistentSqliteFiles` to handle linking `agent.db`
- Support both Unix symlinks and Windows hardlinks for writable state
- Extract prefill and titlebar extension source code into separate files
* Show disabled Create PR button in header when branch is not ready
Ensure the source control toolbar does not look blank or shift
unexpectedly when the branch has no changes or cannot yet create
a pull request.
- Add helper to resolve disabled Create PR header actions with contextual
titles (e.g. commit in progress, no changes, unsynced commits)
- Keep the header button visible as a disabled anchor instead of hiding it
- Prevent the Create PR button from stretching across the toolbar when
visible without a hosted review
* Refactor Create PR flow with inline-composer toggle and direct-create pa
Co-authored-by: Orca <help@stably.ai>
* Streamline Create PR UX and format git pull policy errors
Simplify the source control review-creation flow by removing the
collapsible composer state and corresponding toolbar buttons, always
rendering the PR composer directly when available.
Additionally, add a specialized notice component for divergent branch
errors that parses git pull policy issues and provides quick-copy
buttons for configuring merge, rebase, or fast-forward behaviors.
* Add loading state to Create PR and tooltip to disabled AI button
- Display a disabled loading state for the Create PR action while review eligibility is fetching to avoid layout flashing.
- Use aria-disabled and Tooltip for the AI commit message generator button to ensure tooltips are viewable when disabled.
---------
Co-authored-by: Orca <help@stably.ai>
Introduce a `fileContentReloadNonce` on open files and a new
`forceContentReload` option for `openFile`. When terminal links or file-open
actions re-open an existing clean tab, increment the nonce to trigger a
refetch of the file content. This provides a manual recovery path for when
remote file watchers miss external writes.
Restore the quieter abort-merge styling that was accidentally reverted
during the host-context merge repair in #5071. Abort merge and abort
rebase now match the Review conflicts outline button treatment.
* Refactor SourceControl header into extracted, testable subcomponents
Co-authored-by: Orca <help@stably.ai>
* Extract branch context stats into dedicated module with upstream status
Co-authored-by: Orca <help@stably.ai>
* Refine source control header layout and add branch comparison i18n
* Right-align branch status stats in the context row and left-align the base ref button to optimize space usage.
* Make the expanded filter input occupy the full toolbar width, hiding PR links and overflow menus when active, to prevent squeezed input.
* Add translation keys and localizations for commits "behind" and "even with" the base branch.
---------
Co-authored-by: Orca <help@stably.ai>
* Make Create PR intent resilient to worktree switching
Co-authored-by: Orca <help@stably.ai>
* Restrict PR creation sidebar actions to foreground worktrees
- Prevent switching tabs and opening the PR URL when a background
worktree's PR creation finishes.
- Extract commit eligibility checking into a dedicated module and
disable the commit message textarea during operations or when
ineligible.
- Fix flakiness in the remote runtime request connection test.
* Abort Create PR if branch changes during details generation
If the branch changes within the active worktree while review details
are being generated, the Create PR flow now aborts and shows a muted
notice prompting the user to retry.
- Allows worktree navigation during PR details generation without
treating it as an intent conflict.
- Adds localized strings for the new retry notice.
- Uses platform-independent paths in tests for cross-platform support.
---------
Co-authored-by: Orca <help@stably.ai>
Prevent Radix Dialog's scroll lock from canceling mouse wheel events
inside the search results list by manually handling wheel events. Also,
add flex and max-height constraints to the dialog layout to support
clean scrolling behavior.
* Redesign mobile emulator callout arrow with CSS triangle and improve dar
Co-authored-by: Orca <help@stably.ai>
* Improve styling and theme adaptability of emulator intro callout
Use theme variables (--border and --foreground) instead of hardcoded
black and white opacities to ensure borders adapt properly to different
color themes.
Additionally:
- Align the horizontal position of the callout arrow pseudo-elements.
- Update JSX classes to use token-based rounding and borders.
---------
Co-authored-by: Orca <help@stably.ai>
* Enable pushing to configured push targets for existing fork reviews
* Resolve push targets using branch.pushRemote, remote.pushDefault,
and URL-valued remotes normalized to matching named remotes.
* Support this push target resolution on both local and relay/SSH
git handlers to prevent drift in SSH worktrees.
* Offer "Push" instead of "Publish Branch" in the Source Control UI
when a linked review exists and a valid push target is available.
* Prevent pushing a feature branch's base branch (e.g. main) directly
to a fork via remote.pushDefault.
* Keep fork push target when contributor branch matches base branch name
Ensure that a fork push target is not incorrectly discarded when its
branch name matches the base branch name on another remote (for example,
targeting fork/main while the base is origin/main).
Previously, the matching logic only compared the branch leaf name, which
treated different remotes as identical and disabled the push target. We
now qualify the ref comparison with the remote name to differentiate them.
- Document and update the CLI help, specs, and tests to explicitly guide
users toward `orca terminal create --worktree active --command <agent>`
to launch a fresh agent session in the current checkout.
- Update orchestration and orca-cli skills to prefer active-worktree
terminals when dependent on uncommitted files or active branch state,
distinguishing them from separate worktree creation.
Instead of relying solely on transient live usage snapshots to determine
status bar visibility, incorporate durable settings configuration (e.g.,
managed accounts, OAuth enablement, or session cookies).
This keeps provider items in a pending/fetching state during initial
hydration or transient failures, preventing UI flickering and ensuring
the setup CTA does not prematurely display before settings load.
* fix: address pr-bug-scan validated finding from #5304
Added stream.sent=false reset in handleAuthRejection retry branch so e2ee_authenticated replay re-sends active terminal.subscribe after auth-retry reconnect.
* test: verify terminal resume after auth retry reconnect
* Fix remote runtime client timeout refresh on mobile
Avoid using Node-specific Timeout.refresh directly on platforms like
mobile where setTimeout returns a standard number/timer ID. Instead,
fallback to clearTimeout and setTimeout if .refresh is unavailable. Also
add missing path mappings to the mobile tsconfig.
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
## Summary
- add mobile Settings → Browser → Open terminal links
- route terminal HTTP(S)/OSC 8 link taps to either the streamed Orca browser or the phone browser
- keep existing file-path tap behavior intact
## Verification
- pnpm --dir mobile test
- pnpm --dir mobile lint
- pnpm --dir mobile exec tsc --noEmit
- git diff --check
* Add worktree-list sidebar for mobile tablet/foldable layouts
On wide canvases (tablet/foldable, >=700pt) the per-host worktree list now
renders as a persistent left sidebar with the routed screens (terminal,
source control, review, accounts, tasks) shown in a detail pane to its
right — mirroring the desktop's sidebar + center layout. Phones keep the
existing single-pane stack navigation unchanged.
- Reuse the existing worktree-list screen as the sidebar via an `embedded`
mode (props for hostId/action, mount-driven fetch since a sidebar is never
the focused route, hide-sidebar control in place of the back button, and
open-into-detail-pane navigation that replaces rather than stacks).
- The default host route renders an empty WorkspaceDetailPlaceholder on wide
layouts (the list lives in the sidebar) and the full screen on phones, so
exactly one instance mounts either way.
- Hide button collapses the sidebar to give the detail pane full width; an
elevated reveal tab brings it back.
- Detail-pane screen transitions use `animation: 'none'` while the split is
active so workspaces swap instantly instead of sliding and flashing the
screen beneath.
- Drag the sidebar's right edge to resize (clamped 280-560pt, detail pane
kept >=320pt, tap-transparent so list rows still work); width persists via
AsyncStorage.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Address PR review feedback (#5505)
- Clamp the restored/persisted sidebar width against the current window and
re-clamp when the window shrinks, so a width saved on a larger device can't
starve the detail pane below MIN_DETAIL_WIDTH. Extract a shared
clampSidebarToWindow helper reused by load, window-resize, and drag.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Polish mobile tablet sidebar
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>
* Resolve and fetch the review target branch (compareBaseRef) during PR and MR worktree creation.
* Persist this ref on worktree metadata instead of pinning the head SHA.
* Dynamically repair existing worktrees with stale commit SHA compare bases in the Source Control UI using linked review metadata.