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 CHANGED
@@ -1,22 +1,35 @@
1
1
  # Changelog
2
2
  ---
3
3
 
4
- ## [0.3.35] - 2026-04-07
4
+ ## [0.3.36] - 2026-04-07
5
5
 
6
6
  ### Added
7
- - **OVHcloud AI Endpoints** — new European sovereign AI provider (8 models: Qwen3 Coder 30B MoE, GPT OSS 120B, GPT OSS 20B, Llama 3.3 70B, Qwen3 32B, R1 Distill 70B, Mistral Small 3.2, Llama 3.1 8B)
8
- - Free sandbox mode: 2 req/min per IP per model (no API key needed), 400 RPM with API key
9
- - **Now 238 models across 25 providers** (was 230/24)
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
- ### SECURITY.md
12
- - **SECURITY.md** — full security policy with vulnerability reporting, architecture, and supply chain docs
13
- - **CODEOWNERS** — all changes require @vava-nessa review
14
- - **Dependabot** — weekly automated dependency + GitHub Actions updates (`.github/dependabot.yml`)
15
- - **Security Audit CI** — `npm audit` + lockfile lint on every push/PR + weekly schedule (`.github/workflows/security-audit.yml`)
16
- - **npm Provenance** — release workflow now publishes with `--provenance` (Sigstore-signed)
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">Why</a> •
39
- <a href="#-quick-start">Quick Start</a> •
40
- <a href="#-list-of-free-ai-providers">Providers</a> •
41
- <a href="#-usage">Usage</a> •
42
- <a href="#-tui-keys">TUI Keys</a> •
43
- <a href="#-contributing">Contributing</a>
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.35",
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.4.1"
59
+ "chalk": "^5.6.2"
59
60
  },
60
61
  "engines": {
61
62
  "node": ">=18.0.0"
@@ -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
  }