free-coding-models 0.3.37 β 0.3.41
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 +5 -1800
- package/README.md +10 -1
- package/bin/free-coding-models.js +8 -0
- package/package.json +13 -3
- package/src/app.js +30 -0
- package/src/cli-help.js +2 -0
- package/src/command-palette.js +3 -0
- package/src/config.js +7 -0
- package/src/endpoint-installer.js +1 -1
- package/src/key-handler.js +27 -1
- package/src/overlays.js +11 -1
- package/src/shell-env.js +393 -0
- package/src/tool-bootstrap.js +41 -0
- package/src/tool-launchers.js +166 -1
- package/src/tool-metadata.js +12 -0
- package/src/utils.js +12 -0
- package/web/app.legacy.js +900 -0
- package/web/index.html +20 -0
- package/web/server.js +443 -0
- package/web/src/App.jsx +150 -0
- package/web/src/components/analytics/AnalyticsView.jsx +109 -0
- package/web/src/components/analytics/AnalyticsView.module.css +186 -0
- package/web/src/components/atoms/Sparkline.jsx +44 -0
- package/web/src/components/atoms/StabilityCell.jsx +18 -0
- package/web/src/components/atoms/StabilityCell.module.css +8 -0
- package/web/src/components/atoms/StatusDot.jsx +10 -0
- package/web/src/components/atoms/StatusDot.module.css +17 -0
- package/web/src/components/atoms/TierBadge.jsx +10 -0
- package/web/src/components/atoms/TierBadge.module.css +18 -0
- package/web/src/components/atoms/Toast.jsx +25 -0
- package/web/src/components/atoms/Toast.module.css +35 -0
- package/web/src/components/atoms/ToastContainer.jsx +16 -0
- package/web/src/components/atoms/ToastContainer.module.css +10 -0
- package/web/src/components/atoms/VerdictBadge.jsx +13 -0
- package/web/src/components/atoms/VerdictBadge.module.css +19 -0
- package/web/src/components/dashboard/DetailPanel.jsx +131 -0
- package/web/src/components/dashboard/DetailPanel.module.css +99 -0
- package/web/src/components/dashboard/ExportModal.jsx +79 -0
- package/web/src/components/dashboard/ExportModal.module.css +99 -0
- package/web/src/components/dashboard/FilterBar.jsx +73 -0
- package/web/src/components/dashboard/FilterBar.module.css +43 -0
- package/web/src/components/dashboard/ModelTable.jsx +86 -0
- package/web/src/components/dashboard/ModelTable.module.css +46 -0
- package/web/src/components/dashboard/StatsBar.jsx +40 -0
- package/web/src/components/dashboard/StatsBar.module.css +28 -0
- package/web/src/components/layout/Footer.jsx +19 -0
- package/web/src/components/layout/Footer.module.css +10 -0
- package/web/src/components/layout/Header.jsx +38 -0
- package/web/src/components/layout/Header.module.css +73 -0
- package/web/src/components/layout/Sidebar.jsx +41 -0
- package/web/src/components/layout/Sidebar.module.css +76 -0
- package/web/src/components/settings/SettingsView.jsx +264 -0
- package/web/src/components/settings/SettingsView.module.css +377 -0
- package/web/src/global.css +199 -0
- package/web/src/hooks/useFilter.js +83 -0
- package/web/src/hooks/useSSE.js +49 -0
- package/web/src/hooks/useTheme.js +27 -0
- package/web/src/main.jsx +15 -0
- package/web/src/utils/download.js +15 -0
- package/web/src/utils/format.js +42 -0
- package/web/src/utils/ranks.js +37 -0
- package/web/styles.legacy.css +963 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,1805 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
---
|
|
3
3
|
|
|
4
|
-
## [0.3.
|
|
5
|
-
|
|
6
|
-
### Changed
|
|
7
|
-
- **Removed X/Twitter references** β no more `π¦ Follow me on X` links in README and TUI footer
|
|
8
|
-
- **Discord link more prominent** in TUI footer (replaced X banner)
|
|
9
|
-
- **README navigation bar** β now links all 10 sections (Why, Quick Start, Providers, Usage, TUI Keys, Features, Contributing, Licensing, Security, Support, License)
|
|
10
|
-
- **Deleted accidental `echo` file** from repo
|
|
11
|
-
- 238 models across 25 providers
|
|
12
|
-
|
|
13
|
-
## [0.3.35] - 2026-04-07
|
|
14
|
-
|
|
15
|
-
### Added
|
|
16
|
-
- **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)
|
|
17
|
-
- Free sandbox mode: 2 req/min per IP per model (no API key needed), 400 RPM with API key
|
|
18
|
-
- **Now 238 models across 25 providers** (was 230/24)
|
|
19
|
-
|
|
20
|
-
### SECURITY.md
|
|
21
|
-
- **SECURITY.md** β full security policy with vulnerability reporting, architecture, and supply chain docs
|
|
22
|
-
- **CODEOWNERS** β all changes require @vava-nessa review
|
|
23
|
-
- **Dependabot** β weekly automated dependency + GitHub Actions updates (`.github/dependabot.yml`)
|
|
24
|
-
- **Security Audit CI** β `npm audit` + lockfile lint on every push/PR + weekly schedule (`.github/workflows/security-audit.yml`)
|
|
25
|
-
- **npm Provenance** β release workflow now publishes with `--provenance` (Sigstore-signed)
|
|
26
|
-
- **SBOM generation** β Software Bill of Materials attached to every GitHub Release
|
|
27
|
-
- **README trust badges** β dependency count, provenance, supply chain badges
|
|
28
|
-
- **README π‘οΈ Security section** β what the tool does/doesn't do, supply chain table
|
|
29
|
-
|
|
30
|
-
## [0.3.34] - 2026-04-06
|
|
31
|
-
|
|
32
|
-
### Added
|
|
33
|
-
- **Chutes AI** β new decentralized free provider (4 models: DeepSeek R1, Llama 3.1 70B, Qwen 2.5 72B, Qwen2.5 Coder 32B)
|
|
34
|
-
- **Google Gemini 3.1 Pro** β replaced dead Gemini 3 Pro (shut down March 9)
|
|
35
|
-
- **Google Gemma 4 family** β Gemma 4 31B, Gemma 4 26B MoE, Gemma 4 E4B added to Google AI Studio
|
|
36
|
-
- **Qwen3.6 Plus** and **Qwen3.5 Plus** added to Alibaba DashScope
|
|
37
|
-
- **NVIDIA NIM: Kimi K2 Instruct 0905** added
|
|
38
|
-
- **SambaNova: Qwen3-235B-A22B-Instruct-2507** added
|
|
39
|
-
- **OpenRouter: ~10 new free models** (arcee trinity, mimo-v2-flash, etc.) β 25 total
|
|
40
|
-
- **Together AI: expanded to 19 free models** (DeepSeek V3.2, MiniMax M2.1, etc.)
|
|
41
|
-
- **Cloudflare: 4 new models** (gemma-4-26b, mistral-small-3.1, qwq-32b, granite-4.0) β 15 total
|
|
42
|
-
- **Scaleway: gpt-oss-120b and holo2-30b-a3b** added
|
|
43
|
-
- **Hyperbolic: gpt-oss-20b and Qwen3-235B-Instruct-2507** added
|
|
44
|
-
- **Rovo: GPT-5.2, GPT-5.2-Codex, Claude Haiku 4.5** added
|
|
45
|
-
- **OpenCode Zen: mimo-v2-pro-free, mimo-v2-omni-free** added; fixed context windows (gpt-5-nano: 128kβ400k, nemotron-3-super-free: 128kβ1M)
|
|
46
|
-
|
|
47
|
-
### Changed
|
|
48
|
-
- **Groq scout model renamed** β `llama-4-scout-17b-16e-preview` β `llama-4-scout-17b-16e-instruct`
|
|
49
|
-
- **Now 230 models across 24 providers** (was 174/23)
|
|
50
|
-
- **README provider table fully updated** with accurate per-provider counts
|
|
51
|
-
|
|
52
|
-
### Fixed
|
|
53
|
-
- Removed 3 deprecated Cerebras models (llama3.3-70b, qwen-3-32b, llama-4-scout-17b-16e-instruct) β 4 remain
|
|
54
|
-
- Fixed missing comma in googleai array causing undefined model entry
|
|
55
|
-
- Replaced all `??%` placeholder SWE scores with reasonable estimates
|
|
56
|
-
|
|
57
|
-
## [0.3.33] - 2026-04-01
|
|
58
|
-
|
|
59
|
-
### Changed
|
|
60
|
-
- **X badge darker fuchsia background** (`rgb(140,0,80)`) for better readability
|
|
61
|
-
- **Updated text** β "Follow me on X: @vavanessadev to check my other projects! π"
|
|
62
|
-
|
|
63
|
-
## [0.3.32] - 2026-04-01
|
|
64
|
-
|
|
65
|
-
### Fixed
|
|
66
|
-
- **Corrected X/Twitter username to @vavanessadev** β link and display text now point to the right profile
|
|
67
|
-
|
|
68
|
-
### Changed
|
|
69
|
-
- **X support badge now on fuchsia background** β bold white-on-fuchsia with yellow username, impossible to miss
|
|
70
|
-
- **Discord moved to the very bottom line** of the TUI footer
|
|
71
|
-
- **X follow link added to top of README**
|
|
72
|
-
|
|
73
|
-
## [0.3.31] - 2026-04-01
|
|
74
|
-
|
|
75
|
-
### Changed
|
|
76
|
-
- **Footer layout reorganized** β Discord link moved to the very bottom line of the TUI for better visibility
|
|
77
|
-
- **X/Twitter support message** β added π¦ "Support me on X: @vavanessadev π" with clickable link in the last release footer line
|
|
78
|
-
|
|
79
|
-
## [0.3.29] - 2026-03-27
|
|
80
|
-
|
|
81
|
-
### Added
|
|
82
|
-
- **Fluorescent green UPDATE AVAILABLE banner** β impossible-to-miss fluo green (πβ¬οΈ) banner at the bottom of the TUI when a new version is detected; click it to update instantly
|
|
83
|
-
- **Command Palette update entry** β `β¬οΈ UPDATE NOW` is always the first result in Ctrl+P when an update is available
|
|
84
|
-
- **Shift+U hotkey** β press Shift+U from the main table to trigger an immediate update
|
|
85
|
-
- **Mouse-clickable update banner** β click the fluo green banner to install the latest version and relaunch
|
|
86
|
-
- **Background version re-check every 5 minutes** β if a new version is published while the TUI is open, the banner appears live without restarting
|
|
87
|
-
- **Aggressive pre-TUI update prompt** β fluorescent green header, and "Continue without update" warns that reminders will follow
|
|
88
|
-
- **Last release date in footer** β light pink `Last release: Mar 27, 2026, 09:42 PM` shows when the package was last published to npm, so users know how fresh the model data is
|
|
89
|
-
- **Demo2 GIF** β added `demo2.gif` to README for visual showcase of the TUI
|
|
90
|
-
|
|
91
|
-
### Fixed
|
|
92
|
-
- **Auto-update now detects the correct package manager** β bun, pnpm, and yarn users no longer get duplicate npm installs (fixes #46)
|
|
93
|
-
- Update banner in footer shows the correct install command for your package manager
|
|
94
|
-
|
|
95
|
-
## [0.3.28] - 2026-03-27
|
|
96
|
-
|
|
97
|
-
_(Skipped β published as 0.3.28 without changelog in commit message, all changes are in 0.3.29)_
|
|
98
|
-
|
|
99
|
-
## [0.3.27] - 2026-03-27
|
|
100
|
-
|
|
101
|
-
## [0.3.26] - 2026-03-27
|
|
102
|
-
|
|
103
|
-
### Added
|
|
104
|
-
- **Groq**: Added Compound + Compound Mini; fixed Llama 4 Scout context (10M)
|
|
105
|
-
- **OpenRouter**: Added MiniMax M2.5, Nemotron 3 Super, Hermes 3 405B, Gemma 3n E4B
|
|
106
|
-
- **HuggingFace**: Replaced invalid DeepSeek-V3-Coder + outdated starcoder2-15b with DeepSeek V3 0324 + Qwen2.5 Coder 32B
|
|
107
|
-
- **Replicate**: Replaced CodeLlama 70B (2023) with DeepSeek V3 0324 + Llama 3.3 70B
|
|
108
|
-
- **Cloudflare**: Added Kimi K2.5, GLM-4.7-Flash, Llama 4 Scout, Nemotron 3 Super, Qwen3 30B MoE
|
|
109
|
-
- **Scaleway**: Added Qwen3.5 400B VLM + Mistral Large 675B
|
|
110
|
-
- **DeepInfra**: Replaced Mixtral Code with Nemotron 3 Super + DeepSeek V3 0324 + Qwen3 235B
|
|
111
|
-
- **Fireworks**: Added Llama 4 Maverick + Qwen3 235B
|
|
112
|
-
- **Hyperbolic**: Added Qwen3 80B Thinking variant
|
|
113
|
-
- **Together AI**: Added Qwen3.5 400B VLM, MiniMax M2.5, GLM-5
|
|
114
|
-
|
|
115
|
-
### Changed
|
|
116
|
-
- **Rovo Dev CLI**: Updated Sonnet 4 β Sonnet 4.6, added Opus 4.6
|
|
117
|
-
- **Groq**: Removed 4 deprecated models (R1 Distill 70B, QwQ 32B, Kimi K2, Maverick)
|
|
118
|
-
- **OpenRouter**: Updated context sizes for multiple models
|
|
119
|
-
|
|
120
|
-
## [0.3.25] - 2026-03-19
|
|
121
|
-
|
|
122
|
-
### Added
|
|
123
|
-
- **Installed Models Manager** β View, launch, and disable models configured in external tools (Goose, Crush, Aider, Qwen, Pi, OpenHands, Amp)
|
|
124
|
-
- Access via Command Palette (Ctrl+P) β "Installed models"
|
|
125
|
-
- Scans all supported tool configs automatically on opening
|
|
126
|
-
- Displays all models per tool (e.g., Crush shows both large and small models)
|
|
127
|
-
- Actions: Launch (Enter), Disable (D) with backup, Reinstall (R)
|
|
128
|
-
- Soft delete: Comments out model entries and saves backups to ~/.free-coding-models-backups.json
|
|
129
|
-
- **Full mouse support for the TUI** β Click, right-click, double-click, and scroll work throughout the interface
|
|
130
|
-
- **Click column headers** β Sort by any column (click Rank, Tier, SWE%, CTX, Model, Provider, etc.)
|
|
131
|
-
- **Click model rows** β Move cursor to any model (left-click)
|
|
132
|
-
- **Right-click model rows** β Toggle favorite (same as F key)
|
|
133
|
-
- **Double-click model rows** β Select model and launch (same as Enter)
|
|
134
|
-
- **Mouse wheel** β Scroll through the main table, overlays (Settings, Help, Changelog), and command palette results
|
|
135
|
-
- **Click CLI Tools header** β Cycle through tool modes (same as Z key)
|
|
136
|
-
- **Click Tier header** β Cycle through tier filters (same as T key)
|
|
137
|
-
- **Click footer hotkeys** β Trigger any visible hotkey from the footer
|
|
138
|
-
- **Command palette click** β Click inside to select items, double-click to confirm; click outside to close
|
|
139
|
-
- **Recommend questionnaire click** β Click on option rows to select, double-click to confirm
|
|
140
|
-
- **Mouse unit tests** β 46 new tests covering SGR sequence parsing, double-click detection, modifiers, and COLUMN_SORT_MAP validation
|
|
141
|
-
|
|
142
|
-
### Changed
|
|
143
|
-
- **CLI Tools column redesigned** β Renamed from "Compatible with" to "CLI Tools", with left-aligned emoji display (compatible tools packed left instead of fixed slot positions)
|
|
144
|
-
- **Sort arrow overflow fixed** β SWE%, CTX, Stability, and Uptime columns now properly fit within their widths when sorted (arrow now `βSWE%` instead of `β SWE%`)
|
|
145
|
-
- **Mouse sequence suppression** β SGR mouse sequences no longer leak into keypress handlers (prevents spurious sort/filter triggers when clicking)
|
|
146
|
-
|
|
147
|
-
### Fixed
|
|
148
|
-
- **Command palette scroll leak** β Mouse wheel no longer injects raw SGR sequence bytes into the command palette text input
|
|
149
|
-
- **Double-action on model click** β Clicking a model row now only moves the cursor; it no longer simultaneously triggers column sorting
|
|
150
|
-
- **Mouse event listener order** β Fixed race condition where readline emitted keypress events before mouse data was processed
|
|
151
|
-
|
|
152
|
-
## [0.3.24] - 2026-03-19
|
|
153
|
-
|
|
154
|
-
### Added
|
|
155
|
-
- **Unique emoji per tool** β Every CLI tool now has a dedicated emoji shown in the Compatible column, Z-cycle badge, command palette, help overlay, and README (π¦ OpenCode, π¦ OpenClaw, π Crush, πͺΏ Goose, Ο Pi, π Aider, π Qwen, π€² OpenHands, β‘ Amp, π¦ Rovo, β Gemini)
|
|
156
|
-
- **Merged compat column** β OpenCode CLI and Desktop share π¦ in a single slot (11 slots instead of 12 separate initials)
|
|
157
|
-
- **COMPAT_COLUMN_SLOTS** β New export in tool-metadata.js for merged compatible-column rendering
|
|
158
|
-
- **Width warning now always shows** - Terminal width warning displays every time terminal is resized below 80 columns (previously limited to 2 shows per session)
|
|
159
|
-
- **Gemini CLI integration** - New CLI-only tool provider with 3 models (Gemini 3 Pro π, Gemini 2.5 Pro, Gemini 2.5 Flash)
|
|
160
|
-
- **Rovo Dev CLI integration** - New CLI-only tool provider with Claude Sonnet 4 π
|
|
161
|
-
- **Tool compatibility alerts** - When trying to launch Rovo/Gemini models with wrong tool, shows alert and offers to switch
|
|
162
|
-
- **Auto-install detection** - Prompt to install CLI tools when binary not found (Rovo/Gemini)
|
|
163
|
-
- **OpenAI-compatible API support for Gemini** - Gemini CLI can use custom providers via environment variables
|
|
164
|
-
- **New CLI flags** - Added `--rovo` and `--gemini` launch options
|
|
165
|
-
- **"π" badges** - Mark newly added models in the table (Claude Sonnet 4, Gemini 3 Pro)
|
|
166
|
-
- **OpenCode Zen free models** - 5 new free models (Big Pickle, GPT 5 Nano, MiMo V2 Flash Free, MiniMax M2.5 Free, Nemotron 3 Super Free) exclusive to OpenCode CLI/Desktop via `opencode-zen` provider
|
|
167
|
-
- **"Compatible with" column** - New TUI column showing colored emojis for each tool a model supports; incompatible tools show dim spaces
|
|
168
|
-
- **Tool color system** - Each of the 12 supported tools now has a unique RGB color and emoji used in the Z-cycle badge and compatibility column
|
|
169
|
-
- **Incompatible model highlighting** - When a tool mode is active (via Z), models that can't run with that tool get a dark red background for instant visibility β they stay in their normal sorted position (not pushed to the bottom)
|
|
170
|
-
- **Tool compatibility functions** - `getCompatibleTools()` and `isModelCompatibleWithTool()` in tool-metadata.js for programmatic compatibility checks
|
|
171
|
-
- **Incompatible model fallback overlay** - When pressing Enter on a model that can't run on the active tool (red-highlighted row), an in-TUI overlay appears with two options: (1) switch to a compatible tool, or (2) pick a similar model by SWE score that works with the current tool
|
|
172
|
-
- **findSimilarCompatibleModels()** - New function in tool-metadata.js that finds models with closest SWE scores compatible with the active tool
|
|
173
|
-
- **Updated provider/model counts** - Now 23 providers with 171 models (was 20/160)
|
|
174
|
-
|
|
175
|
-
### Changed
|
|
176
|
-
- **Z key cycle** - Rovo and Gemini added to tool mode cycle (last in order)
|
|
177
|
-
- **Tool metadata** - Removed `initial` field (replaced by emojis), added `cliOnly` flag for CLI-only tools, `emoji` and `color` properties for all 12 tools
|
|
178
|
-
- **Provider metadata** - Added Rovo, Gemini, and OpenCode Zen provider information
|
|
179
|
-
- **Responsive column hiding** - Compatible column hides first (before Rank) on narrow terminals
|
|
180
|
-
- **Key handler** - Zen models auto-switch to OpenCode CLI on launch; API key warnings skip Zen models
|
|
181
|
-
- **Documentation** - Updated README with CLI-only tools section, Zen models, compatibility matrix
|
|
182
|
-
|
|
183
|
-
### Fixed
|
|
184
|
-
- **Missing import error** - Fixed `getToolMeta` not defined in key-handler.js
|
|
185
|
-
- **CLI-only tools API key requirement** - Gemini CLI and Rovo Dev CLI no longer require API keys to be configured before launching; these tools manage their own authentication
|
|
186
|
-
|
|
187
|
-
## 0.3.23
|
|
188
|
-
|
|
189
|
-
### Added
|
|
190
|
-
- **Favorites display mode (`Y`)**: Added a global toggle to switch favorites between `pinned + always visible` and `normal rows` (starred only, fully obeying active filters/sort).
|
|
191
|
-
- **Favorites mode row in Settings**: Added a dedicated Settings row to inspect/toggle favorites display behavior without leaving the maintenance screen.
|
|
192
|
-
- **Expanded command palette action menus**: Added nested menus for Ping Mode (speed/normal/slow/forced with explanations), Target Tool (all supported tools with explanations), and Favorites Mode (including the new `Y` flow).
|
|
193
|
-
- **Active text-filter footer alert**: When a custom search filter is active (for example `deep`), the last TUI footer line now shows a high-visibility inline badge (between `N Changelog` and `Ctrl+C Exit`) with the exact query and an `X` shortcut to clear it instantly.
|
|
194
|
-
|
|
195
|
-
### Changed
|
|
196
|
-
- **Favorites sorting/filtering behavior**: Sort/filter logic now respects the selected favorites mode across the table refresh loop, hotkeys, and renderer so non-pinned mode behaves consistently everywhere.
|
|
197
|
-
- **Favorites default mode**: New/legacy configs now default to `Normal filter/sort` favorites mode (not pinned) until users press `Y` to opt into pinned+sticky behavior.
|
|
198
|
-
- **Footer/help/docs shortcut hints**: Surfaced `Y` in the TUI footer, Help overlay, and README so the new favorites mode is discoverable.
|
|
199
|
-
|
|
200
|
-
## 0.3.22
|
|
201
|
-
|
|
202
|
-
### Added
|
|
203
|
-
- **Hierarchical command palette navigation**: Ctrl+P now opens an improved command palette with expandable/collapsible categories and subcategories for better organization.
|
|
204
|
-
- **Arrow key navigation in command palette**: Use left/right arrows to expand and collapse categories, up/down to navigate, Enter to execute or toggle.
|
|
205
|
-
- **Rich color scheme for command palette**: Categories use bold blue headers, subcategories use bold text, commands show keyboard shortcuts.
|
|
206
|
-
- **Visual expand/collapse indicators**: βΌ shows expanded categories, βΆ shows collapsed, β’ marks individual commands.
|
|
207
|
-
- **Concise default view**: Categories are collapsed by default (except Filters) showing less detail on first open.
|
|
208
|
-
- **Colored tier filters**: Tier filters (S+, S, A+, A, A-, B+, B, C) now display with their corresponding TUI colors for quick identification.
|
|
209
|
-
- **Specific provider filters**: Added 13 individual provider filters (NVIDIA NIM, Groq, Cerebras, SambaNova, OpenRouter, Together AI, DeepInfra, Fireworks, Hyperbolic, Google AI, Hugging Face) with their signature provider colors.
|
|
210
|
-
- **Filter by model category**: New "Filter by model" category with autocomplete that dynamically shows top 20 visible models, complete with provider icons and colored model names.
|
|
211
|
-
- **Improved search cursor**: Cursor placement fixed to appear right after the `>` prompt instead of after placeholder text for natural typing flow.
|
|
212
|
-
- **Lightning bolt in title**: Command Palette title now shows β‘ emoji for better visibility and visual appeal.
|
|
213
|
-
|
|
214
|
-
### Changed
|
|
215
|
-
- **Footer layout cleanup**: Added consistent spacing before `F Toggle Favorite`, moved `N Changelog β’ Ctrl+C Exit` to a dedicated final footer line for better readability.
|
|
216
|
-
- **Removed Y key binding**: Install Endpoints is no longer a direct hotkey β accessible only via Settings (`P`) or Command Palette (`Ctrl+P`). The `Y` key is now free/unbound.
|
|
217
|
-
- **Removed proxy notice from footer**: The "Proxy is temporarily disabled" banner has been fully retired from the TUI footer and its backing constant removed.
|
|
218
|
-
- **Command palette fuzzy search fix**: `buildCommandPaletteEntries()` now expands all categories so child commands are visible to fuzzy search.
|
|
219
|
-
- **Flat Pages + Actions in β‘οΈ Command Palette**: page entries and action entries are now listed directly at root level (no extra submenu depth) for faster access.
|
|
220
|
-
- **Command explanations after shortcuts**: command palette rows now show concise English hints after hotkeys (example: `(Z) β Change target AI Coding CLI Tool.`).
|
|
221
|
-
- **β‘οΈ emoji consistency**: user-facing Command Palette mentions now consistently render as `β‘οΈ Command Palette` in TUI and docs.
|
|
222
|
-
- **README Quick Start flow**: install section now explicitly adds βcreate a free account on one of the providersβ with a direct anchor link.
|
|
223
|
-
- **Provider section renamed for clarity**: Quick Start provider table now lives under `List of Free AI Providers`.
|
|
224
|
-
- **Quick Start CTA highlight**: added a large green `USE β‘οΈ COMMAND PALETTE / CTRL+P` badge right after the command palette instruction.
|
|
225
|
-
|
|
226
|
-
### Fixed
|
|
227
|
-
- **Double emoji display bug**: Fixed duplicate emoji icons in command palette entries (was showing `βΆ π π Filters` instead of `βΆ π Filters`).
|
|
228
|
-
- **Provider cycle command behavior**: `Cycle provider` in β‘οΈ Command Palette now correctly cycles providers again instead of resetting to `All`.
|
|
229
|
-
|
|
230
|
-
## 0.3.21
|
|
231
|
-
|
|
232
|
-
### Changed
|
|
233
|
-
- **Responsive table layout**: the TUI now adapts to narrow terminals by progressively shrinking columns and hiding least-useful ones. Compact mode shortens headers (`Lat. P`, `Avg. P`, `StaB.`, `PrODβ¦`) and tightens Provider (10 cols), Health (13 cols), Latest Ping (10 cols), and Avg Ping (8 cols). Below compact, Rank β Up% β Tier β Stability are hidden one by one. Minimum usable width: ~116 cols.
|
|
234
|
-
- **SWE% column tightened**: reduced from 9 to 6 columns wide β trims excess right padding without losing data.
|
|
235
|
-
- **Provider truncation in compact mode**: provider names longer than 5 chars are truncated to 4 chars + `β¦` (e.g. `Cereβ¦`).
|
|
236
|
-
- **Health truncation in compact mode**: status text longer than 6 chars is truncated with `β¦` (e.g. `π₯ 429 TRβ¦`).
|
|
237
|
-
- **Removed "Used" column from TUI**: the token usage column has been removed from the main table as it was outdated.
|
|
238
|
-
- **Width guardrail threshold tightened**: the narrow-terminal warning now triggers only below 80 columns (instead of broader widths) and keeps the same 2-second auto-hide behavior.
|
|
239
|
-
- **Width warning is always enforced in narrow terminals**: removed the `Small Width Warnings` Settings toggle and the `--disable-widths-warning` runtime flag so the startup guardrail stays consistent.
|
|
240
|
-
|
|
241
|
-
### Fixed
|
|
242
|
-
- **`--premium` filter lock-in**: premium now applies a resettable startup preset (S-tier + verdict sort) instead of hard-locking an extra hidden elite-only filter.
|
|
243
|
-
|
|
244
|
-
## 0.3.19
|
|
245
|
-
|
|
246
|
-
### Added
|
|
247
|
-
- **Command palette overlay (`Ctrl+P`)**: Added a searchable floating palette with fuzzy matching so users can quickly run filters, sorts, overlays, and global actions.
|
|
248
|
-
|
|
249
|
-
### Changed
|
|
250
|
-
- **Main footer and help discoverability**: surfaced `Ctrl+P` in table hints and Help overlay so the new command launcher is visible immediately.
|
|
251
|
-
- **Command palette spacing polish**: added two-character inner padding around the floating palette so the overlay feels less cramped and visually cleaner.
|
|
252
|
-
|
|
253
|
-
### Fixed
|
|
254
|
-
- **Command palette visual jitter**: background ping cycles now pause while the command palette is open so table rows stop reshuffling during command search.
|
|
255
|
-
- **Command palette background freeze**: while the palette is open, the full table behind it is now frozen (spinner glyphs, ping countdown, and dynamic row updates) and resumes instantly on close.
|
|
256
|
-
|
|
257
|
-
## 0.3.18
|
|
258
|
-
|
|
259
|
-
### Added
|
|
260
|
-
- **Missing tool bootstrap flow**: FCM now detects when a target CLI is absent, offers a minimal in-TUI install confirmation, runs the official global install command, then resumes the selected model launch automatically.
|
|
261
|
-
|
|
262
|
-
### Changed
|
|
263
|
-
- **TUI readability overhaul across every screen**: the main table, Settings, Help, Smart Recommend, Feedback, and Changelog overlays now share a semantic high-contrast theme system instead of a patchwork of hardcoded colors.
|
|
264
|
-
- **Global theme switching now works for real**: press `G` to cycle `auto β dark β light` live, and the Settings screen now exposes a visible `Global Theme` row for the same control.
|
|
265
|
-
- **Launcher binary resolution**: direct tool launches now search PATH plus common user bin directories so a freshly installed CLI can be reused immediately in the same FCM session.
|
|
266
|
-
|
|
267
|
-
### Fixed
|
|
268
|
-
- **Theme repaint bugs**: provider colors, tier colors, separators, badges, cursor highlights, and overlay backgrounds now update immediately when the theme changes instead of keeping stale import-time colors.
|
|
269
|
-
|
|
270
|
-
## 0.3.17
|
|
271
|
-
|
|
272
|
-
### Added
|
|
273
|
-
- **Auto Light/Dark Theme**: Implemented automatic detection of the user's terminal theme (dark or light) so that the TUI is always readable. Added semantic color tokens, and users can override the theme as `dark`, `light`, or `auto` via the Settings interface.
|
|
274
|
-
|
|
275
|
-
## 0.3.16
|
|
276
|
-
|
|
277
|
-
### Added
|
|
278
|
-
- **iFlow free coding models**: Added the iFlow provider to the README and TUI, supporting `deepseek-v3`, `mini-max-m2.5`, etc.
|
|
279
|
-
|
|
280
|
-
## 0.3.15
|
|
281
|
-
|
|
282
|
-
### Added
|
|
283
|
-
- **GLM-4.7-Flash and GLM-4.5-Flash models**: Added ZAI's free coding models GLM-4.7-Flash and GLM-4.5-Flash to the ZAI provider. Both models are rated S tier with 59.2% SWE-bench scores and are completely free with unlimited API access.
|
|
284
|
-
|
|
285
|
-
### Changed
|
|
286
|
-
- Added vertical column separators (gentle dark orange) for clearer column separation and removed the horizontal separator line in the main TUI.
|
|
287
|
-
|
|
288
|
-
## 0.3.14
|
|
289
|
-
|
|
290
|
-
### Changed
|
|
291
|
-
- **Massive TUI Controller Extraction:** Extracted the main UI event loop and state machine out of `bin/free-coding-models.js` into a dedicated `src/app.js` controller. This cuts the main executable size drastically and makes the TUI architecture more modular and testable.
|
|
292
|
-
- **Robust Error Boundaries:** Wrapped all critical asynchronous operations, keypress handlers, UI render timers, and polling cycles with comprehensive `try/catch` blocks. Instead of the TUI crashing and destroying the terminal scrollback on unexpected errors, it will now gracefully exit the alternate screen buffer, print a formatted stack trace, and point users to the GitHub issue tracker and feedback form.
|
|
293
|
-
- **Global Crash Resiliency:** Added `uncaughtException` and `unhandledRejection` listeners at the entry point to guarantee terminal restoration even if a library fails catastrophically.
|
|
294
|
-
|
|
295
|
-
## 0.3.13
|
|
296
|
-
|
|
297
|
-
### Fixed
|
|
298
|
-
- **Small Width Warnings toggle actually works again**: the Settings row now shows `Small Width Warnings` with clear enabled/disabled status, the startup overlay reacts immediately to the toggle, and the narrow-terminal warning now auto-hides after 2 seconds instead of 4.
|
|
299
|
-
|
|
300
|
-
## 0.3.12
|
|
301
|
-
|
|
302
|
-
> **Proxy / bridge update:** the current legacy proxy stack is now officially discontinued while we rebuild that whole layer from zero. This cleanup is intentional: Claude Code support, a smarter router, and a much more reliable external-tools bridge are being reworked as a separate, cleaner system and will come back in a future release. In the meantime, FCM has been cleaned up and narrowed to the stable direct-launch surface so the app stays solid for day-to-day usage.
|
|
303
|
-
|
|
304
|
-
### Added
|
|
305
|
-
- **Legacy proxy cleanup action**: Settings now includes a one-shot cleanup that removes discontinued proxy leftovers from older installs and explains that a more stable replacement is in progress.
|
|
306
|
-
|
|
307
|
-
### Changed
|
|
308
|
-
- **Stable direct-launch surface**: The app now documents and exposes only the supported direct-provider launcher workflow while the old bridge is rebuilt.
|
|
309
|
-
- **README reset**: Rewrote the documentation to match the real product surface, current tools, and current test commands.
|
|
310
|
-
- **Footer transparency**: The main TUI now shows an explicit magenta notice that the old proxy is disabled while the replacement bridge is being rebuilt.
|
|
311
|
-
|
|
312
|
-
### Fixed
|
|
313
|
-
- **Selected model now really becomes the launched tool default**: external tool launch prep now writes the chosen model into each tool config before spawn, and OpenClaw no longer hardcodes `nvidia/*` when another provider was selected.
|
|
314
|
-
|
|
315
|
-
### Removed
|
|
316
|
-
- **Global proxy stack**: Deleted the old proxy runtime, daemon flow, request-log flow, and related orphaned helpers/tests.
|
|
317
|
-
- **Hidden launcher bridges**: Claude Code, Codex, and Gemini are no longer exposed in the app while their integrations are being rewritten.
|
|
318
|
-
|
|
319
|
-
## 0.3.11
|
|
320
|
-
|
|
321
|
-
### Fixed
|
|
322
|
-
- Added early 404 response when a requested model has no registered accounts, ensuring clear error handling.
|
|
323
|
-
|
|
324
|
-
### Removed
|
|
325
|
-
- **Profile system**: Entire profile system removed to ensure API keys persist permanently across all sessions. No more profile switching causing API key loss.
|
|
326
|
-
|
|
327
|
-
### Added
|
|
328
|
-
- **`--proxy` foreground mode**: New `--proxy` flag starts FCM Proxy V2 in the current terminal with a live dashboard showing status, accounts, provider breakdown, and real-time request log. No daemon install needed β works from dev checkout too.
|
|
329
|
-
|
|
330
|
-
### Fixed
|
|
331
|
-
- **Claude Code proxy auth**: Proxy now accepts `x-api-key` header (used by Anthropic SDK / Claude Code) in addition to `Authorization: Bearer`
|
|
332
|
-
- **Claude model fallback**: When `anthropicRouting` is all null, Claude model names now fall back to the first available account instead of returning "Model not found"
|
|
333
|
-
- **Proxy sync for Claude Code**: Added `claude-code` to `PROXY_SYNCABLE_TOOLS` so the env file is properly written/updated by proxy sync
|
|
334
|
-
- **Correct env var name**: Claude Code env file now exports `ANTHROPIC_API_KEY` (SDK standard) instead of `ANTHROPIC_AUTH_TOKEN`
|
|
335
|
-
- **Auto-source shell profile**: Claude Code env file is now automatically sourced in `.zshrc` / `.bashrc` / `.bash_profile`
|
|
336
|
-
- **Removed deleted profile functions from tests**: Cleaned up test imports after profile system removal from config.js
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## 0.3.9
|
|
341
|
-
|
|
342
|
-
### Improved
|
|
343
|
-
- **Enhanced `--premium` flag**: Now applies strict elite-only constraints. Shows only **S/S+** tier models with perfect health (**UP**) and a good verdict (**Perfect**, **Normal**, or **Slow**). Models with 429 errors, auth failures, or poor performance are automatically hidden.
|
|
344
|
-
- **Accurate Token Usage Tracking**: The "Used" column now uses the persistent `token-stats.json` file as the source of truth, providing accurate historical totals instead of only the most recent logs.
|
|
345
|
-
- **Enhanced Log Transparency**: The request log page now always shows the requested model and the actual upstream model (e.g., `llama-3.1-405b β meta/llama-3.1-405b-instruct`) whenever they differ.
|
|
346
|
-
- **Pretty Provider Labels**: The request log page now uses human-readable provider labels (e.g., "NVIDIA NIM", "SambaNova") instead of raw internal keys.
|
|
347
|
-
- **Fixed Tier Filtering Family Logic**: Updated `--tier S` behavior to correctly include both **S** and **S+** models (matching documentation).
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## 0.3.6
|
|
352
|
-
|
|
353
|
-
### Added
|
|
354
|
-
- **AI `/testfcm` workflow**: Added a repo-local PTY runner, workflow doc, slash-command prompts, and artifact/report directories so an agent can drive the real TUI, launch a tool, send `hi`, and write a Markdown bug report with evidence.
|
|
355
|
-
- **Mock tool verification path**: Added a tiny fake `crush` binary plus `test:fcm:mock` so maintainers can validate the TUI β launcher β prompt plumbing even when a real coding tool is not installed locally.
|
|
356
|
-
|
|
357
|
-
### Fixed
|
|
358
|
-
- **`--json` startup crash**: JSON mode now reuses the same provider-aware ping function as the TUI without crashing on `pingModel is not a function`.
|
|
359
|
-
- **Managed endpoint installs no longer resurrect stale disk entries**: install/refresh saves now replace the tracked `endpointInstalls` snapshot so old provider-tool records from another config state do not leak back into the current catalog set.
|
|
360
|
-
- **Favorites persistence is now much harder to break**: favorite toggles now reload the latest disk config before saving, keep the active profile snapshot in sync, and use atomic config writes so pinned rows no longer disappear after unrelated saves or updates.
|
|
361
|
-
- **API key saves no longer clobber the rest of the config**: editing one provider now persists only that provider against the latest on-disk snapshot, preserves rotated extra keys, and stops stale config writes from wiping other saved keys.
|
|
362
|
-
- **Configured Only no longer hides favorites**: starred rows now stay visible and pinned at the top even when the provider has no currently configured key.
|
|
363
|
-
|
|
364
|
-
## 0.3.5
|
|
365
|
-
|
|
366
|
-
### Fixed
|
|
367
|
-
- **Claude Code beta-route compatibility**: FCM Proxy V2 now matches routes on the URL pathname, so Anthropic requests like `/v1/messages?beta=true` and `/v1/messages/count_tokens?beta=true` resolve correctly instead of failing with a fake βselected model may not existβ error.
|
|
368
|
-
- **Claude proxy parity with `free-claude-code`**: The Claude integration was revalidated against the real `claude` binary, and the proxy-side Claude alias mapping now reaches the upstream provider again in the exact `free-claude-code` style flow.
|
|
369
|
-
|
|
370
|
-
## 0.3.4
|
|
371
|
-
|
|
372
|
-
### Added
|
|
373
|
-
- **Proxy root landing JSON**: `GET /` on FCM Proxy V2 now returns a small unauthenticated status payload, so browser checks no longer fail with `{"error":"Unauthorized"}`.
|
|
374
|
-
- **`daemon stop` CLI command**: The public CLI now supports `free-coding-models daemon stop`, matching the existing daemon manager capability and the documented workflow.
|
|
375
|
-
|
|
376
|
-
### Fixed
|
|
377
|
-
- **README/UI parity restored**: The docs now match the current product surface, including `160` models, the `Used` token-history column, and the current launcher/proxy behavior.
|
|
378
|
-
- **Malformed config sections are normalized on load**: Invalid `apiKeys`, `providers`, or `settings` values are now coerced back to safe empty objects instead of leaking broken runtime shapes into the app.
|
|
379
|
-
|
|
380
|
-
## 0.3.3
|
|
381
|
-
|
|
382
|
-
### Fixed
|
|
383
|
-
- **Claude Code now uses the real `free-claude-code` proxy contract**: FCM stopped injecting proxy slugs into `claude --model` / `ANTHROPIC_MODEL` and now launches Claude Code with only `ANTHROPIC_BASE_URL` + `ANTHROPIC_AUTH_TOKEN`.
|
|
384
|
-
- **Claude routing is now proxy-side `MODEL` / `MODEL_*` mapping**: The selected FCM model is persisted into the proxy's Anthropic routing config and hot-reloaded by the daemon, so fake Claude model ids resolve to the chosen free backend exactly like `free-claude-code`.
|
|
385
|
-
- **Claude launch now forces a real Claude alias**: FCM starts Claude Code with `--model sonnet`, which overrides stale broken local selections like `gpt-oss-120b` that Claude rejects before the proxy is even contacted.
|
|
386
|
-
- **Claude proxy sync leftovers were removed**: Claude Code is no longer treated as a persisted proxy-sync target, avoiding stale `ANTHROPIC_MODEL=<fcm-slug>` env files that broke the integration.
|
|
387
|
-
|
|
388
|
-
### Added
|
|
389
|
-
- **Terminal width warning progress bar and toggle**: Added visual progress bar to the terminal width warning overlay and a Settings toggle βDisable Widths Warningβ to permanently suppress it.
|
|
390
|
-
- **Config setting `disableWidthsWarning`**: New boolean setting stored in profile and global config, default false.
|
|
391
|
-
|
|
392
|
-
## 0.3.2
|
|
393
|
-
|
|
394
|
-
### Fixed
|
|
395
|
-
- **Claude Code model-family routing now mirrors `free-claude-code`**: The proxy remaps Claude's internal model ids like `claude-3-5-sonnet-*`, `claude-3-haiku-*`, `claude-3-opus-*`, `sonnet`, `haiku`, and `default` back to the selected FCM proxy model instead of rejecting them as missing.
|
|
396
|
-
- **Claude Code helper/background requests stay on the selected model**: Launches now pin the Anthropic helper model env vars and encode the selected proxy model inside `ANTHROPIC_AUTH_TOKEN`, so Claude Code has a stable fallback even when it emits internal aliases.
|
|
397
|
-
|
|
398
|
-
## 0.3.1
|
|
399
|
-
|
|
400
|
-
### Added
|
|
401
|
-
- **CLI `--help` output**: `free-coding-models --help` now prints the full launcher, analysis, config, and daemon command matrix in a non-interactive format.
|
|
402
|
-
|
|
403
|
-
### Fixed
|
|
404
|
-
- **Outdated-version footer alert**: The main TUI now shows a full-width red footer line with manual `npm install -g free-coding-models@latest` recovery instructions, but only when a newer npm version is actually known.
|
|
405
|
-
- **Claude Code proxy auth conflict**: Proxy launches now sanitize inherited env vars and use only `ANTHROPIC_AUTH_TOKEN` + `ANTHROPIC_BASE_URL`, matching the `free-claude-code` contract instead of mixing Anthropic auth modes.
|
|
406
|
-
- **Codex CLI proxy routing**: Codex launches now force an explicit custom provider config and the proxy now supports `POST /v1/responses`, so `codex-cli 0.114.0` no longer depends on the broken built-in OAuth/base-url path.
|
|
407
|
-
- **Anthropic token counting**: Added `POST /v1/messages/count_tokens` with a fast local estimate so Claude-compatible clients keep their budgeting flow through FCM Proxy V2.
|
|
408
|
-
- **Gemini proxy failure mode**: Gemini launch now preflights the installed CLI/config, blocks incompatible builds like `0.33.0`, and surfaces `~/.gemini/settings.json` schema errors instead of pretending proxy mode works.
|
|
409
|
-
|
|
410
|
-
### Changed
|
|
411
|
-
- **Proxy auto-sync now follows the current tool**: The proxy overlay no longer asks for a separate active tool; cleanup and auto-sync now target the current `Z` mode whenever that tool supports persisted proxy config.
|
|
412
|
-
- **Install Endpoints (`Y`) is narrower on purpose**: `Claude Code`, `Codex`, and `Gemini` were removed from the install-target menu so the flow only lists tools with a stable persisted-config contract.
|
|
413
|
-
- **Proxy model listing is more Codex-friendly**: `GET /v1/models` now returns both the usual OpenAI `data` array and a `models` array with `slug` fields for clients that expect a richer catalog shape.
|
|
414
|
-
- **Launcher diagnostics now mention the beta state clearly**: Proxy-backed external tools now remind users that the integration is still stabilizing when a launch is blocked.
|
|
415
|
-
|
|
416
|
-
## 0.3.0
|
|
417
|
-
|
|
418
|
-
### Added
|
|
419
|
-
- **Always-on background proxy service**: FCM Proxy V2 can run as a persistent background service via `launchd` (macOS) or `systemd` (Linux). All tools get free model access 24/7 β no need to keep the TUI open.
|
|
420
|
-
- **Anthropic wire format translation**: Native bidirectional translation between Anthropic Messages API (`POST /v1/messages`) and OpenAI Chat Completions. Claude Code works natively through FCM Proxy V2.
|
|
421
|
-
- **Dedicated FCM Proxy V2 overlay**: New full-page overlay (from Settings β "FCM Proxy V2 settings β" or `J` key) with proxy config, service status, restart, stop, force-kill, and log viewer.
|
|
422
|
-
- **`J` key β FCM Proxy V2 shortcut**: Opens the proxy settings directly from the main view. Footer shows a green `π‘ FCM Proxy V2 On` badge when active, red `π‘ FCM Proxy V2 Off` when disabled.
|
|
423
|
-
- **CLI daemon subcommand**: `free-coding-models daemon [status|install|uninstall|restart|stop|logs]` for headless service control.
|
|
424
|
-
- **Stable proxy identity**: Persistent token and preferred port (`18045`) survive daemon restarts β env files and tool configs remain valid across reboots.
|
|
425
|
-
- **Health endpoint**: `GET /v1/health` returns uptime, version, and account/model counts for liveness probes.
|
|
426
|
-
- **`GET /v1/stats` endpoint**: Authenticated endpoint returning per-account health, token stats, totals, and proxy uptime for monitoring and debugging.
|
|
427
|
-
- **Hot-reload**: FCM Proxy V2 watches `~/.free-coding-models.json` and reloads proxy topology automatically when config changes.
|
|
428
|
-
- **Version mismatch detection**: The overlay warns when the running service version differs from the installed FCM version.
|
|
429
|
-
- **Dev environment guard**: `installDaemon()` is blocked when running from a git checkout to prevent hardcoding local repo paths in OS service files.
|
|
430
|
-
- **Generalized proxy sync module** (`src/proxy-sync.js`): Single-endpoint proxy config sync for 12 tools (OpenCode, OpenClaw, Crush, Goose, Pi, Aider, Amp, Qwen, Claude Code, Codex, OpenHands). Writes one `fcm-proxy` provider with all models, cleans up old per-provider `fcm-*` vestiges.
|
|
431
|
-
- **Retry backoff with jitter**: Progressive delays between retries (0ms, 300ms, 800ms + random jitter) to avoid re-hitting the same rate-limit window on 429s.
|
|
432
|
-
- **Automatic account cooldown on consecutive failures**: When an account accumulates 3+ consecutive non-429 failures, it enters graduated cooldown (30s β 60s β 120s). Proxy routes around failing accounts automatically. Resets on success.
|
|
433
|
-
|
|
434
|
-
### Changed
|
|
435
|
-
- **Rebranded to FCM Proxy V2**: All user-facing references to "daemon", "FCM Proxy", and "Proxy & Daemon" renamed to "FCM Proxy V2" across CLI messages, TUI overlays, endpoint installer, and service descriptions.
|
|
436
|
-
- **Proxy overlay generalized for all tools**: "Persist proxy in OpenCode" β "Auto-sync proxy to {tool}", "Clean OpenCode proxy config" β "Clean {tool} proxy config". New "Active tool" selector row cycles through all 12 proxy-syncable tools.
|
|
437
|
-
- **Feedback overlay redesigned**: Renamed "Report bug" to "Feedback, bugs & requests", input is now left-aligned with a visible cursor, framed by horizontal separator lines. `I` key now covers all feedback types.
|
|
438
|
-
- **Proxy settings moved to dedicated overlay**: The 5 proxy rows in Settings are replaced by a single entry that opens a full-page manager.
|
|
439
|
-
- **Proxy topology extracted to shared module**: `src/proxy-topology.js` is now used by both TUI and daemon, eliminating code duplication.
|
|
440
|
-
- **TUI delegates to background service**: `ensureProxyRunning()` checks for a running service first and reuses its port/token instead of starting an in-process proxy.
|
|
441
|
-
- **Endpoint installer supports proxy mode**: When installing endpoints (Y key) with "FCM Proxy V2" connection mode, env files point to the service's stable token/port.
|
|
442
|
-
- **Claude Code / Codex / Gemini require proxy**: These tools now refuse to launch without FCM Proxy V2 enabled, showing clear instructions to enable it. When proxy is on, they route through it automatically.
|
|
443
|
-
- **Goose launcher rewritten**: Now writes proper custom provider JSON + updates `config.yaml` with `GOOSE_PROVIDER`/`GOOSE_MODEL` for guaranteed auto-selection (replaces obsolete `OPENAI_HOST`/`OPENAI_MODEL` env vars).
|
|
444
|
-
- **Crush launcher improved**: Removed `disable_default_providers` flag, sets both `models.large` and `models.small` defaults for reliable auto-selection.
|
|
445
|
-
- **Pi launcher improved**: Now passes `--provider` and `--model` CLI flags for guaranteed model pre-selection.
|
|
446
|
-
|
|
447
|
-
### Fixed
|
|
448
|
-
- **Terminal width warning behavior**: Warning now shows max 2 times per session with emojis and double spacing.
|
|
449
|
-
- **Body size limit** (security): `readBody()` now enforces a 10 MB limit. Oversized payloads receive 413.
|
|
450
|
-
- **Stack trace leak prevention** (security): Error responses no longer include `err.message`.
|
|
451
|
-
- **SSE buffer overflow guard** (security): Anthropic SSE transformer limits buffer to 1 MB.
|
|
452
|
-
- **`new URL()` crash protection**: Malformed upstream URLs caught instead of crashing.
|
|
453
|
-
- **`execSync` timeout safety**: All `execSync` calls in daemon-manager use a 15-second timeout via `execSyncSafe()`.
|
|
454
|
-
- **Daemon startup crash protection**: `loadConfig()`, `buildMergedModelsForDaemon()`, and `buildProxyTopologyFromConfig()` wrapped in try/catch.
|
|
455
|
-
- **`resolveCloudflareUrl()` null guard**: Empty provider URLs skipped instead of crashing.
|
|
456
|
-
- **Health check buffer limit**: Responses capped at 64 KB.
|
|
457
|
-
- **SSE line buffering**: SSE tap now correctly handles lines split across chunk boundaries.
|
|
458
|
-
- **Empty choices fallback**: `translateOpenAIToAnthropic` returns fallback content block when OpenAI response has empty choices.
|
|
459
|
-
- **Tool calls streaming index tracking**: Proper `nextBlockIndex`/`currentBlockIndex` counters for correct indexing across multiple tool calls.
|
|
460
|
-
- **Pipe error propagation**: Error handlers on both sides of SSE pipes to prevent uncaught errors on mid-stream disconnects.
|
|
461
|
-
- **Input validation**: `translateAnthropicToOpenAI` guards against null/undefined/non-object input.
|
|
462
|
-
- **Hot-reload race condition**: Config watcher uses `reloadInProgress` flag to prevent concurrent reloads.
|
|
463
|
-
- **Fake response stubs**: Added `destroy()`, `removeListener()`, and `socket: null` for better compatibility.
|
|
464
|
-
- **API key trimming**: Whitespace-trimmed and empty keys filtered out in topology builder.
|
|
465
|
-
- **`writeFileSync` error messages**: Plist and systemd service file write failures now throw clear error messages.
|
|
466
|
-
|
|
467
|
-
---
|
|
468
|
-
|
|
469
|
-
## 0.2.17
|
|
470
|
-
|
|
471
|
-
### Added
|
|
472
|
-
- **All coding tools re-enabled in Z-cycle**: Aider, Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenHands, and Amp are now back in the public tool mode cycle alongside OpenCode, OpenClaw, Crush, Goose, and Pi β 13 tools total.
|
|
473
|
-
- **All coding tools available in Install Endpoints (Y key)**: The endpoint installer now supports all 13 tools as install targets, not just the original 5. Each tool gets its proper config format (JSON, YAML, or env file).
|
|
474
|
-
- **Connection mode choice in Install flow**: When installing endpoints (Y key), users now choose between **Direct Provider** (pure API connection) or **FCM Proxy** (local proxy with key rotation and usage tracking) β new Step 3 in the 5-step flow.
|
|
475
|
-
- **Install support for new tools**: Pi (models.json + settings.json), Aider (.aider.conf.yml), Amp (settings.json), Gemini (settings.json), Qwen (modelProviders config), Claude Code/Codex/OpenHands (sourceable env files at ~/.fcm-*-env).
|
|
476
|
-
|
|
477
|
-
### Changed
|
|
478
|
-
- **Install Endpoints flow is now 5 steps**: Provider β Tool β Connection Mode β Scope β Models (was 4 steps without connection mode choice).
|
|
479
|
-
- **Tool labels in install overlay use metadata**: Tool names and emojis in the Y overlay now come from `tool-metadata.js` instead of hard-coded ternary chains β easier to maintain and always in sync.
|
|
480
|
-
- **Help overlay updated**: Z-cycle hint and CLI flag examples now list all 13 tools.
|
|
481
|
-
|
|
482
|
-
---
|
|
483
|
-
|
|
484
|
-
## 0.2.16
|
|
485
|
-
|
|
486
|
-
### Fixed
|
|
487
|
-
- **Changelog index viewport scrolling**: Cursor in changelog version list (N key) now scrolls the viewport to follow selection β previously scrolling past the last visible row would move the cursor off-screen into empty space.
|
|
488
|
-
|
|
489
|
-
### Added
|
|
490
|
-
- **Changelog version summaries**: Each version in the changelog index now shows a short summary (first change title, ~15 words) after the change count, displayed in dim for readability.
|
|
491
|
-
|
|
492
|
-
---
|
|
493
|
-
|
|
494
|
-
## 0.2.15
|
|
495
|
-
|
|
496
|
-
### Changed
|
|
497
|
-
- **Changelog scrolling experience**: Circular wrap-around scrolling in changelog details (N key) β up at the top now wraps to the bottom, down at the bottom wraps to the top. PageUp/PageDown also wrap for seamless infinite browsing, just like the main TUI list navigation. Home/End still jump to absolute first/last positions for quick access.
|
|
498
|
-
|
|
499
|
-
---
|
|
500
|
-
|
|
501
|
-
## 0.2.14
|
|
502
|
-
|
|
503
|
-
### Fixed
|
|
504
|
-
- **Changelog scrolling viewport**: Scrolling in changelog details (N key) now respects viewport boundaries β content no longer scrolls beyond visible area. Down/PageDown/End keys now properly clamp to max scroll offset so you can view all content without it disappearing off screen.
|
|
505
|
-
|
|
506
|
-
---
|
|
507
|
-
|
|
508
|
-
## 0.2.13
|
|
509
|
-
|
|
510
|
-
### Added
|
|
511
|
-
- **Persist UI view settings**: Tier filter (T key), provider filter (D key), and sort order now persist across session restarts β settings are saved to `~/.free-coding-models.json` under `config.settings` and automatically restored on next startup. Settings also mirror into active profiles so profile switching captures live view preferences.
|
|
512
|
-
- When T cycles tier: S+ tier is now remembered for next session
|
|
513
|
-
- When D cycles provider: Filtered provider is now remembered
|
|
514
|
-
- When sort keys (R/O/M/L/A/S/C/H/V/B/U) change order: Sort column and direction are now remembered
|
|
515
|
-
- Profile loading has priority over global `config.settings` so saved profiles override global defaults
|
|
516
|
-
- **Reset view settings (Shift+R)**: New keyboard shortcut to instantly reset tier filter, provider filter, and sort order to defaults (All tier, no provider filter, avg sort ascending). Also clears persisted settings from `config.settings` so next restart returns to factory defaults.
|
|
517
|
-
- Useful when you've customized your view but want a fresh start
|
|
518
|
-
- Does not affect favorites, API keys, or other settings β only view state
|
|
519
|
-
|
|
520
|
-
### Changed
|
|
521
|
-
- **Help overlay (K key)**: Updated to document new Shift+R keybinding for resetting view settings
|
|
522
|
-
|
|
523
|
-
---
|
|
524
|
-
|
|
525
|
-
## 0.2.12
|
|
526
|
-
|
|
527
|
-
### Added
|
|
528
|
-
- **Auto-select models for all external tools**: All 10 supported tools (Aider, Crush, Goose, Claude Code, Codex, Gemini, Qwen, OpenHands, Amp, Pi) now automatically configure and pre-select the chosen model on launch β no manual model selection needed after pressing Enter.
|
|
529
|
-
- **Changelog loader utility**: New `src/changelog-loader.js` module parses CHANGELOG.md for future TUI integration to display changes directly in the app instead of opening a browser.
|
|
530
|
-
|
|
531
|
-
### Fixed
|
|
532
|
-
- **Infinite update loop on startup**: Disabled forced auto-update that caused the app to detect the same update repeatedly after restarting. The app now checks for updates in the background without forcing installation.
|
|
533
|
-
- **Removed disruptive browser window**: The auto-update process no longer opens a browser window to show the changelog β it now shows update information in the terminal only.
|
|
534
|
-
- **Update failure tracking**: If update checks fail 3+ times, the app displays a prominent red footer warning: `β OUTDATED version, please update` with manual update instructions instead of crashing.
|
|
535
|
-
|
|
536
|
-
### Changed
|
|
537
|
-
- **OpenHands integration improved**: Now sets `LLM_MODEL` and `LLM_API_KEY` environment variables for proper model pre-selection on launch.
|
|
538
|
-
- **Amp integration improved**: Now writes `amp.model` to config file with the selected model ID.
|
|
539
|
-
|
|
540
|
-
---
|
|
541
|
-
|
|
542
|
-
## 0.2.11
|
|
543
|
-
|
|
544
|
-
### Added
|
|
545
|
-
- **Pi Coding Agent support**: Enabled Pi (pi.dev) as a launchable mode in the Z key cycle. Select a model and press Enter to auto-configure Pi's model config and settings, then spawn the PI coding agent CLI with the chosen model pre-selected as the default.
|
|
546
|
-
|
|
547
|
-
---
|
|
548
|
-
|
|
549
|
-
## 0.2.10
|
|
550
|
-
|
|
551
|
-
### Changed
|
|
552
|
-
- **Discord invite link**: Updated to permanent non-expiring link `https://discord.gg/ZTNFHvvCkU` in README and TUI footer
|
|
553
|
-
- **NVIDIA NIM**: Added MiniMax M2.5 (S+ tier) to model list
|
|
554
|
-
|
|
555
|
-
---
|
|
556
|
-
|
|
557
|
-
## 0.2.9
|
|
558
|
-
|
|
559
|
-
### Fixed
|
|
560
|
-
- **Discord link**: Updated expired invite URL to `https://discord.gg/f2AjwV2AN` in README and TUI footer
|
|
561
|
-
|
|
562
|
-
### Added
|
|
563
|
-
- **Discord link health-check workflow**: New GitHub Actions workflow (`check-discord-link.yml`) runs every 12 hours, validates the Discord invite via the Discord API, and auto-opens an issue labeled `discord-link` if the link becomes invalid
|
|
564
|
-
- **Pi provider metadata**: Added `pi` provider entry to `src/provider-metadata.js` with light blue color, pi.dev signup URL, and setup hint for `@mariozechner/pi-coding-agent` integration
|
|
565
|
-
|
|
566
|
-
---
|
|
567
|
-
|
|
568
|
-
## 0.2.8
|
|
569
|
-
|
|
570
|
-
### Updated
|
|
571
|
-
|
|
572
|
-
- π **Provider quota information refreshed** β Updated freeβtier request limits for NVIDIA NIM, Groq, Cerebras, Replicate, DeepInfra, and Fireworks AI in `src/provider-metadata.js` and the README.
|
|
573
|
-
- π **README requirements section** β Added the latest quota details for each provider (40β―req/min for NVIDIA, 30β50β―RPM for Groq, generous dev tier for Cerebras, 6β―req/min free Replicate, 200 concurrent DeepInfra, 10β―req/min free Fireworks) and clarified paymentβmethod dependent limits.
|
|
574
|
-
- π οΈ **No functional code changes** β Metadata updates only; all tests continue to pass.
|
|
575
|
-
|
|
576
|
-
### Added
|
|
577
|
-
|
|
578
|
-
- π **Added `--json` flag for scriptable output** - Output model results as JSON for automation, CI/CD, and monitoring dashboards. Example: `free-coding-models --tier S --json | jq '.[0].modelId'`
|
|
579
|
-
|
|
580
|
-
- πΎ **Added persistent ping cache** - Cache ping results for 5 minutes to speed up subsequent runs:
|
|
581
|
-
- Cache stored in `~/.free-coding-models.cache.json`
|
|
582
|
-
- Automatic cache refresh on startup if stale
|
|
583
|
-
- Saves API rate limits and reduces wait time
|
|
584
|
-
- Cache is saved on exit for next run
|
|
585
|
-
|
|
586
|
-
- π **Added config file security check with auto-fix** - Warns if `~/.free-coding-models.json` has insecure permissions:
|
|
587
|
-
- Checks file permissions on startup
|
|
588
|
-
- Warns if file is readable by others (security risk)
|
|
589
|
-
- Offers one-click auto-fix with `chmod 600`
|
|
590
|
-
- Shows manual fix command if auto-fix fails or is declined
|
|
591
|
-
|
|
592
|
-
- π¨ **Added provider colors to logs and settings** - Provider names are now colored the same way as in the main table:
|
|
593
|
-
- Settings overlay (P) shows colored provider names
|
|
594
|
-
- Fiable mode output uses colored provider names
|
|
595
|
-
- Tool launcher messages use colored provider names
|
|
596
|
-
- Request log overlay (X) shows colored provider names
|
|
597
|
-
- Consistent visual experience across all UI elements
|
|
598
|
-
|
|
599
|
-
### Changed
|
|
600
|
-
|
|
601
|
-
- π **Increased default log limit from 200 to 500 entries** - Request log overlay now shows up to 500 entries by default (previously 200)
|
|
602
|
-
- π **Added toggle for unlimited logs** - Press `A` in request log overlay to toggle between showing 500 entries or ALL logs
|
|
603
|
-
- β **Enhanced visual failure indication in logs** - Failed requests with zero tokens now have:
|
|
604
|
-
- Dark red background (`rgb(40, 0, 0)`) on the entire row
|
|
605
|
-
- Model name in red
|
|
606
|
-
- Token column shows red cross emoji (β) instead of token count
|
|
607
|
-
- Quick visual identification of errors vs successful requests
|
|
608
|
-
- π **Updated documentation** - Added `--json` flag to CLI flags table in README.md with usage examples
|
|
609
|
-
|
|
610
|
-
- π Added `terminalcp` MCP server configuration for Claude Code to spawn and interact with the TUI headlessly. Agents can now visually test the terminal interface by capturing output and sending keystrokes programmatically. See AGENTS.md β "Testing the TUI with terminalcp" for usage.
|
|
611
|
-
- π¨ **Added consistent branding header to all overlays** - Each overlay (Settings, Help, Log, Install Endpoints, Recommend, Feature Request, Bug Report) now displays:
|
|
612
|
-
- Free-coding-models logo with rocket emoji (π)
|
|
613
|
-
- Version number display
|
|
614
|
-
- Clean title on a separate line
|
|
615
|
-
- Consistent visual styling across all screens
|
|
616
|
-
- **Main table title now uses rocket emoji (π) and cyanBright color** for consistency with overlays
|
|
617
|
-
|
|
618
|
-
### Changed
|
|
619
|
-
|
|
620
|
-
- π **Updated documentation** - Added `--json` flag to CLI flags table in README.md with usage examples
|
|
621
|
-
|
|
622
|
-
- π **Improved ping progress visibility** - Moved ping completion counter from the W badge to the main status bar:
|
|
623
|
-
- Now shows as `π¦ 49/59` next to model status counts (up/timeout/down)
|
|
624
|
-
- More prominent placement makes it easier to see ping progress at a glance
|
|
625
|
-
- W badge still shows interval, mode, and countdown to next ping
|
|
626
|
-
|
|
627
|
-
- π§Ή **Removed unnecessary blank line** - Overlays (Settings P, Help K, Log X) no longer have a blank line at the top, giving more vertical space for content
|
|
628
|
-
|
|
629
|
-
- π½ **Removed duplicate "CONFIGURED ONLY" badge** - The header no longer shows the "CONFIGURED ONLY" indicator since it's already displayed in the footer hints. This reduces header clutter while keeping the information visible.
|
|
630
|
-
|
|
631
|
-
- π¨ **Enhanced Request Log (X) with colors and visual indicators**:
|
|
632
|
-
- **Latency gradient**: Green (<500ms) β Orange (<1000ms) β Yellow (<1500ms) β Red (β₯1500ms) for quick performance assessment
|
|
633
|
-
- **Token opacity**: Light green (low usage) β Medium green β Bright green (high usage, >30k tokens)
|
|
634
|
-
- **Model coloring**: Matches status color for visual consistency
|
|
635
|
-
- **Status colors** - Distinct colors for each HTTP code:
|
|
636
|
-
- `200` β
β Bright green
|
|
637
|
-
- `400` β Dark magenta (#8B008B)
|
|
638
|
-
- `401` β Dark orchid (#9932CC)
|
|
639
|
-
- `403` β Medium orchid (#BA55D3)
|
|
640
|
-
- `404` β Dark red (crimson)
|
|
641
|
-
- `413` β Tomato red (#FF6347)
|
|
642
|
-
- `429` β Dark orange (#FFB90F)
|
|
643
|
-
- `500` β Crimson (#DC143C)
|
|
644
|
-
- `502` β Medium violet red (#C71585)
|
|
645
|
-
- `503` β Medium purple (#9370DB)
|
|
646
|
-
- `5xx` β Magenta (other 5xx errors)
|
|
647
|
-
- `0` β Dim gray (timeout/unknown)
|
|
648
|
-
- **Fixed token display bug**: Corrected chalk function calls that were showing JavaScript code instead of token counts
|
|
649
|
-
|
|
650
|
-
- π **Added "Buy me a coffee" link to footer**:
|
|
651
|
-
- Added in main TUI footer next to Contributors link (buymeacoffee.com/vavanessadev)
|
|
652
|
-
- Added in Settings overlay (P) footer with credits "Made with π & β by vava-nessa"
|
|
653
|
-
- Warm orange color for the coffee link to match the cozy theme
|
|
654
|
-
|
|
655
|
-
### Fixed
|
|
656
|
-
|
|
657
|
-
- π₯οΈ **Overlays now use 100% terminal width** - All overlays (Settings P, Help K, Log X, Recommend Q, Feature J, Bug I) now dynamically adapt to full terminal width instead of fixed 116-column panels:
|
|
658
|
-
- Rate limits text is no longer truncated (full descriptions visible)
|
|
659
|
-
- Diagnostic messages wrap using available terminal width
|
|
660
|
-
- Separator lines extend to full terminal width
|
|
661
|
-
- Better readability on wider terminals
|
|
662
|
-
|
|
663
|
-
- π **Fixed profile loading to preserve API keys** - Loading a profile now MERGES apiKeys instead of replacing them:
|
|
664
|
-
- Keys in the profile override existing keys (allows profile-specific overrides)
|
|
665
|
-
- Keys NOT in the profile are preserved (prevents key loss when switching profiles)
|
|
666
|
-
- Fixes bug where switching profiles would cause API keys disappear
|
|
667
|
-
- Added test to verify merge behavior
|
|
668
|
-
|
|
669
|
-
- π **Updated OpenRouter rate limits information**:
|
|
670
|
-
- README now includes detailed explanation of free tier quotas (50/day <$10 credits, 1000/day β₯$10)
|
|
671
|
-
- Settings overlay displays accurate rate limit text
|
|
672
|
-
- Added note about failed requests counting toward daily quota
|
|
673
|
-
|
|
674
|
-
---
|
|
675
|
-
|
|
676
|
-
## 0.2.5
|
|
677
|
-
|
|
678
|
-
### Fixed
|
|
679
|
-
|
|
680
|
-
- π **Improved config save reliability** - API keys are now much safer from corruption and loss:
|
|
681
|
-
- Automatic backups before each save (keeps last 5 versions in `~/.free-coding-models.backups/`)
|
|
682
|
-
- Post-write verification confirms file was written correctly and data wasn't lost
|
|
683
|
-
- Explicit error handling instead of silent failures
|
|
684
|
-
- Auto-repair on startup if config is corrupted (restores from latest backup)
|
|
685
|
-
- Console notifications when backup is used or config is repaired
|
|
686
|
-
|
|
687
|
-
---
|
|
688
|
-
|
|
689
|
-
## 0.2.4
|
|
690
|
-
|
|
691
|
-
### Fixed
|
|
692
|
-
|
|
693
|
-
- π§ Fixed Configured Only filter (E key) not being applied at startup. The flag was initialized correctly but the filter function was never called on first render, causing all models to appear visible even when Configured Only mode was enabled.
|
|
694
|
-
|
|
695
|
-
---
|
|
696
|
-
|
|
697
|
-
## 0.2.3
|
|
698
|
-
|
|
699
|
-
### Fixed
|
|
700
|
-
|
|
701
|
-
- π§ Fixed Codestral API endpoint URL from `codestral.mistral.ai/v1` to `api.mistral.ai/v1` to align with Mistral AI's unified API platform. This resolves authentication failures when testing Codestral API keys in Settings.
|
|
702
|
-
|
|
703
|
-
---
|
|
704
|
-
|
|
705
|
-
## 0.2.2
|
|
706
|
-
|
|
707
|
-
### Added
|
|
708
|
-
|
|
709
|
-
- π Added a new `Y` install flow that pushes one configured provider directly into `OpenCode CLI`, `OpenCode Desktop`, `OpenClaw`, `Crush`, or `Goose`, with either the full catalog or a curated model subset.
|
|
710
|
-
|
|
711
|
-
### Changed
|
|
712
|
-
|
|
713
|
-
- π Tracked endpoint installs are now refreshed automatically on future launches so managed tool catalogs stay aligned when provider model lists evolve.
|
|
714
|
-
|
|
715
|
-
### Fixed
|
|
716
|
-
|
|
717
|
-
- π Clarified provider auth failures in the main table so configured keys rejected by a provider no longer appear as `NO KEY`.
|
|
718
|
-
- π Hardened Settings key tests with multi-model retries plus detailed diagnostics under Setup Instructions when a provider probe fails.
|
|
719
|
-
- π·οΈ Fixed Settings provider badges so configured keys show `Test` before the first probe, while providers without a key now show `Missing Key`.
|
|
720
|
-
- π€ Clarified the Hugging Face setup hint in Settings to require a fine-grained token with `Make calls to Inference Providers`.
|
|
721
|
-
|
|
722
|
-
## 0.2.1
|
|
723
|
-
|
|
724
|
-
### Added
|
|
725
|
-
|
|
726
|
-
- π¨ Added a footer warning that highlights outdated installs with a red banner and the message `This version is outdated .` once a newer npm version is detected.
|
|
727
|
-
|
|
728
|
-
### Changed
|
|
729
|
-
|
|
730
|
-
- πΎ The `Z` launcher choice is now persisted in config, so the app restarts on the last tool used instead of always falling back to OpenCode CLI.
|
|
731
|
-
- π The request log overlay now highlights proxy fallback reroutes with a dedicated `SWITCHED β»` route badge and shows `requested β actual` model transitions inline.
|
|
732
|
-
|
|
733
|
-
### Fixed
|
|
734
|
-
|
|
735
|
-
- π Fixed the footer proxy status so an active proxy now renders as running instead of incorrectly showing `Proxy not configured`.
|
|
736
|
-
- βοΈ Fixed the footer proxy status so a proxy enabled in Settings now shows as configured even before the local proxy process is started.
|
|
737
|
-
- π§ Fixed the main TUI footer so the outdated-version warning appears directly under the proxy status line where users can see it immediately.
|
|
738
|
-
- π§ Fixed proxy-backed launcher model selection so `Crush` and `Goose` now use the universal `fcm-proxy` model slug instead of stale provider-specific ids when proxy mode is enabled.
|
|
739
|
-
|
|
740
|
-
## 0.2.0
|
|
741
|
-
|
|
742
|
-
### Added
|
|
743
|
-
|
|
744
|
-
- π§° Added direct launch modes for `Crush` and `Goose` as hardened public launchers, with additional internal support for `Aider`, `Claude Code`, `Codex CLI`, `Gemini CLI`, `Qwen Code`, `OpenHands`, `Amp`, and `Pi` (temporarily disabled from public cycle pending hardening).
|
|
745
|
-
- π§Ή Added OpenCode proxy cleanup in Settings plus a `--clean-proxy` CLI command to remove persisted `fcm-proxy` config safely.
|
|
746
|
-
- π¨ Dynamic color coding for active Tier and Provider filter badges β each tier/provider now displays with its signature color directly in the header and footer pills for better visual feedback.
|
|
747
|
-
- π Comprehensive documentation refresh across JSDoc headers in `bin/free-coding-models.js` to clarify the new default startup behavior, ping cadence states, and removal of the startup menu.
|
|
748
|
-
|
|
749
|
-
### Changed
|
|
750
|
-
|
|
751
|
-
- π§ Extended the `Z` tool cycle, CLI flag parser, help overlay, and header mode badge so the active target tool is visible and switchable across all supported launchers.
|
|
752
|
-
- π Made the multi-account proxy opt-in and disabled by default, added Settings controls for proxy enablement, OpenCode persistence, and preferred port, and restored direct OpenCode launch as the default path.
|
|
753
|
-
- π Active Tier and Provider filters now show their current value directly inside the highlighted pills, while Crush now writes a real default selected model into `crush.json` and uses either direct provider config or the local FCM proxy depending on the current proxy setting.
|
|
754
|
-
- π Audited and synchronized the public documentation, in-app help, and footer hints so they now describe the hardened launcher set (`OpenCode CLI`, `OpenCode Desktop`, `OpenClaw`, `Crush`, `Goose`), the real default startup behavior, the current ping cadence, the Settings shortcuts, and the proxy-only request log semantics.
|
|
755
|
-
- π‘οΈ **Hardened public launcher set** β Narrowed the Z-cycle to only the stable, tested integrations: `OpenCode CLI` β `OpenCode Desktop` β `OpenClaw` β `Crush` β `Goose`. Aider, Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenHands, Amp, and Pi are now temporarily disabled pending flow hardening.
|
|
756
|
-
- π― **Improved Crush configuration** β Now writes proper `config.models.large` default selection (instead of relying on CLI args), respects proxy enablement state, and uses `disable_default_providers` to rely on FCM's provider configuration.
|
|
757
|
-
- π§ **Crush launcher robustness** β Spawn call simplified to not pass `--model` argument; model selection now driven entirely through `crush.json` to avoid CLI parsing conflicts.
|
|
758
|
-
- π **Synchronized in-app help** β Removed references to temporarily disabled launchers from the Z-cycle hint and CLI flag examples to reduce user confusion and match the hardened set.
|
|
759
|
-
- β
**Refined filter UI responsiveness** β Active Tier and Provider filter values now visually highlight in the main table footer hotkeys with tier-matched or provider-matched colors for instant recognition.
|
|
760
|
-
|
|
761
|
-
### Fixed
|
|
762
|
-
|
|
763
|
-
- πͺ« Temporarily removed unstable external launchers (`Aider`, `Claude Code`, `Codex CLI`, `Gemini CLI`, `Qwen Code`, `OpenHands`, `Amp`, `Pi`) from the public mode cycle/help so only the currently hardened integrations remain exposed.
|
|
764
|
-
- π§ Corrected stale docs that still advertised the removed startup picker, mislabeled the `X` overlay as a live activity/error log viewer, and listed public commands or tips that no longer matched the current UI.
|
|
765
|
-
- πͺͺ **Crush proxy support** β Crush now correctly detects when proxy mode is enabled and routes through the local FCM proxy (`http://127.0.0.1:<port>/v1`) with appropriate token/URL substitution instead of attempting direct provider connection.
|
|
766
|
-
- π **Shell compatibility** β Fixed spawning command for external tools to use `shell: true` only on Windows; Linux/macOS now spawn without shell wrapper for cleaner process trees.
|
|
767
|
-
- π **Filter state persistence** β Tier and Provider filter badges in the footer now correctly calculate and display their active state across all state transitions.
|
|
768
|
-
|
|
769
|
-
---
|
|
770
|
-
|
|
771
|
-
## 0.1.89 (merged into 0.2.0)
|
|
772
|
-
|
|
773
|
-
### Added
|
|
774
|
-
|
|
775
|
-
- π¨ Dynamic color coding for active Tier and Provider filter badges β each tier/provider now displays with its signature color directly in the header and footer pills for better visual feedback.
|
|
776
|
-
- π Comprehensive documentation refresh across JSDoc headers in `bin/free-coding-models.js` to clarify the new default startup behavior, ping cadence states, and removal of the startup menu.
|
|
777
|
-
|
|
778
|
-
### Changed
|
|
779
|
-
|
|
780
|
-
- π‘οΈ **Hardened public launcher set** β Narrowed the Z-cycle to only the stable, tested integrations: `OpenCode CLI` β `OpenCode Desktop` β `OpenClaw` β `Crush` β `Goose`. Aider, Claude Code, Codex CLI, Gemini CLI, Qwen Code, OpenHands, Amp, and Pi are now temporarily disabled pending flow hardening.
|
|
781
|
-
- π― **Improved Crush configuration** β Now writes proper `config.models.large` default selection (instead of relying on CLI args), respects proxy enablement state, and uses `disable_default_providers` to rely on FCM's provider configuration.
|
|
782
|
-
- π§ **Crush launcher robustness** β Spawn call simplified to not pass `--model` argument; model selection now driven entirely through `crush.json` to avoid CLI parsing conflicts.
|
|
783
|
-
- π **Synchronized in-app help** β Removed references to temporarily disabled launchers from the Z-cycle hint and CLI flag examples to reduce user confusion and match the hardened set.
|
|
784
|
-
- β
**Refined filter UI responsiveness** β Active Tier and Provider filter values now visually highlight in the main table footer hotkeys with tier-matched or provider-matched colors for instant recognition.
|
|
785
|
-
|
|
786
|
-
### Fixed
|
|
787
|
-
|
|
788
|
-
- πͺͺ **Crush proxy support** β Crush now correctly detects when proxy mode is enabled and routes through the local FCM proxy (`http://127.0.0.1:<port>/v1`) with appropriate token/URL substitution instead of attempting direct provider connection.
|
|
789
|
-
- π **Shell compatibility** β Fixed spawning command for external tools to use `shell: true` only on Windows; Linux/macOS now spawn without shell wrapper for cleaner process trees.
|
|
790
|
-
- π **Filter state persistence** β Tier and Provider filter badges in the footer now correctly calculate and display their active state across all state transitions.
|
|
791
|
-
|
|
792
|
-
---
|
|
793
|
-
|
|
794
|
-
## 0.1.88
|
|
795
|
-
|
|
796
|
-
### Added
|
|
797
|
-
|
|
798
|
-
- π§° Added direct launch modes for `Aider`, `Crush`, `Goose`, `Claude Code`, `Codex CLI`, `Gemini CLI`, `Qwen Code`, `OpenHands`, `Amp`, and `Pi`, so pressing `Enter` can now auto-configure and start more than just OpenCode/OpenClaw.
|
|
799
|
-
- π§Ή Added OpenCode proxy cleanup in Settings plus a `--clean-proxy` CLI command to remove persisted `fcm-proxy` config safely.
|
|
800
|
-
|
|
801
|
-
### Changed
|
|
802
|
-
|
|
803
|
-
- π§ Extended the `Z` tool cycle, CLI flag parser, help overlay, and header mode badge so the active target tool is visible and switchable across all supported launchers.
|
|
804
|
-
- π Made the multi-account proxy opt-in and disabled by default, added Settings controls for proxy enablement, OpenCode persistence, and preferred port, and restored direct OpenCode launch as the default path.
|
|
805
|
-
- π Active Tier and Provider filters now show their current value directly inside the highlighted pills, while Crush now writes a real default selected model into `crush.json` and uses either direct provider config or the local FCM proxy depending on the current proxy setting.
|
|
806
|
-
- π Audited and synchronized the public documentation, in-app help, and footer hints so they now describe the hardened launcher set (`OpenCode CLI`, `OpenCode Desktop`, `OpenClaw`, `Crush`, `Goose`), the real default startup behavior, the current ping cadence, the Settings shortcuts, and the proxy-only request log semantics.
|
|
807
|
-
|
|
808
|
-
### Fixed
|
|
809
|
-
|
|
810
|
-
- πͺ« Temporarily removed unstable external launchers (`Aider`, `Claude Code`, `Codex CLI`, `Gemini CLI`, `Qwen Code`, `OpenHands`, `Amp`, `Pi`) from the public mode cycle/help so only the currently hardened integrations remain exposed.
|
|
811
|
-
- π§ Corrected stale docs that still advertised the removed startup picker, mislabeled the `X` overlay as a live activity/error log viewer, and listed public commands or tips that no longer matched the current UI.
|
|
812
|
-
|
|
813
|
-
---
|
|
814
|
-
|
|
815
|
-
## 0.1.87
|
|
816
|
-
|
|
817
|
-
### Fixed
|
|
818
|
-
|
|
819
|
-
- π¨ Rebalanced `Perplexity`, `Hyperbolic`, and `Together AI` provider colors so they are more visually distinct from `NIM` and from each other in the TUI.
|
|
820
|
-
|
|
821
|
-
---
|
|
822
|
-
|
|
823
|
-
## 0.1.86
|
|
824
|
-
|
|
825
|
-
### Fixed
|
|
826
|
-
|
|
827
|
-
- π Provider key tests in the `P` settings screen now discover `/models` when available and probe multiple candidate model IDs, fixing false failures on SambaNova and NVIDIA NIM when a listed model is not actually callable.
|
|
828
|
-
- π Refreshed provider catalogs with confirmed public updates for OpenRouter, SambaNova, and Cerebras so outdated model IDs are less likely to appear in the TUI.
|
|
829
|
-
- π§ Settings key tests now show distinct `Rate limit` and `No model` states instead of collapsing every non-success into a generic failure badge.
|
|
830
|
-
- π¨ Reworked provider colors into a soft pastel rainbow palette so each provider is easier to distinguish across the TUI without aggressive saturation.
|
|
831
|
-
- π§Ό Simplified the TUI header/footer by merging ping controls into one badge, moving the active tool mode into a `Z Tool` header badge, and removing redundant footer hints for tool mode and Enter actions.
|
|
832
|
-
- π Added an `E` shortcut to hide models from providers without configured API keys, with persistence across sessions and inside saved profiles.
|
|
833
|
-
- π Refined the TUI visuals: provider-colored model names, header title now shows the current app version, footer version removed, favorites use a lighter pastel yellow, and the selected row uses a punchier pink-violet highlight.
|
|
834
|
-
- π Made favorite rows darker for better contrast and changed Scaleway to a cooler blue so it no longer blends with OpenRouter.
|
|
835
|
-
- πͺ `Configured Only` is now enabled by default, and the empty state tells users to press `P` when no configured API key can surface any model.
|
|
836
|
-
- πͺ Added a centered terminal-width warning instead of rendering a broken table when the shell is too narrow.
|
|
837
|
-
- π Updated the README to match the current model count, default filters, and latest TUI behavior.
|
|
838
|
-
|
|
839
|
-
---
|
|
840
|
-
|
|
841
|
-
## 0.1.85
|
|
842
|
-
|
|
843
|
-
### Added
|
|
844
|
-
|
|
845
|
-
- π Added an inline spinner beside `Latest Ping` so each row shows when a fresh ping is still in flight without hiding the previous latency.
|
|
846
|
-
- π Added ping mode badges next to `FCM` so the active cadence is always visible in the header.
|
|
847
|
-
|
|
848
|
-
### Fixed
|
|
849
|
-
|
|
850
|
-
- π `Avg Ping` and latency-derived metrics now also use `401` responses, so rows without an API key still accumulate real latency samples.
|
|
851
|
-
- π¨ Unified footer shortcut colors so every hotkey uses the same visual treatment.
|
|
852
|
-
|
|
853
|
-
### Changed
|
|
854
|
-
|
|
855
|
-
- β± Reworked ping scheduling: startup now runs a 60s `FAST` burst at 2s, steady state uses `NORMAL` at 10s, idle sessions auto-drop to `SLOW` at 30s after 5 minutes, and `FORCED` stays at 4s without auto slowdowns.
|
|
856
|
-
- π `W` now cycles ping modes (`FAST` / `NORMAL` / `SLOW` / `FORCED`) instead of tweaking raw intervals.
|
|
857
|
-
- π§Ύ Updated the main footer, in-app help, README, and profile defaults to match the new ping mode system and token log wording.
|
|
858
|
-
|
|
859
|
-
---
|
|
860
|
-
|
|
861
|
-
## 0.1.84
|
|
862
|
-
|
|
863
|
-
### Added
|
|
864
|
-
|
|
865
|
-
- β
Added a new `Used` column showing total consumed prompt+completion tokens per exact `provider + model`, formatted in compact `k` / `M` units from startup log aggregation.
|
|
866
|
-
- π Added an inline spinner beside `Latest Ping` so each row shows when a fresh ping is still in flight without hiding the previous latency.
|
|
867
|
-
- π Added ping mode badges in the header plus adaptive ping cadence states: `FAST`, `NORMAL`, `SLOW`, and `FORCED`.
|
|
868
|
-
|
|
869
|
-
### Fixed
|
|
870
|
-
|
|
871
|
-
- π― Aligned TUI header shortcut highlights with live bindings: `Up%` uses the correct shortcut color, and `G` now sorts the `UsaGe` column directly.
|
|
872
|
-
- π§ Renamed the `Origin` column to `Provider`, switched the provider filter key from `N` to `D`, and updated the highlighted header shortcuts to `PrOviDer`.
|
|
873
|
-
- π’ Fixed provider usage contamination by scoping quota snapshots to exact `provider + model`, so shared model IDs no longer leak usage percentages across providers.
|
|
874
|
-
- π’ Show a green dot in `Usage` when quota telemetry is not applicable or not reliable for a provider instead of displaying misleading percentages.
|
|
875
|
-
- π€ Shortened Alibaba Cloud (DashScope) to `Alibaba` in the main TUI table to avoid layout drift while keeping the full name in Settings.
|
|
876
|
-
- π©Ί Expanded `Health` labels for common errors: `429 TRY LATER`, `410 GONE`, `404 NOT FOUND`, `500 ERROR`.
|
|
877
|
-
- π `Avg Ping` and latency-derived metrics now also use `401` responses, so rows without an API key still accumulate real latency samples.
|
|
878
|
-
|
|
879
|
-
### Changed
|
|
880
|
-
|
|
881
|
-
- π§± Refactored TUI overlays and key handling into `src/overlays.js` and `src/key-handler.js` to keep `bin/free-coding-models.js` lean.
|
|
882
|
-
- π Extracted OpenClaw integration into `src/openclaw.js` and aligned OpenCode flow with shared helpers.
|
|
883
|
-
- ποΈ Moved tier/provider filter modes into shared runtime state for clearer ownership.
|
|
884
|
-
- β
Renamed the app header to `β
FCM`, moved the version next to `Ctrl+C Exit`, and added subtle blue color variations per provider in the `Provider` column.
|
|
885
|
-
- π§Ή Cleaned the footer hints by removing the duplicate `Ctrl+C Exit` entry while keeping the proxy status directly under the shortcut line.
|
|
886
|
-
- π Updated README and in-app help to match the new `Provider`, `Used`, `Usage`, and current hotkey behaviors.
|
|
887
|
-
- β± Reworked ping scheduling: app startup now runs a 60s fast burst at 2s, steady-state defaults to 10s, idle sessions auto-drop to 30s after 5 minutes, and `W` now cycles ping modes instead of tweaking raw intervals.
|
|
888
|
-
|
|
889
|
-
---
|
|
890
|
-
|
|
891
|
-
## 0.1.83
|
|
892
|
-
|
|
893
|
-
### Added
|
|
894
|
-
|
|
895
|
-
- **Multi-Account Proxy Server** -- automatically starts a local reverse proxy (`fcm-proxy`) that groups all accounts into a single provider in OpenCode; supports multi-account rotation and auto-detects usage limits to swap between providers.
|
|
896
|
-
- **Transparent ZAI Proxy** -- bridges ZAI's non-standard API format to OpenAI-compatible `/v1/` for OpenCode CLI mode.
|
|
897
|
-
- **Quota & Usage Tracking** -- new `Usage` column in TUI shows remaining quota percentage for each model; persists across sessions via `token-stats.json`.
|
|
898
|
-
- **Dedicated Log Viewer** -- press `X` to view real-time activity and error logs in a focused TUI overlay; includes auto-pruning to keep log history concise.
|
|
899
|
-
- **Usage Sort (`Shift+G`)** -- new hotkey to sort models by remaining quota percentage, helping you pick models with the most bandwidth left.
|
|
900
|
-
- **Ping Interval Increase (`=`)** -- reassigned interval increase to the `=` key to free up `X` for logs; `W` still decreases the interval.
|
|
901
|
-
- **Model Catalogue Merging** -- groups identical models across different providers into a single "merged" view while retaining the ability to probe specific endpoints.
|
|
902
|
-
- **MODEL_NOT_FOUND Rotation** -- if a specific provider returns a 404 for a model, the TUI intelligently rotates through other available providers for the same model.
|
|
903
|
-
- **Sticky Health-break** -- UI improvement that prevents the TUI from jumping when a model's status changes from UP to TIMEOUT/DOWN.
|
|
904
|
-
- **Telemetry Opt-out** -- users can now explicitly disable anonymous telemetry in their config file (opt-in by default for improved bug tracking).
|
|
905
|
-
|
|
906
|
-
### Changed
|
|
907
|
-
|
|
908
|
-
- **Masked API Keys in Settings** -- hides middle parts of API keys in the `P` menu to prevent accidental exposure during screen sharing.
|
|
909
|
-
- **Enhanced tmux support** -- auto-discovery of available ports for OpenCode sub-agent panes when running in a tmux session.
|
|
910
|
-
- **Hardened Test Suite** -- expanded to 13 suites and 62+ verified test cases covering proxy logic, usage reading, and hotkey behavior.
|
|
911
|
-
|
|
912
|
-
## 0.1.82
|
|
913
|
-
|
|
914
|
-
### Fixed
|
|
915
|
-
|
|
916
|
-
- **Alibaba Cloud URL** -- updated from deprecated `dashscope.console.alibabacloud.com` to active `modelstudio.console.alibabacloud.com` (rebranded to Model Studio).
|
|
917
|
-
- **SambaNova URL** -- updated from broken `sambanova.ai/developers` to active `cloud.sambanova.ai/apis` (SambaCloud portal).
|
|
918
|
-
- **OpenRouter key corruption** -- added validation to detect and prevent saving OpenRouter keys that don't start with `sk-or-` prefix. Shows error message and cancels save if corruption detected.
|
|
919
|
-
|
|
920
|
-
---
|
|
921
|
-
|
|
922
|
-
## 0.1.81
|
|
923
|
-
|
|
924
|
-
### Added
|
|
925
|
-
|
|
926
|
-
- **Dynamic OpenRouter free model discovery** -- fetches live free models from OpenRouter API at startup; replaces static list with fresh data so new free models appear automatically without code updates. Falls back to cached static list with a yellow warning on network failure.
|
|
927
|
-
- **`formatCtxWindow` and `labelFromId` utility functions** -- extracted to `lib/utils.js` for testability; used by dynamic OpenRouter discovery to convert API data to display format.
|
|
928
|
-
- **16 new unit tests** -- covering `formatCtxWindow`, `labelFromId`, and MODELS array mutation logic (147 total tests across 23 suites).
|
|
929
|
-
- **NVIDIA NIM auto-configuration** -- selecting a NIM model in OpenCode now auto-creates the nvidia provider block in `opencode.json` if missing, eliminating the manual install prompt.
|
|
930
|
-
|
|
931
|
-
### Fixed
|
|
932
|
-
|
|
933
|
-
- **Auto-update infinite loop** -- when running from source (dev mode with `.git` directory), auto-update is now skipped to prevent the restart loop where LOCAL_VERSION never changes.
|
|
934
|
-
- **NVIDIA model double-prefix bug** -- model IDs in `sources.js` already include `nvidia/` prefix; `getOpenCodeModelId()` now strips it for nvidia provider (like it does for zai), preventing `nvidia/nvidia/...` in OpenCode config.
|
|
935
|
-
|
|
936
|
-
### Removed
|
|
937
|
-
|
|
938
|
-
- **`checkNvidiaNimConfig()` function** -- replaced by auto-create pattern; dead code removed.
|
|
939
|
-
|
|
940
|
-
---
|
|
941
|
-
|
|
942
|
-
## 0.1.80
|
|
943
|
-
|
|
944
|
-
### Fixed
|
|
945
|
-
|
|
946
|
-
- **Settings menu crash** -- fixed `ReferenceError: telemetryRowIdx is not defined` error when opening Settings (P key). Removed lingering reference to the deleted telemetry row index.
|
|
947
|
-
|
|
948
|
-
---
|
|
949
|
-
|
|
950
|
-
## 0.1.79
|
|
951
|
-
|
|
952
|
-
### Added
|
|
953
|
-
|
|
954
|
-
- **Alibaba Cloud (DashScope) provider** -- added support for Qwen3-Coder models via Alibaba Cloud Model Studio. 8 new models including Qwen3 Coder Plus (69.6% SWE-bench), Qwen3 Coder Max (67.0%), Qwen3 Coder Next (65.0%), Qwen3 Coder 480B (70.6%), Qwen3 235B (70.0%), Qwen3 80B Instruct (65.0%), Qwen3 32B (50.0%), and Qwen2.5 Coder 32B (46.0%). OpenAI-compatible API with 1M free tokens per model (Singapore region, 90 days). Use `DASHSCOPE_API_KEY` environment variable or configure via Settings (P key).
|
|
955
|
-
- **Model count increased** -- now supporting 158 models across 20 providers (up from 150 models / 19 providers).
|
|
956
|
-
|
|
957
|
-
---
|
|
958
|
-
|
|
959
|
-
## 0.1.78
|
|
960
|
-
|
|
961
|
-
### Added
|
|
962
|
-
|
|
963
|
-
- **Auto-update system** β removed manual update popup; now automatically installs updates and opens changelog in browser. Update proceeds immediately after opening changelog.
|
|
964
|
-
|
|
965
|
-
---
|
|
966
|
-
|
|
967
|
-
## 0.1.77
|
|
968
|
-
|
|
969
|
-
### Added
|
|
970
|
-
|
|
971
|
-
- **Bug Report system (I key)** β added anonymous bug report overlay that sends bug reports directly to the project team via Discord webhook. Press **I** to open a multi-line input box, describe the bug, and press Enter to send. Uses the same infrastructure as Feature Request (J key) with a separate webhook and distinct red color theme. Includes automatic collection of anonymous metadata (OS, terminal, Node version, architecture, timezone) sent only in the Discord message footer (not visible in UI). Shows success confirmation with 3-second auto-close.
|
|
972
|
-
- **Full-screen overlay** β Bug Report overlay hides the main TUI completely (like Settings, Help, and Feature Request), with a bordered multi-line input box supporting up to 500 characters with real-time character counter.
|
|
973
|
-
- **Help documentation** β added I key entry in help overlay (K) and navigation hints.
|
|
974
|
-
|
|
975
|
-
### Changed
|
|
976
|
-
|
|
977
|
-
- **Footer hints** β added `I Report bug` to line 2 of navigation hints for discoverability.
|
|
978
|
-
|
|
979
|
-
---
|
|
980
|
-
|
|
981
|
-
## 0.1.76
|
|
982
|
-
|
|
983
|
-
### Added
|
|
984
|
-
|
|
985
|
-
- **Feature Request system (J key)** β added anonymous feedback overlay that sends feature requests directly to the project team via Discord webhook. Press **J** to open a multi-line input box, type your request, and press Enter to send. Includes automatic collection of anonymous metadata (OS, terminal, Node version, architecture, timezone) sent only in the Discord message footer (not visible in UI). Shows success confirmation with 3-second auto-close.
|
|
986
|
-
- **Full-screen overlay** β Feature Request overlay now hides the main TUI completely (like Settings and Help), with a bordered multi-line input box supporting up to 500 characters with real-time character counter.
|
|
987
|
-
- **Help documentation** β added J key entry in help overlay (K) and navigation hints.
|
|
988
|
-
|
|
989
|
-
### Changed
|
|
990
|
-
|
|
991
|
-
- **Footer hints** β added `J Request feature` to line 2 of navigation hints for discoverability.
|
|
992
|
-
|
|
993
|
-
---
|
|
994
|
-
|
|
995
|
-
## 0.1.75
|
|
996
|
-
|
|
997
|
-
### Fixed
|
|
998
|
-
|
|
999
|
-
- **TUI header disappeared** β fixed `TABLE_FOOTER_LINES` constant (was 7, now 5) to match the actual footer line count after contributors line was removed in 0.1.73. The mismatch caused `calculateViewport()` to over-reserve vertical space, pushing the header off-screen.
|
|
1000
|
-
- **Missing spacer line** β restored the `else { lines.push('') }` branch that adds a blank line between model rows and navigation hints when the profile-save message is not shown.
|
|
1001
|
-
- **Stray debug line** β removed accidental `lines.push('____________________')` left in the Smart Recommend section.
|
|
1002
|
-
|
|
1003
|
-
---
|
|
1004
|
-
|
|
1005
|
-
## 0.1.74
|
|
1006
|
-
|
|
1007
|
-
### Changed
|
|
1008
|
-
|
|
1009
|
-
- **TUI footer spacing** β removed an empty separator line between the β... more below β¦β indicator and the navigation hints, freeing up vertical space in the main UI.
|
|
1010
|
-
|
|
1011
|
-
## 0.1.73
|
|
1012
|
-
|
|
1013
|
-
### Fixed
|
|
1014
|
-
|
|
1015
|
-
- **iFlow OpenCode integration** β added missing iFlow provider configuration for OpenCode launch. Selecting iFlow models and pressing Enter now correctly configures OpenCode to use iFlow's API.
|
|
1016
|
-
|
|
1017
|
-
---
|
|
1018
|
-
|
|
1019
|
-
## 0.1.72
|
|
1020
|
-
|
|
1021
|
-
### Changed
|
|
1022
|
-
|
|
1023
|
-
- **TUI footer spacing** β added extra empty line before contributors line for better readability in terminals.
|
|
1024
|
-
|
|
1025
|
-
---
|
|
1026
|
-
|
|
1027
|
-
## 0.1.71
|
|
1028
|
-
|
|
1029
|
-
### Changed
|
|
1030
|
-
|
|
1031
|
-
- **TUI footer contributors** β moved contributor names to their own line at the bottom for cleaner layout.
|
|
1032
|
-
|
|
1033
|
-
---
|
|
1034
|
-
|
|
1035
|
-
## 0.1.70
|
|
1036
|
-
|
|
1037
|
-
### Changed
|
|
1038
|
-
|
|
1039
|
-
- **Default ping interval 60s -> 3s** -- Changed default re-ping frequency from every 60 seconds back to every 3 seconds for faster model monitoring feedback. Still adjustable with W/X keys.
|
|
1040
|
-
|
|
1041
|
-
---
|
|
1042
|
-
|
|
1043
|
-
## 0.1.69
|
|
1044
|
-
|
|
1045
|
-
### Added
|
|
1046
|
-
|
|
1047
|
-
- **iFlow provider** β new provider with 11 free coding models (TBStars2 200B, DeepSeek V3/V3.2/R1, Qwen3 Coder Plus/235B/32B/Max, Kimi K2, GLM-4.6). Free for individual users with no request limits. API key expires every 7 days.
|
|
1048
|
-
- **TUI footer contributors** β added contributor names directly in footer line (vava-nessa β’ erwinh22 β’ whit3rabbit β’ skylaweber).
|
|
1049
|
-
|
|
1050
|
-
### Changed
|
|
1051
|
-
|
|
1052
|
-
- **README updates** β updated model/provider counts to 150 models across 19 providers; updated provider count references throughout.
|
|
1053
|
-
|
|
1054
|
-
### Fixed
|
|
1055
|
-
|
|
1056
|
-
- **JSDoc in lib/config.js** β fixed broken JSON structure in config example (removed duplicate lines, fixed array/object brackets).
|
|
1057
|
-
- **CHANGELOG cleanup** β removed `[fork]` prefixes from 0.1.68 entries for cleaner presentation.
|
|
1058
|
-
|
|
1059
|
-
---
|
|
1060
|
-
|
|
1061
|
-
## 0.1.68
|
|
1062
|
-
|
|
1063
|
-
### Added
|
|
1064
|
-
|
|
1065
|
-
- **ZAI reverse proxy for OpenCode** -- When selecting a ZAI model, a local HTTP proxy automatically starts to translate OpenCode's `/v1/*` requests to ZAI's `/api/coding/paas/v4/*` API format. Proxy lifecycle is fully managed (starts on Enter, stops on OpenCode exit).
|
|
1066
|
-
- **Stale config cleanup on OpenCode exit** -- The `spawnOpenCode` exit handler now removes the ZAI provider block from `opencode.json` so leftover config does not cause "model not valid" errors on the next manual OpenCode launch.
|
|
1067
|
-
- **Smart Recommend (Q key)** β new modal overlay with a 3-question wizard (task type, priority, context budget) that runs a 10-second targeted analysis (2 pings/sec) and recommends the Top 3 models for your use case. Recommended models are pinned above favorites with π― prefix and green row highlight.
|
|
1068
|
-
- **Config Profiles** β save/load named configuration profiles (`--profile work`, `--profile fast`, etc.). Each profile stores API keys, enabled providers, favorites, tier filters, ping interval, and default sort. **Shift+P** cycles through profiles live in the TUI.
|
|
1069
|
-
- **`--recommend` CLI flag** β auto-opens the Smart Recommend overlay on startup.
|
|
1070
|
-
- **`--profile <name>` CLI flag** β loads a saved profile at startup; errors if profile doesn't exist.
|
|
1071
|
-
- **Scoring engine** (`lib/utils.js`) β `TASK_TYPES`, `PRIORITY_TYPES`, `CONTEXT_BUDGETS`, `parseCtxToK()`, `parseSweToNum()`, `scoreModelForTask()`, `getTopRecommendations()` for the recommendation algorithm.
|
|
1072
|
-
- **Profile management** (`lib/config.js`) β `saveAsProfile()`, `loadProfile()`, `listProfiles()`, `deleteProfile()`, `getActiveProfileName()`, `setActiveProfile()`.
|
|
1073
|
-
- 43 new unit tests (131 total) covering scoring constants, `scoreModelForTask`, `getTopRecommendations`, `--profile`/`--recommend` arg parsing, and config profile CRUD.
|
|
1074
|
-
|
|
1075
|
-
### Fixed
|
|
1076
|
-
|
|
1077
|
-
- **OpenCode config path on Windows** -- OpenCode uses `xdg-basedir` which resolves to `%USERPROFILE%\.config` on all platforms. We were writing to `%APPDATA%\Roaming\opencode\` on Windows, so OpenCode never saw the ZAI provider config. Config path is now `~/.config/opencode/opencode.json` on all platforms.
|
|
1078
|
-
- **`apiKey` field for ZAI provider** -- Changed from `{env:ZAI_API_KEY}` template string to the actual resolved key so OpenCode's `@ai-sdk/openai-compatible` provider can authenticate immediately.
|
|
1079
|
-
- **`--profile` arg parsing** -- the profile value (e.g. `work` in `--profile work`) was incorrectly captured as `apiKey`; fixed with `skipIndices` Set in `parseArgs()`.
|
|
1080
|
-
- **`recommendScore` undefined** -- `sortResultsWithPinnedFavorites()` referenced `recommendScore` but it was never set on result objects; now set during `startRecommendAnalysis()`.
|
|
1081
|
-
|
|
1082
|
-
### Changed
|
|
1083
|
-
|
|
1084
|
-
- **Default ping interval 3s -> 60s** -- Reduced re-ping frequency from every 3 seconds to every 60 seconds for a calmer monitoring experience (still adjustable with W/X keys).
|
|
1085
|
-
- **Suppress MaxListeners warning** -- Set `NODE_NO_WARNINGS=1` in the OpenCode child process environment to suppress Node.js EventEmitter warnings.
|
|
1086
|
-
- **ZAI models synced to 5** -- Updated `sources.js` to 5 ZAI API models with SWE-bench scores: GLM-5 (77.8%), GLM-4.5 (75.0%), GLM-4.7 (73.8%), GLM-4.5-Air (72.0%), GLM-4.6 (70.0%).
|
|
1087
|
-
- **README updates** -- Updated model/provider counts (139 models, 18 providers), ZAI model table with SWE-bench scores, ping interval references (60s), added ZAI proxy documentation.
|
|
1088
|
-
- **Help overlay (K)** β removed the Filters section; moved `T` (Cycle tier) and `N` (Cycle origin) shortcuts into their respective column description rows. Added `Q` (Smart Recommend) and `Shift+P` (Cycle profile) shortcuts. Added `--recommend` and `--profile` to the CLI flags section.
|
|
1089
|
-
- **Sort/pin order** β `sortResultsWithPinnedFavorites()` now pins recommended+favorite models first, then recommended-only, then favorite-only, then normal sorted models.
|
|
1090
|
-
- **Animation loop priority** β Settings > Recommend > Help > Table.
|
|
1091
|
-
|
|
1092
|
-
---
|
|
1093
|
-
|
|
1094
|
-
## 0.1.68
|
|
1095
|
-
|
|
1096
|
-
### Added
|
|
1097
|
-
|
|
1098
|
-
- **ZAI reverse proxy for OpenCode** -- When selecting a ZAI model, a local HTTP proxy automatically starts to translate OpenCode's `/v1/*` requests to ZAI's `/api/coding/paas/v4/*` API format. Proxy lifecycle is fully managed (starts on Enter, stops on OpenCode exit).
|
|
1099
|
-
- **Stale config cleanup on OpenCode exit** -- The `spawnOpenCode` exit handler now removes the ZAI provider block from `opencode.json` so leftover config does not cause "model not valid" errors on the next manual OpenCode launch.
|
|
1100
|
-
|
|
1101
|
-
### Fixed
|
|
1102
|
-
|
|
1103
|
-
- **OpenCode config path on Windows** -- OpenCode uses `xdg-basedir` which resolves to `%USERPROFILE%\.config` on all platforms. We were writing to `%APPDATA%\Roaming\opencode\` on Windows, so OpenCode never saw the ZAI provider config. Config path is now `~/.config/opencode/opencode.json` on all platforms.
|
|
1104
|
-
- **`apiKey` field for ZAI provider** -- Changed from `{env:ZAI_API_KEY}` template string to the actual resolved key so OpenCode's `@ai-sdk/openai-compatible` provider can authenticate immediately.
|
|
1105
|
-
|
|
1106
|
-
### Changed
|
|
1107
|
-
|
|
1108
|
-
- **Default ping interval 3s -> 60s** -- Reduced re-ping frequency from every 3 seconds to every 60 seconds for a calmer monitoring experience (still adjustable with W/X keys).
|
|
1109
|
-
- **Suppress MaxListeners warning** -- Set `NODE_NO_WARNINGS=1` in the OpenCode child process environment to suppress Node.js EventEmitter warnings.
|
|
1110
|
-
- **ZAI models synced to 5** -- Updated `sources.js` to 5 ZAI API models with SWE-bench scores: GLM-5 (77.8%), GLM-4.5 (75.0%), GLM-4.7 (73.8%), GLM-4.5-Air (72.0%), GLM-4.6 (70.0%).
|
|
1111
|
-
- **README updates** -- Updated model/provider counts (139 models, 18 providers), ZAI model table with SWE-bench scores, ping interval references (60s), added ZAI proxy documentation.
|
|
1112
|
-
- **Smart Recommend (Q key)** β new modal overlay with a 3-question wizard (task type, priority, context budget) that runs a 10-second targeted analysis (2 pings/sec) and recommends the Top 3 models for your use case. Recommended models are pinned above favorites with π― prefix and green row highlight.
|
|
1113
|
-
- **Config Profiles** β save/load named configuration profiles (`--profile work`, `--profile fast`, etc.). Each profile stores API keys, enabled providers, favorites, tier filters, ping interval, and default sort. **Shift+P** cycles through profiles live in the TUI.
|
|
1114
|
-
- **`--recommend` CLI flag** β auto-opens the Smart Recommend overlay on startup.
|
|
1115
|
-
- **`--profile <name>` CLI flag** β loads a saved profile at startup; errors if profile doesn't exist.
|
|
1116
|
-
- **Scoring engine** (`lib/utils.js`) β `TASK_TYPES`, `PRIORITY_TYPES`, `CONTEXT_BUDGETS`, `parseCtxToK()`, `parseSweToNum()`, `scoreModelForTask()`, `getTopRecommendations()` for the recommendation algorithm.
|
|
1117
|
-
- **Profile management** (`lib/config.js`) β `saveAsProfile()`, `loadProfile()`, `listProfiles()`, `deleteProfile()`, `getActiveProfileName()`, `setActiveProfile()`.
|
|
1118
|
-
- 43 new unit tests (131 total) covering scoring constants, `scoreModelForTask`, `getTopRecommendations`, `--profile`/`--recommend` arg parsing, and config profile CRUD.
|
|
1119
|
-
- **iFlow provider** β new provider with 11 free coding models (TBStars2, DeepSeek V3/V3.2/R1, Qwen3 Coder Plus/235B/32B/Max, Kimi K2, GLM-4.6). Free for individual users with no request limits. API key expires every 7 days.
|
|
1120
|
-
- **TUI footer contributors** β added contributor names directly in footer line (vava-nessa β’ erwinh22 β’ whit3rabbit β’ skylaweber).
|
|
1121
|
-
|
|
1122
|
-
### Changed
|
|
1123
|
-
|
|
1124
|
-
- **Help overlay (K)** β removed the Filters section; moved `T` (Cycle tier) and `N` (Cycle origin) shortcuts into their respective column description rows. Added `Q` (Smart Recommend) and `Shift+P` (Cycle profile) shortcuts. Added `--recommend` and `--profile` to the CLI flags section.
|
|
1125
|
-
- **Sort/pin order** β `sortResultsWithPinnedFavorites()` now pins recommended+favorite models first, then recommended-only, then favorite-only, then normal sorted models.
|
|
1126
|
-
- **Animation loop priority** β Settings > Recommend > Help > Table.
|
|
1127
|
-
|
|
1128
|
-
### Fixed
|
|
1129
|
-
|
|
1130
|
-
- **`--profile` arg parsing** β the profile value (e.g. `work` in `--profile work`) was incorrectly captured as `apiKey`; fixed with `skipIndices` Set in `parseArgs()`.
|
|
1131
|
-
- **`recommendScore` undefined** β `sortResultsWithPinnedFavorites()` referenced `recommendScore` but it was never set on result objects; now set during `startRecommendAnalysis()`.
|
|
1132
|
-
- **JSDoc in lib/config.js** β fixed broken JSON structure in config example (duplicate lines, incorrect brackets).
|
|
1133
|
-
- **CHANGELOG cleanup** β removed `[fork]` prefixes from entries for cleaner presentation.
|
|
1134
|
-
- **Smart Recommend (Q key)** β new modal overlay with a 3-question wizard (task type, priority, context budget) that runs a 10-second targeted analysis (2 pings/sec) and recommends the Top 3 models for your use case. Recommended models are pinned above favorites with π― prefix and green row highlight.
|
|
1135
|
-
- **Config Profiles** β save/load named configuration profiles (`--profile work`, `--profile fast`, etc.). Each profile stores API keys, enabled providers, favorites, tier filters, ping interval, and default sort. **Shift+P** cycles through profiles live in the TUI.
|
|
1136
|
-
- **`--recommend` CLI flag** β auto-opens the Smart Recommend overlay on startup.
|
|
1137
|
-
- **`--profile <name>` CLI flag** β loads a saved profile at startup; errors if profile doesn't exist.
|
|
1138
|
-
- **Scoring engine** (`lib/utils.js`) β `TASK_TYPES`, `PRIORITY_TYPES`, `CONTEXT_BUDGETS`, `parseCtxToK()`, `parseSweToNum()`, `scoreModelForTask()`, `getTopRecommendations()` for the recommendation algorithm.
|
|
1139
|
-
- **Profile management** (`lib/config.js`) β `saveAsProfile()`, `loadProfile()`, `listProfiles()`, `deleteProfile()`, `getActiveProfileName()`, `setActiveProfile()`.
|
|
1140
|
-
- 43 new unit tests (131 total) covering scoring constants, `scoreModelForTask`, `getTopRecommendations`, `--profile`/`--recommend` arg parsing, and config profile CRUD.
|
|
1141
|
-
|
|
1142
|
-
### Changed
|
|
1143
|
-
|
|
1144
|
-
- **Help overlay (K)** β removed the Filters section; moved `T` (Cycle tier) and `N` (Cycle origin) shortcuts into their respective column description rows. Added `Q` (Smart Recommend) and `Shift+P` (Cycle profile) shortcuts. Added `--recommend` and `--profile` to the CLI flags section.
|
|
1145
|
-
- **Sort/pin order** β `sortResultsWithPinnedFavorites()` now pins recommended+favorite models first, then recommended-only, then favorite-only, then normal sorted models.
|
|
1146
|
-
- **Animation loop priority** β Settings > Recommend > Help > Table.
|
|
1147
|
-
|
|
1148
|
-
### Fixed
|
|
1149
|
-
|
|
1150
|
-
- **`--profile` arg parsing** β the profile value (e.g. `work` in `--profile work`) was incorrectly captured as `apiKey`; fixed with `skipIndices` Set in `parseArgs()`.
|
|
1151
|
-
- **`recommendScore` undefined** β `sortResultsWithPinnedFavorites()` referenced `recommendScore` but it was never set on result objects; now set during `startRecommendAnalysis()`.
|
|
1152
|
-
|
|
1153
|
-
---
|
|
1154
|
-
|
|
1155
|
-
## 0.1.67
|
|
1156
|
-
|
|
1157
|
-
### Added
|
|
1158
|
-
|
|
1159
|
-
- **ZAI provider preserved** β merged upstream v0.1.67 while retaining ZAI (z.ai) provider with 5 GLM models (GLM-5, GLM-4.5, GLM-4.7, GLM-4.5-Air, GLM-4.6). ZAI prefix stripping, OpenCode/Desktop integration, and provider metadata all carried forward.
|
|
1160
|
-
- **Stability Score** β new composite 0β100 metric combining p95 latency (30%), jitter/Ο (30%), spike rate (20%), and uptime (20%). Displayed as a color-coded column in the TUI (green β₯80, cyan β₯60, yellow β₯40, red <40).
|
|
1161
|
-
- **p95 latency** (`getP95`) β 95th percentile latency from successful pings. Answers "95% of requests are faster than X ms."
|
|
1162
|
-
- **Jitter** (`getJitter`) β standard deviation of latency. Low jitter = predictable, high jitter = erratic/spiky.
|
|
1163
|
-
- **"Spiky" verdict** β new verdict that catches models with good average latency but terrible tail latency (p95 spikes). A model with avg 250ms but p95 6000ms now gets flagged as "Spiky π" instead of "Perfect π".
|
|
1164
|
-
- **Stability sorting** β press `B` to sort by stability score. Most stable models rise to the top. `B` key now listed in the footer bar sort keys.
|
|
1165
|
-
- 24 new unit tests covering p95, jitter, stability score, Spiky verdict, and stability sorting.
|
|
1166
|
-
- **README: TUI Columns reference table** β full 12-column table documenting every column (Rank, Tier, SWE%, Model, Origin, Latest, Avg, Health, Verdict, Stability, Context, Up%).
|
|
1167
|
-
- **README: Stability Score section** β documents the formula, weights, color thresholds, and an example calculation.
|
|
1168
|
-
- **README: Verdict values table** β lists all 7 verdict categories with their emoji, meaning, and criteria.
|
|
1169
|
-
|
|
1170
|
-
### Changed
|
|
1171
|
-
|
|
1172
|
-
- **"Stab" column renamed to "Stability"** β column header widened from 6 to 11 characters; header text now reads `StaBility` with the `B` sort-key letter in uppercase bold yellow.
|
|
1173
|
-
- **SWE% column: 8-band color gradient** β replaced the old 3-band color scheme (green β₯50, yellow β₯30, dim otherwise) with an 8-band gradient matching `TIER_COLOR`: β₯70% bright neon green, β₯60% green, β₯50% yellow-green, β₯40% yellow, β₯35% amber, β₯30% orange-red, β₯20% red, <20% dark red.
|
|
1174
|
-
- `getVerdict()` is now stability-aware: models in "Perfect" or "Normal" avg range get downgraded to "Spiky" when p95 shows extreme tail latency (requires β₯3 pings to avoid false positives).
|
|
1175
|
-
- `findBestModel()` now uses a 4-key sort: status β avg latency β stability score β uptime (was 3-key: status β avg β uptime).
|
|
1176
|
-
- `sortResults()` supports new `'stability'` column.
|
|
1177
|
-
- `VERDICT_ORDER` updated to include "Spiky" between "Slow" and "Very Slow".
|
|
1178
|
-
- **README: keyboard shortcuts** updated to include `B` for Stability sort; "How it works" diagram updated.
|
|
1179
|
-
- **Default ping interval β 3 seconds** (was 2s) for a calmer default pace; still adjustable with W/X keys.
|
|
1180
|
-
- **Verdict colors unified with TIER_COLOR gradient** β Perfect (cyan-green) β Normal (lime) β Spiky (yellow-green) β Slow (orange) β Very Slow (red-orange) β Overloaded (red) β Unstable (dark red) β Unusable (darkest red). Bestβworst ordering in code.
|
|
1181
|
-
- **Footer cleanup** β Removed the BETA TUI warning line. Renamed "Join our Discord" to just "Discord" and placed it next to Contributors on the "Made with love" line.
|
|
1182
|
-
- **Footer link colors** β Star on GitHub: yellow, Contributors: orange, Discord: light purple. Ctrl+C Exit moved to end of "Made with love" line.
|
|
1183
|
-
- **Discord plain URL** β Shows `Discord β https://discord.gg/5MbTnDC3Md` so terminals without OSC 8 link support can still see the URL.
|
|
1184
|
-
- **K Help styling** β Changed from green background badge to neon green text (`rgb(0,255,80)`) with no background.
|
|
1185
|
-
- **Z Mode styling** β Red-orange color (`rgb(255,100,50)`) matching OpenClaw branding.
|
|
1186
|
-
- **Selection row styling** β Darker backgrounds: favorite rows `bgRgb(35,20,0)`, cursor rows `bgRgb(50,0,60)`. Model name and Origin rendered in white bold when selected.
|
|
1187
|
-
- **README** β Updated all ping interval references from 2s to 3s; removed BETA warning line.
|
|
1188
|
-
|
|
1189
|
-
### Fixed
|
|
1190
|
-
|
|
1191
|
-
- **Column alignment: Health/Status emoji width** β Health column used `.padEnd()` which miscounted emoji width (β
, π₯, β³ etc. are 2 terminal columns but counted as fewer). Switched to `padEndDisplay()` so Verdict, Stability, and Up% columns now align correctly.
|
|
1192
|
-
- **Verdict emojis moved to end of text** β emojis now appear after the word (e.g., `Perfect π` instead of `π Perfect`) for cleaner left-alignment.
|
|
1193
|
-
- **Empty cell placeholders** β changed from single `β` to `βββ` in Latest Ping, Avg Ping, and Stability columns so empty cells have more visual weight and don't look like blank space.
|
|
1194
|
-
|
|
1195
|
-
---
|
|
1196
|
-
|
|
1197
|
-
## 0.1.66
|
|
1198
|
-
|
|
1199
|
-
### Added
|
|
1200
|
-
|
|
1201
|
-
- Added 4 new providers: SiliconFlow, Together AI, Cloudflare Workers AI, and Perplexity API.
|
|
1202
|
-
- Added 23 provider models across these new integrations (OpenAI-compatible endpoints + settings onboarding metadata).
|
|
1203
|
-
- Added Cloudflare-specific setup guidance in Settings, including explicit `CLOUDFLARE_ACCOUNT_ID` requirement.
|
|
1204
|
-
|
|
1205
|
-
### Changed
|
|
1206
|
-
|
|
1207
|
-
- Extended provider/env support in config and runtime (`SILICONFLOW_API_KEY`, `TOGETHER_API_KEY`, `CLOUDFLARE_API_TOKEN`/`CLOUDFLARE_API_KEY`, `PERPLEXITY_API_KEY`/`PPLX_API_KEY`).
|
|
1208
|
-
- Extended OpenCode Desktop provider auto-configuration for SiliconFlow, Together AI, Cloudflare Workers AI, and Perplexity API.
|
|
1209
|
-
- Updated README to reflect current provider/model totals (17 providers / 134 models) and expanded key setup + env variable documentation.
|
|
1210
|
-
- Updated `P` (Settings) and `K` (Help) overlays with dedicated dark background panels (distinct from the main table) for clearer visual separation.
|
|
1211
|
-
|
|
1212
|
-
### Fixed
|
|
1213
|
-
|
|
1214
|
-
- Fixed model list scrolling and favorite toggle UX regression introduced after `0.1.65` (cursor/scroll stability when unpinning favorites, last rows reachable).
|
|
1215
|
-
- Fixed overlay usability on small terminals: `K` (Help) and `P` (Settings) now use viewport scrolling so all content and top rows remain reachable.
|
|
1216
|
-
- Fixed main table keyboard navigation to wrap around: pressing Up on the first row jumps to the last row, and pressing Down on the last row jumps to the first row.
|
|
1217
|
-
|
|
1218
|
-
---
|
|
1219
|
-
|
|
1220
|
-
## 0.1.65
|
|
1221
|
-
|
|
1222
|
-
### Added
|
|
1223
|
-
|
|
1224
|
-
- Added persistent model favorites with `F` key toggle, star marker in Model column, dark-orange favorite highlighting, and pinned-at-top behavior.
|
|
1225
|
-
- Added manual update maintenance flow in Settings (`P`): check npm updates on demand and install directly from the settings screen.
|
|
1226
|
-
- Expanded `K` help overlay with complete keybindings (main TUI + settings) and CLI flags usage examples.
|
|
1227
|
-
|
|
1228
|
-
### Changed
|
|
1229
|
-
|
|
1230
|
-
- Favorites now remain visible and pinned regardless of active sort or tier/origin filters.
|
|
1231
|
-
- Extended config schema (`~/.free-coding-models.json`) with a persisted `favorites` array (`providerKey/modelId` entries).
|
|
1232
|
-
- Updated README documentation for favorites, manual updates, settings shortcuts, and config structure.
|
|
1233
|
-
|
|
1234
|
-
---
|
|
1235
|
-
|
|
1236
|
-
## 0.1.64
|
|
1237
|
-
|
|
1238
|
-
### Added
|
|
1239
|
-
|
|
1240
|
-
- Added 4 new free providers: Hugging Face Inference, Replicate, DeepInfra, and Fireworks AI (models, key handling, healthchecks, Settings integration).
|
|
1241
|
-
- Added richer Settings (`P`) provider rows with inline rate-limit summary and live API key test status.
|
|
1242
|
-
|
|
1243
|
-
### Changed
|
|
1244
|
-
|
|
1245
|
-
- OpenCode launch now detects `tmux` and auto-injects `--port` (`OPENCODE_PORT` if free, otherwise first available `4096-5095`) so sub-agent panes work reliably.
|
|
1246
|
-
- Updated OpenRouter free model set to include `qwen/qwen3-coder:480b-free`, `mistralai/devstral-2-free`, and `mimo-v2-flash-free`.
|
|
1247
|
-
- Added SambaNova `Llama3-Groq` coding-tuned entry.
|
|
1248
|
-
- Updated setup/config docs and env var support for new providers (`HUGGINGFACE_API_KEY`/`HF_TOKEN`, `REPLICATE_API_TOKEN`, `DEEPINFRA_API_KEY`/`DEEPINFRA_TOKEN`).
|
|
1249
|
-
- Replicate pings now use `/v1/predictions` request format; OpenCode launch for Replicate is guarded with a clear monitor-only message.
|
|
1250
|
-
- Settings bottom panel now shows provider onboarding steps (signup URL + key creation/test flow) instead of model list details.
|
|
1251
|
-
- Documented in `AGENTS.md` that top changelog entries must stay clean for direct reuse in GitHub Release notes.
|
|
1252
|
-
|
|
1253
|
-
### Fixed
|
|
1254
|
-
|
|
1255
|
-
- Settings/onboarding disabled state now uses an explicit red cross (`β`) instead of a gray square glyph for better terminal font compatibility.
|
|
1256
|
-
|
|
1257
|
-
---
|
|
1258
|
-
|
|
1259
|
-
## 0.1.63
|
|
1260
|
-
|
|
1261
|
-
### Changed
|
|
1262
|
-
|
|
1263
|
-
- Replaced webhook telemetry with PostHog capture API (`/i/v0/e/`) and kept explicit consent + `--no-telemetry` opt-out.
|
|
1264
|
-
- Added persistent anonymous telemetry identity in config (`telemetry.anonymousId`) for stable anonymous usage counts.
|
|
1265
|
-
- Added telemetry consent screen UX: custom ASCII onboarding, explicit privacy messaging, and βAccept & Continueβ default action.
|
|
1266
|
-
- Added telemetry toggle in Settings (`P`) and documented env controls: `FREE_CODING_MODELS_TELEMETRY`, `FREE_CODING_MODELS_POSTHOG_KEY`, `FREE_CODING_MODELS_POSTHOG_HOST`.
|
|
1267
|
-
- Added telemetry metadata fields: `app_version`, `system` (`macOS`/`Windows`/`Linux`), and `terminal` (Terminal.app/iTerm2/kitty/etc. with fallback).
|
|
1268
|
-
- Added telemetry debug mode with `FREE_CODING_MODELS_TELEMETRY_DEBUG=1` (stderr traces for sent/skip/error states).
|
|
1269
|
-
- Hardened telemetry safety behavior: analytics failures stay non-blocking and non-TTY runs no longer overwrite stored consent.
|
|
1270
|
-
- Fixed consent renderer to avoid full-screen clear side effects and preserve header visibility across terminals.
|
|
1271
|
-
- Updated TUI footer contributors link to point to the repository contributors graph.
|
|
1272
|
-
|
|
1273
|
-
---
|
|
1274
|
-
|
|
1275
|
-
## 0.1.61
|
|
1276
|
-
|
|
1277
|
-
### Changed β TUI Footer & UX
|
|
1278
|
-
|
|
1279
|
-
- **"Made with" line is now pink**: the entire "Made with π & β by vava-nessa" sentence is now rendered in soft pink (`chalk.rgb(255,150,200)`) including the clickable author name link, making it visually distinct from the rest of the footer
|
|
1280
|
-
- **`K Help` badge is now ultra-visible**: changed from plain green background to bright green (`bgGreenBright`) with **black bold text** β high contrast, stands out immediately at a glance in the footer hint line
|
|
1281
|
-
- **`P` key closes Settings**: pressing `P` again while inside the Settings screen now closes it (same behavior as `Esc`). Previously only `Esc` worked. Both keys now trigger the same close + provider rebuild logic
|
|
1282
|
-
|
|
1283
|
-
---
|
|
1284
|
-
|
|
1285
|
-
## 0.1.60
|
|
1286
|
-
|
|
1287
|
-
### Changed β TUI Footer
|
|
1288
|
-
|
|
1289
|
-
- **Discord URL now shown in plain text**: after the clickable "Join our Discord" hyperlink, the raw URL `https://discord.gg/5MbTnDC3Md` is now printed in cyan, separated by `β`. This helps users on terminals that don't support OSC 8 clickable links to still see and copy-paste the URL.
|
|
1290
|
-
|
|
1291
|
-
---
|
|
1292
|
-
|
|
1293
|
-
## 0.1.59
|
|
1294
|
-
|
|
1295
|
-
### Changed β TUI Footer
|
|
1296
|
-
|
|
1297
|
-
- **`K Help` badge in footer is now bright green**: previously plain text, now rendered as `chalk.bgGreen.black.bold(' K Help ')` so it's immediately visible in the footer hint line
|
|
1298
|
-
|
|
1299
|
-
---
|
|
1300
|
-
|
|
1301
|
-
## 0.1.58
|
|
1302
|
-
|
|
1303
|
-
### Changed β TUI
|
|
1304
|
-
|
|
1305
|
-
- **Timeout emoji updated**: replaced `β±` with `β³` everywhere in the TUI (ping timeout display)
|
|
1306
|
-
|
|
1307
|
-
---
|
|
1308
|
-
|
|
1309
|
-
## 0.1.57
|
|
1310
|
-
|
|
1311
|
-
### Changed β TUI Footer
|
|
1312
|
-
|
|
1313
|
-
- **Discord link text shortened**: "Join our Discord" replaces the longer previous label β cleaner footer, same clickable OSC 8 hyperlink
|
|
1314
|
-
|
|
1315
|
-
---
|
|
1316
|
-
|
|
1317
|
-
## 0.1.56
|
|
1318
|
-
|
|
1319
|
-
### Changed β TUI Footer
|
|
1320
|
-
|
|
1321
|
-
- **Footer cleaned up and restructured**: removed duplicate/messy lines left by the 0.1.54 agent; consolidated into two clean footer lines:
|
|
1322
|
-
- Line 1: `Made with π & β by vava-nessa β’ β Star on GitHub` (clickable links)
|
|
1323
|
-
- Line 2: `π¬ Join our Discord β’ β BETA TUI β might crash or have problems`
|
|
1324
|
-
- **BETA warning added to TUI footer**: `β BETA TUI` badge in yellow with a plain-text disclaimer, always visible at the bottom of the TUI app
|
|
1325
|
-
- **Discord invite in TUI footer**: clickable OSC 8 hyperlink added directly in the footer (was only in README before)
|
|
1326
|
-
|
|
1327
|
-
---
|
|
1328
|
-
|
|
1329
|
-
## 0.1.55
|
|
1330
|
-
|
|
1331
|
-
### Changed β README & Documentation
|
|
1332
|
-
|
|
1333
|
-
- **README updated for 9 providers / 101 models**: badges, provider list, Support section, and Requirements section all updated to reflect the new state after 0.1.54
|
|
1334
|
-
- **Discord header block reformatted**: replaced the join banner with a plain `π¬ Let's talk about the project on Discord` link
|
|
1335
|
-
- **BETA warning added to README**: inline `β οΈ free-coding-models is a BETA TUI β expect rough edges and occasional crashes` added to the docs link line in the Support section
|
|
1336
|
-
|
|
1337
|
-
---
|
|
1338
|
-
|
|
1339
|
-
## 0.1.54
|
|
1340
|
-
|
|
1341
|
-
### Added β Providers & Models
|
|
1342
|
-
|
|
1343
|
-
**5 new providers** (9 total, 101 models):
|
|
1344
|
-
|
|
1345
|
-
- **OpenRouter** β 8 free coding models via the `:free` quota tier (20 req/min, 50 req/day shared). Includes Qwen3 Coder, Step 3.5 Flash, DeepSeek R1 0528, GPT OSS 120B/20B, Nemotron Nano 30B, Llama 3.3 70B. Key prefix: `sk-or-`
|
|
1346
|
-
- **Mistral Codestral** β dedicated coding endpoint (`codestral.mistral.ai`), `codestral-latest` model, 30 req/min / 2 000 req/day. Separate API key from the main Mistral platform. Key prefix: `csk-`
|
|
1347
|
-
- **Hyperbolic** β $1 free trial credits. 10 models: Qwen3 Coder 480B, DeepSeek R1 0528, Kimi K2, GPT OSS 120B, Qwen3 235B, Qwen3 80B Instruct, DeepSeek V3 0324, Qwen2.5 Coder 32B, Llama 3.3 70B, Llama 3.1 405B. Key prefix: `eyJ`
|
|
1348
|
-
- **Scaleway** β 1 million free tokens. 7 models: Devstral 2 123B, Qwen3 235B, GPT OSS 120B, Qwen3 Coder 30B, Llama 3.3 70B, R1 Distill 70B, Mistral Small 3.2. Key prefix: `scw-`
|
|
1349
|
-
- **Google AI Studio** β free Gemma 3 models (14 400 req/day, 30 req/min). Gemma 3 27B / 12B / 4B via the OpenAI-compatible `generativelanguage.googleapis.com/v1beta/openai` endpoint. Key prefix: `AIza`
|
|
1350
|
-
|
|
1351
|
-
**New models in existing providers:**
|
|
1352
|
-
|
|
1353
|
-
- **Groq**: GPT OSS 120B (`openai/gpt-oss-120b`), GPT OSS 20B (`openai/gpt-oss-20b`), Qwen3 32B (`qwen/qwen3-32b`)
|
|
1354
|
-
- **Cerebras**: GLM 4.6 (`glm-4.6`) from Z.ai β 10 req/min, 100 req/day
|
|
1355
|
-
- **SambaNova**: DeepSeek V3.1 Terminus (`deepseek-ai/DeepSeek-V3.1-Terminus`, S tier 68.4%)
|
|
1356
|
-
|
|
1357
|
-
### Added β TUI Features
|
|
1358
|
-
|
|
1359
|
-
- **`N` key β Origin/provider filter**: cycles through All β NIM β Groq β Cerebras β SambaNova β OpenRouter β Codestral β Hyperbolic β Scaleway β Google AI β All, mirroring how `T` cycles tiers. The active provider is shown as a badge in the header. The Origin column header now reads `Origin(N)` and highlights in blue when a filter is active.
|
|
1360
|
-
- **`C` key β Sort by context window**: the context-window sort was previously on `N`; moved to `C` (mnemonic: Context) to free up `N` for the origin filter.
|
|
1361
|
-
- **`K` key β Help overlay**: press `K` (or `Esc`) to open/close a full keyboard shortcut reference listing every key and what it does, rendered in the alt-screen buffer without leaving the TUI.
|
|
1362
|
-
- **`Esc` closes help and settings**: pressing Escape now dismisses both the `K` help overlay and the `P` settings screen. The help overlay intercepts Esc before the settings handler so there is no key conflict.
|
|
1363
|
-
|
|
1364
|
-
### Changed β README & UI
|
|
1365
|
-
|
|
1366
|
-
- Provider count badge updated: **4 β 9 providers**
|
|
1367
|
-
- Model count badge updated: **67 β 101 models**
|
|
1368
|
-
- Requirements section lists all 9 providers with their signup URLs
|
|
1369
|
-
- Discord header block replaced with a plain `π¬ Let's talk about the project on Discord` link
|
|
1370
|
-
- Support section reformatted: GitHub issues link + Discord link on separate lines + docs link with inline BETA warning (`β οΈ free-coding-models is a BETA TUI β expect rough edges and occasional crashes`)
|
|
1371
|
-
- Footer hint line updated: `T Tier β’ N Origin β’ β¦ C` replaces old `N` in sort hint; `K Help` added
|
|
1372
|
-
|
|
1373
|
-
### Technical
|
|
1374
|
-
|
|
1375
|
-
- `sources.js`: 5 new named exports; `sources` object extended to 9 entries; `@exports` JSDoc updated
|
|
1376
|
-
- `lib/config.js`: `ENV_VARS` extended with `openrouter`, `codestral`, `hyperbolic`, `scaleway`, `googleai`; JSDoc config structure comment updated
|
|
1377
|
-
- `bin/free-coding-models.js`: first-run wizard extended to 9 providers; `ENV_VAR_NAMES` extended; OpenCode/OpenCode-Desktop provider blocks added for all 5 new providers (all use `@ai-sdk/openai-compatible` + baseURL); `ORIGIN_CYCLE` + `originFilterMode` state; `renderTable` signature gains `originFilterMode` parameter; `renderHelp()` function added; all `renderTable` call sites updated
|
|
1378
|
-
|
|
1379
|
-
---
|
|
1380
|
-
|
|
1381
|
-
## 0.1.53
|
|
1382
|
-
|
|
1383
|
-
### Added
|
|
1384
|
-
|
|
1385
|
-
- **SambaNova Cloud** as a new provider ($5 free trial, 3 months). 10 coding models: Qwen3 235B, DeepSeek R1 0528, DeepSeek V3.1, DeepSeek V3 0324, Llama 4 Maverick, GPT OSS 120B, Qwen3 32B, R1 Distill 70B, Llama 3.3 70B, Llama 3.1 8B. OpenAI-compatible endpoint at `api.sambanova.ai`. Key prefix: `sn-`
|
|
1386
|
-
- **Cerebras**: Qwen3 235B (`qwen-3-235b-a22b`), GPT OSS 120B (`gpt-oss-120b`), Llama 3.1 8B (`llama3.1-8b`)
|
|
1387
|
-
- **Groq**: Llama 3.1 8B (`llama-3.1-8b-instant`, 14 400 req/day)
|
|
1388
|
-
- Full OpenCode + OpenCode Desktop integration for SambaNova (`@ai-sdk/openai-compatible` provider block injected automatically on model select)
|
|
1389
|
-
- SambaNova added to first-run API key wizard and Settings screen (`P` key)
|
|
1390
|
-
|
|
1391
|
-
---
|
|
1392
|
-
|
|
1393
|
-
## 0.1.52
|
|
1394
|
-
|
|
1395
|
-
### Fixed
|
|
1396
|
-
- **OpenCode model handoff** (PR #14 by @whit3rabbit): API keys from `~/.free-coding-models.json` were not passed to the OpenCode child process, causing silent fallback to the previous model. Also fixes Groq model ID mismatches (e.g. `kimi-k2-instruct` β `kimi-k2-instruct-0905`) via a new `OPENCODE_MODEL_MAP`
|
|
1397
|
-
- **OpenClaw nvidia provider missing models array** (PR #13 by @whit3rabbit): `startOpenClaw()` created the nvidia provider block without a `models` property, causing Zod schema validation to reject the config
|
|
1398
|
-
|
|
1399
|
-
### Improved
|
|
1400
|
-
- **Discord link in TUI footer**: the invite URL is now displayed in plain text on a separate line so it's visible and copiable on terminals that don't support clickable links
|
|
1401
|
-
|
|
1402
|
-
---
|
|
1403
|
-
|
|
1404
|
-
## 0.1.51
|
|
1405
|
-
|
|
1406
|
-
### Fixed
|
|
1407
|
-
- **Groq/Cerebras models selected for OpenCode had no provider block**: even with the correct `groq/model-id` prefix, OpenCode couldn't use the model because no `provider.groq` block existed in `opencode.json` β now automatically creates the provider block (Groq: built-in with `apiKey: {env:GROQ_API_KEY}`; Cerebras: `@ai-sdk/openai-compatible` with baseURL) and registers the model in `provider.<key>.models`
|
|
1408
|
-
|
|
1409
|
-
## 0.1.50
|
|
1410
|
-
|
|
1411
|
-
### Fixed
|
|
1412
|
-
- **Groq/Cerebras models selected for OpenCode were launched as NVIDIA models**: `providerKey` was not passed in `userSelected` on Enter, causing all models to be prefixed with `nvidia/` regardless of their actual provider β now correctly uses `groq/model-id` and `cerebras/model-id`
|
|
1413
|
-
- **`startOpenCode` and `startOpenCodeDesktop`**: both functions now handle all 3 providers; Groq and Cerebras use OpenCode's built-in provider support (no custom config block needed, just `GROQ_API_KEY`/`CEREBRAS_API_KEY` env vars); NVIDIA retains its existing custom provider config flow
|
|
1414
|
-
|
|
1415
|
-
---
|
|
1416
|
-
|
|
1417
|
-
## 0.1.49
|
|
1418
|
-
|
|
1419
|
-
### Fixed
|
|
1420
|
-
- **Cerebras / Groq without API key**: models were being pinged with the fallback NVIDIA key, causing misleading `β 401` β now pings without auth header; 401 is treated as `π NO KEY` (server reachable, latency shown dimly)
|
|
1421
|
-
- **Settings: entering an API key had no immediate effect**: after saving a key and closing Settings (Escape), models previously in `noauth` state are now immediately re-pinged with the new key
|
|
1422
|
-
|
|
1423
|
-
### Changed
|
|
1424
|
-
- Ping without API key is now always attempted β a 401 response confirms the server is UP and shows real latency; `π NO KEY` replaces the old `β 401` misleading error
|
|
1425
|
-
|
|
1426
|
-
---
|
|
1427
|
-
|
|
1428
|
-
## 0.1.48
|
|
1429
|
-
|
|
1430
|
-
### Fixed
|
|
1431
|
-
- **`--tier` CLI flag**: `parseArgs()` was never called in `main()`, so `--tier S` was silently ignored β now wired in and applied on TUI startup (thanks @whit3rabbit, PR #11)
|
|
1432
|
-
- **`--tier` value leaking into `apiKey`**: `parseArgs()` for-loop was capturing the tier value as the API key β fixed by skipping the value arg after `--tier`
|
|
1433
|
-
- **Ctrl+C not exiting**: sort key handler was intercepting all single-letter keypresses including ctrl-modified ones β added `!key.ctrl` guard so Ctrl+C reaches the exit handler (PR #11)
|
|
1434
|
-
|
|
1435
|
-
### Added
|
|
1436
|
-
- Test verifying `--tier` value does not leak into `apiKey` (63 tests total)
|
|
1437
|
-
|
|
1438
|
-
---
|
|
1439
|
-
|
|
1440
|
-
## 0.1.47
|
|
1441
|
-
|
|
1442
|
-
### Fixed
|
|
1443
|
-
- **`--tier` CLI flag**: `parseArgs()` was never called in `main()`, so `--tier S` was silently ignored β now wired in and applied on TUI startup (thanks @whit3rabbit, PR #11)
|
|
1444
|
-
- **`--tier` value leaking into `apiKey`**: `parseArgs()` for-loop was capturing the tier value as the API key β fixed by skipping the value arg after `--tier`
|
|
1445
|
-
- **Ctrl+C not exiting**: sort key handler was intercepting all single-letter keypresses including ctrl-modified ones β added `!key.ctrl` guard so Ctrl+C reaches the exit handler (PR #11)
|
|
1446
|
-
|
|
1447
|
-
### Added
|
|
1448
|
-
- Test verifying `--tier` value does not leak into `apiKey` (63 tests total)
|
|
1449
|
-
|
|
1450
|
-
---
|
|
1451
|
-
|
|
1452
|
-
## 0.1.46
|
|
1453
|
-
|
|
1454
|
-
### Fixed
|
|
1455
|
-
- **Discord notification**: Fixed ECONNRESET error β drain response body with `res.resume()` and call `process.exit(0)` immediately after success so the Node process closes cleanly
|
|
1456
|
-
|
|
1457
|
-
### Changed
|
|
1458
|
-
- **Discord link**: Updated invite URL to `https://discord.gg/5MbTnDC3Md` everywhere (README, TUI footer)
|
|
1459
|
-
|
|
1460
|
-
---
|
|
1461
|
-
|
|
1462
|
-
## 0.1.45
|
|
1463
|
-
|
|
1464
|
-
### Fixed
|
|
1465
|
-
- **Discord notification**: Fixed GitHub Actions workflow crash (secrets context not allowed in step `if` conditions β now handled in the Node script directly)
|
|
1466
|
-
|
|
1467
|
-
---
|
|
1468
|
-
|
|
1469
|
-
## 0.1.44
|
|
1470
|
-
|
|
1471
|
-
### Added
|
|
1472
|
-
- **Multi-provider support** β Groq (6 models) and Cerebras (3 models) added alongside NVIDIA NIM, for 53 total models
|
|
1473
|
-
- **Multi-provider first-run wizard** β Steps through all 3 providers (NIM, Groq, Cerebras) on first launch; each is optional, Enter to skip; requires at least one key
|
|
1474
|
-
- **Settings screen (`P` key)** β New TUI overlay to manage API keys per provider, toggle providers on/off, and test keys with a live ping
|
|
1475
|
-
- **`lib/config.js`** β New JSON config system (`~/.free-coding-models.json`) replacing the old plain-text file
|
|
1476
|
-
- Auto-migrates old `~/.free-coding-models` (plain nvidia key) on first run
|
|
1477
|
-
- Stores keys per provider + per-provider enabled/disabled state
|
|
1478
|
-
- `NVIDIA_API_KEY`, `GROQ_API_KEY`, `CEREBRAS_API_KEY` env vars override config
|
|
1479
|
-
- **Per-provider ping URLs** β `ping()` now accepts explicit endpoint URL; each provider has its own API endpoint in `sources.js`
|
|
1480
|
-
- **Provider name in Origin column** β Shows `NIM` / `Groq` / `Cerebras` instead of always `NIM`
|
|
1481
|
-
|
|
1482
|
-
### Changed
|
|
1483
|
-
- `MODELS` flat array now includes `providerKey` as 6th element
|
|
1484
|
-
- State init filters models from disabled providers; rebuilds on settings close
|
|
1485
|
-
- Config file path changed from `~/.free-coding-models` to `~/.free-coding-models.json` (migration is automatic)
|
|
1486
|
-
|
|
1487
|
-
---
|
|
1488
|
-
|
|
1489
|
-
## 0.1.41 β 2026-02-22
|
|
1490
|
-
|
|
1491
|
-
### Changed
|
|
1492
|
-
- **sources.js data audit** β verified and corrected SWE-bench scores, tiers, and context windows across all NIM models:
|
|
1493
|
-
- Devstral 2 123B: `S, 62.0%, 128k` β `S+, 72.2%, 256k` (official Mistral announcement)
|
|
1494
|
-
- Mistral Large 675B: ctx `128k` β `256k`
|
|
1495
|
-
- QwQ 32B: ctx `32k` β `131k`
|
|
1496
|
-
- Llama 4 Maverick: ctx `128k` β `1M` (NVIDIA NIM confirmed)
|
|
1497
|
-
- Llama 4 Scout: ctx `128k` β `10M` (NVIDIA NIM confirmed)
|
|
1498
|
-
- GPT OSS 20B: ctx `32k` β `128k`
|
|
1499
|
-
|
|
1500
|
-
---
|
|
1501
|
-
|
|
1502
|
-
## 0.1.38 β 2026-02-22
|
|
1503
|
-
|
|
1504
|
-
### Fixed
|
|
1505
|
-
- **Cross-platform OpenCode integration**: Fixed OpenCode CLI and Desktop installation issues on Windows and Linux
|
|
1506
|
-
- **Windows**: Fixed config path to use %APPDATA%\opencode\opencode.json with fallback to ~/.config
|
|
1507
|
-
- **Linux**: Added support for snap, flatpak, and xdg-open to launch OpenCode Desktop
|
|
1508
|
-
- **All platforms**: Properly detects OS and uses correct commands and paths
|
|
1509
|
-
- **OpenCode Desktop**: Platform-specific launch commands (macOS: `open -a`, Windows: `start`, Linux: multiple methods)
|
|
1510
|
-
|
|
1511
|
-
---
|
|
1512
|
-
|
|
1513
|
-
## 0.1.37 β 2026-02-22
|
|
1514
|
-
|
|
1515
|
-
### Added
|
|
1516
|
-
- **Auto-update with sudo fallback**: When npm update fails due to permissions, automatically retries with sudo to complete the update
|
|
1517
|
-
|
|
1518
|
-
---
|
|
1519
|
-
|
|
1520
|
-
## 0.1.36 β 2026-02-22
|
|
1521
|
-
|
|
1522
|
-
### Added
|
|
1523
|
-
- **SWE-bench Verified column**: Shows real SWE-bench Verified scores for all 44 models from official benchmarks
|
|
1524
|
-
- **Color-coded keyboard shortcuts**: First letter of each column header colored in yellow to indicate sorting key
|
|
1525
|
-
- **Heart and Coffee in footer**: "Made with π & β by vava-nessa"
|
|
1526
|
-
|
|
1527
|
-
### Changed
|
|
1528
|
-
- **Column organization**: Reordered columns for better logical flow: Rank / Tier / SWE% / Model / Origin / Latest Ping / Avg Ping / Health / Verdict / Up%
|
|
1529
|
-
- **Health column**: Renamed from "Status" to "Health" with H key for sorting
|
|
1530
|
-
- **SWE-bench sorting**: S key now sorts by SWE-bench score
|
|
1531
|
-
- **Latest ping shortcut**: L key (instead of P) for sorting by latest ping
|
|
1532
|
-
- **Source name**: Simplified "NVIDIA NIM" to "NIM"
|
|
1533
|
-
|
|
1534
|
-
### Fixed
|
|
1535
|
-
- **Column header alignment**: Fixed misalignment caused by ANSI color codes in headers
|
|
1536
|
-
- **Discord link**: Updated to permanent invite link https://discord.gg/WKA3TwYVuZ
|
|
1537
|
-
|
|
1538
|
-
---
|
|
1539
|
-
|
|
1540
|
-
## 0.1.35 β 2026-02-22
|
|
1541
|
-
|
|
1542
|
-
### Changed
|
|
1543
|
-
- **Column reorganization**: Reordered columns for better logical flow: Rank / Tier / SWE% / Model / Origin / Latest Ping / Avg Ping / Health / Verdict / Up%
|
|
1544
|
-
|
|
1545
|
-
---
|
|
1546
|
-
|
|
1547
|
-
## 0.1.34 β 2026-02-22
|
|
1548
|
-
|
|
1549
|
-
### Changed
|
|
1550
|
-
- **Condition renamed to Health**: Renamed "Condition" column to "Health" for better clarity
|
|
1551
|
-
- **Keyboard shortcut update**: H key now sorts by Health (instead of C for Condition)
|
|
1552
|
-
|
|
1553
|
-
---
|
|
1554
|
-
|
|
1555
|
-
## 0.1.33 β 2026-02-22
|
|
1556
|
-
|
|
1557
|
-
### Fixed
|
|
1558
|
-
- **Column header alignment**: Fixed column headers misalignment issue caused by ANSI color codes interfering with text padding
|
|
1559
|
-
|
|
1560
|
-
---
|
|
1561
|
-
|
|
1562
|
-
## 0.1.32 β 2026-02-22
|
|
1563
|
-
|
|
1564
|
-
### Changed
|
|
1565
|
-
- **Column header improvements**: Fixed column alignment issues for better visual appearance
|
|
1566
|
-
- **Status renamed to Condition**: "Status" column renamed to "Condition" for clarity
|
|
1567
|
-
- **Keyboard shortcut updates**: S key now sorts by SWE-bench score, C key sorts by Condition
|
|
1568
|
-
- **Footer Discord text update**: Changed "Join our Discord!" to "Join Free-Coding-Models Discord!"
|
|
1569
|
-
|
|
1570
|
-
---
|
|
1571
|
-
|
|
1572
|
-
## 0.1.31 β 2026-02-22
|
|
1573
|
-
|
|
1574
|
-
### Added
|
|
1575
|
-
- **SWE-bench column**: Added new SWE-bench Verified score column showing coding performance for each model
|
|
1576
|
-
- **Color-coded column headers**: First letter of each column header is now colored (yellow) to indicate keyboard shortcut for sorting
|
|
1577
|
-
- **Keyboard shortcut improvements**: Changed P to L for latest ping sorting, added E for SWE-bench sorting
|
|
1578
|
-
|
|
1579
|
-
### Changed
|
|
1580
|
-
- **Source name simplification**: Renamed "NVIDIA NIM" to "NIM" throughout the codebase
|
|
1581
|
-
- **Enhanced footer Discord link**: Discord link now displays in bright cyan color with "(link fixed)" indicator
|
|
1582
|
-
|
|
1583
|
-
---
|
|
1584
|
-
|
|
1585
|
-
## 0.1.29 β 2026-02-22
|
|
1586
|
-
|
|
1587
|
-
### Fixed
|
|
1588
|
-
- **Discord link correction**: Updated all Discord invite URLs to use permanent link https://discord.gg/WKA3TwYVuZ
|
|
1589
|
-
|
|
1590
|
-
---
|
|
1591
|
-
|
|
1592
|
-
## 0.1.28 β 2026-02-22
|
|
1593
|
-
|
|
1594
|
-
### Added
|
|
1595
|
-
- **Footer emojis**: Added π¬ emoji before Discord link and β emoji before GitHub link for better visual appeal
|
|
1596
|
-
|
|
1597
|
-
---
|
|
1598
|
-
|
|
1599
|
-
## 0.1.27 β 2026-02-22
|
|
1600
|
-
|
|
1601
|
-
### Changed
|
|
1602
|
-
- **Footer redesign**: All links now on one line with clickable text: "Join our Discord!" and "Read the docs on GitHub"
|
|
1603
|
-
- **Improved UX**: Links use same clickable format as author name for consistent user experience
|
|
1604
|
-
|
|
1605
|
-
---
|
|
1606
|
-
|
|
1607
|
-
## 0.1.26 β 2026-02-22
|
|
1608
|
-
|
|
1609
|
-
### Changed
|
|
1610
|
-
- **Footer improvements**: Replaced "Repository GitHub" with "GitHub", "love" with π emoji, and simplified Discord text
|
|
1611
|
-
- **README enhancement**: Added GitHub link section below Discord invite
|
|
1612
|
-
|
|
1613
|
-
---
|
|
1614
|
-
|
|
1615
|
-
## 0.1.25 β 2026-02-22
|
|
1616
|
-
|
|
1617
|
-
### Added
|
|
1618
|
-
- **Discord community link**: Added Discord invite to README and TUI footer
|
|
1619
|
-
- **Enhanced footer layout**: Improved footer with multi-line layout showing GitHub repo and Discord links
|
|
1620
|
-
- **Clickable author name**: "vava-nessa" is now clickable in terminal (opens GitHub profile)
|
|
1621
|
-
- **Release notes automation**: GitHub Actions now uses CHANGELOG.md content for release notes instead of auto-generated notes
|
|
1622
|
-
|
|
1623
|
-
### Changed
|
|
1624
|
-
- **Tier filtering system**: Replaced E/D keys with T key that cycles through tier filters: all β S+/S β A+/A/A- β B+/B β C β all
|
|
1625
|
-
- **Footer text**: "Made with love by vava-nessa" with clickable links
|
|
1626
|
-
|
|
1627
|
-
### Fixed
|
|
1628
|
-
- **Release workflow**: GitHub Releases now display proper changelog content instead of generic commit summaries
|
|
1629
|
-
|
|
1630
|
-
---
|
|
1631
|
-
|
|
1632
|
-
## 0.1.24 β 2026-02-22
|
|
1633
|
-
|
|
1634
|
-
### Fixed
|
|
1635
|
-
- **Viewport scrolling for TUI overflow**: Fixed Ghostty and narrow terminal issues where content would scroll past alternate screen
|
|
1636
|
-
- **Terminal wrapping**: Wide rows now clip at terminal edge instead of wrapping to next line
|
|
1637
|
-
- **Scrollback pollution**: Replaced `\x1b[2J` with `\x1b[H` + per-line `\x1b[K` to avoid Ghostty scrollback issues
|
|
1638
|
-
- **Viewport calculation**: Added smart scrolling with "N more above/below" indicators when models exceed screen height
|
|
1639
|
-
- **Scroll offset adjustment**: Cursor stays within visible window during navigation and terminal resize
|
|
1640
|
-
|
|
1641
|
-
### Changed
|
|
1642
|
-
- **DECAWM off**: Disabled auto-wrap in alternate screen to prevent row height doubling
|
|
1643
|
-
- **Terminal resize handling**: Viewport automatically adjusts when terminal size changes
|
|
1644
|
-
|
|
1645
|
-
---
|
|
1646
|
-
|
|
1647
|
-
## 0.1.23 β 2026-02-22
|
|
1648
|
-
|
|
1649
|
-
### Refactored
|
|
1650
|
-
- **Removed startup menu**: No more blocking mode selection menu at startup
|
|
1651
|
-
- **Default to OpenCode CLI**: App starts directly in CLI mode when no flags given
|
|
1652
|
-
- **Mode toggle in TUI**: Added Z key to cycle between CLI β Desktop β OpenClaw β CLI
|
|
1653
|
-
- **GitHub changelogs**: "Read Changelogs" option now opens GitHub URL instead of local file
|
|
1654
|
-
- **Auto-update by default**: When new version available without flags, auto-updates and relaunches
|
|
1655
|
-
- **Centered update menu**: Update notification appears only when needed, with clean centered layout
|
|
1656
|
-
|
|
1657
|
-
### Changed
|
|
1658
|
-
- **Header display**: Shows `[π» CLI] (Z to toggle)` with mode toggle hint
|
|
1659
|
-
- **Footer instructions**: Added "M Mode" to key bindings
|
|
1660
|
-
- **Update workflow**: Flags (`--opencode` etc.) still show update menu for compatibility
|
|
1661
|
-
|
|
1662
|
-
---
|
|
1663
|
-
|
|
1664
|
-
## 0.1.22 β 2026-02-22
|
|
1665
|
-
|
|
1666
|
-
### Changed
|
|
1667
|
-
- **Local changelogs**: "Read Changelogs" menu option now opens local `CHANGELOG.md` file instead of GitHub releases
|
|
1668
|
-
|
|
1669
|
-
---
|
|
1670
|
-
|
|
1671
|
-
## 0.1.21 β 2026-02-22
|
|
1672
|
-
|
|
1673
|
-
### Refactored
|
|
1674
|
-
- **Simplified tier filtering architecture**: Replaced complex object recreation with simple `hidden` flag system
|
|
1675
|
-
- **Flags as shortcuts**: `--tier S` now just sets initial state instead of blocking dynamic filtering
|
|
1676
|
-
- **Dynamic filtering preserved**: E/D keys work seamlessly even when starting with `--tier` flag
|
|
1677
|
-
|
|
1678
|
-
### Fixed
|
|
1679
|
-
- **Ping loop bug**: Fixed issue where filtered models weren't pinged due to using wrong results array
|
|
1680
|
-
- **Initial ping bug**: Fixed issue where initial ping used wrong results array
|
|
1681
|
-
|
|
1682
|
-
---
|
|
1683
|
-
|
|
1684
|
-
## 0.1.20 β 2026-02-22
|
|
1685
|
-
|
|
1686
|
-
### Added
|
|
1687
|
-
- **Dynamic tier filtering**: Use E/D keys to filter models by tier during runtime
|
|
1688
|
-
- Tier filter badge shown in header (e.g., `[Tier S]`)
|
|
1689
|
-
- E key elevates filter (show fewer, higher-tier models)
|
|
1690
|
-
- D key descends filter (show more, lower-tier models)
|
|
1691
|
-
- Preserves ping history when changing filters
|
|
1692
|
-
|
|
1693
|
-
### Fixed
|
|
1694
|
-
- **Error 401 with --tier flag**: Fixed issue where using `--tier` alone would show selection menu instead of proceeding directly to TUI
|
|
1695
|
-
- Improved flag combination handling for better user experience
|
|
1696
|
-
|
|
1697
|
-
---
|
|
1698
|
-
|
|
1699
|
-
## 0.1.16
|
|
1700
|
-
|
|
1701
|
-
### Added
|
|
1702
|
-
- OpenCode Desktop support: new `--opencode-desktop` flag and menu option to set model & open the Desktop app
|
|
1703
|
-
- "Read Changelogs" menu option when an update is available (opens GitHub releases page)
|
|
1704
|
-
- `startOpenCodeDesktop()` function β same config logic as CLI, launches via `open -a OpenCode`
|
|
1705
|
-
|
|
1706
|
-
### Changed
|
|
1707
|
-
- Startup menu: "OpenCode" renamed to "OpenCode CLI", new "OpenCode Desktop" entry added
|
|
1708
|
-
- TUI mode badge: shows `[π» CLI]` or `[π₯ Desktop]` or `[π¦ OpenClaw]`
|
|
1709
|
-
- Footer action hint adapts to desktop mode (`EnterβOpenDesktop`)
|
|
1710
|
-
|
|
1711
|
-
---
|
|
1712
|
-
|
|
1713
|
-
## 0.1.12 β 2026-02-22
|
|
1714
|
-
|
|
1715
|
-
### Added
|
|
1716
|
-
- Unit test suite: 59 tests across 11 suites using `node:test` (zero dependencies)
|
|
1717
|
-
- Tests cover: sources data integrity, core logic (getAvg, getVerdict, getUptime, filterByTier, sortResults, findBestModel), CLI arg parsing, package.json sanity
|
|
1718
|
-
- `lib/utils.js`: extracted pure logic functions from the monolithic CLI for testability
|
|
1719
|
-
- `pnpm test` script in package.json
|
|
1720
|
-
|
|
1721
|
-
### Fixed
|
|
1722
|
-
- GitHub Actions release workflow: removed broken `npm version patch` loop, added version detection via git tags
|
|
1723
|
-
- GitHub Actions now creates a GitHub Release with auto-generated notes for each new version
|
|
1724
|
-
|
|
1725
|
-
### Changed
|
|
1726
|
-
- AGENTS.md updated with test-first workflow: agents must run `pnpm test` before `pnpm start`
|
|
1727
|
-
|
|
1728
|
-
---
|
|
1729
|
-
|
|
1730
|
-
## 0.1.9 β 2026-02-22
|
|
1731
|
-
|
|
1732
|
-
### Fixed
|
|
1733
|
-
- **OpenCode spawn ENOENT**: Use `shell: true` when spawning `opencode` so the command resolves correctly on Windows (`.cmd`/`.bat` wrappers). Added friendly error message when `opencode` is not installed.
|
|
1734
|
-
### Added
|
|
1735
|
-
- Update available warning: red message shown above selection menu when a new npm version exists
|
|
1736
|
-
- "Update now" menu choice in startup mode selection to install the latest version
|
|
1737
|
-
|
|
1738
|
-
---
|
|
1739
|
-
|
|
1740
|
-
## 0.1.4 β 2026-02-22
|
|
1741
|
-
|
|
1742
|
-
### Fixed
|
|
1743
|
-
- **OpenClaw config structure**: `providers` was incorrectly written at the config root. Moved to `models.providers` per official OpenClaw docs (`docs.openclaw.ai/providers/nvidia`).
|
|
1744
|
-
- **OpenClaw API key storage**: Removed `apiKey` from provider block (not a recognized field). API key is now stored under `env.NVIDIA_API_KEY` in the config.
|
|
1745
|
-
- **OpenClaw models array**: Removed the `models: []` array from the provider block (OpenCode format, not valid in OpenClaw).
|
|
1746
|
-
- **`openclaw restart` CLI command doesn't exist**: Replaced hint with correct commands β `openclaw models set` / `openclaw configure`. Gateway auto-reloads on config file changes.
|
|
1747
|
-
- **OpenClaw model not allowed**: Model must be explicitly listed in `agents.defaults.models` allowlist β without this, OpenClaw rejects the model with "not allowed" even when set as primary.
|
|
1748
|
-
- **README**: Updated OpenClaw integration section with correct JSON structure and correct CLI commands.
|
|
1749
|
-
|
|
1750
|
-
---
|
|
1751
|
-
|
|
1752
|
-
## 0.1.3 β 2026-02-22
|
|
1753
|
-
|
|
1754
|
-
### Added
|
|
1755
|
-
- OpenClaw integration: set selected NIM model as default provider in `~/.openclaw/openclaw.json`
|
|
1756
|
-
- Startup mode menu (no flags needed): interactive choice between OpenCode and OpenClaw at launch
|
|
1757
|
-
- `--openclaw` flag: skip menu, go straight to OpenClaw mode
|
|
1758
|
-
- `--tier` flag: filter models by tier letter (S, A, B, C)
|
|
1759
|
-
- Tier badges shown next to model names in the TUI
|
|
1760
|
-
- 44 models listed, ranked by Aider Polyglot benchmark
|
|
1761
|
-
|
|
1762
|
-
### Fixed
|
|
1763
|
-
- CI permissions for git push in release workflow
|
|
1764
|
-
|
|
1765
|
-
---
|
|
1766
|
-
|
|
1767
|
-
## 0.1.2 β 2026-02-22
|
|
1768
|
-
|
|
1769
|
-
### Added
|
|
1770
|
-
- `--fiable` flag: analyze 10 seconds, output the single most reliable model as `provider/model_id`
|
|
1771
|
-
- `--best` flag: show only top-tier models (A+, S, S+)
|
|
1772
|
-
- `--opencode` flag: explicit OpenCode mode
|
|
1773
|
-
- Refactored CLI entry point, cleaner flag handling
|
|
1774
|
-
- Updated release workflow
|
|
1775
|
-
|
|
1776
|
-
---
|
|
1777
|
-
|
|
1778
|
-
## 0.1.1 β 2026-02-21
|
|
1779
|
-
|
|
1780
|
-
### Added
|
|
1781
|
-
- Continuous monitoring mode: re-pings all models every 2 seconds forever
|
|
1782
|
-
- Rolling averages calculated from all successful pings since start
|
|
1783
|
-
- Uptime percentage tracking per model
|
|
1784
|
-
- Dynamic ping interval: W key to speed up, X key to slow down
|
|
1785
|
-
- Sortable columns: R/T/O/M/P/A/S/V/U keys
|
|
1786
|
-
- Verdict column with quality rating per model
|
|
1787
|
-
- Interactive model selection with arrow keys + Enter
|
|
1788
|
-
- OpenCode integration: auto-detects NIM setup, sets model as default, launches OpenCode
|
|
1789
|
-
- `sources.js`: extensible architecture for adding new providers
|
|
1790
|
-
- Demo GIF added to README
|
|
1791
|
-
- Renamed CLI to `free-coding-models`
|
|
1792
|
-
|
|
1793
|
-
---
|
|
1794
|
-
|
|
1795
|
-
## 0.1.0 β 2026-02-21
|
|
4
|
+
## [0.3.41] - 2026-04-09
|
|
1796
5
|
|
|
1797
6
|
### Added
|
|
1798
|
-
-
|
|
1799
|
-
-
|
|
1800
|
-
-
|
|
1801
|
-
-
|
|
1802
|
-
- Top 3 fastest models highlighted with medals π₯π₯π₯
|
|
1803
|
-
- ASCII banner and clean UI
|
|
1804
|
-
- OpenCode installer and interactive model selector
|
|
1805
|
-
- npm publish workflow via GitHub Actions
|
|
7
|
+
- Added support for Xcode Intelligence (Xcode 26.3+) via the `--xcode` flag and manual configuration flow. The tool provides clear setup instructions and launches Xcode directly.
|
|
8
|
+
- The `xcode` launcher mode has been registered in the tool metadata, enabling Xcode selection through the command palette, `Z` cycle, and CLI arguments.
|
|
9
|
+
- Users can now use Xcode Intelligence with any of the 230+ supported OpenAI-compatible API endpoints.
|
|
10
|
+
- Compatibility logic ensures Xcode mode accurately highlights supported models (compatible with all standard models).
|