Extract orchestrator inner loop into _doOrchestrate() so the retry button can re-run without re-adding the user message to DOM or history — same pattern as the existing chat retry. Also set AsyncOpenAI(timeout=settings.timeout_local) so slow remote models (OpenRouter/DeepSeek) get the same 300s budget as local chat calls instead of the SDK default which varies by connection. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
95 KiB
95 KiB