Commit Graph
125 Commits
Author SHA1 Message Date
Brennan BensonandOrca 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
Jinjing 5cfeaa34c0 fix: address review findings (#4814) 2026-06-07 11:18:43 -07:00
Jinwoo HongandOrca 3ac29ab251 Fix git probe fanout during concurrent refreshes (#4670)
Co-authored-by: Orca <help@stably.ai>
2026-06-04 17:59:09 -07:00
843d969c7d fix(tabs): make the active tab clearly stand out (#4545)
* fix(tabs): make the active tab clearly stand out

The active tab was marked only by a 1px dark-navy line on its top edge,
which read as just another border and was easy to lose in a long, busy
tab strip.

Replace it with a 2px `primary` bar on the bottom edge (bridging the tab
into the panel it controls), a subtle theme-uniform background lift, and
brighter text. The bar leads in both light and dark; the lift uses a
color-mix wash instead of `accent`, whose contrast against `card` is
near-zero in light mode but heavy in dark, so the two themes no longer
lead with different cues. Applies across terminal, browser, and editor
file tabs via the shared indicator constant and wrapper styling.

* fix(tabs): centralize active tab styling

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

* fix(git): cache missing upstream status probes

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

* fix(terminal): defer sustained ANSI redraw bursts

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-03 17:27:20 -04:00
Neil 280234a73e fix: stop OpenTUI redraw and git polling freezes (#4585)
* fix: budget foreground terminal redraw writes

* fix: cache stable no-upstream git probes
2026-06-03 14:13:02 -07:00
Trevin Chow be594b8652 Fix macOS helper path and token cleanup (#3961)
## Summary
- stop the macOS helper from unlinking caller-supplied socket and token paths
- keep parent-owned token cleanup tied to the helper startup that created it
- fail closed for non-socket socket-path collisions and cover helper cleanup races with regression tests

## Verification
- swift test --package-path native/computer-use-macos
- pnpm exec vitest run --config config/vitest.config.ts src/main/computer/macos-native-provider-client.test.ts
- pnpm run typecheck:node
- pnpm lint
- pnpm run build:computer-macos
- Electron/helper startup smoke validation
2026-06-03 16:59:02 -04:00
Neil 9061330ab5 test: reproduce terminal TUI and git polling regressions (#4581)
* test: reproduce terminal and git polling freezes

* test: document regression repro triggers
2026-06-03 13:34:27 -07:00
Jinjing 231088b099 fix: address review findings (#4513) 2026-06-02 14:58:33 -07:00
Jinjing d21e73301e Refresh cleanup base before forced branch deletion (#4462) 2026-06-02 01:08:11 -07:00
Jinjing 1304d6b630 fix: address review findings (#4325) 2026-05-31 16:03:55 -07:00
Neil dee34a653c fix: decode git cquoted status paths 2026-05-31 08:20:33 -07:00
Neil 18ed7b27da fix: validate git repo detection 2026-05-31 08:18:21 -07:00
Neil 75c9f496f1 perf: bound worktree sparse probes
Cap listWorktrees sparse-checkout filesystem probes at 8 concurrent workers while preserving output ordering and parsed sparse/bare short-circuits.

Risk: low.

Validation:
- pnpm exec vitest run src/main/git/remove-worktree.test.ts src/main/git/worktree-list-paths.test.ts src/main/git/worktree.test.ts
- pnpm run typecheck:node
- pnpm lint
- git diff --check
2026-05-31 06:55:20 -07:00
Neil 2e286eef8d perf: bound working tree diff reads (#4171)
Unstaged source-control diffs now check the working-tree file size before readFile and use the existing 10 MB diff budget to avoid pulling huge generated files into the main process.
2026-05-31 06:48:17 -07:00
Neil e6c55d76e6 fix: resolve slashed upstream remotes (#4114) 2026-05-31 04:45:39 -07:00
Neil e3c30712ca fix: allow slash remote push targets (#4109) 2026-05-31 04:38:37 -07:00
Neil 6e0d35480c fix: use nul numstat for compare counts (#4104) 2026-05-31 04:26:41 -07:00
Neil 30b93c6bf7 fix: parse numstat paths with nul output (#4098) 2026-05-31 04:15:23 -07:00
Neil b0ad5cb103 fix: detect branch conflicts for slashed remotes (#4080) 2026-05-31 04:00:09 -07:00
Neil 91865e21f3 fix: build bitbucket line anchors (#4074) 2026-05-31 03:25:45 -07:00
Neil 8ba451e8dd fix: preserve newline worktree paths
Use porcelain-z worktree parsing with fallback line parsing so newline-containing worktree paths survive local and relay operations. Risk: low.
2026-05-31 01:50:16 -07:00
Neil 350adb33ba fix: treat git stage paths as literals 2026-05-30 14:27:17 -07:00
Neil a6b9166242 Fix GitLab hosted source links (#3613) 2026-05-30 13:15:32 -07:00
Jinjing 5dc6947fc6 fix: address review findings (#3866) 2026-05-30 12:45:49 -07:00
Neil f66e42a2bb fix: time out git runner execFile calls (#3836) 2026-05-30 12:02:08 -07:00
Brennan BensonandOrca d3b56a5922 Add one-click setup script generation (#3370)
Co-authored-by: Orca <help@stably.ai>
2026-05-30 11:57:55 -07:00
Neil 7112c1c767 fix: clean up command runner capture listeners (#3748) 2026-05-30 11:40:46 -07:00
Neil b0435c1ac5 perf: classify large bulk discard paths safely (#3743) 2026-05-30 08:33:10 -07:00
1844a992e8 fix: pr-bug-scan validated finding from #2947 (#2965)
* fix: address pr-bug-scan validated finding from #2947

Prepended `:(literal)` pathspec magic to each path passed to `git clean -ffdx --` in both `cleanUntrackedPaths` call sites, so untracked filenames containing pathspec glob magic (`*`, `?`, `[`, `]`) a

* fix: literalize discard git pathspecs

---------

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-30 01:25:41 -07:00
386fc42564 Add Source Control fast-forward action (#3364)
* Add source control fast-forward action

* Fix fast-forward overwrite error wording

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 02:06:12 -04:00
4180352856 fix: auto-populate Create Worktree branch tab (#2850)
* fix(new-workspace): show branch results before typing

Query and render Branch tab results for empty input so users can pick existing refs immediately.

* refactor(new-workspace): simplify branch source helpers

Remove thin abstractions from the branch result helper while preserving Branch tab behavior.

* fix(new-workspace): load branch options for empty search

* refactor(new-workspace): keep smart branch search lazy

Limit empty-query branch loading to the Branch tab so Smart mode keeps its start-typing state.

* fix(runtime): populate remote branch searches when empty

Keep runtime-backed repos aligned with the local and IPC branch search paths.

* fix: harden branch search prepopulation

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

* test: align branch search assertions after merge

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 20:16:11 -04:00
Trevin Chow 10f97509ea fix: preserve unmerged branch when removing a worktree (#2927) (#2939)
fix: preserve unmerged branch when removing a worktree (#2927)
2026-05-28 20:19:53 -04:00
Jinjing 47dffe5308 fix: address review findings (#3014) 2026-05-28 16:13:45 -07:00
Jinwoo HongandOrca 8f172f538c Fix clone abort cleanup ownership (#2981)
Co-authored-by: Orca <help@stably.ai>
2026-05-28 01:17:05 -07:00
Jinwoo HongandOrca d917240499 Guard untracked discard against symlink escapes (#2947)
Co-authored-by: Orca <help@stably.ai>
2026-05-27 19:48:27 -07:00
659fe79226 feat: add source control action to abort merge (#2092)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-05-27 14:59:23 -07:00
Trevin Chowandbrennanb2025 a65f7b4216 feat: auto-rename workspace branch from the first prompt (#2888)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-05-27 14:09:43 -07:00
Trevin ChowandNeil b2b5cac9a9 Add per-file line counts to the source control sidebar (#2865)
* Add per-file line counts to the source control sidebar

Show +N/-N (green/red) next to each file in the Changes, Untracked, and
Committed-on-branch sections so the magnitude of a change is visible at a
glance. Counts are computed per staging area via `git diff --numstat`;
untracked/new files count their full contents as additions and binary
files show no count.

Consolidate numstat parsing and binary-buffer detection into shared
modules reused by the local status path, the SSH/relay path, and the
existing branch-compare code. Include added/removed in the status-entry
equality check so the sidebar doesn't re-render on unchanged polls.

* fix: harden source control line counts

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-05-26 20:09:54 -07:00
Trevin Chow 286729fc7d fix(worktree): match slash-named branches in base-ref search (#2861)
Match single-token base-ref search against both leaf and ancestor segments for local and remote slash-named branches. Keeps the SSH relay argv in parity and adds regression coverage.
2026-05-26 19:33:37 -07:00
Brennan BensonandOrca 91991d6186 Improve refresh local base ref UX (#2570)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 18:28:41 -07:00
Brennan BensonandOrca b7832c0790 Persist worktree creation base in git config (#2859)
Co-authored-by: Orca <help@stably.ai>
2026-05-26 15:54:07 -07:00
Brennan Benson 5287a581a6 Revert "Allow OS metadata during worktree delete preflight" (#2776) 2026-05-24 23:23:31 -07:00
Brennan BensonandOrca fdb63366d3 Allow OS metadata during worktree delete preflight (#2760)
Co-authored-by: Orca <help@stably.ai>
2026-05-24 23:00:40 -07:00
Brennan BensonandOrca 9cb9a9d5e3 Respect GitHub username branch prefix (#2599)
Co-authored-by: Orca <help@stably.ai>
2026-05-22 02:20:32 -07:00
Jinjing 41a2d7ba90 Target source-control actions to publish branches (#2612) 2026-05-22 00:35:30 -07:00
Jinjing d4e9c22f8b Fix worktree creation for selected existing branches (#2543)
* fix: address review findings

* fix: address CI failures
2026-05-21 12:25:32 -07:00
Brennan BensonandOrca a140313d4a Add local diagnostics error tracking (#2351)
Co-authored-by: Orca <help@stably.ai>
2026-05-21 11:15:01 -07:00
Anwesh 6e949d6ec8 Fix worktree base ref ambiguity
Resolve ambiguous git worktree base refs by qualifying local and remote branch refs before invoking git worktree add.
2026-05-21 00:46:31 -07:00
Jinjing bcb86d0778 Fix pull status for legacy origin/main worktrees (#2487)
- Resolve an effective upstream so legacy branches tracking origin/main use
  origin/<branch> when that remote branch exists.
- Pull, sync, and ahead/behind status now operate on the same branch the UI
  reports, including after non-fast-forward push rejections.
2026-05-20 22:10:51 -07:00
Jinjing e0104372da Squashed commits (#2485)
- Fix workspace space cache and git status cleanup checks

- Treat browser tabs as workspace delete blockers

- Move deletion readiness into shared presentation logic so tests cover it
- Preserve explicit empty git status entries for clean worktrees

- Add package manager cache cleanup to space manager

- Detect npm, pnpm, Yarn, and Bun caches from lockfiles during scans
- Add explicit cleanup IPC for safe and aggressive cache actions
- Support local, SSH, and Windows command execution paths safely
- Tighten workspace deletion decisions with git, editor, agent, and terminal state
2026-05-20 22:09:35 -07:00