@blockrun/clawrouter 0.12.94 → 0.12.96

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.
Files changed (282) hide show
  1. package/dist/auth.d.ts +82 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +388 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/balance.d.ts +97 -0
  6. package/dist/balance.d.ts.map +1 -0
  7. package/dist/balance.js +157 -0
  8. package/dist/balance.js.map +1 -0
  9. package/dist/cli.d.ts +15 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +256 -54991
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compression/codebook.d.ts +24 -0
  14. package/dist/compression/codebook.d.ts.map +1 -0
  15. package/dist/compression/codebook.js +119 -0
  16. package/dist/compression/codebook.js.map +1 -0
  17. package/dist/compression/index.d.ts +33 -0
  18. package/dist/compression/index.d.ts.map +1 -0
  19. package/dist/compression/index.js +246 -0
  20. package/dist/compression/index.js.map +1 -0
  21. package/dist/compression/layers/deduplication.d.ts +28 -0
  22. package/dist/compression/layers/deduplication.d.ts.map +1 -0
  23. package/dist/compression/layers/deduplication.js +101 -0
  24. package/dist/compression/layers/deduplication.js.map +1 -0
  25. package/dist/compression/layers/dictionary.d.ts +21 -0
  26. package/dist/compression/layers/dictionary.d.ts.map +1 -0
  27. package/dist/compression/layers/dictionary.js +73 -0
  28. package/dist/compression/layers/dictionary.js.map +1 -0
  29. package/dist/compression/layers/dynamic-codebook.d.ts +26 -0
  30. package/dist/compression/layers/dynamic-codebook.d.ts.map +1 -0
  31. package/dist/compression/layers/dynamic-codebook.js +149 -0
  32. package/dist/compression/layers/dynamic-codebook.js.map +1 -0
  33. package/dist/compression/layers/json-compact.d.ts +23 -0
  34. package/dist/compression/layers/json-compact.d.ts.map +1 -0
  35. package/dist/compression/layers/json-compact.js +79 -0
  36. package/dist/compression/layers/json-compact.js.map +1 -0
  37. package/dist/compression/layers/observation.d.ts +21 -0
  38. package/dist/compression/layers/observation.d.ts.map +1 -0
  39. package/dist/compression/layers/observation.js +130 -0
  40. package/dist/compression/layers/observation.js.map +1 -0
  41. package/dist/compression/layers/paths.d.ts +24 -0
  42. package/dist/compression/layers/paths.d.ts.map +1 -0
  43. package/dist/compression/layers/paths.js +110 -0
  44. package/dist/compression/layers/paths.js.map +1 -0
  45. package/dist/compression/layers/whitespace.d.ts +27 -0
  46. package/dist/compression/layers/whitespace.d.ts.map +1 -0
  47. package/dist/compression/layers/whitespace.js +60 -0
  48. package/dist/compression/layers/whitespace.js.map +1 -0
  49. package/dist/compression/types.d.ts +84 -0
  50. package/dist/compression/types.d.ts.map +1 -0
  51. package/dist/compression/types.js +27 -0
  52. package/dist/compression/types.js.map +1 -0
  53. package/dist/config.d.ts +12 -0
  54. package/dist/config.d.ts.map +1 -0
  55. package/dist/config.js +22 -0
  56. package/dist/config.js.map +1 -0
  57. package/dist/dedup.d.ts +34 -0
  58. package/dist/dedup.d.ts.map +1 -0
  59. package/dist/dedup.js +150 -0
  60. package/dist/dedup.js.map +1 -0
  61. package/dist/doctor.d.ts +8 -0
  62. package/dist/doctor.d.ts.map +1 -0
  63. package/dist/doctor.js +375 -0
  64. package/dist/doctor.js.map +1 -0
  65. package/dist/error-classification.test.d.ts +2 -0
  66. package/dist/error-classification.test.d.ts.map +1 -0
  67. package/dist/error-classification.test.js +59 -0
  68. package/dist/error-classification.test.js.map +1 -0
  69. package/dist/errors.d.ts +54 -0
  70. package/dist/errors.d.ts.map +1 -0
  71. package/dist/errors.js +85 -0
  72. package/dist/errors.js.map +1 -0
  73. package/dist/exclude-models.d.ts +28 -0
  74. package/dist/exclude-models.d.ts.map +1 -0
  75. package/dist/exclude-models.integration.test.d.ts +2 -0
  76. package/dist/exclude-models.integration.test.d.ts.map +1 -0
  77. package/dist/exclude-models.integration.test.js +46 -0
  78. package/dist/exclude-models.integration.test.js.map +1 -0
  79. package/dist/exclude-models.js +70 -0
  80. package/dist/exclude-models.js.map +1 -0
  81. package/dist/exclude-models.test.d.ts +5 -0
  82. package/dist/exclude-models.test.d.ts.map +1 -0
  83. package/dist/exclude-models.test.js +95 -0
  84. package/dist/exclude-models.test.js.map +1 -0
  85. package/dist/fs-read.d.ts +11 -0
  86. package/dist/fs-read.d.ts.map +1 -0
  87. package/dist/fs-read.js +47 -0
  88. package/dist/fs-read.js.map +1 -0
  89. package/dist/index.d.ts +34 -1368
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +1071 -56191
  92. package/dist/index.js.map +1 -1
  93. package/dist/journal.d.ts +67 -0
  94. package/dist/journal.d.ts.map +1 -0
  95. package/dist/journal.js +184 -0
  96. package/dist/journal.js.map +1 -0
  97. package/dist/journal.test.d.ts +2 -0
  98. package/dist/journal.test.d.ts.map +1 -0
  99. package/dist/journal.test.js +201 -0
  100. package/dist/journal.test.js.map +1 -0
  101. package/dist/logger.d.ts +33 -0
  102. package/dist/logger.d.ts.map +1 -0
  103. package/dist/logger.js +35 -0
  104. package/dist/logger.js.map +1 -0
  105. package/dist/models.d.ts +107 -0
  106. package/dist/models.d.ts.map +1 -0
  107. package/dist/models.js +941 -0
  108. package/dist/models.js.map +1 -0
  109. package/dist/models.test.d.ts +2 -0
  110. package/dist/models.test.d.ts.map +1 -0
  111. package/dist/models.test.js +38 -0
  112. package/dist/models.test.js.map +1 -0
  113. package/dist/partners/index.d.ts +8 -0
  114. package/dist/partners/index.d.ts.map +1 -0
  115. package/dist/partners/index.js +6 -0
  116. package/dist/partners/index.js.map +1 -0
  117. package/dist/partners/registry.d.ts +51 -0
  118. package/dist/partners/registry.d.ts.map +1 -0
  119. package/dist/partners/registry.js +256 -0
  120. package/dist/partners/registry.js.map +1 -0
  121. package/dist/partners/tools.d.ts +24 -0
  122. package/dist/partners/tools.d.ts.map +1 -0
  123. package/dist/partners/tools.js +97 -0
  124. package/dist/partners/tools.js.map +1 -0
  125. package/dist/payment-preauth.d.ts +17 -0
  126. package/dist/payment-preauth.d.ts.map +1 -0
  127. package/dist/payment-preauth.js +102 -0
  128. package/dist/payment-preauth.js.map +1 -0
  129. package/dist/provider.d.ts +19 -0
  130. package/dist/provider.d.ts.map +1 -0
  131. package/dist/provider.js +45 -0
  132. package/dist/provider.js.map +1 -0
  133. package/dist/proxy.d.ts +210 -0
  134. package/dist/proxy.d.ts.map +1 -0
  135. package/dist/proxy.debrand.test.d.ts +2 -0
  136. package/dist/proxy.debrand.test.d.ts.map +1 -0
  137. package/dist/proxy.debrand.test.js +101 -0
  138. package/dist/proxy.debrand.test.js.map +1 -0
  139. package/dist/proxy.degraded-response.test.d.ts +2 -0
  140. package/dist/proxy.degraded-response.test.d.ts.map +1 -0
  141. package/dist/proxy.degraded-response.test.js +105 -0
  142. package/dist/proxy.degraded-response.test.js.map +1 -0
  143. package/dist/proxy.image-download.test.d.ts +2 -0
  144. package/dist/proxy.image-download.test.d.ts.map +1 -0
  145. package/dist/proxy.image-download.test.js +92 -0
  146. package/dist/proxy.image-download.test.js.map +1 -0
  147. package/dist/proxy.js +3810 -0
  148. package/dist/proxy.js.map +1 -0
  149. package/dist/proxy.models-endpoint.test.d.ts +2 -0
  150. package/dist/proxy.models-endpoint.test.d.ts.map +1 -0
  151. package/dist/proxy.models-endpoint.test.js +19 -0
  152. package/dist/proxy.models-endpoint.test.js.map +1 -0
  153. package/dist/proxy.multiturn-thinking.test.d.ts +2 -0
  154. package/dist/proxy.multiturn-thinking.test.d.ts.map +1 -0
  155. package/dist/proxy.multiturn-thinking.test.js +82 -0
  156. package/dist/proxy.multiturn-thinking.test.js.map +1 -0
  157. package/dist/proxy.payment-chain-reuse.test.d.ts +2 -0
  158. package/dist/proxy.payment-chain-reuse.test.d.ts.map +1 -0
  159. package/dist/proxy.payment-chain-reuse.test.js +30 -0
  160. package/dist/proxy.payment-chain-reuse.test.js.map +1 -0
  161. package/dist/proxy.solana-resilience.test.d.ts +12 -0
  162. package/dist/proxy.solana-resilience.test.d.ts.map +1 -0
  163. package/dist/proxy.solana-resilience.test.js +39 -0
  164. package/dist/proxy.solana-resilience.test.js.map +1 -0
  165. package/dist/report.d.ts +6 -0
  166. package/dist/report.d.ts.map +1 -0
  167. package/dist/report.js +44 -0
  168. package/dist/report.js.map +1 -0
  169. package/dist/response-cache.advanced.test.d.ts +2 -0
  170. package/dist/response-cache.advanced.test.d.ts.map +1 -0
  171. package/dist/response-cache.advanced.test.js +566 -0
  172. package/dist/response-cache.advanced.test.js.map +1 -0
  173. package/dist/response-cache.d.ts +85 -0
  174. package/dist/response-cache.d.ts.map +1 -0
  175. package/dist/response-cache.edge-cases.test.d.ts +2 -0
  176. package/dist/response-cache.edge-cases.test.d.ts.map +1 -0
  177. package/dist/response-cache.edge-cases.test.js +488 -0
  178. package/dist/response-cache.edge-cases.test.js.map +1 -0
  179. package/dist/response-cache.extreme.test.d.ts +2 -0
  180. package/dist/response-cache.extreme.test.d.ts.map +1 -0
  181. package/dist/response-cache.extreme.test.js +561 -0
  182. package/dist/response-cache.extreme.test.js.map +1 -0
  183. package/dist/response-cache.js +240 -0
  184. package/dist/response-cache.js.map +1 -0
  185. package/dist/response-cache.test.d.ts +2 -0
  186. package/dist/response-cache.test.d.ts.map +1 -0
  187. package/dist/response-cache.test.js +242 -0
  188. package/dist/response-cache.test.js.map +1 -0
  189. package/dist/retry.d.ts +42 -0
  190. package/dist/retry.d.ts.map +1 -0
  191. package/dist/retry.js +99 -0
  192. package/dist/retry.js.map +1 -0
  193. package/dist/router/config.d.ts +11 -0
  194. package/dist/router/config.d.ts.map +1 -0
  195. package/dist/router/config.js +1215 -0
  196. package/dist/router/config.js.map +1 -0
  197. package/dist/router/index.d.ts +18 -0
  198. package/dist/router/index.d.ts.map +1 -0
  199. package/dist/router/index.js +19 -0
  200. package/dist/router/index.js.map +1 -0
  201. package/dist/router/llm-classifier.d.ts +29 -0
  202. package/dist/router/llm-classifier.d.ts.map +1 -0
  203. package/dist/router/llm-classifier.js +99 -0
  204. package/dist/router/llm-classifier.js.map +1 -0
  205. package/dist/router/rules.d.ts +12 -0
  206. package/dist/router/rules.d.ts.map +1 -0
  207. package/dist/router/rules.js +202 -0
  208. package/dist/router/rules.js.map +1 -0
  209. package/dist/router/selector.d.ts +58 -0
  210. package/dist/router/selector.d.ts.map +1 -0
  211. package/dist/router/selector.js +165 -0
  212. package/dist/router/selector.js.map +1 -0
  213. package/dist/router/selector.test.d.ts +2 -0
  214. package/dist/router/selector.test.d.ts.map +1 -0
  215. package/dist/router/selector.test.js +67 -0
  216. package/dist/router/selector.test.js.map +1 -0
  217. package/dist/router/strategy.d.ts +19 -0
  218. package/dist/router/strategy.d.ts.map +1 -0
  219. package/dist/router/strategy.js +138 -0
  220. package/dist/router/strategy.js.map +1 -0
  221. package/dist/router/strategy.test.d.ts +2 -0
  222. package/dist/router/strategy.test.d.ts.map +1 -0
  223. package/dist/router/strategy.test.js +131 -0
  224. package/dist/router/strategy.test.js.map +1 -0
  225. package/dist/router/types.d.ts +127 -0
  226. package/dist/router/types.d.ts.map +1 -0
  227. package/dist/router/types.js +11 -0
  228. package/dist/router/types.js.map +1 -0
  229. package/dist/session.d.ts +124 -0
  230. package/dist/session.d.ts.map +1 -0
  231. package/dist/session.js +256 -0
  232. package/dist/session.js.map +1 -0
  233. package/dist/session.test.d.ts +2 -0
  234. package/dist/session.test.d.ts.map +1 -0
  235. package/dist/session.test.js +163 -0
  236. package/dist/session.test.js.map +1 -0
  237. package/dist/solana-balance.d.ts +48 -0
  238. package/dist/solana-balance.d.ts.map +1 -0
  239. package/dist/solana-balance.js +142 -0
  240. package/dist/solana-balance.js.map +1 -0
  241. package/dist/spend-control.d.ts +112 -0
  242. package/dist/spend-control.d.ts.map +1 -0
  243. package/dist/spend-control.js +278 -0
  244. package/dist/spend-control.js.map +1 -0
  245. package/dist/spend-control.test.d.ts +5 -0
  246. package/dist/spend-control.test.d.ts.map +1 -0
  247. package/dist/spend-control.test.js +210 -0
  248. package/dist/spend-control.test.js.map +1 -0
  249. package/dist/stats.d.ts +64 -0
  250. package/dist/stats.d.ts.map +1 -0
  251. package/dist/stats.js +295 -0
  252. package/dist/stats.js.map +1 -0
  253. package/dist/types.d.ts +150 -0
  254. package/dist/types.d.ts.map +1 -0
  255. package/dist/types.js +9 -0
  256. package/dist/types.js.map +1 -0
  257. package/dist/update-hint.test.d.ts +9 -0
  258. package/dist/update-hint.test.d.ts.map +1 -0
  259. package/dist/update-hint.test.js +156 -0
  260. package/dist/update-hint.test.js.map +1 -0
  261. package/dist/updater.d.ts +10 -0
  262. package/dist/updater.d.ts.map +1 -0
  263. package/dist/updater.js +55 -0
  264. package/dist/updater.js.map +1 -0
  265. package/dist/version.d.ts +3 -0
  266. package/dist/version.d.ts.map +1 -0
  267. package/dist/version.js +16 -0
  268. package/dist/version.js.map +1 -0
  269. package/dist/wallet.d.ts +52 -0
  270. package/dist/wallet.d.ts.map +1 -0
  271. package/dist/wallet.js +93 -0
  272. package/dist/wallet.js.map +1 -0
  273. package/dist/wallet.test.d.ts +6 -0
  274. package/dist/wallet.test.d.ts.map +1 -0
  275. package/dist/wallet.test.js +117 -0
  276. package/dist/wallet.test.js.map +1 -0
  277. package/dist/x402-sdk.test.d.ts +6 -0
  278. package/dist/x402-sdk.test.d.ts.map +1 -0
  279. package/dist/x402-sdk.test.js +161 -0
  280. package/dist/x402-sdk.test.js.map +1 -0
  281. package/package.json +2 -2
  282. package/scripts/e2e-multiturn.mjs +4 -1
