Commit Graph
8614 Commits
Author SHA1 Message Date
Siddiqui QamarandJinjing e40ad6a93a fix(source-control): refresh branch compare after upstream changes (#6522)
* fix(source-control): refresh branch compare after upstream changes

- Refresh branch compare when upstream status changes for the same worktree and base ref

- Prevent stale Create PR eligibility from remaining clickable while a newer preflight is loading

- Add regression coverage for upstream-driven compare refreshes and stale Create PR loading precedence

* fix(source-control): preserve review provider during preflight refresh

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-27 20:54:24 -07:00
Jinjing c16aa89ea7 Improve mobile emulator pairing startup (#6527)
* Implement automated git preparation workflow for mobile PR creation

Introduce a structured hosted review intent preparation workflow to handle
staging, AI commit message generation, committing, and pushing changes
automatically before displaying the pull request composer on mobile.

- Map creation block reasons to descriptive user-facing validation errors
  (e.g., dirty working tree, default branch, detached head) to match desktop.
- Decouple hosted-review business logic into a dedicated service helper.
- Update source control runner hooks to handle the new preparation flow.

* Refactor mobile PR creation to run intent and open URL directly

Remove MobilePrComposeSheet and the local compose form, moving instead
to a direct PR creation workflow that matches the desktop experience.

- Add runMobileHostedReviewCreateIntent to handle the full prepare,
  push, and create sequence.
- Replace useMobileOpenPrSheetRunner with useMobileCreatePrRunner to
  trigger the creation workflow and directly open the created PR URL.
- Simplify state management by removing showPrSheet, prPrefill, and
  associated local compose sheets.

* Propagate git status and commit state on PR creation failure

Update `MobileHostedReviewCreateIntentOutcome` and the local change
commit helper to include optional `committed` and `status` fields in
their failure results.

This ensures that if PR preparation fails, callers still receive the
current repository status and know if their local changes have already
been committed.

* Add tests for mobile hosted review creation flow

Introduce unit tests for runMobileHostedReviewCreateIntent to verify
different scenarios of creating a hosted review on mobile, including:

- Successful flow including staging, committing, pushing, and creating
- Eligibility block handling (e.g., authentication requirements)
- Error reporting when creation fails after an automatic commit

* Block mobile PR creation on unresolved conflicts and refresh status

Prevent creating a hosted review on mobile when there are unresolved
merge conflicts. Also, return the latest git status on failures and
reload it in the UI to keep the source control screen in sync.

* Prefer fetched PR head SHA over cached status SHA for PR checks

On mobile, a create command can commit before opening the review,
meaning the fetched PR's head SHA is fresher than the route's cached
status SHA. Prioritizing the fetched PR head SHA ensures we fetch checks
for the most up-to-date commit.

* Fix mobile PR creation errors and validate branch presence

- Reject branch matches when the status branch is null or missing to
  prevent PR creation when the branch is lost.
- Display actual PR creation errors in the sidebar instead of silently
  ignoring them on failure.
- Trim leading and trailing whitespace from the base branch reference
  before persisting the worktree link.

* Improve mobile emulator pairing startup
2026-06-27 18:48:14 -07:00
Jinjing 76331ff597 Create pr not working on mobile (#6523)
* Implement automated git preparation workflow for mobile PR creation

Introduce a structured hosted review intent preparation workflow to handle
staging, AI commit message generation, committing, and pushing changes
automatically before displaying the pull request composer on mobile.

- Map creation block reasons to descriptive user-facing validation errors
  (e.g., dirty working tree, default branch, detached head) to match desktop.
- Decouple hosted-review business logic into a dedicated service helper.
- Update source control runner hooks to handle the new preparation flow.

* Refactor mobile PR creation to run intent and open URL directly

Remove MobilePrComposeSheet and the local compose form, moving instead
to a direct PR creation workflow that matches the desktop experience.

- Add runMobileHostedReviewCreateIntent to handle the full prepare,
  push, and create sequence.
- Replace useMobileOpenPrSheetRunner with useMobileCreatePrRunner to
  trigger the creation workflow and directly open the created PR URL.
- Simplify state management by removing showPrSheet, prPrefill, and
  associated local compose sheets.

* Propagate git status and commit state on PR creation failure

Update `MobileHostedReviewCreateIntentOutcome` and the local change
commit helper to include optional `committed` and `status` fields in
their failure results.

This ensures that if PR preparation fails, callers still receive the
current repository status and know if their local changes have already
been committed.

* Add tests for mobile hosted review creation flow

Introduce unit tests for runMobileHostedReviewCreateIntent to verify
different scenarios of creating a hosted review on mobile, including:

- Successful flow including staging, committing, pushing, and creating
- Eligibility block handling (e.g., authentication requirements)
- Error reporting when creation fails after an automatic commit

* Block mobile PR creation on unresolved conflicts and refresh status

Prevent creating a hosted review on mobile when there are unresolved
merge conflicts. Also, return the latest git status on failures and
reload it in the UI to keep the source control screen in sync.

* Prefer fetched PR head SHA over cached status SHA for PR checks

On mobile, a create command can commit before opening the review,
meaning the fetched PR's head SHA is fresher than the route's cached
status SHA. Prioritizing the fetched PR head SHA ensures we fetch checks
for the most up-to-date commit.

* Fix mobile PR creation errors and validate branch presence

- Reject branch matches when the status branch is null or missing to
  prevent PR creation when the branch is lost.
- Display actual PR creation errors in the sidebar instead of silently
  ignoring them on failure.
- Trim leading and trailing whitespace from the base branch reference
  before persisting the worktree link.
2026-06-27 18:34:58 -07:00
Jinjing 14f0096077 Omit unsupported combined diff tabs from mobile session snapshots (#6520)
Combined diff tabs (such as branch, commit, or uncommitted changes)
use display labels as relative paths and require the desktop-only
combined renderer. Excluding these tabs from the mobile snapshots
prevents mobile clients from incorrectly attempting to read them
via files.read.
2026-06-27 15:56:21 -07:00
Jinjing 32542a8e93 Pass PTY ID directly to terminal restore to prevent race conditions (#6519)
* Pass ptyId directly to restorePaneTerminalFit to avoid race conditions

Avoid re-reading the pane transport after a mobile disconnect race,
which could otherwise restore a recycled pane instead. Passing the PTY
ID directly ensures the correct terminal is restored.

* Prevent reclaiming terminal if PTY ID does not match current pane

Avoid restoring a terminal with a stale PTY ID if a different terminal
has already reused the pane slot. Trigger a state override tick to make
stale portals disappear instead.
2026-06-27 15:27:55 -07:00
github-actions[bot] 70d49af5cd release: v1.4.104-rc.1 [rc-slot:2026-06-27-15] v1.4.104-rc.1 2026-06-27 22:27:08 +00:00
github-actions[bot] a0e7004059 release: v1.4.104-rc.0 v1.4.104-rc.0 2026-06-27 21:55:54 +00:00
Jinjing a94d692cd5 Update quick command button to use plus icon and clearer label (#6517)
Replace the play icon with a plus icon and update the label from
"Command" to "Add Quick Command…" (including localizations).
This provides clearer visual and textual cues that the action creates
a new command rather than running an existing one.
2026-06-27 14:40:33 -07:00
Jinjing ef292cb069 Map mobile special keys to terminal PTY bytes (#6515)
Expand live input mapping to handle escape, tab, delete, insert,
arrows, home, end, page navigation, and F1–F12 keys.

- Safe Map lookup avoids collisions with object prototype methods.
- Enter is excluded to prevent double-sent carriage returns.
- Standardizes byte translation via buildTerminalShortcutKey.
2026-06-27 14:06:25 -07:00
Jinjing c0f4bdd020 Default first-seen mobile terminal tabs to direct input mode (#6509)
Automatically enable direct (live) terminal input for new terminal
handles on mobile, while allowing users to opt out back to buffered
input.

- Track defaulted handles to ensure list refreshes preserve manual
  buffered-mode choices.
- Prune tracked handles from live input sets when terminals are closed.
- Add unit tests for defaulting and pruning logic.
- Include a design doc detailing goals and implementation notes.
2026-06-27 12:12:46 -07:00
github-actions[bot] 9f3cd6b934 release: v1.4.103 v1.4.103 2026-06-27 18:48:05 +00:00
github-actions[bot] c7153a51b4 release: v1.4.103-rc.4 v1.4.103-rc.4 2026-06-27 17:49:27 +00:00
Jinwoo HongandOrca c159b5b31a Update xterm beta packages (#6467)
Co-authored-by: Orca <help@stably.ai>
2026-06-27 10:44:00 -07:00
867c57b93c fix(renderer): answer OSC color queries from active terminal theme (#6502)
* fix(renderer): answer OSC color queries from active terminal theme

- reply to OSC 10/11 foreground/background queries using the resolved xterm theme

- suppress replayed OSC color replies to avoid leaking escape output into fresh shells

- cover theme-derived color replies and replay suppression with focused tests

* test(renderer): cover terminal OSC color query replies

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-27 09:30:29 -07:00
github-actions[bot] 3ce184ca16 Update README downloads badge 2026-06-27 12:46:04 +00:00
github-actions[bot] 62918129d8 release: v1.4.103-rc.3 [rc-slot:2026-06-27-03] v1.4.103-rc.3 2026-06-27 10:43:49 +00:00
Brennan BensonandNeil 38483d5a69 Fix WSL watcher shutdown hang (#6489)
* Fix WSL watcher shutdown hang

* fix: harden WSL watcher startup failures

---------

Co-authored-by: Neil <neil@stably.ai>
2026-06-27 02:47:54 -07:00
Jinjing a8f949d24d Prevent review lookup failures from blocking PR preparation (#6490)
Catch errors during hosted review lookup if local blockers are present.
This ensures that network or API failures do not completely hide the
Create PR preparation UI if we can still guide the user to resolve local
issues first.
2026-06-27 02:37:59 -07:00
Neil 5363fcd668 Update xterm beta packages (#6486) 2026-06-27 02:37:23 -07:00
github-actions[bot] 85ef5871da release: v1.4.103-rc.2 v1.4.103-rc.2 2026-06-27 09:08:01 +00:00
Jinjing 6729f683f6 Fix Orca CLI path resolution and improve registration UI (#6484)
* fix Orca CLI path resolution and improve registration UI

- Hydrate the shell PATH before running installer actions on macOS to
  match the user's terminal instead of launchd.
- Resolve the active macOS command path dynamically against shell PATH
  candidates, ignoring broken symlinks and non-executable files.
- Detect and report conflicts with unmanaged executables shadowing the
  configured command path.
- Add "Preparing..." and "Registering..." loading states to the settings
  and setup panels during preflight checks.

* Fix Orca CLI detection and installation path conflict checks

- Allow detecting a managed Orca command located later in PATH when the
  default path entry is missing or non-executable.
- Avoid raising installation conflicts for unmanaged commands located
  after the default install path, as they will be safely shadowed.
- Translate terminal setup and Orca CLI registration strings for
  Spanish, Japanese, Korean, and Chinese locales.

* Only open terminal when pre-install checks succeed

Prevent the terminal from opening and setting the terminal command if
onBeforeOpenTerminal or refreshPreInstallNotice throws an error.
2026-06-27 02:05:23 -07:00
Jinjing e32a62b913 Force viewport refresh for Windows CJK input (#6488)
When committing East Asian text (e.g., via Microsoft Pinyin) on Windows,
the local terminal renderer can leave newly printed glyphs blank until
a repaint is triggered.

This detects CJK, Korean, and fullwidth Unicode ranges and forces a
viewport refresh when such output is received immediately following
active terminal input on Windows clients.
2026-06-27 02:04:29 -07:00
Jinjing 0cd46ad21e Dim and transition the Create More label on hover (#6479)
Change the "Create more" switch label to use muted foreground by default
and transition to foreground on group hover.
2026-06-27 00:39:44 -07:00
78519d8dce fix: pr-bug-scan validated finding from #6315 (#6471)
* fix: address pr-bug-scan validated finding from #6315

Protect fenced/inline code spans from the HTML stripTags pass in normalizeMobileMarkdownPreviewHtml; blocks stripTags(next) at mobile-markdown-preview-html.ts:95 from deleting <...> inside code.

* Preserve non-tag angle brackets in markdown preview HTML parser

Only strip standard/known HTML tags instead of matching any `<...>`
pattern. This prevents false-positive stripping of generic types
(e.g., `Array<string>`) or math comparisons (e.g., `1 < 2`) in prose.

Additionally, robustify markdown code block preservation by using a
Private Use Area prefix (`\uE000`) and dynamically padding it to avoid
collisions with literal input content.

* Protect code spans when stripping HTML tags in mobile preview

Ensure HTML-like content within code spans is not erroneously removed
by the tag stripping logic. We now protect markdown code blocks and
restore them after stripping tags and decoding HTML entities.

---------

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-26 23:57:17 -07:00
360ce673e7 Fix wobbling session-history loading spinner (#6464)
The "Scanning sessions" loader sat in a `flex items-center gap-2` row
next to a plain text span with no flex-1/min-w-0 sibling to absorb
slack. Both items default to flex-shrink: 1, so the SVG could be
compressed below its 14px width while keeping 14px height — a
non-square box shifts the rotation pivot off center, making the icon
drift instead of spinning in place.

Add `shrink-0`, matching every other text-adjacent spinner in the app.

Co-authored-by: Neil <neil@stably.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 20:19:42 -07:00
Brennan BensonandOrca bf4ed350ae Materialize mobile-only pending session terminals (#6465)
Co-authored-by: Orca <help@stably.ai>
2026-06-26 20:16:52 -07:00
1f968b92c9 Fix browser pane stuck in HTML fullscreen (#6442) (#6451)
* Fix browser pane stuck in HTML fullscreen (#6442)

Guest content in a browser pane could enter HTML fullscreen but not
exit it: requestFullscreen() resized the host BrowserWindow into native
fullscreen, and exitFullscreen() had nothing to restore, leaving the
pane stuck.

Set the webview's disableHtmlFullscreenWindowResize preference so HTML
fullscreen is contained to the <webview> element. Exit then works and
fullscreenchange fires as guests expect.

* Apply browser guest fullscreen policy consistently

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-26 20:05:47 -07:00
66b54c4f49 fix(pet): shrink overlay drag area to hug the pet content (#6437)
* fix(pet): shrink overlay drag area to hug the pet content

The pet overlay's `pointer-events-auto` handle used `size-full`, so the
entire `size × size` box (default 180px) was draggable even where the pet
was transparent. Non-square pets left a large dead-zone: the bundled
Claudino (320×180) renders 180×101 in the box, leaving a ~79px empty but
draggable band; OpenCode/Gremlin (252×320) render 142×180, leaving ~38px
on the left.

Restructure the overlay into three layers: the outer box and a new
centering layer stay `pointer-events-none`; only an innermost
`w-fit`/`h-fit` wrapper opts back into pointer events and carries the drag
handlers, cursor, bob animation, and `touch-action`. A `min-w`/`min-h`
floor keeps it grabbable during the image-load window when the wrapper
would otherwise collapse to 0×0.

Also size the `DetectedSpriteFrame` canvas to one fixed footprint bounding
the largest scaled frame (instead of the full box) so detected sprites
tighten too, with frames re-centered within that footprint.

Drag math, viewport clamping, and persisted position are unchanged — they
remain keyed to the outer box, so dragging, edge-clamping, and saved
positions behave exactly as before.

* fix(pet): cap the img fallback at the pet size

The w-fit/h-fit drag wrapper is fit-content, so the img's max-w/h-full had
no fixed box to resolve against and rendered at intrinsic size, overflowing
the persisted size box that clamping still assumes. Cap explicitly with
maxWidth/maxHeight: size. Addresses CodeRabbit review on #6437.

* test(pet): cover overlay hit area render branches

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-26 19:55:02 -07:00
Brennan BensonandOrca 5fd9f0c62c Prevent mobile worktree selection from focusing desktop (#6461)
Co-authored-by: Orca <help@stably.ai>
2026-06-26 19:34:33 -07:00
github-actions[bot] ba88e27cdc release: v1.4.103-rc.1 v1.4.103-rc.1 2026-06-27 01:55:20 +00:00
Brennan Benson d03e99c89a Show accurate PR status for local worktrees (#6460) 2026-06-26 18:51:51 -07:00
github-actions[bot] b899aef1f9 release: v1.4.103-rc.0 v1.4.103-rc.0 2026-06-27 00:55:18 +00:00
Brennan BensonandOrca d18cdc693f Reset agent sleep after terminal visits (#6450)
Co-authored-by: Orca <help@stably.ai>
2026-06-26 17:41:12 -07:00
Brennan BensonandOrca e1f93238d1 Align mobile review actions with desktop (#6444)
Co-authored-by: Orca <help@stably.ai>
2026-06-26 17:35:32 -07:00
Brennan Benson 8c81c30f6a Keep merged PRs visible after refreshes (#6456) 2026-06-26 17:15:14 -07:00
github-actions[bot] e2bf3e4466 release: v1.4.102 v1.4.102 2026-06-27 00:12:32 +00:00
Jinjing e6dc4d4d52 Update Android APK README link
Show the verified mobile-android-v0.0.16 APK version in the README download links.
2026-06-26 17:06:36 -07:00
Brennan Benson 5578ffe318 Show the correct agent icon for terminal helpers (#6455) 2026-06-26 15:51:50 -07:00
github-actions[bot] c6bd599ce1 release: v1.4.102-rc.1 v1.4.102-rc.1 2026-06-26 22:07:50 +00:00
Brennan Benson 949b30ea1f Prevent stale terminal redraw fragments (#6449) 2026-06-26 15:03:41 -07:00
Brennan Benson ccb09db440 Keep interrupted Claude turns from appearing active (#6452) 2026-06-26 15:01:55 -07:00
Brennan BensonandNeil 85d626b998 Fix fork PR detection for same-name upstreams (#6446)
Co-authored-by: Neil <neil@stably.ai>
2026-06-26 14:49:19 -07:00
Brennan Benson cdda9fd16d Restore automatic usage tracking for default accounts (#6240) 2026-06-26 14:37:16 -07:00
Jinwoo HongandOrca 4904ffda9a Fix Remote Host downloads and agent status parity (#6436)
* Fix remote host downloads and agent status parity

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

* Address remote download review comments

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

* Avoid inefficient SSH chunk fallback

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-26 14:28:16 -07:00
Brennan Benson d5b1ca7fcd Keep restored terminal panes typeable after sleep (#6447) 2026-06-26 14:12:32 -07:00
Jinwoo Hong 59def7474a Revert Windows terminal clear repaint fix
Manual Windows testing still reproduces displaced input after Ctrl+K.
2026-06-26 14:05:09 -07:00
Jinwoo Hong daab519c5c Fix Windows terminal clear repaint (#6382) 2026-06-26 16:59:00 -04:00
Brennan BensonandNeil d188e7d2f6 Recover Windows worktree deletes from long paths (#6433)
Co-authored-by: Neil <neil@stably.ai>
2026-06-26 13:28:10 -07:00
Brennan BensonandOrca 4a98b11e77 Import linked worktrees under one project (#6441)
Co-authored-by: Orca <help@stably.ai>
2026-06-26 13:26:58 -07:00
Brennan Benson 996ab4a224 Preserve terminal output after hidden recovery fallback (#6435) 2026-06-26 12:39:28 -07:00