Commit Graph
4867 Commits
Author SHA1 Message Date
github-actions[bot] b6b57f31e7 release: v1.4.72-rc.2 v1.4.72-rc.2 2026-06-16 05:32:08 +00:00
Jinwoo HongandOrca adf5ccbc92 feat(mobile): view image files from the Files tree (#5472)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 22:30:05 -07:00
Brennan Benson 1ccc07c013 Open Add Project from the settings checklist (#5449) 2026-06-15 22:26:57 -07:00
github-actions[bot] 319402a2ed release: v1.4.72-rc.1 v1.4.72-rc.1 2026-06-16 05:14:46 +00:00
Jinjing aee2c0a6a4 Limit large git diff payloads in main process before IPC transfer (#5469)
* Limit large git diff payloads in main process before IPC transfer

Move the large diff rendering limit check to a shared module so that
the main process can evaluate diff sizes before transferring them. If
a diff exceeds the limits, its text content is dropped prior to IPC
serialization, and only the limit metadata is sent. This prevents the
application from freezing or crashing when loading massive diff files.

* Gracefully handle and prune oversized files in diff viewer

Prevent UI freezes and out-of-memory errors when viewing or editing
extremely large diffs or files. Working-tree files above 10MB and git
buffer overflows are treated as binary. Text diffs exceeding safe
rendering limits have their contents pruned before IPC transport, and
the UI is updated to show fallback states and disable invalid saves.

* Document save action check for large diffs and fix test import

Explain why saveContentAvailable is required for oversized diffs, as
stripped text bodies before IPC prevent complete saves. Also update the
large-diff-render-limit import in E2E tests to use the shared path.
2026-06-15 22:13:46 -07:00
Jinwoo HongandOrca e3bf7d8614 feat(mobile): pickers, workspace parity, active-workspace focus, tap-to-open, source-control parity, artifact viewing (#5330)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 22:02:51 -07:00
Neil 805f7a271d style(settings): improve section card body elevation and padding (#5457)
* style(settings): improve section card body elevation and padding

* test(settings): mock useShortcutKeyCombos in SettingsSidebar tests

Merged sidebar search PR (#5459) switched to ShortcutKeyCombo but the
test mock was not updated, breaking verify on downstream settings PRs.
2026-06-15 21:49:10 -07:00
Jinwoo Hong 6740c00351 Build and ship iOS to TestFlight from CI (#5468)
Adds an ios-build job to the Mobile Release workflow (build + sign + TestFlight upload on a macOS runner via fastlane + App Store Connect API key), and fixes a pre-existing Mobile Checks bug where the mobile typecheck needed root deps for ../src imports.

Merged with --admin: the only failing check is the repo-wide pr.yml '@/lib/utils' vitest resolution break affecting all open PRs, unrelated to this change.
2026-06-15 21:38:00 -07:00
Neil 97db443764 style(settings): polish integration card shells (#5463) 2026-06-15 21:17:38 -07:00
Neil 1b00e7cc79 style(settings): improve sidebar search input styling (#5459) 2026-06-15 21:16:14 -07:00
Neil 95af735062 style(settings): polish sidebar nav hover and active states (#5458) 2026-06-15 21:15:26 -07:00
Jinjing 8b783274f2 Restore README downloads badge 2026-06-15 20:55:49 -07:00
Trevin ChowandJinjing 2a42d46719 feat: Add multi-folder local project picker (#5406)
* feat: add multi-select to local project folder picker

- Replace single-folder `pickFolder` IPC with multi-select `pickFolders`
- Refactor add-local-path flow to process multiple folders in sequence,
  deferring the git-ready handoff to the first successfully added repo
- Skip non-git folders silently during batch adds and surface a toast
  when any were skipped, rather than blocking the entire import on the
  nested-repo review UI

* fix: address multi-folder picker review feedback

* Skip nested repository review on progress during batch folder adds

Avoid initiating the nested-repository review flow during multi-folder
batch adds. This ensures the batch folder flow can continue processing
git folders without interruption.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 20:54:03 -07:00
OrcaWinandNeil 52f2a32e62 Fix settings search fan-out (#5452)
Co-authored-by: Neil <neil@stably.ai>
2026-06-15 20:52:06 -07:00
Jinjing 87d905b8c3 Fix README downloads badge 2026-06-15 20:51:15 -07:00
Jinjing d36782a4a8 Respect repository auto-merge setting and forward merge method (#5453)
- Retrieve and propagate `autoMergeAllowed` from GitHub repo metadata.
- Suppress auto-merge action in UI if disallowed by the repository.
- Support specifying the merge method (e.g., squash) when auto-merging.
2026-06-15 20:48:36 -07:00
Neil 67f655b23e Improve onboarding agent step layout and permissions UX (#5451)
Pin the Yolo permissions checkbox below the agent picker so it stays
visible on every screen size, and confine scrolling to the agent grid
with a dynamic four-row cap. Remove the subtitle max-width that caused
awkward wrapping and tune checkbox colors to match the muted card surface.
2026-06-15 20:35:50 -07:00
Jinjing 22263a23b0 Open check run details in an editor tab instead of a modal (#5447)
* Open check run full details in an editor tab instead of a modal

- Display check run output, annotations, and job lists within the main editor workspace.
- Replace the right-sidebar checks panel detail dialog with a tab-opening action.
- Suppress local file-system actions (like path copying and revealing) on virtual check-run detail tabs.

* Extract path and rename UI to EditorPanelHeaderPath

- Offloads path rendering, renaming, and context-menu behaviors from
  EditorPanelHeader into a new dedicated component.
- Improves code maintainability and readability by decoupling distinct
  responsibilities within the editor panel headers.
2026-06-15 20:24:28 -07:00
Brennan Benson 2aa4ae6d21 Make agent session history easier to scan (#5438) 2026-06-15 20:15:17 -07:00
Jinjing 8e9f0fb0da Use destructive variant for delete worktree and align empty checks (#5448)
- Change the delete worktree button in MergedReviewActions to a
  destructive variant to make the workspace deletion more obvious.
- Remove flex centering layout from the empty checks container, using
  left padding instead to align with other sidebar items.
2026-06-15 20:07:52 -07:00
Jinjing 672c3d2d5e Resolve wrapped agent foreground processes on Windows and SSH relays (#5446)
Identify specific agents (e.g., codex, gemini, aider) running under
interpreter wrappers like node or python by querying and inspecting
descendant process tables.

- Add Windows process-tree queries using PowerShell and WMIC.
- Support deep process inspection on remote SSH relays.
- Retry wrapper checks in OrcaRuntime for delayed async cache resolution.
- Prevent false positives by validating only recognized agent processes.
2026-06-15 20:06:05 -07:00
Jinjing 996284241d Implement resizable Markdown table of contents panel (#5444)
* Implement resizable Markdown table of contents panel

Introduce resizable behavior to the Markdown table of contents panel,
allowing users to adjust its width via a draggable handle.

- Persist the custom panel width in the UI state and main process store.
- Clamp the width to a safe range (200px to 600px) based on layout space.
- Ensure the remaining editor workspace does not shrink below 320px
  by computing constraints dynamically against the parent container width.

* Clone process env without undefined values for Windows preflight

- Filter out undefined values when cloning process.env to prevent
  potential serialization or typing issues.
- Update buildLocalPreflightEnv return type to Record<string, string>.
2026-06-15 19:59:44 -07:00
Trevin ChowandJinjing 7361bff698 feat: rename worktree folder to match branch on first work (#4743)
* feat: rename worktree folder to match branch on first work

When the first agent message auto-renames a freshly created creature branch to a
short, work-derived name, also align the on-disk worktree folder and the sidebar
display name with it. Re-key every worktree-scoped slice of state — renderer
store maps plus the persisted main-process state — through the resulting id
change so the live worktree survives the rename instead of being treated as a
deletion (its tabs, terminals, browser panes, and git status all follow).

The rename is best-effort and local-only: a skip or failure (remote runtime,
Windows lock, destination taken) leaves the folder as-is and never undoes the
branch/display rename that already landed.

Squashed from the original PR #4743 commits, rebased onto upstream/main to drop
accumulated merge commits and i18n formatting churn so the branch carries only
the feature diff:
- Rename worktree folder to match branch on first work
- migrate renamed worktree session ids
- keep the live worktree alive through a folder rename
- address PR review feedback

* Address PR review feedback (#4743)

- orca-runtime: emit in-process worktreesChanged client event on folder rename, mirroring notifyBranchRenamed so onClientEvent listeners aren't left stale
- worktrees: re-key rightSidebarExplorerViewByWorktree and activeWorkspaceKey through a worktree-identity rename (both were worktree-scoped but missed by buildWorktreeRenameState)
- branch-name-from-work: treat prefix-only model output as an empty slug so the caller skips the rename instead of producing a doubled prefix
- worktree-folder-rename-target: document why posix.dirname is safe (Windows filtered out earlier)
- tests for each of the above

* Extract branch rename test helpers to a separate harness file

Move git responders, mock builders, and test event fixtures out of
first-work-branch-rename.test.ts into a new test harness file. This
reduces file length and removes the max-lines ESLint disable directive,
complying with project style guidelines.

* Wrap entire OnboardingFlow in TooltipProvider

Enable the use of tooltips anywhere within the onboarding flow, rather
than restricting them to the step indicators.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:58:55 -07:00
Trevin ChowandJinjing c56f615f94 feat: Add file explorer name filter (#5410)
* Add file explorer name filter

* Integrate file content search and name filtering in File Explorer

Combine the file explorer view and the content search panel into a
unified sidebar component with a tab-like toggle between filtering by
name ("Names") and searching file contents ("Contents").

This avoids layout shifts and costly component remounting by keeping
both query fields mounted within a shared header and layering the body
panes. It also prevents directory expanding and collapsing when a name
filter query is active to preserve tree projection invariants.

* Restrict file explorer loading and actions to active files view

Prevent passive file loads, macOS app-data probes, and background explorer
activities when the sidebar is open to the search panel instead of the
files panel.

* Resolve visible files worktree path only when in files view
* Disable explorer actions (collapse all, refresh, drag-and-drop) on search
* Add safety check in useFileSearchPanel rerunSearch for missing worktree

* Improve file explorer search component architecture and accessibility

- Refactor FileExplorerViewSwitch to use shadcn ToggleGroup primitives.
- Add translated aria-labels to the search input and clear button.
- Ignore escape and other keydown actions during IME composition.
- Document logic for directory expansion suppression and search IDs.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:49:38 -07:00
Trevin ChowandJinjing 3ec1a36ba9 feat: add safe fork upstream sync setting (#5408)
* add safe fork upstream sync setting

* fix fork sync review feedback

* Review safe fork sync setting

* Fix local preflight env typing

* Fix onboarding flow SSR test tooltip provider

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:41:45 -07:00
Trevin ChowandJinjing a325ac467c feat: expandable commits and actions in the git history panel (#5419)
* feat: expandable commits and actions in the git history panel

Expand a commit row in the Commits panel to see its changed files inline; click a file to open that file's commit diff. Author and date surface on expand, so the dense row itself stays subject-only.

Right-click a commit for: open in the in-app browser, copy hash, copy message, and explain changes (spawns the default agent seeded with the commit context).

Open-in-browser resolves the provider commit URL in the main process via a new remoteCommitUrl resolver (GitHub/GitLab/Bitbucket), mirroring the existing remoteFileUrl chain end-to-end (repo, IPC, SSH provider, runtime RPC, preload) so it works for local and SSH/remote workspaces.

Layout: subject-first single-line rows with a tighter graph, refs moved inline, and local/remote ref pills deduped when they point at the same commit.

* fix: address git history review feedback

* fix: address PR review feedback on the git history panel

- Trim commit SHA before building the remote URL so whitespace input returns null instead of an invalid %20 URL.
- Gate commit-row expansion on the file loader (onLoadCommitFiles) so a row can't expand into a perpetual loading state.
- Harden the explain prompt: treat the commit subject and diff as untrusted data and run git show --no-ext-diff.
- Keep ambiguous multi-segment remote refs instead of mis-deduping them against a local branch.
- Use standard 10-char i18n keys for the new commit-history strings and translate them into es/ja/ko/zh.

* refactor: extract commit-history actions into useGitHistoryCommitActions hook

Moves the commit load/open/context-menu action callbacks (and the per-commit compare cache) out of SourceControl.tsx — which already carries a max-lines disable — into a focused hook, addressing the PR review nitpick. Behavior is unchanged.

* Refine git history row rendering, ref deduplication, and OID validation

- Prevent deduplication of remote branch badges in the history view
  when multiple remotes exist or when a ref is explicitly preserved.
- Render GitHistoryRow as an accessible button with dynamic ARIA labels
  for expansion states.
- Add double-click handler on commit files to open them permanently.
- Validate commit SHAs as full 40-character Git object IDs before
  requesting remote commit URLs.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 19:28:45 -07:00
Neil 13f7163365 Add agent permission mode controls (#5440) 2026-06-15 18:38:56 -07:00
Jinjing c94c20c30c test: use local host label in expectations (#5441) 2026-06-15 18:38:40 -07:00
github-actions[bot] fae4b92352 release: v1.4.72-rc.0 v1.4.72-rc.0 2026-06-16 01:37:38 +00:00
OrcaWinandNeil a32fe5d823 Refresh Windows PATH for local preflight probes (#5442)
Co-authored-by: Neil <neil@stably.ai>
2026-06-15 18:35:28 -07:00
Trevin Chow 1d05e72de3 refactor(search): dedupe rg/git-grep match-append logic
Deduplicate the rg/git-grep search match append/count/truncation path into a shared helper while preserving current matchCount normalization and fallback behavior from main.
2026-06-15 18:27:40 -07:00
Trevin ChowandJinjing 2b8d9a43de feat(linear): add project support to agent CLI (#5433)
* feat(linear): add project support to agent CLI

* fix(linear): resolve project names across search pages

* fix(linear): harden agent project support

* fix(linear): address project review feedback

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 18:24:53 -07:00
JinjingandTrevin Chow 7f3aac9f5e refactor(search): dedupe rg/git-grep match-append logic (#5439)
The append-and-cap step — push a match, bump the count, trip the
truncation flag at the cap — was copy-pasted across three call sites in
ingestRgJsonLine and ingestGitGrepLine. Each copy independently carried
the truncation-ordering invariant (set acc.truncated synchronously in the
same tick it returns 'stop'), so a future edit could break that safety
property in one copy while the others kept working. Collapse the three
into a single pushMatch helper.

Also drop the hand-rolled escapeRegexSource in favor of the shared
escapeRegex from string-utils; its "esbuild chokes on bracket-class regex
literals" rationale is stale, verified by building the relay bundle, which
now contains that literal and compiles cleanly. And swap the per-match
conditional-spread object build for direct assignment to skip two
throwaway allocations per match on the hot path.

No behavior change; the 29 text-search tests, typecheck, oxlint, and the
relay build all pass.

Co-authored-by: Trevin Chow <trevin@trevinchow.com>
2026-06-15 18:18:37 -07:00
Neil 98e7831247 Add TextMate-backed Nim highlighting (#5434) 2026-06-15 18:11:12 -07:00
OrcaWin 03d572c022 Fix Windows worktree deletion and host labels (#5391)
- close local filesystem watchers before Windows worktree deletion\n- normalize local repo/worktree path comparisons for Windows casing and slashes\n- use platform-aware local host labels\n- remove the Nim highlighting changes; that should land separately via a maintained grammar path\n- add review coverage for pending watcher grace teardown
2026-06-15 17:07:12 -07:00
Jinwoo HongandOrca f53dddeb78 Fix stale GitHub task drawer (#5424)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 16:51:58 -07:00
Jinwoo HongandOrca 50de1de815 Use stepped animation for agent working dot (#5428)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 16:42:39 -07:00
github-actions[bot] ab3ac8893d release: v1.4.71-rc.2 v1.4.71-rc.2 2026-06-15 23:41:42 +00:00
Brennan Benson bf31ecbad7 Keep Codex terminals responsive during startup (#5301) 2026-06-15 16:40:45 -07:00
Brennan Benson 3a87a9e572 Clarify agent hibernation controls (#5426) 2026-06-15 16:31:18 -07:00
Brennan BensonandOrca f3f41e3e2b Make compact workspace cards easier to find in Settings (#5422)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 15:48:48 -07:00
github-actions[bot] 68c3830f62 release: v1.4.71-rc.1 v1.4.71-rc.1 2026-06-15 22:43:53 +00:00
Trevin ChowandJinjing 9236ce5a19 fix: worktree tab overflow (#5415)
* fix worktree tab overflow

* address tab overflow review feedback

* Fix tab width rules and improve overflow navigation updates

* Move width constraints from tab roots to outer containers to ensure correct sizing and prevent layout breakdown.
* Track a dynamic tab layout signature to recompute overflow navigation boundaries whenever tab states, status, or labels change.
* Handle malformed timestamps in git history formatting to prevent application crashes on invalid or infinite date numbers.
* Remove redundant tooltip titles from the tab bar scroll buttons.

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-15 15:37:58 -07:00
a873fedf60 fix: Fix macOS worktree permission scoping (#5407)
* Fix macOS worktree permission scoping

* Address macOS permission review feedback

* Tighten permission prompt review tests

* Fix worktree root permission scoping

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-15 14:54:50 -07:00
Jinwoo HongandOrca ce6d6280fa fix: share Pi agent overlays by source (#5417)
Co-authored-by: Orca <help@stably.ai>
2026-06-15 14:50:51 -07:00
Trevin Chowandbrennanb2025 6f783142f7 fix(sidebar): keep pinned worktrees in grouped lists (#4745)
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-06-15 14:46:37 -07:00
Brennan Benson 9e6afad545 Prevent large diffs from freezing the diff view (#5409) 2026-06-15 14:39:56 -07:00
github-actions[bot] 239148f911 release: v1.4.71-rc.0 v1.4.71-rc.0 2026-06-15 21:38:46 +00:00
Brennan Benson 04f2121ee9 Add experimental agent hibernation (#5347) 2026-06-15 14:36:10 -07:00
26121a4315 fix(mobile): respect Android device rotation lock instead of forcing rotation (#5403)
* release: v1.4.48-rc.0 [rc-slot:2026-06-05-15]

* release: v0.0.1-rc.0 [rc-slot:2026-06-06-03]

* fix(mobile): respect Android device rotation lock instead of forcing rotation

The app rotated on Android even when the system auto-rotate lock was on.
Expo's top-level `orientation: "default"` emits `android:screenOrientation="unspecified"`,
which auto-rotates on many devices regardless of the lock, and the
`react-native-screens` `orientation: 'all'` screenOption mapped to FULL_SENSOR,
which forces rotation outright.

react-native-screens exposes no orientation value that honors the rotation lock
(even 'default' calls setRequestedOrientation(UNSPECIFIED) at runtime, overriding
the manifest). The Android value that respects the lock is "fullUser", which must
come from the manifest. So:

- Add an `android-respect-rotation-lock` Expo config plugin that sets the main
  activity to `android:screenOrientation="fullUser"` (honors the lock; allows all
  orientations when unlocked, matching iOS).
- Remove the runtime `orientation` screenOption so the manifest value governs.

iOS behavior is unchanged (UISupportedInterfaceOrientations still lists all four).

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:45:58 -07:00