Added
- [fork] 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). - [fork] Stale config cleanup on OpenCode exit -- The
spawnOpenCodeexit handler now removes the ZAI provider block fromopencode.jsonso leftover config does not cause "model not valid" errors on the next manual OpenCode launch.
Fixed
- [fork] OpenCode config path on Windows -- OpenCode uses
xdg-basedirwhich resolves to%USERPROFILE%\.configon 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.jsonon all platforms. - [fork]
apiKeyfield for ZAI provider -- Changed from{env:ZAI_API_KEY}template string to the actual resolved key so OpenCode's@ai-sdk/openai-compatibleprovider can authenticate immediately.
Changed
- [fork] 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).
- [fork] Suppress MaxListeners warning -- Set
NODE_NO_WARNINGS=1in the OpenCode child process environment to suppress Node.js EventEmitter warnings. - [fork] ZAI models synced to 5 -- Updated
sources.jsto 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%). - [fork] 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.
- 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.
- 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. --recommendCLI flag — auto-opens the Smart Recommend overlay on startup.--profile <name>CLI flag — loads a saved profile at startup; errors if profile doesn't exist.- Scoring engine (
lib/utils.js) —TASK_TYPES,PRIORITY_TYPES,CONTEXT_BUDGETS,parseCtxToK(),parseSweToNum(),scoreModelForTask(),getTopRecommendations()for the recommendation algorithm. - Profile management (
lib/config.js) —saveAsProfile(),loadProfile(),listProfiles(),deleteProfile(),getActiveProfileName(),setActiveProfile(). - 43 new unit tests (131 total) covering scoring constants,
scoreModelForTask,getTopRecommendations,--profile/--recommendarg parsing, and config profile CRUD.
Changed
- Help overlay (K) — removed the Filters section; moved
T(Cycle tier) andN(Cycle origin) shortcuts into their respective column description rows. AddedQ(Smart Recommend) andShift+P(Cycle profile) shortcuts. Added--recommendand--profileto the CLI flags section. - Sort/pin order —
sortResultsWithPinnedFavorites()now pins recommended+favorite models first, then recommended-only, then favorite-only, then normal sorted models. - Animation loop priority — Settings > Recommend > Help > Table.
Fixed
--profilearg parsing — the profile value (e.g.workin--profile work) was incorrectly captured asapiKey; fixed withskipIndicesSet inparseArgs().recommendScoreundefined —sortResultsWithPinnedFavorites()referencedrecommendScorebut it was never set on result objects; now set duringstartRecommendAnalysis().