Run turns as asyncio tasks; SIGINT cancels the task; agent rolls back and keeps pending_retry_text for /retry.
Failed turns roll back memory and keep pending_retry_text; persist only after success. CLI auto-retries 10s/20s/30s (cancellable) and /retry.