healthCheck(): lightweight GET /v1/models to verify API key validity
createCompletion(): streaming via chat.completions.create with stream:true; maps chunks to CompletionEvent
Registers adapter in ProviderService; removes legacy registerOpenAIProvider() method
Test plan
Typecheck, lint, format:check all pass
When OPENAI_API_KEY unset: adapter skips, listModels returns empty, healthCheck returns down
When OPENAI_API_KEY set: codex-gpt-5-4 appears in provider listing
Generated with Claude Code
## Summary
- Adds OpenAIAdapter implementing IProviderAdapter
- Installs openai SDK (^6.32.0) in apps/gateway
- register(): initialises OpenAI client with OPENAI_API_KEY, registers codex-gpt-5-4 with Pi ModelRegistry; gracefully skips when key is absent
- listModels(): returns Codex gpt-5.4 (128k context, tools + vision)
- healthCheck(): lightweight GET /v1/models to verify API key validity
- createCompletion(): streaming via chat.completions.create with stream:true; maps chunks to CompletionEvent
- Registers adapter in ProviderService; removes legacy registerOpenAIProvider() method
## Test plan
- Typecheck, lint, format:check all pass
- When OPENAI_API_KEY unset: adapter skips, listModels returns empty, healthCheck returns down
- When OPENAI_API_KEY set: codex-gpt-5-4 appears in provider listing
Generated with Claude Code
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Test plan
Generated with Claude Code
6f104d116bto9b4d03cf30