Summary
Moved the app-level ESC cancellation cascade into a dedicated ui/esc module and delegated action_cancel_request() to an explicit handler. This isolates ESC logic from app internals and makes the dependency inputs explicit.
Context
- New module:
src/tunacode/ui/esc/ - Caller:
src/tunacode/ui/app.pynow delegates ESC handling
Changes
- Added
EscHandlerwith explicit dependency inputs for request task, shell runner, and editor state. - Added dependency protocols in
ui/esc/types.pyto avoid coupling with concrete UI classes. - Updated
TextualReplApp.action_cancel_request()to delegate to the handler.
Behavioral Impact
- No user-facing behavior changes.
- ESC handling order and early-return cascade remain identical.
- Modal ESC behavior unchanged (still handled in modal screens).
Related Cards
- [[ui-esc-handling]]
- [[textual-app]]