cartethyia 2.7.3 → 2.7.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.
Files changed (625) hide show
  1. package/.env.example +2 -0
  2. package/README.md +17 -5
  3. package/dist/dashboard/assets/{BannedPage-2TJD37Hb.js → BannedPage-Cj15GsMp.js} +1 -1
  4. package/dist/dashboard/assets/BannedPage-Cj15GsMp.js.gz +0 -0
  5. package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js +1 -0
  6. package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js.gz +0 -0
  7. package/dist/dashboard/assets/{CliToolDetailPage-xefJNRmJ.js → CliToolDetailPage-DZKmVuJN.js} +1 -1
  8. package/dist/dashboard/assets/CliToolDetailPage-DZKmVuJN.js.gz +0 -0
  9. package/dist/dashboard/assets/{CliToolsPage-Rj9iHQ3F.js → CliToolsPage-BIccZmeL.js} +1 -1
  10. package/dist/dashboard/assets/CliToolsPage-BIccZmeL.js.gz +0 -0
  11. package/dist/dashboard/assets/CombosPage-DEEKkYD-.js +1 -0
  12. package/dist/dashboard/assets/CombosPage-DEEKkYD-.js.gz +0 -0
  13. package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js +1 -0
  14. package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js.gz +0 -0
  15. package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js +1 -0
  16. package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js.gz +0 -0
  17. package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js +656 -0
  18. package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js.gz +0 -0
  19. package/dist/dashboard/assets/{LoginPage-C4w7vea-.js → LoginPage-DkXb6dx-.js} +1 -1
  20. package/dist/dashboard/assets/LoginPage-DkXb6dx-.js.gz +0 -0
  21. package/dist/dashboard/assets/{ModelPicker-BtPcAfot.js → ModelPicker-DnQPSIA8.js} +1 -1
  22. package/dist/dashboard/assets/ModelPicker-DnQPSIA8.js.gz +0 -0
  23. package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js +1 -0
  24. package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js.gz +0 -0
  25. package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js +5 -0
  26. package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js.gz +0 -0
  27. package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js +1 -0
  28. package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js.gz +0 -0
  29. package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js +1 -0
  30. package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js.gz +0 -0
  31. package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js +9 -0
  32. package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js.gz +0 -0
  33. package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js +1 -0
  34. package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js.gz +0 -0
  35. package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js +1 -0
  36. package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js.gz +0 -0
  37. package/dist/dashboard/assets/{SetupPage-BQS0Rx_u.js → SetupPage-WTa0sktC.js} +1 -1
  38. package/dist/dashboard/assets/SetupPage-WTa0sktC.js.gz +0 -0
  39. package/dist/dashboard/assets/{StudioPage-TP7voAQ0.js → StudioPage-BfAb5-o_.js} +3 -3
  40. package/dist/dashboard/assets/StudioPage-BfAb5-o_.js.gz +0 -0
  41. package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js +56 -0
  42. package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js.gz +0 -0
  43. package/dist/dashboard/assets/api-keys-l29JROPv.js +1 -0
  44. package/dist/dashboard/assets/api-keys-l29JROPv.js.gz +0 -0
  45. package/dist/dashboard/assets/app--PJWq8_C.css +2 -0
  46. package/dist/dashboard/assets/app--PJWq8_C.css.gz +0 -0
  47. package/dist/dashboard/assets/{assert-C0YYuZJ4.js → assert-C0K-c4eo.js} +1 -1
  48. package/dist/dashboard/assets/assert-C0K-c4eo.js.gz +0 -0
  49. package/dist/dashboard/assets/{badge-B_DMpMJN.js → badge-DfbhQU4k.js} +1 -1
  50. package/dist/dashboard/assets/badge-DfbhQU4k.js.gz +0 -0
  51. package/dist/dashboard/assets/{banner-DMrMPmth.js → banner-BllT4LcF.js} +1 -1
  52. package/dist/dashboard/assets/banner-BllT4LcF.js.gz +0 -0
  53. package/dist/dashboard/assets/brand/login_register.jpg +0 -0
  54. package/dist/dashboard/assets/brand/login_register_initial.jpg +0 -0
  55. package/dist/dashboard/assets/brand/og_bansos.jpg +0 -0
  56. package/dist/dashboard/assets/brand/og_image.jpg +0 -0
  57. package/dist/dashboard/assets/{card-Be5Uzamx.js → card-CtkX66Wd.js} +1 -1
  58. package/dist/dashboard/assets/card-CtkX66Wd.js.gz +0 -0
  59. package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js +1 -0
  60. package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js.gz +0 -0
  61. package/dist/dashboard/assets/{cli-tools-muFRphDu.js → cli-tools-CQXVMn4P.js} +1 -1
  62. package/dist/dashboard/assets/cli-tools-CQXVMn4P.js.gz +0 -0
  63. package/dist/dashboard/assets/{clipboard-button-DOfrVmsi.js → clipboard-button-BQqBQd2n.js} +1 -1
  64. package/dist/dashboard/assets/clipboard-button-BQqBQd2n.js.gz +0 -0
  65. package/dist/dashboard/assets/{dialog-C9omdjQt.js → dialog-BEK7KP0H.js} +1 -1
  66. package/dist/dashboard/assets/dialog-BEK7KP0H.js.gz +0 -0
  67. package/dist/dashboard/assets/{drawer-Bm8WKaGY.js → drawer-BrTEZ8zu.js} +1 -1
  68. package/dist/dashboard/assets/drawer-BrTEZ8zu.js.gz +0 -0
  69. package/dist/dashboard/assets/entry-CHWxbS56.js +1 -0
  70. package/dist/dashboard/assets/entry-CHWxbS56.js.gz +0 -0
  71. package/dist/dashboard/assets/{entry-q5HwZ8nN.js → entry-EBHJ3DrE.js} +1 -1
  72. package/dist/dashboard/assets/entry-EBHJ3DrE.js.gz +0 -0
  73. package/dist/dashboard/assets/entry-LCS85hiq.js +4 -0
  74. package/dist/dashboard/assets/entry-LCS85hiq.js.gz +0 -0
  75. package/dist/dashboard/assets/{formatters-BTScrQpe.js → formatters-BAACA727.js} +1 -1
  76. package/dist/dashboard/assets/formatters-BAACA727.js.gz +0 -0
  77. package/dist/dashboard/assets/{github-badge-Orjuzemr.js → github-badge-YSCE4UC2.js} +1 -1
  78. package/dist/dashboard/assets/github-badge-YSCE4UC2.js.gz +0 -0
  79. package/dist/dashboard/assets/{index-cPrX5vn6.js → index-FQlj0HUT.js} +2 -2
  80. package/dist/dashboard/assets/index-FQlj0HUT.js.gz +0 -0
  81. package/dist/dashboard/assets/{inline-Dvux8w-0.js → inline-C4gU5iOL.js} +1 -1
  82. package/dist/dashboard/assets/inline-C4gU5iOL.js.gz +0 -0
  83. package/dist/dashboard/assets/{input-CU1Rgf3p.js → input-BHHX_Tmm.js} +1 -1
  84. package/dist/dashboard/assets/input-BHHX_Tmm.js.gz +0 -0
  85. package/dist/dashboard/assets/{layout-C_7A6H55.js → layout-CajrYUnD.js} +1 -1
  86. package/dist/dashboard/assets/{layout-C_7A6H55.js.gz → layout-CajrYUnD.js.gz} +0 -0
  87. package/dist/dashboard/assets/{list-row-CzFvogbj.js → list-row-Bx2I7XUe.js} +1 -1
  88. package/dist/dashboard/assets/list-row-Bx2I7XUe.js.gz +0 -0
  89. package/dist/dashboard/assets/live-DNNqRbj2.js +1 -0
  90. package/dist/dashboard/assets/live-DNNqRbj2.js.gz +0 -0
  91. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js +1 -0
  92. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js.gz +0 -0
  93. package/dist/dashboard/assets/{mutation-JJGQm8TD.js → mutation-Rr0TIvcj.js} +1 -1
  94. package/dist/dashboard/assets/mutation-Rr0TIvcj.js.gz +0 -0
  95. package/dist/dashboard/assets/network-C5UBACrJ.js +1 -0
  96. package/dist/dashboard/assets/network-C5UBACrJ.js.gz +0 -0
  97. package/dist/dashboard/assets/numbers-CUWAZK4J.js +2 -0
  98. package/dist/dashboard/assets/numbers-CUWAZK4J.js.gz +0 -0
  99. package/dist/dashboard/assets/pagination-Xsi9Qx04.js +1 -0
  100. package/dist/dashboard/assets/pagination-Xsi9Qx04.js.gz +0 -0
  101. package/dist/dashboard/assets/{query-keys-CLaNz8Xz.js → query-keys-BloKtaXJ.js} +1 -1
  102. package/dist/dashboard/assets/query-keys-BloKtaXJ.js.gz +0 -0
  103. package/dist/dashboard/assets/quota-DvQbD_sr.js +1 -0
  104. package/dist/dashboard/assets/quota-DvQbD_sr.js.gz +0 -0
  105. package/dist/dashboard/assets/{routing-BEH32QOC.js → routing-in0f_IfK.js} +1 -1
  106. package/dist/dashboard/assets/routing-in0f_IfK.js.gz +0 -0
  107. package/dist/dashboard/assets/{select-B3iTetHN.js → select-BLULNqTp.js} +2 -2
  108. package/dist/dashboard/assets/select-BLULNqTp.js.gz +0 -0
  109. package/dist/dashboard/assets/settings-CcGczj6I.js +1 -0
  110. package/dist/dashboard/assets/settings-CcGczj6I.js.gz +0 -0
  111. package/dist/dashboard/assets/shield-BMQNxORh.js +1 -0
  112. package/dist/dashboard/assets/shield-BMQNxORh.js.gz +0 -0
  113. package/dist/dashboard/assets/{stack-KrOrm7JZ.js → stack-D2lIR0tg.js} +1 -1
  114. package/dist/dashboard/assets/stack-D2lIR0tg.js.gz +0 -0
  115. package/dist/dashboard/assets/{state-DLS7IDMy.js → state-DTARjfiW.js} +1 -1
  116. package/dist/dashboard/assets/state-DTARjfiW.js.gz +0 -0
  117. package/dist/dashboard/assets/{switch-42ItvbAs.js → switch-c0oPSnqW.js} +1 -1
  118. package/dist/dashboard/assets/switch-c0oPSnqW.js.gz +0 -0
  119. package/dist/dashboard/assets/{useMutation-Dmnfh1Ue.js → useMutation-m8WGNPrz.js} +1 -1
  120. package/dist/dashboard/assets/useMutation-m8WGNPrz.js.gz +0 -0
  121. package/dist/dashboard/console-backgrounds.jpg +0 -0
  122. package/dist/dashboard/console-backgrounds_initial.jpg +0 -0
  123. package/dist/dashboard/index.html +2 -2
  124. package/dist/dashboard/index.html.gz +0 -0
  125. package/dist/dashboard/precompressed-assets.json +59 -57
  126. package/migrations/full-postgres/0027_qoder_identity_genuine_seed.sql +9 -10
  127. package/migrations/full-postgres/0032_add_provider_pool_accounts.sql +53 -0
  128. package/migrations/full-postgres/0033_add_api_key_ban.sql +9 -0
  129. package/migrations/full-postgres/0034_add_api_key_ban_until.sql +7 -0
  130. package/migrations/full-postgres/0035_align_pool_account_status_enum.sql +21 -0
  131. package/migrations/full-postgres/0036_system_prompt_presets_refs.sql +10 -0
  132. package/migrations/full-postgres/0037_share_concurrency_scope.sql +3 -0
  133. package/migrations/full-postgres/0038_add_accounts_quota_snapshot.sql +7 -0
  134. package/migrations/full-postgres/0039_add_telemetry_provider_model_indexes.sql +13 -0
  135. package/migrations/full-postgres/0040_add_models_dialect.sql +3 -0
  136. package/migrations/full-postgres/0041_add_daily_checkin_ledger_account_fk.sql +7 -0
  137. package/migrations/lite-sqlite3/0027_qoder_identity_genuine_seed.sql +9 -10
  138. package/migrations/lite-sqlite3/0032_add_provider_pool_accounts.sql +44 -0
  139. package/migrations/lite-sqlite3/0033_add_api_key_ban.sql +8 -0
  140. package/migrations/lite-sqlite3/0034_add_api_key_ban_until.sql +5 -0
  141. package/migrations/lite-sqlite3/0035_align_pool_account_status_enum.sql +6 -0
  142. package/migrations/lite-sqlite3/0036_system_prompt_presets_refs.sql +14 -0
  143. package/migrations/lite-sqlite3/0037_share_concurrency_scope.sql +3 -0
  144. package/migrations/lite-sqlite3/0038_add_accounts_quota_snapshot.sql +4 -0
  145. package/migrations/lite-sqlite3/0039_add_telemetry_provider_model_indexes.sql +6 -0
  146. package/migrations/lite-sqlite3/0040_add_models_dialect.sql +3 -0
  147. package/migrations/lite-sqlite3/0041_add_daily_checkin_ledger_account_fk.sql +26 -0
  148. package/package.json +4 -5
  149. package/scripts/cli/update.ts +15 -41
  150. package/src/boot/app.ts +67 -10
  151. package/src/boot/dependencies.ts +786 -732
  152. package/src/boot/lifecycle.ts +11 -12
  153. package/src/config/cooldowns.ts +34 -55
  154. package/src/config/network.ts +8 -4
  155. package/src/config/package-paths.ts +1 -1
  156. package/src/config/providers.ts +13 -14
  157. package/src/config/resources.ts +0 -5
  158. package/src/config/runtime.ts +2 -5
  159. package/src/config/spec.ts +26 -6
  160. package/src/console/api-keys/ban-constants.ts +38 -0
  161. package/src/console/api-keys/contracts.ts +92 -31
  162. package/src/console/api-keys/routes.ts +131 -6
  163. package/src/console/audit/routes.ts +3 -3
  164. package/src/console/auth/access.ts +4 -4
  165. package/src/console/auth/account-reset.ts +5 -5
  166. package/src/console/auth/audit-recorder.ts +1 -1
  167. package/src/console/auth/lockout.ts +7 -3
  168. package/src/console/auth/row-coercion.ts +57 -12
  169. package/src/console/auth/session-resolver.ts +1 -1
  170. package/src/console/auth/session-service.ts +8 -2
  171. package/src/console/auth/session.ts +40 -34
  172. package/src/console/auth/setup-service.ts +4 -3
  173. package/src/console/auth/user-store.ts +1 -1
  174. package/src/console/backup/9router-map.ts +0 -3
  175. package/src/console/backup/contracts.ts +11 -9
  176. package/src/console/backup/export-endpoint.ts +11 -12
  177. package/src/console/backup/nine-router.ts +1 -7
  178. package/src/console/backup/routes.ts +32 -36
  179. package/src/console/backup/service.ts +468 -468
  180. package/src/console/backup/store.ts +47 -29
  181. package/src/console/backup/validate.ts +11 -1
  182. package/src/console/cli-tools/contracts.ts +7 -7
  183. package/src/console/cli-tools/injectors/cline.ts +110 -110
  184. package/src/console/cli-tools/injectors/codex.ts +181 -181
  185. package/src/console/cli-tools/injectors/copilot.ts +108 -108
  186. package/src/console/cli-tools/injectors/driver.ts +247 -247
  187. package/src/console/cli-tools/injectors/jcode.ts +115 -115
  188. package/src/console/cli-tools/injectors/openclaw.ts +161 -161
  189. package/src/console/cli-tools/injectors/opencode.ts +153 -153
  190. package/src/console/cli-tools/routes.ts +4 -4
  191. package/src/console/cli-tools/service.ts +1 -1
  192. package/src/console/cli-tools/store.ts +2 -2
  193. package/src/console/console-router-guards.ts +2 -2
  194. package/src/console/console-router.ts +36 -4
  195. package/src/console/dashboard-assets.ts +9 -9
  196. package/src/console/data-management/routes.ts +3 -3
  197. package/src/console/domain-registration.ts +18 -4
  198. package/src/console/inferhub/client.ts +0 -7
  199. package/src/console/inferhub/key-store.ts +1 -1
  200. package/src/console/inferhub/normalize.ts +2 -2
  201. package/src/console/inferhub/routes.ts +1 -1
  202. package/src/console/inferhub/types.ts +1 -1
  203. package/src/console/observability/contracts.ts +5 -1
  204. package/src/console/observability/live.ts +34 -21
  205. package/src/console/observability/logs.ts +4 -4
  206. package/src/console/observability/performance.ts +3 -3
  207. package/src/console/observability/routes.ts +3 -3
  208. package/src/console/observability/sse.ts +62 -8
  209. package/src/console/observability/store.ts +36 -20
  210. package/src/console/providers/catalog/catalog-projections.ts +1 -1
  211. package/src/console/providers/catalog/contracts.ts +82 -22
  212. package/src/console/providers/catalog/model-operations.ts +1 -1
  213. package/src/console/providers/catalog/provider-operations.ts +110 -17
  214. package/src/console/providers/catalog/public-model-store.ts +0 -0
  215. package/src/console/providers/catalog/routes.ts +30 -6
  216. package/src/console/providers/catalog/store-helpers.ts +349 -326
  217. package/src/console/providers/catalog/store.ts +1662 -1292
  218. package/src/console/providers/detail/routes.ts +4 -4
  219. package/src/console/providers/oauth/callback-listener.ts +100 -18
  220. package/src/console/providers/oauth/routes.ts +95 -16
  221. package/src/console/quota/account-quota-global.ts +41 -3
  222. package/src/console/quota/account-quota-shared.ts +10 -3
  223. package/src/console/quota/account-quota-tenant.ts +285 -67
  224. package/src/console/quota/account-test-egress.ts +4 -4
  225. package/src/console/quota/daily-growth-job.ts +308 -0
  226. package/src/console/quota/native-identity.ts +2 -2
  227. package/src/console/quota/quota-view.ts +1 -1
  228. package/src/console/remote-support/routes.ts +1 -1
  229. package/src/console/remote-support/service.ts +2 -2
  230. package/src/console/routing/model/contracts.ts +1 -1
  231. package/src/console/routing/model/routes.ts +3 -3
  232. package/src/console/routing/pools/contracts.ts +13 -10
  233. package/src/console/routing/pools/import-parse.ts +3 -3
  234. package/src/console/routing/pools/operations.ts +14 -7
  235. package/src/console/routing/pools/probe-verdict.ts +8 -3
  236. package/src/console/routing/pools/relay-deploy.ts +12 -12
  237. package/src/console/routing/pools/routes.ts +3 -3
  238. package/src/console/routing/pools/store.ts +21 -1
  239. package/src/console/settings/contracts.ts +29 -2
  240. package/src/console/settings/routes.ts +3 -3
  241. package/src/console/settings/store.ts +20 -0
  242. package/src/console/share/share-router.ts +112 -44
  243. package/src/console/share/share-stats.ts +109 -39
  244. package/src/console/share/share-usage.ts +1 -1
  245. package/src/console/shared/errors.ts +2 -2
  246. package/src/console/shared/object.ts +18 -0
  247. package/src/console/shared/read-through-cache.ts +42 -6
  248. package/src/console/shared/transaction.ts +14 -0
  249. package/src/console/system-prompt/contracts.ts +89 -12
  250. package/src/console/system-prompt/routes.ts +98 -45
  251. package/src/console/updates/apply-update.ts +244 -0
  252. package/src/console/updates/routes.ts +256 -98
  253. package/src/main.ts +11 -5
  254. package/src/network/http2-bidi.ts +1 -1
  255. package/src/network/ip-utils.ts +298 -0
  256. package/src/network/outbound-fetch.ts +76 -5
  257. package/src/network/pool/agent.ts +7 -6
  258. package/src/network/pool/byte-accounting.ts +1 -1
  259. package/src/network/pool/resolver.ts +55 -51
  260. package/src/network/pool/selector.ts +150 -136
  261. package/src/network/pool-cooldown-store.ts +71 -16
  262. package/src/network/pool-health-machine.ts +22 -2
  263. package/src/network/rate-limit-verdict.ts +68 -0
  264. package/src/network/retry.ts +1 -1
  265. package/src/network/ssrf.ts +24 -75
  266. package/src/observability/event-log.ts +2 -2
  267. package/src/observability/event-query.ts +286 -214
  268. package/src/observability/log-sanitize.ts +1 -1
  269. package/src/observability/metrics.ts +4 -4
  270. package/src/observability/payload-capture.ts +6 -5
  271. package/src/observability/payload-store.ts +1 -1
  272. package/src/observability/runtime-metrics.ts +1 -1
  273. package/src/observability/telemetry-buffer.ts +12 -3
  274. package/src/observability/telemetry-reconciliation.ts +3 -3
  275. package/src/observability/telemetry-status.ts +1 -1
  276. package/src/observability/token-speed.ts +1 -1
  277. package/src/persistence/connection-url.ts +1 -1
  278. package/src/persistence/db-handle.ts +1 -1
  279. package/src/persistence/db-pg.ts +2 -2
  280. package/src/persistence/db-sqlite.ts +10 -5
  281. package/src/persistence/dialect.ts +5 -1
  282. package/src/persistence/readiness.ts +19 -7
  283. package/src/persistence/redis.ts +1 -1
  284. package/src/persistence/schema.ts +177 -45
  285. package/src/persistence/shared-cache.ts +2 -2
  286. package/src/persistence/sort-order.ts +1 -1
  287. package/src/persistence/stores/api-key-store.ts +109 -4
  288. package/src/persistence/stores/share-store.ts +20 -8
  289. package/src/persistence/stores/telemetry-store.ts +1 -1
  290. package/src/persistence/system-prompt-store.ts +63 -18
  291. package/src/persistence/tenant-preferences.ts +1 -1
  292. package/src/persistence/ttl-cache.ts +3 -3
  293. package/src/persistence/usage-flush.ts +7 -2
  294. package/src/protocol/canonical-model.ts +1 -1
  295. package/src/protocol/codecs.ts +12 -16
  296. package/src/protocol/dsml.ts +3 -49
  297. package/src/protocol/gateway-error.ts +6 -3
  298. package/src/protocol/image-clamp.ts +2 -2
  299. package/src/protocol/image-generation.ts +2 -2
  300. package/src/protocol/reasoning-text.ts +1 -1
  301. package/src/protocol/reasoning.ts +7 -52
  302. package/src/protocol/registry.ts +50 -15
  303. package/src/protocol/request/chat.ts +46 -19
  304. package/src/protocol/request/codex.ts +1 -1
  305. package/src/protocol/request/messages.ts +46 -14
  306. package/src/protocol/request/responses.ts +19 -10
  307. package/src/protocol/response/chat.ts +27 -12
  308. package/src/protocol/response/codex.ts +2 -2
  309. package/src/protocol/response/gemini.ts +1 -1
  310. package/src/protocol/response/messages.ts +6 -6
  311. package/src/protocol/response/omp-tool-call-markup.ts +1 -1
  312. package/src/protocol/response/responses.ts +3 -3
  313. package/src/protocol/sse-decoder.ts +64 -4
  314. package/src/protocol/stop-reason.ts +2 -2
  315. package/src/protocol/think-split.ts +347 -0
  316. package/src/protocol/translation/attachment-integrity.ts +3 -3
  317. package/src/protocol/translation/cache-controls.ts +8 -20
  318. package/src/protocol/translation/capabilities.ts +8 -8
  319. package/src/protocol/translation/dialect/deepseek.ts +10 -0
  320. package/src/protocol/translation/dialect/inband.ts +39 -0
  321. package/src/protocol/translation/dialect/model-thinking.ts +89 -0
  322. package/src/protocol/translation/dialect/qwen.ts +114 -0
  323. package/src/protocol/translation/dialect/resolver.ts +83 -0
  324. package/src/protocol/translation/dialect/rules.ts +93 -0
  325. package/src/protocol/translation/dialect/thinking-ladder.ts +245 -0
  326. package/src/protocol/translation/dialect/types.ts +58 -0
  327. package/src/protocol/translation/quirks.ts +18 -4
  328. package/src/protocol/translation/thinking.ts +12 -252
  329. package/src/protocol/translation/tool-id.ts +3 -3
  330. package/src/protocol/translation/tool-repair.ts +1 -1
  331. package/src/protocol/upstream/post-json.ts +6 -1
  332. package/src/protocol/upstream/send-claude-messages.ts +3 -3
  333. package/src/providers/adapters/base-adapter.ts +1 -1
  334. package/src/providers/adapters/compatible-adapter.ts +44 -5
  335. package/src/providers/authentication/jwt-validator.ts +0 -5
  336. package/src/providers/authentication/oauth-client.ts +254 -253
  337. package/src/providers/authentication/oauth-flow-store.ts +42 -7
  338. package/src/providers/authentication/oauth-refresh-service.ts +2 -2
  339. package/src/providers/bundled-discovery-providers.ts +6 -30
  340. package/src/providers/configured-openai-providers.ts +82 -97
  341. package/src/providers/configured-provider.ts +1 -1
  342. package/src/providers/default-registry.ts +23 -35
  343. package/src/providers/discovery/catalog/catalog-format.ts +13 -2
  344. package/src/providers/discovery/discovery-types.ts +0 -1
  345. package/src/providers/discovery/openai-model-discovery.ts +2 -2
  346. package/src/providers/discovery/probe-phases.ts +50 -15
  347. package/src/providers/discovery/probing-service.ts +18 -20
  348. package/src/providers/integrations/agentrouter/agentrouter.ts +14 -5
  349. package/src/providers/integrations/alibabacp/alibabacp.ts +2 -2
  350. package/src/providers/integrations/anthropic.ts +4 -11
  351. package/src/providers/integrations/antigravity/antigravity-oauth.ts +0 -1
  352. package/src/providers/integrations/antigravity/antigravity-protocol.ts +0 -14
  353. package/src/providers/integrations/antigravity/antigravity.ts +15 -26
  354. package/src/providers/integrations/buddy/buddy-catalog-shared.ts +2 -2
  355. package/src/providers/integrations/buddy/buddy-chat-shared.ts +20 -4
  356. package/src/providers/integrations/buddy/buddy-cli-headers.ts +19 -52
  357. package/src/providers/integrations/buddy/buddy-discovery-shared.ts +37 -6
  358. package/src/providers/integrations/buddy/buddy-identity.ts +108 -1
  359. package/src/providers/integrations/buddy/buddy-media.ts +16 -16
  360. package/src/providers/integrations/buddy/buddy-oauth-shared.ts +1 -1
  361. package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +1 -2
  362. package/src/providers/integrations/buddy/codebuddy/provider.ts +5 -16
  363. package/src/providers/integrations/buddy/codebuddy/shared.ts +30 -9
  364. package/src/providers/integrations/buddy/workbuddy/provider.ts +6 -10
  365. package/src/providers/integrations/buddy/workbuddy/shared.ts +21 -3
  366. package/src/providers/integrations/claude/claude-betas.ts +1 -1
  367. package/src/providers/integrations/claude/claude-cch.ts +148 -148
  368. package/src/providers/integrations/claude/claude-credentials.ts +1 -1
  369. package/src/providers/integrations/claude/claude-slow-lane-retry.ts +1 -1
  370. package/src/providers/integrations/claude/claude.ts +3 -10
  371. package/src/providers/integrations/claude/fallback-credit.ts +3 -7
  372. package/src/providers/integrations/cline/cline.ts +2 -2
  373. package/src/providers/integrations/cloudflareai/cloudflareai.ts +4 -7
  374. package/src/providers/integrations/codex/codex-device-code.ts +101 -101
  375. package/src/providers/integrations/codex/codex-errors.ts +1 -1
  376. package/src/providers/integrations/codex/codex-oauth.ts +0 -1
  377. package/src/providers/integrations/codex/codex.ts +14 -15
  378. package/src/providers/integrations/commandcode/commandcode.ts +76 -116
  379. package/src/providers/integrations/commandcode/quota.ts +132 -48
  380. package/src/providers/integrations/cursor/cursor-http2.ts +11 -14
  381. package/src/providers/integrations/cursor/cursor-quota.ts +2 -6
  382. package/src/providers/integrations/cursor/cursor-request.ts +0 -87
  383. package/src/providers/integrations/cursor/cursor-shared.ts +0 -4
  384. package/src/providers/integrations/cursor/cursor.ts +53 -20
  385. package/src/providers/integrations/cursor/protocol/framing.ts +0 -56
  386. package/src/providers/integrations/cursor/protocol/messages.ts +0 -96
  387. package/src/providers/integrations/factory/factory.ts +13 -13
  388. package/src/providers/integrations/gemini.ts +11 -11
  389. package/src/providers/integrations/github/github-discovery.ts +55 -10
  390. package/src/providers/integrations/github/github-oauth.ts +6 -5
  391. package/src/providers/integrations/github/github.ts +47 -20
  392. package/src/providers/integrations/grok/grok-oauth.ts +261 -261
  393. package/src/providers/integrations/grok/grok-quota-frame.ts +1 -1
  394. package/src/providers/integrations/grok/grok-quota.ts +16 -7
  395. package/src/providers/integrations/grok/grok-ratelimit-store.ts +0 -5
  396. package/src/providers/integrations/grok/grok-ratelimit.ts +3 -0
  397. package/src/providers/integrations/grok/grok.ts +88 -42
  398. package/src/providers/integrations/inferhub.ts +4 -11
  399. package/src/providers/integrations/kilo/kilo-oauth.ts +1 -1
  400. package/src/providers/integrations/kimi/kimi.ts +4 -11
  401. package/src/providers/integrations/kiro/kiro-cache.ts +31 -0
  402. package/src/providers/integrations/kiro/kiro-catalog.ts +31 -5
  403. package/src/providers/integrations/kiro/kiro-discovery.ts +47 -43
  404. package/src/providers/integrations/kiro/kiro-machine-id.ts +6 -3
  405. package/src/providers/integrations/kiro/kiro-oauth.ts +523 -255
  406. package/src/providers/integrations/kiro/kiro-quota.ts +35 -47
  407. package/src/providers/integrations/kiro/kiro-request.ts +8 -11
  408. package/src/providers/integrations/kiro/kiro-stream.ts +13 -0
  409. package/src/providers/integrations/kiro/kiro.ts +91 -78
  410. package/src/providers/integrations/muse/muse-oauth.ts +0 -1
  411. package/src/providers/integrations/muse/muse-quota.ts +0 -4
  412. package/src/providers/integrations/muse/muse.ts +6 -9
  413. package/src/providers/integrations/opencode/fingerprint.ts +7 -5
  414. package/src/providers/integrations/opencode/provider.ts +17 -24
  415. package/src/providers/integrations/perplexity.ts +2 -2
  416. package/src/providers/integrations/qoder/qoder-catalog.ts +132 -17
  417. package/src/providers/integrations/qoder/qoder-checkin.ts +26 -8
  418. package/src/providers/integrations/qoder/qoder-native-identity-store.ts +9 -8
  419. package/src/providers/integrations/qoder/qoder-oauth.ts +165 -25
  420. package/src/providers/integrations/qoder/qoder-quota.ts +48 -6
  421. package/src/providers/integrations/qoder/qoder-realm.ts +22 -28
  422. package/src/providers/integrations/qoder/qoder-sse.ts +159 -0
  423. package/src/providers/integrations/qoder/qoder-umid.ts +33 -38
  424. package/src/providers/integrations/qoder/qoder-virtual.ts +14 -2
  425. package/src/providers/integrations/qoder/qoder.ts +521 -63
  426. package/src/providers/integrations/shared/connect.ts +0 -54
  427. package/src/providers/integrations/shared/hash.ts +15 -0
  428. package/src/providers/integrations/shared/session-cache.ts +136 -0
  429. package/src/providers/integrations/tokenharbor.ts +2 -2
  430. package/src/providers/integrations/trae/trae-cache.ts +7 -87
  431. package/src/providers/integrations/trae/trae-catalog.ts +1 -6
  432. package/src/providers/integrations/trae/trae-protocol.ts +17 -8
  433. package/src/providers/integrations/trae/trae-realm.ts +0 -7
  434. package/src/providers/integrations/trae/trae.ts +59 -19
  435. package/src/providers/integrations/xai/xai-oauth.ts +5 -5
  436. package/src/providers/integrations/zcode/oauth.ts +1 -1
  437. package/src/providers/integrations/zcode-start-plan/gifts.ts +265 -0
  438. package/src/providers/integrations/zcode-start-plan/oauth.ts +154 -0
  439. package/src/providers/integrations/zcode-start-plan/provider.ts +131 -0
  440. package/src/providers/integrations/zcode-start-plan/quota.ts +152 -0
  441. package/src/providers/integrations/zcode-start-plan/zcode_prompt.json +10 -0
  442. package/src/providers/operations/account-error-classification.ts +131 -116
  443. package/src/providers/operations/account-health-service.ts +31 -39
  444. package/src/providers/operations/account-reset-service.ts +58 -1
  445. package/src/providers/operations/cli-platform.ts +31 -5
  446. package/src/providers/operations/client-version-resolver.ts +4 -6
  447. package/src/providers/operations/client-versions.ts +10 -7
  448. package/src/providers/operations/provider-catalog-seeder.ts +2 -0
  449. package/src/providers/operations/provider-catalog-service.ts +22 -6
  450. package/src/providers/operations/provider-credential-service.ts +35 -6
  451. package/src/providers/operations/upstream-deadline.ts +3 -3
  452. package/src/providers/provider-contracts.ts +65 -10
  453. package/src/providers/provider-credential-resolver.ts +1 -1
  454. package/src/providers/provider-metadata.ts +17 -2
  455. package/src/providers/provider-model-definition.ts +22 -1
  456. package/src/providers/provider-probe.ts +4 -2
  457. package/src/providers/provider-registry.ts +4 -4
  458. package/src/providers/provider-usage.ts +81 -16
  459. package/src/providers/quota/cache.ts +29 -0
  460. package/src/providers/quota/quota-contracts.ts +28 -10
  461. package/src/providers/quota/refresh.ts +29 -6
  462. package/src/providers/quota/snapshot.ts +94 -0
  463. package/src/providers/search/search-provider.ts +6 -8
  464. package/src/providers/search/search-providers.ts +2 -1
  465. package/src/security/abuse.ts +8 -8
  466. package/src/security/admission/reasons.ts +17 -17
  467. package/src/security/admission/service.ts +2 -2
  468. package/src/security/admission/ttl.ts +61 -61
  469. package/src/security/api-key-auth.ts +20 -8
  470. package/src/security/client-router-fingerprint.ts +4 -4
  471. package/src/security/credential-codec.ts +3 -3
  472. package/src/security/csrf.ts +2 -2
  473. package/src/security/ip-boundary.ts +16 -189
  474. package/src/security/model-access-rule.ts +1 -1
  475. package/src/security/outbound-headers.ts +18 -0
  476. package/src/shared/coerce.ts +19 -0
  477. package/src/shared/invoke-guard.ts +47 -0
  478. package/src/transport/contracts.ts +13 -4
  479. package/src/transport/dispatch/attempt-finalize.ts +5 -4
  480. package/src/transport/dispatch/attempt-loop.ts +10 -7
  481. package/src/transport/dispatch/capture-policy.ts +34 -37
  482. package/src/transport/dispatch/empty-stream.ts +28 -25
  483. package/src/transport/dispatch/generation.ts +33 -53
  484. package/src/transport/dispatch/leases.ts +8 -8
  485. package/src/transport/dispatch/native-shared.ts +127 -0
  486. package/src/transport/dispatch/proxy-request.ts +10 -8
  487. package/src/transport/dispatch/responses-compact.ts +35 -56
  488. package/src/transport/dispatch/retry-policy.ts +4 -67
  489. package/src/transport/dispatch/stream-bridge.ts +1 -1
  490. package/src/transport/dispatch/streaming/encoder.ts +18 -72
  491. package/src/transport/dispatch/streaming/finalize.ts +11 -10
  492. package/src/transport/dispatch/streaming/stream.ts +7 -3
  493. package/src/transport/dispatch/streaming/thinking-loop.ts +1 -1
  494. package/src/transport/dispatch/systemone.ts +27 -55
  495. package/src/transport/dispatch/token-count.ts +49 -46
  496. package/src/transport/dispatch/websearch.ts +24 -50
  497. package/src/transport/drain-endpoint.ts +3 -3
  498. package/src/transport/failure-policy.ts +19 -6
  499. package/src/transport/guards/auth-guard.ts +6 -11
  500. package/src/transport/guards/body-policy.ts +7 -7
  501. package/src/transport/guards/error-lifecycle.ts +18 -3
  502. package/src/transport/guards/guard-errors.ts +7 -3
  503. package/src/transport/guards/headroom-guard.ts +2 -2
  504. package/src/transport/guards/pipeline.ts +7 -7
  505. package/src/transport/guards/readiness-guard.ts +16 -2
  506. package/src/transport/guards/request-context.ts +15 -20
  507. package/src/transport/request/preparer.ts +306 -27
  508. package/src/transport/request/rtk/compress-request.ts +3 -3
  509. package/src/transport/request/rtk/rtk-constants.ts +2 -2
  510. package/src/transport/request/rtk/rtk-filters.ts +8 -8
  511. package/src/transport/request/state.ts +5 -20
  512. package/src/transport/request/system-prompt-injection.ts +74 -11
  513. package/src/transport/request/tenant-preferences.ts +22 -0
  514. package/src/transport/routing/candidate-index.ts +2 -2
  515. package/src/transport/routing/round-robin.ts +1 -1
  516. package/src/transport/routing/route-catalog.ts +113 -19
  517. package/src/transport/routing/route-model.ts +131 -38
  518. package/src/transport/routing/router.ts +154 -39
  519. package/src/transport/shutdown-notice.ts +21 -9
  520. package/src/transport/surface/adapters.ts +3 -3
  521. package/src/transport/surface/chat/encode.ts +7 -7
  522. package/src/transport/surface/chat/parse.ts +7 -7
  523. package/src/transport/surface/completion.ts +3 -3
  524. package/src/transport/surface/content-parts.ts +1 -1
  525. package/src/transport/surface/dialects.ts +2 -2
  526. package/src/transport/surface/messages/encode.ts +1 -1
  527. package/src/transport/surface/messages/parse.ts +3 -3
  528. package/src/transport/surface/responses/adapter.ts +1 -1
  529. package/src/transport/surface/responses/errors.ts +0 -9
  530. package/src/transport/vision-handoff-cache.ts +58 -0
  531. package/src/transport/vision-handoff.ts +376 -0
  532. package/src/workers/account-identity-sweep.ts +2 -2
  533. package/src/workers/buddy-growth-tasks.ts +392 -346
  534. package/src/workers/daily-checkin.ts +102 -49
  535. package/src/workers/maintenance-lease.ts +2 -35
  536. package/src/workers/oauth-refresh-sweep.ts +8 -1
  537. package/src/workers/quota-refresh-sweep.ts +120 -82
  538. package/src/workers/scheduler.ts +67 -4
  539. package/src/workers/sweep-runner.ts +24 -5
  540. package/src/workers/zcode-gift-claim.ts +108 -0
  541. package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js +0 -1
  542. package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js.gz +0 -0
  543. package/dist/dashboard/assets/BannedPage-2TJD37Hb.js.gz +0 -0
  544. package/dist/dashboard/assets/CliToolDetailPage-xefJNRmJ.js.gz +0 -0
  545. package/dist/dashboard/assets/CliToolsPage-Rj9iHQ3F.js.gz +0 -0
  546. package/dist/dashboard/assets/CombosPage-JEbYJFxw.js +0 -1
  547. package/dist/dashboard/assets/CombosPage-JEbYJFxw.js.gz +0 -0
  548. package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js +0 -1
  549. package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js.gz +0 -0
  550. package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js +0 -1
  551. package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js.gz +0 -0
  552. package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js +0 -1
  553. package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js.gz +0 -0
  554. package/dist/dashboard/assets/LoginPage-C4w7vea-.js.gz +0 -0
  555. package/dist/dashboard/assets/ModelPicker-BtPcAfot.js.gz +0 -0
  556. package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js +0 -1
  557. package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js.gz +0 -0
  558. package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js +0 -4
  559. package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js.gz +0 -0
  560. package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js +0 -1
  561. package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js.gz +0 -0
  562. package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js +0 -1
  563. package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js.gz +0 -0
  564. package/dist/dashboard/assets/ProxyPage-DdPc8slb.js +0 -9
  565. package/dist/dashboard/assets/ProxyPage-DdPc8slb.js.gz +0 -0
  566. package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js +0 -1
  567. package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js.gz +0 -0
  568. package/dist/dashboard/assets/SettingsPage-CDZjTt87.js +0 -1
  569. package/dist/dashboard/assets/SettingsPage-CDZjTt87.js.gz +0 -0
  570. package/dist/dashboard/assets/SetupPage-BQS0Rx_u.js.gz +0 -0
  571. package/dist/dashboard/assets/SortableList-BAL5npBC.js +0 -1
  572. package/dist/dashboard/assets/SortableList-BAL5npBC.js.gz +0 -0
  573. package/dist/dashboard/assets/StudioPage-TP7voAQ0.js.gz +0 -0
  574. package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js +0 -56
  575. package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js.gz +0 -0
  576. package/dist/dashboard/assets/api-keys-MbI7e7rt.js +0 -1
  577. package/dist/dashboard/assets/api-keys-MbI7e7rt.js.gz +0 -0
  578. package/dist/dashboard/assets/app-B2vyPoII.css +0 -2
  579. package/dist/dashboard/assets/app-B2vyPoII.css.gz +0 -0
  580. package/dist/dashboard/assets/assert-C0YYuZJ4.js.gz +0 -0
  581. package/dist/dashboard/assets/badge-B_DMpMJN.js.gz +0 -0
  582. package/dist/dashboard/assets/banner-DMrMPmth.js.gz +0 -0
  583. package/dist/dashboard/assets/card-Be5Uzamx.js.gz +0 -0
  584. package/dist/dashboard/assets/cli-tools-muFRphDu.js.gz +0 -0
  585. package/dist/dashboard/assets/clipboard-button-DOfrVmsi.js.gz +0 -0
  586. package/dist/dashboard/assets/dialog-C9omdjQt.js.gz +0 -0
  587. package/dist/dashboard/assets/drawer-Bm8WKaGY.js.gz +0 -0
  588. package/dist/dashboard/assets/entry-DS90gUks.js +0 -1
  589. package/dist/dashboard/assets/entry-DS90gUks.js.gz +0 -0
  590. package/dist/dashboard/assets/entry-j40LJotO.js +0 -4
  591. package/dist/dashboard/assets/entry-j40LJotO.js.gz +0 -0
  592. package/dist/dashboard/assets/entry-q5HwZ8nN.js.gz +0 -0
  593. package/dist/dashboard/assets/formatters-BTScrQpe.js.gz +0 -0
  594. package/dist/dashboard/assets/github-badge-Orjuzemr.js.gz +0 -0
  595. package/dist/dashboard/assets/index-cPrX5vn6.js.gz +0 -0
  596. package/dist/dashboard/assets/inline-Dvux8w-0.js.gz +0 -0
  597. package/dist/dashboard/assets/input-CU1Rgf3p.js.gz +0 -0
  598. package/dist/dashboard/assets/list-row-CzFvogbj.js.gz +0 -0
  599. package/dist/dashboard/assets/live-KaG15HLQ.js +0 -1
  600. package/dist/dashboard/assets/live-KaG15HLQ.js.gz +0 -0
  601. package/dist/dashboard/assets/minimize-2-D-MN8W8a.js +0 -1
  602. package/dist/dashboard/assets/minimize-2-D-MN8W8a.js.gz +0 -0
  603. package/dist/dashboard/assets/mutation-JJGQm8TD.js.gz +0 -0
  604. package/dist/dashboard/assets/numbers-BNDZnsUE.js +0 -2
  605. package/dist/dashboard/assets/numbers-BNDZnsUE.js.gz +0 -0
  606. package/dist/dashboard/assets/query-keys-CLaNz8Xz.js.gz +0 -0
  607. package/dist/dashboard/assets/quota-DZGyp0N5.js +0 -1
  608. package/dist/dashboard/assets/quota-DZGyp0N5.js.gz +0 -0
  609. package/dist/dashboard/assets/routing-BEH32QOC.js.gz +0 -0
  610. package/dist/dashboard/assets/select-B3iTetHN.js.gz +0 -0
  611. package/dist/dashboard/assets/settings-Dt3Eqbnq.js +0 -1
  612. package/dist/dashboard/assets/settings-Dt3Eqbnq.js.gz +0 -0
  613. package/dist/dashboard/assets/stack-KrOrm7JZ.js.gz +0 -0
  614. package/dist/dashboard/assets/state-DLS7IDMy.js.gz +0 -0
  615. package/dist/dashboard/assets/stream-retry-5QnVuSSo.js +0 -1
  616. package/dist/dashboard/assets/stream-retry-5QnVuSSo.js.gz +0 -0
  617. package/dist/dashboard/assets/switch-42ItvbAs.js.gz +0 -0
  618. package/dist/dashboard/assets/useMutation-Dmnfh1Ue.js.gz +0 -0
  619. package/src/network/response-headers.ts +0 -39
  620. package/src/protocol/response/dsml.ts +0 -38
  621. package/src/providers/integrations/xiaomi-mimo/think-stream.ts +0 -229
  622. /package/dist/dashboard/assets/{app-wvwCi4Eh.js → app-Bgd3zANQ.js} +0 -0
  623. /package/dist/dashboard/assets/{app-wvwCi4Eh.js.gz → app-Bgd3zANQ.js.gz} +0 -0
  624. /package/dist/dashboard/assets/brand/{og_bansos.webp → og_bansos_initial.webp} +0 -0
  625. /package/dist/dashboard/assets/brand/{og_image.webp → og_image_initial.webp} +0 -0
