Commit Graph

289 Commits

Author SHA1 Message Date
Jinjing bc2f5145da
Allow deleting downloaded speech models on desktop and mobile (#5794)
* Allow deleting downloaded speech models on desktop and mobile

Implement safe deletion of local speech models across desktop and
mobile platforms.

- Add a shared helper to coordinate STT service teardown, file deletion,
  and voice settings cleanup.
- Prevent deleting speech models that are currently in use or starting.
- Update desktop and mobile settings UIs to expose the delete action.

* Track multiple pending model deletions and update action disabling

- Replace the single pending delete ID string state with a Set of IDs on desktop settings to track multiple concurrently deleting models.
- Switch the desktop delete action to use the standard themed Button component.
- Disable all row interactions on the mobile voice model list when any model action is busy.
- Add unit test coverage verifying that individual row delete button disabled states behave correctly.
2026-06-19 12:31:11 -07:00
Neil 4e4fa9b8ee
chore(deps): resolve Dependabot security alerts (no overrides) (#5795)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 01:57:47 -07:00
Wolfie f19390a8a2
fix(mobile): clarify legacy voice settings runtime error (#5751)
* fix(mobile): clarify legacy voice settings runtime error

* test(mobile): cover actual legacy speech method miss

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-18 22:05:08 -07:00
Carlos Baraza f534cd5bc3
fix(mobile): downscale oversized clipboard images so paste no longer fails (#5601)
* fix(mobile): downscale oversized clipboard images so paste no longer fails

Pasting a large clipboard image (high-res screenshot or photo) failed with
'Image too large to paste' because the re-encoded PNG exceeded the 24 MiB
base64 upload cap, with nothing shrinking it first.

Now an oversized image is downscaled to fit the budget before upload:
- computeMobileClipboardImageDownscale() picks target dimensions by area
  (~sqrt(budget/actual)), with a bounded retry loop since PNG size is nonlinear.
- prepareMobileClipboardImageBase64() drives the loop with an injected resizer,
  so the byte/dimension logic is unit-tested without native modules.
- The resizer stages the image to a temp file and hands ImageManipulator a
  file:// URI; the iOS native loader (Data(contentsOf:)) cannot decode large
  base64 data URIs, so a data URI made renderAsync throw.

Adds expo-image-manipulator and expo-file-system.

* fix(mobile): fail fast when resized clipboard image has no base64

Empty base64 from saveAsync would pass the downstream base64 check and
upload a corrupt image; throw instead so the paste surfaces an error.

Addresses CodeRabbit review on #5601.

* Fix mobile clipboard image resize cleanup

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-18 18:25:06 -07:00
Carlos Baraza d46349ce82
fix: improve mobile link modifier handling (#5597) 2026-06-18 16:48:43 -07:00
Carlos Baraza 688137c916
fix: improve mobile terminal glyph rendering (#5602)
* fix: improve mobile terminal glyph rendering

Align the mobile companion WebView terminal with the desktop xterm setup so Claude output renders correctly on iOS.

- Upgrade the embedded xterm CDN stack to the desktop beta line
- Load Unicode 11 before replaying terminal bytes
- Enable WebGL rendering with context-loss fallback
- Preserve Claude status dots as text presentation
- Add regression coverage for the mobile terminal setup

* Fix mobile status dot normalization edge cases

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-18 16:30:53 -07:00
Jinwoo Hong 06d674b35d
Fix mobile folder workspace visibility (#5679)
Co-authored-by: Orca <help@stably.ai>
2026-06-17 23:18:34 -07:00
Jinwoo Hong c9bd61376f
feat(mobile): combine PR sidebar and checks parity (#5641)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-06-17 22:52:12 -07:00
Jinjing bd546b47d2
Redesign mobile driver overlay layout and clarify action copy (#5647)
Clarify the mobile-driving experience by updating outdated terminology and
making actions more precise. Generic "Mobile" references are replaced with
"Phone", and action buttons now explicitly distinguish between "this"
terminal and "all" terminals. Also introduces a modern card layout featuring
a smartphone icon badge and a live status indicator, complete with updated
locales, tests, and a standalone HTML preview.
2026-06-17 19:21:42 -07:00
gsxdsm c2acb3c11b
fix(mobile): open the file tab when a terminal file path is tapped 2026-06-17 18:15:53 -07:00
leofoo 99b5de6e3d
Add Ante as a supported CLI agent (#5193)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-17 11:12:45 -07:00
buf0-bot[bot] 67a95c7400
fix: pr-bug-scan validated finding from #5304 (#5342)
* 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>
2026-06-16 17:21:13 -07:00
Jinwoo Hong 83bee02b47
fix(mobile): add terminal link routing setting
## 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
2026-06-16 17:05:12 -07:00
gsxdsm 21a01c7d6b
Mobile: worktree-list sidebar for tablet/foldable layouts (#5505)
* 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>
2026-06-16 16:50:38 -07:00
gsxdsm 50b324a8c8
Fix file loading on web and mobile remote clients 2026-06-16 14:39:25 -07:00
gsxdsm f47832cce0
fix(mobile): show usage bars for system-default login (#5499)
Show mobile account usage for Claude/Codex system-default logins when rate-limit data exists without Orca-managed accounts.\n\nReview fixes:\n- match inactive account usage to the runtime rateLimits payload shape\n- share usage-bar state so stale window data remains visible during transient fetch errors\n- add regression coverage for both cases
2026-06-16 13:29:45 -07:00
Jinwoo Hong c8f583c90a
Set CODE_SIGN_IDENTITY to Apple Distribution for iOS archive
Pin CODE_SIGN_IDENTITY so the archive uses the imported distribution cert. Admin-merge: only repo-wide pr.yml break failing.
2026-06-16 00:28:47 -07:00
Jinwoo Hong 7bbea13e70
Set team + profile on iOS archive for manual signing
Pass DEVELOPMENT_TEAM/CODE_SIGN_STYLE/PROVISIONING_PROFILE_SPECIFIER to the archive. Admin-merge: only repo-wide pr.yml break failing.
2026-06-16 00:24:27 -07:00
Jinwoo Hong 8b05f1e631
Fix iOS Fastfile: read profile name from SIGH_NAME
Use SIGH_NAME instead of nonexistent SIGH_PROFILE_MAPPING. Admin-merge: only repo-wide pr.yml break failing.
2026-06-16 00:19:53 -07:00
Jinwoo Hong 4481e2fabf
Use manual signing with explicit profile for iOS export
Fetch explicit profile via sigh + API key, export with manual signing against imported cert. Avoids cloud-signing permission error. Admin-merge: only repo-wide pr.yml break failing.
2026-06-16 00:15:45 -07:00
Jinwoo Hong 1f80d8bcd0
Fix iOS export signing: pass auth key to exportArchive
Add export_xcargs with ASC auth key so the export step can fetch the distribution profile. Admin-merge: only repo-wide pr.yml break failing.
2026-06-15 23:46:19 -07:00
Jinwoo Hong da386fae8c
Fix iOS auth key: decode .p8 PEM from secret directly
Decode base64 ASC_API_KEY_P8 directly into the .p8 Tempfile so xcodebuild gets valid PEM. Admin-merge: only repo-wide pr.yml break failing.
2026-06-15 23:10:31 -07:00
Jinwoo Hong 3691267939
Fix iOS signing: pass App Store Connect API key to xcodebuild (#5476)
Feed xcodebuild the ASC API key via xcargs (-authenticationKeyID/IssuerID/Path) so -allowProvisioningUpdates can generate a profile. Materialize the .p8 from api_key[:key] to a Tempfile.

Merged with --admin: only failing check is the repo-wide pr.yml break, unrelated.
2026-06-15 23:06:31 -07:00
Jinwoo Hong b5e6390ad2
Split mobile release into separate iOS and Android workflows (#5475)
Splits the combined Mobile Release workflow into mobile-ios-release.yml (mobile-ios-v* tags) and mobile-android-release.yml (mobile-android-v* tags) so iOS App Store review no longer gates Android. Also fixes iOS signing by passing the App Store Connect API key to build_app so xcodebuild can provision via -allowProvisioningUpdates.

Merged with --admin: the only failing check is the repo-wide pr.yml '@/lib/utils' vitest break affecting all PRs, unrelated to this change.
2026-06-15 23:01:44 -07:00
Jinwoo Hong adf5ccbc92
feat(mobile): view image files from the Files tree (#5472)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 22:30:05 -07:00
Jinwoo Hong e3bf7d8614
feat(mobile): pickers, workspace parity, active-workspace focus, tap-to-open, source-control parity, artifact viewing (#5330)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 22:02:51 -07:00
Jinwoo Hong 6740c00351
Build and ship iOS to TestFlight from CI (#5468)
Adds an ios-build job to the Mobile Release workflow (build + sign + TestFlight upload on a macOS runner via fastlane + App Store Connect API key), and fixes a pre-existing Mobile Checks bug where the mobile typecheck needed root deps for ../src imports.

Merged with --admin: the only failing check is the repo-wide pr.yml '@/lib/utils' vitest resolution break affecting all open PRs, unrelated to this change.
2026-06-15 21:38:00 -07:00
gsxdsm 26121a4315
fix(mobile): respect Android device rotation lock instead of forcing rotation (#5403)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* fix(mobile): respect Android device rotation lock instead of forcing rotation

The app rotated on Android even when the system auto-rotate lock was on.
Expo's top-level `orientation: "default"` emits `android:screenOrientation="unspecified"`,
which auto-rotates on many devices regardless of the lock, and the
`react-native-screens` `orientation: 'all'` screenOption mapped to FULL_SENSOR,
which forces rotation outright.

react-native-screens exposes no orientation value that honors the rotation lock
(even 'default' calls setRequestedOrientation(UNSPECIFIED) at runtime, overriding
the manifest). The Android value that respects the lock is "fullUser", which must
come from the manifest. So:

- Add an `android-respect-rotation-lock` Expo config plugin that sets the main
  activity to `android:screenOrientation="fullUser"` (honors the lock; allows all
  orientations when unlocked, matching iOS).
- Remove the runtime `orientation` screenOption so the manifest value governs.

iOS behavior is unchanged (UISupportedInterfaceOrientations still lists all four).

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:45:58 -07:00
gsxdsm cd31cd702d
feat(mobile): add terminal text size (zoom) setting (#5388)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* feat(mobile): add terminal text size (zoom) setting

The mobile terminal fits the desktop's full column count to the phone
width with a CSS scale, which cancels out xterm's raw fontSize — so there
was no way to make text bigger or smaller. Add a persisted baseline zoom
multiplier the WebView applies on top of the fit.

- Settings → Terminal → "Text size": 50%–200% presets.
- Pinch-to-zoom in the terminal snaps to the same presets and persists.
- Per-device display preference; does not change the desktop terminal.
- Extracts the xterm WebView HTML into terminal-webview-html.ts to keep
  TerminalWebView.tsx within its max-lines budget.

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

* refactor(mobile): make terminal text size reflow columns instead of CSS scaling

Text size now drives the real xterm fontSize rather than a CSS transform
baseline. A larger cell means fewer columns fit the phone width, so the
existing measure -> terminal.updateViewport pipeline resizes the PTY and the
shell rewraps to the new width (and smaller sizes show more columns). Pinch
still snaps to a preset, but now changes the font size and reflows instead of
scaling pixels; the refit hook re-fits the PTY whenever the scale changes.

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

* fix(mobile): restore terminal touch scrollback (undefined contentWiderThanViewport)

The single-finger touchmove handler gated horizontal panning on
contentWiderThanViewport(), which is never defined — so every one-finger
touchmove threw a ReferenceError before reaching the vertical-scroll code
below it, killing all touch scrolling including scrollback.

Replace the call with the inline overflow check clampPan() already uses
(scrollWidth * getTotalScale() > innerWidth). Vertical scroll now always runs;
two-finger pinch-to-zoom is unaffected. Merged two adjacent var decls to keep
the file under its max-lines cap without a disable.

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

* test(mobile): guard terminal text scale viewport refit

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@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-15 13:14:58 -07:00
gsxdsm d17c22c826
feat(mobile): add terminal keyboard autocomplete toggle (#5348)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* feat(mobile): add terminal keyboard autocomplete toggle

Terminal command inputs disable autocorrect/suggestions and use a
password-class keyboard so the OS never rewrites commands, flags, or
paths. Some users want phone-style typing in the command bar.

Add a Settings → Terminal "Autocomplete & autocorrect" toggle
(persisted locally, default off). When on, the command bar enables
autoCorrect/spellCheck and uses the default keyboard so Android shows
its suggestion strip; iOS drops the ascii-capable restriction. The
direct keyboard-capture input is unchanged — it streams raw keystrokes
where suggestions cannot apply.

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

* fix(mobile): remount command input when autocomplete toggles

Android caches the IME inputType at mount, so flipping the toggle did
not switch suggestions on until the field remounted.

* fix(mobile): guard autocomplete pref loads against unmount and fast toggle

Address review feedback: the settings toggle's initial load could clobber
a fast user toggle, and the session focus-effect could setState after the
screen unfocused. Both now use a guard flag.

* test mobile terminal autocomplete preference

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@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-15 13:07:07 -07:00
Jinwoo Hong 618b5d3177
fix(mobile): retry handshake before latching auth-failed (#5200) (#5304) 2026-06-13 14:25:43 -07:00
Antonio Cardoso c4fade90e7
Add mobile Review Changes workflow (#5313)
* Add mobile diff review

* Wrap mobile review notes prompt

* Fix mobile review unreviewed navigation

* Clear review completion when a refreshed diff invalidates a reviewed file

mergeMobileDiffReviewState invalidates a file's reviewed flag when its
diff identity changes, but left completedAt set — inconsistent with
markUnreviewed. Drop completedAt on invalidation and add a regression
test.

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-13 14:24:26 -07:00
Jinwoo Hong 71bfbbf840
Fix rich markdown image paste bloat (#5290)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 16:48:09 -07:00
Jinwoo Hong 55db0ab12e
Fix Windows multiline terminal paste (#5291) 2026-06-12 19:12:08 -04:00
Yang,Zhou 74e2c952f1
feat: add Devin CLI as supported TUI agent (#5282)
* feat: add Devin CLI as supported TUI agent

Register Devin across shared agent config, telemetry, desktop/mobile
catalogs, localization, and README. Uses stdin-after-start prompt
delivery with --permission-mode bypass default args.

* test: assert Devin default --permission-mode bypass in startup plans
2026-06-12 16:10:09 -07:00
Jinwoo Hong 6837cca9f3
Fix Tasks PR detail drawer and GitHub attachment videos (#5288)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 16:02:09 -07:00
Carlos Baraza 1205457d53
feat(mobile): paste clipboard images into terminals (#5264) 2026-06-12 14:37:43 -07:00
Jinjing dccea75b0e
Fix active tab scrolling and editor keyboard layout on mobile (#5271)
* Improve mobile session tab scrolling and editor keyboard layout

- Auto-scroll the active session tab into view within the horizontal
  tab strip, using a new layout-aware utility with minimal scrolling.
- Use visual viewport measurements in the editor WebView to accurately
  report keyboard insets and lift floating controls above the keyboard,
  as native events can under-report covered areas.

* Fix active tab scrolling and normalize editor keyboard inset

- Ensure the active session tab is scrolled into view immediately when
  its layout finishes to prevent it from remaining hidden off-screen.
- Round, clamp, and validate WebView visualViewport bottom measurements
  to avoid rendering inconsistencies from fractional or invalid insets.
- Trigger an immediate keyboard inset report on script initialization.

* Update tabStripOffsetRef when scrolling mobile tab strip

Ensure the cached offset is updated to match the next scroll position. Without this update, subsequent scroll calculations would use stale offset values.
2026-06-12 11:09:08 -07:00
Jinwoo Hong 58ce969fcb
fix(mobile): preserve repeated iOS terminal hyphens (#5222)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 15:53:56 -07:00
Jinwoo Hong 7e73cd4719
fix(mobile): use Claude icon for Agent Teams
Use the Claude logo for the Claude Agent Teams option on mobile.
2026-06-11 14:38:36 -07:00
Jinwoo Hong 469cbe387d
feat(mobile): drag-to-reorder terminal shortcut keys in settings (#5076)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 14:05:07 -07:00
Jinwoo Hong c9ab6018da
Fix duplicate mobile notifications (#5206)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 12:15:06 -07:00
Brennan Benson a4a1b12d80
Move workspace board to sidebar bottom toolbar (#5146)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 21:51:58 -07:00
Jinwoo Hong 93e59ab086
fix(mobile): recover Android remote sessions without an app restart (#5061)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 17:55:20 -07:00
Jinwoo Hong 28fe76f696
Fix desktop terminal restore after mobile fit (#5039)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 12:11:48 -07:00
Jinwoo Hong b42b286879
Fix mobile markdown actions above keyboard (#4945)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 21:27:33 -07:00
Jinwoo Hong 66035716f0
Fix mobile diff syntax highlighting (#4922)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:41:27 -07:00
Jinwoo Hong f5efdd5945
Fix remote runtime terminal sharing with mobile (#4901)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 14:26:07 -07:00
Jinwoo Hong 880fd964ac
Fix issue workspace names with apostrophes (#4848)
Co-authored-by: Orca <help@stably.ai>
2026-06-07 19:57:52 -07:00
Jinwoo Hong c23ab4323c
Prepare mobile 0.0.12 (#4627)
Co-authored-by: Orca <help@stably.ai>
2026-06-04 01:06:45 -07:00
gsxdsm a19e16f718
fix: Android terminal text overflow and stale viewport after unfold
Fix Android terminal text overflow and stale foldable viewport handling.

- Pin terminal WebView textZoom so Android system font scale cannot inflate xterm glyphs past measured cells.
- Refit mobile terminal viewport on window dimension changes for fold/unfold, rotation, and split-screen.
- Harden viewport refit fallback handling for stale async runs and updateViewport responses.

Fixes #4579
2026-06-04 02:38:57 -04:00
Hüseyin Serkan Özaydin 4fc28da450
added horizontal screen support (#4316)
Co-authored-by: hsmnzaydn <serkan.ozaydin@applixus.com>
2026-06-03 19:08:41 -04:00
Neil 6dc779c4f4
Address react doctor warnings 2026-06-03 12:48:00 -07:00
Jinwoo Hong aa8451b3e9
Fix mobile Linear issue list parsing (#4576)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 11:06:43 -07:00
Jinwoo Hong 8959535f1b
Auto-dismiss agent notifications on acknowledgement (#4518)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 18:01:23 -07:00
Neil 45aea830ed
Enforce mobile max-lines budgets (#4516) 2026-06-02 15:44:08 -07:00
Jinwoo Hong 46a66dd64a
Prepare mobile 0.0.11 build 2 (#4422)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 17:35:55 -07:00
Jinwoo Hong 5ab1fe09b9
Fix mobile Tailnet pairing (#4415)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 17:30:10 -07:00
Neil 41bf76aef2
chore: gate high-signal react doctor rules
Adds a focused React Doctor oxlint gate for high-signal state/effect rules, disables the noisy js-combine-iterations React Doctor rule, and refactors the mobile new-worktree modal away from prop-change state reset effects.
2026-05-31 22:35:15 -07:00
Neil 6f60541130
Make mobile lint inherit root policy
Squashed from PR #4353.
2026-05-31 21:58:17 -07:00
Neil 0bb62b9d29
Add braces to mobile control flow (#4351) 2026-05-31 21:32:37 -07:00
Jinwoo Hong 319087e5db
Prepare mobile 0.0.11 for iOS
Bump mobile app version to 0.0.11 for iOS App Store submission.
2026-05-31 23:58:59 -04:00
Jinwoo Hong b555e66598
Keep migrated mobile shortcut order canonical (#4349)
Co-authored-by: Orca <help@stably.ai>
2026-05-31 20:48:34 -07:00
Jinwoo Hong a34a6bec7e
Add mobile terminal Space shortcut (#4335)
Co-authored-by: Orca <help@stably.ai>
2026-05-31 20:35:31 -07:00
Neil 12d75587a5
fix: ignore stale mobile socket events 2026-05-31 09:43:36 -07:00
Neil 71d6a30b09
perf: move mobile session cache cleanup to root ref 2026-05-31 09:35:57 -07:00
Neil 7a92f9b4b8
perf: move pair scan cleanup to root ref 2026-05-31 09:28:31 -07:00
Neil 8db35593b5
fix: handle malformed mobile diagnostic endpoints 2026-05-31 09:24:07 -07:00
Neil 38d3b1d458
perf: move mobile session timer cleanup to root ref 2026-05-31 09:18:21 -07:00
Neil 853fa454ef
fix: honor mobile rpc timeout while reconnecting 2026-05-31 09:15:46 -07:00
Neil 8e34b33930
perf: move mobile source control cleanup to root ref 2026-05-31 09:13:26 -07:00
Neil ef5f818978
perf: move troubleshoot cleanup to root ref 2026-05-31 09:09:45 -07:00
Neil 990d371d4e
perf: move pair confirm cleanup to root ref 2026-05-31 09:01:50 -07:00
Neil f0141a1d1f
perf: move mobile task copy cleanup to root ref (#4224) 2026-05-31 08:50:56 -07:00
Neil 0cfb3d3962 Move mobile session ref mirrors out of effects 2026-05-31 05:06:11 -07:00
Neil 81f4559049
perf: bound mobile terminal WebView queues
Bounds the mobile terminal WebView pre-ready write backlog, avoids Array.shift() in the embedded xterm write drain, disposes old xterm observers, and clears successful fallback timers.
2026-05-31 04:23:39 -07:00
Neil 49153d933f
perf: cap mobile dictation audio backlog (#4078) 2026-05-31 03:33:00 -07:00
Neil 1bb7073f23
fix: clean mobile session delayed timers (#4075) 2026-05-31 03:26:26 -07:00
Neil 7fa23737ad
perf: stream mobile PR diff previews (#4071)
Stream capped mobile PR file diff previews while preserving exact total row counts.
2026-05-31 03:21:57 -07:00
Neil 255bb24c37
perf: cap mobile diff preview rows (#4067) 2026-05-31 03:14:29 -07:00
Neil 8acb47cede Derive mobile session create warning before paint 2026-05-31 03:11:53 -07:00
Neil 49af39f68b
perf: trim android audio hot path work (#4062) 2026-05-31 03:08:21 -07:00
Neil 5c37ddfca8
perf: clean mobile diagnostic fetch timeout (#4063) 2026-05-31 03:02:14 -07:00
Neil 2067bebf50
perf: clean up mobile pairing attempts (#4058) 2026-05-31 02:58:24 -07:00
Neil 8757e6c724
perf: avoid duplicate mobile terminal setting updates (#4056) 2026-05-31 02:52:41 -07:00
Neil 11fa033170
perf: memoize mobile tasks derived data (#4054) 2026-05-31 02:46:31 -07:00
Neil 361240a757
perf: defer hidden picker option rows
Moves PickerModal row rendering into a child component so hidden BottomDrawer pickers avoid mapping option rows on parent renders.
2026-05-31 02:41:55 -07:00
Neil fcd267a309
perf: clean mobile live input focus timer (#4050) 2026-05-31 02:36:49 -07:00
Neil a83afd5a11
perf: guard mobile session toast timers (#4048) 2026-05-31 02:30:19 -07:00
Neil 549ab29489
perf: clean mobile task copy feedback timers (#4047) 2026-05-31 02:27:58 -07:00
Neil 3fda981dc7
perf: pause mobile session fallback polling (#4045) 2026-05-31 02:24:03 -07:00
Neil 69ec6a9c92
perf: pause mobile host polling when hidden (#4043) 2026-05-31 02:19:24 -07:00
Neil 35e1c221a9
perf: reject mobile rpc waiters after retry cap (#4041) 2026-05-31 02:12:53 -07:00
buf0-bot[bot] aa5d911c36
fix: address pr-bug-scan validated finding from #3583 (#3856)
Removed duplicate 'openclaude' entry at index 3 of MOBILE_TUI_AGENT_AUTO_PICK_ORDER so mobile pickers no longer render two OpenClaude rows or emit duplicate-key warnings.

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-05-31 01:49:27 -07:00
Neil be2dfe4bac
fix: drop mobile notification stream on cleanup (#2887) 2026-05-30 20:17:45 -07:00
Neil 68ad291d3d
Resolve bottom drawer mount before commit (#3226)
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-05-30 19:26:00 -07:00
Neil 3dbc38f4f3
Resolve mobile browser address sync before commit (#3228) 2026-05-30 19:25:34 -07:00
Neil 2c55de5589
Move mobile dictation ref mirrors out of effect (#3234)
* Move mobile dictation refs out of effect

* Guard mobile dictation option refs

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-30 19:19:17 -07:00
Neil 7366c3d32e
Resolve mobile new-worktree agent before commit (#3238) 2026-05-30 19:19:00 -07:00
Neil f2fa3ee904
Resolve mobile pair-confirm route state before commit (#3240)
* Resolve pair confirm route state before commit

* Preserve pair confirm back handling

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-30 19:18:32 -07:00
Neil c082f21d2e
Resolve host new-worktree route action before commit (#3242) 2026-05-30 19:15:42 -07:00
Neil 67f74a29a8
Move mobile home client ref sync out of effect (#3247) 2026-05-30 19:15:24 -07:00
Neil 8d8dc9ae05
Resolve mobile task agent selection before commit (#3261) 2026-05-30 18:58:55 -07:00
Neil 7f770ae559
Add mobile review note actions (#3518)
* Add mobile review note actions

* fix: align mobile diff note gutter lines

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-30 13:43:33 -07:00
Neil ddbb6a1e7d
Update oxlint and oxfmt 2026-05-30 13:09:17 -07:00
Neil 7b1ff0d055
Move mobile connection log scroll into content handler (#3402) 2026-05-30 14:48:50 -04:00
Neil fb462e1f77
Add mobile committed branch changes (#3498) 2026-05-30 14:33:30 -04:00
Neil 554388b28d
fix: cancel mobile browser long press from root ref 2026-05-30 14:32:56 -04:00
Neil ca53816aaa
fix: stabilize audio recording store subscription (#3524) 2026-05-30 14:26:42 -04:00
Neil c99eb29bb0
chore: remove unused code 2026-05-30 11:05:58 -07:00
Neil fc1ad4906a
fix: handle large mobile host name lists (#3721) 2026-05-30 07:43:24 -07:00
Neil c9f0fa92be
fix: include OpenClaude in mobile agent catalog (#3722) 2026-05-30 07:39:55 -07:00
Jinwoo Hong fc10bc4cc0
Fix mobile terminal tap mouse reports
Co-authored-by: Orca <help@stably.ai>
2026-05-29 22:44:57 -04:00
Neil f2f6493316
Move mobile browser ref mirrors out of effects (#3230)
* Move mobile browser refs out of effects

* Use layout effect for mobile browser ref mirrors

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-29 22:27:24 -04:00
Neil 016ee18fe7
Add mobile new-tab agent presets (#3334)
* feat: add mobile new-tab agent presets

* fix: harden mobile agent preset launch

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

* fix: keep mobile worktree id parsing local

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-29 22:13:27 -04:00
Neil 2e185a7c4f
Move mobile tasks client ref sync out of effect (#3253)
* Move mobile tasks client ref sync out of effect

* Use layout effect for mobile tasks client ref

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-29 22:13:19 -04:00
Neil 8ace23b6c8
Fix mobile terminal selection autoscroll (#3343) 2026-05-29 21:53:17 -04:00
Jason Weingardt 191183882a
feat: add iPad responsive layout support (#2433) 2026-05-29 20:10:47 -04:00
Jinwoo Hong 30a09f3bd9
Add mobile terminal shortcut bar customization (#3012)
Co-authored-by: Orca <help@stably.ai>
2026-05-29 16:39:52 -07:00
Neil 116a9f4d75
Remove mobile accounts dead client ref (#3244) 2026-05-29 10:13:12 -07:00
Neil fbac80e253
Remove mobile modal reset effects (#3223) 2026-05-29 09:14:18 -07: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
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
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
Jinwoo Hong 52096f07e8
Preserve mobile microphone usage description
Keep the iOS microphone usage string in Expo config after prebuild plugin resolution.
2026-05-27 01:25:16 -04:00
Jinwoo Hong fc1ea1a536
Prepare mobile 0.0.10
Bump mobile app version to 0.0.10 for App Store submission.
2026-05-27 01:18:55 -04:00
Jinwoo Hong 3f8fad9e9e
Improve mobile terminal startup and scrolling (#2828)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 00:59:14 -04:00
Neil 9b2c05fa77
Fix keyboard layout shortcut dispatch
Fix shortcut dispatch so app commands follow the produced logical key for the active keyboard layout, while preserving intentional physical-code fallbacks for terminal byte paths and unavailable logical keys.\n\nCloses #2858
2026-05-26 18:28:55 -07:00
Jinwoo Hong 6f18d362cc
Improve mobile markdown editing (#2826)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 00:07:53 -07:00
Neil ab80339158
Fix shell-launched OMP status hooks (#2821)
* Fix shell-launched OMP status hooks

* Update oh-my-pi branding

* Add OMP to mobile agent metadata
2026-05-25 22:20:15 -07:00
Brennan Benson e8837275fe
Default workspace list to repo grouping (#2657)
Co-authored-by: Orca <help@stably.ai>
2026-05-22 20:14:45 -07:00
Jinwoo Hong ac4cf8cb88
Prepare mobile 0.0.9
Bump mobile app version to 0.0.9.
2026-05-22 18:28:55 -04:00
Jinwoo Hong cb8596af6e
Add mobile custom shortcut combos (#2387)
Co-authored-by: Orca <help@stably.ai>
2026-05-21 22:39:25 -07:00
Jinwoo Hong b1973657ea
Add mobile Tasks parity (#2452)
Co-authored-by: Orca <help@stably.ai>
2026-05-21 20:26:07 -07:00
dependabot[bot] 5ce01c8644
build(deps): bump ws from 8.20.0 to 8.20.1 in /mobile (#2278)
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 23:21:55 -07:00
Jason Weingardt 9355493bc3
feat(mobile): add Shift+Tab accessory key (#2322)
* feat(mobile): add Shift+Tab accessory key

* review: cover mobile terminal accessory keys

- move built-in terminal accessory keys into a testable module

- add Shift+Tab reverse-tab regression coverage

- pin built-in repeatability policy

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-19 15:10:04 -04:00
dependabot[bot] 65658fcba6
build(deps): bump brace-expansion from 5.0.5 to 5.0.6 in /mobile (#2253)
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 23:54:46 -07:00
Jinwoo Hong 8b9340dcb7
Fix mobile mic permission requester build (#2228)
Co-authored-by: Orca <help@stably.ai>
2026-05-17 23:33:28 -07:00
Jinwoo Hong 1deb769f37
Prepare mobile 0.0.8
Bump mobile app version to 0.0.8 and slightly shorten the mobile browser URL toolbar.
2026-05-18 01:58:15 -04:00
Jinwoo Hong 4b7c9b7213
Improve remote client runtime parity (#1975)
Co-authored-by: Orca <help@stably.ai>
2026-05-17 22:24:38 -07:00
Jinwoo Hong 2f7da8109e
Open mobile source control diffs in editor tabs (#2202)
Co-authored-by: Orca <help@stably.ai>
2026-05-17 20:24:46 -07:00
Jinwoo Hong afe90a616f
Add mobile source control actions (#2193)
Co-authored-by: Orca <help@stably.ai>
2026-05-17 19:35:55 -07:00
Jinjing 73d4a1781e
fix: combine buf0-bot validated bug fixes (#2086) 2026-05-16 11:34:13 -07:00
Jinjing 90e49669e6
fix: improve cross-platform compatibility (#2064) 2026-05-15 21:58:58 -07:00
Neil e7f3bb6034
Add Grok agent support 2026-05-15 13:52:39 -07:00
Jinwoo Hong 9217cf625d
Fix mobile TUI scroll gestures (#1940)
Co-authored-by: Orca <help@stably.ai>
2026-05-15 13:17:35 -07:00
Jinwoo Hong a22717bb35
Refactor runtime app architecture (#1878)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 23:13:37 -07:00
Jinjing a7d2a09188
docs: clarify mobile command directory (#1883) 2026-05-14 19:12:10 -07:00
Jinwoo Hong 9562d9776f
Fix mobile notification tap routing (#1871)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 15:22:08 -07:00
Jinwoo Hong 151040f05f
Add desktop-backed mobile voice dictation (#1869)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 14:36:44 -07:00