cartethyia 2.7.7 → 2.7.9

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 (372) hide show
  1. package/.env.example +0 -1
  2. package/README.md +29 -59
  3. package/dist/dashboard/assets/BannedPage-BxoG1MrL.js +1 -0
  4. package/dist/dashboard/assets/BannedPage-BxoG1MrL.js.gz +0 -0
  5. package/dist/dashboard/assets/{CliToolDetailPage-CLUhmjUy.js → CliToolDetailPage-ixwgKk53.js} +1 -1
  6. package/dist/dashboard/assets/CliToolDetailPage-ixwgKk53.js.gz +0 -0
  7. package/dist/dashboard/assets/{CliToolsPage-CQmrqqrk.js → CliToolsPage-BmttNV3U.js} +1 -1
  8. package/dist/dashboard/assets/CliToolsPage-BmttNV3U.js.gz +0 -0
  9. package/dist/dashboard/assets/CombosPage-BE3qwwfC.js +1 -0
  10. package/dist/dashboard/assets/CombosPage-BE3qwwfC.js.gz +0 -0
  11. package/dist/dashboard/assets/ConsoleLogPage-CRZdmMIX.js +1 -0
  12. package/dist/dashboard/assets/ConsoleLogPage-CRZdmMIX.js.gz +0 -0
  13. package/dist/dashboard/assets/CustomizationPage-Dv_FJ6Er.js +1 -0
  14. package/dist/dashboard/assets/CustomizationPage-Dv_FJ6Er.js.gz +0 -0
  15. package/dist/dashboard/assets/HealthEventsModal-CoVrw2sM.js +1 -0
  16. package/dist/dashboard/assets/HealthEventsModal-CoVrw2sM.js.gz +0 -0
  17. package/dist/dashboard/assets/{InjectSystemPromptPanel-C-e2AMz6.js → InjectSystemPromptPanel-BOoO8rpz.js} +2 -2
  18. package/dist/dashboard/assets/InjectSystemPromptPanel-BOoO8rpz.js.gz +0 -0
  19. package/dist/dashboard/assets/{LoginPage-J8wPbmfT.js → LoginPage-ChJuNNVN.js} +1 -1
  20. package/dist/dashboard/assets/LoginPage-ChJuNNVN.js.gz +0 -0
  21. package/dist/dashboard/assets/{ModelPicker-C6WlpU5E.js → ModelPicker-BZAJtPg1.js} +1 -1
  22. package/dist/dashboard/assets/ModelPicker-BZAJtPg1.js.gz +0 -0
  23. package/dist/dashboard/assets/OverviewPage-BE40s3u5.js +1 -0
  24. package/dist/dashboard/assets/OverviewPage-BE40s3u5.js.gz +0 -0
  25. package/dist/dashboard/assets/ProviderDetailPage-sfLoQtPV.js +8 -0
  26. package/dist/dashboard/assets/ProviderDetailPage-sfLoQtPV.js.gz +0 -0
  27. package/dist/dashboard/assets/ProviderIcon-CQ6bPUf_.js +1 -0
  28. package/dist/dashboard/assets/ProviderIcon-CQ6bPUf_.js.gz +0 -0
  29. package/dist/dashboard/assets/ProvidersPage-DcepmPWo.js +1 -0
  30. package/dist/dashboard/assets/ProvidersPage-DcepmPWo.js.gz +0 -0
  31. package/dist/dashboard/assets/{ProxyPage-BBTRBAQ3.js → ProxyPage-BJ87Pp0U.js} +1 -1
  32. package/dist/dashboard/assets/ProxyPage-BJ87Pp0U.js.gz +0 -0
  33. package/dist/dashboard/assets/{QuotaPage-B2WqMSG1.js → QuotaPage-gkSyRAKa.js} +1 -1
  34. package/dist/dashboard/assets/QuotaPage-gkSyRAKa.js.gz +0 -0
  35. package/dist/dashboard/assets/SettingsPage-C5HPWqEv.js +1 -0
  36. package/dist/dashboard/assets/SettingsPage-C5HPWqEv.js.gz +0 -0
  37. package/dist/dashboard/assets/{SetupPage-LND6_Ss7.js → SetupPage-CFNcATJJ.js} +1 -1
  38. package/dist/dashboard/assets/SetupPage-CFNcATJJ.js.gz +0 -0
  39. package/dist/dashboard/assets/{StudioPage-BzNnm6Bi.js → StudioPage-YoD4tY5l.js} +1 -1
  40. package/dist/dashboard/assets/StudioPage-YoD4tY5l.js.gz +0 -0
  41. package/dist/dashboard/assets/UsagePage-DxjaAhb_.js +56 -0
  42. package/dist/dashboard/assets/UsagePage-DxjaAhb_.js.gz +0 -0
  43. package/dist/dashboard/assets/api-keys-BTlkq_Uk.js +1 -0
  44. package/dist/dashboard/assets/api-keys-BTlkq_Uk.js.gz +0 -0
  45. package/dist/dashboard/assets/app-BX2nnKqs.css +2 -0
  46. package/dist/dashboard/assets/app-BX2nnKqs.css.gz +0 -0
  47. package/dist/dashboard/assets/assert-CndthXFQ.js +1 -0
  48. package/dist/dashboard/assets/assert-CndthXFQ.js.gz +0 -0
  49. package/dist/dashboard/assets/{badge-BaX2GTrn.js → badge-DdbT_7Am.js} +1 -1
  50. package/dist/dashboard/assets/badge-DdbT_7Am.js.gz +0 -0
  51. package/dist/dashboard/assets/ban-durations-B58FyRxC.js +1 -0
  52. package/dist/dashboard/assets/ban-durations-B58FyRxC.js.gz +0 -0
  53. package/dist/dashboard/assets/{banner-DFH4Bkte.js → banner-CsGN-nbm.js} +1 -1
  54. package/dist/dashboard/assets/banner-CsGN-nbm.js.gz +0 -0
  55. package/dist/dashboard/assets/brand/bansos_page.webp +0 -0
  56. package/dist/dashboard/assets/brand/denia_bansos.webp +0 -0
  57. package/dist/dashboard/assets/brand/favicon.webp +0 -0
  58. package/dist/dashboard/assets/brand/login_register.webp +0 -0
  59. package/dist/dashboard/assets/brand/login_register_initial.webp +0 -0
  60. package/dist/dashboard/assets/brand/og_bansos.webp +0 -0
  61. package/dist/dashboard/assets/brand/og_image.webp +0 -0
  62. package/dist/dashboard/assets/brand/sidebar_ico.webp +0 -0
  63. package/dist/dashboard/assets/{card-CxDw0lK6.js → card-mgZ_TLLZ.js} +1 -1
  64. package/dist/dashboard/assets/card-mgZ_TLLZ.js.gz +0 -0
  65. package/dist/dashboard/assets/cli-tools-A1-v8-03.js +1 -0
  66. package/dist/dashboard/assets/cli-tools-A1-v8-03.js.gz +0 -0
  67. package/dist/dashboard/assets/{clipboard-button-DfS1ntiq.js → clipboard-button-CJ4Zty89.js} +1 -1
  68. package/dist/dashboard/assets/clipboard-button-CJ4Zty89.js.gz +0 -0
  69. package/dist/dashboard/assets/{dialog-BK-NRr5u.js → dialog-B5L2jPQ_.js} +1 -1
  70. package/dist/dashboard/assets/dialog-B5L2jPQ_.js.gz +0 -0
  71. package/dist/dashboard/assets/{drawer-QqPul6sC.js → drawer-DkjUouAj.js} +1 -1
  72. package/dist/dashboard/assets/drawer-DkjUouAj.js.gz +0 -0
  73. package/dist/dashboard/assets/{entry-BMlYJVFj.js → entry-B-LVLV6o.js} +1 -1
  74. package/dist/dashboard/assets/entry-B-LVLV6o.js.gz +0 -0
  75. package/dist/dashboard/assets/entry-CAhdYl3B.js +1 -0
  76. package/dist/dashboard/assets/entry-CAhdYl3B.js.gz +0 -0
  77. package/dist/dashboard/assets/entry-D2xD0Tmd.js +4 -0
  78. package/dist/dashboard/assets/entry-D2xD0Tmd.js.gz +0 -0
  79. package/dist/dashboard/assets/{formatters-DP-5E01-.js → formatters-CrsdLVsn.js} +1 -1
  80. package/dist/dashboard/assets/formatters-CrsdLVsn.js.gz +0 -0
  81. package/dist/dashboard/assets/{index-D36vCZht.js → index-BU64Lqvp.js} +2 -2
  82. package/dist/dashboard/assets/index-BU64Lqvp.js.gz +0 -0
  83. package/dist/dashboard/assets/{inline-CHJQwxLa.js → inline-B2aDLyyg.js} +1 -1
  84. package/dist/dashboard/assets/inline-B2aDLyyg.js.gz +0 -0
  85. package/dist/dashboard/assets/{input-BlmlizVV.js → input-BCVkdR9d.js} +1 -1
  86. package/dist/dashboard/assets/input-BCVkdR9d.js.gz +0 -0
  87. package/dist/dashboard/assets/{layout-Bz93I-yE.js → layout-DNcAdMK-.js} +1 -1
  88. package/dist/dashboard/assets/layout-DNcAdMK-.js.gz +0 -0
  89. package/dist/dashboard/assets/{list-row-Ml16KCfu.js → list-row-DgrIH0hw.js} +1 -1
  90. package/dist/dashboard/assets/list-row-DgrIH0hw.js.gz +0 -0
  91. package/dist/dashboard/assets/{live-7_QpnYGu.js → live-Cae01iu8.js} +1 -1
  92. package/dist/dashboard/assets/live-Cae01iu8.js.gz +0 -0
  93. package/dist/dashboard/assets/{mutation-GU7XdEjz.js → mutation-BQ0ccH_A.js} +1 -1
  94. package/dist/dashboard/assets/mutation-BQ0ccH_A.js.gz +0 -0
  95. package/dist/dashboard/assets/{network-CuMDaTzT.js → network-CRib7H_2.js} +1 -1
  96. package/dist/dashboard/assets/network-CRib7H_2.js.gz +0 -0
  97. package/dist/dashboard/assets/{numbers-CoqpaDMx.js → numbers-BKQE8Xpz.js} +1 -1
  98. package/dist/dashboard/assets/numbers-BKQE8Xpz.js.gz +0 -0
  99. package/dist/dashboard/assets/{pagination-B5aOoweZ.js → pagination-ecPvG_8g.js} +1 -1
  100. package/dist/dashboard/assets/pagination-ecPvG_8g.js.gz +0 -0
  101. package/dist/dashboard/assets/providers/devin.svg +9 -0
  102. package/dist/dashboard/assets/providers/devin.svg.gz +0 -0
  103. package/dist/dashboard/assets/providers/windsurf.svg +10 -0
  104. package/dist/dashboard/assets/providers/windsurf.svg.gz +0 -0
  105. package/dist/dashboard/assets/{query-keys-YSoQOUh6.js → query-keys-IKLh0YFd.js} +1 -1
  106. package/dist/dashboard/assets/query-keys-IKLh0YFd.js.gz +0 -0
  107. package/dist/dashboard/assets/routing-Ckm1UXuC.js +1 -0
  108. package/dist/dashboard/assets/routing-Ckm1UXuC.js.gz +0 -0
  109. package/dist/dashboard/assets/{select-C9Ssle9b.js → select-ChoFWyKz.js} +1 -1
  110. package/dist/dashboard/assets/select-ChoFWyKz.js.gz +0 -0
  111. package/dist/dashboard/assets/settings-CKjFPlKW.js +1 -0
  112. package/dist/dashboard/assets/settings-CKjFPlKW.js.gz +0 -0
  113. package/dist/dashboard/assets/{stack-j7cXjgYX.js → stack-DWCwU3fh.js} +1 -1
  114. package/dist/dashboard/assets/stack-DWCwU3fh.js.gz +0 -0
  115. package/dist/dashboard/assets/{state-DHmEnLa2.js → state-Cg3VL5J_.js} +1 -1
  116. package/dist/dashboard/assets/state-Cg3VL5J_.js.gz +0 -0
  117. package/dist/dashboard/assets/story/25817331.webp +0 -0
  118. package/dist/dashboard/assets/story/Shorekeeper.webp +0 -0
  119. package/dist/dashboard/assets/story/cartethyia-god.webp +0 -0
  120. package/dist/dashboard/assets/story/fleurdelys_plus.webp +0 -0
  121. package/dist/dashboard/assets/story/jinhsi-blossom.webp +0 -0
  122. package/dist/dashboard/assets/story/phrolova-a.webp +0 -0
  123. package/dist/dashboard/assets/story/requestdeniawokkjpg.webp +0 -0
  124. package/dist/dashboard/assets/story/wuthering-waves-hiyuki-aemeath-hiyuki-rover.webp +0 -0
  125. package/dist/dashboard/assets/{switch-DmZcyTIC.js → switch-Db70BMix.js} +1 -1
  126. package/dist/dashboard/assets/switch-Db70BMix.js.gz +0 -0
  127. package/dist/dashboard/assets/{useMutation-CbCP4w1o.js → useMutation-BqdE0LuM.js} +1 -1
  128. package/dist/dashboard/assets/useMutation-BqdE0LuM.js.gz +0 -0
  129. package/dist/dashboard/console-backgrounds.webp +0 -0
  130. package/dist/dashboard/console-backgrounds_initial.webp +0 -0
  131. package/dist/dashboard/donation/qris-risun-marke.webp +0 -0
  132. package/dist/dashboard/index.html +3 -3
  133. package/dist/dashboard/index.html.gz +0 -0
  134. package/dist/dashboard/precompressed-assets.json +57 -55
  135. package/migrations/full-postgres/0044_add_models_warning_metadata.sql +10 -0
  136. package/migrations/full-postgres/0045_migrate_workbuddy_to_codebuddy.sql +156 -0
  137. package/migrations/lite-sqlite3/0044_add_models_warning_metadata.sql +11 -0
  138. package/migrations/lite-sqlite3/0045_migrate_workbuddy_to_codebuddy.sql +156 -0
  139. package/package.json +1 -1
  140. package/src/boot/dependencies.ts +11 -3
  141. package/src/config/cooldowns.ts +1 -1
  142. package/src/config/spec.ts +0 -6
  143. package/src/console/api-keys/routes.ts +11 -4
  144. package/src/console/console-router.ts +7 -0
  145. package/src/console/dashboard-assets.ts +5 -5
  146. package/src/console/domain-registration.ts +27 -0
  147. package/src/console/ip-bans/routes.ts +99 -0
  148. package/src/console/providers/catalog/catalog-projections.ts +5 -2
  149. package/src/console/providers/catalog/contracts.ts +123 -0
  150. package/src/console/providers/catalog/model-operations.ts +122 -10
  151. package/src/console/providers/catalog/provider-operations.ts +116 -8
  152. package/src/console/providers/catalog/public-model-store.ts +0 -0
  153. package/src/console/providers/catalog/routes.ts +64 -4
  154. package/src/console/providers/catalog/store-helpers.ts +30 -1
  155. package/src/console/providers/catalog/store.ts +243 -3
  156. package/src/console/quota/account-quota-global.ts +89 -1
  157. package/src/console/quota/native-identity.ts +2 -0
  158. package/src/console/settings/contracts.ts +18 -0
  159. package/src/console/settings/store.ts +32 -0
  160. package/src/console/system-prompt/contracts.ts +0 -1
  161. package/src/main.ts +1 -0
  162. package/src/observability/event-query.ts +18 -4
  163. package/src/persistence/dialect.ts +12 -0
  164. package/src/persistence/schema.ts +20 -2
  165. package/src/protocol/dsml.ts +1 -1
  166. package/src/protocol/gateway-error.ts +1 -0
  167. package/src/protocol/reasoning.ts +1 -1
  168. package/src/protocol/request/chat.ts +4 -4
  169. package/src/protocol/request/messages.ts +1 -1
  170. package/src/protocol/response/gemini.ts +6 -1
  171. package/src/protocol/sse-decoder.ts +25 -8
  172. package/src/protocol/stream-error-frames.ts +13 -3
  173. package/src/protocol/translation/quirks.ts +1 -1
  174. package/src/protocol/translation/tool-repair.ts +2 -2
  175. package/src/protocol/upstream/send-claude-messages.ts +15 -4
  176. package/src/protocol/upstream-parsing.ts +1 -1
  177. package/src/providers/adapters/compatible-adapter.ts +7 -5
  178. package/src/providers/authentication/oauth-refresh-service.ts +149 -36
  179. package/src/providers/default-registry.ts +68 -3
  180. package/src/providers/discovery/discovery-types.ts +12 -0
  181. package/src/providers/discovery/probe-phases.ts +61 -30
  182. package/src/providers/discovery/probing-service.ts +279 -164
  183. package/src/providers/integrations/antigravity/antigravity-protocol.ts +117 -2
  184. package/src/providers/integrations/antigravity/antigravity.ts +13 -2
  185. package/src/providers/integrations/buddy/buddy-catalog-shared.ts +72 -34
  186. package/src/providers/integrations/buddy/buddy-chat-shared.ts +18 -18
  187. package/src/providers/integrations/buddy/buddy-checkin.ts +17 -39
  188. package/src/providers/integrations/buddy/buddy-conversation-headers.ts +2 -2
  189. package/src/providers/integrations/buddy/buddy-discovery-shared.ts +5 -5
  190. package/src/providers/integrations/buddy/buddy-identity.ts +70 -0
  191. package/src/providers/integrations/buddy/buddy-media.ts +4 -5
  192. package/src/providers/integrations/buddy/buddy-oauth-shared.ts +2 -2
  193. package/src/providers/integrations/buddy/buddy-quota-shared.ts +1 -1
  194. package/src/providers/integrations/buddy/buddy-usage-shared.ts +1 -3
  195. package/src/providers/integrations/buddy/capabilities.ts +4 -41
  196. package/src/providers/integrations/buddy/codebuddy/cn-catalog.ts +2 -1
  197. package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +20 -1
  198. package/src/providers/integrations/buddy/codebuddy/provider.ts +2 -2
  199. package/src/providers/integrations/buddy/codebuddy/shared.ts +6 -10
  200. package/src/providers/integrations/cursor/cursor-catalog.ts +2 -0
  201. package/src/providers/integrations/cursor/cursor-exec.ts +738 -0
  202. package/src/providers/integrations/cursor/cursor-http2.ts +2 -0
  203. package/src/providers/integrations/cursor/cursor-request.ts +9 -8
  204. package/src/providers/integrations/cursor/cursor-shared.ts +19 -1
  205. package/src/providers/integrations/cursor/cursor.ts +50 -30
  206. package/src/providers/integrations/cursor/protocol/tool-canonical.ts +26 -100
  207. package/src/providers/integrations/devin/devin-auth.ts +353 -0
  208. package/src/providers/integrations/devin/devin-catalog.ts +207 -0
  209. package/src/providers/integrations/devin/devin-http.ts +91 -0
  210. package/src/providers/integrations/devin/devin-quota.ts +214 -0
  211. package/src/providers/integrations/devin/devin-shared.ts +111 -0
  212. package/src/providers/integrations/devin/devin.ts +539 -0
  213. package/src/providers/integrations/devin/protocol/devin-proto.ts +584 -0
  214. package/src/providers/integrations/devin/protocol/framing.ts +124 -0
  215. package/src/providers/integrations/factory/factory.ts +2 -2
  216. package/src/providers/integrations/freepi/freepi-catalog.ts +60 -0
  217. package/src/providers/integrations/freepi/freepi-discovery.ts +82 -0
  218. package/src/providers/integrations/freepi/freepi-headers.ts +21 -0
  219. package/src/providers/integrations/freepi/freepi-oauth.ts +142 -0
  220. package/src/providers/integrations/freepi/freepi-protocol.ts +242 -0
  221. package/src/providers/integrations/freepi/freepi-quota.ts +126 -0
  222. package/src/providers/integrations/freepi/freepi-realm.ts +35 -0
  223. package/src/providers/integrations/freepi/freepi.ts +292 -0
  224. package/src/providers/integrations/gemini.ts +2 -2
  225. package/src/providers/integrations/hermes/hermes-oauth.ts +94 -0
  226. package/src/providers/integrations/hermes.ts +4 -12
  227. package/src/providers/integrations/opencode/fingerprint.ts +1 -1
  228. package/src/providers/integrations/perch/perch-catalog.ts +105 -0
  229. package/src/providers/integrations/perch/perch-oauth.ts +170 -0
  230. package/src/providers/integrations/perch/perch-protocol.ts +211 -0
  231. package/src/providers/integrations/perch/perch-quota.ts +137 -0
  232. package/src/providers/integrations/perch/perch-realm.ts +82 -0
  233. package/src/providers/integrations/perch/perch-system-prompt.ts +13 -0
  234. package/src/providers/integrations/perch/perch.ts +315 -0
  235. package/src/providers/integrations/perch/saffron-system-prompt.txt +8 -0
  236. package/src/providers/integrations/qoder/chat-proto.ts +328 -328
  237. package/src/providers/integrations/qoder/claim-qoder-credits.ts +1 -1
  238. package/src/providers/integrations/qoder/qoder-adapter.ts +89 -28
  239. package/src/providers/integrations/qoder/qoder-cache.ts +32 -0
  240. package/src/providers/integrations/qoder/qoder-catalog.ts +6 -1
  241. package/src/providers/integrations/qoder/qoder-checkin.ts +2 -2
  242. package/src/providers/integrations/qoder/qoder-grpc.ts +209 -5
  243. package/src/providers/integrations/qoder/qoder-ide.ts +5 -1
  244. package/src/providers/integrations/qoder/qoder-identity-cache.ts +184 -0
  245. package/src/providers/integrations/qoder/qoder-native-identity-store.ts +83 -18
  246. package/src/providers/integrations/qoder/qoder-realm.ts +9 -6
  247. package/src/providers/integrations/qoder/qoder-umid.ts +109 -342
  248. package/src/providers/integrations/qoder/qoder-virtual.ts +33 -1
  249. package/src/providers/integrations/qoder/qoder.ts +3 -6
  250. package/src/providers/integrations/trae/trae-catalog.ts +9 -14
  251. package/src/providers/integrations/trae/trae-headers.ts +36 -11
  252. package/src/providers/integrations/trae/trae-oauth.ts +14 -17
  253. package/src/providers/integrations/trae/trae-protocol.ts +3 -6
  254. package/src/providers/integrations/trae/trae-quota.ts +103 -21
  255. package/src/providers/integrations/trae/trae-realm.ts +36 -15
  256. package/src/providers/integrations/trae/trae.ts +97 -7
  257. package/src/providers/operations/account-error-classification.ts +66 -1
  258. package/src/providers/operations/account-health-service.ts +192 -26
  259. package/src/providers/operations/account-refresh-status.ts +284 -0
  260. package/src/providers/operations/account-tier.ts +67 -0
  261. package/src/providers/operations/byok-wire-profile.ts +9 -12
  262. package/src/providers/operations/client-versions.ts +37 -99
  263. package/src/providers/operations/cooldown-rules.ts +61 -0
  264. package/src/providers/operations/provider-catalog-seeder.ts +4 -0
  265. package/src/providers/provider-contracts.ts +29 -0
  266. package/src/providers/provider-metadata.ts +59 -4
  267. package/src/providers/provider-model-definition.ts +36 -0
  268. package/src/providers/quota/refresh.ts +21 -0
  269. package/src/security/abuse.ts +71 -0
  270. package/src/transport/dispatch/proxy-request.ts +1 -0
  271. package/src/transport/dispatch/streaming/stream.ts +1 -0
  272. package/src/transport/dispatch/upstream.ts +4 -1
  273. package/src/transport/failure-policy.ts +113 -7
  274. package/src/transport/routing/router.ts +25 -1
  275. package/src/transport/surface/messages/adapter.ts +2 -1
  276. package/src/transport/surface/responses/encode.ts +12 -1
  277. package/src/workers/daily-checkin.ts +1 -1
  278. package/src/workers/quota-refresh-sweep.ts +1 -1
  279. package/src/workers/scheduler.ts +22 -4
  280. package/dist/dashboard/assets/BannedPage-B05aF8Dg.js +0 -1
  281. package/dist/dashboard/assets/BannedPage-B05aF8Dg.js.gz +0 -0
  282. package/dist/dashboard/assets/CliToolDetailPage-CLUhmjUy.js.gz +0 -0
  283. package/dist/dashboard/assets/CliToolsPage-CQmrqqrk.js.gz +0 -0
  284. package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js +0 -1
  285. package/dist/dashboard/assets/CombosPage-CHG_1Wr3.js.gz +0 -0
  286. package/dist/dashboard/assets/ConsoleLogPage-DPgbklad.js +0 -1
  287. package/dist/dashboard/assets/ConsoleLogPage-DPgbklad.js.gz +0 -0
  288. package/dist/dashboard/assets/CustomizationPage-pnfAqr_-.js +0 -1
  289. package/dist/dashboard/assets/CustomizationPage-pnfAqr_-.js.gz +0 -0
  290. package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js +0 -1
  291. package/dist/dashboard/assets/HealthEventsModal-DGJuU2A6.js.gz +0 -0
  292. package/dist/dashboard/assets/InjectSystemPromptPanel-C-e2AMz6.js.gz +0 -0
  293. package/dist/dashboard/assets/LoginPage-J8wPbmfT.js.gz +0 -0
  294. package/dist/dashboard/assets/ModelPicker-C6WlpU5E.js.gz +0 -0
  295. package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js +0 -1
  296. package/dist/dashboard/assets/OverviewPage-BSQnF2Lp.js.gz +0 -0
  297. package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.js +0 -7
  298. package/dist/dashboard/assets/ProviderDetailPage-DK_e0FJz.js.gz +0 -0
  299. package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js +0 -1
  300. package/dist/dashboard/assets/ProviderIcon-jjqXJDA3.js.gz +0 -0
  301. package/dist/dashboard/assets/ProvidersPage-D_a3r6Gc.js +0 -1
  302. package/dist/dashboard/assets/ProvidersPage-D_a3r6Gc.js.gz +0 -0
  303. package/dist/dashboard/assets/ProxyPage-BBTRBAQ3.js.gz +0 -0
  304. package/dist/dashboard/assets/QuotaPage-B2WqMSG1.js.gz +0 -0
  305. package/dist/dashboard/assets/SettingsPage-D7xp5Ij_.js +0 -1
  306. package/dist/dashboard/assets/SettingsPage-D7xp5Ij_.js.gz +0 -0
  307. package/dist/dashboard/assets/SetupPage-LND6_Ss7.js.gz +0 -0
  308. package/dist/dashboard/assets/StudioPage-BzNnm6Bi.js.gz +0 -0
  309. package/dist/dashboard/assets/UsagePage-C1TbL24N.js +0 -56
  310. package/dist/dashboard/assets/UsagePage-C1TbL24N.js.gz +0 -0
  311. package/dist/dashboard/assets/api-keys-KvX83mRe.js +0 -1
  312. package/dist/dashboard/assets/api-keys-KvX83mRe.js.gz +0 -0
  313. package/dist/dashboard/assets/app-mweRcsKp.css +0 -2
  314. package/dist/dashboard/assets/app-mweRcsKp.css.gz +0 -0
  315. package/dist/dashboard/assets/assert-CidQVoNo.js +0 -1
  316. package/dist/dashboard/assets/assert-CidQVoNo.js.gz +0 -0
  317. package/dist/dashboard/assets/badge-BaX2GTrn.js.gz +0 -0
  318. package/dist/dashboard/assets/banner-DFH4Bkte.js.gz +0 -0
  319. package/dist/dashboard/assets/brand/bansos_page.png +0 -0
  320. package/dist/dashboard/assets/brand/denia_bansos.jpg +0 -0
  321. package/dist/dashboard/assets/brand/favicon.jpg +0 -0
  322. package/dist/dashboard/assets/brand/login_register.jpg +0 -0
  323. package/dist/dashboard/assets/brand/login_register_initial.jpg +0 -0
  324. package/dist/dashboard/assets/brand/og_bansos.jpg +0 -0
  325. package/dist/dashboard/assets/brand/og_image.jpg +0 -0
  326. package/dist/dashboard/assets/brand/sidebar_ico.jpg +0 -0
  327. package/dist/dashboard/assets/card-CxDw0lK6.js.gz +0 -0
  328. package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js +0 -1
  329. package/dist/dashboard/assets/cli-tools-Bwv5-zGZ.js.gz +0 -0
  330. package/dist/dashboard/assets/clipboard-button-DfS1ntiq.js.gz +0 -0
  331. package/dist/dashboard/assets/dialog-BK-NRr5u.js.gz +0 -0
  332. package/dist/dashboard/assets/drawer-QqPul6sC.js.gz +0 -0
  333. package/dist/dashboard/assets/entry-BMlYJVFj.js.gz +0 -0
  334. package/dist/dashboard/assets/entry-Dmx7gBiN.js +0 -1
  335. package/dist/dashboard/assets/entry-Dmx7gBiN.js.gz +0 -0
  336. package/dist/dashboard/assets/entry-vqGb8yVz.js +0 -4
  337. package/dist/dashboard/assets/entry-vqGb8yVz.js.gz +0 -0
  338. package/dist/dashboard/assets/formatters-DP-5E01-.js.gz +0 -0
  339. package/dist/dashboard/assets/index-D36vCZht.js.gz +0 -0
  340. package/dist/dashboard/assets/inline-CHJQwxLa.js.gz +0 -0
  341. package/dist/dashboard/assets/input-BlmlizVV.js.gz +0 -0
  342. package/dist/dashboard/assets/layout-Bz93I-yE.js.gz +0 -0
  343. package/dist/dashboard/assets/list-row-Ml16KCfu.js.gz +0 -0
  344. package/dist/dashboard/assets/live-7_QpnYGu.js.gz +0 -0
  345. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js +0 -1
  346. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js.gz +0 -0
  347. package/dist/dashboard/assets/mutation-GU7XdEjz.js.gz +0 -0
  348. package/dist/dashboard/assets/network-CuMDaTzT.js.gz +0 -0
  349. package/dist/dashboard/assets/numbers-CoqpaDMx.js.gz +0 -0
  350. package/dist/dashboard/assets/pagination-B5aOoweZ.js.gz +0 -0
  351. package/dist/dashboard/assets/query-keys-YSoQOUh6.js.gz +0 -0
  352. package/dist/dashboard/assets/routing-fnCsxgNO.js +0 -1
  353. package/dist/dashboard/assets/routing-fnCsxgNO.js.gz +0 -0
  354. package/dist/dashboard/assets/select-C9Ssle9b.js.gz +0 -0
  355. package/dist/dashboard/assets/settings-BxslsErn.js +0 -1
  356. package/dist/dashboard/assets/settings-BxslsErn.js.gz +0 -0
  357. package/dist/dashboard/assets/stack-j7cXjgYX.js.gz +0 -0
  358. package/dist/dashboard/assets/state-DHmEnLa2.js.gz +0 -0
  359. package/dist/dashboard/assets/switch-DmZcyTIC.js.gz +0 -0
  360. package/dist/dashboard/assets/useMutation-CbCP4w1o.js.gz +0 -0
  361. package/dist/dashboard/console-backgrounds.jpg +0 -0
  362. package/dist/dashboard/console-backgrounds_initial.jpg +0 -0
  363. package/dist/dashboard/donation/qris-risun-marke.png +0 -0
  364. package/src/providers/integrations/buddy/turing-device-token.ts +0 -262
  365. package/src/providers/integrations/buddy/workbuddy/cn-oauth.ts +0 -30
  366. package/src/providers/integrations/buddy/workbuddy/cn-provider.ts +0 -58
  367. package/src/providers/integrations/buddy/workbuddy/oauth.ts +0 -31
  368. package/src/providers/integrations/buddy/workbuddy/provider.ts +0 -209
  369. package/src/providers/integrations/buddy/workbuddy/quota.ts +0 -161
  370. package/src/providers/integrations/buddy/workbuddy/shared.ts +0 -285
  371. /package/dist/dashboard/assets/{app-DRnQLhsc.js → app-B7kIWFm5.js} +0 -0
  372. /package/dist/dashboard/assets/{app-DRnQLhsc.js.gz → app-B7kIWFm5.js.gz} +0 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Devin usage/quota collector via `GetUserStatus` (SeatManagementService).
