Handle integration credential decrypt failures#4683
Conversation
Replace the per-token provenance threading and per-component decrypt toasts with one credentialError field on Linear/Jira connection status. Token reads still throw the canonical reconnect message when a stored file holds undecryptable ciphertext, but renderer stores now treat that like an auth error: reads fall back to empty results and refresh status, and the UI explains the failure from the status field instead of twelve catch sites. Decrypt failures never delete token files, so approving Keychain access self-heals on the next read. Co-authored-by: Orca <[email protected]>
📝 WalkthroughWalkthroughThis PR adds comprehensive credential decryption error handling for Jira and Linear integrations. A new shared module provides a credential file reader that attempts OS keychain decryption via Electron's safeStorage and falls back to strict UTF-8 plaintext decoding with validation. Both Jira and Linear clients now record per-site/workspace decryption failures and expose a credentialError via their getStatus() results; save/delete operations clear recorded errors. Tests in main and renderer processes cover decrypt success, encryption-unavailable scenarios, preserved token files on decrypt failure, credentialError clearing after recovery, and empty-token handling. Renderer store slices treat decryption errors as distinct and refresh connection status without forcibly disconnecting; UI components prioritize and display credential errors. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: be940aca-5bf0-4ab3-afd5-2498fb631cc5
📒 Files selected for processing (18)
src/main/integration-credential-file.tssrc/main/jira/client.test.tssrc/main/jira/client.tssrc/main/jira/issues.test.tssrc/main/linear/client.test.tssrc/main/linear/client.tssrc/main/linear/issues.test.tssrc/main/linear/projects.test.tssrc/main/linear/teams.test.tssrc/renderer/src/components/TaskPage.tsxsrc/renderer/src/components/settings/IntegrationsPane.tsxsrc/renderer/src/store/slices/jira.test.tssrc/renderer/src/store/slices/jira.tssrc/renderer/src/store/slices/linear.test.tssrc/renderer/src/store/slices/linear.tssrc/shared/integration-credential-errors.tssrc/shared/jira-types.tssrc/shared/types.ts
hasStoredToken keyed off file existence alone, so a zero-byte token file made getStatus report a connected integration while reads treated the credential as missing. Stored-token checks now require non-empty files. Co-authored-by: Orca <[email protected]>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/main/integration-credential-file.ts (1)
72-75:⚠️ Potential issue | 🟠 Major | ⚡ Quick winBroaden the plaintext guard to the full control-character range.
hasControlCharacteronly rejects C0 controls andDEL. C1 controls (U+0080–U+009F) still pass, so bytes such as0xC2 0x85are treated as a legacy token instead of surfacingCredentialDecryptionError. That undermines the "printable UTF-8 only" check and can still leak garbage into the auth path.Suggested fix
function hasControlCharacter(value: string): boolean { for (let index = 0; index < value.length; index += 1) { const code = value.charCodeAt(index) - if (code < 0x20 || code === 0x7f) { + if ( + code < 0x20 || + code === 0x7f || + (code >= 0x80 && code <= 0x9f) + ) { return true } } return false }
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 218c50fe-9ed2-45ec-88ac-09fc11c73fa9
📒 Files selected for processing (5)
src/main/integration-credential-file.tssrc/main/jira/client.test.tssrc/main/jira/client.tssrc/main/linear/client.test.tssrc/main/linear/client.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- src/main/jira/client.test.ts
- src/main/linear/client.test.ts
- src/main/jira/client.ts
- src/main/linear/client.ts
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 <[email protected]>
* 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 <[email protected]>
Co-authored-by: Orca <[email protected]>
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 <[email protected]>
* 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 <[email protected]>
* Restore the outlined server card for host headers Feedback: the bordered card with the server glyph made it clearer that a host section is a separate machine, not just another group. Bring that back while keeping the recent quieting: no status dot when healthy (marks only for connecting/blocked/error/disconnected), no 'This computer' detail on the local host, and collapse/menu/count behavior unchanged. Co-authored-by: Orca <[email protected]> * Anchor host badge to its label, indent rows under host cards Sidebar polish from review: - The count badge sat in dead space between the label and the hover-only chevron/menu; it now hugs the label like repo headers - Rows under a host card get a left inset so projects and workspaces visibly belong to the machine above them - A host whose only visible row is a collapsed repo group counted 0 while the group badge said 9; host counts now fall back to header counts for groups contributing no visible items Co-authored-by: Orca <[email protected]> * Two-tier sticky headers: pinned host card above pinned group header When scrolling inside a host section, the host card now stays pinned at the top (z-30) while project/status group headers hand off beneath it (z-20, offset by the pinned card height). The host is the outer hierarchy level, so it is the most persistent context — previously the first repo header replaced it, losing 'which machine am I on' exactly when it mattered. The pinned card keeps its collapse/menu/warning affordances. Handoff rules: the next host card pushes the previous one out at the viewport top; a group pins only once it reaches the slot beneath the host card, and a previous host's group can never pin under the next host. Without host sections the logic degrades to the original single-tier behavior. Co-authored-by: Orca <[email protected]> * Revert host-section row indent The two-tier sticky host card now provides continuous 'inside this machine' context at any scroll depth, making the static indent redundant — and it cost 12px of sidebar width on every row while making multi-host layouts misalign with single-host ones. Host cards bracketing their sections plus the pinned header carry the ownership signal on their own. Co-authored-by: Orca <[email protected]> * Checkpoint multi-host sidebar and project-first notes Co-authored-by: Orca <[email protected]> * Add project-first compatibility persistence Co-authored-by: Orca <[email protected]> * Expose project host setup APIs Co-authored-by: Orca <[email protected]> * Group sidebar rows by project setup Co-authored-by: Orca <[email protected]> * Document project-first host model discussion Co-authored-by: Orca <[email protected]> * Resolve workspace creation through project host setups Co-authored-by: Orca <[email protected]> * Stamp workspace ownership with project host setup Co-authored-by: Orca <[email protected]> * Add project host setup existing folder API Co-authored-by: Orca <[email protected]> * Summarize project-first host model discussion Co-authored-by: Orca <[email protected]> * Add project host setup CLI commands Co-authored-by: Orca <[email protected]> * Allow CLI worktree creation by project host setup Co-authored-by: Orca <[email protected]> * Add workspace host setup picker Co-authored-by: Orca <[email protected]> * Add project host setup settings summary Co-authored-by: Orca <[email protected]> * Make project host setup settings navigable Co-authored-by: Orca <[email protected]> * Stabilize project host setup settings selector Co-authored-by: Orca <[email protected]> * Add project host existing-folder setup form Co-authored-by: Orca <[email protected]> * Update project host model implementation status Co-authored-by: Orca <[email protected]> * Keep projects outermost in default sidebar view Co-authored-by: Orca <[email protected]> * Update project-first sidebar status Co-authored-by: Orca <[email protected]> * Show host context in project sidebar groups Co-authored-by: Orca <[email protected]> * Show unavailable hosts in workspace run target Co-authored-by: Orca <[email protected]> * Import missing project host from composer Co-authored-by: Orca <[email protected]> * Clone project host setup from composer Co-authored-by: Orca <[email protected]> * Persist project host setup method Co-authored-by: Orca <[email protected]> * Clone project hosts over SSH Co-authored-by: Orca <[email protected]> * Improve SSH clone cancellation cleanup Co-authored-by: Orca <[email protected]> * Backfill workspace project host ownership Co-authored-by: Orca <[email protected]> * Gate project host setup runtime capability Co-authored-by: Orca <[email protected]> * Preserve independent project host setups Co-authored-by: Orca <[email protected]> * Add project host setup update API Co-authored-by: Orca <[email protected]> * Add project host setup delete API Co-authored-by: Orca <[email protected]> * Add project host setup create API Co-authored-by: Orca <[email protected]> * Expose project host setup lifecycle in renderer store Co-authored-by: Orca <[email protected]> * Handle independent project host setups in settings Co-authored-by: Orca <[email protected]> * Add pending host setup action in project settings Co-authored-by: Orca <[email protected]> * Show pending project host setup status in composer Co-authored-by: Orca <[email protected]> * Report pending setup state in workspace target resolution Co-authored-by: Orca <[email protected]> * Use shared host registry for project setup choices Co-authored-by: Orca <[email protected]> * Add settings clone flow for project host setups Co-authored-by: Orca <[email protected]> * Gate unavailable project host setup options Co-authored-by: Orca <[email protected]> * Gate unavailable project setup hosts in settings Co-authored-by: Orca <[email protected]> * Stream SSH clone progress to renderer Co-authored-by: Orca <[email protected]> * Update project host model status notes Co-authored-by: Orca <[email protected]> * Add CLI project host setup clone command Co-authored-by: Orca <[email protected]> * Make add project host aware Co-authored-by: Orca <[email protected]> * Complete project host setup validation Co-authored-by: Orca <[email protected]> * Recover floating workspace terminal WebGL atlas on reopen (#5069) Co-authored-by: Orca <[email protected]> * Fix stale terminal daemon spawn health (#5064) Co-authored-by: Orca <[email protected]> * Suspend floating workspace terminal WebGL while the panel is closed (#5073) Co-authored-by: Orca <[email protected]> * Fix source control branch compare base (#5074) Co-authored-by: Orca <[email protected]> * Fix workspace-creation tour panel clipped by the Create Worktree dialog (#5078) * Fix workspace-creation tour panel clipped by the composer dialog The tour panel portals into dialog/sheet content that clips overflow, but its position was clamped against the window viewport. With the Project field spanning nearly the dialog's full width, the panel landed past the dialog's right edge and overflow-hidden cut it down to a sliver. Clamp hosted panels within the host's bounds instead, so the panel flips below the target and stays fully visible. Co-Authored-By: Claude Fable 5 <[email protected]> * Add JSDoc docstrings to satisfy CodeRabbit docstring coverage check Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * Test hosted contextual tour overlay positioning --------- Co-authored-by: Claude Fable 5 <[email protected]> Co-authored-by: Neil <[email protected]> * release: v1.4.56 * Handle buffer overflows gracefully and truncate diffs fairly (#5083) - Gracefully fall back to file-name summaries when staged diffs exceed node/ssh execution maxBuffer limits, preventing generation failures. - Split oversized diffs by file and allocate budget via water-filling, ensuring single huge files do not starve smaller human changes. - Clip truncated diff sections on line boundaries to avoid half-lines. * Wrap AI generation controls with tooltips and clean i18n dependencies (#5087) - Wrap the AI generation button in a tooltip so users can see the disabled reason or the action description on hover. - Add unit tests verifying tooltip triggers and aria-label safety. - Simplify memo dependencies in settings metadata and worktree palette by using 'useTranslation()' to handle language-change rerenders directly without needing 'i18n.language'. * fix: address review findings (#5088) * Fix localization in repository hooks and base ref suggestion toast (#5089) * Fix localization in base ref toast and custom hook description - Localize the "commit"/"commits" plural nouns in the base ref toast. - Translate missing suggestion toast strings for JA, KO, and ZH locales. - Pass `{{artifact_url}}` as a literal template variable to translate calls to prevent i18next from treating it as a dynamic placeholder. * Fix localization reactivity in RepositoryHooksSection Move static variables containing translation calls into helper functions and subscribe to translation updates using useTranslation. This ensures that localized options, descriptions, and error messages refresh dynamically when the user changes the UI language. * Fix task page labels after language changes (#5086) Co-authored-by: Orca <[email protected]> * release: v1.4.57 * Fix automation tabs showing a shell instead of the live agent (#5099) * Fix automation tabs showing a shell instead of the live agent Opening a background automation's terminal tab showed a bare shell while the agent (Claude) kept running headless — the sidebar updated but the pane was attached to the wrong PTY. On first mount the restored ptyId equals the tab ptyId, and isSessionOwnedByWorktree() returns true for it, so connectPanePty routed the still-live eagerly-spawned PTY into the daemon-reattach branch (transport.connect({ sessionId })), which spawns a fresh shell and orphans the live agent PTY instead of adopting it via attach()+replay. Part A: gate the deferred reattach on the absence of a live eager buffer. A live eager buffer means the PTY is a still-running local session to adopt (attach + replay), not a daemon session to re-connect. Daemon reattach and remote PTYs are unaffected (gated on the eager buffer). Part B: publish never-mounted background automation tabs into the runtime graph (gated on a live eager buffer) so the live agent PTY binds to its real tab instead of surfacing as an orphan `pty:<id>` terminal — fixing `orca terminal list`, the CLI, and automation session-reuse. Adds a characterization test (fails on the old code, passes now) and a runtime-graph publish test. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Harden eager PTY tab adoption Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Fix i18n label spacing in menus and settings (#5108) * fix i18n label spacing * Fix localized account runtime labels Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Improve localization catalog sync workflow (#5110) Co-authored-by: Orca <[email protected]> * Add Warp terminal theme import (#4714) Co-authored-by: Orca <[email protected]> * release: v1.4.58 * Tidy README badge layout * Handle integration credential decrypt failures (#4683) Co-authored-by: Orca <[email protected]> * Fix git repo telemetry for repo adds (#5121) Co-authored-by: Orca <[email protected]> * Add feature interaction usage bucket telemetry (#5119) Co-authored-by: Orca <[email protected]> * Reset WebGL glyph atlases globally to stop cross-terminal glyph corruption (#5122) Co-authored-by: Orca <[email protected]> * perf(windows): fix 60s startup ACL walk and OpenCode streaming freeze, with benchmark harnesses (#5124) * release: v1.4.59-rc.0 * Fix packaged shell PATH order (#5125) Co-authored-by: Orca <[email protected]> * Add Floating Workspace contextual tour (#5062) * Add floating workspace contextual tour Co-authored-by: Orca <[email protected]> * Clarify floating workspace tour intro copy Co-authored-by: Orca <[email protected]> * Differentiate floating workspace tour steps instead of repeating examples Co-authored-by: Orca <[email protected]> * Lead floating workspace tour with the user benefit Co-authored-by: Orca <[email protected]> * Pitch floating workspace tour around cross-repo agents Co-authored-by: Orca <[email protected]> * Refine floating workspace tour step 1 copy Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour step 2 on the minimize control Co-authored-by: Orca <[email protected]> * Restore floating workspace tour step 2 Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour steps on New Terminal and New Markdown Note Co-authored-by: Orca <[email protected]> * Retitle floating workspace tour step 2 as scratchpad Co-authored-by: Orca <[email protected]> * Add why-comments for tour selector fallback and placement flipping Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> * Fix source control compare base ambiguity (#5127) Co-authored-by: Orca <[email protected]> * release: v1.4.59-rc.1 [rc-slot:2026-06-10-15] * release: v1.4.59 * Default-driven create-project flow: name-first form with sensible defaults (#5115) Co-authored-by: Orca <[email protected]> * Redesign Connect integrations (#4531) Co-authored-by: Orca <[email protected]> * Expose E2E store via build mode * File search match counts (#5085) * Add matchCount to SearchFileResult for accurate per-file hit counts Co-authored-by: Orca <[email protected]> * Add file search match count design * rm design doc --------- Co-authored-by: Orca <[email protected]> * fix: address review findings (#5139) * perf(windows): avoid blocking daemon pid checks (#5137) * release: v1.4.60-rc.0 * release: v1.4.60 * Preserve core workflow terms in English and apply CJK spacing (#5141) * Preserve core workflow and product terms in English across locales Update translation policy to prevent localization of key terms such as "Agent", "Commit", "Markdown", and "Terminal". This ensures consistent jargon and product branding. Introduce CJK-Latin term spacing to keep these Latin terms legible when combined with CJK text, while adjusting Korean particle spacing. Also add overrides to prevent network proxy settings from being mistranslated as "Agent". * Preserve repo terminology in English and localize source control labels Treat "repo" and "repos" (and their capitalized forms) as brand terms that should remain in English/Latin across CJK and Spanish locales. Update translation files and policies to replace translated words like "repositorio" or "リポジトリ" with "repo"/"repos", and fix an issue where latin brand terms could be incorrectly matched as substrings in larger words during cleanup. Additionally, externalize and localize the "Staged Changes", "Changes", and "Untracked Files" section labels in the source control sidebar. * UX (#5143) * UX/copy tweaks (#5142) * UX/copy tweaks * UX/copy tweaks * Fix missed star UI translations (#5148) * fix: make windows ssh relay deploy survive session teardown (#5136) * Add option to remove child projects when deleting repo groups (#4702) Co-authored-by: Orca <[email protected]> * fix: remove checks panel response badge (#5147) * Add read-only `orca linear` CLI with trusted launch-prompt pointer (V1) (#5126) Co-authored-by: Orca <[email protected]> * Add AI Vault session history ## Summary - add AI Vault session scanning and resume command construction - add the Agents sidebar panel with filtering, grouping, copy/open actions, and local resume launch - support dragging saved sessions onto terminal split panes ## Validation - pnpm run lint - pnpm run typecheck - pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/register-core-handlers.test.ts src/main/ai-vault/session-scanner.test.ts src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts src/renderer/src/lib/ai-vault-session-drag.test.ts src/renderer/src/lib/launch-ai-vault-session.test.ts * Default agent launches to yolo permissions mode (#5145) * Default agent launches to yolo mode * test: update launch default validations * Fix Claude usage refresh error copy (#5155) Co-authored-by: Orca <[email protected]> * Move workspace board to sidebar bottom toolbar (#5146) Co-authored-by: Orca <[email protected]> * Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (#5154) Co-authored-by: Orca <[email protected]> * Fix missing spaces in cross-repo switch dialog (#5158) * Fix Ctrl+Tab switcher selection on release (#5116) * Fix additional i18n spacing regressions from #4995 (#5159) * Refine add project selection styling (#5160) Co-authored-by: Orca <[email protected]> * improve chinese localization (#5162) * Fix floating workspace needing two clicks after app switch (macOS) (#5128) * Autofocus feedback textarea when Send Feedback dialog opens (#5164) * 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 <[email protected]> * fix: enable claude agent teams by default (#5168) * 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 <[email protected]> * Hide internal context from AI Vault titles (#5175) * Fix detached HEAD publish actions (#5173) * 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. * 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 * 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 * Fix Claude agents management status detection (#5179) Co-authored-by: Orca <[email protected]> * fix: address review findings (#5177) * 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. * 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. * fix: remove unsupported agent launch defaults (#5185) * 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 ("修正"). * 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 * 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 * release: v1.4.61-rc.1 * Add multi-repo folder workspaces (v1) (#5172) Co-authored-by: Orca <[email protected]> * release: v1.4.61-rc.2 * Hide unavailable project hosts in worktree composer Co-authored-by: Orca <[email protected]> * Remove inline project host setup from composer Co-authored-by: Orca <[email protected]> * Mark imported project host setup methods Co-authored-by: Orca <[email protected]> * Fix rebase merge fallout Co-authored-by: Orca <[email protected]> * Disable unavailable Add Project hosts Co-authored-by: Orca <[email protected]> * Compact Add Project host selector Co-authored-by: Orca <[email protected]> * Hide redundant SSH target chooser Co-authored-by: Orca <[email protected]> * Browse SSH clone destinations Co-authored-by: Orca <[email protected]> * Avoid local clone defaults for SSH hosts Co-authored-by: Orca <[email protected]> * Polish host-aware Add Project flows Co-authored-by: Orca <[email protected]> * Polish remote host add project flows Co-authored-by: Orca <[email protected]> * Remove redundant host kind chips Co-authored-by: Orca <[email protected]> * Fix remote project setup UX gaps Co-authored-by: Orca <[email protected]> * Fix multihost workspace composer project identity Co-authored-by: Orca <[email protected]> * Finish host context merge repair Co-authored-by: Orca <[email protected]> * Continue host context checklist implementation Co-authored-by: Orca <[email protected]> * Route Linear and Jira tasks by source context Co-authored-by: Orca <[email protected]> * Preserve Linear task source context in history Co-authored-by: Orca <[email protected]> * Scope task retry state by source context Co-authored-by: Orca <[email protected]> * Route GitHub drawer reads by source context Co-authored-by: Orca <[email protected]> * Guard GitLab selectors with repo context Co-authored-by: Orca <[email protected]> * Guard GitHub metadata selectors Co-authored-by: Orca <[email protected]> * Route GitHub task row actions by source context Co-authored-by: Orca <[email protected]> * Update GitHub source-context checklist status Co-authored-by: Orca <[email protected]> * Show host ownership for CLI provider accounts Co-authored-by: Orca <[email protected]> * Persist GitLab task detail source context Co-authored-by: Orca <[email protected]> * Show host scope for provider API budgets Co-authored-by: Orca <[email protected]> * Preserve Jira task source context Co-authored-by: Orca <[email protected]> * Scope Jira optimistic task patches Co-authored-by: Orca <[email protected]> * Resolve task PR bases on run host Co-authored-by: Orca <[email protected]> * Record Jira task workspace usage Co-authored-by: Orca <[email protected]> * Scope Linear optimistic task patches Co-authored-by: Orca <[email protected]> * Scope GitHub optimistic task patches Co-authored-by: Orca <[email protected]> * Clean host copy in onboarding flows Co-authored-by: Orca <[email protected]> * Preserve automation CLI run context Co-authored-by: Orca <[email protected]> * Add automation CLI source context selector Co-authored-by: Orca <[email protected]> * Clarify unavailable task source hosts Co-authored-by: Orca <[email protected]> * Surface host model runtime capability skew Co-authored-by: Orca <[email protected]> * Use SSH host copy in reconnect dialog Co-authored-by: Orca <[email protected]> * Show host context in task source picker Co-authored-by: Orca <[email protected]> * Mark task source display complete Co-authored-by: Orca <[email protected]> * Clarify provider account host selection Co-authored-by: Orca <[email protected]> * Guard task source switching boundary Co-authored-by: Orca <[email protected]> * Mark task source diagnostics persisted Co-authored-by: Orca <[email protected]> * Mark base resolution host boundary Co-authored-by: Orca <[email protected]> * Clarify external automation source states Co-authored-by: Orca <[email protected]> * Harden project host compatibility projection Co-authored-by: Orca <[email protected]> * Finish host copy audit Co-authored-by: Orca <[email protected]> * Add provider host scope controls Co-authored-by: Orca <[email protected]> * Show task source account labels Co-authored-by: Orca <[email protected]> * Show automation run context in CLI Co-authored-by: Orca <[email protected]> * Scope Jira task cache lookups by source Co-authored-by: Orca <[email protected]> * Seed workspace creation from task source context Co-authored-by: Orca <[email protected]> * Explain disabled external automation actions Co-authored-by: Orca <[email protected]> * Surface task source runtime capability gaps Co-authored-by: Orca <[email protected]> * Persist automation run context from UI saves Co-authored-by: Orca <[email protected]> * Require workspace run capability for setup hosts Co-authored-by: Orca <[email protected]> * Disable automation runs for stale host setup Co-authored-by: Orca <[email protected]> * Route GitHub drawer metadata by source host Co-authored-by: Orca <[email protected]> * Guard runtime project setup mutations by host model Co-authored-by: Orca <[email protected]> * Route PR page metadata by repo host Co-authored-by: Orca <[email protected]> * Route PR mention metadata by repo host Co-authored-by: Orca <[email protected]> * Route GitHub Project edits by view source Co-authored-by: Orca <[email protected]> * Clarify runtime automation disabled states Co-authored-by: Orca <[email protected]> * Guard runtime automation backend dispatch Co-authored-by: Orca <[email protected]> * Preserve GitLab task source identity Co-authored-by: Orca <[email protected]> * Remove redundant SSH target row in add project Co-authored-by: Orca <[email protected]> * Add task source provider availability reasons Co-authored-by: Orca <[email protected]> * Surface task provider preflight availability Co-authored-by: Orca <[email protected]> * Record local GitHub task source verification Co-authored-by: Orca <[email protected]> * Record Linear task source verification Co-authored-by: Orca <[email protected]> * Show automation source context in details Co-authored-by: Orca <[email protected]> * Record remote capability negotiation coverage Co-authored-by: Orca <[email protected]> * Record local add project create verification Co-authored-by: Orca <[email protected]> * Scope Linear cached task reads by source Co-authored-by: Orca <[email protected]> * Preserve PR generation host ownership Co-authored-by: Orca <[email protected]> * Route git operations by owner host Co-authored-by: Orca <[email protected]> * Route delete warnings by worktree owner Co-authored-by: Orca <[email protected]> * Route editor drops by worktree owner Co-authored-by: Orca <[email protected]> * Route agent draft paste by tab owner Co-authored-by: Orca <[email protected]> * Route file explorer requests by worktree owner Co-authored-by: Orca <[email protected]> * Document remaining host context gaps Co-authored-by: Orca <[email protected]> * Check runtime task source provider auth Co-authored-by: Orca <[email protected]> * Validate automation source availability Co-authored-by: Orca <[email protected]> * Route remaining UI requests by owner host Co-authored-by: Orca <[email protected]> * Route quick open file listing by worktree owner Co-authored-by: Orca <[email protected]> * Route typed GitHub lookups by source host Co-authored-by: Orca <[email protected]> * Centralize automation run identity fallback Co-authored-by: Orca <[email protected]> * Surface unsupported task source providers Co-authored-by: Orca <[email protected]> * Document automation legacy repo compatibility Co-authored-by: Orca <[email protected]> * Record live host model verification Co-authored-by: Orca <[email protected]> * Quiet disconnected SSH polling Co-authored-by: Orca <[email protected]> * Verify task drawer source boundaries Co-authored-by: Orca <[email protected]> * Verify GitLab repo source selectors Co-authored-by: Orca <[email protected]> * Route automations through owning host Co-authored-by: Orca <[email protected]> * Update host context verification checklist Co-authored-by: Orca <[email protected]> * Run remote automations headlessly in serve mode Co-authored-by: Orca <[email protected]> * Keep setup guide entry stable during refresh Co-authored-by: Orca <[email protected]> * Keep setup script prompt stable during host switches Co-authored-by: Orca <[email protected]> * Deduplicate Tasks project picker sources Co-authored-by: Orca <[email protected]> * Use project identity for Tasks picker dedupe Co-authored-by: Orca <[email protected]> * Add Tasks source host switcher Co-authored-by: Orca <[email protected]> * Refine Tasks source picker disclosure Co-authored-by: Orca <[email protected]> * Polish Tasks source picker hover Co-authored-by: Orca <[email protected]> * Open Tasks source menu on hover Co-authored-by: Orca <[email protected]> * Match Tasks source submenu hover behavior Co-authored-by: Orca <[email protected]> * Open Tasks source submenu from project row hover Co-authored-by: Orca <[email protected]> * Group automation project hosts Co-authored-by: Orca <[email protected]> * Tighten automation project picker density Co-authored-by: Orca <[email protected]> * Show selected host in Tasks project picker Co-authored-by: Orca <[email protected]> * Hide host labels for single-host project pickers Co-authored-by: Orca <[email protected]> * Use saved remote server names in host pickers Co-authored-by: Orca <[email protected]> * Use standard add project start for remote servers Co-authored-by: Orca <[email protected]> * Use saved host labels in workspace surfaces Co-authored-by: Orca <[email protected]> * Route remote browser tabs through runtime hosts Co-authored-by: Orca <[email protected]> * Keep sidebar project-first across grouping modes Co-authored-by: Orca <[email protected]> * Polish multi-host remote runtime UX Co-authored-by: Orca <[email protected]> * Fix CI lint and remove design notes Co-authored-by: Orca <[email protected]> * Fix CI test failures Co-authored-by: Orca <[email protected]> * Fix Windows CLI path expectation Co-authored-by: Orca <[email protected]> * Fix CI renderer test expectations Co-authored-by: Orca <[email protected]> * Fix remaining verify test failures Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> Co-authored-by: Bryant Ung <[email protected]> Co-authored-by: Claude Fable 5 <[email protected]> Co-authored-by: Neil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jinjing <[email protected]> Co-authored-by: Borja <[email protected]> Co-authored-by: Parker Rex <[email protected]> Co-authored-by: Brennan Benson <[email protected]> Co-authored-by: Trevin Chow <[email protected]> Co-authored-by: buf0-bot[bot] <252831055+buf0-bot[bot]@users.noreply.github.com> Co-authored-by: orca-bug-scan-bot <[email protected]>
Co-authored-by: Orca <[email protected]>
…ai#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 <[email protected]>
* fix: address pr-bug-scan validated finding from stablyai#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 <[email protected]>
…yai#5071) * Restore the outlined server card for host headers Feedback: the bordered card with the server glyph made it clearer that a host section is a separate machine, not just another group. Bring that back while keeping the recent quieting: no status dot when healthy (marks only for connecting/blocked/error/disconnected), no 'This computer' detail on the local host, and collapse/menu/count behavior unchanged. Co-authored-by: Orca <[email protected]> * Anchor host badge to its label, indent rows under host cards Sidebar polish from review: - The count badge sat in dead space between the label and the hover-only chevron/menu; it now hugs the label like repo headers - Rows under a host card get a left inset so projects and workspaces visibly belong to the machine above them - A host whose only visible row is a collapsed repo group counted 0 while the group badge said 9; host counts now fall back to header counts for groups contributing no visible items Co-authored-by: Orca <[email protected]> * Two-tier sticky headers: pinned host card above pinned group header When scrolling inside a host section, the host card now stays pinned at the top (z-30) while project/status group headers hand off beneath it (z-20, offset by the pinned card height). The host is the outer hierarchy level, so it is the most persistent context — previously the first repo header replaced it, losing 'which machine am I on' exactly when it mattered. The pinned card keeps its collapse/menu/warning affordances. Handoff rules: the next host card pushes the previous one out at the viewport top; a group pins only once it reaches the slot beneath the host card, and a previous host's group can never pin under the next host. Without host sections the logic degrades to the original single-tier behavior. Co-authored-by: Orca <[email protected]> * Revert host-section row indent The two-tier sticky host card now provides continuous 'inside this machine' context at any scroll depth, making the static indent redundant — and it cost 12px of sidebar width on every row while making multi-host layouts misalign with single-host ones. Host cards bracketing their sections plus the pinned header carry the ownership signal on their own. Co-authored-by: Orca <[email protected]> * Checkpoint multi-host sidebar and project-first notes Co-authored-by: Orca <[email protected]> * Add project-first compatibility persistence Co-authored-by: Orca <[email protected]> * Expose project host setup APIs Co-authored-by: Orca <[email protected]> * Group sidebar rows by project setup Co-authored-by: Orca <[email protected]> * Document project-first host model discussion Co-authored-by: Orca <[email protected]> * Resolve workspace creation through project host setups Co-authored-by: Orca <[email protected]> * Stamp workspace ownership with project host setup Co-authored-by: Orca <[email protected]> * Add project host setup existing folder API Co-authored-by: Orca <[email protected]> * Summarize project-first host model discussion Co-authored-by: Orca <[email protected]> * Add project host setup CLI commands Co-authored-by: Orca <[email protected]> * Allow CLI worktree creation by project host setup Co-authored-by: Orca <[email protected]> * Add workspace host setup picker Co-authored-by: Orca <[email protected]> * Add project host setup settings summary Co-authored-by: Orca <[email protected]> * Make project host setup settings navigable Co-authored-by: Orca <[email protected]> * Stabilize project host setup settings selector Co-authored-by: Orca <[email protected]> * Add project host existing-folder setup form Co-authored-by: Orca <[email protected]> * Update project host model implementation status Co-authored-by: Orca <[email protected]> * Keep projects outermost in default sidebar view Co-authored-by: Orca <[email protected]> * Update project-first sidebar status Co-authored-by: Orca <[email protected]> * Show host context in project sidebar groups Co-authored-by: Orca <[email protected]> * Show unavailable hosts in workspace run target Co-authored-by: Orca <[email protected]> * Import missing project host from composer Co-authored-by: Orca <[email protected]> * Clone project host setup from composer Co-authored-by: Orca <[email protected]> * Persist project host setup method Co-authored-by: Orca <[email protected]> * Clone project hosts over SSH Co-authored-by: Orca <[email protected]> * Improve SSH clone cancellation cleanup Co-authored-by: Orca <[email protected]> * Backfill workspace project host ownership Co-authored-by: Orca <[email protected]> * Gate project host setup runtime capability Co-authored-by: Orca <[email protected]> * Preserve independent project host setups Co-authored-by: Orca <[email protected]> * Add project host setup update API Co-authored-by: Orca <[email protected]> * Add project host setup delete API Co-authored-by: Orca <[email protected]> * Add project host setup create API Co-authored-by: Orca <[email protected]> * Expose project host setup lifecycle in renderer store Co-authored-by: Orca <[email protected]> * Handle independent project host setups in settings Co-authored-by: Orca <[email protected]> * Add pending host setup action in project settings Co-authored-by: Orca <[email protected]> * Show pending project host setup status in composer Co-authored-by: Orca <[email protected]> * Report pending setup state in workspace target resolution Co-authored-by: Orca <[email protected]> * Use shared host registry for project setup choices Co-authored-by: Orca <[email protected]> * Add settings clone flow for project host setups Co-authored-by: Orca <[email protected]> * Gate unavailable project host setup options Co-authored-by: Orca <[email protected]> * Gate unavailable project setup hosts in settings Co-authored-by: Orca <[email protected]> * Stream SSH clone progress to renderer Co-authored-by: Orca <[email protected]> * Update project host model status notes Co-authored-by: Orca <[email protected]> * Add CLI project host setup clone command Co-authored-by: Orca <[email protected]> * Make add project host aware Co-authored-by: Orca <[email protected]> * Complete project host setup validation Co-authored-by: Orca <[email protected]> * Recover floating workspace terminal WebGL atlas on reopen (stablyai#5069) Co-authored-by: Orca <[email protected]> * Fix stale terminal daemon spawn health (stablyai#5064) Co-authored-by: Orca <[email protected]> * Suspend floating workspace terminal WebGL while the panel is closed (stablyai#5073) Co-authored-by: Orca <[email protected]> * Fix source control branch compare base (stablyai#5074) Co-authored-by: Orca <[email protected]> * Fix workspace-creation tour panel clipped by the Create Worktree dialog (stablyai#5078) * Fix workspace-creation tour panel clipped by the composer dialog The tour panel portals into dialog/sheet content that clips overflow, but its position was clamped against the window viewport. With the Project field spanning nearly the dialog's full width, the panel landed past the dialog's right edge and overflow-hidden cut it down to a sliver. Clamp hosted panels within the host's bounds instead, so the panel flips below the target and stays fully visible. Co-Authored-By: Claude Fable 5 <[email protected]> * Add JSDoc docstrings to satisfy CodeRabbit docstring coverage check Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * Test hosted contextual tour overlay positioning --------- Co-authored-by: Claude Fable 5 <[email protected]> Co-authored-by: Neil <[email protected]> * release: v1.4.56 * Handle buffer overflows gracefully and truncate diffs fairly (stablyai#5083) - Gracefully fall back to file-name summaries when staged diffs exceed node/ssh execution maxBuffer limits, preventing generation failures. - Split oversized diffs by file and allocate budget via water-filling, ensuring single huge files do not starve smaller human changes. - Clip truncated diff sections on line boundaries to avoid half-lines. * Wrap AI generation controls with tooltips and clean i18n dependencies (stablyai#5087) - Wrap the AI generation button in a tooltip so users can see the disabled reason or the action description on hover. - Add unit tests verifying tooltip triggers and aria-label safety. - Simplify memo dependencies in settings metadata and worktree palette by using 'useTranslation()' to handle language-change rerenders directly without needing 'i18n.language'. * fix: address review findings (stablyai#5088) * Fix localization in repository hooks and base ref suggestion toast (stablyai#5089) * Fix localization in base ref toast and custom hook description - Localize the "commit"/"commits" plural nouns in the base ref toast. - Translate missing suggestion toast strings for JA, KO, and ZH locales. - Pass `{{artifact_url}}` as a literal template variable to translate calls to prevent i18next from treating it as a dynamic placeholder. * Fix localization reactivity in RepositoryHooksSection Move static variables containing translation calls into helper functions and subscribe to translation updates using useTranslation. This ensures that localized options, descriptions, and error messages refresh dynamically when the user changes the UI language. * Fix task page labels after language changes (stablyai#5086) Co-authored-by: Orca <[email protected]> * release: v1.4.57 * Fix automation tabs showing a shell instead of the live agent (stablyai#5099) * Fix automation tabs showing a shell instead of the live agent Opening a background automation's terminal tab showed a bare shell while the agent (Claude) kept running headless — the sidebar updated but the pane was attached to the wrong PTY. On first mount the restored ptyId equals the tab ptyId, and isSessionOwnedByWorktree() returns true for it, so connectPanePty routed the still-live eagerly-spawned PTY into the daemon-reattach branch (transport.connect({ sessionId })), which spawns a fresh shell and orphans the live agent PTY instead of adopting it via attach()+replay. Part A: gate the deferred reattach on the absence of a live eager buffer. A live eager buffer means the PTY is a still-running local session to adopt (attach + replay), not a daemon session to re-connect. Daemon reattach and remote PTYs are unaffected (gated on the eager buffer). Part B: publish never-mounted background automation tabs into the runtime graph (gated on a live eager buffer) so the live agent PTY binds to its real tab instead of surfacing as an orphan `pty:<id>` terminal — fixing `orca terminal list`, the CLI, and automation session-reuse. Adds a characterization test (fails on the old code, passes now) and a runtime-graph publish test. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Harden eager PTY tab adoption Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Fix i18n label spacing in menus and settings (stablyai#5108) * fix i18n label spacing * Fix localized account runtime labels Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Improve localization catalog sync workflow (stablyai#5110) Co-authored-by: Orca <[email protected]> * Add Warp terminal theme import (stablyai#4714) Co-authored-by: Orca <[email protected]> * release: v1.4.58 * Tidy README badge layout * Handle integration credential decrypt failures (stablyai#4683) Co-authored-by: Orca <[email protected]> * Fix git repo telemetry for repo adds (stablyai#5121) Co-authored-by: Orca <[email protected]> * Add feature interaction usage bucket telemetry (stablyai#5119) Co-authored-by: Orca <[email protected]> * Reset WebGL glyph atlases globally to stop cross-terminal glyph corruption (stablyai#5122) Co-authored-by: Orca <[email protected]> * perf(windows): fix 60s startup ACL walk and OpenCode streaming freeze, with benchmark harnesses (stablyai#5124) * release: v1.4.59-rc.0 * Fix packaged shell PATH order (stablyai#5125) Co-authored-by: Orca <[email protected]> * Add Floating Workspace contextual tour (stablyai#5062) * Add floating workspace contextual tour Co-authored-by: Orca <[email protected]> * Clarify floating workspace tour intro copy Co-authored-by: Orca <[email protected]> * Differentiate floating workspace tour steps instead of repeating examples Co-authored-by: Orca <[email protected]> * Lead floating workspace tour with the user benefit Co-authored-by: Orca <[email protected]> * Pitch floating workspace tour around cross-repo agents Co-authored-by: Orca <[email protected]> * Refine floating workspace tour step 1 copy Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour step 2 on the minimize control Co-authored-by: Orca <[email protected]> * Restore floating workspace tour step 2 Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour steps on New Terminal and New Markdown Note Co-authored-by: Orca <[email protected]> * Retitle floating workspace tour step 2 as scratchpad Co-authored-by: Orca <[email protected]> * Add why-comments for tour selector fallback and placement flipping Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> * Fix source control compare base ambiguity (stablyai#5127) Co-authored-by: Orca <[email protected]> * release: v1.4.59-rc.1 [rc-slot:2026-06-10-15] * release: v1.4.59 * Default-driven create-project flow: name-first form with sensible defaults (stablyai#5115) Co-authored-by: Orca <[email protected]> * Redesign Connect integrations (stablyai#4531) Co-authored-by: Orca <[email protected]> * Expose E2E store via build mode * File search match counts (stablyai#5085) * Add matchCount to SearchFileResult for accurate per-file hit counts Co-authored-by: Orca <[email protected]> * Add file search match count design * rm design doc --------- Co-authored-by: Orca <[email protected]> * fix: address review findings (stablyai#5139) * perf(windows): avoid blocking daemon pid checks (stablyai#5137) * release: v1.4.60-rc.0 * release: v1.4.60 * Preserve core workflow terms in English and apply CJK spacing (stablyai#5141) * Preserve core workflow and product terms in English across locales Update translation policy to prevent localization of key terms such as "Agent", "Commit", "Markdown", and "Terminal". This ensures consistent jargon and product branding. Introduce CJK-Latin term spacing to keep these Latin terms legible when combined with CJK text, while adjusting Korean particle spacing. Also add overrides to prevent network proxy settings from being mistranslated as "Agent". * Preserve repo terminology in English and localize source control labels Treat "repo" and "repos" (and their capitalized forms) as brand terms that should remain in English/Latin across CJK and Spanish locales. Update translation files and policies to replace translated words like "repositorio" or "リポジトリ" with "repo"/"repos", and fix an issue where latin brand terms could be incorrectly matched as substrings in larger words during cleanup. Additionally, externalize and localize the "Staged Changes", "Changes", and "Untracked Files" section labels in the source control sidebar. * UX (stablyai#5143) * UX/copy tweaks (stablyai#5142) * UX/copy tweaks * UX/copy tweaks * Fix missed star UI translations (stablyai#5148) * fix: make windows ssh relay deploy survive session teardown (stablyai#5136) * Add option to remove child projects when deleting repo groups (stablyai#4702) Co-authored-by: Orca <[email protected]> * fix: remove checks panel response badge (stablyai#5147) * Add read-only `orca linear` CLI with trusted launch-prompt pointer (V1) (stablyai#5126) Co-authored-by: Orca <[email protected]> * Add AI Vault session history ## Summary - add AI Vault session scanning and resume command construction - add the Agents sidebar panel with filtering, grouping, copy/open actions, and local resume launch - support dragging saved sessions onto terminal split panes ## Validation - pnpm run lint - pnpm run typecheck - pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/register-core-handlers.test.ts src/main/ai-vault/session-scanner.test.ts src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts src/renderer/src/lib/ai-vault-session-drag.test.ts src/renderer/src/lib/launch-ai-vault-session.test.ts * Default agent launches to yolo permissions mode (stablyai#5145) * Default agent launches to yolo mode * test: update launch default validations * Fix Claude usage refresh error copy (stablyai#5155) Co-authored-by: Orca <[email protected]> * Move workspace board to sidebar bottom toolbar (stablyai#5146) Co-authored-by: Orca <[email protected]> * Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (stablyai#5154) Co-authored-by: Orca <[email protected]> * Fix missing spaces in cross-repo switch dialog (stablyai#5158) * Fix Ctrl+Tab switcher selection on release (stablyai#5116) * Fix additional i18n spacing regressions from stablyai#4995 (stablyai#5159) * Refine add project selection styling (stablyai#5160) Co-authored-by: Orca <[email protected]> * improve chinese localization (stablyai#5162) * Fix floating workspace needing two clicks after app switch (macOS) (stablyai#5128) * Autofocus feedback textarea when Send Feedback dialog opens (stablyai#5164) * fix: address pr-bug-scan validated finding from stablyai#4683 (stablyai#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 <[email protected]> * fix: enable claude agent teams by default (stablyai#5168) * Refresh Jira and Linear status after credential errors (stablyai#5169) * fix: address pr-bug-scan validated finding from stablyai#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 <[email protected]> * Hide internal context from AI Vault titles (stablyai#5175) * Fix detached HEAD publish actions (stablyai#5173) * Keep freshly split terminal pane mounted if newborn PTY exits early (stablyai#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. * Route task PR queries by upstream source (stablyai#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 * Prevent stale PR refreshes from restoring unlinked review state (stablyai#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 * Fix Claude agents management status detection (stablyai#5179) Co-authored-by: Orca <[email protected]> * fix: address review findings (stablyai#5177) * Allow resolving selected review comments with AI (stablyai#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. * Improve source control action dialog layout and recipe saving UX (stablyai#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. * fix: remove unsupported agent launch defaults (stablyai#5185) * Update Chinese and Japanese translations for worktrees and fixes (stablyai#5187) - Correct awkward Chinese translation of "fix" ("使固定") to "修复" and "基本的" to "主工作树" (main worktree). - Improve Japanese translation of "fix" from physical repair ("修理") to software correction ("修正"). * Embed hosted review creation composer directly in Checks panel (stablyai#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 * Combine file search and file explorer right sidebar tabs (stablyai#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 * release: v1.4.61-rc.1 * Add multi-repo folder workspaces (v1) (stablyai#5172) Co-authored-by: Orca <[email protected]> * release: v1.4.61-rc.2 * Hide unavailable project hosts in worktree composer Co-authored-by: Orca <[email protected]> * Remove inline project host setup from composer Co-authored-by: Orca <[email protected]> * Mark imported project host setup methods Co-authored-by: Orca <[email protected]> * Fix rebase merge fallout Co-authored-by: Orca <[email protected]> * Disable unavailable Add Project hosts Co-authored-by: Orca <[email protected]> * Compact Add Project host selector Co-authored-by: Orca <[email protected]> * Hide redundant SSH target chooser Co-authored-by: Orca <[email protected]> * Browse SSH clone destinations Co-authored-by: Orca <[email protected]> * Avoid local clone defaults for SSH hosts Co-authored-by: Orca <[email protected]> * Polish host-aware Add Project flows Co-authored-by: Orca <[email protected]> * Polish remote host add project flows Co-authored-by: Orca <[email protected]> * Remove redundant host kind chips Co-authored-by: Orca <[email protected]> * Fix remote project setup UX gaps Co-authored-by: Orca <[email protected]> * Fix multihost workspace composer project identity Co-authored-by: Orca <[email protected]> * Finish host context merge repair Co-authored-by: Orca <[email protected]> * Continue host context checklist implementation Co-authored-by: Orca <[email protected]> * Route Linear and Jira tasks by source context Co-authored-by: Orca <[email protected]> * Preserve Linear task source context in history Co-authored-by: Orca <[email protected]> * Scope task retry state by source context Co-authored-by: Orca <[email protected]> * Route GitHub drawer reads by source context Co-authored-by: Orca <[email protected]> * Guard GitLab selectors with repo context Co-authored-by: Orca <[email protected]> * Guard GitHub metadata selectors Co-authored-by: Orca <[email protected]> * Route GitHub task row actions by source context Co-authored-by: Orca <[email protected]> * Update GitHub source-context checklist status Co-authored-by: Orca <[email protected]> * Show host ownership for CLI provider accounts Co-authored-by: Orca <[email protected]> * Persist GitLab task detail source context Co-authored-by: Orca <[email protected]> * Show host scope for provider API budgets Co-authored-by: Orca <[email protected]> * Preserve Jira task source context Co-authored-by: Orca <[email protected]> * Scope Jira optimistic task patches Co-authored-by: Orca <[email protected]> * Resolve task PR bases on run host Co-authored-by: Orca <[email protected]> * Record Jira task workspace usage Co-authored-by: Orca <[email protected]> * Scope Linear optimistic task patches Co-authored-by: Orca <[email protected]> * Scope GitHub optimistic task patches Co-authored-by: Orca <[email protected]> * Clean host copy in onboarding flows Co-authored-by: Orca <[email protected]> * Preserve automation CLI run context Co-authored-by: Orca <[email protected]> * Add automation CLI source context selector Co-authored-by: Orca <[email protected]> * Clarify unavailable task source hosts Co-authored-by: Orca <[email protected]> * Surface host model runtime capability skew Co-authored-by: Orca <[email protected]> * Use SSH host copy in reconnect dialog Co-authored-by: Orca <[email protected]> * Show host context in task source picker Co-authored-by: Orca <[email protected]> * Mark task source display complete Co-authored-by: Orca <[email protected]> * Clarify provider account host selection Co-authored-by: Orca <[email protected]> * Guard task source switching boundary Co-authored-by: Orca <[email protected]> * Mark task source diagnostics persisted Co-authored-by: Orca <[email protected]> * Mark base resolution host boundary Co-authored-by: Orca <[email protected]> * Clarify external automation source states Co-authored-by: Orca <[email protected]> * Harden project host compatibility projection Co-authored-by: Orca <[email protected]> * Finish host copy audit Co-authored-by: Orca <[email protected]> * Add provider host scope controls Co-authored-by: Orca <[email protected]> * Show task source account labels Co-authored-by: Orca <[email protected]> * Show automation run context in CLI Co-authored-by: Orca <[email protected]> * Scope Jira task cache lookups by source Co-authored-by: Orca <[email protected]> * Seed workspace creation from task source context Co-authored-by: Orca <[email protected]> * Explain disabled external automation actions Co-authored-by: Orca <[email protected]> * Surface task source runtime capability gaps Co-authored-by: Orca <[email protected]> * Persist automation run context from UI saves Co-authored-by: Orca <[email protected]> * Require workspace run capability for setup hosts Co-authored-by: Orca <[email protected]> * Disable automation runs for stale host setup Co-authored-by: Orca <[email protected]> * Route GitHub drawer metadata by source host Co-authored-by: Orca <[email protected]> * Guard runtime project setup mutations by host model Co-authored-by: Orca <[email protected]> * Route PR page metadata by repo host Co-authored-by: Orca <[email protected]> * Route PR mention metadata by repo host Co-authored-by: Orca <[email protected]> * Route GitHub Project edits by view source Co-authored-by: Orca <[email protected]> * Clarify runtime automation disabled states Co-authored-by: Orca <[email protected]> * Guard runtime automation backend dispatch Co-authored-by: Orca <[email protected]> * Preserve GitLab task source identity Co-authored-by: Orca <[email protected]> * Remove redundant SSH target row in add project Co-authored-by: Orca <[email protected]> * Add task source provider availability reasons Co-authored-by: Orca <[email protected]> * Surface task provider preflight availability Co-authored-by: Orca <[email protected]> * Record local GitHub task source verification Co-authored-by: Orca <[email protected]> * Record Linear task source verification Co-authored-by: Orca <[email protected]> * Show automation source context in details Co-authored-by: Orca <[email protected]> * Record remote capability negotiation coverage Co-authored-by: Orca <[email protected]> * Record local add project create verification Co-authored-by: Orca <[email protected]> * Scope Linear cached task reads by source Co-authored-by: Orca <[email protected]> * Preserve PR generation host ownership Co-authored-by: Orca <[email protected]> * Route git operations by owner host Co-authored-by: Orca <[email protected]> * Route delete warnings by worktree owner Co-authored-by: Orca <[email protected]> * Route editor drops by worktree owner Co-authored-by: Orca <[email protected]> * Route agent draft paste by tab owner Co-authored-by: Orca <[email protected]> * Route file explorer requests by worktree owner Co-authored-by: Orca <[email protected]> * Document remaining host context gaps Co-authored-by: Orca <[email protected]> * Check runtime task source provider auth Co-authored-by: Orca <[email protected]> * Validate automation source availability Co-authored-by: Orca <[email protected]> * Route remaining UI requests by owner host Co-authored-by: Orca <[email protected]> * Route quick open file listing by worktree owner Co-authored-by: Orca <[email protected]> * Route typed GitHub lookups by source host Co-authored-by: Orca <[email protected]> * Centralize automation run identity fallback Co-authored-by: Orca <[email protected]> * Surface unsupported task source providers Co-authored-by: Orca <[email protected]> * Document automation legacy repo compatibility Co-authored-by: Orca <[email protected]> * Record live host model verification Co-authored-by: Orca <[email protected]> * Quiet disconnected SSH polling Co-authored-by: Orca <[email protected]> * Verify task drawer source boundaries Co-authored-by: Orca <[email protected]> * Verify GitLab repo source selectors Co-authored-by: Orca <[email protected]> * Route automations through owning host Co-authored-by: Orca <[email protected]> * Update host context verification checklist Co-authored-by: Orca <[email protected]> * Run remote automations headlessly in serve mode Co-authored-by: Orca <[email protected]> * Keep setup guide entry stable during refresh Co-authored-by: Orca <[email protected]> * Keep setup script prompt stable during host switches Co-authored-by: Orca <[email protected]> * Deduplicate Tasks project picker sources Co-authored-by: Orca <[email protected]> * Use project identity for Tasks picker dedupe Co-authored-by: Orca <[email protected]> * Add Tasks source host switcher Co-authored-by: Orca <[email protected]> * Refine Tasks source picker disclosure Co-authored-by: Orca <[email protected]> * Polish Tasks source picker hover Co-authored-by: Orca <[email protected]> * Open Tasks source menu on hover Co-authored-by: Orca <[email protected]> * Match Tasks source submenu hover behavior Co-authored-by: Orca <[email protected]> * Open Tasks source submenu from project row hover Co-authored-by: Orca <[email protected]> * Group automation project hosts Co-authored-by: Orca <[email protected]> * Tighten automation project picker density Co-authored-by: Orca <[email protected]> * Show selected host in Tasks project picker Co-authored-by: Orca <[email protected]> * Hide host labels for single-host project pickers Co-authored-by: Orca <[email protected]> * Use saved remote server names in host pickers Co-authored-by: Orca <[email protected]> * Use standard add project start for remote servers Co-authored-by: Orca <[email protected]> * Use saved host labels in workspace surfaces Co-authored-by: Orca <[email protected]> * Route remote browser tabs through runtime hosts Co-authored-by: Orca <[email protected]> * Keep sidebar project-first across grouping modes Co-authored-by: Orca <[email protected]> * Polish multi-host remote runtime UX Co-authored-by: Orca <[email protected]> * Fix CI lint and remove design notes Co-authored-by: Orca <[email protected]> * Fix CI test failures Co-authored-by: Orca <[email protected]> * Fix Windows CLI path expectation Co-authored-by: Orca <[email protected]> * Fix CI renderer test expectations Co-authored-by: Orca <[email protected]> * Fix remaining verify test failures Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> Co-authored-by: Bryant Ung <[email protected]> Co-authored-by: Claude Fable 5 <[email protected]> Co-authored-by: Neil <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jinjing <[email protected]> Co-authored-by: Borja <[email protected]> Co-authored-by: Parker Rex <[email protected]> Co-authored-by: Brennan Benson <[email protected]> Co-authored-by: Trevin Chow <[email protected]> Co-authored-by: buf0-bot[bot] <252831055+buf0-bot[bot]@users.noreply.github.com> Co-authored-by: orca-bug-scan-bot <[email protected]>
* Fix packaged shell PATH order (#5125) Co-authored-by: Orca <[email protected]> * Add Floating Workspace contextual tour (#5062) * Add floating workspace contextual tour Co-authored-by: Orca <[email protected]> * Clarify floating workspace tour intro copy Co-authored-by: Orca <[email protected]> * Differentiate floating workspace tour steps instead of repeating examples Co-authored-by: Orca <[email protected]> * Lead floating workspace tour with the user benefit Co-authored-by: Orca <[email protected]> * Pitch floating workspace tour around cross-repo agents Co-authored-by: Orca <[email protected]> * Refine floating workspace tour step 1 copy Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour step 2 on the minimize control Co-authored-by: Orca <[email protected]> * Restore floating workspace tour step 2 Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour steps on New Terminal and New Markdown Note Co-authored-by: Orca <[email protected]> * Retitle floating workspace tour step 2 as scratchpad Co-authored-by: Orca <[email protected]> * Add why-comments for tour selector fallback and placement flipping Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> * Fix source control compare base ambiguity (#5127) Co-authored-by: Orca <[email protected]> * release: v1.4.59-rc.1 [rc-slot:2026-06-10-15] * release: v1.4.59 * Default-driven create-project flow: name-first form with sensible defaults (#5115) Co-authored-by: Orca <[email protected]> * Redesign Connect integrations (#4531) Co-authored-by: Orca <[email protected]> * Expose E2E store via build mode * File search match counts (#5085) * Add matchCount to SearchFileResult for accurate per-file hit counts Co-authored-by: Orca <[email protected]> * Add file search match count design * rm design doc --------- Co-authored-by: Orca <[email protected]> * fix: address review findings (#5139) * perf(windows): avoid blocking daemon pid checks (#5137) * release: v1.4.60-rc.0 * release: v1.4.60 * Preserve core workflow terms in English and apply CJK spacing (#5141) * Preserve core workflow and product terms in English across locales Update translation policy to prevent localization of key terms such as "Agent", "Commit", "Markdown", and "Terminal". This ensures consistent jargon and product branding. Introduce CJK-Latin term spacing to keep these Latin terms legible when combined with CJK text, while adjusting Korean particle spacing. Also add overrides to prevent network proxy settings from being mistranslated as "Agent". * Preserve repo terminology in English and localize source control labels Treat "repo" and "repos" (and their capitalized forms) as brand terms that should remain in English/Latin across CJK and Spanish locales. Update translation files and policies to replace translated words like "repositorio" or "リポジトリ" with "repo"/"repos", and fix an issue where latin brand terms could be incorrectly matched as substrings in larger words during cleanup. Additionally, externalize and localize the "Staged Changes", "Changes", and "Untracked Files" section labels in the source control sidebar. * UX (#5143) * UX/copy tweaks (#5142) * UX/copy tweaks * UX/copy tweaks * Fix missed star UI translations (#5148) * fix: make windows ssh relay deploy survive session teardown (#5136) * Add option to remove child projects when deleting repo groups (#4702) Co-authored-by: Orca <[email protected]> * fix: remove checks panel response badge (#5147) * Add read-only `orca linear` CLI with trusted launch-prompt pointer (V1) (#5126) Co-authored-by: Orca <[email protected]> * Add AI Vault session history ## Summary - add AI Vault session scanning and resume command construction - add the Agents sidebar panel with filtering, grouping, copy/open actions, and local resume launch - support dragging saved sessions onto terminal split panes ## Validation - pnpm run lint - pnpm run typecheck - pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/register-core-handlers.test.ts src/main/ai-vault/session-scanner.test.ts src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts src/renderer/src/lib/ai-vault-session-drag.test.ts src/renderer/src/lib/launch-ai-vault-session.test.ts * Default agent launches to yolo permissions mode (#5145) * Default agent launches to yolo mode * test: update launch default validations * Fix Claude usage refresh error copy (#5155) Co-authored-by: Orca <[email protected]> * Move workspace board to sidebar bottom toolbar (#5146) Co-authored-by: Orca <[email protected]> * Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (#5154) Co-authored-by: Orca <[email protected]> * Fix missing spaces in cross-repo switch dialog (#5158) * Fix Ctrl+Tab switcher selection on release (#5116) * Fix additional i18n spacing regressions from #4995 (#5159) * Refine add project selection styling (#5160) Co-authored-by: Orca <[email protected]> * improve chinese localization (#5162) * Fix floating workspace needing two clicks after app switch (macOS) (#5128) * Autofocus feedback textarea when Send Feedback dialog opens (#5164) * 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 <[email protected]> * fix: enable claude agent teams by default (#5168) * 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 <[email protected]> * Hide internal context from AI Vault titles (#5175) * Fix detached HEAD publish actions (#5173) * 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. * 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 * 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 * Fix Claude agents management status detection (#5179) Co-authored-by: Orca <[email protected]> * fix: address review findings (#5177) * 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. * 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. * fix: remove unsupported agent launch defaults (#5185) * 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 ("修正"). * 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 * 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 * release: v1.4.61-rc.1 * Add multi-repo folder workspaces (v1) (#5172) Co-authored-by: Orca <[email protected]> * release: v1.4.61-rc.2 * release: v1.4.61 * Clarify nested import group copy (#5202) * release: v1.4.62 * fix(i18n): correct mistranslated Japanese (ja) UI strings (#5191) * Fix duplicate mobile notifications (#5206) Co-authored-by: Orca <[email protected]> * Simplify Linear launch prompt hint (#5211) * Fix contextual tour arrow overlap (#5213) Co-authored-by: Orca <[email protected]> * test: stabilize release e2e checks (#5212) Co-authored-by: Orca <[email protected]> * Resize sidebar footer icons (#5215) Co-authored-by: Orca <[email protected]> * release: v1.4.63 * feat(mobile): drag-to-reorder terminal shortcut keys in settings (#5076) Co-authored-by: Orca <[email protected]> * Allow Claude account switches with unverified live auth (#5217) * fix(mobile): use Claude icon for Agent Teams Use the Claude logo for the Claude Agent Teams option on mobile. * Fix speech model downloads behind proxies (#5210) Co-authored-by: Orca <[email protected]> * release: v1.4.64-rc.0 [rc-slot:2026-06-11-15] * fix(mobile): preserve repeated iOS terminal hyphens (#5222) Co-authored-by: Orca <[email protected]> * Fix PR merge dropdown availability when checks pass (#5220) * fix github pr merge dropdown availability Co-authored-by: Orca <[email protected]> * address pr merge review comments Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> * fix: scope worktree rename updates to project (#5225) Co-authored-by: Orca <[email protected]> * 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. * 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. * Enable first-input rename for folder workspaces (#5227) Co-authored-by: Orca <[email protected]> * Remove startup PTY spawn health probe and guard daemon replacement with live-session check (#5230) Co-authored-by: Orca <[email protected]> * release: v1.4.64-rc.1 * Hide saved source control launch dialog (#5229) * Hide saved source control launch dialog * rm design doc * rm design doc * 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 * 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. * Update create project dialog design (#5231) Co-authored-by: Orca <[email protected]> * 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 <[email protected]> * 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. * 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. * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * 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 <[email protected]> * release: v1.4.64-rc.2 * 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 * Redesign README for clarity and conversion (#5244) Co-authored-by: Orca <[email protected]> * 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. * 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. * 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 * 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. * Update manual project order notice wording and add translations (#5253) Correct a minor grammatical issue in the English notice by adding "the". Additionally, localize FolderWorkspaceComposerDialog and ProjectOrderManualDefaultNotice in Spanish, Japanese, Korean, and Chinese to replace the English fallback strings. * release: v1.4.65-rc.0 * Add Grok sessions to AI Vault (#5258) * Add effectiveness telemetry for in-app GitHub stars (#5245) Co-authored-by: Orca <[email protected]> * fix(serve): persist active serve session tab so PTY output doesn't snap focus to the last tab (#5131) * fix(serve): persist active mobile-session tab so PTY output doesn't snap focus In `orca serve` (headless host + remote/web client), running a command in a terminal snapped the active tab back to the last-created tab. The renderer reconcile forces the client's active tab to the host's reported active (activeTabId / activeTabType / per-tab isActive), but `activateMobileSessionTab` only called `focusTerminal` — a no-op for serve tabs no renderer has adopted — and never persisted the chosen tab into the host's in-memory snapshot. So every `onPtyData` -> `touchMobileSessionSnapshotsForPty` republish re-emitted the stale "active = last tab" and the client snapped back on each command. Persist the activation into the headless snapshot (activeTabId, activeTabType, exclusive per-tab isActive, rebuilt tabGroups) after the focus dispatch, gated on `!getAvailableAuthoritativeWindow() && isHeadlessMobileSessionPublication(...)` — the same guard the hydrate path uses, so renderer-owned snapshots (including `:headless-merge:`) stay authoritative. No-op when the tab is already active; adds nothing to the `onPtyData` hot path. Adds 3 regression tests covering: chosen tab survives a PTY republish, no version bump on redundant activation, and no server-side persist when a renderer is authoritative. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * fix(serve): exclude :headless-merge: snapshots from headless active-tab persist After a renderer detaches there is no authoritative window, so the !getAvailableAuthoritativeWindow() guard alone let merged (:headless-merge:) snapshots through this path. A merged snapshot still carries renderer-owned tabs/groups, so a server-side active-tab rewrite could collapse that mixed group state. Exclude merged epochs from the persist gate; only pure `headless:` / `headless-hydrated:` publications are persisted server-side. Adds a regression test: renderer-detach + `:headless-merge:` snapshot -> the headless persist is suppressed (no snapshot mutation / event). Addresses the CodeRabbit review on #5131. * review: clarify headless active-tab persistence guard Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Move settings out of help dropdown into dedicated sidebar button (#5272) - Pulls the Settings option out of the Help dropdown menu and renders it as a standalone button directly in the sidebar. - Integrates the `useShortcutKeys` hook and `ShortcutKeyCombo` component to display the settings keyboard shortcut in the button's tooltip. - Updates associated tests to verify the new button's placement, ARIA attributes, and tooltip content. * Fix active tab scrolling and editor keyboard layout on mobile (#5271) * Improve mobile session tab scrolling and editor keyboard layout - Auto-scroll the active session tab into view within the horizontal tab strip, using a new layout-aware utility with minimal scrolling. - Use visual viewport measurements in the editor WebView to accurately report keyboard insets and lift floating controls above the keyboard, as native events can under-report covered areas. * Fix active tab scrolling and normalize editor keyboard inset - Ensure the active session tab is scrolled into view immediately when its layout finishes to prevent it from remaining hidden off-screen. - Round, clamp, and validate WebView visualViewport bottom measurements to avoid rendering inconsistencies from fractional or invalid insets. - Trigger an immediate keyboard inset report on script initialization. * Update tabStripOffsetRef when scrolling mobile tab strip Ensure the cached offset is updated to match the next scroll position. Without this update, subsequent scroll calculations would use stale offset values. * fix: address review findings (#5273) * release: v1.4.65-rc.1 * fix: address review findings (#5275) * fix: clarify Korean terminal link routing label (#5277) * Update Android mobile release links to 0.0.13 Point Android download links at the published mobile-v0.0.13 release. * Defer project header pointer capture until drag threshold is crossed (#5278) This allows simple clicks on the repository header to still reach the inner collapse handler on pointerup. Additionally, body cursor and user-select styles are only applied when actual dragging begins, rather than when the session is armed. * release: v1.4.65-rc.2 * Add Linear write commands for agents (#5165) Co-authored-by: Orca <[email protected]> * release: v1.4.65-rc.3 * fix: distinguish remote project paths by SSH connection (#5279) Co-authored-by: Orca <[email protected]> * Fix WSL agent setup to use the distro login shell (#5285) * Fix tab agent identity detection (#5283) Co-authored-by: Orca <[email protected]> * feat(mobile): paste clipboard images into terminals (#5264) * fix: browser url preview with arrow navigation [#5113] (#5221) * fix: browser url preview with arrow navigation * Fix browser autocomplete preview cancel Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Add left sidebar appearance setting (#5280) Co-authored-by: Orca <[email protected]> * Fix markdown preview links routing to system browser instead of Orca (#5265) * Fix markdown preview links opening in system browser instead of Orca In the markdown preview, a plain (or Cmd/Ctrl) click on an http/https link called window.api.shell.openUrl() directly, which always routes to shell.openExternal (the OS default browser). It bypassed openHttpLink, so a plain click could never open in the Orca built-in browser, regressing the behavior from #987. The Cmd/Ctrl+Shift escape hatch was already correct. Route both http click paths through openHttpLink via a new resolveMarkdownPreviewHttpOpenOptions helper that centralizes the cross-platform modifier decision (Cmd on Mac, Ctrl on Linux/Windows): - plain / Cmd-click -> { worktreeId } -> Orca browser (per openLinksInApp), falling back to the system browser when the setting is off, no worktree is known, or a remote runtime is active. - Cmd/Ctrl+Shift-click -> { forceSystemBrowser: true } -> system browser. The remote/SSH case is handled inside openHttpLink (http stays on the client system browser; file:// blocking is unchanged). Adds a happy-dom interaction test that renders the real component and fires real modifier clicks, plus full modifier-matrix coverage for the helper. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * review: share markdown preview link modifier logic Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * release: v1.4.66-rc.0 [rc-slot:2026-06-12-15] * Fix Tasks PR detail drawer and GitHub attachment videos (#5288) Co-authored-by: Orca <[email protected]> * feat: add Devin CLI as supported TUI agent (#5282) * feat: add Devin CLI as supported TUI agent Register Devin across shared agent config, telemetry, desktop/mobile catalogs, localization, and README. Uses stdin-after-start prompt delivery with --permission-mode bypass default args. * test: assert Devin default --permission-mode bypass in startup plans * Fix Windows multiline terminal paste (#5291) * Fix Linux dock window class (#5293) * Fix Windows task issue header overlap (#5295) * Add keyboard shortcuts to launch agent tabs (default agent + per-agent bindings) (#5214) * Add keyboard shortcuts to launch agent tabs Cmd+T opens a plain terminal tab, but launching an agent in a new tab was mouse-only (tab bar + menu). This adds: - tab.newAgent ("New agent tab"): launches the default agent in a new tab in the active workspace. Default chord Cmd+Alt+T on macOS; unassigned on Windows/Linux (AltGr / desktop-terminal chord conflicts), bindable in Settings. Resolves the agent via the configured default when detected and enabled, otherwise the shared auto-pick order; a 'blank' default falls through to auto-pick since an explicit agent chord wants an agent. - tab.newAgent.<id>: one bindable action per TUI agent so each enabled agent can sit on its own chord. All ship unassigned. Settings → Shortcuts shows them in a new "Agents" group, hiding disabled agents; a per-agent chord launches its agent even when detection hasn't confirmed the binary (explicit request fails visibly in the tab). Launches go through launchAgentInNewTab (same path as the tab-bar quick launch) with launch_source 'shortcut'. Agent display names move to a shared module so the keybinding registry can title the generated actions without importing renderer code. groupDefinitions moves out of ShortcutsPane.tsx to keep it under the max-lines lint cap. * Fix recording Option-composed shortcuts on macOS On macOS, Option changes the produced character (Cmd+Alt+C reports key 'ç'), so the shortcut recorder rejected Alt combos with 'Press a key, not only a modifier'. Capture now falls back to the physical key code when Alt is held, matching the existing matcher behavior. * fix: ignore disabled agent shortcuts in conflict checks Co-authored-by: Orca <[email protected]> * fix: align mac option shortcut capture with matching Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * fix: replace per-5s full-buffer terminal checkpoints with an incremental log (#5292) Co-authored-by: Orca <[email protected]> * Fix rich markdown image paste bloat (#5290) Co-authored-by: Orca <[email protected]> * Improve Warp custom theme discovery (#5287) Co-authored-by: Orca <[email protected]> * Suppress decorative agent title churn (#5294) * release: v1.4.66-rc.1 * Fallback to system SSH on reachability errors (#5303) Co-authored-by: Orca <[email protected]> * Confirm Linear setup after Re-check (#5300) Co-authored-by: Orca <[email protected]> * Align Source Control action buttons (#5305) Co-authored-by: Orca <[email protected]> * Add Enable auto-merge action to PR merge dropdown (#5296) (#5309) Co-authored-by: Orca <[email protected]> * release: v1.4.66-rc.2 [rc-slot:2026-06-13-03] * fix(sidebar): increase worktree card content inset (#4885) Co-authored-by: brennanb2025 <[email protected]> * refactor: simplify runtime service helpers (#4005) * refactor: simplify runtime service helpers * fix: keep tui idle cheap checks polling --------- Co-authored-by: brennanb2025 <[email protected]> * Own Claude OAuth refresh instead of scraping it back (#5318) Co-authored-by: Orca <[email protected]> * Fix agent tabs opening as a bare shell with oh-my-zsh vi-mode (#5315) * fix(terminal): emit zsh shell-ready marker even when a user zle-line-init hook fails Orca's zsh wrapper registered its OSC-777 shell-ready marker via `add-zle-hook-widget line-init`. zsh's azhw dispatcher aborts the whole hook chain when an earlier hook returns non-zero, and oh-my-zsh's vi-mode installs a raw `zle-line-init` that exits 1 when VI_MODE_SET_CURSOR is unset. The marker never fired, so every queued startup command sat on the daemon's 15s pre-ready timeout — agent quick-launches looked like they just opened a bare terminal. Own `zle-line-init` directly: emit the marker first, then chain to any previously-installed widget (called as a plain function so $WIDGET stays `zle-line-init` for downstream azhw dispatchers). The registration is idempotent — a re-source keeps the originally captured widget instead of clobbering the chain. Applied to both the daemon and local-PTY wrappers via a shared template helper. * test(shell-ready): skip global zsh rcs so CI compinit can't block the marker tests The real-zsh node-pty tests spawned 'zsh -l'/'zsh -i', which on CI runners sources /etc/zsh/* whose global compinit hits insecure (group-writable) fpath dirs and blocks on an interactive 'insecure directories [y/n]?' prompt before zle-line-init fires. The marker never appeared and the tests timed out. Spawn with -o noglobalrcs so only our ZDOTDIR wrapper/fixtures load; the marker contract is unaffected. Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Fix runtime status for legacy transport metadata (#3956) * Add mobile Review Changes workflow (#5313) * Add mobile diff review * Wrap mobile review notes prompt * Fix mobile review unreviewed navigation * Clear review completion when a refreshed diff invalidates a reviewed file mergeMobileDiffReviewState invalidates a file's reviewed flag when its diff identity changes, but left completedAt set — inconsistent with markUnreviewed. Drop completedAt on invalidation and add a regression test. Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * fix(mobile): retry handshake before latching auth-failed (#5200) (#5304) * Run the file watcher off the main process to fix the serve deadlock (#5308) (#5310) Co-authored-by: Orca <[email protected]> * fix: resolve PR workspaces on SSH remotes (fetch via dedicated RPC) (#5320) * Support full Linear task workflows from the CLI (#5323) Co-authored-by: Orca <[email protected]> * Match the sidebar app name to custom sidebar colors (#5324) * Attach Linear issues from the worktree CLI (#5322) Co-authored-by: Orca <[email protected]> * Adjust Linear setup prompt reminders (#5297) * release: v1.4.67-rc.0 [rc-slot:2026-06-13-15] * Hide stale workspace chrome during worktree creation (#5328) * feat: add GitHub Enterprise URL support (#5081) Co-authored-by: brennanb2025 <[email protected]> * Keep Linear-linked agent launches workflow-neutral (#5331) Co-authored-by: Orca <[email protected]> * fix: handle window-close request at the always-mounted App root (#5144) (#5332) * fix: prompt to discard unsaved Settings AI prompts on quit instead of silently blocking (#5335) * fix: WSL agent detection broken for zsh login shells (#5325) (#5337) * Fix workspace cleanup modal spacing (#5334) * Make remote hosts first class: concurrent multi-host workbench (#5071) * Restore the outlined server card for host headers Feedback: the bordered card with the server glyph made it clearer that a host section is a separate machine, not just another group. Bring that back while keeping the recent quieting: no status dot when healthy (marks only for connecting/blocked/error/disconnected), no 'This computer' detail on the local host, and collapse/menu/count behavior unchanged. Co-authored-by: Orca <[email protected]> * Anchor host badge to its label, indent rows under host cards Sidebar polish from review: - The count badge sat in dead space between the label and the hover-only chevron/menu; it now hugs the label like repo headers - Rows under a host card get a left inset so projects and workspaces visibly belong to the machine above them - A host whose only visible row is a collapsed repo group counted 0 while the group badge said 9; host counts now fall back to header counts for groups contributing no visible items Co-authored-by: Orca <[email protected]> * Two-tier sticky headers: pinned host card above pinned group header When scrolling inside a host section, the host card now stays pinned at the top (z-30) while project/status group headers hand off beneath it (z-20, offset by the pinned card height). The host is the outer hierarchy level, so it is the most persistent context — previously the first repo header replaced it, losing 'which machine am I on' exactly when it mattered. The pinned card keeps its collapse/menu/warning affordances. Handoff rules: the next host card pushes the previous one out at the viewport top; a group pins only once it reaches the slot beneath the host card, and a previous host's group can never pin under the next host. Without host sections the logic degrades to the original single-tier behavior. Co-authored-by: Orca <[email protected]> * Revert host-section row indent The two-tier sticky host card now provides continuous 'inside this machine' context at any scroll depth, making the static indent redundant — and it cost 12px of sidebar width on every row while making multi-host layouts misalign with single-host ones. Host cards bracketing their sections plus the pinned header carry the ownership signal on their own. Co-authored-by: Orca <[email protected]> * Checkpoint multi-host sidebar and project-first notes Co-authored-by: Orca <[email protected]> * Add project-first compatibility persistence Co-authored-by: Orca <[email protected]> * Expose project host setup APIs Co-authored-by: Orca <[email protected]> * Group sidebar rows by project setup Co-authored-by: Orca <[email protected]> * Document project-first host model discussion Co-authored-by: Orca <[email protected]> * Resolve workspace creation through project host setups Co-authored-by: Orca <[email protected]> * Stamp workspace ownership with project host setup Co-authored-by: Orca <[email protected]> * Add project host setup existing folder API Co-authored-by: Orca <[email protected]> * Summarize project-first host model discussion Co-authored-by: Orca <[email protected]> * Add project host setup CLI commands Co-authored-by: Orca <[email protected]> * Allow CLI worktree creation by project host setup Co-authored-by: Orca <[email protected]> * Add workspace host setup picker Co-authored-by: Orca <[email protected]> * Add project host setup settings summary Co-authored-by: Orca <[email protected]> * Make project host setup settings navigable Co-authored-by: Orca <[email protected]> * Stabilize project host setup settings selector Co-authored-by: Orca <[email protected]> * Add project host existing-folder setup form Co-authored-by: Orca <[email protected]> * Update project host model implementation status Co-authored-by: Orca <[email protected]> * Keep projects outermost in default sidebar view Co-authored-by: Orca <[email protected]> * Update project-first sidebar status Co-authored-by: Orca <[email protected]> * Show host context in project sidebar groups Co-authored-by: Orca <[email protected]> * Show unavailable hosts in workspace run target Co-authored-by: Orca <[email protected]> * Import missing project host from composer Co-authored-by: Orca <[email protected]> * Clone project host setup from composer Co-authored-by: Orca <[email protected]> * Persist project host setup method Co-authored-by: Orca <[email protected]> * Clone project hosts over SSH Co-authored-by: Orca <[email protected]> * Improve SSH clone cancellation cleanup Co-authored-by: Orca <[email protected]> * Backfill workspace project host ownership Co-authored-by: Orca <[email protected]> * Gate project host setup runtime capability Co-authored-by: Orca <[email protected]> * Preserve independent project host setups Co-authored-by: Orca <[email protected]> * Add project host setup update API Co-authored-by: Orca <[email protected]> * Add project host setup delete API Co-authored-by: Orca <[email protected]> * Add project host setup create API Co-authored-by: Orca <[email protected]> * Expose project host setup lifecycle in renderer store Co-authored-by: Orca <[email protected]> * Handle independent project host setups in settings Co-authored-by: Orca <[email protected]> * Add pending host setup action in project settings Co-authored-by: Orca <[email protected]> * Show pending project host setup status in composer Co-authored-by: Orca <[email protected]> * Report pending setup state in workspace target resolution Co-authored-by: Orca <[email protected]> * Use shared host registry for project setup choices Co-authored-by: Orca <[email protected]> * Add settings clone flow for project host setups Co-authored-by: Orca <[email protected]> * Gate unavailable project host setup options Co-authored-by: Orca <[email protected]> * Gate unavailable project setup hosts in settings Co-authored-by: Orca <[email protected]> * Stream SSH clone progress to renderer Co-authored-by: Orca <[email protected]> * Update project host model status notes Co-authored-by: Orca <[email protected]> * Add CLI project host setup clone command Co-authored-by: Orca <[email protected]> * Make add project host aware Co-authored-by: Orca <[email protected]> * Complete project host setup validation Co-authored-by: Orca <[email protected]> * Recover floating workspace terminal WebGL atlas on reopen (#5069) Co-authored-by: Orca <[email protected]> * Fix stale terminal daemon spawn health (#5064) Co-authored-by: Orca <[email protected]> * Suspend floating workspace terminal WebGL while the panel is closed (#5073) Co-authored-by: Orca <[email protected]> * Fix source control branch compare base (#5074) Co-authored-by: Orca <[email protected]> * Fix workspace-creation tour panel clipped by the Create Worktree dialog (#5078) * Fix workspace-creation tour panel clipped by the composer dialog The tour panel portals into dialog/sheet content that clips overflow, but its position was clamped against the window viewport. With the Project field spanning nearly the dialog's full width, the panel landed past the dialog's right edge and overflow-hidden cut it down to a sliver. Clamp hosted panels within the host's bounds instead, so the panel flips below the target and stays fully visible. Co-Authored-By: Claude Fable 5 <[email protected]> * Add JSDoc docstrings to satisfy CodeRabbit docstring coverage check Co-Authored-By: Claude Sonnet 4.6 <[email protected]> * Test hosted contextual tour overlay positioning --------- Co-authored-by: Claude Fable 5 <[email protected]> Co-authored-by: Neil <[email protected]> * release: v1.4.56 * Handle buffer overflows gracefully and truncate diffs fairly (#5083) - Gracefully fall back to file-name summaries when staged diffs exceed node/ssh execution maxBuffer limits, preventing generation failures. - Split oversized diffs by file and allocate budget via water-filling, ensuring single huge files do not starve smaller human changes. - Clip truncated diff sections on line boundaries to avoid half-lines. * Wrap AI generation controls with tooltips and clean i18n dependencies (#5087) - Wrap the AI generation button in a tooltip so users can see the disabled reason or the action description on hover. - Add unit tests verifying tooltip triggers and aria-label safety. - Simplify memo dependencies in settings metadata and worktree palette by using 'useTranslation()' to handle language-change rerenders directly without needing 'i18n.language'. * fix: address review findings (#5088) * Fix localization in repository hooks and base ref suggestion toast (#5089) * Fix localization in base ref toast and custom hook description - Localize the "commit"/"commits" plural nouns in the base ref toast. - Translate missing suggestion toast strings for JA, KO, and ZH locales. - Pass `{{artifact_url}}` as a literal template variable to translate calls to prevent i18next from treating it as a dynamic placeholder. * Fix localization reactivity in RepositoryHooksSection Move static variables containing translation calls into helper functions and subscribe to translation updates using useTranslation. This ensures that localized options, descriptions, and error messages refresh dynamically when the user changes the UI language. * Fix task page labels after language changes (#5086) Co-authored-by: Orca <[email protected]> * release: v1.4.57 * Fix automation tabs showing a shell instead of the live agent (#5099) * Fix automation tabs showing a shell instead of the live agent Opening a background automation's terminal tab showed a bare shell while the agent (Claude) kept running headless — the sidebar updated but the pane was attached to the wrong PTY. On first mount the restored ptyId equals the tab ptyId, and isSessionOwnedByWorktree() returns true for it, so connectPanePty routed the still-live eagerly-spawned PTY into the daemon-reattach branch (transport.connect({ sessionId })), which spawns a fresh shell and orphans the live agent PTY instead of adopting it via attach()+replay. Part A: gate the deferred reattach on the absence of a live eager buffer. A live eager buffer means the PTY is a still-running local session to adopt (attach + replay), not a daemon session to re-connect. Daemon reattach and remote PTYs are unaffected (gated on the eager buffer). Part B: publish never-mounted background automation tabs into the runtime graph (gated on a live eager buffer) so the live agent PTY binds to its real tab instead of surfacing as an orphan `pty:<id>` terminal — fixing `orca terminal list`, the CLI, and automation session-reuse. Adds a characterization test (fails on the old code, passes now) and a runtime-graph publish test. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> * Harden eager PTY tab adoption Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Fix i18n label spacing in menus and settings (#5108) * fix i18n label spacing * Fix localized account runtime labels Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Jinwoo-H <[email protected]> Co-authored-by: Orca <[email protected]> * Improve localization catalog sync workflow (#5110) Co-authored-by: Orca <[email protected]> * Add Warp terminal theme import (#4714) Co-authored-by: Orca <[email protected]> * release: v1.4.58 * Tidy README badge layout * Handle integration credential decrypt failures (#4683) Co-authored-by: Orca <[email protected]> * Fix git repo telemetry for repo adds (#5121) Co-authored-by: Orca <[email protected]> * Add feature interaction usage bucket telemetry (#5119) Co-authored-by: Orca <[email protected]> * Reset WebGL glyph atlases globally to stop cross-terminal glyph corruption (#5122) Co-authored-by: Orca <[email protected]> * perf(windows): fix 60s startup ACL walk and OpenCode streaming freeze, with benchmark harnesses (#5124) * release: v1.4.59-rc.0 * Fix packaged shell PATH order (#5125) Co-authored-by: Orca <[email protected]> * Add Floating Workspace contextual tour (#5062) * Add floating workspace contextual tour Co-authored-by: Orca <[email protected]> * Clarify floating workspace tour intro copy Co-authored-by: Orca <[email protected]> * Differentiate floating workspace tour steps instead of repeating examples Co-authored-by: Orca <[email protected]> * Lead floating workspace tour with the user benefit Co-authored-by: Orca <[email protected]> * Pitch floating workspace tour around cross-repo agents Co-authored-by: Orca <[email protected]> * Refine floating workspace tour step 1 copy Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour step 2 on the minimize control Co-authored-by: Orca <[email protected]> * Restore floating workspace tour step 2 Co-authored-by: Orca <[email protected]> * Anchor floating workspace tour steps on New Terminal and New Markdown Note Co-authored-by: Orca <[email protected]> * Retitle floating workspace tour step 2 as scratchpad Co-authored-by: Orca <[email protected]> * Add why-comments for tour selector fallback and placement flipping Co-authored-by: Orca <[email protected]> --------- Co-authored-by: Orca <[email protected]> * Fix source control compare base ambiguity (#5127) Co-authored-by: Orca <[email protected]> * release: v1.4.59-rc.1 [rc-slot:2026-06-10-15] * release: v1.4.59 * Default-driven create-project flow: name-first form with sensible defaults (#5115) Co-authored-by: Orca <[email protected]> * Redesign Connect integrations (#4531) Co-authored-by: Orca <[email protected]> * Expose E2E store via build mode * File search match counts (#5085) * Add matchCount to SearchFileResult for accurate per-file hit counts Co-authored-by: Orca <[email protected]> * Add file search match count design * rm design doc --------- Co-authored-by: Orca <[email protected]> * fix: address review findings (#5139) * perf(windows): avoid blocking daemon pid checks (#5137) * release: v1.4.60-rc.0 * release: v1.4.60 * Preserve core workflow terms in English and apply CJK spacing (#5141) * Preserve core workflow and product terms in English across locales Update translation policy to prevent localization of key terms such as "Agent", "Commit", "Markdown", and "Terminal". This ensures consistent jargon and product branding. Introduce CJK-Latin term spacing to keep these Latin terms legible when combined with CJK text, while adjusting Korean particle spacing. Also add overrides to prevent network proxy settings from being mistranslated as "Agent". * Preserve repo terminology in English and localize source control labels Treat "repo" and "repos" (and their capitalized forms) as brand terms that should remain in English/Latin across CJK and Spanish locales. Update translation files and policies to replace translated words like "repositorio" or "リポジトリ" with "repo"/"repos", and fix an issue where latin brand terms could be incorrectly matched as substrings in larger words during cleanup. Additionally, externalize and localize the "Staged Changes", "Changes", and "Untracked Files" section labels in the source control sidebar. * UX (#5143) * UX/copy tweaks (#5142) * UX/copy tweaks * UX/copy tweaks * Fix missed star UI translations (#5148) * fix: make windows ssh relay deploy survive session teardown (#5136) * Add option to remove child projects when deleting repo groups (#4702) Co-authored-by: Orca <[email protected]> * fix: remove checks panel response badge (#5147) * Add read-only `orca linear` CLI with trusted launch-prompt pointer (V1) (#5126) Co-authored-by: Orca <[email protected]> * Add AI Vault session history ## Summary - add AI Vault session scanning and resume command construction - add the Agents sidebar panel with filtering, grouping, copy/open actions, and local resume launch - support dragging saved sessions onto terminal split panes ## Validation - pnpm run lint - pnpm run typecheck - pnpm exec vitest run --config config/vitest.config.ts src/main/ipc/register-core-handlers.test.ts src/main/ai-vault/session-scanner.test.ts src/renderer/src/components/right-sidebar/ai-vault-session-filters.test.ts src/renderer/src/lib/ai-vault-session-drag.test.ts src/renderer/src/lib/launch-ai-vault-session.test.ts * Default agent launches to yolo permissions mode (#5145) * Default agent launches to yolo mode * test: update launch default validations * Fix Claude usage refresh error copy (#5155) Co-authored-by: Orca <[email protected]> * Move workspace board to sidebar bottom toolbar (#5146) Co-authored-by: Orca <[email protected]> * Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (#5154) Co-authored-by: Orca <[email protected]> * Fix missing spaces in cross-repo switch dialog (#5158) * Fix Ctrl+Tab switcher selection on release (#5116) * Fix additional i18n spacing regressions from #4995 (#5159) * Refine add project selection styling (#5160) Co-authored-by: Orca <[email protected]> * improve chinese localization (#5162) * Fix floating workspace needing two clicks after app switch (macOS) (#5128) * Autofocus feedback textarea when Send Feedback dialog opens (#5164) * 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 <[email protected]> * fix: enable claude agent teams by default (#5168) * 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 <[email protected]> * Hide internal context from AI Vault titles (#5175) * Fix detached HEAD publish actions (#5173) * 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. * 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 * 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 * Fix Claude agents management status detection (#5179) Co-authored-by: Orca <[email protected]> * fix: address review findings (#5177) * 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. * 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. * fix: remove unsupported agent launch defaults (#5185) * 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 ("修正"). * 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 * 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 * release: v1.4.61-rc.1 * Add multi-repo folder workspaces (v1) (#5172) Co-authored-by: Orca <[email protected]> * release: v1.4.61-rc.2 * Hide unavailable project hosts in worktree composer Co-authored-by: Orca <[email protected]> * Remove inline project host setup from composer Co-authored-by: Orca <[email protected]> * Mark imported project host setup methods Co-authored-by: Orca <[email protected]> * Fix rebase merge fallout Co-authored-by: Orca <[email protected]> * Disable unavailable Add Project hosts Co-authored-by: Orca <[email protected]> * Compact Add Project host selector Co-authored-by: Orca <[email protected]> * Hide redundant SSH target chooser Co-authored-by: Orca <[email protected]> * Browse SSH clone destinations Co-authored-by: Orca <[email protected]> * Avoid local clone defaults for SSH hosts Co-authored-by: Orca <[email protected]> * Polish host-aware Add Project flows Co-authored-by: Orca <[email protected]> * Polish remote host add project flows Co-authored-by: Orca <[email protected]> * Remove redundant host kind chips Co-authored-by: Orca <[email protected]> * Fix remote project setup UX gaps Co-authored-by: Orca <[email protected]> * Fix multihost workspace composer project identity Co-authored-by: Orca <[email protected]> * Finish host context merge repair Co-authored-by: Orca <[email protected]> * Continue host context checklist implementation Co-authored-by: Orca <[email protected]> * Route Linear and Jira tasks by source context Co-authored-by: Orca <[email protected]> * Preserve Linear task source context in history Co-authored-by: Orca <[email protected]> * Scope task retry state by source context Co-authored-by: Orca <[email protected]> * Route GitHub drawer reads by source context Co-authored-by: Orca <[email protected]> * Guard GitLab selectors with repo context Co-authored-by: Orca <[email protected]> * Guard GitHub metadata selectors Co-authored-by: Orca <[email protected]> * Route GitHub task row actions by source context Co-authored-by: Orca <[email protected]> * Update GitHub source-context checklist status Co-authored-by: Orca <[email protected]> * Show host ownership for CLI provider accounts Co-authored-by: Orca <[email protected]> * Persist GitLab task detail source context Co-authored-by: Orca <[email protected]> * Show host scope for provider API budgets Co-authored-by: Orca <[email protected]> * Preserve Jira task source context Co-authored-by: Orca <[email protected]> * Scope Jira optimistic task patches Co-authored-by: Orca <[email protected]> * Resolve task PR bases on run host Co-authored-by: Orca <[email protected]> * Record Jira task workspace usage Co-authored-by: Orca <[email protected]> * Scope Linear optimistic task patches Co-authored-by: Orca <[email protected]> * Scope GitHub optimistic task patches Co-authored-by: Orca <[email protected]> * Clean host copy in onboarding flows Co-authored-by: Orca <[email protected]> * Preserve automation CLI run context Co-authored-by: Orca <[email protected]> * Add automation CLI source context selector Co-authored-by: Orca <[email protected]> * Clarify unavailable task source hosts Co-authored-by: Orca <[email protected]> * Surface host model runtime capability skew Co-authored-b…
Summary
Credential decrypt failures for saved Linear and Jira tokens now surface as an explicit, actionable connection-status error instead of being silently treated like missing credentials or empty results.
src/main/integration-credential-file.ts) that preserves legacy plaintext token files but throws a canonical error — "Could not decrypt saved {service} credential. Approve Keychain access or reconnect {service}." — when a token file holds ciphertext that cannot be decrypted (e.g. the user denied the OS keychain prompt after an app re-sign). Printable-UTF-8 detection keeps real ciphertext from ever being sent as an auth header.credentialErrorfield onLinearConnectionStatus/JiraConnectionStatus. The recorded error clears automatically when a later read decrypts successfully, when the token is re-saved (reconnect), or on disconnect. Status reads stay cheap — they never touch the keychain.Design note
An earlier revision of this branch threaded per-token provenance through every Linear/Jira call site and rethrew decrypt errors to a dozen component catch sites with toasts. It was reworked into this centralized status-based design: the same user-facing outcome with far less surface area — call sites (
src/main/linear/issues.ts,teams.ts,projects.ts,src/main/jira/issues.ts) and issue-workspace components are now untouched, and future read paths get correct behavior from the shared reader and slice idiom without needing to follow a convention.Tests
pnpm run typecheckpnpm run lint(passes with pre-existing React hook dependency warnings in ChecksPanel, Settings, and StatusBar)git diff --checkpnpm vitest run --config config/vitest.config.ts src/main/linear/client.test.ts src/main/jira/client.test.ts src/main/linear/issues.test.ts src/main/jira/issues.test.ts src/main/linear/projects.test.ts src/main/linear/teams.test.ts src/renderer/src/store/slices/linear.test.ts src/renderer/src/store/slices/jira.test.ts— 72 tests passing, including: decrypt errors propagate from token reads; token files survive decrypt failure;credentialErrorappears in status and clears after Keychain approval; renderer reads fall back and refresh status; legacy plaintext tokens keep working; empty token files read as missing.Assumptions And Gaps