Icod.Terminal 1.21.0
Rich input and keyboard
Kitty legacy functional-key CSI sequences with an explicit event-type suffix now reach the authoritative ReadEventAsync stream as semantic key events. For example, CSI 1;1:3 D reports Left release, and CSI 2;5:2 ~ reports Control+Insert repeat. Supported letter finals are A B C D E F H P Q S with key number 1, and supported numeric ~ forms include insert, delete, page up/down, home/end, and F1–F12. R remains excluded because it overlaps cursor-position responses. Invalid or oversized phase-bearing frames recover at the next event instead of presenting invented keys.
The public TerminalInputEvent and TerminalKey vocabulary is unchanged. CSI-u, associated text, traditional terminfo keys, mouse, focus, and bracketed paste retain their existing routing. Kitty reporting still requires the existing explicit, reversible input-protocol acquisition; unnegotiated traditional input remains available. Associated text may contain user input and should be handled with the same care as other keystrokes.
Cursor visibility around a screen frame
TerminalScreenOutputTransaction.SetCursorVisibilityForCommit(TerminalCursorVisibility) requests a temporary cursor presentation for one transaction. The setting emits nothing when called. At commit, Terminal checks advertised entry and restoration capabilities, serializes against presentation leases and screen output, applies the requested visibility before frame items, and restores the effective lease owner or ordinary cursor afterward. A persistent cursor preference still belongs in AcquirePresentationAsync.
Unsupported capabilities, pre-cancelled work, and stale output epochs reject without frame output. If a committed write fails, cleanup attempts the return without using the caller's cancellation token and reports the failure. A failed cursor return or flush makes the presentation uncertain; later temporary visibility is rejected, and session cleanup attempts baseline restoration again. An emitted prefix cannot be rolled back, so callers own repaint decisions. The screen-output guide and input-driven sample show the pattern and fallback.
Compatibility and qualification
Target frameworks are net8.0, net9.0, and net10.0. The only additive public signature is the transaction visibility setter, with equal API fingerprint on all three frameworks:
939649e1d5c110039cfb3e5057561f8ef7fcb4de20af2de2152f9ec6ab357824
Production dependencies remain Icod.TermInfo 1.16.0 and Icod.Timing 1.0.0; optional test/sample Inspection remains 1.16.0. The 1.0 stable compatibility floor and all 1.20 public signatures and enum values remain intact. Fresh-package checks cover the input fixture, screen sample, DCurses 1.6.0/2.2.0, and the Terminal-only renderer. See Public-API-Baseline-1.21.md, Compatibility-and-Versioning.md, and the 1.21 development roadmap for exact CI and artifact evidence. Scripted tests do not certify a physical terminal emulator.