@blockrun/clawrouter 0.10.3 → 0.10.5

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 CHANGED
@@ -587,7 +587,7 @@ var DEFAULT_ROUTING_CONFIG = {
587
587
  },
588
588
  scoring: {
589
589
  tokenCountThresholds: { simple: 50, complex: 500 },
590
- // Multilingual keywords: English + Chinese (中文) + Japanese (日本語) + Russian (Русский) + German (Deutsch)
590
+ // Multilingual keywords: EN + ZH + JA + RU + DE + ES + PT + KO + AR
591
591
  codeKeywords: [
592
592
  // English
593
593
  "function",
@@ -641,7 +641,51 @@ var DEFAULT_ROUTING_CONFIG = {
641
641
  "erwarten",
642
642
  "konstante",
643
643
  "variable",
644
- "zur\xFCckgeben"
644
+ "zur\xFCckgeben",
645
+ // Spanish
646
+ "funci\xF3n",
647
+ "clase",
648
+ "importar",
649
+ "definir",
650
+ "consulta",
651
+ "as\xEDncrono",
652
+ "esperar",
653
+ "constante",
654
+ "variable",
655
+ "retornar",
656
+ // Portuguese
657
+ "fun\xE7\xE3o",
658
+ "classe",
659
+ "importar",
660
+ "definir",
661
+ "consulta",
662
+ "ass\xEDncrono",
663
+ "aguardar",
664
+ "constante",
665
+ "vari\xE1vel",
666
+ "retornar",
667
+ // Korean
668
+ "\uD568\uC218",
669
+ "\uD074\uB798\uC2A4",
670
+ "\uAC00\uC838\uC624\uAE30",
671
+ "\uC815\uC758",
672
+ "\uCFFC\uB9AC",
673
+ "\uBE44\uB3D9\uAE30",
674
+ "\uB300\uAE30",
675
+ "\uC0C1\uC218",
676
+ "\uBCC0\uC218",
677
+ "\uBC18\uD658",
678
+ // Arabic
679
+ "\u062F\u0627\u0644\u0629",
680
+ "\u0641\u0626\u0629",
681
+ "\u0627\u0633\u062A\u064A\u0631\u0627\u062F",
682
+ "\u062A\u0639\u0631\u064A\u0641",
683
+ "\u0627\u0633\u062A\u0639\u0644\u0627\u0645",
684
+ "\u063A\u064A\u0631 \u0645\u062A\u0632\u0627\u0645\u0646",
685
+ "\u0627\u0646\u062A\u0638\u0627\u0631",
686
+ "\u062B\u0627\u0628\u062A",
687
+ "\u0645\u062A\u063A\u064A\u0631",
688
+ "\u0625\u0631\u062C\u0627\u0639"
645
689
  ],
646
690
  reasoningKeywords: [
647
691
  // English
@@ -692,7 +736,46 @@ var DEFAULT_ROUTING_CONFIG = {
692
736
  "gedankenkette",
693
737
  "formal",
694
738
  "mathematisch",
695
- "logisch"
739
+ "logisch",
740
+ // Spanish
741
+ "demostrar",
742
+ "teorema",
743
+ "derivar",
744
+ "paso a paso",
745
+ "cadena de pensamiento",
746
+ "formalmente",
747
+ "matem\xE1tico",
748
+ "prueba",
749
+ "l\xF3gicamente",
750
+ // Portuguese
751
+ "provar",
752
+ "teorema",
753
+ "derivar",
754
+ "passo a passo",
755
+ "cadeia de pensamento",
756
+ "formalmente",
757
+ "matem\xE1tico",
758
+ "prova",
759
+ "logicamente",
760
+ // Korean
761
+ "\uC99D\uBA85",
762
+ "\uC815\uB9AC",
763
+ "\uB3C4\uCD9C",
764
+ "\uB2E8\uACC4\uBCC4",
765
+ "\uC0AC\uACE0\uC758 \uC5F0\uC1C4",
766
+ "\uD615\uC2DD\uC801",
767
+ "\uC218\uD559\uC801",
768
+ "\uB17C\uB9AC\uC801",
769
+ // Arabic
770
+ "\u0625\u062B\u0628\u0627\u062A",
771
+ "\u0646\u0638\u0631\u064A\u0629",
772
+ "\u0627\u0634\u062A\u0642\u0627\u0642",
773
+ "\u062E\u0637\u0648\u0629 \u0628\u062E\u0637\u0648\u0629",
774
+ "\u0633\u0644\u0633\u0644\u0629 \u0627\u0644\u062A\u0641\u0643\u064A\u0631",
775
+ "\u0631\u0633\u0645\u064A\u0627\u064B",
776
+ "\u0631\u064A\u0627\u0636\u064A",
777
+ "\u0628\u0631\u0647\u0627\u0646",
778
+ "\u0645\u0646\u0637\u0642\u064A\u0627\u064B"
696
779
  ],
697
780
  simpleKeywords: [
698
781
  // English
@@ -745,7 +828,45 @@ var DEFAULT_ROUTING_CONFIG = {
745
828
  "wie alt",
746
829
  "wer ist",
747
830
  "wann",
748
- "erkl\xE4re"
831
+ "erkl\xE4re",
832
+ // Spanish
833
+ "qu\xE9 es",
834
+ "definir",
835
+ "traducir",
836
+ "hola",
837
+ "s\xED o no",
838
+ "capital de",
839
+ "cu\xE1ntos a\xF1os",
840
+ "qui\xE9n es",
841
+ "cu\xE1ndo",
842
+ // Portuguese
843
+ "o que \xE9",
844
+ "definir",
845
+ "traduzir",
846
+ "ol\xE1",
847
+ "sim ou n\xE3o",
848
+ "capital de",
849
+ "quantos anos",
850
+ "quem \xE9",
851
+ "quando",
852
+ // Korean
853
+ "\uBB34\uC5C7",
854
+ "\uC815\uC758",
855
+ "\uBC88\uC5ED",
856
+ "\uC548\uB155\uD558\uC138\uC694",
857
+ "\uC608 \uB610\uB294 \uC544\uB2C8\uC624",
858
+ "\uC218\uB3C4",
859
+ "\uB204\uAD6C",
860
+ "\uC5B8\uC81C",
861
+ // Arabic
862
+ "\u0645\u0627 \u0647\u0648",
863
+ "\u062A\u0639\u0631\u064A\u0641",
864
+ "\u062A\u0631\u062C\u0645",
865
+ "\u0645\u0631\u062D\u0628\u0627",
866
+ "\u0646\u0639\u0645 \u0623\u0648 \u0644\u0627",
867
+ "\u0639\u0627\u0635\u0645\u0629",
868
+ "\u0645\u0646 \u0647\u0648",
869
+ "\u0645\u062A\u0649"
749
870
  ],
750
871
  technicalKeywords: [
751
872
  // English
@@ -790,7 +911,39 @@ var DEFAULT_ROUTING_CONFIG = {
790
911
  "kubernetes",
791
912
  "mikroservice",
792
913
  "datenbank",
793
- "infrastruktur"
914
+ "infrastruktur",
915
+ // Spanish
916
+ "algoritmo",
917
+ "optimizar",
918
+ "arquitectura",
919
+ "distribuido",
920
+ "microservicio",
921
+ "base de datos",
922
+ "infraestructura",
923
+ // Portuguese
924
+ "algoritmo",
925
+ "otimizar",
926
+ "arquitetura",
927
+ "distribu\xEDdo",
928
+ "microsservi\xE7o",
929
+ "banco de dados",
930
+ "infraestrutura",
931
+ // Korean
932
+ "\uC54C\uACE0\uB9AC\uC998",
933
+ "\uCD5C\uC801\uD654",
934
+ "\uC544\uD0A4\uD14D\uCC98",
935
+ "\uBD84\uC0B0",
936
+ "\uB9C8\uC774\uD06C\uB85C\uC11C\uBE44\uC2A4",
937
+ "\uB370\uC774\uD130\uBCA0\uC774\uC2A4",
938
+ "\uC778\uD504\uB77C",
939
+ // Arabic
940
+ "\u062E\u0648\u0627\u0631\u0632\u0645\u064A\u0629",
941
+ "\u062A\u062D\u0633\u064A\u0646",
942
+ "\u0628\u0646\u064A\u0629",
943
+ "\u0645\u0648\u0632\u0639",
944
+ "\u062E\u062F\u0645\u0629 \u0645\u0635\u063A\u0631\u0629",
945
+ "\u0642\u0627\u0639\u062F\u0629 \u0628\u064A\u0627\u0646\u0627\u062A",
946
+ "\u0628\u0646\u064A\u0629 \u062A\u062D\u062A\u064A\u0629"
794
947
  ],
795
948
  creativeKeywords: [
796
949
  // English
@@ -835,7 +988,38 @@ var DEFAULT_ROUTING_CONFIG = {
835
988
  "kreativ",
836
989
  "vorstellen",
837
990
  "schreibe",
838
- "erz\xE4hlung"
991
+ "erz\xE4hlung",
992
+ // Spanish
993
+ "historia",
994
+ "poema",
995
+ "componer",
996
+ "lluvia de ideas",
997
+ "creativo",
998
+ "imaginar",
999
+ "escribe",
1000
+ // Portuguese
1001
+ "hist\xF3ria",
1002
+ "poema",
1003
+ "compor",
1004
+ "criativo",
1005
+ "imaginar",
1006
+ "escreva",
1007
+ // Korean
1008
+ "\uC774\uC57C\uAE30",
1009
+ "\uC2DC",
1010
+ "\uC791\uACE1",
1011
+ "\uBE0C\uB808\uC778\uC2A4\uD1A0\uBC0D",
1012
+ "\uCC3D\uC758\uC801",
1013
+ "\uC0C1\uC0C1",
1014
+ "\uC791\uC131",
1015
+ // Arabic
1016
+ "\u0642\u0635\u0629",
1017
+ "\u0642\u0635\u064A\u062F\u0629",
1018
+ "\u062A\u0623\u0644\u064A\u0641",
1019
+ "\u0639\u0635\u0641 \u0630\u0647\u0646\u064A",
1020
+ "\u0625\u0628\u062F\u0627\u0639\u064A",
1021
+ "\u062A\u062E\u064A\u0644",
1022
+ "\u0627\u0643\u062A\u0628"
839
1023
  ],
840
1024
  // New dimension keyword lists (multilingual)
841
1025
  imperativeVerbs: [
@@ -896,7 +1080,42 @@ var DEFAULT_ROUTING_CONFIG = {
896
1080
  "generieren",
897
1081
  "bereitstellen",
898
1082
  "konfigurieren",
899
- "einrichten"
1083
+ "einrichten",
1084
+ // Spanish
1085
+ "construir",
1086
+ "crear",
1087
+ "implementar",
1088
+ "dise\xF1ar",
1089
+ "desarrollar",
1090
+ "generar",
1091
+ "desplegar",
1092
+ "configurar",
1093
+ // Portuguese
1094
+ "construir",
1095
+ "criar",
1096
+ "implementar",
1097
+ "projetar",
1098
+ "desenvolver",
1099
+ "gerar",
1100
+ "implantar",
1101
+ "configurar",
1102
+ // Korean
1103
+ "\uAD6C\uCD95",
1104
+ "\uC0DD\uC131",
1105
+ "\uAD6C\uD604",
1106
+ "\uC124\uACC4",
1107
+ "\uAC1C\uBC1C",
1108
+ "\uBC30\uD3EC",
1109
+ "\uC124\uC815",
1110
+ // Arabic
1111
+ "\u0628\u0646\u0627\u0621",
1112
+ "\u0625\u0646\u0634\u0627\u0621",
1113
+ "\u062A\u0646\u0641\u064A\u0630",
1114
+ "\u062A\u0635\u0645\u064A\u0645",
1115
+ "\u062A\u0637\u0648\u064A\u0631",
1116
+ "\u062A\u0648\u0644\u064A\u062F",
1117
+ "\u0646\u0634\u0631",
1118
+ "\u0625\u0639\u062F\u0627\u062F"
900
1119
  ],
901
1120
  constraintIndicators: [
902
1121
  // English
@@ -942,7 +1161,41 @@ var DEFAULT_ROUTING_CONFIG = {
942
1161
  "maximal",
943
1162
  "minimal",
944
1163
  "grenze",
945
- "budget"
1164
+ "budget",
1165
+ // Spanish
1166
+ "como m\xE1ximo",
1167
+ "al menos",
1168
+ "dentro de",
1169
+ "no m\xE1s de",
1170
+ "m\xE1ximo",
1171
+ "m\xEDnimo",
1172
+ "l\xEDmite",
1173
+ "presupuesto",
1174
+ // Portuguese
1175
+ "no m\xE1ximo",
1176
+ "pelo menos",
1177
+ "dentro de",
1178
+ "n\xE3o mais que",
1179
+ "m\xE1ximo",
1180
+ "m\xEDnimo",
1181
+ "limite",
1182
+ "or\xE7amento",
1183
+ // Korean
1184
+ "\uC774\uD558",
1185
+ "\uC774\uC0C1",
1186
+ "\uCD5C\uB300",
1187
+ "\uCD5C\uC18C",
1188
+ "\uC81C\uD55C",
1189
+ "\uC608\uC0B0",
1190
+ // Arabic
1191
+ "\u0639\u0644\u0649 \u0627\u0644\u0623\u0643\u062B\u0631",
1192
+ "\u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644",
1193
+ "\u0636\u0645\u0646",
1194
+ "\u0644\u0627 \u064A\u0632\u064A\u062F \u0639\u0646",
1195
+ "\u0623\u0642\u0635\u0649",
1196
+ "\u0623\u062F\u0646\u0649",
1197
+ "\u062D\u062F",
1198
+ "\u0645\u064A\u0632\u0627\u0646\u064A\u0629"
946
1199
  ],
947
1200
  outputFormatKeywords: [
948
1201
  // English
@@ -970,7 +1223,23 @@ var DEFAULT_ROUTING_CONFIG = {
970
1223
  // German
971
1224
  "tabelle",
972
1225
  "formatieren als",
973
- "strukturiert"
1226
+ "strukturiert",
1227
+ // Spanish
1228
+ "tabla",
1229
+ "formatear como",
1230
+ "estructurado",
1231
+ // Portuguese
1232
+ "tabela",
1233
+ "formatar como",
1234
+ "estruturado",
1235
+ // Korean
1236
+ "\uD14C\uC774\uBE14",
1237
+ "\uD615\uC2DD",
1238
+ "\uAD6C\uC870\uD654",
1239
+ // Arabic
1240
+ "\u062C\u062F\u0648\u0644",
1241
+ "\u062A\u0646\u0633\u064A\u0642",
1242
+ "\u0645\u0646\u0638\u0645"
974
1243
  ],
975
1244
  referenceKeywords: [
976
1245
  // English
@@ -1015,7 +1284,39 @@ var DEFAULT_ROUTING_CONFIG = {
1015
1284
  "dokumentation",
1016
1285
  "der code",
1017
1286
  "fr\xFCher",
1018
- "anhang"
1287
+ "anhang",
1288
+ // Spanish
1289
+ "arriba",
1290
+ "abajo",
1291
+ "anterior",
1292
+ "siguiente",
1293
+ "documentaci\xF3n",
1294
+ "el c\xF3digo",
1295
+ "adjunto",
1296
+ // Portuguese
1297
+ "acima",
1298
+ "abaixo",
1299
+ "anterior",
1300
+ "seguinte",
1301
+ "documenta\xE7\xE3o",
1302
+ "o c\xF3digo",
1303
+ "anexo",
1304
+ // Korean
1305
+ "\uC704",
1306
+ "\uC544\uB798",
1307
+ "\uC774\uC804",
1308
+ "\uB2E4\uC74C",
1309
+ "\uBB38\uC11C",
1310
+ "\uCF54\uB4DC",
1311
+ "\uCCA8\uBD80",
1312
+ // Arabic
1313
+ "\u0623\u0639\u0644\u0627\u0647",
1314
+ "\u0623\u062F\u0646\u0627\u0647",
1315
+ "\u0627\u0644\u0633\u0627\u0628\u0642",
1316
+ "\u0627\u0644\u062A\u0627\u0644\u064A",
1317
+ "\u0627\u0644\u0648\u062B\u0627\u0626\u0642",
1318
+ "\u0627\u0644\u0643\u0648\u062F",
1319
+ "\u0645\u0631\u0641\u0642"
1019
1320
  ],
1020
1321
  negationKeywords: [
1021
1322
  // English
@@ -1057,7 +1358,34 @@ var DEFAULT_ROUTING_CONFIG = {
1057
1358
  "ohne",
1058
1359
  "au\xDFer",
1059
1360
  "ausschlie\xDFen",
1060
- "nicht mehr"
1361
+ "nicht mehr",
1362
+ // Spanish
1363
+ "no hagas",
1364
+ "evitar",
1365
+ "nunca",
1366
+ "sin",
1367
+ "excepto",
1368
+ "excluir",
1369
+ // Portuguese
1370
+ "n\xE3o fa\xE7a",
1371
+ "evitar",
1372
+ "nunca",
1373
+ "sem",
1374
+ "exceto",
1375
+ "excluir",
1376
+ // Korean
1377
+ "\uD558\uC9C0 \uB9C8",
1378
+ "\uD53C\uD558\uB2E4",
1379
+ "\uC808\uB300",
1380
+ "\uC5C6\uC774",
1381
+ "\uC81C\uC678",
1382
+ // Arabic
1383
+ "\u0644\u0627 \u062A\u0641\u0639\u0644",
1384
+ "\u062A\u062C\u0646\u0628",
1385
+ "\u0623\u0628\u062F\u0627\u064B",
1386
+ "\u0628\u062F\u0648\u0646",
1387
+ "\u0628\u0627\u0633\u062A\u062B\u0646\u0627\u0621",
1388
+ "\u0627\u0633\u062A\u0628\u0639\u0627\u062F"
1061
1389
  ],
1062
1390
  domainSpecificKeywords: [
1063
1391
  // English
@@ -1104,7 +1432,33 @@ var DEFAULT_ROUTING_CONFIG = {
1104
1432
  "topologisch",
1105
1433
  "homomorph",
1106
1434
  "zero-knowledge",
1107
- "gitterbasiert"
1435
+ "gitterbasiert",
1436
+ // Spanish
1437
+ "cu\xE1ntico",
1438
+ "fot\xF3nica",
1439
+ "gen\xF3mica",
1440
+ "prote\xF3mica",
1441
+ "topol\xF3gico",
1442
+ "homom\xF3rfico",
1443
+ // Portuguese
1444
+ "qu\xE2ntico",
1445
+ "fot\xF4nica",
1446
+ "gen\xF4mica",
1447
+ "prote\xF4mica",
1448
+ "topol\xF3gico",
1449
+ "homom\xF3rfico",
1450
+ // Korean
1451
+ "\uC591\uC790",
1452
+ "\uD3EC\uD1A0\uB2C9\uC2A4",
1453
+ "\uC720\uC804\uCCB4\uD559",
1454
+ "\uC704\uC0C1",
1455
+ "\uB3D9\uD615",
1456
+ // Arabic
1457
+ "\u0643\u0645\u064A",
1458
+ "\u0636\u0648\u0626\u064A\u0627\u062A",
1459
+ "\u062C\u064A\u0646\u0648\u0645\u064A\u0627\u062A",
1460
+ "\u0637\u0648\u0628\u0648\u0644\u0648\u062C\u064A",
1461
+ "\u062A\u0645\u0627\u062B\u0644\u064A"
1108
1462
  ],
1109
1463
  // Agentic task keywords - file ops, execution, multi-step, iterative work
1110
1464
  // Pruned: removed overly common words like "then", "first", "run", "test", "build"
@@ -1160,7 +1514,58 @@ var DEFAULT_ROUTING_CONFIG = {
1160
1514
  "\u8C03\u8BD5",
1161
1515
  "\u76F4\u5230",
1162
1516
  "\u786E\u8BA4",
1163
- "\u9A8C\u8BC1"
1517
+ "\u9A8C\u8BC1",
1518
+ // Spanish
1519
+ "leer archivo",
1520
+ "editar",
1521
+ "modificar",
1522
+ "actualizar",
1523
+ "ejecutar",
1524
+ "desplegar",
1525
+ "instalar",
1526
+ "paso 1",
1527
+ "paso 2",
1528
+ "arreglar",
1529
+ "depurar",
1530
+ "verificar",
1531
+ // Portuguese
1532
+ "ler arquivo",
1533
+ "editar",
1534
+ "modificar",
1535
+ "atualizar",
1536
+ "executar",
1537
+ "implantar",
1538
+ "instalar",
1539
+ "passo 1",
1540
+ "passo 2",
1541
+ "corrigir",
1542
+ "depurar",
1543
+ "verificar",
1544
+ // Korean
1545
+ "\uD30C\uC77C \uC77D\uAE30",
1546
+ "\uD3B8\uC9D1",
1547
+ "\uC218\uC815",
1548
+ "\uC5C5\uB370\uC774\uD2B8",
1549
+ "\uC2E4\uD589",
1550
+ "\uBC30\uD3EC",
1551
+ "\uC124\uCE58",
1552
+ "\uB2E8\uACC4 1",
1553
+ "\uB2E8\uACC4 2",
1554
+ "\uB514\uBC84\uADF8",
1555
+ "\uD655\uC778",
1556
+ // Arabic
1557
+ "\u0642\u0631\u0627\u0621\u0629 \u0645\u0644\u0641",
1558
+ "\u062A\u062D\u0631\u064A\u0631",
1559
+ "\u062A\u0639\u062F\u064A\u0644",
1560
+ "\u062A\u062D\u062F\u064A\u062B",
1561
+ "\u062A\u0646\u0641\u064A\u0630",
1562
+ "\u0646\u0634\u0631",
1563
+ "\u062A\u062B\u0628\u064A\u062A",
1564
+ "\u0627\u0644\u062E\u0637\u0648\u0629 1",
1565
+ "\u0627\u0644\u062E\u0637\u0648\u0629 2",
1566
+ "\u0625\u0635\u0644\u0627\u062D",
1567
+ "\u062A\u0635\u062D\u064A\u062D",
1568
+ "\u062A\u062D\u0642\u0642"
1164
1569
  ],
1165
1570
  // Dimension weights (sum to 1.0)
1166
1571
  dimensionWeights: {
@@ -5427,7 +5832,19 @@ function printDiagnostics(result) {
5427
5832
  }
5428
5833
  }
5429
5834
  }
5430
- async function analyzeWithAI(diagnostics, userQuestion) {
5835
+ var DOCTOR_MODELS = {
5836
+ sonnet: {
5837
+ id: "anthropic/claude-sonnet-4.6",
5838
+ name: "Claude Sonnet 4.6",
5839
+ cost: "~$0.003"
5840
+ },
5841
+ opus: {
5842
+ id: "anthropic/claude-opus-4.6",
5843
+ name: "Claude Opus 4.6",
5844
+ cost: "~$0.01"
5845
+ }
5846
+ };
5847
+ async function analyzeWithAI(diagnostics, userQuestion, model = "sonnet") {
5431
5848
  if (diagnostics.wallet.isEmpty) {
5432
5849
  console.log("\n\u{1F4B3} Wallet is empty - cannot call AI for analysis.");
5433
5850
  console.log(` Fund your wallet with USDC on Base: ${diagnostics.wallet.address}`);
@@ -5435,7 +5852,10 @@ async function analyzeWithAI(diagnostics, userQuestion) {
5435
5852
  console.log(" Bridge to Base: https://bridge.base.org\n");
5436
5853
  return;
5437
5854
  }
5438
- console.log("\n\u{1F4E4} Sending to Claude Opus 4.6...\n");
5855
+ const modelConfig = DOCTOR_MODELS[model];
5856
+ console.log(`
5857
+ \u{1F4E4} Sending to ${modelConfig.name} (${modelConfig.cost})...
5858
+ `);
5439
5859
  try {
5440
5860
  const { key } = await resolveOrGenerateWalletKey();
5441
5861
  const { fetch: paymentFetch } = createPaymentFetch(key);
@@ -5445,7 +5865,7 @@ async function analyzeWithAI(diagnostics, userQuestion) {
5445
5865
  method: "POST",
5446
5866
  headers: { "Content-Type": "application/json" },
5447
5867
  body: JSON.stringify({
5448
- model: "anthropic/claude-opus-4.6",
5868
+ model: modelConfig.id,
5449
5869
  stream: false,
5450
5870
  messages: [
5451
5871
  {
@@ -5496,7 +5916,7 @@ Error calling AI: ${err instanceof Error ? err.message : String(err)}`);
5496
5916
  console.log("Try again or check your wallet balance.\n");
5497
5917
  }
5498
5918
  }
5499
- async function runDoctor(userQuestion) {
5919
+ async function runDoctor(userQuestion, model = "sonnet") {
5500
5920
  console.log(`
5501
5921
  \u{1FA7A} BlockRun Doctor v${VERSION}
5502
5922
  `);
@@ -5517,7 +5937,7 @@ async function runDoctor(userQuestion) {
5517
5937
  };
5518
5938
  result.issues = identifyIssues(result);
5519
5939
  printDiagnostics(result);
5520
- await analyzeWithAI(result, userQuestion);
5940
+ await analyzeWithAI(result, userQuestion, model);
5521
5941
  }
5522
5942
 
5523
5943
  // src/cli.ts
@@ -5527,7 +5947,7 @@ ClawRouter v${VERSION} - Smart LLM Router
5527
5947
 
5528
5948
  Usage:
5529
5949
  clawrouter [options]
5530
- clawrouter doctor Run AI-powered diagnostics
5950
+ clawrouter doctor [opus] [question]
5531
5951
 
5532
5952
  Options:
5533
5953
  --version, -v Show version number
@@ -5535,24 +5955,24 @@ Options:
5535
5955
  --port <number> Port to listen on (default: ${getProxyPort()})
5536
5956
 
5537
5957
  Commands:
5538
- doctor [question] Diagnose issues and get AI-powered fix suggestions
5539
- Optional: Add your question for targeted help
5958
+ doctor AI-powered diagnostics (default: Sonnet ~$0.003)
5959
+ doctor opus Use Opus for deeper analysis (~$0.01)
5540
5960
 
5541
5961
  Examples:
5542
- # Start standalone proxy (survives gateway restarts)
5962
+ # Start standalone proxy
5543
5963
  npx @blockrun/clawrouter
5544
5964
 
5545
- # Start on custom port
5546
- npx @blockrun/clawrouter --port 9000
5547
-
5548
- # Run diagnostics when something isn't working
5965
+ # Run diagnostics (uses Sonnet by default)
5549
5966
  npx @blockrun/clawrouter doctor
5550
5967
 
5968
+ # Use Opus for complex issues
5969
+ npx @blockrun/clawrouter doctor opus
5970
+
5551
5971
  # Ask a specific question
5552
5972
  npx @blockrun/clawrouter doctor "why is my request failing?"
5553
5973
 
5554
- # Production deployment with PM2
5555
- pm2 start "npx @blockrun/clawrouter" --name clawrouter
5974
+ # Opus + question
5975
+ npx @blockrun/clawrouter doctor opus "\u6DF1\u5EA6\u5206\u6790\u6211\u7684\u914D\u7F6E\u95EE\u9898"
5556
5976
 
5557
5977
  Environment Variables:
5558
5978
  BLOCKRUN_WALLET_KEY Private key for x402 payments (auto-generated if not set)
@@ -5591,8 +6011,18 @@ async function main() {
5591
6011
  if (args.doctor) {
5592
6012
  const rawArgs = process.argv.slice(2);
5593
6013
  const doctorIndex = rawArgs.findIndex((a) => a === "doctor" || a === "--doctor");
5594
- const userQuestion = rawArgs.slice(doctorIndex + 1).join(" ").trim() || void 0;
5595
- await runDoctor(userQuestion);
6014
+ const afterDoctor = rawArgs.slice(doctorIndex + 1);
6015
+ let model = "sonnet";
6016
+ let questionArgs = afterDoctor;
6017
+ if (afterDoctor[0] === "opus") {
6018
+ model = "opus";
6019
+ questionArgs = afterDoctor.slice(1);
6020
+ } else if (afterDoctor[0] === "sonnet") {
6021
+ model = "sonnet";
6022
+ questionArgs = afterDoctor.slice(1);
6023
+ }
6024
+ const userQuestion = questionArgs.join(" ").trim() || void 0;
6025
+ await runDoctor(userQuestion, model);
5596
6026
  process.exit(0);
5597
6027
  }
5598
6028
  const { key: walletKey, address, source } = await resolveOrGenerateWalletKey();