merge: pull mhiqrambg/9router-mibp-version into master

Merge the MIBP fork (v1.0.14, synced to decolua v0.5.81) into our master
(0.5.86) at merge-base a8c9d380. Keep HEAD's infra policy (untracked
lockfile, mirror-configurable Dockerfile, decolua GHCR/DockerHub, README)
while absorbing the fork's engine features:

- feat(providers): freebuff provider + executor + OAuth + usage tracking
- feat(providers): cline free-tier models, Freebuff catalog sync
- feat(proxy-pools): pool egress geo probe, proxy-pool fitness + retry
- fix(usage): hide noAuth providers (devin-cli, mimo-free) from usage list
- test(harness): DATA_DIR isolation so tests never write the real DB
- fix(codebuddy-intl): probe token in connection test, OAuth by identity
- chore(guards): durable markers so fixes aren't silently dropped

Resolutions:
- registry/index.js regenerated deterministically (122 providers, alpha
  order). trae/windsurf/devin-cli stay hidden per HEAD security posture
  (no tool-calling / local-agent shell access) — not re-enabled.
- nonStreamingHandler: drop the generic unconditional unwrapDataEnvelope
  call; envelope unwrap stays scoped to clineEnvelope-quirk providers
  (unwrapClineEnvelope), fixing a latent mibp bug where non-opted-in
  providers ({success,data} bodies) were stripped.
- Drop fork-local Docker lockfile policy (package-lock.json, AGENTS.md,
  .npmrc verify scripts): this repo keeps package-lock untracked (nix
  build deploy). .npmrc (audit=false/fund=false) kept.
- Keep gitbook-pages workflow enabled (ours); mibp disabled it.
- Restore 13 upstream tests mibp deleted (they cover features we keep).

