Commit Graph
5943 Commits
Author SHA1 Message Date
github-actions[bot] 8070e65778 release: v1.4.122-rc.3 v1.4.122-rc.3 2026-07-04 07:27:11 +00:00
Neil 0ebfc989cb Fix flaky terminal-rendering-golden repo-load race on macOS CI (#7330)
The release-blocking `terminal rendering golden mac` job was failing ~40%
of Cut Release runs with `Expected e2e repo to be loaded`, leaving the RC
stuck as a draft (publish-release depends on this job).

Root cause: the sharedPage fixture did a single-shot fetchRepos() + find()
+ throw. window.api.repos.add() fires a repos:changed echo that triggers a
concurrent fetchRepos() in the renderer; the store's reposFetchGeneration
guard then drops the fixture's own awaited fetch result, leaving `repos`
briefly stale, so find() returns undefined and throws. The repo lands a few
ms later (the failure screenshot's sidebar actually shows it).

Wrap the repo load in expect.poll (matching the seeded-worktree poll right
below it) so it retries fetchRepos until the repo lands, then runs the
idempotent updateRepo. Also harden the single-shot hasWebgl/cursorHidden
diagnostics reads in the golden spec: WebGL reattaches asynchronously after
a worktree switch, so poll those eventually-consistent fields until they
settle before the golden asserts. Regression detection is preserved: a real
WebGL/cursor regression times out the poll and still fails the test; the
geometry/wrap/overpaint golden checks stay single-shot.
2026-07-04 00:25:21 -07:00
Jinjing 0982882436 Exclude submodule worktree-only changes from Stage All action (#7298)
- Prevent the "Stage All" button from being enabled when only nested
  submodule worktree changes are present.
- Remove the disabled stage button on submodule worktree-only rows,
  replacing it with an explanatory tooltip.
- Fix WSL terminal environment assertion in daemon PTY tests to allow
  inherited agent-hook environment variables.
2026-07-04 00:21:55 -07:00
Jinjing 7c77ccab7d Fix notes send targets for manual agents (#7300)
* Fix notes send targets for manual agents

* Split agent title merging into manual and launch-agent paths

Separate the merging logic for terminal titles depending on whether the
tab has a launch agent or is a manually started CLI.

- Launch-agent tabs carry an owner bit, allowing their live titles to
  promote a stale status row on the same pane.
- Manually started agents have no owner bit, so they only ever add a
  row and must not override existing status evidence.
- Remove the temporary TitleHintAgentTarget type and the need to strip
  metadata when pushing targets.
2026-07-04 00:10:53 -07:00
Jinwoo Hong a074ed6182 Fix Windows ConPTY overlay after cold restore (#7310) 2026-07-03 23:24:24 -07:00
github-actions[bot] 7595baccef release: v1.4.122-rc.2 v1.4.122-rc.2 2026-07-04 06:21:22 +00:00
slashdevcorpseandJinwoo Hong 9fa1313179 Fix Windows native chat title fallback (#7313)
* fix: resolve title-only native chat agents

* test: cover native chat unsupported identity fallback

* fix: harden native chat agent fallback precedence

---------

Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
2026-07-03 23:02:12 -07:00
github-actions[bot] 19bb7df93a release: v1.4.122-rc.1 v1.4.122-rc.1 2026-07-04 05:49:42 +00:00
Neil bec4392d87 cleanup(main): defer serve-sim materialization, dedupe reload flags, guard gate validators (#7321)
Quality pass on main-process/build PRs merged 2026-07-03:

- ios-emulator-backend: resolve the serve-sim executable via a lazily-cached getter
  instead of eagerly in the constructor. The bridge is built before the main window
  is shown, so the one-time recursive copy + xattr subprocess (first launch after each
  version bump) no longer blocks macOS startup for a feature that may go unused (#7174).
- index: collapse the two near-identical `{webContentsId, until}` reload flags
  (expectedRendererReload / recoveryReloadInFlight) into one `createWebContentsTimedFlag`
  primitive; behavior preserved, including consume-on-read for the recovery reload (#7290).
- check-reliability-gates: coerce gate.commands/testFiles/platforms/providers with an
  `asArray` helper before `.includes`, so a hand-edited manifest with a missing/mistyped
  field reports a validation failure instead of throwing an uncaught TypeError; extract
  `hasCompleteRedGreenEvidence` for the duplicated status check (#7295).
- claude-pty: derive FABLE_WEEKLY_LABEL_RE from WEEKLY_RE.source so a future weekly-
  wording change stays in one place and can't reopen the parsing gap it just closed.
- macos-tcc-login-shell: trim the 30-line flag-by-flag JSDoc to the two non-obvious whys
  (TCC identity, env(1) SHELL re-assertion) per the repo comment guidance (#7003).

Typecheck, oxlint, oxfmt, `check:reliability-gates`, and touched unit suites all pass.
2026-07-03 22:32:11 -07:00
Neil 3fdeec7c2f cleanup(renderer): drop dead code, dedupe helpers, skip wasted work, fix garbled comments (#7322)
Quality pass on renderer/shared PRs merged 2026-07-03:

- WorktreeTitleInlineRename: skip the truncation measure + ResizeObserver in `wrapTitle`
  mode, where wrapped titles never truncate — it could only churn unused state (#7307).
- editor slice: reuse the `removeEditorStateForReplacedPreview` helper this PR added
  instead of a hand-rolled copy of the same six-field eviction (drops ~50 lines) (#6476).
- useFileExplorerTree: extract `readWorktreeDirectory` so the connectionId/settings
  assembly for `readRuntimeDirectory` lives in one place, not three (#6321).
- comment-markdown-github-attachment-media: extract a shared `AttachmentFallbackLink`
  for the image/video error-fallback link (#6759).
- repository-icon-github: fold the two near-identical live resolvers into one
  parameterized `resolveRepositoryIdentityLive`; trim a 3-line comment to 2 (#6507).
- resource-usage-open-slices: delete the `shouldReadPopoverSlices` identity wrapper and
  inline `open` at the four call sites (#7275).
- BrowserPane: drop the pointerEvents assignment already applied inside
  `ensureBrowserPageWebview` for the reused-webview path (#6958).
- github slice: fix two garbled "…a commit main confirmed…" comments (#7277).
- runtime-file-client: trim the binary-file fallback comment to its whys (#6606).
- composer-branch-selection: drop the inline comment that restated the JSDoc (#6748).
- TabBarQuickCommandsButton: correct the stale "+ Command" comment (button shows no +).

No behavior change (the editor-helper reuse is behavior-equivalent, only more
conservative on an edge case); typecheck, oxlint, react-doctor, oxfmt, and touched
unit suites all pass.
2026-07-03 22:31:56 -07:00
Neil 529c06ff62 cleanup(terminal): dedupe pane teardown, reuse platform check, harden shadow-cursor tracking (#7320)
Quality pass on terminal PRs merged 2026-07-03:

- pane-split-close: extract a shared `teardownManagedPane` so `closeManagedPane` and
  `detachManagedPaneForExternalMove` can't drift apart on future edits (#7215).
- terminal-link-activation: reuse the existing `isMacPlatform()` instead of a second
  inline `navigator.userAgent` copy, keeping one source of truth for Mac detection.
- pty-connection: gate the shadow-cursor moves on empty CSI params so parameterized/
  modified cursor keys (e.g. Ctrl+Left word-jump, `ESC[1;5D`) reset command tracking
  instead of silently desyncing the buffer used to infer a typed agent name; relocate
  the `getAuthoritativePaneAgent` JSDoc to the function it documents (#6954).

No behavior change except the cursor-tracking hardening; all touched unit suites pass.
2026-07-03 22:31:54 -07:00
Jinwoo HongandOrca 52e2eb01b1 Tab strip: judge click-vs-drag at pointerup and flush gesture state on window focus (#7316)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 22:22:35 -07:00
Neil 22d5989ed9 Fix manual sorting for project headers and groups
Fixes #6609.
2026-07-03 21:38:34 -07:00
Jinjing b2fcbdbc73 fix: bound release notes by published releases (#7311) 2026-07-03 20:53:16 -07:00
Neil c29ee51a0a Make sidebar worktree hover title editable (#7307) 2026-07-03 20:21:09 -07:00
NeilandOrca e4ac582e16 Revert "Update quick command button to use plus icon and clearer label (#6517)" (#7304)
This reverts commit a94d692cd5, restoring the
shorter "Command" label and the Play icon on the quick command entry
(PRs #5528 and #5674).

Co-authored-by: Orca <help@stably.ai>
2026-07-03 20:20:23 -07:00
Brennan BensonandOrca 20201f3ae8 Fix #5787: recovery reload no longer sweeps local PTYs; guard close for hung-but-alive renderer (#7290)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 20:09:19 -07:00
5b5ce6cef8 Harden reliability gate policy and register merged terminal regression tests as gates (#7295)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <delta-eng@stably.ai>
2026-07-03 19:58:07 -07:00
Brennan BensonandOrca bdd8bb0a3b fix(agent-status): keep harness-injected turns out of sidebar prompt labels (#7274)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:49:17 -07:00
Jinjing 0d2d44b989 Use ASCII-safe speech model cache paths on Windows (#7291)
sherpa-onnx cannot load model files or hotword lists from Windows
paths containing non-ASCII characters.

- Resolve speech model and hotwords paths to ASCII-safe alternatives
  like ProgramData when the default userData path contains non-ASCII
- Migrate existing downloaded models from the legacy non-ASCII cache
- Ensure deleted models are removed from the legacy source folder to
  prevent them from being re-migrated on subsequent launches
2026-07-03 19:43:38 -07:00
Jinjing bdb6d144c3 Pin the new tab button outside the tab scroll view (#7292)
Move the "New tab" button out of ScrollView so that it remains visible
and reachable regardless of how far the tabs have been scrolled.
2026-07-03 19:38:24 -07:00
Neil 29c7fa7a03 Include Claude Fable reset countdown
Fixes the PTY fallback path so Claude Fable usage carries a concrete reset timestamp and the existing status tooltip renders the Fable reset countdown.
2026-07-03 19:36:10 -07:00
Brennan BensonandOrca b099e27703 fix(checks): keep a merged PR visible when the worktree sits behind its own PR head (#7277)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:30:10 -07:00
Brennan BensonandOrca 1282f5c2da Add reliability gate manifest (#7001)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:26:00 -07:00
github-actions[bot] 266defab34 release: v1.4.122-rc.0 v1.4.122-rc.0 2026-07-04 02:25:39 +00:00
d5c4372b3a fix(file-explorer): batch dirCache writes on tree refresh to remove O(N²) freeze (#6321)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: brennanb2025 <brennankbenson@gmail.com>
2026-07-03 19:06:13 -07:00
NeilandOrca 77a223a7e2 Fix macOS TCC attribution for terminal children via login(1) (#7003)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:04:16 -07:00
Brennan BensonandOrca acfec3fd85 Record hibernation activity from real user input and protect typed drafts (#7283)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:04:12 -07:00
NeilandOrca fc7747021c Fix main typecheck: pin printToPDF mock Buffer generic (#7264)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 19:03:36 -07:00
andrewroxby f8591d6991 Remember Markdown TOC state while tabs are open (#6476)
* Keep markdown TOC open per document

* Clean up Markdown visibility state for replaced previews
2026-07-03 18:23:28 -07:00
Brennan BensonandOrca 748bced2e6 Fix Resource Manager going empty when a runtime server is selected or stale (#7275)
Co-authored-by: Orca <help@stably.ai>
mobile-android-v0.0.22
2026-07-03 17:52:59 -07:00
d1bd91417e fix: stop Claude account loading after denial (#6653)
* fix: stop Claude account loading after denial

* fix(claude-accounts): tear down whole login tree on OAuth denial

Use killChild() (not child.kill) on the denial path so the detached
POSIX process group and Windows child tree are killed, matching the
timeout/abort paths and honoring the detached-spawn comment. Strengthen
the regression test to assert the process-group teardown.

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

---------

Co-authored-by: Neil <charlie-eng@stably.ai>
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:49:29 -07:00
Brennan BensonandOrca 4951168d4a Unify tab agent identity with the agent-status pipeline (#7059)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:39:59 -07:00
727c7ae21b fix(runtime): render remote-server binary files (PDF/images) in the editor (#6606)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-07-03 17:37:06 -07:00
Brennan BensonandOrca 95caf2ee9d fix(mobile): match diff review line height to desktop diff density (#7276)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:34:44 -07:00
f7a4100bc7 Preserve slash branch names from branch composer (#6748)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Neil <charlie-eng@stably.ai>
2026-07-03 17:33:22 -07:00
mehmet turac ca36072295 Handle GitHub attachment image load failures (#6759) 2026-07-03 17:32:08 -07:00
PPandping 69415946dd fix(github): count PR diff lines whose added content starts with ++ (#6819)
Co-authored-by: ping <ping6174@gmail.com>
2026-07-03 17:25:32 -07:00
github-actions[bot] 41e395b66b release: v1.4.121-rc.6 v1.4.121-rc.6 2026-07-04 00:24:44 +00:00
8796261eed feat: allow custom worktree branch names (#6454)
* feat: allow custom worktree branch names

* refactor(ui): render custom branch name field unconditionally under advanced container

* fix(composer): hide manual branch field when a work-item source drives the branch

A tracked PR/issue/MR/Linear source derives the branch itself, and a linked
GitHub PR re-resolves the branch name at submit — so an override typed in the
Advanced branch field was silently ignored. Only render the field for the
typed-name and base-branch flows, where the manual override is honored.

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

---------

Co-authored-by: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:21:50 -07:00
9f31826e79 fix(ssh): surface stdout alongside stderr in execCommand errors instead of masking (#6865)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-07-03 17:20:25 -07:00
6fbfb8d921 fix: strip trailing whitespace from PROMPT_COMMAND in bash wrapper (#6897)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Super User <root@localhost.localdomain>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-07-03 17:16:29 -07:00
Brennan BensonandOrca a4661f15d3 Inject serve-sim camera dylib from an unquarantined runtime copy (#7174)
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:12:47 -07:00
d9e0b9e759 fix(mobile): avoid SF Mono fallback on iOS terminal (#6761)
* fix(mobile): avoid SF Mono fallback on iOS terminal

* test(mobile): cover touch iPadOS terminal font fallback

* refactor(mobile): share terminal font fallback tail across platforms

Dedup the identical fallback chain that the iOS/non-iOS branches each
repeated so the two platforms can only differ in the lead family and
cannot silently drift. Make the regression tests behavioral: assert the
resolved chain always terminates in the generic monospace (the real iOS
bug) and that both platforms share an identical tail.

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

* test(mobile): anchor font-block extraction on font markers only

The VM-slice end boundary was an unrelated text-scale comment; re-anchor
it on the terminalFontFamily declaration so edits below the font block
cannot break the extraction.

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

* chore(mobile): bump terminal-webview-html max-lines ratchet to match file size

The iOS-safe font selection block adds a few code lines to
terminal-webview-html.ts, pushing it to 1784. Bump the grandfathered
per-file ratchet to match, consistent with prior ratchet bumps.

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

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-03 17:11:24 -07:00
m11yandClaude Fable 5 4c78440f70 Fix Codex hook trust hash for matcherless events (UserPromptSubmit/Stop) (#7110)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 17:07:42 -07:00
Soichi Sumi 5e9db83c48 fix: add 'hooks' to CODEX_SYSTEM_RESOURCE_ENTRIES (#7120) 2026-07-03 17:06:09 -07:00
haozhenfei 547afc2264 fix(rate-limits): route hidden Claude usage PTY through the configured proxy (#7245) 2026-07-03 17:04:25 -07:00
2789a67604 feat(browser): add Copy to context menu when text is selected (#7159)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-07-03 16:52:08 -07:00
473c4e8680 fix(markdown): restore TOC navigation for h4 and h5 (#7063)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Neil <charlie-eng@stably.ai>
2026-07-03 16:51:26 -07:00
e8c2b79a93 Fix mobile live input keyboard and Korean IME (#7273)
* feat: 모바일 터미널 한글 미러 스텝 순수 모델 추가

* feat: 미러 델타 순서 보장용 send 체인 추가

* fix: 모바일 터미널 한글 입력을 미러 모델로 전환

* fix: 탭 상태 지연 중 한글 조합 상태 소실 방지

* fix: 미러 가드와 send 체인 리뷰 지적사항 반영

탭 상태 지연으로 활성 탭 타입이 일시적으로 null이 될 때 runMirrorStep의 stale-handle 가드가 조합 중 음절을 버리지 않도록 pending-clear 효과와 동일한 null 허용 패턴 적용. 테스트 하네스가 ref와 prop을 동일 소스에서 파생하도록 결합해 실제 경로의 lag 프레임을 검증. queueTerminalLiveMirrorSend의 previousSend await를 catch로 보호.

* refactor(mobile): drop dead queueTerminalLivePendingFlush orphaned by the mirror model

The mirror model migrated all live-input sends to queueTerminalLiveMirrorSend,
leaving queueTerminalLivePendingFlush referenced only by its own tests. Remove
the dead function and its three tests.

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

* fix(mobile): expose live terminal keyboard target

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

* fix(mobile): refocus live keyboard after dismissal

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

---------

Co-authored-by: realitsyourman <wongil@demodev.io>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-07-03 16:47:59 -07:00