free-coding-models 0.3.66 → 0.3.68
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 +111 -12
- package/bin/free-coding-models.js +1 -9
- package/changelog/v0.1.1.md +3 -0
- package/changelog/v0.1.10.md +3 -0
- package/changelog/v0.1.11.md +10 -0
- package/changelog/v0.1.12.md +16 -0
- package/changelog/v0.1.13.md +3 -0
- package/changelog/v0.1.14.md +3 -0
- package/changelog/v0.1.15.md +3 -0
- package/changelog/v0.1.16.md +13 -0
- package/changelog/v0.1.17.md +3 -0
- package/changelog/v0.1.18.md +3 -0
- package/changelog/v0.1.19.md +3 -0
- package/changelog/v0.1.2.md +3 -0
- package/changelog/v0.1.20.md +14 -0
- package/changelog/v0.1.21.md +12 -0
- package/changelog/v0.1.22.md +6 -0
- package/changelog/v0.1.23.md +16 -0
- package/changelog/v0.1.24.md +9 -0
- package/changelog/v0.1.25.md +13 -0
- package/changelog/v0.1.26.md +6 -0
- package/changelog/v0.1.27.md +6 -0
- package/changelog/v0.1.28.md +5 -0
- package/changelog/v0.1.29.md +5 -0
- package/changelog/v0.1.3.md +3 -0
- package/changelog/v0.1.31.md +10 -0
- package/changelog/v0.1.32.md +8 -0
- package/changelog/v0.1.33.md +5 -0
- package/changelog/v0.1.34.md +6 -0
- package/changelog/v0.1.35.md +5 -0
- package/changelog/v0.1.36.md +16 -0
- package/changelog/v0.1.37.md +5 -0
- package/changelog/v0.1.38.md +9 -0
- package/changelog/v0.1.39.md +3 -0
- package/changelog/v0.1.4.md +3 -0
- package/changelog/v0.1.40.md +3 -0
- package/changelog/v0.1.41.md +11 -0
- package/changelog/v0.1.42.md +3 -0
- package/changelog/v0.1.43.md +3 -0
- package/changelog/v0.1.44.md +17 -0
- package/changelog/v0.1.45.md +6 -0
- package/changelog/v0.1.46.md +9 -0
- package/changelog/v0.1.47.md +6 -0
- package/changelog/v0.1.48.md +11 -0
- package/changelog/v0.1.49.md +10 -0
- package/changelog/v0.1.5.md +3 -0
- package/changelog/v0.1.50.md +7 -0
- package/changelog/v0.1.51.md +4 -0
- package/changelog/v0.1.52.md +10 -0
- package/changelog/v0.1.54.md +41 -0
- package/changelog/v0.1.55.md +3 -0
- package/changelog/v0.1.56.md +11 -0
- package/changelog/v0.1.57.md +7 -0
- package/changelog/v0.1.58.md +7 -0
- package/changelog/v0.1.59.md +7 -0
- package/changelog/v0.1.6.md +3 -0
- package/changelog/v0.1.60.md +7 -0
- package/changelog/v0.1.61.md +9 -0
- package/changelog/v0.1.62.md +9 -0
- package/changelog/v0.1.63.md +15 -0
- package/changelog/v0.1.64.md +22 -0
- package/changelog/v0.1.65.md +15 -0
- package/changelog/v0.1.66.md +22 -0
- package/changelog/v0.1.67.md +40 -0
- package/changelog/v0.1.68.md +38 -0
- package/changelog/v0.1.69.md +3 -0
- package/changelog/v0.1.7.md +3 -0
- package/changelog/v0.1.70.md +7 -0
- package/changelog/v0.1.71.md +7 -0
- package/changelog/v0.1.72.md +7 -0
- package/changelog/v0.1.73.md +7 -0
- package/changelog/v0.1.74.md +3 -0
- package/changelog/v0.1.75.md +9 -0
- package/changelog/v0.1.76.md +13 -0
- package/changelog/v0.1.77.md +13 -0
- package/changelog/v0.1.78.md +7 -0
- package/changelog/v0.1.79.md +8 -0
- package/changelog/v0.1.8.md +3 -0
- package/changelog/v0.1.80.md +7 -0
- package/changelog/v0.1.81.md +19 -0
- package/changelog/v0.1.82.md +9 -0
- package/changelog/v0.1.83.md +22 -0
- package/changelog/v0.1.84.md +25 -0
- package/changelog/v0.1.85.md +19 -0
- package/changelog/v0.1.86.md +17 -0
- package/changelog/v0.1.87.md +7 -0
- package/changelog/v0.1.88.md +167 -0
- package/changelog/v0.1.89.md +22 -0
- package/changelog/v0.1.9.md +3 -0
- package/changelog/v0.2.0.md +30 -0
- package/changelog/v0.2.1.md +17 -0
- package/changelog/v0.2.10.md +7 -0
- package/changelog/v0.2.11.md +6 -0
- package/changelog/v0.2.12.md +16 -0
- package/changelog/v0.2.13.md +16 -0
- package/changelog/v0.2.14.md +6 -0
- package/changelog/v0.2.15.md +6 -0
- package/changelog/v0.2.17.md +14 -0
- package/changelog/v0.2.2.md +16 -0
- package/changelog/v0.2.3.md +7 -0
- package/changelog/v0.2.4.md +7 -0
- package/changelog/v0.2.5.md +12 -0
- package/changelog/v0.2.7.md +3 -0
- package/changelog/v0.2.8.md +107 -0
- package/changelog/v0.2.9.md +10 -0
- package/changelog/v0.3.0.md +30 -0
- package/changelog/v0.3.1.md +17 -0
- package/changelog/v0.3.11.md +20 -0
- package/changelog/v0.3.12.md +18 -0
- package/changelog/v0.3.13.md +4 -0
- package/changelog/v0.3.14.md +6 -0
- package/changelog/v0.3.15.md +4 -0
- package/changelog/v0.3.16.md +3 -0
- package/changelog/v0.3.17.md +4 -0
- package/changelog/v0.3.18.md +12 -0
- package/changelog/v0.3.19.md +12 -0
- package/changelog/v0.3.2.md +5 -0
- package/changelog/v0.3.21.md +13 -0
- package/changelog/v0.3.22.md +29 -0
- package/changelog/v0.3.23.md +12 -0
- package/changelog/v0.3.24.md +34 -0
- package/changelog/v0.3.25.md +40 -0
- package/changelog/v0.3.26.md +85 -0
- package/changelog/v0.3.28.md +3 -0
- package/changelog/v0.3.29.md +107 -0
- package/changelog/v0.3.3.md +11 -0
- package/changelog/v0.3.30.md +3 -0
- package/changelog/v0.3.31.md +113 -0
- package/changelog/v0.3.32.md +123 -0
- package/changelog/v0.3.33.md +129 -0
- package/changelog/v0.3.34.md +156 -0
- package/changelog/v0.3.35.md +173 -0
- package/changelog/v0.3.36.md +186 -0
- package/changelog/v0.3.37.md +182 -0
- package/changelog/v0.3.38.md +3 -0
- package/changelog/v0.3.39.md +3 -0
- package/changelog/v0.3.4.md +9 -0
- package/changelog/v0.3.40.md +18 -0
- package/changelog/v0.3.41.md +7 -0
- package/changelog/v0.3.42.md +9 -0
- package/changelog/v0.3.43.md +13 -0
- package/changelog/v0.3.44.md +10 -0
- package/changelog/v0.3.45.md +12 -0
- package/changelog/v0.3.46.md +5 -0
- package/changelog/v0.3.47.md +4 -0
- package/changelog/v0.3.48.md +10 -0
- package/changelog/v0.3.49.md +18 -0
- package/changelog/v0.3.5.md +5 -0
- package/changelog/v0.3.50.md +41 -0
- package/changelog/v0.3.51.md +37 -0
- package/changelog/v0.3.52.md +43 -0
- package/changelog/v0.3.54.md +55 -0
- package/changelog/v0.3.55.md +62 -0
- package/changelog/v0.3.56.md +53 -0
- package/changelog/v0.3.57.md +61 -0
- package/changelog/v0.3.58.md +10 -0
- package/changelog/v0.3.59.md +3 -0
- package/changelog/v0.3.6.md +12 -0
- package/changelog/v0.3.60.md +3 -0
- package/changelog/v0.3.61.md +3 -0
- package/changelog/v0.3.62.md +3 -0
- package/changelog/v0.3.63.md +20 -0
- package/changelog/v0.3.64.md +10 -0
- package/changelog/v0.3.65.md +10 -0
- package/{CHANGELOG.md → changelog/v0.3.66.md} +2 -0
- package/changelog/v0.3.67.md +45 -0
- package/changelog/v0.3.68.md +18 -0
- package/changelog/v0.3.9.md +10 -0
- package/package.json +3 -3
- package/sources.js +6 -8
- package/src/changelog-loader.js +41 -41
- package/src/cli-help.js +2 -3
- package/src/router-daemon.js +351 -15
- package/web/dist/assets/{index-BKwbbLPp.js → index-Cfy_uz7_.js} +1 -1
- package/web/dist/index.html +1 -1
package/README.md
CHANGED
|
@@ -125,6 +125,94 @@ Use ⚡️ Command Palette! with **Ctrl+P**.
|
|
|
125
125
|
<img src="https://img.shields.io/badge/USE_%E2%9A%A1%EF%B8%8F%20COMMAND%20PALETTE-CTRL%2BP-22c55e?style=for-the-badge" alt="Use ⚡️ Command Palette with Ctrl+P">
|
|
126
126
|
</p>
|
|
127
127
|
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🐳 Docker
|
|
131
|
+
|
|
132
|
+
Run FCM without installing Node.js using the official Docker image:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Quick start (daemon + web UI on port 19280)
|
|
136
|
+
docker run -p 19280:19280 ghcr.io/vava-nessa/free-coding-models:latest
|
|
137
|
+
|
|
138
|
+
# With an API key
|
|
139
|
+
docker run -p 19280:19280 -e OPENROUTER_API_KEY=your_key ghcr.io/vava-nessa/free-coding-models:latest
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Access the web dashboard at `http://localhost:19280/` and configure your coding tool to use `http://localhost:19280/v1` with model `fcm`.
|
|
143
|
+
|
|
144
|
+
### Available Image Tags
|
|
145
|
+
|
|
146
|
+
| Tag | Description |
|
|
147
|
+
|-----|-------------|
|
|
148
|
+
| `latest` | Most recent release |
|
|
149
|
+
| `v{major}.{minor}.{patch}` | Specific version (e.g., `v0.3.70`) |
|
|
150
|
+
| `v{major}.{minor}` | Minor version (e.g., `v0.3`) |
|
|
151
|
+
| `v{major}` | Major version (e.g., `v0`) |
|
|
152
|
+
|
|
153
|
+
### Environment Variables
|
|
154
|
+
|
|
155
|
+
| Variable | Default | Description |
|
|
156
|
+
|----------|---------|-------------|
|
|
157
|
+
| `FCM_HOST` | `0.0.0.0` | Host to bind to (set `127.0.0.1` for localhost-only) |
|
|
158
|
+
| `FCM_PORT` | `19280` | Port to listen on |
|
|
159
|
+
| `FREE_CODING_MODELS_TELEMETRY` | `0` | Disable telemetry |
|
|
160
|
+
|
|
161
|
+
Provider API keys (all optional):
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
docker run -p 19280:19280 \
|
|
165
|
+
-e NVIDIA_API_KEY=your_key \
|
|
166
|
+
-e GROQ_API_KEY=your_key \
|
|
167
|
+
-e OPENROUTER_API_KEY=your_key \
|
|
168
|
+
ghcr.io/vava-nessa/free-coding-models:latest
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Docker Compose
|
|
172
|
+
|
|
173
|
+
Create a `docker-compose.yml`:
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
version: '3.8'
|
|
177
|
+
services:
|
|
178
|
+
fcm:
|
|
179
|
+
image: ghcr.io/vava-nessa/free-coding-models:latest
|
|
180
|
+
container_name: fcm
|
|
181
|
+
restart: unless-stopped
|
|
182
|
+
ports:
|
|
183
|
+
- "19280:19280"
|
|
184
|
+
environment:
|
|
185
|
+
FREE_CODING_MODELS_TELEMETRY: "0"
|
|
186
|
+
FCM_HOST: "0.0.0.0"
|
|
187
|
+
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
|
|
188
|
+
volumes:
|
|
189
|
+
- fcm-data:/home/fcm
|
|
190
|
+
volumes:
|
|
191
|
+
fcm-data:
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Run with `docker-compose up -d`. API keys can be passed via a `.env` file or environment variables.
|
|
195
|
+
|
|
196
|
+
### Troubleshooting
|
|
197
|
+
|
|
198
|
+
**Container won't start:**
|
|
199
|
+
- Check logs: `docker logs fcm`
|
|
200
|
+
- Verify port 19280 is not in use: `docker ps | grep 19280`
|
|
201
|
+
|
|
202
|
+
**Health check fails:**
|
|
203
|
+
- Wait 30s for initial probe cycle
|
|
204
|
+
- Verify API keys are valid: `docker exec fcm curl http://localhost:19280/health`
|
|
205
|
+
|
|
206
|
+
**Cannot connect from host:**
|
|
207
|
+
- Ensure `FCM_HOST=0.0.0.0` (default)
|
|
208
|
+
- Check firewall allows localhost connections
|
|
209
|
+
|
|
210
|
+
**Data persistence:**
|
|
211
|
+
- Config is stored in Docker volume `fcm-data`
|
|
212
|
+
- Recreate the volume with `docker-compose down -v` to reset
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
128
216
|
Need to fix contrast because your terminal theme is fighting the TUI? Press **`G`** at any time to cycle **Auto → Dark → Light**. The switch recolors the full interface live: table, Settings, Help, Smart Recommend, Feedback, and Changelog.
|
|
129
217
|
|
|
130
218
|
**② Pick a model and launch your tool:**
|
|
@@ -148,17 +236,8 @@ If the active CLI tool is missing, FCM now catches it before launch, offers a ti
|
|
|
148
236
|
### Common scenarios
|
|
149
237
|
|
|
150
238
|
```bash
|
|
151
|
-
# "I want the most reliable model right now"
|
|
152
|
-
free-coding-models --fiable
|
|
153
|
-
|
|
154
|
-
# "I want to configure Goose with an S-tier model"
|
|
155
|
-
free-coding-models --goose --tier S
|
|
156
|
-
|
|
157
|
-
# "I want NVIDIA's top models only"
|
|
158
|
-
free-coding-models --origin nvidia --tier S
|
|
159
|
-
|
|
160
239
|
# "I want the local web dashboard"
|
|
161
|
-
free-coding-models --
|
|
240
|
+
free-coding-models --daemon
|
|
162
241
|
|
|
163
242
|
# "I want one local endpoint that fails over between free models"
|
|
164
243
|
free-coding-models --daemon-bg
|
|
@@ -174,7 +253,14 @@ free-coding-models --tier S --json | jq -r '.[0].modelId'
|
|
|
174
253
|
free-coding-models --openclaw --origin groq
|
|
175
254
|
```
|
|
176
255
|
|
|
177
|
-
When launching the
|
|
256
|
+
When launching the daemon (with `--daemon`), the web dashboard and router API are served from the same port. Configure tools with:
|
|
257
|
+
|
|
258
|
+
| Field | Value |
|
|
259
|
+
|-------|-------|
|
|
260
|
+
| Router Base URL | `http://localhost:19280/v1` |
|
|
261
|
+
| Dashboard URL | `http://localhost:19280/` |
|
|
262
|
+
| Model | `fcm` |
|
|
263
|
+
| API key | `fcm-local` |
|
|
178
264
|
|
|
179
265
|
### Smart Model Router
|
|
180
266
|
|
|
@@ -214,9 +300,20 @@ Router endpoints:
|
|
|
214
300
|
| `GET /v1/models` | Return virtual models (`fcm`, `fcm:set-name`) |
|
|
215
301
|
| `GET /health` | Daemon status JSON |
|
|
216
302
|
| `GET /stats` | Routing, health, request log, and token stats |
|
|
217
|
-
| `GET /stream/events` | Live SSE events for
|
|
303
|
+
| `GET /stream/events` | Live SSE events for router updates |
|
|
218
304
|
| `POST /daemon/probe-mode` | Set probe mode with `{ "probeMode": "eco" | "balanced" | "aggressive" }` |
|
|
219
305
|
|
|
306
|
+
**Web Dashboard endpoints** (served from the same port in `--daemon` mode):
|
|
307
|
+
|
|
308
|
+
| Endpoint | Purpose |
|
|
309
|
+
|----------|---------|
|
|
310
|
+
| `GET /` | Web dashboard HTML |
|
|
311
|
+
| `GET /api/models` | All model data with latency stats |
|
|
312
|
+
| `GET /api/config` | Provider config (keys masked) |
|
|
313
|
+
| `GET /api/events` | Live SSE events for dashboard |
|
|
314
|
+
| `GET /api/key/:provider` | Reveal full API key for provider |
|
|
315
|
+
| `POST /api/settings` | Save API keys and provider toggles |
|
|
316
|
+
|
|
220
317
|
Routing behavior:
|
|
221
318
|
|
|
222
319
|
- Priority order works immediately on cold start, then probes refine health scores over time.
|
|
@@ -505,6 +602,7 @@ Telemetry is enabled by default and can be disabled with any of the following:
|
|
|
505
602
|
<td align="center" width="120"><a href="https://github.com/PhucTruong-ctrl"><img src="https://github.com/PhucTruong-ctrl.png?s=80" width="80" height="80" style="border-radius:50%" alt="PhucTruong-ctrl"></a></td>
|
|
506
603
|
<td align="center" width="120"><a href="https://github.com/chindris-mihai-alexandru"><img src="https://avatars.githubusercontent.com/u/12643176?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="chindris-mihai-alexandru"></a></td>
|
|
507
604
|
<td align="center" width="120"><a href="https://github.com/serajbaltu"><img src="https://avatars.githubusercontent.com/u/90699173?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="serajbaltu"></a></td>
|
|
605
|
+
<td align="center" width="120"><a href="https://github.com/stgreenb"><img src="https://avatars.githubusercontent.com/u/18483964?v=4&s=80" width="80" height="80" style="border-radius:50%" alt="stgreenb"></a></td>
|
|
508
606
|
</tr>
|
|
509
607
|
<tr>
|
|
510
608
|
<td align="center"><a href="https://github.com/vava-nessa"><sub><b>vava-nessa</b></sub></a></td>
|
|
@@ -514,6 +612,7 @@ Telemetry is enabled by default and can be disabled with any of the following:
|
|
|
514
612
|
<td align="center"><a href="https://github.com/PhucTruong-ctrl"><sub><b>PhucTruong-ctrl</b></sub></a></td>
|
|
515
613
|
<td align="center"><a href="https://github.com/chindris-mihai-alexandru"><sub><b>chindris-mihai-alexandru</b></sub></a></td>
|
|
516
614
|
<td align="center"><a href="https://github.com/serajbaltu"><sub><b>serajbaltu</b></sub></a></td>
|
|
615
|
+
<td align="center"><a href="https://github.com/stgreenb"><sub><b>stgreenb</b></sub></a></td>
|
|
517
616
|
</tr>
|
|
518
617
|
</table>
|
|
519
618
|
|
|
@@ -92,15 +92,7 @@ async function main() {
|
|
|
92
92
|
process.exit(1);
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
//
|
|
96
|
-
if (cliArgs.webMode) {
|
|
97
|
-
const { startWebServer } = await import('../web/server.js')
|
|
98
|
-
const port = parseInt(process.env.FCM_PORT || '3333', 10)
|
|
99
|
-
await startWebServer(port, { open: true })
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// 📖 Load JSON config
|
|
95
|
+
// Load JSON config
|
|
104
96
|
const config = loadConfig();
|
|
105
97
|
ensureTelemetryConfig(config);
|
|
106
98
|
ensureFavoritesConfig(config);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog v0.1.11 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
Add unit tests (59 tests), extract pure logic to lib/utils.js, fix GitHub Actions release workflow.
|
|
4
|
+
|
|
5
|
+
- Extract getAvg, getVerdict, getUptime, sortResults, filterByTier, findBestModel, parseArgs to lib/utils.js
|
|
6
|
+
- Add comprehensive test suite using node:test (sources integrity, core logic, CLI parsing, package sanity)
|
|
7
|
+
- Fix release.yml: remove broken npm version patch, add version detection via git tags, add GitHub Release creation
|
|
8
|
+
- Update AGENTS.md with test-first workflow instructions
|
|
9
|
+
|
|
10
|
+
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog v0.1.12 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- Unit test suite: 59 tests across 11 suites using `node:test` (zero dependencies)
|
|
5
|
+
- Tests cover: sources data integrity, core logic (getAvg, getVerdict, getUptime, filterByTier, sortResults, findBestModel), CLI arg parsing, package.json sanity
|
|
6
|
+
- `lib/utils.js`: extracted pure logic functions from the monolithic CLI for testability
|
|
7
|
+
- `pnpm test` script in package.json
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- GitHub Actions release workflow: removed broken `npm version patch` loop, added version detection via git tags
|
|
11
|
+
- GitHub Actions now creates a GitHub Release with auto-generated notes for each new version
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- AGENTS.md updated with test-first workflow: agents must run `pnpm test` before `pnpm start`
|
|
15
|
+
|
|
16
|
+
---
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog v0.1.16 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- OpenCode Desktop support: new `--opencode-desktop` flag and menu option to set model & open the Desktop app
|
|
5
|
+
- "Read Changelogs" menu option when an update is available (opens GitHub releases page)
|
|
6
|
+
- `startOpenCodeDesktop()` function — same config logic as CLI, launches via `open -a OpenCode`
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- Startup menu: "OpenCode" renamed to "OpenCode CLI", new "OpenCode Desktop" entry added
|
|
10
|
+
- TUI mode badge: shows `[💻 CLI]` or `[🖥 Desktop]` or `[🦞 OpenClaw]`
|
|
11
|
+
- Footer action hint adapts to desktop mode (`Enter→OpenDesktop`)
|
|
12
|
+
|
|
13
|
+
---
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Changelog v0.1.20 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **Dynamic tier filtering**: Use E/D keys to filter models by tier during runtime
|
|
5
|
+
- Tier filter badge shown in header (e.g., `[Tier S]`)
|
|
6
|
+
- E key elevates filter (show fewer, higher-tier models)
|
|
7
|
+
- D key descends filter (show more, lower-tier models)
|
|
8
|
+
- Preserves ping history when changing filters
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- **Error 401 with --tier flag**: Fixed issue where using `--tier` alone would show selection menu instead of proceeding directly to TUI
|
|
12
|
+
- Improved flag combination handling for better user experience
|
|
13
|
+
|
|
14
|
+
---
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog v0.1.21 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Refactored
|
|
4
|
+
- **Simplified tier filtering architecture**: Replaced complex object recreation with simple `hidden` flag system
|
|
5
|
+
- **Flags as shortcuts**: `--tier S` now just sets initial state instead of blocking dynamic filtering
|
|
6
|
+
- **Dynamic filtering preserved**: E/D keys work seamlessly even when starting with `--tier` flag
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
- **Ping loop bug**: Fixed issue where filtered models weren't pinged due to using wrong results array
|
|
10
|
+
- **Initial ping bug**: Fixed issue where initial ping used wrong results array
|
|
11
|
+
|
|
12
|
+
---
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog v0.1.23 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Refactored
|
|
4
|
+
- **Removed startup menu**: No more blocking mode selection menu at startup
|
|
5
|
+
- **Default to OpenCode CLI**: App starts directly in CLI mode when no flags given
|
|
6
|
+
- **Mode toggle in TUI**: Added Z key to cycle between CLI → Desktop → OpenClaw → CLI
|
|
7
|
+
- **GitHub changelogs**: "Read Changelogs" option now opens GitHub URL instead of local file
|
|
8
|
+
- **Auto-update by default**: When new version available without flags, auto-updates and relaunches
|
|
9
|
+
- **Centered update menu**: Update notification appears only when needed, with clean centered layout
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- **Header display**: Shows `[💻 CLI] (Z to toggle)` with mode toggle hint
|
|
13
|
+
- **Footer instructions**: Added "M Mode" to key bindings
|
|
14
|
+
- **Update workflow**: Flags (`--opencode` etc.) still show update menu for compatibility
|
|
15
|
+
|
|
16
|
+
---
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog v0.1.24 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
## What's Changed
|
|
4
|
+
* fix: TUI viewport scrolling for Ghostty and narrow terminals by @whit3rabbit in https://github.com/vava-nessa/free-coding-models/pull/10
|
|
5
|
+
|
|
6
|
+
## New Contributors
|
|
7
|
+
* @whit3rabbit made their first contribution in https://github.com/vava-nessa/free-coding-models/pull/10
|
|
8
|
+
|
|
9
|
+
**Full Changelog**: https://github.com/vava-nessa/free-coding-models/compare/v0.1.23...v0.1.24
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Changelog v0.1.25 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **Discord community link**: Added Discord invite to README and TUI footer
|
|
5
|
+
- **Enhanced footer layout**: Improved footer with multi-line layout showing GitHub repo and Discord links
|
|
6
|
+
- **Clickable author name**: "vava-nessa" is now clickable in terminal (opens GitHub profile)
|
|
7
|
+
- **Release notes automation**: GitHub Actions now uses CHANGELOG.md content for release notes instead of auto-generated notes
|
|
8
|
+
### Changed
|
|
9
|
+
- **Tier filtering system**: Replaced E/D keys with T key that cycles through tier filters: all → S+/S → A+/A/A- → B+/B → C → all
|
|
10
|
+
- **Footer text**: "Made with love by vava-nessa" with clickable links
|
|
11
|
+
### Fixed
|
|
12
|
+
- **Release workflow**: GitHub Releases now display proper changelog content instead of generic commit summaries
|
|
13
|
+
---
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Changelog v0.1.27 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- **Footer redesign**: All links now on one line with clickable text: "Join our Discord!" and "Read the docs on GitHub"
|
|
5
|
+
- **Improved UX**: Links use same clickable format as author name for consistent user experience
|
|
6
|
+
---
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog v0.1.31 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **SWE-bench column**: Added new SWE-bench Verified score column showing coding performance for each model
|
|
5
|
+
- **Color-coded column headers**: First letter of each column header is now colored (yellow) to indicate keyboard shortcut for sorting
|
|
6
|
+
- **Keyboard shortcut improvements**: Changed P to L for latest ping sorting, added E for SWE-bench sorting
|
|
7
|
+
### Changed
|
|
8
|
+
- **Source name simplification**: Renamed "NVIDIA NIM" to "NIM" throughout the codebase
|
|
9
|
+
- **Enhanced footer Discord link**: Discord link now displays in bright cyan color with "(link fixed)" indicator
|
|
10
|
+
---
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Changelog v0.1.32 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- **Column header improvements**: Fixed column alignment issues for better visual appearance
|
|
5
|
+
- **Status renamed to Condition**: "Status" column renamed to "Condition" for clarity
|
|
6
|
+
- **Keyboard shortcut updates**: S key now sorts by SWE-bench score, C key sorts by Condition
|
|
7
|
+
- **Footer Discord text update**: Changed "Join our Discord!" to "Join Free-Coding-Models Discord!"
|
|
8
|
+
---
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog v0.1.36 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **SWE-bench Verified column**: Shows real SWE-bench Verified scores for all 44 models from official benchmarks
|
|
5
|
+
- **Color-coded keyboard shortcuts**: First letter of each column header colored in yellow to indicate sorting key
|
|
6
|
+
- **Heart and Coffee in footer**: "Made with 💖 & ☕ by vava-nessa"
|
|
7
|
+
### Changed
|
|
8
|
+
- **Column organization**: Reordered columns for better logical flow: Rank / Tier / SWE% / Model / Origin / Latest Ping / Avg Ping / Health / Verdict / Up%
|
|
9
|
+
- **Health column**: Renamed from "Status" to "Health" with H key for sorting
|
|
10
|
+
- **SWE-bench sorting**: S key now sorts by SWE-bench score
|
|
11
|
+
- **Latest ping shortcut**: L key (instead of P) for sorting by latest ping
|
|
12
|
+
- **Source name**: Simplified "NVIDIA NIM" to "NIM"
|
|
13
|
+
### Fixed
|
|
14
|
+
- **Column header alignment**: Fixed misalignment caused by ANSI color codes in headers
|
|
15
|
+
- **Discord link**: Updated to permanent invite link https://discord.gg/WKA3TwYVuZ
|
|
16
|
+
---
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog v0.1.38 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Cross-platform OpenCode integration**: Fixed OpenCode CLI and Desktop installation issues on Windows and Linux
|
|
5
|
+
- **Windows**: Fixed config path to use %APPDATA%\opencode\opencode.json with fallback to ~/.config
|
|
6
|
+
- **Linux**: Added support for snap, flatpak, and xdg-open to launch OpenCode Desktop
|
|
7
|
+
- **All platforms**: Properly detects OS and uses correct commands and paths
|
|
8
|
+
- **OpenCode Desktop**: Platform-specific launch commands (macOS: `open -a`, Windows: `start`, Linux: multiple methods)
|
|
9
|
+
---
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog v0.1.41 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- **sources.js data audit** — verified and corrected SWE-bench scores, tiers, and context windows across all NIM models:
|
|
5
|
+
- Devstral 2 123B: `S, 62.0%, 128k` → `S+, 72.2%, 256k` (official Mistral announcement)
|
|
6
|
+
- Mistral Large 675B: ctx `128k` → `256k`
|
|
7
|
+
- QwQ 32B: ctx `32k` → `131k`
|
|
8
|
+
- Llama 4 Maverick: ctx `128k` → `1M` (NVIDIA NIM confirmed)
|
|
9
|
+
- Llama 4 Scout: ctx `128k` → `10M` (NVIDIA NIM confirmed)
|
|
10
|
+
- GPT OSS 20B: ctx `32k` → `128k`
|
|
11
|
+
---
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog v0.1.44 - 2026-02-22
|
|
2
|
+
|
|
3
|
+
### Added
|
|
4
|
+
- **Multi-provider support** — Groq (6 models) and Cerebras (3 models) added alongside NVIDIA NIM, for 53 total models
|
|
5
|
+
- **Multi-provider first-run wizard** — Steps through all 3 providers (NIM, Groq, Cerebras) on first launch; each is optional, Enter to skip; requires at least one key
|
|
6
|
+
- **Settings screen (`P` key)** — New TUI overlay to manage API keys per provider, toggle providers on/off, and test keys with a live ping
|
|
7
|
+
- **`lib/config.js`** — New JSON config system (`~/.free-coding-models.json`) replacing the old plain-text file
|
|
8
|
+
- Auto-migrates old `~/.free-coding-models` (plain nvidia key) on first run
|
|
9
|
+
- Stores keys per provider + per-provider enabled/disabled state
|
|
10
|
+
- `NVIDIA_API_KEY`, `GROQ_API_KEY`, `CEREBRAS_API_KEY` env vars override config
|
|
11
|
+
- **Per-provider ping URLs** — `ping()` now accepts explicit endpoint URL; each provider has its own API endpoint in `sources.js`
|
|
12
|
+
- **Provider name in Origin column** — Shows `NIM` / `Groq` / `Cerebras` instead of always `NIM`
|
|
13
|
+
### Changed
|
|
14
|
+
- `MODELS` flat array now includes `providerKey` as 6th element
|
|
15
|
+
- State init filters models from disabled providers; rebuilds on settings close
|
|
16
|
+
- Config file path changed from `~/.free-coding-models` to `~/.free-coding-models.json` (migration is automatic)
|
|
17
|
+
---
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog v0.1.46 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Discord notification**: Fixed ECONNRESET error — drain response body with `res.resume()` and call `process.exit(0)` immediately after success so the Node process closes cleanly
|
|
5
|
+
|
|
6
|
+
### Changed
|
|
7
|
+
- **Discord link**: Updated invite URL to `https://discord.gg/5MbTnDC3Md` everywhere (README, TUI footer)
|
|
8
|
+
|
|
9
|
+
---
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog v0.1.48 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **`--tier` CLI flag**: `parseArgs()` was never called in `main()`, so `--tier S` was silently ignored — now wired in and applied on TUI startup (thanks @whit3rabbit, PR #11)
|
|
5
|
+
- **`--tier` value leaking into `apiKey`**: `parseArgs()` for-loop was capturing the tier value as the API key — fixed by skipping the value arg after `--tier`
|
|
6
|
+
- **Ctrl+C not exiting**: sort key handler was intercepting all single-letter keypresses including ctrl-modified ones — added `!key.ctrl` guard so Ctrl+C reaches the exit handler (PR #11)
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- Test verifying `--tier` value does not leak into `apiKey` (63 tests total)
|
|
10
|
+
|
|
11
|
+
---
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog v0.1.49 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Cerebras / Groq without API key**: models were being pinged with the fallback NVIDIA key, causing misleading `❌ 401` — now pings without auth header; 401 is treated as `🔑 NO KEY` (server reachable, latency shown dimly)
|
|
5
|
+
- **Settings: entering an API key had no immediate effect**: after saving a key and closing Settings (Escape), models previously in `noauth` state are now immediately re-pinged with the new key
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- Ping without API key is now always attempted — a 401 response confirms the server is UP and shows real latency; `🔑 NO KEY` replaces the old `❌ 401` misleading error
|
|
9
|
+
|
|
10
|
+
---
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Changelog v0.1.50 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Groq/Cerebras models selected for OpenCode were launched as NVIDIA models**: `providerKey` was not passed in `userSelected` on Enter, causing all models to be prefixed with `nvidia/` regardless of their actual provider — now correctly uses `groq/model-id` and `cerebras/model-id`
|
|
5
|
+
- **`startOpenCode` and `startOpenCodeDesktop`**: both functions now handle all 3 providers; Groq and Cerebras use OpenCode's built-in provider support (no custom config block needed, just `GROQ_API_KEY`/`CEREBRAS_API_KEY` env vars); NVIDIA retains its existing custom provider config flow
|
|
6
|
+
|
|
7
|
+
---
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
# Changelog v0.1.51 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **Groq/Cerebras models selected for OpenCode had no provider block**: even with the correct `groq/model-id` prefix, OpenCode couldn't use the model because no `provider.groq` block existed in `opencode.json` — now automatically creates the provider block (Groq: built-in with `apiKey: {env:GROQ_API_KEY}`; Cerebras: `@ai-sdk/openai-compatible` with baseURL) and registers the model in `provider.<key>.models`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog v0.1.52 - 2026-02-23
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
- **OpenCode model handoff** (PR #14 by @whit3rabbit): API keys from `~/.free-coding-models.json` were not passed to the OpenCode child process, causing silent fallback to the previous model. Also fixes Groq model ID mismatches (e.g. `kimi-k2-instruct` → `kimi-k2-instruct-0905`) via a new `OPENCODE_MODEL_MAP`
|
|
5
|
+
- **OpenClaw nvidia provider missing models array** (PR #13 by @whit3rabbit): `startOpenClaw()` created the nvidia provider block without a `models` property, causing Zod schema validation to reject the config
|
|
6
|
+
|
|
7
|
+
### Improved
|
|
8
|
+
- **Discord link in TUI footer**: the invite URL is now displayed in plain text on a separate line so it's visible and copiable on terminals that don't support clickable links
|
|
9
|
+
|
|
10
|
+
---
|