Commit Graph

201 Commits

Author SHA1 Message Date
Jinjing 2899a60872
Durable persistence for commit message generation across worktree switches (#5243)
* Persist commit message generation state across worktree switches

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

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

* Route cancellations to starting runtime and prune stale worktree records

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

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

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

* Split oversized translated UI modules

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

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

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

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

Co-authored-by: Orca <help@stably.ai>
2026-06-11 20:17:15 -07:00
Jinwoo Hong 0b19195fd9
Remove startup PTY spawn health probe and guard daemon replacement with live-session check (#5230)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 19:00:44 -07:00
Brennan Benson 7414f17376
test: stabilize release e2e checks (#5212)
Co-authored-by: Orca <help@stably.ai>
2026-06-11 12:46:43 -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
Jinjing 215094ea14 Expose E2E store via build mode 2026-06-10 17:23:12 -07:00
Jinwoo Hong 36ab59d640
Reset WebGL glyph atlases globally to stop cross-terminal glyph corruption (#5122)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 13:41:05 -07:00
Jinwoo Hong 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 Hong 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
Neil 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
Jinwoo Hong 7ed829ee67
Recover corrupted terminal WebGL atlases (#5042)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 13:52:58 -07:00
Neil 4660a25f09
Gate releases on terminal rendering golden 2026-06-08 20:49:17 -07:00
Neil 1884b5c206
test(e2e): stabilize release-cut e2e failures (#4942)
* test(e2e): stabilize two flaky release-cut e2e specs

Fix two failing e2e tests from release-cut run 27171326222. All
changes are test-only — no application code is modified.

- artificial-opencode-terminal-load: widen MAX_RENDERER_SCHEDULER_
  QUEUED_CHARS from 2 MB to 3 MB. The scheduler is still enforcing
  backpressure (droppedBacklogCount must stay 0 and typing-latency
  budgets must still pass) — the 2 MB ceiling was too tight for the
  5-pane OpenCode pressure scenario on CI runners.

- source-control-discard-confirmation: click the dialog's confirm
  button instead of pressing Enter on the original row button. The
  dialog auto-focuses its own confirm button (see
  focusDiscardDialogConfirmButton), so pressing Enter on the row
  button just retriggered the open action and the dialog never
  closed within the assertion window.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* test(e2e): fix two flaky specs from release-cut run 27177379094

Fix the remaining e2e failures from the v1.4.52 release-cut run. All
changes are test-only.

- terminal-long-table-scroll-restore: replace mouse-wheel scroll loops
  with xterm scrollLines so tall wrapped tables can reach target rows on
  Linux CI. Share the helper via artificial-opencode-active-terminal-scroll.

- artificial-opencode-hidden-pressure: widen hidden restore latency budget
  to 1500ms. Typing-latency assertions still enforce responsiveness; the
  extra headroom absorbs parallel Electron worker jitter on CI runners.

---------

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
2026-06-08 20:30:05 -07:00
buf0-bot[bot] d43ce62412
fix: pr-bug-scan validated finding from #4741 (#4894)
* fix: address pr-bug-scan validated finding from #4741

Plain-Escape branch in onTerminalKeyDown now runs the three unread clears before its early return, so Escape dismisses attention again.

* E2E: test that plain Escape clears focused terminal tab attention

---------

Co-authored-by: orca-bug-scan-bot <orca-bug-scan-bot@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-06-08 19:45:48 -07:00
Neil edadb1d7b7
Allow Linux terminal auto WebGL on safe renderers 2026-06-08 18:28:52 -07:00
Jinwoo Hong 57c1e21330
Fix native Windows Codex cursor flicker (#4907) 2026-06-08 21:11:18 -04:00
Neil 51fd231a14 Keep auto WebGL for terminal table output 2026-06-08 15:16:37 -07:00
Neil 132e219b5d Restore auto GPU terminal rendering 2026-06-08 14:13:48 -07:00
Neil e5fe0f14d1 Use work item titles for create-from workspace names 2026-06-08 13:36:15 -07:00
Neil 1856d6b585
Add terminal rendering golden e2e gate (#4878) 2026-06-08 11:21:50 -07:00
Neil 3153356d87
Fix terminal table rendering after workspace restore (#4877)
* Stabilize terminal cursor rendering and typing checks

* Fix terminal table rendering after workspace restore

* Fix terminal table width underfit

* Tighten terminal renderer stabilization
2026-06-08 03:25:55 -07:00
Neil f15dcd928c
Stabilize OpenCode terminal rendering before release (#4850) 2026-06-08 01:00:29 -07:00
Jinwoo Hong 1b363b4d9c
Add mobile emulator (#4754)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 00:08:57 -07:00
Neil 102cbdbda2
Make terminal scroll pressure benchmark diagnose responsive paths (#4846)
* Instrument terminal scroll pressure attempts

* Trace terminal scroll input timing

* Reduce PTY renderer in-flight window

* Revert "Reduce PTY renderer in-flight window"

This reverts commit 86775aeb68968e88b98c3a4c1b710eed5b0833b3.

* Probe alternate scroll paths after slow wheel

* Gate scroll pressure on responsive terminal path

* Address scroll benchmark review cleanup
2026-06-07 18:16:53 -07:00
Jinwoo Hong 76cb846d68
Harden computer use runtime and CLI (#4705)
Co-authored-by: Orca <help@stably.ai>
2026-06-07 17:49:01 -07:00
Neil d9de84063b
Stabilize main for v1.4.51 release (#4841)
* test: target terminal viewport for scroll perf probe

* Revert "Make Smart New Tab launcher the default (remove experimental flag) (#4834)"

This reverts commit c32e2dc7cb.

* test: stabilize release e2e expectations

* test: stabilize release e2e gates

* test: make terminal scroll probe deterministic

* test: keep flaky scroll probe informational
2026-06-07 17:10:45 -07:00
Neil 7cf445778d
Slice synthetic OpenCode pane injection (#4827) 2026-06-07 13:19:48 -07:00
Neil f9e8616bb6
Scale hidden real PTY pressure benchmarks (#4812) 2026-06-07 11:01:02 -07:00
Neil d7aff06e10
Guard renderer backlog under PTY pressure (#4810) 2026-06-07 10:49:07 -07:00
Neil f6a576d09c
Measure renderer terminal backlog pressure (#4809) 2026-06-07 10:36:26 -07:00
Neil 7ac509ed62
Scale real PTY pressure benchmarks (#4808) 2026-06-07 10:18:39 -07:00
Neil 9c92e3d47b
Measure terminal scroll under PTY pressure (#4807) 2026-06-07 09:59:55 -07:00
Neil 6d4065cae5
Measure hidden PTY restore latency (#4806) 2026-06-07 09:49:03 -07:00
Neil 66a561e18b
Add hidden real PTY pressure benchmark (#4805) 2026-06-07 09:40:30 -07:00
Neil 3c38c973bc
Add active typing pressure regression benchmark (#4804) 2026-06-07 09:26:50 -07:00
Neil 16fde16e90
Track peak PTY renderer delivery pressure (#4800) 2026-06-07 09:14:30 -07:00
Neil 228da20e93
Annotate terminal perf with main PTY pressure (#4799)
Annotate terminal perf benchmark output with main PTY pressure counters.
2026-06-07 08:54:16 -07:00
Neil be4dc76b8a
Tighten OpenCode terminal latency budgets (#4796)
Tighten OpenCode terminal latency budgets and harden the artificial OpenCode prompt-script harness.
2026-06-07 08:28:15 -07:00
Neil 3d9eadf42a
Add cross-workspace OpenCode scale benchmarks (#4794) 2026-06-07 07:56:56 -07:00
Neil 8d78e0cf1e
Add OpenCode terminal scale benchmarks (#4793) 2026-06-07 07:41:02 -07:00
Neil e5f09ceacc
test: guard hidden terminal side effects (#4779) 2026-06-07 04:29:26 -07:00
Neil 8d1eefb1e1
test: add docker ssh relay perf guard (#4778) 2026-06-07 04:15:26 -07:00
Neil e180d137e9
test: guard hidden terminal renderer skips under load (#4767) 2026-06-07 00:58:33 -07:00
Neil 9db0985c7f
fix: restore hidden remote terminal output snapshots (#4759) 2026-06-06 23:37:05 -07:00
Neil 04ddafe100
Improve terminal responsiveness under many TUI redraws (#4744) 2026-06-06 02:14:51 -07:00
Jinwoo Hong edac541637
Fix Windows Codex terminal cursor rendering (#4669) 2026-06-04 20:54:22 -04:00
Brennan Benson 63ec0d2c1b
Add golden core flow E2E tests (#4615)
Co-authored-by: Orca <help@stably.ai>
2026-06-04 13:17:26 -07:00
Minsu Lee e31f65f54f
fix(settings): prevent IME composition cancellation in repository Display Name and Worktree Location inputs (#4632)
* fix(settings): prevent IME composition cancellation in repository Display Name and Worktree Location inputs

Controlled inputs bound directly to the zustand store caused IME
composition to be cancelled on every keystroke because React re-rendered
from the stale store value before the async IPC round-trip completed.
On slow typing this yielded bare jamo decomposition (가나다 → ㄱㅏㄴㅏㄷㅏ);
on fast typing characters were silently dropped.

Introduce RepoSettingsDraftInput, a wrapper that keeps keystrokes in
local draft state so the input is always synchronously controlled. The
store is still written on every keystroke in the background so the
sidebar stays live. Draft resets only when the active repo changes, so
async IPC echoes cannot clobber newer draft text.

Apply RepoSettingsDraftInput to both the Display Name and the Worktree
Location inputs (identical store-bound binding, same root cause).

Also link the Display Name Label to its input via htmlFor/id for a11y
and test-locator clarity.

Tests added:
- RepositoryPaneDraftInput.test.tsx: unit tests (happy-dom) — draft
  survives stale store re-render and stale IPC echo; resets on repo
  switch; persists on every keystroke.
- tests/e2e/settings-display-name-ime.spec.ts: Playwright e2e driving
  Blink's real IME pipeline via CDP Input.imeSetComposition /
  Input.insertText with an adaptive 2-set Korean IME emulator.
  Fails with 'ㄱㅏㄴㅏㄷㅏ' on the pre-fix code; passes on the fix.

* fix(settings): preserve external repo setting updates

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-04 16:11:56 -04:00