@vellumai/web 0.8.10-dev.202606101324.2fc90b3 → 0.8.10-dev.202606101436.d73da44

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 (95) hide show
  1. package/dist/assets/{account-page-Bm4gO52-.js → account-page-CrJpthGX.js} +1 -1
  2. package/dist/assets/add-credits-modal-D6oHOAX6.js +1 -0
  3. package/dist/assets/{advanced-page-iRGnl_6g.js → advanced-page-BuSZ5l0d.js} +1 -1
  4. package/dist/assets/ai-page-Cvlt-MWR.js +1 -0
  5. package/dist/assets/{archive-page-q6cXKbNi.js → archive-page-BI9YfeE7.js} +1 -1
  6. package/dist/assets/{assistant-status-panel-Bu8F4UQj.js → assistant-status-panel-2CUeWyu1.js} +1 -1
  7. package/dist/assets/auth-store-DlGj6EmB.js +6 -0
  8. package/dist/assets/billing-page-CVDQQsbH.js +35 -0
  9. package/dist/assets/{command-palette-D__PB5gb.js → command-palette-CDU9WcCS.js} +1 -1
  10. package/dist/assets/{community-page-BeXbNfG7.js → community-page-DIUpNtEX.js} +1 -1
  11. package/dist/assets/{connect-page-BecDBw5T.js → connect-page-7qriA7GA.js} +1 -1
  12. package/dist/assets/contacts-page-route-DTp0wGxM.js +1 -0
  13. package/dist/assets/debug-page-D8s15mMu.js +3 -0
  14. package/dist/assets/{deploy-dialogs-DE7IHcM2.js → deploy-dialogs-SZdEFH5n.js} +1 -1
  15. package/dist/assets/developer-page-ue8Rcd48.js +1 -0
  16. package/dist/assets/{devices-page-Cg7TQ91K.js → devices-page-C1m0I2W7.js} +1 -1
  17. package/dist/assets/{document-viewer-page-CqUjNYTd.js → document-viewer-page-CpaWvtuk.js} +1 -1
  18. package/dist/assets/{earn-credits-modal-C9hhZtLb.js → earn-credits-modal-ByZvpTC4.js} +1 -1
  19. package/dist/assets/{emails-page-BDg8bsU2.js → emails-page-CIBn0yPY.js} +1 -1
  20. package/dist/assets/feature-flag-catalog-DAY-mwvx.js +1 -0
  21. package/dist/assets/{general-page-DkDc5jYv.js → general-page-BxINk8eX.js} +1 -1
  22. package/dist/assets/hatching-screen-D-XKV-u2.js +1 -0
  23. package/dist/assets/{home-page-route-BUbH3dO3.js → home-page-route-DXiB4QC3.js} +1 -1
  24. package/dist/assets/{hosting-screen-B9ocTCD0.js → hosting-screen-LX5DZaOF.js} +1 -1
  25. package/dist/assets/identity-page-route-UFU4chWL.js +1 -0
  26. package/dist/assets/{index-DuPwOXJT.js → index-CSXKZUHj.js} +22 -22
  27. package/dist/assets/inspect-page-zN5HXk12.js +3 -0
  28. package/dist/assets/{install-DNncI2Zl.js → install-J3i0xErx.js} +1 -1
  29. package/dist/assets/integrations-page-H-uIwbpy.js +1 -0
  30. package/dist/assets/{intelligence-layout-CpdGFB3J.js → intelligence-layout-BmwzHEJx.js} +1 -1
  31. package/dist/assets/{keyboard-shortcuts-page-DAwcQOVR.js → keyboard-shortcuts-page-CUA54ejW.js} +1 -1
  32. package/dist/assets/{library-detail-page-DZiE4vPJ.js → library-detail-page-D9qjn6cN.js} +1 -1
  33. package/dist/assets/{library-page-DwzF3vke.js → library-page-DVGIUhU9.js} +1 -1
  34. package/dist/assets/{login-flow-BTe985DF.js → login-flow-DLmOVAoQ.js} +1 -1
  35. package/dist/assets/{login-page-DzHGFF8w.js → login-page-DcEe4Nb2.js} +1 -1
  36. package/dist/assets/{logout-page-CAOGZxHG.js → logout-page-CWuwjvo8.js} +1 -1
  37. package/dist/assets/{logs-layout-BLEX4lsC.js → logs-layout-BBmBJrbE.js} +1 -1
  38. package/dist/assets/{memory-router-playground-page-DLowIuiM.js → memory-router-playground-page-DnwGvMPQ.js} +1 -1
  39. package/dist/assets/{mobile-sidebar-drawer-DZaqxETO.js → mobile-sidebar-drawer-CpQ-fj3-.js} +1 -1
  40. package/dist/assets/{notifications-page-8UimqUrB.js → notifications-page-CsyKPmwo.js} +1 -1
  41. package/dist/assets/{oauth-complete-page-BOUbStTe.js → oauth-complete-page-BWfo6mDv.js} +1 -1
  42. package/dist/assets/{oauth-popup-complete-page-CRQCTelp.js → oauth-popup-complete-page-CaX-1SnU.js} +2 -2
  43. package/dist/assets/{platform-loopback-page-XqyhvZ9e.js → platform-loopback-page-DTUkVDKc.js} +1 -1
  44. package/dist/assets/{plugin-detail-page-DiMY0fm-.js → plugin-detail-page-BfRSU6_6.js} +1 -1
  45. package/dist/assets/{plugins-page-CcTXRl39.js → plugins-page-p_4sy8ey.js} +1 -1
  46. package/dist/assets/pre-chat-flow-D3oBwweC.js +1 -0
  47. package/dist/assets/{privacy-page-DlgKkxx0.js → privacy-page-DGrJWFmY.js} +1 -1
  48. package/dist/assets/{privacy-screen-drgjY1kY.js → privacy-screen-BprAUxhL.js} +1 -1
  49. package/dist/assets/{provider-callback-page-UpRFQgBC.js → provider-callback-page-qeLTX_PE.js} +1 -1
  50. package/dist/assets/{provider-signup-page-B-D2U4iq.js → provider-signup-page-CEc5GTlm.js} +1 -1
  51. package/dist/assets/{review-terms-screen-DH-ok1g8.js → review-terms-screen-DCn8rhKD.js} +1 -1
  52. package/dist/assets/schedules-page-BCmQHy3j.js +1 -0
  53. package/dist/assets/{select-assistant-screen-B0AbmG9w.js → select-assistant-screen-DGYpr20k.js} +1 -1
  54. package/dist/assets/{settings-layout-D5Clh5xa.js → settings-layout-BBn5FJdO.js} +1 -1
  55. package/dist/assets/{share-feedback-modal-CnDAhViL.js → share-feedback-modal-BJaY49ll.js} +1 -1
  56. package/dist/assets/{sidebar-tree-DdJBLeAO.js → sidebar-tree-C9el6Hus.js} +1 -1
  57. package/dist/assets/{signup-page-Bz2RFGj0.js → signup-page-vdrJHZPP.js} +1 -1
  58. package/dist/assets/skills-page-C-WcKtfl.js +1 -0
  59. package/dist/assets/{sounds-page-D88QVkCa.js → sounds-page-13BtqKhg.js} +1 -1
  60. package/dist/assets/{step-indicator-dots-BHxAlEoJ.js → step-indicator-dots-CnOGQkEb.js} +1 -1
  61. package/dist/assets/{subagent-detail-panel-QLpoF_fW.js → subagent-detail-panel-CphKZPY7.js} +2 -2
  62. package/dist/assets/{system-events-page-LNMz1SjU.js → system-events-page-C4n7dkmx.js} +1 -1
  63. package/dist/assets/{tiptap-document-editor-DZDjg0PR.js → tiptap-document-editor-DX1XQ0UG.js} +2 -2
  64. package/dist/assets/{tool-detail-panel-X4fbSeGM.js → tool-detail-panel-DcUYaklq.js} +1 -1
  65. package/dist/assets/{trace-page-BzvTg8PO.js → trace-page-z5pRnG4h.js} +1 -1
  66. package/dist/assets/{upgrade-cancel-page-CGVSvEa0.js → upgrade-cancel-page-DobsbPF2.js} +1 -1
  67. package/dist/assets/{upgrade-success-page-B6Erm3u0.js → upgrade-success-page-CkADa15_.js} +1 -1
  68. package/dist/assets/{usage-page-BNfe5iwB.js → usage-page-CGzZcQO3.js} +1 -1
  69. package/dist/assets/{use-current-platform-assistant-DRWsclxf.js → use-current-platform-assistant-C_5K-zJk.js} +1 -1
  70. package/dist/assets/use-is-org-ready-DazhNyXZ.js +1 -0
  71. package/dist/assets/{use-oauth-complete-deep-link-listener-BJw30Jht.js → use-oauth-complete-deep-link-listener-IPKFT5PP.js} +1 -1
  72. package/dist/assets/{use-onboarding-login-BUf7eyR1.js → use-onboarding-login-B8kd7xkt.js} +1 -1
  73. package/dist/assets/{voice-page-Cl9xPRks.js → voice-page-C7p1NBXp.js} +1 -1
  74. package/dist/assets/{weather-forecast-display-_RX7ZaL6.js → weather-forecast-display-z8fCWoSj.js} +1 -1
  75. package/dist/assets/{welcome-screen-B4FgK4tG.js → welcome-screen-Dkb8arF3.js} +1 -1
  76. package/dist/assets/workspace-page-Cnskh4Fs.js +1 -0
  77. package/dist/index.html +4 -4
  78. package/package.json +1 -1
  79. package/dist/assets/add-credits-modal-C0eyZ15J.js +0 -1
  80. package/dist/assets/ai-page-DVKChfKN.js +0 -1
  81. package/dist/assets/auth-store-CzP-IhbE.js +0 -6
  82. package/dist/assets/billing-page-CXlJx2_E.js +0 -35
  83. package/dist/assets/contacts-page-route-B2wyOX4L.js +0 -1
  84. package/dist/assets/debug-page-nQDkKBBx.js +0 -3
  85. package/dist/assets/developer-page-C7DVStqO.js +0 -1
  86. package/dist/assets/feature-flag-catalog-CMMjHWYs.js +0 -1
  87. package/dist/assets/hatching-screen-QT9Ip-jh.js +0 -1
  88. package/dist/assets/identity-page-route-CRyEhjY5.js +0 -1
  89. package/dist/assets/inspect-page-CumEpIb2.js +0 -3
  90. package/dist/assets/integrations-page-ZYiAE24a.js +0 -1
  91. package/dist/assets/pre-chat-flow-BUbXsjQM.js +0 -1
  92. package/dist/assets/schedules-page-CciL51vP.js +0 -1
  93. package/dist/assets/skills-page-qPMaH8hx.js +0 -1
  94. package/dist/assets/use-is-org-ready-DH83qrZN.js +0 -1
  95. package/dist/assets/workspace-page-V5YbCXeO.js +0 -1
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{E as i,a,i as o,n as s}from"./auth-store-CzP-IhbE.js";import{i as c}from"./routes-flPkdwd0.js";import{fr as l}from"./index-DuPwOXJT.js";import{r as u,t as d}from"./account-shell-Dte6QXVr.js";import{n as f,t as p}from"./login-flow-BTe985DF.js";var m=e(t(),1),h=r();function g(){let e=o(),t=a(),r=s.use.user(),g=s.use.logout(),[_,v]=(0,m.useState)(null),[y,b]=(0,m.useState)(!1),x=async()=>{v(null),b(!0);try{await i(f,p)}catch(e){console.error(`[account] auth flow failed:`,e),v(`Something went wrong. Please try again.`),b(!1)}};return t?(0,h.jsx)(d,{children:(0,h.jsx)(u,{title:`Loading...`})}):e?(0,h.jsxs)(d,{children:[(0,h.jsx)(u,{title:`Welcome${r?.username?`, ${r.username}`:``}!`,subtitle:`You are signed in.`}),(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-4`,children:[(0,h.jsx)(n,{to:c.assistant,className:`inline-flex w-full items-center justify-center gap-2 rounded-lg bg-[var(--primary-base)] px-6 py-3 text-sm font-medium text-white no-underline transition-colors hover:bg-[var(--primary-hover)]`,children:`Go to your assistant`}),(0,h.jsx)(`button`,{type:`button`,onClick:async()=>{await g(),l(c.account.login)},className:`cursor-pointer bg-transparent text-sm font-normal text-stone-400 transition-colors hover:text-stone-300`,children:`Sign out`})]})]}):(0,h.jsxs)(d,{children:[(0,h.jsx)(u,{title:`Welcome to Vellum`,subtitle:`Sign in to get started.`}),_&&(0,h.jsx)(`p`,{className:`text-center text-sm text-[var(--system-negative-strong)]`,children:_}),(0,h.jsx)(`div`,{className:`flex flex-col items-center gap-4`,children:(0,h.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:y,className:`inline-flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-[var(--primary-base)] px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-[var(--primary-hover)] disabled:opacity-50`,children:`Sign in`})})]})}export{g as AccountPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{E as i,a,i as o,n as s}from"./auth-store-DlGj6EmB.js";import{i as c}from"./routes-flPkdwd0.js";import{dr as l}from"./index-CSXKZUHj.js";import{r as u,t as d}from"./account-shell-Dte6QXVr.js";import{n as f,t as p}from"./login-flow-DLmOVAoQ.js";var m=e(t(),1),h=r();function g(){let e=o(),t=a(),r=s.use.user(),g=s.use.logout(),[_,v]=(0,m.useState)(null),[y,b]=(0,m.useState)(!1),x=async()=>{v(null),b(!0);try{await i(f,p)}catch(e){console.error(`[account] auth flow failed:`,e),v(`Something went wrong. Please try again.`),b(!1)}};return t?(0,h.jsx)(d,{children:(0,h.jsx)(u,{title:`Loading...`})}):e?(0,h.jsxs)(d,{children:[(0,h.jsx)(u,{title:`Welcome${r?.username?`, ${r.username}`:``}!`,subtitle:`You are signed in.`}),(0,h.jsxs)(`div`,{className:`flex flex-col items-center gap-4`,children:[(0,h.jsx)(n,{to:c.assistant,className:`inline-flex w-full items-center justify-center gap-2 rounded-lg bg-[var(--primary-base)] px-6 py-3 text-sm font-medium text-white no-underline transition-colors hover:bg-[var(--primary-hover)]`,children:`Go to your assistant`}),(0,h.jsx)(`button`,{type:`button`,onClick:async()=>{await g(),l(c.account.login)},className:`cursor-pointer bg-transparent text-sm font-normal text-stone-400 transition-colors hover:text-stone-300`,children:`Sign out`})]})]}):(0,h.jsxs)(d,{children:[(0,h.jsx)(u,{title:`Welcome to Vellum`,subtitle:`Sign in to get started.`}),_&&(0,h.jsx)(`p`,{className:`text-center text-sm text-[var(--system-negative-strong)]`,children:_}),(0,h.jsx)(`div`,{className:`flex flex-col items-center gap-4`,children:(0,h.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:y,className:`inline-flex w-full cursor-pointer items-center justify-center gap-2 rounded-lg bg-[var(--primary-base)] px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-[var(--primary-hover)] disabled:opacity-50`,children:`Sign in`})})]})}export{g as AccountPage};
@@ -0,0 +1 @@
1
+ import{o as e,r as t}from"./chunk-jRWAZmH_.js";import{t as n}from"./react-DJZBPgpf.js";import{h as r,t as i,u as a}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as o}from"./QueryClientProvider-DKhXIxGb.js";import{t as s}from"./useQuery-B45lW1Kk.js";import{t as c}from"./useMutation-Lj4VunQV.js";import{t as l}from"./jsx-runtime-CVSDxk6A.js";import{t as u}from"./button-DdEh-9f_.js";import{t as d}from"./dropdown-CocFV5yi.js";import{t as f}from"./modal-BYMhDpQo.js";import{t as p}from"./loader-circle-BSAFLoPH.js";import{$ as m,Xa as h,et as g,ho as _,ln as v,sn as y}from"./index-CSXKZUHj.js";var b=t({AddCreditsModal:()=>E}),x=e(n(),1),S=l(),C=[`10.00`,`20.00`,`30.00`,`40.00`,`50.00`,`60.00`,`70.00`,`80.00`,`90.00`,`100.00`];function w(e){let t=parseFloat(e);if(Number.isNaN(t))return`0 credits`;let n=t.toLocaleString(`en-US`,{minimumFractionDigits:2,maximumFractionDigits:2});return`${n.endsWith(`.00`)?n.slice(0,-3):n} credits`}function T(e){if(e&&typeof e==`object`){let t=e.amount;if(Array.isArray(t)&&typeof t[0]==`string`)return t[0]}return`Failed to create checkout session. Please try again.`}function E({open:e,onOpenChange:t}){let n=o(),{pathname:l}=a(),[b]=r(),E=b.toString()?`${l}?${b.toString()}`:l,{data:D,isLoading:O}=s(y()),k=D?.allowed_top_up_amounts?.length?D.allowed_top_up_amounts:C,[A,j]=(0,x.useState)(null),M=A&&k.includes(A)?A:k[0]??C[0],N=c(v());return(0,x.useEffect)(()=>g(()=>{t(!1),n.invalidateQueries(y())}),[t,n]),(0,S.jsx)(f.Root,{open:e,onOpenChange:t,children:(0,S.jsxs)(f.Content,{size:`sm`,children:[(0,S.jsxs)(f.Header,{children:[(0,S.jsx)(f.Title,{icon:h,children:`Add Credits`}),(0,S.jsx)(f.Description,{children:`Purchase credits to continue using the assistant. You'll be redirected to Stripe to complete the payment.`})]}),(0,S.jsx)(f.Body,{children:(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`label`,{htmlFor:`add-credits-amount`,className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Amount`}),(0,S.jsx)(d,{id:`add-credits-amount`,value:M,onChange:e=>{j(e),N.isError&&N.reset()},disabled:O||!D,options:k.map(e=>({value:e,label:w(e)}))})]}),N.isError&&(0,S.jsxs)(`div`,{className:`flex items-center gap-2 text-body-small-default text-[var(--system-negative-strong)]`,children:[(0,S.jsx)(_,{className:`h-3.5 w-3.5 shrink-0`}),T(N.error)]}),(0,S.jsx)(i,{to:`/assistant/settings/billing`,className:`text-body-small-default text-[var(--content-tertiary)] underline hover:text-[var(--content-secondary)]`,onClick:()=>t(!1),children:`Configure Automatic Top-Ups →`})]})}),(0,S.jsxs)(f.Footer,{children:[(0,S.jsx)(f.Close,{asChild:!0,children:(0,S.jsx)(u,{variant:`outlined`,children:`Cancel`})}),(0,S.jsx)(u,{variant:`primary`,leftIcon:N.isPending?(0,S.jsx)(p,{className:`animate-spin`}):void 0,onClick:()=>{N.isPending||N.mutate({body:{amount:M,return_path:E}},{onSuccess:e=>{m(e.checkout_url)}})},disabled:N.isPending||O||!D,children:`Add credits`})]})]})})}export{b as n,E as t};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{n}from"./QueryClientProvider-DKhXIxGb.js";import{t as r}from"./useQuery-B45lW1Kk.js";import{t as i}from"./useMutation-Lj4VunQV.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./button-DdEh-9f_.js";import{t as s}from"./notice-CF2pptne.js";import{t as c}from"./input-Cu3PPVCq.js";import{t as l}from"./toggle-CEm3M86o.js";import{n as u}from"./stat-square-sRJmexc-.js";import{n as d}from"./toast-DU1nH33j.js";import{t as f}from"./loader-circle-BSAFLoPH.js";import{U as p}from"./sdk.gen-Dncuy6t3.js";import{Bt as m,it as h,zt as g}from"./index-DuPwOXJT.js";import{t as _}from"./detail-card-C1QAHT2h.js";import{r as v}from"./assistant-status-panel-Bu8F4UQj.js";var y=e(t(),1),b=a(),x=[[`Mon`,0],[`Tue`,1],[`Wed`,2],[`Thu`,3],[`Fri`,4],[`Sat`,5],[`Sun`,6]];function S(e){let[t,n]=e.split(`:`).map(Number),r=new Date,i=new Date(Date.UTC(r.getUTCFullYear(),r.getUTCMonth(),r.getUTCDate(),t,n));return`${i.getHours().toString().padStart(2,`0`)}:${i.getMinutes().toString().padStart(2,`0`)}`}function C(e){let[t,n]=e.split(`:`).map(Number),r=new Date,i=new Date(r.getFullYear(),r.getMonth(),r.getDate(),t,n);return`${i.getUTCHours().toString().padStart(2,`0`)}:${i.getUTCMinutes().toString().padStart(2,`0`)}`}function w(){return Intl.DateTimeFormat(void 0,{timeZoneName:`short`}).formatToParts(new Date).find(e=>e.type===`timeZoneName`)?.value??``}function T(e){let t=e?.schedule?.window.start??`06:00`,n=e?.schedule?.window.end??`08:00`;return{enabled:e?.enabled??!0,timezone:`UTC`,frequency:e?.schedule?.frequency??`weekly`,daysOfWeek:e?.schedule?.days_of_week??[0],daysOfMonth:e?.schedule?.days_of_month??[],windowStart:S(t),windowEnd:S(n)}}function E({assistantId:e}){let t=n(),{data:a,isLoading:s,isError:h}=r(g({path:{id:e}})),_=(0,y.useMemo)(()=>T(a),[a]),[v,S]=(0,y.useState)(null),E=v??_,D=v!==null,O=(0,y.useMemo)(()=>w(),[]),[k,A]=(0,y.useState)(null),j=k??E.daysOfMonth.join(`, `),M=i({mutationFn:async t=>{let{data:n}=await p({path:{id:e},body:t,throwOnError:!0});return n}}),N=e=>{S(t=>({...t??_,...e}))},P=e=>{N({daysOfWeek:E.daysOfWeek.includes(e)?E.daysOfWeek.filter(t=>t!==e):[...E.daysOfWeek,e].sort((e,t)=>e-t)})},F=e=>e.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)&&e>=1&&e<=31);return s?(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,b.jsx)(f,{className:`h-4 w-4 animate-spin`}),`Loading update window settings...`]}):h?(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--system-negative-strong)]`,children:`Failed to load update window policy. Refresh the page to try again.`}):(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(l,{checked:E.enabled,onChange:e=>N({enabled:e}),label:`Automatic updates`,helperText:`Update automatically during a configured time window`}),E.enabled&&(0,b.jsxs)(`div`,{className:`space-y-5`,children:[(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:`Frequency`}),(0,b.jsx)(`div`,{className:`max-w-[400px]`,children:(0,b.jsx)(u,{ariaLabel:`Frequency`,value:E.frequency,onChange:e=>{e!==`monthly`&&A(null),N({frequency:e})},items:[{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`}]})})]}),E.frequency===`weekly`&&(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:`Day(s) of week`}),(0,b.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:x.map(([e,t])=>(0,b.jsx)(o,{variant:`outlined`,size:`compact`,active:E.daysOfWeek.includes(t),onClick:()=>P(t),children:e},t))})]}),E.frequency===`monthly`&&(0,b.jsx)(c,{label:`Day(s) of month`,type:`text`,value:j,onChange:e=>A(e.target.value),onBlur:e=>{let t=F(e.target.value);N({daysOfMonth:t}),A(t.join(`, `))},placeholder:`e.g. 1, 15`,helperText:`Comma-separated day numbers (1–31)`,className:`w-48`}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsxs)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:[`Update window`,O?` (${O})`:``]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,b.jsx)(c,{type:`time`,value:E.windowStart,onChange:e=>N({windowStart:e.target.value})}),(0,b.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`to`}),(0,b.jsx)(c,{type:`time`,value:E.windowEnd,onChange:e=>N({windowEnd:e.target.value})})]})]})]}),(0,b.jsx)(o,{variant:`primary`,leftIcon:M.isPending?(0,b.jsx)(f,{className:`animate-spin`}):void 0,onClick:async()=>{let n=E.frequency===`monthly`&&k!==null?F(k):E.daysOfMonth;try{await M.mutateAsync({enabled:E.enabled,timezone:`UTC`,schedule:{frequency:E.frequency,days_of_week:E.frequency===`weekly`?E.daysOfWeek:[],days_of_month:E.frequency===`monthly`?n:[],window:{start:C(E.windowStart),end:C(E.windowEnd)}}}),d.success(`Auto-update policy saved.`),S(null),A(null),t.invalidateQueries({queryKey:m({path:{id:e}})})}catch{d.error(`Failed to save policy. Please try again.`)}},disabled:M.isPending||!D,children:`Save policy`})]})}function D(){let{assistant:e}=v(),t=h({platformHostedOnly:!0}),n=e?.is_local?null:e;return(0,b.jsxs)(`div`,{className:`space-y-4`,children:[t===`full`&&n&&(0,b.jsx)(_,{title:`Update Window`,subtitle:`Configure when automatic updates are applied.`,children:(0,b.jsx)(E,{assistantId:n.id})}),t===`disabled`&&(0,b.jsx)(_,{title:`Update Window`,subtitle:`Configure when automatic updates are applied.`,children:(0,b.jsx)(s,{tone:`info`,children:`Log in to the Vellum platform to manage update window policy.`})})]})}export{D as AdvancedPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{n}from"./QueryClientProvider-DKhXIxGb.js";import{t as r}from"./useQuery-B45lW1Kk.js";import{t as i}from"./useMutation-Lj4VunQV.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./button-DdEh-9f_.js";import{t as s}from"./notice-CF2pptne.js";import{t as c}from"./input-Cu3PPVCq.js";import{t as l}from"./toggle-CEm3M86o.js";import{n as u}from"./stat-square-sRJmexc-.js";import{n as d}from"./toast-DU1nH33j.js";import{t as f}from"./loader-circle-BSAFLoPH.js";import{U as p}from"./sdk.gen-Dncuy6t3.js";import{Rt as m,rt as h,zt as g}from"./index-CSXKZUHj.js";import{t as _}from"./detail-card-C1QAHT2h.js";import{r as v}from"./assistant-status-panel-2CUeWyu1.js";var y=e(t(),1),b=a(),x=[[`Mon`,0],[`Tue`,1],[`Wed`,2],[`Thu`,3],[`Fri`,4],[`Sat`,5],[`Sun`,6]];function S(e){let[t,n]=e.split(`:`).map(Number),r=new Date,i=new Date(Date.UTC(r.getUTCFullYear(),r.getUTCMonth(),r.getUTCDate(),t,n));return`${i.getHours().toString().padStart(2,`0`)}:${i.getMinutes().toString().padStart(2,`0`)}`}function C(e){let[t,n]=e.split(`:`).map(Number),r=new Date,i=new Date(r.getFullYear(),r.getMonth(),r.getDate(),t,n);return`${i.getUTCHours().toString().padStart(2,`0`)}:${i.getUTCMinutes().toString().padStart(2,`0`)}`}function w(){return Intl.DateTimeFormat(void 0,{timeZoneName:`short`}).formatToParts(new Date).find(e=>e.type===`timeZoneName`)?.value??``}function T(e){let t=e?.schedule?.window.start??`06:00`,n=e?.schedule?.window.end??`08:00`;return{enabled:e?.enabled??!0,timezone:`UTC`,frequency:e?.schedule?.frequency??`weekly`,daysOfWeek:e?.schedule?.days_of_week??[0],daysOfMonth:e?.schedule?.days_of_month??[],windowStart:S(t),windowEnd:S(n)}}function E({assistantId:e}){let t=n(),{data:a,isLoading:s,isError:h}=r(m({path:{id:e}})),_=(0,y.useMemo)(()=>T(a),[a]),[v,S]=(0,y.useState)(null),E=v??_,D=v!==null,O=(0,y.useMemo)(()=>w(),[]),[k,A]=(0,y.useState)(null),j=k??E.daysOfMonth.join(`, `),M=i({mutationFn:async t=>{let{data:n}=await p({path:{id:e},body:t,throwOnError:!0});return n}}),N=e=>{S(t=>({...t??_,...e}))},P=e=>{N({daysOfWeek:E.daysOfWeek.includes(e)?E.daysOfWeek.filter(t=>t!==e):[...E.daysOfWeek,e].sort((e,t)=>e-t)})},F=e=>e.split(`,`).map(e=>parseInt(e.trim(),10)).filter(e=>!isNaN(e)&&e>=1&&e<=31);return s?(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,b.jsx)(f,{className:`h-4 w-4 animate-spin`}),`Loading update window settings...`]}):h?(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--system-negative-strong)]`,children:`Failed to load update window policy. Refresh the page to try again.`}):(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(l,{checked:E.enabled,onChange:e=>N({enabled:e}),label:`Automatic updates`,helperText:`Update automatically during a configured time window`}),E.enabled&&(0,b.jsxs)(`div`,{className:`space-y-5`,children:[(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:`Frequency`}),(0,b.jsx)(`div`,{className:`max-w-[400px]`,children:(0,b.jsx)(u,{ariaLabel:`Frequency`,value:E.frequency,onChange:e=>{e!==`monthly`&&A(null),N({frequency:e})},items:[{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`}]})})]}),E.frequency===`weekly`&&(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:`Day(s) of week`}),(0,b.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:x.map(([e,t])=>(0,b.jsx)(o,{variant:`outlined`,size:`compact`,active:E.daysOfWeek.includes(t),onClick:()=>P(t),children:e},t))})]}),E.frequency===`monthly`&&(0,b.jsx)(c,{label:`Day(s) of month`,type:`text`,value:j,onChange:e=>A(e.target.value),onBlur:e=>{let t=F(e.target.value);N({daysOfMonth:t}),A(t.join(`, `))},placeholder:`e.g. 1, 15`,helperText:`Comma-separated day numbers (1–31)`,className:`w-48`}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsxs)(`label`,{className:`block text-body-small-default text-[var(--content-secondary)]`,children:[`Update window`,O?` (${O})`:``]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,b.jsx)(c,{type:`time`,value:E.windowStart,onChange:e=>N({windowStart:e.target.value})}),(0,b.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`to`}),(0,b.jsx)(c,{type:`time`,value:E.windowEnd,onChange:e=>N({windowEnd:e.target.value})})]})]})]}),(0,b.jsx)(o,{variant:`primary`,leftIcon:M.isPending?(0,b.jsx)(f,{className:`animate-spin`}):void 0,onClick:async()=>{let n=E.frequency===`monthly`&&k!==null?F(k):E.daysOfMonth;try{await M.mutateAsync({enabled:E.enabled,timezone:`UTC`,schedule:{frequency:E.frequency,days_of_week:E.frequency===`weekly`?E.daysOfWeek:[],days_of_month:E.frequency===`monthly`?n:[],window:{start:C(E.windowStart),end:C(E.windowEnd)}}}),d.success(`Auto-update policy saved.`),S(null),A(null),t.invalidateQueries({queryKey:g({path:{id:e}})})}catch{d.error(`Failed to save policy. Please try again.`)}},disabled:M.isPending||!D,children:`Save policy`})]})}function D(){let{assistant:e}=v(),t=h({platformHostedOnly:!0}),n=e?.is_local?null:e;return(0,b.jsxs)(`div`,{className:`space-y-4`,children:[t===`full`&&n&&(0,b.jsx)(_,{title:`Update Window`,subtitle:`Configure when automatic updates are applied.`,children:(0,b.jsx)(E,{assistantId:n.id})}),t===`disabled`&&(0,b.jsx)(_,{title:`Update Window`,subtitle:`Configure when automatic updates are applied.`,children:(0,b.jsx)(s,{tone:`info`,children:`Log in to the Vellum platform to manage update window policy.`})})]})}export{D as AdvancedPage};
@@ -0,0 +1 @@
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{i as t,r as n,s as r}from"./local-settings-lVNyIOJ_.js";import{r as i,t as a}from"./capture-error-CZsNGL6n.js";import{t as o}from"./react-DJZBPgpf.js";import{d as s,h as c}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as l}from"./QueryClientProvider-DKhXIxGb.js";import{t as u}from"./useQuery-B45lW1Kk.js";import{t as d}from"./useMutation-Lj4VunQV.js";import{t as f}from"./jsx-runtime-CVSDxk6A.js";import{t as p}from"./button-DdEh-9f_.js";import{t as m}from"./typography-Czgs_2w_.js";import{t as h}from"./dropdown-CocFV5yi.js";import{t as g}from"./confirm-dialog-NYG-K9zN.js";import{t as _}from"./notice-CF2pptne.js";import{t as v}from"./tag-Ccr7Quy6.js";import{t as y}from"./input-Cu3PPVCq.js";import{t as b}from"./toggle-CEm3M86o.js";import{n as x}from"./stat-square-sRJmexc-.js";import{t as S}from"./modal-BYMhDpQo.js";import{n as C}from"./toast-DU1nH33j.js";import{t as w}from"./createLucideIcon-D6d6iDdi.js";import{n as T,t as E}from"./domain-field-cWBlWR4h.js";import{t as D}from"./external-link-BCB1rbW9.js";import{t as O}from"./loader-circle-BSAFLoPH.js";import{C as k,Et as A,Jt as j,Sn as M,Tt as N,Y as P,b as F}from"./sdk.gen-AJllUeDf.js";import{C as I,J as L,S as R,s as ee}from"./react-query.gen-mIY9pJOj.js";import{r as z}from"./api-errors-ChauV4ed.js";import{i as te}from"./routes-flPkdwd0.js";import{t as B}from"./use-is-org-ready-DazhNyXZ.js";import{r as V}from"./query-tags-LUKTkOVt.js";import{t as H}from"./assistant-identity-store-DT1PadE6.js";import{$i as ne,$r as U,Br as W,Ci as re,Fr as G,Gr as K,Hr as ie,Ir as ae,Jr as q,Kr as J,Li as oe,Lr as Y,Mr as se,Nr as ce,Pr as le,Qr as ue,Rr as de,Si as fe,St as pe,Ur as me,Vr as he,Wr as ge,Xr as _e,Yr as ve,Zr as ye,_i as be,_t as xe,ai as Se,bi as Ce,ci as we,di as Te,dt as Ee,ei as De,fi as Oe,ft as ke,gi as Ae,gt as je,hi as Me,ho as Ne,ht as Pe,ii as Fe,ja as Ie,jr as Le,li as Re,lo as ze,lt as Be,mi as Ve,mt as He,ni as Ue,oi as We,or as Ge,pi as Ke,po as qe,pt as Je,qr as Ye,ri as Xe,rn as Ze,rt as Qe,si as $e,ti as et,ui as tt,ut as nt,vi as rt,vo as it,vt as at,wi as ot,xi as st,xt as ct,yi as lt,yt as ut,zr as dt}from"./index-CSXKZUHj.js";import{t as ft}from"./use-active-assistant-id-mdQQtMSE.js";import{t as pt}from"./detail-card-C1QAHT2h.js";import{t as mt}from"./environment-store-Du3C86B3.js";var ht=w(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),X=e(o(),1),Z=f();function gt({mode:e,onChange:t}){return(0,Z.jsx)(`div`,{className:`max-w-[280px]`,children:(0,Z.jsx)(x,{ariaLabel:`Service mode`,value:e,onChange:t,items:[{value:`managed`,label:`Managed`},{value:`your-own`,label:`Your Own`}]})})}function _t({id:e,title:t,subtitle:n,mode:r,onModeChange:i,children:a}){return(0,Z.jsxs)(pt,{id:e,title:t,subtitle:n,accessory:(0,Z.jsx)(gt,{mode:r,onChange:i}),children:[(0,Z.jsx)(`div`,{className:`h-px bg-[var(--surface-active)]`}),(0,Z.jsx)(`div`,{className:`mt-4`,children:a})]})}function Q({onClick:e,disabled:t}){return(0,Z.jsx)(p,{onClick:e,disabled:t,children:`Save`})}function vt({onClick:e,filled:t=!1}){return(0,Z.jsx)(p,{variant:t?`danger`:`dangerGhost`,onClick:e,children:`Reset`})}function yt({id:e,title:t,subtitle:n,children:r}){return(0,Z.jsxs)(pt,{id:e,title:t,subtitle:n,children:[(0,Z.jsx)(`div`,{className:`h-px bg-[var(--surface-active)]`}),(0,Z.jsx)(`div`,{className:`mt-4`,children:r})]})}function bt({guide:e}){return(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(Ie,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsx)(`span`,{children:e.description}),(0,Z.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[e.linkLabel,(0,Z.jsx)(D,{className:`h-3 w-3`})]})]})]})}function xt({status:e,message:t,isLoading:n}){return n?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--tag-bg-neutral)] px-2.5 py-0.5 text-body-small-default text-[var(--content-quiet)]`,children:[(0,Z.jsx)(O,{className:`h-3 w-3 animate-spin`}),`Checking domain…`]}):e?e===`verified`?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-positive-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-positive-strong)]`,title:`DNS records have been verified. Your domain is ready to send and receive email.`,children:[(0,Z.jsx)(it,{className:`h-3 w-3`}),`Domain verified`]}):e===`pending`||e===`not_started`?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-mid-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-mid-strong)]`,title:`DNS records have been provisioned. Waiting for the email provider to verify them — this usually takes a few minutes.`,children:[(0,Z.jsx)(ze,{className:`h-3 w-3`}),`Verifying domain…`]}):(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-negative-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-negative-strong)]`,title:`Domain verification failed. DNS records may not have propagated correctly. You could try releasing and re-registering the domain.`,children:[(0,Z.jsx)(Ne,{className:`h-3 w-3`}),`Verification failed`]}):(0,Z.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--tag-bg-neutral)] px-2.5 py-0.5 text-body-small-default text-[var(--content-quiet)]`,title:`Unable to retrieve domain verification status.`,children:`Unknown status`})}var St=`__custom__`;function $(e){return e?!!(e.profile||e.provider||e.model):!1}function Ct(e,t){let n=$(e);return n===$(t)?n?(e?.profile??null)===(t?.profile??null)&&(e?.provider??null)===(t?.provider??null)&&(e?.model??null)===(t?.model??null):!0:!1}function wt({id:e,displayName:t,description:n,defaultProfileLabel:r,draft:i,profileOptions:a,onDraftChange:o,onToggle:s}){let c=$(i),l=!i||!c?``:i.provider||i.model?St:i.profile??``,u=l===St,d=i?.provider??$e[0],f=re(d??`anthropic`).map(e=>({value:e.id,label:e.displayName})),p=!!i?.provider&&!i?.model;function m(t){if(t===`__custom__`){let t=$e[0];o(e,{profile:null,provider:t,model:fe(t)??``})}else t===``?o(e,null):o(e,{profile:t,provider:null,model:null})}function g(t){let n=fe(t)??``;o(e,{...i??{},profile:null,provider:t,model:n})}function _(t){o(e,{...i??{},model:t})}return(0,Z.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)] bg-[var(--surface-base)] p-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-default font-medium text-[var(--content-default)]`,children:t}),n&&(0,Z.jsxs)(`p`,{className:`mt-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[n,r&&(0,Z.jsxs)(`span`,{className:`ml-1.5 text-body-small-default text-[var(--content-tertiary)] opacity-60`,children:[`· Default: `,r]})]})]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[c&&(0,Z.jsx)(h,{value:l,onChange:m,options:a,className:`w-36`}),(0,Z.jsx)(b,{checked:c,onChange:t=>s(e,t),"aria-label":`Override ${t}`})]})]}),c&&u&&(0,Z.jsxs)(`div`,{className:`mt-3 space-y-2 border-t border-[var(--border-base)] pt-3`,children:[(0,Z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Z.jsxs)(`div`,{className:`flex-1`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{value:d??``,onChange:g,options:$e.map(e=>({value:e,label:we[e]??e}))})]}),(0,Z.jsxs)(`div`,{className:`flex-1`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-body-small-default text-[var(--content-tertiary)]`,children:`Model`}),(0,Z.jsx)(h,{value:i?.model??``,onChange:_,options:f})]})]}),p&&(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--system-negative-strong)]`,children:`Pick a model`})]})]})}function Tt(){let e=ft();return{assistantId:e,resolveAssistantId:(0,X.useCallback)(async()=>e,[e])}}function Et(){let{assistantId:e}=Tt(),{data:t}=u({queryKey:V(e),queryFn:async()=>{let{data:t}=await F({path:{assistant_id:e},throwOnError:!0});return t},enabled:!!e,staleTime:3e4,refetchOnWindowFocus:!1}),n=(0,X.useMemo)(()=>t?.llm?.profiles??{},[t?.llm?.profiles]),r=(0,X.useMemo)(()=>t?.llm?.profileOrder??[],[t?.llm?.profileOrder]),i=(0,X.useMemo)(()=>t?.llm?.activeProfile??null,[t?.llm?.activeProfile]),a=(0,X.useMemo)(()=>t?.llm?.callSites??{},[t?.llm?.callSites]);return{assistantId:e,config:t,profiles:n,profileOrder:r,orderedProfiles:(0,X.useMemo)(()=>ye(n,r),[n,r]),activeProfile:i,callSites:a}}function Dt(){let e=l(),{assistantId:t,resolveAssistantId:n}=Tt();return d({mutationFn:async e=>{let t=await n(),{data:r}=await k({path:{assistant_id:t},body:e,throwOnError:!0});return{data:r,resolvedId:t}},onMutate:async n=>{if(!t)return;let r=V(t);await e.cancelQueries({queryKey:r});let i=e.getQueryData(r),a=i?U(i,n):void 0;return e.setQueryData(r,e=>e&&ve(e,n)),{rollback:a,queryKey:r}},onError:(t,n,r)=>{let{queryKey:i,rollback:a}=r??{};i&&a&&e.setQueryData(i,e=>e&&ve(e,a))},onSettled:n=>{let r=n?.resolvedId??t;e.invalidateQueries({queryKey:V(r)})}})}function Ot(){let{resolveAssistantId:e}=Tt();return(0,X.useCallback)(async(t,n)=>{try{let{data:r}=await M({path:{assistant_id:await e()},body:{value:n,type:`api_key`,name:t},throwOnError:!0});_e(r)}catch(e){throw e instanceof Error&&e.message===`No assistant found`?C.error(`Assistant not ready. Please try again.`):C.error(`Failed to save ${t} API key. Please try again.`),a(e,{context:`provision_provider_key`}),e}},[e])}function kt({isOpen:e,onClose:t,assistantId:n}){let r=(0,X.useRef)(!1);return(0,Z.jsx)(S.Root,{open:e,onOpenChange:e=>{!e&&!r.current&&t()},children:e?(0,Z.jsx)(At,{assistantId:n,onClose:t,onSavingChange:e=>{r.current=e}}):null})}function At({assistantId:e,onClose:t,onSavingChange:n}){let{orderedProfiles:r,callSites:i,config:o}=Et(),s=Dt(),[c,l]=(0,X.useState)(``),[d,f]=(0,X.useState)({}),[m,h]=(0,X.useState)(!1),[_,v]=(0,X.useState)(!1),b=Ge.use.analyzeConversation(),{data:x,isLoading:w,isError:T,refetch:E}=u({...ee({path:{assistant_id:e}}),enabled:!!e,staleTime:6e4,refetchOnWindowFocus:!1}),D=(0,X.useMemo)(()=>{let e=(x?.callSites??[]).filter(e=>e.id!==`mainAgent`);return b?e:e.filter(e=>e.id!==`analyzeConversation`)},[x,b]),k=!w&&!T&&!!x&&!!o,A=(0,X.useMemo)(()=>D.map(e=>e.id),[D]),j=(0,X.useMemo)(()=>{if(!k)return{};let e={};for(let t of A)if(t in d)e[t]=d[t];else{let n=i[t];e[t]=n?{...n}:{}}return e},[k,A,i,d]),M=(0,X.useMemo)(()=>new Set(A),[A]),N=(0,X.useMemo)(()=>Object.entries(i).some(([e,t])=>M.has(e)&&(t?.profile!=null||t?.provider!=null||t?.model!=null)),[i,M]),P=(0,X.useMemo)(()=>{if(!k)return!1;for(let e of Object.keys(j))if(!Ct(j[e],i[e]))return!0;return!1},[k,j,i]),F=(0,X.useMemo)(()=>Object.values(j).some(e=>$(e)&&!!e?.provider&&!e?.model),[j]),I=Ge.use.queryComplexityRouting(),L=(0,X.useCallback)(e=>[...K(q(r,[e]),I).map(e=>({value:e.name,label:J(e)})),{value:St,label:`Custom`}],[r,I]),R=(0,X.useMemo)(()=>{if(!c.trim())return D;let e=c.toLowerCase();return D.filter(t=>(t.displayName??``).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)||(t.domain??``).toLowerCase().includes(e))},[D,c]),z=(0,X.useMemo)(()=>{if(!x)return[];let e=x.domains.map(e=>e.id),t=new Map(x.domains.map(e=>[e.id,e])),n=[];for(let r of e){let e=R.filter(e=>e.domain===r);e.length>0&&n.push({domain:t.get(r),sites:e})}let r=new Set(e),i=R.filter(e=>!r.has(e.domain));return i.length>0&&n.push({domain:{id:`other`,displayName:`Other`},sites:i}),n},[x,R]),te=(0,X.useCallback)((e,t)=>{f(n=>({...n,[e]:t}))},[]),B=(0,X.useCallback)((e,t)=>{if(!t){f(t=>({...t,[e]:null}));return}let n=Ye(r,D.find(t=>t.id===e)?.defaultProfile,I);if(n)f(t=>({...t,[e]:{profile:n}}));else{let t=$e[0],n=fe(t)??``;f(r=>({...r,[e]:{provider:t,model:n}}))}},[D,r,I]),V=(0,X.useCallback)(async()=>{h(!0),n?.(!0);try{let e={};for(let t of Object.keys(j)){let n=j[t]??null;e[t]=$(n)?{profile:n?.profile??null,provider:n?.provider??null,model:n?.model??null}:null}await s.mutateAsync({llm:{callSites:e}}),t(),C.success(`Overrides saved.`)}catch(e){C.error(`Failed to save overrides. Please try again.`),a(e,{context:`call_site_overrides_save`})}finally{h(!1),n?.(!1)}},[j,t,s,n]),H=(0,X.useCallback)(async()=>{h(!0),n?.(!0);try{let e={};for(let t of Object.keys(j))e[t]=null;await s.mutateAsync({llm:{callSites:e}}),t(),C.success(`Overrides reset.`)}catch(e){C.error(`Failed to reset overrides. Please try again.`),a(e,{context:`call_site_overrides_reset`})}finally{h(!1),n?.(!1)}},[j,t,s,n]);return(0,Z.jsxs)(S.Content,{size:`lg`,hideCloseButton:!0,children:[(0,Z.jsxs)(S.Header,{children:[(0,Z.jsx)(S.Title,{children:`Action Overrides`}),(0,Z.jsx)(S.Description,{children:`Customize which model profile specific actions should use. Uses your default profile if no override is set.`})]}),(0,Z.jsxs)(S.Body,{children:[(0,Z.jsx)(`div`,{className:`mb-4`,children:(0,Z.jsx)(y,{type:`search`,value:c,onChange:e=>l(e.target.value),placeholder:`Search actions…`,leftIcon:(0,Z.jsx)(ne,{className:`h-4 w-4`}),fullWidth:!0})}),w&&(0,Z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,Z.jsx)(O,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`})}),T&&(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-12 text-center`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:`Couldn't load actions`}),(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Make sure your assistant is running`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:()=>void E(),children:`Retry`})]}),!w&&!T&&x&&(0,Z.jsx)(`div`,{className:`space-y-4`,children:z.length===0?(0,Z.jsx)(`p`,{className:`py-8 text-center text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No actions match your search.`}):z.map(({domain:e,sites:t})=>(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`p`,{className:`mb-2 text-body-small-default font-semibold uppercase tracking-wider text-[var(--content-tertiary)]`,children:e.displayName}),(0,Z.jsx)(`div`,{className:`space-y-1`,children:t.map(e=>{let t=(()=>{let t=j[e.id]??null;return!t||!$(t)?``:t.provider||t.model?`__custom__`:t.profile??``})(),n=e.defaultProfile?r.find(t=>t.name===e.defaultProfile)?.label??e.defaultProfile:null;return(0,Z.jsx)(wt,{id:e.id,displayName:e.displayName,description:e.description,defaultProfileLabel:n,draft:j[e.id]??null,profileOptions:L(t===``||t===`__custom__`?null:t),onDraftChange:te,onToggle:B},e.id)})})]},e.id))})]}),(0,Z.jsxs)(S.Footer,{children:[N&&(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:()=>v(!0),disabled:m||!k,tintColor:`var(--system-negative-strong)`,className:`mr-auto`,children:`Reset to Defaults`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:t,disabled:m,children:`Cancel`}),(0,Z.jsx)(p,{variant:`primary`,size:`compact`,onClick:()=>void V(),disabled:!P||F||m,children:m?(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin`}):`Save`})]}),(0,Z.jsx)(g,{open:_,title:`Reset to Defaults`,message:`Every task override will be reset and will follow your active profile. This cannot be undone.`,confirmLabel:`Reset to Defaults`,destructive:!0,onConfirm:()=>{v(!1),H()},onCancel:()=>v(!1)})]})}function jt({blocked:e,availableReplacements:t,replacement:n,onReplacementChange:r,error:i,saving:a,onClose:o,onConfirm:s}){let c=``;if(e){let t=e.label||e.name;c=e.isActive&&e.callSiteIds.length>0?`"${t}" is the active profile and is used by ${e.callSiteIds.length} call site(s). Pick a replacement profile.`:e.isActive?`"${t}" is the active profile. Pick a different active profile before deleting, or select a replacement below.`:`"${t}" is used by ${e.callSiteIds.length} call site(s). Select a replacement profile to reassign them before deleting.`}return(0,Z.jsx)(S.Root,{open:e!==null,onOpenChange:e=>{e||o()},children:(0,Z.jsxs)(S.Content,{size:`sm`,children:[(0,Z.jsx)(S.Header,{children:(0,Z.jsx)(S.Title,{children:`Can't Delete Profile`})}),(0,Z.jsxs)(S.Body,{className:`space-y-4`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`p`,children:c}),e&&e.callSiteIds.length>0&&(0,Z.jsx)(`ul`,{className:`space-y-1 pl-1`,children:e.callSiteIds.map(e=>(0,Z.jsxs)(`li`,{className:`text-body-small-default text-(--content-secondary)`,children:[`• `,(0,Z.jsx)(`code`,{children:e})]},e))}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Replacement profile`}),(0,Z.jsx)(h,{"aria-label":`Replacement profile`,value:n,onChange:r,options:[{value:``,label:`Select a replacement…`},...t.map(e=>({value:e.name,label:e.label??e.name}))]})]}),i&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-(--system-negative-strong)`,children:i})]}),(0,Z.jsxs)(S.Footer,{children:[(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,onClick:o,children:`Cancel`}),(0,Z.jsx)(p,{variant:`primary`,size:`compact`,disabled:!n||a,onClick:s,children:a?`Saving…`:`Reassign and Delete`})]})]})})}function Mt({profile:e,isDragging:t,dropTarget:n,isDeleting:r,deleteError:i,isToggling:a,onDragStart:o,onDragEnd:s,onDragOver:c,onDragLeave:l,onDrop:u,onEditClick:d,onDeleteClick:f,onStatusToggle:h}){let g=e.source===`managed`,_=e.status!==`disabled`,y=e.name===ge;return(0,Z.jsxs)(`div`,{className:`relative`,children:[n?.name===e.name&&!n.after&&(0,Z.jsx)(`div`,{className:`mx-0 h-0.5 rounded-full bg-[var(--border-active)]`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg pr-2 py-2${t?` opacity-50`:``}`,draggable:!g,onDragStart:o,onDragEnd:s,onDragOver:c,onDragLeave:l,onDrop:u,children:[(0,Z.jsx)(ht,{className:`h-4 w-4 shrink-0 ${g?`invisible`:`cursor-grab text-[var(--content-tertiary)]`}`}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1${_?``:` opacity-55`}`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`span`,className:`text-(--content-default)`,children:e.label??e.name}),g&&e.name!==`auto`&&(0,Z.jsx)(v,{tone:`positive`,title:`Managed by Platform — auth is locked, but you can rename or disable this profile.`,children:`Platform`})]}),e.description?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`mt-0.5 text-(--content-tertiary)`,children:e.description}):null,e.model??e.provider?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`mt-0.5 text-(--content-tertiary)`,children:e.model??e.provider}):null]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,Z.jsx)(`div`,{className:`flex shrink-0 items-center`,title:_?`Active — toggle to hide from pickers`:`Disabled — toggle to show in pickers`,children:(0,Z.jsx)(b,{checked:_,onChange:e=>h(e),disabled:a,"aria-label":`${_?`Disable`:`Enable`} ${e.label??e.name}`})}),(0,Z.jsxs)(`div`,{className:`flex w-[92px] items-center justify-end gap-2${y?` invisible`:``}`,children:[(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,onClick:d,children:g?`View`:`Edit`}),(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(oe,{}),"aria-label":`Delete ${e.label??e.name}`,disabled:g||r,title:g?`Managed profiles cannot be deleted`:void 0,onClick:f,tintColor:`var(--system-negative-strong)`})]})]})]}),n?.name===e.name&&n.after&&(0,Z.jsx)(`div`,{className:`mx-0 h-0.5 rounded-full bg-[var(--border-active)]`}),i?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`px-2 pb-1 text-(--system-negative-strong)`,children:i}):null,e.name===`auto`&&(0,Z.jsx)(`div`,{className:`mx-2 mt-1 border-b border-[var(--border-subtle)]`})]})}function Nt({isOpen:e,assistantId:t,onClose:n}){let{profiles:r,profileOrder:i,orderedProfiles:o,activeProfile:s,callSites:c}=Et(),l=Dt(),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(null),{data:h}=u({...R({path:{assistant_id:t}}),enabled:e}),g=h?.connections,_=Object.keys(r);async function v(e,t,n){let o=n?.mode??`replace`,s=!(e in r);if(o===`merge`&&!s){await l.mutateAsync({llm:{profiles:{[e]:t}}}),f(!1),m(null);return}let c={profiles:{[e]:t}};if(s&&(c.profileOrder=i.includes(e)?i:[...i,e]),s)await l.mutateAsync({llm:c});else{let t=r[e];await l.mutateAsync({llm:{profiles:{[e]:null}}});try{await l.mutateAsync({llm:c})}catch(n){throw a(n,{context:`settings-ai-profile-edit-recreate`}),t!=null&&await l.mutateAsync({llm:{profiles:{[e]:t}}}).catch(()=>{}),n}}s&&C.success(`Profile "${t.label??e}" created`),f(!1),m(null)}return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(S.Root,{open:e,onOpenChange:e=>{e||n()},children:e?(0,Z.jsx)(Pt,{profiles:r,profileOrder:i,orderedProfiles:o,activeProfile:s,callSiteOverrides:c,onClose:n,onEditClick:e=>{m(e),f(!0)},onNewClick:()=>{m(null),f(!0)}}):null}),(0,Z.jsx)(Le,{isOpen:d,mode:p?p.source===`managed`?`view`:`edit`:`create`,profileName:p?.name,initialValues:p??void 0,existingNames:_,connections:g,assistantId:t,onSave:v,onCancel:()=>{f(!1),m(null)}})]})}function Pt({profiles:e,profileOrder:t,orderedProfiles:n,activeProfile:r,callSiteOverrides:i,onClose:o,onEditClick:s,onNewClick:c}){let l=Dt(),[u,d]=(0,X.useState)({}),[f,h]=(0,X.useState)({}),[g,_]=(0,X.useState)(new Set),[v,y]=(0,X.useState)(null),[b,x]=(0,X.useState)(null),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(null),D=(0,X.useRef)(null),O=(0,X.useRef)(null),[k,A]=(0,X.useState)(null),[j,M]=(0,X.useState)(null),[N,P]=(0,X.useState)(``),[F,I]=(0,X.useState)(!1),L=Ge.use.queryComplexityRouting(),R=(0,X.useMemo)(()=>K(n,L),[n,L]);async function ee(t,n){if(g.has(t.name))return!1;_(e=>new Set(e).add(t.name)),y(null);let r=n?`active`:`disabled`;if(!e[t.name])return _(e=>{let n=new Set(e);return n.delete(t.name),n}),!1;try{return await l.mutateAsync({llm:{profiles:{[t.name]:{status:r}}}}),!0}catch(e){return a(e,{context:`settings-ai-profile-toggle`}),y(`Couldn't update "${t.label??t.name}". Please try again.`),!1}finally{_(e=>{let n=new Set(e);return n.delete(t.name),n})}}async function z(e){h(t=>({...t,[e]:!0})),d(t=>{let n={...t};return delete n[e],n});try{let n=t.filter(t=>t!==e);await l.mutateAsync({llm:{profiles:{[e]:null},profileOrder:n}})}catch(t){a(t,{context:`settings-ai-profile-delete`}),d(t=>({...t,[e]:`Failed to delete profile. Please try again.`}))}finally{h(t=>{let n={...t};return delete n[e],n})}}function te(e){let t=R.find(t=>t.name===e)?.label??e,n=e===r,a=Object.entries(i).filter(([t,n])=>t!==`mainAgent`&&n?.profile===e).map(([e])=>e);if(n||a.length>0){A({name:e,label:t,isActive:n,callSiteIds:a}),P(``),M(null);return}z(e)}async function B(){if(!k||!N)return;I(!0),M(null);let e={};if(k.isActive&&(e.activeProfile=N),k.callSiteIds.length>0){let t={};for(let e of k.callSiteIds)t[e]={profile:N};e.callSites=t}if(Object.keys(e).length>0)try{await l.mutateAsync({llm:e})}catch(e){a(e,{context:`settings-ai-profile-reassign-delete`}),M(`Failed to reassign references. Please try again.`),I(!1);return}let t=k.name;A(null),I(!1),z(t)}async function V(e,n){if(e===n.name)return;E(null);let r=t.filter(t=>t!==e),i=r.indexOf(n.name);if(i===-1)return;n.after&&(i+=1);let o=[...r.slice(0,i),e,...r.slice(i)];try{await l.mutateAsync({llm:{profileOrder:o}})}catch(e){a(e,{context:`settings-ai-profile-reorder`}),E(`Failed to reorder profiles. Please try again.`)}}let H=R.filter(e=>e.name!==k?.name&&e.source!==`managed`),ne=H.length>0?H:R.filter(e=>e.name!==k?.name);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(S.Content,{size:`md`,children:[(0,Z.jsxs)(S.Header,{children:[(0,Z.jsx)(S.Title,{children:`Model Profiles`}),(0,Z.jsx)(S.Description,{children:`Bundle a provider and model into a named profile. Assign profiles to specific actions or swap between them when chatting.`})]}),(0,Z.jsxs)(S.Body,{children:[R.length===0?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`py-4 text-center text-(--content-tertiary)`,children:`No profiles yet. Create one to get started.`}):(0,Z.jsx)(`div`,{className:`space-y-1`,children:R.map(e=>(0,Z.jsx)(Mt,{profile:e,isDragging:b===e.name,dropTarget:C,isDeleting:f[e.name]??!1,deleteError:u[e.name],isToggling:g.has(e.name),onDragStart:t=>{D.current=e.name,x(e.name),t.dataTransfer&&(t.dataTransfer.effectAllowed=`move`)},onDragEnd:()=>{D.current=null,O.current=null,x(null),w(null)},onDragOver:t=>{t.preventDefault();let n=t.currentTarget.getBoundingClientRect(),r=t.clientY>n.top+n.height/2,i={name:e.name,after:r};O.current=i,w(i)},onDragLeave:t=>{t.currentTarget.contains(t.relatedTarget)||(O.current=null,w(t=>t?.name===e.name?null:t))},onDrop:e=>{e.preventDefault();let t=D.current,n=O.current;D.current=null,O.current=null,x(null),w(null),t&&n&&V(t,n)},onEditClick:()=>s(e),onDeleteClick:()=>te(e.name),onStatusToggle:t=>void ee(e,t)},e.name))}),T&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-2 text-(--system-negative-strong)`,children:T}),v&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-2 text-(--system-negative-strong)`,children:v})]}),(0,Z.jsxs)(S.Footer,{className:`justify-between`,children:[(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:c,children:`+ New Profile`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:o,children:`Done`})]})]}),(0,Z.jsx)(jt,{blocked:k,availableReplacements:ne,replacement:N,onReplacementChange:P,error:j,saving:F,onClose:()=>{A(null),M(null)},onConfirm:()=>void B()})]})}function Ft({mode:e,connection:t,assistantId:n,existingNames:r,onSave:i,onCancel:a}){let[o,s]=(0,X.useState)(e),[c,u]=(0,X.useState)(void 0),d=o===`managed-edit`,[f,g]=(0,X.useState)(t?.label??``),[_,v]=(0,X.useState)(t?.name??``),[b,x]=(0,X.useState)(t?.provider??`anthropic`),[C,w]=(0,X.useState)(()=>t?t.auth.type:`platform`),[T,E]=(0,X.useState)(()=>t?.auth.type===`api_key`?t.auth.credential:t?``:`credential/anthropic/api_key`),[D,O]=(0,X.useState)(t?.baseUrl??``),[k,j]=(0,X.useState)(()=>t?.models?t.models.map(e=>e.id).join(`, `):``),[N,P]=(0,X.useState)(!1),[F,I]=(0,X.useState)(null),L=b===`openai-compatible`,R=(0,X.useMemo)(()=>b&&!Y.includes(b)?[...Y,b]:Y,[b]),{handleLabelChange:ee,resetDirty:z}=le(o,g,v),[te,B]=(0,X.useState)(``),[V,H]=(0,X.useState)(!1),ne=l(),U=(0,X.useMemo)(()=>dt(T),[T]),re=C===`api_key`&&U!==null,{hasStoredCredential:K,isLoading:q,queryKey:J}=me({assistantId:n,credentialKind:`credential`,credentialName:U?`${U.service}:${U.field}`:``,enabled:re,errorContext:`settings-provider-editor-credential-presence`}),{credentials:oe,queryKey:ue}=ce({assistantId:n,enabled:C===`api_key`});(0,X.useEffect)(()=>{let e=t?.provider??`anthropic`;g(t?.label??``),v(t?.name??``),x(e),w(t?t.auth.type:`platform`),t?.auth.type===`api_key`?E(t.auth.credential):E(t?``:`credential/${e}/api_key`),z(),I(null),O(t?.baseUrl??``),j(t?.models?t.models.map(e=>e.id).join(`, `):``),B(``),H(!1)},[t,z]);function fe(){s(`create`),u(b===`ollama`?`none`:`api_key`)}let pe=_.trim().length>0;async function ge(){if(pe){P(!0),I(null);try{let e;if(C===`api_key`){let t=T.trim()||`credential/${b}/api_key`,r=te.trim();if(r){H(!0);try{let e=dt(t);await M({path:{assistant_id:n},body:e?{type:`credential`,name:`${e.service}:${e.field}`,value:r}:{type:`api_key`,name:b,value:r},throwOnError:!0}),ne.setQueryData(J,!0),ne.invalidateQueries({queryKey:ue})}catch{I(`Failed to save API key. Please try again.`);return}finally{H(!1)}}e={type:`api_key`,credential:t}}else if(C===`oauth_subscription`)if(t?.auth.type===`oauth_subscription`)e=t.auth;else{I(`Use the "Sign in with ChatGPT" button to connect your subscription.`);return}else e=C===`none`?{type:`none`}:{type:`platform`};let r=f.trim()||null,a={auth:e,label:r,...L&&{base_url:D.trim()||null,models:k.trim()?k.split(`,`).map(e=>({id:e.trim()})).filter(e=>e.id):null}},{data:o,response:s}=await A({path:{assistant_id:n,name:t?.name??_.trim()},body:a});if(!s?.ok){I(de(s?.status,_.trim()));return}if(!o){I(`Server returned an empty response. Please try again.`);return}i(o)}catch{I(`Failed to save connection. Please try again.`)}finally{P(!1)}}}let _e=oe.filter(e=>e.service===b),ve=o!==`create`&&t?.auth.type===`api_key`,ye=_e.length>0||ve,be=G(`Enter your API key`,K);return o===`create`?(0,Z.jsx)(se,{variant:`modal`,assistantId:n,existingNames:r,defaultProviderType:b,defaultAuthType:c,onCreated:i,onCancel:a},b):(0,Z.jsxs)(S.Content,{size:`md`,children:[(0,Z.jsxs)(S.Header,{children:[(0,Z.jsx)(S.Title,{children:`Edit Connection`}),(0,Z.jsx)(S.Description,{children:d?`Managed by Vellum — auth is locked, but you can rename "${t?.name}".`:`Editing "${t?.name}".`})]}),(0,Z.jsxs)(S.Body,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsxs)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:[`Display Name`,` `,(0,Z.jsx)(`span`,{className:`text-[var(--content-disabled)]`,children:`(optional)`})]}),(0,Z.jsx)(y,{value:f,onChange:e=>ee(e.target.value),placeholder:`e.g. My Anthropic Key`,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Key`}),(0,Z.jsx)(y,{value:_,placeholder:`e.g. anthropic-personal`,disabled:!0,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{"aria-label":`Provider`,value:b,onChange:e=>x(e),disabled:!0,options:R.map(e=>({value:e,label:he[e]}))})]}),L&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Base URL`}),(0,Z.jsx)(y,{value:D,onChange:e=>O(e.target.value),placeholder:`https://api.example.com/v1`,disabled:d,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Models`}),(0,Z.jsx)(y,{value:k,onChange:e=>j(e.target.value),placeholder:`model-1, model-2`,disabled:d,fullWidth:!0}),(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-[var(--content-tertiary)]`,children:`Comma-separated model identifiers exposed by your endpoint.`})]})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Auth Type`}),(0,Z.jsx)(h,{"aria-label":`Auth type`,value:C,onChange:e=>{w(e),I(null)},disabled:d||b===`ollama`,options:(()=>{let e;return e=b===`ollama`?[`none`]:ot(b)?[`api_key`,`platform`]:[`api_key`],C&&!e.includes(C)&&e.push(C),e.map(e=>({value:e,label:ae[e]}))})()})]}),C===`api_key`&&(0,Z.jsx)(W,{apiKeyValue:te,onApiKeyChange:B,credential:T,onCredentialChange:E,isAuthLocked:d,isLoadingCredential:q,apiKeyPlaceholder:be,provider:b,providerCredentials:_e,showAdvancedSection:ye,onError:I}),C===`oauth_subscription`&&(0,Z.jsx)(ie,{assistantId:n,onConnected:i}),F&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-(--system-negative-strong)`,children:F})]}),(0,Z.jsxs)(S.Footer,{children:[(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,onClick:a,children:`Cancel`}),o===`managed-edit`&&(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:fe,disabled:N||V,children:`Save as New`}),(0,Z.jsx)(p,{variant:`primary`,size:`compact`,disabled:!pe||N||V,onClick:()=>void ge(),children:N?`Saving…`:`Save`})]})]})}function It(e){switch(e.type){case`api_key`:return`API key · ${e.credential}`;case`oauth_subscription`:return`ChatGPT Subscription`;case`platform`:return`Managed proxy`;case`none`:return`None (local)`;default:return e.type}}function Lt({isOpen:e,assistantId:t,onClose:n}){let[r,i]=(0,X.useState)(!1),[a,o]=(0,X.useState)(null),s=l(),{data:c,isLoading:d,isError:f}=u({...R({path:{assistant_id:t}}),enabled:e}),p=(0,X.useMemo)(()=>c?.connections??[],[c]);function m(e){s.invalidateQueries({queryKey:I({path:{assistant_id:t}})}),i(!1),o(null)}let h=p.map(e=>e.name),g=()=>{i(!1),o(null)};return(0,Z.jsx)(S.Root,{open:e,onOpenChange:e=>{e||(r?g():n())},children:e?r?(0,Z.jsx)(Ft,{mode:a?a.isManaged?`managed-edit`:`edit`:`create`,connection:a??void 0,assistantId:t,existingNames:h,onSave:m,onCancel:g}):(0,Z.jsx)(Rt,{connections:p,loading:d,isError:f,assistantId:t,onClose:n,onEditClick:e=>{o(e),i(!0)},onNewClick:()=>{o(null),i(!0)},onConnectionDeleted:()=>{s.invalidateQueries({queryKey:I({path:{assistant_id:t}})})}}):null})}function Rt({connections:e,loading:t,isError:n,assistantId:r,onClose:i,onEditClick:a,onNewClick:o,onConnectionDeleted:s}){let[c,l]=(0,X.useState)({}),[u,d]=(0,X.useState)({});async function f(e){d(t=>({...t,[e]:!0})),l(t=>{let n={...t};return delete n[e],n});try{let{response:t}=await N({path:{assistant_id:r,name:e}});t?.ok||t?.status===404?s(e):t?.status===409?l(t=>({...t,[e]:`Connection is in use by one or more profiles. Remove those references first.`})):l(t=>({...t,[e]:`Failed to delete connection. Please try again.`}))}catch{l(t=>({...t,[e]:`Failed to delete connection. Please try again.`}))}finally{d(t=>{let n={...t};return delete n[e],n})}}return(0,Z.jsxs)(S.Content,{size:`md`,children:[(0,Z.jsxs)(S.Header,{children:[(0,Z.jsx)(S.Title,{children:`Provider Connections`}),(0,Z.jsx)(S.Description,{children:`Manage inference provider connections. Each connection binds a name to a provider and auth configuration.`})]}),(0,Z.jsx)(S.Body,{children:t?(0,Z.jsx)(`div`,{className:`space-y-2 py-2`,children:[1,2,3].map(e=>(0,Z.jsx)(`div`,{className:`h-10 animate-pulse rounded-lg bg-[var(--surface-active)]`},e))}):n?(0,Z.jsx)(m,{variant:`body-medium-default`,as:`p`,className:`py-4 text-center text-(--system-negative-strong)`,children:`Failed to load connections. Please try again.`}):e.length===0?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`py-4 text-center text-(--content-tertiary)`,children:`No connections yet. Create one to get started.`}):(0,Z.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>{let t=u[e.name]??!1,n=c[e.name],r=e.isManaged??!1;return(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-3 rounded-lg px-2 py-2`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`span`,className:`text-(--content-default)`,children:e.label??e.name}),r&&(0,Z.jsx)(v,{tone:`positive`,title:`Managed by Platform — auth is locked, but you can rename this connection.`,children:`Platform`})]}),(0,Z.jsxs)(m,{variant:`body-medium-lighter`,as:`p`,className:`mt-0.5 text-(--content-tertiary)`,children:[e.label?`${e.name} · `:``,he[e.provider]??e.provider,` · `,It(e.auth)]})]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,onClick:()=>a(e),children:`Edit`}),(0,Z.jsx)(p,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(oe,{}),"aria-label":`Delete ${e.name}`,disabled:r||t,title:r?`Managed connections cannot be deleted`:void 0,onClick:()=>void f(e.name),tintColor:`var(--system-negative-strong)`})]})]}),n?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`px-2 pb-1 text-(--system-negative-strong)`,children:n}):null]},e.name)})})}),(0,Z.jsxs)(S.Footer,{className:`justify-between`,children:[(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:o,children:`+ New Connection`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:i,children:`Done`})]})]})}function zt(e){let[t,n]=(0,X.useState)(void 0);return(0,X.useEffect)(()=>{t!==void 0&&e===t.value&&n(void 0)},[e,t]),[t===void 0?e:t.value,(0,X.useCallback)(e=>n(e===void 0?void 0:{value:e}),[])]}function Bt(){let{assistantId:e,orderedProfiles:t,activeProfile:n,callSites:r}=Et(),i=Dt(),[o,s]=zt(n),[c,l]=(0,X.useState)(!1),[u,d]=(0,X.useState)(!1),[f,g]=(0,X.useState)(!1),_=Ge.use.queryComplexityRouting(),v=(0,X.useMemo)(()=>K(q(t,[o]),_),[t,o,_]),y=Object.entries(r).filter(([e,t])=>e!==`mainAgent`&&(t?.profile!=null||t?.provider!=null||t?.model!=null)).length,b=y===1?`1 Override`:y>0?`${y} Overrides`:`Overrides`,x=o!==n,S=(0,X.useCallback)(async()=>{try{await i.mutateAsync({llm:{activeProfile:o}}),C.success(`Profile saved.`)}catch(e){C.error(`Failed to switch profile. Please try again.`),a(e,{context:`settings-ai-language-model-save`})}},[o,i]);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(yt,{title:`Language Model`,subtitle:`Configure the LLMs that power your assistant`,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Default Profile`}),(0,Z.jsx)(h,{value:o??``,onChange:e=>{s(e===``?null:e)},placeholder:`Select a default profile…`,options:v.map(e=>({value:e.name,label:e.name===`auto`?`Automatically switch between profiles`:J(e)}))}),_&&o===`auto`&&(0,Z.jsx)(`div`,{className:`flex items-center gap-2 rounded-lg bg-[var(--surface-warning-subtle)] px-3 py-2`,children:(0,Z.jsx)(`span`,{className:`text-body-small-default text-[var(--content-warning)]`,children:`Auto may use more powerful models when needed, which can increase costs.`})}),v.length===0?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-1 text-(--content-tertiary)`,children:`No profiles yet. Click Profiles below to create one.`}):null]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:()=>g(!0),children:`Providers`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:()=>l(!0),children:`Profiles`}),(0,Z.jsx)(p,{variant:`outlined`,size:`compact`,onClick:()=>d(!0),children:b})]}),x&&(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:S,disabled:i.isPending}),i.isPending&&(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]})}),e&&(0,Z.jsx)(Nt,{isOpen:c,assistantId:e,onClose:()=>l(!1)}),e&&(0,Z.jsx)(kt,{isOpen:u,onClose:()=>d(!1),assistantId:e}),e&&(0,Z.jsx)(Lt,{isOpen:f,assistantId:e,onClose:()=>g(!1)})]})}function Vt(){let{assistantId:e,config:i}=Et(),o=Dt(),s=Ot(),c=l(),{serverWebSearchMode:u,serverWebSearchProvider:d}=(0,X.useMemo)(()=>{if(!i)return{serverWebSearchMode:n(rt,`your-own`),serverWebSearchProvider:n(lt,`inference-provider-native`)};let e=i.services?.[`web-search`],t=e?.mode;return{serverWebSearchMode:t===`managed`||t===`your-own`?t:n(rt,`your-own`),serverWebSearchProvider:e?.provider||n(`vellum:ai:webSearchProvider`,`inference-provider-native`)}},[i]),[f,p]=(0,X.useState)(!1),[m,g]=zt(u),[_,v]=zt(d),[b,x]=(0,X.useState)(``),S=De.has(_),{hasStoredCredential:w,queryKey:T}=me({assistantId:e,credentialKind:`api_key`,credentialName:_,enabled:S,errorContext:`settings-ai-web-search-read-credential`}),E=b.trim().length>0,D=f||m===`your-own`&&S&&!w&&!E||!(m!==u||(m===`managed`?`inference-provider-native`:_)!==d)&&!E,k=G(Xe[_]??`Enter your API key`,w),A=(0,X.useCallback)(async()=>{p(!0);let e=b.trim(),t=m===`managed`?`inference-provider-native`:_,n=ue(t),i=m===`your-own`&&S&&e.length>0;try{i&&await s(t,e),await o.mutateAsync({services:{"web-search":{mode:m,provider:t}}}).catch(e=>{throw C.error(`Failed to update assistant configuration. Please try again.`),a(e,{context:`patch_daemon_config`}),e})}catch{p(!1);return}p(!1);try{r(rt,m),r(lt,t),i&&(n&&r(n,e),c.setQueryData(T,!0),c.invalidateQueries({queryKey:T}),x(``)),C.success(`Web search settings saved.`)}catch(e){a(e,{context:`settings-ai-web-search-persist-local`}),C.error(`Saved, but local preferences could not be written.`)}},[S,o,s,c,T,b,m,_]),j=(0,X.useCallback)(()=>{let e=ue(_);e&&t(e),x(``),v(`inference-provider-native`),r(lt,`inference-provider-native`)},[_,v]);return(0,Z.jsx)(_t,{title:`Web Search`,subtitle:`Configure how your assistant should search the web`,mode:m,onModeChange:e=>g(e),children:m===`managed`?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Web search is included with managed inference.`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:A,disabled:D}),f&&(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{value:_,onChange:v,options:Ue.map(e=>({value:e,label:et[e]??e}))})]}),S&&(0,Z.jsx)(y,{label:`API Key`,type:`password`,value:b,onChange:e=>x(e.target.value),placeholder:k,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:A,disabled:D}),f&&(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`}),S&&(0,Z.jsx)(vt,{onClick:j,filled:!0})]})]})})}function Ht({assistantId:e,assistantHandle:t,emailRootDomain:n}){let r=l(),i=s(),[o,f]=c(),[m,h]=(0,X.useState)(``),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)(null),[S,w]=(0,X.useState)(``),[D,k]=(0,X.useState)(null),[A,j]=(0,X.useState)(!1),[M,N]=(0,X.useState)(!1),[P,F]=(0,X.useState)(!1);(0,X.useEffect)(()=>{v||!t||m||(h(t),y(!0))},[t,v,m]);let I=u({...Ze(),enabled:!0}),L=I.data,R=L?.entitlements,ee=R?.managed_email===!0,B=!!R&&!ee,V=!L&&I.isError&&!I.isFetching,H=u({...Ee({path:{assistant_id:e}}),enabled:!B}),ne=u({...je({path:{assistant_id:e}}),enabled:!B}),U=H.data?.results?.[0],W=ne.data?.results?.[0],re=U?`${U.subdomain}.${n}`:null,G=u({...at({path:{assistant_id:e,id:W?.id??``}}),enabled:!!W?.id,refetchOnWindowFocus:!1}),K=u({...Je({path:{assistant_id:e,id:U?.id??``}}),enabled:!!U?.id,refetchInterval:e=>{let t=e.state.data?.status;return t===`verified`||t===`failed`?!1:1e4},refetchOnWindowFocus:!0});(0,X.useEffect)(()=>{o.get(`release`)!==`1`||!U||W||(N(!0),f(e=>{let t=new URLSearchParams(e);return t.delete(`release`),t},{replace:!0}))},[W,U,o,f]);let ie=d(Be()),ae=d(nt()),q=d(He()),J=d(Pe()),Y=(0,X.useCallback)(()=>{let t={assistant_id:e};r.invalidateQueries({queryKey:ke({path:t})}),r.invalidateQueries({queryKey:xe({path:t})}),W?.id&&r.invalidateQueries({queryKey:ut({path:{...t,id:W.id}})}),r.invalidateQueries({queryKey:pe()})},[W?.id,e,r]),se=(0,X.useCallback)(async()=>{let t=m.trim().toLowerCase();if(!t){x(`Enter a subdomain.`);return}j(!1);try{await ie.mutateAsync({path:{assistant_id:e},body:{subdomain:t}}),h(``),x(null),Y(),C.success(`Domain ${t}.${n} registered.`)}catch(e){x(z(e,void 0,`Failed to register domain.`))}},[e,n,Y,ie,m]),ce=(0,X.useCallback)(async()=>{let t=S.trim().toLowerCase();if(!t){k(`Enter an email username.`);return}try{await q.mutateAsync({path:{assistant_id:e},body:{username:t}}),w(``),k(null),Y(),C.success(`Email address created.`)}catch(e){k(z(e,void 0,`Failed to create email address.`))}},[e,Y,q,S]),le=(0,X.useCallback)(async()=>{if(W?.id){F(!1);try{await J.mutateAsync({path:{assistant_id:e,id:W.id}}),Y(),C.success(`Email address removed.`)}catch(e){a(e,{context:`email_address_delete`}),C.error(`Failed to remove email address.`)}}},[W?.id,e,J,Y]),ue=(0,X.useCallback)(async()=>{if(!U?.id)return;if(W){C.error(`Remove the email address first.`);return}N(!1);let t=U.subdomain;try{await ae.mutateAsync({path:{assistant_id:e,id:U.id}}),h(t),Y(),C.success(`Domain released.`)}catch(e){a(e,{context:`email_domain_release`}),C.error(`Failed to release domain.`)}},[W,e,ae,U?.id,U?.subdomain,Y]);if(I.isLoading)return(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin`}),`Checking subscription…`]});if(B)return(0,Z.jsxs)(_,{tone:`info`,icon:(0,Z.jsx)(T,{className:`h-4 w-4`,"aria-hidden":!0}),title:`Get a dedicated email address for your assistant`,actions:(0,Z.jsx)(p,{size:`compact`,onClick:()=>i(`${te.settings.billing}?adjust_plan`),children:`Upgrade to Pro`}),children:[`Pro plans include a managed`,` `,`<your-subdomain>.${n}`,` inbox — no provider setup required. Or switch to `,(0,Z.jsx)(`strong`,{children:`Your Own`}),` to bring an existing provider.`]});let de=V?(0,Z.jsx)(_,{tone:`warning`,title:`Couldn't verify subscription status`,actions:(0,Z.jsx)(p,{size:`compact`,variant:`outlined`,onClick:()=>I.refetch(),children:`Retry`}),children:`We couldn't reach the billing service. The form below assumes managed email is enabled for your org — if it isn't, registering a domain will fail.`}):null;return U?W?(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[de,(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Address`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`font-mono text-body-small-default text-[var(--content-default)]`,children:W.address}),(0,Z.jsx)(xt,{status:K.data?.status,message:K.data?.message,isLoading:K.isLoading}),(0,Z.jsx)(p,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,Z.jsx)(oe,{}),onClick:()=>F(!0),disabled:J.isPending,"aria-label":`Remove email address`})]}),(0,Z.jsx)(g,{open:P,title:`Remove Email Address`,message:(0,Z.jsxs)(Z.Fragment,{children:[`Are you sure you want to remove `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:W.address}),`? Your assistant will no longer be able to send or receive email at this address.`]}),confirmLabel:`Remove`,destructive:!0,onConfirm:le,onCancel:()=>F(!1)})]}),G.data?.usage&&(0,Z.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[G.data.usage.sent_today,` /`,` `,G.data.usage.daily_limit,` sent today ·`,` `,G.data.usage.received_today,` received`]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[de,(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Domain`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsxs)(`span`,{className:`font-mono text-body-small-default text-[var(--content-default)]`,children:[U.subdomain,`.`,n]}),(0,Z.jsx)(xt,{status:K.data?.status,message:K.data?.message,isLoading:K.isLoading}),(0,Z.jsx)(p,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,Z.jsx)(oe,{}),onClick:()=>N(!0),disabled:ae.isPending,"aria-label":`Release domain`})]}),(0,Z.jsx)(g,{open:M,title:`Release Domain`,message:(0,Z.jsxs)(Z.Fragment,{children:[`Are you sure you want to release `,(0,Z.jsxs)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:[U.subdomain,`.`,n]}),`? The subdomain will become available for others to claim.`]}),confirmLabel:`Release`,destructive:!0,onConfirm:ue,onCancel:()=>N(!1)})]}),(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Email address`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsxs)(`div`,{className:`flex h-9 min-w-0 flex-1 items-center rounded-md border bg-[var(--field-bg)] text-body-medium-lighter transition-[border-color] duration-150 ${D?`border-[var(--system-negative-strong)]`:`border-[var(--field-border)] focus-within:border-[var(--border-active)]`}`,children:[(0,Z.jsx)(`input`,{value:S,onChange:e=>{w(e.target.value.toLowerCase()),D&&k(null)},placeholder:`hi`,"aria-label":`Email username`,"aria-invalid":!!D,className:`h-full min-w-0 flex-1 bg-transparent pl-3 pr-1 text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`}),(0,Z.jsxs)(`span`,{className:`shrink-0 pr-3 font-mono text-[var(--content-secondary)]`,children:[`@`,re]})]}),(0,Z.jsx)(p,{onClick:ce,disabled:q.isPending||!S.trim(),children:q.isPending?`Creating…`:`Create`})]}),D&&(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--system-negative-strong)]`,children:D})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[de,(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Subdomain`}),(0,Z.jsx)(E,{subdomain:m,onSubdomainChange:e=>{h(e),b&&x(null)},domainSuffix:n,subdomainPlaceholder:`my-assistant`,error:b}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Each assistant gets its own subdomain. Lowercase letters, numbers, and hyphens only.`}),(0,Z.jsx)(p,{onClick:()=>j(!0),disabled:ie.isPending||!m.trim(),children:ie.isPending?`Registering…`:`Register`}),(0,Z.jsx)(g,{open:A,title:`Set Subdomain`,message:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:m.trim().toLowerCase()||`subdomain`}),` will also become your assistant's public handle. You won't be able to change it once set.`]}),confirmLabel:`Confirm`,onConfirm:se,onCancel:()=>j(!1)})]})}function Ut(){let e=ft(),t=B(),{data:o}=u({...ct(),enabled:t}),s=o?.results?.[0]?.handle,c=mt.use.emailRootDomain(),l=Qe(),[d,f]=(0,X.useState)(()=>l===`gated`?`your-own`:n(tt,`managed`)),[p,m]=(0,X.useState)(()=>n(Re,`resend`)),g=u({queryKey:[`byoEmailCredential`,e,p],queryFn:async()=>{let{data:t}=await P({path:{assistant_id:e},body:{service:p,field:`api_key`},throwOnError:!0});return t},enabled:d===`your-own`||l===`gated`,staleTime:6e4,retry:i,meta:{errorContext:`byo_email_credential_check`}});(0,X.useEffect)(()=>{g.error&&a(g.error,{context:`byo_email_credential_check`,bestEffort:!0})},[g.error]);let v=g.data?.hasSecret===!0,y=(0,X.useCallback)(e=>{f(e),r(tt,e)},[]),b=(0,X.useCallback)(()=>{r(Re,p),C.success(`Email settings saved.`)},[p]),x=(0,X.useMemo)(()=>Se.find(e=>e.id===p)??Se[0],[p]),S=(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(Ie,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsxs)(`span`,{children:[`Configure `,x.displayName,` via the assistant CLI: ask the assistant to run the`,` `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 text-[12px]`,children:x.setupSkill}),` `,`skill. It walks you through storing the API key, detecting the domain, and (optionally) wiring up an inbound webhook.`]}),(0,Z.jsxs)(`a`,{href:x.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[`Open `,x.displayName,(0,Z.jsx)(D,{className:`h-3 w-3`})]})]})]}),w=(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{value:p,onChange:e=>m(e),options:Se.map(e=>({value:e.id,label:e.displayName}))})]}),v?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-[var(--system-positive-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-default)]`,children:[(0,Z.jsx)(qe,{className:`h-4 w-4 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`span`,{children:[x.displayName,` API key configured. To reconfigure, run the`,` `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 text-[12px]`,children:x.setupSkill}),` `,`skill.`]})]}),(0,Z.jsxs)(`a`,{href:x.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-body-small-default text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[`Open `,x.displayName,(0,Z.jsx)(D,{className:`h-3 w-3`})]})]}):S,(0,Z.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,Z.jsx)(Q,{onClick:b,disabled:!1})})]});return l===`gated`?(0,Z.jsx)(yt,{id:`email`,title:`Email`,subtitle:`Configure how your assistant sends and receives email`,children:w}):(0,Z.jsx)(_t,{id:`email`,title:`Email`,subtitle:`Configure how your assistant sends and receives email`,mode:d,onModeChange:y,children:d===`managed`?(0,Z.jsx)(`div`,{className:`space-y-4`,children:l===`disabled`?(0,Z.jsx)(_,{tone:`info`,children:`Log in to the Vellum platform to manage email settings.`}):(0,Z.jsx)(Ht,{assistantId:e,assistantHandle:s,emailRootDomain:c})}):w})}function Wt(){let{config:e}=Et(),{resolveAssistantId:t}=Tt(),i=l(),o=Dt(),s=Ot(),[c,u]=zt((0,X.useMemo)(()=>{if(!e)return n(Te,`your-own`);let t=e.services?.[`image-generation`]?.mode;return t===`managed`||t===`your-own`?t:n(Te,`your-own`)},[e])),[d,f]=(0,X.useState)(()=>n(Oe,`gemini-3.1-flash-image-preview`)),[p,m]=(0,X.useState)(``),[g,_]=(0,X.useState)(!1),v=(0,X.useCallback)(async()=>{_(!0);let e=p.trim(),n=c===`your-own`&&e.length>0;try{n&&await s(`gemini`,e),await o.mutateAsync({services:{"image-generation":{mode:c}}}).catch(e=>{throw C.error(`Failed to update assistant configuration. Please try again.`),a(e,{context:`patch_daemon_config`}),e});let r=await t();try{await j({path:{assistant_id:r},body:{modelId:d},throwOnError:!0})}catch(e){throw C.error(`Failed to update image generation model. Please try again.`),a(e,{context:`set_image_gen_model`}),e}finally{i.invalidateQueries({queryKey:V(r)})}}catch{_(!1);return}_(!1);try{r(Te,c),r(Oe,d),n&&m(``),C.success(`Image generation settings saved.`)}catch(e){a(e,{context:`settings-ai-image-gen-persist-local`}),C.error(`Saved, but local preferences could not be written.`)}},[p,c,d,o,s,t,i]),b=(0,X.useCallback)(()=>{m(``),f(`gemini-3.1-flash-image-preview`),r(Oe,`gemini-3.1-flash-image-preview`)},[]);return(0,Z.jsx)(_t,{title:`Image Generation`,subtitle:`Configure which model your assistant uses to generate images`,mode:c,onModeChange:e=>u(e),children:c===`managed`?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Active Model`}),(0,Z.jsxs)(`div`,{className:`flex items-end gap-3`,children:[(0,Z.jsx)(h,{className:`flex-1`,value:d,onChange:f,options:Fe.map(e=>({value:e,label:We[e]??e}))}),(0,Z.jsx)(Q,{onClick:v,disabled:g}),g&&(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsx)(y,{label:`API Key`,type:`password`,value:p,onChange:e=>m(e.target.value),placeholder:`Enter your Gemini API key`,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Active Model`}),(0,Z.jsx)(h,{value:d,onChange:f,options:Fe.map(e=>({value:e,label:We[e]??e}))})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:v,disabled:g}),g&&(0,Z.jsx)(O,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`}),(0,Z.jsx)(vt,{onClick:b})]})]})})}async function Gt(e){let{provider:t,apiKey:n,voiceId:r,text:i}=e;if(n.trim().length===0)return{kind:`error`,message:`Save an API key for this provider first.`};try{return t===`elevenlabs`?await Kt(n,r,i):t===`deepgram`?await qt(n,i):t===`fish-audio`?{kind:`unsupported`,message:`Fish Audio TTS is only supported in the desktop app today. Use ElevenLabs or Deepgram to test from the browser.`}:t===`xai`?{kind:`unsupported`,message:`xAI TTS is only supported in the desktop app today. Use ElevenLabs or Deepgram to test from the browser.`}:{kind:`unsupported`,message:`TTS testing for "${t}" is not supported from the browser yet.`}}catch(e){return{kind:`error`,message:e instanceof Error?e.message:`Failed to reach the TTS provider.`}}}async function Kt(e,t,n){let r=t.trim();if(r.length===0)return{kind:`error`,message:`Enter and save a Voice ID before testing ElevenLabs.`};let i=await fetch(`https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(r)}?output_format=mp3_44100_128`,{method:`POST`,headers:{"xi-api-key":e,"Content-Type":`application/json`,Accept:`audio/mpeg`},body:JSON.stringify({text:n,model_id:`eleven_turbo_v2_5`})});return i.ok?{kind:`audio`,blob:await i.blob()}:{kind:`error`,message:await Jt(i,`ElevenLabs rejected the request.`)}}async function qt(e,t){let n=await fetch(`https://api.deepgram.com/v1/speak?model=aura-2-thalia-en`,{method:`POST`,headers:{Authorization:`Token ${e}`,"Content-Type":`application/json`,Accept:`audio/mpeg`},body:JSON.stringify({text:t})});return n.ok?{kind:`audio`,blob:await n.blob()}:{kind:`error`,message:await Jt(n,`Deepgram rejected the request.`)}}async function Jt(e,t){try{let n=await e.text();if(n.length===0)return`${t} (HTTP ${e.status})`;try{let e=JSON.parse(n);if(e&&typeof e==`object`&&`detail`in e&&typeof e.detail==`string`)return e.detail;if(e&&typeof e==`object`&&`message`in e&&typeof e.message==`string`)return e.message}catch{}return n.slice(0,200)}catch{return`${t} (HTTP ${e.status})`}}function Yt(){let e=ft(),t=H.use.name()??`your assistant`,i=B(),{data:a}=u({...L({path:{assistant_id:e}}),enabled:i,staleTime:1/0}),o=a?.providers??st,s=o[0]?.id??`elevenlabs`,[c,l]=(0,X.useState)(()=>n(Ae,s)),[d,f]=(0,X.useState)(c),[m,g]=(0,X.useState)(``),[_,v]=(0,X.useState)(``),[b,x]=(0,X.useState)(``),[S,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(!1),D=(0,X.useMemo)(()=>o.find(e=>e.id===c)??o[0],[c,o]),O=(0,X.useCallback)(e=>{let t=n(Me+e,``),r=n(be+e,``);w(t.length>0),v(r),x(r),g(``)},[]);(0,X.useEffect)(()=>{O(c)},[c,O]);let k=(0,X.useMemo)(()=>{let e=c!==d,t=m.trim().length>0,n=_.trim()!==b;return e||t||n},[c,d,m,_,b]),A=(0,X.useCallback)(()=>{r(Ae,c);let e=m.trim();e.length>0&&(r(Me+c,e),w(!0));let t=_.trim();r(be+c,t),f(c),x(t),g(``)},[c,m,_]),j=(0,X.useCallback)(()=>{r(Me+c,``),w(!1),g(``)},[c]),M=(0,X.useCallback)(async()=>{E(!0);try{let e=n(Me+c,``),r=m.trim(),i=r.length>0?r:e;if(i.length===0){C.error(`Save an API key for this provider before testing.`);return}let a=n(be+c,``),o=_.trim(),s=await Gt({provider:c,apiKey:i,voiceId:o.length>0?o:a,text:`Hey! It's ${t}. How does this sound?`});if(s.kind!==`audio`){C.error(s.message);return}let l=URL.createObjectURL(s.blob);try{let e=new Audio(l);await e.play(),await new Promise(t=>{e.onended=()=>t(),e.onerror=()=>t()})}finally{URL.revokeObjectURL(l)}}finally{E(!1)}},[t,m,c,_]),N=S?`•••••••• (Enter a new key to replace)`:D.apiKeyPlaceholder;return(0,Z.jsx)(yt,{title:`Text-to-Speech`,subtitle:D.subtitle,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{value:c,onChange:l,options:o.map(e=>({value:e.id,label:e.displayName})),"aria-label":`TTS provider`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`API Key`}),(0,Z.jsx)(y,{type:`password`,value:m,onChange:e=>g(e.target.value),placeholder:N,fullWidth:!0})]}),D.supportsVoiceSelection&&(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Voice ID`}),(0,Z.jsx)(y,{type:`text`,value:_,onChange:e=>v(e.target.value),placeholder:`Enter a voice ID`,fullWidth:!0})]}),(0,Z.jsx)(bt,{guide:D.credentialsGuide}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(p,{variant:`outlined`,onClick:M,disabled:T,children:T?`Testing…`:`Test`}),(0,Z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:A,disabled:!k}),S&&(0,Z.jsx)(vt,{onClick:j})]})]})]})})}function Xt(){let e=Ce[0]?.id??`deepgram`,[t,i]=(0,X.useState)(()=>n(Ve,e)),[a,o]=(0,X.useState)(t),[s,c]=(0,X.useState)(``),[l,u]=(0,X.useState)(!1),d=(0,X.useMemo)(()=>Ce.find(e=>e.id===t)??Ce[0],[t]);(0,X.useEffect)(()=>{u(n(Ke+t,``).length>0),c(``)},[t]);let f=(0,X.useMemo)(()=>{let e=t!==a,n=s.trim().length>0;return e||n},[t,a,s]),p=(0,X.useCallback)(()=>{r(Ve,t);let e=s.trim();e.length>0&&(r(Ke+t,e),u(!0)),o(t),c(``)},[t,s]),m=(0,X.useCallback)(()=>{r(Ke+t,``),u(!1),c(``)},[t]),g=l?`•••••••• (Enter a new key to replace)`:d.apiKeyPlaceholder;return(0,Z.jsx)(yt,{title:`Speech-to-Text`,subtitle:d.subtitle,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(h,{value:t,onChange:i,options:Ce.map(e=>({value:e.id,label:e.displayName})),"aria-label":`STT provider`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`API Key`}),(0,Z.jsx)(y,{type:`password`,value:s,onChange:e=>c(e.target.value),placeholder:g,fullWidth:!0})]}),(0,Z.jsx)(bt,{guide:d.credentialsGuide}),(0,Z.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,Z.jsx)(Q,{onClick:p,disabled:!f}),l&&(0,Z.jsx)(vt,{onClick:m})]})]})})}function Zt(){return(0,X.useEffect)(()=>{let e=window.location.hash.slice(1);e&&requestAnimationFrame(()=>{document.getElementById(e)?.scrollIntoView({block:`start`})})},[]),(0,Z.jsxs)(`div`,{className:`space-y-5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-base)] bg-[var(--surface-base)] px-4 py-2.5`,children:[(0,Z.jsx)(Ie,{className:`mt-0.5 h-4 w-4 shrink-0 text-[var(--content-tertiary)]`}),(0,Z.jsxs)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:[`Managed services are metered and deducted from your Vellum account balance.`,` `,(0,Z.jsxs)(`a`,{href:`https://www.vellum.ai/docs/pricing`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--primary-base)] hover:underline`,children:[`View pricing`,(0,Z.jsx)(D,{className:`h-3.5 w-3.5`})]})]})]}),(0,Z.jsx)(Bt,{}),(0,Z.jsx)(Vt,{}),(0,Z.jsx)(Ut,{}),(0,Z.jsx)(Wt,{}),(0,Z.jsx)(Yt,{}),(0,Z.jsx)(Xt,{})]})}export{Zt as AiPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-CZsNGL6n.js";import{t as n}from"./react-DJZBPgpf.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./button-DdEh-9f_.js";import{t as o}from"./card-CL5iEMJO.js";import"./src-CandQWRl.js";import{n as s}from"./toast-DU1nH33j.js";import{t as c}from"./archive-BmTrKV5M.js";import{t as l}from"./loader-circle-BSAFLoPH.js";import{B as u}from"./sdk.gen-AJllUeDf.js";import{Ii as d,kn as f,lr as p,ra as m}from"./index-DuPwOXJT.js";import{t as h}from"./use-active-assistant-id-mdQQtMSE.js";var g=e(n(),1),_=i();function v(e){if(e==null)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(void 0,{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0})}function y(){return(0,_.jsx)(o,{children:(0,_.jsxs)(`div`,{className:`flex min-h-[400px] flex-col items-center justify-center px-6 py-16 text-center`,children:[(0,_.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,_.jsx)(c,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`})}),(0,_.jsx)(`h2`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No archived conversations`}),(0,_.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Conversations you archive will appear here.`})]})})}function b({conversation:e,isFirst:t,onUnarchive:n,isPending:r}){let i=[v(e.createdAt),e.source??`vellum-assistant`].filter(Boolean).join(` · `),o=e.title&&e.title.trim().length>0?e.title:`Untitled conversation`;return(0,_.jsxs)(`div`,{className:`flex items-center gap-3 py-3 ${t?``:`border-t border-[var(--border-base)]`}`,children:[(0,_.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,_.jsx)(`div`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:o}),(0,_.jsx)(`p`,{className:`mt-0.5 truncate text-body-small-default text-[var(--content-tertiary)]`,children:i})]}),(0,_.jsx)(a,{variant:`outlined`,onClick:n,disabled:r,className:`shrink-0`,children:r?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(l,{className:`h-4 w-4 animate-spin`}),`Unarchiving`]}):`Unarchive`})]})}function x(){let e=r(),n=h(),{conversations:i,isLoading:c,isError:v,refetch:x}=f(n),[S,C]=(0,g.useState)(null),w=(0,g.useCallback)(async r=>{if(n){C(r);try{await u({path:{assistant_id:n,id:r},throwOnError:!0}),p(e,n)}catch(e){t(e,{context:`archive_settings_unarchive_conversation`}),s.error(`Failed to unarchive conversation.`)}finally{C(null)}}},[n,e]);return c?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(`div`,{className:`flex min-h-[400px] items-center justify-center`,children:(0,_.jsx)(l,{className:`h-6 w-6 animate-spin text-[var(--content-disabled)]`})})}):v?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(o,{children:(0,_.jsxs)(`div`,{className:`flex min-h-[400px] flex-col items-center justify-center px-6 py-16 text-center`,children:[(0,_.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--system-error-lighter)]`,children:(0,_.jsx)(d,{className:`h-6 w-6 text-[var(--system-error-default)]`})}),(0,_.jsx)(`h2`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`Failed to load archived conversations`}),(0,_.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Something went wrong. Please try again.`}),(0,_.jsxs)(a,{variant:`outlined`,onClick:x,className:`mt-4`,children:[(0,_.jsx)(m,{className:`h-4 w-4`}),`Retry`]})]})})}):i.length===0?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(y,{})}):(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(o,{noPadding:!0,className:`px-4`,children:i.map((e,t)=>(0,_.jsx)(b,{conversation:e,isFirst:t===0,onUnarchive:()=>{w(e.conversationId)},isPending:S===e.conversationId},e.conversationId))})})}export{x as ArchivePage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-CZsNGL6n.js";import{t as n}from"./react-DJZBPgpf.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./button-DdEh-9f_.js";import{t as o}from"./card-CL5iEMJO.js";import"./src-CandQWRl.js";import{n as s}from"./toast-DU1nH33j.js";import{t as c}from"./archive-BmTrKV5M.js";import{t as l}from"./loader-circle-BSAFLoPH.js";import{B as u}from"./sdk.gen-AJllUeDf.js";import{Fi as d,On as f,cr as p,na as m}from"./index-CSXKZUHj.js";import{t as h}from"./use-active-assistant-id-mdQQtMSE.js";var g=e(n(),1),_=i();function v(e){if(e==null)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString(void 0,{month:`short`,day:`numeric`,year:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0})}function y(){return(0,_.jsx)(o,{children:(0,_.jsxs)(`div`,{className:`flex min-h-[400px] flex-col items-center justify-center px-6 py-16 text-center`,children:[(0,_.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,_.jsx)(c,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`})}),(0,_.jsx)(`h2`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No archived conversations`}),(0,_.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Conversations you archive will appear here.`})]})})}function b({conversation:e,isFirst:t,onUnarchive:n,isPending:r}){let i=[v(e.createdAt),e.source??`vellum-assistant`].filter(Boolean).join(` · `),o=e.title&&e.title.trim().length>0?e.title:`Untitled conversation`;return(0,_.jsxs)(`div`,{className:`flex items-center gap-3 py-3 ${t?``:`border-t border-[var(--border-base)]`}`,children:[(0,_.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,_.jsx)(`div`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:o}),(0,_.jsx)(`p`,{className:`mt-0.5 truncate text-body-small-default text-[var(--content-tertiary)]`,children:i})]}),(0,_.jsx)(a,{variant:`outlined`,onClick:n,disabled:r,className:`shrink-0`,children:r?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(l,{className:`h-4 w-4 animate-spin`}),`Unarchiving`]}):`Unarchive`})]})}function x(){let e=r(),n=h(),{conversations:i,isLoading:c,isError:v,refetch:x}=f(n),[S,C]=(0,g.useState)(null),w=(0,g.useCallback)(async r=>{if(n){C(r);try{await u({path:{assistant_id:n,id:r},throwOnError:!0}),p(e,n)}catch(e){t(e,{context:`archive_settings_unarchive_conversation`}),s.error(`Failed to unarchive conversation.`)}finally{C(null)}}},[n,e]);return c?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(`div`,{className:`flex min-h-[400px] items-center justify-center`,children:(0,_.jsx)(l,{className:`h-6 w-6 animate-spin text-[var(--content-disabled)]`})})}):v?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(o,{children:(0,_.jsxs)(`div`,{className:`flex min-h-[400px] flex-col items-center justify-center px-6 py-16 text-center`,children:[(0,_.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--system-error-lighter)]`,children:(0,_.jsx)(d,{className:`h-6 w-6 text-[var(--system-error-default)]`})}),(0,_.jsx)(`h2`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`Failed to load archived conversations`}),(0,_.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Something went wrong. Please try again.`}),(0,_.jsxs)(a,{variant:`outlined`,onClick:x,className:`mt-4`,children:[(0,_.jsx)(m,{className:`h-4 w-4`}),`Retry`]})]})})}):i.length===0?(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(y,{})}):(0,_.jsx)(`div`,{className:`w-full`,children:(0,_.jsx)(o,{noPadding:!0,className:`px-4`,children:i.map((e,t)=>(0,_.jsx)(b,{conversation:e,isFirst:t===0,onUnarchive:()=>{w(e.conversationId)},isPending:S===e.conversationId},e.conversationId))})})}export{x as ArchivePage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{n as t,t as n}from"./capture-error-CZsNGL6n.js";import{t as r}from"./react-DJZBPgpf.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import"./src-CandQWRl.js";import{t as o}from"./tag-Ccr7Quy6.js";import{n as s}from"./toast-DU1nH33j.js";import{t as c}from"./loader-circle-BSAFLoPH.js";import{n as l}from"./auth-store-CzP-IhbE.js";import{a as u,r as d}from"./api-BqB0CayF.js";import{sr as f}from"./index-DuPwOXJT.js";import{t as p}from"./environment-store-Du3C86B3.js";var m=e(r(),1),h=a();function g({value:e,max:t,caption:n}){let r=t>0?Math.max(0,Math.min(e/t*100,100)):0,i=r>90;return(0,h.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,h.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,h.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-200`,style:{width:`${r}%`,backgroundColor:i?`var(--system-negative-strong)`:`var(--system-positive-strong)`}})}),n&&(0,h.jsx)(`span`,{className:`text-label-medium-default text-[var(--content-tertiary)]`,children:n})]})}var _=7,v=2e3;function y({version:e,loading:t,assistantId:n}){let r=(0,m.useRef)(0),i=(0,m.useRef)(null),[a,o]=(0,m.useState)(null),s=(0,m.useCallback)(()=>{if(r.current+=1,r.current>=_){r.current=0;let e=f.getState(),t=!e.settingsDeveloperNav;e.setFlag(`settingsDeveloperNav`,t,n),o(t?`Developer mode enabled`:`Developer mode disabled`),i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>{o(null),i.current=null},v)}},[n]);return(0,m.useEffect)(()=>()=>{i.current!==null&&clearTimeout(i.current)},[]),t?(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,h.jsx)(c,{className:`h-4 w-4 animate-spin`}),`Loading version...`]}):e?(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`button`,{type:`button`,className:`break-all text-left text-body-medium-lighter text-[var(--content-default)]`,onClick:s,children:e}),a&&(0,h.jsx)(`p`,{className:`mt-1 text-body-small-default text-[var(--content-accent)]`,children:a})]}):(0,h.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`—`})}var b=[`currentAssistant`],x=4e3,S=9e4;function C(e,t){return(e.memory?.maxMb??null)!==(t.memory?.maxMb??null)||(e.cpu?.maxCores??null)!==(t.cpu?.maxCores??null)}function w(){let{data:e=null,isLoading:r,refetch:a}=i({queryKey:b,queryFn:async()=>{let e=await d();return e.ok?e.data:null},retry:!1}),o=e?.id,[c,l]=(0,m.useState)(null),[f,p]=(0,m.useState)(!1),[h,g]=(0,m.useState)(!1),_=(0,m.useRef)(0),v=(0,m.useRef)(0),y=(0,m.useCallback)(async e=>{if(!o)return l(null),p(!1),null;_.current+=1;let r=_.current;p(!0);try{let t=await u(o);return r===_.current?t.ok?(l(t.data),t.data):(e?.keepStaleOnError||l(null),null):null}catch(i){return r===_.current?(e?.keepStaleOnError||l(null),!t(i)&&!e?.keepStaleOnError&&(n(i,{context:`fetch_assistant_healthz`}),s.error(`Failed to load assistant info`)),null):null}finally{r===_.current&&p(!1)}},[o]);return(0,m.useEffect)(()=>{y()},[y]),(0,m.useEffect)(()=>()=>{v.current+=1,g(!1),l(null)},[o]),{assistant:e,assistantLoading:r,healthz:c,healthzLoading:f,healthzPolling:h,refetch:(0,m.useCallback)(async()=>{await a(),await y()},[a,y]),refetchUntilResized:(0,m.useCallback)(async e=>{let t=++v.current,n=Date.now()+S;g(!0);let r=e;try{for(a();Date.now()<n&&t===v.current;){if(await new Promise(e=>setTimeout(e,x)),t!==v.current)return;let e=await y({keepStaleOnError:!0});if(t!==v.current)return;if(e){if(r==null){r=e;continue}if(C(e,r))return}}}finally{t===v.current&&g(!1)}},[y,a])}}function T({assistant:e,assistantLoading:t,healthz:n,healthzLoading:r}){let i=p.use.isNonProduction(),a=l.use.user()?.email;if(t)return(0,h.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,h.jsx)(c,{className:`h-4 w-4 animate-spin`}),`Loading assistant info...`]});if(!e)return(0,h.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to get started.`});let s=n?.version??e.current_release_version;return(0,h.jsxs)(`div`,{className:`grid grid-cols-[140px_minmax(0,1fr)] gap-y-3`,children:[a&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Account`}),(0,h.jsx)(O,{children:a})]}),(0,h.jsx)(D,{children:`Name`}),(0,h.jsx)(O,{children:e.name}),e.description&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Description`}),(0,h.jsx)(O,{children:e.description})]}),(0,h.jsx)(D,{children:`Status`}),(0,h.jsx)(`div`,{children:(0,h.jsx)(o,{tone:e.status===`active`?`positive`:`neutral`,children:e.status})}),(0,h.jsx)(D,{children:`Assistant ID`}),(0,h.jsx)(`span`,{className:`break-all font-mono text-body-small-default text-[var(--content-tertiary)]`,children:e.id}),i&&e.machine_id&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Machine ID`}),(0,h.jsx)(`span`,{className:`break-all font-mono text-body-small-default text-[var(--content-tertiary)]`,children:e.machine_id})]}),(0,h.jsx)(D,{children:`Created`}),(0,h.jsx)(O,{children:e.created?new Date(e.created).toLocaleDateString():`Unknown`}),(0,h.jsx)(D,{children:`Version`}),(0,h.jsx)(y,{version:s??null,loading:r&&!e.current_release_version,assistantId:e.id??null})]})}function E(e){return e>=1024?`${(e/1024).toFixed(1)} GB`:`${e.toFixed(0)} MB`}function D({children:e}){return(0,h.jsx)(`span`,{className:`text-body-medium-default text-[var(--content-tertiary)]`,children:e})}function O({children:e}){return(0,h.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-default)]`,children:e})}export{g as i,E as n,w as r,T as t};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{n as t,t as n}from"./capture-error-CZsNGL6n.js";import{t as r}from"./react-DJZBPgpf.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import"./src-CandQWRl.js";import{t as o}from"./tag-Ccr7Quy6.js";import{n as s}from"./toast-DU1nH33j.js";import{t as c}from"./loader-circle-BSAFLoPH.js";import{n as l}from"./auth-store-DlGj6EmB.js";import{a as u,r as d}from"./api-BqB0CayF.js";import{or as f}from"./index-CSXKZUHj.js";import{t as p}from"./environment-store-Du3C86B3.js";var m=e(r(),1),h=a();function g({value:e,max:t,caption:n}){let r=t>0?Math.max(0,Math.min(e/t*100,100)):0,i=r>90;return(0,h.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,h.jsx)(`div`,{className:`h-2 w-full overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,h.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-200`,style:{width:`${r}%`,backgroundColor:i?`var(--system-negative-strong)`:`var(--system-positive-strong)`}})}),n&&(0,h.jsx)(`span`,{className:`text-label-medium-default text-[var(--content-tertiary)]`,children:n})]})}var _=7,v=2e3;function y({version:e,loading:t,assistantId:n}){let r=(0,m.useRef)(0),i=(0,m.useRef)(null),[a,o]=(0,m.useState)(null),s=(0,m.useCallback)(()=>{if(r.current+=1,r.current>=_){r.current=0;let e=f.getState(),t=!e.settingsDeveloperNav;e.setFlag(`settingsDeveloperNav`,t,n),o(t?`Developer mode enabled`:`Developer mode disabled`),i.current!==null&&clearTimeout(i.current),i.current=setTimeout(()=>{o(null),i.current=null},v)}},[n]);return(0,m.useEffect)(()=>()=>{i.current!==null&&clearTimeout(i.current)},[]),t?(0,h.jsxs)(`span`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,h.jsx)(c,{className:`h-4 w-4 animate-spin`}),`Loading version...`]}):e?(0,h.jsxs)(`div`,{children:[(0,h.jsx)(`button`,{type:`button`,className:`break-all text-left text-body-medium-lighter text-[var(--content-default)]`,onClick:s,children:e}),a&&(0,h.jsx)(`p`,{className:`mt-1 text-body-small-default text-[var(--content-accent)]`,children:a})]}):(0,h.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`—`})}var b=[`currentAssistant`],x=4e3,S=9e4;function C(e,t){return(e.memory?.maxMb??null)!==(t.memory?.maxMb??null)||(e.cpu?.maxCores??null)!==(t.cpu?.maxCores??null)}function w(){let{data:e=null,isLoading:r,refetch:a}=i({queryKey:b,queryFn:async()=>{let e=await d();return e.ok?e.data:null},retry:!1}),o=e?.id,[c,l]=(0,m.useState)(null),[f,p]=(0,m.useState)(!1),[h,g]=(0,m.useState)(!1),_=(0,m.useRef)(0),v=(0,m.useRef)(0),y=(0,m.useCallback)(async e=>{if(!o)return l(null),p(!1),null;_.current+=1;let r=_.current;p(!0);try{let t=await u(o);return r===_.current?t.ok?(l(t.data),t.data):(e?.keepStaleOnError||l(null),null):null}catch(i){return r===_.current?(e?.keepStaleOnError||l(null),!t(i)&&!e?.keepStaleOnError&&(n(i,{context:`fetch_assistant_healthz`}),s.error(`Failed to load assistant info`)),null):null}finally{r===_.current&&p(!1)}},[o]);return(0,m.useEffect)(()=>{y()},[y]),(0,m.useEffect)(()=>()=>{v.current+=1,g(!1),l(null)},[o]),{assistant:e,assistantLoading:r,healthz:c,healthzLoading:f,healthzPolling:h,refetch:(0,m.useCallback)(async()=>{await a(),await y()},[a,y]),refetchUntilResized:(0,m.useCallback)(async e=>{let t=++v.current,n=Date.now()+S;g(!0);let r=e;try{for(a();Date.now()<n&&t===v.current;){if(await new Promise(e=>setTimeout(e,x)),t!==v.current)return;let e=await y({keepStaleOnError:!0});if(t!==v.current)return;if(e){if(r==null){r=e;continue}if(C(e,r))return}}}finally{t===v.current&&g(!1)}},[y,a])}}function T({assistant:e,assistantLoading:t,healthz:n,healthzLoading:r}){let i=p.use.isNonProduction(),a=l.use.user()?.email;if(t)return(0,h.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,h.jsx)(c,{className:`h-4 w-4 animate-spin`}),`Loading assistant info...`]});if(!e)return(0,h.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to get started.`});let s=n?.version??e.current_release_version;return(0,h.jsxs)(`div`,{className:`grid grid-cols-[140px_minmax(0,1fr)] gap-y-3`,children:[a&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Account`}),(0,h.jsx)(O,{children:a})]}),(0,h.jsx)(D,{children:`Name`}),(0,h.jsx)(O,{children:e.name}),e.description&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Description`}),(0,h.jsx)(O,{children:e.description})]}),(0,h.jsx)(D,{children:`Status`}),(0,h.jsx)(`div`,{children:(0,h.jsx)(o,{tone:e.status===`active`?`positive`:`neutral`,children:e.status})}),(0,h.jsx)(D,{children:`Assistant ID`}),(0,h.jsx)(`span`,{className:`break-all font-mono text-body-small-default text-[var(--content-tertiary)]`,children:e.id}),i&&e.machine_id&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(D,{children:`Machine ID`}),(0,h.jsx)(`span`,{className:`break-all font-mono text-body-small-default text-[var(--content-tertiary)]`,children:e.machine_id})]}),(0,h.jsx)(D,{children:`Created`}),(0,h.jsx)(O,{children:e.created?new Date(e.created).toLocaleDateString():`Unknown`}),(0,h.jsx)(D,{children:`Version`}),(0,h.jsx)(y,{version:s??null,loading:r&&!e.current_release_version,assistantId:e.id??null})]})}function E(e){return e>=1024?`${(e/1024).toFixed(1)} GB`:`${e.toFixed(0)} MB`}function D({children:e}){return(0,h.jsx)(`span`,{className:`text-body-medium-default text-[var(--content-tertiary)]`,children:e})}function O({children:e}){return(0,h.jsx)(`span`,{className:`text-body-medium-lighter text-[var(--content-default)]`,children:e})}export{g as i,E as n,w as r,T as t};
@@ -0,0 +1,6 @@
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{a as t,c as n,i as r,t as i}from"./local-settings-lVNyIOJ_.js";import{a,n as o,t as s}from"./device-settings-C07QvMzm.js";import{o as c,t as l}from"./capture-error-CZsNGL6n.js";import{t as u}from"./react-DJZBPgpf.js";import{t as d}from"./useQuery-B45lW1Kk.js";import{n as f,t as p}from"./create-selectors-CDULelrw.js";import{A as m,D as h,E as ee,O as te,T as g,a as ne,b as re,f as _,g as ie,h as ae,i as oe,j as v,k as se,l as ce,n as le,s as y,t as b,x as ue}from"./resolved-assistants-store-Cr2Xs5H7.js";import{t as x}from"./is-electron-CavSPgmY.js";import{n as de,r as S,t as fe}from"./api-errors-ChauV4ed.js";import{a as pe,c as C,r as me}from"./api-BqB0CayF.js";import{t as w}from"./client.gen-BKAMS0D0.js";import{ht as he}from"./sdk.gen-Dncuy6t3.js";import{i as ge,t as _e}from"./dist-B4KYfSON.js";import{i as ve}from"./routes-flPkdwd0.js";import{n as ye}from"./event-bus-CMBsMREI.js";var T=p(f(()=>({assistantState:{kind:`loading`},expectingFirstMessage:!1}))),be=new Set;function xe(e){return be.add(e),()=>{be.delete(e)}}function Se(){for(let e of be)try{e()}catch{}}var Ce=new Set([502,503,504]);function E(e){if(e.ok)switch(e.data.status){case`active`:return e.data.is_local?{kind:`self_hosted`}:{kind:`active`};case`initializing`:return{kind:`initializing`};case`to_be_deleted`:return{kind:`cleaning_up`};default:return{kind:`error`,message:`Unexpected assistant status: ${e.data.status}`}}return e.status===404?{kind:`auto_hatch`}:{kind:`error`,message:S(e.error,void 0,`Failed to check assistant status.`)}}function we(e){return e===void 0||e>=500}var Te=`platform_hosted_disabled`,Ee=`We are at capacity for Vellum Managed Assistants, more will be available soon!`;function De(e,t){return e===503?t?.code===Te:!1}var Oe=3e5;function ke(){return{kind:`error`,message:`Your assistant is taking longer than expected to start. Please try again, or check the community for help.`}}var D=[`assistant`,`current`],Ae=3e3,je=new Set([`initializing`,`cleaning_up`]);function Me(e){if(!e)return!1;let t=E(e);return je.has(t.kind)?Ae:!1}function Ne(e){return e?[...D,e]:D}function Pe(e){let t=e.selectedPlatformAssistantId??null;return d({queryKey:Ne(t),queryFn:()=>me(t??void 0),enabled:e.enabled,retry:!1,refetchInterval:e=>Me(e.state.data),refetchOnWindowFocus:!1})}var O=e=>e===`authenticated`,Fe=e=>e!==`initializing`,k=e=>e===`present`,Ie=4e3,Le=6e4,A=new class{state={kind:`loading`};generation=0;initializingTimeout=null;ready=!1;inputs={sessionStatus:`initializing`,hasPlatformSession:!1,queryClient:null,selectedPlatformAssistantId:null};probeTimer=null;constructor(){xe(()=>this.onUnreachable())}setInputs(e){this.inputs=e,this.ready=!0}resetForLogout(){b.getState().activeAssistantId!==null&&b.getState().setActiveAssistantId(null),this.state.kind!==`loading`&&this.transition({kind:`loading`}),this.clearExpectingFirstMessage()}async respondToInputs(){if(this.ready){if(!O(this.inputs.sessionStatus)){this.resetForLogout();return}if(v()){this.applyGatewayAuthShortCircuit();return}this.inputs.hasPlatformSession&&g(null),this.inputs.isOrgReady&&await this.checkAssistant()}}async applyServerResult(e){this.ready&&(this.state.kind!==`initializing`&&this.state.kind!==`cleaning_up`||await this.applyServerStateUpdate(e))}async checkAssistant(){if(!this.ready)return;if(v()){this.applyGatewayAuthShortCircuit();return}let e=this.generation;try{let t=this.inputs.selectedPlatformAssistantId??null,n=await this.inputs.queryClient.fetchQuery({queryKey:Ne(t),queryFn:()=>me(t??void 0),staleTime:0});if(e!==this.generation)return;if(t&&!n.ok&&n.status===404){let r=b.getState(),i=r.selectedPlatformAssistantByOrg;for(let e of Object.keys(i))i[e]===t&&r.setSelectedPlatformAssistant(e,null);if(n=await this.inputs.queryClient.fetchQuery({queryKey:D,queryFn:()=>me(),staleTime:0}),e!==this.generation)return}await this.applyServerStateUpdate(n)}catch(t){if(console.error(`Error checking assistant status:`,t),l(t,{context:`check_assistant`}),e!==this.generation)return;this.transition({kind:`error`,message:`Network error. Please check your connection and try again.`})}}retryAssistant(){this.ready&&this.checkAssistant()}markExpectingFirstMessage(){T.getState().expectingFirstMessage||T.setState({expectingFirstMessage:!0})}clearExpectingFirstMessage(){T.getState().expectingFirstMessage&&T.setState({expectingFirstMessage:!1})}transition(e){let t=this.state.kind;this.state=e,T.setState({assistantState:e}),e.kind===`initializing`?t!==`initializing`&&this.armInitializingWatchdog():this.initializingTimeout&&=(clearTimeout(this.initializingTimeout),null),e.kind!==`initializing`&&e.kind!==`active`&&this.clearExpectingFirstMessage()}armInitializingWatchdog(){this.initializingTimeout&&clearTimeout(this.initializingTimeout),this.initializingTimeout=setTimeout(()=>{this.generation++,c(`Assistant stuck in initializing state`,{level:`warning`,extra:{timeoutMs:Oe}}),this.transition(ke())},Oe)}projectActive(e){let t=e.data.maintenance_mode;g(null);let n=b.getState();n.upsertFromApi(e.data),n.setActiveAssistantId(e.data.id),this.transition({kind:`active`,isLocal:e.data.is_local??!1,maintenanceMode:{enabled:t?.enabled}}),this.probeReachability(e.data.id)}projectSelfHosted(e){g({url:e.data.ingress_url,token:e.data.platform_actor_token});let t=b.getState();t.upsertFromApi(e.data),t.setActiveAssistantId(e.data.id),this.transition({kind:`self_hosted`})}applyGatewayAuthShortCircuit(){let e=window.location.origin,t=`self`,n=ne();if(n){let r=ce();e=`${window.location.origin}${n}`,t=r?.assistantId??t}g({url:e,token:te()}),b.getState().setActiveAssistantId(t),this.transition({kind:`active`,isLocal:!0})}async applyServerStateUpdate(e){let t=this.generation,n=E(e);if(n.kind!==`auto_hatch`){if(n.kind===`active`&&e.ok){this.projectActive(e);return}if(n.kind===`self_hosted`&&e.ok){this.projectSelfHosted(e);return}t===this.generation&&n.kind!==`active`&&this.transition(n)}}async probeReachability(e){let t=this.generation;try{let n=await pe(e);if(t!==this.generation||this.state.kind!==`active`||b.getState().activeAssistantId!==e)return;this.transition({...this.state,reachable:n.ok})}catch{if(t!==this.generation||this.state.kind!==`active`||b.getState().activeAssistantId!==e)return;this.transition({...this.state,reachable:!1})}}cancelProbeTimer(){this.probeTimer&&=(clearTimeout(this.probeTimer),null)}startProbeLoop(e){this.cancelProbeTimer();let t=Date.now(),n=async()=>{if(this.state.kind!==`active`||this.state.reachable===!0||Date.now()-t>Le)return;await this.probeReachability(e);let r=this.state;r.kind!==`active`||r.reachable===!0||Date.now()-t>Le||(this.probeTimer=setTimeout(()=>void n(),Ie))};this.probeTimer=setTimeout(()=>void n(),Ie)}onUnreachable(){this.triggerReachabilityProbe()}triggerReachabilityProbe(){if(this.state.kind!==`active`)return;let e=b.getState().activeAssistantId;e&&(this.transition({...this.state,reachable:!1}),this.startProbeLoop(e))}__resetForTesting(){this.initializingTimeout&&=(clearTimeout(this.initializingTimeout),null),this.cancelProbeTimer(),this.state={kind:`loading`},this.generation=0,this.ready=!1,T.setState({expectingFirstMessage:!1}),this.inputs={sessionStatus:`initializing`,hasPlatformSession:!1,queryClient:null},T.setState({assistantState:this.state}),b.setState({activeAssistantId:null})}},Re={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)};Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});function ze({onRequest:e,onSseError:t,onSseEvent:n,responseTransformer:r,responseValidator:i,sseDefaultRetryDelay:a,sseMaxRetryAttempts:o,sseMaxRetryDelay:s,sseSleepFn:c,url:l,...u}){let d,f=c??(e=>new Promise(t=>setTimeout(t,e)));return{stream:async function*(){let c=a??3e3,p=0,m=u.signal??new AbortController().signal;for(;!m.aborted;){p++;let a=u.headers instanceof Headers?u.headers:new Headers(u.headers);d!==void 0&&a.set(`Last-Event-ID`,d);try{let t={redirect:`follow`,...u,body:u.serializedBody,headers:a,signal:m},o=new Request(l,t);e&&(o=await e(l,t));let s=await(u.fetch??globalThis.fetch)(o);if(!s.ok)throw Error(`SSE failed: ${s.status} ${s.statusText}`);if(!s.body)throw Error(`No body in SSE response`);let f=s.body.pipeThrough(new TextDecoderStream).getReader(),p=``,h=()=>{try{f.cancel()}catch{}};m.addEventListener(`abort`,h);try{for(;;){let{done:e,value:t}=await f.read();if(e)break;p+=t,p=p.replace(/\r\n?/g,`
2
+ `);let a=p.split(`
3
+
4
+ `);p=a.pop()??``;for(let e of a){let t=e.split(`
5
+ `),a=[],o;for(let e of t)if(e.startsWith(`data:`))a.push(e.replace(/^data:\s*/,``));else if(e.startsWith(`event:`))o=e.replace(/^event:\s*/,``);else if(e.startsWith(`id:`))d=e.replace(/^id:\s*/,``);else if(e.startsWith(`retry:`)){let t=Number.parseInt(e.replace(/^retry:\s*/,``),10);Number.isNaN(t)||(c=t)}let s,l=!1;if(a.length){let e=a.join(`
6
+ `);try{s=JSON.parse(e),l=!0}catch{s=e}}l&&(i&&await i(s),r&&(s=await r(s))),n?.({data:s,event:o,id:d,retry:c}),a.length&&(yield s)}}}finally{m.removeEventListener(`abort`,h),f.releaseLock()}break}catch(e){if(t?.(e),o!==void 0&&p>=o)break;await f(Math.min(c*2**(p-1),s??3e4))}}}()}}var Be=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},Ve=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},He=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},Ue=({allowReserved:e,explode:t,name:n,style:r,value:i})=>{if(!t){let t=(e?i:i.map(e=>encodeURIComponent(e))).join(Ve(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let a=Be(r),o=i.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):j({allowReserved:e,name:n,value:t})).join(a);return r===`label`||r===`matrix`?a+o:o},j=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},We=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:a})=>{if(i instanceof Date)return a?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let o=He(r),s=Object.entries(i).map(([t,i])=>j({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(o);return r===`label`||r===`matrix`?o+s:s},Ge=/\{[^{}]+\}/g,Ke=({path:e,url:t})=>{let n=t,r=t.match(Ge);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let o=e[i];if(o==null)continue;if(Array.isArray(o)){n=n.replace(t,Ue({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,We({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${j({name:i,value:o})}`);continue}let s=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,s)}return n},qe=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=Ke({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o};function Je(e){let t=e.body!==void 0;if(t&&e.bodySerializer)return`serializedBody`in e?e.serializedBody!==void 0&&e.serializedBody!==``?e.serializedBody:null:e.body===``?null:e.body;if(t)return e.body}var Ye=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},Xe=({parameters:e={},...t}={})=>n=>{let r=[];if(n&&typeof n==`object`)for(let i in n){let a=n[i];if(a==null)continue;let o=e[i]||t;if(Array.isArray(a)){let e=Ue({allowReserved:o.allowReserved,explode:!0,name:i,style:`form`,value:a,...o.array});e&&r.push(e)}else if(typeof a==`object`){let e=We({allowReserved:o.allowReserved,explode:!0,name:i,style:`deepObject`,value:a,...o.object});e&&r.push(e)}else{let e=j({allowReserved:o.allowReserved,name:i,value:a});e&&r.push(e)}}return r.join(`&`)},Ze=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},Qe=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1,$e=async({security:e,...t})=>{for(let n of e){if(Qe(t,n.name))continue;let e=await Ye(n,t.auth);if(!e)continue;let r=n.name??`Authorization`;switch(n.in){case`query`:t.query||={},t.query[r]=e;break;case`cookie`:t.headers.append(`Cookie`,`${r}=${e}`);break;default:t.headers.set(r,e);break}}},et=e=>qe({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:Xe(e.querySerializer),url:e.url}),tt=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=rt(e.headers,t.headers),n},nt=e=>{let t=[];return e.forEach((e,n)=>{t.push([n,e])}),t},rt=(...e)=>{let t=new Headers;for(let n of e){if(!n)continue;let e=n instanceof Headers?nt(n):Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t},M=class{fns=[];clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e==`number`?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}},it=()=>({error:new M,request:new M,response:new M}),at=Xe({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),ot={"Content-Type":`application/json`},st=(e={})=>({...Re,headers:ot,parseAs:`auto`,querySerializer:at,...e}),N=((e={})=>{let t=tt(st(),e),n=()=>({...t}),r=e=>(t=tt(t,e),n()),i=it(),a=async e=>{let n={...t,...e,fetch:e.fetch??t.fetch??globalThis.fetch,headers:rt(t.headers,e.headers),serializedBody:void 0};n.security&&await $e({...n,security:n.security}),n.requestValidator&&await n.requestValidator(n),n.body!==void 0&&n.bodySerializer&&(n.serializedBody=n.bodySerializer(n.body)),(n.body===void 0||n.serializedBody===``)&&n.headers.delete(`Content-Type`);let r=n;return{opts:r,url:et(r)}},o=async e=>{let n=e.throwOnError??t.throwOnError,r=e.responseStyle??t.responseStyle,o,s;try{let{opts:t,url:n}=await a(e),r={redirect:`follow`,...t,body:Je(t)};o=new Request(n,r);for(let e of i.request.fns)e&&(o=await e(o,t));let c=t.fetch;s=await c(o);for(let e of i.response.fns)e&&(s=await e(s,o,t));let l={request:o,response:s};if(s.ok){let e=(t.parseAs===`auto`?Ze(s.headers.get(`Content-Type`)):t.parseAs)??`json`;if(s.status===204||s.headers.get(`Content-Length`)===`0`){let n;switch(e){case`arrayBuffer`:case`blob`:case`text`:n=await s[e]();break;case`formData`:n=new FormData;break;case`stream`:n=s.body;break;default:n={};break}return t.responseStyle===`data`?n:{data:n,...l}}let n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`text`:n=await s[e]();break;case`json`:{let e=await s.text();n=e?JSON.parse(e):{};break}case`stream`:return t.responseStyle===`data`?s.body:{data:s.body,...l}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...l}}let u=await s.text(),d;try{d=JSON.parse(u)}catch{}throw d??u}catch(t){let a=t;for(let t of i.error.fns)t&&(a=await t(a,s,o,e));if(a||={},n)throw a;return r===`data`?void 0:{error:a,request:o,response:s}}},s=e=>t=>o({...t,method:e}),c=e=>async t=>{let{opts:n,url:r}=await a(t);return ze({...n,body:n.body,method:e,onRequest:async(e,t)=>{let r=new Request(e,t);for(let e of i.request.fns)e&&(r=await e(r,n));return r},serializedBody:Je(n),url:r})};return{buildUrl:e=>et({...t,...e}),connect:s(`CONNECT`),delete:s(`DELETE`),get:s(`GET`),getConfig:n,head:s(`HEAD`),interceptors:i,options:s(`OPTIONS`),patch:s(`PATCH`),post:s(`POST`),put:s(`PUT`),request:o,setConfig:r,sse:{connect:c(`CONNECT`),delete:c(`DELETE`),get:c(`GET`),head:c(`HEAD`),options:c(`OPTIONS`),patch:c(`PATCH`),post:c(`POST`),put:c(`PUT`),trace:c(`TRACE`)},trace:s(`TRACE`)}})(st()),ct=e=>(e.client??N).get({url:`/_allauth/{client}/v1/auth/provider/signup`,...e}),lt=e=>(e.client??N).post({url:`/_allauth/{client}/v1/auth/provider/signup`,...e,headers:{"Content-Type":`application/json`,...e.headers}}),ut=e=>(e.client??N).delete({url:`/_allauth/{client}/v1/auth/session`,...e}),dt=e=>(e.client??N).get({url:`/_allauth/{client}/v1/auth/session`,...e}),P=()=>x()?`app`:`browser`;function ft(e){return!e.ok&&e.status===409}function F(e,t){let n=e;if(n&&Array.isArray(n.errors))return{ok:!1,status:t,errors:n.errors};let r=n?.data;return r&&Array.isArray(r.flows)?{ok:!1,status:t,errors:[],flows:r.flows}:{ok:!1,status:t,errors:[]}}async function I(){let{data:e,error:t,response:n}=await dt({path:{client:P()}});return e?{ok:!0,data:e.data}:F(t,n?.status)}async function pt(){let{data:e,error:t,response:n}=await ut({path:{client:P()}});return e?{ok:!0,data:e}:n?.status===401?{ok:!0,data:{}}:F(t,n?.status)}async function mt(){let{data:e,error:t,response:n}=await ct({path:{client:P()}});return e?{ok:!0,data:e.data}:F(t,n?.status)}async function ht({email:e,username:t}){let{data:n,error:r,response:i}=await lt({path:{client:P()},body:{email:e,username:t}});return n?{ok:!0,data:n.data}:F(r,i?.status)}var L=`__Secure-csrftoken`;function R(){return document.cookie.split(`; `).findLast(e=>e.startsWith(`${L}=`))?.split(`=`).slice(1).join(`=`)}function gt(){document.cookie.split(`; `).filter(e=>e.startsWith(`${L}=`)).length>1&&(document.cookie=`${L}=; path=/; max-age=0; secure`)}var _t=null;async function vt(){x()||v()||(gt(),!R()&&(_t||=(async()=>{for(let e=0;e<2;e++)try{if(await dt({path:{client:`browser`}}),R())return}catch{console.warn(`CSRF cookie bootstrap failed (attempt ${e+1}/2)`),e===0&&await new Promise(e=>setTimeout(e,500))}})().finally(()=>{_t=null}),await _t))}var yt=`/accounts/oidc/redirect/`;function bt(e,t,n,r={}){let i={provider:e,callback_url:new URL(t,n).href,process:`login`};return r.intent&&(i.intent=r.intent),r.loginHint&&(i.login_hint=r.loginHint),r.providerHint&&(i.provider_hint=r.providerHint),i}function xt(e){if(!e)throw Error(`Unable to start provider redirect: CSRF token is missing. The session may not be initialized. Please refresh the page and try again.`)}async function St(e,t,n={}){await vt();let r=R();xt(r);let i=window.location.origin,a=document.createElement(`form`);a.method=`POST`,a.action=`${i}${yt}`;let o=bt(e,t,i,n);o.csrfmiddlewaretoken=r;for(let[e,t]of Object.entries(o)){let n=document.createElement(`input`);n.type=`hidden`,n.name=e,n.value=t,a.appendChild(n)}document.body.appendChild(a),a.submit()}function Ct(e,t){return e?{kind:`authenticated`}:t.some(e=>e.id===`provider_signup`&&e.is_pending)?{kind:`provider_signup`}:{kind:`error`,message:`Unexpected authentication state.`}}function wt(e){return e===`vellum.ai`||e.endsWith(`.vellum.ai`)}var Tt=/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//;function Et(e,t){if(!e)return t;if(Tt.test(e)){try{let t=new URL(e);if(t.protocol===`https:`&&wt(t.hostname))return e}catch{}return t}return e.startsWith(`//`)||e.includes(`\\`)||!e.startsWith(`/`)?t:e}var Dt=`https://www.vellum.ai`,Ot=`vellum:loopback:state`,kt=`vellum:loopback:returnTo`;function At(){let e=window.__VELLUM_CONFIG__;return e?.webUrl?{webUrl:e.webUrl}:{webUrl:Dt}}function jt(){let e=new Uint8Array(32);return crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}function Mt(){return At().webUrl===window.location.origin}async function Nt(e,t){let{webUrl:n}=At(),r=jt(),i=window.location.port||`3000`;sessionStorage.setItem(Ot,r),e&&sessionStorage.setItem(kt,e);let a=`/accounts/cli/callback?port=${i}&state=${r}`,o=`${n}/account/${t?.intent===`signup`?`signup`:`login`}?returnTo=${encodeURIComponent(a)}`;window.location.href=o}async function Pt(e){x()&&await window.vellum?.menu.setPlatformSession(e)}var z;function Ft(){return x()?(z===void 0&&(z=window.vellum?.auth?.getSessionToken?.()??null),z):null}function It(e){z=e}var Lt=e(u(),1),Rt=ge(`NativeAuth`),zt=ve.assistant,Bt=!1;function Vt(){return Bt}function Ht(){return`${window.location.protocol}//${window.location.host}`}function B(){return typeof window<`u`&&_e.isNativePlatform()}var Ut=()=>()=>{};function Wt(){return(0,Lt.useSyncExternalStore)(Ut,B,()=>!1)}async function Gt(e){let t=e?.baseURL??Ht(),{sessionToken:n}=await Rt.startAuth({baseURL:t,...e?.loginHint?{loginHint:e.loginHint}:{},...e?.providerHint?{providerHint:e.providerHint}:{}});qt(n),B()&&await Kt(),tn()&&await Qt(n);let r=Et(e?.returnTo??null,zt);window.location.href=r}async function Kt(){for(let e=0;e<6;e++){try{let e=await I();if(e.ok&&e.data.user)return}catch{}await new Promise(t=>setTimeout(t,50*(e+1)))}}function qt(e){let t=`path=/; domain=.vellum.ai; secure; samesite=lax; max-age=1209600`;document.cookie=`sessionid=${e}; ${t}`,document.cookie=`__Secure-sessionid=${e}; ${t}`}function Jt(){if(typeof document>`u`)return null;let e=document.cookie.split(`; `);for(let t of[`__Secure-sessionid`,`sessionid`]){let n=e.find(e=>e.startsWith(`${t}=`));if(n){let e=n.slice(t.length+1);if(e)return e}}return null}async function Yt(e,t,n={}){if(B()){try{await Gt({returnTo:n.intent===`signup`?ve.onboarding.privacy:n.returnTo??null,loginHint:n.loginHint,providerHint:n.providerHint})}catch(e){if(e?.code===`USER_CANCELLED`)return;throw e}return}if(x()&&window.vellum?.auth?.startOAuth){Bt=!0;try{let e=await window.vellum.auth.startOAuth({providerHint:n.providerHint,loginHint:n.loginHint,intent:n.intent});if(e?.sessionToken){It(e.sessionToken),await Pt(!0);let t=Et(n.intent===`signup`?ve.onboarding.privacy:n.returnTo??null,zt);window.location.href=t}}finally{Bt=!1}return}if(_()&&!Mt()){await Nt(n.returnTo??void 0,{intent:n.intent});return}await St(e,t,n)}var V=ge(`NativeBiometric`),Xt=`vellum.ai`;async function Zt(){if(!B())return!1;try{let{available:e}=await V.isAvailable();return e}catch{return!1}}async function Qt(e){if(!await Zt())return!1;try{return await V.storeToken({token:e,server:Xt}),!0}catch(e){return console.error(`[native-biometric] failed to store token:`,e),!1}}var H=null;async function $t(){return B()?H||(H=(async()=>{try{let{token:e}=await V.retrieveToken({server:Xt,reason:`Sign in to Vellum`});return e}catch{return null}finally{H=null}})(),H):null}async function en(){if(B())try{await V.deleteToken({server:Xt})}catch{}}function tn(){return o(`biometricEnabled`,!0)}function nn(e){a(`biometricEnabled`,e)}async function rn(){if(!B())return`Biometrics`;try{let{biometryType:e}=await V.isAvailable();switch(e){case`faceId`:return`Face ID`;case`touchId`:return`Touch ID`;case`opticId`:return`Optic ID`;default:return`Biometrics`}}catch{return`Biometrics`}}function an(e){return e}function on(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return{code:null,message:n};let r=an(e),i=r[t];if(Array.isArray(i)&&i.length>0){let e=i[0];if(typeof e==`string`)return{code:null,message:e};if(e&&typeof e==`object`&&!Array.isArray(e)){let t=an(e),r=t.code,i=t.string??t.message;return{code:typeof r==`string`?r:null,message:typeof i==`string`?i:n}}}return typeof r.detail==`string`?{code:null,message:r.detail}:{code:null,message:n}}var sn={too_short:`Must be at least 3 characters.`,too_long:`Must be at most 30 characters.`,invalid_chars:`Use only lowercase letters, digits, hyphens, and underscores.`,leading_underscore:`Cannot start with an underscore.`,trailing_underscore:`Cannot end with an underscore.`,leading_hyphen:`Cannot start with a hyphen.`,trailing_hyphen:`Cannot end with a hyphen.`,all_digits:`Cannot be all digits.`,reserved:`This handle is reserved.`,taken:`This handle is already taken.`};async function cn(){let{data:e,error:t,response:n}=await w.get({url:`/v1/user/me/`,throwOnError:!1});if(de(n,t,`Failed to load profile.`),!n.ok||!e)throw new fe(n.status,S(t,n,`Failed to load profile.`));return e}var ln=`Please choose a different handle.`;async function un(e){let{data:t,error:n,response:r}=await w.patch({url:`/v1/user/me/`,body:e,throwOnError:!1});if(!r)return{kind:`error`,message:S(n,void 0,`Failed to save profile.`)??`Failed to save profile.`};if(r.ok&&t)return{kind:`ok`,data:t};if(r.status===409){let{message:e}=on(n,`username`,sn.taken);return{kind:`taken`,message:e}}if(r.status===400){let{code:e,message:t}=on(n,`username`,ln);return{kind:`invalid`,code:e,message:t}}return{kind:`error`,message:S(n,r,`Failed to save profile.`)}}async function dn(e){await w.patch({url:`/v1/user/me/`,body:{consent:e},throwOnError:!0})}async function fn(e,t){let{data:n,error:r,response:i}=await w.get({url:`/v1/user/username-available/`,query:{username:e},signal:t,throwOnError:!1});if(de(i,r,`Failed to check handle availability.`),!i.ok||!n)throw new fe(i.status,i.status===429?`Too many checks — try again in a moment.`:S(r,i,`Failed to check handle availability.`));return n}var pn=s(`shareAnalytics`),mn=s(`shareDiagnostics`),hn=f()(e=>({shareAnalytics:i(pn,!0),shareDiagnostics:i(mn,!0),tosAccepted:!1,aiDataConsent:!1,setShareAnalytics:n=>{e({shareAnalytics:n}),t(pn,n)},setShareDiagnostics:n=>{e({shareDiagnostics:n}),t(mn,n)},setTosAccepted:t=>{e({tosAccepted:t})},setAiDataConsent:t=>{e({aiDataConsent:t})}})),U=p(hn),gn=new Map([[pn,`shareAnalytics`],[mn,`shareDiagnostics`]]),_n={shareAnalytics:!0,shareDiagnostics:!0};for(let[e,t]of gn)n(e,()=>{let n=i(e,_n[t]??!1);hn.setState({[t]:n})});var W=`2026-06-08`;function G(e,t){return`device:consent:${e}:v${W}:${t}`}function vn(e){if(typeof window>`u`||!e)return{tos:!1,ai:!1};try{let t=i(G(`tos`,e),!1),n=i(G(`ai`,e),!1);if(t||n)return{tos:t,ai:n};let r=i(`vellum:onboarding:tosAccepted`,!1),a=i(`vellum:onboarding:aiDataConsent`,!1);return r||a?(yn(e,r,a),{tos:r,ai:a}):{tos:!1,ai:!1}}catch{return{tos:!1,ai:!1}}}function yn(e,n,r){if(!(typeof window>`u`||!e))try{t(G(`tos`,e),n),t(G(`ai`,e),r)}catch{}}function bn(e){if(r(`vellum:onboarding:tosAccepted`),r(`vellum:onboarding:aiDataConsent`),r(`vellum:onboarding:selectedVersion`),!(typeof window>`u`||!e))try{r(G(`tos`,e)),r(G(`ai`,e))}catch{}}function xn(e){return e?{tos:e.tos_accepted_version===`2026-06-08`&&e.privacy_policy_accepted_version===`2026-06-08`,ai:e.ai_data_sharing_accepted_version===W,shareAnalytics:e.share_analytics,shareDiagnostics:e.share_diagnostics}:{tos:!1,ai:!1,shareAnalytics:null,shareDiagnostics:null}}function Sn(e){let t=U.getState();t.setTosAccepted(e.tos),t.setAiDataConsent(e.ai),t.setShareAnalytics(e.shareAnalytics),t.setShareDiagnostics(e.shareDiagnostics),yn(e.userId,e.tos,e.ai),e.hasPlatformSession&&dn({tos_accepted_version:e.tos?W:``,privacy_policy_accepted_version:e.tos?W:``,ai_data_sharing_accepted_version:e.ai?W:``,share_analytics:e.shareAnalytics,share_diagnostics:e.shareDiagnostics}).catch(()=>{})}function Cn(e,t,n){let r=U.getState();e===`share_analytics`?(r.setShareAnalytics(t),a(`shareAnalytics`,t)):(r.setShareDiagnostics(t),a(`shareDiagnostics`,t)),n&&dn({[e]:t}).catch(()=>{})}var wn=`vellum_active_organization_id`;function Tn(){return globalThis.sessionStorage===void 0?null:globalThis.sessionStorage}function En(){let e=Tn();if(!e)return null;try{return e.getItem(wn)}catch{return null}}function Dn(e){let t=Tn();if(t)try{t.setItem(wn,e)}catch{}}function On(){let e=Tn();if(e)try{e.removeItem(wn)}catch{}}function kn(e,t){return e.length===0?null:t&&e.some(e=>e.id===t)?t:e[0].id}var K=p(f()((e,t)=>({organizations:[],currentOrganizationId:null,status:`idle`,error:null,fetchOrganizations:async()=>{e({status:`loading`,error:null});try{let n=(await he()).data?.results??[],r=kn(n,t().currentOrganizationId??En());r&&Dn(r),e({organizations:n,currentOrganizationId:r,status:r?`ready`:`error`,error:r?null:`No organization available for this user.`})}catch(t){e({status:`error`,error:t instanceof Error&&t.message?t.message:`Failed to load organizations.`})}},setCurrentOrganizationId:n=>{let{organizations:r}=t();r.some(e=>e.id===n)&&(Dn(n),e({currentOrganizationId:n,status:`ready`}))},clearOrganization:()=>{On(),e({organizations:[],currentOrganizationId:null,status:`idle`,error:null})}})));function An(){return K.getState().currentOrganizationId??En()}function jn(){K.getState().clearOrganization()}function Mn(){let e=0,t=K.subscribe(t=>{(t.status===`ready`||t.status===`error`)&&(e=Date.now())}),n=$.subscribe((e,t)=>{let n=k(e.platformSession),r=k(t.platformSession);n&&(!r||e.user?.id!==t.user?.id)&&K.getState().fetchOrganizations()}),r=()=>{if(!k($.getState().platformSession))return;let{status:t}=K.getState();(t===`ready`||t===`error`)&&Date.now()-e>1e4&&K.getState().fetchOrganizations()},i=ye(`app.resume`,()=>{r()});return()=>{t(),n(),i()}}var Nn=`vellum:`,Pn=[`onboarding.`,`voice:`,`gw:`,`ff:client:`,`local:`,`integrations.`,`vellumDebug.`,`vellum_`],Fn=new Set([`vellum_theme`,`vellum_share_analytics`,`vellum_share_diagnostics`,`vellum_biometric_enabled`,`vellum_llm_log_retention`,`vellum_timezone`,`vellum_media_embeds_enabled`,`vellum_media_embed_domains`,`onboarding.lastUserId`]);function In(e){return e.startsWith(Nn)?!0:Fn.has(e)?!1:Pn.some(t=>e.startsWith(t))}function Ln(){try{sessionStorage.clear()}catch{}try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&In(n)&&e.push(n)}e.forEach(e=>localStorage.removeItem(e))}catch{}}function Rn(e){return e?.id??e?.email??e?.username??null}function q(e){return e?{id:Rn(e),username:e.username??null,email:e.email??null,isStaff:e.is_staff??!1,firstName:e.first_name??``,lastName:e.last_name??``}:null}var J=null,Y=null,zn=!1,Bn={id:`gateway-local`,username:`local`,email:null,isStaff:!1,firstName:`Local`,lastName:`User`},X=e=>({sessionStatus:`authenticated`,user:e,platformSession:`present`}),Vn=()=>({sessionStatus:`authenticated`,user:Bn}),Z=()=>({sessionStatus:`unauthenticated`,user:null,platformSession:`absent`});function Hn(e){(!e||J&&J!==e)&&jn(),J=e}function Un(){Y?.postMessage(`auth-changed`)}async function Q(e){if(e)try{let t=await cn();if(t.consent){let n=xn(t.consent),r=U.getState();r.setTosAccepted(n.tos),r.setAiDataConsent(n.ai),n.shareAnalytics!==null&&r.setShareAnalytics(n.shareAnalytics),n.shareDiagnostics!==null&&r.setShareDiagnostics(n.shareDiagnostics),yn(e,n.tos,n.ai),Hn(e);return}let n=vn(e),r=U.getState();r.setTosAccepted(n.tos),r.setAiDataConsent(n.ai),n.tos&&n.ai&&dn({tos_accepted_version:W,privacy_policy_accepted_version:W,ai_data_sharing_accepted_version:W}).catch(()=>{}),Hn(e);return}catch{}let t=vn(e),n=U.getState();n.setTosAccepted(t.tos),n.setAiDataConsent(t.ai),Hn(e)}var Wn=0;Promise.resolve();function Gn(e,t={}){let n=++Wn,r=()=>n!==Wn;I().then(async n=>{if(!r())if(n.ok&&n.data.user){let i=t.setUserOnSuccess?{user:q(n.data.user)}:{};if(_())try{await K.getState().fetchOrganizations();let e=await Promise.race([C(),new Promise((e,t)=>setTimeout(()=>t(Error(`sync timeout`)),3e3))]);!r()&&e.ok&&await ue(e.data)}catch{}if(r())return;e({platformSession:`present`,...i})}else t.clearOnFailure&&e({platformSession:`absent`})}).catch(()=>{r()||t.clearOnFailure&&e({platformSession:`absent`})}).finally(()=>{r()||e(e=>e.platformSession===`unknown`?{platformSession:`absent`}:{})})}function Kn(e,t){!_()||m()||y().length>0?Gn(e,t):e({platformSession:`absent`})}var $=p(f()(e=>({sessionStatus:`initializing`,user:null,platformSession:`unknown`,initSession:async()=>{if(m()){try{await ae(),e(Vn())}catch{e({sessionStatus:`unauthenticated`,user:null})}Kn(e);return}if(_()&&!m()){if(y().length>0){try{let t=await I();if(t.ok&&t.data.user){let n=q(t.data.user);await Q(n?.id??null);try{await K.getState().fetchOrganizations();let t=await C();if(t.ok&&(await ue(t.data),y().length===0&&oe().length===0)){e(X(n));return}}catch{}e(X(n));return}}catch{}e(Z());return}e(Vn()),zn?e({platformSession:`absent`}):Gn(e,{setUserOnSuccess:!0}),zn=!1;return}try{let t=await I();if(t.ok&&t.data.user){let n=q(t.data.user);await Q(n?.id??null);try{await K.getState().fetchOrganizations();let e=await C();e.ok&&b.getState().setFromApi(e.data)}catch{}e(X(n));return}}catch(e){console.error(`auth.initSession failed`,e)}if(B()&&tn())try{let t=await $t();if(t){qt(t),await Kt();let n=await I();if(n.ok&&n.data.user){let t=q(n.data.user);await Q(t?.id??null);try{await K.getState().fetchOrganizations();let e=await C();e.ok&&b.getState().setFromApi(e.data)}catch{}e(X(t));return}}}catch(e){console.warn(`auth.initSession biometric recovery failed`,e)}await Q(null),e(Z())},connectLocalAssistant:async t=>{re(t),await ie(),e(Vn()),Kn(e)},connectPlatformAssistant:async t=>{re(t);let n=await I();if(!n.ok||!n.data.user)throw Error(`Platform authentication required`);let r=q(n.data.user);await Q(r?.id??null),await K.getState().fetchOrganizations(),e(X(r))},refreshSession:async()=>{if(v()){try{await h(se()),e({sessionStatus:`authenticated`})}catch{return e(Z()),!1}return Kn(e,{clearOnFailure:!0}),!0}try{let t=await I();if(t.ok&&t.data.user){let n=q(t.data.user);if(await Q(n?.id??null),_())try{await K.getState().fetchOrganizations();let e=await C();e.ok&&await ue(e.data)}catch{}return e(X(n)),!0}}catch(e){console.warn(`auth.refreshSession failed`,e)}return await Q(null),e(Z()),!1},logout:async()=>{if(v()){le(),ee(),jn(),Ln(),A.resetForLogout(),e(Z()),Un();return}zn=!0;try{await pt()}finally{x()&&await window.vellum?.auth?.signOut?.(),_()&&(document.cookie=`sessionid=; path=/; samesite=lax; expires=Thu, 01 Jan 1970 00:00:00 UTC`),en(),jn(),Ln(),A.resetForLogout(),e(Z()),Un()}}}))),qn=()=>O($.use.sessionStatus()),Jn=()=>!Fe($.use.sessionStatus()),Yn=()=>k($.use.platformSession());function Xn(){let{refreshSession:e}=$.getState(),t=[],n=()=>e().catch(e=>console.warn(`auth.refreshSession failed`,e)),r=ye(`app.resume`,()=>{Vt()||n()});return t.push(r),typeof BroadcastChannel<`u`&&(Y=new BroadcastChannel(`auth`),Y.onmessage=()=>{Ln(),window.location.reload()},t.push(()=>{Y?.close(),Y=null})),()=>t.forEach(e=>e())}export{Pt as A,N as B,Qt as C,Gt as D,Yt as E,R as F,Pe as G,k as H,mt as I,E as J,Ee as K,I as L,Et as M,Ct as N,Wt as O,vt as P,T as Q,ft as R,nn as S,B as T,O as U,A as V,Fe as W,Ce as X,we as Y,Se as Z,on as _,Jn as a,Zt as b,K as c,Cn as d,U as f,un as g,cn as h,qn as i,Mt as j,Ft as k,bn as l,fn as m,$ as n,An as o,sn as p,De as q,Yn as r,Mn as s,Xn as t,Sn as u,en as v,Jt as w,tn as x,rn as y,ht as z};