Determine the correct SSH connection ID for a file by matching its path
against the child repositories inside a folder workspace. This allows
reading files in mixed local and SSH folder workspaces, where a single
global connection ID cannot be resolved.
* Automatically link newly created pull requests/merge requests to the
worktree using the provider-specific metadata key (e.g., linkedPR,
linkedGitLabMR) and persist the submitted base ref.
* Prefer worktree-specific base ref returned by worktree.show when
resolving the comparison base ref.
* Handle metadata linking failures gracefully as a non-fatal warning
without blocking the pull request creation flow.
* Add overlay unread badge to status glyphs in new card style
Overlay an amber dot badge on status indicators, branch icons, and
review status glyphs when the new card style and unread state are active.
This avoids widening the status lane or relying on a separate bell icon,
keeping the design compact and preserving title row alignment.
* Remove duplicate shrink-0 class in WorktreeCard
The outer container already applies 'shrink-0', making the duplicate
class inside the conditional branch redundant.
* Avoid auto-reloading single-file diff tabs if their status row has
moved to a different area (e.g. from unstaged to staged).
* Prevent auto-reloading combined uncommitted diffs when they are
backed by an uncommitted entries snapshot.
* This preserves the open tab's original diff context as staging and
commit status changes, preventing useful context from being lost.
Extract title resolution into a dedicated helper to ensure both inline
and dialog pull request creation flows consistently fall back to
a normalized and humanized branch slug when no eligibility title is
available.
- Normalize remote refs before humanizing branch slugs
- Pre-populate dialog titles when eligibility title is missing
- Update E2E tests to expect pre-populated draft titles
Connect the ChecksPanel PR draft generation to the global generation
slice, aligning its behavior with SourceControl. This allows detail
generation to continue in the background when navigating away or
switching worktrees, and guarantees that generated fields, terminal seeds,
and branch-preparation push requirements are restored on remount.
Move the "Update" and "Move to Status" options under a new "Workspace"
section header at the very top of the worktree context menu. This
improves usability and groups workspace-management actions together.
- Remove Windows from the release evidence platform matrix check because Windows release evidence is temporarily paused due to CI runner PTY readiness.
- Add scenarioTitle as taskTitle and a display name to mock agent objects to satisfy updated runtime row shapes in mobile lag scripts.
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.
Query the `worktree.show` RPC endpoint on screen focus and poll every
3 seconds to retrieve up-to-date worktree metadata. This ensures that
task-generated names and subsequent displayName updates are reflected,
rather than relying solely on the initial route parameter entry hint.
* Track update check attempts to prevent stale races and handle stalls
- Sequence each update check with an attempt ID to prevent stale event handlers (like async changelog fetches) from overwriting newer check states.
- Introduce a 45-second timeout to gracefully fail or retry hung update checks that stall before reaching updater events.
- Settle checks with a brief grace period when the updater promise resolves without firing a terminal event.
* Ignore update-available events when no active check attempt exists
Prevents processing stale events from the auto-updater after a silent
background check has already settled, which could otherwise overwrite
more recent check states or trigger unexpected status transitions.
* Ignore stale electron-updater events from previous check attempts
Introduce attempt tracking to bind emitted updater events to the active
update check. This prevents stale events (such as checking, available,
not available, or errors) from previous checks or preflight stages
from triggering false state transitions or duplicate status updates.
- Track the launched and active attempt IDs during update preflight
- Ignore events if their attempt ID does not match the active check
- Allow error events to propagate during active download/install phases
- Clear pending nudge campaigns on silent follow-up checks settling to not-available
* 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.
Narrow RateLimitService provider config wiring so OpenCode Go receives provider-specific config while Gemini keeps its OAuth-enabled setting through a separate resolver.\n\nValidated locally with the full src/main/rate-limits test suite and typecheck.
- 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.
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.
- Replay terminal scrollback when transitioning back to the foreground on iOS to fix blank xterm backing stores in WKWebView.
- Mark inactive mounted terminal buffers stale so they repaint on their next activation.
- Enforce a 2048-character maximum URL length for mobile terminal link tapping to align with desktop safety bounds.
* Track and sync base ref throughout create PR intent flow
* Capture and track the review base ref (`baseRef`) directly inside the Create PR intent run token to keep async steps anchored to the base selected when the run started.
* Resolve intent flow and eligibility bases safely using the compare-base picker to override stale default refs.
* Keep the PR dialog's base field in sync with the active compare base while untouched by the user.
* Ignore stale generated PR fields if base ref syncs while in flight
Track user-initiated edits to the base field separately using a ref.
When the base ref is synced automatically from Source Control, mark
the base field dirty to increment its revision. This ensures stale
generated fields from an in-flight request cannot overwrite or revert
the newly updated base.
Ensure that when a visible fallback PR has been merged (e.g., outside
Orca with a deleted head branch), it is still accepted and refreshed by
branch lookup instead of being discarded as an implicit merged PR.
* Add `acceptMergedFallbackPR` option to GitHub branch lookups
* Enable this option during manual and background refreshes of fallback PRs
* Plumb the new option through preload APIs, IPC handlers, and RPC protocols
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.
* Keep mobile-driven browser panes paintable and park idle hidden panes
- Add useSyncExternalStore-based hooks to reactively track mobile-driven pages.
- Prevent unmounting or losing paintability for panes controlled by a mobile device.
- Park heavy browser pane subtrees in hidden worktrees to improve performance.
* Derive workflow platforms dynamically in runtime contract test
Avoid hardcoding Linux, macOS, and Windows platforms in the Electron
runtime package contract test. Instead, extract the platforms directly
from the golden E2E workflow matrix strategy and map them to their
corresponding run steps.
* Add test file for workspace delete bug
Co-authored-by: Orca <help@stably.ai>
* Fix Windows workspace deletion runtime resolution
Resolve project-created workspace deletion through the selected project runtime so Windows paths are listed strictly without falsely tripping the unregistered worktree guard.
Design doc: docs/delete-workspace-windows-unregistered.md
---------
Co-authored-by: Orca <help@stably.ai>
Allow branch-discovered GitHub and GitLab PRs to display on the
worktree card even when the worktree has no explicitly linked PR
metadata.
This is enabled by passing the review hint key option down and
allowing the PR display logic to show neutral branch-level lookups
when no linked review key is present.
Revamp the session display in the AI Vault to prioritize visible
conversation history (user and assistant turns) over raw metadata.
- Display the latest conversation turn directly on collapsed rows
- Redesign expanded details to show the "Original ask" and latest turns
- Integrate visible preview text into session search filters
- Add a dedicated drag handle for resuming sessions to prevent
accidental drags on the row card
- Update row height and virtual scroll metrics to accommodate previews