free-coding-models 0.3.55 → 0.3.57
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 +55 -56
- package/README.md +214 -160
- package/bin/free-coding-models.js +46 -0
- package/package.json +2 -2
- package/sources.js +134 -310
- package/src/analysis.js +23 -10
- package/src/app.js +66 -27
- package/src/cache.js +1 -1
- package/src/cli-help.js +9 -0
- package/src/command-palette.js +15 -13
- package/src/config.js +201 -35
- package/src/constants.js +4 -4
- 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 +322 -114
- package/src/kilo.js +20 -1
- package/src/opencode.js +23 -2
- package/src/overlays.js +199 -98
- package/src/provider-metadata.js +26 -17
- package/src/quota-capabilities.js +6 -10
- package/src/render-helpers.js +38 -8
- package/src/render-table.js +119 -248
- package/src/router-daemon.js +1986 -0
- package/src/router-dashboard.js +902 -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-C03JjCgA.js → index-DKHCzbK1.js} +2 -2
- package/web/dist/index.html +1 -1
package/src/config.js
CHANGED
|
@@ -17,18 +17,12 @@
|
|
|
17
17
|
* "cerebras": "csk_xxx",
|
|
18
18
|
* "sambanova": "sn-xxx",
|
|
19
19
|
* "openrouter": "sk-or-xxx",
|
|
20
|
-
* "
|
|
21
|
-
* "
|
|
22
|
-
* "
|
|
23
|
-
* "fireworks": "fw_xxx",
|
|
24
|
-
* "codestral": "csk-xxx",
|
|
25
|
-
* "hyperbolic": "eyJ...",
|
|
20
|
+
* "github-models": "github_pat_xxx",
|
|
21
|
+
* "mistral": "mistral-xxx",
|
|
22
|
+
* "codestral": "mistral-xxx",
|
|
26
23
|
* "scaleway": "scw-xxx",
|
|
27
24
|
* "googleai": "AIza...",
|
|
28
|
-
* "siliconflow":"sk-xxx",
|
|
29
|
-
* "together": "together-xxx",
|
|
30
25
|
* "cloudflare": "cf-xxx",
|
|
31
|
-
* "perplexity": "pplx-xxx",
|
|
32
26
|
* "zai": "zai-xxx"
|
|
33
27
|
* },
|
|
34
28
|
* "providers": {
|
|
@@ -37,22 +31,16 @@
|
|
|
37
31
|
* "cerebras": { "enabled": true },
|
|
38
32
|
* "sambanova": { "enabled": true },
|
|
39
33
|
* "openrouter": { "enabled": true },
|
|
40
|
-
* "
|
|
41
|
-
* "
|
|
42
|
-
* "deepinfra": { "enabled": true },
|
|
43
|
-
* "fireworks": { "enabled": true },
|
|
34
|
+
* "github-models": { "enabled": true },
|
|
35
|
+
* "mistral": { "enabled": true },
|
|
44
36
|
* "codestral": { "enabled": true },
|
|
45
|
-
* "hyperbolic": { "enabled": true },
|
|
46
37
|
* "scaleway": { "enabled": true },
|
|
47
38
|
* "googleai": { "enabled": true },
|
|
48
|
-
* "siliconflow":{ "enabled": true },
|
|
49
|
-
* "together": { "enabled": true },
|
|
50
39
|
* "cloudflare": { "enabled": true },
|
|
51
|
-
* "perplexity": { "enabled": true },
|
|
52
40
|
* "zai": { "enabled": true }
|
|
53
41
|
* },
|
|
54
42
|
* "favorites": [
|
|
55
|
-
* "nvidia/deepseek-ai/deepseek-
|
|
43
|
+
* "nvidia/deepseek-ai/deepseek-v4-flash"
|
|
56
44
|
* ],
|
|
57
45
|
* "telemetry": {
|
|
58
46
|
* "enabled": true,
|
|
@@ -67,7 +55,19 @@
|
|
|
67
55
|
* },
|
|
68
56
|
* "endpointInstalls": [
|
|
69
57
|
* { "providerKey": "nvidia", "toolMode": "opencode", "scope": "all", "modelIds": [], "lastSyncedAt": "2026-03-09T10:00:00.000Z" }
|
|
70
|
-
* ]
|
|
58
|
+
* ],
|
|
59
|
+
* "router": {
|
|
60
|
+
* "enabled": true,
|
|
61
|
+
* "activeSet": "fast-coding",
|
|
62
|
+
* "probeMode": "balanced",
|
|
63
|
+
* "sets": {
|
|
64
|
+
* "fast-coding": {
|
|
65
|
+
* "name": "fast-coding",
|
|
66
|
+
* "models": [{ "provider": "groq", "model": "llama-3.3-70b-versatile", "priority": 1 }],
|
|
67
|
+
* "created": "2026-04-22T10:00:00.000Z"
|
|
68
|
+
* }
|
|
69
|
+
* }
|
|
70
|
+
* }
|
|
71
71
|
* }
|
|
72
72
|
*
|
|
73
73
|
|
|
@@ -88,10 +88,11 @@
|
|
|
88
88
|
* → replaceConfigContents(targetConfig, nextConfig) — Refresh an in-memory config object from a normalized snapshot
|
|
89
89
|
* → persistApiKeysForProvider(config, providerKey) — Persist one provider's API keys without clobbering the rest of the file
|
|
90
90
|
* → normalizeEndpointInstalls(endpointInstalls) — Keep tracked endpoint installs stable across app versions
|
|
91
|
+
* → normalizeRouterConfig(router) — Keep Smart Router sets and daemon tuning safe to persist
|
|
91
92
|
*
|
|
92
93
|
* @exports loadConfig, saveConfig, validateConfigFile, getApiKey, isProviderEnabled
|
|
93
94
|
* @exports addApiKey, removeApiKey, listApiKeys — multi-key management helpers
|
|
94
|
-
* @exports normalizeEndpointInstalls
|
|
95
|
+
* @exports normalizeEndpointInstalls, normalizeRouterConfig, DEFAULT_ROUTER_SETTINGS
|
|
95
96
|
* @exports buildPersistedConfig, replaceConfigContents, persistApiKeysForProvider
|
|
96
97
|
* @exports CONFIG_PATH — path to the JSON config file
|
|
97
98
|
*
|
|
@@ -121,23 +122,52 @@ const ENV_VARS = {
|
|
|
121
122
|
cerebras: 'CEREBRAS_API_KEY',
|
|
122
123
|
sambanova: 'SAMBANOVA_API_KEY',
|
|
123
124
|
openrouter: 'OPENROUTER_API_KEY',
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
fireworks: 'FIREWORKS_API_KEY',
|
|
128
|
-
codestral: 'CODESTRAL_API_KEY',
|
|
129
|
-
hyperbolic: 'HYPERBOLIC_API_KEY',
|
|
125
|
+
'github-models': ['GITHUB_TOKEN', 'GH_TOKEN', 'GITHUB_MODELS_TOKEN'],
|
|
126
|
+
mistral: 'MISTRAL_API_KEY',
|
|
127
|
+
codestral: ['MISTRAL_API_KEY', 'CODESTRAL_API_KEY'],
|
|
130
128
|
scaleway: 'SCALEWAY_API_KEY',
|
|
131
129
|
googleai: 'GOOGLE_API_KEY',
|
|
132
|
-
siliconflow:'SILICONFLOW_API_KEY',
|
|
133
|
-
together: 'TOGETHER_API_KEY',
|
|
134
130
|
cloudflare: ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_API_KEY'],
|
|
135
|
-
perplexity: ['PERPLEXITY_API_KEY', 'PPLX_API_KEY'],
|
|
136
131
|
qwen: 'DASHSCOPE_API_KEY',
|
|
137
132
|
zai: 'ZAI_API_KEY',
|
|
138
|
-
|
|
133
|
+
gemini: 'GEMINI_API_KEY',
|
|
134
|
+
ovhcloud: 'OVH_AI_ENDPOINTS_ACCESS_TOKEN',
|
|
135
|
+
'opencode-zen': 'OPENCODE_ZEN_API_KEY',
|
|
139
136
|
}
|
|
140
137
|
|
|
138
|
+
// 📖 Smart Router defaults are intentionally conservative: balanced probing,
|
|
139
|
+
// 📖 three-request failover, and short local port range discovery.
|
|
140
|
+
export const DEFAULT_ROUTER_SETTINGS = Object.freeze({
|
|
141
|
+
enabled: false,
|
|
142
|
+
onboardingSeen: false,
|
|
143
|
+
autoStartOnBoot: false,
|
|
144
|
+
port: 19280,
|
|
145
|
+
activeSet: 'fast-coding',
|
|
146
|
+
probeMode: 'balanced',
|
|
147
|
+
probeIntervals: Object.freeze({
|
|
148
|
+
eco: 120000,
|
|
149
|
+
balanced: 30000,
|
|
150
|
+
aggressive: 10000,
|
|
151
|
+
}),
|
|
152
|
+
circuitBreaker: Object.freeze({
|
|
153
|
+
failureThreshold: 3,
|
|
154
|
+
initialCooldownMs: 30000,
|
|
155
|
+
maxCooldownMs: 300000,
|
|
156
|
+
backoffMultiplier: 2,
|
|
157
|
+
}),
|
|
158
|
+
failover: Object.freeze({
|
|
159
|
+
maxRetries: 3,
|
|
160
|
+
streamStallTimeoutMs: 8000,
|
|
161
|
+
requestTimeoutMs: 15000,
|
|
162
|
+
}),
|
|
163
|
+
scoring: Object.freeze({
|
|
164
|
+
latencyWeight: 0.4,
|
|
165
|
+
uptimeWeight: 0.4,
|
|
166
|
+
priorityWeight: 0.2,
|
|
167
|
+
}),
|
|
168
|
+
logLevel: 'info',
|
|
169
|
+
})
|
|
170
|
+
|
|
141
171
|
function isPlainObject(value) {
|
|
142
172
|
return Boolean(value) && typeof value === 'object' && !Array.isArray(value)
|
|
143
173
|
}
|
|
@@ -207,12 +237,12 @@ function normalizeProvidersSection(providers) {
|
|
|
207
237
|
|
|
208
238
|
function normalizeSettingsSection(settings) {
|
|
209
239
|
const safeSettings = isPlainObject(settings) ? { ...settings } : {}
|
|
240
|
+
delete safeSettings.footerHidden
|
|
210
241
|
return {
|
|
211
242
|
...safeSettings,
|
|
212
243
|
hideUnconfiguredModels: typeof safeSettings.hideUnconfiguredModels === 'boolean' ? safeSettings.hideUnconfiguredModels : true,
|
|
213
244
|
favoritesPinnedAndSticky: typeof safeSettings.favoritesPinnedAndSticky === 'boolean' ? safeSettings.favoritesPinnedAndSticky : false,
|
|
214
245
|
theme: ['dark', 'light', 'auto'].includes(safeSettings.theme) ? safeSettings.theme : 'auto',
|
|
215
|
-
footerHidden: typeof safeSettings.footerHidden === 'boolean' ? safeSettings.footerHidden : false,
|
|
216
246
|
}
|
|
217
247
|
}
|
|
218
248
|
|
|
@@ -227,6 +257,136 @@ function normalizeTelemetrySection(telemetry) {
|
|
|
227
257
|
}
|
|
228
258
|
}
|
|
229
259
|
|
|
260
|
+
function normalizeRouterName(value, fallback = '') {
|
|
261
|
+
if (typeof value !== 'string') return fallback
|
|
262
|
+
return value.trim().replace(/\s+/g, '-').replace(/[^a-zA-Z0-9._-]/g, '').slice(0, 64) || fallback
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function normalizePositiveInteger(value, fallback, { min = 1, max = Number.MAX_SAFE_INTEGER } = {}) {
|
|
266
|
+
const numeric = Number(value)
|
|
267
|
+
if (!Number.isFinite(numeric)) return fallback
|
|
268
|
+
return Math.max(min, Math.min(max, Math.round(numeric)))
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function normalizeRouterSetModels(models) {
|
|
272
|
+
if (!Array.isArray(models)) return []
|
|
273
|
+
const seen = new Set()
|
|
274
|
+
const normalized = []
|
|
275
|
+
for (const entry of models) {
|
|
276
|
+
if (!isPlainObject(entry)) continue
|
|
277
|
+
const provider = normalizeRouterName(entry.provider)
|
|
278
|
+
const model = typeof entry.model === 'string' ? entry.model.trim() : ''
|
|
279
|
+
if (!provider || !model) continue
|
|
280
|
+
const key = `${provider}/${model}`
|
|
281
|
+
if (seen.has(key)) continue
|
|
282
|
+
seen.add(key)
|
|
283
|
+
normalized.push({
|
|
284
|
+
provider,
|
|
285
|
+
model,
|
|
286
|
+
priority: normalizePositiveInteger(entry.priority, normalized.length + 1, { min: 1, max: 999 }),
|
|
287
|
+
})
|
|
288
|
+
}
|
|
289
|
+
return normalized
|
|
290
|
+
.sort((a, b) => a.priority - b.priority)
|
|
291
|
+
.map((entry, index) => ({ ...entry, priority: index + 1 }))
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function normalizeRouterSets(sets) {
|
|
295
|
+
if (!isPlainObject(sets)) return {}
|
|
296
|
+
const normalized = {}
|
|
297
|
+
for (const [rawName, rawSet] of Object.entries(sets)) {
|
|
298
|
+
if (!isPlainObject(rawSet)) continue
|
|
299
|
+
const name = normalizeRouterName(rawSet.name, normalizeRouterName(rawName))
|
|
300
|
+
if (!name) continue
|
|
301
|
+
normalized[name] = {
|
|
302
|
+
name,
|
|
303
|
+
models: normalizeRouterSetModels(rawSet.models),
|
|
304
|
+
created: typeof rawSet.created === 'string' && rawSet.created.trim()
|
|
305
|
+
? rawSet.created
|
|
306
|
+
: new Date().toISOString(),
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return normalized
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function normalizeRouterIntervals(intervals) {
|
|
313
|
+
const safeIntervals = isPlainObject(intervals) ? intervals : {}
|
|
314
|
+
return {
|
|
315
|
+
eco: normalizePositiveInteger(safeIntervals.eco, DEFAULT_ROUTER_SETTINGS.probeIntervals.eco, { min: 5000, max: 3600000 }),
|
|
316
|
+
balanced: normalizePositiveInteger(safeIntervals.balanced, DEFAULT_ROUTER_SETTINGS.probeIntervals.balanced, { min: 5000, max: 3600000 }),
|
|
317
|
+
aggressive: normalizePositiveInteger(safeIntervals.aggressive, DEFAULT_ROUTER_SETTINGS.probeIntervals.aggressive, { min: 5000, max: 3600000 }),
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function normalizeRouterCircuitBreaker(circuitBreaker) {
|
|
322
|
+
const safeBreaker = isPlainObject(circuitBreaker) ? circuitBreaker : {}
|
|
323
|
+
return {
|
|
324
|
+
failureThreshold: normalizePositiveInteger(safeBreaker.failureThreshold, DEFAULT_ROUTER_SETTINGS.circuitBreaker.failureThreshold, { min: 1, max: 20 }),
|
|
325
|
+
initialCooldownMs: normalizePositiveInteger(safeBreaker.initialCooldownMs, DEFAULT_ROUTER_SETTINGS.circuitBreaker.initialCooldownMs, { min: 1000, max: 3600000 }),
|
|
326
|
+
maxCooldownMs: normalizePositiveInteger(safeBreaker.maxCooldownMs, DEFAULT_ROUTER_SETTINGS.circuitBreaker.maxCooldownMs, { min: 1000, max: 3600000 }),
|
|
327
|
+
backoffMultiplier: normalizePositiveInteger(safeBreaker.backoffMultiplier, DEFAULT_ROUTER_SETTINGS.circuitBreaker.backoffMultiplier, { min: 1, max: 10 }),
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function normalizeRouterFailover(failover) {
|
|
332
|
+
const safeFailover = isPlainObject(failover) ? failover : {}
|
|
333
|
+
return {
|
|
334
|
+
maxRetries: normalizePositiveInteger(safeFailover.maxRetries, DEFAULT_ROUTER_SETTINGS.failover.maxRetries, { min: 1, max: 10 }),
|
|
335
|
+
streamStallTimeoutMs: normalizePositiveInteger(safeFailover.streamStallTimeoutMs, DEFAULT_ROUTER_SETTINGS.failover.streamStallTimeoutMs, { min: 1000, max: 120000 }),
|
|
336
|
+
requestTimeoutMs: normalizePositiveInteger(safeFailover.requestTimeoutMs, DEFAULT_ROUTER_SETTINGS.failover.requestTimeoutMs, { min: 1000, max: 300000 }),
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function normalizeRouterScoring(scoring) {
|
|
341
|
+
const safeScoring = isPlainObject(scoring) ? scoring : {}
|
|
342
|
+
const numberOrDefault = (value, fallback) => {
|
|
343
|
+
const numeric = Number(value)
|
|
344
|
+
return Number.isFinite(numeric) && numeric >= 0 ? numeric : fallback
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
latencyWeight: numberOrDefault(safeScoring.latencyWeight, DEFAULT_ROUTER_SETTINGS.scoring.latencyWeight),
|
|
348
|
+
uptimeWeight: numberOrDefault(safeScoring.uptimeWeight, DEFAULT_ROUTER_SETTINGS.scoring.uptimeWeight),
|
|
349
|
+
priorityWeight: numberOrDefault(safeScoring.priorityWeight, DEFAULT_ROUTER_SETTINGS.scoring.priorityWeight),
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* 📖 normalizeRouterConfig preserves the Smart Router subtree without trusting
|
|
355
|
+
* 📖 arbitrary JSON shapes from disk. It keeps model sets ordered, clamps timing
|
|
356
|
+
* 📖 knobs, and leaves the router absent when no router key exists so upgrades can
|
|
357
|
+
* 📖 still distinguish "not onboarded yet" from "explicitly disabled".
|
|
358
|
+
*
|
|
359
|
+
* @param {unknown} router
|
|
360
|
+
* @returns {object|null}
|
|
361
|
+
*/
|
|
362
|
+
export function normalizeRouterConfig(router) {
|
|
363
|
+
if (!isPlainObject(router)) return null
|
|
364
|
+
const sets = normalizeRouterSets(router.sets)
|
|
365
|
+
const activeSet = normalizeRouterName(router.activeSet, DEFAULT_ROUTER_SETTINGS.activeSet)
|
|
366
|
+
const safeActiveSet = sets[activeSet] ? activeSet : (Object.keys(sets)[0] || activeSet)
|
|
367
|
+
const probeMode = ['eco', 'balanced', 'aggressive'].includes(router.probeMode)
|
|
368
|
+
? router.probeMode
|
|
369
|
+
: DEFAULT_ROUTER_SETTINGS.probeMode
|
|
370
|
+
const logLevel = ['error', 'warn', 'info', 'debug'].includes(router.logLevel)
|
|
371
|
+
? router.logLevel
|
|
372
|
+
: DEFAULT_ROUTER_SETTINGS.logLevel
|
|
373
|
+
|
|
374
|
+
return {
|
|
375
|
+
enabled: router.enabled === true,
|
|
376
|
+
onboardingSeen: router.onboardingSeen === true,
|
|
377
|
+
autoStartOnBoot: router.autoStartOnBoot === true,
|
|
378
|
+
port: normalizePositiveInteger(router.port, DEFAULT_ROUTER_SETTINGS.port, { min: 1, max: 65535 }),
|
|
379
|
+
activeSet: safeActiveSet,
|
|
380
|
+
sets,
|
|
381
|
+
probeMode,
|
|
382
|
+
probeIntervals: normalizeRouterIntervals(router.probeIntervals),
|
|
383
|
+
circuitBreaker: normalizeRouterCircuitBreaker(router.circuitBreaker),
|
|
384
|
+
failover: normalizeRouterFailover(router.failover),
|
|
385
|
+
scoring: normalizeRouterScoring(router.scoring),
|
|
386
|
+
logLevel,
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
230
390
|
function normalizeProfileSettings(settings) {
|
|
231
391
|
const safeSettings = isPlainObject(settings) ? { ...settings } : {}
|
|
232
392
|
return {
|
|
@@ -240,7 +400,7 @@ function normalizeProfileSettings(settings) {
|
|
|
240
400
|
|
|
241
401
|
function normalizeConfigShape(config) {
|
|
242
402
|
const safeConfig = isPlainObject(config) ? config : {}
|
|
243
|
-
|
|
403
|
+
const normalized = {
|
|
244
404
|
apiKeys: normalizeApiKeysSection(safeConfig.apiKeys),
|
|
245
405
|
providers: normalizeProvidersSection(safeConfig.providers),
|
|
246
406
|
settings: normalizeSettingsSection(safeConfig.settings),
|
|
@@ -250,6 +410,9 @@ function normalizeConfigShape(config) {
|
|
|
250
410
|
|
|
251
411
|
|
|
252
412
|
}
|
|
413
|
+
const normalizedRouter = normalizeRouterConfig(safeConfig.router)
|
|
414
|
+
if (normalizedRouter) normalized.router = normalizedRouter
|
|
415
|
+
return normalized
|
|
253
416
|
}
|
|
254
417
|
|
|
255
418
|
function readStoredConfigSnapshot() {
|
|
@@ -322,7 +485,11 @@ export function buildPersistedConfig(incomingConfig, diskConfig = _emptyConfig()
|
|
|
322
485
|
? cloneConfigValue(normalizedIncoming.endpointInstalls)
|
|
323
486
|
: mergeEndpointInstalls(normalizedDisk.endpointInstalls, normalizedIncoming.endpointInstalls),
|
|
324
487
|
// 📖 Profile system removed - always null
|
|
325
|
-
|
|
488
|
+
}
|
|
489
|
+
if (Object.prototype.hasOwnProperty.call(normalizedIncoming, 'router')) {
|
|
490
|
+
merged.router = cloneConfigValue(normalizedIncoming.router)
|
|
491
|
+
} else if (Object.prototype.hasOwnProperty.call(normalizedDisk, 'router')) {
|
|
492
|
+
merged.router = cloneConfigValue(normalizedDisk.router)
|
|
326
493
|
}
|
|
327
494
|
|
|
328
495
|
return normalizeConfigShape(merged)
|
|
@@ -840,7 +1007,7 @@ export function isProviderEnabled(config, providerKey) {
|
|
|
840
1007
|
/**
|
|
841
1008
|
* 📖 _emptyProfileSettings: Default TUI settings.
|
|
842
1009
|
*
|
|
843
|
-
* @returns {{ tierFilter: string|null, sortColumn: string, sortAsc: boolean, pingInterval: number, hideUnconfiguredModels: boolean, favoritesPinnedAndSticky: boolean, preferredToolMode: string, theme: string
|
|
1010
|
+
* @returns {{ tierFilter: string|null, sortColumn: string, sortAsc: boolean, pingInterval: number, hideUnconfiguredModels: boolean, favoritesPinnedAndSticky: boolean, preferredToolMode: string, theme: string }}
|
|
844
1011
|
*/
|
|
845
1012
|
export function _emptyProfileSettings() {
|
|
846
1013
|
return {
|
|
@@ -852,7 +1019,6 @@ export function _emptyProfileSettings() {
|
|
|
852
1019
|
favoritesPinnedAndSticky: false, // 📖 default mode keeps favorites as normal starred rows; press Y to pin+stick them.
|
|
853
1020
|
preferredToolMode: 'opencode', // 📖 remember the last Z-selected launcher across app restarts
|
|
854
1021
|
theme: 'auto', // 📖 'auto' follows the terminal/OS theme, override with 'dark' or 'light' if needed
|
|
855
|
-
footerHidden: false, // 📖 false = full footer shown; true = collapsed to a single "(W) Toggle Footer" hint
|
|
856
1022
|
}
|
|
857
1023
|
}
|
|
858
1024
|
|
package/src/constants.js
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* - `FPS` controls animation frame rate (braille spinner).
|
|
16
16
|
* - `COL_MODEL` / `COL_MS` control legacy ping-column widths (retained for compat).
|
|
17
17
|
* - `CELL_W` is derived from `COL_MS` and used by `msCell` / `spinCell`.
|
|
18
|
-
* - `TABLE_HEADER_LINES`
|
|
19
|
-
*
|
|
18
|
+
* - `TABLE_HEADER_LINES` and footer line counts must stay in sync with the
|
|
19
|
+
* actual number of lines rendered by `renderTable()`.
|
|
20
20
|
* - `WIDTH_WARNING_MIN_COLS` controls when the narrow-terminal startup warning appears.
|
|
21
21
|
* - Overlay background colours (chalk.bgRgb) make each overlay panel visually distinct.
|
|
22
22
|
*
|
|
@@ -101,8 +101,8 @@ export const WIDTH_WARNING_MIN_COLS = 80
|
|
|
101
101
|
|
|
102
102
|
// 📖 Table row-budget constants — must stay in sync with renderTable()'s actual output.
|
|
103
103
|
// 📖 If this drifts, model rows overflow and can push the title row out of view.
|
|
104
|
-
export const TABLE_HEADER_LINES =
|
|
105
|
-
export const TABLE_FOOTER_LINES =
|
|
104
|
+
export const TABLE_HEADER_LINES = 2 // 📖 title, column headers
|
|
105
|
+
export const TABLE_FOOTER_LINES = 2 // 📖 actions, links
|
|
106
106
|
export const TABLE_FIXED_LINES = TABLE_HEADER_LINES + TABLE_FOOTER_LINES
|
|
107
107
|
|
|
108
108
|
// ─── Small cell-formatting helpers ────────────────────────────────────────────
|
|
@@ -52,7 +52,7 @@ import { getToolMeta } from './tool-metadata.js'
|
|
|
52
52
|
const DIRECT_INSTALL_UNSUPPORTED_PROVIDERS = new Set(['replicate', 'zai', 'rovo', 'gemini', 'opencode-zen'])
|
|
53
53
|
// 📖 Install Endpoints only lists tools whose persisted config shape is actually supported here.
|
|
54
54
|
// 📖 Claude Code, Codex, and Gemini stay out while their dedicated bridges are being rebuilt.
|
|
55
|
-
const INSTALL_TARGET_MODES = ['opencode', 'opencode-desktop', 'opencode-web', 'openclaw', 'kilo', 'crush', 'goose', 'pi', 'aider', 'qwen', 'openhands', 'amp', 'hermes', 'continue', 'cline']
|
|
55
|
+
const INSTALL_TARGET_MODES = ['opencode', 'opencode-desktop', 'opencode-web', 'openclaw', 'kilo', 'crush', 'goose', 'pi', 'aider', 'qwen', 'openhands', 'amp', 'hermes', 'continue', 'cline', 'fcm_router']
|
|
56
56
|
|
|
57
57
|
function getDefaultPaths() {
|
|
58
58
|
const home = homedir()
|
|
@@ -509,6 +509,48 @@ function installIntoEnvBasedTool(providerKey, models, apiKey, toolMode) {
|
|
|
509
509
|
return { path: envFilePath, backupPath, providerId, modelCount: models.length }
|
|
510
510
|
}
|
|
511
511
|
|
|
512
|
+
// 📖 installIntoFcmRouter: adds provider endpoints to the running FCM Router daemon
|
|
513
|
+
// 📖 via the /sets API so the router can use them for failover routing.
|
|
514
|
+
// 📖 Uses the daemon's expected schema: { provider, model, priority } per model entry.
|
|
515
|
+
function installIntoFcmRouter(providerKey, models, apiKey) {
|
|
516
|
+
const baseUrl = `http://localhost:${process.env.FCM_ROUTER_PORT || '19280'}`
|
|
517
|
+
const routerSetName = `fcm-${providerKey}`
|
|
518
|
+
// 📖 Map to the daemon's expected model schema (provider + model + priority)
|
|
519
|
+
const routerModels = models.map((m, index) => ({
|
|
520
|
+
provider: providerKey,
|
|
521
|
+
model: m.modelId,
|
|
522
|
+
priority: index + 1,
|
|
523
|
+
}))
|
|
524
|
+
const payload = { name: routerSetName, models: routerModels }
|
|
525
|
+
|
|
526
|
+
// 📖 Try POST first (creates the set), then PUT to update if it already exists.
|
|
527
|
+
// 📖 Both are fire-and-forget: the daemon may not be running during install,
|
|
528
|
+
// 📖 and that's OK — the set will be picked up on next daemon restart via config.
|
|
529
|
+
void (async () => {
|
|
530
|
+
try {
|
|
531
|
+
const createRes = await fetch(`${baseUrl}/sets`, {
|
|
532
|
+
method: 'POST',
|
|
533
|
+
headers: { 'Content-Type': 'application/json' },
|
|
534
|
+
body: JSON.stringify(payload),
|
|
535
|
+
signal: AbortSignal.timeout(3000),
|
|
536
|
+
})
|
|
537
|
+
// 📖 If the set already exists (name conflict), update it via PUT
|
|
538
|
+
if (!createRes.ok) {
|
|
539
|
+
await fetch(`${baseUrl}/sets/${encodeURIComponent(routerSetName)}`, {
|
|
540
|
+
method: 'PUT',
|
|
541
|
+
headers: { 'Content-Type': 'application/json' },
|
|
542
|
+
body: JSON.stringify(payload),
|
|
543
|
+
signal: AbortSignal.timeout(3000),
|
|
544
|
+
}).catch(() => {})
|
|
545
|
+
}
|
|
546
|
+
} catch {
|
|
547
|
+
// 📖 Daemon unreachable — silently ignore, user can restart daemon later
|
|
548
|
+
}
|
|
549
|
+
})()
|
|
550
|
+
|
|
551
|
+
return { path: `FCM Router (${baseUrl})`, backupPath: null, providerId: providerKey, modelCount: models.length }
|
|
552
|
+
}
|
|
553
|
+
|
|
512
554
|
export function installProviderEndpoints(config, providerKey, toolMode, options = {}) {
|
|
513
555
|
const canonicalToolMode = canonicalizeToolMode(toolMode)
|
|
514
556
|
const support = getDirectInstallSupport(providerKey)
|
|
@@ -544,6 +586,8 @@ export function installProviderEndpoints(config, providerKey, toolMode, options
|
|
|
544
586
|
installResult = installIntoQwen(providerKey, models, apiKey, paths)
|
|
545
587
|
} else if (canonicalToolMode === 'openhands') {
|
|
546
588
|
installResult = installIntoEnvBasedTool(providerKey, models, apiKey, canonicalToolMode, paths)
|
|
589
|
+
} else if (canonicalToolMode === 'fcm_router') {
|
|
590
|
+
installResult = installIntoFcmRouter(providerKey, models, apiKey)
|
|
547
591
|
} else {
|
|
548
592
|
throw new Error(`Unsupported install target: ${toolMode}`)
|
|
549
593
|
}
|
package/src/favorites.js
CHANGED
|
@@ -103,3 +103,25 @@ export function toggleFavoriteModel(config, providerKey, modelId) {
|
|
|
103
103
|
if (saveResult.success) replaceConfigContents(config, latestConfig)
|
|
104
104
|
return true
|
|
105
105
|
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 📖 Move a favorite up or down in the priority order and persist.
|
|
109
|
+
* @param {Record<string, unknown>} config
|
|
110
|
+
* @param {string} providerKey
|
|
111
|
+
* @param {string} modelId
|
|
112
|
+
* @param {'up'|'down'} direction
|
|
113
|
+
* @returns {boolean} true if reorder succeeded
|
|
114
|
+
*/
|
|
115
|
+
export function reorderFavorite(config, providerKey, modelId, direction) {
|
|
116
|
+
const latestConfig = loadConfig()
|
|
117
|
+
ensureFavoritesConfig(latestConfig)
|
|
118
|
+
const favoriteKey = toFavoriteKey(providerKey, modelId)
|
|
119
|
+
const idx = latestConfig.favorites.indexOf(favoriteKey)
|
|
120
|
+
if (idx < 0) return false
|
|
121
|
+
const swapIdx = direction === 'up' ? idx - 1 : idx + 1
|
|
122
|
+
if (swapIdx < 0 || swapIdx >= latestConfig.favorites.length) return false
|
|
123
|
+
;[latestConfig.favorites[idx], latestConfig.favorites[swapIdx]] = [latestConfig.favorites[swapIdx], latestConfig.favorites[idx]]
|
|
124
|
+
const saveResult = saveConfig(latestConfig, { replaceFavorites: true })
|
|
125
|
+
if (saveResult.success) replaceConfigContents(config, latestConfig)
|
|
126
|
+
return true
|
|
127
|
+
}
|
package/src/graphify-out/cache/089db1c1def873cf6d112f1590da4490e61e691aff0db41e006aa2fb15ba0656.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "users_vava_documents_github_free_coding_models_src_utils_js", "label": "utils.js", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L1"}, {"id": "utils_getavg", "label": "getAvg()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L90"}, {"id": "utils_getverdict", "label": "getVerdict()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L118"}, {"id": "utils_getuptime", "label": "getUptime()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L150"}, {"id": "utils_getp95", "label": "getP95()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L163"}, {"id": "utils_getjitter", "label": "getJitter()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L175"}, {"id": "utils_getstabilityscore", "label": "getStabilityScore()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L197"}, {"id": "utils_sortresults", "label": "sortResults()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L238"}, {"id": "utils_filterbytier", "label": "filterByTier()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L339"}, {"id": "utils_findbestmodel", "label": "findBestModel()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L356"}, {"id": "utils_parseargs", "label": "parseArgs()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L402"}, {"id": "utils_parsectxtok", "label": "parseCtxToK()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L573"}, {"id": "utils_formatctxwindow", "label": "formatCtxWindow()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L583"}, {"id": "utils_labelfromid", "label": "labelFromId()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L591"}, {"id": "utils_parseswetonum", "label": "parseSweToNum()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L602"}, {"id": "utils_scoremodelfortask", "label": "scoreModelForTask()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L627"}, {"id": "utils_gettoprecommendations", "label": "getTopRecommendations()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L703"}, {"id": "utils_getversionstatusinfo", "label": "getVersionStatusInfo()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L730"}, {"id": "utils_formatresultsasjson", "label": "formatResultsAsJSON()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L796"}], "edges": [{"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getavg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L90", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getverdict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L118", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getuptime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L150", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getp95", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L163", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getjitter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L175", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getstabilityscore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L197", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_sortresults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L238", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_filterbytier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L339", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_findbestmodel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L356", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_parseargs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L402", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_parsectxtok", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L573", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_formatctxwindow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L583", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_labelfromid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L591", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_parseswetonum", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L602", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_scoremodelfortask", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L627", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_gettoprecommendations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L703", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_getversionstatusinfo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L730", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_utils_js", "target": "utils_formatresultsasjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L796", "weight": 1.0}, {"source": "utils_getverdict", "target": "utils_getavg", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L119", "weight": 1.0}, {"source": "utils_getverdict", "target": "utils_getp95", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L129", "weight": 1.0}, {"source": "utils_getstabilityscore", "target": "utils_getp95", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L201", "weight": 1.0}, {"source": "utils_getstabilityscore", "target": "utils_getjitter", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L202", "weight": 1.0}, {"source": "utils_getstabilityscore", "target": "utils_getuptime", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L203", "weight": 1.0}, {"source": "utils_scoremodelfortask", "target": "utils_parseswetonum", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L634", "weight": 1.0}, {"source": "utils_scoremodelfortask", "target": "utils_getavg", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L638", "weight": 1.0}, {"source": "utils_scoremodelfortask", "target": "utils_parsectxtok", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L650", "weight": 1.0}, {"source": "utils_scoremodelfortask", "target": "utils_getstabilityscore", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L663", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_getavg", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L91"}, {"caller_nid": "utils_getavg", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L93"}, {"caller_nid": "utils_getavg", "callee": "reduce", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L93"}, {"caller_nid": "utils_getverdict", "callee": "some", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L120"}, {"caller_nid": "utils_getverdict", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L128"}, {"caller_nid": "utils_getuptime", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L152"}, {"caller_nid": "utils_getuptime", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L153"}, {"caller_nid": "utils_getp95", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L164"}, {"caller_nid": "utils_getp95", "callee": "sort", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L166"}, {"caller_nid": "utils_getp95", "callee": "map", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L166"}, {"caller_nid": "utils_getp95", "callee": "ceil", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L167"}, {"caller_nid": "utils_getp95", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L168"}, {"caller_nid": "utils_getjitter", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L176"}, {"caller_nid": "utils_getjitter", "callee": "reduce", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L178"}, {"caller_nid": "utils_getjitter", "callee": "reduce", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L179"}, {"caller_nid": "utils_getjitter", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L180"}, {"caller_nid": "utils_getjitter", "callee": "sqrt", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L180"}, {"caller_nid": "utils_getstabilityscore", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L198"}, {"caller_nid": "utils_getstabilityscore", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L204"}, {"caller_nid": "utils_getstabilityscore", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L208"}, {"caller_nid": "utils_getstabilityscore", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L208"}, {"caller_nid": "utils_getstabilityscore", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L209"}, {"caller_nid": "utils_getstabilityscore", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L209"}, {"caller_nid": "utils_getstabilityscore", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L210"}, {"caller_nid": "utils_getstabilityscore", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L215"}, {"caller_nid": "utils_sortresults", "callee": "sort", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L239"}, {"caller_nid": "utils_filterbytier", "callee": "toUpperCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L340"}, {"caller_nid": "utils_filterbytier", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L343"}, {"caller_nid": "utils_findbestmodel", "callee": "sort", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L357"}, {"caller_nid": "utils_parseargs", "callee": "slice", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L403"}, {"caller_nid": "utils_parseargs", "callee": "findIndex", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L408"}, {"caller_nid": "utils_parseargs", "callee": "startsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L409"}, {"caller_nid": "utils_parseargs", "callee": "findIndex", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L414"}, {"caller_nid": "utils_parseargs", "callee": "startsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L415"}, {"caller_nid": "utils_parseargs", "callee": "findIndex", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L419"}, {"caller_nid": "utils_parseargs", "callee": "startsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L420"}, {"caller_nid": "utils_parseargs", "callee": "findIndex", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L424"}, {"caller_nid": "utils_parseargs", "callee": "startsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L425"}, {"caller_nid": "utils_parseargs", "callee": "add", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L431"}, {"caller_nid": "utils_parseargs", "callee": "add", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L432"}, {"caller_nid": "utils_parseargs", "callee": "add", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L433"}, {"caller_nid": "utils_parseargs", "callee": "add", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L434"}, {"caller_nid": "utils_parseargs", "callee": "entries", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L436"}, {"caller_nid": "utils_parseargs", "callee": "startsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L437"}, {"caller_nid": "utils_parseargs", "callee": "push", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L438"}, {"caller_nid": "utils_parseargs", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L438"}, {"caller_nid": "utils_parseargs", "callee": "has", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L439"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L446"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L447"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L448"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L449"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L450"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L451"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L452"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L453"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L454"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L455"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L456"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L457"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L458"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L459"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L460"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L461"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L462"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L463"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L464"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L465"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L466"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L467"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L468"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L469"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L470"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L470"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L471"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L472"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L473"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L474"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L475"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L478"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L478"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L481"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L482"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L483"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L484"}, {"caller_nid": "utils_parseargs", "callee": "toUpperCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L486"}, {"caller_nid": "utils_parseargs", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L487"}, {"caller_nid": "utils_parseargs", "callee": "parseInt", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L489"}, {"caller_nid": "utils_parseargs", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L495"}, {"caller_nid": "utils_parsectxtok", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L575"}, {"caller_nid": "utils_parsectxtok", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L576"}, {"caller_nid": "utils_parsectxtok", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L576"}, {"caller_nid": "utils_parsectxtok", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L576"}, {"caller_nid": "utils_parsectxtok", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L577"}, {"caller_nid": "utils_parsectxtok", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L577"}, {"caller_nid": "utils_parsectxtok", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L577"}, {"caller_nid": "utils_formatctxwindow", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L585"}, {"caller_nid": "utils_formatctxwindow", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L586"}, {"caller_nid": "utils_labelfromid", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L592"}, {"caller_nid": "utils_labelfromid", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L593"}, {"caller_nid": "utils_labelfromid", "callee": "pop", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L593"}, {"caller_nid": "utils_labelfromid", "callee": "split", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L593"}, {"caller_nid": "utils_labelfromid", "callee": "join", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L594"}, {"caller_nid": "utils_labelfromid", "callee": "map", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L594"}, {"caller_nid": "utils_labelfromid", "callee": "split", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L594"}, {"caller_nid": "utils_parseswetonum", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L604"}, {"caller_nid": "utils_parseswetonum", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L604"}, {"caller_nid": "utils_parseswetonum", "callee": "isNaN", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L605"}, {"caller_nid": "utils_scoremodelfortask", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L635"}, {"caller_nid": "utils_scoremodelfortask", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L643"}, {"caller_nid": "utils_scoremodelfortask", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L643"}, {"caller_nid": "utils_scoremodelfortask", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L657"}, {"caller_nid": "utils_scoremodelfortask", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L687"}, {"caller_nid": "utils_scoremodelfortask", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L687"}, {"caller_nid": "utils_scoremodelfortask", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L687"}, {"caller_nid": "utils_gettoprecommendations", "callee": "sort", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L704"}, {"caller_nid": "utils_gettoprecommendations", "callee": "map", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L704"}, {"caller_nid": "utils_gettoprecommendations", "callee": "filter", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L704"}, {"caller_nid": "utils_gettoprecommendations", "callee": "slice", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L709"}, {"caller_nid": "utils_getversionstatusinfo", "callee": "trim", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L738"}, {"caller_nid": "utils_getversionstatusinfo", "callee": "trim", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L741"}, {"caller_nid": "utils_getversionstatusinfo", "callee": "trim", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L745"}, {"caller_nid": "utils_getversionstatusinfo", "callee": "trim", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L748"}, {"caller_nid": "utils_formatresultsasjson", "callee": "slice", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L797"}, {"caller_nid": "utils_formatresultsasjson", "callee": "map", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L797"}, {"caller_nid": "utils_formatresultsasjson", "callee": "stringify", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/utils.js", "source_location": "L818"}]}
|
package/src/graphify-out/cache/0b510b53cf1a1393fb52b1fc3bbbf88b63938e961ec5b82119a2e9715fee8bd7.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "users_vava_documents_github_free_coding_models_src_ping_js", "label": "ping.js", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L1"}, {"id": "ping_resolvecloudflareurl", "label": "resolveCloudflareUrl()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L46"}, {"id": "ping_buildpingrequest", "label": "buildPingRequest()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L56"}, {"id": "ping_ping", "label": "ping()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L102"}, {"id": "ping_getheadervalue", "label": "getHeaderValue()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L134"}, {"id": "ping_extractquotapercent", "label": "extractQuotaPercent()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L143"}, {"id": "ping_fetchproviderquotapercent", "label": "fetchProviderQuotaPercent()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L170"}, {"id": "ping_getproviderquotapercentcached", "label": "getProviderQuotaPercentCached()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L177"}, {"id": "ping_usageplaceholderforprovider", "label": "usagePlaceholderForProvider()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L184"}], "edges": [{"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "users_vava_documents_github_free_coding_models_src_constants_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L40", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "users_vava_documents_github_free_coding_models_src_provider_quota_fetchers_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L41", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "users_vava_documents_github_free_coding_models_src_quota_capabilities_ts", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L42", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_resolvecloudflareurl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L46", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_buildpingrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L56", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_ping", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L102", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_getheadervalue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L134", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_extractquotapercent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L143", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_fetchproviderquotapercent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L170", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_getproviderquotapercentcached", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L177", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_ping_js", "target": "ping_usageplaceholderforprovider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L184", "weight": 1.0}, {"source": "ping_buildpingrequest", "target": "ping_resolvecloudflareurl", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L76", "weight": 1.0}, {"source": "ping_ping", "target": "ping_buildpingrequest", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L107", "weight": 1.0}, {"source": "ping_ping", "target": "ping_extractquotapercent", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L118", "weight": 1.0}, {"source": "ping_extractquotapercent", "target": "ping_getheadervalue", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L152", "weight": 1.0}, {"source": "ping_getproviderquotapercentcached", "target": "ping_fetchproviderquotapercent", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L178", "weight": 1.0}], "raw_calls": [{"caller_nid": "ping_resolvecloudflareurl", "callee": "trim", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L47"}, {"caller_nid": "ping_resolvecloudflareurl", "callee": "includes", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L48"}, {"caller_nid": "ping_resolvecloudflareurl", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L49"}, {"caller_nid": "ping_resolvecloudflareurl", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L50"}, {"caller_nid": "ping_resolvecloudflareurl", "callee": "encodeURIComponent", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L50"}, {"caller_nid": "ping_buildpingrequest", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L58"}, {"caller_nid": "ping_ping", "callee": "setTimeout", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L104"}, {"caller_nid": "ping_ping", "callee": "now", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L105"}, {"caller_nid": "ping_ping", "callee": "fetch", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L108"}, {"caller_nid": "ping_ping", "callee": "stringify", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L111"}, {"caller_nid": "ping_ping", "callee": "String", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L114"}, {"caller_nid": "ping_ping", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L117"}, {"caller_nid": "ping_ping", "callee": "now", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L117"}, {"caller_nid": "ping_ping", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L124"}, {"caller_nid": "ping_ping", "callee": "now", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L124"}, {"caller_nid": "ping_ping", "callee": "clearTimeout", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L128"}, {"caller_nid": "ping_getheadervalue", "callee": "get", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L136"}, {"caller_nid": "ping_getheadervalue", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L137"}, {"caller_nid": "ping_extractquotapercent", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L154"}, {"caller_nid": "ping_extractquotapercent", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L155"}, {"caller_nid": "ping_extractquotapercent", "callee": "isFinite", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L156"}, {"caller_nid": "ping_extractquotapercent", "callee": "isFinite", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L156"}, {"caller_nid": "ping_extractquotapercent", "callee": "round", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L157"}, {"caller_nid": "ping_extractquotapercent", "callee": "max", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L158"}, {"caller_nid": "ping_extractquotapercent", "callee": "min", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L158"}, {"caller_nid": "ping_fetchproviderquotapercent", "callee": "_fetchProviderQuotaFromModule", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L171"}, {"caller_nid": "ping_usageplaceholderforprovider", "callee": "supportsUsagePercent", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/ping.js", "source_location": "L185"}]}
|
package/src/graphify-out/cache/0ec9a95a326bde58e0316889018b278062d06d494d0f31ba177c9de71e5fed2d.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes": [{"id": "users_vava_documents_github_free_coding_models_src_model_merger_js", "label": "model-merger.js", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L1"}, {"id": "model_merger_parsectxk", "label": "parseCtxK()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L3"}, {"id": "model_merger_parseswepercent", "label": "parseSwePercent()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L10"}, {"id": "model_merger_slugify", "label": "slugify()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L19"}, {"id": "model_merger_buildmergedmodels", "label": "buildMergedModels()", "file_type": "code", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L47"}], "edges": [{"source": "users_vava_documents_github_free_coding_models_src_model_merger_js", "target": "model_merger_parsectxk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L3", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_model_merger_js", "target": "model_merger_parseswepercent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L10", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_model_merger_js", "target": "model_merger_slugify", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L19", "weight": 1.0}, {"source": "users_vava_documents_github_free_coding_models_src_model_merger_js", "target": "model_merger_buildmergedmodels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L47", "weight": 1.0}, {"source": "model_merger_buildmergedmodels", "target": "model_merger_parseswepercent", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L63", "weight": 1.0}, {"source": "model_merger_buildmergedmodels", "target": "model_merger_parsectxk", "relation": "calls", "confidence": "EXTRACTED", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L67", "weight": 1.0}], "raw_calls": [{"caller_nid": "model_merger_parsectxk", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L5"}, {"caller_nid": "model_merger_parsectxk", "callee": "endsWith", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L6"}, {"caller_nid": "model_merger_parsectxk", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L6"}, {"caller_nid": "model_merger_parsectxk", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L7"}, {"caller_nid": "model_merger_parseswepercent", "callee": "parseFloat", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L11"}, {"caller_nid": "model_merger_slugify", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L20"}, {"caller_nid": "model_merger_slugify", "callee": "replace", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L20"}, {"caller_nid": "model_merger_slugify", "callee": "toLowerCase", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L20"}, {"caller_nid": "model_merger_slugify", "callee": "has", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L23"}, {"caller_nid": "model_merger_slugify", "callee": "add", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L26"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "has", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L51"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "set", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L52"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "get", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L55"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "push", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L56"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "map", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L73"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "from", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L73"}, {"caller_nid": "model_merger_buildmergedmodels", "callee": "values", "source_file": "/Users/vava/Documents/GitHub/free-coding-models/src/model-merger.js", "source_location": "L73"}]}
|