- Remove the border-bottom separator in the agent hovercard when no agents
are active (looked off as a stray line under "No agents active")
- Add a "Hide from titlebar" button at the bottom of the hovercard that
disables the badge via settings and shows a persistent dismissible toast
pointing users to Settings → Appearance to re-enable
* fix: address review findings
Replace repeated dynamic imports in tests with a single static import.
* fix: address CI lint failure — use T[] instead of Array<T>
* fix: Cmd+X in rich markdown editor deletes only the current line
- Guard against depth < 1 (GapCursor before top-level leaf nodes) to
prevent RangeError crash
- Add visual-line cutting for word-wrapped paragraphs so Cmd+X removes
one visual line at a time instead of the entire paragraph
- Normalize soft line breaks on load/update: split paragraphs with
embedded \n into separate paragraph nodes so block-level cut works
per-line
- Add comprehensive tests for cut handler behavior and normalization
* fix: address review findings
- Normalize soft breaks at all document depths (not just top-level)
using doc.descendants() instead of doc.forEach()
- Capture transaction lazily from editor.view.state.tr to avoid stale
state after setContent()
* fix: use editor.view.state consistently in normalizeSoftBreaks
Read doc and create tr from editor.view.state (not editor.state) so
position collection and transaction application share the same base
state, avoiding stale-doc corruption after setContent().
Add a `showTitlebarAgentActivity` setting under Appearance > Titlebar
that lets users toggle the agent activity badge in the titlebar.
- Add `showTitlebarAgentActivity` to GlobalSettings (default: true)
- Add toggle in AppearancePane under a new "Titlebar" sub-section
- Upgrade badge from Tooltip to HoverCard with per-worktree breakdown
- Show dimmed idle state when no agents are active
- Fix badge/tab overlap when sidebar is closed (min-w-0 + conditional shrink-0)
- Extract countWorkingAgentsForTab helper for reuse by per-worktree counter
Cmd+Shift+G was opening the source control sidebar even when terminal
search was active, because both App.tsx and keyboard-handlers.ts
registered capture-phase keydown listeners on window with no
coordination between them.
Fix with two layers:
- App.tsx: skip Cmd+Shift+G when [data-terminal-search-root] is in the
DOM (reliable regardless of listener registration order)
- App.tsx: bail on defaultPrevented as a general guard
- keyboard-handlers.ts: upgrade stopPropagation to
stopImmediatePropagation for the search navigate handler
- Delete empty blocks on Cmd+X (match VS Code behavior)
- Preserve rich formatting on clipboard (text/html + text/plain)
- Fix cursor placement after cutting last block (clamp position)
- Guard against null clipboardData to prevent silent data loss
- Extracted contextual copy setup logic into `useContextualCopySetup` hook.
- Replaced direct `setupContextualCopy` usage in `MonacoEditor` with the new hook.
- Added `useContextualCopySetup` to `DiffViewer` to enable contextual copy in diffs.
- Bound copy handlers to both original and modified diff editors.
- Updated `EditorContent` to pass `filePath` and `relativePath` down to `DiffViewer`.
- Made `onSave` optional in `propsRef` since it's not strictly required in diff views.
fitAddon.fit() triggers an xterm.js buffer reflow that can leave the
viewport at a stale scroll offset, making the terminal appear scrolled
up away from the prompt. Before each fit(), capture whether the terminal
was scrolled to the bottom, and restore that position afterwards. If the
user had manually scrolled up to read history, their position is kept.
- Show a "Create new worktree…" option when search yields no matches
- Pre-select it so Enter immediately opens the create dialog
- Replace inline SVG with lucide Plus icon
- Simplify palette item styling (rounded-xl, neutral selection colors)
- Add primary badge, CornerDownLeft hint, and layout refinements
- Remove unused badgeLabel field from search results
Previously, user-initiated update checks during a GitHub release
transition sent 'not-available', falsely telling users they were on
the latest version. Now all benign check failures send 'idle', and the
toast controller converts user-initiated checking→idle into a neutral
"unable to check" message that covers both release transitions and
network blips honestly.