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 +18 -36
- package/changelog/v0.5.26.md +21 -0
- package/changelog/v0.5.27.md +15 -0
- package/package.json +1 -1
- package/sources.js +100 -29
- package/src/core/benchmark.js +0 -10
- package/src/core/config.js +5 -1
- package/src/core/endpoint-installer.js +1 -2
- package/src/core/legacy-proxy-cleanup.js +2 -2
- package/src/core/provider-metadata.js +72 -18
- package/src/core/quota-capabilities.js +5 -1
- package/src/core/setup.js +5 -4
- package/src/core/tool-bootstrap.js +0 -22
- package/src/core/tool-launchers.js +1 -89
- package/src/core/tool-metadata.js +6 -13
- package/src/core/utils.js +2 -6
- package/src/tui/app.js +5 -6
- package/src/tui/command-palette.js +0 -2
- package/src/tui/key-handler.js +11 -21
- package/src/tui/overlays.js +13 -6
- package/src/tui/theme.js +10 -4
- package/src/tui/tui-filters.js +2 -2
- package/web/dist/assets/{index-BaQs4odm.js → index-JUPDB-J-.js} +3 -3
- package/web/dist/index.html +1 -1
- package/web/server.js +4 -0
- package/web/src/components/atoms/ProviderLogo.jsx +0 -1
- package/web/src/components/settings/SettingsView.jsx +4 -4
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 ~
|
|
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
|
|
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-
|
|
20
|
-
<img src="https://img.shields.io/badge/providers-
|
|
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 **~
|
|
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
|
-
**~
|
|
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) |
|
|
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 | [
|
|
95
|
-
| 16 | [
|
|
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
|
|
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
|
|
476
|
-
|
|
|
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 ~
|
|
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.
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/src/core/benchmark.js
CHANGED
|
@@ -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
|
|
package/src/core/config.js
CHANGED
|
@@ -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'
|
|
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'
|
|
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'
|
|
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:
|
|
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(`
|
|
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',
|