cartethyia 2.7.3 → 2.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/.env.example +2 -0
  2. package/README.md +17 -5
  3. package/dist/dashboard/assets/{BannedPage-2TJD37Hb.js → BannedPage-Cj15GsMp.js} +1 -1
  4. package/dist/dashboard/assets/BannedPage-Cj15GsMp.js.gz +0 -0
  5. package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js +1 -0
  6. package/dist/dashboard/assets/ClaimGiftsButton-D83pBJ6J.js.gz +0 -0
  7. package/dist/dashboard/assets/{CliToolDetailPage-xefJNRmJ.js → CliToolDetailPage-DZKmVuJN.js} +1 -1
  8. package/dist/dashboard/assets/CliToolDetailPage-DZKmVuJN.js.gz +0 -0
  9. package/dist/dashboard/assets/{CliToolsPage-Rj9iHQ3F.js → CliToolsPage-BIccZmeL.js} +1 -1
  10. package/dist/dashboard/assets/CliToolsPage-BIccZmeL.js.gz +0 -0
  11. package/dist/dashboard/assets/CombosPage-DEEKkYD-.js +1 -0
  12. package/dist/dashboard/assets/CombosPage-DEEKkYD-.js.gz +0 -0
  13. package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js +1 -0
  14. package/dist/dashboard/assets/ConsoleLogPage-D5rol2j2.js.gz +0 -0
  15. package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js +1 -0
  16. package/dist/dashboard/assets/CustomizationPage-BKj_r0rp.js.gz +0 -0
  17. package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js +656 -0
  18. package/dist/dashboard/assets/InjectSystemPromptPanel-B5nZvmf0.js.gz +0 -0
  19. package/dist/dashboard/assets/{LoginPage-C4w7vea-.js → LoginPage-DkXb6dx-.js} +1 -1
  20. package/dist/dashboard/assets/LoginPage-DkXb6dx-.js.gz +0 -0
  21. package/dist/dashboard/assets/{ModelPicker-BtPcAfot.js → ModelPicker-DnQPSIA8.js} +1 -1
  22. package/dist/dashboard/assets/ModelPicker-DnQPSIA8.js.gz +0 -0
  23. package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js +1 -0
  24. package/dist/dashboard/assets/OverviewPage-Ci2wQKUz.js.gz +0 -0
  25. package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js +5 -0
  26. package/dist/dashboard/assets/ProviderDetailPage-odlgYrOg.js.gz +0 -0
  27. package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js +1 -0
  28. package/dist/dashboard/assets/ProviderIcon-EfeloBn4.js.gz +0 -0
  29. package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js +1 -0
  30. package/dist/dashboard/assets/ProvidersPage-CqFBQEB8.js.gz +0 -0
  31. package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js +9 -0
  32. package/dist/dashboard/assets/ProxyPage-5SnUSy3j.js.gz +0 -0
  33. package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js +1 -0
  34. package/dist/dashboard/assets/QuotaPage-CmnMDzhP.js.gz +0 -0
  35. package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js +1 -0
  36. package/dist/dashboard/assets/SettingsPage-BJtRZ4qD.js.gz +0 -0
  37. package/dist/dashboard/assets/{SetupPage-BQS0Rx_u.js → SetupPage-WTa0sktC.js} +1 -1
  38. package/dist/dashboard/assets/SetupPage-WTa0sktC.js.gz +0 -0
  39. package/dist/dashboard/assets/{StudioPage-TP7voAQ0.js → StudioPage-BfAb5-o_.js} +3 -3
  40. package/dist/dashboard/assets/StudioPage-BfAb5-o_.js.gz +0 -0
  41. package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js +56 -0
  42. package/dist/dashboard/assets/UsagePage-BNzeZ2Vk.js.gz +0 -0
  43. package/dist/dashboard/assets/api-keys-l29JROPv.js +1 -0
  44. package/dist/dashboard/assets/api-keys-l29JROPv.js.gz +0 -0
  45. package/dist/dashboard/assets/app--PJWq8_C.css +2 -0
  46. package/dist/dashboard/assets/app--PJWq8_C.css.gz +0 -0
  47. package/dist/dashboard/assets/{assert-C0YYuZJ4.js → assert-C0K-c4eo.js} +1 -1
  48. package/dist/dashboard/assets/assert-C0K-c4eo.js.gz +0 -0
  49. package/dist/dashboard/assets/{badge-B_DMpMJN.js → badge-DfbhQU4k.js} +1 -1
  50. package/dist/dashboard/assets/badge-DfbhQU4k.js.gz +0 -0
  51. package/dist/dashboard/assets/{banner-DMrMPmth.js → banner-BllT4LcF.js} +1 -1
  52. package/dist/dashboard/assets/banner-BllT4LcF.js.gz +0 -0
  53. package/dist/dashboard/assets/brand/login_register.jpg +0 -0
  54. package/dist/dashboard/assets/brand/login_register_initial.jpg +0 -0
  55. package/dist/dashboard/assets/brand/og_bansos.jpg +0 -0
  56. package/dist/dashboard/assets/brand/og_image.jpg +0 -0
  57. package/dist/dashboard/assets/{card-Be5Uzamx.js → card-CtkX66Wd.js} +1 -1
  58. package/dist/dashboard/assets/card-CtkX66Wd.js.gz +0 -0
  59. package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js +1 -0
  60. package/dist/dashboard/assets/chevron-left-Bf6CaTSJ.js.gz +0 -0
  61. package/dist/dashboard/assets/{cli-tools-muFRphDu.js → cli-tools-CQXVMn4P.js} +1 -1
  62. package/dist/dashboard/assets/cli-tools-CQXVMn4P.js.gz +0 -0
  63. package/dist/dashboard/assets/{clipboard-button-DOfrVmsi.js → clipboard-button-BQqBQd2n.js} +1 -1
  64. package/dist/dashboard/assets/clipboard-button-BQqBQd2n.js.gz +0 -0
  65. package/dist/dashboard/assets/{dialog-C9omdjQt.js → dialog-BEK7KP0H.js} +1 -1
  66. package/dist/dashboard/assets/dialog-BEK7KP0H.js.gz +0 -0
  67. package/dist/dashboard/assets/{drawer-Bm8WKaGY.js → drawer-BrTEZ8zu.js} +1 -1
  68. package/dist/dashboard/assets/drawer-BrTEZ8zu.js.gz +0 -0
  69. package/dist/dashboard/assets/entry-CHWxbS56.js +1 -0
  70. package/dist/dashboard/assets/entry-CHWxbS56.js.gz +0 -0
  71. package/dist/dashboard/assets/{entry-q5HwZ8nN.js → entry-EBHJ3DrE.js} +1 -1
  72. package/dist/dashboard/assets/entry-EBHJ3DrE.js.gz +0 -0
  73. package/dist/dashboard/assets/entry-LCS85hiq.js +4 -0
  74. package/dist/dashboard/assets/entry-LCS85hiq.js.gz +0 -0
  75. package/dist/dashboard/assets/{formatters-BTScrQpe.js → formatters-BAACA727.js} +1 -1
  76. package/dist/dashboard/assets/formatters-BAACA727.js.gz +0 -0
  77. package/dist/dashboard/assets/{github-badge-Orjuzemr.js → github-badge-YSCE4UC2.js} +1 -1
  78. package/dist/dashboard/assets/github-badge-YSCE4UC2.js.gz +0 -0
  79. package/dist/dashboard/assets/{index-cPrX5vn6.js → index-FQlj0HUT.js} +2 -2
  80. package/dist/dashboard/assets/index-FQlj0HUT.js.gz +0 -0
  81. package/dist/dashboard/assets/{inline-Dvux8w-0.js → inline-C4gU5iOL.js} +1 -1
  82. package/dist/dashboard/assets/inline-C4gU5iOL.js.gz +0 -0
  83. package/dist/dashboard/assets/{input-CU1Rgf3p.js → input-BHHX_Tmm.js} +1 -1
  84. package/dist/dashboard/assets/input-BHHX_Tmm.js.gz +0 -0
  85. package/dist/dashboard/assets/{layout-C_7A6H55.js → layout-CajrYUnD.js} +1 -1
  86. package/dist/dashboard/assets/{layout-C_7A6H55.js.gz → layout-CajrYUnD.js.gz} +0 -0
  87. package/dist/dashboard/assets/{list-row-CzFvogbj.js → list-row-Bx2I7XUe.js} +1 -1
  88. package/dist/dashboard/assets/list-row-Bx2I7XUe.js.gz +0 -0
  89. package/dist/dashboard/assets/live-DNNqRbj2.js +1 -0
  90. package/dist/dashboard/assets/live-DNNqRbj2.js.gz +0 -0
  91. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js +1 -0
  92. package/dist/dashboard/assets/minimize-2-BTmMTK4o.js.gz +0 -0
  93. package/dist/dashboard/assets/{mutation-JJGQm8TD.js → mutation-Rr0TIvcj.js} +1 -1
  94. package/dist/dashboard/assets/mutation-Rr0TIvcj.js.gz +0 -0
  95. package/dist/dashboard/assets/network-C5UBACrJ.js +1 -0
  96. package/dist/dashboard/assets/network-C5UBACrJ.js.gz +0 -0
  97. package/dist/dashboard/assets/numbers-CUWAZK4J.js +2 -0
  98. package/dist/dashboard/assets/numbers-CUWAZK4J.js.gz +0 -0
  99. package/dist/dashboard/assets/pagination-Xsi9Qx04.js +1 -0
  100. package/dist/dashboard/assets/pagination-Xsi9Qx04.js.gz +0 -0
  101. package/dist/dashboard/assets/{query-keys-CLaNz8Xz.js → query-keys-BloKtaXJ.js} +1 -1
  102. package/dist/dashboard/assets/query-keys-BloKtaXJ.js.gz +0 -0
  103. package/dist/dashboard/assets/quota-DvQbD_sr.js +1 -0
  104. package/dist/dashboard/assets/quota-DvQbD_sr.js.gz +0 -0
  105. package/dist/dashboard/assets/{routing-BEH32QOC.js → routing-in0f_IfK.js} +1 -1
  106. package/dist/dashboard/assets/routing-in0f_IfK.js.gz +0 -0
  107. package/dist/dashboard/assets/{select-B3iTetHN.js → select-BLULNqTp.js} +2 -2
  108. package/dist/dashboard/assets/select-BLULNqTp.js.gz +0 -0
  109. package/dist/dashboard/assets/settings-CcGczj6I.js +1 -0
  110. package/dist/dashboard/assets/settings-CcGczj6I.js.gz +0 -0
  111. package/dist/dashboard/assets/shield-BMQNxORh.js +1 -0
  112. package/dist/dashboard/assets/shield-BMQNxORh.js.gz +0 -0
  113. package/dist/dashboard/assets/{stack-KrOrm7JZ.js → stack-D2lIR0tg.js} +1 -1
  114. package/dist/dashboard/assets/stack-D2lIR0tg.js.gz +0 -0
  115. package/dist/dashboard/assets/{state-DLS7IDMy.js → state-DTARjfiW.js} +1 -1
  116. package/dist/dashboard/assets/state-DTARjfiW.js.gz +0 -0
  117. package/dist/dashboard/assets/{switch-42ItvbAs.js → switch-c0oPSnqW.js} +1 -1
  118. package/dist/dashboard/assets/switch-c0oPSnqW.js.gz +0 -0
  119. package/dist/dashboard/assets/{useMutation-Dmnfh1Ue.js → useMutation-m8WGNPrz.js} +1 -1
  120. package/dist/dashboard/assets/useMutation-m8WGNPrz.js.gz +0 -0
  121. package/dist/dashboard/console-backgrounds.jpg +0 -0
  122. package/dist/dashboard/console-backgrounds_initial.jpg +0 -0
  123. package/dist/dashboard/index.html +2 -2
  124. package/dist/dashboard/index.html.gz +0 -0
  125. package/dist/dashboard/precompressed-assets.json +59 -57
  126. package/migrations/full-postgres/0027_qoder_identity_genuine_seed.sql +9 -10
  127. package/migrations/full-postgres/0032_add_provider_pool_accounts.sql +53 -0
  128. package/migrations/full-postgres/0033_add_api_key_ban.sql +9 -0
  129. package/migrations/full-postgres/0034_add_api_key_ban_until.sql +7 -0
  130. package/migrations/full-postgres/0035_align_pool_account_status_enum.sql +21 -0
  131. package/migrations/full-postgres/0036_system_prompt_presets_refs.sql +10 -0
  132. package/migrations/full-postgres/0037_share_concurrency_scope.sql +3 -0
  133. package/migrations/full-postgres/0038_add_accounts_quota_snapshot.sql +7 -0
  134. package/migrations/full-postgres/0039_add_telemetry_provider_model_indexes.sql +13 -0
  135. package/migrations/full-postgres/0040_add_models_dialect.sql +3 -0
  136. package/migrations/full-postgres/0041_add_daily_checkin_ledger_account_fk.sql +7 -0
  137. package/migrations/lite-sqlite3/0027_qoder_identity_genuine_seed.sql +9 -10
  138. package/migrations/lite-sqlite3/0032_add_provider_pool_accounts.sql +44 -0
  139. package/migrations/lite-sqlite3/0033_add_api_key_ban.sql +8 -0
  140. package/migrations/lite-sqlite3/0034_add_api_key_ban_until.sql +5 -0
  141. package/migrations/lite-sqlite3/0035_align_pool_account_status_enum.sql +6 -0
  142. package/migrations/lite-sqlite3/0036_system_prompt_presets_refs.sql +14 -0
  143. package/migrations/lite-sqlite3/0037_share_concurrency_scope.sql +3 -0
  144. package/migrations/lite-sqlite3/0038_add_accounts_quota_snapshot.sql +4 -0
  145. package/migrations/lite-sqlite3/0039_add_telemetry_provider_model_indexes.sql +6 -0
  146. package/migrations/lite-sqlite3/0040_add_models_dialect.sql +3 -0
  147. package/migrations/lite-sqlite3/0041_add_daily_checkin_ledger_account_fk.sql +26 -0
  148. package/package.json +4 -5
  149. package/scripts/cli/update.ts +15 -41
  150. package/src/boot/app.ts +67 -10
  151. package/src/boot/dependencies.ts +786 -732
  152. package/src/boot/lifecycle.ts +11 -12
  153. package/src/config/cooldowns.ts +34 -55
  154. package/src/config/network.ts +8 -4
  155. package/src/config/package-paths.ts +1 -1
  156. package/src/config/providers.ts +13 -14
  157. package/src/config/resources.ts +0 -5
  158. package/src/config/runtime.ts +2 -5
  159. package/src/config/spec.ts +26 -6
  160. package/src/console/api-keys/ban-constants.ts +38 -0
  161. package/src/console/api-keys/contracts.ts +92 -31
  162. package/src/console/api-keys/routes.ts +131 -6
  163. package/src/console/audit/routes.ts +3 -3
  164. package/src/console/auth/access.ts +4 -4
  165. package/src/console/auth/account-reset.ts +5 -5
  166. package/src/console/auth/audit-recorder.ts +1 -1
  167. package/src/console/auth/lockout.ts +7 -3
  168. package/src/console/auth/row-coercion.ts +57 -12
  169. package/src/console/auth/session-resolver.ts +1 -1
  170. package/src/console/auth/session-service.ts +8 -2
  171. package/src/console/auth/session.ts +40 -34
  172. package/src/console/auth/setup-service.ts +4 -3
  173. package/src/console/auth/user-store.ts +1 -1
  174. package/src/console/backup/9router-map.ts +0 -3
  175. package/src/console/backup/contracts.ts +11 -9
  176. package/src/console/backup/export-endpoint.ts +11 -12
  177. package/src/console/backup/nine-router.ts +1 -7
  178. package/src/console/backup/routes.ts +32 -36
  179. package/src/console/backup/service.ts +468 -468
  180. package/src/console/backup/store.ts +47 -29
  181. package/src/console/backup/validate.ts +11 -1
  182. package/src/console/cli-tools/contracts.ts +7 -7
  183. package/src/console/cli-tools/injectors/cline.ts +110 -110
  184. package/src/console/cli-tools/injectors/codex.ts +181 -181
  185. package/src/console/cli-tools/injectors/copilot.ts +108 -108
  186. package/src/console/cli-tools/injectors/driver.ts +247 -247
  187. package/src/console/cli-tools/injectors/jcode.ts +115 -115
  188. package/src/console/cli-tools/injectors/openclaw.ts +161 -161
  189. package/src/console/cli-tools/injectors/opencode.ts +153 -153
  190. package/src/console/cli-tools/routes.ts +4 -4
  191. package/src/console/cli-tools/service.ts +1 -1
  192. package/src/console/cli-tools/store.ts +2 -2
  193. package/src/console/console-router-guards.ts +2 -2
  194. package/src/console/console-router.ts +36 -4
  195. package/src/console/dashboard-assets.ts +9 -9
  196. package/src/console/data-management/routes.ts +3 -3
  197. package/src/console/domain-registration.ts +18 -4
  198. package/src/console/inferhub/client.ts +0 -7
  199. package/src/console/inferhub/key-store.ts +1 -1
  200. package/src/console/inferhub/normalize.ts +2 -2
  201. package/src/console/inferhub/routes.ts +1 -1
  202. package/src/console/inferhub/types.ts +1 -1
  203. package/src/console/observability/contracts.ts +5 -1
  204. package/src/console/observability/live.ts +34 -21
  205. package/src/console/observability/logs.ts +4 -4
  206. package/src/console/observability/performance.ts +3 -3
  207. package/src/console/observability/routes.ts +3 -3
  208. package/src/console/observability/sse.ts +62 -8
  209. package/src/console/observability/store.ts +36 -20
  210. package/src/console/providers/catalog/catalog-projections.ts +1 -1
  211. package/src/console/providers/catalog/contracts.ts +82 -22
  212. package/src/console/providers/catalog/model-operations.ts +1 -1
  213. package/src/console/providers/catalog/provider-operations.ts +110 -17
  214. package/src/console/providers/catalog/public-model-store.ts +0 -0
  215. package/src/console/providers/catalog/routes.ts +30 -6
  216. package/src/console/providers/catalog/store-helpers.ts +349 -326
  217. package/src/console/providers/catalog/store.ts +1662 -1292
  218. package/src/console/providers/detail/routes.ts +4 -4
  219. package/src/console/providers/oauth/callback-listener.ts +100 -18
  220. package/src/console/providers/oauth/routes.ts +95 -16
  221. package/src/console/quota/account-quota-global.ts +41 -3
  222. package/src/console/quota/account-quota-shared.ts +10 -3
  223. package/src/console/quota/account-quota-tenant.ts +285 -67
  224. package/src/console/quota/account-test-egress.ts +4 -4
  225. package/src/console/quota/daily-growth-job.ts +308 -0
  226. package/src/console/quota/native-identity.ts +2 -2
  227. package/src/console/quota/quota-view.ts +1 -1
  228. package/src/console/remote-support/routes.ts +1 -1
  229. package/src/console/remote-support/service.ts +2 -2
  230. package/src/console/routing/model/contracts.ts +1 -1
  231. package/src/console/routing/model/routes.ts +3 -3
  232. package/src/console/routing/pools/contracts.ts +13 -10
  233. package/src/console/routing/pools/import-parse.ts +3 -3
  234. package/src/console/routing/pools/operations.ts +14 -7
  235. package/src/console/routing/pools/probe-verdict.ts +8 -3
  236. package/src/console/routing/pools/relay-deploy.ts +12 -12
  237. package/src/console/routing/pools/routes.ts +3 -3
  238. package/src/console/routing/pools/store.ts +21 -1
  239. package/src/console/settings/contracts.ts +29 -2
  240. package/src/console/settings/routes.ts +3 -3
  241. package/src/console/settings/store.ts +20 -0
  242. package/src/console/share/share-router.ts +112 -44
  243. package/src/console/share/share-stats.ts +109 -39
  244. package/src/console/share/share-usage.ts +1 -1
  245. package/src/console/shared/errors.ts +2 -2
  246. package/src/console/shared/object.ts +18 -0
  247. package/src/console/shared/read-through-cache.ts +42 -6
  248. package/src/console/shared/transaction.ts +14 -0
  249. package/src/console/system-prompt/contracts.ts +89 -12
  250. package/src/console/system-prompt/routes.ts +98 -45
  251. package/src/console/updates/apply-update.ts +244 -0
  252. package/src/console/updates/routes.ts +256 -98
  253. package/src/main.ts +11 -5
  254. package/src/network/http2-bidi.ts +1 -1
  255. package/src/network/ip-utils.ts +298 -0
  256. package/src/network/outbound-fetch.ts +76 -5
  257. package/src/network/pool/agent.ts +7 -6
  258. package/src/network/pool/byte-accounting.ts +1 -1
  259. package/src/network/pool/resolver.ts +55 -51
  260. package/src/network/pool/selector.ts +150 -136
  261. package/src/network/pool-cooldown-store.ts +71 -16
  262. package/src/network/pool-health-machine.ts +22 -2
  263. package/src/network/rate-limit-verdict.ts +68 -0
  264. package/src/network/retry.ts +1 -1
  265. package/src/network/ssrf.ts +24 -75
  266. package/src/observability/event-log.ts +2 -2
  267. package/src/observability/event-query.ts +286 -214
  268. package/src/observability/log-sanitize.ts +1 -1
  269. package/src/observability/metrics.ts +4 -4
  270. package/src/observability/payload-capture.ts +6 -5
  271. package/src/observability/payload-store.ts +1 -1
  272. package/src/observability/runtime-metrics.ts +1 -1
  273. package/src/observability/telemetry-buffer.ts +12 -3
  274. package/src/observability/telemetry-reconciliation.ts +3 -3
  275. package/src/observability/telemetry-status.ts +1 -1
  276. package/src/observability/token-speed.ts +1 -1
  277. package/src/persistence/connection-url.ts +1 -1
  278. package/src/persistence/db-handle.ts +1 -1
  279. package/src/persistence/db-pg.ts +2 -2
  280. package/src/persistence/db-sqlite.ts +10 -5
  281. package/src/persistence/dialect.ts +5 -1
  282. package/src/persistence/readiness.ts +19 -7
  283. package/src/persistence/redis.ts +1 -1
  284. package/src/persistence/schema.ts +177 -45
  285. package/src/persistence/shared-cache.ts +2 -2
  286. package/src/persistence/sort-order.ts +1 -1
  287. package/src/persistence/stores/api-key-store.ts +109 -4
  288. package/src/persistence/stores/share-store.ts +20 -8
  289. package/src/persistence/stores/telemetry-store.ts +1 -1
  290. package/src/persistence/system-prompt-store.ts +63 -18
  291. package/src/persistence/tenant-preferences.ts +1 -1
  292. package/src/persistence/ttl-cache.ts +3 -3
  293. package/src/persistence/usage-flush.ts +7 -2
  294. package/src/protocol/canonical-model.ts +1 -1
  295. package/src/protocol/codecs.ts +12 -16
  296. package/src/protocol/dsml.ts +3 -49
  297. package/src/protocol/gateway-error.ts +6 -3
  298. package/src/protocol/image-clamp.ts +2 -2
  299. package/src/protocol/image-generation.ts +2 -2
  300. package/src/protocol/reasoning-text.ts +1 -1
  301. package/src/protocol/reasoning.ts +7 -52
  302. package/src/protocol/registry.ts +50 -15
  303. package/src/protocol/request/chat.ts +46 -19
  304. package/src/protocol/request/codex.ts +1 -1
  305. package/src/protocol/request/messages.ts +46 -14
  306. package/src/protocol/request/responses.ts +19 -10
  307. package/src/protocol/response/chat.ts +27 -12
  308. package/src/protocol/response/codex.ts +2 -2
  309. package/src/protocol/response/gemini.ts +1 -1
  310. package/src/protocol/response/messages.ts +6 -6
  311. package/src/protocol/response/omp-tool-call-markup.ts +1 -1
  312. package/src/protocol/response/responses.ts +3 -3
  313. package/src/protocol/sse-decoder.ts +64 -4
  314. package/src/protocol/stop-reason.ts +2 -2
  315. package/src/protocol/think-split.ts +347 -0
  316. package/src/protocol/translation/attachment-integrity.ts +3 -3
  317. package/src/protocol/translation/cache-controls.ts +8 -20
  318. package/src/protocol/translation/capabilities.ts +8 -8
  319. package/src/protocol/translation/dialect/deepseek.ts +10 -0
  320. package/src/protocol/translation/dialect/inband.ts +39 -0
  321. package/src/protocol/translation/dialect/model-thinking.ts +89 -0
  322. package/src/protocol/translation/dialect/qwen.ts +114 -0
  323. package/src/protocol/translation/dialect/resolver.ts +83 -0
  324. package/src/protocol/translation/dialect/rules.ts +93 -0
  325. package/src/protocol/translation/dialect/thinking-ladder.ts +245 -0
  326. package/src/protocol/translation/dialect/types.ts +58 -0
  327. package/src/protocol/translation/quirks.ts +18 -4
  328. package/src/protocol/translation/thinking.ts +12 -252
  329. package/src/protocol/translation/tool-id.ts +3 -3
  330. package/src/protocol/translation/tool-repair.ts +1 -1
  331. package/src/protocol/upstream/post-json.ts +6 -1
  332. package/src/protocol/upstream/send-claude-messages.ts +3 -3
  333. package/src/providers/adapters/base-adapter.ts +1 -1
  334. package/src/providers/adapters/compatible-adapter.ts +44 -5
  335. package/src/providers/authentication/jwt-validator.ts +0 -5
  336. package/src/providers/authentication/oauth-client.ts +254 -253
  337. package/src/providers/authentication/oauth-flow-store.ts +42 -7
  338. package/src/providers/authentication/oauth-refresh-service.ts +2 -2
  339. package/src/providers/bundled-discovery-providers.ts +6 -30
  340. package/src/providers/configured-openai-providers.ts +82 -97
  341. package/src/providers/configured-provider.ts +1 -1
  342. package/src/providers/default-registry.ts +23 -35
  343. package/src/providers/discovery/catalog/catalog-format.ts +13 -2
  344. package/src/providers/discovery/discovery-types.ts +0 -1
  345. package/src/providers/discovery/openai-model-discovery.ts +2 -2
  346. package/src/providers/discovery/probe-phases.ts +50 -15
  347. package/src/providers/discovery/probing-service.ts +18 -20
  348. package/src/providers/integrations/agentrouter/agentrouter.ts +14 -5
  349. package/src/providers/integrations/alibabacp/alibabacp.ts +2 -2
  350. package/src/providers/integrations/anthropic.ts +4 -11
  351. package/src/providers/integrations/antigravity/antigravity-oauth.ts +0 -1
  352. package/src/providers/integrations/antigravity/antigravity-protocol.ts +0 -14
  353. package/src/providers/integrations/antigravity/antigravity.ts +15 -26
  354. package/src/providers/integrations/buddy/buddy-catalog-shared.ts +2 -2
  355. package/src/providers/integrations/buddy/buddy-chat-shared.ts +20 -4
  356. package/src/providers/integrations/buddy/buddy-cli-headers.ts +19 -52
  357. package/src/providers/integrations/buddy/buddy-discovery-shared.ts +37 -6
  358. package/src/providers/integrations/buddy/buddy-identity.ts +108 -1
  359. package/src/providers/integrations/buddy/buddy-media.ts +16 -16
  360. package/src/providers/integrations/buddy/buddy-oauth-shared.ts +1 -1
  361. package/src/providers/integrations/buddy/codebuddy/cn-provider.ts +1 -2
  362. package/src/providers/integrations/buddy/codebuddy/provider.ts +5 -16
  363. package/src/providers/integrations/buddy/codebuddy/shared.ts +30 -9
  364. package/src/providers/integrations/buddy/workbuddy/provider.ts +6 -10
  365. package/src/providers/integrations/buddy/workbuddy/shared.ts +21 -3
  366. package/src/providers/integrations/claude/claude-betas.ts +1 -1
  367. package/src/providers/integrations/claude/claude-cch.ts +148 -148
  368. package/src/providers/integrations/claude/claude-credentials.ts +1 -1
  369. package/src/providers/integrations/claude/claude-slow-lane-retry.ts +1 -1
  370. package/src/providers/integrations/claude/claude.ts +3 -10
  371. package/src/providers/integrations/claude/fallback-credit.ts +3 -7
  372. package/src/providers/integrations/cline/cline.ts +2 -2
  373. package/src/providers/integrations/cloudflareai/cloudflareai.ts +4 -7
  374. package/src/providers/integrations/codex/codex-device-code.ts +101 -101
  375. package/src/providers/integrations/codex/codex-errors.ts +1 -1
  376. package/src/providers/integrations/codex/codex-oauth.ts +0 -1
  377. package/src/providers/integrations/codex/codex.ts +14 -15
  378. package/src/providers/integrations/commandcode/commandcode.ts +76 -116
  379. package/src/providers/integrations/commandcode/quota.ts +132 -48
  380. package/src/providers/integrations/cursor/cursor-http2.ts +11 -14
  381. package/src/providers/integrations/cursor/cursor-quota.ts +2 -6
  382. package/src/providers/integrations/cursor/cursor-request.ts +0 -87
  383. package/src/providers/integrations/cursor/cursor-shared.ts +0 -4
  384. package/src/providers/integrations/cursor/cursor.ts +53 -20
  385. package/src/providers/integrations/cursor/protocol/framing.ts +0 -56
  386. package/src/providers/integrations/cursor/protocol/messages.ts +0 -96
  387. package/src/providers/integrations/factory/factory.ts +13 -13
  388. package/src/providers/integrations/gemini.ts +11 -11
  389. package/src/providers/integrations/github/github-discovery.ts +55 -10
  390. package/src/providers/integrations/github/github-oauth.ts +6 -5
  391. package/src/providers/integrations/github/github.ts +47 -20
  392. package/src/providers/integrations/grok/grok-oauth.ts +261 -261
  393. package/src/providers/integrations/grok/grok-quota-frame.ts +1 -1
  394. package/src/providers/integrations/grok/grok-quota.ts +16 -7
  395. package/src/providers/integrations/grok/grok-ratelimit-store.ts +0 -5
  396. package/src/providers/integrations/grok/grok-ratelimit.ts +3 -0
  397. package/src/providers/integrations/grok/grok.ts +88 -42
  398. package/src/providers/integrations/inferhub.ts +4 -11
  399. package/src/providers/integrations/kilo/kilo-oauth.ts +1 -1
  400. package/src/providers/integrations/kimi/kimi.ts +4 -11
  401. package/src/providers/integrations/kiro/kiro-cache.ts +31 -0
  402. package/src/providers/integrations/kiro/kiro-catalog.ts +31 -5
  403. package/src/providers/integrations/kiro/kiro-discovery.ts +47 -43
  404. package/src/providers/integrations/kiro/kiro-machine-id.ts +6 -3
  405. package/src/providers/integrations/kiro/kiro-oauth.ts +523 -255
  406. package/src/providers/integrations/kiro/kiro-quota.ts +35 -47
  407. package/src/providers/integrations/kiro/kiro-request.ts +8 -11
  408. package/src/providers/integrations/kiro/kiro-stream.ts +13 -0
  409. package/src/providers/integrations/kiro/kiro.ts +91 -78
  410. package/src/providers/integrations/muse/muse-oauth.ts +0 -1
  411. package/src/providers/integrations/muse/muse-quota.ts +0 -4
  412. package/src/providers/integrations/muse/muse.ts +6 -9
  413. package/src/providers/integrations/opencode/fingerprint.ts +7 -5
  414. package/src/providers/integrations/opencode/provider.ts +17 -24
  415. package/src/providers/integrations/perplexity.ts +2 -2
  416. package/src/providers/integrations/qoder/qoder-catalog.ts +132 -17
  417. package/src/providers/integrations/qoder/qoder-checkin.ts +26 -8
  418. package/src/providers/integrations/qoder/qoder-native-identity-store.ts +9 -8
  419. package/src/providers/integrations/qoder/qoder-oauth.ts +165 -25
  420. package/src/providers/integrations/qoder/qoder-quota.ts +48 -6
  421. package/src/providers/integrations/qoder/qoder-realm.ts +22 -28
  422. package/src/providers/integrations/qoder/qoder-sse.ts +159 -0
  423. package/src/providers/integrations/qoder/qoder-umid.ts +33 -38
  424. package/src/providers/integrations/qoder/qoder-virtual.ts +14 -2
  425. package/src/providers/integrations/qoder/qoder.ts +521 -63
  426. package/src/providers/integrations/shared/connect.ts +0 -54
  427. package/src/providers/integrations/shared/hash.ts +15 -0
  428. package/src/providers/integrations/shared/session-cache.ts +136 -0
  429. package/src/providers/integrations/tokenharbor.ts +2 -2
  430. package/src/providers/integrations/trae/trae-cache.ts +7 -87
  431. package/src/providers/integrations/trae/trae-catalog.ts +1 -6
  432. package/src/providers/integrations/trae/trae-protocol.ts +17 -8
  433. package/src/providers/integrations/trae/trae-realm.ts +0 -7
  434. package/src/providers/integrations/trae/trae.ts +59 -19
  435. package/src/providers/integrations/xai/xai-oauth.ts +5 -5
  436. package/src/providers/integrations/zcode/oauth.ts +1 -1
  437. package/src/providers/integrations/zcode-start-plan/gifts.ts +265 -0
  438. package/src/providers/integrations/zcode-start-plan/oauth.ts +154 -0
  439. package/src/providers/integrations/zcode-start-plan/provider.ts +131 -0
  440. package/src/providers/integrations/zcode-start-plan/quota.ts +152 -0
  441. package/src/providers/integrations/zcode-start-plan/zcode_prompt.json +10 -0
  442. package/src/providers/operations/account-error-classification.ts +131 -116
  443. package/src/providers/operations/account-health-service.ts +31 -39
  444. package/src/providers/operations/account-reset-service.ts +58 -1
  445. package/src/providers/operations/cli-platform.ts +31 -5
  446. package/src/providers/operations/client-version-resolver.ts +4 -6
  447. package/src/providers/operations/client-versions.ts +10 -7
  448. package/src/providers/operations/provider-catalog-seeder.ts +2 -0
  449. package/src/providers/operations/provider-catalog-service.ts +22 -6
  450. package/src/providers/operations/provider-credential-service.ts +35 -6
  451. package/src/providers/operations/upstream-deadline.ts +3 -3
  452. package/src/providers/provider-contracts.ts +65 -10
  453. package/src/providers/provider-credential-resolver.ts +1 -1
  454. package/src/providers/provider-metadata.ts +17 -2
  455. package/src/providers/provider-model-definition.ts +22 -1
  456. package/src/providers/provider-probe.ts +4 -2
  457. package/src/providers/provider-registry.ts +4 -4
  458. package/src/providers/provider-usage.ts +81 -16
  459. package/src/providers/quota/cache.ts +29 -0
  460. package/src/providers/quota/quota-contracts.ts +28 -10
  461. package/src/providers/quota/refresh.ts +29 -6
  462. package/src/providers/quota/snapshot.ts +94 -0
  463. package/src/providers/search/search-provider.ts +6 -8
  464. package/src/providers/search/search-providers.ts +2 -1
  465. package/src/security/abuse.ts +8 -8
  466. package/src/security/admission/reasons.ts +17 -17
  467. package/src/security/admission/service.ts +2 -2
  468. package/src/security/admission/ttl.ts +61 -61
  469. package/src/security/api-key-auth.ts +20 -8
  470. package/src/security/client-router-fingerprint.ts +4 -4
  471. package/src/security/credential-codec.ts +3 -3
  472. package/src/security/csrf.ts +2 -2
  473. package/src/security/ip-boundary.ts +16 -189
  474. package/src/security/model-access-rule.ts +1 -1
  475. package/src/security/outbound-headers.ts +18 -0
  476. package/src/shared/coerce.ts +19 -0
  477. package/src/shared/invoke-guard.ts +47 -0
  478. package/src/transport/contracts.ts +13 -4
  479. package/src/transport/dispatch/attempt-finalize.ts +5 -4
  480. package/src/transport/dispatch/attempt-loop.ts +10 -7
  481. package/src/transport/dispatch/capture-policy.ts +34 -37
  482. package/src/transport/dispatch/empty-stream.ts +28 -25
  483. package/src/transport/dispatch/generation.ts +33 -53
  484. package/src/transport/dispatch/leases.ts +8 -8
  485. package/src/transport/dispatch/native-shared.ts +127 -0
  486. package/src/transport/dispatch/proxy-request.ts +10 -8
  487. package/src/transport/dispatch/responses-compact.ts +35 -56
  488. package/src/transport/dispatch/retry-policy.ts +4 -67
  489. package/src/transport/dispatch/stream-bridge.ts +1 -1
  490. package/src/transport/dispatch/streaming/encoder.ts +18 -72
  491. package/src/transport/dispatch/streaming/finalize.ts +11 -10
  492. package/src/transport/dispatch/streaming/stream.ts +7 -3
  493. package/src/transport/dispatch/streaming/thinking-loop.ts +1 -1
  494. package/src/transport/dispatch/systemone.ts +27 -55
  495. package/src/transport/dispatch/token-count.ts +49 -46
  496. package/src/transport/dispatch/websearch.ts +24 -50
  497. package/src/transport/drain-endpoint.ts +3 -3
  498. package/src/transport/failure-policy.ts +19 -6
  499. package/src/transport/guards/auth-guard.ts +6 -11
  500. package/src/transport/guards/body-policy.ts +7 -7
  501. package/src/transport/guards/error-lifecycle.ts +18 -3
  502. package/src/transport/guards/guard-errors.ts +7 -3
  503. package/src/transport/guards/headroom-guard.ts +2 -2
  504. package/src/transport/guards/pipeline.ts +7 -7
  505. package/src/transport/guards/readiness-guard.ts +16 -2
  506. package/src/transport/guards/request-context.ts +15 -20
  507. package/src/transport/request/preparer.ts +306 -27
  508. package/src/transport/request/rtk/compress-request.ts +3 -3
  509. package/src/transport/request/rtk/rtk-constants.ts +2 -2
  510. package/src/transport/request/rtk/rtk-filters.ts +8 -8
  511. package/src/transport/request/state.ts +5 -20
  512. package/src/transport/request/system-prompt-injection.ts +74 -11
  513. package/src/transport/request/tenant-preferences.ts +22 -0
  514. package/src/transport/routing/candidate-index.ts +2 -2
  515. package/src/transport/routing/round-robin.ts +1 -1
  516. package/src/transport/routing/route-catalog.ts +113 -19
  517. package/src/transport/routing/route-model.ts +131 -38
  518. package/src/transport/routing/router.ts +154 -39
  519. package/src/transport/shutdown-notice.ts +21 -9
  520. package/src/transport/surface/adapters.ts +3 -3
  521. package/src/transport/surface/chat/encode.ts +7 -7
  522. package/src/transport/surface/chat/parse.ts +7 -7
  523. package/src/transport/surface/completion.ts +3 -3
  524. package/src/transport/surface/content-parts.ts +1 -1
  525. package/src/transport/surface/dialects.ts +2 -2
  526. package/src/transport/surface/messages/encode.ts +1 -1
  527. package/src/transport/surface/messages/parse.ts +3 -3
  528. package/src/transport/surface/responses/adapter.ts +1 -1
  529. package/src/transport/surface/responses/errors.ts +0 -9
  530. package/src/transport/vision-handoff-cache.ts +58 -0
  531. package/src/transport/vision-handoff.ts +376 -0
  532. package/src/workers/account-identity-sweep.ts +2 -2
  533. package/src/workers/buddy-growth-tasks.ts +392 -346
  534. package/src/workers/daily-checkin.ts +102 -49
  535. package/src/workers/maintenance-lease.ts +2 -35
  536. package/src/workers/oauth-refresh-sweep.ts +8 -1
  537. package/src/workers/quota-refresh-sweep.ts +120 -82
  538. package/src/workers/scheduler.ts +67 -4
  539. package/src/workers/sweep-runner.ts +24 -5
  540. package/src/workers/zcode-gift-claim.ts +108 -0
  541. package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js +0 -1
  542. package/dist/dashboard/assets/AccountCooldown-Bjo92Qat.js.gz +0 -0
  543. package/dist/dashboard/assets/BannedPage-2TJD37Hb.js.gz +0 -0
  544. package/dist/dashboard/assets/CliToolDetailPage-xefJNRmJ.js.gz +0 -0
  545. package/dist/dashboard/assets/CliToolsPage-Rj9iHQ3F.js.gz +0 -0
  546. package/dist/dashboard/assets/CombosPage-JEbYJFxw.js +0 -1
  547. package/dist/dashboard/assets/CombosPage-JEbYJFxw.js.gz +0 -0
  548. package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js +0 -1
  549. package/dist/dashboard/assets/ConsoleLogPage-C3xx_inM.js.gz +0 -0
  550. package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js +0 -1
  551. package/dist/dashboard/assets/CustomizationPage-Dw306gJU.js.gz +0 -0
  552. package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js +0 -1
  553. package/dist/dashboard/assets/HealthEventsModal-jaBo1TWV.js.gz +0 -0
  554. package/dist/dashboard/assets/LoginPage-C4w7vea-.js.gz +0 -0
  555. package/dist/dashboard/assets/ModelPicker-BtPcAfot.js.gz +0 -0
  556. package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js +0 -1
  557. package/dist/dashboard/assets/OverviewPage-CGC5gNs1.js.gz +0 -0
  558. package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js +0 -4
  559. package/dist/dashboard/assets/ProviderDetailPage-DQcthNGt.js.gz +0 -0
  560. package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js +0 -1
  561. package/dist/dashboard/assets/ProviderIcon-FB6yS4v1.js.gz +0 -0
  562. package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js +0 -1
  563. package/dist/dashboard/assets/ProvidersPage-0OsXRGXe.js.gz +0 -0
  564. package/dist/dashboard/assets/ProxyPage-DdPc8slb.js +0 -9
  565. package/dist/dashboard/assets/ProxyPage-DdPc8slb.js.gz +0 -0
  566. package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js +0 -1
  567. package/dist/dashboard/assets/QuotaPage-Ci5O4BnH.js.gz +0 -0
  568. package/dist/dashboard/assets/SettingsPage-CDZjTt87.js +0 -1
  569. package/dist/dashboard/assets/SettingsPage-CDZjTt87.js.gz +0 -0
  570. package/dist/dashboard/assets/SetupPage-BQS0Rx_u.js.gz +0 -0
  571. package/dist/dashboard/assets/SortableList-BAL5npBC.js +0 -1
  572. package/dist/dashboard/assets/SortableList-BAL5npBC.js.gz +0 -0
  573. package/dist/dashboard/assets/StudioPage-TP7voAQ0.js.gz +0 -0
  574. package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js +0 -56
  575. package/dist/dashboard/assets/UsagePage-Cj_fEzhg.js.gz +0 -0
  576. package/dist/dashboard/assets/api-keys-MbI7e7rt.js +0 -1
  577. package/dist/dashboard/assets/api-keys-MbI7e7rt.js.gz +0 -0
  578. package/dist/dashboard/assets/app-B2vyPoII.css +0 -2
  579. package/dist/dashboard/assets/app-B2vyPoII.css.gz +0 -0
  580. package/dist/dashboard/assets/assert-C0YYuZJ4.js.gz +0 -0
  581. package/dist/dashboard/assets/badge-B_DMpMJN.js.gz +0 -0
  582. package/dist/dashboard/assets/banner-DMrMPmth.js.gz +0 -0
  583. package/dist/dashboard/assets/card-Be5Uzamx.js.gz +0 -0
  584. package/dist/dashboard/assets/cli-tools-muFRphDu.js.gz +0 -0
  585. package/dist/dashboard/assets/clipboard-button-DOfrVmsi.js.gz +0 -0
  586. package/dist/dashboard/assets/dialog-C9omdjQt.js.gz +0 -0
  587. package/dist/dashboard/assets/drawer-Bm8WKaGY.js.gz +0 -0
  588. package/dist/dashboard/assets/entry-DS90gUks.js +0 -1
  589. package/dist/dashboard/assets/entry-DS90gUks.js.gz +0 -0
  590. package/dist/dashboard/assets/entry-j40LJotO.js +0 -4
  591. package/dist/dashboard/assets/entry-j40LJotO.js.gz +0 -0
  592. package/dist/dashboard/assets/entry-q5HwZ8nN.js.gz +0 -0
  593. package/dist/dashboard/assets/formatters-BTScrQpe.js.gz +0 -0
  594. package/dist/dashboard/assets/github-badge-Orjuzemr.js.gz +0 -0
  595. package/dist/dashboard/assets/index-cPrX5vn6.js.gz +0 -0
  596. package/dist/dashboard/assets/inline-Dvux8w-0.js.gz +0 -0
  597. package/dist/dashboard/assets/input-CU1Rgf3p.js.gz +0 -0
  598. package/dist/dashboard/assets/list-row-CzFvogbj.js.gz +0 -0
  599. package/dist/dashboard/assets/live-KaG15HLQ.js +0 -1
  600. package/dist/dashboard/assets/live-KaG15HLQ.js.gz +0 -0
  601. package/dist/dashboard/assets/minimize-2-D-MN8W8a.js +0 -1
  602. package/dist/dashboard/assets/minimize-2-D-MN8W8a.js.gz +0 -0
  603. package/dist/dashboard/assets/mutation-JJGQm8TD.js.gz +0 -0
  604. package/dist/dashboard/assets/numbers-BNDZnsUE.js +0 -2
  605. package/dist/dashboard/assets/numbers-BNDZnsUE.js.gz +0 -0
  606. package/dist/dashboard/assets/query-keys-CLaNz8Xz.js.gz +0 -0
  607. package/dist/dashboard/assets/quota-DZGyp0N5.js +0 -1
  608. package/dist/dashboard/assets/quota-DZGyp0N5.js.gz +0 -0
  609. package/dist/dashboard/assets/routing-BEH32QOC.js.gz +0 -0
  610. package/dist/dashboard/assets/select-B3iTetHN.js.gz +0 -0
  611. package/dist/dashboard/assets/settings-Dt3Eqbnq.js +0 -1
  612. package/dist/dashboard/assets/settings-Dt3Eqbnq.js.gz +0 -0
  613. package/dist/dashboard/assets/stack-KrOrm7JZ.js.gz +0 -0
  614. package/dist/dashboard/assets/state-DLS7IDMy.js.gz +0 -0
  615. package/dist/dashboard/assets/stream-retry-5QnVuSSo.js +0 -1
  616. package/dist/dashboard/assets/stream-retry-5QnVuSSo.js.gz +0 -0
  617. package/dist/dashboard/assets/switch-42ItvbAs.js.gz +0 -0
  618. package/dist/dashboard/assets/useMutation-Dmnfh1Ue.js.gz +0 -0
  619. package/src/network/response-headers.ts +0 -39
  620. package/src/protocol/response/dsml.ts +0 -38
  621. package/src/providers/integrations/xiaomi-mimo/think-stream.ts +0 -229
  622. /package/dist/dashboard/assets/{app-wvwCi4Eh.js → app-Bgd3zANQ.js} +0 -0
  623. /package/dist/dashboard/assets/{app-wvwCi4Eh.js.gz → app-Bgd3zANQ.js.gz} +0 -0
  624. /package/dist/dashboard/assets/brand/{og_bansos.webp → og_bansos_initial.webp} +0 -0
  625. /package/dist/dashboard/assets/brand/{og_image.webp → og_image_initial.webp} +0 -0