@@ -1,74 +1,76 @@
1
1
  {
2
- "count": 117,
2
+ "count": 119,
3
3
  "assets": [
4
- "assets/AccountCooldown-Bjo92Qat.js",
5
- "assets/BannedPage-2TJD37Hb.js",
6
- "assets/CliToolDetailPage-xefJNRmJ.js",
7
- "assets/CliToolsPage-Rj9iHQ3F.js",
8
- "assets/CombosPage-JEbYJFxw.js",
9
- "assets/ConsoleLogPage-C3xx_inM.js",
10
- "assets/CustomizationPage-Dw306gJU.js",
11
- "assets/HealthEventsModal-jaBo1TWV.js",
12
- "assets/LoginPage-C4w7vea-.js",
13
- "assets/ModelPicker-BtPcAfot.js",
14
- "assets/OverviewPage-CGC5gNs1.js",
15
- "assets/ProviderDetailPage-DQcthNGt.js",
16
- "assets/ProviderIcon-FB6yS4v1.js",
17
- "assets/ProvidersPage-0OsXRGXe.js",
18
- "assets/ProxyPage-DdPc8slb.js",
19
- "assets/QuotaPage-Ci5O4BnH.js",
20
- "assets/SettingsPage-CDZjTt87.js",
21
- "assets/SetupPage-BQS0Rx_u.js",
22
- "assets/SortableList-BAL5npBC.js",
23
- "assets/StudioPage-TP7voAQ0.js",
4
+ "assets/BannedPage-Cj15GsMp.js",
5
+ "assets/ClaimGiftsButton-D83pBJ6J.js",
6
+ "assets/CliToolDetailPage-DZKmVuJN.js",
7
+ "assets/CliToolsPage-BIccZmeL.js",
8
+ "assets/CombosPage-DEEKkYD-.js",
9
+ "assets/ConsoleLogPage-D5rol2j2.js",
10
+ "assets/CustomizationPage-BKj_r0rp.js",
11
+ "assets/InjectSystemPromptPanel-B5nZvmf0.js",
12
+ "assets/LoginPage-DkXb6dx-.js",
13
+ "assets/ModelPicker-DnQPSIA8.js",
14
+ "assets/OverviewPage-Ci2wQKUz.js",
15
+ "assets/ProviderDetailPage-odlgYrOg.js",
16
+ "assets/ProviderIcon-EfeloBn4.js",
17
+ "assets/ProvidersPage-CqFBQEB8.js",
18
+ "assets/ProxyPage-5SnUSy3j.js",
19
+ "assets/QuotaPage-CmnMDzhP.js",
20
+ "assets/SettingsPage-BJtRZ4qD.js",
21
+ "assets/SetupPage-WTa0sktC.js",
22
+ "assets/StudioPage-BfAb5-o_.js",
24
23
  "assets/ToolIcon-K1ckcDKg.js",
25
- "assets/UsagePage-Cj_fEzhg.js",
26
- "assets/api-keys-MbI7e7rt.js",
27
- "assets/app-B2vyPoII.css",
28
- "assets/app-wvwCi4Eh.js",
24
+ "assets/UsagePage-BNzeZ2Vk.js",
25
+ "assets/api-keys-l29JROPv.js",
26
+ "assets/app--PJWq8_C.css",
27
+ "assets/app-Bgd3zANQ.js",
29
28
  "assets/arrow-left-CpBxkoxI.js",
30
29
  "assets/arrow-right-Dl5yKnp8.js",
31
30
  "assets/arrow-up-59ms1iiT.js",
32
- "assets/assert-C0YYuZJ4.js",
31
+ "assets/assert-C0K-c4eo.js",
33
32
  "assets/backup-file-gdKIlg8U.js",
34
- "assets/badge-B_DMpMJN.js",
35
- "assets/banner-DMrMPmth.js",
33
+ "assets/badge-DfbhQU4k.js",
34
+ "assets/banner-BllT4LcF.js",
36
35
  "assets/brain-Cwed_72z.js",
37
- "assets/card-Be5Uzamx.js",
36
+ "assets/card-CtkX66Wd.js",
37
+ "assets/chevron-left-Bf6CaTSJ.js",
38
38
  "assets/chevron-right-BXIy5l3h.js",
39
39
  "assets/circle-alert-CntYHV5v.js",
40
40
  "assets/circle-check-BU3v_mFW.js",
41
- "assets/cli-tools-muFRphDu.js",
42
- "assets/clipboard-button-DOfrVmsi.js",
41
+ "assets/cli-tools-CQXVMn4P.js",
42
+ "assets/clipboard-button-BQqBQd2n.js",
43
43
  "assets/database-Dz9N3zGd.js",
44
- "assets/dialog-C9omdjQt.js",
44
+ "assets/dialog-BEK7KP0H.js",
45
45
  "assets/dialog-actions-B1axpEg7.js",
46
46
  "assets/download-dRFo5_Wu.js",
47
- "assets/drawer-Bm8WKaGY.js",
48
- "assets/entry-DS90gUks.js",
49
- "assets/entry-j40LJotO.js",
50
- "assets/entry-q5HwZ8nN.js",
47
+ "assets/drawer-BrTEZ8zu.js",
48
+ "assets/entry-CHWxbS56.js",
49
+ "assets/entry-EBHJ3DrE.js",
50
+ "assets/entry-LCS85hiq.js",
51
51
  "assets/eye-C_hawfH4.js",
52
52
  "assets/eye-off-Bk5g2luF.js",
53
53
  "assets/fingerprint-pattern-BWuHtbW4.js",
54
- "assets/formatters-BTScrQpe.js",
54
+ "assets/formatters-BAACA727.js",
55
55
  "assets/gauge-BbIMy7MB.js",
56
- "assets/github-badge-Orjuzemr.js",
56
+ "assets/github-badge-YSCE4UC2.js",
57
57
  "assets/image-BPaouViG.js",
58
- "assets/index-cPrX5vn6.js",
59
- "assets/inline-Dvux8w-0.js",
60
- "assets/input-CU1Rgf3p.js",
58
+ "assets/index-FQlj0HUT.js",
59
+ "assets/inline-C4gU5iOL.js",
60
+ "assets/input-BHHX_Tmm.js",
61
61
  "assets/jsx-runtime-CXUMngI_.js",
62
62
  "assets/key-round-UkavsGxp.js",
63
63
  "assets/layers-2-glBbjl.js",
64
- "assets/layout-C_7A6H55.js",
65
- "assets/list-row-CzFvogbj.js",
66
- "assets/live-KaG15HLQ.js",
64
+ "assets/layout-CajrYUnD.js",
65
+ "assets/list-row-Bx2I7XUe.js",
66
+ "assets/live-DNNqRbj2.js",
67
67
  "assets/log-in-BmRjy60c.js",
68
68
  "assets/message-circle-CCxGwRvv.js",
69
- "assets/minimize-2-D-MN8W8a.js",
70
- "assets/mutation-JJGQm8TD.js",
71
- "assets/numbers-BNDZnsUE.js",
69
+ "assets/minimize-2-BTmMTK4o.js",
70
+ "assets/mutation-Rr0TIvcj.js",
71
+ "assets/network-C5UBACrJ.js",
72
+ "assets/numbers-CUWAZK4J.js",
73
+ "assets/pagination-Xsi9Qx04.js",
72
74
  "assets/pencil-768ysRAr.js",
73
75
  "assets/plus-DIdX_g-x.js",
74
76
  "assets/power-off-Yjw9GMJh.js",
@@ -91,22 +93,22 @@
91
93
  "assets/providers/parallel.svg",
92
94
  "assets/providers/tokenharbor.svg",
93
95
  "assets/providers/zai-coding-plan.svg",
94
- "assets/query-keys-CLaNz8Xz.js",
95
- "assets/quota-DZGyp0N5.js",
96
+ "assets/query-keys-BloKtaXJ.js",
97
+ "assets/quota-DvQbD_sr.js",
96
98
  "assets/refresh-cw-BqJFk4sU.js",
97
99
  "assets/rotate-ccw-CufcqITi.js",
98
100
  "assets/route-CNSNj9Zm.js",
99
- "assets/routing-BEH32QOC.js",
101
+ "assets/routing-in0f_IfK.js",
100
102
  "assets/scaling-nWE4Cx8f.js",
101
103
  "assets/search-JOKus9rb.js",
102
- "assets/select-B3iTetHN.js",
104
+ "assets/select-BLULNqTp.js",
103
105
  "assets/settings-2-Ds9DQp0t.js",
104
- "assets/settings-Dt3Eqbnq.js",
106
+ "assets/settings-CcGczj6I.js",
107
+ "assets/shield-BMQNxORh.js",
105
108
  "assets/shield-check-DVS0Foqh.js",
106
- "assets/stack-KrOrm7JZ.js",
107
- "assets/state-DLS7IDMy.js",
108
- "assets/stream-retry-5QnVuSSo.js",
109
- "assets/switch-42ItvbAs.js",
109
+ "assets/stack-D2lIR0tg.js",
110
+ "assets/state-DTARjfiW.js",
111
+ "assets/switch-c0oPSnqW.js",
110
112
  "assets/terminal-0_IjPWTk.js",
111
113
  "assets/tokens-COzario9.js",
112
114
  "assets/trash-Cppn5c3R.js",
@@ -114,7 +116,7 @@
114
116
  "assets/use-modal-focus-By7oJoGd.js",
115
117
  "assets/use-reduced-motion-C4B0R6Sz.js",
116
118
  "assets/use-timeout-BwcBBRrT.js",
117
- "assets/useMutation-Dmnfh1Ue.js",
119
+ "assets/useMutation-m8WGNPrz.js",
118
120
  "assets/wrench-B6E1oEuY.js",
119
121
  "assets/zap-C4EeVW4q.js",
120
122
  "index.html"
@@ -1,21 +1,20 @@
1
1
  -- Qoder native identity: genuine SG identity + per-account seed replay.
2
2
  --
3
- -- Research (2026-10-30, see documentation/research/qoder-identity-gate-
4
- -- postmortem.md and qoder-umid-reverse.md) established that the daily-credit
5
- -- campaign gates its CREDITS grant on a *genuine* Alibaba SG-produced
6
- -- identity: generated/deterministic tokens do not reveal the grant on a
7
- -- fresh account, while the `runtime-info` bridge (SG-signed) does.
3
+ -- Research (2026-10-30, see
4
+ -- documentation/archive/research/Qoder-03-umid-and-identity-findings.md)
5
+ -- established that machine identity does not gate the daily-credit campaign.
6
+ -- The seed is retained for deterministic replay of a native identity on
7
+ -- surfaces that may require one; it is not required for campaign eligibility.
8
8
  --
9
9
  -- Migration 0026 already added `native_identity` (the token triple + optional
10
10
  -- seed) with a partial unique index on the extracted machineToken — the
11
11
  -- "one device per account" invariant. This migration does not change that
12
12
  -- schema; it only documents the contract change on the same column:
13
13
  --
14
- -- `seed` is now REQUIRED for a claim-capable identity (the seed is the
15
- -- device material; the token can be re-derived from it, never the reverse).
16
- -- Rows minted by the retired generated path carry `seed = ""` — they stay
17
- -- valid records but must be re-minted through the bridge before the next
18
- -- claim; the store treats a missing/empty seed as "not replay-capable".
14
+ -- `seed` makes a native identity replay-capable (the token can be
15
+ -- re-derived from the seed, never the reverse). Rows minted by the
16
+ -- generated path may have `seed = ""`; that affects native replay only,
17
+ -- not the daily campaign claim.
19
18
  --
20
19
  -- No DDL is needed: the JSON shape already carries everything. Kept as an
21
20
  -- empty migration so the migration numbering records the policy change.
@@ -0,0 +1,53 @@
1
+ -- Pool-as-account routing entities for ip-scoped, credential-less providers.
2
+ --
3
+ -- For providers whose rate limit follows the egress address (OpenCode Free),
4
+ -- the pool is the resource that runs out — but it was invisible to account-level
5
+ -- health and routing because the provider owns no `provider_accounts` rows.
6
+ -- This table materializes one row per (pool × ip-scoped provider), carrying the
7
+ -- same health state machine (`status`, `cooldown_until`, …) so a spent egress
8
+ -- is excluded from routing plans exactly like a cooling account, and shows in
9
+ -- the provider's Accounts card with a "Pool" badge.
10
+ --
11
+ -- The row is an account-equivalent, not an account: it resolves no credential,
12
+ -- is skipped by quota-refresh and identity sweeps (they filter on real
13
+ -- credential kinds), and is owned by its pool — deleting the pool cascades the
14
+ -- row. Rows are backfilled here for every existing pool × ip-scoped provider so
15
+ -- no operator action is needed to adopt the feature.
16
+ CREATE TABLE IF NOT EXISTS "provider_pool_accounts" (
17
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
18
+ "tenant_id" uuid NOT NULL REFERENCES "tenants" ("id") ON DELETE CASCADE,
19
+ "network_pool_id" uuid NOT NULL REFERENCES "network_pools" ("id") ON DELETE CASCADE,
20
+ "provider_id" text NOT NULL,
21
+ "label" text NOT NULL,
22
+ "status" text NOT NULL DEFAULT 'active'
23
+ CHECK ("status" IN ('active', 'cooldown', 'disabled')),
24
+ "consecutive_failures" integer NOT NULL DEFAULT 0,
25
+ "last_success_at" timestamptz,
26
+ "last_error" text,
27
+ "last_error_category" text,
28
+ "last_error_at" timestamptz,
29
+ "cooldown_until" timestamptz,
30
+ "last_recovered_at" timestamptz,
31
+ "created_at" timestamptz NOT NULL DEFAULT now(),
32
+ "updated_at" timestamptz NOT NULL DEFAULT now(),
33
+ CONSTRAINT provider_pool_accounts_pool_provider_uidx
34
+ UNIQUE ("network_pool_id", "provider_id", "tenant_id")
35
+ );
36
+
37
+ CREATE INDEX IF NOT EXISTS provider_pool_accounts_tenant_status_idx
38
+ ON "provider_pool_accounts" ("tenant_id", "status");
39
+ CREATE INDEX IF NOT EXISTS provider_pool_accounts_provider_status_idx
40
+ ON "provider_pool_accounts" ("provider_id", "status");
41
+
42
+ -- Backfill: every existing pool × ip-scoped provider gets its row. The
43
+ -- ip-scoped set is OpenCode Free today; the provider id is spelled here so the
44
+ -- rule stays a data fact, not a code constant.
45
+ INSERT INTO "provider_pool_accounts"
46
+ ("tenant_id", "network_pool_id", "provider_id", "label")
47
+ SELECT
48
+ p."tenant_id",
49
+ p."id",
50
+ 'opencode',
51
+ 'Pool ' || left(p."id"::text, 8)
52
+ FROM "network_pools" p
53
+ ON CONFLICT ("network_pool_id", "provider_id", "tenant_id") DO NOTHING;
@@ -0,0 +1,9 @@
1
+ -- API-key ban state.
2
+ --
3
+ -- A ban is distinct from revoke (terminal, tombstone-like) and disable
4
+ -- (operator toggle, reversible): it records *why* a key was banned
5
+ -- (`ban_reason`) for the console's "See reason" modal. Unban clears both
6
+ -- columns entirely — no tombstone, no leftover metadata.
7
+ ALTER TABLE "api_keys"
8
+ ADD COLUMN "banned_at" timestamptz,
9
+ ADD COLUMN "ban_reason" text;
@@ -0,0 +1,7 @@
1
+ -- API-key ban expiry.
2
+ --
3
+ -- A ban may now carry an optional `banned_until`: a timed ban lifts on its
4
+ -- own (auth checks `banned_at` against `banned_until`), while `null` keeps the
5
+ -- earlier permanent-ban behavior. Unban clears all three ban columns.
6
+ ALTER TABLE "api_keys"
7
+ ADD COLUMN "banned_until" timestamptz;
@@ -0,0 +1,21 @@
1
+ -- Align `provider_pool_accounts.status` with the shared `health_status` enum.
2
+ --
3
+ -- The table was created with a `text` column plus an inline CHECK (migration
4
+ -- 0032), while every other health-state column uses the `health_status` enum.
5
+ -- The Drizzle schema declares the enum, so the drift checker reported the text
6
+ -- column and its CHECK as "produced by migrations but not in schema". This
7
+ -- migration rewrites the column to the enum: same allowed values, one
8
+ -- canonical type.
9
+ --
10
+ -- The inline CHECK from 0032 must be dropped first: PostgreSQL rewrites
11
+ -- CHECK expressions during an ALTER TYPE, and the old `status IN ('active',
12
+ -- ...)` expression compares the new enum column against text literals, which
13
+ -- has no operator once the column becomes the enum.
14
+
15
+ ALTER TABLE "provider_pool_accounts" DROP CONSTRAINT "provider_pool_accounts_status_check";
16
+
17
+ ALTER TABLE "provider_pool_accounts"
18
+ ALTER COLUMN "status" DROP DEFAULT,
19
+ ALTER COLUMN "status" SET DATA TYPE "public"."health_status"
20
+ USING "status"::"public"."health_status",
21
+ ALTER COLUMN "status" SET DEFAULT 'active';
@@ -0,0 +1,10 @@
1
+ -- Tenant system-prompt injection: presets + combo/alias scopes + scope refs.
2
+ --
3
+ -- Legacy shape: `providers` (followGlobal + optional inline setting), `models`
4
+ -- (providerId::modelId -> setting). New shape: every scope map stores a
5
+ -- reference, and a named preset collection is introduced. Legacy rows remain
6
+ -- readable (the store's defensive reader normalizes them); this migration only
7
+ -- adds the new columns so the new shapes can be written.
8
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "presets" jsonb NOT NULL DEFAULT '{}';
9
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "combos" jsonb NOT NULL DEFAULT '{}';
10
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "aliases" jsonb NOT NULL DEFAULT '{}';
@@ -0,0 +1,3 @@
1
+ -- Share-template concurrency scope: family (one cap for all recipients, the
2
+ -- default) vs per_key (each recipient key carries its own cap and counter).
3
+ ALTER TABLE "api_keys" ADD COLUMN "concurrency_scope" text NOT NULL DEFAULT 'family';
@@ -0,0 +1,7 @@
1
+ -- Last successful quota read, persisted as JSON so an account's balance
2
+ -- survives a process restart (the in-process quota cache does not).
3
+ --
4
+ -- Only a successful read is stored; a failed fetch leaves the previous
5
+ -- snapshot in place, mirroring `quota_plan`.
6
+ ALTER TABLE "provider_accounts"
7
+ ADD COLUMN IF NOT EXISTS "quota_snapshot" jsonb;
@@ -0,0 +1,13 @@
1
+ -- Indexes for the console's per-provider and per-model telemetry aggregates.
2
+ --
3
+ -- The provider usage matrix and `breakdownTelemetry("provider")` filter on
4
+ -- `tenant_id` + `provider_id` and aggregate over `created_at`; the top-model
5
+ -- breakdown does the same for `requested_model`. These queries used the
6
+ -- tenant-range index, which scanned every event in the window for one
7
+ -- provider/model card. Each new index turns the card into an index-only range
8
+ -- scan.
9
+ CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_provider_created_idx"
10
+ ON "telemetry_events" USING btree ("tenant_id", "provider_id", "created_at");
11
+
12
+ CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_model_created_idx"
13
+ ON "telemetry_events" USING btree ("tenant_id", "requested_model", "created_at");
@@ -0,0 +1,3 @@
1
+ -- Explicit wire dialect per model row (nullable; absent = resolver fallback).
2
+ -- See documentation/features/09-wire-dialects.md.
3
+ ALTER TABLE "models" ADD COLUMN "dialect" TEXT;
@@ -0,0 +1,7 @@
1
+ -- `daily_checkin_ledger.account_id` referenced `provider_accounts.id` only by
2
+ -- convention; deleting an account left orphan ledger rows behind. This adds the
3
+ -- missing FK with `ON DELETE CASCADE` so a deleted account's daily check-in
4
+ -- markers go with it.
5
+ ALTER TABLE "daily_checkin_ledger"
6
+ ADD CONSTRAINT "daily_checkin_ledger_account_id_provider_accounts_id_fk"
7
+ FOREIGN KEY ("account_id") REFERENCES "provider_accounts" ("id") ON DELETE CASCADE;
@@ -1,21 +1,20 @@
1
1
  -- Qoder native identity: genuine SG identity + per-account seed replay.
2
2
  --
3
- -- Research (2026-10-30, see documentation/research/qoder-identity-gate-
4
- -- postmortem.md and qoder-umid-reverse.md) established that the daily-credit
5
- -- campaign gates its CREDITS grant on a *genuine* Alibaba SG-produced
6
- -- identity: generated/deterministic tokens do not reveal the grant on a
7
- -- fresh account, while the `runtime-info` bridge (SG-signed) does.
3
+ -- Research (2026-10-30, see
4
+ -- documentation/archive/research/Qoder-03-umid-and-identity-findings.md)
5
+ -- established that machine identity does not gate the daily-credit campaign.
6
+ -- The seed is retained for deterministic replay of a native identity on
7
+ -- surfaces that may require one; it is not required for campaign eligibility.
8
8
  --
9
9
  -- Migration 0026 already added `native_identity` (the token triple + optional
10
10
  -- seed) with a partial unique index on the extracted machineToken — the
11
11
  -- "one device per account" invariant. This migration does not change that
12
12
  -- schema; it only documents the contract change on the same column:
13
13
  --
14
- -- `seed` is now REQUIRED for a claim-capable identity (the seed is the
15
- -- device material; the token can be re-derived from it, never the reverse).
16
- -- Rows minted by the retired generated path carry `seed = ""` — they stay
17
- -- valid records but must be re-minted through the bridge before the next
18
- -- claim; the store treats a missing/empty seed as "not replay-capable".
14
+ -- `seed` makes a native identity replay-capable (the token can be
15
+ -- re-derived from the seed, never the reverse). Rows minted by the
16
+ -- generated path may have `seed = ""`; that affects native replay only,
17
+ -- not the daily campaign claim.
19
18
  --
20
19
  -- No DDL is needed: the JSON shape already carries everything. Kept as an
21
20
  -- empty migration so the migration numbering records the policy change.
@@ -0,0 +1,44 @@
1
+ -- Pool-as-account routing entities for ip-scoped, credential-less providers.
2
+ --
3
+ -- Mirror of `full-postgres/0032_add_provider_pool_accounts.sql`; see that file
4
+ -- for the rationale. SQLite representation: `id`/`tenant_id`/`network_pool_id`
5
+ -- are text (uuid), `status` is text with a CHECK, timestamps are text.
6
+ CREATE TABLE IF NOT EXISTS "provider_pool_accounts" (
7
+ "id" text PRIMARY KEY,
8
+ "tenant_id" text NOT NULL REFERENCES "tenants" ("id") ON DELETE CASCADE,
9
+ "network_pool_id" text NOT NULL REFERENCES "network_pools" ("id") ON DELETE CASCADE,
10
+ "provider_id" text NOT NULL,
11
+ "label" text NOT NULL,
12
+ "status" text NOT NULL DEFAULT 'active'
13
+ CHECK ("status" IN ('active', 'cooldown', 'disabled')),
14
+ "consecutive_failures" integer NOT NULL DEFAULT 0,
15
+ "last_success_at" text,
16
+ "last_error" text,
17
+ "last_error_category" text,
18
+ "last_error_at" text,
19
+ "cooldown_until" text,
20
+ "last_recovered_at" text,
21
+ "created_at" text NOT NULL DEFAULT (datetime('now')),
22
+ "updated_at" text NOT NULL DEFAULT (datetime('now')),
23
+ CONSTRAINT provider_pool_accounts_pool_provider_uidx
24
+ UNIQUE ("network_pool_id", "provider_id", "tenant_id")
25
+ );
26
+
27
+ CREATE INDEX IF NOT EXISTS provider_pool_accounts_tenant_status_idx
28
+ ON "provider_pool_accounts" ("tenant_id", "status");
29
+ CREATE INDEX IF NOT EXISTS provider_pool_accounts_provider_status_idx
30
+ ON "provider_pool_accounts" ("provider_id", "status");
31
+
32
+ -- Backfill: every existing pool × ip-scoped provider gets its row. The
33
+ -- ip-scoped set is OpenCode Free today; the provider id is spelled here so the
34
+ -- rule stays a data fact, not a code constant. SQLite's bun driver rejects the
35
+ -- newer `ON CONFLICT DO NOTHING` on an INSERT…SELECT, so the equivalent
36
+ -- `INSERT OR IGNORE` form is used here (Postgres version keeps the standard one).
37
+ INSERT OR IGNORE INTO "provider_pool_accounts"
38
+ ("tenant_id", "network_pool_id", "provider_id", "label")
39
+ SELECT
40
+ p."tenant_id",
41
+ p."id",
42
+ 'opencode',
43
+ 'Pool ' || substr(p."id", 1, 8)
44
+ FROM "network_pools" p;
@@ -0,0 +1,8 @@
1
+ -- API-key ban state. Mirror of `full-postgres/0033_add_api_key_ban.sql`;
2
+ -- SQLite stores timestamps as text (ISO), and each `ALTER TABLE ... ADD COLUMN`
3
+ -- may carry exactly one column.
4
+ ALTER TABLE "api_keys"
5
+ ADD COLUMN "banned_at" text;
6
+
7
+ ALTER TABLE "api_keys"
8
+ ADD COLUMN "ban_reason" text;
@@ -0,0 +1,5 @@
1
+ -- API-key ban expiry. Mirror of `full-postgres/0034_add_api_key_ban_until.sql`;
2
+ -- SQLite stores timestamps as text (ISO), and each `ALTER TABLE ... ADD COLUMN`
3
+ -- may carry exactly one column.
4
+ ALTER TABLE "api_keys"
5
+ ADD COLUMN "banned_until" text;
@@ -0,0 +1,6 @@
1
+ -- SQLite mirror of `full-postgres/0035_align_pool_account_status_enum.sql`.
2
+ --
3
+ -- SQLite has no enum type: `provider_pool_accounts.status` is a `text`
4
+ -- column with a CHECK constraint already (migration 0032), which matches the
5
+ -- shared schema's semantics. Nothing to change here; the file exists so both
6
+ -- backends carry the same numbered migration set.
@@ -0,0 +1,14 @@
1
+ -- Tenant system-prompt injection: presets + combo/alias scopes + scope refs.
2
+ --
3
+ -- Legacy shape: `providers` (followGlobal + optional inline setting), `models`
4
+ -- (providerId::modelId -> setting). New shape: every scope map stores a
5
+ -- reference, and a named preset collection is introduced. Legacy rows remain
6
+ -- readable (the store's defensive reader normalizes them); this migration only
7
+ -- adds the new columns so the new shapes can be written.
8
+ --
9
+ -- SQLite stores JSON as TEXT, so the new maps are TEXT columns with an
10
+ -- empty-object default, mirroring the existing `providers`/`models` TEXT
11
+ -- columns.
12
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "presets" TEXT NOT NULL DEFAULT '{}';
13
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "combos" TEXT NOT NULL DEFAULT '{}';
14
+ ALTER TABLE "tenant_system_prompts" ADD COLUMN "aliases" TEXT NOT NULL DEFAULT '{}';
@@ -0,0 +1,3 @@
1
+ -- Share-template concurrency scope: family (one cap for all recipients, the
2
+ -- default) vs per_key (each recipient key carries its own cap and counter).
3
+ ALTER TABLE "api_keys" ADD COLUMN "concurrency_scope" TEXT NOT NULL DEFAULT 'family';
@@ -0,0 +1,4 @@
1
+ -- SQLite mirror of `full-postgres/0038_add_accounts_quota_snapshot.sql`:
2
+ -- the column is `text` (the SQLite representation of jsonb).
3
+ ALTER TABLE "provider_accounts"
4
+ ADD COLUMN "quota_snapshot" text;
@@ -0,0 +1,6 @@
1
+ -- SQLite mirror of `full-postgres/0039_add_telemetry_provider_model_indexes.sql`.
2
+ CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_provider_created_idx"
3
+ ON "telemetry_events" ("tenant_id", "provider_id", "created_at");
4
+
5
+ CREATE INDEX IF NOT EXISTS "telemetry_events_tenant_model_created_idx"
6
+ ON "telemetry_events" ("tenant_id", "requested_model", "created_at");
@@ -0,0 +1,3 @@
1
+ -- Explicit wire dialect per model row (nullable; absent = resolver fallback).
2
+ -- See documentation/features/09-wire-dialects.md.
3
+ ALTER TABLE "models" ADD COLUMN "dialect" TEXT;
@@ -0,0 +1,26 @@
1
+ -- `daily_checkin_ledger.account_id` referenced `provider_accounts.id` only by
2
+ -- convention; deleting an account left orphan ledger rows behind. This adds the
3
+ -- missing FK with `ON DELETE CASCADE` so a deleted account's daily check-in
4
+ -- markers go with it.
5
+ --
6
+ -- SQLite cannot add a FK to an existing table in place, so the ledger is
7
+ -- rebuilt with the constraint. The runner wraps the file in a transaction, so
8
+ -- `PRAGMA foreign_keys = OFF` is unusable (a no-op inside a transaction);
9
+ -- `defer_foreign_keys` postpones enforcement to commit time instead, letting
10
+ -- the drop/rename complete mid-rebuild.
11
+
12
+ PRAGMA defer_foreign_keys = ON;
13
+
14
+ CREATE TABLE "daily_checkin_ledger__new" (
15
+ "day_key" text NOT NULL,
16
+ "account_id" text NOT NULL,
17
+ "claimed_at" text DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')) NOT NULL,
18
+ CONSTRAINT "daily_checkin_ledger_day_key_account_id_pk" PRIMARY KEY("day_key", "account_id"),
19
+ CONSTRAINT "daily_checkin_ledger_account_id_provider_accounts_id_fk" FOREIGN KEY ("account_id") REFERENCES "provider_accounts"("id") ON DELETE cascade
20
+ );
21
+ INSERT INTO "daily_checkin_ledger__new" ("day_key", "account_id", "claimed_at")
22
+ SELECT "day_key", "account_id", "claimed_at" FROM "daily_checkin_ledger";
23
+ DROP TABLE "daily_checkin_ledger";
24
+ ALTER TABLE "daily_checkin_ledger__new" RENAME TO "daily_checkin_ledger";
25
+
26
+ PRAGMA defer_foreign_keys = OFF;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cartethyia",
3
- "version": "2.7.3",
3
+ "version": "2.7.5",
4
4
  "description": "A powerful, self-hosted reverse proxy for OpenAI- and Anthropic-compatible AI clients, powered by native Bun and Elysia. It serves both protocols from a single server, routes every model across any configured provider, and translates requests and responses in real time — streaming and prompt caching included. Underneath it runs a full delivery engine: per-account health tracking, quota and cooldown enforcement, automatic failover across pools and providers, usage accounting, and telemetry. Point OpenCode, Cline, Claude Code, Codex, or any compatible client at Cartethyia and it keeps its native protocol while the gateway absorbs every provider-specific difference behind it. Runs on embedded SQLite or external PostgreSQL with optional Redis coordination, ships as a global CLI with a system-tray console, and needs only Bun 1.4+ alongside Node.js/npm.",
5
5
  "license": "GPL-3.0-only",
6
6
  "type": "module",
@@ -39,7 +39,7 @@
39
39
  "bun": ">=1.4.0"
40
40
  },
41
41
  "scripts": {
42
- "dev": "bun run dev:stack",
42
+ "dev": "bun run dev:watch",
43
43
  "dev:watch": "bun run scripts/dev/supervisor.ts",
44
44
  "test": "bun run scripts/test/run.ts",
45
45
  "build": "bun run scripts/build/build.ts",
@@ -47,14 +47,13 @@
47
47
  "setup": "bun run scripts/cli/setup.ts",
48
48
  "start": "bun run scripts/cli/main.ts start",
49
49
  "doctor": "bun run scripts/cli/doctor.ts",
50
- "probe:egress": "bun run scripts/tools/probe-egress.ts",
51
50
  "restart": "bun run scripts/build/restart.ts",
52
51
  "build:aot": "bun run scripts/build/aot.ts",
53
52
  "dev:stack": "concurrently -n BACKEND,DASHBOARD -c cyan,magenta --kill-others-on-fail \"bun run dev:backend\" \"bun run dashboard:dev\"",
54
53
  "typecheck": "tsc --noEmit",
55
54
  "test:watch": "bun run scripts/test/run.ts --watch",
56
55
  "test-db:up": "docker compose -f docker-compose.test.yml up -d --wait postgres-test",
57
- "dev:backend": "bun run --hot src/main.ts",
56
+ "dev:backend": "bun run src/main.ts",
58
57
  "dev:console-auth": "bun run scripts/test/console-session.ts",
59
58
  "dev:visual-baseline": "bun run scripts/test/visual-baseline.ts",
60
59
  "build:binary": "bun run scripts/build/compile.ts",
@@ -78,7 +77,6 @@
78
77
  "jsonrepair": "^3.15.0",
79
78
  "pg": "8.23.0",
80
79
  "pino": "^10.3.1",
81
- "pino-pretty": "^13.1.3",
82
80
  "protobufjs": "^7.6.5",
83
81
  "socks-proxy-agent": "^10.1.0",
84
82
  "systray2": "2.1.4",
@@ -91,6 +89,7 @@
91
89
  "bun-types": "1.4.0",
92
90
  "concurrently": "^10.0.5",
93
91
  "drizzle-kit": "^0.31.11",
92
+ "pino-pretty": "^13.1.3",
94
93
  "typescript": "5.9.2"
95
94
  }
96
95
  }