Conversation
Ports ClinePass (Vercel-proxied OpenAI Chat Completions) end-to-end:
- registry entry + capability hints for deepseek-v4-pro/flash
- envelope unwrap for {success,data} responses and error path
- thinking budget floor (4096) to avoid empty content on long reasoning
- retry once on transient "empty response content"
- OAuth flow (authorization_code, no PKCE) reusing Cline's auth URL
- Vercel-friendly reasoning.effort mapping (max -> xhigh, drop unknown)
- /v1/models live resolver for ClinePass catalog
Co-Authored-By: Claude <noreply@anthropic.com>
ClinePass is a flat \$9.99/month subscription authenticated by an API key from Settings > API Keys in app.cline.bot (per https://docs.cline.bot/getting-started/clinepass). The previous authorization_code flow was misclassified — the OAuth callback (client_type=extension) is the IDE extension flow and produces a 401 on the API, which is what issue decolua#2252 hit. Changes: - registry/clinepass.js: category "oauth" -> "apikey", drop authModes/hasOAuth/oauth block/clinepassHeaders hook, point display.notice at the API keys page - executors/default.js: drop the now-dead clinepass refresh grant and the clinepassHeaders hook (default bearer is correct for an API key) - oauth/providers.js: replace the full clinepass OAuth block with a one-liner flowType: "apikey" entry - oauth/constants/oauth.js: drop CLINEPASS_CONFIG and the CLINEPASS enum value - oauth/[provider]/[action]/route.js: remove clinepass from noPkceExchangeProviders Closes decolua#2253 (no separate OAuth flow needed) Co-Authored-By: Claude <noreply@anthropic.com>
Strip cline-pass/ prefix from exposed model IDs and add upstreamModelId so the upstream API still receives the full prefixed ID. Model alias now reads clinepass/deepseek-v4-pro instead of clinepass/cline-pass/deepseek-v4-pro. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Update: shortened model aliases (
|
Owner
|
Thanks @adentdk for the contribution! Reviewed and accepted — applying it to master. 🙏 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Add end-to-end support for ClinePass, Cline's flat $9.99/month subscription that proxies through Cline's OpenAI-compatible Chat Completions endpoint. Authentication is by API key from Settings > API Keys in
app.cline.bot(per the docs) — the OAuth flow withclient_type=extensionis the IDE extension flow and is unrelated.Brings the ClinePass model catalog (
cline-pass/..., 10 models) into the existing/v1/modelsflow with proper thinking handling.Closes #2252 (no separate OAuth flow needed — API key was the intended path)
What's in
open-sse/providers/registry/clinepass.js— provider registry entry;category: "apikey"open-sse/providers/capabilities.js— capability hints fordeepseek-v4-pro/deepseek-v4-flashopen-sse/services/clinepassModels.js—/v1/modelslive resolver (works with API key)open-sse/utils/clinepassEnvelope.js— unwraps ClinePass's{success,data}response envelope and the error pathopen-sse/executors/default.js—max_tokensfloor (4096) for reasoning-enabled models to avoid empty-contentlengthfinishesopen-sse/translator/concerns/thinkingUnified.js— map internalmax→xhigh, drop unknown levels (Vercel/OpenAI only accept{none,minimal,low,medium,high,xhigh})open-sse/handlers/chatCore.js+nonStreamingHandler.js— envelope unwrap + one retry on transientempty response contentopen-sse/utils/error.js— error path uses envelope unwrapsrc/lib/oauth/providers.js—clinepassregistered asflowType: "apikey"src/app/api/v1/models/route.js— live resolver wiringWhy an API key, not OAuth
Issue #2252 hit a 401 on
client_type=extensionOAuth — that flow is for the Cline IDE extension and produces a token the API rejects. ClinePass itself authenticates with a regular API key fromapp.cline.bot/settings/api-keys.How to try it
clinepass/deepseek-v4-flash(or-pro, or any of the 10 listed in the registry).Tested locally
/v1/modelsreturns the 10 ClinePass models.deepseek-v4-proreasoning responses return non-empty content within budget.Branch:
feat-clinepass-provideron https://github.com/adentdk/9router