claw-code/rust/crates/rusty-claude-cli
amazd b0fad35dfb feat(cli): press Esc to interrupt a running turn
While a turn runs the main thread is blocked in the conversation loop,
so nothing reads the keyboard. Add an EscapeInterruptMonitor that, for
the duration of a turn on an interactive terminal, switches stdin to a
minimal non-canonical mode (echo/line-buffering off; ISIG and output
processing untouched, unlike full raw mode) and polls for a lone ESC
byte. Escape sequences such as arrow keys are recognized and swallowed.
On Esc it trips the TurnInterruptSignal: the in-flight request is
aborted and control returns to the REPL prompt with the session intact.

Permission prompts read whole lines from stdin mid-turn, so stdin
ownership is coordinated through a StdinPromptGate: while a prompt holds
a lease the listener restores canonical mode and stops consuming bytes.

Also:
- spinner shows '(esc to interrupt)' and the banner/help mention Esc
- WorkerStatus/WorkerEventKind gain an 'interrupted' lifecycle state
- non-terminal stdin and non-unix platforms skip the listener; Ctrl+C
  interruption still works there

Closes the Esc-to-interrupt feature request (#3196).
2026-06-10 14:05:14 -04:00
..
.claw/sessions feat(runtime): typed task packet format for structured claw dispatch 2026-04-04 00:40:20 +09:00
src feat(cli): press Esc to interrupt a running turn 2026-06-10 14:05:14 -04:00
tests fix: /config help returns structured section list (#344) 2026-06-05 07:09:48 +09:00
Cargo.toml feat(cli): press Esc to interrupt a running turn 2026-06-10 14:05:14 -04:00
build.rs fix: expose complete version provenance 2026-06-04 15:55:08 +09:00