← ClaudeAtlas

provider-integration-limitslisted

Cross-provider integration constraints in ClankerMux that are invisible from the code — upstream endpoints that do not exist, client-side misbehaviour mistaken for proxy defects, and one known unfixed converter. Read this before changing provider adapters, token counting, cost attribution, or cross-provider routing.
d4rken/clankermux · ★ 9 · AI & Automation · score 67
Install: claude install-skill d4rken/clankermux
# Provider integration limits Every entry here was established by live experiment against a real provider. None of it is visible from the source, and several entries exist to stop a client-side or upstream behaviour being diagnosed as a proxy defect. ## OpenRouter has no `count_tokens` endpoint `POST /v1/messages/count_tokens` returns **404** on that route. Token counting for **default-endpoint** OpenRouter accounts is therefore done locally, in `packages/providers/src/local-token-count.ts`. Accounts configured with a custom endpoint still count upstream — the guard is literally `provider === "openrouter" && !customEndpoint`. ## Switching provider mid-conversation mislabels refusals Resuming a Claude Code session after re-routing it from Astra to DeepSeek reproduces a refusal whose upstream response is HTTP 200 with `stop_reason: refusal`. Claude Code's own UI names the requested **Fable** alias, so it reads as a refusal by the Fable model. It is not: the resolved and reported model is DeepSeek. Client-side display behaviour, not a proxy defect. ## DeepSeek rejects `thinking.block_binding` OpenCode adds Fable 5.1 thinking-binding controls automatically because of the requested model name. DeepSeek via OpenRouter rejects the resulting `thinking.block_binding` field with **HTTP 400**. Fixed in the OpenCode client config (its own opt-out); no proxy change was made, and nothing strips the field automatically. ## Client cancellation is client-dependent, and the record is m