207caa3621
Reviewer flagged a race left open by the streaming guard added in #2455: getUserInput() arms onInputCallback and schedules an 800 ms goal continuation timer; when /goal set takes the streaming branch (or any extension/hook starts a turn inside that window), the timer fired unchecked. The downstream onInputCallback resolved the main waiter with a goal-continuation submission, submitInteractiveInput called session.promptCustomMessage without a streamingBehavior, and the same AgentBusyError the PR set out to fix resurfaced. Make the continuation timer streaming-aware: at fire time, bail out when session.isStreaming || isCompacting || hasPostPromptWork is true. Reuses the auto-submit busy check loop mode already relies on (renamed #isLoopAutoSubmitBlocked -> #isAutoSubmitBlocked since both flows have the same notion of 'agent is busy, do not submit'). The next agent_end in #handleGoalSessionEvent reschedules normally. Fixes #2454