free-coding-models 0.3.54 → 0.3.56
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 +47 -49
- package/README.md +236 -160
- package/bin/free-coding-models.js +46 -0
- package/package.json +2 -2
- package/sources.js +133 -309
- package/src/analysis.js +23 -10
- package/src/app.js +113 -7
- package/src/cache.js +1 -1
- package/src/cli-help.js +9 -0
- package/src/command-palette.js +16 -12
- package/src/config.js +199 -32
- package/src/endpoint-installer.js +45 -1
- package/src/favorites.js +22 -0
- package/src/graphify-out/cache/089db1c1def873cf6d112f1590da4490e61e691aff0db41e006aa2fb15ba0656.json +1 -0
- package/src/graphify-out/cache/0b510b53cf1a1393fb52b1fc3bbbf88b63938e961ec5b82119a2e9715fee8bd7.json +1 -0
- package/src/graphify-out/cache/0ec9a95a326bde58e0316889018b278062d06d494d0f31ba177c9de71e5fed2d.json +1 -0
- package/src/graphify-out/cache/1548663a24a68dce740ebab1bd1d3091048c9604e9d067a1650a42a6d82541d4.json +1 -0
- package/src/graphify-out/cache/1783af63cb6d0dfb4d469009f71ac83a74ba0b33d48186ff2c6e63f9429e900a.json +1 -0
- package/src/graphify-out/cache/1e109f5eb5dc4fd285871c3613e32b6b14a8c225f4080ee34b51c7e1a1764571.json +1 -0
- package/src/graphify-out/cache/1eb24dbeb69b46c8bc1caf925df2f2a964af0f33aea143adf8ddf88e017db6ca.json +1 -0
- package/src/graphify-out/cache/21e1bcfed11685e8347243f9d8516072dda183266a4bfe22c52fb31753a446c8.json +1 -0
- package/src/graphify-out/cache/2327473478b9c4b1940bf7ef66c9ee960b3cba8d5302e56b625df8274246e0b4.json +1 -0
- package/src/graphify-out/cache/25955b81fd25454c8fa90fb71a47db8d1215cf621beb8ff3cbd580aaf011b4f3.json +1 -0
- package/src/graphify-out/cache/2739677f19c702f88f3de0a0bac475066adbda98709907ad3de967aef689f86d.json +1 -0
- package/src/graphify-out/cache/2bba03422f6b3ee7f5b5d29cc90314a064d259e5822a176657bda3e04505cf00.json +1 -0
- package/src/graphify-out/cache/2ddf1d2c6d10147b0402446bc71a7988187b79b6210dd7e7250be8c555b9ff35.json +1 -0
- package/src/graphify-out/cache/2ee07457a5767c95a57f8e9eb95b28f800044f35666e0715e9d88ad1103a092e.json +1 -0
- package/src/graphify-out/cache/2fe9f75dc2951c417f2c8dd22749092cf550dc67599f1c8d1866900dc6e9154e.json +1 -0
- package/src/graphify-out/cache/41c4b7c27e7fc3e2948d3a4bf95a72de2ed9a6f0463994babdce8ed2cc84598c.json +1 -0
- package/src/graphify-out/cache/5028defd54b7fbd3c7e444973e493de036e097e9b1d2a7cae7f19b88d68aacde.json +1 -0
- package/src/graphify-out/cache/5b133aba3fb16410c5b1fdbd1730039fc7fa1ac93abd99d7be08f60da70fc8d4.json +1 -0
- package/src/graphify-out/cache/74252e5b0978d85ab3421a3de1a9384aa282ffd2be2cfe7db2530139089f4275.json +1 -0
- package/src/graphify-out/cache/7695ebeea056095edd14332963cc43354ef3a097caf46f1e28d0f01369642901.json +1 -0
- package/src/graphify-out/cache/777aa7085c395a935c6556bbde182cd871edb61f3a685ed8068ec0c8f6fb0075.json +1 -0
- package/src/graphify-out/cache/82a723881980e82273c113def8315533d7da28827e300413d9ad30f27b7407df.json +1 -0
- package/src/graphify-out/cache/86b87c9603e6cd188f42c7eed3b86c291d48a781c223a707e74f3e7ed0c02a21.json +1 -0
- package/src/graphify-out/cache/890fead9a78cadaed560a2d2453916121fa605c3e43a334910ac4bc951a9ef6d.json +1 -0
- package/src/graphify-out/cache/89d3ea66f52783caa775ef9a30923d7d6225e1d8ae9e962f4741b8c7785dab1e.json +1 -0
- package/src/graphify-out/cache/8cc82cd9edce41f0e1c092f14a94fd52bf847addf3237b616dc5a9e505bd05bd.json +1 -0
- package/src/graphify-out/cache/93ba2e25e3ff7ad525f397902345fbd375df7315de7b402e20cc803c14eccde8.json +1 -0
- package/src/graphify-out/cache/99beed29580b9c7bfecfee794cb3d8e535fcf0eb3b92113108f88bdd0a8e79b3.json +1 -0
- package/src/graphify-out/cache/aeeb931fa477c65ce2e51d8149957350fa54225c613222bbbe8448998d1afd3d.json +1 -0
- package/src/graphify-out/cache/baf91bef5b5ecb2a476433b6cc0c48c563c54ee2d07fc3c192e543685e3e7222.json +1 -0
- package/src/graphify-out/cache/bd98b94ac4e9b92b6336d47b26e0366b51a4eaf0711d722f05f98dfae23ab42b.json +1 -0
- package/src/graphify-out/cache/bfcb51e9328e9cbfbee4f6fee0f56635d7b03488addc9f6c4e4b190b70a73362.json +1 -0
- package/src/graphify-out/cache/c0d3dabeb093aa758c49eadf41b87ecc96a16c1449c2670aaf48cbfc891d8da6.json +1 -0
- package/src/graphify-out/cache/c20d6630236f473c1406068c3ae205853e649b216495c93dfec055dd222c55cf.json +1 -0
- package/src/graphify-out/cache/c22b9122816bebce0a2f79af41a986559d01e00163dbcd579c5755621b4cb483.json +1 -0
- package/src/graphify-out/cache/ca556ec14453ddb8f9e0c5a832dac90d77111b9bad5f8c2d80d272e2e7a06371.json +1 -0
- package/src/graphify-out/cache/d6dbc9135dfa35a756b3b09b06700e4bc229fdccba11bb963f2ba44028e0bbae.json +1 -0
- package/src/graphify-out/cache/e1cf71276f1779d0fa075f79bd7c8a9fd0b8eef6932ac043137451b7c7fa7cbe.json +1 -0
- package/src/graphify-out/cache/e4b3be14494467df2d2ed389bc4f18f099021cb5bc355b901fa88387b2d8b8a2.json +1 -0
- package/src/graphify-out/cache/eaea0dded097f6f9553b654220046c6ec0c9be592a5973d906564ee60af34e0d.json +1 -0
- package/src/graphify-out/cache/ef07d0cd2675d1f79d2a2fdbf3bc3319687638751e9ce89b0d0d97ed1cd9f7e1.json +1 -0
- package/src/graphify-out/cache/f81272d6eb8aaff9e96d5a1d9f06777db70ac3652a646b951ded51f79871d733.json +1 -0
- package/src/graphify-out/cache/f9619dd92186f75a6dbda937e0c606647153918524cdb5763f956e6ec2a9e386.json +1 -0
- package/src/graphify-out/cache/fd88b1b2ff4bfcae08559d9c2aaeeb9a3f1e2f5cd8928762c311196956c170a5.json +1 -0
- package/src/key-handler.js +316 -13
- package/src/kilo.js +20 -1
- package/src/opencode.js +24 -3
- package/src/overlays.js +206 -5
- package/src/provider-metadata.js +26 -17
- package/src/quota-capabilities.js +6 -10
- package/src/render-table.js +37 -4
- package/src/router-daemon.js +1986 -0
- package/src/router-dashboard.js +893 -0
- package/src/sync-set.js +479 -0
- package/src/theme.js +4 -0
- package/src/tool-launchers.js +1 -0
- package/src/tool-metadata.js +6 -2
- package/src/utils.js +30 -6
- package/web/dist/assets/{index-D2ban2S-.js → index-DNRCaWPi.js} +2 -2
- package/web/dist/index.html +1 -1
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* @description Live terminal availability checker for coding LLM models with OpenCode & OpenClaw integration.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
// 📖 --dev mode: must set FCM_DEV before any module imports resolve daemon paths
|
|
8
|
+
if (process.argv.includes('--dev')) {
|
|
9
|
+
process.env.FCM_DEV = '1'
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
import chalk from 'chalk';
|
|
8
13
|
import { parseArgs, TIER_LETTER_MAP } from '../src/utils.js';
|
|
9
14
|
import { loadConfig } from '../src/config.js';
|
|
@@ -15,6 +20,10 @@ import { runApp } from '../src/app.js';
|
|
|
15
20
|
|
|
16
21
|
// Global error handlers to ensure terminal is restored if something crashes catastrophically
|
|
17
22
|
process.on('uncaughtException', (err) => {
|
|
23
|
+
if (process.argv.some(arg => arg === '--daemon')) {
|
|
24
|
+
console.error(err);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
18
27
|
process.stdout.write(ALT_LEAVE);
|
|
19
28
|
console.error(chalk.red('\n[Fatal Error] An unhandled exception occurred.'));
|
|
20
29
|
console.error(err);
|
|
@@ -23,6 +32,10 @@ process.on('uncaughtException', (err) => {
|
|
|
23
32
|
});
|
|
24
33
|
|
|
25
34
|
process.on('unhandledRejection', (reason, promise) => {
|
|
35
|
+
if (process.argv.some(arg => arg === '--daemon')) {
|
|
36
|
+
console.error(reason);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
26
39
|
process.stdout.write(ALT_LEAVE);
|
|
27
40
|
console.error(chalk.red('\n[Fatal Error] An unhandled promise rejection occurred.'));
|
|
28
41
|
console.error(reason);
|
|
@@ -40,6 +53,39 @@ async function main() {
|
|
|
40
53
|
process.exit(0);
|
|
41
54
|
}
|
|
42
55
|
|
|
56
|
+
// 📖 Router daemon lifecycle flags run before the TUI so automation and
|
|
57
|
+
// 📖 editor integrations can manage the local OpenAI-compatible endpoint.
|
|
58
|
+
if (cliArgs.daemonMode || cliArgs.daemonBackgroundMode || cliArgs.daemonStopMode || cliArgs.daemonStatusMode) {
|
|
59
|
+
const {
|
|
60
|
+
getRouterDaemonStatus,
|
|
61
|
+
runRouterDaemon,
|
|
62
|
+
startRouterDaemonBackground,
|
|
63
|
+
stopRouterDaemon,
|
|
64
|
+
} = await import('../src/router-daemon.js');
|
|
65
|
+
|
|
66
|
+
if (cliArgs.daemonMode) {
|
|
67
|
+
await runRouterDaemon();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const result = cliArgs.daemonBackgroundMode
|
|
72
|
+
? await startRouterDaemonBackground()
|
|
73
|
+
: cliArgs.daemonStopMode
|
|
74
|
+
? await stopRouterDaemon()
|
|
75
|
+
: await getRouterDaemonStatus();
|
|
76
|
+
|
|
77
|
+
console.log(JSON.stringify(result, null, 2));
|
|
78
|
+
process.exit(result.ok ? 0 : 1);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 📖 --sync-set [name] — auto-discover, probe, and populate a router set
|
|
82
|
+
if (cliArgs.syncSetMode) {
|
|
83
|
+
const { syncSet } = await import('../src/sync-set.js');
|
|
84
|
+
const result = await syncSet({ name: cliArgs.syncSetName || 'auto' });
|
|
85
|
+
console.log(JSON.stringify(result, null, 2));
|
|
86
|
+
process.exit(result.ok ? 0 : 1);
|
|
87
|
+
}
|
|
88
|
+
|
|
43
89
|
// Validate --tier early, before entering alternate screen
|
|
44
90
|
if (cliArgs.tierFilter && !TIER_LETTER_MAP[cliArgs.tierFilter]) {
|
|
45
91
|
console.error(chalk.red(` Unknown tier "${cliArgs.tierFilter}". Valid tiers: S, A, B, C`));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "free-coding-models",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.56",
|
|
4
4
|
"description": "Find the fastest coding LLM models in seconds — ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nvidia",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"chalk": "^5.6.2"
|
|
64
64
|
},
|
|
65
|
-
"packageManager": "pnpm@10.
|
|
65
|
+
"packageManager": "pnpm@10.33.2",
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=18.0.0"
|
|
68
68
|
},
|