Commit Graph

4560 Commits

Author SHA1 Message Date
Jinwoo Hong 699bcf6478
Fix remote runtime terminal rendering (#4946)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 21:20:25 -07:00
Neil 4660a25f09
Gate releases on terminal rendering golden 2026-06-08 20:49:17 -07:00
Neil 85a5dc0a06
Fix create worktree focus ring clipping (#4940) 2026-06-08 20:31:40 -07:00
Neil 1884b5c206
test(e2e): stabilize release-cut e2e failures (#4942)
* test(e2e): stabilize two flaky release-cut e2e specs

Fix two failing e2e tests from release-cut run 27171326222. All
changes are test-only — no application code is modified.

- artificial-opencode-terminal-load: widen MAX_RENDERER_SCHEDULER_
  QUEUED_CHARS from 2 MB to 3 MB. The scheduler is still enforcing
  backpressure (droppedBacklogCount must stay 0 and typing-latency
  budgets must still pass) — the 2 MB ceiling was too tight for the
  5-pane OpenCode pressure scenario on CI runners.

- source-control-discard-confirmation: click the dialog's confirm
  button instead of pressing Enter on the original row button. The
  dialog auto-focuses its own confirm button (see
  focusDiscardDialogConfirmButton), so pressing Enter on the row
  button just retriggered the open action and the dialog never
  closed within the assertion window.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* test(e2e): fix two flaky specs from release-cut run 27177379094

Fix the remaining e2e failures from the v1.4.52 release-cut run. All
changes are test-only.

- terminal-long-table-scroll-restore: replace mouse-wheel scroll loops
  with xterm scrollLines so tall wrapped tables can reach target rows on
  Linux CI. Share the helper via artificial-opencode-active-terminal-scroll.

- artificial-opencode-hidden-pressure: widen hidden restore latency budget
  to 1500ms. Typing-latency assertions still enforce responsiveness; the
  extra headroom absorbs parallel Electron worker jitter on CI runners.

---------

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
2026-06-08 20:30:05 -07:00
Jinjing 3d1b6391d2 Update UI style guide
Push local docs/STYLEGUIDE.md content to main.
2026-06-08 20:25:32 -07:00
github-actions[bot] 958211f5b8 release: v1.4.53 2026-06-09 03:20:03 +00:00
Jinjing fc850a3f4e
Improve language in local-main sync suggestion toast (#4938) 2026-06-08 20:16:04 -07:00
Jinjing 143c5de1a9
Match titlebar background to worktree sidebar when open (#4934) 2026-06-08 20:14:34 -07:00
Jinjing 50831e79eb
fix: address review findings (#4936) 2026-06-08 20:10:41 -07:00
Jinwoo Hong 9c8e67c271
Fix project header action clicks (#4935)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 20:02:26 -07:00
Brennan Benson 5e4f74fffe
Make Settings setup progress mirror checklist (#4926)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 20:00:21 -07:00
buf0-bot[bot] d43ce62412
fix: pr-bug-scan validated finding from #4741 (#4894)
* fix: address pr-bug-scan validated finding from #4741

Plain-Escape branch in onTerminalKeyDown now runs the three unread clears before its early return, so Escape dismisses attention again.

* E2E: test that plain Escape clears focused terminal tab attention

---------

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-08 19:45:48 -07:00
Jinwoo Hong 00f3849669
Use quick command labels for new tab titles (#4933)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 19:32:34 -07:00
Jinjing 94770b7acd
Refine mobile emulator agent setup layout and step blocking (#4923)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 19:29:11 -07:00
Neil edadb1d7b7
Allow Linux terminal auto WebGL on safe renderers 2026-06-08 18:28:52 -07:00
Jinwoo Hong 57c1e21330
Fix native Windows Codex cursor flicker (#4907) 2026-06-08 21:11:18 -04:00
Jinwoo Hong 01c0206160
Add Jira credential management to settings (#4929)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 18:10:56 -07:00
Jinjing 9b979d01bf
Add mobile emulator simulator tabs to the Cmd+J jump palette (#4928)
- New `simulator-palette-search.ts` module searches simulator/unified tabs by label, alias ("mobile", "simulator", "ios"), worktree name, and repo name
- Rename "Browser Tabs" section to "Open Tabs" to reflect the unified browser + simulator tab listing
- Simulator tabs appear alongside browser pages in the palette, with the same score-based ordering, context-first sort, and empty-query prioritization for current/active worktree tabs
2026-06-08 18:10:22 -07:00
Jinjing 19392cc066
Add emulator keyboard capture, edge gestures, and stream cleanup (#4927) 2026-06-08 18:10:16 -07:00
Brennan Benson 12340ee525
Surface branch auto-name failures with detailed CLI errors (#4906)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:55:54 -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 04205acd76
Graduate compact worktree card setting (#4924)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:37:11 -07:00
Brennan Benson ec7d013469
Reuse shared quick-install flow in Enable orchestration dialog (#4909)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:03:11 -07:00
Trevin Chow c05d3ff1b5
ci: gate release-cut to the canonical repo so it skips forks (#4815)
The cut job checks out main, bumps package.json's version, and
fast-forwards main. On a fork with Actions enabled, the scheduled RC
cut runs against the fork's main and diverges it on the version line
every slot, so that contributor's PRs back to upstream conflict on
package.json even when their change never touches it.

Gate the job to github.repository == 'stablyai/orca' so it (and the
jobs that depend on it) no-op on forks. Canonical scheduled and manual
cuts are unaffected.
2026-06-08 19:58:58 -04:00
Jinwoo-H 8b453d014b ci: gate release-cut to the canonical repo so it skips forks (#4815)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:57:55 -07:00
Jinjing 7d7ba1bb32
fix: address review findings (#4920) 2026-06-08 16:47:04 -07:00
Jinjing 2b3f1e724a
fix: address review findings (#4919) 2026-06-08 16:46:28 -07:00
Brennan Benson d1d223d691
Hint pty allocation failures for macOS ENXIO (#4917)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:36:04 -07:00
Brennan Benson a9ec35a132
fix: allow empty usage CTA dismissal over runtime RPC (#4916)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:34:46 -07:00
Brennan Benson b81246e096
Align agent permission dot color (#4914)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:34:32 -07:00
Rai Butera 84411b943f
fix: detect agents via install-dir resolver when which misses on GUI launch (#4880)
* fix: detect agents via install-dir resolver when which misses on GUI launch

The Agents settings pane reports every agent as "Not installed" on a cold
GUI launch even when the CLIs are installed and runnable from Terminal.

detectInstalledAgents resolves each agent with `which`, which only sees
process.env.PATH. GUI-launched Electron inherits a stripped PATH from launchd
that omits the user's shell-rc dirs (~/.local/bin, ~/Library/pnpm,
~/.asdf/shims, nvm/volta/fnm/mise shims, ...). The synchronous seed in
patchPackagedProcessPath plus the async shell-PATH hydration both race the
first detection, and the first result is cached for the session, so the pane
can latch onto an empty "nothing installed" snapshot until the user relaunches
from a terminal or clicks Refresh.

Fall back to resolveCliCommand (the same resolver the spawn path uses in
src/main/codex-cli/command.ts) when the PATH lookup misses. Detection now has
the same reach as launch: if Orca can run it, Orca detects it, independent of
PATH-hydration timing. No false positives — an uninstalled agent still resolves
to a bare command name rather than an absolute path.

Verified on macOS that resolveCliCommand resolves claude (~/.local/bin), codex
(~/.asdf/shims), and opencode (~/Library/pnpm) under a stripped PATH.

* fix: bulk resolve agent install-dir detection

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

* fix: ignore node navigator for linux webgl policy

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-08 19:23:32 -04:00
Brennan Benson 612823c9e0
Tighten child workspace indentation (#4915)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:07:13 -07:00
Brennan Benson cd4ca13080
feat: make status bar empty usage CTA dismissible (#4898)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 15:47:29 -07:00
github-actions[bot] 4d2d31fc27 release: v1.4.53-rc.0 [rc-slot:2026-06-08-15] 2026-06-08 22:35:35 +00:00
Brennan Benson 0aad9f8d03
Point browser tour 'Stay logged in' step at the visible Import button (#4902)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 15:22:26 -07:00
github-actions[bot] 3cc80825fd release: v1.4.52 2026-06-08 22:17:36 +00:00
Neil 51fd231a14 Keep auto WebGL for terminal table output 2026-06-08 15:16:37 -07:00
Lesley Murfin 2338c42ef9
fix(ssh): sync ~/.ssh/config on import and Manage open (#4899)
* fix(ssh): sync ~/.ssh/config on import and Manage open

importFromSshConfig only inserted unknown hosts and never updated an
existing target, so a rotated port (or any changed config field) was
silently ignored on re-import. Make it an upsert: config-sourced targets
are refreshed in place, genuinely new hosts are inserted, and the SSH
Manage pane auto-syncs when it opens so changes appear without a manual
Import click.

A new optional SshTarget.source ('ssh-config' | 'manual') protects
user-created and user-edited targets from being overwritten by sync —
editing a target in the UI detaches it from config-sync. Unchanged
targets are skipped so a repeat sync performs no disk write. Editing a
target now also carries cleared optional fields (identity file, proxy
command, jump host) so removing a config-derived value actually deletes
it instead of silently keeping the stale value through the partial merge.

Resolves item #1 of #4684 (item #2 was fixed in #4860).

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

* fix(ssh): preserve legacy manual targets during config sync

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-08 18:15:55 -04:00
Jinwoo Hong 9c2cec3d6c
Use system ssh for proxy-based targets (#4911)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 14:43:25 -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
github-actions[bot] 90ac74d9b9 release: v1.4.52-rc.2 2026-06-08 21:15:28 +00:00
Neil 132e219b5d Restore auto GPU terminal rendering 2026-06-08 14:13:48 -07:00
Jinjing 006a4ef3a5
Customizable Source Control AI action recipes with per-action agent and command templates (#4868)
* WIP: Changes before auto-review fixes

* Customize Source Control AI action recipes

- Add per-action CLI arguments for generation and launch flows so saved
  recipes can select model flags without putting prompts in argv.
- Share the text-generation dialog between commit messages and hosted-review
  details, with first-run defaults and repo/global recipe support.
- Launch fix-check agents directly from saved recipes and harden prompt/template
  handling for invalid args, blank prompts, and inherited variables.

* Allow custom commands for source control action recipes

- Let text action recipes save and resolve the custom-command sentinel
- Add settings UI for custom command recipes and preserve per-action defaults
- Split large source-control dialogs and direct launch helpers into focused modules
- Keep launch actions from treating custom text agents as runnable TUI agents

* Add per-repo Source Control AI enablement, custom command, and save-targ

- Repo overrides now support `enabled` and `customAgentCommand`, letting
  repositories opt in/out of Source Control AI independently and supply a
  repo-scoped custom command that takes precedence over the global one.
- Recipe-save dialogs gained a save-target selector ("Don't save / Save for
  this repo / Save as global default") replacing the old boolean checkbox,
  routing saves through the new `saveSourceControlActionRecipe` helper in
  `source-control-ai-recipe-save.ts`.
- `normalizeRepoSourceControlAiOverrides` now returns `undefined` for empty
  objects and passes the `null` sentinel through the IPC/RPC layer so the
  persistence layer can clear repo overrides cleanly.
- `resolveSourceControlLaunchPlatform` resolves the correct shell platform
  for SSH and WSL worktrees so agent launch commands are built correctly.
- Settings UI gained `RepositorySourceControlAiEnablement` and
  `RepositorySourceControlAiCustomCommand` rows; draft/label logic was
  extracted into focused modules to stay within lint line limits.

* Extract action recipe defaults into own component and use id-prefixed wo

- Move action recipe draft state and UI out of CommitMessageAiPane into SourceControlAiActionRecipeDefaults and source-control-ai-action-recipe-draft.ts to respect the max-lines lint rule
- Use toRuntimeWorktreeSelector() across all runtime git RPC calls so the runtime can resolve worktrees by ID rather than path
- Fix SSH launch platform resolution to use the repo's connection when the newly created worktree isn't hydrated yet
- Add edit and delete handlers for PR conversation comments with confirmation dialog
- Use text-status-success design token instead of hardcoded text-emerald-500

* add more search keyword

* Rename "Enable Source Control AI defaults" to "Show Source Control AI ac

* fix test

* Remove unused imports and variable assignment in launch-work-item-direct

* Fix test mocks to use `mocks.store` instead of `storeState.value` for di

* Extract Source Control AI logic into focused modules with fix-checks dia

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-08 14:08:35 -07:00
github-actions[bot] c16e7044aa release: v1.4.52-rc.1 2026-06-08 20:47:33 +00:00
Jinwoo Hong b041ed4440
Pass Claude Agent Teams args through (#4897)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 13:39:47 -07:00
Neil e5fe0f14d1 Use work item titles for create-from workspace names 2026-06-08 13:36:15 -07:00
Trevin Chow 5337e93cb4
feat: non-blocking worktree creation with in-tab progress (#4729)
* feat: non-blocking worktree creation with in-tab progress

The Create Worktree modal stayed open with a spinning button for the full
create IPC (base-ref git fetch + `git worktree add`, ~10-15s on heavy
repos) and only dismissed once it resolved, so the user stared at a frozen
modal with no way to work elsewhere.

Run creation in the background instead. On submit the modal closes
immediately and an in-tab "Creating worktree…" panel shows live setup
status, wiring the previously-unused `createWorktree:progress` main->renderer
event via a per-creation correlation id. A sidebar row tracks each
in-flight create, the user can navigate to other worktrees or cancel while
it runs, and on success it swaps to the real worktree + terminal in one
frame. Failure shows the error in the panel with retry; remote/runtime
targets (no progress events) show an indeterminate spinner.

Pending creations live in a separate store map rather than a faked Worktree
row, so git-status, the tab model, persistence, and PTY spawning are
untouched. Only the composer quick-create path changes; other createWorktree
callers keep their synchronous behavior.

* refactor: present in-flight worktree creates as inline tabs and rows

Rework the two surfaces that show an in-flight create so each reads like
the real thing it stands in for.

The in-tab panel is now a faux tab: a tab strip carrying the new
worktree's name (the title) over a quiet top-left status line, instead of
a centered card with a step checklist. An in-flight create reads as a real
workspace tab whose content is loading, the title and status never
duplicate each other, and the handoff to the terminal stays a same-frame
swap. Failure shows the error inline with retry.

In the sidebar, a pending create now renders as an inline row under its
target repo group — where the worktree will land — replacing the separate
strip that pinned every in-flight create to the top of the list.

* fix: keep pending worktree rows visible without repo metadata

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-08 13:30:13 -07:00
Brennan Benson 5424582b51
Suggest enabling local-main freshness when a new workspace finds it stale (#4888)
* Suggest enabling local-main freshness when a new workspace finds it stale

Adds a "Keep Local Main Up to Date" suggestion path: when the setting is
off and a new workspace's local base branch is behind its remote, Orca
surfaces a one-time, dismissible toast nudging the user to enable it. The
toast is sticky (no auto-expire) so it can't be missed, with explicit
Turn On / Dismiss actions; dismissing (button, close X, or swipe) persists
localBaseRefSuggestionDismissed so the nudge — and its backend probe —
never runs again.

Also refactors the refresh logic so the advisory and mutating paths share
one fast-forward-safety evaluator, adds an SSH relay RPC for the ref
mutation, and fixes remote-tracking base parsing for fully-qualified refs.

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

* fix: restore update-ref fast-forward for un-checked-out local base ref

The refactor that split refresh into evaluate + mutate dropped the
non-owner case: a local base branch checked out in no worktree was left
stale (return undefined) instead of fast-forwarded. Restore it across all
three layers — local evaluator/mutator, SSH evaluator, and relay handler
(which also removes the dead duplicated throw) — using the expected-old-OID
compare-and-swap form of update-ref so a concurrent ref move is a no-op.
The suggestion toast now also fires for this case.

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

* refactor: restore resultBase spread in local-base-ref mutators

The evaluate/mutate split spelled out { baseRef, localBranch, status }
literally in the mutating paths; main used a resultBase spread. Restore
that pattern in both the local and SSH mutators — behavior-preserving,
collapses two identical skipped_error returns.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-08 13:19:45 -07:00
Jinwoo Hong 7ea359bd60
Add Claude Agent Teams native pane launcher (#4892)
* Add Claude Agent Teams native pane launcher

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

* Fix Agent Teams CI coverage checks

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

* Fix Claude Agent Teams split direction mapping

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-08 16:11:32 -04:00
github-actions[bot] 9b819ce43f release: v1.4.52-rc.0 2026-06-08 20:07:15 +00:00