cartethyia 2.4.5 → 2.4.6

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 (303) hide show
  1. package/.env.example +4 -1
  2. package/README.md +18 -0
  3. package/dist/dashboard/assets/AccountCooldown-ChpdzxRH.js.gz +0 -0
  4. package/dist/dashboard/assets/{BannedPage-DUrXpp-X.js → BannedPage-QhvbJB9o.js} +1 -1
  5. package/dist/dashboard/assets/BannedPage-QhvbJB9o.js.gz +0 -0
  6. package/dist/dashboard/assets/{CliToolDetailPage-BzGevuql.js → CliToolDetailPage-Bcy150Jo.js} +1 -1
  7. package/dist/dashboard/assets/CliToolDetailPage-Bcy150Jo.js.gz +0 -0
  8. package/dist/dashboard/assets/{CliToolsPage-BaRM_7We.js → CliToolsPage-DyNXefph.js} +1 -1
  9. package/dist/dashboard/assets/CliToolsPage-DyNXefph.js.gz +0 -0
  10. package/dist/dashboard/assets/CombosPage-Cak0ljnO.js +1 -0
  11. package/dist/dashboard/assets/CombosPage-Cak0ljnO.js.gz +0 -0
  12. package/dist/dashboard/assets/ConsoleLogPage-CATpAEOz.js +1 -0
  13. package/dist/dashboard/assets/ConsoleLogPage-CATpAEOz.js.gz +0 -0
  14. package/dist/dashboard/assets/{CustomizationPage-DqUGcoH0.js → CustomizationPage-D6jEU7nL.js} +1 -1
  15. package/dist/dashboard/assets/CustomizationPage-D6jEU7nL.js.gz +0 -0
  16. package/dist/dashboard/assets/HealthEventsModal-CZkpn0a7.js +1 -0
  17. package/dist/dashboard/assets/HealthEventsModal-CZkpn0a7.js.gz +0 -0
  18. package/dist/dashboard/assets/{LoginPage-DbhTGfhb.js → LoginPage-BJlMVN4U.js} +1 -1
  19. package/dist/dashboard/assets/LoginPage-BJlMVN4U.js.gz +0 -0
  20. package/dist/dashboard/assets/ModelPicker-Br3CXEau.js +1 -0
  21. package/dist/dashboard/assets/ModelPicker-Br3CXEau.js.gz +0 -0
  22. package/dist/dashboard/assets/{OverviewPage-C3NIzsDx.js → OverviewPage-CQxXbo2g.js} +1 -1
  23. package/dist/dashboard/assets/OverviewPage-CQxXbo2g.js.gz +0 -0
  24. package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js +3 -0
  25. package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js.gz +0 -0
  26. package/dist/dashboard/assets/ProviderIcon-paOCq8I0.js.gz +0 -0
  27. package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js +1 -0
  28. package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js.gz +0 -0
  29. package/dist/dashboard/assets/ProxyPage-CXiumA53.js +7 -0
  30. package/dist/dashboard/assets/ProxyPage-CXiumA53.js.gz +0 -0
  31. package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js +1 -0
  32. package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js.gz +0 -0
  33. package/dist/dashboard/assets/{SettingsPage-YxRml8AT.js → SettingsPage-BHW4Zt06.js} +1 -1
  34. package/dist/dashboard/assets/SettingsPage-BHW4Zt06.js.gz +0 -0
  35. package/dist/dashboard/assets/SetupPage-VOYC_lIa.js +1 -0
  36. package/dist/dashboard/assets/SetupPage-VOYC_lIa.js.gz +0 -0
  37. package/dist/dashboard/assets/SortableList-DpOTnGuH.js +1 -0
  38. package/dist/dashboard/assets/SortableList-DpOTnGuH.js.gz +0 -0
  39. package/dist/dashboard/assets/StudioPage-BNIDLiU6.js +31 -0
  40. package/dist/dashboard/assets/StudioPage-BNIDLiU6.js.gz +0 -0
  41. package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js.gz +0 -0
  42. package/dist/dashboard/assets/{UsagePage-Djes-Epy.js → UsagePage-BAFaSDQV.js} +14 -14
  43. package/dist/dashboard/assets/UsagePage-BAFaSDQV.js.gz +0 -0
  44. package/dist/dashboard/assets/api-keys-BETfaMYZ.js +1 -0
  45. package/dist/dashboard/assets/api-keys-BETfaMYZ.js.gz +0 -0
  46. package/dist/dashboard/assets/app-BLCvGdzb.css +2 -0
  47. package/dist/dashboard/assets/app-BLCvGdzb.css.gz +0 -0
  48. package/dist/dashboard/assets/{app-BDJWMThu.js → app-Cjq7nrwu.js} +3 -3
  49. package/dist/dashboard/assets/app-Cjq7nrwu.js.gz +0 -0
  50. package/dist/dashboard/assets/arrow-left-CpBxkoxI.js.gz +0 -0
  51. package/dist/dashboard/assets/arrow-right-Dl5yKnp8.js.gz +0 -0
  52. package/dist/dashboard/assets/{assert-Bwh6DJTK.js → assert-7J6_LVD3.js} +1 -1
  53. package/dist/dashboard/assets/assert-7J6_LVD3.js.gz +0 -0
  54. package/dist/dashboard/assets/backup-file-gdKIlg8U.js.gz +0 -0
  55. package/dist/dashboard/assets/{badge-BwmwEOgA.js → badge-BTyGk_DL.js} +1 -1
  56. package/dist/dashboard/assets/badge-BTyGk_DL.js.gz +0 -0
  57. package/dist/dashboard/assets/{banner-BKBfKTqn.js → banner-bujTWYM4.js} +1 -1
  58. package/dist/dashboard/assets/banner-bujTWYM4.js.gz +0 -0
  59. package/dist/dashboard/assets/brain-Cwed_72z.js.gz +0 -0
  60. package/dist/dashboard/assets/{card-BTdbRFFg.js → card-B0Bnx5CA.js} +1 -1
  61. package/dist/dashboard/assets/card-B0Bnx5CA.js.gz +0 -0
  62. package/dist/dashboard/assets/check-D69FzdvC.js.gz +0 -0
  63. package/dist/dashboard/assets/chevron-right-BXIy5l3h.js.gz +0 -0
  64. package/dist/dashboard/assets/circle-alert-CntYHV5v.js.gz +0 -0
  65. package/dist/dashboard/assets/circle-check-BU3v_mFW.js.gz +0 -0
  66. package/dist/dashboard/assets/cli-tools-DE2ug812.js +1 -0
  67. package/dist/dashboard/assets/cli-tools-DE2ug812.js.gz +0 -0
  68. package/dist/dashboard/assets/clipboard-button-R_rArH8S.js +1 -0
  69. package/dist/dashboard/assets/clipboard-button-R_rArH8S.js.gz +0 -0
  70. package/dist/dashboard/assets/cog-CdWhsajs.js.gz +0 -0
  71. package/dist/dashboard/assets/copy-ngmQ9zcZ.js.gz +0 -0
  72. package/dist/dashboard/assets/{dialog-iocKA3jr.js → dialog-BWIP_EvW.js} +1 -1
  73. package/dist/dashboard/assets/dialog-BWIP_EvW.js.gz +0 -0
  74. package/dist/dashboard/assets/dialog-actions-B1axpEg7.js.gz +0 -0
  75. package/dist/dashboard/assets/download-A0SW9OCW.js.gz +0 -0
  76. package/dist/dashboard/assets/download-dRFo5_Wu.js.gz +0 -0
  77. package/dist/dashboard/assets/{drawer-CDKOTZdY.js → drawer-BKcgVugF.js} +1 -1
  78. package/dist/dashboard/assets/drawer-BKcgVugF.js.gz +0 -0
  79. package/dist/dashboard/assets/entry-7dpgvpJ3.js +4 -0
  80. package/dist/dashboard/assets/entry-7dpgvpJ3.js.gz +0 -0
  81. package/dist/dashboard/assets/entry-CcWkGR4a.js +1 -0
  82. package/dist/dashboard/assets/entry-CcWkGR4a.js.gz +0 -0
  83. package/dist/dashboard/assets/entry-kTiTFrvh.js +1 -0
  84. package/dist/dashboard/assets/entry-kTiTFrvh.js.gz +0 -0
  85. package/dist/dashboard/assets/eye-C_hawfH4.js.gz +0 -0
  86. package/dist/dashboard/assets/eye-off-Bk5g2luF.js.gz +0 -0
  87. package/dist/dashboard/assets/fingerprint-pattern-BWuHtbW4.js.gz +0 -0
  88. package/dist/dashboard/assets/gauge-BbIMy7MB.js.gz +0 -0
  89. package/dist/dashboard/assets/github-badge-Booc5mNe.js +1 -0
  90. package/dist/dashboard/assets/github-badge-Booc5mNe.js.gz +0 -0
  91. package/dist/dashboard/assets/image-BPaouViG.js.gz +0 -0
  92. package/dist/dashboard/assets/{index-C4hXfAMs.js → index-D70pChfn.js} +2 -2
  93. package/dist/dashboard/assets/index-D70pChfn.js.gz +0 -0
  94. package/dist/dashboard/assets/{inline-DCejSLlA.js → inline-D1TCqM2D.js} +1 -1
  95. package/dist/dashboard/assets/inline-D1TCqM2D.js.gz +0 -0
  96. package/dist/dashboard/assets/{input-Bn4_kNav.js → input-B9oyU93y.js} +1 -1
  97. package/dist/dashboard/assets/input-B9oyU93y.js.gz +0 -0
  98. package/dist/dashboard/assets/jsx-runtime-CXUMngI_.js.gz +0 -0
  99. package/dist/dashboard/assets/key-round-UkavsGxp.js.gz +0 -0
  100. package/dist/dashboard/assets/layers-2-glBbjl.js.gz +0 -0
  101. package/dist/dashboard/assets/{layout-Bv-NxqZ5.js → layout-BArzXirQ.js} +1 -1
  102. package/dist/dashboard/assets/layout-BArzXirQ.js.gz +0 -0
  103. package/dist/dashboard/assets/{list-row-BLA0sldD.js → list-row-BVZzaoHF.js} +1 -1
  104. package/dist/dashboard/assets/list-row-BVZzaoHF.js.gz +0 -0
  105. package/dist/dashboard/assets/{live-YlifPYox.js → live-EmuIayqp.js} +1 -1
  106. package/dist/dashboard/assets/live-EmuIayqp.js.gz +0 -0
  107. package/dist/dashboard/assets/log-in-BmRjy60c.js.gz +0 -0
  108. package/dist/dashboard/assets/message-circle-CCxGwRvv.js.gz +0 -0
  109. package/dist/dashboard/assets/{model-bans-CVvHZ-qz.js → model-bans-CSPQ9xB0.js} +1 -1
  110. package/dist/dashboard/assets/model-bans-CSPQ9xB0.js.gz +0 -0
  111. package/dist/dashboard/assets/mutation-BkoLM5Ba.js +1 -0
  112. package/dist/dashboard/assets/mutation-BkoLM5Ba.js.gz +0 -0
  113. package/dist/dashboard/assets/numbers-CFL4_Dqc.js.gz +0 -0
  114. package/dist/dashboard/assets/pencil-768ysRAr.js.gz +0 -0
  115. package/dist/dashboard/assets/plus-DIdX_g-x.js.gz +0 -0
  116. package/dist/dashboard/assets/power-off-Yjw9GMJh.js +1 -0
  117. package/dist/dashboard/assets/power-off-Yjw9GMJh.js.gz +0 -0
  118. package/dist/dashboard/assets/privacy-mode-GM8bej85.js +1 -0
  119. package/dist/dashboard/assets/privacy-mode-GM8bej85.js.gz +0 -0
  120. package/dist/dashboard/assets/providers/agentrouter.svg.gz +0 -0
  121. package/dist/dashboard/assets/providers/aihubmix.svg.gz +0 -0
  122. package/dist/dashboard/assets/providers/alibaba-coding-plan.svg.gz +0 -0
  123. package/dist/dashboard/assets/providers/alibaba.svg.gz +0 -0
  124. package/dist/dashboard/assets/providers/antigravity.svg.gz +0 -0
  125. package/dist/dashboard/assets/providers/bai.svg.gz +0 -0
  126. package/dist/dashboard/assets/providers/blackbox.svg.gz +0 -0
  127. package/dist/dashboard/assets/providers/claude-code.svg.gz +0 -0
  128. package/dist/dashboard/assets/providers/exa.svg.gz +0 -0
  129. package/dist/dashboard/assets/providers/gmi-cloud.svg.gz +0 -0
  130. package/dist/dashboard/assets/providers/inferhub.svg.gz +0 -0
  131. package/dist/dashboard/assets/providers/muse.svg.gz +0 -0
  132. package/dist/dashboard/assets/providers/nous-research.svg.gz +0 -0
  133. package/dist/dashboard/assets/providers/openai-light.svg.gz +0 -0
  134. package/dist/dashboard/assets/providers/parallel.svg.gz +0 -0
  135. package/dist/dashboard/assets/providers/tokenharbor.svg.gz +0 -0
  136. package/dist/dashboard/assets/providers/zai-coding-plan.svg.gz +0 -0
  137. package/dist/dashboard/assets/{query-keys-ROf-g1Wi.js → query-keys-D7wX2vM5.js} +1 -1
  138. package/dist/dashboard/assets/query-keys-D7wX2vM5.js.gz +0 -0
  139. package/dist/dashboard/assets/quota-DZGyp0N5.js.gz +0 -0
  140. package/dist/dashboard/assets/refresh-cw-BqJFk4sU.js.gz +0 -0
  141. package/dist/dashboard/assets/rotate-ccw-CufcqITi.js.gz +0 -0
  142. package/dist/dashboard/assets/route-CNSNj9Zm.js.gz +0 -0
  143. package/dist/dashboard/assets/{routing-jntw9-Ui.js → routing-BExgxxBU.js} +1 -1
  144. package/dist/dashboard/assets/routing-BExgxxBU.js.gz +0 -0
  145. package/dist/dashboard/assets/scaling-nWE4Cx8f.js.gz +0 -0
  146. package/dist/dashboard/assets/search-JOKus9rb.js.gz +0 -0
  147. package/dist/dashboard/assets/{select-CGUuTQmj.js → select-C9mMoEpJ.js} +1 -1
  148. package/dist/dashboard/assets/select-C9mMoEpJ.js.gz +0 -0
  149. package/dist/dashboard/assets/settings-C4_Gn_wq.js +1 -0
  150. package/dist/dashboard/assets/settings-C4_Gn_wq.js.gz +0 -0
  151. package/dist/dashboard/assets/shield-check-DVS0Foqh.js.gz +0 -0
  152. package/dist/dashboard/assets/sliders-horizontal-ClG7dBeJ.js.gz +0 -0
  153. package/dist/dashboard/assets/sparkles-BRaRUxAU.js.gz +0 -0
  154. package/dist/dashboard/assets/{stack-C1kTcOmP.js → stack-Ca5HxI5i.js} +1 -1
  155. package/dist/dashboard/assets/stack-Ca5HxI5i.js.gz +0 -0
  156. package/dist/dashboard/assets/{state-DHKdg-pm.js → state-CzUPfLXo.js} +1 -1
  157. package/dist/dashboard/assets/state-CzUPfLXo.js.gz +0 -0
  158. package/dist/dashboard/assets/stream-retry-5QnVuSSo.js.gz +0 -0
  159. package/dist/dashboard/assets/{switch-DIDeAiz9.js → switch-DOUIky_i.js} +1 -1
  160. package/dist/dashboard/assets/switch-DOUIky_i.js.gz +0 -0
  161. package/dist/dashboard/assets/terminal-Bd4ee8TA.js +1 -0
  162. package/dist/dashboard/assets/terminal-Bd4ee8TA.js.gz +0 -0
  163. package/dist/dashboard/assets/toast-C76WrMhc.js +2 -0
  164. package/dist/dashboard/assets/toast-C76WrMhc.js.gz +0 -0
  165. package/dist/dashboard/assets/tokens-DDxMbSRL.js.gz +0 -0
  166. package/dist/dashboard/assets/trash-Cppn5c3R.js.gz +0 -0
  167. package/dist/dashboard/assets/use-clipboard-B0Sy03fE.js.gz +0 -0
  168. package/dist/dashboard/assets/use-presence-BSZEBx7U.js.gz +0 -0
  169. package/dist/dashboard/assets/use-reduced-motion-C4B0R6Sz.js.gz +0 -0
  170. package/dist/dashboard/assets/use-timeout-BwcBBRrT.js.gz +0 -0
  171. package/dist/dashboard/assets/{useMutation-DVmwOKU-.js → useMutation-D87FZwH0.js} +1 -1
  172. package/dist/dashboard/assets/useMutation-D87FZwH0.js.gz +0 -0
  173. package/dist/dashboard/assets/wrench-B6E1oEuY.js.gz +0 -0
  174. package/dist/dashboard/index.html +1 -1
  175. package/dist/dashboard/index.html.gz +0 -0
  176. package/dist/dashboard/precompressed-assets.json +123 -0
  177. package/migrations/full-postgres/0013_add_providers_tenant_id_index.sql +22 -0
  178. package/migrations/full-postgres/0014_add_provider_accounts_tenant_id_index.sql +21 -0
  179. package/migrations/lite-sqlite3/0000_baseline.sql +4 -2
  180. package/migrations/lite-sqlite3/0013_add_providers_tenant_id_index.sql +4 -0
  181. package/migrations/lite-sqlite3/0014_add_provider_accounts_tenant_id_index.sql +4 -0
  182. package/package.json +25 -30
  183. package/scripts/cli/{carte-launcher.cjs → bin/carte.cjs} +8 -8
  184. package/scripts/cli/{cli-launcher.cjs → bin/cartethyia.cjs} +167 -134
  185. package/scripts/cli/command/admin.ts +65 -0
  186. package/scripts/cli/command/console-menu.ts +227 -0
  187. package/scripts/cli/{doctor.ts → command/doctor.ts} +257 -258
  188. package/scripts/cli/{setup.ts → command/setup.ts} +8 -12
  189. package/scripts/cli/command/start.ts +13 -0
  190. package/scripts/cli/command/tray.ts +165 -0
  191. package/scripts/cli/command/update.ts +23 -0
  192. package/scripts/cli/{runtime-state.ts → gateway/drain-token.ts} +78 -78
  193. package/scripts/cli/gateway/spawn.ts +101 -0
  194. package/scripts/cli/gateway/stop.ts +51 -0
  195. package/scripts/cli/main.ts +94 -0
  196. package/scripts/cli/support/bun.ts +27 -0
  197. package/scripts/cli/support/env.ts +99 -0
  198. package/scripts/cli/support/platform.ts +64 -0
  199. package/scripts/cli/support/services.ts +88 -0
  200. package/scripts/cli/support/startup-signal.ts +23 -0
  201. package/scripts/cli/{version.ts → support/version.ts} +1 -1
  202. package/scripts/cli/tray/hidden-window.vbs +28 -0
  203. package/scripts/cli/{tray.ts → tray/index.ts} +3 -3
  204. package/scripts/cli/{tray.ps1 → tray/windows.ps1} +107 -98
  205. package/scripts/cli/ui/background.ts +49 -0
  206. package/src/boot/app.ts +3 -1
  207. package/src/boot/dependencies.ts +36 -13
  208. package/src/config/providers.ts +27 -1
  209. package/src/config/spec.ts +11 -0
  210. package/src/console/backup/routes.ts +8 -0
  211. package/src/console/cli-tools/contracts.ts +6 -6
  212. package/src/console/console-router.ts +5 -3
  213. package/src/console/dashboard-assets.ts +81 -11
  214. package/src/console/observability/contracts.ts +54 -22
  215. package/src/console/observability/routes.ts +31 -6
  216. package/src/console/observability/store.ts +68 -28
  217. package/src/console/providers/catalog/public-model-store.ts +91 -60
  218. package/src/console/providers/catalog/store.ts +5 -1
  219. package/src/console/quota/account-quota-tenant.ts +9 -6
  220. package/src/console/response-compression.ts +69 -2
  221. package/src/console/routing/pools/probe-verdict.ts +72 -0
  222. package/src/console/share/share-router.ts +7 -4
  223. package/src/console/share/share-stats.ts +12 -5
  224. package/src/console/shared/read-through-cache.ts +133 -7
  225. package/src/console/updates/repository-updates.ts +39 -34
  226. package/src/network/outbound-fetch.ts +113 -25
  227. package/src/network/tls/bun-client-hello.ts +112 -0
  228. package/src/observability/event-log.ts +29 -8
  229. package/src/observability/metrics.ts +40 -13
  230. package/src/observability/runtime-metrics.ts +7 -0
  231. package/src/persistence/schema.ts +40 -2
  232. package/src/protocol/response/codex.ts +9 -75
  233. package/src/protocol/tool-identity.ts +43 -9
  234. package/src/providers/authentication/jwt-validator.ts +130 -187
  235. package/src/providers/authentication/oauth-flow-store.ts +16 -9
  236. package/src/providers/default-registry.ts +4 -0
  237. package/src/providers/discovery/catalog/catalog-format.ts +20 -0
  238. package/src/providers/discovery/models-dev-catalog.ts +39 -22
  239. package/src/providers/discovery/probe-wire.ts +29 -5
  240. package/src/providers/integrations/buddy/buddy-catalog-shared.ts +3 -2
  241. package/src/providers/integrations/buddy/buddy-cli-headers.ts +88 -0
  242. package/src/providers/integrations/buddy/buddy-conversation-headers.ts +4 -0
  243. package/src/providers/integrations/buddy/buddy-discovery-shared.ts +33 -1
  244. package/src/providers/integrations/buddy/buddy-identity.ts +46 -0
  245. package/src/providers/integrations/buddy/buddy-oauth-shared.ts +37 -1
  246. package/src/providers/integrations/buddy/buddy-usage-store.ts +40 -5
  247. package/src/providers/integrations/buddy/codebuddy/provider.ts +2 -2
  248. package/src/providers/integrations/buddy/codebuddy/shared.ts +106 -73
  249. package/src/providers/integrations/buddy/workbuddy/cn-provider.ts +5 -2
  250. package/src/providers/integrations/buddy/workbuddy/quota.ts +172 -159
  251. package/src/providers/integrations/buddy/workbuddy/shared.ts +200 -171
  252. package/src/providers/integrations/codex/codex.ts +5 -8
  253. package/src/providers/integrations/factory/factory-oauth.ts +7 -11
  254. package/src/providers/integrations/opencode/opencode-go-quota.ts +130 -0
  255. package/src/providers/integrations/opencode/provider.ts +42 -3
  256. package/src/providers/integrations/qoder/qoder-oauth.ts +3 -9
  257. package/src/providers/integrations/shared/install-id.ts +29 -2
  258. package/src/providers/operations/client-versions.ts +11 -1
  259. package/src/providers/operations/model-catalog-cache.ts +18 -3
  260. package/src/providers/operations/provider-catalog-service.ts +76 -0
  261. package/src/transport/dispatch/attempt-finalize.ts +7 -1
  262. package/src/transport/dispatch/attempt-loop.ts +9 -7
  263. package/src/transport/dispatch/empty-stream.ts +17 -26
  264. package/src/transport/failure-policy.ts +20 -0
  265. package/src/transport/routing/route-catalog.ts +42 -3
  266. package/src/transport/surface/chat/encode.ts +18 -31
  267. package/src/transport/surface/messages/stream.ts +3 -2
  268. package/src/transport/translation/tool-repair.ts +37 -16
  269. package/src/workers/account-identity-sweep.ts +14 -12
  270. package/src/workers/daily-checkin.ts +62 -0
  271. package/src/workers/quota-refresh-sweep.ts +27 -2
  272. package/dist/dashboard/assets/CombosPage-B7ETkfVH.js +0 -1
  273. package/dist/dashboard/assets/ConsoleLogPage-AisQzCI1.js +0 -1
  274. package/dist/dashboard/assets/HealthEventsModal-BNflDm_f.js +0 -1
  275. package/dist/dashboard/assets/ModelPicker-CAiPR5Vd.js +0 -1
  276. package/dist/dashboard/assets/ProviderDetailPage-BK8i5B5X.js +0 -3
  277. package/dist/dashboard/assets/ProvidersPage-CvCVgm1e.js +0 -1
  278. package/dist/dashboard/assets/ProxyPage-DjabkuzP.js +0 -7
  279. package/dist/dashboard/assets/QuotaPage-Dxe0B0iu.js +0 -1
  280. package/dist/dashboard/assets/SetupPage-BaD4P_jW.js +0 -1
  281. package/dist/dashboard/assets/SortableList-Bol1ASmI.js +0 -1
  282. package/dist/dashboard/assets/StudioPage-CLP4le3U.js +0 -31
  283. package/dist/dashboard/assets/api-keys-CjIGQhe7.js +0 -1
  284. package/dist/dashboard/assets/app-Cjgo4-Lf.css +0 -2
  285. package/dist/dashboard/assets/cli-tools-DccaOfhX.js +0 -1
  286. package/dist/dashboard/assets/clipboard-button-DQmMikNQ.js +0 -1
  287. package/dist/dashboard/assets/entry-Cpi0rph1.js +0 -4
  288. package/dist/dashboard/assets/entry-Dm3PpDCO.js +0 -1
  289. package/dist/dashboard/assets/entry-keNDZ_Wz.js +0 -1
  290. package/dist/dashboard/assets/github-badge-BuAJr8oU.js +0 -1
  291. package/dist/dashboard/assets/mutation-BIizFZav.js +0 -1
  292. package/dist/dashboard/assets/privacy-mode-CQjbZ3xk.js +0 -1
  293. package/dist/dashboard/assets/settings-BAS6QbmJ.js +0 -1
  294. package/dist/dashboard/assets/terminal-C9mZ4Ugm.js +0 -1
  295. package/dist/dashboard/assets/toast-DKAdP2mo.js +0 -2
  296. package/scripts/cli/cli.ts +0 -771
  297. package/scripts/operations/probe-egress.ts +0 -335
  298. package/scripts/operations/restart.ts +0 -120
  299. package/scripts/shared/env.ts +0 -269
  300. /package/{tray-assets → scripts/cli/tray/assets}/cartethyia.ico +0 -0
  301. /package/{tray-assets → scripts/cli/tray/assets}/cartethyia.png +0 -0
  302. /package/scripts/cli/{menu.ts → ui/prompt.ts} +0 -0
  303. /package/scripts/cli/{wordmark.ts → ui/wordmark.ts} +0 -0
