free-coding-models 0.3.35 → 0.3.36
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/CHANGELOG.md +26 -13
- package/README.md +11 -10
- package/bin/free-coding-models.js +8 -0
- package/package.json +3 -2
- package/src/render-table.js +1 -8
- package/src/utils.js +4 -0
- package/web/app.js +900 -0
- package/web/index.html +318 -0
- package/web/server.js +317 -0
- package/web/styles.css +963 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
---
|
|
3
3
|
|
|
4
|
-
## [0.3.
|
|
4
|
+
## [0.3.36] - 2026-04-07
|
|
5
5
|
|
|
6
6
|
### Added
|
|
7
|
-
- **
|
|
8
|
-
-
|
|
9
|
-
- **
|
|
7
|
+
- **Settings Page** — Full API key management: add, edit, delete, reveal (masked with last 4 chars), and copy keys from the browser.
|
|
8
|
+
- **Provider Toggle Switches** — Enable/disable providers with smooth toggle switches directly from Settings.
|
|
9
|
+
- **Sidebar Navigation** — Collapsible sidebar with Dashboard, Settings, and Analytics views.
|
|
10
|
+
- **Analytics View** — Provider health overview with % bars, Top 10 fastest models leaderboard, and tier distribution chart.
|
|
11
|
+
- **Toast Notification System** — Beautiful slide-in notifications for save/delete/copy/error feedback.
|
|
12
|
+
- **Export Modal** — Export filtered model data as JSON, CSV, or copy summary to clipboard.
|
|
13
|
+
- **Provider Search** — Search/filter providers in the Settings page.
|
|
14
|
+
- **Expand/Collapse All** — Bulk expand or collapse all provider cards in Settings.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Upgraded web dashboard from V1 (read-only) to V2 (full management console).
|
|
18
|
+
- Improved sidebar hover-expand behavior with smooth label reveal.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
- **P1**: Serialized ping rounds using recursive `setTimeout` instead of `setInterval` to prevent overlapping concurrent mutations when providers are slow.
|
|
22
|
+
- **P2**: Disabled providers are now skipped during ping rounds, honoring the Settings toggle.
|
|
23
|
+
- **P2**: `saveConfig` failures are now caught and returned as errors to the client instead of silently reporting success.
|
|
24
|
+
|
|
25
|
+
## [0.3.35] - 2026-04-07
|
|
10
26
|
|
|
11
|
-
###
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **SBOM generation** — Software Bill of Materials attached to every GitHub Release
|
|
18
|
-
- **README trust badges** — dependency count, provenance, supply chain badges
|
|
19
|
-
- **README 🛡️ Security section** — what the tool does/doesn't do, supply chain table
|
|
27
|
+
### Added
|
|
28
|
+
- **Web Dashboard / GUI Mode** — Launch a premium graphical interface using \`--web\` or \`--gui\` flag.
|
|
29
|
+
- **Glassmorphism Design** — Real-time ping visualization, 🥇🥈🥉 medals, live stability scores, and sparklines.
|
|
30
|
+
- **Background SSE Streaming** — The built-in Node.js server streams live data to the browser with zero dependencies.
|
|
31
|
+
- **Quick Search & Filters** — Sort by any column, filter by tiers, or use the real-time search box (Ctrl+K).
|
|
32
|
+
- **Detail Panel** — Slide-out side panel showing P95 latency, jitter (σ), and historical trends.
|
|
20
33
|
|
|
21
34
|
## [0.3.34] - 2026-04-06
|
|
22
35
|
|
package/README.md
CHANGED
|
@@ -12,10 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
<h1 align="center">free-coding-models</h1>
|
|
14
14
|
|
|
15
|
-
<p align="center">
|
|
16
|
-
🐦 Follow me on <a href="https://x.com/vavanessadev"><strong>X (@vavanessadev)</strong></a> 💖
|
|
17
|
-
</p>
|
|
18
|
-
|
|
19
15
|
<p align="center">
|
|
20
16
|
<strong>Find the fastest free coding model in seconds</strong><br>
|
|
21
17
|
<sub>Ping 238 models across 25 AI Free providers in real-time </sub><br><sub> Install Free API endpoints to your favorite AI coding tool: <br>📦 OpenCode, 🦞 OpenClaw, 💘 Crush, 🪿 Goose, 🛠 Aider, 🐉 Qwen Code, 🤲 OpenHands, ⚡ Amp, π Pi, 🦘 Rovo or ♊ Gemini in one keystroke</sub>
|
|
@@ -35,12 +31,17 @@ create a free account on one of the [providers](#-list-of-free-ai-providers)
|
|
|
35
31
|
</p>
|
|
36
32
|
|
|
37
33
|
<p align="center">
|
|
38
|
-
<a href="#-why-this-tool"
|
|
39
|
-
<a href="#-quick-start"
|
|
40
|
-
<a href="#-list-of-free-ai-providers"
|
|
41
|
-
<a href="#-usage"
|
|
42
|
-
<a href="#-tui-keys"
|
|
43
|
-
<a href="#-
|
|
34
|
+
<a href="#-why-this-tool">💡 Why</a> •
|
|
35
|
+
<a href="#-quick-start">⚡ Quick Start</a> •
|
|
36
|
+
<a href="#-list-of-free-ai-providers">🟢 Providers</a> •
|
|
37
|
+
<a href="#-usage">🚀 Usage</a> •
|
|
38
|
+
<a href="#-tui-keys">⌨️ TUI Keys</a> •
|
|
39
|
+
<a href="#-features">✨ Features</a> •
|
|
40
|
+
<a href="#-contributing">📋 Contributing</a> •
|
|
41
|
+
<a href="#️-model-licensing--commercial-use">⚖️ Licensing</a> •
|
|
42
|
+
<a href="#️-security--trust">🛡️ Security</a> •
|
|
43
|
+
<a href="#-support">📧 Support</a> •
|
|
44
|
+
<a href="#-license">📄 License</a>
|
|
44
45
|
</p>
|
|
45
46
|
|
|
46
47
|
<p align="center">
|
|
@@ -46,6 +46,14 @@ async function main() {
|
|
|
46
46
|
process.exit(1);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
// 📖 --web mode: launch the web dashboard instead of the TUI
|
|
50
|
+
if (cliArgs.webMode) {
|
|
51
|
+
const { startWebServer } = await import('../web/server.js')
|
|
52
|
+
const port = parseInt(process.env.FCM_PORT || '3333', 10)
|
|
53
|
+
await startWebServer(port)
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
|
|
49
57
|
// 📖 Load JSON config
|
|
50
58
|
const config = loadConfig();
|
|
51
59
|
ensureTelemetryConfig(config);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "free-coding-models",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.36",
|
|
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",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"files": [
|
|
42
42
|
"bin/",
|
|
43
43
|
"src/",
|
|
44
|
+
"web/",
|
|
44
45
|
"sources.js",
|
|
45
46
|
"patch-openclaw.js",
|
|
46
47
|
"patch-openclaw-models.js",
|
|
@@ -55,7 +56,7 @@
|
|
|
55
56
|
"test:fcm:mock": "node scripts/testfcm-runner.mjs --tool crush --tool-bin-dir test/fixtures/mock-bin"
|
|
56
57
|
},
|
|
57
58
|
"dependencies": {
|
|
58
|
-
"chalk": "^5.
|
|
59
|
+
"chalk": "^5.6.2"
|
|
59
60
|
},
|
|
60
61
|
"engines": {
|
|
61
62
|
"node": ">=18.0.0"
|
package/src/render-table.js
CHANGED
|
@@ -882,12 +882,6 @@ export function renderTable(results, pendingPings, frame, cursor = null, sortCol
|
|
|
882
882
|
? chalk.rgb(255, 182, 193)(`Last release: ${lastReleaseDate}`)
|
|
883
883
|
: ''
|
|
884
884
|
|
|
885
|
-
const xSupportBg = chalk.bgRgb(140, 0, 80).rgb(255, 255, 255).bold('🐦 Follow me on X: ') +
|
|
886
|
-
'\x1b]8;;https://x.com/vavanessadev\x1b\\' +
|
|
887
|
-
chalk.bgRgb(140, 0, 80).rgb(255, 200, 50).bold('@vavanessadev') +
|
|
888
|
-
'\x1b]8;;\x1b\\' +
|
|
889
|
-
chalk.bgRgb(140, 0, 80).rgb(255, 255, 255).bold(' to check my other projects! 💖')
|
|
890
|
-
|
|
891
885
|
lines.push(
|
|
892
886
|
' ' + themeColors.hotkey('N') + themeColors.dim(' Changelog') +
|
|
893
887
|
(filterBadge
|
|
@@ -895,8 +889,7 @@ export function renderTable(results, pendingPings, frame, cursor = null, sortCol
|
|
|
895
889
|
: '') +
|
|
896
890
|
themeColors.dim(' • ') +
|
|
897
891
|
themeColors.dim('Ctrl+C Exit') +
|
|
898
|
-
(releaseLabel ? themeColors.dim(' • ') + releaseLabel : '')
|
|
899
|
-
themeColors.dim(' • ') + xSupportBg
|
|
892
|
+
(releaseLabel ? themeColors.dim(' • ') + releaseLabel : '')
|
|
900
893
|
)
|
|
901
894
|
|
|
902
895
|
// 📖 Discord link at the very bottom of the TUI
|
package/src/utils.js
CHANGED
|
@@ -461,6 +461,9 @@ export function parseArgs(argv) {
|
|
|
461
461
|
const helpMode = flags.includes('--help') || flags.includes('-h')
|
|
462
462
|
const premiumMode = flags.includes('--premium')
|
|
463
463
|
|
|
464
|
+
// 📖 --web / --gui — launch the web dashboard instead of the TUI
|
|
465
|
+
const webMode = flags.includes('--web') || flags.includes('--gui')
|
|
466
|
+
|
|
464
467
|
// New boolean flags
|
|
465
468
|
const sortDesc = flags.includes('--desc')
|
|
466
469
|
const sortAscFlag = flags.includes('--asc')
|
|
@@ -505,6 +508,7 @@ export function parseArgs(argv) {
|
|
|
505
508
|
hideUnconfigured,
|
|
506
509
|
showUnconfigured,
|
|
507
510
|
premiumMode,
|
|
511
|
+
webMode,
|
|
508
512
|
// 📖 Profile system removed - API keys now persist permanently across all sessions
|
|
509
513
|
recommendMode,
|
|
510
514
|
}
|