Commit Graph
726 Commits
Author SHA1 Message Date
Brennan BensonandOrca 5f0a4fc5f3 Add left sidebar appearance setting (#5280)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 15:00:28 -07:00
Brennan BensonandOrca abb2477efb Fix tab agent identity detection (#5283)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 14:15:27 -07:00
Jinwoo Hong 5f3b61aa65 Fix WSL agent setup to use the distro login shell (#5285) 2026-06-12 17:01:34 -04:00
Brennan BensonandOrca 74c961b09f Add Linear write commands for agents (#5165)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 13:29:13 -07:00
Jinjing d2a3f12baa fix: address review findings (#5275) 2026-06-12 11:43:39 -07:00
Brennan BensonandOrca d93de0935f Add effectiveness telemetry for in-app GitHub stars (#5245)
Co-authored-by: Orca <help@stably.ai>
2026-06-12 10:14:49 -07:00
Neil f31c40cb18 Add Grok sessions to AI Vault (#5258) 2026-06-12 01:38:56 -07:00
Jinjing 4d0c449378 Support project reordering with groups and add manual-default notice (#5237)
* Support project reordering with groups and add manual-default notice

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

* Split oversized translated UI modules

* Fix localized option test regressions
2026-06-11 20:39:39 -07:00
Jinwoo HongandOrca b09d7124c4 Persist agent provider sessions at quit and resume them on cold restore (#5240)
Agent provider session ids lived only in the in-memory
agentStatusByPaneKey map, so a daemon/session death while the app was
closed (reboot, crash, update kill) left nothing to resume from -
terminals cold-restored as plain shells with no Claude/Codex/Gemini
session (#5232, Bug 2).

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

Co-authored-by: Orca <help@stably.ai>
2026-06-11 20:17:23 -07:00
Jinjing 36e439907a Implement GitHub issue close reasons and tabbed comment composer (#5235)
- Support closing GitHub issues with specific reasons ('completed', 'not planned', or duplicate) via main-process mutations and gh CLI wrappers.
- Replace the legacy comment composer with a tabbed layout supporting a real-time markdown preview, image/attachment inputs, and state transition buttons.
- Refactor assignee and label popovers into dedicated reusable components to clean up the item dialog.
2026-06-11 19:49:41 -07:00
Jinjing 1f6bfe0503 Improve error messaging for git submodule push failures (#5226)
Detect when git push operations fail due to un-pushed or out-of-sync
submodules, and extract the specific submodule name to provide clear,
actionable guidance to the user.

Additionally, update the Source Control error UI to allow better text
wrapping and word-breaking for detailed error alerts.
2026-06-11 17:32:49 -07:00
Brennan BensonandOrca 91e354ccb1 Add multi-repo folder workspaces (v1) (#5172)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 02:34:01 -07:00
Jinjing ba0d2fec16 Combine file search and file explorer right sidebar tabs (#5182)
Unifies file discovery and tree navigation under a single Explorer domain, simplifying the right sidebar activity bar and reducing tab clutter.

* Replaces the standalone 'search' activity bar tab with a nested 'search' subview inside the File Explorer tab
* Introduces 'rightSidebarExplorerView' ('files' | 'search') state to manage the active subview inside the Explorer
* Adds a search button to the File Explorer toolbar and a back button to the search subview for seamless transition
* Exposes 'showRightSidebarFiles' and 'showRightSidebarSearch' store actions to route and seed search queries/include patterns
* Adapts file explorer keybindings, git status polling, and external workspace watchers to respect the active subview
* Maps legacy persisted search tab state to the new explorer search view for backward compatibility
2026-06-11 02:13:16 -07:00
Neil 260d2263d0 fix: remove unsupported agent launch defaults (#5185) 2026-06-11 01:50:18 -07:00
Jinjing e64b27f46e Allow resolving selected review comments with AI (#5184)
* Allow resolving selected PR/MR review comments with AI

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

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

* Consolidate PR comment selection state and eliminate effects

Combine independent selection states and context-tracking into a single
state object. Derive active selection data and prune ineligible comments
during render using useMemo instead of relying on asynchronous
useEffect synchronization hooks.
2026-06-11 01:45:11 -07:00
Brennan BensonandOrca 1ae8ebdc3f Fix Claude agents management status detection (#5179)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 01:43:38 -07:00
Jinjing ac216d5727 Route task PR queries by upstream source (#5176)
* Route task PR queries by upstream source

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

* rm design doc
2026-06-11 00:58:26 -07:00
Jinjing fcc0afa8cd fix: enable claude agent teams by default (#5168) 2026-06-11 00:08:43 -07:00
Parker Rex c2b68cac74 Fix Ctrl+Tab switcher selection on release (#5116) 2026-06-10 22:11:17 -07:00
Brennan BensonandOrca a4a1b12d80 Move workspace board to sidebar bottom toolbar (#5146)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 21:51:58 -07:00
Neil 9ceabb43b6 Default agent launches to yolo permissions mode (#5145)
* Default agent launches to yolo mode

* test: update launch default validations
2026-06-10 21:14:53 -07:00
Neil 1f5d31a2b5 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
2026-06-10 21:10:10 -07:00
Brennan BensonandOrca cdc0ca5e53 Add read-only orca linear CLI with trusted launch-prompt pointer (V1) (#5126)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 20:20:50 -07:00
Neil 1a22e2d05c UX/copy tweaks (#5142)
* UX/copy tweaks

* UX/copy tweaks
2026-06-10 19:53:03 -07:00
Jinjing 0f774610cc fix: address review findings (#5139) 2026-06-10 17:54:33 -07:00
JinjingandOrca 26aa473bca File search match counts (#5085)
* Add matchCount to SearchFileResult for accurate per-file hit counts

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

* Add file search match count design

* rm design doc

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-10 17:42:49 -07:00
Brennan BensonandOrca 64acad300d Add Floating Workspace contextual tour (#5062)
* Add floating workspace contextual tour

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

* Clarify floating workspace tour intro copy

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

* Differentiate floating workspace tour steps instead of repeating examples

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

* Lead floating workspace tour with the user benefit

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

* Pitch floating workspace tour around cross-repo agents

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

* Refine floating workspace tour step 1 copy

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

* Anchor floating workspace tour step 2 on the minimize control

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

* Restore floating workspace tour step 2

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

* Anchor floating workspace tour steps on New Terminal and New Markdown Note

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

* Retitle floating workspace tour step 2 as scratchpad

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

* Add why-comments for tour selector fallback and placement flipping

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-10 14:12:07 -07:00
Jinwoo Hong 5f6b454c3a perf(windows): fix 60s startup ACL walk and OpenCode streaming freeze, with benchmark harnesses (#5124) 2026-06-10 16:41:22 -04:00
Brennan BensonandOrca 47927d019e Add feature interaction usage bucket telemetry (#5119)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 13:38:51 -07:00
Brennan BensonandOrca 2fa2cc8cb1 Fix git repo telemetry for repo adds (#5121)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 13:24:49 -07:00
Brennan BensonandOrca ceae167427 Handle integration credential decrypt failures (#4683)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 13:08:09 -07:00
Brennan BensonandOrca 738ccc5518 Add Warp terminal theme import (#4714)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 11:16:36 -07:00
Jinjing 8bc15e1439 fix: address review findings (#5088) 2026-06-10 01:22:11 -07:00
Jinjing 256e0ef81a 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.
2026-06-09 23:56:36 -07:00
Jinwoo Hong d09a7fa28b Add Simplified Chinese, Korean, and Japanese UI localization (#5046) 2026-06-09 15:59:17 -07:00
Brennan BensonandOrca 1e7e494e9a Add "Use Orca's browser" onboarding milestone (#4855)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 13:50:46 -07:00
Jinjing ffe96c8f06 fix: remove amp archive flag (#5036) 2026-06-09 11:55:09 -07:00
Jinwoo HongandOrca 9369708f6b Add English localization infrastructure (#4995)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 10:43:04 -07:00
4d6c291eff fix(windows): stop main-thread PowerShell ACL storm on env-store reads (#5011)
* fix(windows): stop main-thread PowerShell storm on env-store reads

Two changes fix the v1.4.52+ Windows performance regression (#4901 regression
against #4840) where 49 powershell.exe processes were spawned in 27 seconds
during load, saturating the Electron main thread and causing black terminals
and runtimeEnvironments:call timeouts.

Root cause: `readEnvironmentStore` calls `hardenExistingSecureFile` on every
read. The env-store parent directory's mtime churns constantly (every secure
write updates it), so the mtime-keyed idempotency cache never matched →
`bestEffortRestrictWindowsPath` (powershell, ~1-1.5s synchronous) fired on
every call. After #4901, the remote-runtime tab-sync loop reads the store
~2×/s, turning sporadic mtime misses into a continuous main-thread storm.

Fix 1 – path-cached directory hardening: add `hardenedDirectoryPathsThisProcess
(Set<string>)` that caches directory hardening by PATH for the process lifetime.
A directory's required ACL does not change when its mtime changes; only file
hardening retains the metadata-keyed cache so post-rename inode changes are
detected correctly.

Fix 2 – async ACL application: replace `execFileSync(powershell.exe, ...)` with
`execFile` (fire-and-forget). PowerShell cold-start is ~1-1.5s; the function is
already named `bestEffortRestrictWindowsPath` so async/optimistic caching is
correct. `applySecurePathRestriction` returns `true` optimistically on win32 so
the cache entry is written before the background process completes.

Tests: new regression tests verify the directory is hardened exactly once even
when its mtime changes between calls, that unchanged files are not re-hardened,
and that ACL application goes through async execFile (not execFileSync).

* fix(windows): apply credential-file ACL synchronously on write path

Follow-up rigor on the env-store PowerShell ACL storm fix (#5006). The
read-path storm fix (path-cached async directory hardening + async file
re-harden) is retained, but switching ALL ACL application to async opened a
narrow Windows-only security window: because writeFileSync({mode}) is a no-op
on Windows, writeSecureFile returned with the credential file still carrying
the parent directory's inherited (broader) ACL for the ~1-1.5s PowerShell
cold-start, affecting the e2ee keypair, device registry, and runtime env auth
store.

Fix: apply the credential FILE's ACL synchronously (execFileSync) on the
infrequent write path, before the atomic rename publishes it, and cache the
path as hardened only on confirmed success so a failed apply retries. Keep the
DIRECTORY hardening async + path-cached for the process lifetime (that is what
killed the #4901/#5006 main-thread storm). The read path's existing-file
re-harden stays async + metadata-cached (fires at most once per file, no storm).

Also:
- Document the dir-path cache process-lifetime known limitation (deleted+
  recreated dir not re-hardened until restart).
- Remove the redundant double dir-cache write in writeSecureFile.
- Add docs/windows-secure-file-acl-hardening.md describing the sync-file/
  async-dir model and a manual Windows e2e test plan (the cross-platform
  Playwright harness runs on Linux and cannot reach the PowerShell path).

Tests (src/shared/secure-file.test.ts, 13 passing): credential file hardened
synchronously while dir stays async (no async file-ACL window); failed sync
file-ACL apply is not cached and retries; dir hardened exactly once across many
writes despite mtime churn; no PowerShell spawned on non-win32.

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

* fix: keep POSIX secure directory hardening metadata-aware

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-09 01:47:29 -07:00
98d02bca47 fix: support windows ssh hosts (#5004)
* feat: add windows ssh relay base support

* feat: support windows ssh relay runtime services

* fix: default windows ssh pty cwd to user profile

* fix: support windows hosts over system ssh

* fix: preserve degraded windows relay native deps

* fix: gate windows shell args by relay platform

* fix: preserve windows relay fallback pipes

* test: align windows native deps relay fixture

* fix: build valid windows install lock command

* fix: address windows SSH relay review findings

Resolve correctness, efficiency, and reuse issues found reviewing the
Windows SSH native-host support:

- GC liveness on Windows now probes the actual named pipe (via node
  net.connect against markers + deterministic candidates) instead of
  substring-matching Win32_Process command lines, which could remove a
  live relay dir. Reports ALIVE conservatively only when there is no
  liveness signal at all (no markers and no seed pipes).
- Resolve the remote node path once per deploy and thread it through
  install/repair/launch instead of re-resolving 3-7x.
- Replace the 200ms node -e poll loop with a single long-lived remote
  wait process during Windows relay startup.
- Skip the no-op executable command on Windows in uploadRelay.
- Make the Windows fallback pipe name deterministic and recoverable
  (drop the global counter), with an extra reconnect attempt.
- Normalize the prepended node bin dir to backslashes on Windows PATH.
- Batch the system-SSH Windows directory upload into a single streamed
  JSON package instead of one ssh process per file.
- Extract relay endpoint/marker helpers into ssh-relay-endpoints.ts and
  consolidate the PowerShell EncodedCommand encoding into the shared
  powershell-command-encoding module.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Support cancellation and timeouts in Windows port scanning

- Propagate the request AbortSignal and a 5-second timeout to both
  PowerShell and netstat child processes during Windows port scanning.
- Avoid spawning the netstat fallback process if the port scan has
  already been aborted.
- Wrap the .NET OSArchitecture check in a try/catch block during SSH
  Windows platform detection to robustly fall back to environment
  variables if needed.

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-09 01:17:34 -07:00
Jinwoo HongandOrca 00f3849669 Use quick command labels for new tab titles (#4933)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 19:32:34 -07:00
Neil edadb1d7b7 Allow Linux terminal auto WebGL on safe renderers 2026-06-08 18:28:52 -07:00
Jinjing 19392cc066 Add emulator keyboard capture, edge gestures, and stream cleanup (#4927) 2026-06-08 18:10:16 -07:00
Brennan BensonandOrca 12340ee525 Surface branch auto-name failures with detailed CLI errors (#4906)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:55:54 -07:00
Jinwoo HongandOrca 04205acd76 Graduate compact worktree card setting (#4924)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:37:11 -07:00
Brennan BensonandOrca cd4ca13080 feat: make status bar empty usage CTA dismissible (#4898)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 15:47:29 -07:00
Brennan BensonandOrca 0aad9f8d03 Point browser tour 'Stay logged in' step at the visible Import button (#4902)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 15:22:26 -07:00
2338c42ef9 fix(ssh): sync ~/.ssh/config on import and Manage open (#4899)
* fix(ssh): sync ~/.ssh/config on import and Manage open

importFromSshConfig only inserted unknown hosts and never updated an
existing target, so a rotated port (or any changed config field) was
silently ignored on re-import. Make it an upsert: config-sourced targets
are refreshed in place, genuinely new hosts are inserted, and the SSH
Manage pane auto-syncs when it opens so changes appear without a manual
Import click.

A new optional SshTarget.source ('ssh-config' | 'manual') protects
user-created and user-edited targets from being overwritten by sync —
editing a target in the UI detaches it from config-sync. Unchanged
targets are skipped so a repeat sync performs no disk write. Editing a
target now also carries cleared optional fields (identity file, proxy
command, jump host) so removing a config-derived value actually deletes
it instead of silently keeping the stale value through the partial merge.

Resolves item #1 of #4684 (item #2 was fixed in #4860).

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

* fix(ssh): preserve legacy manual targets during config sync

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

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-08 18:15:55 -04:00
JinjingandOrca 006a4ef3a5 Customizable Source Control AI action recipes with per-action agent and command templates (#4868)
* WIP: Changes before auto-review fixes

* Customize Source Control AI action recipes

- Add per-action CLI arguments for generation and launch flows so saved
  recipes can select model flags without putting prompts in argv.
- Share the text-generation dialog between commit messages and hosted-review
  details, with first-run defaults and repo/global recipe support.
- Launch fix-check agents directly from saved recipes and harden prompt/template
  handling for invalid args, blank prompts, and inherited variables.

* Allow custom commands for source control action recipes

- Let text action recipes save and resolve the custom-command sentinel
- Add settings UI for custom command recipes and preserve per-action defaults
- Split large source-control dialogs and direct launch helpers into focused modules
- Keep launch actions from treating custom text agents as runnable TUI agents

* Add per-repo Source Control AI enablement, custom command, and save-targ

- Repo overrides now support `enabled` and `customAgentCommand`, letting
  repositories opt in/out of Source Control AI independently and supply a
  repo-scoped custom command that takes precedence over the global one.
- Recipe-save dialogs gained a save-target selector ("Don't save / Save for
  this repo / Save as global default") replacing the old boolean checkbox,
  routing saves through the new `saveSourceControlActionRecipe` helper in
  `source-control-ai-recipe-save.ts`.
- `normalizeRepoSourceControlAiOverrides` now returns `undefined` for empty
  objects and passes the `null` sentinel through the IPC/RPC layer so the
  persistence layer can clear repo overrides cleanly.
- `resolveSourceControlLaunchPlatform` resolves the correct shell platform
  for SSH and WSL worktrees so agent launch commands are built correctly.
- Settings UI gained `RepositorySourceControlAiEnablement` and
  `RepositorySourceControlAiCustomCommand` rows; draft/label logic was
  extracted into focused modules to stay within lint line limits.

* Extract action recipe defaults into own component and use id-prefixed wo

- Move action recipe draft state and UI out of CommitMessageAiPane into SourceControlAiActionRecipeDefaults and source-control-ai-action-recipe-draft.ts to respect the max-lines lint rule
- Use toRuntimeWorktreeSelector() across all runtime git RPC calls so the runtime can resolve worktrees by ID rather than path
- Fix SSH launch platform resolution to use the repo's connection when the newly created worktree isn't hydrated yet
- Add edit and delete handlers for PR conversation comments with confirmation dialog
- Use text-status-success design token instead of hardcoded text-emerald-500

* add more search keyword

* Rename "Enable Source Control AI defaults" to "Show Source Control AI ac

* fix test

* Remove unused imports and variable assignment in launch-work-item-direct

* Fix test mocks to use `mocks.store` instead of `storeState.value` for di

* Extract Source Control AI logic into focused modules with fix-checks dia

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-08 14:08:35 -07:00
Neil e5fe0f14d1 Use work item titles for create-from workspace names 2026-06-08 13:36:15 -07:00