multiline never set Searcher::multi_line so \n patterns matched nothing; added maxCountPerFile + skippedOversized to GrepResult; parallelized the mtime-ranked glob walk with bounded per-thread heaps.
- Ran the operand as an ordinary descendant so it is reaped with the host instead of leaking as an orphan.
- Propagated the command's exit status; reported missing operand and exit 125 with no operand.
- Updated the bash tool prompt's daemon guidance away from nohup/setsid/disown detachment.
- Switched shell renderer success icon/state to "done".
- Added fc editor mode, history -n/-r, and mapfile callbacks.
- Implemented symbolic umask parsing, unset namerefs, and declare -I.
- Rendered builtin man pages and replaced unimp errors with diagnostics.
- Added regex/substring tests, nameref unset, and exec-in-subshell paths.
- Added process ID resolution and selectors for waited jobs.
- Implemented terminate-only waits and next-job polling.
- Recorded completed job IDs into the variable named by -p.
- Added shell integration tests covering the new wait paths.
- Added astCondition to rule frontmatter parsing and rule metadata, with AST-grep normalization.
- Updated TTSR bucketing so astCondition-only rules are treated as interruptible matches.
- Added ts-redundant-clear-guard as a built-in JS/TS tool rule for guarded clear* calls.
- Added AST snapshot matching in agent sessions with per-stream cache throttling and cleanup.
- Added tree-sitter `enclosing_block_boundaries` API with line range models.
- Added N-API `enclosingBlockBoundaries` bridge and exported JS declarations.
- Replaced matching-bracket context resolution with source-aware block context in read and diff flows.
- Passed source path through diff/read generators to surface native block boundary previews.
- Reworked running-task rendering so shimmer animation is applied to descriptions instead of IDs.
- Added accent coloring for the separator and description text to keep the status line formatting consistent.
- Reworked Linux clipboard writes to use a shared `OnceLock<Mutex<Option<Clipboard>>>` so a `Clipboard` instance persists for the process and keeps X11 ownership alive.
- Updated `copy_to_clipboard` to route Linux calls through the persistent helper while macOS and Windows keep transient on-thread writes.
- Added changelog entries for the native X11 clipboard fix and the AI default Anthropic model note.
Fixes#2075
Ghostty on macOS reports Option+Backspace as kitty modifier 11
(wire) = 10 (mask) = super(8) | alt(2). The native key matcher only
recognised shift/ctrl/alt, so:
- format_kitty_key in crates/pi-natives/src/keys.rs rejected any
sequence whose effective modifier had bits beyond shift/ctrl/alt
set; parseKey returned undefined for \x1b[127;11u.
- parse_key_id recognised only those three modifiers, so even an
explicit 'super+alt+backspace' degraded to 'alt+backspace' and
could not match an actual super+alt encoded press.
- The editor's matchesKey(data, 'alt+backspace') branch was never
reached and Option+Backspace either no-op'd or fell through to
single-character delete.
Added a MOD_SUPER constant, taught parse_key_id, format_with_mods,
and format_kitty_key about the super bit, added super+alt+backspace
(and super+alt+delete / super+alt+d) to tui.editor.deleteWord*
defaults, and broadened the editor's direct matchesKey calls to
accept the super+alt variants. Existing alt+backspace / alt+d /
alt+delete paths are untouched, so the legacy ESC+DEL workaround
keeps working too.
Added Rust unit tests for the super modifier (positive and
negative for hyper/meta sequences we still drop) and TS
regressions in keys.test.ts and editor.test.ts that exercise
\x1b[127;11u end-to-end.
Fixes#2064
- Recognized BEL as a string-sequence terminator so the TUI cursor marker measures zero width.
- Advanced past unclassifiable ESC bytes to stop break_long_word spinning forever.
- Added `textSizing` terminal capability and `tui.textSizing` setting for Kitty OSC66 scaling.
- Updated OSC66 range and visible-width handling to preserve grapheme slice behavior.
- Updated markdown rendering to apply heading text sizing only when enabled.
- Fixed DECCARA trailing-background fill tracking and DECRPM status 3/4 recognition.
- Short-circuited poll for the null device, which never reports readable on macOS/BSD.
- Prevented `read` with no `-t` deadline from spinning forever on `/dev/null`.
- Added tests verifying null-device readiness and detection specificity.
Tied uncached sortByMtime onMatch callbacks to bounded heap admission so live progress and timeout partials reflect the same mtime-ranked set the call returns, with the JS-side mtime sort+truncate converging on the native top-N.
Preserved bounded onMatch progress during uncached sorted glob traversal so timed-out find scans can still return partial matches without unbounded callback growth.
Kept uncached sort-by-mtime glob traversal bounded to maxResults and emitted onMatch callbacks only for returned matches so broad find scans cannot grow parent memory independently of the limit.
Fixes#1761
- Switched `grapheme_width_str` to compute multi-character widths from `UnicodeWidthStr::width` and then apply the macOS Hangul Compatibility Jamo correction on top of that result.
- Added regression tests in native and TUI text-width tests for VS16 emoji-presentation symbols, keycaps, and related bare-symbol cases.
- Adjusted the AuthStorage codex ranking timeout test fallback to 2s with a 1s elapsed assertion so slow aborted requests cannot mask the fast timeout path.
- Added Job::abort_internal_tasks to abort internal async tasks and drop their join handles.
- Updated shell cancellation paths to call this abort logic and handle mutable shell job lists before signaling remaining process groups.
- Added Rust and TypeScript tests that verify cancellation prevents background shell jobs from completing after abort.