Commit Graph
3654 Commits
Author SHA1 Message Date
Jinwoo Hong 6312f067cd fix: prompt to discard unsaved Settings AI prompts on quit instead of silently blocking (#5335) 2026-06-13 21:07:09 -04:00
Jinwoo Hong e0056b1ffd fix: handle window-close request at the always-mounted App root (#5144) (#5332) 2026-06-13 20:38:28 -04:00
Brennan BensonandOrca 210f34a8ca Keep Linear-linked agent launches workflow-neutral (#5331)
Co-authored-by: Orca <help@stably.ai>
2026-06-13 16:40:30 -07:00
shoryan royandbrennanb2025 5e8bd66050 feat: add GitHub Enterprise URL support (#5081)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-13 16:00:23 -07:00
Brennan Benson 8355e7ddbb Hide stale workspace chrome during worktree creation (#5328) 2026-06-13 15:54:26 -07:00
Brennan Benson 4c78f18d47 Adjust Linear setup prompt reminders (#5297) 2026-06-13 15:21:06 -07:00
Brennan BensonandOrca e7906969cf Attach Linear issues from the worktree CLI (#5322)
Co-authored-by: Orca <help@stably.ai>
2026-06-13 15:20:08 -07:00
Brennan Benson eec18be688 Match the sidebar app name to custom sidebar colors (#5324) 2026-06-13 15:10:33 -07:00
Brennan BensonandOrca 3a2d39cb37 Support full Linear task workflows from the CLI (#5323)
Co-authored-by: Orca <help@stably.ai>
2026-06-13 15:07:44 -07:00
Bjarke Hesthaven Søndergaard dbc3407e07 fix: resolve PR workspaces on SSH remotes (fetch via dedicated RPC) (#5320) 2026-06-13 14:51:14 -07:00
Jinwoo HongandOrca 72ed268669 Run the file watcher off the main process to fix the serve deadlock (#5308) (#5310)
Co-authored-by: Orca <help@stably.ai>
2026-06-13 14:48:32 -07:00
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
Trevin Chow 4850ea659b Fix runtime status for legacy transport metadata (#3956) 2026-06-13 14:18:15 -07:00
a0818b9a79 Fix agent tabs opening as a bare shell with oh-my-zsh vi-mode (#5315)
* fix(terminal): emit zsh shell-ready marker even when a user zle-line-init hook fails

Orca's zsh wrapper registered its OSC-777 shell-ready marker via
`add-zle-hook-widget line-init`. zsh's azhw dispatcher aborts the whole
hook chain when an earlier hook returns non-zero, and oh-my-zsh's vi-mode
installs a raw `zle-line-init` that exits 1 when VI_MODE_SET_CURSOR is
unset. The marker never fired, so every queued startup command sat on the
daemon's 15s pre-ready timeout — agent quick-launches looked like they
just opened a bare terminal.

Own `zle-line-init` directly: emit the marker first, then chain to any
previously-installed widget (called as a plain function so $WIDGET stays
`zle-line-init` for downstream azhw dispatchers). The registration is
idempotent — a re-source keeps the originally captured widget instead of
clobbering the chain. Applied to both the daemon and local-PTY wrappers
via a shared template helper.

* test(shell-ready): skip global zsh rcs so CI compinit can't block the marker tests

The real-zsh node-pty tests spawned 'zsh -l'/'zsh -i', which on CI runners
sources /etc/zsh/* whose global compinit hits insecure (group-writable) fpath
dirs and blocks on an interactive 'insecure directories [y/n]?' prompt before
zle-line-init fires. The marker never appeared and the tests timed out. Spawn
with -o noglobalrcs so only our ZDOTDIR wrapper/fixtures load; the marker
contract is unaffected.

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:16:05 -07:00
Jinwoo HongandOrca 3b56b162e0 Own Claude OAuth refresh instead of scraping it back (#5318)
Co-authored-by: Orca <help@stably.ai>
2026-06-13 13:44:12 -07:00
Trevin Chowandbrennanb2025 bee8b9820a refactor: simplify runtime service helpers (#4005)
* refactor: simplify runtime service helpers

* fix: keep tui idle cheap checks polling

---------

Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-13 11:32:01 -07:00
Trevin Chowandbrennanb2025 b20212400a fix(sidebar): increase worktree card content inset (#4885)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-13 11:27:13 -07:00
Jinwoo HongandOrca 90121fb518 Add Enable auto-merge action to PR merge dropdown (#5296) (#5309)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 23:57:49 -07:00
Brennan BensonandOrca 970b919035 Align Source Control action buttons (#5305)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 20:31:09 -07:00
Brennan BensonandOrca d09a3e5591 Confirm Linear setup after Re-check (#5300)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 20:22:23 -07:00
Jinwoo HongandOrca c455c576ae Fallback to system SSH on reachability errors (#5303)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 20:06:20 -07:00
Brennan Benson 98465e0f49 Suppress decorative agent title churn (#5294) 2026-06-12 18:22:22 -07:00
Brennan BensonandOrca 5dc05e2bd2 Improve Warp custom theme discovery (#5287)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 18:09:06 -07:00
Jinwoo HongandOrca 71bfbbf840 Fix rich markdown image paste bloat (#5290)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 16:48:09 -07:00
Jinwoo HongandOrca 630bcce530 fix: replace per-5s full-buffer terminal checkpoints with an incremental log (#5292)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 16:31:24 -07:00
a3478c9f1c Add keyboard shortcuts to launch agent tabs (default agent + per-agent bindings) (#5214)
* Add keyboard shortcuts to launch agent tabs

Cmd+T opens a plain terminal tab, but launching an agent in a new tab was
mouse-only (tab bar + menu). This adds:

- tab.newAgent ("New agent tab"): launches the default agent in a new tab
  in the active workspace. Default chord Cmd+Alt+T on macOS; unassigned on
  Windows/Linux (AltGr / desktop-terminal chord conflicts), bindable in
  Settings. Resolves the agent via the configured default when detected
  and enabled, otherwise the shared auto-pick order; a 'blank' default
  falls through to auto-pick since an explicit agent chord wants an agent.
- tab.newAgent.<id>: one bindable action per TUI agent so each enabled
  agent can sit on its own chord. All ship unassigned. Settings →
  Shortcuts shows them in a new "Agents" group, hiding disabled agents;
  a per-agent chord launches its agent even when detection hasn't
  confirmed the binary (explicit request fails visibly in the tab).

Launches go through launchAgentInNewTab (same path as the tab-bar quick
launch) with launch_source 'shortcut'. Agent display names move to a
shared module so the keybinding registry can title the generated actions
without importing renderer code. groupDefinitions moves out of
ShortcutsPane.tsx to keep it under the max-lines lint cap.

* Fix recording Option-composed shortcuts on macOS

On macOS, Option changes the produced character (Cmd+Alt+C reports
key 'ç'), so the shortcut recorder rejected Alt combos with 'Press a
key, not only a modifier'. Capture now falls back to the physical key
code when Alt is held, matching the existing matcher behavior.

* fix: ignore disabled agent shortcuts in conflict checks

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

* fix: align mac option shortcut capture with matching

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-12 16:28:49 -07:00
Jinwoo Hong 5087facefb Fix Windows task issue header overlap (#5295) 2026-06-12 19:27:17 -04: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 HongandOrca 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
d538549bb5 Fix markdown preview links routing to system browser instead of Orca (#5265)
* Fix markdown preview links opening in system browser instead of Orca

In the markdown preview, a plain (or Cmd/Ctrl) click on an http/https link
called window.api.shell.openUrl() directly, which always routes to
shell.openExternal (the OS default browser). It bypassed openHttpLink, so a
plain click could never open in the Orca built-in browser, regressing the
behavior from #987. The Cmd/Ctrl+Shift escape hatch was already correct.

Route both http click paths through openHttpLink via a new
resolveMarkdownPreviewHttpOpenOptions helper that centralizes the
cross-platform modifier decision (Cmd on Mac, Ctrl on Linux/Windows):
- plain / Cmd-click -> { worktreeId } -> Orca browser (per openLinksInApp),
  falling back to the system browser when the setting is off, no worktree is
  known, or a remote runtime is active.
- Cmd/Ctrl+Shift-click -> { forceSystemBrowser: true } -> system browser.

The remote/SSH case is handled inside openHttpLink (http stays on the client
system browser; file:// blocking is unchanged).

Adds a happy-dom interaction test that renders the real component and fires
real modifier clicks, plus full modifier-matrix coverage for the helper.

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

* review: share markdown preview link modifier logic

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-12 15:20:51 -07:00
Brennan BensonandOrca 5f0a4fc5f3 Add left sidebar appearance setting (#5280)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 15:00:28 -07:00
b8a899edb1 fix: browser url preview with arrow navigation [#5113] (#5221)
* fix: browser url preview with arrow navigation

* Fix browser autocomplete preview cancel

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-12 14:44:25 -07:00
Brennan BensonandOrca abb2477efb Fix tab agent identity detection (#5283)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 14:15:27 -07:00
Jinwoo Hong 5f3b61aa65 Fix WSL agent setup to use the distro login shell (#5285) 2026-06-12 17:01:34 -04:00
Jinwoo HongandOrca ebeb12fedc fix: distinguish remote project paths by SSH connection (#5279)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 13:40:51 -07:00
Brennan BensonandOrca 74c961b09f Add Linear write commands for agents (#5165)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 13:29:13 -07:00
Jinjing b81f06203d Defer project header pointer capture until drag threshold is crossed (#5278)
This allows simple clicks on the repository header to still reach the
inner collapse handler on pointerup. Additionally, body cursor and
user-select styles are only applied when actual dragging begins,
rather than when the session is armed.
2026-06-12 12:17:50 -07:00
Jinwoo Hong dc8fdf65a3 Update Android mobile release links to 0.0.13
Point Android download links at the published mobile-v0.0.13 release.
2026-06-12 12:02:58 -07:00
Jinjing 18fdcf0b05 fix: clarify Korean terminal link routing label (#5277) 2026-06-12 12:02:15 -07:00
Jinjing d2a3f12baa fix: address review findings (#5275) 2026-06-12 11:43:39 -07:00
Jinjing 5ca63c85d7 fix: address review findings (#5273) 2026-06-12 11:20:43 -07:00
Jinjing f027a1cb7b Move settings out of help dropdown into dedicated sidebar button (#5272)
- Pulls the Settings option out of the Help dropdown menu and renders it as a standalone button directly in the sidebar.
- Integrates the `useShortcutKeys` hook and `ShortcutKeyCombo` component to display the settings keyboard shortcut in the button's tooltip.
- Updates associated tests to verify the new button's placement, ARIA attributes, and tooltip content.
2026-06-12 10:56:49 -07:00
0021d95796 fix(serve): persist active serve session tab so PTY output doesn't snap focus to the last tab (#5131)
* fix(serve): persist active mobile-session tab so PTY output doesn't snap focus

In `orca serve` (headless host + remote/web client), running a command in a
terminal snapped the active tab back to the last-created tab. The renderer
reconcile forces the client's active tab to the host's reported active
(activeTabId / activeTabType / per-tab isActive), but `activateMobileSessionTab`
only called `focusTerminal` — a no-op for serve tabs no renderer has adopted —
and never persisted the chosen tab into the host's in-memory snapshot. So every
`onPtyData` -> `touchMobileSessionSnapshotsForPty` republish re-emitted the stale
"active = last tab" and the client snapped back on each command.

Persist the activation into the headless snapshot (activeTabId, activeTabType,
exclusive per-tab isActive, rebuilt tabGroups) after the focus dispatch, gated on
`!getAvailableAuthoritativeWindow() && isHeadlessMobileSessionPublication(...)` —
the same guard the hydrate path uses, so renderer-owned snapshots (including
`:headless-merge:`) stay authoritative. No-op when the tab is already active;
adds nothing to the `onPtyData` hot path.

Adds 3 regression tests covering: chosen tab survives a PTY republish, no version
bump on redundant activation, and no server-side persist when a renderer is
authoritative.

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

* fix(serve): exclude :headless-merge: snapshots from headless active-tab persist

After a renderer detaches there is no authoritative window, so the
!getAvailableAuthoritativeWindow() guard alone let merged (:headless-merge:)
snapshots through this path. A merged snapshot still carries renderer-owned
tabs/groups, so a server-side active-tab rewrite could collapse that mixed
group state. Exclude merged epochs from the persist gate; only pure
`headless:` / `headless-hydrated:` publications are persisted server-side.

Adds a regression test: renderer-detach + `:headless-merge:` snapshot ->
the headless persist is suppressed (no snapshot mutation / event).

Addresses the CodeRabbit review on #5131.

* review: clarify headless active-tab persistence guard

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-12 10:47:55 -07:00
Brennan BensonandOrca d93de0935f Add effectiveness telemetry for in-app GitHub stars (#5245)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 10:14:49 -07:00
Neil f31c40cb18 Add Grok sessions to AI Vault (#5258) 2026-06-12 01:38:56 -07:00
Jinjing 030a35a2df Update manual project order notice wording and add translations (#5253)
Correct a minor grammatical issue in the English notice by adding
"the". Additionally, localize FolderWorkspaceComposerDialog and
ProjectOrderManualDefaultNotice in Spanish, Japanese, Korean, and
Chinese to replace the English fallback strings.
2026-06-12 00:18:51 -07:00
Jinjing 9c8d9be8dd Optimize CI checks caching and polling backoff behavior (#5252)
* Optimize CI checks caching and polling backoff behavior

- Prevent backing off the polling interval when no checks are reported
  yet, keeping polling at the baseline rate to detect newly started jobs.
- Reduce empty checks cache TTL to 10 seconds to allow faster recovery
  from a "no checks" state while preserving the 60-second TTL for active jobs.
- Avoid bypassing the GitHub CLI cache on tab entry, reserving forced
  fetches only for explicit manual user refreshes.
- Update "No checks configured" copy to "No checks reported yet" to avoid
  misleading users before their CI pipelines have started running.
- Ensure manual checks refreshes do not inherit in-flight automatic requests
  which might be backed by cached CLI data.
- Lookup head-specific cache keys during PR refresh events to prevent
  incorrectly deriving neutral check statuses.

* Clarify polling reset comment in ChecksPanel

Update the comment to accurately refer to the entry refresh rather
than a forced fetch establishing a fresh baseline.
2026-06-12 00:16:36 -07:00
Jinjing 4278fdc1e8 Constrain right sidebar primary action widths (#5249)
* Constrain right sidebar primary button widths to prevent layout jumps

Introduce min-width constraints, truncation, and content-width layouts
for primary actions in the right sidebar and PR dialogs. This prevents
buttons from shifting layout dramatically when labels morph dynamically
as git and review state changes.

* Fix right sidebar split action overflow
2026-06-12 00:09:26 -07:00
Jinjing d27985e05b Constrain right sidebar primary button widths to prevent layout jumps (#5248)
Introduce min-width constraints, truncation, and content-width layouts
for primary actions in the right sidebar and PR dialogs. This prevents
buttons from shifting layout dramatically when labels morph dynamically
as git and review state changes.
2026-06-11 23:50:25 -07:00