All LLM calls routed through Bedrock Converse API; Gemini removed
dropthejase replaces the multi-provider LLM layer (Claude via Anthropic SDK + Gemini) with a single Bedrock Converse API adapter. This is the most structural fork divergence: no per-tenant API keys, no provider routing, no Gemini path. The decision collapses a lot of code but is essentially irreversible without reimporting upstream.
bedrock.ts (7141961) is a Converse API streaming adapter that implements the same streamChatParams/StreamChatResult interface as the old claude.ts and gemini.ts. It handles tool-use streaming by accumulating toolUse.input across content block deltas and calling runTools on tool_use stop reason. The iteration loop and the message accumulation pattern are clean and copy-able.
models.ts (b8759cb) defines three logical tiers - claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5 - and a resolveBedrockModelId() function that maps them to EU cross-region inference profile IDs (e.g. eu.anthropic.claude-sonnet-4-6). The profile IDs went through one correction in 70bff1e: Opus and Sonnet use short-form cross-region IDs (eu.anthropic.claude-opus-4-7) while Haiku uses the versioned form (eu.anthropic.claude-haiku-4-5-20251001-v1:0). That asymmetry is worth checking against your own region's available profile IDs.
The IAM policy for Bedrock invoke starts with specific model ARNs and gets relaxed to a wildcard foundation-model ARN in 792e54e. bedrock:CountTokens is added in 11fd6b2. Prompt caching is enabled on both agents via cacheConfig: { strategy: 'auto' } in f9fa4f4.
claude.ts, gemini.ts, and R2 storage.ts are deleted in 310bb912. The frontend model selector drops API key fields entirely and reduces to a three-tier Claude dropdown (3e4f3da), later restored with per-user tabular model preference (a63265b).
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?