Verified: 2841 tests, 2687 pass, fail set byte-identical to HEAD (zero
new regressions); providers/alias/oauth baselines regenerated to merged
code and all green.
This commit is contained in:
asepharyana
2026-09-23 11:44:58 +07:00
96 changed files with 7709 additions and 1787 deletions
+6
View File
@@ -307,6 +307,12 @@ export const PATTERN_CAPABILITIES = [
{ pattern: "*gpt-3.5*", caps: { contextWindow: 16385, maxOutput: 4096 } },
{ pattern: "*gpt-oss*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 128000 } },
// ── Cline free tier: Upstage Solar Pro + LongCat (agentic coding models;
// windows unverified — 200K/32K conservative, same as laguna:free).
// NOTE: placed before the o-series catch-alls — "solar-pro4" contains "o4".
{ pattern: "*solar-pro*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 32000 } },
{ pattern: "*longcat*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 32000 } },
// ── OpenAI o-series (reasoning, vision) ──────────────────────────
{ pattern: "*o1-mini*", caps: { reasoning: true, thinkingFormat: "openai", contextWindow: 128000 } },
{ pattern: "*o1*", caps: { vision: true, reasoning: true, thinkingFormat: "openai", contextWindow: 200000, maxOutput: 100000 } },
+15 -1
View File
@@ -14,8 +14,9 @@ export default {
},
},
category: "oauth",
authModes: ["oauth"],
authModes: ["oauth", "apikey"],
hasOAuth: true,
authHint: "API key dari app.cline.bot → Settings > API Keys, atau login OAuth via browser.",
transport: {
baseUrl: "https://api.cline.bot/api/v1/chat/completions",
headers: {
@@ -30,6 +31,9 @@ export default {
combined: true,
header: "Authorization",
scheme: "bearer",
// Hook owns Authorization: workos:-prefixed OAuth vs plain API key
// (a merged token can't express both) — see applyAuth.
preserveHookAuth: true,
hooks: [
"clineHeaders",
],
@@ -44,6 +48,16 @@ export default {
{ id: "google/gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" },
{ id: "google/gemini-3.1-flash-lite-preview", name: "Gemini 3.1 Flash Lite Preview" },
{ id: "kwaipilot/kat-coder-pro", name: "KAT Coder Pro" },
// Free tier (verified live via GET /api/v1/ai/cline/recommended-models):
// billed $0 on usage, limited quota separate from ClinePass. The
// cline-free/* aliases require Cline product headers (see shared/clineAuth.js)
// or upstream 403s with "only available via Cline product surfaces".
{ id: "cline-free/muse-spark-1.3-contributor", name: "Muse Spark 1.3 (Free)" },
{ id: "deepseek/deepseek-v4-flash", name: "DeepSeek V4 Flash (Free)" },
{ id: "z-ai/glm-5.3-flash", name: "GLM 5.3 Flash (Free)" },
{ id: "cline-free/solar-pro4", name: "Solar Pro 4 (Free)" },
{ id: "cline-free/longcat-2.0", name: "LongCat 2.0 (Free)" },
{ id: "poolside/laguna-s-2.1:free", name: "Laguna S 2.1 (Free)" },
],
oauth: {
appBaseUrl: "https://app.cline.bot",
+3
View File
@@ -31,6 +31,9 @@ export default {
combined: true,
header: "Authorization",
scheme: "bearer",
// Hook owns Authorization: workos:-prefixed OAuth vs plain API key
// (a merged token can't express both) — see applyAuth.
preserveHookAuth: true,
hooks: [
"clineHeaders",
],
File diff suppressed because one or more lines are too long
+126 -131
View File
@@ -1,130 +1,127 @@
// Auto-generated: static imports for all registry entries
import p0 from "./alicode-intl.js";
import p1 from "./alicode.js";
import p2 from "./anthropic.js";
import p3 from "./antigravity.js";
import p4 from "./assemblyai.js";
import p5 from "./aws-polly.js";
import p6 from "./azure.js";
import p7 from "./black-forest-labs.js";
import p8 from "./blackbox.js";
import p9 from "./brave-search.js";
import p10 from "./byteplus.js";
import p11 from "./cartesia.js";
import p12 from "./cerebras.js";
import p13 from "./chutes.js";
import p14 from "./claude.js";
import p15 from "./cline.js";
import p16 from "./clinepass.js";
import p17 from "./cloudflare-ai.js";
import p18 from "./codebuddy-cn.js";
import p19 from "./codex.js";
import p20 from "./cohere.js";
import p21 from "./comfyui.js";
import p22 from "./commandcode.js";
import p23 from "./coqui.js";
import p24 from "./cursor.js";
import p25 from "./deepgram.js";
import p26 from "./deepseek.js";
import p27 from "./edge-tts.js";
import p28 from "./elevenlabs.js";
import p29 from "./exa.js";
import p30 from "./fal-ai.js";
import p31 from "./featherless.js";
import p32 from "./firecrawl.js";
import p33 from "./fireworks.js";
import p34 from "./gemini-cli.js";
import p35 from "./gemini.js";
import p36 from "./github.js";
import p37 from "./gitlab.js";
import p38 from "./glm-cn.js";
import p39 from "./glm.js";
import p40 from "./google-pse.js";
import p41 from "./google-tts.js";
import p42 from "./grok-cli.js";
import p43 from "./grok-web.js";
import p44 from "./groq.js";
import p45 from "./huggingface.js";
import p46 from "./hyperbolic.js";
import p47 from "./iflow.js";
import p48 from "./inworld.js";
import p49 from "./jina-ai.js";
import p50 from "./jina-reader.js";
import p51 from "./kilocode.js";
import p52 from "./kimchi.js";
import p53 from "./kimi.js";
import p54 from "./kiro.js";
import p55 from "./linkup.js";
import p56 from "./local-device.js";
import p57 from "./mimo-free.js";
import p58 from "./minimax-cn.js";
import p59 from "./minimax.js";
import p60 from "./mistral.js";
import p61 from "./mmf.js";
import p62 from "./nanobanana.js";
import p63 from "./nebius.js";
import p64 from "./nvidia.js";
import p65 from "./ollama-local.js";
import p66 from "./ollama.js";
import p123 from "./ollama-search.js";
import p67 from "./openai.js";
import p68 from "./opencode-go.js";
import p68z from "./opencode-zen.js";
import p69 from "./opencode.js";
import p70 from "./openrouter.js";
import p71 from "./perplexity-web.js";
import p72 from "./perplexity.js";
import p73 from "./perplexity-agent.js";
import p74 from "./playht.js";
import p75 from "./qoder.js";
import p124 from "./qoder-cn.js";
import p77 from "./recraft.js";
import p78 from "./runwayml.js";
import p79 from "./sdwebui.js";
import p80 from "./searchapi.js";
import p81 from "./searxng.js";
import p82 from "./serper.js";
import p83 from "./siliconflow.js";
import p84 from "./stability-ai.js";
import p85 from "./tavily.js";
import p86 from "./together.js";
import p87 from "./topaz.js";
import p88 from "./tortoise.js";
import p89 from "./venice.js";
import p90 from "./vercel-ai-gateway.js";
import p91 from "./vertex-partner.js";
import p92 from "./vertex.js";
import p93 from "./volcengine-ark.js";
import p94 from "./voyage-ai.js";
import p95 from "./xai.js";
import p96 from "./xiaomi-mimo.js";
import p97 from "./xiaomi-tokenplan.js";
import p98 from "./youcom.js";
import p99 from "./alims-intl.js";
import p100 from "./codebuddy-intl.js";
// Temporarily hidden — no tool calling support (trae SOLO agent / windsurf gRPC skip ToolCallChunk).
// Re-enable by uncommenting both the import and the array entry below.
// import p102 from "./trae.js";
import p103 from "./zed.js";
import p105 from "./api-airforce.js";
import p106 from "./baidu.js";
import p107 from "./bazaarlink.js";
import p108 from "./bluesminds.js";
import p109 from "./kilo-gateway.js";
import p110 from "./llm7.js";
import p111 from "./sambanova.js";
import p112 from "./tencent.js";
import p113 from "./morph.js";
// import p114 from "./devin-cli.js";
// import p104 from "./windsurf.js";
import p115 from "./poolside.js";
import p116 from "./tokenrouter.js";
import p117 from "./selfhosted-stt.js";
import p118 from "./selfhosted-tts.js";
import p119 from "./selfhosted-embedding.js";
import p120 from "./fish-audio.js";
import p121 from "./alitp-intl.js";
import p122 from "./xquik.js";
import p2 from "./alims-intl.js";
import p3 from "./alitp-intl.js";
import p4 from "./anthropic.js";
import p5 from "./antigravity.js";
import p6 from "./api-airforce.js";
import p7 from "./assemblyai.js";
import p8 from "./aws-polly.js";
import p9 from "./azure.js";
import p10 from "./baidu.js";
import p11 from "./bazaarlink.js";
import p12 from "./black-forest-labs.js";
import p13 from "./blackbox.js";
import p14 from "./bluesminds.js";
import p15 from "./brave-search.js";
import p16 from "./byteplus.js";
import p17 from "./cartesia.js";
import p18 from "./cerebras.js";
import p19 from "./chutes.js";
import p20 from "./claude.js";
import p21 from "./cline.js";
import p22 from "./clinepass.js";
import p23 from "./cloudflare-ai.js";
import p24 from "./codebuddy-cn.js";
import p25 from "./codebuddy-intl.js";
import p26 from "./codex.js";
import p27 from "./cohere.js";
import p28 from "./comfyui.js";
import p29 from "./commandcode.js";
import p30 from "./coqui.js";
import p31 from "./cursor.js";
import p32 from "./deepgram.js";
import p33 from "./deepseek.js";
import p34 from "./edge-tts.js";
import p35 from "./elevenlabs.js";
import p36 from "./exa.js";
import p37 from "./fal-ai.js";
import p38 from "./featherless.js";
import p39 from "./firecrawl.js";
import p40 from "./fireworks.js";
import p41 from "./fish-audio.js";
import p42 from "./freebuff.js";
import p43 from "./gemini-cli.js";
import p44 from "./gemini.js";
import p45 from "./github.js";
import p46 from "./gitlab.js";
import p47 from "./glm-cn.js";
import p48 from "./glm.js";
import p49 from "./google-pse.js";
import p50 from "./google-tts.js";
import p51 from "./grok-cli.js";
import p52 from "./grok-web.js";
import p53 from "./groq.js";
import p54 from "./huggingface.js";
import p55 from "./hyperbolic.js";
import p56 from "./iflow.js";
import p57 from "./inworld.js";
import p58 from "./jina-ai.js";
import p59 from "./jina-reader.js";
import p60 from "./kilo-gateway.js";
import p61 from "./kilocode.js";
import p62 from "./kimchi.js";
import p63 from "./kimi.js";
import p64 from "./kiro.js";
import p65 from "./linkup.js";
import p66 from "./llm7.js";
import p67 from "./local-device.js";
import p68 from "./mimo-free.js";
import p69 from "./minimax-cn.js";
import p70 from "./minimax.js";
import p71 from "./mistral.js";
import p72 from "./mmf.js";
import p73 from "./morph.js";
import p74 from "./nanobanana.js";
import p75 from "./nebius.js";
import p76 from "./nvidia.js";
import p77 from "./ollama-local.js";
import p78 from "./ollama-search.js";
import p79 from "./ollama.js";
import p80 from "./openai.js";
import p81 from "./opencode-go.js";
import p82 from "./opencode-zen.js";
import p83 from "./opencode.js";
import p84 from "./openrouter.js";
import p85 from "./perplexity-agent.js";
import p86 from "./perplexity-web.js";
import p87 from "./perplexity.js";
import p88 from "./playht.js";
import p89 from "./poolside.js";
import p90 from "./qoder-cn.js";
import p91 from "./qoder.js";
import p92 from "./recraft.js";
import p93 from "./runwayml.js";
import p94 from "./sambanova.js";
import p95 from "./sdwebui.js";
import p96 from "./searchapi.js";
import p97 from "./searxng.js";
import p98 from "./selfhosted-embedding.js";
import p99 from "./selfhosted-stt.js";
import p100 from "./selfhosted-tts.js";
import p101 from "./serper.js";
import p102 from "./siliconflow.js";
import p103 from "./stability-ai.js";
import p104 from "./tavily.js";
import p105 from "./tencent.js";
import p106 from "./together.js";
import p107 from "./tokenrouter.js";
import p108 from "./topaz.js";
import p109 from "./tortoise.js";
import p110 from "./venice.js";
import p111 from "./vercel-ai-gateway.js";
import p112 from "./vertex-partner.js";
import p113 from "./vertex.js";
import p114 from "./volcengine-ark.js";
import p115 from "./voyage-ai.js";
import p116 from "./xai.js";
import p117 from "./xiaomi-mimo.js";
import p118 from "./xiaomi-tokenplan.js";
import p119 from "./xquik.js";
import p120 from "./youcom.js";
import p121 from "./zed.js";
export default [
p0,
p1,
@@ -193,11 +190,8 @@ export default [
p64,
p65,
p66,
p123,
p124,
p67,
p68,
p68z,
p69,
p70,
p71,
@@ -205,6 +199,7 @@ export default [
p73,
p74,
p75,
p76,
p77,
p78,
p79,
@@ -229,8 +224,10 @@ export default [
p98,
p99,
p100,
// p102, // trae — hidden, no tool calling
p101,
p102,
p103,
p104,
p105,
p106,
p107,
@@ -240,8 +237,7 @@ export default [
p111,
p112,
p113,
// p114, // devin-cli — hidden, spawns local agent with shell/fs access
// p104, // windsurf — hidden, no tool calling
p114,
p115,
p116,
p117,
@@ -249,5 +245,4 @@ export default [
p119,
p120,
p121,
p122,
];