3524 Commits
Author SHA1 Message Date
Jinwoo HongandOrca b07cfae966 Fix task page labels after language changes (#5086)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 09:10:37 -07:00
Jinjing baa817aa5c 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.
2026-06-10 01:37:50 -07:00
Jinjing 8bc15e1439 fix: address review findings (#5088) 2026-06-10 01:22:11 -07:00
Jinjing 0ad5add6f0 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'.
2026-06-10 01:19:34 -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
7afe7bb7ec 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 <noreply@anthropic.com>

* Add JSDoc docstrings to satisfy CodeRabbit docstring coverage check

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Test hosted contextual tour overlay positioning

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-09 22:55:26 -07:00
Jinwoo HongandOrca 41adf5f15b Fix source control branch compare base (#5074)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 00:27:01 -04:00
Jinwoo HongandOrca a26a4e4894 Suspend floating workspace terminal WebGL while the panel is closed (#5073)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 20:57:43 -07:00
Jinwoo HongandOrca e98febcdbc Fix stale terminal daemon spawn health (#5064)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 20:22:39 -07:00
Jinwoo HongandOrca 1cbc40b2aa Recover floating workspace terminal WebGL atlas on reopen (#5069)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 20:19:07 -07:00
Jinwoo Hong ad66692e7c fix(i18n): stop visible placeholders in Create PR and related UI (#5063) 2026-06-09 18:13:45 -07:00
Brennan Benson 6d2646df1e Show full details for child worktree cards (#5056) 2026-06-09 17:12:47 -07:00
NeilandOrca cc12385ccd Replace pasted work-item URLs with title-derived workspace names (#5059)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 16:58:07 -07:00
Brennan Benson 0f8ec54c28 Fix worktree card border-radius for multi-selected state (#5058) 2026-06-09 16:51:11 -07:00
NeilandOrca 25e0877b23 Re-enable WebGL for remote-runtime terminals (#5048)
PR #4946 forced terminalGpuAcceleration to 'off' whenever a remote
runtime environment is active, as a conservative workaround alongside
the real fixes (CSS anchor-name encoding and rebuilding the WebGL
renderer after replay bytes parse). That left every remote-runtime
terminal on the slower DOM renderer even though the post-replay
rebuildPaneWebgl already covers the snapshot-after-attach race.

Remove the forced-off resolver so remote-runtime panes honor the user
GPU setting again. The snapshot path (onSnapshot -> processData with
replayingBufferedData -> onReplayData -> rebuildPaneWebgl after parse)
keeps the glyph atlas in sync, and attachWebgl re-checks all guards
(gpuRenderingEnabled, deferred attachment, context loss) on rebuild.

Co-authored-by: Orca <help@stably.ai>
2026-06-09 19:47:25 -04:00
Brennan BensonandOrca f634f81b0e Fix shortcut chip floating right in Cmd-J palette tip on Windows/Linux (#4921)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 16:44:34 -07:00
Jinjing dd70368caa fix: address review findings (#5055) 2026-06-09 16:15:05 -07:00
Jinjing 3f39912a9a Preserve floating workspace state after restart (#5047)
* Preserve floating workspace state during restart purge

* rm doc
2026-06-09 16:03:20 -07:00
Brennan BensonandOrca 442c16a357 Add Project modal: roving keyboard selection (#5052)
* Make Add Project highlight a roving keyboard selection

The Add Project modal previously rendered Browse folder as a permanently
filled "primary" card with a static ⏎ chip. Turn that white fill + ⏎ chip
into a roving selection indicator driven by keyboard focus: Browse starts
selected (it is autofocused on open), and Tab or ↑/↓ move the highlight —
and the ⏎ chip — to whichever action is focused, so Enter's target is always
the highlighted row.

Also flatten the unselected Browse card's surface to bg-background so it
matches the secondary rows instead of showing the outline variant's lighter
tinted/shadowed surface.

ShortcutKeyCombo gains an optional keyCapClassName so the ⏎ chip can tint
itself for the filled surface.

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

* Drop focus ring on selected Browse card so it stays borderless

The primary Browse card uses the Button component, whose base styles always
draw a focus-visible border + ring. Because Browse is autofocused-and-selected
on open, that ring rendered as a border on only the top card, unlike the
filled secondary rows. Suppress the ring on the selected state (the fill + ⏎
chip already indicate focus, since focus drives selection) and add a
transparent border to hold the box size steady across the outline↔default swap.

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

* Fix add project action selection accessibility

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

* Refine add project action outlines

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-09 16:03:01 -07:00
Jinwoo HongandOrca de743891fe Allow Claude account changes with live sessions (#5054)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 16:02:52 -07:00
NeilandOrca d7f44f48e4 Restore slim terminal scrollbar (xterm width: 7) (#5051)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 16:02:35 -07:00
Jinwoo Hong d09a7fa28b Add Simplified Chinese, Korean, and Japanese UI localization (#5046) 2026-06-09 15:59:17 -07:00
Jinwoo HongandOrca 7d666fafab Fix terminal read for blank TUI tails (#5050)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 15:53:39 -07:00
Jinwoo HongandOrca 9c199a5b85 Fix status bar usage separator entity (#5053)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 15:47:15 -07:00
Jinwoo HongandOrca 280db4a1a6 Resume agents after PTY cold restore (#5045)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 14:30:49 -07:00
Jinwoo HongandOrca 7ed829ee67 Recover corrupted terminal WebGL atlases (#5042)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 13:52:58 -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 f321ad50fe fix: address review findings (#5044) 2026-06-09 13:44:20 -07:00
Jinwoo HongandOrca a04e85c2d2 fix(browser): hide zoom percent after feedback (#5043)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 13:43:56 -07:00
Jinjing 0ca2cb49ab Use scrollable hover cards for source control variable previews (#5029)
Replace the variable chip Tooltips with HoverCards to allow scrolling
through long prompt previews (such as the base prompt template).

* Pass action-specific base prompt previews (commit, PR, branch name)
  into the text generation dialogs to populate the variable chips.
* Style the hover cards to support vertical scrolling with a sleek
  scrollbar and update theme colors to match design guidelines.
* Add unit tests for the variable chips and dialog form behavior.
2026-06-09 13:38:16 -07:00
Jinwoo Hong c043939bf8 Fix project action menu click handling (#5041) 2026-06-09 12:55:17 -07:00
Brennan BensonandOrca 909128526c Refine stale-local-main toast: de-squish layout and clearer copy (#4930)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 12:50:14 -07:00
Jinjing b7a4ece2a6 fix: address review findings (#5040) 2026-06-09 12:18:18 -07:00
5c31930e0e perf: speed up desktop startup (#4618)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-06-09 12:15:04 -07:00
Jinwoo HongandOrca 28fe76f696 Fix desktop terminal restore after mobile fit (#5039)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 12:11:48 -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
Jinjing 39a7e057f0 Fix titlebar gap when sidebar is open but no worktree is active (#5030)
When on full-page views (like Tasks or Landing) with an open sidebar
but no active worktree, mirror the split-column titlebar layout.
This positions the left titlebar controls directly above the sidebar,
avoiding a layout gap and ensuring consistent visual alignment.
2026-06-09 10:06:52 -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
Neil 8ec5d599d0 Always open workspace composer before projects (#4991) 2026-06-09 00:27:39 -07:00
Jinjing 3411a75d96 Route GitHub work item queries through active runtime environment (#5000)
- Use the active runtime environment RPC for fetching, paging, and
  counting work items when available, falling back to local IPC.
- Scope in-flight work item request keys to specific environment targets
  to avoid incorrect deduplication during runtime transitions.
- Discard and skip writing work item responses to cache if the active
  runtime environment changed while the request was in flight.
2026-06-09 00:13:41 -07:00
Jinjing 27889edc01 Move worktree PR/MR unlink action behind a dropdown menu (#4998)
Keep the worktree details hover card visible while the review actions
dropdown is open. This change prevents the hover card from unmounting
when interacting with the portaled dropdown items, and adds support
for unlinking GitLab MRs with appropriate terminology.
2026-06-08 23:21:21 -07:00
Jinjing 7d353523d1 Add remote SSH file download (#4957)
* Add remote SSH file download

Implement the remote file download flow described in docs/remote-file-download.md, including main/preload IPC wiring, SSH provider support, file explorer UI actions, and tests.

* Add open action to download toast

* rm design doc
2026-06-08 23:12:01 -07:00
Jinwoo HongandOrca 400f3d7eaa Fix Linear issue reference links in descriptions (#4955)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 21:59:29 -07:00
Neil 351e4508de Clamp right sidebar render width (#4948) 2026-06-08 21:52:56 -07:00
Jinjing bd0533cfe5 Fix active agent detection in split-pane layouts and support early hints (#4949)
* Detect active agents from title/launch hints before hooks report

* Fix active agent detection in split-pane layouts with lone background ti

* Probe runtime for manually started agents during note-send detection

- Query runtime via `terminal.isRunningAgent` to detect active agents
  before titles or status hooks have reported them.
- Extract active-agent-target resolution utilities and state selectors
  to a dedicated `active-agent-note-target.ts` file.
2026-06-08 21:52:19 -07:00
Jinwoo HongandOrca 699bcf6478 Fix remote runtime terminal rendering (#4946)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 21:20:25 -07:00
Neil 85a5dc0a06 Fix create worktree focus ring clipping (#4940) 2026-06-08 20:31:40 -07:00
Jinjing fc850a3f4e Improve language in local-main sync suggestion toast (#4938) 2026-06-08 20:16:04 -07:00