@@ -0,0 +1 @@
1
+ import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{l as i}from"./app-Bgd3zANQ.js";import{n as a,t as o}from"./brain-Cwed_72z.js";import{C as s,E as c,O as l,T as u,_ as d,a as f,b as ee,c as p,d as te,f as m,l as h,m as ne,p as g,s as _,w as v,x as re}from"./numbers-CUWAZK4J.js";import{t as y}from"./chevron-right-BXIy5l3h.js";import{t as ie}from"./circle-check-BU3v_mFW.js";import{t as b}from"./eye-C_hawfH4.js";import{r as ae,t as oe}from"./github-badge-YSCE4UC2.js";import{n as se,r as ce,t as le}from"./state-DTARjfiW.js";import{t as ue}from"./key-round-UkavsGxp.js";import{n as de,r as fe,t as x}from"./clipboard-button-BQqBQd2n.js";import{t as S}from"./scaling-nWE4Cx8f.js";import{t as C}from"./wrench-B6E1oEuY.js";import{n as w,t as T}from"./card-CtkX66Wd.js";import{n as pe,t as me}from"./download-dRFo5_Wu.js";import{a as E,l as D,m as O,o as k,s as A}from"./tokens-COzario9.js";import{t as j}from"./switch-c0oPSnqW.js";var M=e(`chart-column`,[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`,key:`c24i48`}],[`path`,{d:`M18 17V9`,key:`2bz60n`}],[`path`,{d:`M13 17V5`,key:`1frdt8`}],[`path`,{d:`M8 17v-3`,key:`17ska0`}]]),N=t(n(),1),P=i();function F(e){if(e===`link_expired_or_used`)return`This enrollment link has expired or has already been used.`;if(e===`key_unavailable`)return`The shared access template is no longer available.`;if(e===`link_not_found`)return`This enrollment link is unavailable.`;if(e===`link_disabled`)return`This share link's API key is paused. Ask whoever shared this link to re-enable it.`;if(e===`link_expired`)return`This share link has expired.`;if(e===`link_revoked`)return`This share link's API key has been revoked, so the link can no longer be used. Ask whoever shared this link for a new one — a revoked key cannot be re-enabled.`}function I(e,t){let n=e.error;return F(typeof n==`string`?n:n?.code)??(typeof n==`string`?n:n?.message)??e.message??t}function L(e){let t=e.error;return(typeof t==`string`?t:t?.code)??null}function he(e,t){let n=t?.streamEvent,[r,i]=(0,N.useState)({data:null,error:null,code:null,loading:!0}),a=(0,N.useRef)(!1);return(0,N.useEffect)(()=>{let t=!0,r=new AbortController,a=e=>{i({data:e,error:null,code:null,loading:!1})};return n===void 0&&fetch(e,{signal:r.signal,credentials:`same-origin`,cache:`no-store`,referrerPolicy:`no-referrer`}).then(async e=>{let n=await e.json();if(t){if(!e.ok){i({data:null,error:I(n,`This enrollment link is unavailable.`),code:L(n),loading:!1});return}a(n)}}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||t&&i({data:null,error:`Unable to reach the Cartethyia gateway.`,code:null,loading:!1})}),()=>{t=!1,r.abort()}},[e,n]),p({url:e,enabled:n!==void 0,events:n===void 0?[]:[n],onEvent:(e,t)=>{if(e===n)try{i({data:JSON.parse(t),error:null,code:null,loading:!1})}catch{}},onClose:()=>{a.current||(a.current=!0,i(e=>e.data===null?{...e,loading:!1}:e))}}),r}var R=r(),z=`max-h-168 w-full min-w-0 overflow-x-auto overflow-y-auto touch-pan-x touch-pan-y [&_thead_th]:sticky [&_thead_th]:top-0 [&_thead_th]:z-card [&_thead_th]:bg-surface-2`,B=`w-full border-collapse text-caption [&_th]:border-b [&_th]:border-inner-border [&_th]:px-5 [&_th]:py-3 [&_th]:text-left [&_th]:font-mono [&_th]:text-micro [&_th]:font-bold [&_th]:uppercase [&_th]:tracking-label [&_th]:text-text-tertiary [&_td]:border-b [&_td]:border-surface-muted [&_td]:px-5 [&_td]:py-4 [&_td]:text-text-secondary [&_tr:last-child_td]:border-b-0 [&_code]:overflow-hidden [&_code]:text-ellipsis [&_code]:whitespace-nowrap`,V=(0,N.createContext)({data:null,loading:!0,unit:E,cycleUnit:()=>void 0}),H=`cartethyia:share-token-unit`;function U(){try{let e=window.localStorage.getItem(H);if(e===null)return E;if(e===`auto`)return-1;let t=Number(e);return Number.isInteger(t)&&t>=0&&t<=E?t:E}catch{return E}}function W(e){return e===-1?0:e>=E?-1:e+1}function G(e){return e===-1?`auto`:e>=E?`raw`:k[e]?.suffix??`auto`}function ge({path:e,children:t}){let n=he(e,{streamEvent:`stats`}),[r,i]=(0,N.useState)(()=>typeof window>`u`?E:U()),a=(0,N.useCallback)(()=>{i(e=>{let t=W(e);try{window.localStorage.setItem(H,t===-1?`auto`:String(t))}catch{}return t})},[]);return(0,R.jsx)(V.Provider,{value:{data:n.data,loading:n.loading,unit:r,cycleUnit:a},children:t})}function K(){let{unit:e,cycleUnit:t}=(0,N.useContext)(V),n=G(e),r=G(W(e));return(0,R.jsxs)(`button`,{type:`button`,className:`ml-auto inline-flex min-h-6 items-center gap-1 rounded-chip border border-inner-border bg-surface-2 px-2 text-text-secondary font-mono text-micro font-bold uppercase tracking-[0.04em] cursor-pointer hover:border-accent hover:text-text-primary`,"aria-label":`Token unit: currently ${n}, switch to ${r}`,title:`Show ${r}`,onClick:t,children:[(0,R.jsx)(S,{size:11,"aria-hidden":`true`}),n]})}function _e({policy:e}){let{data:t}=(0,N.useContext)(V);return(0,R.jsx)(ye,{policy:e,stats:t})}function ve(){let{data:e,loading:t}=(0,N.useContext)(V);return(0,R.jsx)(Se,{stats:e,loading:t})}function q(){let{unit:e}=(0,N.useContext)(V);return(0,N.useCallback)(t=>O(t,e),[e])}function J(e){return Number.isFinite(e)?Math.max(0,Math.round(e)).toLocaleString():`—`}function Y(e){return e===null||!Number.isFinite(e)||e<=0?`—`:`${Number(e.toFixed(1))} t/s`}function X(e){return e===null||!Number.isFinite(e)||e<=0?`—`:e>=1e3?`${Number((e/1e3).toFixed(1))}s`:`${Math.round(e)}ms`}function Z(e){if(!e)return`—`;let t=new Date(e).getTime();if(!Number.isFinite(t))return`—`;let n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<60)return`just now`;let r=Math.round(n/60);if(r<60)return`${r} min ago`;let i=Math.round(r/60);return i<24?`${i} h ago`:new Date(e).toLocaleDateString()}function Q(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:00`}function ye({policy:e,stats:t}){let n=q(),r=[{label:`Lifetime`,used:t?.totals?.totalTokens??0,limit:e.oneTimeLimit},{label:`Daily`,used:t?.totals?.todayTokens??0,limit:e.dailyLimit},{label:`Monthly`,used:t?.totals?.monthTokens??0,limit:e.monthlyLimit}],i=t?.recipients;return(0,R.jsxs)(`div`,{className:`mt-5 flex flex-col gap-6 border-t border-inner-border pt-9`,children:[r.map(e=>{let t=e.limit!==null&&e.limit>0,r=t?Math.min(1,e.used/e.limit):1;return(0,R.jsxs)(`div`,{className:`flex items-center gap-6 max-sm:flex-col max-sm:items-stretch max-sm:gap-3`,children:[(0,R.jsx)(`span`,{className:`w-39 shrink-0 text-text-secondary font-mono text-micro uppercase tracking-label max-sm:w-auto`,children:e.label}),(0,R.jsx)(`div`,{className:`relative h-4 flex-1 overflow-hidden rounded-tiny bg-teal max-sm:flex-none`,title:t?`${n(e.used)} of ${n(e.limit)} used`:`${n(e.used)} used (no limit set)`,children:t?(0,R.jsx)(`div`,{className:`h-full rounded-tiny bg-red transition-[width] duration-200`,style:{width:`${Math.round(r*100)}%`}}):null}),(0,R.jsxs)(`span`,{className:`whitespace-nowrap text-text-secondary font-mono text-micro [&>strong]:text-text-primary [&>strong]:font-semibold max-sm:self-start`,children:[(0,R.jsx)(`strong`,{children:n(e.used)}),t?` / ${n(e.limit)}`:` used`]})]},e.label)}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,R.jsxs)(`span`,{className:`inline-flex min-h-14 items-center gap-3.5 rounded-pill border border-inner-border bg-surface-2 px-5 py-2.5 text-text-secondary font-mono text-badge leading-[1.3]`,children:[`RPM `,e.requestsPerMinute??`unlimited`]}),(0,R.jsxs)(`span`,{className:`inline-flex min-h-14 items-center gap-3.5 rounded-pill border border-inner-border bg-surface-2 px-5 py-2.5 text-text-secondary font-mono text-badge leading-[1.3]`,title:e.concurrencyScope===`per_key`?`Each recipient key has its own concurrent cap and counter.`:`All recipients of this share template share one concurrent cap and counter.`,children:[`Concurrent `,e.maxConcurrentRequests??`unlimited`,(0,R.jsx)(`span`,{className:`font-semibold text-text-tertiary`,children:e.concurrencyScope===`per_key`?`· per key`:`· family`})]}),i?(0,R.jsxs)(`span`,{className:`inline-flex min-h-14 items-center gap-3.5 rounded-pill border border-inner-border bg-surface-2 px-5 py-2.5 text-text-secondary font-mono text-badge leading-[1.3]`,children:[i.active,` / `,i.total,` recipients active`]}):null,(0,R.jsx)(K,{})]})]})}function be({hourly:e}){let t=q(),n=Math.max(1,...e.map(e=>e.requests)),r=e.length*10,[i,a]=(0,N.useState)(null),o=(t,n)=>{let r=t.getBoundingClientRect();if(r.width===0||e.length===0)return null;let i=Math.floor((n-r.left)/r.width*e.length);return i>=0&&i<e.length?i:null},s=i===null?void 0:e[i];return(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`mb-2 flex min-h-9 items-baseline gap-4 text-text-tertiary font-mono text-badge [&>strong]:text-text-primary [&>strong]:font-head [&>strong]:text-body-lg [&>strong]:font-semibold`,"aria-live":`polite`,children:s?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`strong`,{children:t(s.tokens)}),(0,R.jsxs)(`span`,{children:[Q(s.hour),` · `,J(s.requests),` req`]})]}):(0,R.jsx)(`span`,{children:`drag a bar`})}),(0,R.jsx)(`div`,{className:`cursor-crosshair touch-none`,onPointerEnter:e=>a(o(e.currentTarget,e.clientX)),onPointerMove:e=>a(o(e.currentTarget,e.clientX)),onPointerLeave:()=>a(null),children:(0,R.jsx)(`svg`,{className:`h-22 w-full`,viewBox:`0 0 ${r} 44`,preserveAspectRatio:`none`,role:`img`,"aria-label":`Requests per hour over the last 24 hours`,children:e.map((e,r)=>{let a=Math.round(e.requests/n*40);return(0,R.jsx)(`rect`,{className:`${e.requests===0?`fill-track`:`fill-teal`}${r===i?` fill-text-primary`:``}`,x:r*10+1,y:44-Math.max(2,a),width:7,height:Math.max(2,a),rx:1.5,children:(0,R.jsx)(`title`,{children:`${t(e.tokens)} tokens · ${J(e.requests)} requests`})},e.hour)})})}),(0,R.jsxs)(`div`,{className:`mt-1.5 flex justify-between text-text-tertiary font-mono text-micro`,children:[(0,R.jsx)(`span`,{children:e.length?Q(e[0].hour):``}),(0,R.jsx)(`span`,{children:`last 24h`}),(0,R.jsx)(`span`,{children:e.length?Q(e[e.length-1].hour):``})]})]})}function xe({value:e,max:t,label:n}){let r=t>0?Math.min(1,e/t):0;return(0,R.jsxs)(`div`,{className:`flex min-w-55 items-center gap-4 max-sm:min-w-32`,children:[(0,R.jsx)(`div`,{className:`h-3 min-w-0 flex-1 overflow-hidden rounded-tiny bg-surface-muted`,children:(0,R.jsx)(`div`,{className:`h-full rounded-tiny bg-teal`,style:{width:`${Math.round(r*100)}%`}})}),(0,R.jsx)(`span`,{className:`min-w-8 text-right font-mono text-micro text-text-secondary`,children:n})]})}function Se({stats:e,loading:t}){let[n,r]=(0,N.useState)(!1),[i,a]=(0,N.useState)(!1),o=q(),s=e?.totals,c=e?.models??[],l=e?.clientIps??[],u=i?l:l.filter(e=>e.active),d=Math.max(1,...c.map(e=>e.tokens)),f=Math.max(1,...u.map(e=>e.requests));return(0,R.jsxs)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg p-5 backdrop-blur-md backdrop-saturate-150`,children:[(0,R.jsxs)(`button`,{type:`button`,className:`group flex w-full cursor-pointer items-center gap-3 bg-transparent p-0 text-left`,"aria-expanded":n,onClick:()=>r(e=>!e),children:[(0,R.jsx)(y,{size:14,className:`shrink-0 text-text-secondary transition-transform duration-200${n?` rotate-90`:``}`,"aria-hidden":`true`}),(0,R.jsx)(`span`,{className:`text-text-secondary font-mono text-badge font-bold tracking-label transition-colors duration-150 group-hover:text-text-primary`,children:`STATS & ACTIVITY`}),(0,R.jsxs)(`span`,{className:`ml-auto flex flex-wrap items-center gap-2 text-text-tertiary font-mono text-micro max-medium:hidden`,children:[(0,R.jsxs)(`span`,{children:[l.length,` IPs`]}),(0,R.jsx)(`span`,{children:`·`}),(0,R.jsxs)(`span`,{children:[c.length,` models`]}),(0,R.jsx)(`span`,{children:`·`}),(0,R.jsxs)(`span`,{children:[J(s?.requests??0),` req`]})]})]}),n?(0,R.jsx)(`div`,{className:`mt-5 flex flex-col gap-5`,children:t&&!e?(0,R.jsx)(`p`,{className:`py-9 text-center text-text-tertiary text-caption`,children:`Loading activity…`}):e?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`div`,{className:`grid grid-cols-4 gap-5 max-wide:grid-cols-2 max-narrow:grid-cols-1`,children:[(0,R.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-panel border border-inner-border bg-surface-2 px-7 py-6`,children:[(0,R.jsx)(`span`,{className:`text-text-tertiary font-mono text-micro uppercase tracking-label`,children:`Requests`}),(0,R.jsx)(`span`,{className:`font-head text-display font-semibold tracking-tight`,children:J(s?.requests??0)}),(0,R.jsxs)(`span`,{className:`text-text-secondary text-micro`,children:[J(s?.errors??0),` errors`]})]}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-panel border border-inner-border bg-surface-2 px-7 py-6`,children:[(0,R.jsx)(`span`,{className:`text-text-tertiary font-mono text-micro uppercase tracking-label`,children:`Tokens`}),(0,R.jsx)(`span`,{className:`font-head text-display font-semibold tracking-tight`,children:o(s?.totalTokens??0)}),(0,R.jsx)(`span`,{className:`text-text-secondary text-micro`,children:`all time`})]}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-panel border border-inner-border bg-surface-2 px-7 py-6`,children:[(0,R.jsx)(`span`,{className:`text-text-tertiary font-mono text-micro uppercase tracking-label`,children:`Last hour`}),(0,R.jsx)(`span`,{className:`font-head text-display font-semibold tracking-tight`,children:J(s?.lastHourRequests??0)}),(0,R.jsx)(`span`,{className:`text-text-secondary text-micro`,children:`requests in 60 min`})]}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-panel border border-inner-border bg-surface-2 px-7 py-6`,children:[(0,R.jsx)(`span`,{className:`text-text-tertiary font-mono text-micro uppercase tracking-label`,children:`Models`}),(0,R.jsx)(`span`,{className:`font-head text-display font-semibold tracking-tight`,children:c.length}),(0,R.jsx)(`span`,{className:`text-text-secondary text-micro`,children:`in use`})]})]}),(0,R.jsx)(be,{hourly:e.hourly}),(0,R.jsxs)(`section`,{"aria-label":`Top models`,children:[(0,R.jsx)(`div`,{className:`flex items-center justify-between gap-6`,children:(0,R.jsxs)(`h3`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-badge font-bold tracking-label transition-colors duration-150`,children:[(0,R.jsx)(M,{size:13,"aria-hidden":`true`}),` TOP MODELS`]})}),c.length===0?(0,R.jsx)(`p`,{className:`py-9 text-center text-text-tertiary text-caption`,children:`No model traffic yet.`}):(0,R.jsx)(`div`,{className:z,children:(0,R.jsxs)(`table`,{className:B,children:[(0,R.jsx)(`thead`,{children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{scope:`col`,"aria-label":`Rank`}),(0,R.jsx)(`th`,{scope:`col`,children:`Model`}),(0,R.jsx)(`th`,{scope:`col`,className:`text-right`,children:`Req`}),(0,R.jsx)(`th`,{scope:`col`,className:`text-right`,title:`Average output tokens per second`,children:`Avg t/s`}),(0,R.jsx)(`th`,{scope:`col`,className:`text-right`,title:`Average time to first token`,children:`TTFT`}),(0,R.jsx)(`th`,{scope:`col`,children:`Tokens`})]})}),(0,R.jsx)(`tbody`,{children:c.map((e,t)=>(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`td`,{className:`w-13 font-mono text-micro text-text-tertiary`,children:t+1}),(0,R.jsx)(`td`,{children:(0,R.jsx)(`span`,{className:`flex min-w-0 flex-col gap-1 [&_code]:overflow-hidden [&_code]:text-ellipsis [&_code]:whitespace-nowrap [&_code]:text-text-primary [&_code]:text-caption [&_span]:font-mono [&_span]:text-micro [&_span]:text-text-tertiary`,children:(0,R.jsx)(`code`,{title:e.modelId,children:e.modelId})})}),(0,R.jsx)(`td`,{className:`text-right`,children:J(e.requests)}),(0,R.jsx)(`td`,{className:`text-right`,children:Y(e.avgTokensPerSec)}),(0,R.jsx)(`td`,{className:`text-right`,children:X(e.avgTtfbMs)}),(0,R.jsx)(`td`,{children:(0,R.jsx)(xe,{value:e.tokens,max:d,label:o(e.tokens)})})]},e.modelId))})]})})]}),(0,R.jsxs)(`section`,{"aria-label":`Client IPs`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-6`,children:[(0,R.jsxs)(`h3`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-badge font-bold tracking-label transition-colors duration-150`,children:[(0,R.jsx)(v,{size:13,"aria-hidden":`true`}),` CLIENT IPS`]}),(0,R.jsx)(j,{checked:i,onChange:a,label:`Show inactive`,"aria-label":`Show inactive client addresses`,className:`shrink-0`})]}),u.length===0?(0,R.jsx)(`p`,{className:`py-9 text-center text-text-tertiary text-caption`,children:`No client addresses recorded yet.`}):(0,R.jsx)(`div`,{className:z,children:(0,R.jsxs)(`table`,{className:B,children:[(0,R.jsx)(`thead`,{children:(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`th`,{scope:`col`,children:`Address`}),(0,R.jsx)(`th`,{scope:`col`,children:`Client`}),(0,R.jsx)(`th`,{scope:`col`,className:`text-right`,children:`Req`}),(0,R.jsx)(`th`,{scope:`col`,children:`Tokens`}),(0,R.jsx)(`th`,{scope:`col`,children:`Last seen`}),(0,R.jsx)(`th`,{scope:`col`,children:`Status`})]})}),(0,R.jsx)(`tbody`,{children:u.map(e=>(0,R.jsxs)(`tr`,{children:[(0,R.jsx)(`td`,{children:(0,R.jsx)(`code`,{children:e.ip})}),(0,R.jsx)(`td`,{children:e.clientType?(0,R.jsx)(`span`,{className:`inline-block max-w-full overflow-hidden text-ellipsis whitespace-nowrap rounded-pill border border-inner-border bg-surface-2 px-3 py-px font-mono text-micro text-text-secondary`,children:e.clientType}):(0,R.jsx)(`span`,{className:`inline-block max-w-full overflow-hidden text-ellipsis whitespace-nowrap rounded-pill border border-inner-border bg-surface-2 px-3 py-px font-mono text-micro italic text-text-tertiary`,children:`unknown`})}),(0,R.jsx)(`td`,{className:`text-right`,children:J(e.requests)}),(0,R.jsx)(`td`,{children:(0,R.jsx)(xe,{value:e.requests,max:f,label:o(e.tokens)})}),(0,R.jsx)(`td`,{children:Z(e.lastSeenAt)}),(0,R.jsx)(`td`,{children:e.active?(0,R.jsx)(`span`,{className:`inline-block whitespace-nowrap rounded-pill border border-inner-border bg-surface-2 px-3 py-px font-mono text-micro text-text-secondary`,title:`Made a request in the last 24 hours`,children:`Active`}):(0,R.jsx)(`span`,{className:`inline-block whitespace-nowrap rounded-pill border border-inner-border bg-surface-2 px-3 py-px font-mono text-micro italic text-text-tertiary`,title:`No request in the last 24 hours`,children:`Inactive`})})]},e.ip))})]})})]})]}):(0,R.jsx)(`p`,{className:`py-9 text-center text-text-tertiary text-caption`,children:`Activity is unavailable right now.`})}):null]})}var Ce=`cartethyia-share-keys`,$=`issued-keys`,we=1;function Te(){return new Promise((e,t)=>{if(typeof indexedDB>`u`){t(Error(`IndexedDB is unavailable`));return}let n=indexedDB.open(Ce,we);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains($)||n.result.createObjectStore($)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??Error(`Could not open share-key storage`))})}function Ee(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.key==`string`&&typeof t.keyId==`string`&&typeof t.keyPrefix==`string`&&typeof t.createdAt==`string`}async function De(e){let t=await Te();return await new Promise((n,r)=>{let i=t.transaction($,`readonly`).objectStore($).get(e);i.onsuccess=()=>n(Ee(i.result)?i.result:null),i.onerror=()=>r(i.error??Error(`Could not read share-key storage`))})}async function Oe(e,t){let n=await Te();await new Promise((r,i)=>{let a=n.transaction($,`readwrite`);a.objectStore($).put(t,e),a.oncomplete=()=>r(),a.onerror=()=>i(a.error??Error(`Could not save share key in this browser`)),a.onabort=()=>i(a.error??Error(`Could not save share key in this browser`))})}async function ke(e){let t=await Te();await new Promise((n,r)=>{let i=t.transaction($,`readwrite`);i.objectStore($).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error??Error(`Could not clear share-key storage`)),i.onabort=()=>r(i.error??Error(`Could not clear share-key storage`))})}function Ae(e){return typeof e.error==`string`?e.error:e.error?.message??e.message??`Unable to generate an API key.`}var je={link_revoked:`Key revoked`,link_expired:`Link expired`,link_disabled:`Key paused`,link_not_found:`Link not available`,link_expired_or_used:`Link expired`,key_unavailable:`Key unavailable`};function Me(e){let t=e.replace(/\/$/,``);return t.slice(t.lastIndexOf(`/`)+1)}var Ne=20;function Pe({id:e,label:t,info:n,canProbe:r,probing:i,onProbe:s,result:c}){let l=(n?.capabilities?.input??[]).some(e=>e===`image`||e===`vision`);return(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2.5 rounded-control border border-inner-border bg-surface-2 p-3`,children:[(0,R.jsxs)(`div`,{className:`flex min-w-0 items-start gap-2`,children:[(0,R.jsx)(`span`,{className:`inline-flex size-13 shrink-0 items-center justify-center rounded-lg bg-teal-soft text-teal`,"aria-hidden":`true`,children:(0,R.jsx)(a,{size:14})}),(0,R.jsx)(`span`,{className:`min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-caption font-semibold leading-chat text-text-primary`,title:e,children:t})]}),(0,R.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5 text-text-secondary text-badge`,children:[(0,R.jsxs)(`span`,{className:`inline-flex gap-1 [&>span]:inline-flex`,children:[n?.reasoning?(0,R.jsx)(`span`,{title:`Reasoning`,"aria-label":`Reasoning`,className:`text-purple`,children:(0,R.jsx)(o,{size:12})}):null,l?(0,R.jsx)(`span`,{title:`Vision`,"aria-label":`Vision`,className:`text-status-info`,children:(0,R.jsx)(b,{size:12})}):null,n?.toolCall?(0,R.jsx)(`span`,{title:`Tool calling`,"aria-label":`Tool calling`,className:`text-orange`,children:(0,R.jsx)(C,{size:12})}):null,n?.webSearch?(0,R.jsx)(`span`,{title:`Web search`,"aria-label":`Web search`,className:`text-teal`,children:(0,R.jsx)(v,{size:12})}):null]}),(0,R.jsxs)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis whitespace-nowrap`,children:[n?.contextLength==null?(0,R.jsx)(`span`,{title:A,className:`cursor-help`,children:`n/a ctx`}):`${D(n.contextLength)} ctx`,` · `,n?.maxOutputTokens==null?(0,R.jsx)(`span`,{title:A,className:`cursor-help`,children:`n/a out`}):`${D(n.maxOutputTokens)} out`]})]}),c?.ok?(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4 font-mono text-badge text-text-secondary [&>strong]:font-sans [&>strong]:text-green`,role:`status`,children:[(0,R.jsx)(`strong`,{children:`OK`}),(0,R.jsxs)(`span`,{children:[`TTFT `,f(c.ttftMs)]}),(0,R.jsxs)(`span`,{children:[`Done `,f(c.totalMs)]})]}):null,(0,R.jsxs)(`div`,{className:`mt-auto grid min-w-0 grid-cols-2 items-center gap-4 [&>*]:w-full [&>*]:min-w-0 [&_.btn]:w-full [&_.btn]:min-w-0`,children:[r?(0,R.jsx)(h,{variant:`secondary`,size:`sm`,icon:c?.ok?(0,R.jsx)(`span`,{className:`inline-flex text-green`,children:(0,R.jsx)(ie,{size:13})}):(0,R.jsx)(u,{size:13}),loading:i,disabled:i,onClick:()=>s(e),title:c?.ok?`Last test passed in ${f(c.totalMs)} — click to re-test`:c?`Last test failed${c.status===null?``:` with HTTP ${c.status}`} — click to re-test`:`Test this model using the shared API key`,children:i?`Testing…`:c?.ok?`Done ${f(c.totalMs)}`:c?`Failed${c.status===null?``:` ${c.status}`}`:`Test`}):null,(0,R.jsx)(x,{value:e,size:`sm`,variant:`secondary`,label:`Copy`,copiedLabel:`Copied`,"aria-label":`Copy ${e}`,title:`Copy ${e}`})]})]})}function Fe(){let e=typeof window>`u`?`/share`:window.location.pathname.replace(/\/$/,``),t=`${e}/data`,n=`${e}/issue`,r=typeof window>`u`?``:Me(e),i=typeof window>`u`?``:window.location.origin,o=he(t),[u,d]=(0,N.useState)(null),[f,p]=(0,N.useState)(null),[y,ie]=(0,N.useState)(``),[b,S]=(0,N.useState)(null),[C,E]=(0,N.useState)(!1),[D,O]=(0,N.useState)(null),[k,A]=(0,N.useState)(()=>new Set),[j,M]=(0,N.useState)(()=>new Map),P=(0,N.useRef)(new Map),F=(0,N.useRef)(null),[I,L]=(0,N.useState)(()=>g(`dark`)),[z,B]=(0,N.useState)(!1),[V,H]=(0,N.useState)(`raw`);(0,N.useEffect)(()=>{let e=()=>B(window.scrollY>24);return e(),window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[]),(0,N.useEffect)(()=>{document.title=`Cartethyia — Shared access`,L(g(`dark`)),te(g(`dark`))},[]);let U=o.data?.kind===`enroll`?o.data:null;(0,N.useEffect)(()=>{let e=!0;if(d(null),p(null),S(null),!r||!U){o.error&&ke(r).catch(()=>void 0);return}return De(r).then(t=>{e&&t&&(p(t),d(null))}).catch(()=>{e&&S(`This browser could not read the stored key. Issue a new key only if this enrollment permits one.`)}),()=>{e=!1}},[r,U,o.error]);let W=async()=>{E(!0),O(null),S(null);try{let e=await fetch(n,{method:`POST`,credentials:`same-origin`,cache:`no-store`,referrerPolicy:`no-referrer`,headers:{"content-type":`application/json`},body:JSON.stringify(y.trim()?{nameHint:y.trim().slice(0,Ne)}:{})}),t=await e.json();if(!e.ok){O(Ae(t));return}let i=t;if(p(null),d(i),!r)return;try{await Oe(r,{key:i.key,keyId:i.keyId,keyPrefix:i.keyPrefix,createdAt:i.createdAt}),p({key:i.key,keyId:i.keyId,keyPrefix:i.keyPrefix,createdAt:i.createdAt}),d(null)}catch{S(`Your key was issued, but this browser could not save it. Copy it now: refreshing will not restore it.`)}}catch{O(`Unable to reach the Cartethyia gateway. Please try again.`)}finally{E(!1)}},G=f??u,K=o.data,q=K?.kind===`handoff`?!!K.key:!!G?.key,J=()=>{let e=F.current;e&&(e.scrollIntoView({behavior:`smooth`,block:`center`}),e.focus({preventScroll:!0}))},Y=async e=>{let t=K?.kind===`handoff`?K.key:(f??u)?.key;if(k.has(e))return;if(!t){_.error(`Create your API key first`,`Generate a key in the API key panel before testing a model.`),J();return}let n=new AbortController;P.current.set(e,n),A(t=>new Set(t).add(e));let r=performance.now(),a=null;try{let o=await fetch(`${i}/v1/chat/completions`,{method:`POST`,headers:{Authorization:`Bearer ${t}`,"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({model:e,messages:[{role:`user`,content:`Reply with exactly: OK`}],stream:!0,max_tokens:16}),cache:`no-store`,referrerPolicy:`no-referrer`,signal:n.signal});if(!o.ok||!o.body){M(t=>new Map(t).set(e,{ok:!1,status:o.status})),_.error(`Model probe failed`,`Request failed with HTTP ${o.status}`);return}let s=o.body.getReader();try{for(;;){let e=await s.read();if(e.value&&e.value.byteLength>0&&a===null&&(a=performance.now()),e.done)break}}finally{s.releaseLock()}let c=Math.round(performance.now()-r),l=Math.round((a??performance.now())-r);M(t=>new Map(t).set(e,{ok:!0,ttftMs:l,totalMs:c})),_.success(`Model test complete`,`${e} · TTFT ${l} ms · Done ${c} ms`)}catch(t){t instanceof DOMException&&t.name===`AbortError`||(M(t=>new Map(t).set(e,{ok:!1,status:null})),_.error(`Model probe failed`,t instanceof Error?t.message:`The request could not be completed.`))}finally{P.current.get(e)===n&&P.current.delete(e),A(t=>{let n=new Set(t);return n.delete(e),n})}};(0,N.useEffect)(()=>()=>{for(let e of P.current.values())e.abort()},[]);let X=!!U?.canIssue&&!G,Z=K?.kind===`handoff`?K.key:null,Q=new Map;for(let e of K?.models??[]){let t=e.indexOf(`/`),n=t>0?e.slice(0,t):`Other`,r=Q.get(n)??[];r.push(e),Q.set(n,r)}return(0,R.jsx)(ge,{path:`${e}/stats/stream`,children:(0,R.jsxs)(`div`,{className:`min-h-screen text-text-primary font-sans`,children:[(0,R.jsx)(`div`,{className:`share-backdrop`,"aria-hidden":`true`}),(0,R.jsx)(`header`,{className:`share-header`,"data-scrolled":z,children:(0,R.jsxs)(`div`,{className:`share-header-inner`,"data-scrolled":z,children:[(0,R.jsxs)(`a`,{className:`inline-flex items-center gap-5 font-head text-lead tracking-tight text-text-primary no-underline`,href:`/`,children:[(0,R.jsx)(`span`,{className:`grid size-17 place-items-center overflow-hidden rounded-control border border-inner-border bg-accent-soft text-accent`,"aria-hidden":`true`,children:(0,R.jsx)(`img`,{className:`block size-full object-cover`,src:`/assets/brand/favicon.jpg`,alt:``,width:34,height:34})}),(0,R.jsx)(`b`,{children:`Cartethyia`})]}),(0,R.jsxs)(`div`,{className:`inline-flex items-center gap-4 max-narrow:gap-3`,children:[(0,R.jsx)(oe,{className:`max-narrow:[&_.github-badge-metric]:hidden max-narrow:[&_.github-badge]:px-2.5`}),(0,R.jsx)(`button`,{type:`button`,className:`grid size-17 cursor-pointer place-items-center rounded-pill border border-inner-border bg-surface-2 text-text-secondary hover:border-border-strong hover:text-text-primary focus-visible:outline-2 focus-visible:outline-focus-ring focus-visible:outline-offset-2`,onClick:()=>{let e=m(I)?`light`:`dark`;L(e),ne(e)},"aria-label":`Toggle theme`,"aria-pressed":m(I),title:m(I)?`Switch to light mode`:`Switch to dark mode`,children:m(I)?(0,R.jsx)(ee,{size:15}):(0,R.jsx)(re,{size:15})}),(0,R.jsxs)(`a`,{href:`/`,className:`inline-flex min-h-17 items-center gap-3 rounded-pill border border-inner-border bg-surface-2 px-6 text-badge font-semibold text-text-secondary no-underline hover:border-border-strong hover:text-text-primary max-narrow:px-5`,children:[(0,R.jsx)(ae,{size:13,"aria-hidden":`true`}),` Home`]})]})]})}),(0,R.jsx)(`main`,{className:`relative z-1 mx-auto flex w-full max-w-480 flex-col gap-8 px-12 pb-24 pt-40 max-narrow:gap-6 max-narrow:px-6 max-narrow:pb-16 max-narrow:pt-36`,children:o.loading?(0,R.jsx)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:(0,R.jsx)(w,{children:(0,R.jsx)(ce,{label:`Loading enrollment policy…`})})}):o.error?(0,R.jsx)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:(0,R.jsx)(w,{children:(0,R.jsx)(se,{title:je[o.code??``]??`Link not available`,message:o.error,onRetry:()=>window.location.reload()})})}):K?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-7 max-sm:p-5`,children:[(0,R.jsxs)(`p`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-micro font-bold tracking-label leading-normal`,children:[K.kind===`handoff`?(0,R.jsx)(ue,{size:13,"aria-hidden":`true`}):(0,R.jsx)(fe,{size:13,"aria-hidden":`true`}),K.kind===`handoff`?`SHARED ACCESS / KEY`:`SHARED ACCESS / ENROLLMENT`]}),(0,R.jsx)(`h1`,{children:K.name||`Shared API access`}),K.kind===`handoff`?(0,R.jsx)(`p`,{className:`mt-2.5 text-text-secondary text-body leading-loose`,children:`The API key for this gateway, provided through a share link. It is subject to the limits below.`}):null,(0,R.jsx)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2`,children:K.expiresAt?(0,R.jsxs)(`span`,{className:`inline-flex min-h-7 items-center gap-1.5 rounded-chip border border-inner-border bg-surface-2 px-2.5 py-1 text-text-secondary font-mono text-micro leading-snug`,children:[(0,R.jsx)(l,{size:12,"aria-hidden":`true`}),`Link expires `,new Date(K.expiresAt).toLocaleString()]}):null}),(0,R.jsx)(_e,{policy:K})]}),(0,R.jsxs)(`div`,{className:`grid grid-cols-2 gap-8 max-md:grid-cols-1`,children:[(0,R.jsxs)(T,{surface:`muted`,className:`flex min-w-0 flex-col items-start gap-6 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:[(0,R.jsxs)(`h2`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-micro font-bold tracking-label leading-normal`,children:[(0,R.jsx)(v,{size:13,"aria-hidden":`true`}),` BASE URL`]}),(0,R.jsxs)(`div`,{className:`flex w-full min-w-0 items-center gap-4 [&>code]:block [&>code]:min-w-0 [&>code]:flex-1 [&>code]:overflow-hidden [&>code]:text-ellipsis [&>code]:whitespace-nowrap [&>code]:rounded-inset [&>code]:border [&>code]:border-inner-border [&>code]:bg-code-surface [&>code]:p-5 [&>code]:text-text-primary [&>code]:font-mono [&>code]:text-caption [&>code]:leading-normal [&>button]:shrink-0`,children:[(0,R.jsxs)(`code`,{children:[i,`/v1`]}),(0,R.jsx)(x,{value:`${i}/v1`,size:`sm`,variant:`secondary`,label:`Copy URL`,copiedLabel:`Copied`,"aria-label":`Copy Base URL`})]}),(0,R.jsx)(`p`,{className:`text-caption leading-loose text-text-secondary`,children:`Point your SDK, Opencode, Claude Code, Droid, and any other CLI`})]}),(0,R.jsx)(`div`,{ref:F,tabIndex:-1,children:(0,R.jsxs)(T,{surface:`muted`,className:`flex min-w-0 flex-col items-start gap-6 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:[(0,R.jsxs)(`h2`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-micro font-bold tracking-label leading-normal`,children:[(0,R.jsx)(ue,{size:13,"aria-hidden":`true`}),` YOUR API KEY`]}),K.kind===`handoff`?Z?(0,R.jsxs)(`div`,{className:`flex w-full min-w-0 flex-col gap-5`,role:`status`,children:[(0,R.jsx)(`p`,{className:`font-mono text-micro font-bold tracking-label text-orange`,children:`REVEALED BY THE LINK OWNER`}),(0,R.jsx)(`code`,{className:`block min-w-0 flex-1 overflow-hidden rounded-inset border border-inner-border bg-code-surface p-5 font-mono text-caption leading-normal text-text-primary [overflow-wrap:anywhere] [user-select:all]`,children:Z}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-5 [&>span]:font-mono [&>span]:text-micro [&>span]:text-text-tertiary`,children:[(0,R.jsx)(x,{value:Z,size:`sm`,variant:`primary`,label:`Copy key`,copiedLabel:`Copied`}),(0,R.jsx)(h,{variant:`secondary`,size:`sm`,onClick:()=>pe(`cartethyia-api-key.txt`,`Cartethyia API key\n\n${Z}\n\nKeep this secret.\n`,`text/plain;charset=utf-8`),children:`Save this key`}),(0,R.jsxs)(`span`,{children:[`Prefix `,K.keyPrefix??`—`]})]}),(0,R.jsx)(`p`,{className:`text-caption leading-loose text-text-secondary`,children:`This link reveals the key itself, so anyone holding the URL can read it. Keep the URL private; the link owner regenerates it to replace this key.`})]}):(0,R.jsx)(`p`,{className:`text-caption leading-normal text-text-secondary`,children:`This link can no longer reveal its key. Ask the link owner to regenerate it.`}):G?(0,R.jsxs)(`div`,{className:`flex w-full min-w-0 flex-col gap-5`,role:`status`,children:[(0,R.jsx)(`p`,{className:`font-mono text-micro font-bold tracking-wide text-orange`,children:`GENERATED ONCE · COPY AND KEEP IT`}),(0,R.jsx)(`code`,{className:`block min-w-0 flex-1 overflow-hidden rounded-inset border border-inner-border bg-code-surface p-5 font-mono text-caption leading-normal text-text-primary [overflow-wrap:anywhere] [user-select:all]`,children:G.key}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-5 [&>span]:font-mono [&>span]:text-micro [&>span]:text-text-tertiary`,children:[(0,R.jsx)(x,{value:G.key,size:`sm`,variant:`primary`,label:`Copy key`,copiedLabel:`Copied`}),(0,R.jsx)(h,{variant:`secondary`,size:`sm`,onClick:()=>pe(`cartethyia-api-key.txt`,`Cartethyia API key\n\n${G.key}\n\nKeep this secret.\n`,`text/plain;charset=utf-8`),children:`Save this key`}),(0,R.jsxs)(`span`,{children:[`Key ID `,G.keyId.slice(0,12),`…`]})]}),(0,R.jsx)(`p`,{className:`text-caption leading-loose text-text-secondary`,children:`Saved in this browser while this enrollment link remains valid. It is not shown again from another browser, and an expired, revoked, or unavailable link does not restore a local copy.`})]}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-caption leading-normal text-text-secondary`,children:X?`Issue a personal key to use the shared endpoint.`:`No key is available in this browser.`}),X?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`label`,{className:`flex w-full flex-col gap-1.5 text-text-secondary text-micro font-bold [&>input]:w-full [&>input]:min-h-11 [&>input]:rounded-control [&>input]:border [&>input]:border-inner-border [&>input]:bg-surface-1 [&>input]:px-3 [&>input]:text-text-primary [&>input]:text-body [&>input]:font-medium [&>input]:focus-visible:outline-2 [&>input]:focus-visible:outline-focus-ring [&>input]:focus-visible:outline-offset-2`,children:[(0,R.jsx)(`span`,{children:`Your name`}),(0,R.jsx)(`input`,{type:`text`,value:y,required:!0,maxLength:Ne,autoComplete:`nickname`,onChange:e=>ie(e.target.value)}),(0,R.jsx)(`span`,{className:`text-text-tertiary text-micro font-normal leading-normal`,children:`Shown on your key (best kept to ~5 letters) — the gateway appends its own code.`})]}),(0,R.jsx)(`p`,{className:`-mt-3 text-text-tertiary text-micro font-normal leading-normal`,children:`Enter your name to generate a personal key.`}),(0,R.jsx)(h,{variant:`primary`,size:`sm`,loading:C,disabled:C||!y.trim(),onClick:()=>void W(),children:C?`Generating…`:`Generate API Key`})]}):null]}),K.kind===`enroll`&&!X&&!G?(0,R.jsx)(`p`,{role:`status`,className:`w-full rounded-inset border border-orange-soft bg-orange-soft px-5 py-4 text-badge leading-normal text-orange`,children:D??`This enrollment link is not currently accepting key requests.`}):null,D&&X?(0,R.jsx)(`p`,{role:`alert`,className:`form-error`,children:D}):null,b?(0,R.jsx)(`p`,{role:`alert`,className:`form-error`,children:b}):null]})})]}),K.sharePopup.enabled&&K.sharePopup.hasImage?(0,R.jsx)(T,{surface:`muted`,className:`min-w-0 overflow-hidden border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150`,children:(0,R.jsxs)(`div`,{className:`grid grid-cols-qris gap-0 max-sm:grid-cols-qris-compact`,children:[(0,R.jsx)(`div`,{className:`relative flex items-center justify-center bg-white p-4`,children:(0,R.jsx)(`img`,{src:`/share/`+r+`/popup-image`,alt:K.sharePopup.title??`Support QR code`,className:`block w-full max-w-qris-badge rounded-control`})}),(0,R.jsxs)(`div`,{className:`flex flex-col justify-center gap-5 p-6 max-sm:p-4 max-sm:gap-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsxs)(`p`,{className:`inline-flex items-center gap-2 text-text-tertiary font-mono text-micro font-bold tracking-label leading-normal mb-3`,children:[(0,R.jsx)(s,{size:12,"aria-hidden":`true`,className:`text-orange`}),` SUPPORT`]}),K.sharePopup.title?(0,R.jsx)(`h2`,{className:`font-head text-title font-semibold leading-snug wrap-anywhere max-sm:text-lead`,children:K.sharePopup.title}):null,K.sharePopup.body?(0,R.jsx)(`p`,{className:`mt-2 text-body leading-loose whitespace-pre-wrap text-text-secondary wrap-anywhere max-sm:text-caption max-sm:leading-normal`,children:K.sharePopup.body}):null]}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-3`,children:(0,R.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-2 rounded-pill border border-inner-border bg-surface-2 px-5 py-2.5 text-caption font-semibold text-text-primary hover:brightness-110 focus-visible:outline-2 focus-visible:outline-focus-ring focus-visible:outline-offset-2 transition-[filter]`,onClick:async()=>{try{let e=await fetch(`/share/`+r+`/popup-image`);if(!e.ok)throw Error(`fetch failed`);let t=await e.arrayBuffer(),n=e.headers.get(`content-type`)??`image/png`,i=n.includes(`jpeg`)?`jpg`:n.split(`/`)[1]??`png`;me(`qris-support.`+i,new Uint8Array(t),n)}catch{_.error(`Could not download the image.`)}},children:[(0,R.jsx)(c,{size:14,"aria-hidden":`true`}),`Download QR`]})}),(0,R.jsxs)(`div`,{className:`border-t border-inner-border pt-4 max-sm:pt-3 flex flex-col gap-1`,children:[(0,R.jsxs)(`p`,{className:`text-badge text-text-tertiary`,children:[(0,R.jsx)(`span`,{className:`font-semibold text-text-secondary`,children:`Gateway`}),` `,K.name]}),(0,R.jsx)(`p`,{className:`text-badge text-text-tertiary max-sm:hidden`,children:`Scan with any QRIS-compatible banking or e-wallet app.`})]})]})]})}):null,K.notes.title||K.notes.subtitle||K.notes.body?(0,R.jsxs)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:[(0,R.jsxs)(`h2`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-micro font-bold tracking-label leading-normal`,children:[(0,R.jsx)(de,{size:13,"aria-hidden":`true`}),` NOTES`]}),K.notes.title?(0,R.jsx)(`h3`,{className:`mt-5 font-head text-title font-semibold`,children:K.notes.title}):null,K.notes.subtitle?(0,R.jsx)(`p`,{className:`mt-3 text-caption font-semibold text-text-secondary`,children:K.notes.subtitle}):null,K.notes.body?(0,R.jsx)(`p`,{className:`mt-5 text-body leading-loose whitespace-pre-wrap text-text-secondary`,children:K.notes.body}):null]}):null,(0,R.jsx)(ve,{}),(0,R.jsxs)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-6`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsxs)(`p`,{className:`inline-flex items-center gap-3 text-text-secondary font-mono text-micro font-bold tracking-label leading-normal`,children:[(0,R.jsx)(a,{size:13,"aria-hidden":`true`}),` MODEL ACCESS`]}),(0,R.jsx)(`h2`,{className:`mt-3 font-head text-lead font-semibold tracking-tight`,children:`Allowed models`})]}),(0,R.jsxs)(`div`,{className:`inline-flex items-center gap-4`,children:[(0,R.jsxs)(`div`,{className:`inline-flex rounded-pill border border-inner-border bg-surface-2 p-1`,role:`tablist`,"aria-label":`Allowed model layout`,children:[(0,R.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":V===`raw`,className:`min-h-13 cursor-pointer rounded-pill border-0 bg-transparent px-5 font-mono text-micro font-bold tracking-label text-text-secondary uppercase hover:text-text-primary${V===`raw`?` bg-accent text-accent-foreground`:``}`,onClick:()=>H(`raw`),children:`Raw`}),(0,R.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":V===`grouped`,className:`min-h-13 cursor-pointer rounded-pill border-0 bg-transparent px-5 font-mono text-micro font-bold tracking-label text-text-secondary uppercase hover:text-text-primary${V===`grouped`?` bg-accent text-accent-foreground`:``}`,onClick:()=>H(`grouped`),children:`Grouped`})]}),K.models.length?(0,R.jsx)(x,{value:K.models.join(`, `),size:`sm`,variant:`secondary`,label:`Copy all`,copiedLabel:`Copied`,"aria-label":`Copy all granted models`}):null]})]}),Q.size?V===`raw`?(0,R.jsx)(`div`,{className:`mt-8 grid grid-cols-3 gap-4 max-wide:grid-cols-2 max-narrow:grid-cols-1`,children:K.models.map(e=>(0,R.jsx)(Pe,{id:e,label:e,info:K.modelInfo?.[e],canProbe:q,probing:k.has(e),onProbe:Y,result:j.get(e)},e))}):(0,R.jsx)(`div`,{className:`mt-8 grid grid-cols-2 gap-6 min-extra-wide:grid-cols-3 max-medium:grid-cols-1`,children:[...Q].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>(0,R.jsxs)(`section`,{className:`min-w-0 overflow-hidden rounded-panel border border-inner-border bg-surface-2`,"aria-label":`${e} models`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-6 border-b border-inner-border px-6 py-5`,children:[(0,R.jsx)(`h3`,{className:`font-mono text-badge font-bold text-text-primary wrap-anywhere`,children:e}),(0,R.jsx)(`span`,{className:`rounded-pill bg-accent-soft px-4 py-1 font-mono text-micro font-bold text-accent`,children:t.length})]}),(0,R.jsx)(`div`,{className:`mt-0 grid max-h-150 grid-cols-1 gap-3 overflow-y-auto p-4`,children:t.map(t=>(0,R.jsx)(Pe,{id:t,label:e===`Other`?t:t.slice(e.length+1),info:K.modelInfo?.[t],canProbe:q,probing:k.has(t),onProbe:Y,result:j.get(t)},t))})]},e))}):(0,R.jsx)(`p`,{className:`mt-8 rounded-control border border-inner-border bg-surface-2 p-7 text-caption text-text-secondary`,children:`Model access follows the share template policy.`}),K.modelPrefix?(0,R.jsxs)(`p`,{className:`mt-6 text-badge leading-normal text-text-secondary wrap-anywhere`,children:[`Required model prefix: `,K.modelPrefix]}):null]})]}):(0,R.jsx)(T,{surface:`muted`,className:`min-w-0 border-glass-border-2 bg-glass-bg backdrop-blur-md backdrop-saturate-150 p-5`,children:(0,R.jsx)(w,{children:(0,R.jsx)(le,{title:`No enrollment data`,message:`This enrollment link did not return usable policy data.`})})})})]})})}var Ie=document.getElementById(`root`);if(Ie===null)throw Error(`Share root element is missing`);(0,P.createRoot)(Ie).render((0,R.jsxs)(N.StrictMode,{children:[(0,R.jsx)(Fe,{}),(0,R.jsx)(d,{position:`top-right`,offset:{top:`1rem`,right:`1rem`},mobileOffset:{top:`1rem`,left:`1rem`,right:`1rem`},visibleToasts:2,toastOptions:{className:`toast-surface select-text`,style:{background:`var(--glass-bg-2)`,border:`1px solid var(--glass-border-2)`,color:`var(--text-primary)`,fontSize:`12.5px`},classNames:{title:`select-text`,description:`select-text`},actionButtonStyle:{background:`var(--accent)`,color:`var(--accent-foreground)`},cancelButtonStyle:{background:`var(--surface-muted)`,color:`var(--text-primary)`}}})]}));
@@ -1 +1 @@
1
- import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{a as i,l as a,t as o}from"./app-wvwCi4Eh.js";import{i as s,n as c,r as l,t as u}from"./terminal-0_IjPWTk.js";import{t as d}from"./arrow-right-Dl5yKnp8.js";import{n as f,r as p,t as m}from"./github-badge-Orjuzemr.js";import{t as h}from"./log-in-BmRjy60c.js";import{t as g}from"./message-circle-CCxGwRvv.js";import{t as _}from"./shield-check-DVS0Foqh.js";import{t as v}from"./use-reduced-motion-C4B0R6Sz.js";var y=e(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),b=a(),x=t(n(),1),S=r(),C=`/`,w=`/console`,T={night:{"--story-accent":`var(--color-story-night)`},core:{"--story-accent":`var(--color-story-core)`},blossom:{"--story-accent":`var(--color-story-blossom)`},voices:{"--story-accent":`var(--color-story-voices)`},red:{"--story-accent":`var(--color-story-red)`},denial:{"--story-accent":`var(--color-story-denial)`},shore:{"--story-accent":`var(--color-story-shore)`}},E=e=>`${C}assets/story/${e}`,D=e=>e.toLowerCase().replace(/\b\w/g,e=>e.toUpperCase()),O=e=>{let t=k[e+1];return t===void 0?`Back to ${k[0]?.label??`the beginning`}`:`Go to ${D(t.location)}`},k=[{id:`blessed-maiden`,number:`01`,label:`The Blessed Maiden`,location:`THE FIRST CROSSING`,theme:`night`,title:`A single signal enters the unknown.`,description:`Every client begins with one request and a question: where should it go? Cartethyia gives that signal a reliable gateway — self-hosted, authenticated, and ready for the crossing.`,image:E(`fleurdelys_plus.webp`),imageAlt:`The Blessed Maiden beneath a luminous blue sky`,signals:[{label:`The first crossing`,value:`OPEN`,icon:`network`},{label:`The chosen vessel`,value:`YOURS`,icon:`shield`},{label:`The gate`,value:`ALIGNED`,icon:`sparkles`}]},{id:`resonant-core`,number:`02`,label:`The Resonant Core`,location:`THE ROUTING SANCTUM`,theme:`core`,title:`The route becomes the power.`,description:`One surface can speak to many providers. Cartethyia translates protocols, balances targets, and keeps each request moving through the right vessel — even when the first path goes quiet.`,image:E(`cartethyia-god.webp`),imageAlt:`Cartethyia surrounded by a celestial blue routing field`,signals:[{label:`The many voices`,value:`30+`,icon:`network`},{label:`The bridge`,value:`ALIGNED`,icon:`terminal`},{label:`The fallback`,value:`AWARE`,icon:`activity`}]},{id:`pink-blossom`,number:`03`,label:`The Pink Blossom Calm`,location:`THE QUIET CONTROL`,theme:`blossom`,title:`Behind every powerful system, there is a quiet place to govern.`,description:`Observe the flow, tune the balance, and let the models answer. Provider accounts, credentials, usage, and health stay in one calm console built for the person operating the route.`,image:E(`jinhsi-blossom.webp`),imageAlt:`Jinhsi beneath soft pink blossoms`,signals:[{label:`The quiet engine`,value:`AWAKE`,icon:`activity`},{label:`The studio`,value:`READY`,icon:`sparkles`},{label:`The balance`,value:`HELD`,icon:`shield`}]},{id:`many-voices`,number:`04`,label:`The Many Voices`,location:`THE LIVING NETWORK`,theme:`voices`,title:`Every route carries a living world.`,description:`Providers, clients, and models bring different voices to the crossing. Cartethyia gives them one dependable gateway without silencing what makes each path unique.`,image:E(`wuthering-waves-hiyuki-aemeath-hiyuki-rover.webp`),imageAlt:`A bright celebration of characters and connected voices`,signals:[{label:`The many voices`,value:`CONNECTED`,icon:`network`},{label:`The shared world`,value:`OPEN`,icon:`sparkles`},{label:`The crossing`,value:`ALIGNED`,icon:`terminal`}]},{id:`red-thread`,number:`05`,label:`The Red Thread`,location:`THE FRACTURED PATH`,theme:`red`,title:`A beautiful signal can still be dangerous.`,description:`Every powerful route attracts pressure. Cartethyia watches the boundary, rejects hostile paths, and keeps a single failure from tearing through the whole network.`,image:E(`phrolova-a.webp`),imageAlt:`A figure surrounded by dark red threads and fractured signals`,signals:[{label:`The threat`,value:`SEEN`,icon:`activity`},{label:`The boundary`,value:`HELD`,icon:`shield`},{label:`The fallback`,value:`READY`,icon:`network`}]},{id:`request-denial`,number:`06`,label:`The Gate of Discernment`,location:`THE GATE OF DISCERNMENT`,theme:`denial`,title:`Not every signal should pass.`,description:`Every game needs a gatekeeper. Cartethyia verifies intent, protects the route, and denies the requests that would fracture the system.`,image:E(`requestdeniawokkjpg.webp`),imageAlt:`A radiant gatekeeper surrounded by cascading signals`,signals:[{label:`The verdict`,value:`CLEAR`,icon:`shield`},{label:`The boundary`,value:`GUARDED`,icon:`network`},{label:`The route`,value:`TRUSTED`,icon:`sparkles`}]},{id:`shorekeeper`,number:`07`,label:`The Open Shore`,location:`THE SHOREKEEPER`,theme:`shore`,title:`The gateway is yours to shape.`,description:`Find your way back to the source, share your route, and join the people building a dependable gateway across a changing AI landscape.`,image:E(`Shorekeeper.webp`),imageAlt:`Shorekeeper watching over a luminous open shore`,signals:[{label:`The source`,value:`OPEN`,icon:`terminal`},{label:`The shore`,value:`AWAITS`,icon:`network`},{label:`The next step`,value:`YOURS`,icon:`sparkles`}]}],A={activity:s,network:l,shield:_,sparkles:c,terminal:u};function j({signal:e}){let t=A[e.icon];return(0,S.jsxs)(`div`,{className:`landing-signal-tile`,children:[(0,S.jsx)(`span`,{className:`landing-signal-icon`,children:(0,S.jsx)(t,{size:12,"aria-hidden":!0})}),(0,S.jsxs)(`div`,{className:`landing-signal-copy`,children:[(0,S.jsx)(`div`,{className:`landing-signal-label`,children:e.label}),(0,S.jsx)(`div`,{className:`landing-signal-value`,children:e.value})]})]})}function M(){let e=v(),t=e?`auto`:`smooth`,[n,r]=(0,x.useState)(0),[a,s]=(0,x.useState)(()=>new Set([0])),[c,l]=(0,x.useState)(!1),[_,b]=(0,x.useState)(!1);(0,x.useEffect)(()=>{let e=()=>b(window.scrollY>24);return e(),window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[]);let E=(0,x.useRef)([]);(0,x.useEffect)(()=>{if(typeof IntersectionObserver>`u`)return;let e=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting).sort((e,t)=>t.intersectionRatio-e.intersectionRatio)[0];if(t){let e=Number(t.target.dataset.chapterIndex);r(e),s(t=>t.has(e)?t:new Set([...t,e]))}},{threshold:[.35,.6,.85]});E.current.forEach(t=>{t&&e.observe(t)});let i=e=>{if(!e.target?.matches(`input, textarea, select, [contenteditable="true"]`)){if(e.key===`ArrowDown`||e.key===`ArrowRight`||e.key===`PageDown`){e.preventDefault();let r=Math.min(k.length-1,n+1);E.current[r]?.scrollIntoView({behavior:t,block:`start`})}else if(e.key===`ArrowUp`||e.key===`ArrowLeft`||e.key===`PageUp`){e.preventDefault();let r=Math.max(0,n-1);E.current[r]?.scrollIntoView({behavior:t,block:`start`})}}};return window.addEventListener(`keydown`,i),()=>{e.disconnect(),window.removeEventListener(`keydown`,i)}},[n,t]);let D=e=>{E.current[e]?.scrollIntoView({behavior:t,block:`start`})},M=k[n]?.theme??`night`,N=(t,n=``)=>a.has(t)?e?``:`animate-story-reveal-up ${n}`.trim():`opacity-0`;return(0,S.jsxs)(`div`,{className:`relative min-h-screen overflow-x-clip bg-story-deep font-sans text-story-ink`,id:`top`,style:T[M],children:[(0,S.jsx)(`header`,{className:`landing-header`,"data-scrolled":_,children:(0,S.jsxs)(`div`,{className:`landing-header-inner`,"data-scrolled":_,children:[(0,S.jsxs)(`a`,{className:`landing-header-brand`,href:`#top`,onClick:e=>{e.preventDefault(),D(0)},children:[(0,S.jsx)(`span`,{className:`flex size-9 items-center justify-center rounded-xl border border-story-white/25 bg-story-white p-0.5`,children:(0,S.jsx)(`img`,{className:`size-full rounded-lg object-cover`,src:`${C}assets/brand/favicon.jpg`,alt:``})}),(0,S.jsxs)(`span`,{children:[(0,S.jsx)(`strong`,{className:`block font-heading text-lead leading-none`,children:`Cartethyia`}),(0,S.jsx)(`small`,{className:`mt-1 block font-mono text-micro font-medium leading-none tracking-code text-story-white/50`,children:`AI PROXY ROUTER`})]})]}),(0,S.jsxs)(`nav`,{className:`landing-header-desktop-nav`,"aria-label":`Primary navigation`,children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>D(0),children:[(0,S.jsx)(p,{size:14,"aria-hidden":!0}),`Home`]}),(0,S.jsxs)(`a`,{href:w,children:[(0,S.jsx)(u,{size:14,"aria-hidden":!0}),`Console`]}),(0,S.jsxs)(`a`,{href:i,target:`_blank`,rel:`noreferrer`,children:[(0,S.jsx)(f,{size:14}),`GitHub`]}),(0,S.jsxs)(`a`,{href:o,target:`_blank`,rel:`noreferrer`,children:[(0,S.jsx)(g,{size:14,"aria-hidden":!0}),`Community`]})]}),(0,S.jsxs)(`div`,{className:`landing-header-actions`,children:[(0,S.jsx)(m,{className:`landing-header-github`}),(0,S.jsxs)(`button`,{type:`button`,"aria-label":c?`Show story`:`Show all`,"aria-pressed":c,onClick:()=>l(e=>!e),className:`landing-header-control landing-header-show-all${c?` is-active`:``}`,children:[(0,S.jsx)(`span`,{className:`size-3.5 shrink-0 rounded-full bg-current`,"aria-hidden":!0}),c?`Story`:`All view`]}),(0,S.jsxs)(`a`,{className:`landing-header-control landing-header-console`,href:w,children:[`Enter console`,(0,S.jsx)(h,{size:14,"aria-hidden":!0})]})]})]})}),c?(0,S.jsx)(`main`,{className:`px-12 pb-17.5 pt-44 max-compact:px-8`,children:(0,S.jsxs)(`div`,{className:`mx-auto w-full max-w-640`,children:[(0,S.jsxs)(`div`,{className:`mb-10.5 flex flex-wrap items-end justify-between gap-5.25`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`p`,{className:`text-badge font-bold uppercase tracking-code text-story-white/50`,children:`All chapters · 7 stories`}),(0,S.jsx)(`h2`,{className:`mt-3.5 font-serif text-hero font-normal leading-none tracking-tight text-story-white`,children:`Everything at a glance`}),(0,S.jsx)(`p`,{className:`mt-3.5 max-w-60ch text-body leading-5 text-story-white/65`,children:`Hover a card to lift it — click to jump to its story. All 7 visuals, captions and signals visible without scrolling forever.`})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-3.5 text-badge text-story-white/50`,children:[(0,S.jsx)(`span`,{className:`h-3 w-3 rounded-full bg-story-success shadow-glow-success`,"aria-hidden":!0}),` Stylish overview`]})]}),(0,S.jsx)(`div`,{className:`grid gap-7 sm:grid-cols-2 lg:grid-cols-3`,children:k.map((e,t)=>(0,S.jsxs)(`article`,{onClick:()=>{l(!1),requestAnimationFrame(()=>D(t))},className:`group relative flex cursor-pointer flex-col overflow-hidden rounded-hero border bg-story-surface text-left transition hover:-translate-y-1 hover:shadow-window focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-story-white/30`,style:T[e.theme],tabIndex:0,role:`button`,"aria-label":`Open ${e.label}`,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),l(!1),requestAnimationFrame(()=>D(t)))},children:[(0,S.jsxs)(`div`,{className:`relative h-95 overflow-hidden`,children:[(0,S.jsx)(`img`,{src:e.image,alt:e.imageAlt,className:`h-full w-full object-cover transition duration-500 group-hover:scale-104`,loading:`lazy`,decoding:`async`}),(0,S.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-story-deep/85 via-story-deep/10 to-transparent`}),(0,S.jsxs)(`div`,{className:`absolute left-3 top-3 flex items-center gap-3`,children:[(0,S.jsx)(`span`,{className:`rounded-chip bg-story-white px-3 py-1 font-mono text-micro font-bold tracking-label text-story-deep`,children:e.number}),(0,S.jsx)(`span`,{className:`rounded-chip border border-story-white/20 bg-story-black/25 px-3.5 py-1 text-micro font-bold uppercase tracking-label text-story-white backdrop-blur`,children:e.theme})]}),(0,S.jsxs)(`div`,{className:`absolute bottom-2 left-3 right-3 flex items-center justify-between text-micro font-bold uppercase tracking-label text-story-white/75`,children:[(0,S.jsx)(`span`,{className:`truncate`,children:e.location}),(0,S.jsx)(y,{size:13,"aria-hidden":!0,className:`opacity-60 group-hover:opacity-100`})]})]}),(0,S.jsxs)(`div`,{className:`flex flex-1 flex-col gap-3.5 p-7`,children:[(0,S.jsx)(`h3`,{className:`font-serif text-title font-normal leading-tight tracking-tight text-story-white`,children:e.title}),(0,S.jsx)(`p`,{className:`line-clamp-2 text-caption leading-5 text-story-white/65`,children:e.description}),(0,S.jsx)(`div`,{className:`mt-1.75 flex flex-wrap gap-3`,children:e.signals.map(t=>{let n=A[t.icon];return(0,S.jsxs)(`span`,{className:`inline-flex items-center gap-1.75 rounded-chip border border-story-white/10 bg-story-white/6 px-3.5 py-1.75 text-micro font-semibold uppercase tracking-label text-story-white/75`,children:[(0,S.jsx)(n,{size:12,"aria-hidden":!0,className:`text-story-accent`}),t.label,(0,S.jsx)(`strong`,{className:`font-bold text-story-white`,children:t.value})]},`${e.id}-${t.label}`)})})]})]},e.id))})]})}):(0,S.jsx)(`main`,{className:`relative z-1`,children:k.map((e,t)=>(0,S.jsxs)(`article`,{id:`chapter-${t}`,"data-chapter-index":t,ref:e=>{E.current[t]=e},className:`relative flex min-h-screen items-center overflow-hidden bg-story-deep bg-[linear-gradient(to_right,color-mix(in_srgb,var(--story-accent)_2.4%,transparent)_1px,transparent_1px),linear-gradient(to_bottom,color-mix(in_srgb,var(--story-accent)_2.4%,transparent)_1px,transparent_1px)] bg-[length:44px_100%,100%_40px] py-16 max-medium:min-h-0 max-medium:py-36 max-compact:py-52 max-compact:pb-16`,style:T[e.theme],"aria-labelledby":`chapter-title-${t}`,children:[(0,S.jsx)(`div`,{className:`absolute inset-0 z-0 scale-108 bg-cover bg-center mix-blend-screen`,style:{backgroundImage:`url(${e.image})`,filter:`blur(27px) saturate(1.14)`,opacity:.24},"aria-hidden":!0}),(0,S.jsxs)(`div`,{className:`landing-story-shell relative z-1 mx-auto`,children:[(0,S.jsxs)(`figure`,{className:`landing-story-visual relative row-start-1 min-w-0 w-full self-center overflow-hidden border border-story-white/20 bg-[#090d16] shadow-popout after:absolute after:inset-0 after:bg-gradient-to-b after:from-story-deep/4 after:via-story-deep/30 after:to-story-deep/60 after:content-[''] ${t%2==0?`col-start-1`:`col-start-2`}`,children:[(0,S.jsx)(`img`,{className:`block size-full object-cover object-center`,src:e.image,alt:e.imageAlt,loading:t===0?`eager`:`lazy`,fetchPriority:t===0?`high`:`low`,decoding:`async`}),(0,S.jsxs)(`figcaption`,{className:`absolute inset-x-4 bottom-4 z-1 flex justify-between font-mono text-micro font-medium leading-none tracking-label text-story-white/70 uppercase`,children:[e.location,` `,(0,S.jsx)(`span`,{className:`text-story-accent`,children:e.number})]})]}),(0,S.jsxs)(`div`,{className:`min-w-0 ${t%2==0?`col-start-2 row-start-1`:`col-start-1 row-start-1`}`,children:[(0,S.jsx)(`h1`,{className:`mt-6 max-w-12ch font-head text-story-hero font-normal leading-[0.98] tracking-[-0.045em] text-balance max-compact:max-w-13ch max-compact:text-story-hero-compact ${N(t,`delay-100`)}`,id:`chapter-title-${t}`,children:e.title}),(0,S.jsx)(`p`,{className:`landing-story-description mt-10 max-h-none max-w-[545px] text-lead leading-14 text-story-white/70 max-compact:max-w-full max-compact:text-body max-compact:leading-6 ${N(t,`delay-150`)}`,children:e.description}),(0,S.jsx)(`div`,{className:`landing-signal-grid ${N(t,`delay-200`)}`,children:e.signals.map(t=>(0,S.jsx)(j,{signal:t},`${e.id}-${t.label}`))}),(0,S.jsx)(`div`,{className:`mt-7 flex flex-wrap gap-3.5 max-compact:mt-5 ${N(t,`delay-300`)}`,children:(0,S.jsxs)(`button`,{className:`inline-flex h-22 items-center gap-2 rounded-control border border-story-white/25 bg-story-white/8 px-4.5 text-body font-bold text-story-white transition-transform active:scale-97 hover:bg-story-white/18 max-compact:h-21 max-compact:px-3.5 max-compact:text-badge`,type:`button`,onClick:()=>D(t===k.length-1?0:t+1),children:[O(t),(0,S.jsx)(d,{size:15,"aria-hidden":!0})]})})]})]})]},e.id))})]})}function N(e){document.title=`Cartethyia — The One-Stop AI Proxy Router`,(0,b.createRoot)(e).render((0,S.jsx)(x.StrictMode,{children:(0,S.jsx)(M,{})}))}export{N as mountLanding};
1
+ import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{a as i,l as a,t as o}from"./app-Bgd3zANQ.js";import{i as s,n as c,r as l,t as u}from"./terminal-0_IjPWTk.js";import{t as d}from"./arrow-right-Dl5yKnp8.js";import{n as f,r as p,t as m}from"./github-badge-YSCE4UC2.js";import{t as h}from"./log-in-BmRjy60c.js";import{t as g}from"./message-circle-CCxGwRvv.js";import{t as _}from"./shield-check-DVS0Foqh.js";import{t as v}from"./use-reduced-motion-C4B0R6Sz.js";var y=e(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),b=a(),x=t(n(),1),S=r(),C=`/`,w=`/console`,T={night:{"--story-accent":`var(--color-story-night)`},core:{"--story-accent":`var(--color-story-core)`},blossom:{"--story-accent":`var(--color-story-blossom)`},voices:{"--story-accent":`var(--color-story-voices)`},red:{"--story-accent":`var(--color-story-red)`},denial:{"--story-accent":`var(--color-story-denial)`},shore:{"--story-accent":`var(--color-story-shore)`}},E=e=>`${C}assets/story/${e}`,D=e=>e.toLowerCase().replace(/\b\w/g,e=>e.toUpperCase()),O=e=>{let t=k[e+1];return t===void 0?`Back to ${k[0]?.label??`the beginning`}`:`Go to ${D(t.location)}`},k=[{id:`blessed-maiden`,number:`01`,label:`The Blessed Maiden`,location:`THE FIRST CROSSING`,theme:`night`,title:`A single signal enters the unknown.`,description:`Every client begins with one request and a question: where should it go? Cartethyia gives that signal a reliable gateway — self-hosted, authenticated, and ready for the crossing.`,image:E(`fleurdelys_plus.webp`),imageAlt:`The Blessed Maiden beneath a luminous blue sky`,signals:[{label:`The first crossing`,value:`OPEN`,icon:`network`},{label:`The chosen vessel`,value:`YOURS`,icon:`shield`},{label:`The gate`,value:`ALIGNED`,icon:`sparkles`}]},{id:`resonant-core`,number:`02`,label:`The Resonant Core`,location:`THE ROUTING SANCTUM`,theme:`core`,title:`The route becomes the power.`,description:`One surface can speak to many providers. Cartethyia translates protocols, balances targets, and keeps each request moving through the right vessel — even when the first path goes quiet.`,image:E(`cartethyia-god.webp`),imageAlt:`Cartethyia surrounded by a celestial blue routing field`,signals:[{label:`The many voices`,value:`30+`,icon:`network`},{label:`The bridge`,value:`ALIGNED`,icon:`terminal`},{label:`The fallback`,value:`AWARE`,icon:`activity`}]},{id:`pink-blossom`,number:`03`,label:`The Pink Blossom Calm`,location:`THE QUIET CONTROL`,theme:`blossom`,title:`Behind every powerful system, there is a quiet place to govern.`,description:`Observe the flow, tune the balance, and let the models answer. Provider accounts, credentials, usage, and health stay in one calm console built for the person operating the route.`,image:E(`jinhsi-blossom.webp`),imageAlt:`Jinhsi beneath soft pink blossoms`,signals:[{label:`The quiet engine`,value:`AWAKE`,icon:`activity`},{label:`The studio`,value:`READY`,icon:`sparkles`},{label:`The balance`,value:`HELD`,icon:`shield`}]},{id:`many-voices`,number:`04`,label:`The Many Voices`,location:`THE LIVING NETWORK`,theme:`voices`,title:`Every route carries a living world.`,description:`Providers, clients, and models bring different voices to the crossing. Cartethyia gives them one dependable gateway without silencing what makes each path unique.`,image:E(`wuthering-waves-hiyuki-aemeath-hiyuki-rover.webp`),imageAlt:`A bright celebration of characters and connected voices`,signals:[{label:`The many voices`,value:`CONNECTED`,icon:`network`},{label:`The shared world`,value:`OPEN`,icon:`sparkles`},{label:`The crossing`,value:`ALIGNED`,icon:`terminal`}]},{id:`red-thread`,number:`05`,label:`The Red Thread`,location:`THE FRACTURED PATH`,theme:`red`,title:`A beautiful signal can still be dangerous.`,description:`Every powerful route attracts pressure. Cartethyia watches the boundary, rejects hostile paths, and keeps a single failure from tearing through the whole network.`,image:E(`phrolova-a.webp`),imageAlt:`A figure surrounded by dark red threads and fractured signals`,signals:[{label:`The threat`,value:`SEEN`,icon:`activity`},{label:`The boundary`,value:`HELD`,icon:`shield`},{label:`The fallback`,value:`READY`,icon:`network`}]},{id:`request-denial`,number:`06`,label:`The Gate of Discernment`,location:`THE GATE OF DISCERNMENT`,theme:`denial`,title:`Not every signal should pass.`,description:`Every game needs a gatekeeper. Cartethyia verifies intent, protects the route, and denies the requests that would fracture the system.`,image:E(`requestdeniawokkjpg.webp`),imageAlt:`A radiant gatekeeper surrounded by cascading signals`,signals:[{label:`The verdict`,value:`CLEAR`,icon:`shield`},{label:`The boundary`,value:`GUARDED`,icon:`network`},{label:`The route`,value:`TRUSTED`,icon:`sparkles`}]},{id:`shorekeeper`,number:`07`,label:`The Open Shore`,location:`THE SHOREKEEPER`,theme:`shore`,title:`The gateway is yours to shape.`,description:`Find your way back to the source, share your route, and join the people building a dependable gateway across a changing AI landscape.`,image:E(`Shorekeeper.webp`),imageAlt:`Shorekeeper watching over a luminous open shore`,signals:[{label:`The source`,value:`OPEN`,icon:`terminal`},{label:`The shore`,value:`AWAITS`,icon:`network`},{label:`The next step`,value:`YOURS`,icon:`sparkles`}]}],A={activity:s,network:l,shield:_,sparkles:c,terminal:u};function j({signal:e}){let t=A[e.icon];return(0,S.jsxs)(`div`,{className:`landing-signal-tile`,children:[(0,S.jsx)(`span`,{className:`landing-signal-icon`,children:(0,S.jsx)(t,{size:12,"aria-hidden":!0})}),(0,S.jsxs)(`div`,{className:`landing-signal-copy`,children:[(0,S.jsx)(`div`,{className:`landing-signal-label`,children:e.label}),(0,S.jsx)(`div`,{className:`landing-signal-value`,children:e.value})]})]})}function M(){let e=v(),t=e?`auto`:`smooth`,[n,r]=(0,x.useState)(0),[a,s]=(0,x.useState)(()=>new Set([0])),[c,l]=(0,x.useState)(!1),[_,b]=(0,x.useState)(!1);(0,x.useEffect)(()=>{let e=()=>b(window.scrollY>24);return e(),window.addEventListener(`scroll`,e,{passive:!0}),()=>window.removeEventListener(`scroll`,e)},[]);let E=(0,x.useRef)([]);(0,x.useEffect)(()=>{if(typeof IntersectionObserver>`u`)return;let e=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting).sort((e,t)=>t.intersectionRatio-e.intersectionRatio)[0];if(t){let e=Number(t.target.dataset.chapterIndex);r(e),s(t=>t.has(e)?t:new Set([...t,e]))}},{threshold:[.35,.6,.85]});E.current.forEach(t=>{t&&e.observe(t)});let i=e=>{if(!e.target?.matches(`input, textarea, select, [contenteditable="true"]`)){if(e.key===`ArrowDown`||e.key===`ArrowRight`||e.key===`PageDown`){e.preventDefault();let r=Math.min(k.length-1,n+1);E.current[r]?.scrollIntoView({behavior:t,block:`start`})}else if(e.key===`ArrowUp`||e.key===`ArrowLeft`||e.key===`PageUp`){e.preventDefault();let r=Math.max(0,n-1);E.current[r]?.scrollIntoView({behavior:t,block:`start`})}}};return window.addEventListener(`keydown`,i),()=>{e.disconnect(),window.removeEventListener(`keydown`,i)}},[n,t]);let D=e=>{E.current[e]?.scrollIntoView({behavior:t,block:`start`})},M=k[n]?.theme??`night`,N=(t,n=``)=>a.has(t)?e?``:`animate-story-reveal-up ${n}`.trim():`opacity-0`;return(0,S.jsxs)(`div`,{className:`relative min-h-screen overflow-x-clip bg-story-deep font-sans text-story-ink`,id:`top`,style:T[M],children:[(0,S.jsx)(`header`,{className:`landing-header`,"data-scrolled":_,children:(0,S.jsxs)(`div`,{className:`landing-header-inner`,"data-scrolled":_,children:[(0,S.jsxs)(`a`,{className:`landing-header-brand`,href:`#top`,onClick:e=>{e.preventDefault(),D(0)},children:[(0,S.jsx)(`span`,{className:`flex size-9 items-center justify-center rounded-xl border border-story-white/25 bg-story-white p-0.5`,children:(0,S.jsx)(`img`,{className:`size-full rounded-lg object-cover`,src:`${C}assets/brand/favicon.jpg`,alt:``})}),(0,S.jsxs)(`span`,{children:[(0,S.jsx)(`strong`,{className:`block font-heading text-lead leading-none`,children:`Cartethyia`}),(0,S.jsx)(`small`,{className:`mt-1 block font-mono text-micro font-medium leading-none tracking-code text-story-white/50`,children:`AI PROXY ROUTER`})]})]}),(0,S.jsxs)(`nav`,{className:`landing-header-desktop-nav`,"aria-label":`Primary navigation`,children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>D(0),children:[(0,S.jsx)(p,{size:14,"aria-hidden":!0}),`Home`]}),(0,S.jsxs)(`a`,{href:w,children:[(0,S.jsx)(u,{size:14,"aria-hidden":!0}),`Console`]}),(0,S.jsxs)(`a`,{href:i,target:`_blank`,rel:`noreferrer`,children:[(0,S.jsx)(f,{size:14}),`GitHub`]}),(0,S.jsxs)(`a`,{href:o,target:`_blank`,rel:`noreferrer`,children:[(0,S.jsx)(g,{size:14,"aria-hidden":!0}),`Community`]})]}),(0,S.jsxs)(`div`,{className:`landing-header-actions`,children:[(0,S.jsx)(m,{className:`landing-header-github`}),(0,S.jsxs)(`button`,{type:`button`,"aria-label":c?`Show story`:`Show all`,"aria-pressed":c,onClick:()=>l(e=>!e),className:`landing-header-control landing-header-show-all${c?` is-active`:``}`,children:[(0,S.jsx)(`span`,{className:`size-3.5 shrink-0 rounded-full bg-current`,"aria-hidden":!0}),c?`Story`:`All view`]}),(0,S.jsxs)(`a`,{className:`landing-header-control landing-header-console`,href:w,children:[`Enter console`,(0,S.jsx)(h,{size:14,"aria-hidden":!0})]})]})]})}),c?(0,S.jsx)(`main`,{className:`px-12 pb-17.5 pt-44 max-compact:px-8`,children:(0,S.jsxs)(`div`,{className:`mx-auto w-full max-w-640`,children:[(0,S.jsxs)(`div`,{className:`mb-10.5 flex flex-wrap items-end justify-between gap-5.25`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`p`,{className:`text-badge font-bold uppercase tracking-code text-story-white/50`,children:`All chapters · 7 stories`}),(0,S.jsx)(`h2`,{className:`mt-3.5 font-serif text-hero font-normal leading-none tracking-tight text-story-white`,children:`Everything at a glance`}),(0,S.jsx)(`p`,{className:`mt-3.5 max-w-60ch text-body leading-5 text-story-white/65`,children:`Hover a card to lift it — click to jump to its story. All 7 visuals, captions and signals visible without scrolling forever.`})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-3.5 text-badge text-story-white/50`,children:[(0,S.jsx)(`span`,{className:`h-3 w-3 rounded-full bg-story-success shadow-glow-success`,"aria-hidden":!0}),` Stylish overview`]})]}),(0,S.jsx)(`div`,{className:`grid gap-7 sm:grid-cols-2 lg:grid-cols-3`,children:k.map((e,t)=>(0,S.jsxs)(`article`,{onClick:()=>{l(!1),requestAnimationFrame(()=>D(t))},className:`group relative flex cursor-pointer flex-col overflow-hidden rounded-hero border bg-story-surface text-left transition hover:-translate-y-1 hover:shadow-window focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-story-white/30`,style:T[e.theme],tabIndex:0,role:`button`,"aria-label":`Open ${e.label}`,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),l(!1),requestAnimationFrame(()=>D(t)))},children:[(0,S.jsxs)(`div`,{className:`relative h-95 overflow-hidden`,children:[(0,S.jsx)(`img`,{src:e.image,alt:e.imageAlt,className:`h-full w-full object-cover transition duration-500 group-hover:scale-104`,loading:`lazy`,decoding:`async`}),(0,S.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-story-deep/85 via-story-deep/10 to-transparent`}),(0,S.jsxs)(`div`,{className:`absolute left-3 top-3 flex items-center gap-3`,children:[(0,S.jsx)(`span`,{className:`rounded-chip bg-story-white px-3 py-1 font-mono text-micro font-bold tracking-label text-story-deep`,children:e.number}),(0,S.jsx)(`span`,{className:`rounded-chip border border-story-white/20 bg-story-black/25 px-3.5 py-1 text-micro font-bold uppercase tracking-label text-story-white backdrop-blur`,children:e.theme})]}),(0,S.jsxs)(`div`,{className:`absolute bottom-2 left-3 right-3 flex items-center justify-between text-micro font-bold uppercase tracking-label text-story-white/75`,children:[(0,S.jsx)(`span`,{className:`truncate`,children:e.location}),(0,S.jsx)(y,{size:13,"aria-hidden":!0,className:`opacity-60 group-hover:opacity-100`})]})]}),(0,S.jsxs)(`div`,{className:`flex flex-1 flex-col gap-3.5 p-7`,children:[(0,S.jsx)(`h3`,{className:`font-serif text-title font-normal leading-tight tracking-tight text-story-white`,children:e.title}),(0,S.jsx)(`p`,{className:`line-clamp-2 text-caption leading-5 text-story-white/65`,children:e.description}),(0,S.jsx)(`div`,{className:`mt-1.75 flex flex-wrap gap-3`,children:e.signals.map(t=>{let n=A[t.icon];return(0,S.jsxs)(`span`,{className:`inline-flex items-center gap-1.75 rounded-chip border border-story-white/10 bg-story-white/6 px-3.5 py-1.75 text-micro font-semibold uppercase tracking-label text-story-white/75`,children:[(0,S.jsx)(n,{size:12,"aria-hidden":!0,className:`text-story-accent`}),t.label,(0,S.jsx)(`strong`,{className:`font-bold text-story-white`,children:t.value})]},`${e.id}-${t.label}`)})})]})]},e.id))})]})}):(0,S.jsx)(`main`,{className:`relative z-1`,children:k.map((e,t)=>(0,S.jsxs)(`article`,{id:`chapter-${t}`,"data-chapter-index":t,ref:e=>{E.current[t]=e},className:`relative flex min-h-screen items-center overflow-hidden bg-story-deep bg-[linear-gradient(to_right,color-mix(in_srgb,var(--story-accent)_2.4%,transparent)_1px,transparent_1px),linear-gradient(to_bottom,color-mix(in_srgb,var(--story-accent)_2.4%,transparent)_1px,transparent_1px)] bg-[length:44px_100%,100%_40px] py-16 max-medium:min-h-0 max-medium:py-36 max-compact:py-52 max-compact:pb-16`,style:T[e.theme],"aria-labelledby":`chapter-title-${t}`,children:[(0,S.jsx)(`div`,{className:`absolute inset-0 z-0 scale-108 bg-cover bg-center mix-blend-screen`,style:{backgroundImage:`url(${e.image})`,filter:`blur(27px) saturate(1.14)`,opacity:.24},"aria-hidden":!0}),(0,S.jsxs)(`div`,{className:`landing-story-shell relative z-1 mx-auto`,children:[(0,S.jsxs)(`figure`,{className:`landing-story-visual relative row-start-1 min-w-0 w-full self-center overflow-hidden border border-story-white/20 bg-[#090d16] shadow-popout after:absolute after:inset-0 after:bg-gradient-to-b after:from-story-deep/4 after:via-story-deep/30 after:to-story-deep/60 after:content-[''] ${t%2==0?`col-start-1`:`col-start-2`}`,children:[(0,S.jsx)(`img`,{className:`block size-full object-cover object-center`,src:e.image,alt:e.imageAlt,loading:t===0?`eager`:`lazy`,fetchPriority:t===0?`high`:`low`,decoding:`async`}),(0,S.jsxs)(`figcaption`,{className:`absolute inset-x-4 bottom-4 z-1 flex justify-between font-mono text-micro font-medium leading-none tracking-label text-story-white/70 uppercase`,children:[e.location,` `,(0,S.jsx)(`span`,{className:`text-story-accent`,children:e.number})]})]}),(0,S.jsxs)(`div`,{className:`min-w-0 ${t%2==0?`col-start-2 row-start-1`:`col-start-1 row-start-1`}`,children:[(0,S.jsx)(`h1`,{className:`mt-6 max-w-12ch font-head text-story-hero font-normal leading-[0.98] tracking-[-0.045em] text-balance max-compact:max-w-13ch max-compact:text-story-hero-compact ${N(t,`delay-100`)}`,id:`chapter-title-${t}`,children:e.title}),(0,S.jsx)(`p`,{className:`landing-story-description mt-10 max-h-none max-w-[545px] text-lead leading-14 text-story-white/70 max-compact:max-w-full max-compact:text-body max-compact:leading-6 ${N(t,`delay-150`)}`,children:e.description}),(0,S.jsx)(`div`,{className:`landing-signal-grid ${N(t,`delay-200`)}`,children:e.signals.map(t=>(0,S.jsx)(j,{signal:t},`${e.id}-${t.label}`))}),(0,S.jsx)(`div`,{className:`mt-7 flex flex-wrap gap-3.5 max-compact:mt-5 ${N(t,`delay-300`)}`,children:(0,S.jsxs)(`button`,{className:`inline-flex h-22 items-center gap-2 rounded-control border border-story-white/25 bg-story-white/8 px-4.5 text-body font-bold text-story-white transition-transform active:scale-97 hover:bg-story-white/18 max-compact:h-21 max-compact:px-3.5 max-compact:text-badge`,type:`button`,onClick:()=>D(t===k.length-1?0:t+1),children:[O(t),(0,S.jsx)(d,{size:15,"aria-hidden":!0})]})})]})]})]},e.id))})]})}function N(e){document.title=`Cartethyia — The One-Stop AI Proxy Router`,(0,b.createRoot)(e).render((0,S.jsx)(x.StrictMode,{children:(0,S.jsx)(M,{})}))}export{N as mountLanding};
@@ -0,0 +1,4 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginPage-DkXb6dx-.js","assets/jsx-runtime-CXUMngI_.js","assets/numbers-CUWAZK4J.js","assets/app-Bgd3zANQ.js","assets/app--PJWq8_C.css","assets/log-in-BmRjy60c.js","assets/query-keys-BloKtaXJ.js","assets/input-BHHX_Tmm.js","assets/eye-off-Bk5g2luF.js","assets/eye-C_hawfH4.js","assets/SetupPage-WTa0sktC.js","assets/layout-CajrYUnD.js","assets/backup-file-gdKIlg8U.js","assets/BannedPage-Cj15GsMp.js","assets/OverviewPage-Ci2wQKUz.js","assets/terminal-0_IjPWTk.js","assets/arrow-up-59ms1iiT.js","assets/minimize-2-BTmMTK4o.js","assets/fingerprint-pattern-BWuHtbW4.js","assets/chevron-right-BXIy5l3h.js","assets/InjectSystemPromptPanel-B5nZvmf0.js","assets/state-DTARjfiW.js","assets/layers-2-glBbjl.js","assets/dialog-BEK7KP0H.js","assets/use-modal-focus-By7oJoGd.js","assets/pencil-768ysRAr.js","assets/plus-DIdX_g-x.js","assets/search-JOKus9rb.js","assets/settings-2-Ds9DQp0t.js","assets/trash-Cppn5c3R.js","assets/assert-C0K-c4eo.js","assets/useMutation-m8WGNPrz.js","assets/mutation-Rr0TIvcj.js","assets/card-CtkX66Wd.js","assets/switch-c0oPSnqW.js","assets/badge-DfbhQU4k.js","assets/select-BLULNqTp.js","assets/ProviderIcon-EfeloBn4.js","assets/stack-D2lIR0tg.js","assets/inline-C4gU5iOL.js","assets/banner-BllT4LcF.js","assets/pagination-Xsi9Qx04.js","assets/chevron-left-Bf6CaTSJ.js","assets/routing-in0f_IfK.js","assets/database-Dz9N3zGd.js","assets/gauge-BbIMy7MB.js","assets/key-round-UkavsGxp.js","assets/clipboard-button-BQqBQd2n.js","assets/use-clipboard-B0Sy03fE.js","assets/power-off-Yjw9GMJh.js","assets/refresh-cw-BqJFk4sU.js","assets/route-CNSNj9Zm.js","assets/shield-check-DVS0Foqh.js","assets/shield-BMQNxORh.js","assets/download-dRFo5_Wu.js","assets/tokens-COzario9.js","assets/ModelPicker-DnQPSIA8.js","assets/api-keys-l29JROPv.js","assets/cli-tools-CQXVMn4P.js","assets/quota-DvQbD_sr.js","assets/settings-CcGczj6I.js","assets/UsagePage-BNzeZ2Vk.js","assets/circle-check-BU3v_mFW.js","assets/formatters-BAACA727.js","assets/image-BPaouViG.js","assets/drawer-BrTEZ8zu.js","assets/scaling-nWE4Cx8f.js","assets/wrench-B6E1oEuY.js","assets/use-reduced-motion-C4B0R6Sz.js","assets/privacy-mode-GM8bej85.js","assets/use-timeout-BwcBBRrT.js","assets/live-DNNqRbj2.js","assets/ProviderDetailPage-odlgYrOg.js","assets/arrow-left-CpBxkoxI.js","assets/brain-Cwed_72z.js","assets/circle-alert-CntYHV5v.js","assets/ClaimGiftsButton-D83pBJ6J.js","assets/rotate-ccw-CufcqITi.js","assets/list-row-Bx2I7XUe.js","assets/network-C5UBACrJ.js","assets/ProvidersPage-CqFBQEB8.js","assets/dialog-actions-B1axpEg7.js","assets/CombosPage-DEEKkYD-.js","assets/arrow-right-Dl5yKnp8.js","assets/QuotaPage-CmnMDzhP.js","assets/zap-C4EeVW4q.js","assets/ProxyPage-5SnUSy3j.js","assets/SettingsPage-BJtRZ4qD.js","assets/CliToolsPage-BIccZmeL.js","assets/ToolIcon-K1ckcDKg.js","assets/CliToolDetailPage-DZKmVuJN.js","assets/ConsoleLogPage-D5rol2j2.js","assets/CustomizationPage-BKj_r0rp.js","assets/StudioPage-BfAb5-o_.js","assets/message-circle-CCxGwRvv.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{t as i}from"./index-FQlj0HUT.js";import{c as a,l as o,n as s,o as c,r as l,s as u,u as d}from"./app-Bgd3zANQ.js";import{i as f,n as p,r as m,t as h}from"./terminal-0_IjPWTk.js";import{C as g,D as _,E as v,O as y,S as b,T as x,_ as S,b as C,c as ee,d as te,f as ne,h as re,k as ie,l as w,m as ae,o as oe,p as se,s as T,w as ce,x as le,y as ue}from"./numbers-CUWAZK4J.js";import{r as de}from"./use-modal-focus-By7oJoGd.js";import{t as fe}from"./dialog-BEK7KP0H.js";import{C as E,T as D,_ as pe,d as me,f as he,g as ge,h as _e,l as ve,m as ye,n as be,o as xe,p as Se,r as Ce,s as we,t as Te,v as O,w as Ee}from"./assert-C0K-c4eo.js";import{C as De,D as Oe,E as ke,O as k,P as Ae,S as je,_ as Me,a as A,b as Ne,c as Pe,d as Fe,f as Ie,g as Le,i as j,j as Re,k as ze,l as M,o as N,r as Be,t as P,v as F,w as Ve,y as He}from"./query-keys-BloKtaXJ.js";import{t as Ue}from"./mutation-Rr0TIvcj.js";import{t as I}from"./useMutation-m8WGNPrz.js";import{t as We}from"./dialog-actions-B1axpEg7.js";var Ge=e(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),Ke=e(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),qe=e(`coffee`,[[`path`,{d:`M10 2v2`,key:`7u0qdc`}],[`path`,{d:`M14 2v2`,key:`6buw04`}],[`path`,{d:`M16 8a1 1 0 0 1 1 1v8a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1h14a4 4 0 1 1 0 8h-1`,key:`pwadti`}],[`path`,{d:`M6 2v2`,key:`colzsn`}]]),Je=e(`cpu`,[[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M17 20v2`,key:`1rnc9c`}],[`path`,{d:`M17 2v2`,key:`11trls`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M2 17h2`,key:`7oei6x`}],[`path`,{d:`M2 7h2`,key:`asdhe0`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`M20 17h2`,key:`1fpfkl`}],[`path`,{d:`M20 7h2`,key:`1o8tra`}],[`path`,{d:`M7 20v2`,key:`4gnj0m`}],[`path`,{d:`M7 2v2`,key:`1i4yhu`}],[`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`2`,key:`1vbyd7`}],[`rect`,{x:`8`,y:`8`,width:`8`,height:`8`,rx:`1`,key:`z9xiuo`}]]),Ye=e(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),Xe=e(`hand-heart`,[[`path`,{d:`M11 14h2a2 2 0 0 0 0-4h-3c-.6 0-1.1.2-1.4.6L3 16`,key:`1v1a37`}],[`path`,{d:`m14.45 13.39 5.05-4.694C20.196 8 21 6.85 21 5.75a2.75 2.75 0 0 0-4.797-1.837.276.276 0 0 1-.406 0A2.75 2.75 0 0 0 11 5.75c0 1.2.802 2.248 1.5 2.946L16 11.95`,key:`fhfbnt`}],[`path`,{d:`m2 15 6 6`,key:`10dquu`}],[`path`,{d:`m7 20 1.6-1.4c.3-.4.8-.6 1.4-.6h4c1.1 0 2.1-.4 2.8-1.2l4.6-4.4a1 1 0 0 0-2.75-2.91`,key:`1x6kdw`}]]),Ze=e(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Qe=e(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),$e=e(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),et=e(`memory-stick`,[[`path`,{d:`M12 12v-2`,key:`fwoke6`}],[`path`,{d:`M12 18v-2`,key:`qj6yno`}],[`path`,{d:`M16 12v-2`,key:`heuere`}],[`path`,{d:`M16 18v-2`,key:`s1ct0w`}],[`path`,{d:`M2 11h1.5`,key:`15p63e`}],[`path`,{d:`M20 18v-2`,key:`12ehxp`}],[`path`,{d:`M20.5 11H22`,key:`khsy7a`}],[`path`,{d:`M4 18v-2`,key:`1c3oqr`}],[`path`,{d:`M8 12v-2`,key:`1mwtfd`}],[`path`,{d:`M8 18v-2`,key:`qcmpov`}],[`rect`,{x:`2`,y:`6`,width:`20`,height:`10`,rx:`2`,key:`1qcswk`}]]),tt=e(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),nt=e(`monitor`,[[`rect`,{width:`20`,height:`14`,x:`2`,y:`3`,rx:`2`,key:`48i651`}],[`line`,{x1:`8`,x2:`16`,y1:`21`,y2:`21`,key:`1svkeh`}],[`line`,{x1:`12`,x2:`12`,y1:`17`,y2:`21`,key:`vw1qmm`}]]),rt=e(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),it=e(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),at=e(`qr-code`,[[`rect`,{width:`5`,height:`5`,x:`3`,y:`3`,rx:`1`,key:`1tu5fj`}],[`rect`,{width:`5`,height:`5`,x:`16`,y:`3`,rx:`1`,key:`1v8r4q`}],[`rect`,{width:`5`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`1x03jg`}],[`path`,{d:`M21 16h-3a2 2 0 0 0-2 2v3`,key:`177gqh`}],[`path`,{d:`M21 21v.01`,key:`ents32`}],[`path`,{d:`M12 7v3a2 2 0 0 1-2 2H7`,key:`8crl2c`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M12 3h.01`,key:`n36tog`}],[`path`,{d:`M12 16v.01`,key:`133mhm`}],[`path`,{d:`M16 12h1`,key:`1slzba`}],[`path`,{d:`M21 12v.01`,key:`1lwtk9`}],[`path`,{d:`M12 21v-1`,key:`1880an`}]]),ot=e(`rocket`,[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]),st=e(`scroll-text`,[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]),ct=e(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),lt=e(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ut=e(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),dt=e(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),ft=e(`timer`,[[`line`,{x1:`10`,x2:`14`,y1:`2`,y2:`2`,key:`14vaq8`}],[`line`,{x1:`12`,x2:`15`,y1:`14`,y2:`11`,key:`17fdiu`}],[`circle`,{cx:`12`,cy:`14`,r:`8`,key:`1e1u0o`}]]);function pt(e){let t;if(e.then(e=>(t=e,e),k)?.catch?.(k),t!==void 0)return{data:t}}function mt(e){return{mutationKey:e.options.mutationKey,state:e.state,...e.options.scope&&{scope:e.options.scope},...e.meta&&{meta:e.meta}}}function ht(e,t,n){let r=e.promise?.then(t).catch(e=>n?.(e)===!1?Promise.reject(e):Promise.reject(Error(`redacted`)));return r?.catch(k),r}function gt(e,t,n){return{dehydratedAt:Date.now(),state:{...e.state,...e.state.data!==void 0&&{data:t?t(e.state.data):e.state.data}},queryKey:e.queryKey,queryHash:e.queryHash,...e.state.status===`pending`&&{promise:ht(e,t,n)},...e.meta&&{meta:e.meta},...e.queryType&&{queryType:e.queryType}}}function _t(e){return e.state.isPaused}function vt(e){return e.state.status===`success`}function yt(e,t={}){let n=t.shouldDehydrateMutation??e.getDefaultOptions().dehydrate?.shouldDehydrateMutation??_t,r=e.getMutationCache().getAll().flatMap(e=>n(e)?[mt(e)]:[]),i=t.shouldDehydrateQuery??e.getDefaultOptions().dehydrate?.shouldDehydrateQuery??vt,a=t.shouldRedactErrors??e.getDefaultOptions().dehydrate?.shouldRedactErrors,o=t.serializeData??e.getDefaultOptions().dehydrate?.serializeData;return{mutations:r,queries:e.getQueryCache().getAll().flatMap(e=>i(e)?[gt(e,o,a)]:[])}}function bt(e,t,n){let r=e.getMutationCache(),i=e.getQueryCache(),a=n?.defaultOptions?.deserializeData??e.getDefaultOptions().hydrate?.deserializeData;t.mutations?.forEach(({state:t,...i})=>{r.build(e,{...e.getDefaultOptions().hydrate?.mutations,...n?.defaultOptions?.mutations,...i},t)}),t.queries?.forEach(({queryKey:t,state:r,queryHash:o,meta:s,promise:c,dehydratedAt:l,queryType:u})=>{let d=c?pt(c):void 0,f=r.data===void 0?d?.data:r.data,p=f===void 0?f:a?a(f):f,m=i.get(o),h=m?.state.status===`pending`,g=m?.state.fetchStatus===`fetching`;if(m){let e=d&&l!==void 0&&l>m.state.dataUpdatedAt;if(r.dataUpdatedAt>m.state.dataUpdatedAt||e){let{fetchStatus:e,...t}=r;m.setState({...t,data:p,...r.status===`pending`&&p!==void 0&&{status:`success`,dataUpdatedAt:l??Date.now(),...!g&&{fetchStatus:`idle`}}})}}else m=i.build(e,{...e.getDefaultOptions().hydrate?.queries,...n?.defaultOptions?.queries,queryKey:t,queryHash:o,meta:s,_type:u},{...r,data:p,fetchStatus:`idle`,status:r.status===`pending`&&p!==void 0?`success`:r.status,...r.status===`pending`&&p!==void 0&&{dataUpdatedAt:l??Date.now()}});c&&!d&&!h&&!g&&(l===void 0||l>m.state.dataUpdatedAt)&&m.fetch(void 0,{initialPromise:Promise.resolve(c).then(a)}).catch(k)})}var xt=class extends Ne{#e;#t;#n;constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}build(e,t,n){let r=new Ue({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=St(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=St(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=St(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=St(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){F.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ke(t,e))}findAll(e={}){return this.getAll().filter(t=>ke(e,t))}notify(e){F.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return F.batch(()=>Promise.all(e.map(e=>e.continue().catch(k))))}};function St(e){return e.options.scope?.id}var Ct=class extends Ne{#e;constructor(e={}){super(),this.config=e,this.#e=new Map}build(e,t,n){let r=t.queryKey,i=t.queryHash??Ve(r,t),a=this.get(i);return a||(a=new Ie({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){F.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>Oe(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>Oe(e,t)):t}notify(e){F.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){F.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){F.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},wt=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ct,this.#t=e.mutationCache||new xt,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=He.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Me.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Re(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=je(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return F.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;F.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return F.batch(()=>{let r=n.findAll(e),i=new Set(r);return r.forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,predicate:e=>i.has(e)},t)})}cancelQueries(e,t={}){let n={revert:!0,...t},r=F.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(k).catch(k)}invalidateQueries(e,t={}){return F.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=F.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(k)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(k)}async query(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t),r=n.isStaleByTime(Re(t.staleTime,n))?await n.fetch(t):n.state.data,i=t.select;return i?i(r):r}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(Re(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(k).catch(k)}infiniteQuery(e){return e._type=`infinite`,this.query(e)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(k).catch(k)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return Me.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(De(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ze(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(De(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ze(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=Ve(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===Ae&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},L=t(n(),1),Tt=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,Et=/^[\\/]{2}/;function Dt(e,t){return t+e.replace(/\\/g,`/`)}var Ot=`popstate`;function kt(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function At(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return Nt(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:Pt(t)}return It(t,n,null,e)}function R(e,t){if(e===!1||e==null)throw Error(t)}function z(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function jt(){return Math.random().toString(36).substring(2,10)}function Mt(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function Nt(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Ft(t):t,state:n,key:t&&t.key||r||jt(),mask:i}}function Pt({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function Ft(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function It(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,l=u();l??(l=0,o.replaceState({...o.state,idx:l},``));function u(){return(o.state||{idx:null}).idx}function d(){s=`POP`;let e=u(),t=e==null?null:e-l;l=e,c&&c({action:s,location:h.location,delta:t})}function f(e,t){s=`PUSH`;let r=kt(e)?e:Nt(h.location,e,t);n&&n(r,e),l=u()+1;let d=Mt(r,l),f=h.createHref(r.mask||r);try{o.pushState(d,``,f)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(f)}a&&c&&c({action:s,location:h.location,delta:1})}function p(e,t){s=`REPLACE`;let r=kt(e)?e:Nt(h.location,e,t);n&&n(r,e),l=u();let i=Mt(r,l),d=h.createHref(r.mask||r);o.replaceState(i,``,d),a&&c&&c({action:s,location:h.location,delta:0})}function m(e){return Lt(i,e)}let h={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(Ot,d),c=e,()=>{i.removeEventListener(Ot,d),c=null}},createHref(e){return t(i,e)},createURL:m,encodeLocation(e){let t=m(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:f,replace:p,go(e){return o.go(e)}};return h}function Lt(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),R(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:Pt(t);return i=i.replace(/ $/,`%20`),!n&&Et.test(i)&&(i=r+i),new URL(i,r)}function Rt(e,t,n=`/`){return zt(e,t,n,!1)}function zt(e,t,n,r,i){let a=B((typeof t==`string`?Ft(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Bt(e),s=null,c=rn(a);for(let e=0;s==null&&e<o.length;++e)s=$t(o[e],c,r);return s}function Bt(e){let t=Vt(e);return Ut(t),t}function Vt(e,t=[],n=[],r=``,i=!1){let a=(e,a,o=i,s)=>{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;R(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=V([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(R(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),Vt(e.children,t,u,l,o)),(e.path!=null||e.index)&&t.push({path:l,score:Zt(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=nn(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of Ht(e.path))a(e,t,!0,n)}),t}function Ht(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=Ht(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function Ut(e){e.sort((e,t)=>e.score===t.score?Qt(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Wt=/^:[\w-]+$/,Gt=3,Kt=2,qt=1,Jt=10,Yt=-2,Xt=e=>e===`*`;function Zt(e,t){let n=e.split(`/`),r=n.length;return n.some(Xt)&&(r+=Yt),t&&(r+=Kt),n.filter(e=>!Xt(e)).reduce((e,t)=>e+(Wt.test(t)?Gt:t===``?qt:Jt),r)}function Qt(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function $t(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e<r.length;++e){let s=r[e],c=e===r.length-1,l=a===`/`?t:t.slice(a.length)||`/`,u={path:s.relativePath,caseSensitive:s.caseSensitive,end:c},d=s.matcher&&s.compiledParams?tn(u,l,s.matcher,s.compiledParams):en(u,l),f=s.route;if(!d&&c&&n&&!r[r.length-1].route.index&&(d=en({path:s.relativePath,caseSensitive:s.caseSensitive,end:!1},l)),!d)return null;Object.assign(i,d.params),o.push({params:i,pathname:V([a,d.pathname]),pathnameBase:pn(V([a,d.pathnameBase])),route:f}),d.pathnameBase!==`/`&&(a=V([a,d.pathnameBase]))}return o}function en(e,t){typeof e==`string`&&(e={path:e,caseSensitive:!1,end:!0});let[n,r]=nn(e.path,e.caseSensitive,e.end);return tn(e,t,n,r)}function tn(e,t,n,r){let i=t.match(n);if(!i)return null;let a=i[0],o=fn(a,1),s=i.slice(1);return{params:r.reduce((e,{paramName:t,isOptional:n},r)=>{if(t===`*`){let e=s[r]||``;o=fn(a.slice(0,a.length-e.length),1)}let i=s[r];return e[t]=n&&!i?void 0:(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function nn(e,t=!1,n=!0){z(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function rn(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return z(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function B(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function an(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Ft(e):e,a;return n?(n=dn(n),a=n.startsWith(`/`)||n.startsWith(`\\`)?on(n.substring(1),`/`):on(n,t)):a=t,{pathname:a,search:mn(r),hash:hn(i)}}function on(e,t){let n=fn(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function sn(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function cn(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function ln(e){let t=cn(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function un(e,t,n,r=!1){let i;typeof e==`string`?i=Ft(e):(i={...e},R(!i.pathname||!i.pathname.includes(`?`),sn(`?`,`pathname`,`search`,i)),R(!i.pathname||!i.pathname.includes(`#`),sn(`#`,`pathname`,`hash`,i)),R(!i.search||!i.search.includes(`#`),sn(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=an(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var dn=e=>e.replace(/[\\/]{2,}/g,`/`),V=e=>dn(e.join(`/`));function fn(e,t=0){let n=e.length;for(;n>t&&e.charCodeAt(n-1)===47;)n--;return n===e.length?e:e.slice(0,n)}var pn=e=>fn(e).replace(/^\/*/,`/`),mn=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,hn=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,gn=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function _n(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function vn(e){return V(e.map(e=>e.route.path).filter(Boolean))||`/`}var yn=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function bn(e,t){let n=e;if(typeof n!=`string`||!Tt.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(yn)try{let e=new URL(window.location.href),r=Et.test(n)?new URL(Dt(n,e.protocol)):new URL(n),a=B(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{z(!1,`<Link to="${n}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var xn=new URL(`http://localhost`);function Sn(e){if(e.createURL)return e.createURL(`/`);try{return new URL(e.createHref(`/`),xn)}catch{return xn}}function Cn(e,t){return e.origin===t.origin&&(e.origin!==`null`||e.protocol===t.protocol&&e.host===t.host)}function wn(e,t){if(e.startsWith(`//`))return!0;let n=t.protocol.toLowerCase();return e.toLowerCase().startsWith(n)?t.host===``||e.slice(n.length).startsWith(`//`):!1}function Tn(e,t,n,r){let i=null;try{i=e==null?null:new URL(e,n)}catch{}let a=new URL(t,n),o=i!=null&&!Cn(i,n),s=!Cn(a,n);if(r===`reject`){if(o||s)throw Error(`External navigation is not allowed`)}else if(s&&(i==null||!wn(e,i)||!Cn(i,a)))throw Error(`External navigation is not allowed`)}var En=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(En);var Dn=[`GET`,...En];new Set(Dn);var On=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function kn(e){try{return On.includes(new URL(e).protocol)}catch{return!1}}var An=L.createContext(null);An.displayName=`DataRouter`;var jn=L.createContext(null);jn.displayName=`DataRouterState`;var Mn=L.createContext(!1);function Nn(){return L.useContext(Mn)}var Pn=L.createContext({isTransitioning:!1});Pn.displayName=`ViewTransition`;var Fn=L.createContext(new Map);Fn.displayName=`Fetchers`;var In=L.createContext(null);In.displayName=`Await`;var H=L.createContext(null);H.displayName=`Navigation`;var Ln=L.createContext(null);Ln.displayName=`Location`;var U=L.createContext({outlet:null,matches:[],isDataRoute:!1});U.displayName=`Route`;var Rn=L.createContext(null);Rn.displayName=`RouteError`;var zn=`REACT_ROUTER_ERROR`,Bn=`REDIRECT`,Vn=`ROUTE_ERROR_RESPONSE`;function Hn(e){if(e.startsWith(`${zn}:${Bn}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function Un(e){if(e.startsWith(`${zn}:${Vn}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new gn(t.status,t.statusText,t.data)}catch{}}function Wn(e,{relative:t}={}){R(Gn(),`useHref() may be used only in the context of a <Router> component.`);let{basename:n,navigator:r}=L.useContext(H),{hash:i,pathname:a,search:o}=Xn(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:V([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Gn(){return L.useContext(Ln)!=null}function W(){return R(Gn(),`useLocation() may be used only in the context of a <Router> component.`),L.useContext(Ln).location}var Kn=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function qn(e){L.useContext(H).static||L.useLayoutEffect(e)}function G(){let{isDataRoute:e}=L.useContext(U);return e?pr():Jn()}function Jn(){R(Gn(),`useNavigate() may be used only in the context of a <Router> component.`);let e=L.useContext(An),{basename:t,navigator:n}=L.useContext(H),{matches:r}=L.useContext(U),{pathname:i}=W(),a=JSON.stringify(ln(r)),o=L.useRef(!1);return qn(()=>{o.current=!0}),L.useCallback((r,s={})=>{if(z(o.current,Kn),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=un(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:V([t,c.pathname])),Tn(typeof r==`string`?r:Pt(r),n.createHref(c),Sn(n),`reject`),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}L.createContext(null);function Yn(){let{matches:e}=L.useContext(U);return e[e.length-1]?.params??{}}function Xn(e,{relative:t}={}){let{matches:n}=L.useContext(U),{pathname:r}=W(),i=JSON.stringify(ln(n));return L.useMemo(()=>un(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function Zn(e,t){return Qn(e,t)}function Qn(e,t,n){R(Gn(),`useRoutes() may be used only in the context of a <Router> component.`);let{navigator:r}=L.useContext(H),{matches:i}=L.useContext(U),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;hr(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant <Routes> (or called \`useRoutes()\`) at "${s}" (under <Route path="${e}">) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render.
3
+
4
+ Please change the parent <Route path="${e}"> to <Route path="${e===`/`?`*`:`${e}/*`}">.`)}let u=W(),d;if(t){let e=typeof t==`string`?Ft(t):t;R(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Rt(e,{pathname:p});z(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),z(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an <Outlet /> with a null value by default resulting in an "empty" page.`);let h=ar(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:V([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:V([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?L.createElement(Ln.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function $n(){let e=fr(),t=_n(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=L.createElement(L.Fragment,null,L.createElement(`p`,null,`💿 Hey developer 👋`),L.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,L.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,L.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),L.createElement(L.Fragment,null,L.createElement(`h2`,null,`Unexpected Application Error!`),L.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?L.createElement(`pre`,{style:i},n):null,o)}var er=L.createElement($n,null),tr=class extends L.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=Un(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:L.createElement(U.Provider,{value:this.props.routeContext},L.createElement(Rn.Provider,{value:e,children:this.props.component}));return this.context?L.createElement(rr,{error:e},t):t}};tr.contextType=Mn;var nr=new WeakMap;function rr({children:e,error:t}){let{basename:n,navigator:r}=L.useContext(H);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=Hn(t.digest);if(e){let i=nr.get(t);if(i)throw i;let a=bn(e.location,n),o=a.absoluteURL||a.to;if(Tn(e.location,o,Sn(r),`allow-explicit`),kn(o))throw Error(`Invalid redirect location`);if(yn&&!nr.get(t)){if(a.isExternal||e.reloadDocument)window.location.href=o;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(a.to,{replace:e.replace}));throw nr.set(t,n),n}}return L.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${o}`})}}return e}function ir({routeContext:e,match:t,children:n}){let r=L.useContext(An);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),L.createElement(U.Provider,{value:e},n)}function ar(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);R(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e<i.length;e++){let t=i[e];if((t.route.HydrateFallback||t.route.hydrateFallbackElement)&&(s=e),t.route.id){let{loaderData:e,errors:a}=r,c=t.route.loader&&!e.hasOwnProperty(t.route.id)&&(!a||a[t.route.id]===void 0);if(t.route.lazy||c){n.isStatic&&(o=!0),i=s>=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:vn(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||er,o&&(s<0&&c===0?(hr(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?L.createElement(n.route.Component,null):n.route.element?n.route.element:e,L.createElement(ir,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?L.createElement(tr,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function or(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function sr(e){let t=L.useContext(An);return R(t,or(e)),t}function cr(e){let t=L.useContext(jn);return R(t,or(e)),t}function lr(e){let t=L.useContext(U);return R(t,or(e)),t}function ur(e){let t=lr(e),n=t.matches[t.matches.length-1];return R(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function dr(){return ur(`useRouteId`)}function fr(){let e=L.useContext(Rn),t=cr(`useRouteError`),n=ur(`useRouteError`);return e===void 0?t.errors?.[n]:e}function pr(){let{router:e}=sr(`useNavigate`),t=ur(`useNavigate`),n=L.useRef(!1);return qn(()=>{n.current=!0}),L.useCallback(async(r,i={})=>{z(n.current,Kn),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var mr={};function hr(e,t,n){!t&&!mr[e]&&(mr[e]=!0,z(!1,n))}L.memo(gr);function gr({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Qn(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function _r({to:e,replace:t,state:n,relative:r}){R(Gn(),`<Navigate> may be used only in the context of a <Router> component.`);let{static:i,navigator:a}=L.useContext(H);z(!i,`<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.`);let{matches:o}=L.useContext(U),{pathname:s}=W(),c=G(),l=un(e,ln(o),s,r===`path`);Tn(typeof e==`string`?e:Pt(e),a.createHref(l),Sn(a),`reject`);let u=JSON.stringify(l);return L.useEffect(()=>{c(JSON.parse(u),{replace:t,state:n,relative:r})},[c,u,r,t,n]),null}function K(e){R(!1,`A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.`)}function vr({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){R(!Gn(),`You cannot render a <Router> inside another <Router>. You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=L.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Ft(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=L.useMemo(()=>{let e=B(l,s);return e==null?null:{location:{pathname:e,search:u,hash:d,state:f,key:p,mask:m},navigationType:r}},[s,l,u,d,f,p,r,m]);return z(h!=null,`<Router basename="${s}"> is not able to match the URL "${l}${u}${d}" because it does not start with the basename, so the <Router> won't render anything.`),h==null?null:L.createElement(H.Provider,{value:c},L.createElement(Ln.Provider,{children:t,value:h}))}function yr({children:e,location:t}){return Zn(br(e),t)}L.Component;function br(e,t=[]){let n=[];return L.Children.forEach(e,(e,r)=>{if(!L.isValidElement(e))return;let i=[...t,r];if(e.type===L.Fragment){n.push.apply(n,br(e.props.children,i));return}R(e.type===K,`[${typeof e.type==`string`?e.type:e.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`),R(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=br(e.props.children,i)),n.push(a)}),n}var xr=`get`,Sr=`application/x-www-form-urlencoded`;function Cr(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function wr(e){return Cr(e)&&e.tagName.toLowerCase()===`button`}function Tr(e){return Cr(e)&&e.tagName.toLowerCase()===`form`}function Er(e){return Cr(e)&&e.tagName.toLowerCase()===`input`}function Dr(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Or(e,t){return e.button===0&&(!t||t===`_self`)&&!Dr(e)}function kr(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function Ar(e,t){let n=kr(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var jr=null;function Mr(){if(jr===null)try{new FormData(document.createElement(`form`),0),jr=!1}catch{jr=!0}return jr}var Nr=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Pr(e){return e!=null&&!Nr.has(e)?(z(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${Sr}"`),null):e}function Fr(e,t){let n,r,i,a,o;if(Tr(e)){let o=e.getAttribute(`action`);r=o?B(o,t):null,n=e.getAttribute(`method`)||xr,i=Pr(e.getAttribute(`enctype`))||Sr,a=new FormData(e)}else if(wr(e)||Er(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a <button> or <input type="submit"> without a <form>`);let s=e.getAttribute(`formaction`)||o.getAttribute(`action`);if(r=s?B(s,t):null,n=e.getAttribute(`formmethod`)||o.getAttribute(`method`)||xr,i=Pr(e.getAttribute(`formenctype`))||Pr(o.getAttribute(`enctype`))||Sr,a=new FormData(o,e),!Mr()){let{name:t,type:n,value:r}=e;if(n===`image`){let e=t?`${t}.`:``;a.append(`${e}x`,`0`),a.append(`${e}y`,`0`)}else t&&a.append(t,r)}}else if(Cr(e))throw Error(`Cannot submit element that is not <form>, <button>, or <input type="submit|image">`);else n=xr,r=null,i=Sr,o=e;return a&&i===`text/plain`&&(o=a,a=void 0),{action:r,method:n.toLowerCase(),encType:i,formData:a,body:o}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);function Ir(e,t){if(e===!1||e==null)throw Error(t)}function Lr(e,t,n,r){let i=typeof e==`string`?new URL(e,typeof window>`u`?`server://singlefetch/`:window.location.origin):e;return i.pathname=n?i.pathname.endsWith(`/`)?`${i.pathname}_.${r}`:`${i.pathname}.${r}`:i.pathname===`/`?`_root.${r}`:t&&B(i.pathname,t)===`/`?`${fn(t)}/_root.${r}`:`${fn(i.pathname)}.${r}`,i}async function Rr(e,t){if(e.id in t)return t[e.id];try{let n=await i(()=>import(e.module),[]);return t[e.id]=n,n}catch(t){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(t),window.__reactRouterContext&&window.__reactRouterContext.isSpaMode,window.location.reload(),new Promise(()=>{})}}function zr(e){return e!=null&&typeof e.page==`string`}function Br(e){return e==null?!1:e.href==null?e.rel===`preload`&&typeof e.imageSrcSet==`string`&&typeof e.imageSizes==`string`:typeof e.rel==`string`&&typeof e.href==`string`}async function Vr(e,t,n){return Kr((await Promise.all(e.map(async e=>{let r=t.routes[e.route.id];if(r){let e=await Rr(r,n);return e.links?e.links():[]}return[]}))).flat(1).filter(Br).filter(e=>e.rel===`stylesheet`||e.rel===`preload`).map(e=>e.rel===`stylesheet`?{...e,rel:`prefetch`,as:`style`}:{...e,rel:`prefetch`}))}function Hr(e,t,n,r,i,a){let o=(e,t)=>!n[t]||e.route.id!==n[t].route.id,s=(e,t)=>n[t].pathname!==e.pathname||n[t].route.path?.endsWith(`*`)&&n[t].params[`*`]!==e.params[`*`];return a===`assets`?t.filter((e,t)=>o(e,t)||s(e,t)):a===`data`?t.filter((t,a)=>{let c=r.routes[t.route.id];if(!c||!c.hasLoader)return!1;if(o(t,a)||s(t,a))return!0;if(t.route.shouldRevalidate){let r=t.route.shouldRevalidate({currentUrl:new URL(i.pathname+i.search+i.hash,window.origin),currentParams:n[0]?.params||{},nextUrl:new URL(e,window.origin),nextParams:t.params,defaultShouldRevalidate:!0});if(typeof r==`boolean`)return r}return!0}):[]}function Ur(e,t,{includeHydrateFallback:n}={}){return Wr(e.map(e=>{let r=t.routes[e.route.id];if(!r)return[];let i=[r.module];return r.clientActionModule&&(i=i.concat(r.clientActionModule)),r.clientLoaderModule&&(i=i.concat(r.clientLoaderModule)),n&&r.hydrateFallbackModule&&(i=i.concat(r.hydrateFallbackModule)),r.imports&&(i=i.concat(r.imports)),i}).flat(1))}function Wr(e){return[...new Set(e)]}function Gr(e){let t={},n=Object.keys(e).sort();for(let r of n)t[r]=e[r];return t}function Kr(e,t){let n=new Set,r=new Set(t);return e.reduce((e,i)=>{if(t&&!zr(i)&&i.as===`script`&&i.href&&r.has(i.href))return e;let a=JSON.stringify(Gr(i));return n.has(a)||(n.add(a),e.push({key:a,link:i})),e},[])}function qr(){let e=L.useContext(An);return Ir(e,`You must render this element inside a <DataRouterContext.Provider> element`),e}function Jr(){let e=L.useContext(jn);return Ir(e,`You must render this element inside a <DataRouterStateContext.Provider> element`),e}var Yr=L.createContext(void 0);Yr.displayName=`FrameworkContext`;function Xr(){let e=L.useContext(Yr);return Ir(e,`You must render this element inside a <HydratedRouter> element`),e}function Zr(e,t){let n=L.useContext(Yr),[r,i]=L.useState(!1),[a,o]=L.useState(!1),{onFocus:s,onBlur:c,onMouseEnter:l,onMouseLeave:u,onTouchStart:d}=t,f=L.useRef(null);L.useEffect(()=>{if(e===`render`&&o(!0),e===`viewport`){let e=new IntersectionObserver(e=>{e.forEach(e=>{o(e.isIntersecting)})},{threshold:.5});return f.current&&e.observe(f.current),()=>{e.disconnect()}}},[e]),L.useEffect(()=>{if(r){let e=setTimeout(()=>{o(!0)},100);return()=>{clearTimeout(e)}}},[r]);let p=()=>{i(!0)},m=()=>{i(!1),o(!1)};return n?e===`intent`?[a,f,{onFocus:Qr(s,p),onBlur:Qr(c,m),onMouseEnter:Qr(l,p),onMouseLeave:Qr(u,m),onTouchStart:Qr(d,p)}]:[a,f,{}]:[!1,f,{}]}function Qr(e,t){return n=>{e&&e(n),n.defaultPrevented||t(n)}}function $r({page:e,...t}){let n=Nn(),{nonce:r}=Xr(),{router:i}=qr(),a=L.useMemo(()=>Rt(i.routes,e,i.basename),[i.routes,e,i.basename]);return a?(t.nonce==null&&r&&(t={...t,nonce:r}),n?L.createElement(ti,{page:e,matches:a,...t}):L.createElement(ni,{page:e,matches:a,...t})):null}function ei(e){let{manifest:t,routeModules:n}=Xr(),[r,i]=L.useState([]);return L.useEffect(()=>{let r=!1;return Vr(e,t,n).then(e=>{r||i(e)}),()=>{r=!0}},[e,t,n]),r}function ti({page:e,matches:t,...n}){let r=W(),{future:i}=Xr(),{basename:a}=qr(),o=L.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=Lr(e,a,i.v8_trailingSlashAwareDataRequests,`rsc`),o=!1,s=[];for(let e of t)typeof e.route.shouldRevalidate==`function`?o=!0:s.push(e.route.id);return o&&s.length>0&&n.searchParams.set(`_routes`,s.join(`,`)),[n.pathname+n.search]},[a,i.v8_trailingSlashAwareDataRequests,e,r,t]);return L.createElement(L.Fragment,null,o.map(e=>L.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})))}function ni({page:e,matches:t,...n}){let r=W(),{future:i,manifest:a,routeModules:o}=Xr(),{basename:s}=qr(),{loaderData:c,matches:l}=Jr(),u=L.useMemo(()=>Hr(e,t,l,a,r,`data`),[e,t,l,a,r]),d=L.useMemo(()=>Hr(e,t,l,a,r,`assets`),[e,t,l,a,r]),f=L.useMemo(()=>{if(e===r.pathname+r.search+r.hash)return[];let n=new Set,l=!1;if(t.forEach(e=>{let t=a.routes[e.route.id];t&&t.hasLoader&&(!u.some(t=>t.route.id===e.route.id)&&e.route.id in c&&o[e.route.id]?.shouldRevalidate||t.hasClientLoader?l=!0:n.add(e.route.id))}),n.size===0)return[];let d=Lr(e,s,i.v8_trailingSlashAwareDataRequests,`data`);return l&&n.size>0&&d.searchParams.set(`_routes`,t.filter(e=>n.has(e.route.id)).map(e=>e.route.id).join(`,`)),[d.pathname+d.search]},[s,i.v8_trailingSlashAwareDataRequests,c,r,a,u,t,e,o]),p=L.useMemo(()=>Ur(d,a),[d,a]),m=ei(d);return L.createElement(L.Fragment,null,f.map(e=>L.createElement(`link`,{key:e,rel:`prefetch`,as:`fetch`,href:e,...n})),p.map(e=>L.createElement(`link`,{key:e,rel:`modulepreload`,href:e,...n})),m.map(({key:e,link:t})=>L.createElement(`link`,{key:e,nonce:n.nonce,...t,crossOrigin:t.crossOrigin??n.crossOrigin})))}function ri(...e){return t=>{e.forEach(e=>{typeof e==`function`?e(t):e!=null&&(e.current=t)})}}L.Component;var ii=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;try{ii&&(window.__reactRouterVersion=`7.18.3`)}catch{}function ai({basename:e,children:t,useTransitions:n,window:r}){let i=L.useRef();i.current??=At({window:r,v5Compat:!0});let a=i.current,[o,s]=L.useState({action:a.action,location:a.location}),c=L.useCallback(e=>{n===!1?s(e):L.startTransition(()=>s(e))},[n]);return L.useLayoutEffect(()=>a.listen(c),[a,c]),L.createElement(vr,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:a,useTransitions:n})}var oi=L.forwardRef(function({onClick:e,discover:t=`render`,prefetch:n=`none`,relative:r,reloadDocument:i,replace:a,mask:o,state:s,target:c,to:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m){let{basename:h,navigator:g,useTransitions:_}=L.useContext(H),v=typeof l==`string`&&Tt.test(l),y=bn(l,h);l=y.to;let b=Wn(l,{relative:r}),x=W(),S=null;if(o){let e=un(o,[],x.mask?x.mask.pathname:`/`,!0);h!==`/`&&(e.pathname=e.pathname===`/`?h:V([h,e.pathname])),S=g.createHref(e)}let[C,ee,te]=Zr(n,p),ne=di(l,{replace:a,mask:o,state:s,target:c,preventScrollReset:u,relative:r,viewTransition:d,defaultShouldRevalidate:f,useTransitions:_});function re(t){e&&e(t),t.defaultPrevented||ne(t)}let ie=!(y.isExternal||i),w=L.createElement(`a`,{...p,...te,href:(ie?S:void 0)||y.absoluteURL||b,onClick:ie?re:e,ref:ri(m,ee),target:c,"data-discover":!v&&t===`render`?`true`:void 0});return C&&!v?L.createElement(L.Fragment,null,w,L.createElement($r,{page:b})):w});oi.displayName=`Link`;var si=L.forwardRef(function({"aria-current":e=`page`,caseSensitive:t=!1,className:n=``,end:r=!1,style:i,to:a,viewTransition:o,children:s,...c},l){let u=Xn(a,{relative:c.relative}),d=W(),f=L.useContext(jn),{navigator:p,basename:m}=L.useContext(H),h=f!=null&&_i(u)&&o===!0,g=p.encodeLocation?p.encodeLocation(u).pathname:u.pathname,_=d.pathname,v=f&&f.navigation&&f.navigation.location?f.navigation.location.pathname:null;t||(_=_.toLowerCase(),v=v?v.toLowerCase():null,g=g.toLowerCase()),v&&m&&(v=B(v,m)||v);let y=g!==`/`&&g.endsWith(`/`)?g.length-1:g.length,b=_===g||!r&&_.startsWith(g)&&_.charAt(y)===`/`,x=v!=null&&(v===g||!r&&v.startsWith(g)&&v.charAt(g.length)===`/`),S={isActive:b,isPending:x,isTransitioning:h},C=b?e:void 0,ee;ee=typeof n==`function`?n(S):[n,b?`active`:null,x?`pending`:null,h?`transitioning`:null].filter(Boolean).join(` `);let te=typeof i==`function`?i(S):i;return L.createElement(oi,{...c,"aria-current":C,className:ee,ref:l,style:te,to:a,viewTransition:o},typeof s==`function`?s(S):s)});si.displayName=`NavLink`;var ci=L.forwardRef(({discover:e=`render`,fetcherKey:t,navigate:n,reloadDocument:r,replace:i,state:a,method:o=xr,action:s,onSubmit:c,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f,...p},m)=>{let{useTransitions:h}=L.useContext(H),g=hi(),_=gi(s,{relative:l}),v=o.toLowerCase()===`get`?`get`:`post`,y=typeof s==`string`&&Tt.test(s);return L.createElement(`form`,{ref:m,method:v,action:_,onSubmit:r?c:e=>{if(c&&c(e),e.defaultPrevented)return;e.preventDefault();let r=e.nativeEvent.submitter,s=r?.getAttribute(`formmethod`)||o,p=()=>g(r||e.currentTarget,{fetcherKey:t,method:s,navigate:n,replace:i,state:a,relative:l,preventScrollReset:u,viewTransition:d,defaultShouldRevalidate:f});h&&n!==!1?L.startTransition(()=>p()):p()},...p,"data-discover":!y&&e===`render`?`true`:void 0})});ci.displayName=`Form`;function li(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ui(e){let t=L.useContext(An);return R(t,li(e)),t}function di(e,{target:t,replace:n,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c,useTransitions:l}={}){let u=G(),d=W(),f=Xn(e,{relative:o});return L.useCallback(p=>{if(Or(p,t)){p.preventDefault();let t=n===void 0?Pt(d)===Pt(f):n,m=()=>u(e,{replace:t,mask:r,state:i,preventScrollReset:a,relative:o,viewTransition:s,defaultShouldRevalidate:c});l?L.startTransition(()=>m()):m()}},[d,u,f,n,r,i,t,e,a,o,s,c,l])}function fi(e){z(typeof URLSearchParams<`u`,"You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=L.useRef(kr(e)),n=L.useRef(!1),r=W(),i=L.useMemo(()=>Ar(r.search,n.current?null:t.current),[r.search]),a=G();return[i,L.useCallback((e,t)=>{let r=kr(typeof e==`function`?e(new URLSearchParams(i)):e);n.current=!0,a(`?`+r,t)},[a,i])]}var pi=0,mi=()=>`__${String(++pi)}__`;function hi(){let{router:e}=ui(`useSubmit`),{basename:t}=L.useContext(H),n=dr(),r=e.fetch,i=e.navigate;return L.useCallback(async(e,a={})=>{let{action:o,method:s,encType:c,formData:l,body:u}=Fr(e,t);if(a.navigate===!1){let e=a.fetcherKey||mi();await r(e,n,a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,flushSync:a.flushSync})}else await i(a.action||o,{defaultShouldRevalidate:a.defaultShouldRevalidate,preventScrollReset:a.preventScrollReset,formData:l,body:u,formMethod:a.method||s,formEncType:a.encType||c,replace:a.replace,state:a.state,fromRouteId:n,flushSync:a.flushSync,viewTransition:a.viewTransition})},[r,i,t,n])}function gi(e,{relative:t}={}){let{basename:n}=L.useContext(H),r=L.useContext(U);R(r,`useFormAction must be used inside a RouteContext`);let[i]=r.matches.slice(-1),a={...Xn(e||`.`,{relative:t})},o=W();if(e==null){a.search=o.search;let e=new URLSearchParams(a.search),t=e.getAll(`index`);if(t.some(e=>e===``)){e.delete(`index`),t.filter(e=>e).forEach(t=>e.append(`index`,t));let n=e.toString();a.search=n?`?${n}`:``}}return(!e||e===`.`)&&i.route.index&&(a.search=a.search?a.search.replace(/^\?/,`?index&`):`?index`),n!==`/`&&(a.pathname=a.pathname===`/`?n:V([n,a.pathname])),Pt(a)}function _i(e,{relative:t}={}){let n=L.useContext(Pn);R(n!=null,"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. Did you accidentally import `RouterProvider` from `react-router`?");let{basename:r}=ui(`useViewTransitionState`),i=Xn(e,{relative:t});if(!n.isTransitioning)return!1;let a=B(n.currentLocation.pathname,r)||n.currentLocation.pathname,o=B(n.nextLocation.pathname,r)||n.nextLocation.pathname;return en(i.pathname,o)!=null||en(i.pathname,a)!=null}var vi=o(),q=r(),yi=`https://saweria.co/risuncode`,bi=`/donation/qris-risun-marke.png`,xi=[{id:`en`,label:`EN`,name:`English`},{id:`id`,label:`ID`,name:`Bahasa Indonesia`},{id:`zh`,label:`中文`,name:`简体中文`},{id:`ja`,label:`日本語`,name:`日本語`}];function Si(){let[e,t]=(0,L.useState)(!1),[n,r]=(0,L.useState)(`en`),i=(0,L.useRef)(null);(0,L.useEffect)(()=>{if(!e)return;let n=e=>{i.current?.contains(e.target)||t(!1)},r=e=>{e.key===`Escape`&&t(!1)};return document.addEventListener(`mousedown`,n),document.addEventListener(`keydown`,r),()=>{document.removeEventListener(`mousedown`,n),document.removeEventListener(`keydown`,r)}},[e]);let a=xi.find(e=>e.id===n)??xi[0];return(0,q.jsxs)(`div`,{className:`relative`,ref:i,children:[(0,q.jsx)(`button`,{type:`button`,className:`topbar-icon-button`,"aria-haspopup":`menu`,"aria-expanded":e,"aria-label":`Change language — ${a.name}`,title:`Change language (coming soon)`,onClick:()=>t(e=>!e),children:(0,q.jsx)(Ze,{size:14,"aria-hidden":`true`})}),e?(0,q.jsxs)(`div`,{role:`menu`,className:`app-topbar-popover popout-enter glass absolute right-0 top-full z-popover mt-2 min-w-44 rounded-sidebar border border-inner-border bg-popover-bg p-2 shadow-popout`,children:[xi.map(e=>(0,q.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`flex w-full items-center justify-between gap-3 rounded-inset px-3 py-2 text-left text-body text-text-secondary hover:bg-hover-bg hover:text-text-primary`,onClick:()=>{r(e.id),t(!1)},children:[(0,q.jsx)(`span`,{children:e.name}),e.id===n?(0,q.jsx)(`span`,{className:`text-accent-text`,children:`✓`}):null]},e.id)),(0,q.jsx)(`p`,{className:`px-3 pb-1 pt-2 text-badge leading-snug text-text-tertiary`,children:`Translations are not wired up yet — the console stays in English for now.`})]}):null]})}function Ci({open:e,onClose:t}){return(0,q.jsx)(fe,{open:e,onClose:t,title:`Buy me a coffee`,description:`Support Cartethyia development via QRIS or Saweria.`,size:`lg`,footer:(0,q.jsxs)(We,{children:[(0,q.jsxs)(`a`,{href:bi,download:`qris-risun-marke.png`,className:`flex items-center gap-1.5 rounded-inset border border-inner-border px-3 py-2 text-body text-text-secondary hover:bg-hover-bg hover:text-text-primary`,children:[(0,q.jsx)(v,{size:14,"aria-hidden":`true`}),`Save QR`]}),(0,q.jsxs)(`a`,{href:yi,target:`_blank`,rel:`noreferrer noopener`,className:`flex items-center gap-1.5 rounded-inset bg-accent-bg px-4 py-2 text-body font-semibold text-accent-text hover:opacity-90`,children:[(0,q.jsx)(qe,{size:14,"aria-hidden":`true`}),`Donate via Saweria`,(0,q.jsx)(Ye,{size:12,"aria-hidden":`true`})]})]}),children:(0,q.jsxs)(`div`,{className:`grid grid-cols-1 gap-5 sm:gap-6 donate-qr-grid`,children:[(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,q.jsx)(`img`,{src:bi,alt:`QRIS payment code for RISUN`,className:`aspect-square w-full donate-qr-image rounded-inset border border-inner-border bg-white object-contain p-2`}),(0,q.jsxs)(`p`,{className:`flex items-center gap-1.5 text-badge text-text-tertiary`,children:[(0,q.jsx)(at,{size:12,"aria-hidden":`true`}),`Scan with any QRIS app`]})]}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`p`,{className:`text-body leading-relaxed text-text-secondary`,children:`Cartethyia is built in the spare hours between everything else — late nights, weekends, and a suspicious number of energy drinks. If it saved you an afternoon of fighting with rate limits, or made your proxy pool behave, a coffee genuinely helps keep the lights on and the commits coming.`}),(0,q.jsxs)(`ul`,{className:`mt-3 flex flex-col gap-1.5 text-caption text-text-secondary`,children:[(0,q.jsxs)(`li`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(p,{size:14,className:`mt-0.5 shrink-0 text-accent-text`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:`Keeps late-night debugging sessions fuelled.`})]}),(0,q.jsxs)(`li`,{className:`flex items-start gap-2`,children:[(0,q.jsx)(g,{size:14,className:`mt-0.5 shrink-0 text-accent-text`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:`Funds the coffee that funds the next release.`})]})]}),(0,q.jsxs)(`div`,{className:`mt-4 border-t border-inner-border pt-3`,children:[(0,q.jsx)(`p`,{className:`text-badge font-bold uppercase tracking-label text-text-tertiary`,children:`Other ways to support`}),(0,q.jsx)(`ul`,{className:`mt-2 grid grid-cols-1 gap-1.5 sm:grid-cols-2`,children:a.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noreferrer noopener`,className:`flex items-center gap-2 rounded-inset border border-inner-border px-3 py-2 text-caption text-text-secondary hover:bg-hover-bg hover:text-text-primary`,children:[e.id===`github-alt`?(0,q.jsx)(dt,{size:12,className:`shrink-0 text-accent-text`,"aria-hidden":`true`}):(0,q.jsx)(Ye,{size:12,className:`shrink-0`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`min-w-0 truncate`,children:e.label}),(0,q.jsx)(`span`,{className:`ml-auto shrink-0 text-micro text-text-tertiary`,children:e.hint})]})},e.id))})]}),(0,q.jsx)(`p`,{className:`mt-3 text-badge leading-relaxed text-text-tertiary`,children:`No obligation, no paywall, no nagging — the project stays free either way. Thank you for using it. 💙`})]})]})})}function wi(){let[e,t]=(0,L.useState)(!1);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`button`,{type:`button`,className:`topbar-donate-button`,"aria-label":`Support the project`,title:`Buy me a coffee`,onClick:()=>t(!0),children:[(0,q.jsx)(`span`,{className:`text-badge font-bold tracking-wide`,children:`Donate`}),(0,q.jsx)(Xe,{size:14,"aria-hidden":`true`})]}),(0,q.jsx)(Si,{}),(0,q.jsx)(Ci,{open:e,onClose:()=>t(!1)})]})}var Ti=t(d(),1),Ei=`cartethyia.customization`,J=`media`,Di=`background`,Oi=1,ki=`/console-backgrounds.jpg`;function Ai(){let{promise:e,resolve:t,reject:n}=Promise.withResolvers(),r=indexedDB.open(Ei,Oi);return r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(J)||e.createObjectStore(J)},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error??Error(`Could not open the media database.`)),e}function ji(e){let{promise:t,resolve:n,reject:r}=Promise.withResolvers();return e.onsuccess=()=>n(e.result),e.onerror=()=>r(e.error??Error(`The media database rejected the request.`)),t}function Mi(e,t){let{promise:n,resolve:r,reject:i}=Promise.withResolvers();return e.oncomplete=()=>r(),e.onerror=()=>i(e.error??Error(t)),n}async function Ni(){let e=await Ai();try{let t=await ji(e.transaction(J,`readonly`).objectStore(J).get(Di));if(!t||!t.blob)return null;let n=t;return{blob:n.blob,kind:n.kind,url:URL.createObjectURL(n.blob)}}finally{e.close()}}async function Pi(e,t){let n=await Ai();try{let r=n.transaction(J,`readwrite`);r.objectStore(J).put({blob:e,kind:t},Di),await Mi(r,`Could not store the background.`)}finally{n.close()}}async function Fi(){let e=await Ai();try{let t=e.transaction(J,`readwrite`);t.objectStore(J).delete(Di),await Mi(t,`Could not remove the background.`)}finally{e.close()}}var Ii=2560,Li=.85;async function Ri(e){let t=await createImageBitmap(e).catch(()=>null);if(!t)return e;try{let n=Math.max(t.width,t.height),r=Math.min(1,Ii/n),i=document.createElement(`canvas`);i.width=Math.max(1,Math.round(t.width*r)),i.height=Math.max(1,Math.round(t.height*r));let a=i.getContext(`2d`);return a?(a.drawImage(t,0,0,i.width,i.height),await Vi(i)??e):e}finally{t.close()}}var zi=4294967296,Bi=268435456;function Vi(e){let{promise:t,resolve:n}=Promise.withResolvers();return e.toBlob(e=>n(e),`image/webp`,Li),t}function Hi(e){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:null}var Ui=[`none`,`frosted`,`vibrancy`,`heavy`],Wi=[`off`,`pretty`,`extreme`];function Gi(e){return typeof e==`string`&&Wi.includes(e)}var Y={backgroundSet:!1,backgroundEnabled:!0,backgroundRevision:0,backgroundOpacity:20,backgroundScale:100,backgroundX:0,backgroundY:0,backgroundBlur:5,blurCards:`frosted`,blurChrome:`frosted`,blurCardsAmount:45,blurCardsDepth:20,blurChromeAmount:25,blurChromeDepth:10,blurCardsEnabled:!0,blurChromeEnabled:!0,renderMode:`off`,emptyOutline:!1},Ki=`cartethyia.customization`,qi=`cartethyia-customization-change`,Ji={pretty:{cards:{amount:90,depth:0},chrome:{amount:80,depth:80}},extreme:{cards:{amount:90,depth:0},chrome:{amount:90,depth:0}}},Yi=[`cards`,`chrome`];function Xi(e){return typeof e==`string`&&Ui.includes(e)}function X(e,t,n,r){let i=typeof e==`number`?e:Number(e);return Number.isFinite(i)?Math.min(n,Math.max(t,i)):r}function Zi(e){let t=typeof e==`object`&&e&&!Array.isArray(e)?e:{};return{backgroundSet:t.backgroundSet===!0,backgroundRevision:X(t.backgroundRevision,0,2**53-1,0),backgroundEnabled:typeof t.backgroundEnabled==`boolean`?t.backgroundEnabled:Y.backgroundEnabled,backgroundOpacity:X(t.backgroundOpacity,0,100,Y.backgroundOpacity),backgroundScale:X(t.backgroundScale,100,180,Y.backgroundScale),backgroundX:X(t.backgroundX,-100,100,Y.backgroundX),backgroundY:X(t.backgroundY,-100,100,Y.backgroundY),backgroundBlur:X(t.backgroundBlur,0,100,Y.backgroundBlur),blurCards:Xi(t.blurCards)?t.blurCards:Y.blurCards,blurChrome:Xi(t.blurChrome)?t.blurChrome:Y.blurChrome,blurCardsAmount:X(t.blurCardsAmount,0,100,Y.blurCardsAmount),blurChromeAmount:X(t.blurChromeAmount,0,100,Y.blurChromeAmount),blurCardsDepth:X(t.blurCardsDepth,0,100,Y.blurCardsDepth),blurChromeDepth:X(t.blurChromeDepth,0,100,Y.blurChromeDepth),blurCardsEnabled:t.blurCardsEnabled!==!1,blurChromeEnabled:t.blurChromeEnabled!==!1,renderMode:Gi(t.renderMode)?t.renderMode:`off`,emptyOutline:t.emptyOutline===!0}}var Qi=null;function $i(){if(Qi)return Qi;if(typeof window>`u`)return Y;try{Qi=Zi(JSON.parse(window.localStorage.getItem(Ki)??`null`))}catch{Qi={...Y}}return Qi}function ea(e){if(typeof document>`u`)return;let t=document.documentElement;t.dataset.blurCards=e.blurCards,t.dataset.blurChrome=e.blurChrome;let n=t=>{let n=t===`chrome`,r=n?{amount:e.blurChromeAmount,depth:e.blurChromeDepth}:{amount:e.blurCardsAmount,depth:e.blurCardsDepth};return e.renderMode===`off`?r:Ji[e.renderMode][n?`chrome`:`cards`]},r=n(`cards`),i=n(`chrome`);t.style.setProperty(`--blur-cards`,`${r.amount}`),t.style.setProperty(`--blur-chrome`,`${i.amount}`),t.style.setProperty(`--blur-cards-depth`,`${r.depth}`),t.style.setProperty(`--blur-chrome-depth`,`${i.depth}`),t.dataset.blurCardsOn=e.blurCardsEnabled||e.renderMode===`extreme`?`true`:e.renderMode===`pretty`?`false`:`true`,t.dataset.renderMode=e.renderMode,t.dataset.emptyOutline=e.emptyOutline?`true`:`false`,t.dataset.bgActive=e.backgroundEnabled?`true`:`false`,t.style.setProperty(`--bg-opacity`,(e.backgroundOpacity/100).toFixed(2)),t.style.setProperty(`--bg-scale`,(e.backgroundScale/100).toFixed(2)),t.style.setProperty(`--bg-x`,`${e.backgroundX}%`),t.style.setProperty(`--bg-y`,`${e.backgroundY}%`),t.style.setProperty(`--bg-blur`,`${Math.round(e.backgroundBlur*.4)}px`)}function ta(e){try{window.localStorage.setItem(Ki,JSON.stringify(e))}catch{}}function na(e){let t=Zi({...$i(),...e});return Qi=t,typeof window<`u`&&(ta(t),ea(t),window.dispatchEvent(new CustomEvent(qi))),t}function ra(){let[e,t]=(0,L.useState)($i);return(0,L.useEffect)(()=>{let e=()=>t($i());return window.addEventListener(qi,e),window.addEventListener(`storage`,e),()=>{window.removeEventListener(qi,e),window.removeEventListener(`storage`,e)}},[]),[e,e=>t(na(e))]}var ia=Yi,aa=`(max-width: 767px)`,oa=`(prefers-reduced-motion: reduce)`;function sa(e){let[t,n]=(0,L.useState)(()=>typeof window<`u`&&window.matchMedia(e).matches);return(0,L.useEffect)(()=>{let t=window.matchMedia(e),r=()=>n(t.matches);return r(),t.addEventListener(`change`,r),()=>t.removeEventListener(`change`,r)},[e]),t}function ca(){let[e,t]=(0,L.useState)(()=>typeof document>`u`||!document.hidden);return(0,L.useEffect)(()=>{let e=()=>t(!document.hidden);return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[]),e}function la(){let[e]=ra(),[t,n]=(0,L.useState)(null),r=sa(aa),i=sa(oa),a=ca();(0,L.useEffect)(()=>{if(!e.backgroundSet){n(e=>(e&&URL.revokeObjectURL(e.url),{blob:new Blob,kind:`image`,url:ki}));return}let t=!1,r=null;return Ni().then(e=>{if(t){e&&URL.revokeObjectURL(e.url);return}r=e,n(e)}).catch(()=>{t||n(null)}),()=>{t=!0,r&&URL.revokeObjectURL(r.url)}},[e.backgroundSet,e.backgroundRevision]);let o=(0,L.useRef)(null),s=t?.kind===`video`&&!r&&!i&&a;return(0,L.useEffect)(()=>{let e=o.current;if(e){if(s){e.play().catch(()=>{});return}e.pause()}},[s]),!t||!e.backgroundEnabled?null:(0,q.jsx)(`div`,{className:`custom-background`,"data-kind":t.kind,"data-playing":s?`true`:`false`,"aria-hidden":`true`,children:t.kind===`video`?(0,q.jsx)(`video`,{ref:o,className:`custom-background-media`,src:t.url,autoPlay:s,loop:!0,muted:!0,playsInline:!0,preload:r?`metadata`:`auto`}):(0,q.jsx)(`img`,{className:`custom-background-media`,src:t.url,alt:``})})}function ua({open:e,onClose:t,onConfirm:n,title:r,message:i,confirmLabel:a=`Confirm`,cancelLabel:o=`Cancel`,danger:s}){let[c,l]=(0,L.useState)(null),[u,d]=(0,L.useState)(!1);return(0,L.useEffect)(()=>{e&&(l(null),d(!1))},[e]),(0,q.jsx)(fe,{open:e,onClose:t,title:r,description:i,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-8 py-2 px-0`,children:[(0,q.jsx)(`p`,{className:`text-body text-text-secondary leading-normal`,children:i}),c?(0,q.jsx)(`p`,{role:`alert`,className:`text-caption text-red`,children:c}):null,(0,q.jsxs)(We,{children:[(0,q.jsx)(w,{variant:`secondary`,size:`sm`,onClick:t,disabled:u,children:o}),(0,q.jsx)(w,{variant:s?`danger`:`primary`,size:`sm`,onClick:()=>{u||(l(null),d(!0),Promise.resolve().then(()=>n()).then(()=>t()).catch(e=>{l(M(e,`Action failed. Please try again.`)),d(!1)}))},disabled:u,children:u?`Working…`:a})]})]})})}var da={plain:`code-chip-plain`,muted:`code-chip-muted text-text-secondary bg-surface-muted border border-inner-border px-4 py-1 rounded-chip`,accent:`code-chip-accent text-accent bg-accent-soft px-4 py-1.5 rounded-chip font-bold`};function fa({value:e,tone:t=`muted`,action:n,className:r=``,children:i,...a}){return(0,q.jsxs)(`span`,{className:re(`code-chip inline-flex items-center gap-3 min-w-0 max-w-full font-mono text-caption tabular-nums`,da[t],r),...a,children:[(0,q.jsx)(`code`,{className:`code-chip-value min-w-0 overflow-hidden text-ellipsis whitespace-nowrap`,title:a.title??e,children:e}),n?(0,q.jsx)(`span`,{className:`code-chip-action inline-flex shrink-0`,children:n}):null,i]})}var pa=`cartethyia:update-dismissed`;function ma(){try{return window.localStorage.getItem(pa)}catch{return null}}function ha(e){try{window.localStorage.setItem(pa,e)}catch{}}function ga(){let[e,t]=(0,L.useState)(!1);return{copied:e,copy:e=>{navigator.clipboard?.writeText(e),t(!0),window.setTimeout(()=>t(!1),1500)}}}function _a({open:e,onClose:t,currentVersion:n,latestVersion:r,releaseUrl:i,onDismissVersion:a,onUpdateNow:o,updating:l=!1,error:d}){let{copied:f,copy:p}=ga(),m=r??`the latest release`;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(fe,{open:e,onClose:t,title:`Update available`,description:`Cartethyia ${m} is available; this install runs ${n}.`,size:`md`,footer:(0,q.jsxs)(We,{children:[a===void 0?(0,q.jsx)(w,{variant:`ghost`,onClick:t,children:`Later`}):(0,q.jsxs)(w,{variant:`ghost`,onClick:()=>{a?.(),t()},children:[`Don’t show for v`,m]}),o!==void 0&&!d?(0,q.jsxs)(w,{onClick:o,disabled:l,children:[l?(0,q.jsx)(b,{size:14,className:`animate-spin`,"aria-hidden":`true`}):null,l?`Updating…`:`Update now`]}):null,(0,q.jsxs)(w,{onClick:()=>p(u),disabled:l,children:[f?(0,q.jsx)(ie,{size:14,"aria-hidden":`true`}):(0,q.jsx)(_,{size:14,"aria-hidden":`true`}),f?`Copied`:`Copy update command`]})]}),children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-8 py-2 px-0`,children:[(0,q.jsxs)(`div`,{className:`flex items-start gap-6`,children:[(0,q.jsx)(`span`,{className:`mt-0.5 grid size-12 shrink-0 place-items-center rounded-control bg-surface-1 text-text-secondary`,children:(0,q.jsx)(rt,{size:16,"aria-hidden":`true`})}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsxs)(`p`,{className:`font-semibold text-caption`,children:[n,` → `,m]}),(0,q.jsx)(`p`,{className:`text-badge text-text-secondary mt-1`,children:`Stop the gateway, run the command, then start again.`})]})]}),(0,q.jsxs)(`div`,{className:`rounded-card border border-inner-border bg-surface-2 p-4`,children:[(0,q.jsx)(`p`,{className:`text-badge text-text-tertiary`,children:`Run this in a terminal`}),(0,q.jsxs)(`div`,{className:`mt-3 flex items-center gap-4 min-w-0`,children:[(0,q.jsx)(fa,{value:u,tone:`muted`,title:u,className:`min-w-0 flex-1 truncate`}),(0,q.jsx)(w,{variant:`ghost`,size:`sm`,className:`shrink-0`,onClick:()=>p(u),"aria-label":`Copy the update command`,children:f?(0,q.jsx)(ie,{size:14,"aria-hidden":`true`}):(0,q.jsx)(_,{size:14,"aria-hidden":`true`})})]})]}),(0,q.jsxs)(`div`,{className:`flex items-start gap-6 rounded-card border border-inner-border bg-surface-2 p-4`,children:[(0,q.jsx)(`span`,{className:`mt-0.5 shrink-0 text-text-secondary`,children:(0,q.jsx)(ue,{size:14,"aria-hidden":`true`})}),(0,q.jsx)(`p`,{className:`text-badge text-text-secondary min-w-0`,children:`npm cannot replace the package while Cartethyia is running from it, so this cannot update itself the way a single-binary tool can. That is why the console gives you the command instead of a button that installs.`})]}),d?(0,q.jsxs)(`div`,{className:`flex items-start gap-6 rounded-card border border-inner-border bg-surface-2 p-4 text-red-500`,children:[(0,q.jsx)(`span`,{className:`mt-0.5 shrink-0`,children:(0,q.jsx)(ue,{size:14,"aria-hidden":`true`})}),(0,q.jsxs)(`p`,{className:`text-badge min-w-0 break-words`,children:[`Update failed — `,d]})]}):null,(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,q.jsxs)(`a`,{href:i??s,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-2 text-badge text-accent hover:underline`,children:[(0,q.jsx)(Ye,{size:12,"aria-hidden":`true`}),`What’s new on GitHub`]}),(0,q.jsxs)(`a`,{href:c,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-2 text-badge text-accent hover:underline`,children:[(0,q.jsx)(Ye,{size:12,"aria-hidden":`true`}),`Package on npm`]})]})]})}),l?(0,q.jsx)(`div`,{className:`fixed inset-0 z-toast grid place-items-center bg-black/70 backdrop-blur-sm`,children:(0,q.jsxs)(`div`,{className:`flex flex-col items-center gap-4 text-white`,children:[(0,q.jsx)(b,{size:40,className:`animate-spin`,"aria-hidden":`true`}),(0,q.jsx)(`p`,{className:`text-lg font-semibold`,children:`Updating Cartethyia…`}),(0,q.jsx)(`p`,{className:`text-sm opacity-80`,children:`Do not refresh or close this page.`})]})}):null]})}var va=`cartethyia.query-cache`,Z=`client`,ya=`default`,ba=1;function xa(){let{promise:e,resolve:t,reject:n}=Promise.withResolvers(),r=indexedDB.open(va,ba);return r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(Z)||e.createObjectStore(Z)},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error??Error(`Could not open the query cache.`)),e}function Sa(e){let{promise:t,resolve:n,reject:r}=Promise.withResolvers();return e.onsuccess=()=>n(e.result),e.onerror=()=>r(e.error??Error(`The query cache rejected the request.`)),t}function Ca(e,t){let{promise:n,resolve:r,reject:i}=Promise.withResolvers();return e.oncomplete=()=>r(),e.onerror=()=>i(e.error??Error(t)),n}function wa(e){if(typeof e!=`object`||!e||!(`version`in e)||!(`state`in e))return!1;let{version:t,state:n}=e;return t===1&&typeof n==`object`&&!!n}async function Ta(e){try{let t=await xa();try{let n=t.transaction(Z,`readwrite`);n.objectStore(Z).put({version:1,state:e},ya),await Ca(n,`Could not store the query cache.`)}finally{t.close()}}catch{}}async function Ea(){try{let e=await xa();try{let t=await Sa(e.transaction(Z,`readonly`).objectStore(Z).get(ya));return wa(t)?t.state:void 0}finally{e.close()}}catch{return}}async function Da(){try{let e=await xa();try{let t=e.transaction(Z,`readwrite`);t.objectStore(Z).delete(ya),await Ca(t,`Could not remove the query cache.`)}finally{e.close()}}catch{}}var Q=new wt({defaultOptions:{queries:j,mutations:Be}});function Oa(e){let[t,n,r]=e.queryKey;return t===`console`?n===`session`?!0:n===`providers`?r===void 0||e.queryKey[3]===`models`:n===`settings`?r===`runtime`:n===`cli-tools`&&r===`registry`:!1}async function ka(){let e=await Ea();e!==void 0&&bt(Q,e)}function Aa(){Da()}function ja(){let e,t=Q.getQueryCache().subscribe(t=>{t.type===`updated`&&(t.action.type===`success`||t.action.type===`error`)&&e===void 0&&(e=setTimeout(()=>{e=void 0,Ta(yt(Q,{shouldDehydrateQuery:Oa}))},2e3))});return()=>{e!==void 0&&clearTimeout(e),t()}}function Ma(e){let[t,n]=(e.trim().replace(/^v/i,``).split(`+`,1)[0]??``).split(`-`,2);if(t===void 0||!/^\d+\.\d+\.\d+$/.test(t))return null;let r=t.split(`.`).map(Number);if(r.length!==3||r.some(e=>!Number.isSafeInteger(e)||e<0))return null;let i=n===void 0||n.length===0?[]:n.split(`.`).map(e=>/^\d+$/.test(e)?Number(e):e);return i.some(e=>typeof e==`number`&&(!Number.isSafeInteger(e)||e<0))?null:{core:[r[0]??0,r[1]??0,r[2]??0],prerelease:i}}function Na(e,t){if(e===void 0||t===void 0)return!1;let n=Ma(e),r=Ma(t);return n===null||r===null?t.trim()!==e.trim():Pa(r,n)>0}function Pa(e,t){for(let n=0;n<e.core.length;n+=1){let r=e.core[n]??0,i=t.core[n]??0;if(r!==i)return r>i?1:-1}if(e.prerelease.length===0&&t.prerelease.length>0)return 1;if(e.prerelease.length>0&&t.prerelease.length===0)return-1;for(let n=0;n<Math.max(e.prerelease.length,t.prerelease.length);n+=1){let r=e.prerelease[n],i=t.prerelease[n];if(r===void 0)return-1;if(i===void 0)return 1;if(r!==i)return typeof r==`number`&&typeof i==`string`?-1:typeof r==`string`&&typeof i==`number`||r>i?1:-1}return 0}var Fa=5e3,Ia=new WeakMap,La={"/":[{queryKey:P.settings.runtime,read:e=>N(`/settings/runtime`,{signal:e})},{queryKey:P.apiKeys.all,read:e=>N(`/api-keys`,{signal:e}).then(Te)}],"/providers":[{queryKey:P.providers.all,read:e=>N(`/providers`,{signal:e}).then(me)}],"/proxy":[{queryKey:P.network.pools,read:e=>N(`/network/pools`,{signal:e}).then(we)}]};function Ra(e,t){let n=La[t];if(n===void 0)return Promise.resolve();let r=Date.now(),i=Ia.get(e);if(i!==void 0){if(i>r)return Promise.resolve();Ia.delete(e)}return Promise.allSettled(n.map(t=>e.fetchQuery({queryKey:t.queryKey,queryFn:e=>t.read(O(e)),...j}))).then(t=>{if(t.some(e=>e.status===`rejected`&&!Le(e.reason))){Ia.set(e,Date.now()+Fa);return}Ia.delete(e)})}var za=20;function Ba(e){if(typeof e!=`object`||!e)return;let t=e;if(!(typeof t.id!=`string`||typeof t.title!=`string`||typeof t.message!=`string`||typeof t.createdAt!=`string`||t.kind!==`memory-high`&&t.kind!==`memory-growth`&&t.kind!==`update-available`||t.level!==`warning`&&t.level!==`info`))return{id:t.id,kind:t.kind,title:t.title,message:t.message,createdAt:t.createdAt,level:t.level,...t.href===l?{href:t.href}:{},...typeof t.version==`string`&&t.version.length>0?{version:t.version.replace(/^v/,``)}:{}}}function Va(){let[e,t]=(0,L.useState)([]);return ee({url:`/console/api/notifications/stream`,events:[`notification`],onEvent:(e,n)=>{if(e!==`notification`)return;let r;try{r=JSON.parse(n)}catch{return}let i=Ba(r);i&&t(e=>[i,...e.filter(e=>e.id!==i.id)].slice(0,za))}}),e}function Ha(){return E({queryKey:P.session.current,queryFn:()=>Pe(),staleTime:6e4,gcTime:3e5,retry:!1,refetchOnWindowFocus:!1})}function Ua(e){return E({queryKey:P.system.health,queryFn:e=>N(`/system/health`,{signal:O(e)}).then(he),...j,enabled:e?.enabled??!0,refetchInterval:e?.refetchInterval??!1})}function Wa(){return E({queryKey:P.releases.githubLatest,queryFn:e=>N(`/updates/release`,{signal:O(e)}).then(Ce),...j,staleTime:18e5,retry:!1})}function Ga(e){return E({queryKey:P.usageAnalytics.summary(e),queryFn:t=>N(`/system/usage/summary?period=${encodeURIComponent(e)}`,{signal:O(t)}).then(pe),...j,refetchInterval:A.status})}function Ka(e){return E({queryKey:P.usageAnalytics.chart(e),queryFn:t=>N(`/system/usage/chart?period=${encodeURIComponent(e)}`,{signal:O(t)}).then(ye),...j,refetchInterval:A.status})}function qa(e,t){return E({queryKey:P.usageAnalytics.by(e,t),queryFn:n=>N(`/system/usage/by-${t}?period=${encodeURIComponent(e)}`,{signal:O(n)}).then(Se),...j,refetchInterval:A.status})}function Ja(e,t=50,n){let r=n==null?``:`&httpStatus=${encodeURIComponent(String(n))}`;return E({queryKey:P.usageAnalytics.requests(e,t,n),queryFn:n=>N(`/system/usage/requests?period=${encodeURIComponent(e)}&limit=${encodeURIComponent(String(t))}${r}`,{signal:O(n)}).then(ge),...j,placeholderData:e=>e,refetchInterval:A.live})}function Ya(e){return E({queryKey:P.usageAnalytics.requestDetail(e??`_`),queryFn:t=>{if(!e)throw{status:400,code:`invalid_request`,message:`Request is required`};return N(`/system/usage/requests/${encodeURIComponent(e)}`,{signal:O(t)}).then(_e)},enabled:e!==null,...j})}function Xa(e){return E({queryKey:P.audit.list(e??{}),queryFn:t=>{let n=new URLSearchParams;e?.action&&n.set(`action`,e.action),e?.actor&&n.set(`actor`,e.actor),e?.cursor&&n.set(`cursor`,e.cursor),e?.limit&&n.set(`limit`,String(e.limit));let r=n.toString()?`?${n.toString()}`:``;return N(`/audit${r}`,{signal:O(t)}).then(be)},...j})}function Za(){return E({queryKey:P.providers.all,queryFn:e=>N(`/providers`,{signal:O(e)}).then(me),...j,gcTime:6e5,refetchInterval:A.catalog})}function Qa(e){return E({queryKey:P.providers.detail(e??``),queryFn:t=>N(`/providers/${encodeURIComponent(e??``)}`,{signal:O(t)}).then(ve),enabled:!!e,...j})}function $a(e){return E({queryKey:P.providers.models(e),queryFn:t=>{if(!e)throw{status:400,code:`invalid_request`,message:`Provider is required`};return N(`/providers/${encodeURIComponent(e)}/models`,{signal:O(t)}).then(xe)},...j,staleTime:3e5,gcTime:6e5,enabled:!!e})}function eo(){let e=D();return I({mutationFn:({providerId:e,modelIds:t,wireFamily:n,metadata:r})=>N(`/providers/${encodeURIComponent(e)}/models`,{method:`POST`,body:JSON.stringify({modelIds:t,...n?{wireFamily:n}:{},...r?{metadata:r}:{}})}),onSuccess:async(t,n)=>{await e.invalidateQueries({queryKey:P.providers.models(n.providerId)}),T.success(`Models registered`,`${n.modelIds.length} model(s) added to ${n.providerId}`)},onError:e=>{T.error(`Failed to register models`,M(e))}})}function to(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}/models/probe`,{method:`POST`,body:JSON.stringify(t)}),onSettled:async(t,n,r)=>{await go(e,r.providerId)}})}function no(){return I({mutationFn:e=>N(`/providers/connection-test`,{method:`POST`,body:JSON.stringify(e)})})}function ro(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}/accounts/probe`,{method:`POST`,body:JSON.stringify(t)}),onSettled:async(t,n,r)=>{await go(e,r.providerId)}})}function io(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}/models`,{method:`PATCH`,body:JSON.stringify(t)}),onSuccess:async(t,n)=>{await e.invalidateQueries({queryKey:P.providers.models(n.providerId)})}})}function ao(){let e=D();return I({mutationFn:({providerId:e,modelId:t,route:n,metadata:r})=>N(`/providers/${encodeURIComponent(e)}/models`,{method:`PATCH`,body:JSON.stringify({modelId:t,route:n,enabled:!0,metadata:r})}),onSuccess:async(t,n)=>{await e.invalidateQueries({queryKey:P.providers.models(n.providerId)}),T.success(`Model updated`,`${n.modelId} limits and capabilities saved`)},onError:e=>{T.error(`Failed to update model`,M(e))}})}function oo(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}/models`,{method:`DELETE`,body:JSON.stringify(t)}),onSuccess:async(t,n)=>{await e.invalidateQueries({queryKey:P.providers.models(n.providerId)})}})}function so(e){return E({queryKey:P.providers.accounts(e),queryFn:t=>N(`/providers/${encodeURIComponent(e??``)}/accounts`,{signal:O(t)}),enabled:!!e,...j,staleTime:12e4,refetchOnMount:!1,gcTime:6e5})}function co(e){let t=e,n=Array.isArray(t.rows)?t.rows:[],r=e=>{let t=Number(e??0);return Number.isFinite(t)?t:0};return{days:Math.max(1,Math.trunc(r(t.days))||30),rows:n.map(e=>({day:typeof e.day==`string`?e.day:``,model:typeof e.model==`string`?e.model:null,requests:r(e.requests),inputTokens:r(e.inputTokens),cachedInputTokens:r(e.cachedInputTokens),outputTokens:r(e.outputTokens),costUsd:r(e.costUsd)}))}}function lo(e,t){return E({queryKey:P.providers.usageMatrix(e),queryFn:t=>{if(!e)throw{status:400,code:`invalid_request`,message:`Provider is required`};return N(`/providers/${encodeURIComponent(e)}/usage/matrix`,{signal:O(t)}).then(co)},...j,enabled:!!e&&t})}function uo(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}/accounts`,{method:`POST`,body:JSON.stringify(t)}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(n.providerId)}),e.invalidateQueries({queryKey:P.providers.all})])}})}function fo(){let e=D();return I({mutationFn:({providerId:e,accounts:t})=>N(`/providers/${encodeURIComponent(e)}/accounts/batch`,{method:`POST`,body:JSON.stringify({accounts:t})}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(n.providerId)}),e.invalidateQueries({queryKey:P.providers.all})])}})}function po(){let e=D();return I({mutationFn:({providerId:e,accountId:t,request:n})=>N(`/providers/${encodeURIComponent(e)}/accounts/${encodeURIComponent(t)}`,{method:`PATCH`,body:JSON.stringify(n)}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(n.providerId)}),e.invalidateQueries({queryKey:P.providers.all})])}})}function mo(e,t){return E({queryKey:P.providers.healthEvents(e,t),queryFn:n=>N(`/providers/${encodeURIComponent(e??``)}/accounts/${encodeURIComponent(t??``)}/health-events`,{signal:O(n)}),enabled:!!e&&!!t,...j,refetchInterval:A.status})}async function ho(e,t){await e.invalidateQueries({predicate:e=>{let n=e.queryKey;return n[0]===`console`&&n[1]===`providers`&&n[2]===t&&n[3]===`accounts`&&n[5]===`health-events`}})}async function go(e,t){await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(t)}),ho(e,t),e.invalidateQueries({queryKey:P.providers.all})])}function _o(){let e=D();return I({mutationFn:({providerId:e,accountId:t})=>N(`/providers/${encodeURIComponent(e)}/accounts/${encodeURIComponent(t)}/recover`,{method:`POST`,body:`{}`}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(n.providerId)}),e.invalidateQueries({queryKey:P.providers.healthEvents(n.providerId,n.accountId)}),e.invalidateQueries({queryKey:P.providers.all})]),T.success(`Account recovered`)},onError:e=>{T.error(`Could not recover the account.`,M(e))}})}function vo(){let e=D();return I({mutationFn:({providerId:e,accountId:t})=>N(`/providers/${encodeURIComponent(e)}/accounts/${encodeURIComponent(t)}/health-events`,{method:`DELETE`}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.healthEvents(n.providerId,n.accountId)}),e.invalidateQueries({queryKey:P.settings.diskUsage})]),T.success(t.deleted===0?`Health log was already empty`:`Purged ${t.deleted} health events`,n.title)},onError:e=>{T.error(`Could not purge the health log.`,M(e))}})}function yo(){return I({mutationFn:({providerId:e,accountIds:t})=>N(`/providers/${encodeURIComponent(e)}/accounts/export`,{method:`POST`,body:JSON.stringify({accountIds:t})})})}function bo(){return I({mutationFn:({providerId:e,accountLabel:t,parameters:n})=>N(`/providers/${encodeURIComponent(e)}/oauth/authorize`,{method:`POST`,body:JSON.stringify({...t?{accountLabel:t}:{},...n&&Object.keys(n).length>0?{parameters:n}:{}})})})}function xo(){let e=D();return I({mutationFn:({providerId:e,code:t,state:n})=>N(`/providers/${encodeURIComponent(e)}/oauth/callback?${new URLSearchParams({code:t,state:n}).toString()}`),onSuccess:async(t,n)=>{await go(e,n.providerId)}})}function So(){return I({mutationFn:({providerId:e,accountLabel:t,parameters:n})=>N(`/providers/${encodeURIComponent(e)}/oauth/device/start`,{method:`POST`,body:JSON.stringify({...t?{accountLabel:t}:{},...n&&Object.keys(n).length>0?{parameters:n}:{}})})})}function Co(){let e=D();return I({mutationFn:({providerId:e,credential:t,fields:n,accountLabel:r})=>N(`/providers/${encodeURIComponent(e)}/oauth/import`,{method:`POST`,body:JSON.stringify({credential:t,...n&&Object.keys(n).length>0?{fields:n}:{},...r?{accountLabel:r}:{}})}),onSuccess:async(t,n)=>{await go(e,n.providerId),await e.invalidateQueries({queryKey:P.quota.all})}})}function wo(){let e=D();return I({mutationFn:({providerId:e,deviceAuthId:t})=>N(`/providers/${encodeURIComponent(e)}/oauth/device/poll`,{method:`POST`,body:JSON.stringify({deviceAuthId:t})}),onSuccess:async(t,n)=>{t.status===`complete`&&await Promise.all([e.invalidateQueries({queryKey:P.providers.accounts(n.providerId)}),e.invalidateQueries({queryKey:P.providers.healthEvents(n.providerId,t.accountId)}),e.invalidateQueries({queryKey:P.quota.all}),go(e,n.providerId)])}})}function To(){let e=D();return I({mutationFn:e=>N(`/providers`,{method:`POST`,body:JSON.stringify(e)}),onSuccess:async t=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.all}),e.invalidateQueries({queryKey:P.modelRouting.all})]),T.success(`Provider created`,t.label??t.providerId)},onError:e=>{T.error(`Failed to create provider`,M(e))}})}function Eo(){let e=D();return I({mutationFn:({providerId:e,request:t})=>N(`/providers/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),onSuccess:async(t,{providerId:n})=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.all}),e.invalidateQueries({queryKey:P.providers.detail(n)})]),T.success(`Provider updated`,n)},onError:e=>{T.error(`Failed to update provider`,M(e))}})}function Do(){let e=D();return I({mutationFn:({providerId:e,enabled:t})=>N(`/providers/platform/global/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify({enabled:t})}),onSuccess:async(t,{providerId:n})=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.all}),e.invalidateQueries({queryKey:P.providers.detail(n)})])}})}function Oo(e={}){let t=D();return I({mutationFn:e=>N(`/providers/${encodeURIComponent(e)}/models/sync`,{method:`POST`,body:`{}`}),onSuccess:async(n,r)=>{await t.invalidateQueries({queryKey:P.providers.models(r)}),e.silent||T.success(`Models fetched`,n.synced>0?`${n.synced} new model${n.synced===1?``:`s`} added`:`No new models found`)},onError:t=>{e.silent||T.error(`Failed to fetch models`,M(t))}})}function ko(){let e=D();return I({mutationFn:e=>N(`/providers/${encodeURIComponent(e)}`,{method:`DELETE`}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:P.providers.all}),e.invalidateQueries({queryKey:P.quota.all}),e.invalidateQueries({queryKey:P.modelRouting.all})]),T.success(`Provider deleted`,n)},onError:e=>{T.error(`Failed to delete provider`,M(e))}})}var Ao={name:`cartethyia`,version:`2.7.5`,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.`,license:`GPL-3.0-only`,type:`module`,packageManager:`bun@1.4.0`,repository:{type:`git`,url:`git+https://github.com/risunCodex/Cartethyia.git`},homepage:`https://github.com/risunCodex/Cartethyia#readme`,bugs:{url:`https://github.com/risunCodex/Cartethyia/issues`},keywords:[`ai`,`gateway`,`llm`,`bun`,`self-hosted`],bin:{cartethyia:`scripts/cli/bin/cartethyia.cjs`,carte:`scripts/cli/bin/carte.cjs`},files:[`scripts/cli/`,`src/`,`migrations/`,`dist/dashboard/`,`.env.example`,`README.md`],workspaces:[`dashboard`],engines:{bun:`>=1.4.0`},scripts:{dev:`bun run dev:watch`,"dev:watch":`bun run scripts/dev/supervisor.ts`,test:`bun run scripts/test/run.ts`,build:`bun run scripts/build/build.ts`,prepack:`bun run dashboard:build`,setup:`bun run scripts/cli/setup.ts`,start:`bun run scripts/cli/main.ts start`,doctor:`bun run scripts/cli/doctor.ts`,restart:`bun run scripts/build/restart.ts`,"build:aot":`bun run scripts/build/aot.ts`,"dev:stack":`concurrently -n BACKEND,DASHBOARD -c cyan,magenta --kill-others-on-fail "bun run dev:backend" "bun run dashboard:dev"`,typecheck:`tsc --noEmit`,"test:watch":`bun run scripts/test/run.ts --watch`,"test-db:up":`docker compose -f docker-compose.test.yml up -d --wait postgres-test`,"dev:backend":`bun run src/main.ts`,"dev:console-auth":`bun run scripts/test/console-session.ts`,"dev:visual-baseline":`bun run scripts/test/visual-baseline.ts`,"build:binary":`bun run scripts/build/compile.ts`,"test:backend":`bun run scripts/test/run.ts --scope backend`,"test:integration":`bun run scripts/test/run.ts --scope integration`,"test-db:down":`docker compose -f docker-compose.test.yml down`,"dashboard:dev":`bun run --cwd dashboard dev`,"test-db:check":`bun run scripts/test/check-db.ts`,"dashboard:test":`bun run scripts/test/run.ts --scope dashboard`,"test-db:reset":`docker compose -f docker-compose.test.yml down -v && docker compose -f docker-compose.test.yml up -d --wait postgres-test`,"dashboard:build":`bun run --cwd dashboard build`,"dashboard:typecheck":`bun run --cwd dashboard typecheck`,"check:migrations":`bun run scripts/test/check-migrations.ts`},dependencies:{"drizzle-orm":`0.45.2`,elysia:`2.0.0-beta.16`,enquirer:`^2.4.1`,ioredis:`6.0.0`,jose:`^6.2.12`,jsonrepair:`^3.15.0`,pg:`8.23.0`,pino:`^10.3.1`,protobufjs:`^7.6.5`,"socks-proxy-agent":`^10.1.0`,systray2:`2.1.4`,typebox:`1.3.27`,ws:`8.22.0`},devDependencies:{"@types/pg":`8.11.10`,"@types/ws":`8.18.1`,"bun-types":`1.4.0`,concurrently:`^10.0.5`,"drizzle-kit":`^0.31.11`,"pino-pretty":`^13.1.3`,typescript:`5.9.2`}}.version,jo=`v${Ao.replace(/\.0$/,``)} (Jinhsi)`,Mo=[{label:`Main`,items:[{label:`Overview`,path:`/`,icon:Qe},{label:`Usage`,path:`/usage`,icon:f},{label:`Providers`,path:`/providers`,icon:ct},{label:`Model Lab`,path:`/model-lab`,icon:x}]},{label:`Control`,items:[{label:`Combos & Routes`,path:`/combos`,icon:Je},{label:`Quota Management`,path:`/quota`,icon:ut},{label:`Proxy & Requests`,path:`/proxy`,icon:m},{label:`CLI Tools`,path:`/cli-tools`,icon:h}]},{label:`Tools`,items:[{label:`Tools`,icon:ce,children:[]}]},{label:`System`,items:[{label:`Customization`,path:`/customization`,icon:it},{label:`Console Log`,path:`/console-log`,icon:st},{label:`Settings`,path:`/settings`,icon:lt}]}],No={"/":{title:`Overview`,sub:`Gateway health, capacity, and live metrics`,icon:Qe},"/usage":{title:`Usage & Metrics`,sub:`Token economics, requests, and cost breakdown`,icon:f},"/providers":{title:`Provider Catalog`,sub:`Upstream credentials, models, and latency`,icon:ct},"/combos":{title:`Combos & Routing`,sub:`Failover policies, model aliases, and weighted routes`,icon:Je},"/quota":{title:`Quota Management`,sub:`Rate limits, leases, and tenant quotas`,icon:ut},"/proxy":{title:`Proxy & Requests`,sub:`Network pools, SOCKS5/HTTP egress, and dispatch`,icon:m},"/customization":{title:`Customization`,sub:`Background, transparency, and blur`,icon:it},"/model-lab":{title:`Model Lab`,sub:`Chat a routed model without leaving the console`,icon:x},"/console-log":{title:`Console Log`,sub:`Live server logs and audit trail`,icon:st},"/cli-tools":{title:`CLI Tools`,sub:`Claude Code CLI, OpenCode, and local developer tool integrations`,icon:h},"/settings":{title:`Settings`,sub:`Account security, runtime preferences, and state recovery`,icon:lt}},Po={title:`Console`,sub:`Cartethyia AI Gateway Administration`,icon:Qe};function Fo(e,t){let n=/^\/providers\/([^/]+)\/?$/.exec(e);if(n?.[1]){let e=t.find(e=>e.providerId===n[1]);return{title:e?.label||e?.displayName||n[1],sub:`Routing, accounts, models, and health`,icon:ct}}let r=/^\/cli-tools\/([^/]+)\/?$/.exec(e);return r?.[1]?{title:`CLI Tool`,sub:`${r[1]} — mappings, endpoints, and downloadable config`,icon:h}:No[e]??Po}function Io(){try{return Ua()}catch{return{data:void 0,isError:!1,isFetching:!1,isPending:!1}}}function Lo(){let[e,t]=(0,L.useState)(()=>se()),n=ne(e);return(0,L.useEffect)(()=>{let e=()=>t(se());return window.addEventListener(`storage`,e),()=>window.removeEventListener(`storage`,e)},[]),(0,L.useEffect)(()=>{te(e)},[e]),(0,q.jsx)(`button`,{type:`button`,onClick:()=>{let e=n?`light`:`dark`;t(e),ae(e)},"aria-label":`Toggle theme`,"aria-pressed":n,className:`topbar-icon-button`,title:n?`Switch to light mode`:`Switch to dark mode`,children:(0,q.jsx)(`span`,{className:`grid place-items-center`,children:n?(0,q.jsx)(C,{size:17}):(0,q.jsx)(le,{size:17})},n?`sun`:`moon`)})}var Ro=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`}),zo=new Intl.DateTimeFormat(void 0,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hourCycle:`h23`,timeZone:`UTC`});function Bo(e){if(!Number.isFinite(e)||e<0)return`Unavailable`;let t=e>=1024**3?{divisor:1024**3,label:`GiB`}:{divisor:1024**2,label:`MiB`};return`${(e/t.divisor).toFixed(1)} ${t.label}`}function Vo({icon:e,label:t,value:n,detail:r,title:i}){return(0,q.jsxs)(`div`,{className:`min-w-0 rounded-control border border-inner-border bg-surface-2 p-3`,title:i,children:[(0,q.jsxs)(`dt`,{className:`flex items-center gap-2 text-micro font-medium text-text-tertiary`,children:[(0,q.jsx)(e,{size:13,strokeWidth:1.8,className:`shrink-0`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:t})]}),(0,q.jsx)(`dd`,{className:`mt-1 truncate font-mono text-caption font-semibold tabular-nums text-text-primary`,children:n}),r?(0,q.jsx)(`dd`,{className:`mt-1 text-micro text-text-secondary`,children:r}):null]})}function Ho({notifications:e,onOpenUpdate:t}){let[n,r]=(0,L.useState)(!1),[i,a]=(0,L.useState)(()=>new Date),o=(0,L.useRef)(null),s=(0,L.useRef)(null),{data:c}=Ua({enabled:n,refetchInterval:n?A.status:!1});(0,L.useEffect)(()=>{if(!n)return;a(new Date);let e=window.setInterval(()=>a(new Date),1e3);return()=>window.clearInterval(e)},[n]),(0,L.useEffect)(()=>{if(!n)return;let e=e=>{let t=e.target;s.current&&!s.current.contains(t)&&o.current&&!o.current.contains(t)&&r(!1)},t=e=>{e.key===`Escape`&&r(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]);let l=[c?c.database_in_process?c.database_healthy?`SQLite in-process, connected.`:`SQLite in-process is not answering.`:c.database_healthy?`Postgres connected.`:`Postgres unreachable.`:void 0,c?c.redis_configured?c.redis_healthy?`Redis connected.`:`Redis unreachable.`:`Redis not configured.`:void 0].filter(Boolean).join(` · `),u=c?c.status===`healthy`?`All systems operational`:c.status===`degraded`?`Gateway degraded`:`Gateway unhealthy`:`System health unavailable`,d=c?c.status===`healthy`?l||`Gateway reported healthy.`:[l,`Check connection logs.`].filter(Boolean).join(` — `):`Live gateway metrics are not available.`,f=c&&[Number.isFinite(c.memory_percent)?`${c.memory_percent.toFixed(1)}% of system RAM`:void 0,c.database_in_process?`In-process DB included`:void 0].filter(Boolean).join(` · `)||void 0,p=c?.cpu_percent??void 0,m=p!==void 0&&Number.isFinite(p),h=c?m?Number.isFinite(c.cpu_cores)&&c.cpu_cores>0?`1-min load · ${c.cpu_cores} cores`:`Normalized 1-min load`:`Not reported on this platform`:void 0;return(0,q.jsxs)(`div`,{className:`relative`,children:[(0,q.jsxs)(`button`,{ref:o,type:`button`,className:`topbar-icon-button`,"aria-label":`Notifications`,"aria-expanded":n,"aria-haspopup":`dialog`,onClick:()=>r(e=>!e),children:[(0,q.jsx)(Ge,{size:17}),e.length>0?(0,q.jsx)(`span`,{"aria-label":`${e.length} notifications`,className:`absolute right-1.5 top-1.5 size-2 rounded-full bg-accent`}):null]}),n?(0,Ti.createPortal)((0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`fixed inset-0 z-floating bg-overlay backdrop-blur-dialog`,onClick:()=>r(!1)}),(0,q.jsxs)(`div`,{ref:s,role:`dialog`,"aria-label":`Notifications`,className:`app-topbar-popover popout-enter glass rounded-sidebar border border-inner-border bg-popover-bg p-5 shadow-popout z-popover`,children:[(0,q.jsxs)(`div`,{className:`mb-3 flex shrink-0 items-center justify-between`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-3 font-bold text-body-lg`,children:[(0,q.jsx)(`span`,{className:`w-13 h-13 rounded-pill bg-accent-soft text-accent grid place-items-center`,children:(0,q.jsx)(Ge,{size:13})}),(0,q.jsx)(`span`,{children:`Notifications`})]}),(0,q.jsx)(`button`,{type:`button`,"aria-label":`Close notifications`,onClick:()=>r(!1),className:`cursor-pointer border-none bg-transparent p-2 text-caption text-text-tertiary`,children:(0,q.jsx)(de,{size:14})})]}),(0,q.jsxs)(`div`,{className:`scroll-region min-h-0 flex-1 flex flex-col gap-3`,children:[e.length>0?(0,q.jsx)(`section`,{"aria-label":`Notifications`,className:`flex flex-col gap-2`,children:e.map(e=>(0,q.jsxs)(`article`,{className:`flex items-start gap-3 rounded-card border p-4 ${e.level===`warning`?`border-orange-soft bg-orange-soft`:`border-accent/25 bg-accent-soft`}`,children:[(0,q.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`span`,{className:`block text-caption font-semibold text-text-primary`,children:e.title}),(0,q.jsx)(`span`,{className:`mt-1 block text-badge text-text-secondary`,children:e.message})]}),e.href?e.kind===`update-available`?(0,q.jsx)(`button`,{type:`button`,className:`shrink-0 text-badge font-semibold text-accent`,onClick:t,children:`Update`}):(0,q.jsx)(`a`,{className:`shrink-0 text-badge font-semibold text-accent`,href:e.href,target:`_blank`,rel:`noreferrer`,children:`Open`}):null]},e.id))}):(0,q.jsx)(`div`,{className:`rounded-card border border-inner-border bg-surface-2 p-4 text-badge text-text-secondary`,children:`No active memory or update alerts.`}),(0,q.jsxs)(`div`,{className:`flex items-start gap-3 rounded-card border border-inner-border bg-surface-2 p-4`,children:[(0,q.jsx)(`span`,{className:`mt-0.5 grid w-12 h-12 shrink-0 place-items-center rounded-control bg-surface-1 text-text-secondary`,children:(0,q.jsx)(ct,{size:16,"aria-hidden":`true`})}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`p`,{className:`font-semibold text-caption`,children:u}),(0,q.jsx)(`p`,{className:`text-badge text-text-secondary mt-1`,children:d})]})]}),(0,q.jsxs)(`dl`,{"aria-label":`Runtime metrics`,className:`grid grid-cols-2 gap-2`,children:[(0,q.jsx)(Vo,{icon:y,label:`Local time`,value:Ro.format(i)}),(0,q.jsx)(Vo,{icon:ce,label:`UTC`,value:zo.format(i)}),(0,q.jsx)(Vo,{icon:ft,label:`Uptime`,value:c?oe(c.uptime_seconds):`Unavailable`,detail:c&&Number.isFinite(c.uptime_seconds)&&c.uptime_seconds>=0?`Gateway process running`:void 0}),(0,q.jsx)(Vo,{icon:et,label:`Process RSS`,value:c?Bo(c.memory_bytes):`Unavailable`,detail:f,title:`Process resident set size; percentage is share of system RAM.`}),(0,q.jsx)(Vo,{icon:Je,label:`CPU load`,value:m&&p!==void 0?`${p.toFixed(1)}%`:`Unavailable`,detail:h,title:`One-minute load average normalized by the number of CPU cores.`}),(0,q.jsx)(Vo,{icon:nt,label:`Runtime`,value:c?.platform?.trim()||`Unavailable`,detail:c?.platform?.trim()?`Gateway host platform`:void 0,title:c?.platform?.trim()||`Runtime platform unavailable`})]}),(0,q.jsxs)(`div`,{className:`flex items-start gap-3 rounded-card border border-inner-border bg-surface-2 p-4`,children:[(0,q.jsx)(`span`,{className:`mt-0.5 grid w-12 h-12 shrink-0 place-items-center rounded-control bg-surface-1 text-text-secondary`,children:(0,q.jsx)(ot,{size:16,"aria-hidden":`true`})}),(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`p`,{className:`font-semibold text-caption`,children:jo}),(0,q.jsx)(`p`,{className:`text-badge text-text-secondary mt-1`,children:`High-performance AI Gateway & Protocol Orchestrator.`})]})]})]})]})]}),document.body):null]})}function Uo({group:e,pathname:t,onIntent:n}){return(0,q.jsxs)(`div`,{className:`nav-group-section`,children:[(0,q.jsx)(`p`,{className:`nav-group-title`,children:e.label}),(0,q.jsx)(Wo,{items:e.items,pathname:t,onIntent:n})]})}function Wo({items:e,pathname:t,onIntent:n}){let r=(0,L.useRef)(null),[i,a]=(0,L.useState)({top:0,height:0,opacity:0}),[o,s]=(0,L.useState)(()=>new Set);return(0,L.useLayoutEffect)(()=>{let e=r.current;if(!e)return;let t=e.querySelector(`[data-active="true"]`);if(!t){a(e=>({...e,opacity:0}));return}let n=e.getBoundingClientRect(),i=t.getBoundingClientRect();a({top:i.top-n.top,height:i.height,opacity:1})},[t,e]),(0,q.jsxs)(`div`,{ref:r,className:`nav-items-container`,children:[(0,q.jsx)(`div`,{className:`sidebar-active-indicator`,style:{transform:`translateY(${i.top}px)`,height:`${i.height}px`,opacity:i.opacity},"aria-hidden":`true`}),e.map(e=>{if(e.children!==void 0){let t=o.has(e.path??e.label);return(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`button`,{type:`button`,className:`nav-link-item w-full`,"aria-expanded":t,onClick:()=>s(t=>{let n=new Set(t),r=e.path??e.label;return n.has(r)?n.delete(r):n.add(r),n}),children:[(0,q.jsx)(e.icon,{size:17,className:`nav-link-icon`}),(0,q.jsx)(`span`,{children:e.label}),(0,q.jsx)(Ke,{size:14,className:`ml-auto shrink-0 transition-transform ${t?`rotate-180`:``}`,"aria-hidden":`true`})]}),t?(0,q.jsx)(`div`,{className:`ml-6 border-l border-inner-border pl-2`,children:e.children.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:`nav-link-item w-full`,disabled:e.disabled===!0,title:e.label,children:[(0,q.jsx)(e.icon,{size:15,className:`nav-link-icon`}),(0,q.jsx)(`span`,{children:e.label}),e.badge?(0,q.jsx)(`span`,{className:`nav-link-badge`,children:e.badge}):null]},e.path??e.label))}):null]},e.path??e.label)}if(e.disabled)return(0,q.jsxs)(`button`,{type:`button`,className:`nav-link-item w-full cursor-not-allowed opacity-55`,disabled:!0,"aria-label":`${e.label} — unavailable`,title:`Coming soon`,children:[(0,q.jsx)(e.icon,{size:17,className:`nav-link-icon`}),(0,q.jsx)(`span`,{children:e.label}),(0,q.jsx)(`span`,{className:`nav-link-badge`,children:`Soon`})]},e.path??e.label);if(e.path===void 0)return null;let r=e.path,i=r===`/`?t===`/`:t===r||t.startsWith(`${r}/`);return(0,q.jsxs)(si,{to:r,end:r===`/`,"data-active":i?`true`:void 0,className:`nav-link-item ${i?`active`:``}`,onMouseEnter:()=>n(r),onFocus:()=>n(r),children:[(0,q.jsx)(e.icon,{size:17,className:`nav-link-icon`}),(0,q.jsx)(`span`,{children:e.label}),e.badge?(0,q.jsx)(`span`,{className:`nav-link-badge`,children:e.badge}):null]},r)})]})}function Go({user:e,children:t}){let n=G(),r=W(),[i,a]=(0,L.useState)(!1),[o,s]=(0,L.useState)(!1),[c,u]=(0,L.useState)(!1),[d,f]=(0,L.useState)(!1),[p,m]=(0,L.useState)(!1),[h,g]=(0,L.useState)(null),_=async()=>{m(!0),g(null);try{await N(`/updates/apply`,{method:`POST`})}catch(e){m(!1),g(typeof e==`object`&&e&&`message`in e?String(e.message):`The update could not be started.`);return}let e=e=>{e.preventDefault()};window.addEventListener(`beforeunload`,e);let t=C,n=()=>{window.clearInterval(r),window.removeEventListener(`beforeunload`,e)},r=window.setInterval(async()=>{try{let e=await(await fetch(`/console/api/updates/status`)).json();if(e.status===`failed`){n(),m(!1),g(`The install failed${e.stderrTail?`: ${e.stderrTail}`:`. See update.log in the config directory.`}`);return}if(e.status===`success`){n();try{let e=await(await fetch(`/console/api/system/health`)).json();if(e.version!==void 0&&t!==void 0&&e.version===t){window.location.reload();return}}catch{}window.location.reload();return}}catch{try{let e=await(await fetch(`/console/api/updates/release`)).json();t!==void 0&&e.tag_name!==void 0&&e.tag_name!==t&&(n(),window.location.reload())}catch{}}},3e3)},v=Io(),y=Wa(),b=Va(),x=v.data?.version??Ao,S=b.find(e=>e.kind===`update-available`),C=S?.version??y.data?.tag_name?.replace(/^v/,``),ee=S!==void 0||Na(x,C),te=Za(),ne=(0,L.useRef)(null);(0,L.useEffect)(()=>{ee&&C!==void 0&&ma()!==C&&ne.current!==C&&(ne.current=C,f(!0))},[ee,C]);let re=e=>{Ra(Q,e)};(0,L.useEffect)(()=>{a(!1)},[r.pathname]),(0,L.useEffect)(()=>{let e=()=>a(!1);return window.addEventListener(`cartethyia:overlay-open`,e),()=>window.removeEventListener(`cartethyia:overlay-open`,e)},[]),(0,L.useLayoutEffect)(()=>{window.scrollTo(0,0)},[r.pathname]);let ie=async()=>{s(!0);try{await N(`/auth/logout`,{method:`POST`})}finally{Q.clear(),Aa(),n(`/login`,{replace:!0})}};(0,L.useEffect)(()=>(document.documentElement.dataset.glassEnabled=`true`,ea($i()),()=>{delete document.documentElement.dataset.glassEnabled}),[]);let w=Fo(r.pathname,te.data??[]);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`app-bg`,"aria-hidden":`true`}),(0,q.jsx)(la,{}),(0,q.jsx)(`div`,{className:`app-shell-frame`,children:(0,q.jsxs)(`div`,{className:`app-shell-root`,"data-drawer":i?`open`:void 0,"data-page-scroll":r.pathname===`/console-log`?`contained`:void 0,onClick:e=>{i&&e.target.closest(`.app-main-column`)&&a(!1)},children:[(0,q.jsxs)(`aside`,{className:`glass app-sidebar ${i?`is-open`:``}`,"aria-label":`Dashboard navigation`,children:[(0,q.jsxs)(`div`,{className:`brand-header`,children:[(0,q.jsx)(`div`,{"aria-hidden":`true`,className:`brand-icon overflow-hidden p-0`,children:(0,q.jsx)(`img`,{src:`/assets/brand/sidebar_ico.jpg`,alt:`Cartethyia`,onError:e=>{e.currentTarget.onerror=null,e.currentTarget.src=`/assets/brand/sidebar_ico.jpg`},className:`w-full h-full object-cover block`})}),(0,q.jsxs)(`div`,{className:`brand-meta`,children:[(0,q.jsx)(`div`,{className:`brand-name`,children:(0,q.jsx)(`span`,{children:`Cartethyia`})}),(0,q.jsxs)(`div`,{className:`brand-version-badge`,children:[(0,q.jsx)(`a`,{href:l,target:`_blank`,rel:`noreferrer`,className:`brand-version-link`,children:jo}),ee?(0,q.jsxs)(`button`,{type:`button`,onClick:()=>f(!0),className:`brand-update-badge`,title:C===void 0?`A newer Cartethyia release is available`:`Update available: v${C} — how to install it`,children:[(0,q.jsx)(ot,{size:9,className:`shrink-0`,"aria-hidden":`true`}),C===void 0?`update`:`Update v${C}`]}):null]})]})]}),(0,q.jsx)(`nav`,{className:`flex-1 overflow-y-auto py-2 px-0`,children:Mo.map(e=>(0,q.jsx)(Uo,{group:e,pathname:r.pathname,onIntent:re},e.label))}),(0,q.jsx)(`div`,{className:`sidebar-user-card`,children:(0,q.jsxs)(`div`,{className:`user-card-content`,children:[(0,q.jsx)(`div`,{className:`user-avatar`,"aria-hidden":`true`,children:(e.displayName??e.email).slice(0,2).toUpperCase()}),(0,q.jsxs)(`div`,{className:`user-info`,children:[(0,q.jsx)(`p`,{className:`user-name`,children:e.displayName||`Admin`}),(0,q.jsx)(`p`,{className:`user-role`,children:e.email})]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(!0),disabled:o,"aria-label":`Sign out`,title:`Sign out`,className:`topbar-icon-button w-15 h-15 rounded-inset`,children:(0,q.jsx)($e,{size:14})})]})})]}),(0,q.jsxs)(`div`,{className:`app-main-column`,children:[(0,q.jsxs)(`header`,{className:`glass app-topbar`,children:[(0,q.jsx)(`button`,{type:`button`,"aria-label":`Open navigation`,className:`topbar-menu-btn`,onClick:()=>a(!0),children:(0,q.jsx)(tt,{size:18})}),(0,q.jsxs)(`div`,{className:`topbar-meta`,children:[(0,q.jsxs)(`h1`,{className:`topbar-title`,children:[(0,q.jsx)(w.icon,{className:`topbar-title-icon`,size:16,"aria-hidden":`true`}),w.title]}),(0,q.jsx)(`p`,{className:`topbar-subtitle`,children:w.sub})]}),(0,q.jsxs)(`div`,{className:`topbar-actions`,children:[(0,q.jsx)(wi,{}),(0,q.jsx)(Lo,{}),(0,q.jsx)(Ho,{notifications:b,onOpenUpdate:()=>f(!0)})]})]}),(0,q.jsx)(`main`,{className:`route-enter w-full min-w-0`,children:t})]})]})}),(0,q.jsx)(ua,{open:c,onClose:()=>u(!1),onConfirm:ie,title:`Sign out?`,message:`You will need to sign in again to open the console.`,confirmLabel:`Sign out`,danger:!0}),(0,q.jsx)(_a,{open:d,onClose:()=>f(!1),currentVersion:x,...C===void 0?{}:{latestVersion:C},...(S?.href??y.data?.html_url)===void 0?{}:{releaseUrl:S?.href??y.data?.html_url},...C===void 0?{}:{onDismissVersion:()=>ha(C)},onUpdateNow:_,updating:p,...h===null?{}:{error:h}})]})}var Ko=class extends L.Component{state={error:null,componentStack:null};static getDerivedStateFromError(e){return{error:e,componentStack:null}}componentDidCatch(e,t){console.error(`[console] route render failed:`,e,t.componentStack),this.setState({componentStack:t.componentStack??null})}componentDidUpdate(e){e.resetKey!==this.props.resetKey&&this.state.error!==null&&this.setState({error:null})}render(){if(this.state.error===null)return this.props.children;let e=this.state.componentStack?.trim(),t=this.state.error.stack?.trim(),n=e!==void 0&&e.length>0?e:t!==void 0&&t.length>0?t:null;return(0,q.jsx)(`main`,{className:`auth-viewport`,children:(0,q.jsxs)(`div`,{className:`card-solid auth-window border border-red-soft`,children:[(0,q.jsxs)(`div`,{className:`auth-header`,children:[(0,q.jsx)(`h1`,{className:`auth-title`,children:`Console view failed`}),(0,q.jsx)(`p`,{className:`auth-desc`,children:`This view could not be rendered.`})]}),(0,q.jsxs)(`div`,{className:`rounded-panel border border-inner-border bg-surface-2 p-7 leading-normal text-caption text-text-secondary`,children:[(0,q.jsx)(`strong`,{className:`block text-text-primary mb-2`,children:`Rendering error`}),(0,q.jsx)(`span`,{className:`select-text break-words`,children:this.state.error.message}),n===null?null:(0,q.jsx)(`pre`,{className:`mt-4 max-h-80 overflow-auto whitespace-pre-wrap break-words text-badge text-text-tertiary`,children:n})]}),(0,q.jsx)(`button`,{type:`button`,className:`btn btn-primary inline-flex w-full items-center justify-center rounded-control bg-accent font-semibold text-accent-foreground mt-3 h-20 text-caption`,onClick:()=>window.location.reload(),children:`Reload console`})]})})}},qo=3e5;function Jo(e){return`cartethyia:lazy-retry:${e}`}function Yo(e,t){if(e===null)return!0;let n=Number(e);return!Number.isFinite(n)||t-n>qo}function Xo(){try{return typeof sessionStorage>`u`?void 0:sessionStorage}catch{return}}function $(e,t,n={}){let r=n.storage??Xo(),i=n.reload??(()=>{window.location.reload()}),a=n.now??(()=>Date.now()),o=Jo(t);return(0,L.lazy)(async()=>{try{let t=await e();try{r?.removeItem(o)}catch{}return t}catch(e){let t=null;try{t=r?.getItem(o)??null}catch{t=null}if(Yo(t,a())){try{r?.setItem(o,String(a()))}catch{}return i(),new Promise(()=>{})}throw e}})}function Zo(){return(0,q.jsxs)(`div`,{role:`status`,"aria-label":`Loading console`,className:`min-h-dvh flex flex-col items-center justify-center gap-6 text-text-tertiary`,children:[(0,q.jsx)(b,{size:22,className:`animate-spin`,"aria-hidden":`true`}),(0,q.jsx)(`p`,{className:`text-caption`,children:`Loading console…`})]})}var Qo=$(()=>i(()=>import(`./LoginPage-DkXb6dx-.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),`login`),$o=$(()=>i(()=>import(`./SetupPage-WTa0sktC.js`),__vite__mapDeps([10,1,2,3,4,6,7,8,9,11,12])),`setup`),es=$(()=>i(()=>import(`./BannedPage-Cj15GsMp.js`),__vite__mapDeps([13,1])),`banned`),ts=$(()=>i(()=>import(`./OverviewPage-Ci2wQKUz.js`),__vite__mapDeps([14,1,15,16,17,18,2,3,4,19,20,21,22,23,24,25,26,27,28,29,30,6,31,32,33,34,35,7,8,9,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,11,59,60])),`overview`),ns=$(()=>i(()=>import(`./UsagePage-BNzeZ2Vk.js`),__vite__mapDeps([61,1,15,16,17,2,3,4,62,63,30,6,55,36,44,8,9,64,21,5,24,65,51,66,67,68,33,54,38,39,57,31,32,11,40,69,70,71])),`usage`),rs=$(()=>i(()=>import(`./ProviderDetailPage-odlgYrOg.js`),__vite__mapDeps([72,1,15,73,74,18,2,3,4,75,62,63,30,6,55,36,8,9,45,76,21,23,24,77,29,31,32,35,39,38,11,64,46,22,25,26,49,50,27,67,33,54,34,7,37,57,59,40,43,78,79,69,70])),`provider-detail`),is=$(()=>i(()=>import(`./ProvidersPage-CqFBQEB8.js`),__vite__mapDeps([80,1,2,3,4,8,9,21,23,24,26,29,6,81,33,34,35,7,36,37,38,39,41,42,19,78,69])),`providers`),as=$(()=>i(()=>import(`./CombosPage-DEEKkYD-.js`),__vite__mapDeps([82,1,83,2,3,4,20,21,22,23,24,25,26,27,28,29,30,6,31,32,33,34,35,7,8,9,36,37,38,39,40,41,42,19,43,64,51,81,48,56,55,60,78,70])),`combos`),os=$(()=>i(()=>import(`./QuotaPage-CmnMDzhP.js`),__vite__mapDeps([84,1,15,2,3,4,42,19,8,76,21,23,24,77,29,30,6,31,32,35,39,38,11,50,85,33,34,36,37,59])),`quota`),ss=$(()=>i(()=>import(`./ProxyPage-5SnUSy3j.js`),__vite__mapDeps([86,1,15,2,3,4,8,9,45,21,23,24,25,26,49,77,52,29,30,6,33,54,34,35,7,36,38,39,11,79,31,32,69,71])),`proxy`),cs=$(()=>i(()=>import(`./SettingsPage-BJtRZ4qD.js`),__vite__mapDeps([87,1,15,2,3,4,44,9,21,22,23,24,53,29,85,30,6,31,32,33,54,34,7,8,36,38,60,40,12])),`settings`),ls=$(()=>i(()=>import(`./CliToolsPage-BIccZmeL.js`),__vite__mapDeps([88,1,15,21,2,3,4,33,35,38,39,58,30,6,31,32,89,11])),`cli-tools`),us=$(()=>i(()=>import(`./CliToolDetailPage-DZKmVuJN.js`),__vite__mapDeps([90,1,73,2,3,4,62,21,51,27,28,6,33,54,34,35,7,8,9,36,56,24,23,30,55,37,38,39,57,31,32,58,89])),`cli-tool-detail`),ds=$(()=>i(()=>import(`./ConsoleLogPage-D5rol2j2.js`),__vite__mapDeps([91,1,2,3,4,21,50,27,52,29,6,33,35,7,8,9,11])),`console-log`),fs=$(()=>i(()=>import(`./CustomizationPage-BKj_r0rp.js`),__vite__mapDeps([92,1,2,3,4,64,22,77,33,34,36,38,39])),`customization`),ps=$(()=>i(()=>import(`./StudioPage-BfAb5-o_.js`),__vite__mapDeps([93,1,16,74,2,3,4,75,45,24,94,23,65,25,77,67,33,7,8,9,36,56,51,27,30,6,55,35,37,57,31,32])),`studio`);function ms(){let e=G(),t=W();return(0,L.useEffect)(()=>(Fe(n=>{if(Q.clear(),Aa(),n===`banned`){e(`/banned`,{replace:!0});return}e(`/login?returnTo=${encodeURIComponent(t.pathname)}`,{replace:!0})}),()=>Fe(void 0)),[e,t.pathname]),null}function hs(){let e=W();return(0,q.jsx)(Ko,{resetKey:`${e.pathname}${e.search}`,children:(0,q.jsx)(L.Suspense,{fallback:(0,q.jsx)(Zo,{}),children:(0,q.jsxs)(yr,{children:[(0,q.jsx)(K,{path:`/login`,element:(0,q.jsx)(Qo,{})}),(0,q.jsx)(K,{path:`/setup`,element:(0,q.jsx)($o,{})}),(0,q.jsx)(K,{path:`/banned`,element:(0,q.jsx)(es,{})}),(0,q.jsx)(K,{path:`/*`,element:(0,q.jsx)(gs,{})})]})})})}function gs(){let[e,t]=(0,L.useState)({kind:`loading`}),n=W(),r=G(),[i]=(0,L.useState)(()=>n.pathname);return(0,L.useEffect)(()=>{let e=new AbortController;return Q.fetchQuery({queryKey:P.session.current,queryFn:()=>Pe(),staleTime:6e4}).then(n=>{if(!e.signal.aborted){if(n){Q.setQueryData(P.session.current,n),t({kind:`ready`,user:n}),n.isFirstBoot&&i!==`/setup`&&r(`/setup`,{replace:!0});return}Q.removeQueries({queryKey:P.session.current}),N(`/auth/first-boot`,{signal:e.signal}).then(n=>{e.signal.aborted||t({kind:`unauthenticated`,needsSetup:n.requires_setup})}).catch(()=>{e.signal.aborted||t({kind:`unauthenticated`,needsSetup:!1})})}}).catch(n=>{e.signal.aborted||(typeof n==`object`&&n&&`status`in n&&n.status===403?t({kind:`blocked`}):t({kind:`unauthenticated`,needsSetup:!1}))}),()=>e.abort()},[i,r]),e.kind===`loading`?null:e.kind===`blocked`?(0,q.jsx)(_r,{to:`/banned`,replace:!0}):e.kind===`unauthenticated`?(0,q.jsx)(_r,{to:e.needsSetup?`/setup`:`/login?returnTo=${encodeURIComponent(n.pathname)}`,replace:!0}):(0,q.jsx)(Go,{user:e.user,children:(0,q.jsxs)(yr,{children:[(0,q.jsx)(K,{path:`/`,element:(0,q.jsx)(ts,{})}),(0,q.jsx)(K,{path:`/usage`,element:(0,q.jsx)(ns,{})}),(0,q.jsx)(K,{path:`/providers`,element:(0,q.jsx)(is,{})}),(0,q.jsx)(K,{path:`/providers/:providerId`,element:(0,q.jsx)(rs,{})}),(0,q.jsx)(K,{path:`/combos`,element:(0,q.jsx)(as,{})}),(0,q.jsx)(K,{path:`/quota`,element:(0,q.jsx)(os,{})}),(0,q.jsx)(K,{path:`/proxy`,element:(0,q.jsx)(ss,{})}),(0,q.jsx)(K,{path:`/console-log`,element:(0,q.jsx)(ds,{})}),(0,q.jsx)(K,{path:`/customization`,element:(0,q.jsx)(fs,{})}),(0,q.jsx)(K,{path:`/model-lab`,element:(0,q.jsx)(ps,{})}),(0,q.jsx)(K,{path:`/cli-tools`,element:(0,q.jsx)(ls,{})}),(0,q.jsx)(K,{path:`/cli-tools/:toolId`,element:(0,q.jsx)(us,{})}),(0,q.jsx)(K,{path:`/settings`,element:(0,q.jsx)(cs,{})}),(0,q.jsx)(K,{path:`*`,element:(0,q.jsx)(_r,{to:`/`,replace:!0})})]})})}function _s(){return(0,q.jsx)(Ee,{client:Q,children:(0,q.jsxs)(ai,{basename:`/console`,children:[(0,q.jsx)(ms,{}),(0,q.jsx)(hs,{}),(0,q.jsx)(S,{position:`top-right`,offset:{top:`6rem`,right:`1rem`},mobileOffset:{top:`6rem`,left:`1rem`,right:`1rem`},visibleToasts:2,richColors:!0,duration:5e3,toastOptions:{className:`toast-surface select-text`,descriptionClassName:`select-text`,classNames:{title:`select-text`},style:{background:`var(--glass-bg-2)`,border:`1px solid var(--glass-border-2)`,color:`var(--text-primary)`,fontSize:`12.5px`,userSelect:`text`},actionButtonStyle:{background:`var(--accent)`,color:`var(--accent-foreground)`},cancelButtonStyle:{background:`var(--surface-muted)`,color:`var(--text-primary)`}}})]})})}function vs(e){document.title=`Cartethyia Console`,ka().finally(()=>{ja(),(0,vi.createRoot)(e).render((0,q.jsx)(L.StrictMode,{children:(0,q.jsx)(_s,{})}))})}export{Pi as $,po as A,ua as B,bo as C,Do as D,no as E,Ya as F,ra as G,Y as H,Ja as I,ki as J,zi as K,Ga as L,Ha as M,qa as N,ao as O,Ka as P,Ri as Q,Q as R,io as S,Oo as T,Ji as U,ia as V,na as W,Hi as X,Fi as Y,Ni as Z,lo as _,uo as a,ut as at,_o as b,oo as c,Qe as ct,wo as d,Je as dt,oi as et,ro as f,Ke as ft,$a as g,Qa as h,To as i,ft as it,Xa as j,Eo as k,yo as l,Ze as lt,so as m,vs as mountConsole,mo as n,Yn as nt,fo as o,ct as ot,to as p,Bi as q,xo as r,fi as rt,ko as s,st,Ao as t,G as tt,Co as u,Ye as ut,Za as v,So as w,eo as x,vo as y,fa as z};
@@ -1 +1 @@
1
- import{n as e,t}from"./jsx-runtime-CXUMngI_.js";import{i as n,n as r,r as i}from"./numbers-BNDZnsUE.js";import{x as a}from"./assert-C0YYuZJ4.js";import{a as o,t as s,u as c}from"./tokens-COzario9.js";import{t as l}from"./select-B3iTetHN.js";var u=e(`cog`,[[`path`,{d:`M11 10.27 7 3.34`,key:`16pf9h`}],[`path`,{d:`m11 13.73-4 6.93`,key:`794ttg`}],[`path`,{d:`M12 22v-2`,key:`1osdcq`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14 12h8`,key:`4f43i9`}],[`path`,{d:`m17 20.66-1-1.73`,key:`eq3orb`}],[`path`,{d:`m17 3.34-1 1.73`,key:`2wel8s`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`m20.66 17-1.73-1`,key:`sg0v6f`}],[`path`,{d:`m20.66 7-1.73 1`,key:`1ow05n`}],[`path`,{d:`m3.34 17 1.73-1`,key:`nuk764`}],[`path`,{d:`m3.34 7 1.73 1`,key:`1ulond`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}],[`circle`,{cx:`12`,cy:`12`,r:`8`,key:`46899m`}]]),d=[`1h`,`6h`,`12h`,`24h`,`7d`,`30d`,`all`],f=t(),p={"1h":`Last 1 Hour`,"6h":`Last 6 Hours`,"12h":`Last 12 Hours`,"24h":`Last 24 Hours`,"7d":`Last 7 Days`,"30d":`Last 30 Days`,all:`All retained`},m=d.map(e=>({value:e,label:p[e]??e}));function h(e){return p[e]??e}function g({value:e,onChange:t}){return(0,f.jsx)(l,{"aria-label":`Period`,value:e,size:`sm`,className:`w-auto min-w-46 shrink-0 grow-0 basis-auto`,onValueChange:t,options:m.map(e=>({value:e.value,label:e.label}))})}function _(e,t,r){let a=h(e);if(t||r===void 0)return a;let o=r.inputTokens+r.outputTokens;return`${a} · ${n(r.requests)} calls · ${c(o)} tokens · avg ${i(r.avgDurationMs)}`}function v(e){return e!==null&&d.includes(e)?e:`24h`}function y(e){return e===`tokens`||e===`cached`?e:`requests`}function b(e){if(e===null)return s;if(e===`auto`)return-1;let t=Number(e);return Number.isInteger(t)&&t>=0&&t<=o?t:s}function x(e){return e!==null&&a.includes(e)?e:`model`}function S(e){return e==null||!Number.isFinite(e)?`—`:e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function C(e){return e==null||!Number.isFinite(e)?`—`:`${r(e)} CR`}function w(e){return e==null||!Number.isFinite(e)||e<=0?`—`:`${(e>=100?Math.round(e):Math.round(e*10)/10).toLocaleString(`en-US`)} tok/s`}function T(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleTimeString(`en-GB`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function E(e){switch(e){case`chat`:return`OpenAI Completions`;case`messages`:return`Anthropic Messages`;case`responses`:return`OpenAI Responses`;case`completion`:return`OpenAI Completions`;default:return e||`—`}}function D(e,t=Date.now()){let n=new Date(e).getTime();if(Number.isNaN(n))return`—`;let r=Math.max(0,t-n),i=6e4,a=60*i,o=24*a,s=7*o;if(r<a){let e=Math.max(0,Math.floor(r/i));return e<=1?`just now`:`${e}m ago`}if(r<o){let e=Math.floor(r/a);return e<=1?`1h ago`:`${e}h ago`}if(r<s){let e=Math.floor(r/o);return e<=1?`1d ago`:`${e}d ago`}let c=Math.floor(r/s);return c<=1?`1w ago`:`${c}w ago`}export{D as a,T as c,_ as d,g as f,b as i,S as l,u as m,y as n,C as o,h as p,v as r,w as s,x as t,E as u};
1
+ import{n as e,t}from"./jsx-runtime-CXUMngI_.js";import{i as n,n as r,r as i}from"./numbers-CUWAZK4J.js";import{S as a}from"./assert-C0K-c4eo.js";import{a as o,t as s,u as c}from"./tokens-COzario9.js";import{t as l}from"./select-BLULNqTp.js";var u=e(`cog`,[[`path`,{d:`M11 10.27 7 3.34`,key:`16pf9h`}],[`path`,{d:`m11 13.73-4 6.93`,key:`794ttg`}],[`path`,{d:`M12 22v-2`,key:`1osdcq`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14 12h8`,key:`4f43i9`}],[`path`,{d:`m17 20.66-1-1.73`,key:`eq3orb`}],[`path`,{d:`m17 3.34-1 1.73`,key:`2wel8s`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`m20.66 17-1.73-1`,key:`sg0v6f`}],[`path`,{d:`m20.66 7-1.73 1`,key:`1ow05n`}],[`path`,{d:`m3.34 17 1.73-1`,key:`nuk764`}],[`path`,{d:`m3.34 7 1.73 1`,key:`1ulond`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}],[`circle`,{cx:`12`,cy:`12`,r:`8`,key:`46899m`}]]),d=[`1h`,`6h`,`12h`,`24h`,`7d`,`30d`,`all`],f=t(),p={"1h":`Last 1 Hour`,"6h":`Last 6 Hours`,"12h":`Last 12 Hours`,"24h":`Last 24 Hours`,"7d":`Last 7 Days`,"30d":`Last 30 Days`,all:`All retained`},m=d.map(e=>({value:e,label:p[e]??e}));function h(e){return p[e]??e}function g({value:e,onChange:t}){return(0,f.jsx)(l,{"aria-label":`Period`,value:e,size:`sm`,className:`w-auto min-w-46 shrink-0 grow-0 basis-auto`,onValueChange:t,options:m.map(e=>({value:e.value,label:e.label}))})}function _(e,t,r){let a=h(e);if(t||r===void 0)return a;let o=r.inputTokens+r.outputTokens;return`${a} · ${n(r.requests)} calls · ${c(o)} tokens · avg ${i(r.avgDurationMs)}`}function v(e){return e!==null&&d.includes(e)?e:`24h`}function y(e){return e===`tokens`||e===`cached`?e:`requests`}function b(e){if(e===null)return s;if(e===`auto`)return-1;let t=Number(e);return Number.isInteger(t)&&t>=0&&t<=o?t:s}function x(e){return e!==null&&a.includes(e)?e:`model`}function S(e){return e==null||!Number.isFinite(e)?`—`:e===0?`$0.00`:e<.01?`$${e.toFixed(4)}`:`$${e.toFixed(2)}`}function C(e){return e==null||!Number.isFinite(e)?`—`:`${r(e)} CR`}function w(e){return e==null||!Number.isFinite(e)||e<=0?`—`:`${(e>=100?Math.round(e):Math.round(e*10)/10).toLocaleString(`en-US`)} tok/s`}function T(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleTimeString(`en-GB`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function E(e){switch(e){case`chat`:return`OpenAI Completions`;case`messages`:return`Anthropic Messages`;case`responses`:return`OpenAI Responses`;case`completion`:return`OpenAI Completions`;default:return e||`—`}}function D(e,t=Date.now()){let n=new Date(e).getTime();if(Number.isNaN(n))return`—`;let r=Math.max(0,t-n),i=6e4,a=60*i,o=24*a,s=7*o;if(r<a){let e=Math.max(0,Math.floor(r/i));return e<=1?`just now`:`${e}m ago`}if(r<o){let e=Math.floor(r/a);return e<=1?`1h ago`:`${e}h ago`}if(r<s){let e=Math.floor(r/o);return e<=1?`1d ago`:`${e}d ago`}let c=Math.floor(r/s);return c<=1?`1w ago`:`${c}w ago`}export{D as a,T as c,_ as d,g as f,b as i,S as l,u as m,y as n,C as o,h as p,v as r,w as s,x as t,E as u};
@@ -1 +1 @@
1
- import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{a as i,c as a,i as o}from"./app-wvwCi4Eh.js";var s=e(`house`,[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]]),c=t(n(),1),l=r(),u=`https://img.shields.io`;function d(e,t){let n=new URLSearchParams({style:`flat-square`,labelColor:`0b1220`,color:t});return`${u}/github/${e}/${o}?${n.toString()}`}function f({size:e=16}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z`})})}function p({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M0 0v16h16V0H0Zm13 13h-2V5H8v8H3V3h10v10Z`})})}function m({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`m15.5 6.3-.02-.06-2.14-5.58a.56.56 0 0 0-.22-.26.57.57 0 0 0-.65.03.57.57 0 0 0-.19.29l-1.45 4.42H5.17L3.72.72A.57.57 0 0 0 3.53.43a.57.57 0 0 0-.65-.03.56.56 0 0 0-.22.26L.52 6.24l-.02.06a3.97 3.97 0 0 0 1.32 4.59l.01.01.02.02 3.25 2.44 1.61 1.22.98.74a.67.67 0 0 0 .81 0l.98-.74 1.61-1.22 3.26-2.45.01-.01a3.97 3.97 0 0 0 1.32-4.59Z`})})}function h({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M13.55 3.02A12.6 12.6 0 0 0 10.5 2.1a8.9 8.9 0 0 0-.4.83 11.7 11.7 0 0 0-3.2 0 8.6 8.6 0 0 0-.41-.83 12.6 12.6 0 0 0-3.05.92C1.3 5.75.85 8.4 1.07 11.01a12.7 12.7 0 0 0 3.74 1.9c.3-.41.57-.85.8-1.31-.44-.17-.86-.37-1.26-.6l.31-.24a9 9 0 0 0 7.68 0l.31.24c-.4.23-.82.43-1.26.6.23.46.5.9.8 1.31a12.7 12.7 0 0 0 3.74-1.9c.26-3.03-.44-5.66-1.98-7.99ZM5.68 9.4c-.73 0-1.33-.67-1.33-1.49s.59-1.49 1.33-1.49c.74 0 1.34.68 1.33 1.49 0 .82-.59 1.49-1.33 1.49Zm4.64 0c-.73 0-1.33-.67-1.33-1.49s.59-1.49 1.33-1.49c.74 0 1.34.68 1.33 1.49 0 .82-.59 1.49-1.33 1.49Z`})})}function g({id:e,size:t}){return e===`npm`?(0,l.jsx)(p,{size:t}):e===`gitlab`?(0,l.jsx)(m,{size:t}):e===`discord`?(0,l.jsx)(h,{size:t}):(0,l.jsx)(f,{size:t})}function _({className:e=``}){let[t,n]=(0,c.useState)(!1),r=(0,c.useRef)(null),o=(0,c.useId)(),s=(0,c.useCallback)(()=>n(!1),[]);return(0,c.useEffect)(()=>{if(!t)return;let e=e=>{r.current!==null&&!r.current.contains(e.target)&&s()},n=e=>{e.key===`Escape`&&s()};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,n),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,n)}},[t,s]),(0,l.jsx)(`div`,{className:e,ref:r,children:(0,l.jsxs)(`div`,{className:`github-split`,children:[(0,l.jsxs)(`a`,{className:`github-badge`,href:i,target:`_blank`,rel:`noreferrer`,"aria-label":`Cartethyia on GitHub`,children:[(0,l.jsx)(f,{size:15}),(0,l.jsx)(`img`,{className:`github-badge-metric`,src:d(`stars`,`2ea043`),alt:`GitHub stars`,height:20,loading:`lazy`,decoding:`async`}),(0,l.jsx)(`img`,{className:`github-badge-metric`,src:d(`forks`,`1f6feb`),alt:`GitHub forks`,height:20,loading:`lazy`,decoding:`async`})]}),(0,l.jsx)(`button`,{type:`button`,className:`github-split-toggle`,"aria-haspopup":`menu`,"aria-expanded":t,"aria-controls":o,"aria-label":`More ways to get Cartethyia`,onClick:()=>n(e=>!e),children:(0,l.jsx)(`svg`,{width:12,height:12,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M8 11 3 5h10l-5 6Z`})})}),t?(0,l.jsx)(`div`,{className:`github-split-menu`,id:o,role:`menu`,"aria-label":`Source and package links`,children:a.map(e=>(0,l.jsxs)(`a`,{className:`github-split-item`,href:e.href,target:`_blank`,rel:`noreferrer`,role:`menuitem`,onClick:s,children:[(0,l.jsx)(g,{id:e.id,size:14}),(0,l.jsxs)(`span`,{className:`github-split-item-text`,children:[(0,l.jsx)(`span`,{className:`github-split-item-label`,children:e.label}),(0,l.jsx)(`span`,{className:`github-split-item-hint`,children:e.hint})]})]},e.id))}):null]})})}export{f as n,s as r,_ as t};
1
+ import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{a as i,c as a,i as o}from"./app-Bgd3zANQ.js";var s=e(`house`,[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]]),c=t(n(),1),l=r(),u=`https://img.shields.io`;function d(e,t){let n=new URLSearchParams({style:`flat-square`,labelColor:`0b1220`,color:t});return`${u}/github/${e}/${o}?${n.toString()}`}function f({size:e=16}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z`})})}function p({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M0 0v16h16V0H0Zm13 13h-2V5H8v8H3V3h10v10Z`})})}function m({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`m15.5 6.3-.02-.06-2.14-5.58a.56.56 0 0 0-.22-.26.57.57 0 0 0-.65.03.57.57 0 0 0-.19.29l-1.45 4.42H5.17L3.72.72A.57.57 0 0 0 3.53.43a.57.57 0 0 0-.65-.03.56.56 0 0 0-.22.26L.52 6.24l-.02.06a3.97 3.97 0 0 0 1.32 4.59l.01.01.02.02 3.25 2.44 1.61 1.22.98.74a.67.67 0 0 0 .81 0l.98-.74 1.61-1.22 3.26-2.45.01-.01a3.97 3.97 0 0 0 1.32-4.59Z`})})}function h({size:e=15}){return(0,l.jsx)(`svg`,{width:e,height:e,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M13.55 3.02A12.6 12.6 0 0 0 10.5 2.1a8.9 8.9 0 0 0-.4.83 11.7 11.7 0 0 0-3.2 0 8.6 8.6 0 0 0-.41-.83 12.6 12.6 0 0 0-3.05.92C1.3 5.75.85 8.4 1.07 11.01a12.7 12.7 0 0 0 3.74 1.9c.3-.41.57-.85.8-1.31-.44-.17-.86-.37-1.26-.6l.31-.24a9 9 0 0 0 7.68 0l.31.24c-.4.23-.82.43-1.26.6.23.46.5.9.8 1.31a12.7 12.7 0 0 0 3.74-1.9c.26-3.03-.44-5.66-1.98-7.99ZM5.68 9.4c-.73 0-1.33-.67-1.33-1.49s.59-1.49 1.33-1.49c.74 0 1.34.68 1.33 1.49 0 .82-.59 1.49-1.33 1.49Zm4.64 0c-.73 0-1.33-.67-1.33-1.49s.59-1.49 1.33-1.49c.74 0 1.34.68 1.33 1.49 0 .82-.59 1.49-1.33 1.49Z`})})}function g({id:e,size:t}){return e===`npm`?(0,l.jsx)(p,{size:t}):e===`gitlab`?(0,l.jsx)(m,{size:t}):e===`discord`?(0,l.jsx)(h,{size:t}):(0,l.jsx)(f,{size:t})}function _({className:e=``}){let[t,n]=(0,c.useState)(!1),r=(0,c.useRef)(null),o=(0,c.useId)(),s=(0,c.useCallback)(()=>n(!1),[]);return(0,c.useEffect)(()=>{if(!t)return;let e=e=>{r.current!==null&&!r.current.contains(e.target)&&s()},n=e=>{e.key===`Escape`&&s()};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,n),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,n)}},[t,s]),(0,l.jsx)(`div`,{className:e,ref:r,children:(0,l.jsxs)(`div`,{className:`github-split`,children:[(0,l.jsxs)(`a`,{className:`github-badge`,href:i,target:`_blank`,rel:`noreferrer`,"aria-label":`Cartethyia on GitHub`,children:[(0,l.jsx)(f,{size:15}),(0,l.jsx)(`img`,{className:`github-badge-metric`,src:d(`stars`,`2ea043`),alt:`GitHub stars`,height:20,loading:`lazy`,decoding:`async`}),(0,l.jsx)(`img`,{className:`github-badge-metric`,src:d(`forks`,`1f6feb`),alt:`GitHub forks`,height:20,loading:`lazy`,decoding:`async`})]}),(0,l.jsx)(`button`,{type:`button`,className:`github-split-toggle`,"aria-haspopup":`menu`,"aria-expanded":t,"aria-controls":o,"aria-label":`More ways to get Cartethyia`,onClick:()=>n(e=>!e),children:(0,l.jsx)(`svg`,{width:12,height:12,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":`true`,focusable:`false`,children:(0,l.jsx)(`path`,{d:`M8 11 3 5h10l-5 6Z`})})}),t?(0,l.jsx)(`div`,{className:`github-split-menu`,id:o,role:`menu`,"aria-label":`Source and package links`,children:a.map(e=>(0,l.jsxs)(`a`,{className:`github-split-item`,href:e.href,target:`_blank`,rel:`noreferrer`,role:`menuitem`,onClick:s,children:[(0,l.jsx)(g,{id:e.id,size:14}),(0,l.jsxs)(`span`,{className:`github-split-item-text`,children:[(0,l.jsx)(`span`,{className:`github-split-item-label`,children:e.label}),(0,l.jsx)(`span`,{className:`github-split-item-hint`,children:e.hint})]})]},e.id))}):null]})})}export{f as n,s as r,_ as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/entry-j40LJotO.js","assets/jsx-runtime-CXUMngI_.js","assets/app-wvwCi4Eh.js","assets/app-B2vyPoII.css","assets/terminal-0_IjPWTk.js","assets/numbers-BNDZnsUE.js","assets/use-modal-focus-By7oJoGd.js","assets/dialog-C9omdjQt.js","assets/assert-C0YYuZJ4.js","assets/query-keys-CLaNz8Xz.js","assets/mutation-JJGQm8TD.js","assets/useMutation-Dmnfh1Ue.js","assets/dialog-actions-B1axpEg7.js","assets/entry-DS90gUks.js","assets/brain-Cwed_72z.js","assets/chevron-right-BXIy5l3h.js","assets/circle-check-BU3v_mFW.js","assets/eye-C_hawfH4.js","assets/github-badge-Orjuzemr.js","assets/state-DLS7IDMy.js","assets/key-round-UkavsGxp.js","assets/clipboard-button-DOfrVmsi.js","assets/use-clipboard-B0Sy03fE.js","assets/scaling-nWE4Cx8f.js","assets/wrench-B6E1oEuY.js","assets/card-Be5Uzamx.js","assets/download-dRFo5_Wu.js","assets/tokens-COzario9.js","assets/stream-retry-5QnVuSSo.js","assets/entry-q5HwZ8nN.js","assets/arrow-right-Dl5yKnp8.js","assets/log-in-BmRjy60c.js","assets/message-circle-CCxGwRvv.js","assets/shield-check-DVS0Foqh.js","assets/use-reduced-motion-C4B0R6Sz.js"])))=>i.map(i=>d[i]);
2
- (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function e(e){return e===`/share`||e.startsWith(`/share/`)?`share`:e===`/console`||e.startsWith(`/console/`)?`console`:`landing`}var t=`modulepreload`,n=function(e){return`/`+e},r={},i=function(e,i,a){let o=Promise.resolve();if(i&&i.length>0){let e=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}o=l(i.map(i=>{if(i=n(i,a),i=u(i),i in r)return;r[i]=!0;let o=i.endsWith(`.css`);for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.href===i&&(!o||n.rel===`stylesheet`))return}let s=document.createElement(`link`);if(s.rel=o?`stylesheet`:t,o||(s.as=`script`),s.crossOrigin=``,s.href=i,c&&s.setAttribute(`nonce`,c),document.head.appendChild(s),o)return new Promise((e,t)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(t=>{for(let e of t||[])e.status===`rejected`&&s(e.reason);return e().catch(s)})},a=document.getElementById(`root`);if(a===null)throw Error(`Dashboard root element is missing`);var o=e(window.location.pathname);o===`console`?i(async()=>{let{mountConsole:e}=await import(`./entry-j40LJotO.js`);return{mountConsole:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])).then(({mountConsole:e})=>e(a)):o===`share`?i(()=>import(`./entry-DS90gUks.js`).then(()=>void 0),__vite__mapDeps([13,1,2,3,14,5,15,16,17,18,19,20,21,22,23,24,25,26,27,28])):i(async()=>{let{mountLanding:e}=await import(`./entry-q5HwZ8nN.js`);return{mountLanding:e}},__vite__mapDeps([29,1,2,3,4,30,18,31,32,33,34])).then(({mountLanding:e})=>e(a));export{i as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/entry-LCS85hiq.js","assets/jsx-runtime-CXUMngI_.js","assets/app-Bgd3zANQ.js","assets/app--PJWq8_C.css","assets/terminal-0_IjPWTk.js","assets/numbers-CUWAZK4J.js","assets/use-modal-focus-By7oJoGd.js","assets/dialog-BEK7KP0H.js","assets/assert-C0K-c4eo.js","assets/query-keys-BloKtaXJ.js","assets/mutation-Rr0TIvcj.js","assets/useMutation-m8WGNPrz.js","assets/dialog-actions-B1axpEg7.js","assets/entry-CHWxbS56.js","assets/brain-Cwed_72z.js","assets/chevron-right-BXIy5l3h.js","assets/circle-check-BU3v_mFW.js","assets/eye-C_hawfH4.js","assets/github-badge-YSCE4UC2.js","assets/state-DTARjfiW.js","assets/key-round-UkavsGxp.js","assets/clipboard-button-BQqBQd2n.js","assets/use-clipboard-B0Sy03fE.js","assets/scaling-nWE4Cx8f.js","assets/wrench-B6E1oEuY.js","assets/card-CtkX66Wd.js","assets/download-dRFo5_Wu.js","assets/tokens-COzario9.js","assets/switch-c0oPSnqW.js","assets/entry-EBHJ3DrE.js","assets/arrow-right-Dl5yKnp8.js","assets/log-in-BmRjy60c.js","assets/message-circle-CCxGwRvv.js","assets/shield-check-DVS0Foqh.js","assets/use-reduced-motion-C4B0R6Sz.js"])))=>i.map(i=>d[i]);
2
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function e(e){return e===`/share`||e.startsWith(`/share/`)?`share`:e===`/console`||e.startsWith(`/console/`)?`console`:`landing`}var t=`modulepreload`,n=function(e){return`/`+e},r={},i=function(e,i,a){let o=Promise.resolve();if(i&&i.length>0){let e=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}o=l(i.map(i=>{if(i=n(i,a),i=u(i),i in r)return;r[i]=!0;let o=i.endsWith(`.css`);for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.href===i&&(!o||n.rel===`stylesheet`))return}let s=document.createElement(`link`);if(s.rel=o?`stylesheet`:t,o||(s.as=`script`),s.crossOrigin=``,s.href=i,c&&s.setAttribute(`nonce`,c),document.head.appendChild(s),o)return new Promise((e,t)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(t=>{for(let e of t||[])e.status===`rejected`&&s(e.reason);return e().catch(s)})},a=document.getElementById(`root`);if(a===null)throw Error(`Dashboard root element is missing`);var o=e(window.location.pathname);o===`console`?i(async()=>{let{mountConsole:e}=await import(`./entry-LCS85hiq.js`);return{mountConsole:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])).then(({mountConsole:e})=>e(a)):o===`share`?i(()=>import(`./entry-CHWxbS56.js`).then(()=>void 0),__vite__mapDeps([13,1,2,3,14,5,15,16,17,18,19,20,21,22,23,24,25,26,27,28])):i(async()=>{let{mountLanding:e}=await import(`./entry-EBHJ3DrE.js`);return{mountLanding:e}},__vite__mapDeps([29,1,2,3,4,30,18,31,32,33,34])).then(({mountLanding:e})=>e(a));export{i as t};