Replaced the one-sided JSX echo guard regex with a small scanner that ignores tag-closing characters inside quotes and expression braces, so self-closing tags with comparison props still allow boundary-echo repair.\n\nFixes #2705
Scanned replacement payload prefixes as one JSX/XML fragment so the single-line boundary echo guard preserves nested closers whose opener spans multiple lines.\n\nFixes #2705
Avoided treating a single-line replacement payload's own JSX/XML closing tag as an off-by-one echo when the payload opened the same tag.\n\nFixes #2705
Auto-repaired single-line replacement expansions that retype a surviving JSX/XML closing boundary below the edited line, preserving ordinary statement duplicates while removing the block-end echo.\n\nFixes #2705
Cleared Anthropic thinking signatures when literal thinking-envelope normalization changes provider bytes, preventing same-model replay from pairing stale signatures with rewritten text.
Extended the wrapped-thinking regression test to verify replay demotes the rewritten block instead of sending an invalid signed thinking block.
Fixes#2695
- Renamed line and block patch op verbs to XCHG, DEL, and INS in parsing and formatting.
- Updated grammar and tokenizer to support XCHG.BLK, DEL.BLK, and INS.PRE/POST/HEAD/TAIL forms.
- Updated diagnostics, docs, prompts, tests, and changelog to use XCHG/DEL/INS-based operators.
- Expanded session-stats parsing to normalize legacy op aliases to compact IDs.
- Tracked seen-line provenance in snapshots and propagated it from read/search/ast-grep rows.
- Rejected hashline edits on unseen lines before patching, throwing unseen-line errors.
- Rejected single-line block anchors in strict mode and dropped them in unresolved lenient mode.
- Trimmed one-sided keeper-echo duplicates during multi-line replacements with warning output.
- Added --recover CLI option to rebuild changelog fixes from tagged history.
- Pruned Unreleased bullets that match historical released items across all tags.
- Normalized output by sorting release sections by version and compacting bullet spacing.
- Updated boundary repair to skip dropping closing suffix lines when the replacement payload already restates them.
- Added a helper that checks whether a replacement payload ends with the same trailing deleted lines before sparing structural closers.
- Added a boundary repair test that confirms a replacement preserving an internal closer produces no duplicate closer or warning.
- Added a focused-agent left-key input listener that consumes double left taps when the input is empty.
- Routed focused session left-tap behavior through #handleFocusedLeftTap so it matches the Esc-style unfocus timing.
- Updated tests/fixtures for the new listener flow and refreshed a hashline block-edit error assertion.
- Added a SessionFocusController to switch transcript and input context between main and subagent sessions.
- Added agent-hub Enter activation and double-left return behavior for focused local agents.
- Added view-session-based event and render logic to avoid stale focus-session state.
- Added status-line focused agent display with ghost icon and focused-mode border dimming.
- Updated parser/applier/patcher message strings to use shorter, more consistent wording for warnings and errors.
- Refined block-resolution fallback and snapshot-related diagnostics to clarify the actions users should take when edits fail or recover from drift.
- Handled unresolvable `insert after block` edits by lowering them to plain `insert after` operations with a warning when no syntactic block can be resolved.
- Added a new `insertAfterBlockUnresolvedLoweredWarning` message and narrowed unresolved-block errors to replace/delete paths.
- Updated block tests to validate warning-based lowering for missing resolvers and blank/invalid `insert after block` anchors.
- Scope.
- Added a trailing-sentinel guard to identify newline-generated phantom lines and drop delete edits targeting them.
- Updated edit validation to allow those no-op deletes while preserving real line bounds checks.
- Adjusted format-v2 tests to expect no-op handling of sentinel deletes and clipping for ranges ending at the sentinel.
- Updated block resolution to detect structural-closing-line anchors and convert unresolvable `insert after block` edits into plain `insert after` inserts while emitting a dedicated warning.
- Propagated these resolver warnings through `PatchSection` and `Patcher` results so parse and application callers receive them.
- Added tests covering the closer-anchor fallback and confirming non-closer unresolved block anchors still throw.
- Fixed deep insert-after-block landing by retreating inward corrections across trailing closers.
- Added blockStart tracking and warning diagnostics for inward correction of block inserts.
- Clarified insert-after-block prompt and changelog guidance to require opener-based landing rules.
- Added regression tests for nested, empty, and conflicted inward landing scenarios.