@blockrun/clawrouter 0.12.244 → 0.12.246

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/dist/index.js CHANGED
@@ -92,7 +92,6 @@ var init_top_models = __esm({
92
92
  "deepseek/deepseek-v4-pro",
93
93
  "deepseek/deepseek-chat",
94
94
  "deepseek/deepseek-reasoner",
95
- "free/deepseek-v4-flash",
96
95
  "free/nemotron-3-nano-omni-30b-a3b-reasoning",
97
96
  "free/mistral-nemotron",
98
97
  "free/step-3.7-flash",
@@ -292,6 +291,14 @@ var init_models = __esm({
292
291
  "gpt-5.6-sol": "openai/gpt-5.6-sol",
293
292
  "gpt-5.6-terra": "openai/gpt-5.6-terra",
294
293
  "gpt-5.6-luna": "openai/gpt-5.6-luna",
294
+ // Pro reasoning tiers (2026-08-03). Explicit pins only — the generic
295
+ // shorthands above stay on standard Terra.
296
+ "gpt-5.6-sol-pro": "openai/gpt-5.6-sol-pro",
297
+ "gpt-5.6-terra-pro": "openai/gpt-5.6-terra-pro",
298
+ "gpt-5.6-luna-pro": "openai/gpt-5.6-luna-pro",
299
+ "sol-pro": "openai/gpt-5.6-sol-pro",
300
+ "terra-pro": "openai/gpt-5.6-terra-pro",
301
+ "luna-pro": "openai/gpt-5.6-luna-pro",
295
302
  "gpt-5.5": "openai/gpt-5.5",
296
303
  "gpt-5.5-pro": "openai/gpt-5.5-pro",
297
304
  // ChatGPT Instant. `chat-latest` is a rolling upstream id — pinning it means
@@ -343,6 +350,20 @@ var init_models = __esm({
343
350
  "qwen3.7-max": "qwen/qwen3.7-max",
344
351
  "qwen-3.7-max": "qwen/qwen3.7-max",
345
352
  "qwen3-7-max": "qwen/qwen3.7-max",
353
+ // Plus/Flash tiers (2026-08-03) — explicit pins, same rule as Max.
354
+ "qwen3.7-plus": "qwen/qwen3.7-plus",
355
+ "qwen-3.7-plus": "qwen/qwen3.7-plus",
356
+ "qwen3.7-flash": "qwen/qwen3.7-flash",
357
+ "qwen-3.7-flash": "qwen/qwen3.7-flash",
358
+ // Tencent + Xiaomi (2026-07-25) — each maker has exactly one model, so the
359
+ // bare maker names are safe to bind.
360
+ hy3: "tencent/hy3",
361
+ tencent: "tencent/hy3",
362
+ hunyuan: "tencent/hy3",
363
+ mimo: "xiaomi/mimo-v2.5-pro",
364
+ "mimo-v2.5-pro": "xiaomi/mimo-v2.5-pro",
365
+ "mimo-v2.5": "xiaomi/mimo-v2.5-pro",
366
+ xiaomi: "xiaomi/mimo-v2.5-pro",
346
367
  // Google
347
368
  // gemini-3-pro-preview delisted by Google 2026-06-06 — mirror the gateway
348
369
  // redirect to its successor so pinned callers land on 3.1-pro, not an error.
@@ -358,7 +379,10 @@ var init_models = __esm({
358
379
  flash: "google/gemini-2.5-flash",
359
380
  "gemini-3.1-pro-preview": "google/gemini-3.1-pro",
360
381
  "google/gemini-3.1-pro-preview": "google/gemini-3.1-pro",
382
+ "gemini-3.6-flash": "google/gemini-3.6-flash",
383
+ "gemini-3.6": "google/gemini-3.6-flash",
361
384
  "gemini-3.5-flash": "google/gemini-3.5-flash",
385
+ "gemini-3.5-flash-lite": "google/gemini-3.5-flash-lite",
362
386
  "gemini-3.1-flash-lite": "google/gemini-3.1-flash-lite",
363
387
  "gemini-2.5-flash-lite": "google/gemini-2.5-flash-lite",
364
388
  // xAI — grok-4.3 is the public flagship since 2026-06-04 (grok-3 and the
@@ -394,12 +418,17 @@ var init_models = __esm({
394
418
  "gpt-20b": "free/gpt-oss-20b",
395
419
  "nvidia/gpt-oss-120b": "free/gpt-oss-120b",
396
420
  "nvidia/gpt-oss-20b": "free/gpt-oss-20b",
397
- // deepseek family → v4-flash, matching blockrun's 2026-07-17 redirect map
398
- // (v4-flash recovered in the live re-probe; v3.2/v4-pro stay dead upstream).
399
- "nvidia/deepseek-v3.2": "free/deepseek-v4-flash",
400
- "free/deepseek-v3.2": "free/deepseek-v4-flash",
401
- "nvidia/deepseek-v4-pro": "free/deepseek-v4-flash",
402
- "free/deepseek-v4-pro": "free/deepseek-v4-flash",
421
+ // deepseek free family: v4-flash EOL'd 2026-08-12 (HTTP 410 from NVIDIA on both
422
+ // probe passes; prod gate fired [ALERT][free-model-dead] kind=gone twice that
423
+ // morning). The whole nvidia/deepseek-* family is now dead upstream — blockrun
424
+ // hid flash and retargeted v3.2/v4-pro (whose redirects chained through flash)
425
+ // straight to gpt-oss-120b. Ids naming v4-flash itself keep the real id (the
426
+ // gateway redirects them); the v3.2/v4-pro ids follow blockrun's retarget
427
+ // rather than chaining through a second dead model.
428
+ "nvidia/deepseek-v3.2": "free/gpt-oss-120b",
429
+ "free/deepseek-v3.2": "free/gpt-oss-120b",
430
+ "nvidia/deepseek-v4-pro": "free/gpt-oss-120b",
431
+ "free/deepseek-v4-pro": "free/gpt-oss-120b",
403
432
  "nvidia/deepseek-v4-flash": "free/deepseek-v4-flash",
404
433
  "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": "free/nemotron-3-nano-omni-30b-a3b-reasoning",
405
434
  // qwen3-coder-480b retired (NVIDIA EOL 2026-06-14). Its server-side redirect used
@@ -441,13 +470,16 @@ var init_models = __esm({
441
470
  "mistral-large-3-675b": "free/mistral-large-3-675b",
442
471
  "qwen3.5-122b": "free/qwen3.5-122b-a10b",
443
472
  "qwen3-122b": "free/qwen3.5-122b-a10b",
444
- // Free model shorthand aliases (v4-flash recovered 2026-07-17 — live again)
445
- "deepseek-free": "free/deepseek-v4-flash",
446
- "deepseek-v4-pro": "free/deepseek-v4-flash",
447
- // free shorthand → flash (pro still hung)
473
+ // Free model shorthand aliases. v4-flash EOL'd 2026-08-12 — no free DeepSeek
474
+ // is left anywhere, so the generic "a free deepseek" shorthand follows the
475
+ // gateway's retarget (blockrun's /free-deepseek page points at gpt-oss-120b
476
+ // too). Shorthands naming v4-flash itself stay on the real id — the gateway
477
+ // redirects them, same treatment as seed-oss/mistral-large pins.
478
+ "deepseek-free": "free/gpt-oss-120b",
479
+ "deepseek-v4-pro": "free/gpt-oss-120b",
480
+ // free shorthand; pro dead upstream (410)
448
481
  "deepseek-v4-flash": "free/deepseek-v4-flash",
449
- "v4-pro": "free/deepseek-v4-flash",
450
- // V4 Pro NVIDIA hung → flash
482
+ "v4-pro": "free/gpt-oss-120b",
451
483
  "v4-flash": "free/deepseek-v4-flash",
452
484
  "mistral-free": "free/mistral-nemotron",
453
485
  // mistral-large-3-675b EOL'd 2026-07-28 → last live free Mistral (blockrun demoted its /free-mistral primary the same way)
@@ -527,6 +559,10 @@ var init_models = __esm({
527
559
  banana: "google/nano-banana",
528
560
  "banana-pro": "google/nano-banana-pro",
529
561
  "nano-banana-pro": "google/nano-banana-pro",
562
+ // Nano Banana 2 (Gemini 3.1 Flash imagegen, 2026-08-03). Explicit pins —
563
+ // bare `nano-banana`/`banana` stay on the original.
564
+ "nano-banana-2": "google/nano-banana-2",
565
+ "banana-2": "google/nano-banana-2",
530
566
  seedream: "bytedance/seedream-5-pro",
531
567
  "grok-imagine": "xai/grok-imagine-image",
532
568
  "grok-imagine-pro": "xai/grok-imagine-image-pro",
@@ -543,7 +579,12 @@ var init_models = __esm({
543
579
  "seedance-2-fast": "bytedance/seedance-2.0-fast",
544
580
  "seedance-2": "bytedance/seedance-2.0",
545
581
  "seedance-2.5": "bytedance/seedance-2.5",
546
- "seedance-2-5": "bytedance/seedance-2.5"
582
+ "seedance-2-5": "bytedance/seedance-2.5",
583
+ // Seedance 2.0 Mini (2026-08-12): 720p + synced audio at half the flagship
584
+ // rate. Note it is NOT cheaper than 1.5-pro, so bare `seedance` stays put.
585
+ "seedance-2-mini": "bytedance/seedance-2.0-mini",
586
+ "seedance-2.0-mini": "bytedance/seedance-2.0-mini",
587
+ "seedance-mini": "bytedance/seedance-2.0-mini"
547
588
  };
548
589
  BLOCKRUN_MODELS = [
549
590
  // Smart routing meta-models — proxy replaces with actual model
@@ -651,11 +692,12 @@ var init_models = __esm({
651
692
  toolCalling: true
652
693
  },
653
694
  {
695
+ // Terra/Luna repriced 2026-07-30 (OpenAI price cut, blockrun #326).
654
696
  id: "openai/gpt-5.6-terra",
655
697
  name: "GPT-5.6 Terra",
656
698
  version: "5.6",
657
- inputPrice: 2.5,
658
- outputPrice: 15,
699
+ inputPrice: 2,
700
+ outputPrice: 12,
659
701
  contextWindow: 105e4,
660
702
  maxOutput: 128e3,
661
703
  reasoning: true,
@@ -667,10 +709,52 @@ var init_models = __esm({
667
709
  id: "openai/gpt-5.6-luna",
668
710
  name: "GPT-5.6 Luna",
669
711
  version: "5.6",
712
+ inputPrice: 0.2,
713
+ outputPrice: 1.2,
714
+ contextWindow: 105e4,
715
+ maxOutput: 128e3,
716
+ vision: true,
717
+ agentic: true,
718
+ toolCalling: true
719
+ },
720
+ // GPT-5.6 Pro tiers (blockrun #329, 2026-08-03): each base tier with pro
721
+ // reasoning mode. Terra Pro lands at half the standard Terra rate; Luna Pro
722
+ // is the budget deep-reasoning tier.
723
+ {
724
+ id: "openai/gpt-5.6-sol-pro",
725
+ name: "GPT-5.6 Sol Pro",
726
+ version: "5.6",
727
+ inputPrice: 5,
728
+ outputPrice: 30,
729
+ contextWindow: 105e4,
730
+ maxOutput: 128e3,
731
+ reasoning: true,
732
+ vision: true,
733
+ agentic: true,
734
+ toolCalling: true
735
+ },
736
+ {
737
+ id: "openai/gpt-5.6-terra-pro",
738
+ name: "GPT-5.6 Terra Pro",
739
+ version: "5.6",
670
740
  inputPrice: 1,
671
741
  outputPrice: 6,
672
742
  contextWindow: 105e4,
673
743
  maxOutput: 128e3,
744
+ reasoning: true,
745
+ vision: true,
746
+ agentic: true,
747
+ toolCalling: true
748
+ },
749
+ {
750
+ id: "openai/gpt-5.6-luna-pro",
751
+ name: "GPT-5.6 Luna Pro",
752
+ version: "5.6",
753
+ inputPrice: 0.1,
754
+ outputPrice: 0.6,
755
+ contextWindow: 105e4,
756
+ maxOutput: 128e3,
757
+ reasoning: true,
674
758
  vision: true,
675
759
  agentic: true,
676
760
  toolCalling: true
@@ -1074,19 +1158,45 @@ var init_models = __esm({
1074
1158
  toolCalling: true
1075
1159
  },
1076
1160
  {
1077
- // Latest-generation Flash with built-in thinking mode (backend
1078
- // 2026-05-19) — frontier-class quality at Flash pricing.
1161
+ // Newest-generation Flash with built-in thinking mode (blockrun #329,
1162
+ // 2026-08-03). 17% cheaper output than 3.5 Flash.
1163
+ id: "google/gemini-3.6-flash",
1164
+ name: "Gemini 3.6 Flash",
1165
+ version: "3.6",
1166
+ inputPrice: 1.5,
1167
+ outputPrice: 7.5,
1168
+ contextWindow: 1048576,
1169
+ maxOutput: 65536,
1170
+ reasoning: true,
1171
+ vision: true,
1172
+ toolCalling: true
1173
+ },
1174
+ {
1175
+ // Repriced 0.5/3.0 → 1.5/9.0 (blockrun #304: it was billed at 1/3 of
1176
+ // Google's real rate).
1079
1177
  id: "google/gemini-3.5-flash",
1080
1178
  name: "Gemini 3.5 Flash",
1081
1179
  version: "3.5",
1082
- inputPrice: 0.5,
1083
- outputPrice: 3,
1180
+ inputPrice: 1.5,
1181
+ outputPrice: 9,
1084
1182
  contextWindow: 1048576,
1085
1183
  maxOutput: 65536,
1086
1184
  reasoning: true,
1087
1185
  vision: true,
1088
1186
  toolCalling: true
1089
1187
  },
1188
+ {
1189
+ // Ultra-fast lightweight tier with thinking mode (blockrun #329).
1190
+ id: "google/gemini-3.5-flash-lite",
1191
+ name: "Gemini 3.5 Flash Lite",
1192
+ version: "3.5",
1193
+ inputPrice: 0.3,
1194
+ outputPrice: 2.5,
1195
+ contextWindow: 1048576,
1196
+ maxOutput: 65536,
1197
+ reasoning: true,
1198
+ toolCalling: true
1199
+ },
1090
1200
  {
1091
1201
  id: "google/gemini-3-flash-preview",
1092
1202
  name: "Gemini 3 Flash Preview",
@@ -1143,12 +1253,14 @@ var init_models = __esm({
1143
1253
  },
1144
1254
  // DeepSeek — V4 family (2026-04-24). The legacy deepseek-chat/reasoner
1145
1255
  // aliases are served upstream as V4 Flash non-thinking / thinking modes.
1256
+ // Repriced 0.20/0.40 → 0.14/0.28 (blockrun #354: DeepSeek's published
1257
+ // deepseek-v4-flash rate; the old numbers were 1.43x the real rate).
1146
1258
  {
1147
1259
  id: "deepseek/deepseek-chat",
1148
1260
  name: "DeepSeek V4 Flash Chat",
1149
1261
  version: "4-flash",
1150
- inputPrice: 0.2,
1151
- outputPrice: 0.4,
1262
+ inputPrice: 0.14,
1263
+ outputPrice: 0.28,
1152
1264
  contextWindow: 1e6,
1153
1265
  maxOutput: 8192,
1154
1266
  toolCalling: true
@@ -1157,8 +1269,8 @@ var init_models = __esm({
1157
1269
  id: "deepseek/deepseek-reasoner",
1158
1270
  name: "DeepSeek V4 Flash Reasoner",
1159
1271
  version: "4-flash",
1160
- inputPrice: 0.2,
1161
- outputPrice: 0.4,
1272
+ inputPrice: 0.14,
1273
+ outputPrice: 0.28,
1162
1274
  contextWindow: 1e6,
1163
1275
  maxOutput: 8192,
1164
1276
  reasoning: true,
@@ -1237,6 +1349,32 @@ var init_models = __esm({
1237
1349
  agentic: true,
1238
1350
  toolCalling: true
1239
1351
  },
1352
+ // Qwen3.7 Plus/Flash (blockrun #329, 2026-08-03): the balanced and
1353
+ // latency tiers under Max. Plus genuinely caps output at 131072 while
1354
+ // Flash and Max cap at 65536 (endpoint-probed upstream).
1355
+ {
1356
+ id: "qwen/qwen3.7-plus",
1357
+ name: "Qwen3.7 Plus",
1358
+ version: "3.7-plus",
1359
+ inputPrice: 0.32,
1360
+ outputPrice: 1.28,
1361
+ contextWindow: 1e6,
1362
+ maxOutput: 131072,
1363
+ reasoning: true,
1364
+ agentic: true,
1365
+ toolCalling: true
1366
+ },
1367
+ {
1368
+ id: "qwen/qwen3.7-flash",
1369
+ name: "Qwen3.7 Flash",
1370
+ version: "3.7-flash",
1371
+ inputPrice: 0.03,
1372
+ outputPrice: 0.13,
1373
+ contextWindow: 1e6,
1374
+ maxOutput: 65536,
1375
+ reasoning: true,
1376
+ toolCalling: true
1377
+ },
1240
1378
  // Kimi K2.6 — superseded by K2.7 (2026-06-13), hidden on BlockRun but still routable.
1241
1379
  {
1242
1380
  id: "moonshot/kimi-k2.6",
@@ -1448,6 +1586,34 @@ var init_models = __esm({
1448
1586
  agentic: true,
1449
1587
  toolCalling: true
1450
1588
  },
1589
+ // Tencent + Xiaomi (blockrun 2026-07-25): the two largest real demand gaps
1590
+ // in the catalog — Hy3 held the #1 usage slot on the biggest public
1591
+ // aggregator for 19 days; MiMo ran ~22% weekly share in April. Both are
1592
+ // reasoning models resold via blockrun's OpenRouter pool. toolCalling
1593
+ // LIVE-VERIFIED 2026-08-12: both returned a structured tool_calls array
1594
+ // (name + valid JSON args, finish_reason "tool_calls") through the gateway.
1595
+ {
1596
+ id: "tencent/hy3",
1597
+ name: "Tencent Hy3",
1598
+ version: "hy3",
1599
+ inputPrice: 0.132,
1600
+ outputPrice: 0.528,
1601
+ contextWindow: 262144,
1602
+ maxOutput: 128e3,
1603
+ reasoning: true,
1604
+ toolCalling: true
1605
+ },
1606
+ {
1607
+ id: "xiaomi/mimo-v2.5-pro",
1608
+ name: "Xiaomi MiMo-V2.5 Pro",
1609
+ version: "v2.5-pro",
1610
+ inputPrice: 0.435,
1611
+ outputPrice: 0.87,
1612
+ contextWindow: 1048576,
1613
+ maxOutput: 131072,
1614
+ reasoning: true,
1615
+ toolCalling: true
1616
+ },
1451
1617
  // MiniMax
1452
1618
  {
1453
1619
  id: "minimax/minimax-m3",
@@ -1521,11 +1687,13 @@ var init_models = __esm({
1521
1687
  maxOutput: 16384
1522
1688
  },
1523
1689
  {
1524
- // V4 Flash: 284B / 13B active MoE, 1M context. ~5x faster than V4 Pro.
1525
- // Strong on chat/summarization (MMLU-Pro 86.2). Caveat: weaker factual
1526
- // recall (SimpleQA 34% vs Pro's 58%) — pick V4 Pro for fact-heavy loops.
1527
- // Recovered in blockrun's 2026-07-17 live re-probe (3.2s both passes) —
1528
- // un-hidden upstream and back in the advertised free 8.
1690
+ // V4 Flash: 284B / 13B active MoE, 1M context. EOL'd 2026-08-12 — NVIDIA
1691
+ // published 410 Gone ("has reached its end of life") on both probe passes
1692
+ // and blockrun's prod gate fired [ALERT][free-model-dead] kind=gone twice
1693
+ // that morning. The whole nvidia/deepseek-* family is dead upstream; there
1694
+ // is no free DeepSeek left anywhere. Blockrun hid it and redirects calls to
1695
+ // gpt-oss-120b. Entry kept so explicit pins stay routable; off the picker,
1696
+ // the FREE_MODELS cascade, and the router fallback chains.
1529
1697
  id: "free/deepseek-v4-flash",
1530
1698
  name: "[Free] DeepSeek V4 Flash",
1531
1699
  version: "v4-flash",
@@ -1609,7 +1777,8 @@ var init_models = __esm({
1609
1777
  // 2026-06-16: BlockRun's 2026-06-14 free-tier refresh (self-healing health gate
1610
1778
  // + probe-verified lineup, blockrun commit 5817ecd) added these live NVIDIA free
1611
1779
  // models. Status per blockrun's 2026-07-17 live re-probe: qwen3-coder-480b and
1612
- // glm-4.7 stay dead (server-redirected); deepseek-v4-flash recovered (see above).
1780
+ // glm-4.7 stay dead (server-redirected); deepseek-v4-flash recovered then
1781
+ // EOL'd for good 2026-08-12 (see above).
1613
1782
  {
1614
1783
  // Qwen3-Next 80B (A3B active MoE): 262K context. DIED in the 2026-07-17
1615
1784
  // re-probe (">60s / DEGRADED") — hidden upstream, gateway redirects pinned
@@ -1714,11 +1883,12 @@ var init_models = __esm({
1714
1883
  },
1715
1884
  {
1716
1885
  // Flat-rate launch promo ended 2026-06-06 — backend bills per-token now.
1886
+ // Repriced 0.60/1.92 → 1.00/3.20 (blockrun #354 correction).
1717
1887
  id: "zai/glm-5",
1718
1888
  name: "GLM-5",
1719
1889
  version: "5",
1720
- inputPrice: 0.6,
1721
- outputPrice: 1.92,
1890
+ inputPrice: 1,
1891
+ outputPrice: 3.2,
1722
1892
  contextWindow: 2e5,
1723
1893
  maxOutput: 128e3,
1724
1894
  reasoning: true,
@@ -35215,6 +35385,21 @@ function applyPromotions(tierConfigs, promotions, profile, now2 = /* @__PURE__ *
35215
35385
  }
35216
35386
  return result;
35217
35387
  }
35388
+ function applyUnavailableModels(tierConfigs, unavailableModels) {
35389
+ if (!unavailableModels || unavailableModels.length === 0) return tierConfigs;
35390
+ const dead = new Set(unavailableModels);
35391
+ let result = tierConfigs;
35392
+ for (const tier of Object.keys(tierConfigs)) {
35393
+ const config = tierConfigs[tier];
35394
+ const alive = [config.primary, ...config.fallback].filter((model) => !dead.has(model));
35395
+ if (alive.length === 0 || alive[0] === config.primary && alive.length === config.fallback.length + 1) {
35396
+ continue;
35397
+ }
35398
+ if (result === tierConfigs) result = { ...tierConfigs };
35399
+ result[tier] = { primary: alive[0], fallback: alive.slice(1) };
35400
+ }
35401
+ return result;
35402
+ }
35218
35403
  function getStrategy(name) {
35219
35404
  const strategy = registry.get(name);
35220
35405
  if (!strategy) {
@@ -35912,6 +36097,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
35912
36097
  profile = useAgenticTiers ? "agentic" : "auto";
35913
36098
  }
35914
36099
  tierConfigs = applyPromotions(tierConfigs, config.promotions, profile, options.now);
36100
+ tierConfigs = applyUnavailableModels(tierConfigs, options.unavailableModels);
35915
36101
  const agenticScoreValue = ruleResult.agenticScore;
35916
36102
  if (estimatedTokens > config.overrides.maxTokensForceComplex) {
35917
36103
  const decision2 = selectModel(
@@ -36040,18 +36226,6 @@ ${value.slice(-(scanLimit - prefixLength))}`;
36040
36226
  supportsTools: false,
36041
36227
  supportsVision: false
36042
36228
  },
36043
- "free/gpt-oss-120b": {
36044
- contextWindow: 128e3,
36045
- maxOutputTokens: 16384,
36046
- supportsTools: false,
36047
- supportsVision: false
36048
- },
36049
- "free/gpt-oss-20b": {
36050
- contextWindow: 128e3,
36051
- maxOutputTokens: 16384,
36052
- supportsTools: false,
36053
- supportsVision: false
36054
- },
36055
36229
  "free/seed-oss-36b": {
36056
36230
  contextWindow: 131072,
36057
36231
  maxOutputTokens: 16384,
@@ -36124,6 +36298,18 @@ ${value.slice(-(scanLimit - prefixLength))}`;
36124
36298
  supportsTools: true,
36125
36299
  supportsVision: true
36126
36300
  },
36301
+ "nvidia/nemotron-nano-9b-v2": {
36302
+ contextWindow: 131072,
36303
+ maxOutputTokens: 16384,
36304
+ supportsTools: false,
36305
+ supportsVision: false
36306
+ },
36307
+ "nvidia/step-3.7-flash": {
36308
+ contextWindow: 131072,
36309
+ maxOutputTokens: 16384,
36310
+ supportsTools: false,
36311
+ supportsVision: false
36312
+ },
36127
36313
  "openai/gpt-4.1": {
36128
36314
  contextWindow: 128e3,
36129
36315
  maxOutputTokens: 16384,
@@ -36597,9 +36783,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
36597
36783
  const targetTier = (features.taskType === "reasoning_mcq" || features.taskType === "reasoning_math") && (base3.tier === "SIMPLE" || base3.tier === "MEDIUM") ? "REASONING" : base3.tier;
36598
36784
  const tierConfig = tierConfigs[targetTier];
36599
36785
  const configuredCandidates = tierConfig ? getFallbackChain(targetTier, tierConfigs) : [];
36786
+ const unavailable = new Set(options.unavailableModels ?? []);
36600
36787
  const chain3 = [
36601
36788
  .../* @__PURE__ */ new Set([...configuredCandidates, ...evidenceCandidates(features.taskType)])
36602
- ].filter((model2) => typeof model2 === "string" && model2.length > 0);
36789
+ ].filter(
36790
+ (model2) => typeof model2 === "string" && model2.length > 0 && !unavailable.has(model2)
36791
+ );
36603
36792
  const eligible = chain3.filter(
36604
36793
  (model2) => isEligible(model2, features, maxOutputTokens, options)
36605
36794
  );
@@ -36676,13 +36865,7 @@ ${value.slice(-(scanLimit - prefixLength))}`;
36676
36865
  ...eligibleCandidates.filter(
36677
36866
  (model2) => !scoredModels.includes(model2) && !webResearchFallbackOrder.includes(model2)
36678
36867
  )
36679
- ] : features.taskType === "tool_agent" || features.taskType === "tool_agent_parallel" && features.agentDomain !== "other" ? [
36680
- ...scoredModels,
36681
- ...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))
36682
- ] : [
36683
- ...scoredModels,
36684
- ...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))
36685
- ];
36868
+ ] : [...scoredModels, ...eligibleCandidates.filter((model2) => !scoredModels.includes(model2))];
36686
36869
  const model = ranked[0] ?? base3.model;
36687
36870
  const selectedTierConfigs = {
36688
36871
  ...tierConfigs,
@@ -37794,8 +37977,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37794
37977
  // $0.20/$1.25, 1M context
37795
37978
  "xai/grok-4-fast-non-reasoning",
37796
37979
  // 1,143ms, $0.20/$0.50 — fast fallback
37797
- "free/gpt-oss-120b"
37798
- // 1,252ms, FREE fallback (hidden from /v1/models but direct calls work)
37980
+ "nvidia/step-3.7-flash"
37981
+ // FREE backstop — new NVIDIA free tier (gpt-oss-120b now 400s; probed 2026-08-21)
37799
37982
  ]
37800
37983
  },
37801
37984
  MEDIUM: {
@@ -37868,15 +38051,15 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37868
38051
  // Eco tier configs - absolute cheapest (blockrun/eco)
37869
38052
  ecoTiers: {
37870
38053
  SIMPLE: {
37871
- primary: "free/gpt-oss-120b",
37872
- // FREE! $0.00/$0.00 — heavy user default
38054
+ primary: "nvidia/step-3.7-flash",
38055
+ // FREE! $0.00/$0.00 — new NVIDIA free tier flagship
37873
38056
  fallback: [
37874
- "free/gpt-oss-20b",
37875
- // FREE — smaller, faster
37876
- "free/deepseek-v4-flash",
37877
- // FREE — 1M ctx; slow (~10 tok/s, 07-28 probe) but completes
37878
- // seed-oss-36b sat here as the free coder until it EOL'd 2026-08-03 (HTTP 410).
37879
- // gpt-oss-120b/20b already head this chain, so the rung is dropped, not retargeted.
38057
+ "nvidia/nemotron-nano-9b-v2",
38058
+ // FREE — compact + fast (~0.7s), high-volume light tasks
38059
+ // This head keeps rotting with NVIDIA's free hosting: deepseek-v4-flash
38060
+ // (410, 2026-08-12), seed-oss-36b (410, 2026-08-03), then gpt-oss-120b/20b
38061
+ // (400 Unknown model, probed 2026-08-21). Each retirement retargets the
38062
+ // two free rungs to the current free tier; the paid rungs below never move.
37880
38063
  "google/gemini-3.1-flash-lite",
37881
38064
  // $0.25/$1.50 — newest flash-lite
37882
38065
  "openai/gpt-5.4-nano",
@@ -37993,8 +38176,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
37993
38176
  "openai/gpt-5.3-codex",
37994
38177
  "deepseek/deepseek-chat",
37995
38178
  // Cheap, reliable
37996
- "free/gpt-oss-120b"
37997
- // NVIDIA free ultimate backstop (was seed-oss-36b; EOL'd 2026-08-03)
38179
+ "nvidia/step-3.7-flash"
38180
+ // NVIDIA free ultimate backstop (was gpt-oss-120b; 400s since ~2026-08)
37998
38181
  ]
37999
38182
  },
38000
38183
  REASONING: {
@@ -38083,8 +38266,8 @@ ${value.slice(-(scanLimit - prefixLength))}`;
38083
38266
  // Previous flagship — 6,213ms, reliable
38084
38267
  "deepseek/deepseek-chat",
38085
38268
  // 1,431ms — cheap, reliable
38086
- "free/gpt-oss-120b"
38087
- // NVIDIA free ultimate backstop (was seed-oss-36b; EOL'd 2026-08-03)
38269
+ "nvidia/step-3.7-flash"
38270
+ // NVIDIA free ultimate backstop (was gpt-oss-120b; 400s since ~2026-08)
38088
38271
  ]
38089
38272
  },
38090
38273
  REASONING: {
@@ -57622,6 +57805,14 @@ Then run: npx @blockrun/clawrouter`
57622
57805
  solanaAddress = await getSolanaAddress(derived.solanaPrivateKeyBytes);
57623
57806
  } catch {
57624
57807
  }
57808
+ let solanaDefaultSaved = false;
57809
+ if (solanaAddress) {
57810
+ try {
57811
+ await savePaymentChain("solana");
57812
+ solanaDefaultSaved = true;
57813
+ } catch {
57814
+ }
57815
+ }
57625
57816
  console.log(`[ClawRouter]`);
57626
57817
  console.log(`[ClawRouter] \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550`);
57627
57818
  console.log(`[ClawRouter] NEW WALLET GENERATED \u2014 BACK UP YOUR KEY NOW`);
@@ -57634,6 +57825,12 @@ Then run: npx @blockrun/clawrouter`
57634
57825
  console.log(`[ClawRouter] Mnemonic : ${MNEMONIC_FILE}`);
57635
57826
  console.log(`[ClawRouter]`);
57636
57827
  console.log(`[ClawRouter] Both EVM (Base) and Solana wallets are ready.`);
57828
+ if (solanaDefaultSaved) {
57829
+ console.log(
57830
+ `[ClawRouter] Default payment chain: Solana \u2014 fund the Solana address above with USDC.`
57831
+ );
57832
+ console.log(`[ClawRouter] To switch to Base, run in OpenClaw: /wallet base`);
57833
+ }
57637
57834
  console.log(`[ClawRouter] To back up, run in OpenClaw:`);
57638
57835
  console.log(`[ClawRouter] /wallet export`);
57639
57836
  console.log(`[ClawRouter]`);
@@ -92407,8 +92604,6 @@ var init_proxy = __esm({
92407
92604
  FREE_MODELS = /* @__PURE__ */ new Set([
92408
92605
  "free/gpt-oss-120b",
92409
92606
  "free/gpt-oss-20b",
92410
- "free/deepseek-v4-flash",
92411
- // 1M ctx; slow (~10 tok/s, 07-28 probe) but completes
92412
92607
  "free/mistral-nemotron",
92413
92608
  // strong instruction following
92414
92609
  "free/step-3.7-flash",
@@ -92505,6 +92700,8 @@ var init_proxy = __esm({
92505
92700
  sizes: { "1024x1024": 0.045, "2048x1024": 0.045, "2048x2048": 0.09 }
92506
92701
  },
92507
92702
  "google/nano-banana": { default: 0.05 },
92703
+ // Nano Banana 2 (Gemini 3.1 Flash imagegen, blockrun #329): $0.09/image at 1K.
92704
+ "google/nano-banana-2": { default: 0.09, sizes: { "1024x1024": 0.09 } },
92508
92705
  "google/nano-banana-pro": {
92509
92706
  default: 0.1,
92510
92707
  sizes: { "1024x1024": 0.1, "2048x2048": 0.1, "4096x4096": 0.15 }
@@ -92538,6 +92735,13 @@ var init_proxy = __esm({
92538
92735
  pricePerSecond: 0.227,
92539
92736
  defaultDurationSeconds: 5
92540
92737
  },
92738
+ // Seedance 2.0 Mini (blockrun #366/#368, 2026-08-12): 720p + synced audio at
92739
+ // half the flagship rate, 480p/720p only, 4–15s. blockrun signs the 3dp-floored
92740
+ // per-second value (0.079, not the raw 0.0797) — mirror the signed number.
92741
+ "bytedance/seedance-2.0-mini": {
92742
+ pricePerSecond: 0.079,
92743
+ defaultDurationSeconds: 5
92744
+ },
92541
92745
  // Seedance 2.5: 720p with synced audio, up to 30s. Not a replacement for 2.0
92542
92746
  // Pro — that is still the one for 1080p/4K. No OpenRouter failover exists for
92543
92747
  // 2.5, so a token360 outage surfaces as an error instead of quietly rendering
@@ -225819,6 +226023,7 @@ function buildVideoGenerationProvider() {
225819
226023
  "bytedance/seedance-1.5-pro",
225820
226024
  "bytedance/seedance-2.0-fast",
225821
226025
  "bytedance/seedance-2.0",
226026
+ "bytedance/seedance-2.0-mini",
225822
226027
  "bytedance/seedance-2.5"
225823
226028
  ],
225824
226029
  capabilities: {
@@ -226319,7 +226524,7 @@ var init_index = __esm({
226319
226524
  const parsed = parseGenArgs(ctx.args ?? "");
226320
226525
  if (!parsed.prompt) {
226321
226526
  return {
226322
- text: "Usage: `/cr-imagegen <prompt> [--model=<alias>] [--size=1024x1024] [--n=1]`\n\nAliases: `nano-banana` (default), `banana-pro`, `dalle`, `gpt-image`, `flux`, `grok-imagine`, `grok-imagine-pro`, `cogview`."
226527
+ text: "Usage: `/cr-imagegen <prompt> [--model=<alias>] [--size=1024x1024] [--n=1]`\n\nAliases: `nano-banana` (default), `banana-2` (Gemini 3.1 Flash quality), `banana-pro`, `dalle`, `gpt-image`, `flux`, `grok-imagine`, `grok-imagine-pro`, `cogview`."
226323
226528
  };
226324
226529
  }
226325
226530
  const model = resolveModelAlias(parsed.model ?? "nano-banana");
@@ -226371,7 +226576,7 @@ ${errText}`
226371
226576
  const parsed = parseGenArgs(ctx.args ?? "");
226372
226577
  if (!parsed.prompt) {
226373
226578
  return {
226374
- text: "Usage: `/videogen <prompt> [--model=<alias>] [--duration=5|8|10]`\n\nAliases: `seedance` (1.5-pro, default \u2014 cheapest), `seedance-2-fast`, `seedance-2`, `seedance-2.5` (720p + synced audio, long-form), `grok-video`.\n\n\u23F1\uFE0F Generation takes 60\u2013180 seconds. Payment settles only on success."
226579
+ text: "Usage: `/videogen <prompt> [--model=<alias>] [--duration=5|8|10]`\n\nAliases: `seedance` (1.5-pro, default \u2014 cheapest), `seedance-2-fast`, `seedance-2`, `seedance-2-mini` (720p + audio, half the flagship rate), `seedance-2.5` (720p + synced audio, long-form), `grok-video`.\n\n\u23F1\uFE0F Generation takes 60\u2013180 seconds. Payment settles only on success."
226375
226580
  };
226376
226581
  }
226377
226582
  const model = resolveModelAlias(parsed.model ?? "seedance");