2654859712
The extension shutdown context action installed by ExtensionUiController.initializeHookRunner was an empty stub, so ctx.shutdown() in interactive mode silently did nothing while extensions fell back to process.exit(0), bypassing session flush and terminal restore. Flip InteractiveModeContext.shutdownRequested so the main loop's existing checkShutdownRequested() drives the graceful path. Fixes #1020.