Commit Graph
2191 Commits
Author SHA1 Message Date
0c0367ea88 feat(agents): native Xiaomi MiMo Code support (#6239)
* feat(agents): native Xiaomi MiMo Code support

Add mimo-code TUI agent (detect mimo, --prompt, --session resume).
Inject MIMOCODE_HOME overlay and /hook/mimo-code status plugin on mimo
launch when agent status hooks are enabled; restore via shell-ready
wrappers. Reuse OpenCode-family hook normalization in the listener.

SSH remote MiMo hook overlays are not included (local/daemon first).

Closes #6220

* fix(mimo): remirror overlay config idempotently

rmSync overlay config before mirror so a second mimo launch does not
hit EEXIST in mirrorEntry and fall back to the user MIMOCODE_HOME.

* review: harden mimo code support

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

---------

Co-authored-by: Doan Bac Tam <24356000+doanbactam@users.noreply.github.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-24 00:17:49 -07:00
Jinwoo HongandOrca 5d8617bc71 Fix mobile workspace parity (#6207)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 17:07:28 -07:00
Brennan BensonandOrca a2fd8c11c2 Reduce source-control background load during refreshes (#6189)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 15:06:38 -07:00
gatsby74 0880021665 feat(shortcuts): add assignable shortcut to toggle sleeping workspaces
Adds an unbound sidebar.sleepingWorkspaces.toggle keybinding action, wires it to the global shortcut dispatcher, and shows assigned shortcut labels in the workspace-board filter menu.

Also resolves the PR against current main and removes an unnecessary exhaustive-switch fallback that blocked current lint.
2026-06-23 14:26:01 -07:00
7c5e8a7f30 feat: floating workspace shortcuts and tab shortcut affordances (#6077)
* feat: add floating workspace shortcuts

* test: shim localStorage in happy-dom tests

* refactor: tighten floating shortcut tests and docs

- Drop unrelated localStorage test shim (local Node 25 only; CI runs Node 24)
- Add why-comments for minify/minimize macOS-only and unbound defaults
- Assert minify bounds via getMinifiedFloatingTerminalBounds() not magic numbers
- Cover out-of-range tab index and no-active-tab rename edge cases

* test: cover custom floating shortcut bindings on Linux/Windows

Proves user-assigned overrides for floatingWorkspace.maximize/minify fire
on platforms where the default bindings are intentionally empty.

* feat: show keybinding hints in floating panel control tooltips

Maximize/restore and minimize tooltips now surface their live shortcut as
"Label (shortcut)", matching the repo convention (e.g. ReviewPRViewAnimatedVisual).
Degrades to a bare label when the action is unbound (Win/Linux defaults,
and minimize on every platform).

* feat: rework floating panel resize shortcut to Cmd+Opt+Shift+A

- Move maximize/restore default from Cmd+Opt+Up to Cmd+Opt+Shift+A so it
  shares the Cmd+Opt+A toggle anchor and stays one-handed.
- Open-into-maximized: pressing the chord while the panel is closed opens
  it straight into the maximized state (one-shot intent bridges the
  closed->mounted gap), regardless of last saved size. While open it
  remains a maximize<->restore toggle returning to saved dimensions.
- Drop the minify action and its Cmd+Opt+Down default entirely; it was
  introduced earlier in this PR and is not in main, so this trims unshipped
  surface rather than removing an existing feature.

Maximize tooltip now surfaces the new chord. Adds panel tests for the
open-maximized intent and updates keybinding default tests.

* feat: surface tab shortcut affordances

* refactor: address 5.5 Pro review on tab shortcut affordances

- Add Darwin Option-composed (Cmd+Opt+Shift+A) maximize capture/round-trip regression
- Replace 'Unassigned' string-sentinel checks with useOptionalShortcutLabel (string | null)
- Add TTL guard + unit tests so a stale open-maximized intent cannot leak into a later open

* feat: show default agent shortcut in new tab menu

* fix: address PR review on tab tooltip a11y, i18n, and test guards

* Fix floating workspace shortcut edge cases

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-23 13:37:17 -07:00
Brennan BensonandOrca 5311ab3867 Group agent session history by project (#5432)
Co-authored-by: Orca <help@stably.ai>
2026-06-23 00:27:21 -07:00
Brennan BensonandOrca 23db6a7110 Preserve linked work drafts during workspace startup (#6107)
Co-authored-by: Orca <help@stably.ai>
2026-06-22 23:18:04 -07:00
Neil c2353fd98c Tune terminal scroll defaults (#6068)
* Tune terminal scroll defaults

* Align TUI mouse wheel scrolling

* Add terminal scroll speed controls
2026-06-22 17:30:50 -07:00
dfe3726df1 [codex] Optimize renderer idle sync and scrollback caps (#5926)
* Optimize renderer idle sync and scrollback caps

* Preserve runtime terminal scrollback buffers

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

* Remove merge formatting churn

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

* Update terminal drop bracketed paste expectations

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 15:25:10 -07:00
1b62f6511e fix(terminal): attach dropped image files via bracketed paste (#6013)
* fix(terminal): attach dropped image files via bracketed paste

Dragging an image file into a terminal pane wrote the shell-escaped path
as raw PTY input. Terminal TUIs (Claude Code, Codex, etc.) only turn a
path into an image attachment when it arrives as a *bracketed paste*, so
dropped images showed up as a literal path instead of an `[Image]`
placeholder — unlike iTerm2/Warp, which wrap dropped paths in bracketed
paste, and unlike Orca's own clipboard screenshot flow (#2842).

Route dropped image files (by extension, mirroring IMAGE_MIME_TYPES)
through `wrapTerminalBracketedPasteText` with the raw, un-escaped path so
the file-existence check those tools run on the pasted path succeeds.
Non-image drops keep the original shell-escaped, space-separated
behaviour for use in shell commands.

* fix(terminal): separate image paste from following non-image path

A mixed drop where an image precedes a non-image path concatenated the
two: the image bracketed-paste payload has no trailing space, so the
next shell-escaped path was appended directly after it. Add a single
separating space after an image payload only when the next path is a
non-image — back-to-back image pastes are self-delimiting and a stray
space between them would land in the TUI input.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Review terminal image drop path handling

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-22 14:53:03 -07:00
Brennan BensonandOrca 88da1808f7 Prevent stale sleeping agents from resuming (#6018)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 22:39:09 -07:00
Brennan BensonandOrca 8228155e4d Improve preserved branch cleanup after squash merges (#6014)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 18:48:59 -07:00
Brennan BensonandOrca fe8fe16c83 Preserve agent settings when sleeping sessions resume (#5916)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 16:44:58 -07:00
Brennan BensonandOrca a856c7d6b6 Rename Orca Linear agent skill (#5855)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 16:16:37 -07:00
Brennan BensonandOrca d517bb7250 Restore agent history after worktree renames (#6000)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 15:48:33 -07:00
Jinwoo HongandOrca 32e6ab7655 Fix mobile workspace list parity (#6001)
Co-authored-by: Orca <help@stably.ai>
2026-06-21 15:11:55 -07:00
Jinwoo HongandOrca 530f98d945 Improve Claude usage refresh fallback behavior (#5995)
* Match CodexBar Claude usage fallback behavior

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

* Remove external tracker references from Claude usage changes

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

* Allow CLI fallback when Claude Keychain is unavailable

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

* Stabilize updater prerelease promotion test

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-21 13:10:25 -07:00
Jinjing 16347ab799 Handle clean local merges when hosting provider reports conflicts (#5942)
When the hosting provider (GitHub) reports conflicts but a local merge
simulation is clean, we now mark the conflict summary as locally clean.

This state is surfaced in both the desktop and mobile sidebars with a
clear explanation and a copyable set of commands to trigger a remote
mergeability recalculation via an empty commit and push.
2026-06-20 17:08:58 -07:00
Jinjing 404e45f022 Improve built-in browser downloads (#5940)
* Improve built-in browser downloads

Implements docs/browser-normal-download-behavior.md with automatic OS Downloads saving, collision-safe destinations, and renderer download controls.

* Clean up browser downloads on tab closure and guest destruction

- Cancel and drop pending download records when webview guests are destroyed or closed to prevent memory leaks and dangling state.
- Purge tracking entries for cancelled downloads lacking an active tab.
- Document filename normalization and reservation assumptions in download builder.
- Translate "Copy Terminal ID" context menu action in Spanish and Chinese locales.
2026-06-20 16:33:20 -07:00
Jinjing 27bf41793c Select last visited worktree repo by default on mobile (#5912)
- Resolve the initial repository in the mobile NewWorktreeModal using
  the last-visited worktree's repo ID loaded from AsyncStorage.
- Extract and share new-workspace dialog repository selection and
  resolution logic to src/shared, mirroring it on mobile to bypass
  Metro bundling limits.
- Add unit tests for last-visited repo reading and selection resolution.
2026-06-20 15:12:20 -07:00
Jinjing 99bb6d0bf4 Fall back to global repo order for group projects with unset rank (#5905)
Uses a new `getEffectiveProjectGroupManualRank` helper to ensure that
drag-and-drop midpoint calculations and sidebar list rendering remain
aligned. When a project's `projectGroupOrder` is unset, it now falls back
consistently to its global repo order instead of defaulting to infinity in
the list but a scaled rank during drag-and-drop.
2026-06-20 14:54:43 -07:00
Jinjing 1419193bea Add explicit task title and display name to orchestration tasks (#5901)
Introduce optional `task-title` and `display-name` parameters for orchestration tasks, persisting them in the database and propagating them through the RPC and Orca runtime.

This allows the CLI, dashboard, activity page, and sidebar to display concise, user-friendly labels for dispatched worker agents instead of verbose, raw system preambles.
2026-06-20 03:29:21 -07:00
Brennan BensonandOrca 8264cd2416 Send notes to working agents (#5748)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 20:30:51 -07:00
Brennan Benson 3f3a9ef94b Keep Source Control AI generation available when actions are hidden (#5859) 2026-06-19 19:16:05 -07:00
067c88fe55 feat(source-control): make group order configurable (#2188)
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-19 18:50:05 -07:00
Jinwoo HongandOrca 7320c1e8ba Show Codex reset credit expiry (#5865)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 18:49:22 -07:00
Jinwoo Hong 972078f2c4 Fix paste ownership, input bounds, and IPC validation
Supersedes #5745, #5746, and #5747.
2026-06-19 17:14:55 -07:00
Jinwoo HongandOrca 8ef8596ba1 Fix remote browser/editor tab props persistence (#5847)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 17:01:10 -07:00
Prethish Kumar 21d0391881 fix(kimi): map AskUserQuestion to waiting and expose hook status
Maps Kimi AskUserQuestion PreToolUse events to waiting, exposes the Kimi hook status IPC/preload surface, and hardens Kimi session parsing plus remote hook path construction.
2026-06-19 16:45:34 -07:00
Neil 4eb3e75b9e feat(kimi): Kimi Code sessions in AI Vault + agent status hooks
Adds Kimi Code session parsing for AI Vault and managed Kimi agent status hooks.
2026-06-19 16:42:59 -07:00
Jinwoo HongandOrca 3afed388fc fix: expose terminal visual layout and copyable handles (#5845)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 15:42:13 -07:00
Brennan BensonandOrca c442f3aa00 Keep new workspace cards consistent after compact upgrades (#5843)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 15:34:46 -07:00
Neil 5dbff5d8ea Revert "Fix Claude PR hyperlinks in terminal" (#5826) 2026-06-19 12:29:13 -07:00
Neil 2226e3cbc2 Fix Claude PR hyperlinks in terminal (#5814) 2026-06-19 12:28:17 -07:00
Neil ae77156ab2 feat(worktree): reuse an existing branch when creating a worktree (#5181) (#5781)
* feat(worktree): reuse an existing branch when creating a worktree (#5181)

Adds an explicit "Reuse this branch" checkbox to the new-worktree composer.
When an existing local branch is selected in the smart name field, the
checkbox (default on) checks that branch out instead of creating a new
branch from it — and the choice now survives renaming the worktree folder.

Previously, reusing an existing branch only worked implicitly: it required
keeping the auto-filled worktree name equal to the branch, and editing the
name silently reverted to "create a new branch". There was no discoverable,
durable control — the gap the issue reports.

The fix is renderer-only: picking an existing local branch already sets
baseBranch === branchNameOverride, so the existing backend reuse path
(`git worktree add <path> <branch>`, preserveBranchOnDelete) checks the
branch out correctly across local/SSH/runtime. The checkbox pins that
override via the existing branchNameOverridePreservesNameEdits flag so the
worktree folder can be named independently while the branch is reused;
unchecking creates a fresh branch from the selected ref as base.

- New pure helper resolveComposerBranchReuse (local-vs-remote + default).
- Checkbox hidden for remote-only refs and non-branch sources.
- Tests: pure helper, card render/toggle, and a backend integration test
  proving a renamed folder still reuses the exact branch.

* fix(worktree): refine reuse-branch checkbox (placement, label, eligibility)

Address review feedback on the "Reuse branch" control:

- Move the checkbox directly under the branch (smart) selection instead of the
  Advanced "Name" field — the worktree folder name can legitimately differ from
  the branch, so the choice belongs next to the branch pick and is now visible
  without expanding Advanced.
- Rename the label "Reuse this branch" -> "Reuse branch".
- Make eligibility dynamic: reuse is impossible when the branch is already
  checked out in another worktree (git allows a branch in only one worktree), so
  the checkbox is now hidden in that case (it was already hidden for remote-only
  refs). When a busy branch is picked, the override is no longer pinned to it, so
  creation cleanly falls back to a new branch from that ref as base instead of a
  silently-suffixed branch.

Adds isBranchCheckedOutInWorktrees (pure, unit-tested) and threads the repo's
worktree branch list from the store into the selection logic.

* feat(worktree): animate the reuse-branch row's show/hide

Keep the "Reuse branch" row mounted and collapse it with a grid-rows
transition (same pattern as the Advanced drawer) instead of conditionally
rendering it, so the create-worktree dialog grows and shrinks smoothly when the
option appears/disappears as the selected branch changes. The checkbox is taken
out of the tab order while collapsed.

* refactor(worktree): address review nits on reuse-branch control

From a multi-dimensional review of the branch (all findings low severity):

- Reset reuse state (reuseEligibleBranch, reuseSelectedBranch,
  branchNameOverridePreservesNameEdits) on repo and project switches, matching
  the other reset paths — avoids carrying stale branch-scoped state.
- Disable the reuse checkbox while collapsed so no focusable control lives
  inside the aria-hidden row.
- Extract the busy-branch override decision into a pure resolveComposerReuseOverride
  helper and unit-test it (busy local branch drops the override; remote-only ref
  keeps it) — pins the "no suffixed-branch collision" guarantee.
- Note the worktreesByRepo visibility limitation near the busy-branch check
  (a branch busy only in a hidden external worktree is caught by the backend).
- Strengthen tests: reuse-checkbox toggle in both directions, empty worktree
  list case.
2026-06-19 02:47:05 -07:00
NeilandOrca d855c69fe3 feat(shortcuts): make Select Tab/Workspace 1–9 remappable (#5789)
* feat(shortcuts): make Select Tab/Workspace 1-9 remappable (#5741)

Expose Select Tab 1-9 and Select Workspace 1-9 as single remappable rows in
Settings -> Shortcuts. Previously both chords were hardcoded in
window-shortcut-policy.ts and absent from the Shortcuts UI.

Each is modeled as one ranged action whose stored chord is a representative
(digit canonicalized to 1) that fires for any of 1-9, mirroring the cmux
single-row UX. Defaults reproduce existing behavior (mac: tab Ctrl+1-9,
workspace Cmd+1-9; win/linux: tab Alt+1-9, workspace Ctrl+1-9). Swapping the
two modifiers - the headline use case - works without a false conflict.

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

* refactor(shortcuts): tighten digit-index review nits

- Canonicalize digit-index overrides in getEffectiveKeybindingsForAction so
  display/conflict detection stay consistent regardless of stored digit.
- Use a shared DIGIT_INDEX_KEY_PATTERN regex instead of string comparison.
- Document that extra modifiers (e.g. Shift) are allowed on digit-index chords
  and that the matcher honors terminal-context gating.
- Clarify the workspace-first precedence comment.
- Add tests: Shift modifier, physical-code fallback matching, both ranges disabled.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-19 02:29:07 -07:00
Jinwoo HongandOrca 692d8d0124 Use platform Orca CLI command for Agent Teams (#5773)
Co-authored-by: Orca <help@stably.ai>
2026-06-18 23:18:33 -07:00
Jinwoo HongandOrca 6d6af7af1a Support browser panes on headless remote Orca servers (#5412)
Co-authored-by: Orca <help@stably.ai>
2026-06-18 22:50:11 -07:00
Janderson Fagner e7af3676f2 feat(tray): Windows system tray with minimize-to-tray on close
Adds Windows system tray support and a minimize-to-tray setting for close behavior.
2026-06-18 22:30:44 -07:00
Brennan BensonandOrca f1384597f7 Update installed Orca skills without reinstalling (#5755)
Co-authored-by: Orca <help@stably.ai>
2026-06-18 22:23:27 -07:00
slashdevcorpse f80704cc60 [perf] Speed up CLI launch through Orca
Speed up Windows CLI launch by delivering short startup commands through shell args, falling back to stdin for oversized commands, and moving Codex historical session bridging into an incremental background task. Includes review fixes for Windows symlink and WSL test reliability.
2026-06-18 22:21:48 -07:00
Yang,ZhouandDevin 7fa3ee15d0 fix: stop Devin SessionStart from showing false Running spinner in sidebar (#5731)
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-06-18 17:36:45 -07:00
Carlos Baraza d46349ce82 fix: improve mobile link modifier handling (#5597) 2026-06-18 16:48:43 -07:00
Brennan Benson a34801934d Keep automation off by default in compact workspace cards (#5740) 2026-06-18 16:28:37 -07:00
Brennan BensonandOrca 674639205c Show and Filter Automation-Created Workspaces (#5697)
Co-authored-by: Orca <help@stably.ai>
2026-06-18 13:05:57 -07:00
Brennan BensonandOrca bc0b1e28bd Improve Codex startup prompt reliability (#5686)
Co-authored-by: Orca <help@stably.ai>
2026-06-18 11:39:40 -07:00
Jinwoo HongandOrca e22d2c2c26 fix(landing): make GitHub CLI setup nudge dismissible and provider-aware (#5688)
The empty-workspace landing screen showed an alarming "Missing
dependencies — GitHub CLI is not installed" banner even for users
whose registered projects are all GitLab-backed, where `gh` is never
used. `gh` only powers GitHub PRs/issues/checks, so this is a false
alarm for GitLab-only users (#5670).

Treat the GitHub CLI prompt as a soft, provider-scoped setup nudge
rather than a global missing-dependency error:

- Quiet the banner styling (muted surface, no amber frame) and cap its
  width so it reads as a soft nudge, not an error state.
- Add a persistent dismiss to the gh / gh-auth nudges. Git stays pinned
  as a hard global dependency.
- Dismissal snapshots the set of GitHub-backed project identity keys;
  the nudge re-surfaces only when a genuinely new GitHub-backed project
  is added (set-based, so remove+re-add of the same project doesn't
  retrigger, and GitLab/folder repos never do).

Adds isGitHubBackedRepo() to the host-setup projection (reusing the
existing GitHub-identity detection) plus unit tests for both the
predicate and the dismissal logic.

Co-authored-by: Orca <help@stably.ai>
2026-06-18 01:00:23 -07:00
Jinwoo HongandOrca 84a5def248 Use managed Pi and OMP extensions (#5681)
Co-authored-by: Orca <help@stably.ai>
2026-06-17 23:28:54 -07:00
Jinwoo HongandOrca 3bd7b36012 Narrow computer-use e2e trigger (#5685)
Co-authored-by: Orca <help@stably.ai>
2026-06-17 23:27:26 -07:00
Jinwoo HongandOrca 06d674b35d Fix mobile folder workspace visibility (#5679)
Co-authored-by: Orca <help@stably.ai>
2026-06-17 23:18:34 -07:00