free-coding-models 0.5.25 → 0.5.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
 
7
7
  <p align="center">
8
8
  <strong>Find the fastest free coding model in seconds</strong><br>
9
- Track ~153 models across 16 trusted free or free-limited AI providers in real time<br><br>
9
+ Track ~191 models across 20 trusted free or free-limited AI providers in real time<br><br>
10
10
  <strong>Install Free API endpoints to your favorite AI coding tools:</strong><br>
11
- OpenCode CLI / Desktop / WebUI, OpenClaw, Crush, Goose, Aider, Kilo CLI, Qwen Code, OpenHands, Amp, Hermes, Continue, Cline, Xcode, Pi, Rovo, Gemini and more...<br><br>
11
+ OpenCode CLI / Desktop / WebUI, OpenClaw, Crush, Goose, Aider, Kilo CLI, Qwen Code, OpenHands, Amp, Hermes, Continue, Cline, Xcode, Pi and more...<br><br>
12
12
  <strong>Use Kimi K2, DeepSeek V3, GPT-OSS, Qwen3, MiniMax M3, GLM, Llama 4, Gemma 4, Devstral and more — for free</strong>
13
13
  </p>
14
14
 
@@ -16,8 +16,8 @@
16
16
  <img src="https://img.shields.io/npm/v/free-coding-models?color=3d6b00&label=npm&logo=npm" alt="npm version" width="200"><br>
17
17
  <img src="https://img.shields.io/node/v/free-coding-models?color=3d6b00&logo=node.js" alt="node version" width="200"><br>
18
18
  <img src="https://img.shields.io/npm/l/free-coding-models?color=3d6b00" alt="license" width="200"><br>
19
- <img src="https://img.shields.io/badge/models-154+-3d6b00?logo=nvidia" alt="models count" width="200"><br>
20
- <img src="https://img.shields.io/badge/providers-16-1a56db" alt="providers count" width="200">
19
+ <img src="https://img.shields.io/badge/models-191-3d6b00?logo=nvidia" alt="models count" width="200"><br>
20
+ <img src="https://img.shields.io/badge/providers-20-1a56db" alt="providers count" width="200">
21
21
  </p>
22
22
 
