manifest 5.41.0 → 5.43.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.
Files changed (29) hide show
  1. package/dist/openclaw.plugin.json +1 -1
  2. package/openclaw.plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/public/assets/{Account-Yskm-6KC.js → Account-JSeMVgl6.js} +1 -1
  5. package/public/assets/{ConnectProvider-Dp9HCOps.js → ConnectProvider-C5cx019e.js} +1 -1
  6. package/public/assets/FreeModels-B2-CdYqa.js +1 -0
  7. package/public/assets/{Limits-DqcRGXrn.js → Limits-C9HHZfea.js} +1 -1
  8. package/public/assets/{Login-VWgDx5M4.js → Login-CG8TTNBf.js} +1 -1
  9. package/public/assets/{MessageLog-Cy47YNvf.js → MessageLog-ygIk7orI.js} +1 -1
  10. package/public/assets/{ModelPrices-DkkTRMAs.js → ModelPrices-d-rtc9AO.js} +1 -1
  11. package/public/assets/{Overview-CSmy1zWZ.js → Overview-C_iBTEin.js} +1 -1
  12. package/public/assets/{Register-DFjfxJbp.js → Register-B7wb21Ce.js} +1 -1
  13. package/public/assets/{ResetPassword-CcXkpAQq.js → ResetPassword-BRG7lx9F.js} +1 -1
  14. package/public/assets/Routing-DTdgRQ4b.js +6 -0
  15. package/public/assets/{Settings-BjMNz5fh.js → Settings-B_6JmB-O.js} +1 -1
  16. package/public/assets/{SocialButtons-Sujgjl6e.js → SocialButtons-B55DOj5X.js} +1 -1
  17. package/public/assets/{index-B-_-ALFn.js → index-GDrFii05.js} +2 -2
  18. package/public/assets/index-nVifXYeY.css +1 -0
  19. package/public/assets/{model-display-Cg0qmmLo.js → model-display-DuPPAYS6.js} +1 -1
  20. package/public/assets/{overview-ovS5UqVd.js → overview-Cs7MQYj5.js} +1 -1
  21. package/public/assets/{routing-BctS6Vb_.js → routing-BZ9syGr8.js} +1 -1
  22. package/public/assets/{routing-utils-C_UAqgEO.js → routing-utils-CPSSk62K.js} +1 -1
  23. package/public/icons/kilocode.jpg +0 -0
  24. package/public/icons/nvidia.svg +1 -0
  25. package/public/icons/qwen.svg +1 -0
  26. package/public/index.html +2 -2
  27. package/public/assets/FreeModels-C8BMhPYE.js +0 -1
  28. package/public/assets/Routing-D52ihCh5.js +0 -6
  29. package/public/assets/index-DIPBqCXM.css +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "manifest",
3
3
  "name": "Manifest Self-Hosted LLM Router",
4
- "version": "5.41.0",
4
+ "version": "5.43.0",
5
5
  "description": "Run the Manifest LLM router locally with SQLite. Zero-config dashboard included.",
6
6
  "author": "MNFST Inc.",
7
7
  "homepage": "https://manifest.build",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "manifest",
3
3
  "name": "Manifest Self-Hosted LLM Router",
4
- "version": "5.41.0",
4
+ "version": "5.43.0",
5
5
  "description": "Run the Manifest LLM router locally with SQLite. Zero-config dashboard included.",
6
6
  "author": "MNFST Inc.",
7
7
  "homepage": "https://manifest.build",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "manifest",
3
- "version": "5.41.0",
3
+ "version": "5.43.0",
4
4
  "description": "Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -1 +1 @@
