@blockrun/clawrouter 0.7.0 → 0.8.1
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 +1 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.js +126 -65
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3502,80 +3502,138 @@ function isCompletionMode() {
|
|
|
3502
3502
|
return args.some((arg, i) => arg === "completion" && i >= 1 && i <= 3);
|
|
3503
3503
|
}
|
|
3504
3504
|
function injectModelsConfig(logger) {
|
|
3505
|
-
const
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3505
|
+
const configDir = join5(homedir4(), ".openclaw");
|
|
3506
|
+
const configPath = join5(configDir, "openclaw.json");
|
|
3507
|
+
let config = {};
|
|
3508
|
+
let needsWrite = false;
|
|
3509
|
+
if (!existsSync(configDir)) {
|
|
3510
|
+
try {
|
|
3511
|
+
mkdirSync(configDir, { recursive: true });
|
|
3512
|
+
logger.info("Created OpenClaw config directory");
|
|
3513
|
+
} catch (err) {
|
|
3514
|
+
logger.info(`Failed to create config dir: ${err instanceof Error ? err.message : String(err)}`);
|
|
3515
|
+
return;
|
|
3516
|
+
}
|
|
3509
3517
|
}
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
if (!config.models.providers.blockrun) {
|
|
3518
|
-
config.models.providers.blockrun = {
|
|
3519
|
-
baseUrl: expectedBaseUrl,
|
|
3520
|
-
api: "openai-completions",
|
|
3521
|
-
// apiKey is required by pi-coding-agent's ModelRegistry for providers with models.
|
|
3522
|
-
// We use a placeholder since the proxy handles real x402 auth internally.
|
|
3523
|
-
apiKey: "x402-proxy-handles-auth",
|
|
3524
|
-
models: OPENCLAW_MODELS
|
|
3525
|
-
};
|
|
3526
|
-
needsWrite = true;
|
|
3527
|
-
} else {
|
|
3528
|
-
if (config.models.providers.blockrun.baseUrl !== expectedBaseUrl) {
|
|
3529
|
-
config.models.providers.blockrun.baseUrl = expectedBaseUrl;
|
|
3530
|
-
needsWrite = true;
|
|
3531
|
-
}
|
|
3532
|
-
if (!config.models.providers.blockrun.apiKey) {
|
|
3533
|
-
config.models.providers.blockrun.apiKey = "x402-proxy-handles-auth";
|
|
3534
|
-
needsWrite = true;
|
|
3535
|
-
}
|
|
3536
|
-
const currentModels = config.models.providers.blockrun.models;
|
|
3537
|
-
if (!currentModels || currentModels.length !== OPENCLAW_MODELS.length) {
|
|
3538
|
-
config.models.providers.blockrun.models = OPENCLAW_MODELS;
|
|
3518
|
+
if (existsSync(configPath)) {
|
|
3519
|
+
try {
|
|
3520
|
+
const content = readFileSync(configPath, "utf-8").trim();
|
|
3521
|
+
if (content) {
|
|
3522
|
+
config = JSON.parse(content);
|
|
3523
|
+
} else {
|
|
3524
|
+
logger.info("OpenClaw config is empty, initializing");
|
|
3539
3525
|
needsWrite = true;
|
|
3540
3526
|
}
|
|
3527
|
+
} catch (err) {
|
|
3528
|
+
logger.info(`Failed to parse config (will recreate): ${err instanceof Error ? err.message : String(err)}`);
|
|
3529
|
+
config = {};
|
|
3530
|
+
needsWrite = true;
|
|
3541
3531
|
}
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3532
|
+
} else {
|
|
3533
|
+
logger.info("OpenClaw config not found, creating");
|
|
3534
|
+
needsWrite = true;
|
|
3535
|
+
}
|
|
3536
|
+
if (!config.models) {
|
|
3537
|
+
config.models = {};
|
|
3538
|
+
needsWrite = true;
|
|
3539
|
+
}
|
|
3540
|
+
const models = config.models;
|
|
3541
|
+
if (!models.providers) {
|
|
3542
|
+
models.providers = {};
|
|
3543
|
+
needsWrite = true;
|
|
3544
|
+
}
|
|
3545
|
+
const proxyPort = getProxyPort();
|
|
3546
|
+
const expectedBaseUrl = `http://127.0.0.1:${proxyPort}/v1`;
|
|
3547
|
+
const providers = models.providers;
|
|
3548
|
+
if (!providers.blockrun) {
|
|
3549
|
+
providers.blockrun = {
|
|
3550
|
+
baseUrl: expectedBaseUrl,
|
|
3551
|
+
api: "openai-completions",
|
|
3552
|
+
// apiKey is required by pi-coding-agent's ModelRegistry for providers with models.
|
|
3553
|
+
// We use a placeholder since the proxy handles real x402 auth internally.
|
|
3554
|
+
apiKey: "x402-proxy-handles-auth",
|
|
3555
|
+
models: OPENCLAW_MODELS
|
|
3556
|
+
};
|
|
3557
|
+
logger.info("Injected BlockRun provider config");
|
|
3558
|
+
needsWrite = true;
|
|
3559
|
+
} else {
|
|
3560
|
+
const blockrun = providers.blockrun;
|
|
3561
|
+
let fixed = false;
|
|
3562
|
+
if (!blockrun.baseUrl || blockrun.baseUrl !== expectedBaseUrl) {
|
|
3563
|
+
blockrun.baseUrl = expectedBaseUrl;
|
|
3564
|
+
fixed = true;
|
|
3565
|
+
}
|
|
3566
|
+
if (!blockrun.api) {
|
|
3567
|
+
blockrun.api = "openai-completions";
|
|
3568
|
+
fixed = true;
|
|
3569
|
+
}
|
|
3570
|
+
if (!blockrun.apiKey) {
|
|
3571
|
+
blockrun.apiKey = "x402-proxy-handles-auth";
|
|
3572
|
+
fixed = true;
|
|
3573
|
+
}
|
|
3574
|
+
const currentModels = blockrun.models;
|
|
3575
|
+
if (!currentModels || !Array.isArray(currentModels) || currentModels.length !== OPENCLAW_MODELS.length) {
|
|
3576
|
+
blockrun.models = OPENCLAW_MODELS;
|
|
3577
|
+
fixed = true;
|
|
3578
|
+
}
|
|
3579
|
+
if (fixed) {
|
|
3580
|
+
logger.info("Fixed incomplete BlockRun provider config");
|
|
3547
3581
|
needsWrite = true;
|
|
3548
3582
|
}
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
|
|
3570
|
-
|
|
3571
|
-
|
|
3572
|
-
|
|
3583
|
+
}
|
|
3584
|
+
if (!config.agents) {
|
|
3585
|
+
config.agents = {};
|
|
3586
|
+
needsWrite = true;
|
|
3587
|
+
}
|
|
3588
|
+
const agents = config.agents;
|
|
3589
|
+
if (!agents.defaults) {
|
|
3590
|
+
agents.defaults = {};
|
|
3591
|
+
needsWrite = true;
|
|
3592
|
+
}
|
|
3593
|
+
const defaults = agents.defaults;
|
|
3594
|
+
if (!defaults.model) {
|
|
3595
|
+
defaults.model = {};
|
|
3596
|
+
needsWrite = true;
|
|
3597
|
+
}
|
|
3598
|
+
const model = defaults.model;
|
|
3599
|
+
if (!model.primary) {
|
|
3600
|
+
model.primary = "blockrun/auto";
|
|
3601
|
+
logger.info("Set default model to blockrun/auto (first install)");
|
|
3602
|
+
needsWrite = true;
|
|
3603
|
+
}
|
|
3604
|
+
const KEY_MODEL_ALIASES = [
|
|
3605
|
+
{ id: "auto", alias: "auto" },
|
|
3606
|
+
{ id: "free", alias: "free" },
|
|
3607
|
+
{ id: "sonnet", alias: "sonnet" },
|
|
3608
|
+
{ id: "opus", alias: "opus" },
|
|
3609
|
+
{ id: "haiku", alias: "haiku" },
|
|
3610
|
+
{ id: "grok", alias: "grok" },
|
|
3611
|
+
{ id: "deepseek", alias: "deepseek" },
|
|
3612
|
+
{ id: "kimi", alias: "kimi" },
|
|
3613
|
+
{ id: "gemini", alias: "gemini" },
|
|
3614
|
+
{ id: "flash", alias: "flash" },
|
|
3615
|
+
{ id: "gpt", alias: "gpt" },
|
|
3616
|
+
{ id: "reasoner", alias: "reasoner" }
|
|
3617
|
+
];
|
|
3618
|
+
if (!defaults.models) {
|
|
3619
|
+
defaults.models = {};
|
|
3620
|
+
needsWrite = true;
|
|
3621
|
+
}
|
|
3622
|
+
const allowlist = defaults.models;
|
|
3623
|
+
for (const m of KEY_MODEL_ALIASES) {
|
|
3624
|
+
const fullId = `blockrun/${m.id}`;
|
|
3625
|
+
if (!allowlist[fullId]) {
|
|
3626
|
+
allowlist[fullId] = { alias: m.alias };
|
|
3627
|
+
needsWrite = true;
|
|
3573
3628
|
}
|
|
3574
|
-
|
|
3629
|
+
}
|
|
3630
|
+
if (needsWrite) {
|
|
3631
|
+
try {
|
|
3575
3632
|
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
3576
3633
|
logger.info("Smart routing enabled (blockrun/auto)");
|
|
3634
|
+
} catch (err) {
|
|
3635
|
+
logger.info(`Failed to write config: ${err instanceof Error ? err.message : String(err)}`);
|
|
3577
3636
|
}
|
|
3578
|
-
} catch {
|
|
3579
3637
|
}
|
|
3580
3638
|
}
|
|
3581
3639
|
function injectAuthProfile(logger) {
|
|
@@ -3830,7 +3888,10 @@ var plugin = {
|
|
|
3830
3888
|
if (!agents.defaults) agents.defaults = {};
|
|
3831
3889
|
const defaults = agents.defaults;
|
|
3832
3890
|
if (!defaults.model) defaults.model = {};
|
|
3833
|
-
|
|
3891
|
+
const model = defaults.model;
|
|
3892
|
+
if (!model.primary) {
|
|
3893
|
+
model.primary = "blockrun/auto";
|
|
3894
|
+
}
|
|
3834
3895
|
api.logger.info("BlockRun provider registered (30+ models via x402)");
|
|
3835
3896
|
createWalletCommand().then((walletCommand) => {
|
|
3836
3897
|
api.registerCommand(walletCommand);
|