23
23
  ```bash
@@ -59,7 +59,7 @@ free-coding-models
59
59
 
60
60
  ## 💡 Why this tool?
61
61
 
62
- There are **~153 cataloged free or free-limited coding models** across 16 vetted providers. Which one is fastest right now? Which one is actually stable versus just lucky on the last ping?
62
+ There are **~191 cataloged free or free-limited coding models** across 20 vetted providers. Which one is fastest right now? Which one is actually stable versus just lucky on the last ping?
63
63
 
64
64
  This CLI pings them all in parallel, shows live latency, and calculates a **live Stability Score (0-100)**. Average latency alone is misleading if a model randomly spikes to 6 seconds; the stability score measures true reliability by combining **p95 latency** (30%), **jitter/variance** (30%), **spike rate** (20%), and **uptime** (20%).
65
65
 
@@ -71,9 +71,9 @@ It then writes the model you pick directly into your coding tool's config — so
71
71
 
72
72
  ### 🟢 List of Free AI Providers
73
73
 
74
- Create a free account on one provider below to get started:
74
+ Create a free account on one provider below to get started. A few providers (`Kilo`, `LLM7`, OVHcloud sandbox) can also answer without a key, with tighter shared limits.
75
75
 
76
- **~153 coding models** across 16 active providers, ranked by practical free-tier usefulness.
76
+ **~191 coding models** across 20 active providers, ranked by practical free-tier usefulness.
77
77
 
78
78
  | # | Provider | Models | Tier range | Free tier | Env var |
79
79
  |---|----------|--------|-----------|-----------|--------|
@@ -83,7 +83,7 @@ Create a free account on one provider below to get started:
83
83
  | 4 | [Google AI Studio](https://aistudio.google.com/apikey) | 7 | S+ → A | Gemini free quotas vary by model/region | `GOOGLE_API_KEY` |
84
84
  | 5 | [GitHub Models](https://models.github.ai) | 15 | S+ → C | Quota depends on GitHub/Copilot tier | `GITHUB_TOKEN` |
85
85
  | 6 | [Mistral La Plateforme](https://console.mistral.ai/api-keys) | 5 | S+ → A | Experiment plan, free evaluation tier | `MISTRAL_API_KEY` |
86
- | 7 | [Cloudflare Workers AI](https://dash.cloudflare.com) | 13 | S+ → B | 10K neurons/day, 300 RPM (no credit card) | `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID` |
86
+ | 7 | [Cloudflare Workers AI](https://dash.cloudflare.com) | 16 | S+ → B | 10K neurons/day, 300 RPM (no credit card) | `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID` |
87
87
  | 8 | [OpenRouter](https://openrouter.ai/keys) | 24 | S+ → C | 50 req/day free, 1K/day with $10 spend | `OPENROUTER_API_KEY` |
88
88
  | 9 | [SambaNova](https://cloud.sambanova.ai/apis) | 7 | S+ → B+ | Small developer quota, useful for light usage | `SAMBANOVA_API_KEY` |
89
89
  | 10 | [OVHcloud AI Endpoints](https://endpoints.ai.cloud.ovh.net) | 10 | S → B | 2 req/min/IP free, 400 RPM with key | `OVH_AI_ENDPOINTS_ACCESS_TOKEN` |
@@ -91,12 +91,16 @@ Create a free account on one provider below to get started:
91
91
  | 12 | [ZAI](https://z.ai) | 2 | S | Free Flash models only | `ZAI_API_KEY` |
92
92
  | 13 | [Scaleway](https://console.scaleway.com/iam/api-keys) | 10 | S+ → B | 1M free tokens | `SCALEWAY_API_KEY` |
93
93
  | 14 | [Alibaba DashScope](https://modelstudio.console.alibabacloud.com) | 11 | S+ → A+ | 1M free tokens/model, Singapore, 90 days | `DASHSCOPE_API_KEY` |
94
- | 15 | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | 7 | S+ → A | 1,000 req/day with personal Google account | CLI tool |
95
- | 16 | [OpenCode Zen](https://opencode.ai/zen) | 6 | S+ → A | Free with OpenCode account | Zen models |
94
+ | 15 | [OpenCode Zen](https://opencode.ai/zen) | 5 | S+ → A | Free with OpenCode account | Zen models |
95
+ | 16 | [Kilo](https://kilo.ai) | 1 | A+ | Free auto-router works without a key | optional `KILO_API_KEY` |
96
+ | 17 | [LLM7](https://llm7.io) | 4 | S+ → B+ | Shared free tier, optional free token | optional `LLM7_API_KEY` |
97
+ | 18 | [Routeway](https://routeway.ai) | 15 | S+ → C | Explicit `:free` zero-price models | `ROUTEWAY_API_KEY` |
98
+ | 19 | [Novita AI](https://novita.ai) | 4 | S+ → S | Only zero-price live chat models included | `NOVITA_API_KEY` |
99
+ | 20 | [Ollama Cloud](https://ollama.com/pricing) | 17 | S+ → A | Free cloud usage with session/weekly limits | `OLLAMA_API_KEY` |
96
100
 
97
101
  > 💡 One key is enough. Add more at any time with **`P`** inside the TUI.
98
102
 
99
- > 🧹 Audit cleanup: `iFlow` was removed because it shut down on April 17, 2026. `Together AI`, `Perplexity API`, `DeepInfra`, `Replicate`, `Fireworks`, `Hyperbolic`, `Hugging Face`, `SiliconFlow`, `Chutes AI`, and `Rovo` were removed from the active free catalog because they are paid, trial-credit only, too tiny to be useful, unclear as a stable free API, or tool-specific rather than a generally usable free provider.
103
+ > 🧹 Audit cleanup: `iFlow` was removed because it shut down on April 17, 2026. `Together AI`, `Perplexity API`, `DeepInfra`, `Replicate`, `Fireworks`, `Hyperbolic`, `Hugging Face`, `SiliconFlow`, `Chutes AI` were removed from the active free catalog because they are paid, trial-credit only, too tiny to be useful, unclear as a stable free API, or tool-specific rather than a generally usable free provider. `Rovo` and `Gemini CLI` were also wiped out as tool integrations (CLI-only, not generally usable free providers).
100
104
 
101
105
  ---
102
106
 
@@ -425,8 +429,6 @@ Routing behavior:
425
429
  | `--cline` | 🧠 Cline |
426
430
  | `--xcode` | 🛠️ Xcode Intelligence |
427
431
  | `--pi` | π Pi |
428
- | `--rovo` | 🦘 Rovo Dev CLI |
429
- | `--gemini` | ♊ Gemini CLI |
430
432
  | `--copilot` | 🤖 Copilot CLI |
431
433
  | `--forgecode` | 🔥 ForgeCode |
432
434
 
@@ -434,22 +436,6 @@ Press **`Z`** in the TUI to cycle between tools without restarting.
434
436
 
435
437
  ### CLI-Only Tools
436
438
 
437
- **🦘 Rovo Dev CLI**
438
- - Provider: [Atlassian Rovo](https://www.atlassian.com/rovo)
439
- - Install: [Installation Guide](https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/)
440
- - Free tier: conditional Atlassian/Rovo allowance, not a general free API provider
441
- - Catalog status: not included in the active free-provider table because access depends on Rovo availability for your account/site
442
- - Launch: `free-coding-models --rovo` or press `Z` until Rovo mode
443
- - Features: Jira/Confluence integration, MCP server support
444
-
445
- **♊ Gemini CLI**
446
- - Provider: [Google Gemini](https://github.com/google-gemini/gemini-cli)
447
- - Install: `npm install -g @google/gemini-cli`
448
- - Free tier: 1,000 requests/day (personal Google account, no credit card)
449
- - Models: Gemini 3.1 Pro Preview, Gemini 3 Flash Preview, Gemini 2.5 Pro, Gemini 2.5 Flash
450
- - Launch: `free-coding-models --gemini` or press `Z` until Gemini mode
451
- - Features: OpenAI-compatible API support, MCP server support, Google Search grounding
452
-
453
439
  **Note:** When launching these tools via `Z` key or command palette, if the current mode doesn't match the tool, you'll see a confirmation alert asking to switch to the correct tool before launching.
454
440
 
455
441
  ### OpenCode Zen Free Models
@@ -472,10 +458,8 @@ When a tool mode is active (via `Z`), models incompatible with that tool are hig
472
458
 
473
459
  | Model Type | Compatible Tools |
474
460
  |------------|-----------------|
475
- | Regular (NVIDIA, Groq, etc.) | All tools except 🦘 Rovo and ♊ Gemini |
476
- | Rovo | 🦘 Rovo Dev CLI only |
477
- | Gemini | ♊ Gemini CLI only |
478
- | OpenCode Zen | 📦 OpenCode CLI and 📦 OpenCode Desktop only |
461
+ | Regular (NVIDIA, Groq, etc.) | All tools |
462
+ | OpenCode Zen | All tools (OpenAI-compatible endpoint) |
479
463
 
480
464
  → **[Full flags reference](./docs/flags.md)**
481
465
 
@@ -534,7 +518,7 @@ When a tool mode is active (via `Z`), models incompatible with that tool are hig
534
518
 
535
519
  ## ✨ Features
536
520
 
537
- - **Parallel pings** — all ~165 API/Zen-callable models tested simultaneously via native `fetch` (~170 total cataloged models including CLI-only Gemini rows)
521
+ - **Parallel pings** — all ~191 API/Zen-callable models tested simultaneously via native `fetch`
538
522
  - **AI benchmark columns** — `Ctrl+A` benchmarks the selected model, `Ctrl+U` benchmarks visible models, and results split cleanly into **AI Latency** plus **TPS**. Settings includes an opt-in **Startup AI Speed Scan** toggle to run the global benchmark automatically after launch.
539
523
  - **Tiny verdict indicator** — the first `❔` column mirrors the full Verdict as a compact emoji (`🟩`, `🟢`, `🟡`, `🟠`, etc.) and sorts by the same verdict order.
540
524
  - **Adaptive monitoring** — 2s burst for 60s → 10s normal → 30s idle
@@ -724,8 +708,6 @@ Telemetry is enabled by default and can be disabled with any of the following:
724
708
  | IDE | Free tier | Credit card |
725
709
  |-----|-----------|-------------|
726
710
  | [Qwen Code](https://github.com/QwenLM/qwen-code) | 2,000 requests/day | No |
727
- | [Rovo Dev CLI](https://www.atlassian.com/rovo) | Conditional Atlassian/Rovo allowance | No |
728
- | [Gemini CLI](https://github.com/google-gemini/gemini-cli) | 1,000 requests/day | No |
729
711
  | [Jules](https://jules.google/) | 15 tasks/day | No |
730
712
  | [AWS Kiro](https://kiro.dev/) | 50 credits/month | No |
731
713
  | [Trae](https://trae.ai/) | 10 fast + 50 slow requests/month | No |
@@ -0,0 +1,21 @@
1
+ # Changelog v0.5.26 - 2026-06-11
2
+
3
+ ### Removed
4
+ - **Gemini CLI** wiped out as a tool integration across the entire stack (TUI cycle `Z`, command palette, theme, key handler, provider metadata, tool bootstrap, tool launchers, benchmark, endpoint installer, audit state, docker-compose, docs)
5
+ - **Rovo Dev CLI** wiped out the same way — block removed from `tool-metadata.js`, `tool-bootstrap.js`, `provider-metadata.js`, `tool-launchers.js` (incl. `writeRovoConfig`), `benchmark.js`, `endpoint-installer.js`, `utils.js`, `command-palette.js`, `theme.js`, `key-handler.js`, `app.js`, plus the `--rovo` CLI flag
6
+ - Both removed from the website's social proof bar (`Gemini CLI` and `Rovo Dev` chips)
7
+ - `cliOnly` tool concept collapsed — no remaining CLI-only providers, so `getCompatibleTools` simplified to return `REGULAR_TOOLS` for both `regular` and `opencode-zen`
8
+
9
+ ### Changed
10
+ - `sources.js` JSDoc `@exports` no longer lists the stale `gemini` provider
11
+ - `audit_state.json` clone entry `gemini` removed (was a fingerprint duplicate of `googleai`)
12
+ - `.pi/skills/update_models/SKILL.md`: `googleai` audit diff now applies directly to `sources.js` (no more `gemini` clone)
13
+ - `docker-compose.yml`: dead `GEMINI_API_KEY` env var removed (not referenced anywhere in code)
14
+ - `README.md`: tool list, compatibility table, IDE table, model count all updated
15
+ - `tui/overlays.js` `Z` cycle help: `🦘 Rovo → ♊ Gemini` segment dropped
16
+
17
+ ### Tests
18
+ - `tool compatibility matrix` test suite updated: removed 5 rovo/gemini-specific assertions, kept Zen compatibility coverage
19
+ - `sortResultsWithPinnedFavorites` mock data swapped from `rovo` fixtures to `caveman` fixtures (caveman is also cliOnly-equivalent for sort order testing)
20
+ - `benchmarkModel` no longer has a `providerKey === 'rovo'` UNSUPPORTED guard test (guard itself was removed with the wipeout)
21
+ - 520/520 tests pass after refactor
@@ -0,0 +1,15 @@
1
+ # Changelog v0.5.27 - 2026-06-11
2
+
3
+ ### Added
4
+ - Added five newly audited free/free-limited providers discovered from `apmantza/pi-free`: Kilo, LLM7, Routeway, Novita AI, and Ollama Cloud.
5
+ - Added 41 coding-capable API models from those providers, keeping only no-key/free-router models, explicit `:free` zero-price Routeway models, zero-price Novita chat models, and coding-relevant Ollama Cloud models.
6
+ - Added provider metadata, environment-variable support, quota behavior, Settings key-test endpoints, no-key provider handling, and TUI colors for the new providers.
7
+ - Added 💰 billing/credits warnings in TUI Settings, first-run setup, and Web Settings for providers that require paid credits or trial-credit-style accounts despite exposing free/free-tagged models.
8
+
9
+ ### Changed
10
+ - Updated README model/provider counts to 191 models across 20 providers and documented the new providers in the main provider table.
11
+ - Improved first-run setup wording from “Free key” to “Signup/key page” so paid/trial-credit providers are not misleading.
12
+ - Exposed provider billing metadata through the Web Dashboard config API so the desktop/web surface can render the same paid-provider warnings as the TUI.
13
+
14
+ ### Fixed
15
+ - Fixed first-run usability for keyless providers by allowing Kilo and LLM7 to count as usable providers without forcing the API key wizard.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "free-coding-models",
3
- "version": "0.5.25",
3
+ "version": "0.5.27",
4
4
  "description": "Find the fastest coding LLM models in seconds — ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
5
5
  "keywords": [
6
6
  "nvidia",
package/sources.js CHANGED
@@ -29,7 +29,7 @@
29
29
  * 📖 Secondary: https://swe-rebench.com (independent evals, scores are lower)
30
30
  * 📖 Leaderboard tracker: https://www.marc0.dev/en/leaderboard
31
31
  *
32
- * @exports nvidiaNim, groq, cerebras, sambanova, openrouter, githubModels, mistral, codestral, scaleway, googleai, zai, qwen, cloudflare, ovhcloud, gemini, opencodeZen — model arrays per active provider
32
+ * @exports nvidiaNim, groq, cerebras, sambanova, openrouter, githubModels, mistral, codestral, scaleway, googleai, zai, qwen, cloudflare, ovhcloud, opencodeZen, kilo, llm7, routeway, novita, ollamaCloud — model arrays per active provider
33
33
  * @exports sources — map of active free/free-limited providers, each with { name, url, models }
34
34
 
35
35
  * @exports MODELS — flat array of [modelId, label, tier, sweScore, ctx, providerKey]
@@ -339,25 +339,7 @@ export const ovhcloud = [
339
339
  // Fix (2026-05-26): Qwen3.5-9B ctx 128k→262k, Mistral-Small ctx 131k→128k, Mistral-Nemo ctx 128k→118k, Mistral-7B ctx 32k→127k
340
340
  ]
341
341
 
342
- // 📖 Gemini CLI source - https://github.com/google-gemini/gemini-cli
343
- // 📖 CLI tool with OpenAI-compatible API support
344
- // 📖 Install: npm install -g @google/gemini-cli
345
- // 📖 Free tier: 1,000 req/day with personal Google account (no credit card)
346
- // 📖 Models track Google AI Studio IDs; no stale google/ prefix.
347
- // 📖 Supports custom OpenAI-compatible providers via GEMINI_API_BASE_URL
348
- export const gemini = [
349
- ['gemini-3.5-flash', 'Gemini 3.5 Flash', 'S+', '-', '1M'],
350
- ['gemini-3.1-pro-preview', 'Gemini 3.1 Pro Preview', 'S+', '78.0%', '1M'],
351
- ['gemini-3-flash-preview', 'Gemini 3 Flash Preview', 'S', '65.0%', '1M'],
352
- ['gemini-3.1-flash-lite', 'Gemini 3.1 Flash Lite', 'A+', '55.0%', '1M'],
353
- // ⚠️ DEPRECATED — shutdown Oct 16, 2026
354
- ['gemini-2.5-pro', 'Gemini 2.5 Pro', 'S+', '63.2%', '1M'],
355
- // ⚠️ DEPRECATED — shutdown Oct 16, 2026
356
- ['gemini-2.5-flash', 'Gemini 2.5 Flash', 'A+', '50.0%', '1M'],
357
- // ⚠️ DEPRECATED — shutdown Oct 16, 2026
358
- ['gemini-2.5-flash-lite', 'Gemini 2.5 Flash Lite', 'A', '42.0%', '1M'],
359
- // Removed (2026-05-26): gemini-3.1-flash-lite-preview (endpoint shutdown May 25, 2026)
360
- ]
342
+
361
343
 
362
344
  // 📖 OpenCode Zen free models — hosted AI gateway accessed through OpenCode CLI/Desktop
363
345
  // 📖 Endpoint: https://opencode.ai/zen/v1/... — requires OpenCode Zen API key
@@ -381,6 +363,76 @@ export const opencodeZen = [
381
363
  // Added (2026-06-01): minimax-m3-free — MiniMax M3, 1M context, MSA attention (SWE-Bench Pro 59.0%)
382
364
  ]
383
365
 
366
+ // 📖 Kilo source - https://api.kilo.ai/api/gateway
367
+ // 📖 OpenAI-compatible gateway. `kilo-auto/free` works without a key and routes to Kilo's current free model pool.
368
+ // 📖 Keep only the stable router model here; individual promo `:free` models churn too quickly.
369
+ export const kilo = [
370
+ ['kilo-auto/free', 'Kilo Auto Free', 'A+', '-', '256k'],
371
+ ]
372
+
373
+ // 📖 LLM7 source - https://api.llm7.io/v1
374
+ // 📖 Free unauthenticated tier works with tight shared limits; optional free token at https://token.llm7.io
375
+ // 📖 Pro-tagged models from /v1/models are intentionally excluded.
376
+ export const llm7 = [
377
+ ['qwen3-235b', 'Qwen3 235B', 'S+', '70.0%', '240k'],
378
+ ['mistral-small-3.2', 'Mistral Small 3.2', 'B+', '34.0%', '128k'],
379
+ ['codestral-latest', 'Codestral Latest', 'B+', '34.0%', '32k'],
380
+ ['devstral-small-2:24b', 'Devstral Small 2', 'A', '-', '128k'],
381
+ ]
382
+
383
+ // 📖 Routeway source - https://api.routeway.ai/v1/models
384
+ // 📖 OpenAI-compatible gateway with explicit zero-price `:free` chat models.
385
+ // 📖 Live catalog checked 2026-06-11; only chat-completions models with free pricing are listed.
386
+ export const routeway = [
387
+ ['deepseek-v4-flash:free', 'DeepSeek V4 Flash', 'S+', '72.0%', '1M'],
388
+ ['step-3.5-flash:free', 'Step 3.5 Flash', 'S+', '74.4%', '256k'],
389
+ ['ling-2.6-flash:free', 'Ling 2.6 Flash', 'S', '-', '262k'],
390
+ ['gpt-oss-120b:free', 'GPT OSS 120B', 'S', '60.0%', '131k'],
391
+ ['minimax-m2:free', 'MiniMax M2', 'S', '-', '197k'],
392
+ ['laguna-m.1:free', 'Poolside Laguna M.1', 'S+', '-', '131k'],
393
+ ['laguna-xs.2:free', 'Poolside Laguna XS.2','S+', '-', '131k'],
394
+ ['gemma-4-31b-it:free', 'Gemma 4 31B', 'A', '45.0%', '262k'],
395
+ ['nemotron-3-nano-30b-a3b:free', 'Nemotron Nano 30B', 'A', '43.0%', '256k'],
396
+ ['llama-3.3-70b-instruct:free', 'Llama 3.3 70B', 'A-', '39.5%', '131k'],
397
+ ['mistral-nemo-instruct:free', 'Mistral Nemo', 'B+', '30.0%', '16k'],
398
+ ['nemotron-nano-9b-v2:free', 'Nemotron Nano 9B', 'B+', '18.0%', '128k'],
399
+ ['llama-3.1-8b-instruct:free', 'Llama 3.1 8B', 'B', '28.8%', '16k'],
400
+ ['llama-3.2-3b-instruct:free', 'Llama 3.2 3B', 'B', '20.0%', '16k'],
401
+ ['llama-3.2-1b-instruct:free', 'Llama 3.2 1B', 'C', '-', '16k'],
402
+ ]
403
+
404
+ // 📖 Novita AI source - https://api.novita.ai/openai/v1/models
405
+ // 📖 Novita is mostly paid/trial-credit, so this catalog only includes live chat models reporting 0 input/output price.
406
+ // 📖 Test/dev/placeholder zero-price IDs were intentionally excluded.
407
+ export const novita = [
408
+ ['qwen/qwen3.6-plus', 'Qwen3.6 Plus', 'S+', '72.0%', '1M'],
409
+ ['qwen/qwen3.5-plus', 'Qwen3.5 Plus', 'S', '68.0%', '1M'],
410
+ ['nex-agi/nex-n2-pro', 'Nex N2 Pro', 'S', '-', '262k'],
411
+ ['minimax/m2-her', 'MiniMax M2 HER', 'S', '-', '32k'],
412
+ ]
413
+
414
+ // 📖 Ollama Cloud source - https://ollama.com/pricing and https://ollama.com/v1/models
415
+ // 📖 Free plan includes cloud model access with session/weekly limits. This list keeps coding-relevant cloud models only.
416
+ export const ollamaCloud = [
417
+ ['minimax-m2.7', 'MiniMax M2.7', 'S+', '80.2%', '200k'],
418
+ ['glm-5.1', 'GLM 5.1', 'S+', '77.8%', '203k'],
419
+ ['kimi-k2.6', 'Kimi K2.6', 'S+', '76.8%', '131k'],
420
+ ['deepseek-v4-pro', 'DeepSeek V4 Pro', 'S+', '73.1%', '1M'],
421
+ ['deepseek-v4-flash', 'DeepSeek V4 Flash', 'S+', '72.0%', '1M'],
422
+ ['devstral-2:123b', 'Devstral 2 123B', 'S+', '72.2%', '200k'],
423
+ ['qwen3-coder:480b', 'Qwen3 Coder 480B', 'S+', '70.6%', '256k'],
424
+ ['nemotron-3-ultra', 'Nemotron 3 Ultra', 'S+', '-', '1M'],
425
+ ['glm-4.7', 'GLM 4.7', 'S+', '73.8%', '128k'],
426
+ ['qwen3.5:397b', 'Qwen3.5 397B', 'S', '68.0%', '128k'],
427
+ ['qwen3-coder-next', 'Qwen3 Coder Next', 'S', '65.0%', '256k'],
428
+ ['gpt-oss:120b', 'GPT OSS 120B', 'S', '60.0%', '128k'],
429
+ ['minimax-m3', 'MiniMax M3', 'S', '59.0%', '1M'],
430
+ ['mistral-large-3:675b', 'Mistral Large 3', 'A+', '58.0%', '256k'],
431
+ ['nemotron-3-super', 'Nemotron 3 Super', 'A+', '56.0%', '128k'],
432
+ ['gemma4:31b', 'Gemma 4 31B', 'A', '45.0%', '256k'],
433
+ ['gpt-oss:20b', 'GPT OSS 20B', 'A', '42.0%', '128k'],
434
+ ]
435
+
384
436
  // 📖 All sources combined - used by the main script
385
437
  // 📖 Each source has: name (display), url (API endpoint), models (array of model tuples)
386
438
  // 📖 Providers ordered by generosity of free tier (most generous first)
@@ -456,21 +508,40 @@ export const sources = {
456
508
  url: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',
457
509
  models: qwen,
458
510
  },
459
- gemini: {
460
- name: 'Gemini CLI',
461
- url: null, // CLI tool - no API endpoint (can use OpenAI-compatible via env)
462
- models: gemini,
463
- cliOnly: true,
464
- installUrl: 'https://github.com/google-gemini/gemini-cli',
465
- binary: 'gemini',
466
- checkArgs: ['--version'],
467
- },
511
+
468
512
  'opencode-zen': {
469
513
  name: 'OpenCode Zen',
470
514
  url: 'https://opencode.ai/zen/v1/chat/completions',
471
515
  models: opencodeZen,
472
516
  zenOnly: true,
473
517
  },
518
+ kilo: {
519
+ name: 'Kilo',
520
+ url: 'https://api.kilo.ai/api/gateway/chat/completions',
521
+ models: kilo,
522
+ noKeyNeeded: true,
523
+ },
524
+ llm7: {
525
+ name: 'LLM7',
526
+ url: 'https://api.llm7.io/v1/chat/completions',
527
+ models: llm7,
528
+ noKeyNeeded: true,
529
+ },
530
+ routeway: {
531
+ name: 'Routeway',
532
+ url: 'https://api.routeway.ai/v1/chat/completions',
533
+ models: routeway,
534
+ },
535
+ novita: {
536
+ name: 'Novita AI',
537
+ url: 'https://api.novita.ai/openai/v1/chat/completions',
538
+ models: novita,
539
+ },
540
+ 'ollama-cloud': {
541
+ name: 'Ollama Cloud',
542
+ url: 'https://ollama.com/v1/chat/completions',
543
+ models: ollamaCloud,
544
+ },
474
545
  }
475
546
 
476
547
  // 📖 Flatten all models from all sources — each entry includes providerKey as 6th element
@@ -257,16 +257,6 @@ async function benchmarkSingleAttempt({ apiKey, modelId, providerKey, url, timeo
257
257
  // 📖 Returns on failure (all attempts exhausted):
258
258
  // 📖 { ok: false, code, totalMs, error, retries }
259
259
  export async function benchmarkModel({ apiKey, modelId, providerKey, url, timeoutMs = BENCHMARK_TIMEOUT_MS, maxRetries = BENCHMARK_MAX_RETRIES, retryDelayMs = BENCHMARK_RETRY_DELAY_MS }) {
260
- // 📖 Guard: unsupported providers that don't do chat completions
261
- if (providerKey === 'rovo' || providerKey === 'gemini' || providerKey === 'opencode-zen') {
262
- return {
263
- ok: false,
264
- code: 'UNSUPPORTED',
265
- totalMs: 0,
266
- error: 'Provider does not support chat completions',
267
- retries: 0,
268
- }
269
- }
270
260
 
271
261
  let lastResult = null
272
262
 
@@ -132,9 +132,13 @@ const ENV_VARS = {
132
132
  cloudflare: ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_API_KEY'],
133
133
  qwen: 'DASHSCOPE_API_KEY',
134
134
  zai: 'ZAI_API_KEY',
135
- gemini: 'GEMINI_API_KEY',
136
135
  ovhcloud: 'OVH_AI_ENDPOINTS_ACCESS_TOKEN',
137
136
  'opencode-zen': 'OPENCODE_ZEN_API_KEY',
137
+ kilo: ['KILO_API_KEY', 'KILO_TOKEN'],
138
+ llm7: 'LLM7_API_KEY',
139
+ routeway: 'ROUTEWAY_API_KEY',
140
+ novita: 'NOVITA_API_KEY',
141
+ 'ollama-cloud': 'OLLAMA_API_KEY',
138
142
  }
139
143
 
140
144
  // 📖 Smart Router defaults are intentionally conservative: balanced probing,
@@ -48,10 +48,9 @@ import { getApiKey, saveConfig } from './config.js'
48
48
  import { ENV_VAR_NAMES, PROVIDER_METADATA } from './provider-metadata.js'
49
49
  import { getToolMeta } from './tool-metadata.js'
50
50
 
51
- // 📖 CLI-only providers (rovo, gemini) cannot be installed into other tools — they manage their own auth.
52
51
  // 📖 replicate uses /v1/predictions (not /chat/completions), so it's not OpenAI-compatible.
53
52
  // 📖 zai and opencode-zen ARE OpenAI-compatible and CAN be installed into any tool.
54
- const DIRECT_INSTALL_UNSUPPORTED_PROVIDERS = new Set(['replicate', 'rovo', 'gemini'])
53
+ const DIRECT_INSTALL_UNSUPPORTED_PROVIDERS = new Set(['replicate'])
55
54
  // 📖 Install Endpoints only lists tools whose persisted config shape is actually supported here.
56
55
  // 📖 Launch-only tools stay out: the Web dashboard configures endpoints, it never starts CLIs.
57
56
  const INSTALL_TARGET_MODES = ['opencode', 'opencode-desktop', 'opencode-web', 'openclaw', 'crush', 'goose', 'pi', 'aider', 'qwen', 'openhands', 'amp', 'forgecode', 'fcm_router']
@@ -27,9 +27,9 @@ import { existsSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from
27
27
  import { homedir } from 'node:os'
28
28
  import { join } from 'node:path'
29
29
 
30
- const LEGACY_TOOL_MODES = new Set(['claude-code', 'codex', 'gemini'])
30
+ const LEGACY_TOOL_MODES = new Set(['claude-code', 'codex'])
31
31
  const LEGACY_RUNTIME_FILES = ['daemon.json', 'daemon-stdout.log', 'daemon-stderr.log', 'request-log.jsonl']
32
- const LEGACY_ENV_FILES = ['.fcm-claude-code-env', '.fcm-codex-env', '.fcm-gemini-env']
32
+ const LEGACY_ENV_FILES = ['.fcm-claude-code-env', '.fcm-codex-env']
33
33
 
34
34
  function getDefaultPaths(homeDir) {
35
35
  return {
@@ -8,7 +8,8 @@
8
8
  * This module owns three separate concerns that all relate to "knowing about providers":
9
9
  *
10
10
  * 1. `PROVIDER_METADATA` — human-readable display info (label, colour, signup URL, rate limits)
11
- * used in the setup wizard (`promptApiKey`) and the Settings overlay.
11
+ * used in the setup wizard (`promptApiKey`) and the Settings overlay. Providers that need
12
+ * credits/billing can expose `paidProviderNote`, which Settings renders as a 💰 warning.
12
13
  *
13
14
  * 2. `ENV_VAR_NAMES` — maps providerKey → the environment variable name that carries the API key.
14
15
  * Used when spawning OpenCode child processes so that keys stored only in
@@ -23,6 +24,7 @@
23
24
  *
24
25
  * @exports
25
26
  * PROVIDER_METADATA, ENV_VAR_NAMES, OPENCODE_MODEL_MAP,
27
+ * getProviderBillingNote, getProviderLabelWithBilling,
26
28
  * isWindows, isMac, isLinux
27
29
  *
28
30
  * @see bin/free-coding-models.js — consumes all exports from this module
@@ -52,10 +54,14 @@ export const ENV_VAR_NAMES = {
52
54
  googleai: 'GOOGLE_API_KEY',
53
55
  cloudflare: 'CLOUDFLARE_API_TOKEN',
54
56
  zai: 'ZAI_API_KEY',
55
- gemini: 'GEMINI_API_KEY',
56
57
  ovhcloud: 'OVH_AI_ENDPOINTS_ACCESS_TOKEN',
57
58
  qwen: 'DASHSCOPE_API_KEY',
58
59
  'opencode-zen': 'OPENCODE_ZEN_API_KEY',
60
+ kilo: 'KILO_API_KEY',
61
+ llm7: 'LLM7_API_KEY',
62
+ routeway: 'ROUTEWAY_API_KEY',
63
+ novita: 'NOVITA_API_KEY',
64
+ 'ollama-cloud': 'OLLAMA_API_KEY',
59
65
  }
60
66
 
61
67
  // 📖 OPENCODE_MODEL_MAP: sparse table of model IDs that differ between sources.js and OpenCode's
@@ -71,6 +77,7 @@ export const OPENCODE_MODEL_MAP = {
71
77
  // 📖 `color` is a chalk function for visual distinction in the TUI.
72
78
  // 📖 `signupUrl` / `signupHint` guide users through first-time key generation.
73
79
  // 📖 `rateLimits` gives a quick reminder of the free-tier quota without opening a browser.
80
+ // 📖 `paidProviderNote` marks providers that require credits/billing despite exposing free/trial/free-tagged models.
74
81
  export const PROVIDER_METADATA = {
75
82
  nvidia: {
76
83
  label: 'NVIDIA NIM',
@@ -144,6 +151,7 @@ export const PROVIDER_METADATA = {
144
151
  signupUrl: 'https://deepinfra.com/login',
145
152
  signupHint: 'Login → API keys',
146
153
  rateLimits: 'Free tier: 200 concurrent requests (default)',
154
+ paidProviderNote: 'trial credit provider',
147
155
  },
148
156
  fireworks: {
149
157
  label: 'Fireworks AI',
@@ -158,6 +166,7 @@ export const PROVIDER_METADATA = {
158
166
  signupUrl: 'https://console.mistral.ai/api-keys',
159
167
  signupHint: 'La Plateforme → API keys (MISTRAL_API_KEY; CODESTRAL_API_KEY also works)',
160
168
  rateLimits: 'Codestral free access: 30 req/min, 2000/day',
169
+ paidProviderNote: 'paid - free Experiment plan',
161
170
  },
162
171
  hyperbolic: {
163
172
  label: 'Hyperbolic',
@@ -193,6 +202,7 @@ export const PROVIDER_METADATA = {
193
202
  signupUrl: 'https://api.together.ai/settings/api-keys',
194
203
  signupHint: 'Settings → API keys',
195
204
  rateLimits: 'Credits/promos vary by account (check console)',
205
+ paidProviderNote: 'trial credit provider',
196
206
  },
197
207
  cloudflare: {
198
208
  label: 'Cloudflare Workers AI',
@@ -236,22 +246,6 @@ export const PROVIDER_METADATA = {
236
246
  signupHint: 'Install @mariozechner/pi-coding-agent and set ANTHROPIC_API_KEY',
237
247
  rateLimits: 'Depends on provider subscription (e.g., Anthropic, OpenAI)',
238
248
  },
239
- rovo: {
240
- label: 'Rovo Dev CLI',
241
- color: chalk.rgb(148, 163, 184), // slate blue
242
- signupUrl: 'https://www.atlassian.com/rovo',
243
- signupHint: 'Install ACLI and run: acli rovodev auth login',
244
- rateLimits: 'Free tier: 5M tokens/day (beta, requires Atlassian account)',
245
- cliOnly: true,
246
- },
247
- gemini: {
248
- label: 'Gemini CLI',
249
- color: chalk.rgb(66, 165, 245), // blue
250
- signupUrl: 'https://github.com/google-gemini/gemini-cli',
251
- signupHint: 'Install: npm install -g @google/gemini-cli',
252
- rateLimits: 'Free tier: 1,000 req/day with personal Google account',
253
- cliOnly: true,
254
- },
255
249
  'opencode-zen': {
256
250
  label: 'OpenCode Zen',
257
251
  color: chalk.rgb(139, 92, 246), // violet — distinctive from other providers
@@ -274,4 +268,64 @@ export const PROVIDER_METADATA = {
274
268
  signupHint: 'Manager → Public Cloud → AI Endpoints → API keys (optional: sandbox works without key)',
275
269
  rateLimits: 'Free sandbox: 2 req/min per IP per model (no key). With API key: 400 RPM',
276
270
  },
271
+ kilo: {
272
+ label: 'Kilo',
273
+ color: chalk.rgb(120, 255, 190),
274
+ signupUrl: 'https://kilo.ai',
275
+ signupHint: 'No key needed for kilo-auto/free; optional OAuth/API token unlocks more models',
276
+ rateLimits: 'Free router model works without a key; limits are managed by Kilo',
277
+ noKeyNeeded: true,
278
+ },
279
+ llm7: {
280
+ label: 'LLM7',
281
+ color: chalk.rgb(180, 255, 140),
282
+ signupUrl: 'https://token.llm7.io',
283
+ signupHint: 'Optional: sign in at token.llm7.io for a free token',
284
+ rateLimits: 'Free shared tier without key; optional free token improves quota',
285
+ noKeyNeeded: true,
286
+ },
287
+ routeway: {
288
+ label: 'Routeway',
289
+ color: chalk.rgb(130, 210, 255),
290
+ signupUrl: 'https://routeway.ai',
291
+ signupHint: 'Create account → API key',
292
+ rateLimits: 'Free :free models with an API key; paid models excluded here',
293
+ paidProviderNote: 'paid — has :free models',
294
+ },
295
+ novita: {
296
+ label: 'Novita AI',
297
+ color: chalk.rgb(255, 185, 120),
298
+ signupUrl: 'https://novita.ai/settings/key-management',
299
+ signupHint: 'Settings → Key Management → Create API key',
300
+ rateLimits: 'Only zero-price live chat models are listed; other Novita models are paid/trial-credit',
301
+ paidProviderNote: 'paid — 3 free models',
302
+ },
303
+ 'ollama-cloud': {
304
+ label: 'Ollama Cloud',
305
+ color: chalk.rgb(230, 230, 230),
306
+ signupUrl: 'https://ollama.com/settings/keys',
307
+ signupHint: 'Settings → Keys → Create API key',
308
+ rateLimits: 'Free plan includes cloud access with session + weekly limits',
309
+ },
310
+ }
311
+
312
+ /**
313
+ * 📖 Return the short paid/billing warning note for a provider, formatted for UI display.
314
+ * @param {string} providerKey
315
+ * @returns {string}
316
+ */
317
+ export function getProviderBillingNote(providerKey) {
318
+ const note = PROVIDER_METADATA[providerKey]?.paidProviderNote
319
+ return typeof note === 'string' && note.trim() ? `(${note.trim()})` : ''
320
+ }
321
+
322
+ /**
323
+ * 📖 Return a provider label with a small money marker when credits/billing are required.
324
+ * @param {string} providerKey
325
+ * @param {string} fallbackLabel
326
+ * @returns {string}
327
+ */
328
+ export function getProviderLabelWithBilling(providerKey, fallbackLabel) {
329
+ const label = PROVIDER_METADATA[providerKey]?.label || fallbackLabel || providerKey
330
+ return getProviderBillingNote(providerKey) ? `${label} 💰` : label
277
331
  }
@@ -53,8 +53,12 @@ export const PROVIDER_CAPABILITIES = {
53
53
  // Providers with no reliable quota signal
54
54
  cloudflare: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'daily' },
55
55
  zai: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'none' },
56
- gemini: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'daily' },
57
56
  'opencode-zen': { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'unknown' },
57
+ kilo: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'unknown' },
58
+ llm7: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'rolling' },
59
+ routeway: { telemetryType: 'header', supportsEndpoint: false, usageDisplay: 'percent', resetCadence: 'unknown' },
60
+ novita: { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'unknown' },
61
+ 'ollama-cloud': { telemetryType: 'unknown', supportsEndpoint: false, usageDisplay: 'ok', resetCadence: 'rolling' },
58
62
  }
59
63
 
60
64
  /** Fallback for unrecognized providers */
package/src/core/setup.js CHANGED
@@ -36,7 +36,7 @@
36
36
  import chalk from 'chalk'
37
37
  import { createRequire } from 'module'
38
38
  import { sources } from '../../sources.js'
39
- import { PROVIDER_METADATA } from './provider-metadata.js'
39
+ import { PROVIDER_METADATA, getProviderBillingNote, getProviderLabelWithBilling } from './provider-metadata.js'
40
40
  import { saveConfig } from './config.js'
41
41
 
42
42
  const require = createRequire(import.meta.url)
@@ -62,7 +62,8 @@ export async function promptApiKey(config) {
62
62
  const meta = PROVIDER_METADATA[key] || {}
63
63
  return {
64
64
  key,
65
- label: meta.label || sources[key]?.name || key,
65
+ label: getProviderLabelWithBilling(key, sources[key]?.name || key),
66
+ billingNote: getProviderBillingNote(key),
66
67
  color: meta.color || chalk.white,
67
68
  url: meta.signupUrl || 'https://example.com',
68
69
  hint: meta.signupHint || 'Create API key',
@@ -77,8 +78,8 @@ export async function promptApiKey(config) {
77
78
  })
78
79
 
79
80
  for (const p of providers) {
80
- console.log(` ${p.color('●')} ${chalk.bold(p.label)}`)
81
- console.log(chalk.dim(` Free key at: `) + chalk.cyanBright(p.url))
81
+ console.log(` ${p.color('●')} ${chalk.bold(p.label)}${p.billingNote ? ' ' + chalk.yellow(p.billingNote) : ''}`)
82
+ console.log(chalk.dim(` Signup/key page: `) + chalk.cyanBright(p.url))
82
83
  console.log(chalk.dim(` ${p.hint}`))
83
84
  const answer = await ask(chalk.dim(` Enter key (or Enter to skip): `))
84
85
  console.log()
@@ -227,17 +227,6 @@ export const TOOL_BOOTSTRAP_METADATA = {
227
227
  },
228
228
  },
229
229
  },
230
- rovo: {
231
- binary: 'acli',
232
- docsUrl: 'https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/',
233
- install: {
234
- default: {
235
- shellCommand: 'npm install -g acli',
236
- summary: 'Rovo Dev CLI requires ACLI installation. Visit the documentation for platform-specific instructions.',
237
- note: 'Rovo is an Atlassian tool that requires an Atlassian account with Rovo Dev activated.',
238
- },
239
- },
240
- },
241
230
  'continue': {
242
231
  binary: 'cn',
243
232
  docsUrl: 'https://docs.continue.dev/cli/overview',
@@ -279,17 +268,6 @@ export const TOOL_BOOTSTRAP_METADATA = {
279
268
  win32: 'Hermes Agent does not support native Windows. Use WSL2 instead.',
280
269
  },
281
270
  },
282
- gemini: {
283
- binary: 'gemini',
284
- docsUrl: 'https://github.com/google-gemini/gemini-cli',
285
- install: {
286
- default: {
287
- shellCommand: 'npm install -g @google/gemini-cli',
288
- summary: 'Install Gemini CLI globally via npm.',
289
- note: 'After installation, run `gemini` to authenticate with your Google account.',
290
- },
291
- },
292
- },
293
271
  caveman: {
294
272
  binary: 'caveman',
295
273
  docsUrl: 'https://github.com/JuliusBrussee/caveman-code',