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.
- package/.env.example +4 -1
- package/README.md +18 -0
- package/dist/dashboard/assets/AccountCooldown-ChpdzxRH.js.gz +0 -0
- package/dist/dashboard/assets/{BannedPage-DUrXpp-X.js → BannedPage-QhvbJB9o.js} +1 -1
- package/dist/dashboard/assets/BannedPage-QhvbJB9o.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolDetailPage-BzGevuql.js → CliToolDetailPage-Bcy150Jo.js} +1 -1
- package/dist/dashboard/assets/CliToolDetailPage-Bcy150Jo.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-BaRM_7We.js → CliToolsPage-DyNXefph.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-DyNXefph.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-Cak0ljnO.js +1 -0
- package/dist/dashboard/assets/CombosPage-Cak0ljnO.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-CATpAEOz.js +1 -0
- package/dist/dashboard/assets/ConsoleLogPage-CATpAEOz.js.gz +0 -0
- package/dist/dashboard/assets/{CustomizationPage-DqUGcoH0.js → CustomizationPage-D6jEU7nL.js} +1 -1
- package/dist/dashboard/assets/CustomizationPage-D6jEU7nL.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-CZkpn0a7.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-CZkpn0a7.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-DbhTGfhb.js → LoginPage-BJlMVN4U.js} +1 -1
- package/dist/dashboard/assets/LoginPage-BJlMVN4U.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-Br3CXEau.js +1 -0
- package/dist/dashboard/assets/ModelPicker-Br3CXEau.js.gz +0 -0
- package/dist/dashboard/assets/{OverviewPage-C3NIzsDx.js → OverviewPage-CQxXbo2g.js} +1 -1
- package/dist/dashboard/assets/OverviewPage-CQxXbo2g.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js +3 -0
- package/dist/dashboard/assets/ProviderDetailPage--0RBNh99.js.gz +0 -0
- package/dist/dashboard/assets/ProviderIcon-paOCq8I0.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-1M-C3mbu.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-CXiumA53.js +7 -0
- package/dist/dashboard/assets/ProxyPage-CXiumA53.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js +1 -0
- package/dist/dashboard/assets/QuotaPage-BGDIfIYP.js.gz +0 -0
- package/dist/dashboard/assets/{SettingsPage-YxRml8AT.js → SettingsPage-BHW4Zt06.js} +1 -1
- package/dist/dashboard/assets/SettingsPage-BHW4Zt06.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-VOYC_lIa.js +1 -0
- package/dist/dashboard/assets/SetupPage-VOYC_lIa.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-DpOTnGuH.js +1 -0
- package/dist/dashboard/assets/SortableList-DpOTnGuH.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-BNIDLiU6.js +31 -0
- package/dist/dashboard/assets/StudioPage-BNIDLiU6.js.gz +0 -0
- package/dist/dashboard/assets/ToolIcon-K1ckcDKg.js.gz +0 -0
- package/dist/dashboard/assets/{UsagePage-Djes-Epy.js → UsagePage-BAFaSDQV.js} +14 -14
- package/dist/dashboard/assets/UsagePage-BAFaSDQV.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-BETfaMYZ.js +1 -0
- package/dist/dashboard/assets/api-keys-BETfaMYZ.js.gz +0 -0
- package/dist/dashboard/assets/app-BLCvGdzb.css +2 -0
- package/dist/dashboard/assets/app-BLCvGdzb.css.gz +0 -0
- package/dist/dashboard/assets/{app-BDJWMThu.js → app-Cjq7nrwu.js} +3 -3
- package/dist/dashboard/assets/app-Cjq7nrwu.js.gz +0 -0
- package/dist/dashboard/assets/arrow-left-CpBxkoxI.js.gz +0 -0
- package/dist/dashboard/assets/arrow-right-Dl5yKnp8.js.gz +0 -0
- package/dist/dashboard/assets/{assert-Bwh6DJTK.js → assert-7J6_LVD3.js} +1 -1
- package/dist/dashboard/assets/assert-7J6_LVD3.js.gz +0 -0
- package/dist/dashboard/assets/backup-file-gdKIlg8U.js.gz +0 -0
- package/dist/dashboard/assets/{badge-BwmwEOgA.js → badge-BTyGk_DL.js} +1 -1
- package/dist/dashboard/assets/badge-BTyGk_DL.js.gz +0 -0
- package/dist/dashboard/assets/{banner-BKBfKTqn.js → banner-bujTWYM4.js} +1 -1
- package/dist/dashboard/assets/banner-bujTWYM4.js.gz +0 -0
- package/dist/dashboard/assets/brain-Cwed_72z.js.gz +0 -0
- package/dist/dashboard/assets/{card-BTdbRFFg.js → card-B0Bnx5CA.js} +1 -1
- package/dist/dashboard/assets/card-B0Bnx5CA.js.gz +0 -0
- package/dist/dashboard/assets/check-D69FzdvC.js.gz +0 -0
- package/dist/dashboard/assets/chevron-right-BXIy5l3h.js.gz +0 -0
- package/dist/dashboard/assets/circle-alert-CntYHV5v.js.gz +0 -0
- package/dist/dashboard/assets/circle-check-BU3v_mFW.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-DE2ug812.js +1 -0
- package/dist/dashboard/assets/cli-tools-DE2ug812.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-R_rArH8S.js +1 -0
- package/dist/dashboard/assets/clipboard-button-R_rArH8S.js.gz +0 -0
- package/dist/dashboard/assets/cog-CdWhsajs.js.gz +0 -0
- package/dist/dashboard/assets/copy-ngmQ9zcZ.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-iocKA3jr.js → dialog-BWIP_EvW.js} +1 -1
- package/dist/dashboard/assets/dialog-BWIP_EvW.js.gz +0 -0
- package/dist/dashboard/assets/dialog-actions-B1axpEg7.js.gz +0 -0
- package/dist/dashboard/assets/download-A0SW9OCW.js.gz +0 -0
- package/dist/dashboard/assets/download-dRFo5_Wu.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-CDKOTZdY.js → drawer-BKcgVugF.js} +1 -1
- package/dist/dashboard/assets/drawer-BKcgVugF.js.gz +0 -0
- package/dist/dashboard/assets/entry-7dpgvpJ3.js +4 -0
- package/dist/dashboard/assets/entry-7dpgvpJ3.js.gz +0 -0
- package/dist/dashboard/assets/entry-CcWkGR4a.js +1 -0
- package/dist/dashboard/assets/entry-CcWkGR4a.js.gz +0 -0
- package/dist/dashboard/assets/entry-kTiTFrvh.js +1 -0
- package/dist/dashboard/assets/entry-kTiTFrvh.js.gz +0 -0
- package/dist/dashboard/assets/eye-C_hawfH4.js.gz +0 -0
- package/dist/dashboard/assets/eye-off-Bk5g2luF.js.gz +0 -0
- package/dist/dashboard/assets/fingerprint-pattern-BWuHtbW4.js.gz +0 -0
- package/dist/dashboard/assets/gauge-BbIMy7MB.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-Booc5mNe.js +1 -0
- package/dist/dashboard/assets/github-badge-Booc5mNe.js.gz +0 -0
- package/dist/dashboard/assets/image-BPaouViG.js.gz +0 -0
- package/dist/dashboard/assets/{index-C4hXfAMs.js → index-D70pChfn.js} +2 -2
- package/dist/dashboard/assets/index-D70pChfn.js.gz +0 -0
- package/dist/dashboard/assets/{inline-DCejSLlA.js → inline-D1TCqM2D.js} +1 -1
- package/dist/dashboard/assets/inline-D1TCqM2D.js.gz +0 -0
- package/dist/dashboard/assets/{input-Bn4_kNav.js → input-B9oyU93y.js} +1 -1
- package/dist/dashboard/assets/input-B9oyU93y.js.gz +0 -0
- package/dist/dashboard/assets/jsx-runtime-CXUMngI_.js.gz +0 -0
- package/dist/dashboard/assets/key-round-UkavsGxp.js.gz +0 -0
- package/dist/dashboard/assets/layers-2-glBbjl.js.gz +0 -0
- package/dist/dashboard/assets/{layout-Bv-NxqZ5.js → layout-BArzXirQ.js} +1 -1
- package/dist/dashboard/assets/layout-BArzXirQ.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-BLA0sldD.js → list-row-BVZzaoHF.js} +1 -1
- package/dist/dashboard/assets/list-row-BVZzaoHF.js.gz +0 -0
- package/dist/dashboard/assets/{live-YlifPYox.js → live-EmuIayqp.js} +1 -1
- package/dist/dashboard/assets/live-EmuIayqp.js.gz +0 -0
- package/dist/dashboard/assets/log-in-BmRjy60c.js.gz +0 -0
- package/dist/dashboard/assets/message-circle-CCxGwRvv.js.gz +0 -0
- package/dist/dashboard/assets/{model-bans-CVvHZ-qz.js → model-bans-CSPQ9xB0.js} +1 -1
- package/dist/dashboard/assets/model-bans-CSPQ9xB0.js.gz +0 -0
- package/dist/dashboard/assets/mutation-BkoLM5Ba.js +1 -0
- package/dist/dashboard/assets/mutation-BkoLM5Ba.js.gz +0 -0
- package/dist/dashboard/assets/numbers-CFL4_Dqc.js.gz +0 -0
- package/dist/dashboard/assets/pencil-768ysRAr.js.gz +0 -0
- package/dist/dashboard/assets/plus-DIdX_g-x.js.gz +0 -0
- package/dist/dashboard/assets/power-off-Yjw9GMJh.js +1 -0
- package/dist/dashboard/assets/power-off-Yjw9GMJh.js.gz +0 -0
- package/dist/dashboard/assets/privacy-mode-GM8bej85.js +1 -0
- package/dist/dashboard/assets/privacy-mode-GM8bej85.js.gz +0 -0
- package/dist/dashboard/assets/providers/agentrouter.svg.gz +0 -0
- package/dist/dashboard/assets/providers/aihubmix.svg.gz +0 -0
- package/dist/dashboard/assets/providers/alibaba-coding-plan.svg.gz +0 -0
- package/dist/dashboard/assets/providers/alibaba.svg.gz +0 -0
- package/dist/dashboard/assets/providers/antigravity.svg.gz +0 -0
- package/dist/dashboard/assets/providers/bai.svg.gz +0 -0
- package/dist/dashboard/assets/providers/blackbox.svg.gz +0 -0
- package/dist/dashboard/assets/providers/claude-code.svg.gz +0 -0
- package/dist/dashboard/assets/providers/exa.svg.gz +0 -0
- package/dist/dashboard/assets/providers/gmi-cloud.svg.gz +0 -0
- package/dist/dashboard/assets/providers/inferhub.svg.gz +0 -0
- package/dist/dashboard/assets/providers/muse.svg.gz +0 -0
- package/dist/dashboard/assets/providers/nous-research.svg.gz +0 -0
- package/dist/dashboard/assets/providers/openai-light.svg.gz +0 -0
- package/dist/dashboard/assets/providers/parallel.svg.gz +0 -0
- package/dist/dashboard/assets/providers/tokenharbor.svg.gz +0 -0
- package/dist/dashboard/assets/providers/zai-coding-plan.svg.gz +0 -0
- package/dist/dashboard/assets/{query-keys-ROf-g1Wi.js → query-keys-D7wX2vM5.js} +1 -1
- package/dist/dashboard/assets/query-keys-D7wX2vM5.js.gz +0 -0
- package/dist/dashboard/assets/quota-DZGyp0N5.js.gz +0 -0
- package/dist/dashboard/assets/refresh-cw-BqJFk4sU.js.gz +0 -0
- package/dist/dashboard/assets/rotate-ccw-CufcqITi.js.gz +0 -0
- package/dist/dashboard/assets/route-CNSNj9Zm.js.gz +0 -0
- package/dist/dashboard/assets/{routing-jntw9-Ui.js → routing-BExgxxBU.js} +1 -1
- package/dist/dashboard/assets/routing-BExgxxBU.js.gz +0 -0
- package/dist/dashboard/assets/scaling-nWE4Cx8f.js.gz +0 -0
- package/dist/dashboard/assets/search-JOKus9rb.js.gz +0 -0
- package/dist/dashboard/assets/{select-CGUuTQmj.js → select-C9mMoEpJ.js} +1 -1
- package/dist/dashboard/assets/select-C9mMoEpJ.js.gz +0 -0
- package/dist/dashboard/assets/settings-C4_Gn_wq.js +1 -0
- package/dist/dashboard/assets/settings-C4_Gn_wq.js.gz +0 -0
- package/dist/dashboard/assets/shield-check-DVS0Foqh.js.gz +0 -0
- package/dist/dashboard/assets/sliders-horizontal-ClG7dBeJ.js.gz +0 -0
- package/dist/dashboard/assets/sparkles-BRaRUxAU.js.gz +0 -0
- package/dist/dashboard/assets/{stack-C1kTcOmP.js → stack-Ca5HxI5i.js} +1 -1
- package/dist/dashboard/assets/stack-Ca5HxI5i.js.gz +0 -0
- package/dist/dashboard/assets/{state-DHKdg-pm.js → state-CzUPfLXo.js} +1 -1
- package/dist/dashboard/assets/state-CzUPfLXo.js.gz +0 -0
- package/dist/dashboard/assets/stream-retry-5QnVuSSo.js.gz +0 -0
- package/dist/dashboard/assets/{switch-DIDeAiz9.js → switch-DOUIky_i.js} +1 -1
- package/dist/dashboard/assets/switch-DOUIky_i.js.gz +0 -0
- package/dist/dashboard/assets/terminal-Bd4ee8TA.js +1 -0
- package/dist/dashboard/assets/terminal-Bd4ee8TA.js.gz +0 -0
- package/dist/dashboard/assets/toast-C76WrMhc.js +2 -0
- package/dist/dashboard/assets/toast-C76WrMhc.js.gz +0 -0
- package/dist/dashboard/assets/tokens-DDxMbSRL.js.gz +0 -0
- package/dist/dashboard/assets/trash-Cppn5c3R.js.gz +0 -0
- package/dist/dashboard/assets/use-clipboard-B0Sy03fE.js.gz +0 -0
- package/dist/dashboard/assets/use-presence-BSZEBx7U.js.gz +0 -0
- package/dist/dashboard/assets/use-reduced-motion-C4B0R6Sz.js.gz +0 -0
- package/dist/dashboard/assets/use-timeout-BwcBBRrT.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-DVmwOKU-.js → useMutation-D87FZwH0.js} +1 -1
- package/dist/dashboard/assets/useMutation-D87FZwH0.js.gz +0 -0
- package/dist/dashboard/assets/wrench-B6E1oEuY.js.gz +0 -0
- package/dist/dashboard/index.html +1 -1
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +123 -0
- package/migrations/full-postgres/0013_add_providers_tenant_id_index.sql +22 -0
- package/migrations/full-postgres/0014_add_provider_accounts_tenant_id_index.sql +21 -0
- package/migrations/lite-sqlite3/0000_baseline.sql +4 -2
- package/migrations/lite-sqlite3/0013_add_providers_tenant_id_index.sql +4 -0
- package/migrations/lite-sqlite3/0014_add_provider_accounts_tenant_id_index.sql +4 -0
- package/package.json +25 -30
- package/scripts/cli/{carte-launcher.cjs → bin/carte.cjs} +8 -8
- package/scripts/cli/{cli-launcher.cjs → bin/cartethyia.cjs} +167 -134
- package/scripts/cli/command/admin.ts +65 -0
- package/scripts/cli/command/console-menu.ts +227 -0
- package/scripts/cli/{doctor.ts → command/doctor.ts} +257 -258
- package/scripts/cli/{setup.ts → command/setup.ts} +8 -12
- package/scripts/cli/command/start.ts +13 -0
- package/scripts/cli/command/tray.ts +165 -0
- package/scripts/cli/command/update.ts +23 -0
- package/scripts/cli/{runtime-state.ts → gateway/drain-token.ts} +78 -78
- package/scripts/cli/gateway/spawn.ts +101 -0
- package/scripts/cli/gateway/stop.ts +51 -0
- package/scripts/cli/main.ts +94 -0
- package/scripts/cli/support/bun.ts +27 -0
- package/scripts/cli/support/env.ts +99 -0
- package/scripts/cli/support/platform.ts +64 -0
- package/scripts/cli/support/services.ts +88 -0
- package/scripts/cli/support/startup-signal.ts +23 -0
- package/scripts/cli/{version.ts → support/version.ts} +1 -1
- package/scripts/cli/tray/hidden-window.vbs +28 -0
- package/scripts/cli/{tray.ts → tray/index.ts} +3 -3
- package/scripts/cli/{tray.ps1 → tray/windows.ps1} +107 -98
- package/scripts/cli/ui/background.ts +49 -0
- package/src/boot/app.ts +3 -1
- package/src/boot/dependencies.ts +36 -13
- package/src/config/providers.ts +27 -1
- package/src/config/spec.ts +11 -0
- package/src/console/backup/routes.ts +8 -0
- package/src/console/cli-tools/contracts.ts +6 -6
- package/src/console/console-router.ts +5 -3
- package/src/console/dashboard-assets.ts +81 -11
- package/src/console/observability/contracts.ts +54 -22
- package/src/console/observability/routes.ts +31 -6
- package/src/console/observability/store.ts +68 -28
- package/src/console/providers/catalog/public-model-store.ts +91 -60
- package/src/console/providers/catalog/store.ts +5 -1
- package/src/console/quota/account-quota-tenant.ts +9 -6
- package/src/console/response-compression.ts +69 -2
- package/src/console/routing/pools/probe-verdict.ts +72 -0
- package/src/console/share/share-router.ts +7 -4
- package/src/console/share/share-stats.ts +12 -5
- package/src/console/shared/read-through-cache.ts +133 -7
- package/src/console/updates/repository-updates.ts +39 -34
- package/src/network/outbound-fetch.ts +113 -25
- package/src/network/tls/bun-client-hello.ts +112 -0
- package/src/observability/event-log.ts +29 -8
- package/src/observability/metrics.ts +40 -13
- package/src/observability/runtime-metrics.ts +7 -0
- package/src/persistence/schema.ts +40 -2
- package/src/protocol/response/codex.ts +9 -75
- package/src/protocol/tool-identity.ts +43 -9
- package/src/providers/authentication/jwt-validator.ts +130 -187
- package/src/providers/authentication/oauth-flow-store.ts +16 -9
- package/src/providers/default-registry.ts +4 -0
- package/src/providers/discovery/catalog/catalog-format.ts +20 -0
- package/src/providers/discovery/models-dev-catalog.ts +39 -22
- package/src/providers/discovery/probe-wire.ts +29 -5
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +3 -2
- package/src/providers/integrations/buddy/buddy-cli-headers.ts +88 -0
- package/src/providers/integrations/buddy/buddy-conversation-headers.ts +4 -0
- package/src/providers/integrations/buddy/buddy-discovery-shared.ts +33 -1
- package/src/providers/integrations/buddy/buddy-identity.ts +46 -0
- package/src/providers/integrations/buddy/buddy-oauth-shared.ts +37 -1
- package/src/providers/integrations/buddy/buddy-usage-store.ts +40 -5
- package/src/providers/integrations/buddy/codebuddy/provider.ts +2 -2
- package/src/providers/integrations/buddy/codebuddy/shared.ts +106 -73
- package/src/providers/integrations/buddy/workbuddy/cn-provider.ts +5 -2
- package/src/providers/integrations/buddy/workbuddy/quota.ts +172 -159
- package/src/providers/integrations/buddy/workbuddy/shared.ts +200 -171
- package/src/providers/integrations/codex/codex.ts +5 -8
- package/src/providers/integrations/factory/factory-oauth.ts +7 -11
- package/src/providers/integrations/opencode/opencode-go-quota.ts +130 -0
- package/src/providers/integrations/opencode/provider.ts +42 -3
- package/src/providers/integrations/qoder/qoder-oauth.ts +3 -9
- package/src/providers/integrations/shared/install-id.ts +29 -2
- package/src/providers/operations/client-versions.ts +11 -1
- package/src/providers/operations/model-catalog-cache.ts +18 -3
- package/src/providers/operations/provider-catalog-service.ts +76 -0
- package/src/transport/dispatch/attempt-finalize.ts +7 -1
- package/src/transport/dispatch/attempt-loop.ts +9 -7
- package/src/transport/dispatch/empty-stream.ts +17 -26
- package/src/transport/failure-policy.ts +20 -0
- package/src/transport/routing/route-catalog.ts +42 -3
- package/src/transport/surface/chat/encode.ts +18 -31
- package/src/transport/surface/messages/stream.ts +3 -2
- package/src/transport/translation/tool-repair.ts +37 -16
- package/src/workers/account-identity-sweep.ts +14 -12
- package/src/workers/daily-checkin.ts +62 -0
- package/src/workers/quota-refresh-sweep.ts +27 -2
- package/dist/dashboard/assets/CombosPage-B7ETkfVH.js +0 -1
- package/dist/dashboard/assets/ConsoleLogPage-AisQzCI1.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-BNflDm_f.js +0 -1
- package/dist/dashboard/assets/ModelPicker-CAiPR5Vd.js +0 -1
- package/dist/dashboard/assets/ProviderDetailPage-BK8i5B5X.js +0 -3
- package/dist/dashboard/assets/ProvidersPage-CvCVgm1e.js +0 -1
- package/dist/dashboard/assets/ProxyPage-DjabkuzP.js +0 -7
- package/dist/dashboard/assets/QuotaPage-Dxe0B0iu.js +0 -1
- package/dist/dashboard/assets/SetupPage-BaD4P_jW.js +0 -1
- package/dist/dashboard/assets/SortableList-Bol1ASmI.js +0 -1
- package/dist/dashboard/assets/StudioPage-CLP4le3U.js +0 -31
- package/dist/dashboard/assets/api-keys-CjIGQhe7.js +0 -1
- package/dist/dashboard/assets/app-Cjgo4-Lf.css +0 -2
- package/dist/dashboard/assets/cli-tools-DccaOfhX.js +0 -1
- package/dist/dashboard/assets/clipboard-button-DQmMikNQ.js +0 -1
- package/dist/dashboard/assets/entry-Cpi0rph1.js +0 -4
- package/dist/dashboard/assets/entry-Dm3PpDCO.js +0 -1
- package/dist/dashboard/assets/entry-keNDZ_Wz.js +0 -1
- package/dist/dashboard/assets/github-badge-BuAJr8oU.js +0 -1
- package/dist/dashboard/assets/mutation-BIizFZav.js +0 -1
- package/dist/dashboard/assets/privacy-mode-CQjbZ3xk.js +0 -1
- package/dist/dashboard/assets/settings-BAS6QbmJ.js +0 -1
- package/dist/dashboard/assets/terminal-C9mZ4Ugm.js +0 -1
- package/dist/dashboard/assets/toast-DKAdP2mo.js +0 -2
- package/scripts/cli/cli.ts +0 -771
- package/scripts/operations/probe-egress.ts +0 -335
- package/scripts/operations/restart.ts +0 -120
- package/scripts/shared/env.ts +0 -269
- /package/{tray-assets → scripts/cli/tray/assets}/cartethyia.ico +0 -0
- /package/{tray-assets → scripts/cli/tray/assets}/cartethyia.png +0 -0
- /package/scripts/cli/{menu.ts → ui/prompt.ts} +0 -0
- /package/scripts/cli/{wordmark.ts → ui/wordmark.ts} +0 -0
|
Binary file
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"count": 118,
|
|
3
|
+
"assets": [
|
|
4
|
+
"assets\\AccountCooldown-ChpdzxRH.js",
|
|
5
|
+
"assets\\BannedPage-QhvbJB9o.js",
|
|
6
|
+
"assets\\CliToolDetailPage-Bcy150Jo.js",
|
|
7
|
+
"assets\\CliToolsPage-DyNXefph.js",
|
|
8
|
+
"assets\\CombosPage-Cak0ljnO.js",
|
|
9
|
+
"assets\\ConsoleLogPage-CATpAEOz.js",
|
|
10
|
+
"assets\\CustomizationPage-D6jEU7nL.js",
|
|
11
|
+
"assets\\HealthEventsModal-CZkpn0a7.js",
|
|
12
|
+
"assets\\LoginPage-BJlMVN4U.js",
|
|
13
|
+
"assets\\ModelPicker-Br3CXEau.js",
|
|
14
|
+
"assets\\OverviewPage-CQxXbo2g.js",
|
|
15
|
+
"assets\\ProviderDetailPage--0RBNh99.js",
|
|
16
|
+
"assets\\ProviderIcon-paOCq8I0.js",
|
|
17
|
+
"assets\\ProvidersPage-1M-C3mbu.js",
|
|
18
|
+
"assets\\ProxyPage-CXiumA53.js",
|
|
19
|
+
"assets\\QuotaPage-BGDIfIYP.js",
|
|
20
|
+
"assets\\SettingsPage-BHW4Zt06.js",
|
|
21
|
+
"assets\\SetupPage-VOYC_lIa.js",
|
|
22
|
+
"assets\\SortableList-DpOTnGuH.js",
|
|
23
|
+
"assets\\StudioPage-BNIDLiU6.js",
|
|
24
|
+
"assets\\ToolIcon-K1ckcDKg.js",
|
|
25
|
+
"assets\\UsagePage-BAFaSDQV.js",
|
|
26
|
+
"assets\\api-keys-BETfaMYZ.js",
|
|
27
|
+
"assets\\app-BLCvGdzb.css",
|
|
28
|
+
"assets\\app-Cjq7nrwu.js",
|
|
29
|
+
"assets\\arrow-left-CpBxkoxI.js",
|
|
30
|
+
"assets\\arrow-right-Dl5yKnp8.js",
|
|
31
|
+
"assets\\assert-7J6_LVD3.js",
|
|
32
|
+
"assets\\backup-file-gdKIlg8U.js",
|
|
33
|
+
"assets\\badge-BTyGk_DL.js",
|
|
34
|
+
"assets\\banner-bujTWYM4.js",
|
|
35
|
+
"assets\\brain-Cwed_72z.js",
|
|
36
|
+
"assets\\card-B0Bnx5CA.js",
|
|
37
|
+
"assets\\check-D69FzdvC.js",
|
|
38
|
+
"assets\\chevron-right-BXIy5l3h.js",
|
|
39
|
+
"assets\\circle-alert-CntYHV5v.js",
|
|
40
|
+
"assets\\circle-check-BU3v_mFW.js",
|
|
41
|
+
"assets\\cli-tools-DE2ug812.js",
|
|
42
|
+
"assets\\clipboard-button-R_rArH8S.js",
|
|
43
|
+
"assets\\cog-CdWhsajs.js",
|
|
44
|
+
"assets\\copy-ngmQ9zcZ.js",
|
|
45
|
+
"assets\\dialog-BWIP_EvW.js",
|
|
46
|
+
"assets\\dialog-actions-B1axpEg7.js",
|
|
47
|
+
"assets\\download-A0SW9OCW.js",
|
|
48
|
+
"assets\\download-dRFo5_Wu.js",
|
|
49
|
+
"assets\\drawer-BKcgVugF.js",
|
|
50
|
+
"assets\\entry-7dpgvpJ3.js",
|
|
51
|
+
"assets\\entry-CcWkGR4a.js",
|
|
52
|
+
"assets\\entry-kTiTFrvh.js",
|
|
53
|
+
"assets\\eye-C_hawfH4.js",
|
|
54
|
+
"assets\\eye-off-Bk5g2luF.js",
|
|
55
|
+
"assets\\fingerprint-pattern-BWuHtbW4.js",
|
|
56
|
+
"assets\\gauge-BbIMy7MB.js",
|
|
57
|
+
"assets\\github-badge-Booc5mNe.js",
|
|
58
|
+
"assets\\image-BPaouViG.js",
|
|
59
|
+
"assets\\index-D70pChfn.js",
|
|
60
|
+
"assets\\inline-D1TCqM2D.js",
|
|
61
|
+
"assets\\input-B9oyU93y.js",
|
|
62
|
+
"assets\\jsx-runtime-CXUMngI_.js",
|
|
63
|
+
"assets\\key-round-UkavsGxp.js",
|
|
64
|
+
"assets\\layers-2-glBbjl.js",
|
|
65
|
+
"assets\\layout-BArzXirQ.js",
|
|
66
|
+
"assets\\list-row-BVZzaoHF.js",
|
|
67
|
+
"assets\\live-EmuIayqp.js",
|
|
68
|
+
"assets\\log-in-BmRjy60c.js",
|
|
69
|
+
"assets\\message-circle-CCxGwRvv.js",
|
|
70
|
+
"assets\\model-bans-CSPQ9xB0.js",
|
|
71
|
+
"assets\\mutation-BkoLM5Ba.js",
|
|
72
|
+
"assets\\numbers-CFL4_Dqc.js",
|
|
73
|
+
"assets\\pencil-768ysRAr.js",
|
|
74
|
+
"assets\\plus-DIdX_g-x.js",
|
|
75
|
+
"assets\\power-off-Yjw9GMJh.js",
|
|
76
|
+
"assets\\privacy-mode-GM8bej85.js",
|
|
77
|
+
"assets\\providers\\agentrouter.svg",
|
|
78
|
+
"assets\\providers\\aihubmix.svg",
|
|
79
|
+
"assets\\providers\\alibaba-coding-plan.svg",
|
|
80
|
+
"assets\\providers\\alibaba.svg",
|
|
81
|
+
"assets\\providers\\antigravity.svg",
|
|
82
|
+
"assets\\providers\\bai.svg",
|
|
83
|
+
"assets\\providers\\blackbox.svg",
|
|
84
|
+
"assets\\providers\\claude-code.svg",
|
|
85
|
+
"assets\\providers\\exa.svg",
|
|
86
|
+
"assets\\providers\\gmi-cloud.svg",
|
|
87
|
+
"assets\\providers\\inferhub.svg",
|
|
88
|
+
"assets\\providers\\muse.svg",
|
|
89
|
+
"assets\\providers\\nous-research.svg",
|
|
90
|
+
"assets\\providers\\openai-light.svg",
|
|
91
|
+
"assets\\providers\\parallel.svg",
|
|
92
|
+
"assets\\providers\\tokenharbor.svg",
|
|
93
|
+
"assets\\providers\\zai-coding-plan.svg",
|
|
94
|
+
"assets\\query-keys-D7wX2vM5.js",
|
|
95
|
+
"assets\\quota-DZGyp0N5.js",
|
|
96
|
+
"assets\\refresh-cw-BqJFk4sU.js",
|
|
97
|
+
"assets\\rotate-ccw-CufcqITi.js",
|
|
98
|
+
"assets\\route-CNSNj9Zm.js",
|
|
99
|
+
"assets\\routing-BExgxxBU.js",
|
|
100
|
+
"assets\\scaling-nWE4Cx8f.js",
|
|
101
|
+
"assets\\search-JOKus9rb.js",
|
|
102
|
+
"assets\\select-C9mMoEpJ.js",
|
|
103
|
+
"assets\\settings-C4_Gn_wq.js",
|
|
104
|
+
"assets\\shield-check-DVS0Foqh.js",
|
|
105
|
+
"assets\\sliders-horizontal-ClG7dBeJ.js",
|
|
106
|
+
"assets\\sparkles-BRaRUxAU.js",
|
|
107
|
+
"assets\\stack-Ca5HxI5i.js",
|
|
108
|
+
"assets\\state-CzUPfLXo.js",
|
|
109
|
+
"assets\\stream-retry-5QnVuSSo.js",
|
|
110
|
+
"assets\\switch-DOUIky_i.js",
|
|
111
|
+
"assets\\terminal-Bd4ee8TA.js",
|
|
112
|
+
"assets\\toast-C76WrMhc.js",
|
|
113
|
+
"assets\\tokens-DDxMbSRL.js",
|
|
114
|
+
"assets\\trash-Cppn5c3R.js",
|
|
115
|
+
"assets\\use-clipboard-B0Sy03fE.js",
|
|
116
|
+
"assets\\use-presence-BSZEBx7U.js",
|
|
117
|
+
"assets\\use-reduced-motion-C4B0R6Sz.js",
|
|
118
|
+
"assets\\use-timeout-BwcBBRrT.js",
|
|
119
|
+
"assets\\useMutation-D87FZwH0.js",
|
|
120
|
+
"assets\\wrench-B6E1oEuY.js",
|
|
121
|
+
"index.html"
|
|
122
|
+
]
|
|
123
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- Indexes `providers.tenant_id` on its own.
|
|
2
|
+
--
|
|
3
|
+
-- `providers` had no index beyond its primary key, yet two hot reads filter it
|
|
4
|
+
-- by tenant with `globalOrOwnedBy(providers.tenantId, …)` — a bare
|
|
5
|
+
-- `tenant_id IS NULL OR tenant_id = ?` that no other index can serve:
|
|
6
|
+
--
|
|
7
|
+
-- * `listModelsForTenant` (`providers/catalog/store.ts`), which the model
|
|
8
|
+
-- list and the catalog snapshot walk per request.
|
|
9
|
+
-- * `/quota/overview` (`quota/account-quota-tenant.ts`), which joins
|
|
10
|
+
-- `provider_accounts` to `providers` on the same predicate.
|
|
11
|
+
--
|
|
12
|
+
-- The table is small, so this is not a dramatic win on its own — it is the
|
|
13
|
+
-- scan count that matters: the predicate runs on a route the dashboard polls,
|
|
14
|
+
-- and a seq scan there competes with the dispatch pool for the same buffer.
|
|
15
|
+
--
|
|
16
|
+
-- `CREATE INDEX IF NOT EXISTS` keeps the file idempotent: a database built
|
|
17
|
+
-- from a newer baseline that already carries the index must not fail startup.
|
|
18
|
+
-- Plain rather than `CONCURRENTLY`: the migration runner applies each file
|
|
19
|
+
-- inside `BEGIN`/`COMMIT` (`db-pg.ts`), and `CONCURRENTLY` cannot run in a
|
|
20
|
+
-- transaction. The table is small enough that the write lock is not the cost
|
|
21
|
+
-- being optimised here.
|
|
22
|
+
CREATE INDEX IF NOT EXISTS "providers_tenant_id_idx" ON "providers" USING btree ("tenant_id");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Indexes `provider_accounts.tenant_id` on its own.
|
|
2
|
+
--
|
|
3
|
+
-- The table already carried `(status, cooldown_until)` and
|
|
4
|
+
-- `(provider_id, tenant_id)`, and neither serves `listAllAccounts`, which
|
|
5
|
+
-- filters on a bare `tenant_id IS NULL OR tenant_id = ?`:
|
|
6
|
+
--
|
|
7
|
+
-- * `(status, cooldown_until)` does not lead with `tenant_id`, so the
|
|
8
|
+
-- planner can only use it as a filter after reading the whole table.
|
|
9
|
+
-- * `(provider_id, tenant_id)` cannot be used at all by a predicate that
|
|
10
|
+
-- constrains no `provider_id` — a composite index is only usable from its
|
|
11
|
+
-- leftmost column forward.
|
|
12
|
+
--
|
|
13
|
+
-- That left the account listing — the console's largest and most-polled read —
|
|
14
|
+
-- seq-scanning the account table.
|
|
15
|
+
--
|
|
16
|
+
-- `CREATE INDEX IF NOT EXISTS` keeps the file idempotent: a database built
|
|
17
|
+
-- from a newer baseline that already carries the index must not fail startup.
|
|
18
|
+
-- Plain rather than `CONCURRENTLY`: the migration runner applies each file
|
|
19
|
+
-- inside `BEGIN`/`COMMIT` (`db-pg.ts`), and `CONCURRENTLY` cannot run in a
|
|
20
|
+
-- transaction.
|
|
21
|
+
CREATE INDEX IF NOT EXISTS "provider_accounts_tenant_id_idx" ON "provider_accounts" USING btree ("tenant_id");
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
-- Generated by scripts/generate/sqlite-ddl.ts from migrations/full-postgres/0000_baseline.sql.
|
|
2
|
-
-- Do not edit by hand: change src/persistence/schema.ts,
|
|
3
|
-
--
|
|
2
|
+
-- Do not edit by hand: change src/persistence/schema.ts, then re-run
|
|
3
|
+
-- `bun scripts/generate/sqlite-ddl.ts`. The PostgreSQL baseline this is
|
|
4
|
+
-- derived from is hand-written and hash-pinned; add a numbered migration
|
|
5
|
+
-- for a schema change instead of editing it.
|
|
4
6
|
--> statement-breakpoint
|
|
5
7
|
|
|
6
8
|
CREATE TABLE "tenants" (
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
-- Indexes `providers.tenant_id` on its own; see the identically named
|
|
2
|
+
-- PostgreSQL migration for why. Both backends must apply the same behavior,
|
|
3
|
+
-- and SQLite mirrors the PostgreSQL spelling here because the schema is shared.
|
|
4
|
+
CREATE INDEX IF NOT EXISTS "providers_tenant_id_idx" ON "providers" ("tenant_id");
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
-- Indexes `provider_accounts.tenant_id` on its own; see the identically named
|
|
2
|
+
-- PostgreSQL migration for why. Both backends must apply the same behavior,
|
|
3
|
+
-- and SQLite mirrors the PostgreSQL spelling here because the schema is shared.
|
|
4
|
+
CREATE INDEX IF NOT EXISTS "provider_accounts_tenant_id_idx" ON "provider_accounts" ("tenant_id");
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cartethyia",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.6",
|
|
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",
|
|
7
7
|
"packageManager": "bun@1.4.0",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/
|
|
10
|
+
"url": "git+https://github.com/risunCodex/Cartethyia.git"
|
|
11
11
|
},
|
|
12
|
-
"homepage": "https://github.com/
|
|
12
|
+
"homepage": "https://github.com/risunCodex/Cartethyia#readme",
|
|
13
13
|
"bugs": {
|
|
14
|
-
"url": "https://github.com/
|
|
14
|
+
"url": "https://github.com/risunCodex/Cartethyia/issues"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|
|
17
17
|
"ai",
|
|
@@ -21,18 +21,14 @@
|
|
|
21
21
|
"self-hosted"
|
|
22
22
|
],
|
|
23
23
|
"bin": {
|
|
24
|
-
"cartethyia": "scripts/cli/
|
|
25
|
-
"carte": "scripts/cli/carte
|
|
24
|
+
"cartethyia": "scripts/cli/bin/cartethyia.cjs",
|
|
25
|
+
"carte": "scripts/cli/bin/carte.cjs"
|
|
26
26
|
},
|
|
27
27
|
"files": [
|
|
28
28
|
"scripts/cli/",
|
|
29
|
-
"scripts/operations/probe-egress.ts",
|
|
30
|
-
"scripts/operations/restart.ts",
|
|
31
|
-
"scripts/shared/env.ts",
|
|
32
29
|
"src/",
|
|
33
30
|
"migrations/",
|
|
34
31
|
"dist/dashboard/",
|
|
35
|
-
"tray-assets/",
|
|
36
32
|
".env.example",
|
|
37
33
|
"README.md"
|
|
38
34
|
],
|
|
@@ -45,48 +41,46 @@
|
|
|
45
41
|
"scripts": {
|
|
46
42
|
"dev": "bun run dev:stack",
|
|
47
43
|
"dev:watch": "bun run scripts/dev/supervisor.ts",
|
|
48
|
-
"test": "bun run scripts/
|
|
49
|
-
"build": "bun run scripts/
|
|
44
|
+
"test": "bun run scripts/ci/run.ts",
|
|
45
|
+
"build": "bun run scripts/binary/build.ts",
|
|
50
46
|
"prepack": "bun run dashboard:build",
|
|
51
|
-
"setup": "bun run scripts/cli/setup.ts",
|
|
52
|
-
"start": "bun run scripts/
|
|
53
|
-
"doctor": "bun run scripts/cli/doctor.ts",
|
|
47
|
+
"setup": "bun run scripts/cli/command/setup.ts",
|
|
48
|
+
"start": "bun run scripts/binary/start.ts",
|
|
49
|
+
"doctor": "bun run scripts/cli/command/doctor.ts",
|
|
54
50
|
"probe:egress": "bun run scripts/operations/probe-egress.ts",
|
|
55
|
-
"restart": "bun run scripts/
|
|
56
|
-
"build:aot": "bun run scripts/
|
|
51
|
+
"restart": "bun run scripts/binary/restart.ts",
|
|
52
|
+
"build:aot": "bun run scripts/binary/aot.ts",
|
|
57
53
|
"dev:stack": "concurrently -n BACKEND,DASHBOARD -c cyan,magenta --kill-others-on-fail \"bun run dev:backend\" \"bun run dashboard:dev\"",
|
|
58
54
|
"typecheck": "tsc --noEmit",
|
|
59
|
-
"test:watch": "bun run scripts/
|
|
55
|
+
"test:watch": "bun run scripts/ci/run.ts --watch",
|
|
60
56
|
"test-db:up": "docker compose -f docker-compose.test.yml up -d --wait postgres-test",
|
|
61
57
|
"dev:backend": "bun run --hot src/main.ts",
|
|
62
|
-
"dev:console-auth": "bun run scripts/
|
|
63
|
-
"dev:visual-baseline": "bun run scripts/
|
|
64
|
-
"build:binary": "bun run scripts/
|
|
65
|
-
"test:backend": "bun run scripts/
|
|
58
|
+
"dev:console-auth": "bun run scripts/qa/console-session.ts",
|
|
59
|
+
"dev:visual-baseline": "bun run scripts/qa/visual-baseline.ts",
|
|
60
|
+
"build:binary": "bun run scripts/binary/compile.ts",
|
|
61
|
+
"test:backend": "bun run scripts/ci/run.ts --scope backend",
|
|
66
62
|
"test-db:down": "docker compose -f docker-compose.test.yml down",
|
|
67
63
|
"dashboard:dev": "bun run --cwd dashboard dev",
|
|
68
|
-
"test-db:check": "bun run scripts/
|
|
69
|
-
"dashboard:test": "bun run scripts/
|
|
64
|
+
"test-db:check": "bun run scripts/ci/db-check.ts",
|
|
65
|
+
"dashboard:test": "bun run scripts/ci/run.ts --scope dashboard",
|
|
70
66
|
"test-db:reset": "docker compose -f docker-compose.test.yml down -v && docker compose -f docker-compose.test.yml up -d --wait postgres-test",
|
|
71
67
|
"dashboard:build": "bun run --cwd dashboard build",
|
|
72
|
-
"dashboard:typecheck": "bun run --cwd dashboard typecheck"
|
|
68
|
+
"dashboard:typecheck": "bun run --cwd dashboard typecheck",
|
|
69
|
+
"check:migrations": "bun run scripts/ci/check-migrations.ts"
|
|
73
70
|
},
|
|
74
71
|
"dependencies": {
|
|
75
|
-
"@bufbuild/protobuf": "^2.14.1",
|
|
76
|
-
"@electric-sql/pglite": "^0.5.8",
|
|
77
72
|
"drizzle-orm": "0.45.2",
|
|
78
73
|
"elysia": "^2.0.0-beta.16",
|
|
79
74
|
"enquirer": "^2.4.1",
|
|
80
|
-
"exact-mirror": "^1.2.6",
|
|
81
|
-
"impit": "^0.14.5",
|
|
82
75
|
"ioredis": "6.0.0",
|
|
76
|
+
"jose": "^6.2.12",
|
|
77
|
+
"jsonrepair": "^3.15.0",
|
|
83
78
|
"pg": "8.23.0",
|
|
84
79
|
"pino": "^10.3.1",
|
|
85
80
|
"pino-pretty": "^13.1.3",
|
|
86
81
|
"socks-proxy-agent": "^10.1.0",
|
|
87
82
|
"systray2": "2.1.4",
|
|
88
83
|
"typebox": "1.3.27",
|
|
89
|
-
"undici": "^8.10.2",
|
|
90
84
|
"ws": "8.22.0"
|
|
91
85
|
},
|
|
92
86
|
"devDependencies": {
|
|
@@ -94,6 +88,7 @@
|
|
|
94
88
|
"@types/ws": "8.18.1",
|
|
95
89
|
"bun-types": "1.4.0",
|
|
96
90
|
"concurrently": "^10.0.5",
|
|
91
|
+
"drizzle-kit": "^0.31.11",
|
|
97
92
|
"typescript": "5.9.2"
|
|
98
93
|
}
|
|
99
94
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// Default to the arrow-key menu so `carte` works without a GUI; on Windows
|
|
4
|
-
// especially, the tray icon can land in the hidden-icons overflow and never
|
|
5
|
-
// be seen. `carte --tray` still opts into the system-tray icon.
|
|
6
|
-
if (process.argv.length <= 2) process.argv.push("menu");
|
|
7
|
-
else if (process.argv[2] === "--tray") process.argv[2] = "tray";
|
|
8
|
-
require("./
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Default to the arrow-key menu so `carte` works without a GUI; on Windows
|
|
4
|
+
// especially, the tray icon can land in the hidden-icons overflow and never
|
|
5
|
+
// be seen. `carte --tray` still opts into the system-tray icon.
|
|
6
|
+
if (process.argv.length <= 2) process.argv.push("menu");
|
|
7
|
+
else if (process.argv[2] === "--tray") process.argv[2] = "tray";
|
|
8
|
+
require("./cartethyia.cjs");
|