Commit Graph

414 Commits

Author SHA1 Message Date
Lesley Murfin 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
Jinjing 2fd4f4e13e Update README feature showcase hero 2026-06-09 00:13:44 -07:00
Jinjing 03c2532ae7 Update README demo gif 2026-06-08 23:08:34 -07:00
Jinjing 3d1b6391d2 Update UI style guide
Push local docs/STYLEGUIDE.md content to main.
2026-06-08 20:25:32 -07:00
Jinwoo Hong 04205acd76
Graduate compact worktree card setting (#4924)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 17:37:11 -07:00
Jinjing 263c4f9bd2
fix: address review findings (#4865) 2026-06-07 22:17:52 -07:00
Jinwoo Hong bed394ca11
Send OpenCode source-control prompts over stdin (#4859)
Co-authored-by: Orca <help@stably.ai>
2026-06-07 21:00:20 -07:00
Jinwoo Hong 3ef63c972a
Persist agent session metadata for workspace resume (#4706)
Co-authored-by: Orca <help@stably.ai>
2026-06-07 19:41:25 -07:00
Jinwoo Hong 87ca65d395
Update mobile download links to 0.0.12
Point Android download links and related fixtures at the published mobile-v0.0.12 release.
2026-06-04 16:11:51 -04:00
Jinwoo Hong c4df8628b8
Add Droid orchestration routing (#4624)
Co-authored-by: Orca <help@stably.ai>
2026-06-04 10:00:11 -07:00
Brennan Benson 7b6e8e0ced
Remove final code onboarding step (#4524)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 23:57:53 -07:00
Jinwoo Hong 089fbd6951
Improve README mobile companion showcase (#4609)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 18:45:57 -07:00
Brennan Benson 5142a24536
Simplify project add handoff (#4530)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 16:50:35 -07:00
Brennan Benson 1e956a0b24
Show install status for AI capabilities (#4483)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 15:42:30 -07:00
Jinjing 990b4cf28d
fix: improve floating surface visibility (#4466) 2026-06-02 01:37:35 -07:00
Jinwoo Hong 135c69d3e8
Add Linear issue load more (#4437)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 23:35:47 -07:00
Brennan Benson 38f12e8df4
Track parallel work education telemetry (#4449)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 23:29:28 -07:00
Brennan Benson d4a4a2aee4
Remove covered onboarding steps (#4445)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 23:00:26 -07:00
Jinwoo Hong 8c6dae3345
Update mobile 0.0.11 release links (#4440)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 21:42:38 -07:00
Brennan Benson 5b1f297078
Add contextual feature tours (#2734)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 21:20:15 -07:00
Neil 1bd6b0e926
Handle ANSI redraw controls in terminal previews (#4418) 2026-06-01 16:21:11 -07:00
Neil 9769b85ae7
Skip visit writes for active worktree reselect (#4417) 2026-06-01 16:06:21 -07:00
Neil 36384f17f4
Avoid no-op worktree activation fanout (#4416) 2026-06-01 15:56:01 -07:00
Neil d044a2be9e
Wait for browser registration after hidden wake (#4413) 2026-06-01 15:42:30 -07:00
Neil 163cf8da6f
Make parked browser tabs paint before automation (#4411) 2026-06-01 15:27:36 -07:00
Neil f7fb6ef686
Expose memory diagnostics through CLI (#4408) 2026-06-01 15:14:15 -07:00
Neil df9a254393
Heal stale generated Orca CLI launchers
Detect generated Orca Unix launcher files as stale CLI registrations and replace them during install, while keeping arbitrary regular files protected as conflicts. This removes the stale /usr/local/bin/orca blocker found during memory profiling.
2026-06-01 14:56:27 -07:00
Neil 9c37bab97a
Reduce hidden browser and terminal memory churn
Reduce hidden browser webview retention, correct Resource Usage app memory attribution, and normalize terminal TUI redraw previews. Includes docs/renderer-memory-profile-2026-06-01.md with the profiling evidence.
2026-06-01 14:16:18 -07:00
Jinwoo Hong f888acdb65
Revert Codex launch homes to shared runtime (#4400)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 12:36:16 -07:00
Jinwoo Hong 57ac2ef08e
Hot-swap Codex homes via active pointer
Route Codex terminal launches through stable active CODEX_HOME pointers for host and WSL launch homes, with account-switch repointing and validated Windows/WSL behavior.
2026-06-01 03:09:11 -04:00
Jinjing 2d52a6072e
Update localized mobile APK links
Point localized README Android links at the verified mobile-v0.0.10 APK asset.
2026-05-31 17:10:10 -07:00
Jinwoo Hong ac811ffb06
Add image viewer pinch zoom (#3531)
Co-authored-by: Orca <help@stably.ai>
2026-05-31 14:07:15 -07:00
Jinwoo Hong ec01ffb986
Preserve Codex runtime config preferences (#3944) 2026-05-31 16:40:39 -04:00
Neil c0eb15b311
chore: remove tracked audit ledgers (#4031) 2026-05-31 01:52:33 -07:00
Neil b4dba9af73
fix: detach macos resolver probe listeners
Detach scutil stream and child process listeners when the macOS resolver probe settles, with listener-count regression coverage. Risk: low.
2026-05-31 01:48:30 -07:00
Neil 41cbdb1d1d
fix: clear completed PR request generations 2026-05-31 01:35:21 -07:00
Jinjing 60ff88fd6c
fix: stabilize orchestration RPC tests (#3949) 2026-05-30 14:35:59 -07:00
Jinjing d69c288e94
Improve automation schedule UI (#3936) 2026-05-30 13:49:28 -07:00
Jinjing 28e2ce929f
Improve SSH config target handling (#3899) 2026-05-30 13:10:39 -07:00
Neil ddbb6a1e7d
Update oxlint and oxfmt 2026-05-30 13:09:17 -07:00
Jinjing 8484830b9e
Improve Linear scope selection (#3850) 2026-05-30 12:55:13 -07:00
Jinjing e59ddd59a7
fix: persist floating terminal panel bounds (#3828)
Add bounds normalization and persistence for the floating terminal panel, covering default placement, drag/resize persistence, maximize restore behavior, and viewport clamping.

Design: docs/floating-terminal-panel-position-persistence.md
2026-05-30 11:59:19 -07:00
Rajvardhan Patil a00c96ff03
Add OpenClaude agent support
Adds OpenClaude as a distinct CLI agent across detection, launch, settings, status, hooks, orchestration, telemetry identifiers, notifications, and README badges. Installs OpenClaude hooks under its own ~/.openclaude config root, handles StopFailure API/model-error events so statuses clear correctly, and keeps OpenClaude tab/status icons distinct from Claude.
2026-05-30 02:46:28 -07:00
Jinwoo Hong fba8297e40
Fix remote paste and workspace activity (#3521)
Co-authored-by: Orca <help@stably.ai>
2026-05-30 03:35:56 -04:00
Neil 80a2b6195b
docs: remove local memory leak audit tracker (#3381) 2026-05-29 16:53:21 -07:00
Neil 22bc5fdc07
Remove tracked React perf audit ledger (#3379) 2026-05-29 16:50:44 -07:00
Neil 431b336f1b
Document project column preference audit (#3375) 2026-05-29 16:39:10 -07:00
Neil 0cc3bd77bc
docs: update final memory leak comb after rebase (#3373) 2026-05-29 16:34:08 -07:00
Neil a99c376f3b
Document upstream feature tip effect audit (#3372) 2026-05-29 16:32:21 -07:00
Neil a1496d54d4
Document upstream React effect baseline (#3369) 2026-05-29 16:25:10 -07:00
Neil aeadf5a035
Document activity portal subscription audit (#3368) 2026-05-29 16:20:02 -07:00
Neil 399ad3e42d
Document workspace board interaction audit (#3366) 2026-05-29 16:13:49 -07:00
Neil 5ec0e9ad5b
Document Space page interaction audit (#3362) 2026-05-29 16:05:24 -07:00
Neil f150310561
Document contextual copy cleanup audit (#3357) 2026-05-29 15:58:04 -07:00
Neil c7cd858503
Document diff comment card resize audit (#3355) 2026-05-29 15:51:55 -07:00
Neil 498a824fa9
Document SSH passphrase focus audit (#3353) 2026-05-29 15:45:03 -07:00
Neil 2da2a86c3f
Document font autocomplete effect audit (#3350) 2026-05-29 15:32:57 -07:00
Neil 52344fc7c2
Document file explorer inline focus audit (#3348) 2026-05-29 15:26:37 -07:00
Neil c5868af126
Document terminal search effect audit (#3345) 2026-05-29 15:18:43 -07:00
Neil 7751af26c4
Document status bar account usage perf PR (#3342) 2026-05-29 15:11:01 -07:00
Neil 5dfc0454ed
Document markdown annotation focus perf PR (#3339) 2026-05-29 15:04:14 -07:00
Neil 5bb8b106a0
Document diff comment popover focus perf PR (#3336) 2026-05-29 14:58:17 -07:00
Neil 5a55d5828e
Document file search focus perf fix (#3331) 2026-05-29 14:53:21 -07:00
Neil 6cfdb77b56
Document editor header rename focus perf PR (#3329) 2026-05-29 14:44:10 -07:00
Neil 22266895fa
Document rich markdown menu selection perf PR (#3327) 2026-05-29 14:37:14 -07:00
Neil bb5a435ae8
Record markdown preview search focus audit PR (#3323) 2026-05-29 14:25:32 -07:00
Neil e1c3fb74c8
Record image viewer preview audit PR (#3319) 2026-05-29 14:19:00 -07:00
Neil a8d2376703
Record markdown link bubble focus audit PR (#3317) 2026-05-29 14:09:33 -07:00
Neil edc839ff4a
Record terminal tab rename focus audit PR (#3315) 2026-05-29 14:02:00 -07:00
Neil 9c0ee0a2d6
Record tab entry selection reset PR (#3312) 2026-05-29 13:44:33 -07:00
Neil f99492927c
Record upstream React effect count drift (#3309) 2026-05-29 13:35:35 -07:00
Neil ca15aeb466
docs: record final memory leak audit comb (#3308) 2026-05-29 13:31:20 -07:00
Neil d4b67da8b6
Record editor tab rename focus PR (#3304) 2026-05-29 13:22:28 -07:00
Jinwoo Hong 606eef5839
Add direct URL and file entry to tab menu (#3026)
Co-authored-by: Orca <help@stably.ai>
2026-05-29 13:14:57 -07:00
Neil 21556f90ac
Record worktree metadata textarea PR (#3301) 2026-05-29 13:10:42 -07:00
Neil c966afbe64
Record worktree title editing notification PR (#3299) 2026-05-29 13:02:36 -07:00
Neil a51145c639
Record workspace title rename focus PR (#3297) 2026-05-29 12:56:00 -07:00
Neil bd0fb54fbc
Record nested repo checkbox PR (#3295) 2026-05-29 12:46:32 -07:00
Brennan Benson 423a6d11e3
Track agent prompt sent from agent hooks (#3033)
Co-authored-by: Orca <help@stably.ai>
2026-05-29 12:45:34 -07:00
Neil 17c27376d4
Record GitLab task filter PR (#3293) 2026-05-29 12:38:07 -07:00
Neil a25ad06ceb
Record PDF find reset PR (#3291) 2026-05-29 12:32:46 -07:00
Neil ed714e3ed1
Record reduced motion hook PR (#3288) 2026-05-29 12:24:34 -07:00
Neil d79a37839f
Record GitHub link copy timer PR (#3286) 2026-05-29 12:13:33 -07:00
Neil e73f7ac90e
Record feature wall session depth PR (#3284) 2026-05-29 12:01:50 -07:00
Neil f610339485
Record feature wall skill state PR (#3282) 2026-05-29 11:55:41 -07:00
Neil cb4a71456a
Record editor copy path timer PR (#3278) 2026-05-29 11:34:33 -07:00
Neil f26fb82652
Record browser find React performance PR (#3276) 2026-05-29 11:31:04 -07:00
Neil 8f3e8fc5c6
Update React performance audit after feature-wall cleanup (#3274) 2026-05-29 11:26:47 -07:00
Neil fdb3d0a247
Update React performance audit after terminal cleanup (#3272) 2026-05-29 11:21:52 -07:00
Neil aa3a05c308
Document floating workspace bounds audit (#3270) 2026-05-29 11:13:33 -07:00
Neil 8eb586db57
Document sidebar SSH reconnect prompt audit (#3268) 2026-05-29 11:07:55 -07:00
Neil d9a4adb4d9
Document mobile task agent selection audit (#3263) 2026-05-29 10:59:58 -07:00
Neil 2543dc5c05
Document reviewer request sync audit (#3260) 2026-05-29 10:51:29 -07:00
Neil e5afea9a5e
Document DiffViewer autoscroll cleanup (#3258) 2026-05-29 10:42:01 -07:00
Neil 87c918ef57
Document GitHub assignee reset cleanup (#3256) 2026-05-29 10:36:30 -07:00
Neil c7df26445f
Document mobile tasks client ref cleanup (#3254) 2026-05-29 10:29:53 -07:00
Neil c0411ac4d2
Document mobile session ref cleanup (#3251) 2026-05-29 10:25:27 -07:00
Neil 54cb54750d
Document mobile home client ref cleanup (#3249) 2026-05-29 10:19:22 -07:00
Neil 0460e1f12c
Document mobile accounts ref cleanup (#3245) 2026-05-29 10:15:15 -07:00
Neil 530b80ffed
Document mobile host route action cleanup (#3243) 2026-05-29 10:09:17 -07:00
Neil 7564262d99
Document mobile pair-confirm route cleanup (#3241) 2026-05-29 10:01:46 -07:00
Neil c1171ac321
Document mobile new-worktree agent cleanup (#3239) 2026-05-29 09:53:53 -07:00
Neil b9c06a77be
Document mobile dictation ref cleanup (#3236) 2026-05-29 09:43:19 -07:00
Neil 013bf0422a
Document mobile browser ref cleanup (#3231) 2026-05-29 09:36:14 -07:00
Neil 475d7fd7f6
Document mobile browser address cleanup (#3229) 2026-05-29 09:30:34 -07:00
Neil 0669a7aeff
Document bottom drawer mount cleanup (#3227) 2026-05-29 09:24:02 -07:00
Neil 94e407d60d
Document mobile modal reset cleanup (#3225) 2026-05-29 09:16:56 -07:00
Neil 2a42625c50
Document App lazy modal cleanup (#3221) 2026-05-29 09:06:25 -07:00
Neil fb109cdfe1
Document combined diff copy timer cleanup (#3219) 2026-05-29 09:01:36 -07:00
Neil f7c32aa647
Document project dialog state cleanup (#3216) 2026-05-29 08:55:42 -07:00
Neil acf6b743e3
Document source selection reconcile cleanup (#3213) 2026-05-29 08:49:11 -07:00
Neil 0726bc2b88
Document diff comments copy timers cleanup (#3211) 2026-05-29 08:44:27 -07:00
Neil 5735c88b2d
Document diff comments clear cleanup (#3208) 2026-05-29 08:39:58 -07:00
Neil 56720ed7dd
Document commit failure dialog cleanup (#3204) 2026-05-29 08:32:30 -07:00
Neil b32e1b4a03
Document resource space ready cleanup (#3201) 2026-05-29 08:26:47 -07:00
Neil ae2387576e
Document onboarding settings hydration cleanup (#3199) 2026-05-29 08:20:29 -07:00
Neil 8cb02c76ba
Document workspace cleanup view cleanup (#3197) 2026-05-29 08:14:27 -07:00
Neil ffe1213171
Document smart workspace command value cleanup (#3194) 2026-05-29 08:07:43 -07:00
Neil fc1c7bdab1
Document feature wall persisted reset cleanup (#3189) 2026-05-29 08:00:53 -07:00
Neil 5acbe86aa4
Document project table cache cleanup (#3187) 2026-05-29 07:53:51 -07:00
Neil 2de8c2b14f
Document create PR submit reset cleanup (#3185) 2026-05-29 07:48:45 -07:00
Neil a64abdc6c6
Document mobile page stage cleanup (#3181) 2026-05-29 07:44:37 -07:00
Neil 6c553ef4b3
Document diagnostics bundle ref cleanup (#3177) 2026-05-29 07:38:43 -07:00
Neil 3c910b8665
Document mobile driver overlay cleanup (#3175) 2026-05-29 07:30:32 -07:00
Neil dcb703c9aa
Document workspace space state cleanup (#3169) 2026-05-29 07:23:30 -07:00
Neil 8f37c7d4ad
Document sidebar selection pruning cleanup (#3167) 2026-05-29 07:16:25 -07:00
Neil c6ecd4b875
Document worktree palette selection cleanup (#3165) 2026-05-29 07:10:59 -07:00
Neil 21a482af58
Document sidebar live width cleanup (#3162) 2026-05-29 07:04:12 -07:00
Neil a4808f22c5
Document SSH reset dialog cleanup (#3158) 2026-05-29 06:56:41 -07:00
Neil 011cc840fa
Document integrations status cleanup (#3155) 2026-05-29 06:49:55 -07:00
Neil fc765a4d14
Document mobile QR polling cleanup (#3153) 2026-05-29 06:44:51 -07:00
Neil 9fdd865bb2
Document add repo clone default cleanup (#3151) 2026-05-29 06:38:58 -07:00
Neil 87597a1543
Document quick agent selection cleanup (#3149) 2026-05-29 06:34:10 -07:00
Neil d676507f27
Document quick commands intent cleanup (#3147) 2026-05-29 06:25:58 -07:00
Neil 8b4a11831b
Document repo source control AI draft cleanup (#3145) 2026-05-29 06:22:40 -07:00
Neil 8e425069b7
Document notification volume draft cleanup (#3143) 2026-05-29 06:17:00 -07:00
Neil 1c73fb307f
Document commit AI draft cleanup (#3141) 2026-05-29 06:13:14 -07:00
Neil f8600e50f1
Document general settings draft cleanup (#3139) 2026-05-29 06:08:30 -07:00
Neil cc474682ba
Document browser settings draft cleanup (#3137) 2026-05-29 06:03:47 -07:00
Neil 031b9adea9
Document delete dialog effect cleanup (#3135) 2026-05-29 06:00:16 -07:00
Neil 043f0c7918
Document create-from branch search cleanup (#3133) 2026-05-29 05:53:10 -07:00
Neil 4bd40d9281
Document Linear text draft effect cleanup (#3131) 2026-05-29 05:48:24 -07:00
Neil 01414a298b
Document settings mounted section effect cleanup (#3129) 2026-05-29 05:41:15 -07:00
Neil fcce9a1779
Document activity selection effect cleanup (#3127) 2026-05-29 05:37:17 -07:00
Neil de58d11dee
Document GitLab comment draft effect cleanup (#3125) 2026-05-29 05:31:25 -07:00
Neil eaf26490dc
Remove onboarding detour reset effect (#3122)
* Remove onboarding detour reset effect

* Document onboarding detour effect cleanup
2026-05-29 05:24:45 -07:00
Neil 61f21e427d
Document combined diff state effect cleanup (#3121) 2026-05-29 05:19:36 -07:00
Neil f82e2c0244
Record pet overlay size cleanup in audit (#3119) 2026-05-29 05:12:40 -07:00
Neil b170c146e9
Record GitHub project column cleanup in audit (#3117) 2026-05-29 05:08:31 -07:00
Neil 12c6069065
Record GitHub reviewer picker cleanup in audit (#3115) 2026-05-29 05:02:53 -07:00