81a8ac2ba0ef476ccc12f788b3e0adea283fb042
The stdin loop's scratchpad-input branch ran before the palette branch and silently dropped every byte except a handful of app-level chords, so palette typing and Esc never reached the palette while a pad was focused. Skip the pad-input branch whenever st.palette != nil. closePalette also called repaintFocused() on cancel / no-op action paths, which paints the empty focused-child slot (focusedID == "" while a pad is focused) and leaves the palette's top border drawn over the pad. Route those branches through a restoreView helper that picks repaintFocusedPad when a pad is focused. Switching from a pad to a child via the palette now clears the pad focus and wipes the viewport, matching focusProcess's pad-exit path. Adds a harness scenario (palette_over_scratchpad) that opens a pad, opens the palette, types a query, and verifies that Esc leaves the pad correctly repainted with no palette chrome lingering.
Description
Terminal-based agent orchestration shell. Named after my dog.