@blockrun/clawrouter 0.9.30 → 0.9.32
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/cli.js +55 -67
- package/dist/cli.js.map +1 -1
- package/dist/index.js +57 -69
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/reinstall.sh +25 -3
- package/scripts/uninstall.sh +23 -1
package/dist/index.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
// src/models.ts
|
|
2
2
|
var MODEL_ALIASES = {
|
|
3
|
-
// Claude - short names (
|
|
4
|
-
claude: "
|
|
5
|
-
sonnet: "
|
|
6
|
-
opus: "
|
|
7
|
-
"opus-
|
|
8
|
-
|
|
9
|
-
haiku: "anthropic/claude-haiku-4-5",
|
|
3
|
+
// Claude - short names (backend uses bare model names without anthropic/ prefix)
|
|
4
|
+
claude: "claude-sonnet-4",
|
|
5
|
+
sonnet: "claude-sonnet-4",
|
|
6
|
+
opus: "claude-opus-4",
|
|
7
|
+
"opus-4": "claude-opus-4",
|
|
8
|
+
haiku: "claude-haiku-4.5",
|
|
10
9
|
// Claude - provider/shortname patterns (common in agent frameworks)
|
|
11
|
-
"anthropic/sonnet": "
|
|
12
|
-
"anthropic/opus": "
|
|
13
|
-
"anthropic/haiku": "
|
|
14
|
-
"anthropic/claude": "
|
|
15
|
-
// Backward compatibility -
|
|
16
|
-
"anthropic/claude-sonnet-4
|
|
17
|
-
"anthropic/claude-
|
|
18
|
-
"anthropic/claude-
|
|
19
|
-
"anthropic/claude-
|
|
20
|
-
|
|
21
|
-
"anthropic/claude-
|
|
22
|
-
"anthropic/claude-
|
|
23
|
-
"anthropic/claude-haiku-4": "
|
|
10
|
+
"anthropic/sonnet": "claude-sonnet-4",
|
|
11
|
+
"anthropic/opus": "claude-opus-4",
|
|
12
|
+
"anthropic/haiku": "claude-haiku-4.5",
|
|
13
|
+
"anthropic/claude": "claude-sonnet-4",
|
|
14
|
+
// Backward compatibility - various formats all route to backend names
|
|
15
|
+
"anthropic/claude-sonnet-4": "claude-sonnet-4",
|
|
16
|
+
"anthropic/claude-sonnet-4-6": "claude-sonnet-4",
|
|
17
|
+
"anthropic/claude-sonnet-4.6": "claude-sonnet-4",
|
|
18
|
+
"anthropic/claude-opus-4": "claude-opus-4",
|
|
19
|
+
"anthropic/claude-opus-4-6": "claude-opus-4",
|
|
20
|
+
"anthropic/claude-opus-4.6": "claude-opus-4",
|
|
21
|
+
"anthropic/claude-haiku-4": "claude-haiku-4.5",
|
|
22
|
+
"anthropic/claude-haiku-4-5": "claude-haiku-4.5",
|
|
23
|
+
"anthropic/claude-haiku-4.5": "claude-haiku-4.5",
|
|
24
24
|
// OpenAI
|
|
25
25
|
gpt: "openai/gpt-4o",
|
|
26
26
|
gpt4: "openai/gpt-4o",
|
|
@@ -211,8 +211,9 @@ var BLOCKRUN_MODELS = [
|
|
|
211
211
|
reasoning: true
|
|
212
212
|
},
|
|
213
213
|
// Anthropic - all Claude models excel at agentic workflows
|
|
214
|
+
// Backend uses bare model names (claude-sonnet-4, not anthropic/claude-sonnet-4-6)
|
|
214
215
|
{
|
|
215
|
-
id: "
|
|
216
|
+
id: "claude-haiku-4.5",
|
|
216
217
|
name: "Claude Haiku 4.5",
|
|
217
218
|
inputPrice: 1,
|
|
218
219
|
outputPrice: 5,
|
|
@@ -221,7 +222,7 @@ var BLOCKRUN_MODELS = [
|
|
|
221
222
|
agentic: true
|
|
222
223
|
},
|
|
223
224
|
{
|
|
224
|
-
id: "
|
|
225
|
+
id: "claude-sonnet-4",
|
|
225
226
|
name: "Claude Sonnet 4.6",
|
|
226
227
|
inputPrice: 3,
|
|
227
228
|
outputPrice: 15,
|
|
@@ -231,8 +232,8 @@ var BLOCKRUN_MODELS = [
|
|
|
231
232
|
agentic: true
|
|
232
233
|
},
|
|
233
234
|
{
|
|
234
|
-
id: "
|
|
235
|
-
name: "Claude Opus 4",
|
|
235
|
+
id: "claude-opus-4",
|
|
236
|
+
name: "Claude Opus 4.6",
|
|
236
237
|
inputPrice: 15,
|
|
237
238
|
outputPrice: 75,
|
|
238
239
|
contextWindow: 2e5,
|
|
@@ -240,27 +241,6 @@ var BLOCKRUN_MODELS = [
|
|
|
240
241
|
reasoning: true,
|
|
241
242
|
agentic: true
|
|
242
243
|
},
|
|
243
|
-
{
|
|
244
|
-
id: "anthropic/claude-opus-4-5",
|
|
245
|
-
name: "Claude Opus 4.5",
|
|
246
|
-
inputPrice: 5,
|
|
247
|
-
outputPrice: 25,
|
|
248
|
-
contextWindow: 2e5,
|
|
249
|
-
maxOutput: 32e3,
|
|
250
|
-
reasoning: true,
|
|
251
|
-
agentic: true
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
id: "anthropic/claude-opus-4-6",
|
|
255
|
-
name: "Claude Opus 4.6",
|
|
256
|
-
inputPrice: 5,
|
|
257
|
-
outputPrice: 25,
|
|
258
|
-
contextWindow: 2e5,
|
|
259
|
-
maxOutput: 64e3,
|
|
260
|
-
reasoning: true,
|
|
261
|
-
vision: true,
|
|
262
|
-
agentic: true
|
|
263
|
-
},
|
|
264
244
|
// Google
|
|
265
245
|
{
|
|
266
246
|
id: "google/gemini-3-pro-preview",
|
|
@@ -1738,7 +1718,7 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1738
1718
|
"openai/gpt-5.2",
|
|
1739
1719
|
// Newer and cheaper input than gpt-4o
|
|
1740
1720
|
"openai/gpt-4o",
|
|
1741
|
-
"
|
|
1721
|
+
"claude-sonnet-4"
|
|
1742
1722
|
]
|
|
1743
1723
|
},
|
|
1744
1724
|
REASONING: {
|
|
@@ -1801,7 +1781,7 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1801
1781
|
SIMPLE: {
|
|
1802
1782
|
primary: "moonshot/kimi-k2.5",
|
|
1803
1783
|
// $0.50/$2.40 - good for simple coding
|
|
1804
|
-
fallback: ["
|
|
1784
|
+
fallback: ["claude-haiku-4.5", "google/gemini-2.5-flash", "xai/grok-code-fast-1"]
|
|
1805
1785
|
},
|
|
1806
1786
|
MEDIUM: {
|
|
1807
1787
|
primary: "openai/gpt-5.2-codex",
|
|
@@ -1810,26 +1790,26 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1810
1790
|
"moonshot/kimi-k2.5",
|
|
1811
1791
|
"google/gemini-2.5-pro",
|
|
1812
1792
|
"xai/grok-4-0709",
|
|
1813
|
-
"
|
|
1793
|
+
"claude-sonnet-4"
|
|
1814
1794
|
]
|
|
1815
1795
|
},
|
|
1816
1796
|
COMPLEX: {
|
|
1817
|
-
primary: "
|
|
1797
|
+
primary: "claude-opus-4",
|
|
1818
1798
|
// Best quality for complex tasks
|
|
1819
1799
|
fallback: [
|
|
1820
1800
|
"openai/gpt-5.2-codex",
|
|
1821
|
-
"
|
|
1822
|
-
"
|
|
1801
|
+
"claude-opus-4",
|
|
1802
|
+
"claude-sonnet-4",
|
|
1823
1803
|
"google/gemini-3-pro-preview",
|
|
1824
1804
|
"moonshot/kimi-k2.5"
|
|
1825
1805
|
]
|
|
1826
1806
|
},
|
|
1827
1807
|
REASONING: {
|
|
1828
|
-
primary: "
|
|
1808
|
+
primary: "claude-sonnet-4",
|
|
1829
1809
|
// $3/$15 - best for reasoning/instructions
|
|
1830
1810
|
fallback: [
|
|
1831
|
-
"
|
|
1832
|
-
"
|
|
1811
|
+
"claude-opus-4",
|
|
1812
|
+
"claude-opus-4",
|
|
1833
1813
|
"openai/o4-mini",
|
|
1834
1814
|
// Newer and cheaper than o3 ($1.10 vs $2.00)
|
|
1835
1815
|
"openai/o3",
|
|
@@ -1845,7 +1825,7 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1845
1825
|
fallback: [
|
|
1846
1826
|
"minimax/minimax-m2.5",
|
|
1847
1827
|
// $0.30/$1.20 - agentic capable, cheaper than kimi
|
|
1848
|
-
"
|
|
1828
|
+
"claude-haiku-4.5",
|
|
1849
1829
|
"xai/grok-4-1-fast-non-reasoning",
|
|
1850
1830
|
"openai/gpt-4o-mini"
|
|
1851
1831
|
]
|
|
@@ -1857,14 +1837,14 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1857
1837
|
"minimax/minimax-m2.5",
|
|
1858
1838
|
// $0.30/$1.20 - agentic capable
|
|
1859
1839
|
"moonshot/kimi-k2.5",
|
|
1860
|
-
"
|
|
1861
|
-
"
|
|
1840
|
+
"claude-haiku-4.5",
|
|
1841
|
+
"claude-sonnet-4"
|
|
1862
1842
|
]
|
|
1863
1843
|
},
|
|
1864
1844
|
COMPLEX: {
|
|
1865
|
-
primary: "
|
|
1845
|
+
primary: "claude-sonnet-4",
|
|
1866
1846
|
fallback: [
|
|
1867
|
-
"
|
|
1847
|
+
"claude-opus-4",
|
|
1868
1848
|
// Latest Opus - best agentic
|
|
1869
1849
|
"minimax/minimax-m2.5",
|
|
1870
1850
|
// $0.30/$1.20 - cheap agentic fallback
|
|
@@ -1874,10 +1854,10 @@ var DEFAULT_ROUTING_CONFIG = {
|
|
|
1874
1854
|
]
|
|
1875
1855
|
},
|
|
1876
1856
|
REASONING: {
|
|
1877
|
-
primary: "
|
|
1857
|
+
primary: "claude-sonnet-4",
|
|
1878
1858
|
// Strong tool use + reasoning for agentic tasks
|
|
1879
1859
|
fallback: [
|
|
1880
|
-
"
|
|
1860
|
+
"claude-opus-4",
|
|
1881
1861
|
"minimax/minimax-m2.5",
|
|
1882
1862
|
// $0.30/$1.20 - reasoning + agentic
|
|
1883
1863
|
"xai/grok-4-1-fast-reasoning",
|
|
@@ -4212,6 +4192,19 @@ function buildModelPricing() {
|
|
|
4212
4192
|
}
|
|
4213
4193
|
return map;
|
|
4214
4194
|
}
|
|
4195
|
+
function buildProxyModelList(createdAt = Math.floor(Date.now() / 1e3)) {
|
|
4196
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4197
|
+
return OPENCLAW_MODELS.filter((model) => {
|
|
4198
|
+
if (seen.has(model.id)) return false;
|
|
4199
|
+
seen.add(model.id);
|
|
4200
|
+
return true;
|
|
4201
|
+
}).map((model) => ({
|
|
4202
|
+
id: model.id,
|
|
4203
|
+
object: "model",
|
|
4204
|
+
created: createdAt,
|
|
4205
|
+
owned_by: model.id.includes("/") ? model.id.split("/")[0] ?? "blockrun" : "blockrun"
|
|
4206
|
+
}));
|
|
4207
|
+
}
|
|
4215
4208
|
function mergeRoutingConfig(overrides) {
|
|
4216
4209
|
if (!overrides) return DEFAULT_ROUTING_CONFIG;
|
|
4217
4210
|
return {
|
|
@@ -4337,12 +4330,7 @@ async function startProxy(options) {
|
|
|
4337
4330
|
return;
|
|
4338
4331
|
}
|
|
4339
4332
|
if (req.url === "/v1/models" && req.method === "GET") {
|
|
4340
|
-
const models =
|
|
4341
|
-
id: m.id,
|
|
4342
|
-
object: "model",
|
|
4343
|
-
created: Math.floor(Date.now() / 1e3),
|
|
4344
|
-
owned_by: m.id.split("/")[0] || "unknown"
|
|
4345
|
-
}));
|
|
4333
|
+
const models = buildProxyModelList();
|
|
4346
4334
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
4347
4335
|
res.end(JSON.stringify({ object: "list", data: models }));
|
|
4348
4336
|
return;
|
|
@@ -5488,8 +5476,8 @@ function injectModelsConfig(logger) {
|
|
|
5488
5476
|
{ id: "eco", alias: "eco" },
|
|
5489
5477
|
{ id: "premium", alias: "premium" },
|
|
5490
5478
|
{ id: "free", alias: "free" },
|
|
5491
|
-
{ id: "sonnet", alias: "
|
|
5492
|
-
{ id: "opus", alias: "
|
|
5479
|
+
{ id: "sonnet", alias: "sonnet" },
|
|
5480
|
+
{ id: "opus", alias: "opus" },
|
|
5493
5481
|
{ id: "haiku", alias: "haiku" },
|
|
5494
5482
|
{ id: "gpt5", alias: "gpt5" },
|
|
5495
5483
|
{ id: "codex", alias: "codex" },
|