Opus finding
OpenAIProvider streamMessage sends `system` role in messages even when systemPrompt is undefined
- src/providers/openai.ts:115-122
- src/providers/openai.ts:189-195
StreamOptions/SendOptions declare systemPrompt as required string, but unlike AnthropicProvider there is no fallback to CAPYBARA_SYSTEM_PROMPT and no validation. If a caller passes empty string or undefined (TS will not catch all runtime callers using `as any` or dynamic data), the request will include `{role:'system', content: undefined}` which most OpenAI-compatible endpoints reject with 400. The asymmetry with AnthropicProvider (which falls back to CAPYBARA_SYSTEM_PROMPT) violates the BaseProvider contract behavior expected by orchestrator code.
Recommendation
Validate systemPrompt or omit the system message entirely when empty/undefined; mirror Anthropic's CAPYBARA_SYSTEM_PROMPT fallback for symmetric provider behavior.