libre-webui 0.39.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/dist/persistence/extensionTypes.d.ts +2 -0
- package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.js.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +6 -0
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +7 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/routes/email.d.ts.map +1 -1
- package/backend/dist/routes/email.js +51 -1
- package/backend/dist/routes/email.js.map +1 -1
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +6 -1
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +1 -0
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/emailService.d.ts +17 -3
- package/backend/dist/services/emailService.d.ts.map +1 -1
- package/backend/dist/services/emailService.js +73 -11
- package/backend/dist/services/emailService.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts +3 -0
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginCredentialsService.js +18 -5
- package/backend/dist/services/pluginCredentialsService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +9 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +31 -14
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/workRuntimeService.d.ts +5 -0
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +243 -84
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/utils/emailMarkdown.js +3 -3
- package/backend/dist/utils/emailMarkdown.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts +7 -0
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +49 -1
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/artifact-runtime/mermaid.js +366 -366
- package/frontend/dist/assets/index-DLfU_qNT.js +75 -0
- package/frontend/dist/assets/index-DtS3qhdq.css +2 -0
- package/frontend/dist/assets/xterm-B1njb2Cr.css +1 -0
- package/frontend/dist/index.html +27 -26
- package/frontend/dist/js/ArtifactContainer-BjzltfdU.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-Ddpy2O_v.js → ArtifactDemoPage-DWua6xj9.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-CdsAqv8H.js → ArtifactSandboxFrame-CR9ghP0A.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-DX2nL3AS.js +1 -0
- package/frontend/dist/js/AutomationModal-DZe-C2jN.js +1 -0
- package/frontend/dist/js/AutomationsPage-CrCcnTyk.js +1 -0
- package/frontend/dist/js/AvatarUpload-nPS0QHod.js +1 -0
- package/frontend/dist/js/Button-Dh2UJA-B.js +1 -0
- package/frontend/dist/js/CalendarPage-D2WiWglM.js +1 -0
- package/frontend/dist/js/ChannelsPage-COp2T8FQ.js +1 -0
- package/frontend/dist/js/ChatPage-CUfAlpdt.js +14 -0
- package/frontend/dist/js/ConnectModels-emc3dv4A.js +1 -0
- package/frontend/dist/js/EvaluationsPage-CbyeDkz_.js +2 -0
- package/frontend/dist/js/FirstTimeSetup-C4ffQRMN.js +1 -0
- package/frontend/dist/js/GalleryPage-D4Ci_3dv.js +1 -0
- package/frontend/dist/js/HomePage-C3IhEERN.js +1 -0
- package/frontend/dist/js/LanguageSwitcher-BQqDJPwm.js +1 -0
- package/frontend/dist/js/ModelManagerModals-DhY8Rme6.js +1 -0
- package/frontend/dist/js/NotesPage-j812I1BN.js +3 -0
- package/frontend/dist/js/PasswordStrengthMeter-BSEtQBJp.js +1 -0
- package/frontend/dist/js/PersonasPage--YWoThqF.js +13 -0
- package/frontend/dist/js/PluginUsagePage-CZiMdmjI.js +1 -0
- package/frontend/dist/js/{RichMessageContent-BfYbVBFz.js → RichMessageContent-BLI0hhzR.js} +2 -2
- package/frontend/dist/js/RichMessageContent-BXv5baJ_.js +1 -0
- package/frontend/dist/js/SettingsModal-C6aVzSI-.js +19 -0
- package/frontend/dist/js/SettingsToggle-CkLLtFbz.js +1 -0
- package/frontend/dist/js/ShareDialog-DQskc17d.js +1 -0
- package/frontend/dist/js/StrandsPage-DENhVKcz.js +1 -0
- package/frontend/dist/js/SystemPage-C86ypXG4.js +1 -0
- package/frontend/dist/js/UserManagementPanel-D1CS0KPn.js +1 -0
- package/frontend/dist/js/WhatsNewModal-B31A_UQY.js +1 -0
- package/frontend/dist/js/WorkPage-DEXBL5J7.js +7 -0
- package/frontend/dist/js/api-DRAKhdz7.js +1 -0
- package/frontend/dist/js/{api-BrHW-VGd.js → api-Dcz1G4Ib.js} +4 -2
- package/frontend/dist/js/{appNavigation-B6xYIgLi.js → appNavigation-C5A9BF_G.js} +1 -1
- package/frontend/dist/js/appStore-0_qlwS8f.js +2 -0
- package/frontend/dist/js/appVersion-D5lk_2zb.js +1 -0
- package/frontend/dist/js/ar-BZntyucf.js +2 -0
- package/frontend/dist/js/authStore-C4dzH1NY.js +1 -0
- package/frontend/dist/js/{authStore-DjAsRpNL.js → authStore-COgKeTRv.js} +3 -3
- package/frontend/dist/js/bn-BDCaFQu-.js +2 -0
- package/frontend/dist/js/chatStore-CVTbkZyb.js +3 -0
- package/frontend/dist/js/{client-DppLngAs.js → client-jaxZzn-I.js} +2 -2
- package/frontend/dist/js/{composerStyles-C83jssgZ.js → composerStyles-BEx0XAp6.js} +1 -1
- package/frontend/dist/js/{config-4_s8hdqO.js → config-Da1yh9sC.js} +1 -1
- package/frontend/dist/js/confirmStore-CKkUtP9c.js +1 -0
- package/frontend/dist/js/cs-BCmN--jQ.js +2 -0
- package/frontend/dist/js/da-B895dAyV.js +2 -0
- package/frontend/dist/js/de-B0ZhC0dm.js +2 -0
- package/frontend/dist/js/es-D7eaw4_W.js +2 -0
- package/frontend/dist/js/{evaluationsApi-DyuW7IJ_.js → evaluationsApi-BwaxBVpl.js} +1 -1
- package/frontend/dist/js/fr-DsB0gLW4.js +2 -0
- package/frontend/dist/js/hi-CLeU3ung.js +2 -0
- package/frontend/dist/js/id-Cdq6tOTi.js +2 -0
- package/frontend/dist/js/is-DJ1tHaAT.js +2 -0
- package/frontend/dist/js/it-9K1R4CeT.js +2 -0
- package/frontend/dist/js/ja-BYP_3M5M.js +2 -0
- package/frontend/dist/js/ko-CNtjlaDm.js +2 -0
- package/frontend/dist/js/liveAnnouncerStore-B6mS-JWC.js +1 -0
- package/frontend/dist/js/messageCodeStyles-D3cWF9XO.js +2 -0
- package/frontend/dist/js/ms-A_IVO_qt.js +2 -0
- package/frontend/dist/js/nl-CrKWO3ea.js +2 -0
- package/frontend/dist/js/pl-BrpSuyDP.js +2 -0
- package/frontend/dist/js/pt-BHbpB5BM.js +2 -0
- package/frontend/dist/js/ru-DzLsS9zY.js +2 -0
- package/frontend/dist/js/{strandsApi-BFbeEpAY.js → strandsApi-COxSPh_5.js} +1 -1
- package/frontend/dist/js/sv-VU2CjzNj.js +2 -0
- package/frontend/dist/js/{teamEventStream-DsAS6P4m.js → teamEventStream-RNJYm84u.js} +1 -1
- package/frontend/dist/js/th-DV2hNXXc.js +2 -0
- package/frontend/dist/js/tr-DvVZ9jxF.js +2 -0
- package/frontend/dist/js/ui-CI0OdG9q.js +2 -0
- package/frontend/dist/js/ui-vendor-6S05F84J.js +1 -0
- package/frontend/dist/js/uk-MFFDRo2m.js +2 -0
- package/frontend/dist/js/useChat-BSkqxHnH.js +13 -0
- package/frontend/dist/js/useDictation-D9whH12W.js +1 -0
- package/frontend/dist/js/vi-CfZ-U8Cw.js +2 -0
- package/frontend/dist/js/{work-CdbmBok5.js → work-C7MYlv5S.js} +1 -1
- package/frontend/dist/js/{workModels-BM2Zyiba.js → workAnnouncements-CAsI8P7c.js} +1 -1
- package/frontend/dist/js/workApi-BJfbaV6k.js +1 -0
- package/frontend/dist/js/{workApi-UPxumrEF.js → workApi-Ck8nTlJn.js} +1 -1
- package/frontend/dist/js/zh-CTl_raYa.js +2 -0
- package/package.json +3 -2
- package/plugins/codex-oauth.json +1 -0
- package/frontend/dist/assets/index-D99DS5c6.js +0 -57
- package/frontend/dist/assets/index-Dz1JufgZ.css +0 -1
- package/frontend/dist/assets/xterm-B8QFf3JU.css +0 -1
- package/frontend/dist/js/ArtifactContainer-Cn7X9HGm.js +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-cVd9X80o.js +0 -1
- package/frontend/dist/js/AutomationModal-B4UaWjkk.js +0 -1
- package/frontend/dist/js/AutomationsPage-huCrvLUp.js +0 -1
- package/frontend/dist/js/AvatarUpload-CG-w6Mpt.js +0 -1
- package/frontend/dist/js/Button-j68Q8KVh.js +0 -1
- package/frontend/dist/js/CalendarPage-CZXT1w99.js +0 -1
- package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +0 -1
- package/frontend/dist/js/ChatPage-BZE65kiq.js +0 -14
- package/frontend/dist/js/ConnectModels-DD4bLgdq.js +0 -1
- package/frontend/dist/js/EvaluationsPage-Dq53LaXd.js +0 -2
- package/frontend/dist/js/FirstTimeSetup-BoJIfuQT.js +0 -1
- package/frontend/dist/js/GalleryPage-DKwqeB2A.js +0 -1
- package/frontend/dist/js/HomePage-C8bCJfls.js +0 -1
- package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +0 -1
- package/frontend/dist/js/ModelManagerModals-BzjZ-QwL.js +0 -1
- package/frontend/dist/js/NotesPage-CnaAp_w_.js +0 -3
- package/frontend/dist/js/PasswordStrengthMeter-DI4RDv67.js +0 -1
- package/frontend/dist/js/PersonasPage-CH3GUKph.js +0 -13
- package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +0 -1
- package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +0 -1
- package/frontend/dist/js/SettingsModal-BvtJcvow.js +0 -19
- package/frontend/dist/js/SettingsToggle-DrJ0Bapi.js +0 -1
- package/frontend/dist/js/ShareDialog-DaSxkTKS.js +0 -1
- package/frontend/dist/js/StrandsPage-BQwz0mWq.js +0 -1
- package/frontend/dist/js/SystemPage-BqNZoFxR.js +0 -1
- package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +0 -1
- package/frontend/dist/js/WhatsNewModal-CLcU2Ugk.js +0 -1
- package/frontend/dist/js/WorkPage-BpjGn--1.js +0 -8
- package/frontend/dist/js/api-K_hhqPdx.js +0 -1
- package/frontend/dist/js/appStore-DkRdQQeY.js +0 -2
- package/frontend/dist/js/appVersion-BVtSqLVj.js +0 -1
- package/frontend/dist/js/ar-XTZGEtBr.js +0 -2
- package/frontend/dist/js/authStore-DBS6Kbvh.js +0 -1
- package/frontend/dist/js/bn-JiK7ZWmy.js +0 -2
- package/frontend/dist/js/chatStore-DpVxt9VX.js +0 -3
- package/frontend/dist/js/cs-D8ju18CO.js +0 -2
- package/frontend/dist/js/da-BJWcAoUc.js +0 -2
- package/frontend/dist/js/de-CLJLmy69.js +0 -2
- package/frontend/dist/js/es-BvqHEL-3.js +0 -2
- package/frontend/dist/js/fr-B8ZoZomI.js +0 -2
- package/frontend/dist/js/goober.modern-BaHbaW3_.js +0 -1
- package/frontend/dist/js/hi-AzJLALo-.js +0 -2
- package/frontend/dist/js/id-DZYGQhvC.js +0 -2
- package/frontend/dist/js/is-Da_kvtzW.js +0 -2
- package/frontend/dist/js/it-B90zSlqn.js +0 -2
- package/frontend/dist/js/ja-DU_K1GOr.js +0 -2
- package/frontend/dist/js/ko-DicfoO-e.js +0 -2
- package/frontend/dist/js/messageCodeStyles-CuQPkfEK.js +0 -2
- package/frontend/dist/js/ms-CfH7wjUY.js +0 -2
- package/frontend/dist/js/nl-ELlOz-B3.js +0 -2
- package/frontend/dist/js/pl-33dayyUk.js +0 -2
- package/frontend/dist/js/pt-aIXSQPCT.js +0 -2
- package/frontend/dist/js/ru-BSvGtBtW.js +0 -2
- package/frontend/dist/js/sv-B7KOz81W.js +0 -2
- package/frontend/dist/js/th-DgpjGxvA.js +0 -2
- package/frontend/dist/js/tr-BQTbl2h-.js +0 -2
- package/frontend/dist/js/ui-Aq8MP7Ph.js +0 -2
- package/frontend/dist/js/ui-vendor-DVTj_sKN.js +0 -1
- package/frontend/dist/js/uk-JLymloot.js +0 -2
- package/frontend/dist/js/useChat-D3ZAGz70.js +0 -10
- package/frontend/dist/js/useDictation-B6l8QzeM.js +0 -1
- package/frontend/dist/js/vi-BXdLOJ8q.js +0 -2
- package/frontend/dist/js/workApi-D1xtiG3Q.js +0 -1
- package/frontend/dist/js/zh-gdUf9sXa.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-CR5VJ85Q.js";import{t as r}from"./useQuery-BTKpXudI.js";import{t as i}from"./useTranslation-Boi0fB1B.js";import{t as a}from"./utils-B-Bhh1pF.js";import{J as o,Lt as s,On as c,Qn as l,Un as u,Z as d,br as f,cn as p,cr as m,et as h,g,s as _,v,wr as y,zn as b}from"./ui-vendor-DVTj_sKN.js";import{t as x}from"./Button-j68Q8KVh.js";import{t as S}from"./client-DppLngAs.js";import{u as C}from"./api-BrHW-VGd.js";import{a as w,o as T}from"./ui-Aq8MP7Ph.js";var E=e(t(),1),D={getAnalytics:e=>S.get(`/costs/analytics`,{params:{days:e}}).then(e=>e.data),listTariffs:()=>S.get(`/costs/tariffs`).then(e=>e.data),createTariff:e=>S.post(`/costs/tariffs`,e).then(e=>e.data),deleteTariff:e=>S.delete(`/costs/tariffs/${encodeURIComponent(e)}`).then(()=>void 0),listBudgets:()=>S.get(`/costs/budgets`).then(e=>e.data),createBudget:e=>S.post(`/costs/budgets`,e).then(e=>e.data),deleteBudget:e=>S.delete(`/costs/budgets/${encodeURIComponent(e)}`).then(()=>void 0),exportUrl:e=>`/api/costs/export?days=${e}`,exportCsv:e=>S.get(`/costs/export`,{params:{days:e},responseType:`blob`}).then(e=>e.data)},O=n(),k=e=>new Intl.NumberFormat(void 0,{style:`currency`,currency:`USD`,maximumFractionDigits:e<1?4:2}).format(e),A=`w-full rounded-lg border border-gray-300 bg-white px-2 py-1.5 text-sm dark:border-dark-300 dark:bg-dark-50`,j=({days:e})=>{let{t}=i(),[n,r]=(0,E.useState)(null),[a,o]=(0,E.useState)([]),[l,u]=(0,E.useState)([]),[d,f]=(0,E.useState)(!0),[p,m]=(0,E.useState)(0),[g,_]=(0,E.useState)({pluginId:``,model:``,inputPerMillion:``,outputPerMillion:``,unitPrice:``}),[b,S]=(0,E.useState)({name:``,principalType:`instance`,principalId:``,period:`monthly`,amountUsd:``,mode:`soft`});(0,E.useEffect)(()=>{let n=!1;return Promise.all([D.getAnalytics(e),D.listTariffs(),D.listBudgets()]).then(([e,t,i])=>{n||(e.success&&e.data&&r(e.data),t.success&&t.data&&o(t.data),i.success&&i.data&&u(i.data))}).catch(()=>y.error(t(`costs.loadFailed`))).finally(()=>{n||f(!1)}),()=>{n=!0}},[e,p,t]);let C=e=>{if(!e.trim())return;let t=Number(e);return Number.isFinite(t)?t:void 0},w=async()=>{try{let e=await D.createTariff({pluginId:g.pluginId.trim(),model:g.model.trim()||void 0,inputPerMillion:C(g.inputPerMillion),outputPerMillion:C(g.outputPerMillion),unitPrice:C(g.unitPrice)});if(!e.success)throw Error(e.message);y.success(t(`costs.tariffSaved`)),_({pluginId:``,model:``,inputPerMillion:``,outputPerMillion:``,unitPrice:``}),m(e=>e+1)}catch(e){y.error(e instanceof Error?e.message:t(`costs.saveFailed`))}},T=async()=>{try{let e=await D.createBudget({name:b.name.trim(),principalType:b.principalType,principalId:b.principalType===`instance`?void 0:b.principalId.trim(),period:b.period,amountUsd:Number(b.amountUsd),mode:b.mode});if(!e.success)throw Error(e.message);y.success(t(`costs.budgetSaved`)),S({name:``,principalType:`instance`,principalId:``,period:`monthly`,amountUsd:``,mode:`soft`}),m(e=>e+1)}catch(e){y.error(e instanceof Error?e.message:t(`costs.saveFailed`))}},j=async()=>{try{let t=await D.exportCsv(e),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`libre-webui-costs.csv`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}catch{y.error(t(`costs.exportFailed`))}};return d&&!n?(0,O.jsx)(`div`,{className:`flex justify-center rounded-lg border border-gray-200 bg-white p-6 dark:border-dark-300 dark:bg-dark-100`,children:(0,O.jsx)(s,{className:`h-5 w-5 animate-spin text-gray-400`})}):(0,O.jsxs)(`div`,{className:`space-y-4 rounded-lg border border-gray-200 bg-white p-4 dark:border-dark-300 dark:bg-dark-100`,"data-testid":`cost-governance-panel`,children:[(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h3`,{className:`text-sm font-semibold text-gray-900 dark:text-gray-100`,children:t(`costs.title`)}),(0,O.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:t(`costs.description`)})]}),(0,O.jsxs)(x,{size:`sm`,variant:`outline`,onClick:()=>void j(),children:[(0,O.jsx)(c,{className:`mr-1 h-3.5 w-3.5`}),t(`costs.exportCsv`)]})]}),n&&(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[(0,O.jsxs)(`div`,{className:`rounded-lg bg-gray-50 p-3 dark:bg-dark-50`,children:[(0,O.jsx)(`p`,{className:`text-xs text-gray-500`,children:t(`costs.totalSpend`)}),(0,O.jsx)(`p`,{className:`text-lg font-semibold`,children:k(n.totalUsd)})]}),(0,O.jsxs)(`div`,{className:`rounded-lg bg-gray-50 p-3 dark:bg-dark-50`,children:[(0,O.jsx)(`p`,{className:`text-xs text-gray-500`,children:t(`costs.meteredEvents`)}),(0,O.jsx)(`p`,{className:`text-lg font-semibold`,children:n.meteredEvents})]}),(0,O.jsxs)(`div`,{className:`rounded-lg bg-gray-50 p-3 dark:bg-dark-50`,children:[(0,O.jsx)(`p`,{className:`text-xs text-gray-500`,children:t(`costs.unmeteredEvents`)}),(0,O.jsx)(`p`,{className:`text-lg font-semibold`,children:n.unmeteredEvents})]}),(0,O.jsxs)(`div`,{className:`rounded-lg bg-gray-50 p-3 dark:bg-dark-50`,children:[(0,O.jsx)(`p`,{className:`text-xs text-gray-500`,children:t(`costs.topModel`)}),(0,O.jsx)(`p`,{className:`truncate text-sm font-medium`,children:n.byModel[0]?`${n.byModel[0].model} (${k(n.byModel[0].usd)})`:`—`})]})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-gray-500`,children:t(`costs.budgets`)}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[n?.budgets.map(e=>{let n=Math.min(1,e.spentUsd/e.amountUsd);return(0,O.jsxs)(`div`,{className:`rounded-lg border border-gray-200 p-2 dark:border-dark-300`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-sm`,children:[(0,O.jsxs)(`span`,{className:`min-w-0 truncate font-medium`,children:[e.name,(0,O.jsxs)(`span`,{className:`ml-2 text-xs font-normal text-gray-500`,children:[t(`costs.mode.${e.mode}`),` ·`,` `,t(`costs.period.${e.period}`),` ·`,` `,e.principalType===`instance`?t(`costs.scope.instance`):`${t(`costs.scope.${e.principalType}`)}: ${e.principalId}`]})]}),(0,O.jsxs)(`span`,{className:`shrink-0 text-xs text-gray-600 dark:text-gray-300`,children:[k(e.spentUsd),` / `,k(e.amountUsd)]}),(0,O.jsx)(`button`,{onClick:()=>{D.deleteBudget(e.id).then(()=>m(e=>e+1)).catch(()=>y.error(t(`costs.saveFailed`)))},className:`shrink-0 rounded p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-950/30`,"aria-label":t(`costs.deleteBudget`),children:(0,O.jsx)(v,{className:`h-3.5 w-3.5`})})]}),(0,O.jsx)(`div`,{className:`mt-1 h-1.5 overflow-hidden rounded bg-gray-200 dark:bg-dark-300`,children:(0,O.jsx)(`div`,{className:n>=1?`h-full bg-red-500`:n>=.8?`h-full bg-amber-500`:`h-full bg-emerald-500`,style:{width:`${Math.round(n*100)}%`}})})]},e.id)}),l.length===0&&(0,O.jsx)(`p`,{className:`text-xs text-gray-500`,children:t(`costs.noBudgets`)})]}),(0,O.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 gap-2 sm:grid-cols-6`,children:[(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.budgetName`),value:b.name,onChange:e=>S({...b,name:e.target.value})}),(0,O.jsxs)(`select`,{className:A,value:b.principalType,onChange:e=>S({...b,principalType:e.target.value}),children:[(0,O.jsx)(`option`,{value:`instance`,children:t(`costs.scope.instance`)}),(0,O.jsx)(`option`,{value:`user`,children:t(`costs.scope.user`)}),(0,O.jsx)(`option`,{value:`group`,children:t(`costs.scope.group`)})]}),(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.principalId`),value:b.principalId,disabled:b.principalType===`instance`,onChange:e=>S({...b,principalId:e.target.value})}),(0,O.jsxs)(`select`,{className:A,value:b.period,onChange:e=>S({...b,period:e.target.value}),children:[(0,O.jsx)(`option`,{value:`daily`,children:t(`costs.period.daily`)}),(0,O.jsx)(`option`,{value:`weekly`,children:t(`costs.period.weekly`)}),(0,O.jsx)(`option`,{value:`monthly`,children:t(`costs.period.monthly`)})]}),(0,O.jsxs)(`div`,{className:`flex gap-2`,children:[(0,O.jsx)(`input`,{className:A,placeholder:`USD`,inputMode:`decimal`,value:b.amountUsd,onChange:e=>S({...b,amountUsd:e.target.value})}),(0,O.jsxs)(`select`,{className:A,value:b.mode,onChange:e=>S({...b,mode:e.target.value}),children:[(0,O.jsx)(`option`,{value:`observe`,children:t(`costs.mode.observe`)}),(0,O.jsx)(`option`,{value:`soft`,children:t(`costs.mode.soft`)}),(0,O.jsx)(`option`,{value:`hard`,children:t(`costs.mode.hard`)})]})]}),(0,O.jsxs)(x,{size:`sm`,onClick:()=>void T(),children:[(0,O.jsx)(h,{className:`mr-1 h-3.5 w-3.5`}),t(`costs.addBudget`)]})]})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h4`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-gray-500`,children:t(`costs.tariffs`)}),(0,O.jsx)(`div`,{className:`overflow-x-auto`,children:(0,O.jsxs)(`table`,{className:`w-full text-left text-xs`,children:[(0,O.jsx)(`thead`,{className:`text-gray-500`,children:(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.plugin`)}),(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.model`)}),(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.inputPerMillion`)}),(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.outputPerMillion`)}),(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.unitPrice`)}),(0,O.jsx)(`th`,{className:`py-1 pr-2`,children:t(`costs.effectiveFrom`)}),(0,O.jsx)(`th`,{})]})}),(0,O.jsxs)(`tbody`,{children:[a.map(e=>(0,O.jsxs)(`tr`,{className:`border-t border-gray-100 dark:border-dark-300`,children:[(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:e.plugin_id}),(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:e.model??t(`costs.allModels`)}),(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:e.input_per_million===null?`—`:k(e.input_per_million)}),(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:e.output_per_million===null?`—`:k(e.output_per_million)}),(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:e.unit_price===null?`—`:k(e.unit_price)}),(0,O.jsx)(`td`,{className:`py-1 pr-2`,children:new Intl.DateTimeFormat(void 0,{dateStyle:`medium`}).format(e.effective_from)}),(0,O.jsx)(`td`,{className:`py-1`,children:(0,O.jsx)(`button`,{onClick:()=>{D.deleteTariff(e.id).then(()=>m(e=>e+1)).catch(()=>y.error(t(`costs.saveFailed`)))},className:`rounded p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-950/30`,"aria-label":t(`costs.deleteTariff`),children:(0,O.jsx)(v,{className:`h-3.5 w-3.5`})})})]},e.id)),a.length===0&&(0,O.jsx)(`tr`,{children:(0,O.jsx)(`td`,{colSpan:7,className:`py-2 text-gray-500`,children:t(`costs.noTariffs`)})})]})]})}),(0,O.jsxs)(`div`,{className:`mt-2 grid grid-cols-2 gap-2 sm:grid-cols-6`,children:[(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.plugin`),value:g.pluginId,onChange:e=>_({...g,pluginId:e.target.value})}),(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.modelOptional`),value:g.model,onChange:e=>_({...g,model:e.target.value})}),(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.inputPerMillion`),inputMode:`decimal`,value:g.inputPerMillion,onChange:e=>_({...g,inputPerMillion:e.target.value})}),(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.outputPerMillion`),inputMode:`decimal`,value:g.outputPerMillion,onChange:e=>_({...g,outputPerMillion:e.target.value})}),(0,O.jsx)(`input`,{className:A,placeholder:t(`costs.unitPrice`),inputMode:`decimal`,value:g.unitPrice,onChange:e=>_({...g,unitPrice:e.target.value})}),(0,O.jsxs)(x,{size:`sm`,onClick:()=>void w(),children:[(0,O.jsx)(h,{className:`mr-1 h-3.5 w-3.5`}),t(`costs.addTariff`)]})]})]})]})},M={strands:`Strands`,"claude-code":`Claude Code`,codex:`Codex`,opencode:`OpenCode`,pi:`Pi`},N=e=>{if(e.startsWith(`agent-cli:`))return e.slice(10)||void 0};function P(e){if(e.agents!==void 0)return e.agents;let t=new Map;for(let n of e.plugins){let e=N(n.pluginId);if(!e)continue;let r=t.get(e)??{agentId:e,agentName:M[e]??n.pluginName,calls:0,tokens:0,errors:0,averageLatencyMs:0,models:[]},i=r.calls+n.calls;r.averageLatencyMs=i?(r.averageLatencyMs*r.calls+n.averageLatencyMs*n.calls)/i:0,r.calls=i,r.tokens+=n.tokens,r.errors+=n.errors,t.set(e,r)}for(let n of e.models){let e=N(n.pluginId),r=e?t.get(e):void 0;if(!r)continue;let i=r.models.find(e=>e.model===n.model);i?(i.calls+=n.calls,i.tokens+=n.tokens,i.errors+=n.errors):r.models.push({model:n.model,calls:n.calls,tokens:n.tokens,errors:n.errors})}return[...t.values()]}var F=[`#3b82f6`,`#059669`,`#db683c`,`#8b5cf6`,`#e11d48`,`#0891b2`,`#a16207`,`#db2777`,`#0d9488`,`#6366f1`,`#65a30d`,`#a855f7`,`#4879a8`,`#9d6c34`,`#c25280`,`#6f7d35`,`#5363bb`],I=`#6b7280`,L=e=>{let t=e*137.508%360,n=e=>{let n=.65*Math.min(e,1-e);return[0,8,4].map(r=>{let i=(r+t/30)%12;return e-n*Math.max(-1,Math.min(i-3,9-i,1))})},r=0,i=1;for(let e=0;e<16;e++){let e=(r+i)/2,t=n(e).map(e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4);t[0]*.2126+t[1]*.7152+t[2]*.0722<.2?r=e:i=e}return`#${n((r+i)/2).map(e=>Math.round(e*255).toString(16).padStart(2,`0`)).join(``)}`},R=e=>e===null?`other`:`model:${e}`;function z(e,t){return e.range.from===t.range.from&&e.range.to===t.range.to&&e.series.length===t.series.length&&e.series.every((e,n)=>{let r=t.series[n];return e.timestamp===r.timestamp&&e.calls===r.calls&&e.tokens===r.tokens&&e.errors===r.errors})}function ee(e){return e.modelSeries?.length?e.modelSeries.map(e=>({...e,key:R(e.model)})):[{key:`total`,model:void 0,points:e.series}]}function te(e){let t=e.heatmap?.models??[],n=(e.modelSeries??[]).flatMap(e=>e.model===null?[]:[e.model]).filter(e=>!t.includes(e)).sort(),r=new Set([...t,...e.heatmap?.cells.flatMap(e=>e.models.map(e=>e.model))??[],...e.modelSeries?.flatMap(e=>e.model===null?[]:[e.model])??[],...e.models.map(e=>e.model)]),i=[...t,...n,...[...r].filter(e=>!t.includes(e)&&!n.includes(e)).sort()],a=new Map([[`other`,I],[`total`,I]]);return i.forEach((e,t)=>{a.set(R(e),F[t]??L(t))}),a}function ne(e,t,n,r){let i=e.models.filter(e=>e.pluginId===t&&(r===void 0||e.pluginName===r)&&e.calls>0).map(({model:e,calls:t})=>({model:e,calls:t})),a=n-i.reduce((e,t)=>e+t.calls,0);return a>0?[...i,{model:null,calls:a}]:i}function re({analytics:e,metric:t,onMetricChange:n,colors:r,highlighted:s,selected:c,loadingModel:u,canLoadModels:d=!1,onHighlight:f,onSelect:p}){let{t:m,i18n:h}=i(),g=(0,E.useMemo)(()=>ee(e),[e]),_=(0,E.useRef)(null),[v,y]=(0,E.useState)(960),[b,x]=(0,E.useState)();(0,E.useEffect)(()=>{let e=_.current;if(!e)return;let t=new ResizeObserver(e=>{y(Math.max(280,e[0].contentRect.width))});return t.observe(e),()=>t.disconnect()},[]);let S=(e,t=!1)=>new Intl.NumberFormat(h.language,{notation:t&&e>=1e4?`compact`:`standard`,maximumFractionDigits:+!!t}).format(e),C=new Intl.DateTimeFormat(h.language,{month:`short`,day:`numeric`,timeZone:`UTC`}),w=e=>e===void 0?m(`usageAnalytics.activity.allModels`):e===null?m(`usageAnalytics.heatmap.other`):e||`—`,T={top:18,right:20,bottom:32,left:48},D=v-T.left-T.right,k=260-T.top-T.bottom,A=Math.max(1,...g.flatMap(e=>e.points.map(e=>e[t]))),j=Math.ceil(A/4)*4,M=e.series.reduce((e,n)=>e+n[t],0),N=t===`tokens`&&M===0,P=t=>T.left+(e.series.length<=1?D/2:t/(e.series.length-1)*D),F=e=>T.top+k-e/j*k,I=e.series.findIndex(e=>e.timestamp===b),L=I<0?Math.max(0,e.series.length-1):I,R=e.series[L],z=g.find(e=>e.key===s),te=[...new Set([0,Math.floor((e.series.length-1)/2),e.series.length-1])].filter(e=>e>=0),ne=g.map(e=>({...e,value:e.points[L]?.[t]??0})).sort((e,t)=>t.value-e.value),re=e=>e.map((e,n)=>`${n===0?`M`:`L`} ${P(n)} ${F(e[t])}`).join(` `);return(0,O.jsxs)(`section`,{"data-testid":`plugin-usage-chart`,"aria-busy":u!==void 0,className:`min-w-0 overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,O.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3 border-b border-gray-200/70 px-4 py-4 dark:border-white/[0.07] sm:px-5`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:m(`usageAnalytics.activity.title`)}),(0,O.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:m(`usageAnalytics.activity.${t===`calls`?`callsDescription`:`tokensDescription`}`)})]}),(0,O.jsx)(`div`,{className:`inline-flex rounded-xl bg-gray-100 p-1 dark:bg-dark-200/80`,children:[`calls`,`tokens`].map(e=>(0,O.jsx)(`button`,{type:`button`,"aria-pressed":t===e,className:a(`min-h-9 rounded-lg px-3 text-xs font-medium focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500`,t===e?`bg-white text-gray-950 shadow-sm dark:bg-dark-300 dark:text-dark-950`:`text-gray-500 hover:text-gray-800 dark:text-dark-500 dark:hover:text-dark-800`),onClick:()=>n(e),children:m(`usageAnalytics.metrics.${e}`)},e))})]}),(0,O.jsxs)(`div`,{className:`px-4 pt-4 sm:px-5`,children:[(0,O.jsxs)(`div`,{className:`mb-3 flex min-h-8 flex-wrap items-center justify-between gap-2`,children:[(0,O.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:m(`usageAnalytics.activity.compareHint`)}),(0,O.jsxs)(`button`,{type:`button`,disabled:!c&&!s,className:a(`inline-flex min-h-9 items-center gap-1.5 rounded-lg px-2 text-xs font-medium text-gray-700 hover:bg-gray-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-500 dark:text-dark-800 dark:hover:bg-dark-200`,!c&&!s&&`invisible`),onClick:()=>{p(void 0),f(void 0)},children:[(0,O.jsx)(o,{className:`h-3.5 w-3.5`}),m(`usageAnalytics.activity.showAll`)]})]}),(0,O.jsx)(`div`,{"data-testid":`usage-model-legend`,className:a(`grid gap-2 sm:grid-cols-2 lg:grid-cols-3`,d&&`h-48 content-start overflow-y-auto pe-1`),children:g.map(e=>{let n=s===e.key,i=c===e.key,o=r.get(e.key)??`#6b7280`,u=e.points.reduce((e,n)=>e+n[t],0);return(0,O.jsxs)(`button`,{type:`button`,"aria-pressed":i,"aria-label":w(e.model),title:w(e.model),onMouseEnter:()=>f(e.key),onMouseLeave:()=>f(void 0),onFocus:()=>f(e.key),onBlur:()=>f(void 0),onClick:()=>p(i?void 0:e.key),className:a(`flex min-h-11 min-w-0 items-center gap-2.5 rounded-xl border px-3 py-2 text-start focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500`,n?`border-gray-400 bg-gray-50 dark:border-dark-500 dark:bg-dark-200`:`border-gray-200/70 hover:bg-gray-50 dark:border-white/[0.07] dark:hover:bg-dark-200/70`),children:[(0,O.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 rounded-full`,style:{backgroundColor:o},"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-dark-900`,dir:`auto`,children:w(e.model)}),(0,O.jsx)(`span`,{className:`shrink-0 text-xs tabular-nums text-gray-500 dark:text-dark-500`,children:S(u,!0)}),i&&(0,O.jsx)(l,{className:`h-3.5 w-3.5 shrink-0 text-gray-800 dark:text-dark-900`,"aria-hidden":`true`})]},e.key)})}),(d||g.some(e=>e.model===null))&&(0,O.jsx)(`p`,{className:`mt-2 text-[11px] text-gray-500 dark:text-dark-500`,children:m(`usageAnalytics.activity.topModels`)}),g[0]?.model===void 0&&(0,O.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:m(`usageAnalytics.activity.breakdownUnavailable`)})]}),(0,O.jsx)(`div`,{className:`relative mx-3 mt-4 sm:mx-5`,ref:_,children:N?(0,O.jsx)(`div`,{className:`flex h-[260px] items-center justify-center text-sm text-gray-500 dark:text-dark-500`,children:m(`usageAnalytics.activity.noTokens`)}):(0,O.jsxs)(`svg`,{viewBox:`0 0 ${v} 260`,direction:`ltr`,className:`block h-[260px] w-full touch-pan-y`,role:`img`,"aria-label":m(`usageAnalytics.activity.chartLabel`,{metric:m(`usageAnalytics.metrics.${t}`)}),onPointerMove:t=>{let n=t.currentTarget.getBoundingClientRect(),r=(t.clientX-n.left)*v/n.width,i=Math.round(Math.max(0,Math.min(1,(r-T.left)/D))*(e.series.length-1));e.series[i]&&x(e.series[i].timestamp)},children:[(0,O.jsx)(`title`,{children:m(`usageAnalytics.activity.chartLabel`,{metric:m(`usageAnalytics.metrics.${t}`)})}),[0,.25,.5,.75,1].map(e=>{let t=T.top+k*e;return(0,O.jsxs)(`g`,{children:[(0,O.jsx)(`line`,{x1:T.left,x2:v-T.right,y1:t,y2:t,className:`stroke-gray-200 dark:stroke-white/[0.07]`,strokeDasharray:e===1?void 0:`3 6`}),(0,O.jsx)(`text`,{x:T.left-9,y:t+4,textAnchor:`end`,className:`fill-gray-500 text-[11px] dark:fill-dark-500`,children:S(Math.round(j*(1-e)),!0)})]},e)}),R&&(0,O.jsx)(`line`,{x1:P(L),x2:P(L),y1:T.top,y2:260-T.bottom,className:`stroke-gray-300 dark:stroke-dark-400`,strokeDasharray:`3 4`}),[...g].sort((e,t)=>Number(e.key===s)-Number(t.key===s)).map(e=>{let n=e.key===s,i=r.get(e.key)??`#6b7280`,a=e.points[L];return(0,O.jsxs)(`g`,{opacity:s&&!n?.18:1,children:[(0,O.jsx)(`path`,{"data-testid":`usage-model-line`,"data-model":e.model===void 0?`__total__`:e.model??`__other__`,"data-highlighted":n,d:re(e.points),stroke:i,fill:`none`,strokeWidth:n?3.5:2,strokeDasharray:e.model===null?`6 4`:void 0,strokeLinecap:`round`,strokeLinejoin:`round`,vectorEffect:`non-scaling-stroke`,children:(0,O.jsx)(`title`,{children:w(e.model)})}),a&&(0,O.jsx)(`circle`,{cx:P(L),cy:F(a[t]),r:n?5:3.5,fill:i,className:`stroke-white dark:stroke-dark-100`,strokeWidth:`2`})]},e.key)}),te.map(t=>(0,O.jsx)(`text`,{x:P(t),y:252,textAnchor:t===0?`start`:t===e.series.length-1?`end`:`middle`,className:`fill-gray-500 text-[11px] dark:fill-dark-500`,children:C.format(e.series[t].timestamp)},t))]})}),R&&(0,O.jsxs)(`div`,{className:`border-t border-gray-200/70 px-4 py-4 dark:border-white/[0.07] sm:px-5`,children:[(0,O.jsxs)(`label`,{className:`mb-2 flex flex-wrap items-center justify-between gap-2 text-xs text-gray-500 dark:text-dark-500`,children:[(0,O.jsx)(`span`,{children:m(`usageAnalytics.activity.exploreDay`)}),(0,O.jsx)(`span`,{className:`text-gray-800 dark:text-dark-800`,children:C.format(R.timestamp)}),(0,O.jsx)(`input`,{"data-testid":`usage-chart-day-slider`,type:`range`,min:0,max:Math.max(0,e.series.length-1),step:1,value:L,"aria-label":m(`usageAnalytics.activity.exploreDay`),"aria-valuetext":C.format(R.timestamp),onChange:t=>x(e.series[Number(t.target.value)]?.timestamp),className:`h-6 w-full cursor-pointer accent-gray-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-500 dark:accent-gray-300`,dir:`ltr`})]}),(0,O.jsxs)(`div`,{"data-testid":`usage-chart-day-detail`,"aria-live":`polite`,"aria-atomic":`true`,children:[(0,O.jsxs)(`div`,{className:`mb-3 flex flex-wrap items-baseline justify-between gap-2`,children:[(0,O.jsxs)(`span`,{className:`text-xs font-medium text-gray-700 dark:text-dark-800`,children:[m(`usageAnalytics.activity.dayTotal`),` ·`,` `,C.format(R.timestamp)]}),(0,O.jsxs)(`span`,{className:`text-sm font-medium tabular-nums text-gray-950 dark:text-dark-950`,children:[S(R[t]),` `,m(`usageAnalytics.metrics.${t}`)]})]}),(0,O.jsx)(`div`,{className:a(`grid gap-x-5 gap-y-2 sm:grid-cols-2 lg:grid-cols-3`,d&&`max-h-40 overflow-y-auto`),children:ne.map(e=>(0,O.jsxs)(`div`,{"data-model":e.model===void 0?`__total__`:e.model??`__other__`,className:a(`flex min-w-0 items-center gap-2 text-xs`,s===e.key&&`font-medium`),children:[(0,O.jsx)(`span`,{"aria-hidden":`true`,className:`h-2 w-2 shrink-0 rounded-full`,style:{backgroundColor:r.get(e.key)??`#6b7280`}}),(0,O.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-gray-600 dark:text-dark-700`,title:w(e.model),dir:`auto`,children:w(e.model)}),(0,O.jsx)(`span`,{className:`shrink-0 tabular-nums text-gray-900 dark:text-dark-900`,children:S(e.value)})]},e.key))}),(0,O.jsx)(`p`,{className:`mt-3 h-4 truncate text-xs font-medium text-gray-600 dark:text-dark-700`,children:u===void 0?z?m(`usageAnalytics.activity.highlightedModel`,{model:w(z.model)}):m(`usageAnalytics.activity.allModels`):m(`usageAnalytics.activity.loadingModel`,{model:u})})]})]})]})}var B=new Intl.NumberFormat(void 0,{maximumFractionDigits:0}),V=new Intl.NumberFormat(void 0,{notation:`compact`,maximumFractionDigits:1}),H=e=>e>=1e4?V.format(e):B.format(e),U=e=>e?e<1e3?`${B.format(e)} ms`:`${(e/1e3).toFixed(+(e<1e4))} s`:`—`,W=(e,t)=>e===0?0:(e-t)/e*100,G=864e5,K=10,q=12,J=30,Y=16,ie=`fill-gray-950/[0.06] dark:fill-white/[0.07]`,ae=[0,.35,.55,.75,1],oe=({heatmap:e,colors:t,chartModels:n,focusedModel:r})=>{let{t:o,i18n:s}=i(),[c,l]=(0,E.useState)(null),u=[...new Set([...e.models,...n])],d=e=>e!==void 0&&(u.includes(e)||e===r)?t.get(R(e))??`#6b7280`:I,{weeks:f,firstColStart:p,cellsByDay:m,maxCalls:h,totalCalls:g}=(0,E.useMemo)(()=>{let t=new Map(e.cells.map(e=>[e.timestamp,e])),n=e.from,r=e.from+(e.days-1)*G,i=n-new Date(n).getUTCDay()*G;return{weeks:Math.ceil((r-i+G)/(7*G)),firstColStart:i,cellsByDay:t,maxCalls:Math.max(1,...e.cells.map(e=>e.calls)),totalCalls:e.cells.reduce((e,t)=>e+t.calls,0)}},[e]),_=new Intl.DateTimeFormat(s.language,{month:`short`,timeZone:`UTC`}),v=new Intl.DateTimeFormat(s.language,{weekday:`short`,timeZone:`UTC`}),y=new Intl.DateTimeFormat(s.language,{dateStyle:`medium`,timeZone:`UTC`}),b=e.from,x=e.from+(e.days-1)*G,S=J+f*q,C=[],w=-1;for(let e=0;e<f;e++){let t=p+e*7*G,n=Math.max(t,b),r=new Date(n).getUTCMonth();r!==w&&t>=b-6*G&&((w!==-1||t>=b)&&C.push({x:J+e*q,label:_.format(n)}),w=r)}let T=e=>e<=0?0:Math.min(4,Math.max(1,Math.ceil(e/h*4))),D=e=>d(e.models[0]?.model),k=(e,t,n)=>{let r=e.currentTarget.closest(`[data-heatmap-wrapper]`);if(!r)return;let i=r.getBoundingClientRect(),a=e.currentTarget.getBoundingClientRect(),o=a.left-i.left+a.width/2;l({x:Math.min(Math.max(o,96),Math.max(i.width-96,96)),y:a.top-i.top,timestamp:t,calls:n.calls,models:n.models})};return(0,O.jsxs)(`section`,{"data-testid":`usage-heatmap`,className:`min-w-0 overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,O.jsxs)(`div`,{className:`flex flex-col gap-1 border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:flex-row sm:items-center sm:justify-between sm:px-5`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:o(`usageAnalytics.heatmap.title`)}),(0,O.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:o(`usageAnalytics.heatmap.description`)})]}),(0,O.jsx)(`span`,{className:`shrink-0 text-xs tabular-nums text-gray-500 dark:text-dark-500`,children:o(`usageAnalytics.heatmap.yearTotal`,{count:g,formatted:H(g)})})]}),(0,O.jsxs)(`div`,{className:`relative p-4 sm:px-5`,"data-heatmap-wrapper":!0,children:[(0,O.jsx)(`div`,{className:`overflow-x-auto`,children:(0,O.jsxs)(`svg`,{viewBox:`0 0 ${S} 100`,direction:`ltr`,className:`h-auto w-full min-w-[640px]`,role:`img`,"aria-label":o(`usageAnalytics.heatmap.title`),onMouseLeave:()=>l(null),children:[C.map(({x:e,label:t})=>(0,O.jsx)(`text`,{x:e,y:10,className:`fill-gray-400 text-[8px] dark:fill-dark-500`,children:t},`${e}-${t}`)),[1,3,5].map(e=>(0,O.jsx)(`text`,{x:0,y:Y+e*q+K-2,className:`fill-gray-400 text-[8px] dark:fill-dark-500`,children:v.format(new Date(Date.UTC(2023,0,1+e)))},e)),Array.from({length:f},(e,t)=>Array.from({length:7},(e,n)=>{let r=p+(t*7+n)*G;if(r<b||r>x)return null;let i=m.get(r),o=i?.calls??0,s=T(o);return(0,O.jsx)(`rect`,{x:J+t*q,y:Y+n*q,width:K,height:K,rx:2,"data-model":i?.models[0]?.model,fill:i&&s>0?D(i):void 0,fillOpacity:s===0?1:ae[s],strokeWidth:+(c?.timestamp===r),className:a(`motion-safe:transition-opacity`,(s===0||!i)&&ie,c?.timestamp===r?`stroke-gray-500 dark:stroke-white/60`:`stroke-transparent`),onMouseEnter:e=>k(e,r,{calls:o,models:i?.models??[]}),children:(0,O.jsx)(`title`,{children:`${y.format(r)} — ${H(o)}`})},r)}))]})}),c&&(0,O.jsxs)(`div`,{className:`pointer-events-none absolute z-10 min-w-[10rem] -translate-x-1/2 -translate-y-full rounded-lg border border-gray-200/80 bg-white/95 px-3 py-2 shadow-card backdrop-blur-md dark:border-white/[0.1] dark:bg-dark-100/95`,style:{left:c.x,top:c.y-6},children:[(0,O.jsx)(`div`,{className:`text-[11px] font-medium text-gray-900 dark:text-dark-900`,children:y.format(c.timestamp)}),(0,O.jsx)(`div`,{className:`mt-0.5 text-[11px] text-gray-500 dark:text-dark-500`,children:c.calls===0?o(`usageAnalytics.heatmap.noCalls`):`${H(c.calls)} ${o(`usageAnalytics.heatmap.calls`)}`}),c.models.slice(0,3).map(e=>(0,O.jsxs)(`div`,{className:`mt-1 flex items-center justify-between gap-3 text-[11px]`,children:[(0,O.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,O.jsx)(`span`,{className:`h-2 w-2 shrink-0 rounded-[3px]`,style:{backgroundColor:d(e.model)}}),(0,O.jsx)(`span`,{className:`truncate font-mono text-gray-700 dark:text-dark-700`,dir:`ltr`,children:e.model})]}),(0,O.jsx)(`span`,{className:`tabular-nums text-gray-500 dark:text-dark-500`,children:H(e.calls)})]},e.model))]}),(0,O.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center justify-between gap-3`,children:[(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1.5`,children:[u.map(e=>(0,O.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] text-gray-600 dark:text-dark-600`,children:[(0,O.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px]`,style:{backgroundColor:t.get(R(e))??`#6b7280`}}),(0,O.jsx)(`span`,{className:`font-mono`,dir:`ltr`,children:e})]},e)),(0,O.jsxs)(`span`,{className:`flex items-center gap-1.5 text-[11px] text-gray-600 dark:text-dark-600`,children:[(0,O.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px]`,style:{backgroundColor:I}}),o(`usageAnalytics.heatmap.other`)]})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] text-gray-500 dark:text-dark-500`,children:[o(`usageAnalytics.heatmap.less`),(0,O.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px] bg-gray-950/[0.06] dark:bg-white/[0.07]`}),ae.slice(1).map(e=>(0,O.jsx)(`span`,{className:`h-2.5 w-2.5 rounded-[3px] bg-gray-500`,style:{opacity:e}},e)),o(`usageAnalytics.heatmap.more`)]})]})]})]})},se=({analytics:e})=>{let{t}=i(),n=P(e),r=e=>(e.meteredCalls??0)>0||e.tokens>0;return(0,O.jsxs)(`section`,{"data-testid":`usage-agent-breakdown`,"aria-labelledby":`usage-agent-heading`,className:`rounded-2xl border border-gray-200/80 bg-white/80 p-4 shadow-subtle dark:border-white/[0.08] dark:bg-dark-100/75 sm:p-5`,children:[(0,O.jsxs)(`h2`,{id:`usage-agent-heading`,className:`flex items-center gap-2 text-sm font-medium text-gray-950 dark:text-dark-950`,children:[(0,O.jsx)(m,{className:`h-4 w-4`,"aria-hidden":`true`}),t(`usageAnalytics.agents.title`)]}),(0,O.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.agents.description`)}),e.agents===void 0&&(0,O.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.agents.legacy`)}),(0,O.jsx)(`div`,{className:`mt-4 grid min-w-0 gap-3 sm:grid-cols-2 xl:grid-cols-3`,children:n.map(e=>(0,O.jsxs)(`article`,{"data-agent":e.agentId,className:`min-w-0 rounded-xl border border-gray-200/70 p-3 dark:border-white/[0.07]`,children:[(0,O.jsx)(`h3`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e.agentName}),(0,O.jsxs)(`dl`,{className:`mt-3 grid grid-cols-2 gap-3`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.metrics.calls`)}),(0,O.jsx)(`dd`,{"data-agent-metric":`calls`,className:`mt-1 text-lg tabular-nums text-gray-950 dark:text-dark-950`,children:H(e.calls)})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.cards.tokens`)}),(0,O.jsx)(`dd`,{"data-agent-metric":`tokens`,className:`mt-1 text-sm tabular-nums text-gray-950 dark:text-dark-950`,children:r(e)?H(e.tokens):e.calls===0?`—`:e.meteredCalls===0?t(`usageAnalytics.agents.unreported`):`—`})]})]}),e.calls===0?(0,O.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.agents.noCalls`)}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:[t(`usageAnalytics.cards.latency`),`:`,` `,(0,O.jsx)(`span`,{className:`tabular-nums`,dir:`ltr`,children:U(e.averageLatencyMs)})]}),e.meteredCalls!==void 0&&e.meteredCalls>0&&(0,O.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:t(`usageAnalytics.cards.tokensDetail`,{count:e.meteredCalls})}),e.errors>0&&(0,O.jsxs)(`p`,{className:`mt-2 flex items-center gap-1 text-xs text-gray-600 dark:text-dark-600`,children:[(0,O.jsx)(g,{className:`h-3.5 w-3.5`,"aria-hidden":`true`}),t(`usageAnalytics.providers.failures`,{count:e.errors})]}),e.models.length>0&&(0,O.jsxs)(`div`,{className:`mt-3`,children:[(0,O.jsx)(`h4`,{className:`text-xs font-medium text-gray-700 dark:text-dark-700`,children:t(`usageAnalytics.agents.topModels`)}),(0,O.jsx)(`div`,{className:`mt-1 max-h-48 overflow-y-auto`,children:(0,O.jsxs)(`table`,{className:`w-full table-fixed text-start text-xs`,children:[(0,O.jsx)(`thead`,{className:`text-gray-500 dark:text-dark-500`,children:(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`th`,{className:`w-1/2 py-1 text-start font-normal`,children:t(`usageAnalytics.models.model`)}),(0,O.jsx)(`th`,{className:`px-1 py-1 text-end font-normal`,children:t(`usageAnalytics.metrics.calls`)}),(0,O.jsx)(`th`,{className:`py-1 text-end font-normal`,children:t(`usageAnalytics.metrics.tokens`)})]})}),(0,O.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:e.models.map(e=>(0,O.jsxs)(`tr`,{"data-agent-model":e.model,children:[(0,O.jsx)(`td`,{className:`break-words py-1.5 pe-2 text-gray-700 dark:text-dark-700`,children:(0,O.jsx)(`span`,{dir:`auto`,children:e.model})}),(0,O.jsx)(`td`,{className:`px-1 py-1.5 text-end tabular-nums`,children:H(e.calls)}),(0,O.jsx)(`td`,{className:`py-1.5 text-end tabular-nums`,children:r(e)?H(e.tokens):`—`})]},e.model))})]})})]})]})]},e.agentId))})]})},X=()=>{let{t:e}=i(),[t,n]=(0,E.useState)(30),[o,c]=(0,E.useState)(`calls`),[l,h]=(0,E.useState)(),[v,y]=(0,E.useState)(),{data:S,error:D,isLoading:k,isFetching:A,refetch:M}=r({queryKey:[`plugin-usage`,t],refetchInterval:2e4,refetchIntervalInBackground:!1,queryFn:async()=>{let n=await C.getUsage(t);if(!n.success||!n.data)throw Error(n.error||e(`usageAnalytics.loadFailed`));return n.data}}),N=(0,E.useMemo)(()=>new Set(S?ee(S).map(e=>e.key):[]),[S]),P=(0,E.useMemo)(()=>new Set([...N,...S?.models.map(e=>R(e.model))??[]]),[N,S]),F=l&&P.has(l)?l:void 0,I=v&&P.has(v)?v:void 0,L=N.has(`other`),B=(L?[I,F].find(e=>e?.startsWith(`model:`)&&!N.has(e)):void 0)?.slice(6),V=r({queryKey:[`plugin-usage`,t,`model`,B,S?.range.to],enabled:B!==void 0,staleTime:3e4,queryFn:async()=>{let n=await C.getUsage(t,B,S?.range.to);if(!n.success||!n.data)throw Error(n.error||e(`usageAnalytics.loadFailed`));return n.data}}),G=S,K=!!S&&!!V.data&&z(S,V.data),q=(0,E.useMemo)(()=>S&&B!==void 0&&K?{...S,modelSeries:V.data.modelSeries}:S,[S,B,K,V.data]),J=(0,E.useRef)(null);(0,E.useEffect)(()=>{B!==void 0&&V.data&&!K&&!A&&J.current!==V.data&&(J.current=V.data,M())},[B,V.data,K,A,M]);let Y=D??(B===void 0?null:V.error),ie=Y?Y instanceof Error?Y.message:e(`usageAnalytics.loadFailed`):null,ae=B!==void 0&&!K&&!Y?B:void 0,X=(0,E.useMemo)(()=>S?te(S):new Map,[S]),ce=(0,E.useMemo)(()=>new Set(q?ee(q).map(e=>e.key):[]),[q]),Z=I??F,le=e=>h(e),Q=e=>{if(S?.modelSeries?.length&&(e!==null||N.has(`other`)))return R(e)},$=G?.totals,ue=(0,E.useMemo)(()=>[{label:e(`usageAnalytics.cards.calls`),value:H($?.calls??0),detail:e(`usageAnalytics.cards.callsDetail`,{count:$?.uniqueUsers??0}),icon:f},{label:e(`usageAnalytics.cards.tokens`),value:H($?.reportedTokens??0),detail:e(`usageAnalytics.cards.coverage`,{percent:$?.calls?($.meteredCalls/$.calls*100).toFixed(1):`0`}),icon:p},{label:e(`usageAnalytics.cards.success`),value:`${W($?.calls??0,($?.failedCalls??0)+($?.cancelledCalls??0)).toFixed(1)}%`,detail:e(`usageAnalytics.cards.successDetail`,{count:$?.failedCalls??0}),icon:u},{label:e(`usageAnalytics.cards.latency`),value:U($?.averageLatencyMs??0),detail:e(`usageAnalytics.cards.latencyDetail`),icon:b}],[e,$]);return k&&!G?(0,O.jsx)(T,{width:`wide`,children:(0,O.jsx)(`div`,{className:`flex min-h-[50vh] items-center justify-center`,children:(0,O.jsx)(s,{className:`h-7 w-7 motion-safe:animate-spin text-primary-500`})})}):(0,O.jsxs)(T,{width:`wide`,children:[(0,O.jsx)(w,{eyebrow:e(`usageAnalytics.eyebrow`),title:e(`usageAnalytics.title`),description:e(`usageAnalytics.description`),actions:(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,O.jsx)(`div`,{className:`inline-flex rounded-xl border border-gray-200 bg-white/70 p-1 dark:border-white/[0.08] dark:bg-dark-100/70`,children:[7,30,90].map(r=>(0,O.jsx)(`button`,{type:`button`,className:a(`min-h-9 rounded-lg px-3 py-1.5 text-xs font-medium motion-safe:transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-500`,t===r?`bg-gray-950 text-white dark:bg-white dark:text-gray-950`:`text-gray-500 hover:text-gray-900 dark:text-dark-500 dark:hover:text-dark-900`),"aria-pressed":t===r,onClick:()=>{n(r),y(void 0)},children:e(`usageAnalytics.days`,{count:r})},r))}),(0,O.jsxs)(x,{variant:`outline`,size:`sm`,onClick:()=>{M(),B!==void 0&&V.refetch()},disabled:A||B!==void 0&&V.isFetching,children:[(0,O.jsx)(d,{className:a(`h-4 w-4`,A&&`motion-safe:animate-spin`)}),(0,O.jsx)(`span`,{children:e(`usageAnalytics.refresh`)})]})]})}),ie&&(0,O.jsxs)(`div`,{className:`mb-6 flex items-center gap-3 rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/30 dark:text-red-300`,children:[(0,O.jsx)(g,{className:`h-4 w-4 shrink-0`}),(0,O.jsx)(`span`,{children:ie})]}),!G&&(0,O.jsx)(j,{days:t}),G&&(0,O.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[(0,O.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:ue.map(e=>{let t=e.icon;return(0,O.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/75 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/70`,children:[(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,O.jsx)(`span`,{className:`text-xs font-medium uppercase tracking-[0.12em] text-gray-500 dark:text-dark-500`,children:e.label}),(0,O.jsx)(t,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`})]}),(0,O.jsx)(`div`,{className:`mt-2 text-2xl font-normal tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:e.value}),(0,O.jsx)(`p`,{className:`mt-1.5 text-xs text-gray-500 dark:text-dark-500`,children:e.detail})]},e.label)})}),(0,O.jsx)(se,{analytics:G}),(0,O.jsx)(j,{days:t}),G.heatmap&&G.heatmap.cells.length>0&&(0,O.jsx)(oe,{heatmap:G.heatmap,colors:X,focusedModel:Z?.startsWith(`model:`)?Z.slice(6):void 0,chartModels:(S?.modelSeries??[]).flatMap(e=>e.model===null?[]:[e.model])}),(0,O.jsx)(re,{analytics:q??G,metric:o,onMetricChange:c,colors:X,highlighted:Z,selected:F,onHighlight:y,onSelect:le,loadingModel:ae,canLoadModels:L}),G.totals.calls===0?(0,O.jsxs)(`div`,{className:`rounded-2xl border border-dashed border-gray-300 px-6 py-10 text-center dark:border-white/[0.12]`,children:[(0,O.jsx)(m,{className:`mx-auto h-8 w-8 text-gray-400 dark:text-dark-500`}),(0,O.jsx)(`h2`,{className:`mt-4 text-base font-medium text-gray-900 dark:text-dark-900`,children:e(`usageAnalytics.empty.title`)}),(0,O.jsx)(`p`,{className:`mx-auto mt-2 max-w-md text-sm leading-6 text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.empty.description`)})]}):(0,O.jsxs)(`div`,{className:`grid min-w-0 gap-4 xl:grid-cols-[minmax(0,1.15fr)_minmax(0,0.85fr)]`,children:[(0,O.jsxs)(`section`,{className:`min-w-0 overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,children:[(0,O.jsxs)(`div`,{className:`border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:px-5`,children:[(0,O.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.models.title`)}),(0,O.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.models.description`)})]}),(0,O.jsx)(`div`,{className:`overflow-x-auto`,children:(0,O.jsxs)(`table`,{"data-testid":`usage-model-table`,className:`w-full min-w-[620px] text-start text-sm`,children:[(0,O.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:e(`usageAnalytics.models.model`)}),(0,O.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.metrics.calls`)}),(0,O.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.metrics.tokens`)}),(0,O.jsx)(`th`,{className:`px-4 py-2 text-end font-medium`,children:e(`usageAnalytics.models.success`)}),(0,O.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:e(`usageAnalytics.models.latency`)})]})}),(0,O.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:G.models.map(t=>(0,O.jsxs)(`tr`,{"data-testid":`usage-model-row`,"data-model":t.model,"data-highlighted":Z===Q(t.model),onMouseEnter:()=>y(Q(t.model)),onMouseLeave:()=>y(void 0),className:a(Z===Q(t.model)&&Z&&`bg-gray-50 dark:bg-dark-200/70`),children:[(0,O.jsxs)(`td`,{className:`px-5 py-2.5`,children:[(0,O.jsxs)(`button`,{type:`button`,disabled:!Q(t.model),"aria-label":e(`usageAnalytics.activity.highlightModel`,{model:t.model}),"aria-pressed":!!F&&F===Q(t.model),className:`flex min-h-9 max-w-[260px] items-center gap-2 rounded-md text-start font-medium text-gray-900 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500 dark:text-dark-900`,title:ce.has(R(t.model))?t.model:e(`usageAnalytics.models.notCharted`),onFocus:()=>y(Q(t.model)),onBlur:()=>y(void 0),onClick:()=>le(F===Q(t.model)?void 0:Q(t.model)),children:[(0,O.jsx)(`span`,{"aria-hidden":`true`,className:`h-2.5 w-2.5 shrink-0 rounded-full`,style:{backgroundColor:X.get(R(t.model))??`#6b7280`}}),(0,O.jsx)(`span`,{className:`truncate`,dir:`ltr`,children:t.model})]}),(0,O.jsx)(`div`,{className:`mt-0.5 text-xs text-gray-500 dark:text-dark-500`,children:t.pluginName})]}),(0,O.jsxs)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:[H(t.calls),(0,O.jsxs)(`div`,{className:`mt-1 text-[11px] text-gray-500 dark:text-dark-500`,title:e(`usageAnalytics.models.share`),children:[(t.calls/G.totals.calls*100).toFixed(1),`%`]})]}),(0,O.jsx)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:t.tokens?H(t.tokens):`—`}),(0,O.jsxs)(`td`,{className:`px-4 py-2.5 text-end tabular-nums text-gray-700 dark:text-dark-700`,children:[W(t.calls,t.errors).toFixed(1),`%`]}),(0,O.jsx)(`td`,{className:`px-5 py-2.5 text-end tabular-nums text-gray-500 dark:text-dark-500`,children:U(t.averageLatencyMs)})]},JSON.stringify([t.pluginId,t.pluginName,t.model])))})]})})]}),(0,O.jsxs)(`div`,{className:`min-w-0 space-y-4`,children:[(0,O.jsxs)(`section`,{"data-testid":`usage-provider-breakdown`,className:`min-w-0 rounded-2xl border border-gray-200/80 bg-white/80 p-4 shadow-subtle dark:border-white/[0.08] dark:bg-dark-100/75 sm:p-5`,children:[(0,O.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.providers.title`)}),(0,O.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.providers.description`)}),(0,O.jsx)(`div`,{className:`mt-4 divide-y divide-gray-200/70 dark:divide-white/[0.07]`,children:G.plugins.map(t=>{let n=G.totals.calls?t.calls/G.totals.calls*100:0,r=ne(G,t.pluginId,t.calls,t.pluginName);return(0,O.jsxs)(`article`,{"data-provider":t.pluginId,className:`py-4 first:pt-0 last:pb-0`,children:[(0,O.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h3`,{className:`truncate text-sm font-medium text-gray-900 dark:text-dark-900`,title:t.pluginName,children:t.pluginName}),(0,O.jsx)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.providers.share`,{percent:n.toFixed(1)})})]}),(0,O.jsxs)(`div`,{className:`shrink-0 text-end`,children:[(0,O.jsx)(`div`,{className:`text-base font-medium tabular-nums text-gray-950 dark:text-dark-950`,children:H(t.calls)}),(0,O.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.metrics.calls`)})]})]}),(0,O.jsx)(`div`,{className:`my-3 flex h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-300`,"aria-hidden":`true`,children:r.map(n=>(0,O.jsx)(`span`,{"data-model":n.model??`__other__`,title:`${n.model??e(`usageAnalytics.heatmap.other`)}: ${H(n.calls)}`,style:{width:`${t.calls?n.calls/t.calls*100:0}%`,backgroundColor:X.get(R(n.model))??`#6b7280`,opacity:Z&&Z!==Q(n.model)?.25:1}},R(n.model)))}),(0,O.jsxs)(`dl`,{className:`grid grid-cols-3 gap-2`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-[10px] text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.metrics.tokens`)}),(0,O.jsx)(`dd`,{className:`mt-1 text-xs tabular-nums text-gray-800 dark:text-dark-800`,title:t.tokens?void 0:e(`usageAnalytics.providers.noTokens`),children:t.tokens?H(t.tokens):`—`})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-[10px] text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.models.success`)}),(0,O.jsxs)(`dd`,{className:`mt-1 text-xs tabular-nums text-gray-800 dark:text-dark-800`,children:[W(t.calls,t.errors).toFixed(1),`%`]})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-[10px] text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.models.latency`)}),(0,O.jsx)(`dd`,{className:`mt-1 text-xs tabular-nums text-gray-800 dark:text-dark-800`,children:U(t.averageLatencyMs)})]})]}),t.errors>0&&(0,O.jsxs)(`p`,{className:`mt-2 flex items-center gap-1 text-[11px] text-gray-500 dark:text-dark-500`,children:[(0,O.jsx)(g,{className:`h-3 w-3`}),e(`usageAnalytics.providers.failures`,{count:t.errors})]}),(0,O.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:r.map(t=>{let n=Q(t.model),r=t.model??e(`usageAnalytics.heatmap.other`);return(0,O.jsxs)(`button`,{type:`button`,disabled:!n,"aria-label":e(`usageAnalytics.activity.highlightModel`,{model:r}),"aria-pressed":!!F&&F===n,title:r,onMouseEnter:()=>y(n),onMouseLeave:()=>y(void 0),onFocus:()=>y(n),onBlur:()=>y(void 0),onClick:()=>le(F===n?void 0:n),className:a(`flex min-h-8 min-w-0 max-w-full items-center gap-1.5 rounded-md border px-2 py-1 text-[11px] text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary-500 dark:text-dark-700`,Z&&Z===n?`border-gray-400 bg-gray-50 dark:border-dark-500 dark:bg-dark-200`:`border-gray-200/70 dark:border-white/[0.07]`),children:[(0,O.jsx)(`span`,{className:`h-2 w-2 shrink-0 rounded-full`,style:{backgroundColor:X.get(R(t.model))??`#6b7280`},"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`truncate`,dir:`auto`,children:r})]},R(t.model))})})]},JSON.stringify([t.pluginId,t.pluginName]))})})]}),(0,O.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/80 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75 sm:p-5`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(_,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`}),(0,O.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e(`usageAnalytics.capabilities.title`)})]}),(0,O.jsx)(`div`,{className:`mt-5 grid grid-cols-2 gap-3`,children:G.capabilities.map(t=>(0,O.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,O.jsx)(`div`,{className:`text-xs font-medium capitalize text-gray-500 dark:text-dark-500`,children:t.capability}),(0,O.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:H(t.calls)}),(0,O.jsx)(`div`,{className:`mt-1 text-[11px] text-gray-500 dark:text-dark-500`,children:t.capability===`tts`?e(`usageAnalytics.capabilities.characters`,{count:H(t.inputUnits)}):t.capability===`stt`?e(`usageAnalytics.capabilities.bytes`,{count:H(t.inputUnits)}):t.capability===`image`?e(`usageAnalytics.capabilities.images`,{count:H(t.outputUnits)}):t.capability===`video`?e(`usageAnalytics.capabilities.jobs`,{count:H(t.calls)}):t.capability===`embedding`?e(`usageAnalytics.capabilities.inputs`,{count:H(t.inputUnits)}):e(`usageAnalytics.capabilities.reportedTokens`,{count:H(t.tokens)})})]},t.capability))})]})]})]}),(0,O.jsx)(`p`,{className:`px-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:e(`usageAnalytics.privacyNote`)})]})]})};export{X as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./RichMessageContent-BfYbVBFz.js";export{e as RichMessageContent,e as default};
|