free-coding-models 0.5.22 → 0.5.23

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.
@@ -0,0 +1,9 @@
1
+ # Changelog v0.5.23 - 2026-06-10
2
+
3
+ ### Fixed
4
+ - **Critical SyntaxError crash on startup** in `src/tui/render-table.js`: `speedCell` and `moodCell` were declared twice in the same scope (lines 855–856 vs 866–867), causing the published 0.5.22 CLI to fail with `SyntaxError: Identifier 'speedCell' has already been declared` before the TUI could render. Removed the dead first declarations; the badge-aware declarations are now the only ones in scope.
5
+ - **Missing `NEW_MODELS` import** in `src/tui/render-table.js`: the NEW (🆕) badge check added in 0.5.22 was reading from `NEW_MODELS` without importing it. Exported the set from `src/core/utils.js` and imported it correctly in the renderer.
6
+ - **Stale renderTable unit test** regex that assumed the old `🟩 Perfect` verdict format. Updated to match the new `🟩✨ Perfect` (sparkle emoji) format introduced in 0.5.22.
7
+
8
+ ### Changed
9
+ - Bumped package version to `0.5.23`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "free-coding-models",
3
- "version": "0.5.22",
3
+ "version": "0.5.23",
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/src/core/utils.js CHANGED
@@ -115,7 +115,7 @@ export const getAvg = (r) => {
115
115
  //
116
116
  // 📖 The "wasUpBefore" check is key — it distinguishes between a model that's
117
117
  // temporarily flaky vs one that was never reachable in the first place.
118
- const NEW_MODELS = new Set([
118
+ export const NEW_MODELS = new Set([
119
119
  'nvidia/nemotron-3-ultra-550b-a55b',
120
120
  '@cf/meta/llama-3.2-90b-instruct',
121
121
  '@cf/mistralai/mistral-7b-instruct-v0.2',
@@ -49,7 +49,7 @@ import {
49
49
  } from '../core/constants.js'
50
50
  import { themeColors, currentPalette, getProviderRgb, getTierRgb, getReadableTextRgb, getTheme, THEME_BG_RGB } from './theme.js'
51
51
  import { TIER_COLOR } from './tier-colors.js'
52
- import { getAvg, getVerdict, getUptime, getStabilityScore, getVersionStatusInfo } from '../core/utils.js'
52
+ import { getAvg, getVerdict, getUptime, getStabilityScore, getVersionStatusInfo, NEW_MODELS } from '../core/utils.js'
53
53
  import { usagePlaceholderForProvider } from '../core/ping.js'
54
54
  import { formatBenchmarkLatency, formatBenchmarkTps } from '../core/benchmark.js'
55
55
  import { calculateViewport, sortResultsWithPinnedFavorites, padEndDisplay, displayWidth, stripAnsi, fadedRow } from './render-helpers.js'
@@ -851,20 +851,13 @@ export function renderTable({
851
851
  verdictColor = (text) => chalk.bold.rgb(...getTierRgb('C'))(text)
852
852
  break
853
853
  }
854
- // 📖 Use padEndDisplay to account for emoji display width (2 cols each) so all rows align
855
- const speedCell = verdictColor(padEndDisplay(verdictText, W_VERDICT))
856
- const moodCell = padEndDisplay(verdictIcon, W_MOOD)
857
-
858
854
  // 📖 Add NEW badge for recently added models
855
+ // 📖 Use padEndDisplay to account for emoji display width (2 cols each) so all rows align
859
856
  const isNewModel = NEW_MODELS.has(r.modelId) || NEW_MODELS.has(`${r.providerKey}/${r.modelId}`)
860
857
  const newBadge = isNewModel ? '🆕' : ''
861
858
  const verdictTextWithBadge = newBadge ? `${newBadge} ${verdictText}` : verdictText
862
- const speedCellWithBadge = verdictColor(padEndDisplay(verdictTextWithBadge, W_VERDICT))
863
- const moodCellWithBadge = padEndDisplay(verdictIcon, W_MOOD)
864
-
865
- // 📖 Use the version with badge for display
866
- const speedCell = speedCellWithBadge
867
- const moodCell = moodCellWithBadge
859
+ const speedCell = verdictColor(padEndDisplay(verdictTextWithBadge, W_VERDICT))
860
+ const moodCell = padEndDisplay(verdictIcon, W_MOOD)
868
861
 
869
862
  // 📖 Stability column - composite score (0–100) from p95 + jitter + spikes + uptime
870
863
  // 📖 Left-aligned to sit flush under the column header