@@ -1,159 +1,172 @@
1
- import type { FetchLike, ProviderQuotaResult } from "../../../quota/quota-contracts";
2
- import type { QuotaCollectionContext } from "../../../quota/quota-support";
3
- import { providerBaseUrl } from "../../../provider-metadata";
4
- import {
5
- buildWorkBuddyUserAgent,
6
- getWorkBuddyClientVersion,
7
- getWorkBuddyCnClientVersion,
8
- getWorkBuddyCliVersion,
9
- } from "../../../operations/client-versions";
10
- import { WORKBUDDY_DOMAIN } from "./shared";
11
- import { fetchTencentBillingQuota } from "../buddy-quota-shared";
12
- import { fetchBuddyRequestUsage, type BuddyUsageResult } from "../buddy-usage-shared";
13
- import { buddyAccountUid } from "../buddy-oauth-shared";
14
-
15
- /**
16
- * WorkBuddy international billing quota.
17
- *
18
- * Endpoint: POST https://www.workbuddy.ai/v2/billing/meter/get-user-resource
19
- * Request: Authorization: Bearer <accessToken||apiKey>, desktop-client headers,
20
- * X-User-Id for the account UID, and the reference filter envelope
21
- * (ProductCode p_tcaca, statuses [0, 3], 101-year package window).
22
- * Response: { code: 0, data: { Response: { Data: { Accounts: [...] } } } }
23
- *
24
- * Same Tencent billing envelope as CodeBuddy CN, so the parsing is the shared
25
- * one in `buddy-quota-shared.ts`; only the endpoint and identity headers are
26
- * WorkBuddy-specific.
27
- */
28
-
29
- export const WORKBUDDY_USAGE_URL =
30
- `${providerBaseUrl("workbuddy")}/v2/billing/meter/get-user-resource`;
31
-
32
- export const WORKBUDDY_REQUEST_USAGE_URL =
33
- `${providerBaseUrl("workbuddy")}/billing/meter/get-user-request-usage`;
34
- export const WORKBUDDY_CN_REQUEST_USAGE_URL =
35
- `${providerBaseUrl("workbuddycn")}/billing/meter/get-user-request-usage`;
36
-
37
- async function billingHeaders(
38
- domain: string,
39
- clientVersion: string,
40
- enterpriseId?: string,
41
- ): Promise<Record<string, string>> {
42
- return {
43
- "User-Agent": buildWorkBuddyUserAgent(clientVersion, getWorkBuddyCliVersion()),
44
- "X-Product": "SaaS",
45
- "X-Domain": domain,
46
- "X-Requested-With": "XMLHttpRequest",
47
- "X-CodeBuddy-Request": "1",
48
- "Accept-Language": "en-US",
49
- ...(enterpriseId === undefined || enterpriseId.length === 0
50
- ? {}
51
- : { "X-Tenant-Id": enterpriseId, "X-Enterprise-Id": enterpriseId }),
52
- };
53
- }
54
-
55
- /**
56
- * Fetches WorkBuddy quota via the Tencent billing endpoint.
57
- *
58
- * Auth: `Authorization: Bearer <credential>` (api_key and oauth both use
59
- * Bearer; the caller passes the resolved secret).
60
- */
61
- export async function fetchWorkBuddyQuota(
62
- credential: string,
63
- fetcher: FetchLike,
64
- context?: QuotaCollectionContext,
65
- ): Promise<ProviderQuotaResult> {
66
- return fetchWorkBuddyQuotaFor({
67
- providerId: "workbuddy",
68
- display: "WorkBuddy",
69
- domain: WORKBUDDY_DOMAIN,
70
- credential,
71
- fetcher,
72
- ...(context === undefined ? {} : { context }),
73
- });
74
- }
75
-
76
- export async function fetchWorkBuddyCnQuota(
77
- credential: string,
78
- fetcher: FetchLike,
79
- context?: QuotaCollectionContext,
80
- ): Promise<ProviderQuotaResult> {
81
- return fetchWorkBuddyQuotaFor({
82
- providerId: "workbuddycn",
83
- display: "WorkBuddy CN",
84
- domain: "www.workbuddy.cn",
85
- credential,
86
- fetcher,
87
- ...(context === undefined ? {} : { context }),
88
- });
89
- }
90
-
91
- async function fetchWorkBuddyQuotaFor(args: {
92
- readonly providerId: "workbuddy" | "workbuddycn";
93
- readonly display: string;
94
- readonly domain: string;
95
- readonly credential: string;
96
- readonly fetcher: FetchLike;
97
- readonly context?: QuotaCollectionContext;
98
- }): Promise<ProviderQuotaResult> {
99
- const { providerId, display, domain, credential, fetcher, context } = args;
100
- const authState = typeof context?.auth_state === "object" && context?.auth_state !== null
101
- ? (context.auth_state as Record<string, unknown>)
102
- : undefined;
103
- const enterpriseId = typeof authState?.enterpriseId === "string" ? authState.enterpriseId : undefined;
104
- const clientVersion = providerId === "workbuddycn"
105
- ? getWorkBuddyCnClientVersion()
106
- : getWorkBuddyClientVersion();
107
- return fetchTencentBillingQuota({
108
- source: providerId,
109
- display,
110
- url: `${providerBaseUrl(providerId)}/v2/billing/meter/get-user-resource`,
111
- headers: await billingHeaders(domain, clientVersion, enterpriseId),
112
- credential,
113
- fetcher,
114
- defaultPlan: display,
115
- uid: buddyAccountUid(credential),
116
- });
117
- }
118
-
119
- /**
120
- * Real credit deductions for one WorkBuddy account.
121
- *
122
- * Mirrors {@link fetchWorkBuddyQuotaFor} in every respect but the endpoint —
123
- * same billing host, same client-version identity headers, same account UID —
124
- * because the usage-detail surface is the billing meter's other read.
125
- */
126
- export async function fetchWorkBuddyRequestUsage(
127
- credential: string,
128
- fetcher: FetchLike,
129
- args: {
130
- readonly providerId?: "workbuddy" | "workbuddycn";
131
- readonly days?: number;
132
- readonly context?: QuotaCollectionContext;
133
- } = {},
134
- ): Promise<BuddyUsageResult> {
135
- const providerId = args.providerId ?? "workbuddy";
136
- const domain = providerId === "workbuddycn" ? "www.workbuddy.cn" : WORKBUDDY_DOMAIN;
137
- const authState = typeof args.context?.auth_state === "object" && args.context?.auth_state !== null
138
- ? (args.context.auth_state as Record<string, unknown>)
139
- : undefined;
140
- const enterpriseId = typeof authState?.enterpriseId === "string" ? authState.enterpriseId : undefined;
141
- const clientVersion = providerId === "workbuddycn"
142
- ? getWorkBuddyCnClientVersion()
143
- : getWorkBuddyClientVersion();
144
- return fetchBuddyRequestUsage({
145
- url: `${providerBaseUrl(providerId)}/billing/meter/get-user-request-usage`,
146
- headers: await billingHeaders(domain, clientVersion, enterpriseId),
147
- credential,
148
- fetcher,
149
- days: args.days ?? 30,
150
- uid: buddyAccountUid(credential),
151
- });
152
- }
153
-
154
- export const fetchWorkBuddyCnRequestUsage = (
155
- credential: string,
156
- fetcher: FetchLike,
157
- days: number = 30,
158
- ): Promise<BuddyUsageResult> =>
159
- fetchWorkBuddyRequestUsage(credential, fetcher, { providerId: "workbuddycn", days });
1
+ import type { FetchLike, ProviderQuotaResult } from "../../../quota/quota-contracts";
2
+ import type { QuotaCollectionContext } from "../../../quota/quota-support";
3
+ import { providerBaseUrl } from "../../../provider-metadata";
4
+ import {
5
+ buildWorkBuddyUserAgent,
6
+ getWorkBuddyClientVersion,
7
+ getWorkBuddyCnClientVersion,
8
+ getWorkBuddyCliVersion,
9
+ } from "../../../operations/client-versions";
10
+ import { WORKBUDDY_DOMAIN } from "./shared";
11
+ import { fetchTencentBillingQuota } from "../buddy-quota-shared";
12
+ import { fetchBuddyRequestUsage, type BuddyUsageResult } from "../buddy-usage-shared";
13
+ import { buddyAccountUid } from "../buddy-oauth-shared";
14
+
15
+ /**
16
+ * WorkBuddy international billing quota.
17
+ *
18
+ * Endpoint: POST https://www.workbuddy.ai/v2/billing/meter/get-user-resource
19
+ * Request: Authorization: Bearer <accessToken||apiKey>, desktop-client headers,
20
+ * X-User-Id for the account UID, and the reference filter envelope
21
+ * (ProductCode p_tcaca, statuses [0, 3], 101-year package window).
22
+ * Response: { code: 0, data: { Response: { Data: { Accounts: [...] } } } }
23
+ *
24
+ * Same Tencent billing envelope as CodeBuddy CN, so the parsing is the shared
25
+ * one in `buddy-quota-shared.ts`; only the endpoint and identity headers are
26
+ * WorkBuddy-specific.
27
+ */
28
+
29
+ /**
30
+ * The CN billing realm's host.
31
+ *
32
+ * The reference bills the CN realm here rather than on the CN chat host
33
+ * (`www.workbuddy.cn`): billing is a separate service, and the chat host does
34
+ * not serve the meter path.
35
+ */
36
+ const WORKBUDDY_CN_BILLING_BASE_URL = "https://www.codebuddy.cn";
37
+
38
+ export const WORKBUDDY_USAGE_URL =
39
+ `${providerBaseUrl("workbuddy")}/v2/billing/meter/get-user-resource`;
40
+
41
+ export const WORKBUDDY_REQUEST_USAGE_URL =
42
+ `${providerBaseUrl("workbuddy")}/billing/meter/get-user-request-usage`;
43
+ export const WORKBUDDY_CN_REQUEST_USAGE_URL =
44
+ `${providerBaseUrl("workbuddycn")}/billing/meter/get-user-request-usage`;
45
+
46
+ async function billingHeaders(
47
+ domain: string,
48
+ clientVersion: string,
49
+ enterpriseId?: string,
50
+ ): Promise<Record<string, string>> {
51
+ return {
52
+ "User-Agent": buildWorkBuddyUserAgent(clientVersion, getWorkBuddyCliVersion()),
53
+ "X-Product": "SaaS",
54
+ "X-Domain": domain,
55
+ "X-Requested-With": "XMLHttpRequest",
56
+ "X-CodeBuddy-Request": "1",
57
+ "Accept-Language": "en-US",
58
+ ...(enterpriseId === undefined || enterpriseId.length === 0
59
+ ? {}
60
+ : { "X-Tenant-Id": enterpriseId, "X-Enterprise-Id": enterpriseId }),
61
+ };
62
+ }
63
+
64
+ /**
65
+ * Fetches WorkBuddy quota via the Tencent billing endpoint.
66
+ *
67
+ * Auth: `Authorization: Bearer <credential>` (api_key and oauth both use
68
+ * Bearer; the caller passes the resolved secret).
69
+ */
70
+ export async function fetchWorkBuddyQuota(
71
+ credential: string,
72
+ fetcher: FetchLike,
73
+ context?: QuotaCollectionContext,
74
+ ): Promise<ProviderQuotaResult> {
75
+ return fetchWorkBuddyQuotaFor({
76
+ providerId: "workbuddy",
77
+ display: "WorkBuddy",
78
+ domain: WORKBUDDY_DOMAIN,
79
+ credential,
80
+ fetcher,
81
+ ...(context === undefined ? {} : { context }),
82
+ });
83
+ }
84
+
85
+ export async function fetchWorkBuddyCnQuota(
86
+ credential: string,
87
+ fetcher: FetchLike,
88
+ context?: QuotaCollectionContext,
89
+ ): Promise<ProviderQuotaResult> {
90
+ return fetchWorkBuddyQuotaFor({
91
+ providerId: "workbuddycn",
92
+ display: "WorkBuddy CN",
93
+ domain: "www.workbuddy.cn",
94
+ credential,
95
+ fetcher,
96
+ ...(context === undefined ? {} : { context }),
97
+ });
98
+ }
99
+
100
+ async function fetchWorkBuddyQuotaFor(args: {
101
+ readonly providerId: "workbuddy" | "workbuddycn";
102
+ readonly display: string;
103
+ readonly domain: string;
104
+ readonly credential: string;
105
+ readonly fetcher: FetchLike;
106
+ readonly context?: QuotaCollectionContext;
107
+ }): Promise<ProviderQuotaResult> {
108
+ const { providerId, display, domain, credential, fetcher, context } = args;
109
+ const authState = typeof context?.auth_state === "object" && context?.auth_state !== null
110
+ ? (context.auth_state as Record<string, unknown>)
111
+ : undefined;
112
+ const enterpriseId = typeof authState?.enterpriseId === "string" ? authState.enterpriseId : undefined;
113
+ const clientVersion = providerId === "workbuddycn"
114
+ ? getWorkBuddyCnClientVersion()
115
+ : getWorkBuddyClientVersion();
116
+ // The reference bills the CN realm on `www.codebuddy.cn`, not the chat host:
117
+ // the billing realm is a different service from the one that serves chat,
118
+ // and the CN chat host answers the meter path with an HTML error page.
119
+ const billingBase = providerId === "workbuddycn" ? WORKBUDDY_CN_BILLING_BASE_URL : providerBaseUrl(providerId);
120
+ return fetchTencentBillingQuota({
121
+ source: providerId,
122
+ display,
123
+ url: `${billingBase}/v2/billing/meter/get-user-resource`,
124
+ headers: await billingHeaders(domain, clientVersion, enterpriseId),
125
+ credential,
126
+ fetcher,
127
+ defaultPlan: display,
128
+ uid: buddyAccountUid(credential),
129
+ });
130
+ }
131
+
132
+ /**
133
+ * Real credit deductions for one WorkBuddy account.
134
+ *
135
+ * Mirrors {@link fetchWorkBuddyQuotaFor} in every respect but the endpoint —
136
+ * same billing host, same client-version identity headers, same account UID —
137
+ * because the usage-detail surface is the billing meter's other read.
138
+ */
139
+ export async function fetchWorkBuddyRequestUsage(
140
+ credential: string,
141
+ fetcher: FetchLike,
142
+ args: {
143
+ readonly providerId?: "workbuddy" | "workbuddycn";
144
+ readonly days?: number;
145
+ readonly context?: QuotaCollectionContext;
146
+ } = {},
147
+ ): Promise<BuddyUsageResult> {
148
+ const providerId = args.providerId ?? "workbuddy";
149
+ const domain = providerId === "workbuddycn" ? "www.workbuddy.cn" : WORKBUDDY_DOMAIN;
150
+ const authState = typeof args.context?.auth_state === "object" && args.context?.auth_state !== null
151
+ ? (args.context.auth_state as Record<string, unknown>)
152
+ : undefined;
153
+ const enterpriseId = typeof authState?.enterpriseId === "string" ? authState.enterpriseId : undefined;
154
+ const clientVersion = providerId === "workbuddycn"
155
+ ? getWorkBuddyCnClientVersion()
156
+ : getWorkBuddyClientVersion();
157
+ return fetchBuddyRequestUsage({
158
+ url: `${providerBaseUrl(providerId)}/billing/meter/get-user-request-usage`,
159
+ headers: await billingHeaders(domain, clientVersion, enterpriseId),
160
+ credential,
161
+ fetcher,
162
+ days: args.days ?? 30,
163
+ uid: buddyAccountUid(credential),
164
+ });
165
+ }
166
+
167
+ export const fetchWorkBuddyCnRequestUsage = (
168
+ credential: string,
169
+ fetcher: FetchLike,
170
+ days: number = 30,
171
+ ): Promise<BuddyUsageResult> =>
172
+ fetchWorkBuddyRequestUsage(credential, fetcher, { providerId: "workbuddycn", days });