@@ -0,0 +1,1215 @@
1
+ /**
2
+ * Default Routing Config
3
+ *
4
+ * All routing parameters as a TypeScript constant.
5
+ * Operators override via openclaw.yaml plugin config.
6
+ *
7
+ * Scoring uses 14 weighted dimensions with sigmoid confidence calibration.
8
+ */
9
+ export const DEFAULT_ROUTING_CONFIG = {
10
+ version: "2.0",
11
+ classifier: {
12
+ llmModel: "google/gemini-2.5-flash",
13
+ llmMaxTokens: 10,
14
+ llmTemperature: 0,
15
+ promptTruncationChars: 500,
16
+ cacheTtlMs: 3_600_000, // 1 hour
17
+ },
18
+ scoring: {
19
+ tokenCountThresholds: { simple: 50, complex: 500 },
20
+ // Multilingual keywords: EN + ZH + JA + RU + DE + ES + PT + KO + AR
21
+ codeKeywords: [
22
+ // English
23
+ "function",
24
+ "class",
25
+ "import",
26
+ "def",
27
+ "SELECT",
28
+ "async",
29
+ "await",
30
+ "const",
31
+ "let",
32
+ "var",
33
+ "return",
34
+ "```",
35
+ // Chinese
36
+ "函数",
37
+ "类",
38
+ "导入",
39
+ "定义",
40
+ "查询",
41
+ "异步",
42
+ "等待",
43
+ "常量",
44
+ "变量",
45
+ "返回",
46
+ // Japanese
47
+ "関数",
48
+ "クラス",
49
+ "インポート",
50
+ "非同期",
51
+ "定数",
52
+ "変数",
53
+ // Russian
54
+ "функция",
55
+ "класс",
56
+ "импорт",
57
+ "определ",
58
+ "запрос",
59
+ "асинхронный",
60
+ "ожидать",
61
+ "константа",
62
+ "переменная",
63
+ "вернуть",
64
+ // German
65
+ "funktion",
66
+ "klasse",
67
+ "importieren",
68
+ "definieren",
69
+ "abfrage",
70
+ "asynchron",
71
+ "erwarten",
72
+ "konstante",
73
+ "variable",
74
+ "zurückgeben",
75
+ // Spanish
76
+ "función",
77
+ "clase",
78
+ "importar",
79
+ "definir",
80
+ "consulta",
81
+ "asíncrono",
82
+ "esperar",
83
+ "constante",
84
+ "variable",
85
+ "retornar",
86
+ // Portuguese
87
+ "função",
88
+ "classe",
89
+ "importar",
90
+ "definir",
91
+ "consulta",
92
+ "assíncrono",
93
+ "aguardar",
94
+ "constante",
95
+ "variável",
96
+ "retornar",
97
+ // Korean
98
+ "함수",
99
+ "클래스",
100
+ "가져오기",
101
+ "정의",
102
+ "쿼리",
103
+ "비동기",
104
+ "대기",
105
+ "상수",
106
+ "변수",
107
+ "반환",
108
+ // Arabic
109
+ "دالة",
110
+ "فئة",
111
+ "استيراد",
112
+ "تعريف",
113
+ "استعلام",
114
+ "غير متزامن",
115
+ "انتظار",
116
+ "ثابت",
117
+ "متغير",
118
+ "إرجاع",
119
+ ],
120
+ reasoningKeywords: [
121
+ // English
122
+ "prove",
123
+ "theorem",
124
+ "derive",
125
+ "step by step",
126
+ "chain of thought",
127
+ "formally",
128
+ "mathematical",
129
+ "proof",
130
+ "logically",
131
+ // Chinese
132
+ "证明",
133
+ "定理",
134
+ "推导",
135
+ "逐步",
136
+ "思维链",
137
+ "形式化",
138
+ "数学",
139
+ "逻辑",
140
+ // Japanese
141
+ "証明",
142
+ "定理",
143
+ "導出",
144
+ "ステップバイステップ",
145
+ "論理的",
146
+ // Russian
147
+ "доказать",
148
+ "докажи",
149
+ "доказательств",
150
+ "теорема",
151
+ "вывести",
152
+ "шаг за шагом",
153
+ "пошагово",
154
+ "поэтапно",
155
+ "цепочка рассуждений",
156
+ "рассуждени",
157
+ "формально",
158
+ "математически",
159
+ "логически",
160
+ // German
161
+ "beweisen",
162
+ "beweis",
163
+ "theorem",
164
+ "ableiten",
165
+ "schritt für schritt",
166
+ "gedankenkette",
167
+ "formal",
168
+ "mathematisch",
169
+ "logisch",
170
+ // Spanish
171
+ "demostrar",
172
+ "teorema",
173
+ "derivar",
174
+ "paso a paso",
175
+ "cadena de pensamiento",
176
+ "formalmente",
177
+ "matemático",
178
+ "prueba",
179
+ "lógicamente",
180
+ // Portuguese
181
+ "provar",
182
+ "teorema",
183
+ "derivar",
184
+ "passo a passo",
185
+ "cadeia de pensamento",
186
+ "formalmente",
187
+ "matemático",
188
+ "prova",
189
+ "logicamente",
190
+ // Korean
191
+ "증명",
192
+ "정리",
193
+ "도출",
194
+ "단계별",
195
+ "사고의 연쇄",
196
+ "형식적",
197
+ "수학적",
198
+ "논리적",
199
+ // Arabic
200
+ "إثبات",
201
+ "نظرية",
202
+ "اشتقاق",
203
+ "خطوة بخطوة",
204
+ "سلسلة التفكير",
205
+ "رسمياً",
206
+ "رياضي",
207
+ "برهان",
208
+ "منطقياً",
209
+ ],
210
+ simpleKeywords: [
211
+ // English
212
+ "what is",
213
+ "define",
214
+ "translate",
215
+ "hello",
216
+ "yes or no",
217
+ "capital of",
218
+ "how old",
219
+ "who is",
220
+ "when was",
221
+ // Chinese
222
+ "什么是",
223
+ "定义",
224
+ "翻译",
225
+ "你好",
226
+ "是否",
227
+ "首都",
228
+ "多大",
229
+ "谁是",
230
+ "何时",
231
+ // Japanese
232
+ "とは",
233
+ "定義",
234
+ "翻訳",
235
+ "こんにちは",
236
+ "はいかいいえ",
237
+ "首都",
238
+ "誰",
239
+ // Russian
240
+ "что такое",
241
+ "определение",
242
+ "перевести",
243
+ "переведи",
244
+ "привет",
245
+ "да или нет",
246
+ "столица",
247
+ "сколько лет",
248
+ "кто такой",
249
+ "когда",
250
+ "объясни",
251
+ // German
252
+ "was ist",
253
+ "definiere",
254
+ "übersetze",
255
+ "hallo",
256
+ "ja oder nein",
257
+ "hauptstadt",
258
+ "wie alt",
259
+ "wer ist",
260
+ "wann",
261
+ "erkläre",
262
+ // Spanish
263
+ "qué es",
264
+ "definir",
265
+ "traducir",
266
+ "hola",
267
+ "sí o no",
268
+ "capital de",
269
+ "cuántos años",
270
+ "quién es",
271
+ "cuándo",
272
+ // Portuguese
273
+ "o que é",
274
+ "definir",
275
+ "traduzir",
276
+ "olá",
277
+ "sim ou não",
278
+ "capital de",
279
+ "quantos anos",
280
+ "quem é",
281
+ "quando",
282
+ // Korean
283
+ "무엇",
284
+ "정의",
285
+ "번역",
286
+ "안녕하세요",
287
+ "예 또는 아니오",
288
+ "수도",
289
+ "누구",
290
+ "언제",
291
+ // Arabic
292
+ "ما هو",
293
+ "تعريف",
294
+ "ترجم",
295
+ "مرحبا",
296
+ "نعم أو لا",
297
+ "عاصمة",
298
+ "من هو",
299
+ "متى",
300
+ ],
301
+ technicalKeywords: [
302
+ // English
303
+ "algorithm",
304
+ "optimize",
305
+ "architecture",
306
+ "distributed",
307
+ "kubernetes",
308
+ "microservice",
309
+ "database",
310
+ "infrastructure",
311
+ // Chinese
312
+ "算法",
313
+ "优化",
314
+ "架构",
315
+ "分布式",
316
+ "微服务",
317
+ "数据库",
318
+ "基础设施",
319
+ // Japanese
320
+ "アルゴリズム",
321
+ "最適化",
322
+ "アーキテクチャ",
323
+ "分散",
324
+ "マイクロサービス",
325
+ "データベース",
326
+ // Russian
327
+ "алгоритм",
328
+ "оптимизировать",
329
+ "оптимизаци",
330
+ "оптимизируй",
331
+ "архитектура",
332
+ "распределённый",
333
+ "микросервис",
334
+ "база данных",
335
+ "инфраструктура",
336
+ // German
337
+ "algorithmus",
338
+ "optimieren",
339
+ "architektur",
340
+ "verteilt",
341
+ "kubernetes",
342
+ "mikroservice",
343
+ "datenbank",
344
+ "infrastruktur",
345
+ // Spanish
346
+ "algoritmo",
347
+ "optimizar",
348
+ "arquitectura",
349
+ "distribuido",
350
+ "microservicio",
351
+ "base de datos",
352
+ "infraestructura",
353
+ // Portuguese
354
+ "algoritmo",
355
+ "otimizar",
356
+ "arquitetura",
357
+ "distribuído",
358
+ "microsserviço",
359
+ "banco de dados",
360
+ "infraestrutura",
361
+ // Korean
362
+ "알고리즘",
363
+ "최적화",
364
+ "아키텍처",
365
+ "분산",
366
+ "마이크로서비스",
367
+ "데이터베이스",
368
+ "인프라",
369
+ // Arabic
370
+ "خوارزمية",
371
+ "تحسين",
372
+ "بنية",
373
+ "موزع",
374
+ "خدمة مصغرة",
375
+ "قاعدة بيانات",
376
+ "بنية تحتية",
377
+ ],
378
+ creativeKeywords: [
379
+ // English
380
+ "story",
381
+ "poem",
382
+ "compose",
383
+ "brainstorm",
384
+ "creative",
385
+ "imagine",
386
+ "write a",
387
+ // Chinese
388
+ "故事",
389
+ "诗",
390
+ "创作",
391
+ "头脑风暴",
392
+ "创意",
393
+ "想象",
394
+ "写一个",
395
+ // Japanese
396
+ "物語",
397
+ "詩",
398
+ "作曲",
399
+ "ブレインストーム",
400
+ "創造的",
401
+ "想像",
402
+ // Russian
403
+ "история",
404
+ "рассказ",
405
+ "стихотворение",
406
+ "сочинить",
407
+ "сочини",
408
+ "мозговой штурм",
409
+ "творческий",
410
+ "представить",
411
+ "придумай",
412
+ "напиши",
413
+ // German
414
+ "geschichte",
415
+ "gedicht",
416
+ "komponieren",
417
+ "brainstorming",
418
+ "kreativ",
419
+ "vorstellen",
420
+ "schreibe",
421
+ "erzählung",
422
+ // Spanish
423
+ "historia",
424
+ "poema",
425
+ "componer",
426
+ "lluvia de ideas",
427
+ "creativo",
428
+ "imaginar",
429
+ "escribe",
430
+ // Portuguese
431
+ "história",
432
+ "poema",
433
+ "compor",
434
+ "criativo",
435
+ "imaginar",
436
+ "escreva",
437
+ // Korean
438
+ "이야기",
439
+ "시",
440
+ "작곡",
441
+ "브레인스토밍",
442
+ "창의적",
443
+ "상상",
444
+ "작성",
445
+ // Arabic
446
+ "قصة",
447
+ "قصيدة",
448
+ "تأليف",
449
+ "عصف ذهني",
450
+ "إبداعي",
451
+ "تخيل",
452
+ "اكتب",
453
+ ],
454
+ // New dimension keyword lists (multilingual)
455
+ imperativeVerbs: [
456
+ // English
457
+ "build",
458
+ "create",
459
+ "implement",
460
+ "design",
461
+ "develop",
462
+ "construct",
463
+ "generate",
464
+ "deploy",
465
+ "configure",
466
+ "set up",
467
+ // Chinese
468
+ "构建",
469
+ "创建",
470
+ "实现",
471
+ "设计",
472
+ "开发",
473
+ "生成",
474
+ "部署",
475
+ "配置",
476
+ "设置",
477
+ // Japanese
478
+ "構築",
479
+ "作成",
480
+ "実装",
481
+ "設計",
482
+ "開発",
483
+ "生成",
484
+ "デプロイ",
485
+ "設定",
486
+ // Russian
487
+ "построить",
488
+ "построй",
489
+ "создать",
490
+ "создай",
491
+ "реализовать",
492
+ "реализуй",
493
+ "спроектировать",
494
+ "разработать",
495
+ "разработай",
496
+ "сконструировать",
497
+ "сгенерировать",
498
+ "сгенерируй",
499
+ "развернуть",
500
+ "разверни",
501
+ "настроить",
502
+ "настрой",
503
+ // German
504
+ "erstellen",
505
+ "bauen",
506
+ "implementieren",
507
+ "entwerfen",
508
+ "entwickeln",
509
+ "konstruieren",
510
+ "generieren",
511
+ "bereitstellen",
512
+ "konfigurieren",
513
+ "einrichten",
514
+ // Spanish
515
+ "construir",
516
+ "crear",
517
+ "implementar",
518
+ "diseñar",
519
+ "desarrollar",
520
+ "generar",
521
+ "desplegar",
522
+ "configurar",
523
+ // Portuguese
524
+ "construir",
525
+ "criar",
526
+ "implementar",
527
+ "projetar",
528
+ "desenvolver",
529
+ "gerar",
530
+ "implantar",
531
+ "configurar",
532
+ // Korean
533
+ "구축",
534
+ "생성",
535
+ "구현",
536
+ "설계",
537
+ "개발",
538
+ "배포",
539
+ "설정",
540
+ // Arabic
541
+ "بناء",
542
+ "إنشاء",
543
+ "تنفيذ",
544
+ "تصميم",
545
+ "تطوير",
546
+ "توليد",
547
+ "نشر",
548
+ "إعداد",
549
+ ],
550
+ constraintIndicators: [
551
+ // English
552
+ "under",
553
+ "at most",
554
+ "at least",
555
+ "within",
556
+ "no more than",
557
+ "o(",
558
+ "maximum",
559
+ "minimum",
560
+ "limit",
561
+ "budget",
562
+ // Chinese
563
+ "不超过",
564
+ "至少",
565
+ "最多",
566
+ "在内",
567
+ "最大",
568
+ "最小",
569
+ "限制",
570
+ "预算",
571
+ // Japanese
572
+ "以下",
573
+ "最大",
574
+ "最小",
575
+ "制限",
576
+ "予算",
577
+ // Russian
578
+ "не более",
579
+ "не менее",
580
+ "как минимум",
581
+ "в пределах",
582
+ "максимум",
583
+ "минимум",
584
+ "ограничение",
585
+ "бюджет",
586
+ // German
587
+ "höchstens",
588
+ "mindestens",
589
+ "innerhalb",
590
+ "nicht mehr als",
591
+ "maximal",
592
+ "minimal",
593
+ "grenze",
594
+ "budget",
595
+ // Spanish
596
+ "como máximo",
597
+ "al menos",
598
+ "dentro de",
599
+ "no más de",
600
+ "máximo",
601
+ "mínimo",
602
+ "límite",
603
+ "presupuesto",
604
+ // Portuguese
605
+ "no máximo",
606
+ "pelo menos",
607
+ "dentro de",
608
+ "não mais que",
609
+ "máximo",
610
+ "mínimo",
611
+ "limite",
612
+ "orçamento",
613
+ // Korean
614
+ "이하",
615
+ "이상",
616
+ "최대",
617
+ "최소",
618
+ "제한",
619
+ "예산",
620
+ // Arabic
621
+ "على الأكثر",
622
+ "على الأقل",
623
+ "ضمن",
624
+ "لا يزيد عن",
625
+ "أقصى",
626
+ "أدنى",
627
+ "حد",
628
+ "ميزانية",
629
+ ],
630
+ outputFormatKeywords: [
631
+ // English
632
+ "json",
633
+ "yaml",
634
+ "xml",
635
+ "table",
636
+ "csv",
637
+ "markdown",
638
+ "schema",
639
+ "format as",
640
+ "structured",
641
+ // Chinese
642
+ "表格",
643
+ "格式化为",
644
+ "结构化",
645
+ // Japanese
646
+ "テーブル",
647
+ "フォーマット",
648
+ "構造化",
649
+ // Russian
650
+ "таблица",
651
+ "форматировать как",
652
+ "структурированный",
653
+ // German
654
+ "tabelle",
655
+ "formatieren als",
656
+ "strukturiert",
657
+ // Spanish
658
+ "tabla",
659
+ "formatear como",
660
+ "estructurado",
661
+ // Portuguese
662
+ "tabela",
663
+ "formatar como",
664
+ "estruturado",
665
+ // Korean
666
+ "테이블",
667
+ "형식",
668
+ "구조화",
669
+ // Arabic
670
+ "جدول",
671
+ "تنسيق",
672
+ "منظم",
673
+ ],
674
+ referenceKeywords: [
675
+ // English
676
+ "above",
677
+ "below",
678
+ "previous",
679
+ "following",
680
+ "the docs",
681
+ "the api",
682
+ "the code",
683
+ "earlier",
684
+ "attached",
685
+ // Chinese
686
+ "上面",
687
+ "下面",
688
+ "之前",
689
+ "接下来",
690
+ "文档",
691
+ "代码",
692
+ "附件",
693
+ // Japanese
694
+ "上記",
695
+ "下記",
696
+ "前の",
697
+ "次の",
698
+ "ドキュメント",
699
+ "コード",
700
+ // Russian
701
+ "выше",
702
+ "ниже",
703
+ "предыдущий",
704
+ "следующий",
705
+ "документация",
706
+ "код",
707
+ "ранее",
708
+ "вложение",
709
+ // German
710
+ "oben",
711
+ "unten",
712
+ "vorherige",
713
+ "folgende",
714
+ "dokumentation",
715
+ "der code",
716
+ "früher",
717
+ "anhang",
718
+ // Spanish
719
+ "arriba",
720
+ "abajo",
721
+ "anterior",
722
+ "siguiente",
723
+ "documentación",
724
+ "el código",
725
+ "adjunto",
726
+ // Portuguese
727
+ "acima",
728
+ "abaixo",
729
+ "anterior",
730
+ "seguinte",
731
+ "documentação",
732
+ "o código",
733
+ "anexo",
734
+ // Korean
735
+ "위",
736
+ "아래",
737
+ "이전",
738
+ "다음",
739
+ "문서",
740
+ "코드",
741
+ "첨부",
742
+ // Arabic
743
+ "أعلاه",
744
+ "أدناه",
745
+ "السابق",
746
+ "التالي",
747
+ "الوثائق",
748
+ "الكود",
749
+ "مرفق",
750
+ ],
751
+ negationKeywords: [
752
+ // English
753
+ "don't",
754
+ "do not",
755
+ "avoid",
756
+ "never",
757
+ "without",
758
+ "except",
759
+ "exclude",
760
+ "no longer",
761
+ // Chinese
762
+ "不要",
763
+ "避免",
764
+ "从不",
765
+ "没有",
766
+ "除了",
767
+ "排除",
768
+ // Japanese
769
+ "しないで",
770
+ "避ける",
771
+ "決して",
772
+ "なしで",
773
+ "除く",
774
+ // Russian
775
+ "не делай",
776
+ "не надо",
777
+ "нельзя",
778
+ "избегать",
779
+ "никогда",
780
+ "без",
781
+ "кроме",
782
+ "исключить",
783
+ "больше не",
784
+ // German
785
+ "nicht",
786
+ "vermeide",
787
+ "niemals",
788
+ "ohne",
789
+ "außer",
790
+ "ausschließen",
791
+ "nicht mehr",
792
+ // Spanish
793
+ "no hagas",
794
+ "evitar",
795
+ "nunca",
796
+ "sin",
797
+ "excepto",
798
+ "excluir",
799
+ // Portuguese
800
+ "não faça",
801
+ "evitar",
802
+ "nunca",
803
+ "sem",
804
+ "exceto",
805
+ "excluir",
806
+ // Korean
807
+ "하지 마",
808
+ "피하다",
809
+ "절대",
810
+ "없이",
811
+ "제외",
812
+ // Arabic
813
+ "لا تفعل",
814
+ "تجنب",
815
+ "أبداً",
816
+ "بدون",
817
+ "باستثناء",
818
+ "استبعاد",
819
+ ],
820
+ domainSpecificKeywords: [
821
+ // English
822
+ "quantum",
823
+ "fpga",
824
+ "vlsi",
825
+ "risc-v",
826
+ "asic",
827
+ "photonics",
828
+ "genomics",
829
+ "proteomics",
830
+ "topological",
831
+ "homomorphic",
832
+ "zero-knowledge",
833
+ "lattice-based",
834
+ // Chinese
835
+ "量子",
836
+ "光子学",
837
+ "基因组学",
838
+ "蛋白质组学",
839
+ "拓扑",
840
+ "同态",
841
+ "零知识",
842
+ "格密码",
843
+ // Japanese
844
+ "量子",
845
+ "フォトニクス",
846
+ "ゲノミクス",
847
+ "トポロジカル",
848
+ // Russian
849
+ "квантовый",
850
+ "фотоника",
851
+ "геномика",
852
+ "протеомика",
853
+ "топологический",
854
+ "гомоморфный",
855
+ "с нулевым разглашением",
856
+ "на основе решёток",
857
+ // German
858
+ "quanten",
859
+ "photonik",
860
+ "genomik",
861
+ "proteomik",
862
+ "topologisch",
863
+ "homomorph",
864
+ "zero-knowledge",
865
+ "gitterbasiert",
866
+ // Spanish
867
+ "cuántico",
868
+ "fotónica",
869
+ "genómica",
870
+ "proteómica",
871
+ "topológico",
872
+ "homomórfico",
873
+ // Portuguese
874
+ "quântico",
875
+ "fotônica",
876
+ "genômica",
877
+ "proteômica",
878
+ "topológico",
879
+ "homomórfico",
880
+ // Korean
881
+ "양자",
882
+ "포토닉스",
883
+ "유전체학",
884
+ "위상",
885
+ "동형",
886
+ // Arabic
887
+ "كمي",
888
+ "ضوئيات",
889
+ "جينوميات",
890
+ "طوبولوجي",
891
+ "تماثلي",
892
+ ],
893
+ // Agentic task keywords - file ops, execution, multi-step, iterative work
894
+ // Pruned: removed overly common words like "then", "first", "run", "test", "build"
895
+ agenticTaskKeywords: [
896
+ // English - File operations (clearly agentic)
897
+ "read file",
898
+ "read the file",
899
+ "look at",
900
+ "check the",
901
+ "open the",
902
+ "edit",
903
+ "modify",
904
+ "update the",
905
+ "change the",
906
+ "write to",
907
+ "create file",
908
+ // English - Execution (specific commands only)
909
+ "execute",
910
+ "deploy",
911
+ "install",
912
+ "npm",
913
+ "pip",
914
+ "compile",
915
+ // English - Multi-step patterns (specific only)
916
+ "after that",
917
+ "and also",
918
+ "once done",
919
+ "step 1",
920
+ "step 2",
921
+ // English - Iterative work
922
+ "fix",
923
+ "debug",
924
+ "until it works",
925
+ "keep trying",
926
+ "iterate",
927
+ "make sure",
928
+ "verify",
929
+ "confirm",
930
+ // Chinese (keep specific ones)
931
+ "读取文件",
932
+ "查看",
933
+ "打开",
934
+ "编辑",
935
+ "修改",
936
+ "更新",
937
+ "创建",
938
+ "执行",
939
+ "部署",
940
+ "安装",
941
+ "第一步",
942
+ "第二步",
943
+ "修复",
944
+ "调试",
945
+ "直到",
946
+ "确认",
947
+ "验证",
948
+ // Spanish
949
+ "leer archivo",
950
+ "editar",
951
+ "modificar",
952
+ "actualizar",
953
+ "ejecutar",
954
+ "desplegar",
955
+ "instalar",
956
+ "paso 1",
957
+ "paso 2",
958
+ "arreglar",
959
+ "depurar",
960
+ "verificar",
961
+ // Portuguese
962
+ "ler arquivo",
963
+ "editar",
964
+ "modificar",
965
+ "atualizar",
966
+ "executar",
967
+ "implantar",
968
+ "instalar",
969
+ "passo 1",
970
+ "passo 2",
971
+ "corrigir",
972
+ "depurar",
973
+ "verificar",
974
+ // Korean
975
+ "파일 읽기",
976
+ "편집",
977
+ "수정",
978
+ "업데이트",
979
+ "실행",
980
+ "배포",
981
+ "설치",
982
+ "단계 1",
983
+ "단계 2",
984
+ "디버그",
985
+ "확인",
986
+ // Arabic
987
+ "قراءة ملف",
988
+ "تحرير",
989
+ "تعديل",
990
+ "تحديث",
991
+ "تنفيذ",
992
+ "نشر",
993
+ "تثبيت",
994
+ "الخطوة 1",
995
+ "الخطوة 2",
996
+ "إصلاح",
997
+ "تصحيح",
998
+ "تحقق",
999
+ ],
1000
+ // Dimension weights (sum to 1.0)
1001
+ dimensionWeights: {
1002
+ tokenCount: 0.08,
1003
+ codePresence: 0.15,
1004
+ reasoningMarkers: 0.18,
1005
+ technicalTerms: 0.1,
1006
+ creativeMarkers: 0.05,
1007
+ simpleIndicators: 0.02, // Reduced from 0.12 to make room for agenticTask
1008
+ multiStepPatterns: 0.12,
1009
+ questionComplexity: 0.05,
1010
+ imperativeVerbs: 0.03,
1011
+ constraintCount: 0.04,
1012
+ outputFormat: 0.03,
1013
+ referenceComplexity: 0.02,
1014
+ negationComplexity: 0.01,
1015
+ domainSpecificity: 0.02,
1016
+ agenticTask: 0.04, // Reduced - agentic signals influence tier selection, not dominate it
1017
+ },
1018
+ // Tier boundaries on weighted score axis
1019
+ tierBoundaries: {
1020
+ simpleMedium: 0.0,
1021
+ mediumComplex: 0.3, // Raised from 0.18 - prevent simple tasks from reaching expensive COMPLEX tier
1022
+ complexReasoning: 0.5, // Raised from 0.4 - reserve for true reasoning tasks
1023
+ },
1024
+ // Sigmoid steepness for confidence calibration
1025
+ confidenceSteepness: 12,
1026
+ // Below this confidence → ambiguous (null tier)
1027
+ confidenceThreshold: 0.7,
1028
+ },
1029
+ // Auto (balanced) tier configs - current default smart routing
1030
+ // Benchmark-tuned 2026-03-16: balancing quality (retention) + latency
1031
+ tiers: {
1032
+ SIMPLE: {
1033
+ primary: "google/gemini-2.5-flash", // 1,238ms, IQ 20, 60% retention (best) — fast AND quality
1034
+ fallback: [
1035
+ "google/gemini-3-flash-preview", // 1,398ms, IQ 46 — smarter fallback
1036
+ "deepseek/deepseek-chat", // 1,431ms, IQ 32, 41% retention
1037
+ "moonshot/kimi-k2.5", // 1,646ms, IQ 47, strong quality
1038
+ "google/gemini-3.1-flash-lite", // $0.25/$1.50, 1M context — newest flash-lite
1039
+ "google/gemini-2.5-flash-lite", // 1,353ms, $0.10/$0.40
1040
+ "openai/gpt-5.4-nano", // $0.20/$1.25, 1M context
1041
+ "xai/grok-4-fast-non-reasoning", // 1,143ms, $0.20/$0.50 — fast fallback
1042
+ "free/gpt-oss-120b", // 1,252ms, FREE fallback
1043
+ ],
1044
+ },
1045
+ MEDIUM: {
1046
+ primary: "moonshot/kimi-k2.5", // 1,646ms, IQ 47, $0.60/$3.00 — strong tool use, quality output
1047
+ fallback: [
1048
+ "google/gemini-3-flash-preview", // 1,398ms, IQ 46 — nearly same IQ, faster + cheaper
1049
+ "deepseek/deepseek-chat", // 1,431ms, IQ 32, 41% retention
1050
+ "google/gemini-2.5-flash", // 1,238ms, 60% retention
1051
+ "google/gemini-3.1-flash-lite", // $0.25/$1.50, 1M context
1052
+ "google/gemini-2.5-flash-lite", // 1,353ms, $0.10/$0.40
1053
+ "xai/grok-4-1-fast-non-reasoning", // 1,244ms, fast fallback
1054
+ "xai/grok-3-mini", // 1,202ms, $0.30/$0.50
1055
+ ],
1056
+ },
1057
+ COMPLEX: {
1058
+ primary: "google/gemini-3.1-pro", // 1,609ms, IQ 57 — fast flagship quality
1059
+ fallback: [
1060
+ "google/gemini-3-pro-preview", // 1,352ms, IQ 48 — quality-first fallback
1061
+ "google/gemini-3-flash-preview", // 1,398ms, IQ 46 — fast + smart
1062
+ "xai/grok-4-0709", // 1,348ms, IQ 41
1063
+ "google/gemini-2.5-pro", // 1,294ms
1064
+ "anthropic/claude-sonnet-4.6", // 2,110ms, IQ 52 — quality fallback
1065
+ "deepseek/deepseek-chat", // 1,431ms, IQ 32
1066
+ "google/gemini-2.5-flash", // 1,238ms, IQ 20 — cheap last resort
1067
+ "openai/gpt-5.4", // 6,213ms, IQ 57 — slowest but highest quality
1068
+ ],
1069
+ },
1070
+ REASONING: {
1071
+ primary: "xai/grok-4-1-fast-reasoning", // 1,454ms, $0.20/$0.50
1072
+ fallback: [
1073
+ "xai/grok-4-fast-reasoning", // 1,298ms, $0.20/$0.50
1074
+ "deepseek/deepseek-reasoner", // 1,454ms, cheap reasoning
1075
+ "openai/o4-mini", // 2,328ms ($1.10/$4.40)
1076
+ "openai/o3", // 2,862ms
1077
+ ],
1078
+ },
1079
+ },
1080
+ // Eco tier configs - absolute cheapest (blockrun/eco)
1081
+ ecoTiers: {
1082
+ SIMPLE: {
1083
+ primary: "free/gpt-oss-120b", // FREE! $0.00/$0.00
1084
+ fallback: [
1085
+ "free/gpt-oss-20b", // FREE — smaller, faster
1086
+ "google/gemini-3.1-flash-lite", // $0.25/$1.50 — newest flash-lite
1087
+ "openai/gpt-5.4-nano", // $0.20/$1.25 — fast nano
1088
+ "google/gemini-2.5-flash-lite", // $0.10/$0.40
1089
+ "xai/grok-4-fast-non-reasoning", // $0.20/$0.50
1090
+ ],
1091
+ },
1092
+ MEDIUM: {
1093
+ primary: "google/gemini-3.1-flash-lite", // $0.25/$1.50 — newest flash-lite
1094
+ fallback: [
1095
+ "openai/gpt-5.4-nano", // $0.20/$1.25
1096
+ "google/gemini-2.5-flash-lite", // $0.10/$0.40
1097
+ "xai/grok-4-fast-non-reasoning",
1098
+ "google/gemini-2.5-flash",
1099
+ ],
1100
+ },
1101
+ COMPLEX: {
1102
+ primary: "google/gemini-3.1-flash-lite", // $0.25/$1.50
1103
+ fallback: [
1104
+ "google/gemini-2.5-flash-lite",
1105
+ "xai/grok-4-0709",
1106
+ "google/gemini-2.5-flash",
1107
+ "deepseek/deepseek-chat",
1108
+ ],
1109
+ },
1110
+ REASONING: {
1111
+ primary: "xai/grok-4-1-fast-reasoning", // $0.20/$0.50
1112
+ fallback: ["xai/grok-4-fast-reasoning", "deepseek/deepseek-reasoner"],
1113
+ },
1114
+ },
1115
+ // Premium tier configs - best quality (blockrun/premium)
1116
+ // codex=complex coding, kimi=simple coding, sonnet=reasoning/instructions, opus=architecture/PM/audits
1117
+ premiumTiers: {
1118
+ SIMPLE: {
1119
+ primary: "moonshot/kimi-k2.5", // $0.60/$3.00 - good for simple coding
1120
+ fallback: [
1121
+ "google/gemini-2.5-flash", // 60% retention, fast growth
1122
+ "anthropic/claude-haiku-4.5",
1123
+ "google/gemini-2.5-flash-lite",
1124
+ "deepseek/deepseek-chat",
1125
+ ],
1126
+ },
1127
+ MEDIUM: {
1128
+ primary: "openai/gpt-5.3-codex", // $1.75/$14 - 400K context, 128K output, replaces 5.2
1129
+ fallback: [
1130
+ "moonshot/kimi-k2.5",
1131
+ "google/gemini-2.5-flash", // 60% retention, good coding capability
1132
+ "google/gemini-2.5-pro",
1133
+ "xai/grok-4-0709",
1134
+ "anthropic/claude-sonnet-4.6",
1135
+ ],
1136
+ },
1137
+ COMPLEX: {
1138
+ primary: "anthropic/claude-opus-4.6", // Best quality for complex tasks
1139
+ fallback: [
1140
+ "openai/gpt-5.4", // Newest flagship
1141
+ "openai/gpt-5.3-codex",
1142
+ "anthropic/claude-opus-4.6",
1143
+ "anthropic/claude-sonnet-4.6",
1144
+ "google/gemini-3.1-pro", // Newest Gemini
1145
+ "google/gemini-3-pro-preview",
1146
+ "moonshot/kimi-k2.5",
1147
+ ],
1148
+ },
1149
+ REASONING: {
1150
+ primary: "anthropic/claude-sonnet-4.6", // 2,110ms, $3/$15 - best for reasoning/instructions
1151
+ fallback: [
1152
+ "anthropic/claude-opus-4.6", // 2,139ms
1153
+ "xai/grok-4-1-fast-reasoning", // 1,454ms, cheap fast reasoning
1154
+ "openai/o4-mini", // 2,328ms ($1.10/$4.40)
1155
+ "openai/o3", // 2,862ms
1156
+ ],
1157
+ },
1158
+ },
1159
+ // Agentic tier configs - models that excel at multi-step autonomous tasks
1160
+ agenticTiers: {
1161
+ SIMPLE: {
1162
+ primary: "openai/gpt-4o-mini", // $0.15/$0.60 - best tool compliance at lowest cost
1163
+ fallback: [
1164
+ "moonshot/kimi-k2.5", // 1,646ms, strong tool use quality
1165
+ "anthropic/claude-haiku-4.5", // 2,305ms
1166
+ "xai/grok-4-1-fast-non-reasoning", // 1,244ms, fast fallback
1167
+ ],
1168
+ },
1169
+ MEDIUM: {
1170
+ primary: "moonshot/kimi-k2.5", // 1,646ms, $0.60/$3.00 - strong tool use, proper function calls
1171
+ fallback: [
1172
+ "xai/grok-4-1-fast-non-reasoning", // 1,244ms, fast fallback
1173
+ "openai/gpt-4o-mini", // 2,764ms, reliable tool calling
1174
+ "anthropic/claude-haiku-4.5", // 2,305ms
1175
+ "deepseek/deepseek-chat", // 1,431ms
1176
+ ],
1177
+ },
1178
+ COMPLEX: {
1179
+ primary: "anthropic/claude-sonnet-4.6", // 2,110ms — best agentic quality
1180
+ fallback: [
1181
+ "anthropic/claude-opus-4.6", // 2,139ms — top quality
1182
+ "google/gemini-3.1-pro", // 1,609ms
1183
+ "xai/grok-4-0709", // 1,348ms
1184
+ "openai/gpt-5.4", // 6,213ms — slow but highest quality fallback
1185
+ ],
1186
+ },
1187
+ REASONING: {
1188
+ primary: "anthropic/claude-sonnet-4.6", // 2,110ms — strong tool use + reasoning
1189
+ fallback: [
1190
+ "anthropic/claude-opus-4.6", // 2,139ms
1191
+ "xai/grok-4-1-fast-reasoning", // 1,454ms
1192
+ "deepseek/deepseek-reasoner", // 1,454ms
1193
+ ],
1194
+ },
1195
+ },
1196
+ // Time-windowed promotions — auto-applied when active, ignored when expired
1197
+ promotions: [
1198
+ {
1199
+ name: "GLM-5 Launch Promo ($0.001 flat)",
1200
+ startDate: "2026-04-01",
1201
+ endDate: "2026-04-15",
1202
+ tierOverrides: {
1203
+ SIMPLE: { primary: "zai/glm-5" },
1204
+ },
1205
+ profiles: ["auto"], // only auto profile — eco stays free, premium stays premium
1206
+ },
1207
+ ],
1208
+ overrides: {
1209
+ maxTokensForceComplex: 100_000,
1210
+ structuredOutputMinTier: "MEDIUM",
1211
+ ambiguousDefaultTier: "MEDIUM",
1212
+ agenticMode: false,
1213
+ },
1214
+ };
1215
+ //# sourceMappingURL=config.js.map