* fix: address review findings
* Fix compact agent row overflow in worktree cards
- Allow inline agent rows to outdent into the card gutter without clipping
- Scope compact agent list sizing to the list container instead of the button
- Keep expanded agent headers quiet while preserving collapsed pill styling
Reviewed and landed with maintainer follow-ups for preview-tab promotion, source-control double-click behavior, dirty/split preview safety, and current-main persistence test compatibility.
* 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>
* feat: hide markdown front matter by default with per-file toggle (#4468)
Front matter in the markdown preview was always visible above the
rendered body, which clutters reading for files where the metadata
is incidental. Default the card to hidden and let users opt in per
file via a small switch in the section header.
* Add a per-file markdownFrontmatterVisible flag in EditorSlice,
mirroring the editorViewMode pattern (absent entry = hidden;
storing only explicit true values keeps the record minimal).
* Clean the entry up on closeFile, preview-tab replacement, and
worktree removal; reset on runtime switch.
* Render the existing front-matter card unchanged when the toggle
is on, hide only the <pre> body when it is off, and keep the
section header + SettingsSwitch visible so the affordance stays
discoverable.
* Add 4 regression cases in editor.test.ts mirroring the
editorViewMode tests.
* fix: persist markdown front matter visibility
Co-authored-by: Orca <help@stably.ai>
---------
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
Fix Android terminal text overflow and stale foldable viewport handling.
- Pin terminal WebView textZoom so Android system font scale cannot inflate xterm glyphs past measured cells.
- Refit mobile terminal viewport on window dimension changes for fold/unfold, rotation, and split-screen.
- Harden viewport refit fallback handling for stale async runs and updateViewport responses.
Fixes#4579
The rate-limit quota poller fetches Codex usage on app start, window
focus, and every poll. Unlike the Claude and Gemini fetchers (which read
credentials from files/keychain and hit an HTTP endpoint), the Codex
fetcher always spawns the real codex binary — 'codex app-server' over
RPC, and on RPC failure an interactive codex PTY running /status.
For users who have Codex installed but never signed in, this surfaces as
an unexpected Codex process starting in the background even though they
never launched Codex. The spawn can only fail without auth.
Gate the fetch on the presence of Codex auth (auth.json under the
resolved CODEX_HOME / managed-account home). When absent, return
status 'unavailable' without spawning anything, mirroring how the other
providers stay quiet until configured. Signed-in users are unaffected.