free-coding-models 0.5.24 → 0.5.26

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.
@@ -944,7 +944,7 @@ export function createOverlayRenderers(state, deps) {
944
944
  lines.push(` ${key('Ctrl+A')} AI Speed Test ${hint('(benchmark selected model → time + TPS)')}`)
945
945
  lines.push(` ${key('Ctrl+U')} Global AI Speed Test ${hint('(benchmark all models; Settings can auto-run it on startup)')}`)
946
946
  lines.push(` ${key('E')} Cycle filter mode ${hint('(Normal → Configured only → Usable only)')}`)
947
- lines.push(` ${key('Z')} Cycle tool mode ${hint('(📦 OpenCode → π Pi → 🪼 jcode → 📦 Desktop → 🦞 OpenClaw → 💘 Crush → 🪿 Goose → 🛠 Aider → 🐉 Qwen → 🤲 OpenHands → ⚡ Amp → 🦘 Rovo → ♊ Gemini)')}`)
947
+ lines.push(` ${key('Z')} Cycle tool mode ${hint('(📦 OpenCode → π Pi → 🪼 jcode → 📦 Desktop → 🦞 OpenClaw → 💘 Crush → 🪿 Goose → 🛠 Aider → 🐉 Qwen → 🤲 OpenHands → ⚡ Amp)')}`)
948
948
  lines.push(` ${key('F')} Toggle favorite on selected row ${hint('(1️⃣2️⃣3️⃣ = router fallback order, capped at 🔟)')}`)
949
949
  lines.push(` ${key('⇧↑/⇧↓')} Reorder selected favorite up/down ${hint('(changes router priority)')}`)
950
950
  lines.push(` ${key('Y')} Toggle favorites mode ${hint('(Pinned + always visible ↔ Normal filter/sort behavior)')}`)
@@ -651,12 +651,15 @@ export function renderTable({
651
651
  ? providerName.slice(0, 4) + '…'
652
652
  : providerName
653
653
  const source = themeColors.provider(r.providerKey, providerDisplay.padEnd(wSource))
654
- // 📖 Favorites marked with a single no ranking numbers
654
+ // 📖 Prefix: favorite > 🎯 recommended > 🆕 new only one emoji, never shifts the line
655
+ const isNewModel = NEW_MODELS.has(r.modelId) || NEW_MODELS.has(`${r.providerKey}/${r.modelId}`)
655
656
  let favoritePrefix = ''
656
657
  if (r.isRecommended) {
657
658
  favoritePrefix = '🎯 '
658
659
  } else if (r.isFavorite) {
659
660
  favoritePrefix = '⭐ '
661
+ } else if (isNewModel) {
662
+ favoritePrefix = '🆕 '
660
663
  }
661
664
  const prefixDisplayWidth = displayWidth(favoritePrefix)
662
665
  const nameWidth = Math.max(0, W_MODEL - prefixDisplayWidth)
@@ -851,12 +854,7 @@ export function renderTable({
851
854
  verdictColor = (text) => chalk.bold.rgb(...getTierRgb('C'))(text)
852
855
  break
853
856
  }
854
- // 📖 Add NEW badge for recently added models
855
- // 📖 Use padEndDisplay to account for emoji display width (2 cols each) so all rows align
856
- const isNewModel = NEW_MODELS.has(r.modelId) || NEW_MODELS.has(`${r.providerKey}/${r.modelId}`)
857
- const newBadge = isNewModel ? '🆕' : ''
858
- const verdictTextWithBadge = newBadge ? `${newBadge} ${verdictText}` : verdictText
859
- const speedCell = verdictColor(padEndDisplay(verdictTextWithBadge, W_VERDICT))
857
+ const speedCell = verdictColor(padEndDisplay(verdictText, W_VERDICT))
860
858
  const moodCell = padEndDisplay(verdictIcon, W_MOOD)
861
859
 
862
860
  // 📖 Stability column - composite score (0–100) from p95 + jitter + spikes + uptime
package/src/tui/theme.js CHANGED
@@ -187,8 +187,6 @@ const PROVIDER_PALETTES = {
187
187
  qwen: [255, 213, 128],
188
188
  zai: [150, 208, 255],
189
189
  iflow: [211, 229, 101],
190
- rovo: [148, 163, 184],
191
- gemini: [66, 165, 245],
192
190
  'opencode-zen': [185, 146, 255],
193
191
  },
194
192
  light: {
@@ -214,8 +212,6 @@ const PROVIDER_PALETTES = {
214
212
  qwen: [132, 89, 0],
215
213
  zai: [0, 104, 171],
216
214
  iflow: [107, 130, 0],
217
- rovo: [90, 100, 126],
218
- gemini: [15, 97, 175],
219
215
  'opencode-zen': [108, 58, 183],
220
216
  },
221
217
  }
@@ -55,7 +55,7 @@ export function createTuiFilters(state, { sources, getApiKey, PROVIDER_METADATA
55
55
 
56
56
  state.results.forEach(r => {
57
57
  const stickyFavorite = state.favoritesPinnedAndSticky && r.isFavorite
58
- // 📖 CLI-only tools (rovo, gemini) and Zen models don't need traditional API keys —
58
+ // 📖 CLI-only tools and Zen models don't need traditional API keys —
59
59
  // 📖 they authenticate via their own CLI login flow, so "configured only" should never hide them.
60
60
  const providerMeta = PROVIDER_METADATA[r.providerKey]
61
61
  const noKeyNeeded = providerMeta?.cliOnly || providerMeta?.zenOnly