f6ca76728b
Wafer (https://wafer.ai) exposes a single OpenAI-compatible endpoint (`https://pass.wafer.ai/v1`) for two SKUs whose entitlement differs server-side, so we model them as two parallel providers — mirroring the firepass/fireworks split so a user with both subscriptions can switch without re-pasting: - `wafer-pass` — flat-rate. `/v1/models` is filtered to entries whose `wafer.tier === "pass_included"`. - `wafer-serverless` — pay-as-you-go superset of Pass. Both issue `wfr_…` keys. `/login wafer-pass` and `/login wafer-serverless` paste-and-validate via `/v1/models`. `WAFER_PASS_API_KEY` and `WAFER_SERVERLESS_API_KEY` are wired through `getEnvApiKey`. Bundled catalog: - `wafer-pass`: GLM-5.1, Qwen3.5-397B-A17B. - `wafer-serverless`: GLM-5.1, Qwen3.5-397B-A17B, Kimi-K2.6, Qwen3.6-35B-A3B. Dynamic discovery via `/v1/models` overlays additional models at runtime and folds the `wafer` envelope (tier, capabilities, cents/M pricing) into the canonical `Model<"openai-completions">` shape. GLM-family entries carry the zai-style thinking compat (`thinkingFormat: "zai"`, `reasoningContentField: "reasoning_content"`) so reasoning tokens land in the right field. Cents-per-million → dollars-per-million via /100. Tests (`packages/ai/test/wafer.test.ts`, 5 cases): bundled catalog contract for both providers and wire-id pass-through (case-sensitive, no rewrite — `GLM-5.1` must round-trip verbatim or upstream 404s). Optional `packages/ai/test/wafer.live.ts` exercises a real round-trip against `pass.wafer.ai` when `WAFER_PASS_API_KEY` is set.