Introduces interface in as the architecture foundation for multi-provider support (Anthropic, OpenAI, OpenRouter, Z.ai, Ollama)
Extracts Ollama logic from into — same behavior as before, cleanly encapsulated
Adds , , to ; all existing public API preserved
Supporting types added: , , ,
Pi SDK Compatibility
Pi SDK's is the integration point — adapters call during . No native adapter concept in Pi SDK; the pattern is a Mosaic abstraction layered on top. No friction found. is reserved for future direct-completion use (M3+); Pi SDK handles current completions.
Test plan
All 156 gateway tests pass (pre-existing failure is unrelated)
mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a15e8b1b
turbo run typecheck
ELIFECYCLE Command failed. green (all 32 packages)
mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a15e8b1b
turbo run lint
## Summary
- Introduces interface in as the architecture foundation for multi-provider support (Anthropic, OpenAI, OpenRouter, Z.ai, Ollama)
- Extracts Ollama logic from into — same behavior as before, cleanly encapsulated
- Adds , , to ; all existing public API preserved
- Supporting types added: , , ,
## Pi SDK Compatibility
Pi SDK's is the integration point — adapters call during . No native adapter concept in Pi SDK; the pattern is a Mosaic abstraction layered on top. No friction found. is reserved for future direct-completion use (M3+); Pi SDK handles current completions.
## Test plan
- [ ] All 156 gateway tests pass (pre-existing failure is unrelated)
- [ ]
> mosaic-stack@ typecheck /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a15e8b1b
> turbo run typecheck
ELIFECYCLE Command failed. green (all 32 packages)
- [ ]
> mosaic-stack@ lint /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a15e8b1b
> turbo run lint
ELIFECYCLE Command failed. green
- [ ]
> mosaic-stack@ format:check /home/jwoltje/src/mosaic-mono-v1/.claude/worktrees/agent-a15e8b1b
> prettier --check "**/*.{ts,tsx,js,jsx,json,md}"
ELIFECYCLE Command failed. green
- [ ] Routing service tests pass (routing uses which is unchanged)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Introduces the IProviderAdapter interface as the architecture foundation for
multi-provider support. Extracts Ollama logic into OllamaAdapter and makes
ProviderService adapter-aware while preserving the full existing API.
## What changed
### @mosaic/types — new provider adapter types
- IProviderAdapter interface: register(), listModels(), healthCheck(), createCompletion()
- ProviderHealth / ProviderHealthStatus — health check result
- CompletionParams / CompletionMessage / CompletionTool — completion request
- CompletionEvent / CompletionUsage — streamed completion response
### apps/gateway — adapter implementation
- apps/gateway/src/agent/adapters/ollama.adapter.ts — OllamaAdapter (extracted from ProviderService)
- apps/gateway/src/agent/adapters/index.ts — barrel export
- ProviderService.onModuleInit() is now async (awaits registerAll())
- New ProviderService methods: registerAll(), getAdapter(), healthCheckAll()
- PROVIDER_ADAPTERS symbol exported as future DI injection token
- Anthropic/OpenAI/Z.ai remain as direct registry calls (M3-002 to M3-005 scope)
- Updated provider.service.test.ts: all tests now await onModuleInit()
## Pi SDK compatibility findings
Pi SDK uses ModelRegistry as central registry. The adapter pattern is a Mosaic
abstraction layered on top — adapters call registry.registerProvider() during
register(). Pi SDK has no native adapter concept; it does not conflict.
createCompletion() is defined in the interface but not called by the Pi layer.
Pi SDK's AgentSession.prompt() and ModelRegistry.getAvailable() handle all
actual completions. createCompletion() is reserved for future direct-completion
use cases (post-M3 scope). OllamaAdapter throws NotImplementedError for now.
No Pi SDK friction was found for the adapter pattern. The registry integration
point (registerProvider()) is exactly what the existing code already used.
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
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
Pi SDK Compatibility
Pi SDK's is the integration point — adapters call during . No native adapter concept in Pi SDK; the pattern is a Mosaic abstraction layered on top. No friction found. is reserved for future direct-completion use (M3+); Pi SDK handles current completions.
Test plan
ELIFECYCLE Command failed. green (all 32 packages)
ELIFECYCLE Command failed. green
ELIFECYCLE Command failed. green
🤖 Generated with Claude Code