Commit Graph
3607 Commits
Author SHA1 Message Date
Jinjing 9c8d9be8dd Optimize CI checks caching and polling backoff behavior (#5252)
* Optimize CI checks caching and polling backoff behavior

- Prevent backing off the polling interval when no checks are reported
  yet, keeping polling at the baseline rate to detect newly started jobs.
- Reduce empty checks cache TTL to 10 seconds to allow faster recovery
  from a "no checks" state while preserving the 60-second TTL for active jobs.
- Avoid bypassing the GitHub CLI cache on tab entry, reserving forced
  fetches only for explicit manual user refreshes.
- Update "No checks configured" copy to "No checks reported yet" to avoid
  misleading users before their CI pipelines have started running.
- Ensure manual checks refreshes do not inherit in-flight automatic requests
  which might be backed by cached CLI data.
- Lookup head-specific cache keys during PR refresh events to prevent
  incorrectly deriving neutral check statuses.

* Clarify polling reset comment in ChecksPanel

Update the comment to accurately refer to the entry refresh rather
than a forced fetch establishing a fresh baseline.
2026-06-12 00:16:36 -07:00
Jinjing 4278fdc1e8 Constrain right sidebar primary action widths (#5249)
* Constrain right sidebar primary button widths to prevent layout jumps

Introduce min-width constraints, truncation, and content-width layouts
for primary actions in the right sidebar and PR dialogs. This prevents
buttons from shifting layout dramatically when labels morph dynamically
as git and review state changes.

* Fix right sidebar split action overflow
2026-06-12 00:09:26 -07:00
Jinjing d27985e05b Constrain right sidebar primary button widths to prevent layout jumps (#5248)
Introduce min-width constraints, truncation, and content-width layouts
for primary actions in the right sidebar and PR dialogs. This prevents
buttons from shifting layout dramatically when labels morph dynamically
as git and review state changes.
2026-06-11 23:50:25 -07:00
Jinjing 2899a60872 Durable persistence for commit message generation across worktree switches (#5243)
* Persist commit message generation state across worktree switches

Introduce a new global store slice for commit message generation to prevent
in-flight requests from being orphaned or lost when the Source Control
sidebar is unmounted or when switching between worktrees.

- Key commit generation records by worktree ID/path in the Zustand store
- Hydrate completed messages back into the draft input when returning to
  the originating worktree without overwriting active user edits
- Ensure the agent-selection dialog state remains bound to the target
  worktree that initiated the generation
- Wait for the PR composer eligibility check before hydrating completed
  PR field generations on sidebar remounts

* Route cancellations to starting runtime and prune stale worktree records

Ensure commit message and pull request generation cancellation requests
are always routed to the runtime environment that was selected when
the generation started, even if active settings change before
cancellation.

Additionally, prune commit message and pull request generation records
when worktrees are removed to prevent stale records from lingering in
the store.
2026-06-11 23:36:46 -07:00
Jinjing 4d0c449378 Support project reordering with groups and add manual-default notice (#5237)
* Support project reordering with groups and add manual-default notice

Refactors the project header drag-and-drop implementation to work correctly
with project groups by tracking ordering within buckets and updating project
group assignments on drop. Also introduces a dismissible sidebar education
card notifying upgraded profiles that manual project ordering is now the default.

* Split oversized translated UI modules

* Fix localized option test regressions
2026-06-11 20:39:39 -07:00
JinjingandOrca f72c22532a Support GitLab MR unlinking and AI generation in ChecksPanel (#5204)
* feat: support GitLab MR unlinking and AI generation in ChecksPanel

Integrate GitLab merge request actions alongside GitHub pull requests in
the sidebar checks panel. This includes unlinking GitLab MRs, enabling
AI-driven title and body generation for GitLab, and dynamically adapting
menu labels (e.g. "More MR actions" vs "More PR actions") depending on
the active provider.

* fix: handle null base ref in hosted review creation and add tests

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

* Extract sub-components and hooks from renderer components

To improve component focus and maintainability, extract large inline
sub-components, custom hooks, and logic helpers into dedicated files:

- Extract `HeroPaired` from `MobileHero` to `MobileHeroPairedDevices`.
- Move `ChromePreview` from `ThemeStep` to `theme-chrome-preview`.
- Refactor `HostedReviewActions` to use `useHostedReviewActions` hook.
- Move MCP config loading from `McpConfigSection` to helper file.

* Refactor usage panes to extract shared formatters and tables

Extract duplicated formatting utilities to a shared helper module. Move
the large, inline recent sessions tables into dedicated sub-components to
reduce duplication and simplify the parent pane components.

* Support self-hosted GitLab instances for MR creation eligibility

* Extract and check the remote host against `glab auth status` to
  dynamically recognize and authenticate self-hosted GitLab instances
  without requiring them to be in a hardcoded list.
* Refactor stats usage panes by extracting reusable breakdown sections
  and sessions tables to eliminate duplication.
* Suggest Linear prompts only if the launcher can resolve the CLI.

* Extract GitLab project ref tests and update usage stats translations

- Move GitLab project ref parsing tests into a dedicated test file to
  keep modules focused and add tests for candidate parsing.
- Add missing translations for the usage sessions table and breakdown
  section across multiple locales.

* Optimize GitLab ref parsing, deduplicate formatters, and add locales

- Clean up GitLab ref parsing by extracting normalized known hosts.
- Fix an escaped newline sequence in the self-hosted GitLab mock test.
- Deduplicate stats helper functions into a single shared file.
- Translate path status message strings across ES, JA, KO, and ZH.

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-11 20:18:28 -07:00
Jinwoo HongandOrca b09d7124c4 Persist agent provider sessions at quit and resume them on cold restore (#5240)
Agent provider session ids lived only in the in-memory
agentStatusByPaneKey map, so a daemon/session death while the app was
closed (reboot, crash, update kill) left nothing to resume from -
terminals cold-restored as plain shells with no Claude/Codex/Gemini
session (#5232, Bug 2).

The quit flush now captures resumable live agents into the persisted
sleeping-session map with origin 'quit'. Quit-origin records are
consumed only by the pane-level cold-restore resume (which injects the
agent's resume command into the replacement shell); worktree activation
skips them so a warm-reattached agent never gets a duplicate resume
tab. Sleep-origin behavior is unchanged, and a warm reattach clears the
record on the agent's next status event.

Co-authored-by: Orca <help@stably.ai>
2026-06-11 20:17:23 -07:00
Jinwoo HongandOrca 4df412f18e Keep restored terminals on daemon PTYs when startup is slow (#5234)
The 12s first-window timeout used to abort daemon init and open the PTY
spawn gate, so a slow (but succeeding) daemon start flipped restored
panes onto LocalPtyProvider fallback terminals. Those are killed on app
quit and their numeric ids overwrite the persisted daemon session ids,
permanently orphaning the live daemon sessions (#5232, Bug 1).

The window still fails open at 12s, but the PTY gate now waits for the
service attempts themselves and only fails open (aborting the services)
at a 60s deadlock backstop. Failure fallback is unchanged: a daemon init
that errors still resolves the gate onto the local provider.

Co-authored-by: Orca <help@stably.ai>
2026-06-11 20:17:15 -07:00
Jinjing 36e439907a Implement GitHub issue close reasons and tabbed comment composer (#5235)
- Support closing GitHub issues with specific reasons ('completed', 'not planned', or duplicate) via main-process mutations and gh CLI wrappers.
- Replace the legacy comment composer with a tabbed layout supporting a real-time markdown preview, image/attachment inputs, and state transition buttons.
- Refactor assignee and label popovers into dedicated reusable components to clean up the item dialog.
2026-06-11 19:49:41 -07:00
Jinjing 04f394c17a Use outline variant for merge abort buttons (#5236)
Change the abort action button variant for merge operations from destructive
to outline, aligning it with rebase abort. This uses a quieter,
non-destructive treatment for aborting operations.
2026-06-11 19:47:16 -07:00
JinjingandOrca 868b024dbe Fix localized strings getting stuck on language switch (#5150)
* Fix localized strings getting stuck on language switch

Replace static module-level translation evaluations with property
getters and i18n hooks to ensure UI elements update dynamically when
the active language changes.

- Convert static configuration properties to dynamic getters.
- Call `useTranslation()` to trigger re-renders on language updates.
- Recreate Tiptap editor extensions when the active language changes
  to refresh frozen placeholder configurations.

* Evaluate localized strings dynamically in static UI structures

- Use ES6 getters with `translate()` in static object maps (such as SSH
  connection status, usage ranges, and feature tour copy) to evaluate
  strings on demand when the language changes.
- Add the `useTranslation()` hook to `LinearIssueMarkdownToolbar` so it
  subscribes directly to translation updates.
- Extract markdown slash command primitives to a separate file to keep
  catalog configuration clean.

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-11 19:45:50 -07:00
Brennan BensonandOrca 18ca691977 Update create project dialog design (#5231)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 19:45:01 -07:00
Jinjing bf9a542d4f Refine terminal fit restore settings typing and add failure tests (#5233)
* Use undefined instead of null for terminal fit restore settings.
* Extract restoreFailedResult helper to handle failed restore attempts.
* Add remote RPC restore failure test to terminal-fit-restore.test.ts.
* Translate "Resize all terminals" string to Chinese.
* Add assertion to verify driver state map contents before clearing.
2026-06-11 19:12:12 -07:00
Jinjing 73593e5c3d Allow restoring all terminals to desktop size from mobile overlay (#5228)
Provides a "Resize all terminals" button to bulk-restore all
mobile-held terminals to desktop dimensions, avoiding the need to
reclaim each pane individually.

- Extract local and remote PTY restore logic to a shared helper
- Query all active drivers to identify mobile-controlled terminals
- Update localization bundles with the new resize-all label
2026-06-11 19:08:41 -07:00
Jinjing 74b61881e4 Hide saved source control launch dialog (#5229)
* Hide saved source control launch dialog

* rm design doc

* rm design doc
2026-06-11 19:03:37 -07:00
Jinwoo HongandOrca 0b19195fd9 Remove startup PTY spawn health probe and guard daemon replacement with live-session check (#5230)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 19:00:44 -07:00
Brennan BensonandOrca 6762a10f3f Enable first-input rename for folder workspaces (#5227)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 18:24:44 -07:00
Jinjing 1f6bfe0503 Improve error messaging for git submodule push failures (#5226)
Detect when git push operations fail due to un-pushed or out-of-sync
submodules, and extract the specific submodule name to provide clear,
actionable guidance to the user.

Additionally, update the Source Control error UI to allow better text
wrapping and word-breaking for detailed error alerts.
2026-06-11 17:32:49 -07:00
Jinjing 08456103cb Persist PR comment queue selection and clear it when sent to agent (#5208)
- Retain selected comment groups in memory by context key to prevent
  them from being lost when switching contexts or when the list remounts.
- Clear the persisted queue once comments are submitted to the AI agent
  for thread resolution so the queue is spent.
- Make the PR comments list header sticky to keep action buttons visible.
- Simplify translation strings by removing dynamic review kind parameter.
2026-06-11 17:15:23 -07:00
Jinwoo HongandOrca d6c9d72f01 fix: scope worktree rename updates to project (#5225)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 16:39:32 -07:00
Jinwoo HongandOrca 042ce674da Fix PR merge dropdown availability when checks pass (#5220)
* fix github pr merge dropdown availability

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

* address pr merge review comments

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-11 16:24:30 -07:00
Jinwoo HongandOrca e2b2bede91 Fix speech model downloads behind proxies (#5210)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 15:23:35 -07:00
Jinwoo Hong bf41b13cb6 Allow Claude account switches with unverified live auth (#5217) 2026-06-11 14:28:29 -07:00
Brennan BensonandOrca 3dc8b4a25f Resize sidebar footer icons (#5215)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 12:57:04 -07:00
Brennan BensonandOrca 1d9fbf82b9 Fix contextual tour arrow overlap (#5213)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 12:40:32 -07:00
Brennan Benson 03a6a9fa89 Simplify Linear launch prompt hint (#5211) 2026-06-11 12:37:17 -07:00
Mantaroh Yoshinaga b4c304edc8 fix(i18n): correct mistranslated Japanese (ja) UI strings (#5191) 2026-06-11 11:40:17 -07:00
Brennan Benson 5d6254d769 Clarify nested import group copy (#5202) 2026-06-11 11:22:00 -07:00
Brennan BensonandOrca 91e354ccb1 Add multi-repo folder workspaces (v1) (#5172)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 02:34:01 -07:00
Jinjing ba0d2fec16 Combine file search and file explorer right sidebar tabs (#5182)
Unifies file discovery and tree navigation under a single Explorer domain, simplifying the right sidebar activity bar and reducing tab clutter.

* Replaces the standalone 'search' activity bar tab with a nested 'search' subview inside the File Explorer tab
* Introduces 'rightSidebarExplorerView' ('files' | 'search') state to manage the active subview inside the Explorer
* Adds a search button to the File Explorer toolbar and a back button to the search subview for seamless transition
* Exposes 'showRightSidebarFiles' and 'showRightSidebarSearch' store actions to route and seed search queries/include patterns
* Adapts file explorer keybindings, git status polling, and external workspace watchers to respect the active subview
* Maps legacy persisted search tab state to the new explorer search view for backward compatibility
2026-06-11 02:13:16 -07:00
Jinjing 5621f7686b Embed hosted review creation composer directly in Checks panel (#5140)
* Embed hosted review creation composer directly in the Checks panel

- Replaces the modal pull request/merge request creation dialog with an
  inline composer embedded in the empty state of the Checks sidebar.
- Extracts and moves pull request generation state to a dedicated store
  slice so AI-generated details are persisted across sidebar unmounts.

* Fix hosted review composer feedback
2026-06-11 02:11:43 -07:00
Jinjing 903adcc2e0 Update Chinese and Japanese translations for worktrees and fixes (#5187)
- Correct awkward Chinese translation of "fix" ("使固定") to "修复" and "基本的" to "主工作树" (main worktree).
- Improve Japanese translation of "fix" from physical repair ("修理") to software correction ("修正").
2026-06-11 02:06:13 -07:00
Neil 260d2263d0 fix: remove unsupported agent launch defaults (#5185) 2026-06-11 01:50:18 -07:00
Jinjing a6e7b32e39 Improve source control action dialog layout and recipe saving UX (#5153)
* Improve source control agent action dialog layout and recipe UX

- Constrain dialog and scroll area heights to prevent viewport overflow.
- Add variable chips to easily insert the base prompt with tooltip previews.
- Keep the recipe save controls visible when a recipe is already saved, showing informational status text instead of hiding them.
- Update localized copy across multiple languages and reduce textarea rows.
- Add unit tests for the variable chip preview and save target visibility.

* Fix recipe-saved check in source control action dialog

* Evaluate only the selected save target instead of checking all available targets, as the action only writes to the selected target.
* Update daemon PTY adapter test fake PID to prevent collision with real host OS processes during runtime directory lookups.
2026-06-11 01:46:41 -07:00
Jinjing e64b27f46e Allow resolving selected review comments with AI (#5184)
* Allow resolving selected PR/MR review comments with AI

Users can now select specific unresolved review comments or threads in
the Checks panel sidebar, queue them, and trigger an AI agent to address
them, marking resolved threads on the host upon agent launch.

- Adds checkboxes and action/send buttons to select and queue comments.
- Builds a structured, robust prompt with sanitized comment metadata.
- Optimistically marks threads resolved on launch with rollback on error.
- Supports both GitHub PRs and GitLab MRs.

* Consolidate PR comment selection state and eliminate effects

Combine independent selection states and context-tracking into a single
state object. Derive active selection data and prune ineligible comments
during render using useMemo instead of relying on asynchronous
useEffect synchronization hooks.
2026-06-11 01:45:11 -07:00
Jinjing 7c05fa5216 fix: address review findings (#5177) 2026-06-11 01:44:27 -07:00
Brennan BensonandOrca 1ae8ebdc3f Fix Claude agents management status detection (#5179)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 01:43:38 -07:00
Jinjing c47e0d1848 Prevent stale PR refreshes from restoring unlinked review state (#5180)
- Pass `worktreeId` to `fetchPRForBranch` to track active worktree context
- Ignore inflight or queued PR fetches if the worktree has been unlinked
- Include linked PR/MR metadata in the checks panel snapshot key to trigger updates immediately on link/unlink events
2026-06-11 01:14:45 -07:00
Jinjing ac216d5727 Route task PR queries by upstream source (#5176)
* Route task PR queries by upstream source

Implements the routing described in docs/tasks-pr-upstream-source.md so task PR and issue queries stay scoped to the selected source.

* rm design doc
2026-06-11 00:58:26 -07:00
Jinjing 569f7cbef7 Keep freshly split terminal pane mounted if newborn PTY exits early (#5171)
Prevent a newly split pane from collapsing immediately if its PTY exits
during initial setup before any output is received or input is sent.
This ensures a failed startup session remains visible to the user.
2026-06-11 00:55:30 -07:00
Jinjing 9d6d05e6ce Fix detached HEAD publish actions (#5173) 2026-06-11 00:30:01 -07:00
Neil bf8a985812 Hide internal context from AI Vault titles (#5175) 2026-06-11 00:28:34 -07:00
Jinjingandorca-bug-scan-bot 845ea2c68c Refresh Jira and Linear status after credential errors (#5169)
* fix: address pr-bug-scan validated finding from #4683

Isolated CredentialDecryptionError per-item in Linear getClients (client.ts:518) and Jira getClients (client.ts:373) on the 'all' selection so one bad credential no longer collapses healthy workspaces

* Refresh Jira and Linear status to clear stale credential errors

Ensure stale credential decryption errors are cleared from the store
status once a successful API read completes. By updating the check in
shouldRefreshStatusAfterRead to trigger when a credentialError is
currently set, successful issue or list fetches will trigger a status
check and remove stale error flags.

---------

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-06-11 00:11:22 -07:00
Jinjing fcc0afa8cd fix: enable claude agent teams by default (#5168) 2026-06-11 00:08:43 -07:00
buf0-bot[bot]andorca-bug-scan-bot 146da04af2 fix: address pr-bug-scan validated finding from #4683 (#5151)
Isolated CredentialDecryptionError per-item in Linear getClients (client.ts:518) and Jira getClients (client.ts:373) on the 'all' selection so one bad credential no longer collapses healthy workspaces

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
2026-06-10 23:56:17 -07:00
Neil 847b2109a8 Autofocus feedback textarea when Send Feedback dialog opens (#5164) 2026-06-10 23:24:26 -07:00
Trevin Chow 3184d0e475 Fix floating workspace needing two clicks after app switch (macOS) (#5128) 2026-06-10 23:05:41 -07:00
Jinjing 5391d1015c improve chinese localization (#5162) 2026-06-10 22:46:08 -07:00
Brennan BensonandOrca dc17c47dc6 Refine add project selection styling (#5160)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 22:44:26 -07:00
Neil 2a8f5f4186 Fix additional i18n spacing regressions from #4995 (#5159) 2026-06-10 22:22:25 -07:00