SIGN IN SIGN UP

input: Add a transaction-based undo manager (#2728)

## Summary

- implement transaction-first input history with explicit begin/commit
and coalescing boundaries
- coalesce adjacent same-kind typing and directional deletes without a
time threshold, while isolating cursor/selection movement, newlines,
paste, cut, command deletes, replacements, and programmatic edits
- model editing-session boundaries: blur and non-inserting Return
(`Input` / `submit_on_enter`) break coalescing, while multiline Return
is an independent structural transaction
- preserve exact selections across undo/redo, keep IME composition
atomic, preserve redo across no-op edits, and clear redo only for real
new edits
- document the macOS accessibility-driven UI testing workflow and native
AppKit behavior research

## Test Plan

- native AppKit comparison of `NSTextField` and `NSTextView`: rapid
typing, 2.5s pause, mouse/keyboard cursor changes, Return, focus
sessions, multiline input, and deletion
- signed Story Input and Editor via macOS accessibility tree: long
multiline input, newline boundaries, single-line Return sessions, cut,
paste, and repeated Backspace
- `cargo fmt --check`
- `git diff --check`
- `cargo test -p gpui-base input_history -- --nocapture` (29 history
scenarios)
- `cargo test -p gpui-base`
- `cargo clippy -p gpui-base --all-targets -- --deny warnings`

Co-authored-by: Codex <codex@openai.com>
J
Jason Lee committed
41bee9c280b6708d3671b5e9b137a78f49394568
Parent: e443a9d
Committed by GitHub <noreply@github.com> on 8/15/2026, 9:53:22 AM