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.
- package/README.md +9 -32
- package/changelog/v0.5.25.md +6 -0
- package/changelog/v0.5.26.md +21 -0
- package/package.json +1 -1
- package/sources.js +3 -29
- package/src/core/benchmark.js +0 -10
- package/src/core/config.js +0 -1
- package/src/core/endpoint-installer.js +1 -2
- package/src/core/legacy-proxy-cleanup.js +2 -2
- package/src/core/provider-metadata.js +0 -17
- package/src/core/quota-capabilities.js +0 -1
- package/src/core/tool-bootstrap.js +0 -22
- package/src/core/tool-launchers.js +1 -89
- package/src/core/tool-metadata.js +6 -13
- package/src/core/utils.js +2 -6
- package/src/tui/app.js +0 -2
- package/src/tui/command-palette.js +0 -2
- package/src/tui/key-handler.js +6 -21
- package/src/tui/overlays.js +1 -1
- package/src/tui/render-table.js +5 -7
- package/src/tui/theme.js +0 -4
- package/src/tui/tui-filters.js +1 -1
- package/web/dist/assets/{index-DGvR8-DT.js → index-BDV-Qeuc.js} +3 -3
- package/web/dist/index.html +1 -1
- package/web/src/components/atoms/ProviderLogo.jsx +0 -1
package/src/tui/overlays.js
CHANGED
|
@@ -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
|
|
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)')}`)
|
package/src/tui/render-table.js
CHANGED
|
@@ -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
|
-
// 📖
|
|
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
|
-
|
|
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
|
}
|
package/src/tui/tui-filters.js
CHANGED
|
@@ -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
|
|
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
|