3
+ *
4
+ * Ported from oh-my-pi (`usage/devin.ts`, MIT) onto Cartethyia's
5
+ * `QuotaFetcher` contract. Never throws — a failed read returns a null
6
+ * error result so the usage pipeline stays best-effort.
7
+ */
8
+
9
+ import type { ProviderQuotaResult, ProviderQuotaWindow, FetchLike } from "../../quota/quota-contracts";
10
+ import { callDevinUnary } from "./devin-http";
11
+ import { identityFromDevinUserStatus } from "./devin-auth";
12
+ import {
13
+ DEVIN_DEFAULT_BASE_URL,
14
+ DEVIN_GET_USER_STATUS_PATH,
15
+ devinCliMetadata,
16
+ } from "./devin-shared";
17
+ import { DevinEnums, DevinMessageTypes, fromEnum } from "./protocol/devin-proto";
18
+
19
+ const MICROS_PER_USD = 1_000_000;
20
+
21
+ interface RawUserStatusResponse {
22
+ userStatus?: {
23
+ teamId?: string;
24
+ email?: string;
25
+ teamsTier?: number;
26
+ userId?: string;
27
+ planStatus?: RawPlanStatus;
28
+ };
29
+ planInfo?: RawPlanInfo;
30
+ }
31
+
32
+ interface RawPlanInfo {
33
+ teamsTier?: number;
34
+ planName?: string;
35
+ monthlyPromptCredits?: string | number;
36
+ monthlyFlowCredits?: string | number;
37
+ monthlyFlexCreditPurchaseAmount?: string | number;
38
+ devinInfo?: { orgId?: string; accountDisplayName?: string };
39
+ billingStrategy?: number;
40
+ hideDailyQuota?: boolean;
41
+ hideWeeklyQuota?: boolean;
42
+ }
43
+
44
+ interface RawPlanStatus {
45
+ planInfo?: RawPlanInfo;
46
+ planStart?: string | number;
47
+ planEnd?: string | number;
48
+ availablePromptCredits?: string | number;
49
+ availableFlowCredits?: string | number;
50
+ availableFlexCredits?: string | number;
51
+ usedPromptCredits?: string | number;
52
+ usedFlowCredits?: string | number;
53
+ usedFlexCredits?: string | number;
54
+ overageBalanceMicros?: string | number;
55
+ dailyQuotaRemainingPercent?: number;
56
+ weeklyQuotaRemainingPercent?: number;
57
+ dailyQuotaResetAtUnix?: string | number;
58
+ weeklyQuotaResetAtUnix?: string | number;
59
+ }
60
+
61
+ /** protobufjs returns a Long-like object for int64 fields; never coerce it via String(). */
62
+ function toNum(v: unknown): number {
63
+ if (v === undefined || v === null) return 0;
64
+ if (typeof v === "number") return Number.isFinite(v) ? v : 0;
65
+ if (typeof v === "string") {
66
+ const n = Number(v);
67
+ return Number.isFinite(n) ? n : 0;
68
+ }
69
+ if (typeof v === "object" && "low" in v && "high" in v) {
70
+ const low = Number((v as { low: unknown }).low);
71
+ const high = Number((v as { high: unknown }).high);
72
+ if (!Number.isFinite(low) || !Number.isFinite(high)) return 0;
73
+ // Signed low/high pair → JS number (values here are small credits/timestamps).
74
+ return high * 0x1_0000_0000 + (low >>> 0);
75
+ }
76
+ return 0;
77
+ }
78
+
79
+ function tierLabel(tier: number | undefined): string {
80
+ const name = fromEnum(DevinEnums.TeamsTier, tier);
81
+ return name === "UNSPECIFIED" ? "" : name.replace(/_/g, " ").replace(/\b\w/g, (c: string) => c.toUpperCase());
82
+ }
83
+
84
+ function creditWindow(
85
+ id: string,
86
+ label: string,
87
+ limit: number,
88
+ used: number,
89
+ available: number,
90
+ ): ProviderQuotaWindow | undefined {
91
+ if (limit === 0 && used === 0 && available === 0) return undefined;
92
+ return {
93
+ kind: id,
94
+ label,
95
+ accounting: "pooled",
96
+ usedPercent: limit > 0 ? Math.min(100, (used / limit) * 100) : null,
97
+ remainingPercent: limit > 0 ? Math.min(100, Math.max(0, (available / limit) * 100)) : null,
98
+ resetsAt: null,
99
+ used,
100
+ limit,
101
+ remaining: available,
102
+ recurring: true,
103
+ };
104
+ }
105
+
106
+ function quotaWindow(
107
+ id: string,
108
+ label: string,
109
+ remainingPercent: number | undefined,
110
+ resetAtUnix: unknown,
111
+ ): ProviderQuotaWindow | undefined {
112
+ if (remainingPercent === undefined) return undefined;
113
+ const used = Math.max(0, 100 - remainingPercent);
114
+ const resetSeconds = toNum(resetAtUnix);
115
+ const resetsAt = resetSeconds > 0 ? new Date(resetSeconds * 1000).toISOString() : null;
116
+ return {
117
+ kind: id,
118
+ label,
119
+ accounting: "independent",
120
+ usedPercent: used,
121
+ remainingPercent,
122
+ resetsAt,
123
+ recurring: true,
124
+ };
125
+ }
126
+
127
+ export async function fetchDevinQuota(
128
+ credential: string,
129
+ fetcher: FetchLike,
130
+ ): Promise<ProviderQuotaResult> {
131
+ const result: ProviderQuotaResult = { source: "devin", plan: null, windows: [], error: null };
132
+ try {
133
+ const response = await callDevinUnary<RawUserStatusResponse>(
134
+ DEVIN_GET_USER_STATUS_PATH,
135
+ DevinMessageTypes.GetUserStatusRequest,
136
+ DevinMessageTypes.GetUserStatusResponse,
137
+ { metadata: devinCliMetadata(credential) },
138
+ { baseUrl: DEVIN_DEFAULT_BASE_URL, fetchImpl: fetcher as unknown as typeof fetch, signal: AbortSignal.timeout(15_000) },
139
+ );
140
+
141
+ const plan = response.planInfo ?? response.userStatus?.planStatus?.planInfo ?? undefined;
142
+ const planStatus = response.userStatus?.planStatus;
143
+ if (!plan || !planStatus) return { ...result, error: "Devin returned no plan data" };
144
+
145
+ const planName = plan.planName?.trim() || tierLabel(plan.teamsTier ?? response.userStatus?.teamsTier);
146
+ // Prefer the upstream email/display name over the opaque team tag; fall
147
+ // back to the team id only when the upstream reports nothing friendlier.
148
+ const accountLabel =
149
+ identityFromDevinUserStatus(response) ??
150
+ (plan.devinInfo?.orgId?.trim() || response.userStatus?.teamId?.trim() || undefined);
151
+
152
+ const billingStrategy = toNum(plan.billingStrategy);
153
+ const quotaBilled = billingStrategy === DevinEnums.BillingStrategy.QUOTA;
154
+
155
+ const windows: ProviderQuotaWindow[] = [];
156
+ if (!quotaBilled) {
157
+ // Legacy credit buckets. QUOTA-billed plans (DEVIN_FREE) still report
158
+ // them for backwards compatibility but they do not gate anything —
159
+ // showing "0 / 2,500 Credits" next to the real quota is misleading.
160
+ const prompt = creditWindow("prompt", "Prompt Credits", toNum(plan.monthlyPromptCredits), toNum(planStatus.usedPromptCredits), toNum(planStatus.availablePromptCredits));
161
+ const flow = creditWindow("flow", "Flow Credits", toNum(plan.monthlyFlowCredits), toNum(planStatus.usedFlowCredits), toNum(planStatus.availableFlowCredits));
162
+ const flex = creditWindow("flex", "Flex Credits", toNum(plan.monthlyFlexCreditPurchaseAmount), toNum(planStatus.usedFlexCredits), toNum(planStatus.availableFlexCredits));
163
+ if (prompt) windows.push(prompt);
164
+ if (flow) windows.push(flow);
165
+ if (flex) windows.push(flex);
166
+ }
167
+
168
+ // Quota windows: only on QUOTA-billed plans, and never when hidden.
169
+ // Credit-billed accounts leave the percent at proto default (100) with a
170
+ // zero reset, which would render a fake "100% quota" row.
171
+ const quotaApplicable = (hidden: boolean | undefined, resetAt: unknown): boolean =>
172
+ quotaBilled && !hidden && !(toNum(resetAt) === 0);
173
+
174
+ if (quotaApplicable(plan.hideDailyQuota, planStatus.dailyQuotaResetAtUnix)) {
175
+ const w = quotaWindow("1d", "Daily Quota", planStatus.dailyQuotaRemainingPercent, planStatus.dailyQuotaResetAtUnix);
176
+ if (w) windows.push(w);
177
+ }
178
+ if (quotaApplicable(plan.hideWeeklyQuota, planStatus.weeklyQuotaResetAtUnix)) {
179
+ const w = quotaWindow("7d", "Weekly Quota", planStatus.weeklyQuotaRemainingPercent, planStatus.weeklyQuotaResetAtUnix);
180
+ if (w) windows.push(w);
181
+ }
182
+
183
+ // Monthly plan window belongs to credit-billed plans only.
184
+ if (!quotaBilled) {
185
+ const start = toNum(planStatus.planStart);
186
+ const end = toNum(planStatus.planEnd);
187
+ if (end > start) {
188
+ windows.push({
189
+ kind: "monthly",
190
+ label: "Plan Period",
191
+ accounting: "independent",
192
+ usedPercent: null,
193
+ remainingPercent: null,
194
+ resetsAt: new Date(end * 1000).toISOString(),
195
+ recurring: true,
196
+ });
197
+ }
198
+ }
199
+
200
+ const overageMicros = toNum(planStatus.overageBalanceMicros);
201
+ const overageUsd = overageMicros / MICROS_PER_USD;
202
+
203
+ return {
204
+ source: "devin",
205
+ plan: planName || null,
206
+ windows,
207
+ error: null,
208
+ ...(accountLabel ? { accountLabel } : {}),
209
+ ...(overageUsd !== 0 ? { plan: `${planName} (overage $${overageUsd.toFixed(2)})` } : {}),
210
+ };
211
+ } catch {
212
+ return { ...result, error: "Devin quota fetch failed" };
213
+ }
214
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Devin (Codeium Cascade) shared wire constants and metadata identity.
3
+ *
4
+ * Two identity tuples exist upstream, sourced from oh-my-pi
5
+ * (`packages/catalog/src/wire/devin.ts`, MIT) and cross-checked against the
6
+ * other donors: the released CLI identity (`devin-cli`/`chisel`/
7
+ * `3000.11.205`) for chat/auth/usage, and the dev-channel discovery identity
8
+ * (`chisel`/`0.0.0-dev`) for `GetCliModelConfigs` — the latter is what
9
+ * unlocks the full native catalog.
10
+ */
11
+
12
+ /** `Metadata.os` vocabulary; `process.platform` is fixed for the process lifetime. */
13
+ export const DEVIN_OS =
14
+ process.platform === "darwin" ? "darwin" : process.platform === "win32" ? "windows" : "linux";
15
+
16
+ export const DEVIN_DEFAULT_BASE_URL = "https://server.codeium.com";
17
+
18
+ export const DEVIN_SESSION_TOKEN_PREFIX = "devin-session-token$";
19
+
20
+ /** Paths. */
21
+ export const DEVIN_CHAT_MESSAGE_PATH = "/exa.api_server_pb.ApiServerService/GetChatMessage";
22
+ export const DEVIN_ASSIGN_MODEL_PATH = "/exa.api_server_pb.ApiServerService/AssignModel";
23
+ export const DEVIN_GET_CLI_MODEL_CONFIGS_PATH = "/exa.api_server_pb.ApiServerService/GetCliModelConfigs";
24
+ export const DEVIN_GET_USER_JWT_PATH = "/exa.auth_pb.AuthService/GetUserJwt";
25
+ export const DEVIN_GET_USER_STATUS_PATH = "/exa.seat_management_pb.SeatManagementService/GetUserStatus";
26
+ export const DEVIN_EXCHANGE_PATH = "/exa.seat_management_pb.SeatManagementService/ExchangePKCEAuthorizationCode";
27
+
28
+ /** User-Agent used for the chat stream (connect-go spoof). */
29
+ export const DEVIN_CONNECT_UA = "connect-go/1.18.1 (go1.26.3)";
30
+
31
+ /** Released CLI identity (chat, auth, usage). */
32
+ export const DEVIN_CLI_METADATA = {
33
+ ideName: "devin-cli",
34
+ ideType: "chisel",
35
+ ideVersion: "3000.11.205",
36
+ extensionName: "chisel",
37
+ extensionVersion: "3000.11.205",
38
+ locale: "en",
39
+ os: DEVIN_OS,
40
+ } as const;
41
+
42
+ /** Dev-channel discovery identity (GetCliModelConfigs). */
43
+ export const DEVIN_DISCOVERY_METADATA = {
44
+ ideName: "chisel",
45
+ ideVersion: "0.0.0-dev",
46
+ extensionName: "chisel",
47
+ extensionVersion: "0.0.0-dev",
48
+ locale: "en",
49
+ os: DEVIN_OS,
50
+ } as const;
51
+
52
+ /**
53
+ * Display slots requested in `Metadata.supportedModelDisplays` (field 30).
54
+ * Requests slots 6 (internal default) / 7 (unclassified) / 8 (normal) beyond
55
+ * the generated enum's 0-4 so the server sends the full native catalog.
56
+ */
57
+ export const DEVIN_SUPPORTED_MODEL_DISPLAYS = [3, 4, 6, 7, 8];
58
+
59
+ /** Display slots filtered out client-side (not surfaced to users). */
60
+ export const DEVIN_INTERNAL_MODEL_DISPLAYS = new Set([4, 6]);
61
+
62
+ /** Models that advertise image support but silently drop images (live-verified). */
63
+ export const DEVIN_IMAGE_BLIND_UIDS = new Set(["swe-1-6-fast", "swe-1-6-slow"]);
64
+
65
+ /** Default limits when the catalog reports none. */
66
+ export const DEFAULT_CONTEXT_WINDOW = 200_000;
67
+ export const DEFAULT_MAX_TOKENS = 64_000;
68
+
69
+ /** Stop patterns the CLI sends by default. */
70
+ export const DEVIN_DEFAULT_STOP_PATTERNS = [
71
+ "\u0004",
72
+ "<|bot|>",
73
+ "<|context_request|>",
74
+ "\u0019",
75
+ "<|end_of_turn|>",
76
+ ];
77
+
78
+ /**
79
+ * Encodes a credential for `Metadata.apiKey` (field 3). A bare JWT (3
80
+ * dot-separated segments) gets the `devin-session-token$` prefix; every other
81
+ * key — including legacy `sk-ws-…` — goes out verbatim.
82
+ */
83
+ export function encodeDevinCredential(apiKey: string | undefined): string {
84
+ const key = apiKey?.trim();
85
+ if (!key) return "";
86
+ if (key.startsWith(DEVIN_SESSION_TOKEN_PREFIX)) return key;
87
+ return key.split(".").length === 3 ? `${DEVIN_SESSION_TOKEN_PREFIX}${key}` : key;
88
+ }
89
+
90
+ /** Builds the Metadata message object for a chat/usage call. */
91
+ export function devinCliMetadata(
92
+ apiKey: string,
93
+ userJwt?: string,
94
+ sessionId?: string,
95
+ ): Record<string, unknown> {
96
+ return {
97
+ ...DEVIN_CLI_METADATA,
98
+ apiKey: encodeDevinCredential(apiKey),
99
+ ...(userJwt ? { userJwt } : {}),
100
+ ...(sessionId ? { sessionId } : {}),
101
+ };
102
+ }
103
+
104
+ /** Builds the Metadata message object for discovery. */
105
+ export function devinDiscoveryMetadata(apiKey: string): Record<string, unknown> {
106
+ return {
107
+ ...DEVIN_DISCOVERY_METADATA,
108
+ apiKey: encodeDevinCredential(apiKey),
109
+ supportedModelDisplays: DEVIN_SUPPORTED_MODEL_DISPLAYS,
110
+ };
111
+ }