1
- import{b as H,a as b,e as R,i as c,g as h,T as V,M as W,h as d,m as Z,s as F,S as L,t as r,d as G}from"./vendor-pl6Q4jbW.js";import{s as J,u as K,v as O,d as E,w as D}from"./index-B-_-ALFn.js";import"./auth-DmX5tAfx.js";var Q=r("<h3 class=settings-section__title>Profile information"),X=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"readonly></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email</span><span class=settings-card__label-desc>Used for account notifications and limit alerts.</span></div><div class=settings-card__control><input class=settings-card__input type=email aria-label=Email readonly></div></div><div class=settings-card__footer><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Profile information is managed through your authentication provider.'),ee=r("<h3 class=settings-section__title>Workspace"),te=r("<div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Your unique workspace identifier. You may need this for support requests or advanced integrations.</p><div class=settings-card__id-row><code class=settings-card__id-value></code><button class=settings-card__copy-btn title=Copy>"),se=r("<h3 class=settings-section__title>Profile"),ie=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"placeholder="Local User">'),ae=r('<div class=account-modal><div class=account-modal__inner><button class=account-modal__back><svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m15 18-6-6 6-6"></path></svg>Back</button><div class=page-header><div><h1>Account Preferences</h1><span class=breadcrumb>Your profile, workspace details, and display preferences</span></div></div><h3 class=settings-section__title>Appearance</h3><div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Choose how Manifest looks for you.</p><div class=theme-picker><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=4></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg>Light</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg>Dark</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=2 y=3 width=20 height=14 rx=2></rect><path d="M8 21h8"></path><path d="M12 17v4"></path></svg>System'),re=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="20 6 9 17 4 12">'),le=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">');const de=()=>{const N=H(),p=J.useSession(),[w,y]=b(!1),[_,g]=b("system"),[u,C]=b(""),T=()=>p()?.data?.user?.name??"",B=()=>p()?.data?.user?.email??"",x=()=>p()?.data?.user?.id??"";R(()=>{K(),C(O()||"Local User");const t=localStorage.getItem("theme");g(t==="dark"||t==="light"?t:"system")});const m=t=>{if(g(t),t==="system"){localStorage.removeItem("theme");const o=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.classList.toggle("dark",o)}else localStorage.setItem("theme",t),document.documentElement.classList.toggle("dark",t==="dark")},j=()=>{navigator.clipboard.writeText(x()),y(!0),setTimeout(()=>y(!1),2e3)};return(()=>{var t=ae(),o=t.firstChild,S=o.firstChild,I=S.nextSibling,v=I.nextSibling,A=v.nextSibling,P=A.firstChild,U=P.firstChild,Y=U.nextSibling,k=Y.firstChild,f=k.nextSibling,M=f.nextSibling;return c(t,h(V,{children:"Account Preferences - Manifest"}),o),c(t,h(W,{name:"description",content:"Manage your profile, workspace, and theme preferences."}),o),S.$$click=()=>N(-1),c(o,h(L,{get when(){return!E()},get children(){return[Q(),(()=>{var e=X(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=i.nextSibling,$=s.firstChild,q=$.nextSibling,z=q.firstChild;return d(()=>a.value=T()),d(()=>z.value=B()),e})(),ee(),(()=>{var e=te(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=a.nextSibling;return c(a,x),s.$$click=j,c(s,(()=>{var $=Z(()=>!!w());return()=>$()?re():le()})()),d(()=>F(s,"aria-label",w()?"Copied":"Copy workspace ID")),e})()]}}),v),c(o,h(L,{get when(){return E()},get children(){return[se(),(()=>{var e=ie(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild;return a.$$keydown=s=>{s.key==="Enter"&&(D(u()),s.currentTarget.blur())},a.addEventListener("blur",()=>D(u())),a.$$input=s=>C(s.currentTarget.value),d(()=>a.value=u()),e})()]}}),v),k.$$click=()=>m("light"),f.$$click=()=>m("dark"),M.$$click=()=>m("system"),d(e=>{var i=_()==="light",l=_()==="dark",n=_()==="system";return i!==e.e&&k.classList.toggle("theme-picker__option--active",e.e=i),l!==e.t&&f.classList.toggle("theme-picker__option--active",e.t=l),n!==e.a&&M.classList.toggle("theme-picker__option--active",e.a=n),e},{e:void 0,t:void 0,a:void 0}),t})()};G(["click","input","keydown"]);export{de as default};
1
+ import{b as H,a as b,e as R,i as c,g as h,T as V,M as W,h as d,m as Z,s as F,S as L,t as r,d as G}from"./vendor-pl6Q4jbW.js";import{s as J,u as K,v as O,d as E,w as D}from"./index-GDrFii05.js";import"./auth-DmX5tAfx.js";var Q=r("<h3 class=settings-section__title>Profile information"),X=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"readonly></div></div><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Email</span><span class=settings-card__label-desc>Used for account notifications and limit alerts.</span></div><div class=settings-card__control><input class=settings-card__input type=email aria-label=Email readonly></div></div><div class=settings-card__footer><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Profile information is managed through your authentication provider.'),ee=r("<h3 class=settings-section__title>Workspace"),te=r("<div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Your unique workspace identifier. You may need this for support requests or advanced integrations.</p><div class=settings-card__id-row><code class=settings-card__id-value></code><button class=settings-card__copy-btn title=Copy>"),se=r("<h3 class=settings-section__title>Profile"),ie=r('<div class=settings-card><div class=settings-card__row><div class=settings-card__label><span class=settings-card__label-title>Display name</span><span class=settings-card__label-desc>Name shown throughout the dashboard.</span></div><div class=settings-card__control><input class=settings-card__input type=text aria-label="Display name"placeholder="Local User">'),ae=r('<div class=account-modal><div class=account-modal__inner><button class=account-modal__back><svg width=16 height=16 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="m15 18-6-6 6-6"></path></svg>Back</button><div class=page-header><div><h1>Account Preferences</h1><span class=breadcrumb>Your profile, workspace details, and display preferences</span></div></div><h3 class=settings-section__title>Appearance</h3><div class=settings-card><div class=settings-card__body><p class=settings-card__desc>Choose how Manifest looks for you.</p><div class=theme-picker><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=4></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg>Light</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg>Dark</button><button class=theme-picker__option><svg width=18 height=18 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=2 y=3 width=20 height=14 rx=2></rect><path d="M8 21h8"></path><path d="M12 17v4"></path></svg>System'),re=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="20 6 9 17 4 12">'),le=r('<svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=9 y=9 width=13 height=13 rx=2></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">');const de=()=>{const N=H(),p=J.useSession(),[w,y]=b(!1),[_,g]=b("system"),[u,C]=b(""),T=()=>p()?.data?.user?.name??"",B=()=>p()?.data?.user?.email??"",x=()=>p()?.data?.user?.id??"";R(()=>{K(),C(O()||"Local User");const t=localStorage.getItem("theme");g(t==="dark"||t==="light"?t:"system")});const m=t=>{if(g(t),t==="system"){localStorage.removeItem("theme");const o=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.classList.toggle("dark",o)}else localStorage.setItem("theme",t),document.documentElement.classList.toggle("dark",t==="dark")},j=()=>{navigator.clipboard.writeText(x()),y(!0),setTimeout(()=>y(!1),2e3)};return(()=>{var t=ae(),o=t.firstChild,S=o.firstChild,I=S.nextSibling,v=I.nextSibling,A=v.nextSibling,P=A.firstChild,U=P.firstChild,Y=U.nextSibling,k=Y.firstChild,f=k.nextSibling,M=f.nextSibling;return c(t,h(V,{children:"Account Preferences - Manifest"}),o),c(t,h(W,{name:"description",content:"Manage your profile, workspace, and theme preferences."}),o),S.$$click=()=>N(-1),c(o,h(L,{get when(){return!E()},get children(){return[Q(),(()=>{var e=X(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=i.nextSibling,$=s.firstChild,q=$.nextSibling,z=q.firstChild;return d(()=>a.value=T()),d(()=>z.value=B()),e})(),ee(),(()=>{var e=te(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild,s=a.nextSibling;return c(a,x),s.$$click=j,c(s,(()=>{var $=Z(()=>!!w());return()=>$()?re():le()})()),d(()=>F(s,"aria-label",w()?"Copied":"Copy workspace ID")),e})()]}}),v),c(o,h(L,{get when(){return E()},get children(){return[se(),(()=>{var e=ie(),i=e.firstChild,l=i.firstChild,n=l.nextSibling,a=n.firstChild;return a.$$keydown=s=>{s.key==="Enter"&&(D(u()),s.currentTarget.blur())},a.addEventListener("blur",()=>D(u())),a.$$input=s=>C(s.currentTarget.value),d(()=>a.value=u()),e})()]}}),v),k.$$click=()=>m("light"),f.$$click=()=>m("dark"),M.$$click=()=>m("system"),d(e=>{var i=_()==="light",l=_()==="dark",n=_()==="system";return i!==e.e&&k.classList.toggle("theme-picker__option--active",e.e=i),l!==e.t&&f.classList.toggle("theme-picker__option--active",e.t=l),n!==e.a&&M.classList.toggle("theme-picker__option--active",e.a=n),e},{e:void 0,t:void 0,a:void 0}),t})()};G(["click","input","keydown"]);export{de as default};
@@ -1 +1 @@
1
- import{b as _,D as $,a as b,k as w,i as c,g as u,F as S,m as C,S as y,t as g,d as A}from"./vendor-pl6Q4jbW.js";import{x as k,y as U,n as P}from"./index-B-_-ALFn.js";import"./auth-DmX5tAfx.js";var K=g('<div class=panel style="max-width:440px;margin:0 auto;padding:32px"><h2 style="margin:0 0 8px">Select an agent</h2><p style="color:hsl(var(--muted-foreground));font-size:var(--font-size-sm);margin:0 0 24px">Which agent should this provider be added to?</p><div style=display:flex;flex-direction:column;gap:8px>'),R=g("<div style=display:flex;align-items:center;justify-content:center;min-height:200px><span class=spinner role=status aria-label=Loading style=width:24px;height:24px>"),j=g("<div class=container--sm style=padding-top:80px>"),z=g('<button class="btn btn--outline"style=justify-content:flex-start;text-align:left>');const D=()=>{const m=_(),[s]=$(),[f,h]=b(!1),r=t=>Array.isArray(t)?t[0]:t,p=t=>{const e=new URLSearchParams;e.set("provider","custom");const l=r(s.name),i=r(s.baseUrl),o=r(s.apiKey),a=r(s.models);return l&&e.set("name",l),i&&e.set("baseUrl",i),o&&e.set("apiKey",o),a&&e.set("models",a),`/agents/${encodeURIComponent(t)}/routing?${e.toString()}`},x=async()=>{h(!0);try{const e=(await U("my-agent"))?.agent?.name??"my-agent";P(e),m(p(e),{replace:!0})}catch{h(!1)}},[n]=w(async()=>{const e=(await k())?.agents??[];return e.length===1&&e[0]?m(p(e[0].agent_name),{replace:!0}):e.length===0&&await x(),e}),v=t=>{m(p(t),{replace:!0})};return(()=>{var t=j();return c(t,u(y,{get when(){return C(()=>!n.loading)()&&(n()?.length??0)>1},get children(){var e=K(),l=e.firstChild,i=l.nextSibling,o=i.nextSibling;return c(o,u(S,{get each(){return n()},children:a=>(()=>{var d=z();return d.$$click=()=>v(a.agent_name),c(d,()=>a.display_name??a.agent_name),d})()})),e}}),null),c(t,u(y,{get when(){return n.loading||f()||(n()?.length??0)<=1},get children(){return R()}}),null),t})()};A(["click"]);export{D as default};
1
+ import{b as _,D as $,a as b,k as w,i as c,g as u,F as S,m as C,S as y,t as g,d as A}from"./vendor-pl6Q4jbW.js";import{x as k,y as U,n as P}from"./index-GDrFii05.js";import"./auth-DmX5tAfx.js";var K=g('<div class=panel style="max-width:440px;margin:0 auto;padding:32px"><h2 style="margin:0 0 8px">Select an agent</h2><p style="color:hsl(var(--muted-foreground));font-size:var(--font-size-sm);margin:0 0 24px">Which agent should this provider be added to?</p><div style=display:flex;flex-direction:column;gap:8px>'),R=g("<div style=display:flex;align-items:center;justify-content:center;min-height:200px><span class=spinner role=status aria-label=Loading style=width:24px;height:24px>"),j=g("<div class=container--sm style=padding-top:80px>"),z=g('<button class="btn btn--outline"style=justify-content:flex-start;text-align:left>');const D=()=>{const m=_(),[s]=$(),[f,h]=b(!1),r=t=>Array.isArray(t)?t[0]:t,p=t=>{const e=new URLSearchParams;e.set("provider","custom");const l=r(s.name),i=r(s.baseUrl),o=r(s.apiKey),a=r(s.models);return l&&e.set("name",l),i&&e.set("baseUrl",i),o&&e.set("apiKey",o),a&&e.set("models",a),`/agents/${encodeURIComponent(t)}/routing?${e.toString()}`},x=async()=>{h(!0);try{const e=(await U("my-agent"))?.agent?.name??"my-agent";P(e),m(p(e),{replace:!0})}catch{h(!1)}},[n]=w(async()=>{const e=(await k())?.agents??[];return e.length===1&&e[0]?m(p(e[0].agent_name),{replace:!0}):e.length===0&&await x(),e}),v=t=>{m(p(t),{replace:!0})};return(()=>{var t=j();return c(t,u(y,{get when(){return C(()=>!n.loading)()&&(n()?.length??0)>1},get children(){var e=K(),l=e.firstChild,i=l.nextSibling,o=i.nextSibling;return c(o,u(S,{get each(){return n()},children:a=>(()=>{var d=z();return d.$$click=()=>v(a.agent_name),c(d,()=>a.display_name??a.agent_name),d})()})),e}}),null),c(t,u(y,{get when(){return n.loading||f()||(n()?.length??0)<=1},get children(){return R()}}),null),t})()};A(["click"]);export{D as default};
@@ -0,0 +1 @@
1
+ import{i as e,g as n,T as N,M as F,m as U,h as y,s as z,F as C,a as R,C as q,S as L,t as o,n as A,d as B}from"./vendor-pl6Q4jbW.js";import{b as G,t as I}from"./index-GDrFii05.js";import"./auth-DmX5tAfx.js";var D=o('<svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true style=margin-left:4px><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1=10 y1=14 x2=21 y2=3>'),E=o('<button class="btn btn--outline btn--sm"aria-label="Copy to clipboard"style="padding:2px 8px;font-size:var(--font-size-xs)">'),H=o('<a class="btn btn--primary btn--sm"style=text-decoration:none>Connect '),O=o("<div class=container--lg><div class=page-header><div><h1>Free Models</h1><span class=breadcrumb>Cloud providers offering free API access for </span></div></div><div style=display:flex;flex-direction:column;gap:10px;margin-bottom:24px><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>1</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Get your free API key from the provider website</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>2</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Hit the provider Connect button, paste your key, and validate the connection</span></div><div style=display:flex;align-items:center;gap:10px><span style=display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:hsl(var(--primary));color:hsl(var(--primary-foreground));font-size:var(--font-size-xs);font-weight:600;flex-shrink:0>3</span><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground))>Done! The provider models are now included in your routing. Customize tiers and preferences from the routing page."),V=o('<div class=panel style=margin-bottom:24px><div style=display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px><h2 style=margin:0;font-size:var(--font-size-lg);display:flex;align-items:center;gap:8px></h2><div style=display:flex;gap:8px;flex-shrink:0><a target=_blank rel="noopener noreferrer"class="btn btn--outline btn--sm"style=text-decoration:none>Get API key</a></div></div><div style=display:flex;align-items:center;gap:20px;margin-bottom:16px;flex-wrap:wrap>'),J=o("<img alt style=height:20px>"),Q=o("<span style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));white-space:nowrap><span style=width:5px;height:5px;border-radius:50%;background:hsl(var(--foreground));flex-shrink:0>"),W=o('<div class=free-models-base-url-row><div style=display:flex;align-items:center;gap:8px;min-width:0><span style=font-size:var(--font-size-sm);color:hsl(var(--muted-foreground));flex-shrink:0>Base URL:</span><code style="font-family:var(--font-mono);font-size:var(--font-size-xs);background:hsl(var(--muted) / 0.5);padding:4px 8px;border-radius:var(--radius);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0"></code></div><button style=display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:hsl(var(--foreground));padding:0;background:none;border:none;cursor:pointer;white-space:nowrap;margin-left:auto;font-weight:500><img src=/icons/caret-down.svg alt class=free-models-caret>'),X=o('<div style="display:flex;align-items:flex-start;gap:8px;padding:10px 14px;border-radius:var(--radius);background:#f7f5ed;margin-top:16px;margin-bottom:16px;font-size:var(--font-size-sm)"><svg xmlns=http://www.w3.org/2000/svg width=16 height=16 fill=currentColor viewBox="0 0 24 24"style=flex-shrink:0;color:hsl(var(--primary));margin-top:1px><path d="M12 17c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1M12 7a1 1 0 1 0 0 2 1 1 0 1 0 0-2"></path><path d="M12 22c5.51 0 10-4.49 10-10S17.51 2 12 2 2 6.49 2 12s4.49 10 10 10m0-18c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8"></path></svg><span style="color:hsl(var(--foreground) / 0.8)">'),Y=o("<div class=free-models-accordion><div><table class=data-table><colgroup><col style=width:36%><col style=width:12%><col style=width:14%><col style=width:16%><col style=width:22%></colgroup><thead><tr><th>Model Name</th><th>Context</th><th>Max Output</th><th>Modality</th><th>Rate Limit</th></tr></thead><tbody>"),Z=o("<tr><td style=font-family:var(--font-mono);font-size:var(--font-size-xs)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)></td><td style=font-size:var(--font-size-sm)>");const ee=[{name:"Cohere",logo:"/icons/cohere.svg",description:"",tags:["Up to 1,000 calls/month","No credit card required"],apiKeyUrl:"https://dashboard.cohere.com/api-keys",baseUrl:"https://api.cohere.ai/compatibility/v1",warning:"Trial keys cannot be used for production or commercial workloads. Data may be used for training.",models:[{model_id:"command-a-03-2025",context:"256K",max_output:"8K",modality:"Text",trial_rate_limit:"20 req / min"},{model_id:"command-a-reasoning-08-2025",context:"256K",max_output:"32K",modality:"Text",trial_rate_limit:"20 req / min"}]},{name:"Gemini",logo:"/icons/gemini.svg",description:"",tags:["250K TPM (Tokens / Minute) shared across models","No credit card required"],apiKeyUrl:"https://aistudio.google.com/apikey",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai/",warning:"Rate limits apply per Google Cloud project, not per API key. On the free tier, prompts and responses may be used to improve Google products.",models:[{model_id:"gemini-2.5-pro",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"5 req / min"},{model_id:"gemini-2.5-flash",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"10 req / min"},{model_id:"gemini-2.5-flash-lite",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"15 req / min"},{model_id:"gemini-3-flash-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"},{model_id:"gemini-3.1-flash-lite-preview",context:"1M",max_output:"64K",modality:"Text",trial_rate_limit:"Preview limits"}]},{name:"Kilo Code",logo:"/icons/kilocode.jpg",description:"",tags:["No credit card required"],apiKeyUrl:"https://app.kilo.ai/profile",baseUrl:"https://api.kilo.ai/api/gateway",warning:"Prompts and outputs are logged on free models to improve provider products.",models:[{model_id:"qwen/qwen3.6-plus:free",context:"1M",max_output:"65K",modality:"Text + Image + Video",trial_rate_limit:"~200 req / hr"},{model_id:"nvidia/nemotron-3-super-120b-a12b:free",context:"262K",max_output:"262K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"stepfun/step-3.5-flash:free",context:"256K",max_output:"256K",modality:"Text",trial_rate_limit:"~200 req / hr"},{model_id:"corethink:free",context:"78K",max_output:"8K",modality:"Text",trial_rate_limit:"~200 req / hr"}]}],te=()=>D(),ie=r=>{const[a,m]=R(!1),f=async()=>{try{await navigator.clipboard.writeText(r.text),m(!0),I.success("Copied to clipboard"),setTimeout(()=>m(!1),2e3)}catch{I.error("Failed to copy")}};return(()=>{var l=E();return l.$$click=f,e(l,()=>a()?"Copied":"Copy"),l})()},re=r=>{const a=A(),m=()=>decodeURIComponent(a.agentName),f=()=>r.provider.models.map(t=>`${t.model_id}:0:0`).join(","),l=()=>`/agents/${encodeURIComponent(m())}/routing?provider=custom&name=${encodeURIComponent(r.provider.name)}&baseUrl=${encodeURIComponent(r.provider.baseUrl)}&models=${encodeURIComponent(f())}`;return(()=>{var t=H();return t.firstChild,e(t,()=>r.provider.name,null),y(()=>z(t,"href",l())),t})()},le=()=>(()=>{var r=O(),a=r.firstChild,m=a.firstChild,f=m.firstChild,l=f.nextSibling;return l.firstChild,a.nextSibling,e(r,n(N,{children:"Free Models - Manifest"}),a),e(r,n(F,{name:"description",content:"Free LLM models you can use with Manifest. No credit card required."}),a),e(l,()=>G()??"your agent",null),e(r,n(C,{each:ee,children:t=>(()=>{var _=V(),k=_.firstChild,b=k.firstChild,M=b.nextSibling,w=M.firstChild;w.firstChild;var P=k.nextSibling;return e(b,(()=>{var d=U(()=>!!t.logo);return()=>d()&&(()=>{var s=J();return y(()=>z(s,"src",t.logo)),s})()})(),null),e(b,()=>t.name,null),e(w,n(te,{}),null),e(M,n(re,{provider:t}),null),e(P,n(C,{get each(){return t.tags??[]},children:d=>(()=>{var s=Q();return s.firstChild,e(s,d,null),s})()})),e(_,()=>{const[d,s]=R(!0);return[(()=>{var c=W(),g=c.firstChild,u=g.firstChild,$=u.nextSibling,x=g.nextSibling,v=x.firstChild;return e($,()=>t.baseUrl),e(g,n(ie,{get text(){return t.baseUrl}}),null),x.$$click=()=>s(i=>!i),e(x,(()=>{var i=U(()=>!!d());return()=>i()?"Hide models":`Show models (${t.models.length})`})(),v),y(i=>q(v,`width: 20px; height: 20px; transition: transform 250ms ease; transform: rotate(${d()?"180deg":"0deg"});`,i)),c})(),(()=>{var c=Y(),g=c.firstChild,u=g.firstChild,$=u.firstChild,x=$.nextSibling,v=x.nextSibling;return e(g,n(L,{get when(){return t.warning},get children(){var i=X(),p=i.firstChild,h=p.nextSibling;return e(h,()=>t.warning),i}}),u),e(v,n(C,{get each(){return t.models},children:i=>(()=>{var p=Z(),h=p.firstChild,K=h.nextSibling,S=K.nextSibling,T=S.nextSibling,j=T.nextSibling;return e(h,()=>i.model_id),e(K,()=>i.context),e(S,()=>i.max_output),e(T,()=>i.modality),e(j,()=>i.trial_rate_limit),p})()})),y(i=>{var p=!!d(),h=`table-layout: fixed; width: 100%;${t.warning?"":" margin-top: 16px;"}`;return p!==i.e&&c.classList.toggle("free-models-accordion--open",i.e=p),i.t=q(u,h,i.t),i},{e:void 0,t:void 0}),c})()]},null),y(()=>z(w,"href",t.apiKeyUrl)),_})()}),null),r})();B(["click"]);export{le as default};
@@ -1 +1 @@
1
- import{i,t as d,a as p,f as Le,g as l,S as _,h as w,s as z,m as J,P as ve,d as ie,o as De,F as ge,B as ke,j as de,n as Ke,k as me,T as ze,M as je}from"./vendor-pl6Q4jbW.js";import{e as $e,q as ne,B as le,s as Ne,d as se,t as K,b as pe}from"./index-B-_-ALFn.js";import{a as He}from"./provider-api-key-urls-1G6okUJ7.js";import{a as Ge}from"./routing-BctS6Vb_.js";import"./auth-DmX5tAfx.js";function Ve(e){return $e("/notifications/logs",{agent_name:e})}function qe(e){return $e("/notifications",{agent_name:e})}function Ue(e){return ne(`${le}/notifications`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Je(e,t){return ne(`${le}/notifications/${encodeURIComponent(e)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}function Fe(e){return ne(`${le}/notifications/${encodeURIComponent(e)}`,{method:"DELETE"})}async function We(){const e=await $e("/notifications/email-provider");return"configured"in e&&e.configured===!1?null:e}function Ze(e){return ne(`${le}/notifications/email-provider`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Ye(){return ne(`${le}/notifications/email-provider`,{method:"DELETE"})}function Xe(e){return ne(`${le}/notifications/email-provider/test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Qe(e){return ne(`${le}/notifications/email-provider/test-saved`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({to:e})})}var et=d('<div class=cloud-email-info><svg class=cloud-email-info__icon width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg><div><div class=cloud-email-info__title>Email alerts</div><div class=cloud-email-info__desc>Alerts will be sent to <strong>');const tt=e=>(()=>{var t=et(),n=t.firstChild,a=n.nextSibling,s=a.firstChild,o=s.nextSibling,u=o.firstChild,v=u.nextSibling;return i(v,()=>e.email),t})();var it=d("<input id=email-provider-api-key class=modal-card__input type=text autocomplete=off autofocus style=-webkit-text-security:disc;text-security:disc>"),we=d("<p class=modal-card__field-error role=alert>"),nt=d('<p class=modal-card__field-hint><a class=modal-card__field-link target=_blank rel="noopener noreferrer">Get <!> API key'),lt=d("<label class=modal-card__field-label for=email-provider-domain>Sending domain"),rt=d('<input id=email-provider-domain class=modal-card__input type=text placeholder="e.g. notifications.mycompany.com">'),at=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=provider-modal-title><h2 class=modal-card__title id=provider-modal-title></h2><p class=modal-card__desc>Enter your API credentials to enable email alert delivery.</p><label class=modal-card__field-label>Provider</label><div class=provider-modal-picker><button class=provider-modal-option type=button><img src=/logos/resend.svg alt class=provider-modal-option__logo><span>Resend</span></button><button class=provider-modal-option type=button><img src=/logos/mailgun.svg alt class=provider-modal-option__logo><span>Mailgun</span></button><button class=provider-modal-option type=button><img src=/logos/sendgrid.svg alt class=provider-modal-option__logo><span>SendGrid</span></button></div><label class=modal-card__field-label for=email-provider-api-key>API Key</label><label class=modal-card__field-label for=email-provider-notification>Notification email</label><input id=email-provider-notification class=modal-card__input type=email><p class=modal-card__field-hint>Where threshold alerts will be sent.</p><div class="modal-card__footer modal-card__footer--split"><button class="btn btn--ghost btn--sm"type=button></button><button class="btn btn--primary btn--sm">'),ot=d('<div class=masked-key><span class=masked-key__value></span><button class="btn btn--ghost btn--sm masked-key__edit"type=button>Change'),st=d("<span class=spinner>");const Ce=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i,Se={resend:"Resend",mailgun:"Mailgun",sendgrid:"SendGrid"},Ae=e=>{const[t,n]=p("resend"),[a,s]=p(""),[o,u]=p(""),[v,h]=p(""),[C,S]=p(!1),[x,T]=p(!1),[R,f]=p(""),[k,m]=p(""),[b,j]=p(!1),M=Ne.useSession(),D=()=>e.editMode&&!!e.existingKeyPrefix&&t()===e.initialProvider,A=()=>(e.existingKeyPrefix??"")+"••••••••";Le(()=>{if(e.open){n(e.initialProvider),s("");const r=e.editMode&&!!e.existingKeyPrefix;j(!r),u(e.existingDomain??"");const $=e.existingNotificationEmail??(se()?"":M()?.data?.user?.email??"");h($),f(""),m("")}});const H=()=>t()==="mailgun",I=()=>{let r=!0;const $=a().trim(),P=o().trim().toLowerCase();return!b()&&D()?f(""):$?$.length<8?(f("API key must be at least 8 characters"),r=!1):t()==="resend"&&!$.startsWith("re_")?(f("Resend API key must start with re_"),r=!1):t()==="sendgrid"&&!$.startsWith("SG.")?(f("SendGrid API key must start with SG."),r=!1):f(""):(f("API key is required"),r=!1),H()?P?Ce.test(P)?m(""):(m("Invalid domain format"),r=!1):(m("Domain is required"),r=!1):P&&!Ce.test(P)?(m("Invalid domain format"),r=!1):m(""),r},Z=()=>{const r=v().trim();return r||(M()?.data?.user?.email??null)},N=async()=>{const r=a().trim(),$=o().trim().toLowerCase(),P=Z();if(!P)return K.error("Enter a notification email to send the test to"),!1;T(!0);try{const L={provider:t(),apiKey:r,to:P};$&&(L.domain=$);const q=await Xe(L);return q.success?!0:(K.error(q.error??"Email test failed — check your credentials"),!1)}catch{return!1}finally{T(!1)}},re=async()=>{const r=Z();if(!r)return K.error("Enter a notification email to send the test to"),!1;T(!0);try{const $=await Qe(r);return $.success?!0:(K.error($.error??"Email test failed — check your credentials"),!1)}catch{return!1}finally{T(!1)}},ae=async()=>{if(!I()||X())return;(!b()&&D()?await re():await N())&&K.success(`Test email sent to ${Z()}`)},Y=async()=>{if(!I()||C()||x())return;const r=!b()&&D();if(!(r?await re():await N()))return;const P=o().trim().toLowerCase();S(!0);try{const L={provider:t()};r||(L.apiKey=a().trim()),P&&(L.domain=P);const q=v().trim();q&&(L.notificationEmail=q),await Ze(L);const oe=Se[t()]??t();K.success(`${oe} connected`),e.onSaved(),e.onClose()}catch{}finally{S(!1)}},G=r=>{r.key==="Enter"&&Y(),r.key==="Escape"&&e.onClose()},X=()=>C()||x(),Q=()=>!b()&&D()?!!(H()&&!o().trim()):!!(!a().trim()||H()&&!o().trim()),V=()=>x()?"Testing...":C()?"Saving...":e.editMode?"Test & Save":"Test & Connect",ee=()=>He(t()),te=()=>{switch(t()){case"resend":return"re_xxxx...";case"sendgrid":return"SG.xxxx...";default:return"key-xxxx..."}};return l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var r=at(),$=r.firstChild,P=$.firstChild,L=P.nextSibling,q=L.nextSibling,oe=q.nextSibling,ce=oe.firstChild,g=ce.nextSibling,y=g.nextSibling,ue=oe.nextSibling,O=ue.nextSibling,F=O.nextSibling,he=F.nextSibling,_e=he.nextSibling,B=_e.firstChild,fe=B.nextSibling;return r.$$click=()=>e.onClose(),$.$$click=c=>c.stopPropagation(),i(P,()=>e.editMode?"Edit email provider":"Configure email provider"),ce.$$click=()=>{n("resend"),f("")},g.$$click=()=>{n("mailgun"),f("")},y.$$click=()=>{n("sendgrid"),f("")},i($,l(_,{get when(){return b()||!D()},get fallback(){return(()=>{var c=ot(),E=c.firstChild,U=E.nextSibling;return i(E,A),U.$$click=()=>{j(!0),s("")},c})()},get children(){var c=it();return c.$$keydown=G,c.$$input=E=>{s(E.currentTarget.value),f("")},w(E=>{var U=!!R(),W=te();return U!==E.e&&c.classList.toggle("modal-card__input--error",E.e=U),W!==E.t&&z(c,"placeholder",E.t=W),E},{e:void 0,t:void 0}),w(()=>c.value=a()),c}}),O),i($,l(_,{get when(){return R()},get children(){var c=we();return i(c,R),c}}),O),i($,l(_,{get when(){return ee()},get children(){var c=nt(),E=c.firstChild,U=E.firstChild,W=U.nextSibling;return W.nextSibling,i(E,()=>Se[t()]??t(),W),w(()=>z(E,"href",ee())),c}}),O),i($,l(_,{get when(){return H()},get children(){return[lt(),(()=>{var c=rt();return c.$$keydown=G,c.$$input=E=>{u(E.currentTarget.value),m("")},w(()=>c.classList.toggle("modal-card__input--error",!!k())),w(()=>c.value=o()),c})(),l(_,{get when(){return k()},get children(){var c=we();return i(c,k),c}})]}}),O),F.$$keydown=G,F.$$input=c=>h(c.currentTarget.value),B.$$click=ae,i(B,(()=>{var c=J(()=>!!x());return()=>c()?st():"Send test email"})()),fe.$$click=Y,i(fe,V),w(c=>{var E=t()==="resend",U=t()==="mailgun",W=t()==="sendgrid",be=se()?"you@example.com":M()?.data?.user?.email??"you@example.com",ye=X()||Q(),xe=X()||Q();return E!==c.e&&ce.classList.toggle("provider-modal-option--active",c.e=E),U!==c.t&&g.classList.toggle("provider-modal-option--active",c.t=U),W!==c.a&&y.classList.toggle("provider-modal-option--active",c.a=W),be!==c.o&&z(F,"placeholder",c.o=be),ye!==c.i&&(B.disabled=c.i=ye),xe!==c.n&&(fe.disabled=c.n=xe),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),w(()=>F.value=v()),r}})}})};ie(["click","input","keydown"]);var dt=d('<div class=provider-card__dropdown><button class=provider-card__dropdown-item><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>Edit</button><button class="provider-card__dropdown-item provider-card__dropdown-item--danger"><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Remove'),ct=d("<span>"),ut=d('<span class=provider-card__email><svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6">'),gt=d('<div class=provider-card><div class=provider-card__header><span class=provider-card__label>Your provider</span><div class=provider-card__menu><button class=provider-card__menu-btn aria-label="Provider options"><svg width=16 height=16 viewBox="0 0 24 24"fill=currentColor aria-hidden=true><circle cx=12 cy=5 r=2></circle><circle cx=12 cy=12 r=2></circle><circle cx=12 cy=19 r=2></circle></svg></button></div></div><div class=provider-card__body><img alt class=provider-card__logo><div><div class=provider-card__name></div><div class=provider-card__meta><span class=provider-card__key>...');const vt={resend:"/logos/resend.svg",mailgun:"/logos/mailgun.svg",sendgrid:"/logos/sendgrid.svg"},mt={resend:"Resend",mailgun:"Mailgun",sendgrid:"SendGrid"},ht=e=>{const t=()=>vt[e.config.provider]??"/logos/resend.svg",n=()=>mt[e.config.provider]??e.config.provider,[a,s]=p(!1),o=v=>{v.target.closest(".provider-card__menu")||s(!1)},u=()=>{const v=!a();s(v),v&&document.addEventListener("click",o,{once:!0})};return De(()=>document.removeEventListener("click",o)),(()=>{var v=gt(),h=v.firstChild,C=h.firstChild,S=C.nextSibling,x=S.firstChild,T=h.nextSibling,R=T.firstChild,f=R.nextSibling,k=f.firstChild,m=k.nextSibling,b=m.firstChild,j=b.firstChild;return x.$$click=u,i(S,l(_,{get when(){return a()},get children(){var M=dt(),D=M.firstChild,A=D.nextSibling;return D.$$click=()=>{s(!1),e.onEdit()},A.$$click=()=>{s(!1),e.onRemove()},M}}),null),i(k,n),i(m,l(_,{get when(){return e.config.domain},get children(){var M=ct();return i(M,()=>e.config.domain),M}}),b),i(b,()=>e.config.keyPrefix,j),i(m,l(_,{get when(){return e.config.notificationEmail},get children(){var M=ut();return M.firstChild,i(M,()=>e.config.notificationEmail,null),M}}),null),w(()=>z(R,"src",t())),v})()};ie(["click"]);var _t=d("<h3 class=provider-setup__title>Configure email provider"),ft=d("<p class=provider-setup__subtitle>Choose a service to send alert notifications via email."),pt=d("<div class=provider-setup-grid><button class=provider-setup-card><img src=/logos/resend.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>Resend</div><div class=provider-setup-card__desc>Email API</div></div></button><button class=provider-setup-card><img src=/logos/mailgun.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>Mailgun</div><div class=provider-setup-card__desc>Transactional email</div></div></button><button class=provider-setup-card><img src=/logos/sendgrid.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>SendGrid</div><div class=provider-setup-card__desc>Email delivery");const $t=e=>{const[t,n]=p(!1),[a,s]=p("resend"),o=u=>{s(u),n(!0)};return[_t(),ft(),(()=>{var u=pt(),v=u.firstChild,h=v.nextSibling,C=h.nextSibling;return v.$$click=()=>o("resend"),h.$$click=()=>o("mailgun"),C.$$click=()=>o("sendgrid"),u})(),l(Ae,{get open(){return t()},get initialProvider(){return a()},onClose:()=>n(!1),get onSaved(){return e.onConfigured}})]};ie(["click"]);var bt=d("<div style=margin-bottom:var(--gap-lg)>"),yt=d('<div class=provider-card><div class=provider-card__header><span class=provider-card__label>Your provider</span><div class="skeleton skeleton--text"style="width:16px;height:16px;border-radius:calc(var(--radius) - 2px)"></div></div><div class=provider-card__body><div class="skeleton skeleton--rect"style="width:32px;height:32px;border-radius:calc(var(--radius) - 2px);flex-shrink:0"></div><div><div class="skeleton skeleton--text"style=width:80px;height:14px></div><div class="skeleton skeleton--text"style=width:160px;height:12px;margin-top:6px>'),xt=d('<div class=panel><div class="skeleton skeleton--text"style=width:180px;height:16px></div><div class="skeleton skeleton--text"style=width:280px;height:13px;margin-top:6px></div><div style=display:flex;gap:var(--gap-md);margin-top:var(--gap-lg)>'),kt=d('<div class="skeleton skeleton--rect"style=flex:1;height:64px;border-radius:var(--radius)>');const wt=e=>(()=>{var t=bt();return i(t,l(_,{get when(){return!e.loading},get fallback(){return l(_,{get when(){return!!e.emailProvider},get fallback(){return(()=>{var n=xt(),a=n.firstChild,s=a.nextSibling,o=s.nextSibling;return i(o,l(ge,{each:[1,2,3],children:()=>kt()})),n})()},get children(){return yt()}})},get children(){return l(_,{get when(){return e.emailProvider},get fallback(){return l($t,{get onConfigured(){return e.onConfigured}})},get children(){return l(ht,{get config(){return e.emailProvider},get onEdit(){return e.onEdit},get onRemove(){return e.onRemove}})}})}})),t})();var Ct=d(`<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=limit-modal-title><h2 class=modal-card__title id=limit-modal-title></h2><p class=modal-card__desc>You'll receive an email alert when usage exceeds the threshold.</p><label class=modal-card__field-label for=limit-metric-select style=margin-top:0>Metric</label><select id=limit-metric-select class="select notification-modal__select"><option value=tokens>Tokens</option><option value=cost>Cost (USD)</option></select><div class=limit-modal__row><div class=limit-modal__col><label class=modal-card__field-label for=limit-threshold-input>Threshold</label><input id=limit-threshold-input class=modal-card__input type=number min=0></div><div class=limit-modal__col><label class=modal-card__field-label for=limit-period-select>Period</label><select id=limit-period-select class="select notification-modal__select"><option value=hour>Per hour</option><option value=day>Per day</option><option value=week>Per week</option><option value=month>Per month</option></select></div></div><div class=limit-block-toggle><span class=limit-block-toggle__label>Block requests when exceeded</span><label class=notification-toggle><input type=checkbox><span class=notification-toggle__slider></span></label></div><div class=modal-card__footer><button class="btn btn--primary btn--sm">`),St=d("<span class=spinner>");const Et=e=>{const[t,n]=p(!1),[a,s]=p("tokens"),[o,u]=p(""),[v,h]=p("day"),C=()=>t()?"both":"notify",S=()=>{n(!1),s("tokens"),u(""),h("day")};Le(()=>{if(e.open&&e.editData){const m=e.editData;s(m.metric_type),u(String(m.threshold)),h(m.period),n(m.action==="block"||m.action==="both")}else e.open&&S()});const[x,T]=p(!1),R=async()=>{if(x())return;const m=Number(o());if(!(isNaN(m)||m<=0)){T(!0);try{await e.onSave({metric_type:a(),threshold:m,period:v(),action:C()}),S()}finally{T(!1)}}},f=()=>{S(),e.onClose()},k=()=>!!e.editData;return l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var m=Ct(),b=m.firstChild,j=b.firstChild,M=j.nextSibling,D=M.nextSibling,A=D.nextSibling,H=A.nextSibling,I=H.firstChild,Z=I.firstChild,N=Z.nextSibling,re=I.nextSibling,ae=re.firstChild,Y=ae.nextSibling,G=H.nextSibling,X=G.firstChild,Q=X.nextSibling,V=Q.firstChild,ee=G.nextSibling,te=ee.firstChild;return m.$$click=()=>f(),b.$$click=r=>r.stopPropagation(),i(j,()=>k()?"Edit rule":"Create rule"),A.addEventListener("change",r=>s(r.currentTarget.value)),N.$$keydown=r=>{r.key==="Enter"&&R()},N.$$input=r=>u(r.currentTarget.value),Y.addEventListener("change",r=>h(r.currentTarget.value)),V.addEventListener("change",r=>n(r.currentTarget.checked)),te.$$click=R,i(te,(()=>{var r=J(()=>!!x());return()=>r()?St():k()?"Save changes":"Create rule"})()),w(r=>{var $=a()==="cost"?"0.01":"1",P=a()==="cost"?"e.g. 10.00":"e.g. 50000",L=!o()||Number(o())<=0||x();return $!==r.e&&z(N,"step",r.e=$),P!==r.t&&z(N,"placeholder",r.t=P),L!==r.a&&(te.disabled=r.a=L),r},{e:void 0,t:void 0,a:void 0}),w(()=>A.value=a()),w(()=>N.value=o()),w(()=>Y.value=v()),w(()=>V.checked=t()),m}})}})};ie(["click","input","keydown"]);var Pt=d('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=currentColor aria-hidden=true><path d="M19.12 12.71a.4.4 0 0 1-.12-.29v-2.41c0-1.91-.75-3.69-2.13-5.02-.86-.84-1.9-1.42-3.02-1.73-.3-.73-1.01-1.24-1.85-1.24s-1.57.53-1.86 1.27C7.19 4.14 5 6.98 5 10.27v2.16c0 .11-.04.22-.12.29l-1.17 1.17a2.411 2.411 0 0 0 1.7 4.12h13.17a2.411 2.411 0 0 0 1.7-4.12l-1.17-1.17ZM18.58 16H5.41a.412.412 0 0 1-.29-.7l1.17-1.17c.46-.46.71-1.06.71-1.71v-2.16c0-2.81 2.17-5.17 4.85-5.25h.16c1.31 0 2.54.5 3.48 1.41.98.95 1.52 2.22 1.52 3.59v2.41c0 .65.25 1.25.71 1.71l1.17 1.17a.412.412 0 0 1-.29.7ZM14.82 20H9.18c.41 1.17 1.51 2 2.82 2s2.41-.83 2.82-2">');const Rt=e=>{const t=()=>e.size??16;return(()=>{var n=Pt();return w(a=>{var s=t(),o=t();return s!==a.e&&z(n,"width",a.e=s),o!==a.t&&z(n,"height",a.t=o),a},{e:void 0,t:void 0}),n})()};var Mt=d('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=currentColor aria-hidden=true><path d="M11.5 2c-5.51 0-10 4.49-10 10s4.49 10 10 10 10-4.49 10-10-4.49-10-10-10m-8 10c0-1.85.63-3.54 1.69-4.9L16.4 18.31A8 8 0 0 1 11.5 20c-4.41 0-8-3.59-8-8m14.31 4.9L6.6 5.69A8 8 0 0 1 11.5 4c4.41 0 8 3.59 8 8 0 1.85-.63 3.54-1.69 4.9">');const Tt=e=>{const t=()=>e.size??16;return(()=>{var n=Mt();return w(a=>{var s=t(),o=t();return s!==a.e&&z(n,"width",a.e=s),o!==a.t&&z(n,"height",a.t=o),a},{e:void 0,t:void 0}),n})()};var Ee=d('<table class="notif-table notif-table--flush"><thead><tr><th>Type</th><th>Threshold</th><th>Triggered</th><th style=text-align:right>Actions</th></tr></thead><tbody>'),Lt=d("<div class=panel><div class=panel__title>Rules"),Dt=d('<tr><td><div class="skeleton skeleton--text"style=width:28px></div></td><td><div class="skeleton skeleton--text"style=width:80px></div></td><td><div class="skeleton skeleton--text"style=width:20px></div></td><td style=text-align:right><div class="skeleton skeleton--text"style=width:16px;margin-left:auto>'),Nt=d("<div class=empty-state><div class=empty-state__title>No rules yet</div><p>Set up alerts for usage spikes, or hard limits to block requests over budget."),At=d('<span class=limit-type-icon title="Email Alert">'),It=d('<span class=limit-type-icon title="Hard Limit">'),Ot=d('<span class=limit-warn-tag><svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg>No provider'),Bt=d('<tr><td><div class=limit-type-icons></div></td><td><span class=notif-table__mono></span> <span class=notif-table__period></span></td><td class=notif-table__mono></td><td><div class=notif-table__actions><button class=rule-menu__btn aria-label="Rule options"><svg width=16 height=16 viewBox="0 0 24 24"fill=currentColor aria-hidden=true><circle cx=12 cy=5 r=2></circle><circle cx=12 cy=12 r=2></circle><circle cx=12 cy=19 r=2>');function Ie(e){return e.metric_type==="cost"?`$${Number(e.threshold).toFixed(2)}`:`${Number(e.threshold).toLocaleString()} tokens`}const Oe={hour:"Per hour",day:"Per day",week:"Per week",month:"Per month"},Kt=e=>typeof e.is_active=="number"?!!e.is_active:e.is_active,Pe=e=>e==="notify"||e==="both",zt=e=>e==="block"||e==="both",jt=e=>(()=>{var t=Lt();return t.firstChild,i(t,l(_,{get when(){return!e.loading},get fallback(){return(()=>{var n=Ee(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{each:[1,2,3],children:()=>Dt()})),n})()},get children(){return l(_,{get when(){return(e.rules??[]).length>0},get fallback(){return Nt()},get children(){var n=Ee(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{get each(){return e.rules},children:o=>(()=>{var u=Bt(),v=u.firstChild,h=v.firstChild,C=v.nextSibling,S=C.firstChild,x=S.nextSibling,T=x.nextSibling,R=C.nextSibling,f=R.nextSibling,k=f.firstChild,m=k.firstChild;return i(h,l(_,{get when(){return Pe(o.action??"notify")},get children(){var b=At();return i(b,l(Rt,{size:14})),b}}),null),i(h,l(_,{get when(){return zt(o.action??"notify")},get children(){var b=It();return i(b,l(Tt,{size:14})),b}}),null),i(h,l(_,{get when(){return J(()=>!!Pe(o.action??"notify"))()&&!e.hasProvider},get children(){return Ot()}}),null),i(S,()=>Ie(o)),i(T,()=>(Oe[o.period]??o.period).toLowerCase()),i(R,()=>o.trigger_count??0),m.$$click=b=>e.onToggleMenu(o.id,b),w(()=>u.classList.toggle("notif-table__row--disabled",!Kt(o))),u})()})),n}})}}),null),t})();ie(["click"]);var Re=d('<table class="notif-table notif-table--flush"><thead><tr><th>Date</th><th>Usage</th><th>Threshold</th><th>Resets at</th></tr></thead><tbody>'),Ht=d("<div class=panel><div class=panel__title>History"),Gt=d('<tr><td><div class="skeleton skeleton--text"style=width:100px></div></td><td><div class="skeleton skeleton--text"style=width:60px></div></td><td><div class="skeleton skeleton--text"style=width:60px></div></td><td><div class="skeleton skeleton--text"style=width:100px>'),Vt=d("<div class=empty-state><div class=empty-state__title>No alerts triggered yet"),qt=d("<tr><td class=notif-table__mono></td><td class=notif-table__mono></td><td class=notif-table__mono></td><td class=notif-table__mono>");function Me(e,t){const n=Number(e[t]);return e.metric_type==="cost"?`$${n.toFixed(2)}`:`${n.toLocaleString()} tokens`}function Te(e){const t=e.endsWith("Z")?e:e.replace(" ","T")+"Z";return new Date(t).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const Ut=e=>(()=>{var t=Ht();return t.firstChild,i(t,l(_,{get when(){return!e.loading},get fallback(){return(()=>{var n=Re(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{each:[1,2,3],children:()=>Gt()})),n})()},get children(){return l(_,{get when(){return(e.logs??[]).length>0},get fallback(){return Vt()},get children(){var n=Re(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{get each(){return e.logs},children:o=>(()=>{var u=qt(),v=u.firstChild,h=v.nextSibling,C=h.nextSibling,S=C.nextSibling;return i(v,()=>Te(o.sent_at)),i(h,()=>Me(o,"actual_value")),i(C,()=>Me(o,"threshold_value")),i(S,()=>Te(o.period_end)),u})()})),n}})}}),null),t})();var Jt=d('<div class=rule-menu__dropdown role=menu style=position:fixed;transform:translateX(-100%)><button class=rule-menu__item role=menuitem><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>Edit</button><button class="rule-menu__item rule-menu__item--danger"role=menuitem><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Delete'),Ft=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=delete-rule-modal-title style=max-width:440px><h2 class=modal-card__title id=delete-rule-modal-title>Delete rule</h2><p class=modal-card__desc>This will permanently delete the <span style=font-weight:600></span> rule (<!> <!>). This action cannot be undone.</p><label class=confirm-modal__confirm-row><input type=checkbox>I understand this action is irreversible</label><div class=confirm-modal__footer><button class="btn btn--ghost btn--sm">Cancel</button><button class="btn btn--danger btn--sm">'),Be=d("<span class=spinner>"),Wt=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=remove-provider-modal-title style=max-width:440px><h2 class=modal-card__title id=remove-provider-modal-title>Remove provider</h2><p class=modal-card__desc>This will disconnect your email provider.</p><div class=confirm-modal__footer><button class="btn btn--ghost btn--sm">Cancel</button><button class="btn btn--danger btn--sm">');const Zt=e=>l(ve,{get children(){return l(_,{get when(){return e.openMenuId},children:t=>{const n=e.rules.find(a=>a.id===e.openMenuId);return n?(()=>{var a=Jt(),s=a.firstChild,o=s.nextSibling;return s.$$click=()=>e.onEdit(n),o.$$click=()=>e.onDelete(n),w(u=>{var v=`${e.menuPos.top}px`,h=`${e.menuPos.left}px`;return v!==u.e&&ke(a,"top",u.e=v),h!==u.t&&ke(a,"left",u.t=h),u},{e:void 0,t:void 0}),a})():null}})}}),Yt=e=>l(ve,{get children(){return l(_,{get when(){return e.target},get children(){var t=Ft(),n=t.firstChild,a=n.firstChild,s=a.nextSibling,o=s.firstChild,u=o.nextSibling,v=u.nextSibling,h=v.nextSibling,C=h.nextSibling,S=C.nextSibling;S.nextSibling;var x=s.nextSibling,T=x.firstChild,R=x.nextSibling,f=R.firstChild,k=f.nextSibling;return de(t,"click",e.onCancel,!0),n.$$click=m=>m.stopPropagation(),i(u,()=>e.target.metric_type==="tokens"?"token":"cost"),i(s,()=>Ie(e.target),h),i(s,()=>Oe[e.target.period]?.toLowerCase()??e.target.period,S),T.addEventListener("change",m=>e.onConfirmChange(m.currentTarget.checked)),de(f,"click",e.onCancel,!0),de(k,"click",e.onDelete,!0),i(k,(()=>{var m=J(()=>!!e.deleting);return()=>m()?Be():"Delete rule"})()),w(()=>k.disabled=!e.confirmed||e.deleting),w(()=>T.checked=e.confirmed),t}})}}),Xt=e=>l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var t=Wt(),n=t.firstChild,a=n.firstChild,s=a.nextSibling;s.firstChild;var o=s.nextSibling,u=o.firstChild,v=u.nextSibling;return de(t,"click",e.onCancel,!0),n.$$click=h=>h.stopPropagation(),i(s,l(_,{get when(){return e.hasEmailRules},get children(){return[" ","Email alerts won't be sent until you set up a new one."]}}),null),de(u,"click",e.onCancel,!0),de(v,"click",e.onRemove,!0),i(v,(()=>{var h=J(()=>!!e.removing);return()=>h()?Be():"Remove"})()),w(()=>v.disabled=e.removing),t}})}});ie(["click"]);var Qt=d('<div class=limits-warning-banner role=alert><svg width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg><span>One or more hard limits triggered. New proxy requests for this agent will be blocked until the usage resets in the next period.'),ei=d('<div class=limits-routing-cta><svg width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=10></circle><line x1=12 y1=16 x2=12 y2=12></line><line x1=12 y1=8 x2=12.01 y2=8></line></svg><div><strong>Enable routing to set hard limits</strong><p>Hard limits automatically block proxy requests when usage exceeds a threshold. Email alerts work without routing &mdash; only hard limits require it.'),ti=d("<div style=margin-bottom:var(--gap-lg)>"),ii=d("<div style=margin-top:var(--gap-lg)>"),ni=d('<div class=container--sm><div class=page-header><div><h1>Limits</h1><span class=breadcrumb> &rsaquo; Get notified or block requests when token or cost thresholds are exceeded</span></div><button class="btn btn--primary btn--sm">+ Create rule');const di=()=>{const e=Ke(),t=()=>decodeURIComponent(e.agentName),[n,{refetch:a}]=me(()=>t(),g=>qe(g)),[s,{refetch:o}]=me(()=>t(),g=>Ve(g)),[u,{refetch:v}]=me(We),[h]=me(()=>t(),Ge),C=Ne.useSession(),[S,x]=p(!1),[T,R]=p(!1),[f,k]=p(null),[m,b]=p(null),[j,M]=p({top:0,left:0}),[D,A]=p(null),[H,I]=p(!1),[Z,N]=p(!1),[re,ae]=p(!1),[Y,G]=p(!1),X=()=>h()?.enabled??!1,Q=()=>!se()||!!u(),V=()=>b(null),ee=()=>V(),te=(g,y)=>{if(y.stopPropagation(),m()===g)V();else{const O=y.currentTarget.getBoundingClientRect();M({top:O.bottom+4,left:O.right}),b(g),setTimeout(()=>document.addEventListener("click",ee,{once:!0}),0)}};De(()=>document.removeEventListener("click",ee));const r=g=>{V(),k(g),x(!0)},$=async g=>{const y=f();try{y?(await Je(y.id,{...g}),K.success("Rule updated")):(await Ue({agent_name:t(),...g}),K.success("Rule created")),await a(),x(!1),k(null)}catch{}},P=g=>{V(),A(g),I(!1)},L=async()=>{const g=D();if(g){ae(!0);try{await Fe(g.id),await a(),K.success("Rule deleted")}catch{}finally{ae(!1)}A(null),I(!1)}},q=()=>{const g=n();return g?g.some(y=>y.action==="notify"||y.action==="both"):!1},oe=async()=>{G(!0);try{await Ye(),await v(),N(!1),K.success("Email provider removed")}catch{}finally{G(!1)}},ce=()=>{const g=n();return g?g.some(y=>(y.action==="block"||y.action==="both")&&(typeof y.is_active=="number"?!!y.is_active:y.is_active)&&Number(y.trigger_count)>0):!1};return(()=>{var g=ni(),y=g.firstChild,ue=y.firstChild,O=ue.firstChild,F=O.nextSibling,he=F.firstChild,_e=ue.nextSibling;return i(g,l(ze,{get children(){return[J(()=>pe()??t())," Limits - Manifest"]}}),y),i(g,l(je,{name:"description",get content(){return`Configure limits and alerts for ${pe()??t()}.`}}),y),i(F,()=>pe()??t(),he),_e.$$click=()=>{k(null),x(!0)},i(g,l(_,{get when(){return ce()},get children(){return Qt()}}),null),i(g,l(_,{get when(){return J(()=>!!(h()&&!X()))()&&!se()},get children(){return ei()}}),null),i(g,l(_,{get when(){return!se()},get children(){var B=ti();return i(B,l(tt,{get email(){return C().data?.user?.email??""}})),B}}),null),i(g,l(_,{get when(){return se()},get children(){return l(wt,{get emailProvider(){return u()},get loading(){return u.loading},onConfigured:v,onEdit:()=>R(!0),onRemove:()=>N(!0)})}}),null),i(g,l(jt,{get rules(){return n()},get loading(){return n.loading},get hasProvider(){return Q()},onToggleMenu:te}),null),i(g,l(_,{get when(){return J(()=>!s.loading)()&&(s()??[]).length>0},get children(){var B=ii();return i(B,l(Ut,{get logs(){return s()},loading:!1})),B}}),null),i(g,l(Zt,{get openMenuId(){return m()},get menuPos(){return j()},get rules(){return n()??[]},onEdit:r,onDelete:P}),null),i(g,l(Yt,{get target(){return D()},get confirmed(){return H()},get deleting(){return re()},onConfirmChange:I,onCancel:()=>{A(null),I(!1)},onDelete:L}),null),i(g,l(Xt,{get open(){return Z()},get hasEmailRules(){return q()},get removing(){return Y()},onCancel:()=>N(!1),onRemove:oe}),null),i(g,l(Et,{get open(){return S()},onClose:()=>{x(!1),k(null)},onSave:$,get hasProvider(){return Q()},get editData(){return J(()=>!!f())()?{metric_type:f().metric_type,threshold:Number(f().threshold),period:f().period,action:f().action??"notify"}:null}}),null),i(g,l(Ae,{get open(){return T()},get initialProvider(){return u()?.provider??"resend"},editMode:!0,get existingKeyPrefix(){return u()?.keyPrefix??null},get existingDomain(){return u()?.domain??null},get existingNotificationEmail(){return u()?.notificationEmail??null},onClose:()=>R(!1),onSaved:()=>v()}),null),g})()};ie(["click"]);export{di as default};
1
+ import{i,t as d,a as p,f as Le,g as l,S as _,h as w,s as z,m as J,P as ve,d as ie,o as De,F as ge,B as ke,j as de,n as Ke,k as me,T as ze,M as je}from"./vendor-pl6Q4jbW.js";import{e as $e,q as ne,B as le,s as Ne,d as se,t as K,b as pe}from"./index-GDrFii05.js";import{a as He}from"./provider-api-key-urls-1G6okUJ7.js";import{a as Ge}from"./routing-BZ9syGr8.js";import"./auth-DmX5tAfx.js";function Ve(e){return $e("/notifications/logs",{agent_name:e})}function qe(e){return $e("/notifications",{agent_name:e})}function Ue(e){return ne(`${le}/notifications`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Je(e,t){return ne(`${le}/notifications/${encodeURIComponent(e)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})}function Fe(e){return ne(`${le}/notifications/${encodeURIComponent(e)}`,{method:"DELETE"})}async function We(){const e=await $e("/notifications/email-provider");return"configured"in e&&e.configured===!1?null:e}function Ze(e){return ne(`${le}/notifications/email-provider`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Ye(){return ne(`${le}/notifications/email-provider`,{method:"DELETE"})}function Xe(e){return ne(`${le}/notifications/email-provider/test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})}function Qe(e){return ne(`${le}/notifications/email-provider/test-saved`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({to:e})})}var et=d('<div class=cloud-email-info><svg class=cloud-email-info__icon width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg><div><div class=cloud-email-info__title>Email alerts</div><div class=cloud-email-info__desc>Alerts will be sent to <strong>');const tt=e=>(()=>{var t=et(),n=t.firstChild,a=n.nextSibling,s=a.firstChild,o=s.nextSibling,u=o.firstChild,v=u.nextSibling;return i(v,()=>e.email),t})();var it=d("<input id=email-provider-api-key class=modal-card__input type=text autocomplete=off autofocus style=-webkit-text-security:disc;text-security:disc>"),we=d("<p class=modal-card__field-error role=alert>"),nt=d('<p class=modal-card__field-hint><a class=modal-card__field-link target=_blank rel="noopener noreferrer">Get <!> API key'),lt=d("<label class=modal-card__field-label for=email-provider-domain>Sending domain"),rt=d('<input id=email-provider-domain class=modal-card__input type=text placeholder="e.g. notifications.mycompany.com">'),at=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=provider-modal-title><h2 class=modal-card__title id=provider-modal-title></h2><p class=modal-card__desc>Enter your API credentials to enable email alert delivery.</p><label class=modal-card__field-label>Provider</label><div class=provider-modal-picker><button class=provider-modal-option type=button><img src=/logos/resend.svg alt class=provider-modal-option__logo><span>Resend</span></button><button class=provider-modal-option type=button><img src=/logos/mailgun.svg alt class=provider-modal-option__logo><span>Mailgun</span></button><button class=provider-modal-option type=button><img src=/logos/sendgrid.svg alt class=provider-modal-option__logo><span>SendGrid</span></button></div><label class=modal-card__field-label for=email-provider-api-key>API Key</label><label class=modal-card__field-label for=email-provider-notification>Notification email</label><input id=email-provider-notification class=modal-card__input type=email><p class=modal-card__field-hint>Where threshold alerts will be sent.</p><div class="modal-card__footer modal-card__footer--split"><button class="btn btn--ghost btn--sm"type=button></button><button class="btn btn--primary btn--sm">'),ot=d('<div class=masked-key><span class=masked-key__value></span><button class="btn btn--ghost btn--sm masked-key__edit"type=button>Change'),st=d("<span class=spinner>");const Ce=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/i,Se={resend:"Resend",mailgun:"Mailgun",sendgrid:"SendGrid"},Ae=e=>{const[t,n]=p("resend"),[a,s]=p(""),[o,u]=p(""),[v,h]=p(""),[C,S]=p(!1),[x,T]=p(!1),[R,f]=p(""),[k,m]=p(""),[b,j]=p(!1),M=Ne.useSession(),D=()=>e.editMode&&!!e.existingKeyPrefix&&t()===e.initialProvider,A=()=>(e.existingKeyPrefix??"")+"••••••••";Le(()=>{if(e.open){n(e.initialProvider),s("");const r=e.editMode&&!!e.existingKeyPrefix;j(!r),u(e.existingDomain??"");const $=e.existingNotificationEmail??(se()?"":M()?.data?.user?.email??"");h($),f(""),m("")}});const H=()=>t()==="mailgun",I=()=>{let r=!0;const $=a().trim(),P=o().trim().toLowerCase();return!b()&&D()?f(""):$?$.length<8?(f("API key must be at least 8 characters"),r=!1):t()==="resend"&&!$.startsWith("re_")?(f("Resend API key must start with re_"),r=!1):t()==="sendgrid"&&!$.startsWith("SG.")?(f("SendGrid API key must start with SG."),r=!1):f(""):(f("API key is required"),r=!1),H()?P?Ce.test(P)?m(""):(m("Invalid domain format"),r=!1):(m("Domain is required"),r=!1):P&&!Ce.test(P)?(m("Invalid domain format"),r=!1):m(""),r},Z=()=>{const r=v().trim();return r||(M()?.data?.user?.email??null)},N=async()=>{const r=a().trim(),$=o().trim().toLowerCase(),P=Z();if(!P)return K.error("Enter a notification email to send the test to"),!1;T(!0);try{const L={provider:t(),apiKey:r,to:P};$&&(L.domain=$);const q=await Xe(L);return q.success?!0:(K.error(q.error??"Email test failed — check your credentials"),!1)}catch{return!1}finally{T(!1)}},re=async()=>{const r=Z();if(!r)return K.error("Enter a notification email to send the test to"),!1;T(!0);try{const $=await Qe(r);return $.success?!0:(K.error($.error??"Email test failed — check your credentials"),!1)}catch{return!1}finally{T(!1)}},ae=async()=>{if(!I()||X())return;(!b()&&D()?await re():await N())&&K.success(`Test email sent to ${Z()}`)},Y=async()=>{if(!I()||C()||x())return;const r=!b()&&D();if(!(r?await re():await N()))return;const P=o().trim().toLowerCase();S(!0);try{const L={provider:t()};r||(L.apiKey=a().trim()),P&&(L.domain=P);const q=v().trim();q&&(L.notificationEmail=q),await Ze(L);const oe=Se[t()]??t();K.success(`${oe} connected`),e.onSaved(),e.onClose()}catch{}finally{S(!1)}},G=r=>{r.key==="Enter"&&Y(),r.key==="Escape"&&e.onClose()},X=()=>C()||x(),Q=()=>!b()&&D()?!!(H()&&!o().trim()):!!(!a().trim()||H()&&!o().trim()),V=()=>x()?"Testing...":C()?"Saving...":e.editMode?"Test & Save":"Test & Connect",ee=()=>He(t()),te=()=>{switch(t()){case"resend":return"re_xxxx...";case"sendgrid":return"SG.xxxx...";default:return"key-xxxx..."}};return l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var r=at(),$=r.firstChild,P=$.firstChild,L=P.nextSibling,q=L.nextSibling,oe=q.nextSibling,ce=oe.firstChild,g=ce.nextSibling,y=g.nextSibling,ue=oe.nextSibling,O=ue.nextSibling,F=O.nextSibling,he=F.nextSibling,_e=he.nextSibling,B=_e.firstChild,fe=B.nextSibling;return r.$$click=()=>e.onClose(),$.$$click=c=>c.stopPropagation(),i(P,()=>e.editMode?"Edit email provider":"Configure email provider"),ce.$$click=()=>{n("resend"),f("")},g.$$click=()=>{n("mailgun"),f("")},y.$$click=()=>{n("sendgrid"),f("")},i($,l(_,{get when(){return b()||!D()},get fallback(){return(()=>{var c=ot(),E=c.firstChild,U=E.nextSibling;return i(E,A),U.$$click=()=>{j(!0),s("")},c})()},get children(){var c=it();return c.$$keydown=G,c.$$input=E=>{s(E.currentTarget.value),f("")},w(E=>{var U=!!R(),W=te();return U!==E.e&&c.classList.toggle("modal-card__input--error",E.e=U),W!==E.t&&z(c,"placeholder",E.t=W),E},{e:void 0,t:void 0}),w(()=>c.value=a()),c}}),O),i($,l(_,{get when(){return R()},get children(){var c=we();return i(c,R),c}}),O),i($,l(_,{get when(){return ee()},get children(){var c=nt(),E=c.firstChild,U=E.firstChild,W=U.nextSibling;return W.nextSibling,i(E,()=>Se[t()]??t(),W),w(()=>z(E,"href",ee())),c}}),O),i($,l(_,{get when(){return H()},get children(){return[lt(),(()=>{var c=rt();return c.$$keydown=G,c.$$input=E=>{u(E.currentTarget.value),m("")},w(()=>c.classList.toggle("modal-card__input--error",!!k())),w(()=>c.value=o()),c})(),l(_,{get when(){return k()},get children(){var c=we();return i(c,k),c}})]}}),O),F.$$keydown=G,F.$$input=c=>h(c.currentTarget.value),B.$$click=ae,i(B,(()=>{var c=J(()=>!!x());return()=>c()?st():"Send test email"})()),fe.$$click=Y,i(fe,V),w(c=>{var E=t()==="resend",U=t()==="mailgun",W=t()==="sendgrid",be=se()?"you@example.com":M()?.data?.user?.email??"you@example.com",ye=X()||Q(),xe=X()||Q();return E!==c.e&&ce.classList.toggle("provider-modal-option--active",c.e=E),U!==c.t&&g.classList.toggle("provider-modal-option--active",c.t=U),W!==c.a&&y.classList.toggle("provider-modal-option--active",c.a=W),be!==c.o&&z(F,"placeholder",c.o=be),ye!==c.i&&(B.disabled=c.i=ye),xe!==c.n&&(fe.disabled=c.n=xe),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),w(()=>F.value=v()),r}})}})};ie(["click","input","keydown"]);var dt=d('<div class=provider-card__dropdown><button class=provider-card__dropdown-item><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>Edit</button><button class="provider-card__dropdown-item provider-card__dropdown-item--danger"><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Remove'),ct=d("<span>"),ut=d('<span class=provider-card__email><svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6">'),gt=d('<div class=provider-card><div class=provider-card__header><span class=provider-card__label>Your provider</span><div class=provider-card__menu><button class=provider-card__menu-btn aria-label="Provider options"><svg width=16 height=16 viewBox="0 0 24 24"fill=currentColor aria-hidden=true><circle cx=12 cy=5 r=2></circle><circle cx=12 cy=12 r=2></circle><circle cx=12 cy=19 r=2></circle></svg></button></div></div><div class=provider-card__body><img alt class=provider-card__logo><div><div class=provider-card__name></div><div class=provider-card__meta><span class=provider-card__key>...');const vt={resend:"/logos/resend.svg",mailgun:"/logos/mailgun.svg",sendgrid:"/logos/sendgrid.svg"},mt={resend:"Resend",mailgun:"Mailgun",sendgrid:"SendGrid"},ht=e=>{const t=()=>vt[e.config.provider]??"/logos/resend.svg",n=()=>mt[e.config.provider]??e.config.provider,[a,s]=p(!1),o=v=>{v.target.closest(".provider-card__menu")||s(!1)},u=()=>{const v=!a();s(v),v&&document.addEventListener("click",o,{once:!0})};return De(()=>document.removeEventListener("click",o)),(()=>{var v=gt(),h=v.firstChild,C=h.firstChild,S=C.nextSibling,x=S.firstChild,T=h.nextSibling,R=T.firstChild,f=R.nextSibling,k=f.firstChild,m=k.nextSibling,b=m.firstChild,j=b.firstChild;return x.$$click=u,i(S,l(_,{get when(){return a()},get children(){var M=dt(),D=M.firstChild,A=D.nextSibling;return D.$$click=()=>{s(!1),e.onEdit()},A.$$click=()=>{s(!1),e.onRemove()},M}}),null),i(k,n),i(m,l(_,{get when(){return e.config.domain},get children(){var M=ct();return i(M,()=>e.config.domain),M}}),b),i(b,()=>e.config.keyPrefix,j),i(m,l(_,{get when(){return e.config.notificationEmail},get children(){var M=ut();return M.firstChild,i(M,()=>e.config.notificationEmail,null),M}}),null),w(()=>z(R,"src",t())),v})()};ie(["click"]);var _t=d("<h3 class=provider-setup__title>Configure email provider"),ft=d("<p class=provider-setup__subtitle>Choose a service to send alert notifications via email."),pt=d("<div class=provider-setup-grid><button class=provider-setup-card><img src=/logos/resend.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>Resend</div><div class=provider-setup-card__desc>Email API</div></div></button><button class=provider-setup-card><img src=/logos/mailgun.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>Mailgun</div><div class=provider-setup-card__desc>Transactional email</div></div></button><button class=provider-setup-card><img src=/logos/sendgrid.svg alt class=provider-setup-card__logo><div><div class=provider-setup-card__name>SendGrid</div><div class=provider-setup-card__desc>Email delivery");const $t=e=>{const[t,n]=p(!1),[a,s]=p("resend"),o=u=>{s(u),n(!0)};return[_t(),ft(),(()=>{var u=pt(),v=u.firstChild,h=v.nextSibling,C=h.nextSibling;return v.$$click=()=>o("resend"),h.$$click=()=>o("mailgun"),C.$$click=()=>o("sendgrid"),u})(),l(Ae,{get open(){return t()},get initialProvider(){return a()},onClose:()=>n(!1),get onSaved(){return e.onConfigured}})]};ie(["click"]);var bt=d("<div style=margin-bottom:var(--gap-lg)>"),yt=d('<div class=provider-card><div class=provider-card__header><span class=provider-card__label>Your provider</span><div class="skeleton skeleton--text"style="width:16px;height:16px;border-radius:calc(var(--radius) - 2px)"></div></div><div class=provider-card__body><div class="skeleton skeleton--rect"style="width:32px;height:32px;border-radius:calc(var(--radius) - 2px);flex-shrink:0"></div><div><div class="skeleton skeleton--text"style=width:80px;height:14px></div><div class="skeleton skeleton--text"style=width:160px;height:12px;margin-top:6px>'),xt=d('<div class=panel><div class="skeleton skeleton--text"style=width:180px;height:16px></div><div class="skeleton skeleton--text"style=width:280px;height:13px;margin-top:6px></div><div style=display:flex;gap:var(--gap-md);margin-top:var(--gap-lg)>'),kt=d('<div class="skeleton skeleton--rect"style=flex:1;height:64px;border-radius:var(--radius)>');const wt=e=>(()=>{var t=bt();return i(t,l(_,{get when(){return!e.loading},get fallback(){return l(_,{get when(){return!!e.emailProvider},get fallback(){return(()=>{var n=xt(),a=n.firstChild,s=a.nextSibling,o=s.nextSibling;return i(o,l(ge,{each:[1,2,3],children:()=>kt()})),n})()},get children(){return yt()}})},get children(){return l(_,{get when(){return e.emailProvider},get fallback(){return l($t,{get onConfigured(){return e.onConfigured}})},get children(){return l(ht,{get config(){return e.emailProvider},get onEdit(){return e.onEdit},get onRemove(){return e.onRemove}})}})}})),t})();var Ct=d(`<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=limit-modal-title><h2 class=modal-card__title id=limit-modal-title></h2><p class=modal-card__desc>You'll receive an email alert when usage exceeds the threshold.</p><label class=modal-card__field-label for=limit-metric-select style=margin-top:0>Metric</label><select id=limit-metric-select class="select notification-modal__select"><option value=tokens>Tokens</option><option value=cost>Cost (USD)</option></select><div class=limit-modal__row><div class=limit-modal__col><label class=modal-card__field-label for=limit-threshold-input>Threshold</label><input id=limit-threshold-input class=modal-card__input type=number min=0></div><div class=limit-modal__col><label class=modal-card__field-label for=limit-period-select>Period</label><select id=limit-period-select class="select notification-modal__select"><option value=hour>Per hour</option><option value=day>Per day</option><option value=week>Per week</option><option value=month>Per month</option></select></div></div><div class=limit-block-toggle><span class=limit-block-toggle__label>Block requests when exceeded</span><label class=notification-toggle><input type=checkbox><span class=notification-toggle__slider></span></label></div><div class=modal-card__footer><button class="btn btn--primary btn--sm">`),St=d("<span class=spinner>");const Et=e=>{const[t,n]=p(!1),[a,s]=p("tokens"),[o,u]=p(""),[v,h]=p("day"),C=()=>t()?"both":"notify",S=()=>{n(!1),s("tokens"),u(""),h("day")};Le(()=>{if(e.open&&e.editData){const m=e.editData;s(m.metric_type),u(String(m.threshold)),h(m.period),n(m.action==="block"||m.action==="both")}else e.open&&S()});const[x,T]=p(!1),R=async()=>{if(x())return;const m=Number(o());if(!(isNaN(m)||m<=0)){T(!0);try{await e.onSave({metric_type:a(),threshold:m,period:v(),action:C()}),S()}finally{T(!1)}}},f=()=>{S(),e.onClose()},k=()=>!!e.editData;return l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var m=Ct(),b=m.firstChild,j=b.firstChild,M=j.nextSibling,D=M.nextSibling,A=D.nextSibling,H=A.nextSibling,I=H.firstChild,Z=I.firstChild,N=Z.nextSibling,re=I.nextSibling,ae=re.firstChild,Y=ae.nextSibling,G=H.nextSibling,X=G.firstChild,Q=X.nextSibling,V=Q.firstChild,ee=G.nextSibling,te=ee.firstChild;return m.$$click=()=>f(),b.$$click=r=>r.stopPropagation(),i(j,()=>k()?"Edit rule":"Create rule"),A.addEventListener("change",r=>s(r.currentTarget.value)),N.$$keydown=r=>{r.key==="Enter"&&R()},N.$$input=r=>u(r.currentTarget.value),Y.addEventListener("change",r=>h(r.currentTarget.value)),V.addEventListener("change",r=>n(r.currentTarget.checked)),te.$$click=R,i(te,(()=>{var r=J(()=>!!x());return()=>r()?St():k()?"Save changes":"Create rule"})()),w(r=>{var $=a()==="cost"?"0.01":"1",P=a()==="cost"?"e.g. 10.00":"e.g. 50000",L=!o()||Number(o())<=0||x();return $!==r.e&&z(N,"step",r.e=$),P!==r.t&&z(N,"placeholder",r.t=P),L!==r.a&&(te.disabled=r.a=L),r},{e:void 0,t:void 0,a:void 0}),w(()=>A.value=a()),w(()=>N.value=o()),w(()=>Y.value=v()),w(()=>V.checked=t()),m}})}})};ie(["click","input","keydown"]);var Pt=d('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=currentColor aria-hidden=true><path d="M19.12 12.71a.4.4 0 0 1-.12-.29v-2.41c0-1.91-.75-3.69-2.13-5.02-.86-.84-1.9-1.42-3.02-1.73-.3-.73-1.01-1.24-1.85-1.24s-1.57.53-1.86 1.27C7.19 4.14 5 6.98 5 10.27v2.16c0 .11-.04.22-.12.29l-1.17 1.17a2.411 2.411 0 0 0 1.7 4.12h13.17a2.411 2.411 0 0 0 1.7-4.12l-1.17-1.17ZM18.58 16H5.41a.412.412 0 0 1-.29-.7l1.17-1.17c.46-.46.71-1.06.71-1.71v-2.16c0-2.81 2.17-5.17 4.85-5.25h.16c1.31 0 2.54.5 3.48 1.41.98.95 1.52 2.22 1.52 3.59v2.41c0 .65.25 1.25.71 1.71l1.17 1.17a.412.412 0 0 1-.29.7ZM14.82 20H9.18c.41 1.17 1.51 2 2.82 2s2.41-.83 2.82-2">');const Rt=e=>{const t=()=>e.size??16;return(()=>{var n=Pt();return w(a=>{var s=t(),o=t();return s!==a.e&&z(n,"width",a.e=s),o!==a.t&&z(n,"height",a.t=o),a},{e:void 0,t:void 0}),n})()};var Mt=d('<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=currentColor aria-hidden=true><path d="M11.5 2c-5.51 0-10 4.49-10 10s4.49 10 10 10 10-4.49 10-10-4.49-10-10-10m-8 10c0-1.85.63-3.54 1.69-4.9L16.4 18.31A8 8 0 0 1 11.5 20c-4.41 0-8-3.59-8-8m14.31 4.9L6.6 5.69A8 8 0 0 1 11.5 4c4.41 0 8 3.59 8 8 0 1.85-.63 3.54-1.69 4.9">');const Tt=e=>{const t=()=>e.size??16;return(()=>{var n=Mt();return w(a=>{var s=t(),o=t();return s!==a.e&&z(n,"width",a.e=s),o!==a.t&&z(n,"height",a.t=o),a},{e:void 0,t:void 0}),n})()};var Ee=d('<table class="notif-table notif-table--flush"><thead><tr><th>Type</th><th>Threshold</th><th>Triggered</th><th style=text-align:right>Actions</th></tr></thead><tbody>'),Lt=d("<div class=panel><div class=panel__title>Rules"),Dt=d('<tr><td><div class="skeleton skeleton--text"style=width:28px></div></td><td><div class="skeleton skeleton--text"style=width:80px></div></td><td><div class="skeleton skeleton--text"style=width:20px></div></td><td style=text-align:right><div class="skeleton skeleton--text"style=width:16px;margin-left:auto>'),Nt=d("<div class=empty-state><div class=empty-state__title>No rules yet</div><p>Set up alerts for usage spikes, or hard limits to block requests over budget."),At=d('<span class=limit-type-icon title="Email Alert">'),It=d('<span class=limit-type-icon title="Hard Limit">'),Ot=d('<span class=limit-warn-tag><svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg>No provider'),Bt=d('<tr><td><div class=limit-type-icons></div></td><td><span class=notif-table__mono></span> <span class=notif-table__period></span></td><td class=notif-table__mono></td><td><div class=notif-table__actions><button class=rule-menu__btn aria-label="Rule options"><svg width=16 height=16 viewBox="0 0 24 24"fill=currentColor aria-hidden=true><circle cx=12 cy=5 r=2></circle><circle cx=12 cy=12 r=2></circle><circle cx=12 cy=19 r=2>');function Ie(e){return e.metric_type==="cost"?`$${Number(e.threshold).toFixed(2)}`:`${Number(e.threshold).toLocaleString()} tokens`}const Oe={hour:"Per hour",day:"Per day",week:"Per week",month:"Per month"},Kt=e=>typeof e.is_active=="number"?!!e.is_active:e.is_active,Pe=e=>e==="notify"||e==="both",zt=e=>e==="block"||e==="both",jt=e=>(()=>{var t=Lt();return t.firstChild,i(t,l(_,{get when(){return!e.loading},get fallback(){return(()=>{var n=Ee(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{each:[1,2,3],children:()=>Dt()})),n})()},get children(){return l(_,{get when(){return(e.rules??[]).length>0},get fallback(){return Nt()},get children(){var n=Ee(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{get each(){return e.rules},children:o=>(()=>{var u=Bt(),v=u.firstChild,h=v.firstChild,C=v.nextSibling,S=C.firstChild,x=S.nextSibling,T=x.nextSibling,R=C.nextSibling,f=R.nextSibling,k=f.firstChild,m=k.firstChild;return i(h,l(_,{get when(){return Pe(o.action??"notify")},get children(){var b=At();return i(b,l(Rt,{size:14})),b}}),null),i(h,l(_,{get when(){return zt(o.action??"notify")},get children(){var b=It();return i(b,l(Tt,{size:14})),b}}),null),i(h,l(_,{get when(){return J(()=>!!Pe(o.action??"notify"))()&&!e.hasProvider},get children(){return Ot()}}),null),i(S,()=>Ie(o)),i(T,()=>(Oe[o.period]??o.period).toLowerCase()),i(R,()=>o.trigger_count??0),m.$$click=b=>e.onToggleMenu(o.id,b),w(()=>u.classList.toggle("notif-table__row--disabled",!Kt(o))),u})()})),n}})}}),null),t})();ie(["click"]);var Re=d('<table class="notif-table notif-table--flush"><thead><tr><th>Date</th><th>Usage</th><th>Threshold</th><th>Resets at</th></tr></thead><tbody>'),Ht=d("<div class=panel><div class=panel__title>History"),Gt=d('<tr><td><div class="skeleton skeleton--text"style=width:100px></div></td><td><div class="skeleton skeleton--text"style=width:60px></div></td><td><div class="skeleton skeleton--text"style=width:60px></div></td><td><div class="skeleton skeleton--text"style=width:100px>'),Vt=d("<div class=empty-state><div class=empty-state__title>No alerts triggered yet"),qt=d("<tr><td class=notif-table__mono></td><td class=notif-table__mono></td><td class=notif-table__mono></td><td class=notif-table__mono>");function Me(e,t){const n=Number(e[t]);return e.metric_type==="cost"?`$${n.toFixed(2)}`:`${n.toLocaleString()} tokens`}function Te(e){const t=e.endsWith("Z")?e:e.replace(" ","T")+"Z";return new Date(t).toLocaleDateString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}const Ut=e=>(()=>{var t=Ht();return t.firstChild,i(t,l(_,{get when(){return!e.loading},get fallback(){return(()=>{var n=Re(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{each:[1,2,3],children:()=>Gt()})),n})()},get children(){return l(_,{get when(){return(e.logs??[]).length>0},get fallback(){return Vt()},get children(){var n=Re(),a=n.firstChild,s=a.nextSibling;return i(s,l(ge,{get each(){return e.logs},children:o=>(()=>{var u=qt(),v=u.firstChild,h=v.nextSibling,C=h.nextSibling,S=C.nextSibling;return i(v,()=>Te(o.sent_at)),i(h,()=>Me(o,"actual_value")),i(C,()=>Me(o,"threshold_value")),i(S,()=>Te(o.period_end)),u})()})),n}})}}),null),t})();var Jt=d('<div class=rule-menu__dropdown role=menu style=position:fixed;transform:translateX(-100%)><button class=rule-menu__item role=menuitem><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>Edit</button><button class="rule-menu__item rule-menu__item--danger"role=menuitem><svg width=14 height=14 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>Delete'),Ft=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=delete-rule-modal-title style=max-width:440px><h2 class=modal-card__title id=delete-rule-modal-title>Delete rule</h2><p class=modal-card__desc>This will permanently delete the <span style=font-weight:600></span> rule (<!> <!>). This action cannot be undone.</p><label class=confirm-modal__confirm-row><input type=checkbox>I understand this action is irreversible</label><div class=confirm-modal__footer><button class="btn btn--ghost btn--sm">Cancel</button><button class="btn btn--danger btn--sm">'),Be=d("<span class=spinner>"),Wt=d('<div class=modal-overlay><div class=modal-card role=dialog aria-modal=true aria-labelledby=remove-provider-modal-title style=max-width:440px><h2 class=modal-card__title id=remove-provider-modal-title>Remove provider</h2><p class=modal-card__desc>This will disconnect your email provider.</p><div class=confirm-modal__footer><button class="btn btn--ghost btn--sm">Cancel</button><button class="btn btn--danger btn--sm">');const Zt=e=>l(ve,{get children(){return l(_,{get when(){return e.openMenuId},children:t=>{const n=e.rules.find(a=>a.id===e.openMenuId);return n?(()=>{var a=Jt(),s=a.firstChild,o=s.nextSibling;return s.$$click=()=>e.onEdit(n),o.$$click=()=>e.onDelete(n),w(u=>{var v=`${e.menuPos.top}px`,h=`${e.menuPos.left}px`;return v!==u.e&&ke(a,"top",u.e=v),h!==u.t&&ke(a,"left",u.t=h),u},{e:void 0,t:void 0}),a})():null}})}}),Yt=e=>l(ve,{get children(){return l(_,{get when(){return e.target},get children(){var t=Ft(),n=t.firstChild,a=n.firstChild,s=a.nextSibling,o=s.firstChild,u=o.nextSibling,v=u.nextSibling,h=v.nextSibling,C=h.nextSibling,S=C.nextSibling;S.nextSibling;var x=s.nextSibling,T=x.firstChild,R=x.nextSibling,f=R.firstChild,k=f.nextSibling;return de(t,"click",e.onCancel,!0),n.$$click=m=>m.stopPropagation(),i(u,()=>e.target.metric_type==="tokens"?"token":"cost"),i(s,()=>Ie(e.target),h),i(s,()=>Oe[e.target.period]?.toLowerCase()??e.target.period,S),T.addEventListener("change",m=>e.onConfirmChange(m.currentTarget.checked)),de(f,"click",e.onCancel,!0),de(k,"click",e.onDelete,!0),i(k,(()=>{var m=J(()=>!!e.deleting);return()=>m()?Be():"Delete rule"})()),w(()=>k.disabled=!e.confirmed||e.deleting),w(()=>T.checked=e.confirmed),t}})}}),Xt=e=>l(ve,{get children(){return l(_,{get when(){return e.open},get children(){var t=Wt(),n=t.firstChild,a=n.firstChild,s=a.nextSibling;s.firstChild;var o=s.nextSibling,u=o.firstChild,v=u.nextSibling;return de(t,"click",e.onCancel,!0),n.$$click=h=>h.stopPropagation(),i(s,l(_,{get when(){return e.hasEmailRules},get children(){return[" ","Email alerts won't be sent until you set up a new one."]}}),null),de(u,"click",e.onCancel,!0),de(v,"click",e.onRemove,!0),i(v,(()=>{var h=J(()=>!!e.removing);return()=>h()?Be():"Remove"})()),w(()=>v.disabled=e.removing),t}})}});ie(["click"]);var Qt=d('<div class=limits-warning-banner role=alert><svg width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1=12 y1=9 x2=12 y2=13></line><line x1=12 y1=17 x2=12.01 y2=17></line></svg><span>One or more hard limits triggered. New proxy requests for this agent will be blocked until the usage resets in the next period.'),ei=d('<div class=limits-routing-cta><svg width=20 height=20 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=12 cy=12 r=10></circle><line x1=12 y1=16 x2=12 y2=12></line><line x1=12 y1=8 x2=12.01 y2=8></line></svg><div><strong>Enable routing to set hard limits</strong><p>Hard limits automatically block proxy requests when usage exceeds a threshold. Email alerts work without routing &mdash; only hard limits require it.'),ti=d("<div style=margin-bottom:var(--gap-lg)>"),ii=d("<div style=margin-top:var(--gap-lg)>"),ni=d('<div class=container--sm><div class=page-header><div><h1>Limits</h1><span class=breadcrumb> &rsaquo; Get notified or block requests when token or cost thresholds are exceeded</span></div><button class="btn btn--primary btn--sm">+ Create rule');const di=()=>{const e=Ke(),t=()=>decodeURIComponent(e.agentName),[n,{refetch:a}]=me(()=>t(),g=>qe(g)),[s,{refetch:o}]=me(()=>t(),g=>Ve(g)),[u,{refetch:v}]=me(We),[h]=me(()=>t(),Ge),C=Ne.useSession(),[S,x]=p(!1),[T,R]=p(!1),[f,k]=p(null),[m,b]=p(null),[j,M]=p({top:0,left:0}),[D,A]=p(null),[H,I]=p(!1),[Z,N]=p(!1),[re,ae]=p(!1),[Y,G]=p(!1),X=()=>h()?.enabled??!1,Q=()=>!se()||!!u(),V=()=>b(null),ee=()=>V(),te=(g,y)=>{if(y.stopPropagation(),m()===g)V();else{const O=y.currentTarget.getBoundingClientRect();M({top:O.bottom+4,left:O.right}),b(g),setTimeout(()=>document.addEventListener("click",ee,{once:!0}),0)}};De(()=>document.removeEventListener("click",ee));const r=g=>{V(),k(g),x(!0)},$=async g=>{const y=f();try{y?(await Je(y.id,{...g}),K.success("Rule updated")):(await Ue({agent_name:t(),...g}),K.success("Rule created")),await a(),x(!1),k(null)}catch{}},P=g=>{V(),A(g),I(!1)},L=async()=>{const g=D();if(g){ae(!0);try{await Fe(g.id),await a(),K.success("Rule deleted")}catch{}finally{ae(!1)}A(null),I(!1)}},q=()=>{const g=n();return g?g.some(y=>y.action==="notify"||y.action==="both"):!1},oe=async()=>{G(!0);try{await Ye(),await v(),N(!1),K.success("Email provider removed")}catch{}finally{G(!1)}},ce=()=>{const g=n();return g?g.some(y=>(y.action==="block"||y.action==="both")&&(typeof y.is_active=="number"?!!y.is_active:y.is_active)&&Number(y.trigger_count)>0):!1};return(()=>{var g=ni(),y=g.firstChild,ue=y.firstChild,O=ue.firstChild,F=O.nextSibling,he=F.firstChild,_e=ue.nextSibling;return i(g,l(ze,{get children(){return[J(()=>pe()??t())," Limits - Manifest"]}}),y),i(g,l(je,{name:"description",get content(){return`Configure limits and alerts for ${pe()??t()}.`}}),y),i(F,()=>pe()??t(),he),_e.$$click=()=>{k(null),x(!0)},i(g,l(_,{get when(){return ce()},get children(){return Qt()}}),null),i(g,l(_,{get when(){return J(()=>!!(h()&&!X()))()&&!se()},get children(){return ei()}}),null),i(g,l(_,{get when(){return!se()},get children(){var B=ti();return i(B,l(tt,{get email(){return C().data?.user?.email??""}})),B}}),null),i(g,l(_,{get when(){return se()},get children(){return l(wt,{get emailProvider(){return u()},get loading(){return u.loading},onConfigured:v,onEdit:()=>R(!0),onRemove:()=>N(!0)})}}),null),i(g,l(jt,{get rules(){return n()},get loading(){return n.loading},get hasProvider(){return Q()},onToggleMenu:te}),null),i(g,l(_,{get when(){return J(()=>!s.loading)()&&(s()??[]).length>0},get children(){var B=ii();return i(B,l(Ut,{get logs(){return s()},loading:!1})),B}}),null),i(g,l(Zt,{get openMenuId(){return m()},get menuPos(){return j()},get rules(){return n()??[]},onEdit:r,onDelete:P}),null),i(g,l(Yt,{get target(){return D()},get confirmed(){return H()},get deleting(){return re()},onConfirmChange:I,onCancel:()=>{A(null),I(!1)},onDelete:L}),null),i(g,l(Xt,{get open(){return Z()},get hasEmailRules(){return q()},get removing(){return Y()},onCancel:()=>N(!1),onRemove:oe}),null),i(g,l(Et,{get open(){return S()},onClose:()=>{x(!1),k(null)},onSave:$,get hasProvider(){return Q()},get editData(){return J(()=>!!f())()?{metric_type:f().metric_type,threshold:Number(f().threshold),period:f().period,action:f().action??"notify"}:null}}),null),i(g,l(Ae,{get open(){return T()},get initialProvider(){return u()?.provider??"resend"},editMode:!0,get existingKeyPrefix(){return u()?.keyPrefix??null},get existingDomain(){return u()?.domain??null},get existingNotificationEmail(){return u()?.notificationEmail??null},onClose:()=>R(!1),onSaved:()=>v()}),null),g})()};ie(["click"]);export{di as default};
@@ -1 +1 @@
1
- import{a as n,D as A,e as F,g as r,T as q,M as W,S as f,i,m,h as d,A as R,t as s,d as B}from"./vendor-pl6Q4jbW.js";import{S as U}from"./SocialButtons-Sujgjl6e.js";import{u as j,s as x}from"./index-B-_-ALFn.js";import"./auth-DmX5tAfx.js";var z=s("<div class=auth-header><h1 class=auth-header__title>Connecting...</h1><p class=auth-header__subtitle>Setting up your local session"),G=s("<div class=auth-header><h1 class=auth-header__title>Welcome back</h1><p class=auth-header__subtitle>Take control of your OpenClaw costs"),H=s("<div class=auth-divider><span class=auth-divider__text>or"),J=s("<button type=button class=auth-form__link-btn>"),K=s('<form class=auth-form><label class=auth-form__label>Email<input class=auth-form__input type=email placeholder=you@example.com required></label><label class=auth-form__label>Password<input class=auth-form__input type=password placeholder="Enter your password"required></label><div class=auth-form__actions></div><button class=auth-form__submit type=submit>'),Q=s("<div class=auth-footer><span>Don't have an account? "),X=s("<div class=auth-form__error role=alert>"),Y=s("<span class=spinner>");const Z=60,se=()=>{const[h,I]=n(""),[_,D]=n(""),[p,l]=n(""),[g,v]=n(!1),[M,$]=n(!1),[o,b]=n(0),[w,S]=n(!1),[O]=A();F(async()=>{if(O.error&&l("Login failed. Please try again or use a different method."),await j()){S(!0);try{if((await fetch("/api/auth/local-session",{credentials:"include"})).ok){window.location.href="/";return}}catch{}S(!1)}});const P=()=>{b(Z);const e=setInterval(()=>{b(t=>t<=1?(clearInterval(e),0):t-1)},1e3)},T=async e=>{e.preventDefault(),l(""),$(!1),v(!0);const{error:t}=await x.signIn.email({email:h(),password:_()});if(v(!1),t){const c=t.message??"";if(c.toLowerCase().includes("email is not verified")||t.code==="EMAIL_NOT_VERIFIED"){$(!0),l("Please verify your email before signing in.");return}l(c||"Invalid email or password");return}window.location.href="/"},V=async()=>{if(o()>0)return;const{error:e}=await x.sendVerificationEmail({email:h(),callbackURL:"/"});if(e){l(e.message??"Failed to resend verification email");return}P(),l("Verification email sent! Check your inbox.")};return[r(q,{children:"Sign In - Manifest"}),r(W,{name:"description",content:"Sign in to Manifest to monitor your AI agents."}),r(f,{get when(){return w()},get children(){return z()}}),r(f,{get when(){return!w()},get children(){return[G(),r(U,{}),H(),(()=>{var e=K(),t=e.firstChild,c=t.firstChild,y=c.nextSibling,E=t.nextSibling,N=E.firstChild,C=N.nextSibling,k=E.nextSibling,L=k.nextSibling;return e.addEventListener("submit",T),i(e,(()=>{var a=m(()=>!!p());return()=>a()&&(()=>{var u=X();return i(u,p),u})()})(),t),i(e,r(f,{get when(){return M()},get children(){var a=J();return a.$$click=V,i(a,(()=>{var u=m(()=>o()>0);return()=>u()?`Resend in ${o()}s`:"Resend verification email"})()),d(()=>a.disabled=o()>0),a}}),t),y.$$input=a=>I(a.currentTarget.value),C.$$input=a=>D(a.currentTarget.value),i(k,r(R,{href:"/reset-password",class:"auth-form__forgot",children:"Forgot password?"})),i(L,(()=>{var a=m(()=>!!g());return()=>a()?Y():"Sign in"})()),d(()=>L.disabled=g()),d(()=>y.value=h()),d(()=>C.value=_()),e})(),(()=>{var e=Q();return e.firstChild,i(e,r(R,{href:"/register",class:"auth-footer__link",children:"Sign up"}),null),e})()]}})]};B(["click","input"]);export{se as default};
1
+ import{a as n,D as A,e as F,g as r,T as q,M as W,S as f,i,m,h as d,A as R,t as s,d as B}from"./vendor-pl6Q4jbW.js";import{S as U}from"./SocialButtons-B55DOj5X.js";import{u as j,s as x}from"./index-GDrFii05.js";import"./auth-DmX5tAfx.js";var z=s("<div class=auth-header><h1 class=auth-header__title>Connecting...</h1><p class=auth-header__subtitle>Setting up your local session"),G=s("<div class=auth-header><h1 class=auth-header__title>Welcome back</h1><p class=auth-header__subtitle>Take control of your OpenClaw costs"),H=s("<div class=auth-divider><span class=auth-divider__text>or"),J=s("<button type=button class=auth-form__link-btn>"),K=s('<form class=auth-form><label class=auth-form__label>Email<input class=auth-form__input type=email placeholder=you@example.com required></label><label class=auth-form__label>Password<input class=auth-form__input type=password placeholder="Enter your password"required></label><div class=auth-form__actions></div><button class=auth-form__submit type=submit>'),Q=s("<div class=auth-footer><span>Don't have an account? "),X=s("<div class=auth-form__error role=alert>"),Y=s("<span class=spinner>");const Z=60,se=()=>{const[h,I]=n(""),[_,D]=n(""),[p,l]=n(""),[g,v]=n(!1),[M,$]=n(!1),[o,b]=n(0),[w,S]=n(!1),[O]=A();F(async()=>{if(O.error&&l("Login failed. Please try again or use a different method."),await j()){S(!0);try{if((await fetch("/api/auth/local-session",{credentials:"include"})).ok){window.location.href="/";return}}catch{}S(!1)}});const P=()=>{b(Z);const e=setInterval(()=>{b(t=>t<=1?(clearInterval(e),0):t-1)},1e3)},T=async e=>{e.preventDefault(),l(""),$(!1),v(!0);const{error:t}=await x.signIn.email({email:h(),password:_()});if(v(!1),t){const c=t.message??"";if(c.toLowerCase().includes("email is not verified")||t.code==="EMAIL_NOT_VERIFIED"){$(!0),l("Please verify your email before signing in.");return}l(c||"Invalid email or password");return}window.location.href="/"},V=async()=>{if(o()>0)return;const{error:e}=await x.sendVerificationEmail({email:h(),callbackURL:"/"});if(e){l(e.message??"Failed to resend verification email");return}P(),l("Verification email sent! Check your inbox.")};return[r(q,{children:"Sign In - Manifest"}),r(W,{name:"description",content:"Sign in to Manifest to monitor your AI agents."}),r(f,{get when(){return w()},get children(){return z()}}),r(f,{get when(){return!w()},get children(){return[G(),r(U,{}),H(),(()=>{var e=K(),t=e.firstChild,c=t.firstChild,y=c.nextSibling,E=t.nextSibling,N=E.firstChild,C=N.nextSibling,k=E.nextSibling,L=k.nextSibling;return e.addEventListener("submit",T),i(e,(()=>{var a=m(()=>!!p());return()=>a()&&(()=>{var u=X();return i(u,p),u})()})(),t),i(e,r(f,{get when(){return M()},get children(){var a=J();return a.$$click=V,i(a,(()=>{var u=m(()=>o()>0);return()=>u()?`Resend in ${o()}s`:"Resend verification email"})()),d(()=>a.disabled=o()>0),a}}),t),y.$$input=a=>I(a.currentTarget.value),C.$$input=a=>D(a.currentTarget.value),i(k,r(R,{href:"/reset-password",class:"auth-form__forgot",children:"Forgot password?"})),i(L,(()=>{var a=m(()=>!!g());return()=>a()?Y():"Sign in"})()),d(()=>L.disabled=g()),d(()=>y.value=h()),d(()=>C.value=_()),e})(),(()=>{var e=Q();return e.firstChild,i(e,r(R,{href:"/register",class:"auth-footer__link",children:"Sign up"}),null),e})()]}})]};B(["click","input"]);export{se as default};
@@ -1 +1 @@
1
- import{a as b,p as L,n as Z,b as ee,k as U,o as te,f as A,z as j,i as d,g as a,m as O,T as se,M as ae,h as B,S as p,F as re,t as g,d as ne}from"./vendor-pl6Q4jbW.js";import{d as le,p as ie,b as V,E as oe}from"./index-B-_-ALFn.js";import{g as ce,S as de,M as ge,D as ue,a as me}from"./overview-ovS5UqVd.js";import{P as pe}from"./Pagination-Ctujg2Tx.js";import{g as ve,a as he}from"./routing-BctS6Vb_.js";import{p as fe}from"./model-display-Cg0qmmLo.js";import{P as _e}from"./routing-utils-C_UAqgEO.js";import"./auth-DmX5tAfx.js";import"./AuthBadge-zJLfTd7g.js";import"./SetupStepAddProvider-D3OEzrCA.js";import"./CopyButton-DlLfDy-9.js";function be(i=50){const[I,x]=b([void 0]),[y,v]=b(0),[M,h]=b(!1),N=L(()=>y()+1),E=L(()=>I()[y()]),k=L(()=>M());function P(f){f?(h(!0),x(o=>{const S=y()+1,$=[...o];return $[S]=f,$})):h(!1)}function R(){M()&&v(f=>f+1)}function F(){y()<=0||v(f=>f-1)}function C(){x([void 0]),v(0),h(!1)}return{currentPage:N,currentCursor:E,hasNextPage:k,previousPage:F,nextPage:R,recordResponse:P,resetPage:C,pageSize:i}}var xe=g('<div class=cost-range-filter><input type=number class=cost-range-filter__input placeholder="Min $"aria-label="Minimum cost filter"min=0 step=0.01><span class=cost-range-filter__sep>&ndash;</span><input type=number class=cost-range-filter__input placeholder="Max $"aria-label="Maximum cost filter"min=0 step=0.01>'),ye=g('<button class="btn btn--primary btn--sm">Set up agent'),$e=g('<div class=empty-state><div class=empty-state__title>No messages yet</div><p>Connect a provider to start routing LLM calls.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Enable routing</button><div class=empty-state__img-wrapper><img src=/example-messages.svg alt="Example message log showing LLM call history"class=empty-state__img loading=lazy>',!0,!1,!1),Me=g('<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class=panel__title style=margin-bottom:0>Messages</div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>0 results</span></div><div class=model-filter__empty><p class=model-filter__empty-title>No messages match your filters</p><p class=model-filter__empty-hint>Try adjusting your provider or cost filters to see more results.</p><button class="btn btn--outline btn--sm"type=button>Clear filters'),ke=g('<div class=waiting-banner><i class="bxd bx-florist"></i><p>No messages yet. They appear seconds after your first LLM call.'),Ce=g("<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class=panel__title style=margin-bottom:0>Messages</div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))> total</span></div><div class=data-table-scroll>"),Se=g("<div class=container--full><div class=page-header><div><h1>Messages</h1><span class=breadcrumb>Full log of every LLM call. Filter by provider or cost.</span></div><div class=header-controls>"),we=g('<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class="skeleton skeleton--text"style=width:80px;height:16px></div><div class="skeleton skeleton--text"style=width:60px;height:14px></div></div><div class=data-table-scroll><table class=data-table><thead><tr><th>Date</th><th>Message</th><th>Cost</th><th>Total Tokens</th><th>Input</th><th>Output</th><th>Model</th><th>Cache</th><th>Duration</th><th>Status</th></tr></thead><tbody>'),Ne=g('<tr><td><div class="skeleton skeleton--text"style=width:90px></div></td><td><div class="skeleton skeleton--text"style=width:55px></div></td><td><div class="skeleton skeleton--text"style=width:40px></div></td><td><div class="skeleton skeleton--text"style=width:40px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:110px></div></td><td><div class="skeleton skeleton--text"style=width:90px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:50px>'),Pe=g('<div class=empty-state><div class=empty-state__title>No messages yet</div><p>Set up your agent and send a message. Every LLM call shows up here.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Set up agent</button><div class=empty-state__img-wrapper><img src=/example-messages.svg alt="Example message log showing LLM call history"class=empty-state__img loading=lazy>',!0,!1,!1);const je=()=>{const i=Z(),I=ee();fe();const[x,y]=b(""),[v,M]=b(""),[h,N]=b(""),[E,k]=b(!1),[P]=b(!!localStorage.getItem(`setup_completed_${i.agentName}`)||le()===!0),[R]=U(()=>i.agentName,e=>ve(decodeURIComponent(e))),[F]=U(()=>i.agentName,e=>he(decodeURIComponent(e))),C=()=>F()?.enabled===!0,f=e=>{const s=e.match(/^custom:([^/]+)\//);if(!s)return;const _=s[1];return R()?.find(u=>u.id===_)?.name},o=be(50);let S,$;te(()=>{clearTimeout(S),clearTimeout($)});const q=e=>{clearTimeout(S),S=setTimeout(()=>M(e),400)},H=e=>{clearTimeout($),$=setTimeout(()=>N(e),400)};A(j([x,v,h],()=>o.resetPage(),{defer:!0}));const[l,{refetch:G}]=U(()=>({provider:x(),costMin:v(),costMax:h(),agentName:i.agentName,_ping:ie(),cursor:o.currentCursor(),limit:o.pageSize}),e=>{const s={};return e.provider&&(s.provider=e.provider),e.costMin&&(s.cost_min=e.costMin),e.costMax&&(s.cost_max=e.costMax),e.agentName&&(s.agent_name=e.agentName),e.cursor&&(s.cursor=e.cursor),s.limit=String(e.limit),ce(s)});A(j(()=>l(),e=>{e&&o.recordResponse(e.next_cursor)}));const z=()=>x()!==""||v()!==""||h()!=="",T=()=>{const e=l();return e&&e.total_count===0},D=()=>T()&&!z()&&!C(),J=()=>T()&&z(),K=()=>!T()||C()&&!z(),Q=()=>{y(""),M(""),N("")},W=e=>_e.find(_=>_.id===e)?.name??e,X=L(()=>[{label:"All providers",value:""},...(l()?.providers??[]).map(e=>({label:W(e),value:e}))]),Y=e=>{const s=l()?.items;if(!s)return;const _=s.find(t=>t.fallback_from_model===e&&t.status==="ok");if(!_)return;const u=document.getElementById(`msg-${_.id}`);u&&(u.scrollIntoView({behavior:"smooth",block:"center"}),u.classList.add("msg-highlight"),setTimeout(()=>u.classList.remove("msg-highlight"),2e3))};return(()=>{var e=Se(),s=e.firstChild,_=s.firstChild,u=_.nextSibling;return d(e,a(se,{get children(){return[O(()=>V()??decodeURIComponent(i.agentName))," Messages - Manifest"]}}),s),d(e,a(ae,{name:"description",get content(){return`Browse all messages sent and received by ${V()??decodeURIComponent(i.agentName)}. Filter by provider or cost.`}}),s),d(u,a(p,{get when(){return!D()},get children(){return[a(de,{get value(){return x()},onChange:y,get options(){return X()}}),(()=>{var t=xe(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return r.$$input=m=>q(m.currentTarget.value),n.$$input=m=>H(m.currentTarget.value),B(()=>r.value=v()),B(()=>n.value=h()),t})()]}}),null),d(u,a(p,{get when(){return O(()=>!!D())()&&!P()},get children(){var t=ye();return t.$$click=()=>k(!0),t}}),null),d(e,a(p,{get when(){return l()!==void 0||!l.loading},get fallback(){return(()=>{var t=we(),r=t.firstChild,c=r.nextSibling,n=c.firstChild,m=n.firstChild,w=m.nextSibling;return d(w,a(re,{each:[1,2,3,4,5,6,7,8,9,10],children:()=>Ne()})),t})()},get children(){return a(p,{get when(){return!l.error},get fallback(){return a(oe,{get error(){return l.error},onRetry:G})},get children(){return[a(p,{get when(){return D()},get children(){return a(p,{get when(){return P()},get fallback(){return(()=>{var t=Pe(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return n.$$click=()=>k(!0),t})()},get children(){var t=$e(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return n.$$click=()=>I(`/agents/${encodeURIComponent(i.agentName)}/routing`,{state:{openProviders:!0}}),t}})}}),a(p,{get when(){return J()},get children(){var t=Me(),r=t.firstChild,c=r.nextSibling,n=c.firstChild,m=n.nextSibling,w=m.nextSibling;return w.$$click=Q,t}}),a(p,{get when(){return K()},get children(){return[a(p,{get when(){return O(()=>!!T())()&&C()},get children(){return ke()}}),(()=>{var t=Ce(),r=t.firstChild,c=r.firstChild,n=c.nextSibling,m=n.firstChild,w=r.nextSibling;return d(n,()=>l()?.total_count??0,m),d(w,a(ge,{get items(){return l()?.items??[]},columns:ue,get agentName(){return i.agentName},customProviderName:f,onFallbackErrorClick:Y,rowIdPrefix:"msg-",showHeaderTooltips:!0,expandable:!0})),d(t,a(pe,{get currentPage(){return o.currentPage},totalItems:()=>l()?.total_count??0,get pageSize(){return o.pageSize},get hasNextPage(){return o.hasNextPage},isLoading:()=>l.loading,get onPrevious(){return o.previousPage},get onNext(){return o.nextPage}}),null),t})()]}})]}})}}),null),d(e,a(me,{get open(){return E()},get agentName(){return decodeURIComponent(i.agentName)},onClose:()=>k(!1)}),null),e})()};ne(["input","click"]);export{je as default};
1
+ import{a as b,p as L,n as Z,b as ee,k as U,o as te,f as A,z as j,i as d,g as a,m as O,T as se,M as ae,h as B,S as p,F as re,t as g,d as ne}from"./vendor-pl6Q4jbW.js";import{d as le,p as ie,b as V,E as oe}from"./index-GDrFii05.js";import{g as ce,S as de,M as ge,D as ue,a as me}from"./overview-Cs7MQYj5.js";import{P as pe}from"./Pagination-Ctujg2Tx.js";import{g as ve,a as he}from"./routing-BZ9syGr8.js";import{p as fe}from"./model-display-DuPPAYS6.js";import{P as _e}from"./routing-utils-CPSSk62K.js";import"./auth-DmX5tAfx.js";import"./AuthBadge-zJLfTd7g.js";import"./SetupStepAddProvider-D3OEzrCA.js";import"./CopyButton-DlLfDy-9.js";function be(i=50){const[I,x]=b([void 0]),[y,v]=b(0),[M,h]=b(!1),N=L(()=>y()+1),E=L(()=>I()[y()]),k=L(()=>M());function P(f){f?(h(!0),x(o=>{const S=y()+1,$=[...o];return $[S]=f,$})):h(!1)}function R(){M()&&v(f=>f+1)}function F(){y()<=0||v(f=>f-1)}function C(){x([void 0]),v(0),h(!1)}return{currentPage:N,currentCursor:E,hasNextPage:k,previousPage:F,nextPage:R,recordResponse:P,resetPage:C,pageSize:i}}var xe=g('<div class=cost-range-filter><input type=number class=cost-range-filter__input placeholder="Min $"aria-label="Minimum cost filter"min=0 step=0.01><span class=cost-range-filter__sep>&ndash;</span><input type=number class=cost-range-filter__input placeholder="Max $"aria-label="Maximum cost filter"min=0 step=0.01>'),ye=g('<button class="btn btn--primary btn--sm">Set up agent'),$e=g('<div class=empty-state><div class=empty-state__title>No messages yet</div><p>Connect a provider to start routing LLM calls.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Enable routing</button><div class=empty-state__img-wrapper><img src=/example-messages.svg alt="Example message log showing LLM call history"class=empty-state__img loading=lazy>',!0,!1,!1),Me=g('<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class=panel__title style=margin-bottom:0>Messages</div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>0 results</span></div><div class=model-filter__empty><p class=model-filter__empty-title>No messages match your filters</p><p class=model-filter__empty-hint>Try adjusting your provider or cost filters to see more results.</p><button class="btn btn--outline btn--sm"type=button>Clear filters'),ke=g('<div class=waiting-banner><i class="bxd bx-florist"></i><p>No messages yet. They appear seconds after your first LLM call.'),Ce=g("<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class=panel__title style=margin-bottom:0>Messages</div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))> total</span></div><div class=data-table-scroll>"),Se=g("<div class=container--full><div class=page-header><div><h1>Messages</h1><span class=breadcrumb>Full log of every LLM call. Filter by provider or cost.</span></div><div class=header-controls>"),we=g('<div class=panel><div style=display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--gap-lg)><div class="skeleton skeleton--text"style=width:80px;height:16px></div><div class="skeleton skeleton--text"style=width:60px;height:14px></div></div><div class=data-table-scroll><table class=data-table><thead><tr><th>Date</th><th>Message</th><th>Cost</th><th>Total Tokens</th><th>Input</th><th>Output</th><th>Model</th><th>Cache</th><th>Duration</th><th>Status</th></tr></thead><tbody>'),Ne=g('<tr><td><div class="skeleton skeleton--text"style=width:90px></div></td><td><div class="skeleton skeleton--text"style=width:55px></div></td><td><div class="skeleton skeleton--text"style=width:40px></div></td><td><div class="skeleton skeleton--text"style=width:40px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:110px></div></td><td><div class="skeleton skeleton--text"style=width:90px></div></td><td><div class="skeleton skeleton--text"style=width:35px></div></td><td><div class="skeleton skeleton--text"style=width:50px>'),Pe=g('<div class=empty-state><div class=empty-state__title>No messages yet</div><p>Set up your agent and send a message. Every LLM call shows up here.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Set up agent</button><div class=empty-state__img-wrapper><img src=/example-messages.svg alt="Example message log showing LLM call history"class=empty-state__img loading=lazy>',!0,!1,!1);const je=()=>{const i=Z(),I=ee();fe();const[x,y]=b(""),[v,M]=b(""),[h,N]=b(""),[E,k]=b(!1),[P]=b(!!localStorage.getItem(`setup_completed_${i.agentName}`)||le()===!0),[R]=U(()=>i.agentName,e=>ve(decodeURIComponent(e))),[F]=U(()=>i.agentName,e=>he(decodeURIComponent(e))),C=()=>F()?.enabled===!0,f=e=>{const s=e.match(/^custom:([^/]+)\//);if(!s)return;const _=s[1];return R()?.find(u=>u.id===_)?.name},o=be(50);let S,$;te(()=>{clearTimeout(S),clearTimeout($)});const q=e=>{clearTimeout(S),S=setTimeout(()=>M(e),400)},H=e=>{clearTimeout($),$=setTimeout(()=>N(e),400)};A(j([x,v,h],()=>o.resetPage(),{defer:!0}));const[l,{refetch:G}]=U(()=>({provider:x(),costMin:v(),costMax:h(),agentName:i.agentName,_ping:ie(),cursor:o.currentCursor(),limit:o.pageSize}),e=>{const s={};return e.provider&&(s.provider=e.provider),e.costMin&&(s.cost_min=e.costMin),e.costMax&&(s.cost_max=e.costMax),e.agentName&&(s.agent_name=e.agentName),e.cursor&&(s.cursor=e.cursor),s.limit=String(e.limit),ce(s)});A(j(()=>l(),e=>{e&&o.recordResponse(e.next_cursor)}));const z=()=>x()!==""||v()!==""||h()!=="",T=()=>{const e=l();return e&&e.total_count===0},D=()=>T()&&!z()&&!C(),J=()=>T()&&z(),K=()=>!T()||C()&&!z(),Q=()=>{y(""),M(""),N("")},W=e=>_e.find(_=>_.id===e)?.name??e,X=L(()=>[{label:"All providers",value:""},...(l()?.providers??[]).map(e=>({label:W(e),value:e}))]),Y=e=>{const s=l()?.items;if(!s)return;const _=s.find(t=>t.fallback_from_model===e&&t.status==="ok");if(!_)return;const u=document.getElementById(`msg-${_.id}`);u&&(u.scrollIntoView({behavior:"smooth",block:"center"}),u.classList.add("msg-highlight"),setTimeout(()=>u.classList.remove("msg-highlight"),2e3))};return(()=>{var e=Se(),s=e.firstChild,_=s.firstChild,u=_.nextSibling;return d(e,a(se,{get children(){return[O(()=>V()??decodeURIComponent(i.agentName))," Messages - Manifest"]}}),s),d(e,a(ae,{name:"description",get content(){return`Browse all messages sent and received by ${V()??decodeURIComponent(i.agentName)}. Filter by provider or cost.`}}),s),d(u,a(p,{get when(){return!D()},get children(){return[a(de,{get value(){return x()},onChange:y,get options(){return X()}}),(()=>{var t=xe(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return r.$$input=m=>q(m.currentTarget.value),n.$$input=m=>H(m.currentTarget.value),B(()=>r.value=v()),B(()=>n.value=h()),t})()]}}),null),d(u,a(p,{get when(){return O(()=>!!D())()&&!P()},get children(){var t=ye();return t.$$click=()=>k(!0),t}}),null),d(e,a(p,{get when(){return l()!==void 0||!l.loading},get fallback(){return(()=>{var t=we(),r=t.firstChild,c=r.nextSibling,n=c.firstChild,m=n.firstChild,w=m.nextSibling;return d(w,a(re,{each:[1,2,3,4,5,6,7,8,9,10],children:()=>Ne()})),t})()},get children(){return a(p,{get when(){return!l.error},get fallback(){return a(oe,{get error(){return l.error},onRetry:G})},get children(){return[a(p,{get when(){return D()},get children(){return a(p,{get when(){return P()},get fallback(){return(()=>{var t=Pe(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return n.$$click=()=>k(!0),t})()},get children(){var t=$e(),r=t.firstChild,c=r.nextSibling,n=c.nextSibling;return n.$$click=()=>I(`/agents/${encodeURIComponent(i.agentName)}/routing`,{state:{openProviders:!0}}),t}})}}),a(p,{get when(){return J()},get children(){var t=Me(),r=t.firstChild,c=r.nextSibling,n=c.firstChild,m=n.nextSibling,w=m.nextSibling;return w.$$click=Q,t}}),a(p,{get when(){return K()},get children(){return[a(p,{get when(){return O(()=>!!T())()&&C()},get children(){return ke()}}),(()=>{var t=Ce(),r=t.firstChild,c=r.firstChild,n=c.nextSibling,m=n.firstChild,w=r.nextSibling;return d(n,()=>l()?.total_count??0,m),d(w,a(ge,{get items(){return l()?.items??[]},columns:ue,get agentName(){return i.agentName},customProviderName:f,onFallbackErrorClick:Y,rowIdPrefix:"msg-",showHeaderTooltips:!0,expandable:!0})),d(t,a(pe,{get currentPage(){return o.currentPage},totalItems:()=>l()?.total_count??0,get pageSize(){return o.pageSize},get hasNextPage(){return o.hasNextPage},isLoading:()=>l.loading,get onPrevious(){return o.previousPage},get onNext(){return o.nextPage}}),null),t})()]}})]}})}}),null),d(e,a(me,{get open(){return E()},get agentName(){return decodeURIComponent(i.agentName)},onClose:()=>k(!1)}),null),e})()};ne(["input","click"]);export{je as default};
@@ -1 +1 @@
1
- import{a as F,p as M,o as ve,i as t,g as d,S as b,F as j,h as A,s as T,m as re,t as m,l as le,d as ie,k as he,f as fe,z as _e,T as pe,M as ge}from"./vendor-pl6Q4jbW.js";import{E as $e}from"./index-B-_-ALFn.js";import{g as H,p as ye,I as ne}from"./model-display-Cg0qmmLo.js";import{p as ae,r as de,e as xe}from"./routing-utils-C_UAqgEO.js";import{P as we}from"./Pagination-Ctujg2Tx.js";import"./auth-DmX5tAfx.js";var be=m("<span class=model-filter__provider-icon aria-hidden=true>"),ke=m('<svg class=model-filter__provider-icon viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=3 y=3 width=18 height=18 rx=3></rect><circle cx=12 cy=12 r=3>'),Ce=m("<div class=model-filter__dropdown-group><div class=model-filter__dropdown-label>Providers"),Me=m("<div class=model-filter__dropdown-group><div class=model-filter__dropdown-label>Models"),Pe=m("<div class=model-filter__dropdown role=listbox>"),Se=m("<span> of <!> models"),Ie=m("<button class=model-filter__clear-all type=button>Clear filters"),Le=m("<div class=model-filter__tags>"),ze=m('<div class=model-filter><div class=model-filter__row><div class=model-filter__combobox><div class=model-filter__input-wrapper><svg class=model-filter__search-icon width=15 height=15 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=11 cy=11 r=8></circle><path d="m21 21-4.3-4.3"></path></svg><input type=text class=model-filter__search placeholder="Search models or providers..."role=combobox aria-autocomplete=list aria-label="Search models or providers"></div></div><div class=model-filter__summary>'),De=m("<button class=model-filter__dropdown-item type=button role=option><span class=model-filter__dropdown-item-name></span><span class=model-filter__dropdown-item-type>Provider"),Fe=m("<button class=model-filter__dropdown-item type=button role=option><span class=model-filter__dropdown-item-name></span><span class=model-filter__dropdown-item-type>Model"),Ne=m("<span> models"),Re=m("<span class=model-filter__tag-type>Model:"),Ee=m('<span class=model-filter__tag><span class=model-filter__tag-value></span><button class=model-filter__tag-remove type=button><svg width=10 height=10 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M18 6 6 18"></path><path d="m6 6 12 12">');const oe=n=>{const x=()=>n.size??16,P=()=>de(n.provider),S=()=>{const v=P();return v?ae(v,x()):null};return d(b,{get when(){return S()},get fallback(){return(()=>{var v=ke();return A(_=>{var p=x(),k=x();return p!==_.e&&T(v,"width",_.e=p),k!==_.t&&T(v,"height",_.t=k),_},{e:void 0,t:void 0}),v})()},get children(){var v=be();return t(v,S),v}})},Ae=n=>{const[x,P]=F(""),[S,v]=F(!1),[_,p]=F(-1);let k,D;const w=()=>n.selectedModels.size>0||n.selectedProviders.size>0,I=M(()=>{const r=[];for(const u of n.selectedProviders)r.push({type:"Provider",value:u});for(const u of n.selectedModels)r.push({type:"Model",value:u});return r}),q=M(()=>{const r=x().toLowerCase().trim();return r.length<2?[]:n.allProviders.filter(u=>!n.selectedProviders.has(u)&&u.toLowerCase().includes(r)).slice(0,5)}),B=M(()=>{const r=x().toLowerCase().trim();return r.length<2?[]:n.allModels.filter(u=>!n.selectedModels.has(u)&&u.toLowerCase().includes(r)).slice(0,5)}),N=M(()=>{const r=[];for(const u of q())r.push({type:"Provider",value:u});for(const u of B())r.push({type:"Model",value:u});return r}),E=r=>{r.type==="Provider"?n.onAddProvider(r.value):n.onAddModel(r.value),P(""),v(!1),p(-1),D?.focus()},K=r=>{r.type==="Provider"?n.onRemoveProvider(r.value):n.onRemoveModel(r.value)},L=r=>{const u=r.currentTarget.value;P(u),p(-1),v(u.trim().length>=2)},R=r=>{const u=N();if(r.key==="ArrowDown")r.preventDefault(),!S()&&x().trim().length>=2&&v(!0),p(g=>Math.min(g+1,u.length-1));else if(r.key==="ArrowUp")r.preventDefault(),p(g=>Math.max(g-1,0));else if(r.key==="Enter"){r.preventDefault();const g=_();g>=0&&g<u.length&&E(u[g])}else if(r.key==="Escape")v(!1),p(-1);else if(r.key==="Backspace"&&x()===""){const g=I();g.length>0&&K(g[g.length-1])}},O=r=>{k&&!k.contains(r.target)&&(v(!1),p(-1))};return typeof document<"u"&&(document.addEventListener("click",O),ve(()=>{document.removeEventListener("click",O)})),(()=>{var r=ze(),u=r.firstChild,g=u.firstChild,U=g.firstChild,Q=U.firstChild,e=Q.nextSibling,c=g.nextSibling,l=k;typeof l=="function"?le(l,g):k=g,e.$$keydown=R,e.$$input=L;var h=D;return typeof h=="function"?le(h,e):D=e,t(g,d(b,{get when(){return re(()=>!!S())()&&N().length>0},get children(){var a=Pe();return t(a,d(b,{get when(){return q().length>0},get children(){var o=Ce();return o.firstChild,t(o,d(j,{get each(){return q()},children:s=>{const f=()=>N().findIndex(i=>i.type==="Provider"&&i.value===s);return(()=>{var i=De(),y=i.firstChild;return i.addEventListener("mouseenter",()=>p(f())),i.$$click=()=>E({type:"Provider",value:s}),t(y,d(oe,{provider:s,size:16}),null),t(y,s,null),A($=>{var z=_()===f(),C=_()===f();return z!==$.e&&i.classList.toggle("model-filter__dropdown-item--highlighted",$.e=z),C!==$.t&&T(i,"aria-selected",$.t=C),$},{e:void 0,t:void 0}),i})()}}),null),o}}),null),t(a,d(b,{get when(){return B().length>0},get children(){var o=Me();return o.firstChild,t(o,d(j,{get each(){return B()},children:s=>{const f=()=>N().findIndex(i=>i.type==="Model"&&i.value===s);return(()=>{var i=Fe(),y=i.firstChild;return i.addEventListener("mouseenter",()=>p(f())),i.$$click=()=>E({type:"Model",value:s}),t(y,()=>H(s)),A($=>{var z=_()===f(),C=_()===f();return z!==$.e&&i.classList.toggle("model-filter__dropdown-item--highlighted",$.e=z),C!==$.t&&T(i,"aria-selected",$.t=C),$},{e:void 0,t:void 0}),i})()}}),null),o}}),null),a}}),null),t(c,d(b,{get when(){return w()},get fallback(){return(()=>{var a=Ne(),o=a.firstChild;return t(a,()=>n.totalCount,o),a})()},get children(){return[(()=>{var a=Se(),o=a.firstChild,s=o.nextSibling;return s.nextSibling,t(a,()=>n.filteredCount,o),t(a,()=>n.totalCount,s),a})(),(()=>{var a=Ie();return a.$$click=()=>{n.onClearFilters(),P(""),v(!1)},a})()]}})),t(r,d(b,{get when(){return I().length>0},get children(){var a=Le();return t(a,d(j,{get each(){return I()},children:o=>(()=>{var s=Ee(),f=s.firstChild,i=f.nextSibling;return t(s,d(b,{get when(){return o.type==="Provider"},get children(){return d(oe,{get provider(){return o.value},size:16})}}),f),t(s,d(b,{get when(){return o.type==="Model"},get children(){return Re()}}),f),t(f,(()=>{var y=re(()=>o.type==="Model");return()=>y()?H(o.value):o.value})()),i.$$click=()=>K(o),A(y=>{var $=o.type==="Provider",z=`Remove ${o.type} ${o.value}`;return $!==y.e&&s.classList.toggle("model-filter__tag--provider",y.e=$),z!==y.t&&T(i,"aria-label",y.t=z),y},{e:void 0,t:void 0}),s})()})),a}}),null),A(()=>T(e,"aria-expanded",S())),A(()=>e.value=x()),r})()};ie(["input","keydown","click"]);function Te(n,x=25){const[P,S]=F(1),v=M(()=>n().length),_=M(()=>Math.max(1,Math.ceil(v()/x))),p=M(()=>{const w=P(),I=_();return Math.min(Math.max(1,w),I)}),k=M(()=>{const w=(p()-1)*x;return n().slice(w,w+x)}),D=M(()=>p()<_());return{currentPage:p,pageItems:k,totalItems:v,totalPages:_,hasNextPage:D,previousPage:()=>S(w=>Math.max(1,w-1)),nextPage:()=>S(w=>w<_()?w+1:w),resetPage:()=>S(1),pageSize:x}}var qe=m("<span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Last updated: "),Be=m("<table class=data-table><thead><tr><th class=data-table__sortable>Model</th><th class=data-table__sortable>Model ID</th><th class=data-table__sortable>Provider</th><th class=data-table__sortable>Cost to send / 1M tokens</th><th class=data-table__sortable>Cost to receive / 1M tokens</th></tr></thead><tbody>"),je=m("<div class=panel>"),Ke=m("<div class=container--full><div class=page-header><div><h1>Model Prices</h1><span class=breadcrumb>Compare per-token pricing across all supported LLM providers and models"),Oe=m('<div class=panel style=min-height:600px><div class=model-filter><div class=model-filter__row><div class="skeleton skeleton--text"style=width:280px;height:36px;border-radius:var(--radius)></div><div class=model-filter__summary><div class="skeleton skeleton--text"style=width:80px></div></div></div></div><table class=data-table style=width:100%><thead><tr><th>Model</th><th>Model ID</th><th>Provider</th><th>Cost to send / 1M tokens</th><th>Cost to receive / 1M tokens</th></tr></thead><tbody>'),Ue=m('<tr><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:50%>'),He=m('<div class=model-filter__empty><p class=model-filter__empty-title>No models match your filters</p><p class=model-filter__empty-hint>Try selecting a different provider or model, or clear all filters to see every model.</p><button class="btn btn--outline btn--sm"type=button>Clear filters'),Qe=m("<span class=free-tag>Free"),Ge=m("<span style=display:inline-flex;flex-shrink:0>"),Je=m("<tr><td style=font-size:var(--font-size-sm)></td><td style=font-family:var(--font-mono);font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))></td><td><span style=display:inline-flex;align-items:center;gap:6px></span></td><td style=font-family:var(--font-mono)></td><td style=font-family:var(--font-mono)>");function se(n){return n==null?"—":n<.01?`$${n.toFixed(4)}`:n<1?`$${n.toFixed(3)}`:`$${n.toFixed(2)}`}const tt=()=>{ye();const[n,{refetch:x}]=he(()=>xe()),[P,S]=F("provider"),[v,_]=F("asc"),[p,k]=F(new Set),[D,w]=F(new Set),I=e=>{P()===e?_(c=>c==="asc"?"desc":"asc"):(S(e),_("asc"))},q=M(()=>{const e=n()?.models;return e?[...new Set(e.map(l=>l.provider))].sort((l,h)=>l.localeCompare(h)):[]}),B=M(()=>{const e=n()?.models;return e?[...new Set(e.map(l=>l.model_name))].sort((l,h)=>l.localeCompare(h)):[]}),N=M(()=>{const e=n()?.models;if(!e)return[];const c=p(),l=D();return e.filter(h=>!(c.size>0&&!c.has(h.model_name)||l.size>0&&!l.has(h.provider)))}),E=e=>(e.display_name||H(e.model_name)).replace(/\s*\(free\)/i,""),K=M(()=>{const e=N();if(!e.length)return[];const c=P(),l=v();return[...e].sort((h,a)=>{if(c==="display_name"){const f=E(h),i=E(a);return l==="asc"?f.localeCompare(i):i.localeCompare(f)}const o=h[c],s=a[c];return typeof o=="string"&&typeof s=="string"?l==="asc"?o.localeCompare(s):s.localeCompare(o):o==null&&s==null?0:o==null?1:s==null?-1:l==="asc"?o-s:s-o})}),L=Te(K,25);fe(_e([p,D,P,v],()=>L.resetPage(),{defer:!0}));const R=e=>P()!==e?"":v()==="asc"?" ▲":" ▼",O=e=>{k(c=>{const l=new Set(c);return l.add(e),l})},r=e=>{k(c=>{const l=new Set(c);return l.delete(e),l})},u=e=>{w(c=>{const l=new Set(c);return l.add(e),l})},g=e=>{w(c=>{const l=new Set(c);return l.delete(e),l})},U=()=>{k(new Set),w(new Set)},Q=e=>e?new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}):"Never";return(()=>{var e=Ke(),c=e.firstChild;return c.firstChild,t(e,d(pe,{children:"Model Prices - Manifest"}),c),t(e,d(ge,{name:"description",content:"Compare per-token pricing across all major LLM providers."}),c),t(c,d(b,{get when(){return n()?.lastSyncedAt},get children(){var l=qe();return l.firstChild,t(l,()=>Q(n().lastSyncedAt),null),l}}),null),t(e,d(b,{get when(){return!n.loading},get fallback(){return(()=>{var l=Oe(),h=l.firstChild,a=h.nextSibling,o=a.firstChild,s=o.nextSibling;return t(s,d(j,{each:[1,2,3,4,5,6,7,8,9,10],children:()=>Ue()})),l})()},get children(){return d(b,{get when(){return!n.error},get fallback(){return d($e,{get error(){return n.error},onRetry:x})},get children(){var l=je();return t(l,d(Ae,{get allModels(){return B()},get allProviders(){return q()},get selectedModels(){return p()},get selectedProviders(){return D()},onAddModel:O,onRemoveModel:r,onAddProvider:u,onRemoveProvider:g,onClearFilters:U,get totalCount(){return n()?.models?.length??0},get filteredCount(){return N().length}}),null),t(l,d(b,{get when(){return L.totalItems()>0},get fallback(){return(()=>{var h=He(),a=h.firstChild,o=a.nextSibling,s=o.nextSibling;return s.$$click=U,h})()},get children(){return[(()=>{var h=Be(),a=h.firstChild,o=a.firstChild,s=o.firstChild;s.firstChild;var f=s.nextSibling;f.firstChild;var i=f.nextSibling;i.firstChild;var y=i.nextSibling;y.firstChild;var $=y.nextSibling;$.firstChild;var z=a.nextSibling;return s.$$click=()=>I("display_name"),t(s,()=>R("display_name"),null),f.$$click=()=>I("model_name"),t(f,()=>R("model_name"),null),i.$$click=()=>I("provider"),t(i,()=>R("provider"),null),y.$$click=()=>I("input_price_per_million"),t(y,()=>R("input_price_per_million"),null),t(y,d(ne,{text:"Tokens are small chunks of text. Send cost is what you pay for the input you give the model."}),null),$.$$click=()=>I("output_price_per_million"),t($,()=>R("output_price_per_million"),null),t($,d(ne,{text:"Tokens are small chunks of text. Receive cost is what you pay for the output the model returns."}),null),t(z,d(j,{get each(){return L.pageItems()},children:C=>{const J=()=>C.display_name||H(C.model_name),ce=()=>/\(free\)/i.test(J()),ue=()=>J().replace(/\s*\(free\)/i,""),V=()=>de(C.provider);return(()=>{var W=Je(),G=W.firstChild,X=G.nextSibling,Y=X.nextSibling,Z=Y.firstChild,ee=Y.nextSibling,me=ee.nextSibling;return t(G,ue,null),t(G,d(b,{get when(){return ce()},get children(){return[" ",Qe()]}}),null),t(X,()=>C.model_name),t(Z,d(b,{get when(){return V()},get children(){var te=Ge();return t(te,()=>ae(V(),16)),te}}),null),t(Z,()=>C.provider,null),t(ee,()=>se(C.input_price_per_million)),t(me,()=>se(C.output_price_per_million)),W})()}})),h})(),d(we,{get currentPage(){return L.currentPage},get totalItems(){return L.totalItems},get pageSize(){return L.pageSize},get hasNextPage(){return L.hasNextPage},get onPrevious(){return L.previousPage},get onNext(){return L.nextPage}})]}}),null),l}})}}),null),e})()};ie(["click"]);export{tt as default};
1
+ import{a as F,p as M,o as ve,i as t,g as d,S as b,F as j,h as A,s as T,m as re,t as m,l as le,d as ie,k as he,f as fe,z as _e,T as pe,M as ge}from"./vendor-pl6Q4jbW.js";import{E as $e}from"./index-GDrFii05.js";import{g as H,p as ye,I as ne}from"./model-display-DuPPAYS6.js";import{p as ae,r as de,e as xe}from"./routing-utils-CPSSk62K.js";import{P as we}from"./Pagination-Ctujg2Tx.js";import"./auth-DmX5tAfx.js";var be=m("<span class=model-filter__provider-icon aria-hidden=true>"),ke=m('<svg class=model-filter__provider-icon viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><rect x=3 y=3 width=18 height=18 rx=3></rect><circle cx=12 cy=12 r=3>'),Ce=m("<div class=model-filter__dropdown-group><div class=model-filter__dropdown-label>Providers"),Me=m("<div class=model-filter__dropdown-group><div class=model-filter__dropdown-label>Models"),Pe=m("<div class=model-filter__dropdown role=listbox>"),Se=m("<span> of <!> models"),Ie=m("<button class=model-filter__clear-all type=button>Clear filters"),Le=m("<div class=model-filter__tags>"),ze=m('<div class=model-filter><div class=model-filter__row><div class=model-filter__combobox><div class=model-filter__input-wrapper><svg class=model-filter__search-icon width=15 height=15 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2 stroke-linecap=round stroke-linejoin=round aria-hidden=true><circle cx=11 cy=11 r=8></circle><path d="m21 21-4.3-4.3"></path></svg><input type=text class=model-filter__search placeholder="Search models or providers..."role=combobox aria-autocomplete=list aria-label="Search models or providers"></div></div><div class=model-filter__summary>'),De=m("<button class=model-filter__dropdown-item type=button role=option><span class=model-filter__dropdown-item-name></span><span class=model-filter__dropdown-item-type>Provider"),Fe=m("<button class=model-filter__dropdown-item type=button role=option><span class=model-filter__dropdown-item-name></span><span class=model-filter__dropdown-item-type>Model"),Ne=m("<span> models"),Re=m("<span class=model-filter__tag-type>Model:"),Ee=m('<span class=model-filter__tag><span class=model-filter__tag-value></span><button class=model-filter__tag-remove type=button><svg width=10 height=10 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2.5 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path d="M18 6 6 18"></path><path d="m6 6 12 12">');const oe=n=>{const x=()=>n.size??16,P=()=>de(n.provider),S=()=>{const v=P();return v?ae(v,x()):null};return d(b,{get when(){return S()},get fallback(){return(()=>{var v=ke();return A(_=>{var p=x(),k=x();return p!==_.e&&T(v,"width",_.e=p),k!==_.t&&T(v,"height",_.t=k),_},{e:void 0,t:void 0}),v})()},get children(){var v=be();return t(v,S),v}})},Ae=n=>{const[x,P]=F(""),[S,v]=F(!1),[_,p]=F(-1);let k,D;const w=()=>n.selectedModels.size>0||n.selectedProviders.size>0,I=M(()=>{const r=[];for(const u of n.selectedProviders)r.push({type:"Provider",value:u});for(const u of n.selectedModels)r.push({type:"Model",value:u});return r}),q=M(()=>{const r=x().toLowerCase().trim();return r.length<2?[]:n.allProviders.filter(u=>!n.selectedProviders.has(u)&&u.toLowerCase().includes(r)).slice(0,5)}),B=M(()=>{const r=x().toLowerCase().trim();return r.length<2?[]:n.allModels.filter(u=>!n.selectedModels.has(u)&&u.toLowerCase().includes(r)).slice(0,5)}),N=M(()=>{const r=[];for(const u of q())r.push({type:"Provider",value:u});for(const u of B())r.push({type:"Model",value:u});return r}),E=r=>{r.type==="Provider"?n.onAddProvider(r.value):n.onAddModel(r.value),P(""),v(!1),p(-1),D?.focus()},K=r=>{r.type==="Provider"?n.onRemoveProvider(r.value):n.onRemoveModel(r.value)},L=r=>{const u=r.currentTarget.value;P(u),p(-1),v(u.trim().length>=2)},R=r=>{const u=N();if(r.key==="ArrowDown")r.preventDefault(),!S()&&x().trim().length>=2&&v(!0),p(g=>Math.min(g+1,u.length-1));else if(r.key==="ArrowUp")r.preventDefault(),p(g=>Math.max(g-1,0));else if(r.key==="Enter"){r.preventDefault();const g=_();g>=0&&g<u.length&&E(u[g])}else if(r.key==="Escape")v(!1),p(-1);else if(r.key==="Backspace"&&x()===""){const g=I();g.length>0&&K(g[g.length-1])}},O=r=>{k&&!k.contains(r.target)&&(v(!1),p(-1))};return typeof document<"u"&&(document.addEventListener("click",O),ve(()=>{document.removeEventListener("click",O)})),(()=>{var r=ze(),u=r.firstChild,g=u.firstChild,U=g.firstChild,Q=U.firstChild,e=Q.nextSibling,c=g.nextSibling,l=k;typeof l=="function"?le(l,g):k=g,e.$$keydown=R,e.$$input=L;var h=D;return typeof h=="function"?le(h,e):D=e,t(g,d(b,{get when(){return re(()=>!!S())()&&N().length>0},get children(){var a=Pe();return t(a,d(b,{get when(){return q().length>0},get children(){var o=Ce();return o.firstChild,t(o,d(j,{get each(){return q()},children:s=>{const f=()=>N().findIndex(i=>i.type==="Provider"&&i.value===s);return(()=>{var i=De(),y=i.firstChild;return i.addEventListener("mouseenter",()=>p(f())),i.$$click=()=>E({type:"Provider",value:s}),t(y,d(oe,{provider:s,size:16}),null),t(y,s,null),A($=>{var z=_()===f(),C=_()===f();return z!==$.e&&i.classList.toggle("model-filter__dropdown-item--highlighted",$.e=z),C!==$.t&&T(i,"aria-selected",$.t=C),$},{e:void 0,t:void 0}),i})()}}),null),o}}),null),t(a,d(b,{get when(){return B().length>0},get children(){var o=Me();return o.firstChild,t(o,d(j,{get each(){return B()},children:s=>{const f=()=>N().findIndex(i=>i.type==="Model"&&i.value===s);return(()=>{var i=Fe(),y=i.firstChild;return i.addEventListener("mouseenter",()=>p(f())),i.$$click=()=>E({type:"Model",value:s}),t(y,()=>H(s)),A($=>{var z=_()===f(),C=_()===f();return z!==$.e&&i.classList.toggle("model-filter__dropdown-item--highlighted",$.e=z),C!==$.t&&T(i,"aria-selected",$.t=C),$},{e:void 0,t:void 0}),i})()}}),null),o}}),null),a}}),null),t(c,d(b,{get when(){return w()},get fallback(){return(()=>{var a=Ne(),o=a.firstChild;return t(a,()=>n.totalCount,o),a})()},get children(){return[(()=>{var a=Se(),o=a.firstChild,s=o.nextSibling;return s.nextSibling,t(a,()=>n.filteredCount,o),t(a,()=>n.totalCount,s),a})(),(()=>{var a=Ie();return a.$$click=()=>{n.onClearFilters(),P(""),v(!1)},a})()]}})),t(r,d(b,{get when(){return I().length>0},get children(){var a=Le();return t(a,d(j,{get each(){return I()},children:o=>(()=>{var s=Ee(),f=s.firstChild,i=f.nextSibling;return t(s,d(b,{get when(){return o.type==="Provider"},get children(){return d(oe,{get provider(){return o.value},size:16})}}),f),t(s,d(b,{get when(){return o.type==="Model"},get children(){return Re()}}),f),t(f,(()=>{var y=re(()=>o.type==="Model");return()=>y()?H(o.value):o.value})()),i.$$click=()=>K(o),A(y=>{var $=o.type==="Provider",z=`Remove ${o.type} ${o.value}`;return $!==y.e&&s.classList.toggle("model-filter__tag--provider",y.e=$),z!==y.t&&T(i,"aria-label",y.t=z),y},{e:void 0,t:void 0}),s})()})),a}}),null),A(()=>T(e,"aria-expanded",S())),A(()=>e.value=x()),r})()};ie(["input","keydown","click"]);function Te(n,x=25){const[P,S]=F(1),v=M(()=>n().length),_=M(()=>Math.max(1,Math.ceil(v()/x))),p=M(()=>{const w=P(),I=_();return Math.min(Math.max(1,w),I)}),k=M(()=>{const w=(p()-1)*x;return n().slice(w,w+x)}),D=M(()=>p()<_());return{currentPage:p,pageItems:k,totalItems:v,totalPages:_,hasNextPage:D,previousPage:()=>S(w=>Math.max(1,w-1)),nextPage:()=>S(w=>w<_()?w+1:w),resetPage:()=>S(1),pageSize:x}}var qe=m("<span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>Last updated: "),Be=m("<table class=data-table><thead><tr><th class=data-table__sortable>Model</th><th class=data-table__sortable>Model ID</th><th class=data-table__sortable>Provider</th><th class=data-table__sortable>Cost to send / 1M tokens</th><th class=data-table__sortable>Cost to receive / 1M tokens</th></tr></thead><tbody>"),je=m("<div class=panel>"),Ke=m("<div class=container--full><div class=page-header><div><h1>Model Prices</h1><span class=breadcrumb>Compare per-token pricing across all supported LLM providers and models"),Oe=m('<div class=panel style=min-height:600px><div class=model-filter><div class=model-filter__row><div class="skeleton skeleton--text"style=width:280px;height:36px;border-radius:var(--radius)></div><div class=model-filter__summary><div class="skeleton skeleton--text"style=width:80px></div></div></div></div><table class=data-table style=width:100%><thead><tr><th>Model</th><th>Model ID</th><th>Provider</th><th>Cost to send / 1M tokens</th><th>Cost to receive / 1M tokens</th></tr></thead><tbody>'),Ue=m('<tr><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:50%>'),He=m('<div class=model-filter__empty><p class=model-filter__empty-title>No models match your filters</p><p class=model-filter__empty-hint>Try selecting a different provider or model, or clear all filters to see every model.</p><button class="btn btn--outline btn--sm"type=button>Clear filters'),Qe=m("<span class=free-tag>Free"),Ge=m("<span style=display:inline-flex;flex-shrink:0>"),Je=m("<tr><td style=font-size:var(--font-size-sm)></td><td style=font-family:var(--font-mono);font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))></td><td><span style=display:inline-flex;align-items:center;gap:6px></span></td><td style=font-family:var(--font-mono)></td><td style=font-family:var(--font-mono)>");function se(n){return n==null?"—":n<.01?`$${n.toFixed(4)}`:n<1?`$${n.toFixed(3)}`:`$${n.toFixed(2)}`}const tt=()=>{ye();const[n,{refetch:x}]=he(()=>xe()),[P,S]=F("provider"),[v,_]=F("asc"),[p,k]=F(new Set),[D,w]=F(new Set),I=e=>{P()===e?_(c=>c==="asc"?"desc":"asc"):(S(e),_("asc"))},q=M(()=>{const e=n()?.models;return e?[...new Set(e.map(l=>l.provider))].sort((l,h)=>l.localeCompare(h)):[]}),B=M(()=>{const e=n()?.models;return e?[...new Set(e.map(l=>l.model_name))].sort((l,h)=>l.localeCompare(h)):[]}),N=M(()=>{const e=n()?.models;if(!e)return[];const c=p(),l=D();return e.filter(h=>!(c.size>0&&!c.has(h.model_name)||l.size>0&&!l.has(h.provider)))}),E=e=>(e.display_name||H(e.model_name)).replace(/\s*\(free\)/i,""),K=M(()=>{const e=N();if(!e.length)return[];const c=P(),l=v();return[...e].sort((h,a)=>{if(c==="display_name"){const f=E(h),i=E(a);return l==="asc"?f.localeCompare(i):i.localeCompare(f)}const o=h[c],s=a[c];return typeof o=="string"&&typeof s=="string"?l==="asc"?o.localeCompare(s):s.localeCompare(o):o==null&&s==null?0:o==null?1:s==null?-1:l==="asc"?o-s:s-o})}),L=Te(K,25);fe(_e([p,D,P,v],()=>L.resetPage(),{defer:!0}));const R=e=>P()!==e?"":v()==="asc"?" ▲":" ▼",O=e=>{k(c=>{const l=new Set(c);return l.add(e),l})},r=e=>{k(c=>{const l=new Set(c);return l.delete(e),l})},u=e=>{w(c=>{const l=new Set(c);return l.add(e),l})},g=e=>{w(c=>{const l=new Set(c);return l.delete(e),l})},U=()=>{k(new Set),w(new Set)},Q=e=>e?new Date(e).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"}):"Never";return(()=>{var e=Ke(),c=e.firstChild;return c.firstChild,t(e,d(pe,{children:"Model Prices - Manifest"}),c),t(e,d(ge,{name:"description",content:"Compare per-token pricing across all major LLM providers."}),c),t(c,d(b,{get when(){return n()?.lastSyncedAt},get children(){var l=qe();return l.firstChild,t(l,()=>Q(n().lastSyncedAt),null),l}}),null),t(e,d(b,{get when(){return!n.loading},get fallback(){return(()=>{var l=Oe(),h=l.firstChild,a=h.nextSibling,o=a.firstChild,s=o.nextSibling;return t(s,d(j,{each:[1,2,3,4,5,6,7,8,9,10],children:()=>Ue()})),l})()},get children(){return d(b,{get when(){return!n.error},get fallback(){return d($e,{get error(){return n.error},onRetry:x})},get children(){var l=je();return t(l,d(Ae,{get allModels(){return B()},get allProviders(){return q()},get selectedModels(){return p()},get selectedProviders(){return D()},onAddModel:O,onRemoveModel:r,onAddProvider:u,onRemoveProvider:g,onClearFilters:U,get totalCount(){return n()?.models?.length??0},get filteredCount(){return N().length}}),null),t(l,d(b,{get when(){return L.totalItems()>0},get fallback(){return(()=>{var h=He(),a=h.firstChild,o=a.nextSibling,s=o.nextSibling;return s.$$click=U,h})()},get children(){return[(()=>{var h=Be(),a=h.firstChild,o=a.firstChild,s=o.firstChild;s.firstChild;var f=s.nextSibling;f.firstChild;var i=f.nextSibling;i.firstChild;var y=i.nextSibling;y.firstChild;var $=y.nextSibling;$.firstChild;var z=a.nextSibling;return s.$$click=()=>I("display_name"),t(s,()=>R("display_name"),null),f.$$click=()=>I("model_name"),t(f,()=>R("model_name"),null),i.$$click=()=>I("provider"),t(i,()=>R("provider"),null),y.$$click=()=>I("input_price_per_million"),t(y,()=>R("input_price_per_million"),null),t(y,d(ne,{text:"Tokens are small chunks of text. Send cost is what you pay for the input you give the model."}),null),$.$$click=()=>I("output_price_per_million"),t($,()=>R("output_price_per_million"),null),t($,d(ne,{text:"Tokens are small chunks of text. Receive cost is what you pay for the output the model returns."}),null),t(z,d(j,{get each(){return L.pageItems()},children:C=>{const J=()=>C.display_name||H(C.model_name),ce=()=>/\(free\)/i.test(J()),ue=()=>J().replace(/\s*\(free\)/i,""),V=()=>de(C.provider);return(()=>{var W=Je(),G=W.firstChild,X=G.nextSibling,Y=X.nextSibling,Z=Y.firstChild,ee=Y.nextSibling,me=ee.nextSibling;return t(G,ue,null),t(G,d(b,{get when(){return ce()},get children(){return[" ",Qe()]}}),null),t(X,()=>C.model_name),t(Z,d(b,{get when(){return V()},get children(){var te=Ge();return t(te,()=>ae(V(),16)),te}}),null),t(Z,()=>C.provider,null),t(ee,()=>se(C.input_price_per_million)),t(me,()=>se(C.output_price_per_million)),W})()}})),h})(),d(we,{get currentPage(){return L.currentPage},get totalItems(){return L.totalItems},get pageSize(){return L.pageSize},get hasNextPage(){return L.hasNextPage},get onPrevious(){return L.previousPage},get onNext(){return L.nextPage}})]}}),null),l}})}}),null),e})()};ie(["click"]);export{tt as default};
@@ -1 +1 @@
1
- import{e as pe,f as K,z as $e,o as ye,t as v,l as Q,i as m,g as h,S as x,h as H,q as be,d as ue,p as ge,m as E,s as j,B as xe,C as ke,F as q,n as we,u as Ce,b as Se,a as U,k as ie,T as Me,M as Ne,A as Re}from"./vendor-pl6Q4jbW.js";import{u as X}from"./charts-Cty976qB.js";import{I as Te,g as De,p as Ae}from"./model-display-Cg0qmmLo.js";import{f as he,a as me,c as Ve,i as Ie,p as Pe,b as oe,E as Le}from"./index-B-_-ALFn.js";import{a as Ee,b as Fe}from"./AuthBadge-zJLfTd7g.js";import{i as W,c as Ue,s as de,p as ze,a as Ge,g as He}from"./routing-utils-C_UAqgEO.js";import{S as Oe,M as Be,C as Ye,a as je}from"./overview-ovS5UqVd.js";import{g as We}from"./routing-BctS6Vb_.js";import"./auth-DmX5tAfx.js";import"./SetupStepAddProvider-D3OEzrCA.js";import"./CopyButton-DlLfDy-9.js";function _e(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function R(e){return`hsl(${_e(e)})`}function I(e,t){return`hsl(${_e(e)} / ${t})`}function Je(e,t){return(a=>{if(!isFinite(a.bbox.top)||!isFinite(a.bbox.height)||a.bbox.height===0)return e;const n=a.ctx.createLinearGradient(0,a.bbox.top,0,a.bbox.top+a.bbox.height);return n.addColorStop(0,e),n.addColorStop(1,t),n})}function O(e,t){return Je(I(e,t),"transparent")}function Z(e){let t=null,a=null;const n=260;function o(){if(t)return;const l=e.buildChart();l&&(t=l,t.setCursor({left:-1,top:-1}))}pe(()=>{e.data()?.length&&(a=new ResizeObserver(()=>{t?t.setSize({width:e.el().clientWidth,height:n}):o()}),a.observe(e.el()),setTimeout(o,50))}),K($e(e.data,()=>{t&&(t.destroy(),t=null),e.data()?.length&&setTimeout(o,0)},{defer:!0})),ye(()=>{a?.disconnect(),t?.destroy(),t=null})}function ee(e,t){return{show:!0,x:!0,y:!1,drag:{x:!1,y:!1},points:{show:!0,size:8,fill:t,stroke:e,width:2},move:(a,n,o)=>{const l=a.posToIdx(n);return[l!=null&&a.data[0]?.[l]!=null?Math.round(a.valToPos(a.data[0][l],"x")):n,o]}}}const ve=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function te(e){const t=Y.has(e??"");return(a,n)=>{if(n==null||isNaN(n))return"";const o=new Date(n*1e3),l=ve[o.getMonth()],d=o.getDate();if(t)return`${l} ${d}`;const c=String(o.getHours()).padStart(2,"0"),s=String(o.getMinutes()).padStart(2,"0");return`${l} ${d}, ${c}:${s}`}}function Ke(e,t){return t==null||isNaN(t)?"":t>0&&t<.01?"< $0.01":`$${t.toFixed(2)}`}function G(e,t){if(t==null||isNaN(t))return"";if(t=Math.round(t),t>=1e6){const a=t/1e6;return`${a%1===0?a.toFixed(0):a.toFixed(1)}M`}if(t>=1e3){const a=t/1e3;return`${a%1===0?a.toFixed(0):a.toFixed(1)}k`}return t.toString()}const qe={"1h":3600,"24h":86400,"7d":604800,"30d":2592e3},Y=new Set(["7d","30d"]),fe=new Set(["1h","24h"]),Qe={"7d":7,"30d":30},Xe={"24h":24};function Ze(e){return qe[e]??86400}function ae(e,t,a,n){const o=Xe[t];if(o){const s=new Date;s.setMinutes(0,0,0);const r=new Map;for(let i=o;i>=0;i--){const u=new Date(s.getTime()-i*36e5),_=u.getFullYear(),f=String(u.getMonth()+1).padStart(2,"0"),k=String(u.getDate()).padStart(2,"0"),w=String(u.getHours()).padStart(2,"0"),y=`${_}-${f}-${k}T${w}:00:00`;r.set(y,n(y))}for(const i of e){const u=String(i[a]??"");r.has(u)&&r.set(u,i)}return Array.from(r.values())}const l=Qe[t];if(!l)return e;const d=new Date;d.setHours(0,0,0,0);const c=new Map;for(let s=l;s>=0;s--){const r=new Date(d);r.setDate(d.getDate()-s);const i=r.getFullYear(),u=String(r.getMonth()+1).padStart(2,"0"),_=String(r.getDate()).padStart(2,"0"),f=`${i}-${u}-${_}`;c.set(f,n(f))}for(const s of e){const r=String(s[a]??"");c.has(r)&&c.set(r,s)}return Array.from(c.values())}function et(e,t){const a=new Date(e*1e3);if(fe.has(t)){const l=String(a.getHours()).padStart(2,"0"),d=String(a.getMinutes()).padStart(2,"0");return`${l}:${d}`}const n=ve[a.getMonth()],o=a.getDate();return`${n} ${o}`}function ne(e){return Y.has(e??"")}function se(e,t,a){const n=Y.has(a??""),o=a??"";return[{stroke:e,grid:{stroke:t,width:1},ticks:{stroke:t,width:1},font:'11px "DM Sans", sans-serif',gap:8,...n?{splits:d=>Array.from(d.data[0])}:{},values:(d,c)=>{let s=o;s||(s=(d.scales.x?.max??c[c.length-1]??0)-(d.scales.x?.min??c[0]??0)>86400?"7d":"24h");const r=c.map(u=>et(u,s)),i=r.map((u,_)=>_>0&&u===r[_-1]?"":u);if(n){const u=i.filter(f=>f!==""),_=u.length>20?5:u.length>14?3:1;if(_>1){let f=0;return i.map(k=>k===""?"":f++%_===0?k:"")}}return i}},{stroke:e,grid:{stroke:t,width:1},ticks:{show:!1},font:'11px "DM Sans", sans-serif',size:54,gap:8}]}function re(e){return e.map(t=>{if(t.hour){const d=t.hour.replace(" ","T");return new Date(d).getTime()/1e3}const a=t.date??"",[n,o,l]=a.split("-").map(Number);return new Date(n,o-1,l).getTime()/1e3})}const ce=6*3600;function le(e){const t=Y.has(e??""),a=fe.has(e??""),n=e?Ze(e):0;return(o,l,d)=>{const c=Date.now()/1e3;if(t)return[l,d];if(a)return[c-n,c];const s=Math.min(d,c);return s-l<ce?[s-ce,s]:[l,s]}}function B(e){return e.map(t=>Number.isFinite(t)?t:null)}var tt=v("<div style=width:100%;min-height:260px>");const at=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R("--chart-1"),o=I("--foreground",.55),l=I("--foreground",.05),d=R("--card"),c=se(o,l,e.range);return c[1]={...c[1],values:(s,r)=>r.map(i=>isNaN(i)?"–":i%1===0?`$${i}`:`$${i.toFixed(2)}`)},new X({width:a,height:260,padding:[16,16,0,0],cursor:ee(d,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:(s,r,i)=>[0,i>0?i*1.15:1]}},axes:c,series:[{value:te(e.range)},{label:"Cost",stroke:n,width:2.5,fill:O("--chart-1",.25),value:Ke}]},(()=>{const s=e.range==="24h",r=ae(e.data,e.range??"",s?"hour":"date",i=>s?{hour:i,cost:0}:{date:i,cost:0});return[re(r),B(r.map(i=>i.cost))]})(),t)}}),(()=>{var a=tt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var nt=v("<div style=width:100%;min-height:260px>");const st=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R(e.colorVar),o=I("--foreground",.55),l=I("--foreground",.05),d=R("--card");return new X({width:a,height:260,padding:[16,16,0,0],cursor:ee(d,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:(c,s,r)=>[0,r>0?r*1.1:10]}},axes:se(o,l,e.range),series:[{value:te(e.range)},{label:e.label,stroke:n,width:2.5,fill:O(e.colorVar,.25)}]},(()=>{const c=ae(e.data,e.range??"","time",r=>({time:r,value:0})),s=c.map(r=>r.time.includes("T")||r.time.includes(" ")?{hour:r.time}:{date:r.time});return[re(s),B(c.map(r=>r.value))]})(),t)}}),(()=>{var a=nt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var rt=v("<div style=width:100%;min-height:260px>");const lt=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R("--bar-input"),o=R("--bar-output"),l=R("--bar-output-axis"),d=I("--foreground",.55),c=I("--foreground",.05),s=R("--card"),r=(i,u,_)=>[0,_>0?_*1.1:100];return new X({width:a,height:260,padding:[16,0,0,0],cursor:ee(s,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:r},y2:{auto:!0,range:r}},axes:(()=>{const i=se(d,c,e.range);return i[1]={...i[1],stroke:n,values:(u,_)=>_.map(f=>G(u,f))},i.push({scale:"y2",side:1,stroke:l,grid:{show:!1},ticks:{show:!1},font:'11px "DM Sans", sans-serif',size:54,gap:8,values:(u,_)=>_.map(f=>G(u,f))}),i})(),series:[{value:te(e.range)},{label:"Sent to AI",scale:"y",stroke:n,width:2.5,fill:O("--bar-input",.25),value:G},{label:"Received from AI",scale:"y2",stroke:o,width:2,fill:O("--bar-output",.15),value:G}]},(()=>{const i=e.range==="24h",u=ae(e.data,e.range??"",i?"hour":"date",_=>i?{hour:_,input_tokens:0,output_tokens:0}:{date:_,input_tokens:0,output_tokens:0});return[re(u),B(u.map(_=>_.input_tokens)),B(u.map(_=>_.output_tokens))]})(),t)}}),(()=>{var a=rt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var it=v("<span>%"),ot=v('<div class=chart-card><div class=chart-card__header><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Cost</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Token usage</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Messages</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div></div><div class=chart-card__body>'),dt=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No cost data for this time range"),ct=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No token data for this time range"),ut=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No message data for this time range");const J=(e,t,a)=>{if(e===0||Math.abs(t)<.005)return null;const n=Math.max(-999,Math.min(999,Math.round(e)));if(n===0)return null;let o;a==="neutral"?o="trend trend--neutral":o=n>0?"trend trend--up-bad":"trend trend--down-good";const l=n>0?"+":"";return(()=>{var d=it(),c=d.firstChild;return be(d,o),m(d,l,c),m(d,n,c),d})()},gt=e=>(()=>{var t=ot(),a=t.firstChild,n=a.firstChild,o=n.firstChild,l=o.nextSibling,d=l.firstChild,c=n.nextSibling,s=c.firstChild;s.firstChild;var r=s.nextSibling,i=r.firstChild,u=c.nextSibling,_=u.firstChild,f=_.nextSibling,k=f.firstChild,w=a.nextSibling;return n.$$click=()=>e.onViewChange("cost"),m(d,()=>he(e.costValue)??"$0.00"),m(l,()=>J(e.costTrendPct,e.costValue,"inverted"),null),c.$$click=()=>e.onViewChange("tokens"),m(s,h(Te,{text:"Tokens are units of text that AI models process. More tokens = higher cost."}),null),m(i,()=>me(e.tokensValue)),m(r,()=>J(e.tokensTrendPct,e.tokensValue,"inverted"),null),u.$$click=()=>e.onViewChange("messages"),m(k,()=>e.messagesValue),m(f,()=>J(e.messagesTrendPct,e.messagesValue,"neutral"),null),m(w,h(x,{get when(){return e.activeView==="cost"},get children(){return h(x,{get when(){return e.costUsage?.length},get fallback(){return dt()},get children(){return h(at,{get data(){return e.costUsage},get range(){return e.range}})}})}}),null),m(w,h(x,{get when(){return e.activeView==="tokens"},get children(){return h(x,{get when(){return e.tokenUsage?.length},get fallback(){return ct()},get children(){return h(lt,{get data(){return e.tokenUsage},get range(){return e.range}})}})}}),null),m(w,h(x,{get when(){return e.activeView==="messages"},get children(){return h(x,{get when(){return e.messageChartData.length},get fallback(){return ut()},get children(){return h(st,{get data(){return e.messageChartData},label:"Messages",colorVar:"--chart-1",get range(){return e.range}})}})}}),null),H(y=>{var T=e.activeView==="cost",D=e.activeView==="tokens",p=e.activeView==="messages";return T!==y.e&&n.classList.toggle("chart-card__stat--active",y.e=T),D!==y.t&&c.classList.toggle("chart-card__stat--active",y.t=D),p!==y.a&&u.classList.toggle("chart-card__stat--active",y.a=p),y},{e:void 0,t:void 0,a:void 0}),t})();ue(["click"]);var ht=v('<div class=panel style=margin-top:var(--gap-lg)><div class=panel__title>Cost by Model</div><p style="font-size:var(--font-size-xs);color:hsl(var(--muted-foreground));margin:-8px 0 12px">How much each model costs you</p><table class=data-table><thead><tr><th>Model</th><th>Tokens</th><th>% of total</th><th>Cost</th></tr></thead><tbody>'),mt=v("<tr><td style=font-family:var(--font-mono);font-size:var(--font-size-sm)><span style=display:inline-flex;align-items:center;gap:4px></span></td><td></td><td><div style=display:flex;align-items:center;gap:8px><div style=width:40px;height:4px;border-radius:2px;background:hsl(var(--muted));overflow:hidden><div></div></div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>%</span></div></td><td style=font-weight:600>"),_t=v("<span class=provider-card__logo-letter style=width:16px;height:16px;font-size:9px;flex-shrink:0;border-radius:50%>"),vt=v("<span style=display:inline-flex;flex-shrink:0;position:relative>");const ft=e=>{const t=ge(()=>[...e.rows].sort((a,n)=>n.estimated_cost-a.estimated_cost));return(()=>{var a=ht(),n=a.firstChild,o=n.nextSibling,l=o.nextSibling,d=l.firstChild,c=d.nextSibling;return m(c,h(q,{get each(){return t()},children:s=>(()=>{var r=mt(),i=r.firstChild,u=i.firstChild,_=i.nextSibling,f=_.nextSibling,k=f.firstChild,w=k.firstChild,y=w.firstChild,T=w.nextSibling,D=T.firstChild,p=f.nextSibling;return m(u,(()=>{var C=E(()=>!!(s.model&&W(s.model)==="custom"));return()=>C()?(()=>{const b=e.customProviderName(s.model),M=Ue(b??"",16,void 0,s.model??void 0);if(M)return M;const F=(b??de(s.model)).charAt(0).toUpperCase();return(()=>{var P=_t();return j(P,"title",b),m(P,F),H(g=>xe(P,"background",Ve(b??""))),P})()})():E(()=>!!(s.model&&W(s.model)))()?(()=>{var b=vt();return m(b,()=>ze(W(s.model),14),null),m(b,()=>Ee(s.auth_type,8),null),H(()=>j(b,"title",`${Ge(s.model)} (${Fe(s.auth_type)})`)),b})():null})(),null),m(u,(()=>{var C=E(()=>!!s.model);return()=>C()?E(()=>!!s.model.startsWith("custom:"))()?`custom:${e.customProviderName(s.model)??"Custom"}/${de(s.model)}`:s.display_name||De(s.model):s.model})(),null),m(_,()=>me(s.tokens)),m(T,()=>Math.round(s.share_pct),D),m(p,()=>he(s.estimated_cost)??"—"),H(C=>{var b=`width: ${s.share_pct}%; height: 100%; background: hsl(var(--chart-1)); border-radius: 2px;`,M=s.estimated_cost>0&&s.estimated_cost<.01?`$${s.estimated_cost.toFixed(6)}`:void 0;return C.e=ke(y,b,C.e),M!==C.t&&j(p,"title",C.t=M),C},{e:void 0,t:void 0}),r})()})),a})()};var pt=v('<div class=chart-card><div class=chart-card__header><div class="chart-card__stat chart-card__stat--active"><span class=chart-card__label>Cost</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:80px;height:28px></div></div></div><div class=chart-card__stat><span class=chart-card__label>Token usage</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:70px;height:28px></div></div></div><div class=chart-card__stat><span class=chart-card__label>Messages</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:50px;height:28px></div></div></div></div><div class=chart-card__body><div class="skeleton skeleton--rect"style=width:100%;height:260px>'),$t=v("<div class=panel><div class=panel__title style=display:flex;justify-content:space-between;align-items:center>Recent Messages<span class=view-more-link style=pointer-events:none;opacity:0.4>View more</span></div><table class=data-table><thead><tr><th>Date</th><th>Message</th><th>Cost</th><th>Model</th><th>Tokens</th><th>Status</th></tr></thead><tbody>"),yt=v('<div class=panel style=margin-top:var(--gap-lg)><div class=panel__title>Cost by Model</div><p style="font-size:var(--font-size-xs);color:hsl(var(--muted-foreground));margin:-8px 0 12px">How much each AI model is costing you</p><table class=data-table><thead><tr><th>Model</th><th>Tokens</th><th>% of total</th><th>Cost</th></tr></thead><tbody>'),bt=v('<tr><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:40%></div></td><td><div class="skeleton skeleton--text"style=width:50%>'),xt=v('<tr><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:40%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:40%>');const kt=()=>[pt(),(()=>{var e=$t(),t=e.firstChild,a=t.nextSibling,n=a.firstChild,o=n.nextSibling;return m(o,h(q,{each:[1,2,3,4,5],children:()=>bt()})),e})(),(()=>{var e=yt(),t=e.firstChild,a=t.nextSibling,n=a.nextSibling,o=n.firstChild,l=o.nextSibling;return m(l,h(q,{each:[1,2,3],children:()=>xt()})),e})()];var wt=v('<button class="btn btn--primary btn--sm">Set up agent'),Ct=v('<div class=empty-state><div class=empty-state__title>No activity yet</div><p>Connect a provider to start routing LLM calls.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Enable routing</button><div class=empty-state__img-wrapper><img src=/example-overview.svg alt="Example dashboard overview showing cost and token charts"class=empty-state__img loading=lazy>',!0,!1,!1),St=v("<div class=container--md><div class=page-header><div><h1>Overview</h1><span class=breadcrumb>Real-time summary of spending, tokens, and messages</span></div><div class=header-controls>"),Mt=v('<div class=empty-state><div class=empty-state__title>No activity yet</div><p>Set up your agent and send a message. Usage data shows up here.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Set up agent</button><div class=empty-state__img-wrapper><img src=/example-overview.svg alt="Example dashboard overview showing cost and token charts"class=empty-state__img loading=lazy>',!0,!1,!1),Nt=v('<div class=waiting-banner><i class="bxd bx-florist"></i><p>No activity yet. Your dashboard updates seconds after the first LLM call.'),Rt=v("<div class=panel><div class=panel__title style=display:flex;justify-content:space-between;align-items:center>Recent Messages");const Gt=()=>{const e=we(),t=Ce(),a=Se();Ae();const n="manifest_chart_range",o=new Set(["24h","7d","30d"]),l=localStorage.getItem(n),[d,c]=U(l&&o.has(l)?l:"30d"),[s,r]=U(!!l),i=g=>{c(g),r(!0),localStorage.setItem(n,g)},[u,_]=U("cost"),[f,k]=U(Ie(decodeURIComponent(e.agentName))),[w,y]=U(!!localStorage.getItem(`setup_completed_${e.agentName}`)),[T]=ie(()=>e.agentName,g=>We(decodeURIComponent(g))),D=g=>{const S=g.match(/^custom:([^/]+)\//);if(!S)return;const A=S[1];return T()?.find(z=>z.id===A)?.name},[p,{refetch:C}]=ie(()=>({range:d(),agentName:e.agentName,_ping:Pe()}),g=>He(g.range,g.agentName)),b=()=>{const g=p();return!!g&&(g.has_data!==!1||g.has_providers===!0)},M=()=>{const g=p();return!!g&&g.has_data===!1&&!g.has_providers};K(()=>{M()&&!w()&&!localStorage.getItem(`setup_dismissed_${e.agentName}`)&&k(!0)});const F=["30d","7d","24h"];K(()=>{if(s())return;const g=p();if(!g||g.has_data===!1&&!g.has_providers||(g.token_usage?.length??0)>0||(g.cost_usage?.length??0)>0||(g.message_usage?.length??0)>0)return;const A=F.indexOf(d());A<0||A>=F.length-1||c(F[A+1])});const P=ge(()=>p()?.message_usage?.map(S=>({time:S.hour??S.date??"",value:S.count}))??[]);return(()=>{var g=St(),S=g.firstChild,A=S.firstChild,z=A.nextSibling;return m(g,h(Me,{get children(){return[E(()=>oe()??decodeURIComponent(e.agentName))," Overview - Manifest"]}}),S),m(g,h(Ne,{name:"description",get content(){return`Monitor ${oe()??decodeURIComponent(e.agentName)} performance — costs, tokens, and activity.`}}),S),m(z,h(x,{get when(){return b()},get children(){return h(Oe,{get value(){return d()},onChange:i,options:[{label:"Last 24 hours",value:"24h"},{label:"Last 7 days",value:"7d"},{label:"Last 30 days",value:"30d"}]})}}),null),m(z,h(x,{get when(){return E(()=>!!M())()&&!w()},get children(){var N=wt();return N.$$click=()=>k(!0),N}}),null),m(g,h(x,{get when(){return p()!==void 0||!p.loading},get fallback(){return h(kt,{})},get children(){return h(x,{get when(){return!p.error},get fallback(){return h(Le,{get error(){return p.error},onRetry:C})},get children(){return[h(x,{get when(){return M()},get children(){return h(x,{get when(){return w()},get fallback(){return(()=>{var N=Mt(),$=N.firstChild,V=$.nextSibling,L=V.nextSibling;return L.$$click=()=>k(!0),N})()},get children(){var N=Ct(),$=N.firstChild,V=$.nextSibling,L=V.nextSibling;return L.$$click=()=>a(`/agents/${encodeURIComponent(e.agentName)}/routing`,{state:{openProviders:!0}}),N}})}}),h(x,{get when(){return b()},children:N=>{const $=()=>p();return[h(x,{get when(){return $().has_data===!1},get children(){return Nt()}}),h(gt,{get activeView(){return u()},onViewChange:_,get costValue(){return $().summary?.cost_today?.value??0},get costTrendPct(){return $().summary?.cost_today?.trend_pct??0},get tokensValue(){return $().summary?.tokens_today?.value??0},get tokensTrendPct(){return $().summary?.tokens_today?.trend_pct??0},get messagesValue(){return $().summary?.messages?.value??0},get messagesTrendPct(){return $().summary?.messages?.trend_pct??0},get costUsage(){return $().cost_usage},get tokenUsage(){return $().token_usage},get messageChartData(){return P()},get range(){return d()}}),(()=>{var V=Rt(),L=V.firstChild;return L.firstChild,m(L,h(Re,{get href(){return`/agents/${e.agentName}/messages`},class:"view-more-link",children:"View more"}),null),m(V,h(Be,{get items(){return $().recent_activity?.slice(0,5)??[]},columns:Ye,get agentName(){return e.agentName},customProviderName:D}),null),V})(),h(ft,{get rows(){return $().cost_by_model??[]},customProviderName:D})]}})]}})}}),null),m(g,h(je,{get open(){return f()},get agentName(){return decodeURIComponent(e.agentName)},get apiKey(){return t.state?.newApiKey??null},onClose:()=>{localStorage.setItem(`setup_dismissed_${e.agentName}`,"1"),k(!1)},onDone:()=>{localStorage.setItem(`setup_completed_${e.agentName}`,"1"),y(!0)},onGoToRouting:()=>{a(`/agents/${encodeURIComponent(e.agentName)}/routing`,{state:{openProviders:!0}})}}),null),g})()};ue(["click"]);export{Gt as default};
1
+ import{e as pe,f as K,z as $e,o as ye,t as v,l as Q,i as m,g as h,S as x,h as H,q as be,d as ue,p as ge,m as E,s as j,B as xe,C as ke,F as q,n as we,u as Ce,b as Se,a as U,k as ie,T as Me,M as Ne,A as Re}from"./vendor-pl6Q4jbW.js";import{u as X}from"./charts-Cty976qB.js";import{I as Te,g as De,p as Ae}from"./model-display-DuPPAYS6.js";import{f as he,a as me,c as Ve,i as Ie,p as Pe,b as oe,E as Le}from"./index-GDrFii05.js";import{a as Ee,b as Fe}from"./AuthBadge-zJLfTd7g.js";import{i as W,c as Ue,s as de,p as ze,a as Ge,g as He}from"./routing-utils-CPSSk62K.js";import{S as Oe,M as Be,C as Ye,a as je}from"./overview-Cs7MQYj5.js";import{g as We}from"./routing-BZ9syGr8.js";import"./auth-DmX5tAfx.js";import"./SetupStepAddProvider-D3OEzrCA.js";import"./CopyButton-DlLfDy-9.js";function _e(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function R(e){return`hsl(${_e(e)})`}function I(e,t){return`hsl(${_e(e)} / ${t})`}function Je(e,t){return(a=>{if(!isFinite(a.bbox.top)||!isFinite(a.bbox.height)||a.bbox.height===0)return e;const n=a.ctx.createLinearGradient(0,a.bbox.top,0,a.bbox.top+a.bbox.height);return n.addColorStop(0,e),n.addColorStop(1,t),n})}function O(e,t){return Je(I(e,t),"transparent")}function Z(e){let t=null,a=null;const n=260;function o(){if(t)return;const l=e.buildChart();l&&(t=l,t.setCursor({left:-1,top:-1}))}pe(()=>{e.data()?.length&&(a=new ResizeObserver(()=>{t?t.setSize({width:e.el().clientWidth,height:n}):o()}),a.observe(e.el()),setTimeout(o,50))}),K($e(e.data,()=>{t&&(t.destroy(),t=null),e.data()?.length&&setTimeout(o,0)},{defer:!0})),ye(()=>{a?.disconnect(),t?.destroy(),t=null})}function ee(e,t){return{show:!0,x:!0,y:!1,drag:{x:!1,y:!1},points:{show:!0,size:8,fill:t,stroke:e,width:2},move:(a,n,o)=>{const l=a.posToIdx(n);return[l!=null&&a.data[0]?.[l]!=null?Math.round(a.valToPos(a.data[0][l],"x")):n,o]}}}const ve=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function te(e){const t=Y.has(e??"");return(a,n)=>{if(n==null||isNaN(n))return"";const o=new Date(n*1e3),l=ve[o.getMonth()],d=o.getDate();if(t)return`${l} ${d}`;const c=String(o.getHours()).padStart(2,"0"),s=String(o.getMinutes()).padStart(2,"0");return`${l} ${d}, ${c}:${s}`}}function Ke(e,t){return t==null||isNaN(t)?"":t>0&&t<.01?"< $0.01":`$${t.toFixed(2)}`}function G(e,t){if(t==null||isNaN(t))return"";if(t=Math.round(t),t>=1e6){const a=t/1e6;return`${a%1===0?a.toFixed(0):a.toFixed(1)}M`}if(t>=1e3){const a=t/1e3;return`${a%1===0?a.toFixed(0):a.toFixed(1)}k`}return t.toString()}const qe={"1h":3600,"24h":86400,"7d":604800,"30d":2592e3},Y=new Set(["7d","30d"]),fe=new Set(["1h","24h"]),Qe={"7d":7,"30d":30},Xe={"24h":24};function Ze(e){return qe[e]??86400}function ae(e,t,a,n){const o=Xe[t];if(o){const s=new Date;s.setMinutes(0,0,0);const r=new Map;for(let i=o;i>=0;i--){const u=new Date(s.getTime()-i*36e5),_=u.getFullYear(),f=String(u.getMonth()+1).padStart(2,"0"),k=String(u.getDate()).padStart(2,"0"),w=String(u.getHours()).padStart(2,"0"),y=`${_}-${f}-${k}T${w}:00:00`;r.set(y,n(y))}for(const i of e){const u=String(i[a]??"");r.has(u)&&r.set(u,i)}return Array.from(r.values())}const l=Qe[t];if(!l)return e;const d=new Date;d.setHours(0,0,0,0);const c=new Map;for(let s=l;s>=0;s--){const r=new Date(d);r.setDate(d.getDate()-s);const i=r.getFullYear(),u=String(r.getMonth()+1).padStart(2,"0"),_=String(r.getDate()).padStart(2,"0"),f=`${i}-${u}-${_}`;c.set(f,n(f))}for(const s of e){const r=String(s[a]??"");c.has(r)&&c.set(r,s)}return Array.from(c.values())}function et(e,t){const a=new Date(e*1e3);if(fe.has(t)){const l=String(a.getHours()).padStart(2,"0"),d=String(a.getMinutes()).padStart(2,"0");return`${l}:${d}`}const n=ve[a.getMonth()],o=a.getDate();return`${n} ${o}`}function ne(e){return Y.has(e??"")}function se(e,t,a){const n=Y.has(a??""),o=a??"";return[{stroke:e,grid:{stroke:t,width:1},ticks:{stroke:t,width:1},font:'11px "DM Sans", sans-serif',gap:8,...n?{splits:d=>Array.from(d.data[0])}:{},values:(d,c)=>{let s=o;s||(s=(d.scales.x?.max??c[c.length-1]??0)-(d.scales.x?.min??c[0]??0)>86400?"7d":"24h");const r=c.map(u=>et(u,s)),i=r.map((u,_)=>_>0&&u===r[_-1]?"":u);if(n){const u=i.filter(f=>f!==""),_=u.length>20?5:u.length>14?3:1;if(_>1){let f=0;return i.map(k=>k===""?"":f++%_===0?k:"")}}return i}},{stroke:e,grid:{stroke:t,width:1},ticks:{show:!1},font:'11px "DM Sans", sans-serif',size:54,gap:8}]}function re(e){return e.map(t=>{if(t.hour){const d=t.hour.replace(" ","T");return new Date(d).getTime()/1e3}const a=t.date??"",[n,o,l]=a.split("-").map(Number);return new Date(n,o-1,l).getTime()/1e3})}const ce=6*3600;function le(e){const t=Y.has(e??""),a=fe.has(e??""),n=e?Ze(e):0;return(o,l,d)=>{const c=Date.now()/1e3;if(t)return[l,d];if(a)return[c-n,c];const s=Math.min(d,c);return s-l<ce?[s-ce,s]:[l,s]}}function B(e){return e.map(t=>Number.isFinite(t)?t:null)}var tt=v("<div style=width:100%;min-height:260px>");const at=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R("--chart-1"),o=I("--foreground",.55),l=I("--foreground",.05),d=R("--card"),c=se(o,l,e.range);return c[1]={...c[1],values:(s,r)=>r.map(i=>isNaN(i)?"–":i%1===0?`$${i}`:`$${i.toFixed(2)}`)},new X({width:a,height:260,padding:[16,16,0,0],cursor:ee(d,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:(s,r,i)=>[0,i>0?i*1.15:1]}},axes:c,series:[{value:te(e.range)},{label:"Cost",stroke:n,width:2.5,fill:O("--chart-1",.25),value:Ke}]},(()=>{const s=e.range==="24h",r=ae(e.data,e.range??"",s?"hour":"date",i=>s?{hour:i,cost:0}:{date:i,cost:0});return[re(r),B(r.map(i=>i.cost))]})(),t)}}),(()=>{var a=tt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var nt=v("<div style=width:100%;min-height:260px>");const st=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R(e.colorVar),o=I("--foreground",.55),l=I("--foreground",.05),d=R("--card");return new X({width:a,height:260,padding:[16,16,0,0],cursor:ee(d,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:(c,s,r)=>[0,r>0?r*1.1:10]}},axes:se(o,l,e.range),series:[{value:te(e.range)},{label:e.label,stroke:n,width:2.5,fill:O(e.colorVar,.25)}]},(()=>{const c=ae(e.data,e.range??"","time",r=>({time:r,value:0})),s=c.map(r=>r.time.includes("T")||r.time.includes(" ")?{hour:r.time}:{date:r.time});return[re(s),B(c.map(r=>r.value))]})(),t)}}),(()=>{var a=nt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var rt=v("<div style=width:100%;min-height:260px>");const lt=e=>{let t;return Z({el:()=>t,data:()=>e.data,buildChart(){if(!t)return null;const a=t.clientWidth||t.getBoundingClientRect().width;if(a===0)return null;const n=R("--bar-input"),o=R("--bar-output"),l=R("--bar-output-axis"),d=I("--foreground",.55),c=I("--foreground",.05),s=R("--card"),r=(i,u,_)=>[0,_>0?_*1.1:100];return new X({width:a,height:260,padding:[16,0,0,0],cursor:ee(s,n),scales:{x:{time:!ne(e.range),range:le(e.range)},y:{auto:!0,range:r},y2:{auto:!0,range:r}},axes:(()=>{const i=se(d,c,e.range);return i[1]={...i[1],stroke:n,values:(u,_)=>_.map(f=>G(u,f))},i.push({scale:"y2",side:1,stroke:l,grid:{show:!1},ticks:{show:!1},font:'11px "DM Sans", sans-serif',size:54,gap:8,values:(u,_)=>_.map(f=>G(u,f))}),i})(),series:[{value:te(e.range)},{label:"Sent to AI",scale:"y",stroke:n,width:2.5,fill:O("--bar-input",.25),value:G},{label:"Received from AI",scale:"y2",stroke:o,width:2,fill:O("--bar-output",.15),value:G}]},(()=>{const i=e.range==="24h",u=ae(e.data,e.range??"",i?"hour":"date",_=>i?{hour:_,input_tokens:0,output_tokens:0}:{date:_,input_tokens:0,output_tokens:0});return[re(u),B(u.map(_=>_.input_tokens)),B(u.map(_=>_.output_tokens))]})(),t)}}),(()=>{var a=rt(),n=t;return typeof n=="function"?Q(n,a):t=a,a})()};var it=v("<span>%"),ot=v('<div class=chart-card><div class=chart-card__header><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Cost</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Token usage</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div><div class="chart-card__stat chart-card__stat--clickable"><span class=chart-card__label>Messages</span><div class=chart-card__value-row><span class=chart-card__value></span></div></div></div><div class=chart-card__body>'),dt=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No cost data for this time range"),ct=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No token data for this time range"),ut=v("<div style=height:260px;color:hsl(var(--muted-foreground));display:flex;align-items:center;justify-content:center>No message data for this time range");const J=(e,t,a)=>{if(e===0||Math.abs(t)<.005)return null;const n=Math.max(-999,Math.min(999,Math.round(e)));if(n===0)return null;let o;a==="neutral"?o="trend trend--neutral":o=n>0?"trend trend--up-bad":"trend trend--down-good";const l=n>0?"+":"";return(()=>{var d=it(),c=d.firstChild;return be(d,o),m(d,l,c),m(d,n,c),d})()},gt=e=>(()=>{var t=ot(),a=t.firstChild,n=a.firstChild,o=n.firstChild,l=o.nextSibling,d=l.firstChild,c=n.nextSibling,s=c.firstChild;s.firstChild;var r=s.nextSibling,i=r.firstChild,u=c.nextSibling,_=u.firstChild,f=_.nextSibling,k=f.firstChild,w=a.nextSibling;return n.$$click=()=>e.onViewChange("cost"),m(d,()=>he(e.costValue)??"$0.00"),m(l,()=>J(e.costTrendPct,e.costValue,"inverted"),null),c.$$click=()=>e.onViewChange("tokens"),m(s,h(Te,{text:"Tokens are units of text that AI models process. More tokens = higher cost."}),null),m(i,()=>me(e.tokensValue)),m(r,()=>J(e.tokensTrendPct,e.tokensValue,"inverted"),null),u.$$click=()=>e.onViewChange("messages"),m(k,()=>e.messagesValue),m(f,()=>J(e.messagesTrendPct,e.messagesValue,"neutral"),null),m(w,h(x,{get when(){return e.activeView==="cost"},get children(){return h(x,{get when(){return e.costUsage?.length},get fallback(){return dt()},get children(){return h(at,{get data(){return e.costUsage},get range(){return e.range}})}})}}),null),m(w,h(x,{get when(){return e.activeView==="tokens"},get children(){return h(x,{get when(){return e.tokenUsage?.length},get fallback(){return ct()},get children(){return h(lt,{get data(){return e.tokenUsage},get range(){return e.range}})}})}}),null),m(w,h(x,{get when(){return e.activeView==="messages"},get children(){return h(x,{get when(){return e.messageChartData.length},get fallback(){return ut()},get children(){return h(st,{get data(){return e.messageChartData},label:"Messages",colorVar:"--chart-1",get range(){return e.range}})}})}}),null),H(y=>{var T=e.activeView==="cost",D=e.activeView==="tokens",p=e.activeView==="messages";return T!==y.e&&n.classList.toggle("chart-card__stat--active",y.e=T),D!==y.t&&c.classList.toggle("chart-card__stat--active",y.t=D),p!==y.a&&u.classList.toggle("chart-card__stat--active",y.a=p),y},{e:void 0,t:void 0,a:void 0}),t})();ue(["click"]);var ht=v('<div class=panel style=margin-top:var(--gap-lg)><div class=panel__title>Cost by Model</div><p style="font-size:var(--font-size-xs);color:hsl(var(--muted-foreground));margin:-8px 0 12px">How much each model costs you</p><table class=data-table><thead><tr><th>Model</th><th>Tokens</th><th>% of total</th><th>Cost</th></tr></thead><tbody>'),mt=v("<tr><td style=font-family:var(--font-mono);font-size:var(--font-size-sm)><span style=display:inline-flex;align-items:center;gap:4px></span></td><td></td><td><div style=display:flex;align-items:center;gap:8px><div style=width:40px;height:4px;border-radius:2px;background:hsl(var(--muted));overflow:hidden><div></div></div><span style=font-size:var(--font-size-xs);color:hsl(var(--muted-foreground))>%</span></div></td><td style=font-weight:600>"),_t=v("<span class=provider-card__logo-letter style=width:16px;height:16px;font-size:9px;flex-shrink:0;border-radius:50%>"),vt=v("<span style=display:inline-flex;flex-shrink:0;position:relative>");const ft=e=>{const t=ge(()=>[...e.rows].sort((a,n)=>n.estimated_cost-a.estimated_cost));return(()=>{var a=ht(),n=a.firstChild,o=n.nextSibling,l=o.nextSibling,d=l.firstChild,c=d.nextSibling;return m(c,h(q,{get each(){return t()},children:s=>(()=>{var r=mt(),i=r.firstChild,u=i.firstChild,_=i.nextSibling,f=_.nextSibling,k=f.firstChild,w=k.firstChild,y=w.firstChild,T=w.nextSibling,D=T.firstChild,p=f.nextSibling;return m(u,(()=>{var C=E(()=>!!(s.model&&W(s.model)==="custom"));return()=>C()?(()=>{const b=e.customProviderName(s.model),M=Ue(b??"",16,void 0,s.model??void 0);if(M)return M;const F=(b??de(s.model)).charAt(0).toUpperCase();return(()=>{var P=_t();return j(P,"title",b),m(P,F),H(g=>xe(P,"background",Ve(b??""))),P})()})():E(()=>!!(s.model&&W(s.model)))()?(()=>{var b=vt();return m(b,()=>ze(W(s.model),14),null),m(b,()=>Ee(s.auth_type,8),null),H(()=>j(b,"title",`${Ge(s.model)} (${Fe(s.auth_type)})`)),b})():null})(),null),m(u,(()=>{var C=E(()=>!!s.model);return()=>C()?E(()=>!!s.model.startsWith("custom:"))()?`custom:${e.customProviderName(s.model)??"Custom"}/${de(s.model)}`:s.display_name||De(s.model):s.model})(),null),m(_,()=>me(s.tokens)),m(T,()=>Math.round(s.share_pct),D),m(p,()=>he(s.estimated_cost)??"—"),H(C=>{var b=`width: ${s.share_pct}%; height: 100%; background: hsl(var(--chart-1)); border-radius: 2px;`,M=s.estimated_cost>0&&s.estimated_cost<.01?`$${s.estimated_cost.toFixed(6)}`:void 0;return C.e=ke(y,b,C.e),M!==C.t&&j(p,"title",C.t=M),C},{e:void 0,t:void 0}),r})()})),a})()};var pt=v('<div class=chart-card><div class=chart-card__header><div class="chart-card__stat chart-card__stat--active"><span class=chart-card__label>Cost</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:80px;height:28px></div></div></div><div class=chart-card__stat><span class=chart-card__label>Token usage</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:70px;height:28px></div></div></div><div class=chart-card__stat><span class=chart-card__label>Messages</span><div class=chart-card__value-row><div class="skeleton skeleton--text"style=width:50px;height:28px></div></div></div></div><div class=chart-card__body><div class="skeleton skeleton--rect"style=width:100%;height:260px>'),$t=v("<div class=panel><div class=panel__title style=display:flex;justify-content:space-between;align-items:center>Recent Messages<span class=view-more-link style=pointer-events:none;opacity:0.4>View more</span></div><table class=data-table><thead><tr><th>Date</th><th>Message</th><th>Cost</th><th>Model</th><th>Tokens</th><th>Status</th></tr></thead><tbody>"),yt=v('<div class=panel style=margin-top:var(--gap-lg)><div class=panel__title>Cost by Model</div><p style="font-size:var(--font-size-xs);color:hsl(var(--muted-foreground));margin:-8px 0 12px">How much each AI model is costing you</p><table class=data-table><thead><tr><th>Model</th><th>Tokens</th><th>% of total</th><th>Cost</th></tr></thead><tbody>'),bt=v('<tr><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:70%></div></td><td><div class="skeleton skeleton--text"style=width:40%></div></td><td><div class="skeleton skeleton--text"style=width:50%>'),xt=v('<tr><td><div class="skeleton skeleton--text"style=width:60%></div></td><td><div class="skeleton skeleton--text"style=width:40%></div></td><td><div class="skeleton skeleton--text"style=width:50%></div></td><td><div class="skeleton skeleton--text"style=width:40%>');const kt=()=>[pt(),(()=>{var e=$t(),t=e.firstChild,a=t.nextSibling,n=a.firstChild,o=n.nextSibling;return m(o,h(q,{each:[1,2,3,4,5],children:()=>bt()})),e})(),(()=>{var e=yt(),t=e.firstChild,a=t.nextSibling,n=a.nextSibling,o=n.firstChild,l=o.nextSibling;return m(l,h(q,{each:[1,2,3],children:()=>xt()})),e})()];var wt=v('<button class="btn btn--primary btn--sm">Set up agent'),Ct=v('<div class=empty-state><div class=empty-state__title>No activity yet</div><p>Connect a provider to start routing LLM calls.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Enable routing</button><div class=empty-state__img-wrapper><img src=/example-overview.svg alt="Example dashboard overview showing cost and token charts"class=empty-state__img loading=lazy>',!0,!1,!1),St=v("<div class=container--md><div class=page-header><div><h1>Overview</h1><span class=breadcrumb>Real-time summary of spending, tokens, and messages</span></div><div class=header-controls>"),Mt=v('<div class=empty-state><div class=empty-state__title>No activity yet</div><p>Set up your agent and send a message. Usage data shows up here.</p><button class="btn btn--primary btn--sm"style=margin-top:var(--gap-md)>Set up agent</button><div class=empty-state__img-wrapper><img src=/example-overview.svg alt="Example dashboard overview showing cost and token charts"class=empty-state__img loading=lazy>',!0,!1,!1),Nt=v('<div class=waiting-banner><i class="bxd bx-florist"></i><p>No activity yet. Your dashboard updates seconds after the first LLM call.'),Rt=v("<div class=panel><div class=panel__title style=display:flex;justify-content:space-between;align-items:center>Recent Messages");const Gt=()=>{const e=we(),t=Ce(),a=Se();Ae();const n="manifest_chart_range",o=new Set(["24h","7d","30d"]),l=localStorage.getItem(n),[d,c]=U(l&&o.has(l)?l:"30d"),[s,r]=U(!!l),i=g=>{c(g),r(!0),localStorage.setItem(n,g)},[u,_]=U("cost"),[f,k]=U(Ie(decodeURIComponent(e.agentName))),[w,y]=U(!!localStorage.getItem(`setup_completed_${e.agentName}`)),[T]=ie(()=>e.agentName,g=>We(decodeURIComponent(g))),D=g=>{const S=g.match(/^custom:([^/]+)\//);if(!S)return;const A=S[1];return T()?.find(z=>z.id===A)?.name},[p,{refetch:C}]=ie(()=>({range:d(),agentName:e.agentName,_ping:Pe()}),g=>He(g.range,g.agentName)),b=()=>{const g=p();return!!g&&(g.has_data!==!1||g.has_providers===!0)},M=()=>{const g=p();return!!g&&g.has_data===!1&&!g.has_providers};K(()=>{M()&&!w()&&!localStorage.getItem(`setup_dismissed_${e.agentName}`)&&k(!0)});const F=["30d","7d","24h"];K(()=>{if(s())return;const g=p();if(!g||g.has_data===!1&&!g.has_providers||(g.token_usage?.length??0)>0||(g.cost_usage?.length??0)>0||(g.message_usage?.length??0)>0)return;const A=F.indexOf(d());A<0||A>=F.length-1||c(F[A+1])});const P=ge(()=>p()?.message_usage?.map(S=>({time:S.hour??S.date??"",value:S.count}))??[]);return(()=>{var g=St(),S=g.firstChild,A=S.firstChild,z=A.nextSibling;return m(g,h(Me,{get children(){return[E(()=>oe()??decodeURIComponent(e.agentName))," Overview - Manifest"]}}),S),m(g,h(Ne,{name:"description",get content(){return`Monitor ${oe()??decodeURIComponent(e.agentName)} performance — costs, tokens, and activity.`}}),S),m(z,h(x,{get when(){return b()},get children(){return h(Oe,{get value(){return d()},onChange:i,options:[{label:"Last 24 hours",value:"24h"},{label:"Last 7 days",value:"7d"},{label:"Last 30 days",value:"30d"}]})}}),null),m(z,h(x,{get when(){return E(()=>!!M())()&&!w()},get children(){var N=wt();return N.$$click=()=>k(!0),N}}),null),m(g,h(x,{get when(){return p()!==void 0||!p.loading},get fallback(){return h(kt,{})},get children(){return h(x,{get when(){return!p.error},get fallback(){return h(Le,{get error(){return p.error},onRetry:C})},get children(){return[h(x,{get when(){return M()},get children(){return h(x,{get when(){return w()},get fallback(){return(()=>{var N=Mt(),$=N.firstChild,V=$.nextSibling,L=V.nextSibling;return L.$$click=()=>k(!0),N})()},get children(){var N=Ct(),$=N.firstChild,V=$.nextSibling,L=V.nextSibling;return L.$$click=()=>a(`/agents/${encodeURIComponent(e.agentName)}/routing`,{state:{openProviders:!0}}),N}})}}),h(x,{get when(){return b()},children:N=>{const $=()=>p();return[h(x,{get when(){return $().has_data===!1},get children(){return Nt()}}),h(gt,{get activeView(){return u()},onViewChange:_,get costValue(){return $().summary?.cost_today?.value??0},get costTrendPct(){return $().summary?.cost_today?.trend_pct??0},get tokensValue(){return $().summary?.tokens_today?.value??0},get tokensTrendPct(){return $().summary?.tokens_today?.trend_pct??0},get messagesValue(){return $().summary?.messages?.value??0},get messagesTrendPct(){return $().summary?.messages?.trend_pct??0},get costUsage(){return $().cost_usage},get tokenUsage(){return $().token_usage},get messageChartData(){return P()},get range(){return d()}}),(()=>{var V=Rt(),L=V.firstChild;return L.firstChild,m(L,h(Re,{get href(){return`/agents/${e.agentName}/messages`},class:"view-more-link",children:"View more"}),null),m(V,h(Be,{get items(){return $().recent_activity?.slice(0,5)??[]},columns:Ye,get agentName(){return e.agentName},customProviderName:D}),null),V})(),h(ft,{get rows(){return $().cost_by_model??[]},customProviderName:D})]}})]}})}}),null),m(g,h(je,{get open(){return f()},get agentName(){return decodeURIComponent(e.agentName)},get apiKey(){return t.state?.newApiKey??null},onClose:()=>{localStorage.setItem(`setup_dismissed_${e.agentName}`,"1"),k(!1)},onDone:()=>{localStorage.setItem(`setup_completed_${e.agentName}`,"1"),y(!0)},onGoToRouting:()=>{a(`/agents/${encodeURIComponent(e.agentName)}/routing`,{state:{openProviders:!0}})}}),null),g})()};ue(["click"]);export{Gt as default};