* Unify terminal-driven worktree activation and Cmd+J recency marking.
* Record worktree visits in the back/forward history stack unless navigating history.
* Resolve local images on editor context switch and inline blobs for PDF
* Inline renderer-scoped blob URLs as base64 data URLs during PDF export, ensuring images render properly in the separate PDF print window.
* Track the active editor document's context with a versioning and subscription scheme to trigger reloads of relative images on context switch.
* test commit
* 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>
* fix(settings): defer Display Name persistence until IME composition ends
The repository Display Name input persisted every keystroke via async
updateRepo, including unconfirmed IME text. For Japanese (and other CJK)
input this wrote pre-confirmation text to the store, and its async echo
could cancel the active composition. Track composition state and hold
persistence until compositionend so only confirmed text reaches
updateRepo; non-IME typing still persists per keystroke.
* fix(settings): de-duplicate Display Name persist on trailing IME change
Some IMEs (e.g. Firefox) fire the final change event after compositionend,
which repeated the already-persisted confirmed value through updateRepo.
Track the composition-end text and skip the next matching change so the
confirmed value is persisted exactly once. Model the trailing input event
in the unit test so the single-fire guard is exercised.
* fix(settings): reset IME draft guards after repo changes
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
* fix: address pr-bug-scan validated finding from #6136
removeProject now also drops lastVisitedAtByWorktreeId entries by repo-id mapping when the repo id is fully removed (no sibling host), catching unhydrated worktree timestamps.
* test: cover unhydrated SSH timestamp cleanup
* Test dropping visit timestamps for removed runtime repos
Verify that removing an unhydrated runtime repository successfully drops
its associated worktree entries from the persisted visit history.
---------
Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
* fix(changes-tab): prevent freeze and stale highlights when staging/unstaging
When files are staged/unstaged while the Changes tab is open, the
diff viewer was re-rendering all sections, causing UI freezes and
highlight flickering.
- Add resolveCombinedUncommittedSnapshotEntries() to reconcile
snapshot entries with live git status without destroying existing
loaded diff content.
- Track retainedResolvedSnapshotEntries from current sections to
preserve area state when live git status temporarily loses entries.
- Use Map-based O(snapshot + live) algorithm instead of nested loops.
- Add unit tests for the resolver logic.
- Add e2e test with performance measurement for stale unstaged diffs.
Co-authored-by: Orca <help@stably.ai>
* Prevent duplicate entries in uncommitted snapshot resolution
Track resolved snapshot entries using composite area and path keys to
ensure staged and unstaged sections remain distinct and do not duplicate
when live Git status changes or disappears.
Additionally, switch the retained entries from a Map to a list to support
multiple areas per path, and update CombinedDiffViewer to avoid rebuilding
the snapshot list on row load state changes.
* test: add test coverage for duplicate-path snapshot remapping
- Add unit test verifying that duplicate-path snapshots do not remap
to a retained fallback area.
- Robustify E2E large diff freeze repro test by ensuring interval
timers are always cleared in a finally block.
- Standardize path utilities in large diff fixtures to ensure cross-platform
compatibility.
---------
Co-authored-by: Orca <help@stably.ai>
Reword the nested repository import dialog so it asks users whether to group discovered repositories rather than asserting they are a monorepo.
Also keeps locale catalogs aligned with live nested-import strings and updates Electron folder-import coverage for the new affirmative action label.
* Match terminal handle links using their owning runtime environment ID to prevent false-positive activation when terminal handles collide across local and remote runtimes.
* Focus task-associated terminals directly in the renderer when they are already mounted to avoid redundant runtime RPC focus calls.
- Decouple heartbeat and worker_done logic from the main coordinator
to allow re-use in the orchestration.check RPC method.
- Reconcile unread lifecycle messages during orchestration.check so that
manual coordinators can authoritatively process completions and
heartbeats even if they bypass the main coordinator loop.
- Add unit tests validating task completion, heartbeat recording, and
safety checks against stale or unauthorized worker_done payloads.
* Restore combined diff scroll position using virtualized scroll anchors
Fixes scroll jumping and incorrect restoration in virtualized combined
diff views by tracking scroll position via a stable row anchor (key and
offset) rather than a fragile raw scrollTop.
- Track active row anchors across tab switches and component remounts
- Prevent programmatic scroll events from writing incorrect anchors
- Avoid redundant state updates and re-renders when focusing an
already focused group
* fix: address review findings
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.
* 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>