@vellumai/web 0.10.7-dev.202607100313.fffdfea → 0.10.7-dev.202607100720.fba456e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{account-page-Ce-pbLMJ.js → account-page-Li0uLmLs.js} +1 -1
- package/dist/assets/{acp-run-detail-panel-T0GBDg-W.js → acp-run-detail-panel-C0yvGSks.js} +1 -1
- package/dist/assets/{activity-steps-panel-BXXeXc19.js → activity-steps-panel-OLcpKG_k.js} +1 -1
- package/dist/assets/{advanced-page-C8Ib_u5F.js → advanced-page-CVO_Q3kI.js} +1 -1
- package/dist/assets/{ai-page-BezzLmVq.js → ai-page-C1h5NlKw.js} +1 -1
- package/dist/assets/{animated-avatar-DDpjZzRx.js → animated-avatar-CrlodWQr.js} +1 -1
- package/dist/assets/{api-Zs5JMgKY.js → api-CYdUmFnA.js} +1 -1
- package/dist/assets/{api-key-screen-B_g5hH5v.js → api-key-screen-BIMt5wXC.js} +1 -1
- package/dist/assets/{archive-page-rl2uRUik.js → archive-page-QDAZt1bN.js} +1 -1
- package/dist/assets/{assistant-status-panel-DPwgE1TF.js → assistant-status-panel-DbbksK3-.js} +1 -1
- package/dist/assets/{auth-store-CKsDsnkp.js → auth-store-CVs0OdtO.js} +1 -1
- package/dist/assets/{background-task-detail-panel-3xiHMnCC.js → background-task-detail-panel-Dvg9X_dS.js} +1 -1
- package/dist/assets/{billing-page-D-gIsav0.js → billing-page-ojEsvt_X.js} +1 -1
- package/dist/assets/{bookmarks-page-giPayf1N.js → bookmarks-page-D7myoNlj.js} +1 -1
- package/dist/assets/{build-state-BLXpH8o6.js → build-state-BOU11GPr.js} +1 -1
- package/dist/assets/{channels-page-route-DAZ5e9vo.js → channels-page-route-DGd6PLjm.js} +1 -1
- package/dist/assets/{chat-markdown-message-BuypfAkx.js → chat-markdown-message-CItp7csw.js} +1 -1
- package/dist/assets/{command-palette-C0XZVlzp.js → command-palette-BvwNadPb.js} +1 -1
- package/dist/assets/{command-palette-window-page-CxIvQGwt.js → command-palette-window-page-DMnQ_aD6.js} +1 -1
- package/dist/assets/{community-page-CwSloAl0.js → community-page-CMyh79_4.js} +1 -1
- package/dist/assets/{contacts-page-route-CBqOhX8s.js → contacts-page-route-CxCzPa-M.js} +1 -1
- package/dist/assets/{conversation-list-fetchers-tE99dnUJ.js → conversation-list-fetchers-DS9vmqfD.js} +1 -1
- package/dist/assets/{credentials-page-Bd-E5j_2.js → credentials-page-Bay5GYZG.js} +1 -1
- package/dist/assets/{debug-page-CU0jo5tG.js → debug-page-DNYNb8g1.js} +1 -1
- package/dist/assets/{deploy-dialogs-8TBhlLXZ.js → deploy-dialogs-D9ogAwUI.js} +1 -1
- package/dist/assets/{detail-panel-stop-button-B0utUgSr.js → detail-panel-stop-button-CRcHovlo.js} +1 -1
- package/dist/assets/{developer-page-Da1bdSPK.js → developer-page-GiubU02W.js} +1 -1
- package/dist/assets/{devices-page-DC9det1s.js → devices-page-DSmfGWDc.js} +1 -1
- package/dist/assets/{dictation-overlay-page-6l-KJCrE.js → dictation-overlay-page-DJcRyCby.js} +1 -1
- package/dist/assets/{document-viewer-page-djjsg4WE.js → document-viewer-page-CNpSIR5q.js} +1 -1
- package/dist/assets/{earn-credits-modal-B4iirPUC.js → earn-credits-modal-B6EL9KHM.js} +1 -1
- package/dist/assets/{emails-page-RItjmMG5.js → emails-page-DAbdjEcM.js} +1 -1
- package/dist/assets/{general-page-BtAuGqFM.js → general-page-In-O5z14.js} +1 -1
- package/dist/assets/{hatching-screen-C71v2Kqp.js → hatching-screen-1Ib1UsQ8.js} +1 -1
- package/dist/assets/{home-page-route-DxKq7gEn.js → home-page-route-Bx4xkQr4.js} +1 -1
- package/dist/assets/{hosting-screen-DBN9hO0s.js → hosting-screen-Ce4JiQ9J.js} +1 -1
- package/dist/assets/{identity-page-route-Ck1TCmSd.js → identity-page-route-CDdf-0ZX.js} +1 -1
- package/dist/assets/index-BYfTlch9.js +113 -0
- package/dist/assets/index-BjtwYdrT.css +2 -0
- package/dist/assets/{inspect-page-BuriU_iU.js → inspect-page-Dmsojyx2.js} +1 -1
- package/dist/assets/{integrations-page-N-I7F_JQ.js → integrations-page-npAbqYD4.js} +1 -1
- package/dist/assets/{intelligence-layout-C_H2Uec7.js → intelligence-layout-B354MRxu.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-page-B2ozF8zY.js → keyboard-shortcuts-page-BTszfF5y.js} +1 -1
- package/dist/assets/{library-detail-page-BKj7gWNL.js → library-detail-page-Be9DFLXt.js} +1 -1
- package/dist/assets/{library-page-BJljT3MY.js → library-page-JA-4LBMj.js} +1 -1
- package/dist/assets/{login-flow-C4Ehxg-g.js → login-flow-v02gDpa1.js} +1 -1
- package/dist/assets/{login-page-CZBdlVje.js → login-page-BgsuEo8T.js} +1 -1
- package/dist/assets/{logout-page-BryU7bK_.js → logout-page-DQGYrYot.js} +1 -1
- package/dist/assets/{logs-layout-nPLZjXX5.js → logs-layout-tD5gXnKs.js} +1 -1
- package/dist/assets/{memory-router-playground-page-qIG7U97D.js → memory-router-playground-page-CnQYMmVa.js} +1 -1
- package/dist/assets/{messages-DF7pzUR8.js → messages-Bl6a3LUN.js} +1 -1
- package/dist/assets/{mobile-sidebar-drawer-DpvWGGSA.js → mobile-sidebar-drawer-dvuldt8a.js} +1 -1
- package/dist/assets/{notifications-page-DBlKmak1.js → notifications-page-D0DqTrSh.js} +1 -1
- package/dist/assets/{oauth-complete-page-D8aQ3tJ_.js → oauth-complete-page-DC4_JCQY.js} +1 -1
- package/dist/assets/{oauth-popup-complete-page-CXXZdxWJ.js → oauth-popup-complete-page-Bik6u419.js} +1 -1
- package/dist/assets/{pairing-page-b1uNitAm.js → pairing-page-gcO-QeQH.js} +1 -1
- package/dist/assets/{platform-loopback-page-hCZEK9-q.js → platform-loopback-page-BIC5R_2A.js} +1 -1
- package/dist/assets/{plugins-page-C0TtdwgQ.js → plugins-page-BHEtI3Gk.js} +1 -1
- package/dist/assets/{prechat-route-CnIcxqAR.js → prechat-route-DhtyT72h.js} +1 -1
- package/dist/assets/{prefs-hu4Ft3Gc.js → prefs-CTRDnnnS.js} +1 -1
- package/dist/assets/{privacy-page-PFWKww1A.js → privacy-page-DMURyayZ.js} +1 -1
- package/dist/assets/{privacy-screen-DSr2ddPX.js → privacy-screen-DuaVQ6IQ.js} +1 -1
- package/dist/assets/{provider-callback-page-CVVL9mxY.js → provider-callback-page-DgFANe_f.js} +1 -1
- package/dist/assets/{provider-key-B9HxajGj.js → provider-key-DBiHV_K5.js} +1 -1
- package/dist/assets/{provider-signup-page-BBqT_sHe.js → provider-signup-page-BDMHfIcI.js} +1 -1
- package/dist/assets/{quick-input-page-CLwquN93.js → quick-input-page-C0Rse0qs.js} +1 -1
- package/dist/assets/react-query.gen-C6wVk6Rw.js +1 -0
- package/dist/assets/{research-mock-page-DeBKxHSz.js → research-mock-page-D_m36Jy6.js} +1 -1
- package/dist/assets/{research-onboarding-route-2nc0yKsq.js → research-onboarding-route-CEC2x5kn.js} +1 -1
- package/dist/assets/{review-terms-screen-QliTExQL.js → review-terms-screen-DdZD1jqm.js} +1 -1
- package/dist/assets/{risk-jKF7qGwV.js → risk-Dsj4oM8c.js} +1 -1
- package/dist/assets/{schedules-CQO3UwTc.js → schedules-Dj3YQqG5.js} +1 -1
- package/dist/assets/{sdk.gen-jDeNbBv8.js → sdk.gen-BwnFjFcp.js} +1 -1
- package/dist/assets/{security-page-CQfQh2wW.js → security-page-CIC8qXj0.js} +1 -1
- package/dist/assets/{select-assistant-screen-BsGcZIsZ.js → select-assistant-screen-Cd8srvtb.js} +1 -1
- package/dist/assets/{settings-layout-hvCEbqwx.js → settings-layout-VEkpa1PW.js} +1 -1
- package/dist/assets/{share-feedback-modal-BFxBtlP7.js → share-feedback-modal-BEFlSqbK.js} +1 -1
- package/dist/assets/{sidebar-tree-BaU6dAAM.js → sidebar-tree-FcJ6pHEw.js} +1 -1
- package/dist/assets/{signup-page-COVsB50a.js → signup-page-CEqH6BRM.js} +1 -1
- package/dist/assets/{site-favicon-D9Rp1QPZ.js → site-favicon-DSzk4cg0.js} +1 -1
- package/dist/assets/{skill-detail-page-D5UAAUmZ.js → skill-detail-page-CSR6eBxk.js} +1 -1
- package/dist/assets/{skill-detail-panel-DIoN-AUc.js → skill-detail-panel-DedH9GLd.js} +1 -1
- package/dist/assets/{skills-C9wbjXsQ.js → skills-CSlvOB79.js} +1 -1
- package/dist/assets/{skills-page-DhUitBj9.js → skills-page-irwMop0O.js} +1 -1
- package/dist/assets/{sound-manager-CSAwT8Vm.js → sound-manager-6UbdgQrj.js} +1 -1
- package/dist/assets/{sounds-page-DeBeDlcY.js → sounds-page-b0kjLtBm.js} +1 -1
- package/dist/assets/{subagent-detail-panel-CF-VVQJA.js → subagent-detail-panel-CTulpbUd.js} +1 -1
- package/dist/assets/{subagent-store-C-pyGmFU.js → subagent-store-D-9RtoyJ.js} +1 -1
- package/dist/assets/{system-events-page-CYqUpGpC.js → system-events-page-DrQWpC2D.js} +1 -1
- package/dist/assets/{tiptap-document-editor-aGPkbqbr.js → tiptap-document-editor-Af0WPHxQ.js} +1 -1
- package/dist/assets/{tool-detail-panel-CzkNK-ue.js → tool-detail-panel-G01JjAPo.js} +1 -1
- package/dist/assets/{upgrade-cancel-page-BytvxNqQ.js → upgrade-cancel-page-cJyqnC7O.js} +1 -1
- package/dist/assets/{upgrade-success-page-CeuBASa8.js → upgrade-success-page-C3__rlPJ.js} +1 -1
- package/dist/assets/{usage-page-CI7scN-b.js → usage-page-BIGDjU_J.js} +1 -1
- package/dist/assets/{use-edge-swipe-back-U9h8O8rp.js → use-edge-swipe-back-DcQxnpRK.js} +1 -1
- package/dist/assets/{use-invite-link-dialog-JL5Jevln.js → use-invite-link-dialog-C_z3cWhR.js} +1 -1
- package/dist/assets/use-is-org-ready-B7B3xHAy.js +1 -0
- package/dist/assets/{use-onboarding-login-CP7O8ZzB.js → use-onboarding-login-XjtnziWG.js} +1 -1
- package/dist/assets/{use-skill-actions-BKfLB9Oe.js → use-skill-actions-BFrx1e4G.js} +1 -1
- package/dist/assets/{use-skill-categories-8DmU61Hs.js → use-skill-categories-7ngHJrBv.js} +1 -1
- package/dist/assets/{use-skill-detail-files-DmLQiG5u.js → use-skill-detail-files-qblcXTbq.js} +1 -1
- package/dist/assets/{viewer-store-SsoxBypb.js → viewer-store-B8-Qnbx9.js} +1 -1
- package/dist/assets/{voice-page-DX8ma3dY.js → voice-page-BVGxL6rD.js} +1 -1
- package/dist/assets/{weather-forecast-display-hxrsJwFy.js → weather-forecast-display-Dd2Uyk7j.js} +1 -1
- package/dist/assets/{welcome-screen-Drx018g8.js → welcome-screen-Cyx9Mjus.js} +1 -1
- package/dist/assets/{workflow-detail-panel-n5adDCz2.js → workflow-detail-panel-xScksXY2.js} +1 -1
- package/dist/assets/{workflow-store-B_M196cU.js → workflow-store-BL2Hgm3R.js} +1 -1
- package/dist/assets/workspace-page-Bx3ihC2n.js +1 -0
- package/dist/index.html +21 -21
- package/package.json +1 -1
- package/dist/assets/index-DQjUULFO.js +0 -113
- package/dist/assets/index-z4S53sm1.css +0 -2
- package/dist/assets/react-query.gen-DOfazqkL.js +0 -1
- package/dist/assets/use-is-org-ready-BP6_0L-A.js +0 -1
- package/dist/assets/workspace-page-CYDMc7C-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-Dhiismgm.js";import{t as n}from"./react-DJZBPgpf.js";import{F as r,t as i}from"./button-amTXFI-2.js";import{d as a}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as o}from"./useQuery-B45lW1Kk.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./queryOptions-BtNi-_9H.js";import{t as l}from"./card-Bv5O5juh.js";import{t as u}from"./chevron-left-BMF1xNfR.js";import{t as d}from"./chevron-right-DqqmezXC.js";import{n as f,r as p}from"./animated-avatar-DDpjZzRx.js";import{t as m}from"./file-text-CYJz-GvF.js";import{n as h,t as g}from"./minimize-2-Clnet2W7.js";import{t as _}from"./pencil-CUIr0IFo.js";import{t as v}from"./save-aD5JFIZf.js";import{t as y}from"./sparkles-PGiR5v1g.js";import{t as b}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{t as x}from"./file-markdown-BXUvAQ24.js";import{fn as S,pn as C}from"./sdk.gen-jDeNbBv8.js";import{St as w}from"./react-query.gen-DOfazqkL.js";import{n as T,r as E,t as D}from"./api-errors-CrWDzVca.js";import{r as O}from"./api-Zs5JMgKY.js";import{c as k}from"./routes-BbeIx_F9.js";import{t as A}from"./conversation-store-BljZWolF.js";import{r as j}from"./viewer-store-SsoxBypb.js";import{t as M}from"./conversation-selection-BBHkzcfy.js";import{t as N}from"./misc-BYQPh7vS.js";import{t as P}from"./proxy-BzlH_XAe.js";import{t as F}from"./AnimatePresence-C8APSgIu.js";import{Gt as I,Mi as ee,Ni as te,di as ne,fi as re,fr as ie,ia as ae,li as oe,lr as se,pr as ce,rt as le,ui as ue,ur as de}from"./index-DQjUULFO.js";import{t as fe}from"./use-active-assistant-id-BNRMo_Mi.js";import{t as L}from"./skill-icon-CEEEqpSq.js";var pe=e(r(),1),R=e(n(),1),z=s();function B(e,t,n){return n===`forward`?(e+1)%t:(e-1+t)%t}function me({assistantId:e,initialTraits:t,onSave:n,onCancel:r}){let[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(!0),[c,l]=(0,R.useState)(!1),u=(0,R.useRef)(null),[d,f]=(0,R.useState)(0),[m,h]=(0,R.useState)(0),[g,_]=(0,R.useState)(0);(0,R.useEffect)(()=>{if(u.current===e)return;let n=!1;return de(e).then(r=>{if(!n&&(u.current=e,a(r),s(!1),r&&t)){let e=r.bodyShapes.findIndex(e=>e.id===t.bodyShape),n=r.eyeStyles.findIndex(e=>e.id===t.eyeStyle),i=r.colors.findIndex(e=>e.id===t.color);e>=0&&f(e),n>=0&&h(n),i>=0&&_(i)}}),()=>{n=!0}},[e,t]);let y=(0,R.useCallback)(()=>{i&&(f(Math.floor(Math.random()*i.bodyShapes.length)),h(Math.floor(Math.random()*i.eyeStyles.length)),_(Math.floor(Math.random()*i.colors.length)))},[i]),x=(0,R.useCallback)(async()=>{if(!i)return;let t={bodyShape:i.bodyShapes[d].id,eyeStyle:i.eyeStyles[m].id,color:i.colors[g].id};l(!0);try{await ie(e,t),n?.(t)}finally{l(!1)}},[i,d,m,g,e,n]);if(o)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-[var(--border-element)] border-t-[var(--content-tertiary)]`})});if(!i)return(0,z.jsx)(`div`,{className:`py-8 text-center text-body-medium-lighter text-[var(--content-quiet)]`,children:`Unable to load avatar components. Make sure your assistant is running.`});let S=i.bodyShapes[d],C=i.eyeStyles[m],w=i.colors[g];return(0,z.jsxs)(`div`,{className:`space-y-6`,children:[(0,z.jsx)(`div`,{className:`flex justify-center`,children:(0,z.jsx)(`div`,{className:`rounded-2xl bg-[var(--surface-sunken)] p-6`,children:(0,z.jsx)(le,{components:i,bodyShapeId:S.id,eyeStyleId:C.id,colorId:w.id,size:160})})}),(0,z.jsxs)(`div`,{className:`space-y-3`,children:[(0,z.jsx)(V,{label:`Body`,value:S.id,onPrev:()=>f(B(d,i.bodyShapes.length,`backward`)),onNext:()=>f(B(d,i.bodyShapes.length,`forward`))}),(0,z.jsx)(V,{label:`Eyes`,value:C.id,onPrev:()=>h(B(m,i.eyeStyles.length,`backward`)),onNext:()=>h(B(m,i.eyeStyles.length,`forward`))}),(0,z.jsx)(V,{label:`Color`,value:w.id,colorHex:w.hex,onPrev:()=>_(B(g,i.colors.length,`backward`)),onNext:()=>_(B(g,i.colors.length,`forward`))})]}),(0,z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:y,className:`flex flex-1 cursor-pointer items-center justify-center gap-2 rounded-lg border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-2 text-body-medium-default text-[var(--content-strong)] transition-colors hover:bg-[var(--surface-hover)]`,children:[(0,z.jsx)(p,{className:`h-4 w-4`}),`Randomize`]}),(0,z.jsxs)(`button`,{type:`button`,onClick:x,disabled:c,className:`flex flex-1 cursor-pointer items-center justify-center gap-2 rounded-lg border border-[var(--system-positive-strong)] bg-[var(--system-positive-weak)] px-3 py-2 text-body-medium-default text-[var(--system-positive-strong)] transition-colors hover:opacity-90 disabled:opacity-50`,children:[(0,z.jsx)(v,{className:`h-4 w-4`}),c?`Saving...`:`Save Avatar`]}),r&&(0,z.jsx)(`button`,{type:`button`,onClick:r,className:`flex cursor-pointer items-center justify-center rounded-lg border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-2 text-body-medium-default text-[var(--content-strong)] transition-colors hover:bg-[var(--surface-hover)]`,children:(0,z.jsx)(b,{className:`h-4 w-4`})})]})]})}function V({label:e,value:t,colorHex:n,onPrev:r,onNext:i}){return(0,z.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-lift)] px-3 py-2`,children:[(0,z.jsx)(`span`,{className:`text-body-small-default uppercase tracking-wider text-[var(--content-quiet)]`,children:e}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:r,className:`flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-[var(--content-quiet)] transition-colors hover:bg-[var(--surface-active)]`,children:(0,z.jsx)(u,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{className:`flex min-w-[80px] items-center justify-center gap-2`,children:[n&&(0,z.jsx)(`div`,{className:`h-4 w-4 rounded-full border border-[var(--border-element)]`,style:{backgroundColor:n}}),(0,z.jsx)(`span`,{className:`text-body-medium-default capitalize text-[var(--content-strong)]`,children:t})]}),(0,z.jsx)(`button`,{type:`button`,onClick:i,className:`flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-[var(--content-quiet)] transition-colors hover:bg-[var(--surface-active)]`,children:(0,z.jsx)(d,{className:`h-4 w-4`})})]})]})}function he({open:e,onClose:t,assistantId:n,components:r,traits:i,customImageUrl:a,onSaveCharacter:o,onUploadImage:s,onGenerateWithAI:c}){let l=(0,R.useId)(),f=(0,R.useRef)(null),p=(0,R.useRef)(null),m=(0,R.useRef)(null),[h,g]=(0,R.useState)(`actions`),[_,v]=(0,R.useState)(!1);(0,R.useEffect)(()=>{e&&p.current?.focus()},[e]),(0,R.useEffect)(()=>{if(e){let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}}},[e]);let x=(0,R.useCallback)(()=>{g(`actions`),t()},[t]),S=(0,R.useCallback)(e=>{e.key===`Escape`&&(h===`character-builder`?g(`actions`):x())},[x,h]),C=(0,R.useCallback)(e=>{e.target===f.current&&x()},[x]),w=(0,R.useCallback)(()=>{g(`actions`)},[]),T=(0,R.useCallback)(()=>{g(`character-builder`)},[]),E=(0,R.useCallback)(async e=>{let t=e.target.files?.[0];if(!t)return;v(!0);let r=await ce(n,t);v(!1),r&&(s(),x()),m.current&&(m.current.value=``)},[n,s,x]),D=(0,R.useCallback)(()=>{m.current?.click()},[]),O=(0,R.useCallback)(()=>{x(),c?.()},[x,c]),k=(0,R.useCallback)(e=>{o(e),x()},[o,x]);return e?(0,pe.createPortal)((0,z.jsxs)(`div`,{ref:f,role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/50`,onKeyDown:S,onClick:C,children:[(0,z.jsxs)(`div`,{className:`mx-4 flex w-full max-w-md flex-col rounded-xl border shadow-xl`,style:{backgroundColor:`var(--surface-lift)`,borderColor:`var(--border-base)`,maxHeight:`85vh`},children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-6 py-4`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[h===`character-builder`&&(0,z.jsx)(`button`,{type:`button`,onClick:w,className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/10`,"aria-label":`Back`,children:(0,z.jsx)(u,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsx)(`h2`,{id:l,className:`text-title-small`,style:{color:`var(--content-default)`},children:h===`character-builder`?`Build a Character`:`Update Avatar`})]}),(0,z.jsx)(`button`,{ref:p,type:`button`,onClick:x,className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/10`,"aria-label":`Close`,children:(0,z.jsx)(b,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})})]}),(0,z.jsx)(`div`,{className:`overflow-y-auto p-6`,children:h===`actions`?(0,z.jsxs)(`div`,{className:`flex flex-col items-center gap-6`,children:[(0,z.jsx)(I,{components:r,traits:i,customImageUrl:a,size:120,interactive:!0}),(0,z.jsxs)(`div`,{className:`w-full space-y-2`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:T,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(re,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Build a Character`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Build your own character`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:D,disabled:_,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(ae,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:_?`Uploading...`:`Upload Image`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Choose an image from your computer`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]}),c&&(0,z.jsxs)(`button`,{type:`button`,onClick:O,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(y,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Generate with AI`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Create an avatar through chat`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]})]})]}):(0,z.jsx)(me,{assistantId:n,initialTraits:i,onSave:k,onCancel:w})})]}),(0,z.jsx)(`input`,{ref:m,type:`file`,accept:`image/png,image/jpeg,image/webp,image/gif`,className:`hidden`,onChange:E})]}),document.body):null}var ge={displayName:`Other`,color:`#888`,emoji:`?`},_e={email:{displayName:`Email`,color:`#A665C9`,emoji:`📧`},calendar:{displayName:`Calendar`,color:`#0E9B8B`,emoji:`📅`},messaging:{displayName:`Messaging`,color:`#6B8AE0`,emoji:`💬`},browsing:{displayName:`Browsing`,color:`#E9642F`,emoji:`🌐`},productivity:{displayName:`Productivity`,color:`#0E9B8B`,emoji:`📋`},development:{displayName:`Development`,color:`#EF4400`,emoji:`🔨`},voice:{displayName:`Voice`,color:`#DB4B77`,emoji:`🎤`},commerce:{displayName:`Commerce`,color:`#E9C91A`,emoji:`🛒`},content:{displayName:`Content`,color:`#DB4B77`,emoji:`🎨`},health:{displayName:`Health`,color:`#4C9B50`,emoji:`❤️`},system:{displayName:`System`,color:`#8D99A5`,emoji:`⚙️`},integrations:{displayName:`Integrations`,color:`#8D99A5`,emoji:`🔗`}};function H(e){return _e[e]??ge}var U=[`email`,`calendar`,`messaging`,`browsing`,`productivity`,`development`,`voice`,`commerce`,`content`,`health`,`system`,`integrations`],ve={email:[{label:`Sending`,emoji:`📨`,skillIds:new Set([`agentmail`,`email-setup`])},{label:`Reading`,emoji:`📬`,skillIds:new Set([`email-channel`,`gmail`])}],messaging:[{label:`Chat`,emoji:`💬`,skillIds:new Set([`messaging`,`slack`,`telegram`])},{label:`Notifications`,emoji:`🔔`,skillIds:new Set([`notifications`])},{label:`People`,emoji:`👥`,skillIds:new Set([`contacts`,`followups`])}],development:[{label:`Coding`,emoji:`💻`,skillIds:new Set([`typescript-eval`,`frontend-design`])},{label:`Dev Tools`,emoji:`🔧`,skillIds:new Set([`api-mapping`,`cli-discover`,`subagent`,`app-builder`])}],browsing:[{label:`Control`,emoji:`🎮`,skillIds:new Set([`computer-use`,`macos-automation`,`browser`])},{label:`Triggers`,emoji:`⏰`,skillIds:new Set([`watcher`,`time-based-actions`])}],commerce:[{label:`Shopping`,emoji:`🛒`,skillIds:new Set([`amazon`,`doordash`,`restaurant-reservation`])}],system:[{label:`Core`,emoji:`🧠`,skillIds:new Set([`knowledge-graph`,`skills-catalog`,`self-upgrade`])},{label:`Daily`,emoji:`☀️`,skillIds:new Set([`start-the-day`,`weather`])}]},ye=14,be=10,xe=6;function W(e){switch(e.kind.type){case`center`:return{shape:`circle`,size:90,cornerRadius:0};case`category`:return{shape:`roundedRect`,size:80,cornerRadius:ye};case`subCategory`:return{shape:`roundedRect`,size:56,cornerRadius:be};case`skill`:return{shape:`diamond`,size:64,cornerRadius:xe}}}function Se(e,t,n,r){let i=Math.min(Math.max(0,t),e),a=Math.abs(n),o=Math.abs(r);if(a<1e-6&&o<1e-6)return e;let s=e/Math.max(a,o),c=s*n,l=s*r;if(!(Math.abs(c)>e-i&&Math.abs(l)>e-i))return s;let u=Math.sign(c)*(e-i),d=Math.sign(l)*(e-i),f=n*u+r*d,p=u*u+d*d-i*i,m=f*f-p;return m<0?s:f+Math.sqrt(m)}function G(e,t,n){switch(e.shape){case`circle`:return e.size/2;case`roundedRect`:return Se(e.size/2,e.cornerRadius,t,n);case`diamond`:{let r=(t+n)*Math.SQRT1_2,i=(-t+n)*Math.SQRT1_2;return Se(e.size/2,e.cornerRadius,r,i)}}}function Ce(e,t){let n=t.x-e.x,r=t.y-e.y,i=Math.sqrt(n*n+r*r);if(i<1e-6)return{x1:e.x,y1:e.y,x2:t.x,y2:t.y};let a=n/i,o=r/i,s=Math.max(0,G(W(e),a,o)-3),c=Math.max(0,G(W(t),-a,-o)-3);if(s+c>=i){let n=(e.x+t.x)/2,r=(e.y+t.y)/2;return{x1:n,y1:r,x2:n,y2:r}}return{x1:e.x+a*s,y1:e.y+o*s,x2:t.x-a*c,y2:t.y-o*c}}var we=10,Te=200,Ee=160,K=160;function q(e,t,n,r){let i={x:e.x,y:e.y};for(let e=0;e<30;e++){let e=0,a=0,o=0;for(let s of n){let n=i.x-s.x,c=i.y-s.y,l=Math.sqrt(n*n+c*c),u=t+s.radius+r-l;u>e&&(e=u,l<.1?(a=u+1,o=0):(a=n/l*(u+1),o=c/l*(u+1)))}if(e<=0)break;i={x:i.x+a,y:i.y+o}}return i}function J(e,t,n,r,i,a,o,s,c,l,u,d){if(e.length===0)return;let f=a+o,p=Math.cos(r),m=Math.sin(r),h=-m,g=p,_=f*.88,v=H(c).color;e.forEach((r,c)=>{let y=Math.floor(c/3),b=c%3,x=Math.min(3,e.length-y*3),S=(b-(x-1)/2)*f,C=y%2==1&&x<3?f*.5:0,w=i+y*_,T=q({x:n.x+w*p+(S+C)*h,y:n.y+w*m+(S+C)*g},a/2,u,o);u.push({id:r.id,kind:{type:`skill`,item:r},parentId:t,depth:s,x:T.x,y:T.y,radius:a/2}),d.push({id:`edge-${l}-skill-${c}`,fromId:t,toId:r.id,color:v})})}function De(e,t,n=90){let r=[],i=[],a=we;if(r.push({id:`__center__`,kind:{type:`center`},parentId:null,depth:0,x:e.x,y:e.y,radius:n/2}),t.length===0)return{nodes:r,edges:i};let o=t.length,s=2*Math.PI/o;return t.forEach((t,n)=>{let o=-Math.PI/2+n*s,c=`cat-${t.category}`,l=H(t.category).color,u=q({x:e.x+Te*Math.cos(o),y:e.y+Te*Math.sin(o)},80/2,r,a);r.push({id:c,kind:{type:`category`,category:t.category},parentId:`__center__`,depth:1,x:u.x,y:u.y,radius:80/2}),i.push({id:`edge-center-${t.category}`,fromId:`__center__`,toId:c,color:l});let d=ve[t.category];if(d&&d.length>0){let e=[],n=new Set;for(let r of d){let i=t.items.filter(e=>r.skillIds.has(e.id));i.length>0&&(e.push({def:r,items:i}),i.forEach(e=>n.add(e.id)))}let f=t.items.filter(e=>!n.has(e.id));if(f.length>0){if(e.length===0){J(t.items,c,u,o,K,64,a,2,t.category,t.category,r,i);return}let n=e[e.length-1];n&&n.items.push(...f)}let p=e.length,m=s*.55,h=p<=1?0:Math.min(m,(p-1)*.35);e.forEach((e,n)=>{let s;s=p===1?o:o+(n/(p-1)-.5)*h*2;let d=`subcat-${t.category}-${n}`,f=q({x:u.x+Ee*Math.cos(s),y:u.y+Ee*Math.sin(s)},56/2,r,a);r.push({id:d,kind:{type:`subCategory`,label:e.def.label,emoji:e.def.emoji,category:t.category},parentId:c,depth:2,x:f.x,y:f.y,radius:56/2}),i.push({id:`edge-${t.category}-sub-${n}`,fromId:c,toId:d,color:l}),J(e.items,d,f,s,K,64,a,3,t.category,d,r,i)})}else J(t.items,c,u,o,K,64,a,2,t.category,t.category,r,i)}),{nodes:r,edges:i}}function Oe(e){let t=new Map;for(let n of e){let e=t.get(n.category);e?e.push(n):t.set(n.category,[n])}let n=[];for(let e of U){let r=t.get(e);r&&r.length>0&&n.push({category:e,items:r})}for(let[e,r]of t)!U.includes(e)&&r.length>0&&n.push({category:e,items:r});return n}function ke(e,t,n,r,i=120,a=.4,o=3){if(e.length===0)return{zoom:1,panX:0,panY:0};let s=1/0,c=-1/0,l=1/0,u=-1/0;for(let t of e)s=Math.min(s,t.x),c=Math.max(c,t.x),l=Math.min(l,t.y),u=Math.max(u,t.y);let d=c-s+i*2,f=u-l+i*2;if(d<=0||f<=0||n<=0||r<=0)return{zoom:1,panX:0,panY:0};let p=Math.min(n/d,r/f),m=Math.max(a,Math.min(o,p)),h=(s+c)/2-t.x,g=(l+u)/2-t.y;return{zoom:m,panX:-h*m,panY:-g*m}}var Ae=.4,je=.25,Y={x:600,y:450},X={type:`spring`,stiffness:180,damping:20},Me={category:{size:80,cornerRadius:14,dashed:!1,fillPct:14,fillHoverPct:25,strokePct:55,strokeHoverPct:85,strokeWidth:2,strokeHoverWidth:2.5},subcategory:{size:56,cornerRadius:10,dashed:!0,fillPct:10,fillHoverPct:20,strokePct:40,strokeHoverPct:70,strokeWidth:1.5,strokeHoverWidth:2}},Ne={category:`rounded-[3px]`,subcategory:`rounded-[3px] border-dashed`,skill:`rotate-45`,workspace:`rounded-full`},Pe=`Failed to load the memory graph.`;function Fe(e){return c({queryKey:[`memory-graph`,e],staleTime:5*6e4,queryFn:async()=>{let{data:t,error:n,response:r}=await S({path:{assistant_id:e},throwOnError:!1});if(T(r,n,Pe),!r.ok)throw new D(r.status,E(n,r,Pe));return!t||t.supported===!1?{kind:`unsupported`}:{kind:`ready`,graph:t}}})}var Ie=Math.PI*(3-Math.sqrt(5)),Le=7,Re=2.4,ze=34,Be=10;function Ve(e){return Math.min(ze,Le+Re*Math.sqrt(e))}function He(e){return e===`concept`||e===`skill`||e===`capability`?e:`other`}function Ue(e){return e===`link`||e===`learned`?e:`other`}function We(e,t={}){let n=t.center??Y,r=e.nodes,i=r.length;if(i===0)return{nodes:[],edges:[]};let a=new Map;r.forEach((e,t)=>a.set(e.id,t));let o=e.edges.filter(e=>e.source!==e.target&&a.has(e.source)&&a.has(e.target)),s=Array(i).fill(0),c=[];for(let e of o){let t=a.get(e.source),n=a.get(e.target);s[t]++,s[n]++,c.push([t,n])}let l=r.map((e,t)=>Ve(s[t])),u=70+26*Math.sqrt(i),d=r.map((e,t)=>{let r=(t+.5)/i,a=Math.acos(1-2*r),o=t*Ie,s=u*Math.cbrt(r),c=Math.sin(a);return{x:n.x+s*c*Math.cos(o),y:n.y+s*c*Math.sin(o),z:s*Math.cos(a),vx:0,vy:0,vz:0}}),f=t.iterations??Math.max(90,Math.min(340,Math.round(46e3/i))),p=.011,m=.82,h=.5,g=1,_=1-.001**(1/f);for(let e=0;e<f;e++){for(let e=0;e<i;e++){let t=d[e];for(let n=e+1;n<i;n++){let r=d[n],i=t.x-r.x,a=t.y-r.y,o=t.z-r.z,s=i*i+a*a+o*o;s<.01&&(i=(e-n)*.1+.1,a=.1,o=.05,s=i*i+a*a+o*o);let c=Math.sqrt(s),l=6400/s,u=i/c*l,f=a/c*l,p=o/c*l;t.vx+=u,t.vy+=f,t.vz+=p,r.vx-=u,r.vy-=f,r.vz-=p}}for(let[e,t]of c){let n=d[e],r=d[t],i=r.x-n.x,a=r.y-n.y,o=r.z-n.z,s=Math.sqrt(i*i+a*a+o*o)||.01,c=.05*(s-140),l=i/s*c,u=a/s*c,f=o/s*c;n.vx+=l,n.vy+=u,n.vz+=f,r.vx-=l,r.vy-=u,r.vz-=f}for(let e=0;e<i;e++){let t=d[e];t.vx+=(n.x-t.x)*p,t.vy+=(n.y-t.y)*p,t.vz+=(0-t.z)*p,t.x+=t.vx*g*h,t.y+=t.vy*g*h,t.z+=t.vz*g*h,t.vx*=m,t.vy*=m,t.vz*=m}g*=1-_}for(let e=0;e<10;e++){let e=!1;for(let t=0;t<i;t++){let n=d[t];for(let r=t+1;r<i;r++){let i=d[r],a=i.x-n.x,o=i.y-n.y,s=i.z-n.z,c=Math.sqrt(a*a+o*o+s*s),u=l[t]+l[r]+Be;if(c>=u)continue;c<.01&&(a=(r-t)*.1+.1,o=.1,s=.05,c=Math.sqrt(a*a+o*o+s*s));let f=(u-c)/2,p=a/c*f,m=o/c*f,h=s/c*f;n.x-=p,n.y-=m,n.z-=h,i.x+=p,i.y+=m,i.z+=h,e=!0}}if(!e)break}return{nodes:r.map((e,t)=>{let n={id:e.id,x:d[t].x,y:d[t].y,z:d[t].z,radius:l[t],label:e.label,kind:He(e.kind),degree:s[t]};return e.summary&&(n.summary=e.summary),e.updatedAtMs!==void 0&&(n.updatedAtMs=e.updatedAtMs),n}),edges:o.map((e,t)=>{let n={id:`${e.source}__${e.target}__${t}`,fromId:e.source,toId:e.target,kind:Ue(e.kind),directed:e.directed??!1};return e.description&&(n.description=e.description),n})}}var Ge=`Failed to load this concept.`;function Ke(e,t){return c({queryKey:[`memory-graph-node`,e,t],enabled:!!(e&&t),queryFn:async()=>{let{data:n,error:r,response:i}=await C({path:{assistant_id:e},query:{id:t??``},throwOnError:!1});if(T(i,r,Ge),!i.ok)throw new D(i.status,E(r,i,Ge));return n??{found:!1}}})}function qe(e){return e?new Date(e).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):null}function Je({assistantId:e,node:t,onClose:n}){let r=o(Ke(e,t.id)),a=r.data,s=qe(t.updatedAtMs);return(0,R.useEffect)(()=>{let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`div`,{"data-graph-panel":!0,className:`absolute inset-0 z-20 flex justify-end`,onPointerDown:e=>e.stopPropagation(),onPointerMove:e=>e.stopPropagation(),onPointerUp:e=>e.stopPropagation(),children:[(0,z.jsx)(`div`,{className:`absolute inset-0`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 55%, transparent)`},onClick:n}),(0,z.jsxs)(`aside`,{className:`relative flex h-full min-h-0 w-full max-w-md flex-col overflow-hidden`,style:{backgroundColor:`var(--surface-lift)`,borderLeft:`1px solid var(--border-base)`},children:[(0,z.jsxs)(`header`,{className:`flex shrink-0 items-start justify-between gap-3 border-b px-5 py-4`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`h2`,{className:`truncate text-title-small`,style:{color:`var(--content-default)`},title:a?.title??t.label,children:a?.title??t.label}),s?(0,z.jsxs)(`p`,{className:`mt-0.5 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`Updated `,s]}):null]}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(b,{"aria-hidden":!0}),onClick:n,"aria-label":`Close`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-5 py-4`,style:{touchAction:`pan-y`},children:r.isLoading?(0,z.jsx)(`div`,{className:`flex justify-center py-8`,children:(0,z.jsx)(`div`,{className:`h-5 w-5 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})}):r.isError?(0,z.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Couldn't load this concept. Try again in a moment.`}):a?.found&&a.content?.trim()?(0,z.jsx)(x,{content:a.content}):(0,z.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This concept doesn't have written content yet — it exists as a link in the graph, but its page is empty.`})})]})]})}var Ye={concept:`#5B8DEF`,skill:`#A665C9`,capability:`#0E9B8B`,other:`#8D99A5`},Xe={concept:`Concept`,skill:`Skill`,capability:`Capability`,other:`Other`},Ze=`#E9A23B`;function Qe({nodeKinds:e,hasLinks:t,hasLearned:n}){return(0,z.jsxs)(`div`,{className:`pointer-events-none absolute bottom-4 left-4 flex flex-col gap-1.5 rounded-lg px-3 py-2`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 78%, transparent)`,border:`1px solid var(--border-base)`},children:[e.map(e=>(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-2.5 w-2.5 rounded-full`,style:{backgroundColor:Ye[e]}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:Xe[e]})]},e)),e.length>0&&(t||n)&&(0,z.jsx)(`div`,{className:`mt-0.5 border-t pt-1.5`,style:{borderColor:`var(--border-base)`}}),t&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-0 w-4`,style:{borderTop:`2px solid var(--content-tertiary)`}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:`Link`})]}),n&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-0 w-4`,style:{borderTop:`2px dashed #E9A23B`}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:`Learned`})]})]})}var $e=[`concept`,`skill`,`capability`,`other`],et=.13,tt=2600,nt=.006,rt=1.15,it=3,at=.32,ot=.45,st=3,ct=4;function lt(e){let t=getComputedStyle(e);return{content:t.getPropertyValue(`--content-default`).trim()||`#e5e7eb`,tertiary:t.getPropertyValue(`--content-tertiary`).trim()||`#8792a0`}}function Z({title:e,detail:t}){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 px-6 text-center`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e}),t?(0,z.jsx)(`p`,{className:`max-w-sm text-body-small-default`,style:{color:`var(--content-tertiary)`},children:t}):null]})}function ut({assistantId:e,className:t,isFullscreen:n,onToggleFullscreen:r}){let a=(0,R.useRef)(null),s=(0,R.useRef)(null),c=o(Fe(e)),l=c.data?.kind===`ready`?c.data.graph:null,u=(0,R.useMemo)(()=>l?We(l):{nodes:[],edges:[]},[l]),d=c.data?.kind===`ready`&&u.nodes.length>0,f=(0,R.useMemo)(()=>{let e=new Map,t=(t,n)=>{let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)};for(let e of u.edges)t(e.fromId,e.toId),t(e.toId,e.fromId);return e},[u.edges]),p=(0,R.useMemo)(()=>{if(u.nodes.length===0)return 1;let e=u.nodes.map(e=>{let t=e.x-Y.x,n=e.y-Y.y;return Math.sqrt(t*t+n*n+e.z*e.z)+e.radius}).sort((e,t)=>e-t),t=Math.min(e.length-1,Math.floor(e.length*.92));return Math.max(1,e[t])},[u.nodes]),m=(0,R.useRef)({yaw:.5,pitch:.32,zoom:1,hoveredId:null,dragging:!1,moved:!1,lastX:0,lastY:0,lastInteractAt:-1/0,dirty:!0}),_=(0,R.useRef)([]),v=(0,R.useRef)({content:`#e5e7eb`,tertiary:`#8792a0`}),[y,b]=(0,R.useState)(null),[x,S]=(0,R.useState)(null),C=(0,R.useCallback)(e=>{if(!e)return null;let t=u.nodes.find(t=>t.id===e);return t?t.summary?`${t.label} — ${t.summary}`:t.label:null},[u.nodes]),w=(0,R.useCallback)(()=>{let e=m.current;e.yaw=.5,e.pitch=.32,e.zoom=1,e.lastInteractAt=-1/0,e.dirty=!0,b(null)},[]),T=(0,R.useCallback)(e=>{let t=m.current;t.zoom=Math.max(ot,Math.min(st,t.zoom*e)),t.lastInteractAt=performance.now(),t.dirty=!0},[]);(0,R.useEffect)(()=>{if(!d)return;let e=s.current,t=a.current;if(!e||!t)return;let n=e.getContext(`2d`);if(!n)return;let r=u.nodes,i=u.edges,o=f,c=p,l=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches;v.current=lt(t);let h=Math.min(window.devicePixelRatio||1,2),g=0,y=0,b=()=>{let n=t.getBoundingClientRect();g=n.width,y=n.height,h=Math.min(window.devicePixelRatio||1,2),e.width=Math.max(1,Math.round(g*h)),e.height=Math.max(1,Math.round(y*h)),e.style.width=`${g}px`,e.style.height=`${y}px`,v.current=lt(t),m.current.dirty=!0};b();let x=new ResizeObserver(b);x.observe(t);let S=0,C=0,w=e=>{let t=C?Math.min(.05,(e-C)/1e3):0;C=e;let a=m.current,s=v.current;if(!a.dragging&&e-a.lastInteractAt>tt&&!l&&(a.yaw+=et*t),l&&!a.dirty){S=requestAnimationFrame(w);return}a.dirty=!1;let u=Math.cos(a.yaw),d=Math.sin(a.yaw),f=Math.cos(a.pitch),p=Math.sin(a.pitch),b=it*c,x=Math.min(g,y)*.88/(2*c)*a.zoom,T=g/2,E=y/2;n.setTransform(h,0,0,h,0,0),n.clearRect(0,0,g,y);let D=a.hoveredId,O=D?o.get(D):void 0,k=e=>!D||e===D||(O?.has(e)??!1),A=Array(r.length);for(let e=0;e<r.length;e++){let t=r[e],n=t.x-Y.x,i=t.y-Y.y,a=t.z,o=n*u+a*d,s=-n*d+a*u,l=i*f-s*p,m=i*p+s*f,h=b/(b-m);A[e]={node:t,sx:T+o*x*h,sy:E+l*x*h,sr:Math.max(1.2,t.radius*x*h),depth:Math.max(0,Math.min(1,(m+c)/(2*c)))}}let j=A.map((e,t)=>t).sort((e,t)=>A[e].depth-A[t].depth),M=new Map;for(let e of A)M.set(e.node.id,e);n.lineCap=`round`;for(let e of i){let t=M.get(e.fromId),r=M.get(e.toId);if(!t||!r)continue;let i=e.kind===`learned`,a=D!=null&&(e.fromId===D||e.toId===D),o=(t.depth+r.depth)/2,c=(i?.34:.28)*(.4+.6*o);D!=null&&(c=a?.9:k(e.fromId)&&k(e.toId)?c:.05),n.globalAlpha=c,n.strokeStyle=i?Ze:s.tertiary,n.lineWidth=(a?2:1)*(.6+.6*o),n.setLineDash(i?[4,4]:[]),n.beginPath(),n.moveTo(t.sx,t.sy),n.lineTo(r.sx,r.sy),n.stroke()}n.setLineDash([]);for(let e of j){let t=A[e],r=t.node,i=Ye[r.kind],a=k(r.id),o=r.id===D,s=at+(1-at)*t.depth,c=a?s:s*.18,l=(o?16:r.degree>=ct?8:4)*t.depth;n.shadowColor=i,n.shadowBlur=a?l:0,n.globalAlpha=c*.55,n.fillStyle=i,n.beginPath(),n.arc(t.sx,t.sy,t.sr,0,Math.PI*2),n.fill(),n.shadowBlur=0,n.globalAlpha=c,n.lineWidth=o?2.5:1.4,n.strokeStyle=i,n.stroke()}n.shadowBlur=0,n.textAlign=`center`,n.textBaseline=`top`,n.font=`11px ui-sans-serif, system-ui, sans-serif`;for(let e of j){let t=A[e],r=t.node;if(!(D==null?r.degree>=ct&&t.depth>.55:k(r.id)))continue;n.globalAlpha=(r.id===D?1:.85)*(.4+.6*t.depth),n.fillStyle=s.content;let i=r.label.length>22?`${r.label.slice(0,21)}…`:r.label;n.fillText(i,t.sx,t.sy+t.sr+3)}n.globalAlpha=1,_.current=A.map(e=>({id:e.node.id,sx:e.sx,sy:e.sy,sr:e.sr,depth:e.depth})),S=requestAnimationFrame(w)};return S=requestAnimationFrame(w),()=>{cancelAnimationFrame(S),x.disconnect()}},[d,u,f,p]);let E=(0,R.useCallback)((e,t)=>{let n=null,r=-1;for(let i of _.current){let a=e-i.sx,o=t-i.sy;a*a+o*o<=(i.sr+5)*(i.sr+5)&&i.depth>r&&(n=i.id,r=i.depth)}return n},[]),D=e=>{let t=a.current.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}},O=(0,R.useCallback)(e=>{if(e.button!==0||e.target.closest(`[data-graph-control]`))return;let t=m.current;t.dragging=!0,t.moved=!1,t.lastX=e.clientX,t.lastY=e.clientY,t.lastInteractAt=performance.now(),e.currentTarget.setPointerCapture(e.pointerId)},[]),k=(0,R.useCallback)(e=>{let t=m.current;if(t.dragging){let n=e.clientX-t.lastX,r=e.clientY-t.lastY;(Math.abs(n)>2||Math.abs(r)>2)&&(t.moved=!0),t.yaw+=n*nt,t.pitch=Math.max(-rt,Math.min(rt,t.pitch+r*nt)),t.lastX=e.clientX,t.lastY=e.clientY,t.lastInteractAt=performance.now(),t.dirty=!0;return}let{x:n,y:r}=D(e),i=E(n,r);i!==t.hoveredId&&(t.hoveredId=i,t.dirty=!0,b(C(i)))},[E,C]),A=(0,R.useCallback)(e=>{let t=m.current;if(!t.dragging)return;t.dragging=!1,t.lastInteractAt=performance.now(),t.dirty=!0;let n=e.currentTarget;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),!t.moved){let{x:t,y:n}=D(e),r=E(t,n);if(r){let e=u.nodes.find(e=>e.id===r);e&&S({id:e.id,label:e.label,updatedAtMs:e.updatedAtMs})}else b(null)}},[E,u.nodes]),j=(0,R.useCallback)(()=>{let e=m.current;e.dragging||e.hoveredId==null||(e.hoveredId=null,e.dirty=!0,b(null))},[]);(0,R.useEffect)(()=>{let e=a.current;if(!e||!d)return;let t=e=>{if(e.target.closest?.(`[data-graph-panel]`))return;e.preventDefault();let t=m.current;t.zoom=Math.max(ot,Math.min(st,t.zoom*(1-e.deltaY/500))),t.lastInteractAt=performance.now(),t.dirty=!0};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[d]);let M=(0,R.useMemo)(()=>{let e=new Set(u.nodes.map(e=>e.kind));return $e.filter(t=>e.has(t))},[u.nodes]),N=(0,R.useMemo)(()=>u.edges.some(e=>e.kind===`learned`),[u.edges]),P=(0,R.useMemo)(()=>u.edges.some(e=>e.kind!==`learned`),[u.edges]),F;return F=c.isLoading?(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})}):c.isError?(0,z.jsx)(Z,{title:`Couldn't load the memory graph`,detail:`Something went wrong fetching your assistant's memory. Try again in a moment.`}):c.data?.kind===`unsupported`?(0,z.jsx)(Z,{title:`Memory graph isn't available`,detail:`The active memory backend doesn't expose a concept graph.`}):d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`canvas`,{ref:s,className:`absolute inset-0 h-full w-full`}),(0,z.jsx)(Qe,{nodeKinds:M.length>1?M:[],hasLinks:P,hasLearned:N}),y?(0,z.jsx)(`div`,{className:`pointer-events-none absolute left-1/2 top-4 max-w-[80%] -translate-x-1/2 truncate rounded-full px-3 py-1 text-[12px]`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 82%, transparent)`,border:`1px solid var(--border-base)`,color:`var(--content-default)`},children:y}):null,(0,z.jsx)(`div`,{className:`pointer-events-none absolute bottom-4 right-4 text-[11px]`,style:{color:`var(--content-tertiary)`},children:`drag to rotate · scroll to zoom`}),(0,z.jsxs)(`div`,{"data-graph-control":!0,className:`absolute right-4 top-4 flex flex-col gap-1`,children:[(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(oe,{}),onClick:()=>T(1.25),"aria-label":`Zoom in`,tooltip:`Zoom in`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ue,{}),onClick:()=>T(.8),"aria-label":`Zoom out`,tooltip:`Zoom out`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(te,{}),onClick:w,"aria-label":`Reset view`,tooltip:`Reset view`})]})]}):(0,z.jsx)(Z,{title:`No concepts yet`,detail:`As your assistant learns and links ideas, they'll appear here as a living map of its memory.`}),(0,z.jsxs)(`div`,{ref:a,className:`relative select-none overflow-hidden rounded-xl ${t??``}`,style:{backgroundColor:`var(--surface-base)`,backgroundImage:`radial-gradient(circle at center, color-mix(in srgb, var(--content-tertiary) 8%, transparent), transparent 62%)`,touchAction:`none`,cursor:d?`grab`:`default`},onPointerDown:d?O:void 0,onPointerMove:d?k:void 0,onPointerUp:d?A:void 0,onPointerCancel:d?A:void 0,onPointerLeave:d?j:void 0,children:[r?(0,z.jsx)(`div`,{className:`absolute left-4 top-4 z-10`,"data-graph-control":!0,children:(0,z.jsx)(i,{variant:`ghost`,iconOnly:n?(0,z.jsx)(g,{}):(0,z.jsx)(h,{}),onClick:r,"aria-label":n?`Exit fullscreen`:`Enter fullscreen`,tooltip:n?`Exit fullscreen`:`Enter fullscreen`})}):null,F,d&&x?(0,z.jsx)(Je,{assistantId:e,node:x,onClose:()=>S(null)}):null]})}function dt({edges:e,nodeById:t,visible:n}){return(0,z.jsx)(`svg`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 h-full w-full overflow-visible`,children:e.map(e=>{let r=t.get(e.fromId),i=t.get(e.toId);if(!r||!i)return null;let{x1:a,y1:o,x2:s,y2:c}=Ce(r,i);return(0,z.jsx)(`line`,{x1:a,y1:o,x2:s,y2:c,stroke:e.color,strokeWidth:1.5,opacity:n?.45:0,style:{transition:`opacity 0.4s ease`}},e.id)})})}function Q({shape:e,label:t}){return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`flex h-4 w-4 items-center justify-center`,children:(0,z.jsx)(`span`,{className:N(`inline-block h-3 w-3 border-[1.5px] border-[var(--content-tertiary)]`,Ne[e])})}),(0,z.jsx)(`span`,{children:t})]})}function ft({visible:e}){return(0,z.jsx)(`div`,{"data-constellation-control":!0,className:`pointer-events-none absolute bottom-4 left-4 rounded-md px-3 py-2 text-body-small-default`,style:{backgroundColor:`color-mix(in srgb, var(--surface-overlay) 80%, transparent)`,border:`1px solid color-mix(in srgb, var(--content-tertiary) 20%, transparent)`,color:`var(--content-secondary)`,opacity:+!!e,transition:`opacity 0.35s ease`},children:(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsx)(Q,{shape:`category`,label:`Category`}),(0,z.jsx)(Q,{shape:`subcategory`,label:`Subcategory`}),(0,z.jsx)(Q,{shape:`skill`,label:`Skill`}),(0,z.jsx)(Q,{shape:`workspace`,label:`Workspace`})]})})}function pt({item:e,color:t,onViewDetails:n}){let r=e.kind===`skill`?`Skill`:`Workspace`,a=e.kind===`skill`?ne:m;return(0,z.jsxs)(l,{padding:`sm`,elevated:!0,className:`w-[260px] shadow-[var(--shadow-popover)]`,role:`dialog`,"aria-label":`${e.label} details`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md px-2 py-1 text-body-small-emphasised text-[var(--content-default)]`,style:{backgroundColor:`${t}33`},children:[(0,z.jsx)(a,{className:`h-3 w-3`,style:{color:t}}),r]}),n?(0,z.jsx)(i,{type:`button`,variant:`ghost`,size:`compact`,onClick:n,children:`View Details`}):null]}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-start gap-2`,children:[e.icon||e.emoji?(0,z.jsx)(L,{skill:e,className:`h-5 w-5 shrink-0 text-[20px] leading-none`}):null,(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`div`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:e.label}),e.description?(0,z.jsx)(`div`,{className:`mt-1 line-clamp-3 text-body-small-default text-[var(--content-secondary)]`,children:e.description}):null]})]})]})}function mt({onSingleClick:e,onDoubleClick:t,latency:n=200}){let r=(0,R.useRef)(null);return(0,R.useEffect)(()=>()=>{r.current&&clearTimeout(r.current)},[]),(0,R.useCallback)(i=>{r.current&&=(clearTimeout(r.current),null),e&&i.detail===1&&(r.current=setTimeout(()=>{r.current=null,e()},n)),t&&i.detail>=2&&i.detail%2==0&&t()},[e,t,n])}function ht(e,t,n){let[r,i]=(0,R.useState)(!1),a=r||n===!0,o=mt({onSingleClick:e,onDoubleClick:t});return{active:a,onClick:(0,R.useCallback)(n=>{!e&&!t||(n.stopPropagation(),o(n))},[e,t,o]),onPointerDown:(0,R.useCallback)(n=>{!e&&!t||n.stopPropagation()},[e,t]),onMouseEnter:(0,R.useCallback)(()=>i(!0),[]),onMouseLeave:(0,R.useCallback)(()=>i(!1),[])}}function $(e,t){return`color-mix(in oklab, ${e} ${Math.max(0,Math.min(100,t))}%, var(--surface-base))`}function gt(e,t){switch(e.kind.type){case`center`:return{visible:t>=1};case`category`:return{visible:t>=2};case`subCategory`:return{visible:t>=3};case`skill`:return{visible:t>=4}}}function _t(e,t){switch(e.kind.type){case`center`:return .05;case`category`:return t*.04;case`subCategory`:return t*.03;case`skill`:return .08+t*.02}}function vt(e){switch(e.kind.type){case`skill`:return e.kind.item;case`category`:{let t=H(e.kind.category);return{id:e.id,label:t.displayName,emoji:t.emoji,category:e.kind.category,kind:`workspaceFile`}}case`subCategory`:return{id:e.id,label:e.kind.label,emoji:e.kind.emoji,category:e.kind.category,kind:`workspaceFile`};default:return}}function yt({variant:e,x:t,y:n,color:r,tooltip:i,visibility:a,delay:o,children:s,isSelected:c,onSingleClick:l,onDoubleClick:u}){let d=Me[e],{active:f,...p}=ht(l,u,c),m={left:t-d.size/2,top:n-d.size/2,width:d.size,height:d.size,borderRadius:d.cornerRadius,backgroundColor:$(r,f?d.fillHoverPct:d.fillPct),borderStyle:d.dashed?`dashed`:`solid`,borderColor:$(r,f?d.strokeHoverPct:d.strokePct),borderWidth:f?d.strokeHoverWidth:d.strokeWidth,transition:`background-color 0.15s ease, border-color 0.15s ease, border-width 0.15s ease`,cursor:l||u?`pointer`:`default`};return(0,z.jsx)(P.div,{className:`pointer-events-auto absolute flex flex-col items-center justify-center`,"data-constellation-node":!0,style:m,initial:{opacity:0,scale:.3},animate:{opacity:+!!a.visible,scale:a.visible?1:.3},transition:{...X,delay:o},onMouseEnter:p.onMouseEnter,onMouseLeave:p.onMouseLeave,onPointerDown:p.onPointerDown,onClick:p.onClick,title:i,children:s})}function bt({x:e,y:t,item:n,color:r,fallbackEmoji:i,visibility:a,delay:o,isSelected:s,onSingleClick:c,onDoubleClick:l}){let{active:u,...d}=ht(c,l,s);return(0,z.jsxs)(P.div,{className:`pointer-events-auto absolute`,"data-constellation-node":!0,style:{left:e-64/2,top:t-64/2,width:64,height:64,cursor:c||l?`pointer`:`default`},initial:{opacity:0,scale:.4},animate:{opacity:+!!a.visible,scale:a.visible?1:.4},transition:{...X,delay:o},onMouseEnter:d.onMouseEnter,onMouseLeave:d.onMouseLeave,onPointerDown:d.onPointerDown,onClick:d.onClick,title:n.label,children:[(0,z.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 rounded-md`,style:{transform:`rotate(45deg)`,backgroundColor:$(r,u?20:10),border:`${u?2:1.5}px solid ${$(r,u?70:40)}`,transition:`background-color 0.15s ease, border-color 0.15s ease, border-width 0.15s ease`}}),(0,z.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center`,children:[(0,z.jsx)(L,{skill:n,className:`h-4 w-4 text-[16px] leading-none`,fallback:i}),(0,z.jsx)(`span`,{className:`mt-0.5 max-w-[42px] truncate text-[9px] font-medium leading-tight text-[var(--content-default)]`,title:n.label,children:n.label})]})]})}function xt({node:e,index:t,phase:n,components:r,traits:i,customImageUrl:a,isSelected:o,onSingleClick:s,onDoubleClick:c}){let l=gt(e,n),u=_t(e,t);if(e.kind.type===`center`)return(0,z.jsx)(P.div,{className:`pointer-events-none absolute`,style:{left:e.x-90/2,top:e.y-90/2,width:90,height:90},initial:{opacity:0,scale:.6},animate:{opacity:+!!l.visible,scale:l.visible?1:.6},transition:{...X,delay:u},children:(0,z.jsx)(I,{components:r,traits:i,customImageUrl:a,size:90})});if(e.kind.type===`category`||e.kind.type===`subCategory`){let t=H(e.kind.category),n=e.kind.type===`category`?`category`:`subcategory`,r=e.kind.type===`category`?t.emoji:e.kind.emoji,i=e.kind.type===`category`?t.displayName:e.kind.label,a=n===`category`?`text-[20px]`:`text-[14px]`,d=n===`category`?`mt-1 max-w-[85%] truncate text-label-medium-default leading-tight text-[var(--content-default)]`:`mt-0.5 max-w-[85%] truncate text-[9.5px] font-medium leading-tight text-[var(--content-default)]`;return(0,z.jsxs)(yt,{variant:n,x:e.x,y:e.y,color:t.color,tooltip:i,visibility:l,delay:u,isSelected:o,onSingleClick:s,onDoubleClick:c,children:[(0,z.jsx)(`span`,{className:`${a} leading-none`,"aria-hidden":!0,children:r}),(0,z.jsx)(`span`,{className:d,title:i,children:i})]})}if(e.kind.type===`skill`){let t=e.kind.item,n=H(t.category);return(0,z.jsx)(bt,{x:e.x,y:e.y,item:t,color:n.color,fallbackEmoji:n.emoji,visibility:l,delay:u,isSelected:o,onSingleClick:s,onDoubleClick:c})}return null}function St(e,t,n,r){let[i,a]=(0,R.useState)({width:0,height:0}),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(!1),g=(0,R.useRef)(null),_=(0,R.useRef)(null);(0,R.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let n=new ResizeObserver(e=>{for(let t of e){let{width:e,height:n}=t.contentRect;a({width:e,height:n})}});n.observe(t);let r=t.getBoundingClientRect();return a({width:r.width,height:r.height}),()=>n.disconnect()},[e]);let v=(0,R.useMemo)(()=>ke(t,Y,i.width,i.height),[t,i.width,i.height]),y=o??v.zoom,b=c??{x:v.panX,y:v.panY},x=(0,R.useCallback)(()=>{h(!0),g.current!=null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{h(!1),g.current=null},500)},[]);(0,R.useEffect)(()=>()=>{g.current!=null&&window.clearTimeout(g.current)},[]);let S=(0,R.useCallback)(()=>{s(null),l(null),p(null),x()},[x]),C=(0,R.useCallback)((e,t)=>{let n=Math.max(Ae,Math.min(3,e));if(n===y)return;let r=n/y;l({x:b.x*r,y:b.y*r}),s(n),p(null),t?.animate&&x()},[b.x,b.y,x,y]),w=(0,R.useCallback)(()=>{C(y+je,{animate:!0})},[C,y]),T=(0,R.useCallback)(()=>{C(y-je,{animate:!0})},[C,y]),E=(0,R.useCallback)(e=>{if(f===e){S();return}let t=n.get(e);if(!t)return;let r=1.8;s(r),l({x:(Y.x-t.x)*r,y:(Y.y-t.y)*r}),p(e),x()},[S,n,x,f]);return(0,R.useEffect)(()=>{let t=e.current;if(!t)return;let n=e=>{e.preventDefault();let t=e.ctrlKey||e.metaKey?150:400;C(y*(1+-e.deltaY/t))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[C,e,y]),{zoom:y,pan:b,isDragging:u,isAnimating:m,viewSize:i,zoomedNodeId:f,zoomIn:w,zoomOut:T,fitAll:S,zoomToNode:E,handlePointerDown:(0,R.useCallback)(e=>{if(e.button!==0)return;let t=e.target;t.closest(`[data-constellation-control]`)||(t.closest(`[data-constellation-node]`)||r?.(),_.current={startX:e.clientX,startY:e.clientY,panStartX:b.x,panStartY:b.y,pointerId:e.pointerId,moved:!1},d(!0),g.current!=null&&(window.clearTimeout(g.current),g.current=null),h(!1),e.currentTarget.setPointerCapture(e.pointerId))},[r,b.x,b.y]),handlePointerMove:(0,R.useCallback)(e=>{let t=_.current;if(!t||t.pointerId!==e.pointerId)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;!t.moved&&(Math.abs(n)>3||Math.abs(r)>3)&&(t.moved=!0,p(null)),l({x:t.panStartX+n,y:t.panStartY+r})},[]),handlePointerUp:(0,R.useCallback)(e=>{let t=_.current;if(!(!t||t.pointerId!==e.pointerId)){_.current=null,d(!1);try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}}},[])}}function Ct({skills:e,components:t,traits:n,customImageUrl:r,className:a,isFullscreen:o,onToggleFullscreen:s,onSelectSkill:c}){let l=(0,R.useRef)(null),u=(0,R.useRef)(null),[d,f]=(0,R.useState)(0),[p,m]=(0,R.useState)(null),[_,v]=(0,R.useState)({width:240,height:120}),{nodes:y,edges:b}=(0,R.useMemo)(()=>De(Y,Oe(e.map(e=>({id:e.id,label:e.name,icon:e.icon,emoji:e.emoji,category:e.category??`system`,description:e.description,kind:`skill`}))),90),[e]),x=(0,R.useMemo)(()=>{let e=new Map;for(let t of y)e.set(t.id,t);return e},[y]),S=(0,R.useMemo)(()=>{if(p==null)return null;let e=x.get(p);return e?vt(e)??null:null},[p,x]),C=(0,R.useCallback)(()=>{m(null)},[]),w=St(l,y,x,C),T=e.length;(0,R.useEffect)(()=>{let e=!1,t=t=>{e||f(t)};t(0);let n=[setTimeout(()=>t(1),100),setTimeout(()=>t(2),300),setTimeout(()=>t(3),500),setTimeout(()=>t(4),700)];return()=>{e=!0,n.forEach(clearTimeout)}},[T]);let E=(0,R.useCallback)(e=>{m(t=>t===e?null:e)},[]),D=(0,R.useCallback)(()=>{!S||S.kind!==`skill`||(C(),c?.(S.id))},[C,c,S]);(0,R.useEffect)(()=>{if(p==null)return;let e=e=>{e.key===`Escape`&&C()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[C,p]),(0,R.useLayoutEffect)(()=>{if(S==null)return;let e=u.current;if(!e)return;let t=e.getBoundingClientRect();v({width:t.width,height:t.height})},[S]);let O={x:w.viewSize.width/2,y:w.viewSize.height/2},k=O.x-Y.x*w.zoom+w.pan.x,A=O.y-Y.y*w.zoom+w.pan.y,j=p==null?void 0:x.get(p),M=0,N=0;if(S!=null&&j){let e=k+j.x*w.zoom,t=A+j.y*w.zoom,n=e,r=t-60,i=_.width/2,a=_.height/2,o=i+8,s=Math.max(o,w.viewSize.width-i-8),c=a+8,l=Math.max(c,w.viewSize.height-a-8);M=Math.min(Math.max(n,o),s),N=Math.min(Math.max(r,c),l)}let I=(0,R.useCallback)(e=>{C(),w.zoomToNode(e)},[C,w]);return(0,z.jsxs)(`div`,{ref:l,className:`relative select-none overflow-hidden rounded-xl ${a??``}`,style:{backgroundColor:`var(--surface-base)`,backgroundImage:`radial-gradient(circle, color-mix(in srgb, var(--content-tertiary) 20%, transparent) 1px, transparent 1px)`,backgroundSize:`24px 24px`,backgroundPosition:`12px 12px`,touchAction:`none`,cursor:w.isDragging?`grabbing`:`grab`,userSelect:`none`,WebkitUserSelect:`none`},onPointerDown:w.handlePointerDown,onPointerMove:w.handlePointerMove,onPointerUp:w.handlePointerUp,onPointerCancel:w.handlePointerUp,children:[(0,z.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0`,style:{background:`radial-gradient(circle at center, color-mix(in srgb, var(--content-tertiary) 6%, transparent), transparent 60%)`}}),(0,z.jsxs)(`div`,{className:`absolute inset-0`,style:{transform:`translate(${k}px, ${A}px) scale(${w.zoom})`,transformOrigin:`0 0`,transition:w.isAnimating?`transform 0.4s cubic-bezier(0.22, 1, 0.36, 1)`:`none`},children:[(0,z.jsx)(dt,{edges:b,nodeById:x,visible:d>=2}),y.map((e,i)=>(0,z.jsx)(xt,{node:e,index:i,phase:d,components:t,traits:n,customImageUrl:r,isSelected:p===e.id||w.zoomedNodeId===e.id,onSingleClick:()=>E(e.id),onDoubleClick:()=>I(e.id)},e.id))]}),s&&(0,z.jsx)(`div`,{className:`absolute left-4 top-4`,"data-constellation-control":!0,children:(0,z.jsx)(i,{variant:`ghost`,iconOnly:o?(0,z.jsx)(g,{}):(0,z.jsx)(h,{}),onClick:s,"aria-label":o?`Exit fullscreen`:`Enter fullscreen`,tooltip:o?`Exit fullscreen`:`Enter fullscreen`})}),(0,z.jsx)(ft,{visible:d>=4}),(0,z.jsx)(F,{children:S==null?null:(0,z.jsx)(P.div,{ref:u,className:`pointer-events-auto absolute z-20`,"data-constellation-popover":!0,style:{left:M,top:N,transform:`translate(-50%, -50%)`},initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},transition:{duration:.15,ease:`easeOut`},onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:(0,z.jsx)(pt,{item:S,color:H(S.category).color,onViewDetails:c&&S.kind===`skill`?D:void 0})},`constellation-popover`)}),(0,z.jsxs)(`div`,{"data-constellation-control":!0,className:`absolute bottom-4 right-4 flex items-center gap-1`,children:[(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(oe,{}),onClick:w.zoomIn,"aria-label":`Zoom in`,tooltip:`Zoom in`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ue,{}),onClick:w.zoomOut,"aria-label":`Zoom out`,tooltip:`Zoom out`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ee,{}),onClick:w.fitAll,"aria-label":`Fit all`,tooltip:`Fit all`})]})]})}function wt({assistantName:e,assistantPersonality:t,assistantRole:n,hatchedDate:r,components:a,traits:o,customImageUrl:s,onOpenThread:c,onOpenModal:l}){return(0,z.jsxs)(`div`,{className:`w-full overflow-hidden rounded-xl`,style:{backgroundColor:`var(--surface-lift)`},children:[(0,z.jsxs)(`div`,{className:`relative p-6 pb-0`,children:[(0,z.jsx)(`div`,{className:`pr-8 text-center`,children:(0,z.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:e})}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your name`),disabled:!c,"aria-label":`Edit identity`,title:`Edit Name`,className:`absolute right-6 top-6`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,z.jsx)(I,{components:a,traits:o,customImageUrl:s,size:200,interactive:!0})}),(0,z.jsx)(`div`,{className:`flex justify-center pb-6`,children:(0,z.jsx)(i,{type:`button`,variant:`outlined`,size:`regular`,onClick:l,className:`!rounded-full`,children:`Update Avatar`})}),(0,z.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Role`}),(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:n})]}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your role description`),disabled:!c,"aria-label":`Edit role`,title:`Edit Role`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Personality`}),(0,z.jsx)(`p`,{className:`truncate text-body-medium-default`,style:{color:`var(--content-default)`},title:t||`Not set`,children:t||`Not set`})]}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your personality`),disabled:!c,"aria-label":`Edit personality`,title:`Edit Personality`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsxs)(`div`,{className:`px-4 py-3`,children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Hatched`}),(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:r})]})]})}function Tt({assistantId:e,onOpenThread:n}){let{components:r,traits:i,customImageUrl:a,isLoading:s,invalidate:c}=se(e),[l,u]=(0,R.useState)(null),[d,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(null),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(!1),b=o(Fe(e)),x=b.data?.kind===`unsupported`||b.isError,S=o({...w({path:{assistant_id:e},query:{kind:`installed`}}),select:e=>e.skills,enabled:!!e});(0,R.useEffect)(()=>{let n=!1;return Promise.all([f(e),O(e).catch(()=>({ok:!1,status:0,error:{}}))]).then(([t,r])=>{n||(u(t),r.ok?p(r.data.created):p(null),h(e))}).catch(e=>{n||t(e,{context:`identity_tab_load`})}),()=>{n=!0}},[e]);let C=m!==e||s,T=(0,R.useCallback)(()=>{c()},[c]),E=(0,R.useCallback)(()=>{_(!0)},[]),D=(0,R.useCallback)(()=>{_(!1)},[]),k=(0,R.useCallback)(()=>{n?.(`I'd like to create a custom AI-generated avatar.`)},[n]);if(C)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})});let A=l?.name||`Assistant`,j=l?.personality||``,M=l?.role||`Not set`,N=d?new Date(d).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`Unknown`;return(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:flex-row lg:items-stretch`,children:[(0,z.jsx)(`div`,{className:`mx-auto w-full max-w-md lg:mx-0 lg:h-full lg:shrink-0 lg:overflow-y-auto ${v?`hidden`:`flex`}`,children:(0,z.jsx)(wt,{assistantName:A,assistantPersonality:j,assistantRole:M,hatchedDate:N,components:r,traits:i,customImageUrl:a,onOpenThread:n,onOpenModal:E})}),(0,z.jsx)(`div`,{className:`min-h-[480px] min-w-0 flex-1 lg:min-h-0`,children:x?(0,z.jsx)(Ct,{skills:S.data??[],components:r,traits:i,customImageUrl:a,className:`h-full w-full`,isFullscreen:v,onToggleFullscreen:()=>y(e=>!e)}):(0,z.jsx)(ut,{assistantId:e,className:`h-full w-full`,isFullscreen:v,onToggleFullscreen:()=>y(e=>!e)})}),(0,z.jsx)(he,{open:g,onClose:D,assistantId:e,components:r,traits:i,customImageUrl:a,onSaveCharacter:T,onUploadImage:T,onGenerateWithAI:n?k:void 0})]})}function Et({onOpenThread:e}){return(0,z.jsx)(Tt,{assistantId:fe(),onOpenThread:e})}function Dt(){let e=a();return(0,z.jsx)(Et,{onOpenThread:t=>{j.getState().setMainView(`chat`);let n=M();A.getState().setActiveConversationId(n),e(`${k.conversation(n)}?prompt=${encodeURIComponent(t)}`)}},fe())}export{Dt as IdentityPageRoute};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-Dhiismgm.js";import{t as n}from"./react-DJZBPgpf.js";import{F as r,t as i}from"./button-amTXFI-2.js";import{d as a}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as o}from"./useQuery-B45lW1Kk.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./queryOptions-BtNi-_9H.js";import{t as l}from"./card-Bv5O5juh.js";import{t as u}from"./chevron-left-BMF1xNfR.js";import{t as d}from"./chevron-right-DqqmezXC.js";import{n as f,r as p}from"./animated-avatar-CrlodWQr.js";import{t as m}from"./file-text-CYJz-GvF.js";import{n as h,t as g}from"./minimize-2-Clnet2W7.js";import{t as _}from"./pencil-CUIr0IFo.js";import{t as v}from"./save-aD5JFIZf.js";import{t as y}from"./sparkles-PGiR5v1g.js";import{t as b}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{t as x}from"./file-markdown-BXUvAQ24.js";import{fn as S,pn as C}from"./sdk.gen-BwnFjFcp.js";import{St as w}from"./react-query.gen-C6wVk6Rw.js";import{n as T,r as E,t as D}from"./api-errors-CrWDzVca.js";import{r as O}from"./api-CYdUmFnA.js";import{c as k}from"./routes-BbeIx_F9.js";import{t as A}from"./conversation-store-BljZWolF.js";import{r as j}from"./viewer-store-B8-Qnbx9.js";import{t as M}from"./conversation-selection-BBHkzcfy.js";import{t as N}from"./misc-BYQPh7vS.js";import{t as P}from"./proxy-BzlH_XAe.js";import{t as F}from"./AnimatePresence-C8APSgIu.js";import{Gt as I,Mi as ee,Ni as te,di as ne,fi as re,fr as ie,ia as ae,li as oe,lr as se,pr as ce,rt as le,ui as ue,ur as de}from"./index-BYfTlch9.js";import{t as fe}from"./use-active-assistant-id-BNRMo_Mi.js";import{t as L}from"./skill-icon-CEEEqpSq.js";var pe=e(r(),1),R=e(n(),1),z=s();function B(e,t,n){return n===`forward`?(e+1)%t:(e-1+t)%t}function me({assistantId:e,initialTraits:t,onSave:n,onCancel:r}){let[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(!0),[c,l]=(0,R.useState)(!1),u=(0,R.useRef)(null),[d,f]=(0,R.useState)(0),[m,h]=(0,R.useState)(0),[g,_]=(0,R.useState)(0);(0,R.useEffect)(()=>{if(u.current===e)return;let n=!1;return de(e).then(r=>{if(!n&&(u.current=e,a(r),s(!1),r&&t)){let e=r.bodyShapes.findIndex(e=>e.id===t.bodyShape),n=r.eyeStyles.findIndex(e=>e.id===t.eyeStyle),i=r.colors.findIndex(e=>e.id===t.color);e>=0&&f(e),n>=0&&h(n),i>=0&&_(i)}}),()=>{n=!0}},[e,t]);let y=(0,R.useCallback)(()=>{i&&(f(Math.floor(Math.random()*i.bodyShapes.length)),h(Math.floor(Math.random()*i.eyeStyles.length)),_(Math.floor(Math.random()*i.colors.length)))},[i]),x=(0,R.useCallback)(async()=>{if(!i)return;let t={bodyShape:i.bodyShapes[d].id,eyeStyle:i.eyeStyles[m].id,color:i.colors[g].id};l(!0);try{await ie(e,t),n?.(t)}finally{l(!1)}},[i,d,m,g,e,n]);if(o)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-[var(--border-element)] border-t-[var(--content-tertiary)]`})});if(!i)return(0,z.jsx)(`div`,{className:`py-8 text-center text-body-medium-lighter text-[var(--content-quiet)]`,children:`Unable to load avatar components. Make sure your assistant is running.`});let S=i.bodyShapes[d],C=i.eyeStyles[m],w=i.colors[g];return(0,z.jsxs)(`div`,{className:`space-y-6`,children:[(0,z.jsx)(`div`,{className:`flex justify-center`,children:(0,z.jsx)(`div`,{className:`rounded-2xl bg-[var(--surface-sunken)] p-6`,children:(0,z.jsx)(le,{components:i,bodyShapeId:S.id,eyeStyleId:C.id,colorId:w.id,size:160})})}),(0,z.jsxs)(`div`,{className:`space-y-3`,children:[(0,z.jsx)(V,{label:`Body`,value:S.id,onPrev:()=>f(B(d,i.bodyShapes.length,`backward`)),onNext:()=>f(B(d,i.bodyShapes.length,`forward`))}),(0,z.jsx)(V,{label:`Eyes`,value:C.id,onPrev:()=>h(B(m,i.eyeStyles.length,`backward`)),onNext:()=>h(B(m,i.eyeStyles.length,`forward`))}),(0,z.jsx)(V,{label:`Color`,value:w.id,colorHex:w.hex,onPrev:()=>_(B(g,i.colors.length,`backward`)),onNext:()=>_(B(g,i.colors.length,`forward`))})]}),(0,z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:y,className:`flex flex-1 cursor-pointer items-center justify-center gap-2 rounded-lg border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-2 text-body-medium-default text-[var(--content-strong)] transition-colors hover:bg-[var(--surface-hover)]`,children:[(0,z.jsx)(p,{className:`h-4 w-4`}),`Randomize`]}),(0,z.jsxs)(`button`,{type:`button`,onClick:x,disabled:c,className:`flex flex-1 cursor-pointer items-center justify-center gap-2 rounded-lg border border-[var(--system-positive-strong)] bg-[var(--system-positive-weak)] px-3 py-2 text-body-medium-default text-[var(--system-positive-strong)] transition-colors hover:opacity-90 disabled:opacity-50`,children:[(0,z.jsx)(v,{className:`h-4 w-4`}),c?`Saving...`:`Save Avatar`]}),r&&(0,z.jsx)(`button`,{type:`button`,onClick:r,className:`flex cursor-pointer items-center justify-center rounded-lg border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-2 text-body-medium-default text-[var(--content-strong)] transition-colors hover:bg-[var(--surface-hover)]`,children:(0,z.jsx)(b,{className:`h-4 w-4`})})]})]})}function V({label:e,value:t,colorHex:n,onPrev:r,onNext:i}){return(0,z.jsxs)(`div`,{className:`flex items-center justify-between rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-lift)] px-3 py-2`,children:[(0,z.jsx)(`span`,{className:`text-body-small-default uppercase tracking-wider text-[var(--content-quiet)]`,children:e}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:r,className:`flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-[var(--content-quiet)] transition-colors hover:bg-[var(--surface-active)]`,children:(0,z.jsx)(u,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{className:`flex min-w-[80px] items-center justify-center gap-2`,children:[n&&(0,z.jsx)(`div`,{className:`h-4 w-4 rounded-full border border-[var(--border-element)]`,style:{backgroundColor:n}}),(0,z.jsx)(`span`,{className:`text-body-medium-default capitalize text-[var(--content-strong)]`,children:t})]}),(0,z.jsx)(`button`,{type:`button`,onClick:i,className:`flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-[var(--content-quiet)] transition-colors hover:bg-[var(--surface-active)]`,children:(0,z.jsx)(d,{className:`h-4 w-4`})})]})]})}function he({open:e,onClose:t,assistantId:n,components:r,traits:i,customImageUrl:a,onSaveCharacter:o,onUploadImage:s,onGenerateWithAI:c}){let l=(0,R.useId)(),f=(0,R.useRef)(null),p=(0,R.useRef)(null),m=(0,R.useRef)(null),[h,g]=(0,R.useState)(`actions`),[_,v]=(0,R.useState)(!1);(0,R.useEffect)(()=>{e&&p.current?.focus()},[e]),(0,R.useEffect)(()=>{if(e){let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}}},[e]);let x=(0,R.useCallback)(()=>{g(`actions`),t()},[t]),S=(0,R.useCallback)(e=>{e.key===`Escape`&&(h===`character-builder`?g(`actions`):x())},[x,h]),C=(0,R.useCallback)(e=>{e.target===f.current&&x()},[x]),w=(0,R.useCallback)(()=>{g(`actions`)},[]),T=(0,R.useCallback)(()=>{g(`character-builder`)},[]),E=(0,R.useCallback)(async e=>{let t=e.target.files?.[0];if(!t)return;v(!0);let r=await ce(n,t);v(!1),r&&(s(),x()),m.current&&(m.current.value=``)},[n,s,x]),D=(0,R.useCallback)(()=>{m.current?.click()},[]),O=(0,R.useCallback)(()=>{x(),c?.()},[x,c]),k=(0,R.useCallback)(e=>{o(e),x()},[o,x]);return e?(0,pe.createPortal)((0,z.jsxs)(`div`,{ref:f,role:`dialog`,"aria-modal":`true`,"aria-labelledby":l,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/50`,onKeyDown:S,onClick:C,children:[(0,z.jsxs)(`div`,{className:`mx-4 flex w-full max-w-md flex-col rounded-xl border shadow-xl`,style:{backgroundColor:`var(--surface-lift)`,borderColor:`var(--border-base)`,maxHeight:`85vh`},children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-6 py-4`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[h===`character-builder`&&(0,z.jsx)(`button`,{type:`button`,onClick:w,className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/10`,"aria-label":`Back`,children:(0,z.jsx)(u,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsx)(`h2`,{id:l,className:`text-title-small`,style:{color:`var(--content-default)`},children:h===`character-builder`?`Build a Character`:`Update Avatar`})]}),(0,z.jsx)(`button`,{ref:p,type:`button`,onClick:x,className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/10`,"aria-label":`Close`,children:(0,z.jsx)(b,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})})]}),(0,z.jsx)(`div`,{className:`overflow-y-auto p-6`,children:h===`actions`?(0,z.jsxs)(`div`,{className:`flex flex-col items-center gap-6`,children:[(0,z.jsx)(I,{components:r,traits:i,customImageUrl:a,size:120,interactive:!0}),(0,z.jsxs)(`div`,{className:`w-full space-y-2`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:T,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(re,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Build a Character`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Build your own character`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:D,disabled:_,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(ae,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:_?`Uploading...`:`Upload Image`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Choose an image from your computer`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]}),c&&(0,z.jsxs)(`button`,{type:`button`,onClick:O,className:`flex w-full cursor-pointer items-center gap-3 rounded-lg border px-4 py-3 transition-colors hover:opacity-80`,style:{borderColor:`var(--border-base)`,backgroundColor:`var(--surface-lift)`},children:[(0,z.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg`,style:{backgroundColor:`color-mix(in oklab, var(--content-tertiary) 16%, transparent)`},children:(0,z.jsx)(y,{className:`h-4 w-4`,style:{color:`var(--content-secondary)`}})}),(0,z.jsxs)(`div`,{className:`flex-1 text-left`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Generate with AI`}),(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Create an avatar through chat`})]}),(0,z.jsx)(d,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`}})]})]})]}):(0,z.jsx)(me,{assistantId:n,initialTraits:i,onSave:k,onCancel:w})})]}),(0,z.jsx)(`input`,{ref:m,type:`file`,accept:`image/png,image/jpeg,image/webp,image/gif`,className:`hidden`,onChange:E})]}),document.body):null}var ge={displayName:`Other`,color:`#888`,emoji:`?`},_e={email:{displayName:`Email`,color:`#A665C9`,emoji:`📧`},calendar:{displayName:`Calendar`,color:`#0E9B8B`,emoji:`📅`},messaging:{displayName:`Messaging`,color:`#6B8AE0`,emoji:`💬`},browsing:{displayName:`Browsing`,color:`#E9642F`,emoji:`🌐`},productivity:{displayName:`Productivity`,color:`#0E9B8B`,emoji:`📋`},development:{displayName:`Development`,color:`#EF4400`,emoji:`🔨`},voice:{displayName:`Voice`,color:`#DB4B77`,emoji:`🎤`},commerce:{displayName:`Commerce`,color:`#E9C91A`,emoji:`🛒`},content:{displayName:`Content`,color:`#DB4B77`,emoji:`🎨`},health:{displayName:`Health`,color:`#4C9B50`,emoji:`❤️`},system:{displayName:`System`,color:`#8D99A5`,emoji:`⚙️`},integrations:{displayName:`Integrations`,color:`#8D99A5`,emoji:`🔗`}};function H(e){return _e[e]??ge}var U=[`email`,`calendar`,`messaging`,`browsing`,`productivity`,`development`,`voice`,`commerce`,`content`,`health`,`system`,`integrations`],ve={email:[{label:`Sending`,emoji:`📨`,skillIds:new Set([`agentmail`,`email-setup`])},{label:`Reading`,emoji:`📬`,skillIds:new Set([`email-channel`,`gmail`])}],messaging:[{label:`Chat`,emoji:`💬`,skillIds:new Set([`messaging`,`slack`,`telegram`])},{label:`Notifications`,emoji:`🔔`,skillIds:new Set([`notifications`])},{label:`People`,emoji:`👥`,skillIds:new Set([`contacts`,`followups`])}],development:[{label:`Coding`,emoji:`💻`,skillIds:new Set([`typescript-eval`,`frontend-design`])},{label:`Dev Tools`,emoji:`🔧`,skillIds:new Set([`api-mapping`,`cli-discover`,`subagent`,`app-builder`])}],browsing:[{label:`Control`,emoji:`🎮`,skillIds:new Set([`computer-use`,`macos-automation`,`browser`])},{label:`Triggers`,emoji:`⏰`,skillIds:new Set([`watcher`,`time-based-actions`])}],commerce:[{label:`Shopping`,emoji:`🛒`,skillIds:new Set([`amazon`,`doordash`,`restaurant-reservation`])}],system:[{label:`Core`,emoji:`🧠`,skillIds:new Set([`knowledge-graph`,`skills-catalog`,`self-upgrade`])},{label:`Daily`,emoji:`☀️`,skillIds:new Set([`start-the-day`,`weather`])}]},ye=14,be=10,xe=6;function W(e){switch(e.kind.type){case`center`:return{shape:`circle`,size:90,cornerRadius:0};case`category`:return{shape:`roundedRect`,size:80,cornerRadius:ye};case`subCategory`:return{shape:`roundedRect`,size:56,cornerRadius:be};case`skill`:return{shape:`diamond`,size:64,cornerRadius:xe}}}function Se(e,t,n,r){let i=Math.min(Math.max(0,t),e),a=Math.abs(n),o=Math.abs(r);if(a<1e-6&&o<1e-6)return e;let s=e/Math.max(a,o),c=s*n,l=s*r;if(!(Math.abs(c)>e-i&&Math.abs(l)>e-i))return s;let u=Math.sign(c)*(e-i),d=Math.sign(l)*(e-i),f=n*u+r*d,p=u*u+d*d-i*i,m=f*f-p;return m<0?s:f+Math.sqrt(m)}function G(e,t,n){switch(e.shape){case`circle`:return e.size/2;case`roundedRect`:return Se(e.size/2,e.cornerRadius,t,n);case`diamond`:{let r=(t+n)*Math.SQRT1_2,i=(-t+n)*Math.SQRT1_2;return Se(e.size/2,e.cornerRadius,r,i)}}}function Ce(e,t){let n=t.x-e.x,r=t.y-e.y,i=Math.sqrt(n*n+r*r);if(i<1e-6)return{x1:e.x,y1:e.y,x2:t.x,y2:t.y};let a=n/i,o=r/i,s=Math.max(0,G(W(e),a,o)-3),c=Math.max(0,G(W(t),-a,-o)-3);if(s+c>=i){let n=(e.x+t.x)/2,r=(e.y+t.y)/2;return{x1:n,y1:r,x2:n,y2:r}}return{x1:e.x+a*s,y1:e.y+o*s,x2:t.x-a*c,y2:t.y-o*c}}var we=10,Te=200,Ee=160,K=160;function q(e,t,n,r){let i={x:e.x,y:e.y};for(let e=0;e<30;e++){let e=0,a=0,o=0;for(let s of n){let n=i.x-s.x,c=i.y-s.y,l=Math.sqrt(n*n+c*c),u=t+s.radius+r-l;u>e&&(e=u,l<.1?(a=u+1,o=0):(a=n/l*(u+1),o=c/l*(u+1)))}if(e<=0)break;i={x:i.x+a,y:i.y+o}}return i}function J(e,t,n,r,i,a,o,s,c,l,u,d){if(e.length===0)return;let f=a+o,p=Math.cos(r),m=Math.sin(r),h=-m,g=p,_=f*.88,v=H(c).color;e.forEach((r,c)=>{let y=Math.floor(c/3),b=c%3,x=Math.min(3,e.length-y*3),S=(b-(x-1)/2)*f,C=y%2==1&&x<3?f*.5:0,w=i+y*_,T=q({x:n.x+w*p+(S+C)*h,y:n.y+w*m+(S+C)*g},a/2,u,o);u.push({id:r.id,kind:{type:`skill`,item:r},parentId:t,depth:s,x:T.x,y:T.y,radius:a/2}),d.push({id:`edge-${l}-skill-${c}`,fromId:t,toId:r.id,color:v})})}function De(e,t,n=90){let r=[],i=[],a=we;if(r.push({id:`__center__`,kind:{type:`center`},parentId:null,depth:0,x:e.x,y:e.y,radius:n/2}),t.length===0)return{nodes:r,edges:i};let o=t.length,s=2*Math.PI/o;return t.forEach((t,n)=>{let o=-Math.PI/2+n*s,c=`cat-${t.category}`,l=H(t.category).color,u=q({x:e.x+Te*Math.cos(o),y:e.y+Te*Math.sin(o)},80/2,r,a);r.push({id:c,kind:{type:`category`,category:t.category},parentId:`__center__`,depth:1,x:u.x,y:u.y,radius:80/2}),i.push({id:`edge-center-${t.category}`,fromId:`__center__`,toId:c,color:l});let d=ve[t.category];if(d&&d.length>0){let e=[],n=new Set;for(let r of d){let i=t.items.filter(e=>r.skillIds.has(e.id));i.length>0&&(e.push({def:r,items:i}),i.forEach(e=>n.add(e.id)))}let f=t.items.filter(e=>!n.has(e.id));if(f.length>0){if(e.length===0){J(t.items,c,u,o,K,64,a,2,t.category,t.category,r,i);return}let n=e[e.length-1];n&&n.items.push(...f)}let p=e.length,m=s*.55,h=p<=1?0:Math.min(m,(p-1)*.35);e.forEach((e,n)=>{let s;s=p===1?o:o+(n/(p-1)-.5)*h*2;let d=`subcat-${t.category}-${n}`,f=q({x:u.x+Ee*Math.cos(s),y:u.y+Ee*Math.sin(s)},56/2,r,a);r.push({id:d,kind:{type:`subCategory`,label:e.def.label,emoji:e.def.emoji,category:t.category},parentId:c,depth:2,x:f.x,y:f.y,radius:56/2}),i.push({id:`edge-${t.category}-sub-${n}`,fromId:c,toId:d,color:l}),J(e.items,d,f,s,K,64,a,3,t.category,d,r,i)})}else J(t.items,c,u,o,K,64,a,2,t.category,t.category,r,i)}),{nodes:r,edges:i}}function Oe(e){let t=new Map;for(let n of e){let e=t.get(n.category);e?e.push(n):t.set(n.category,[n])}let n=[];for(let e of U){let r=t.get(e);r&&r.length>0&&n.push({category:e,items:r})}for(let[e,r]of t)!U.includes(e)&&r.length>0&&n.push({category:e,items:r});return n}function ke(e,t,n,r,i=120,a=.4,o=3){if(e.length===0)return{zoom:1,panX:0,panY:0};let s=1/0,c=-1/0,l=1/0,u=-1/0;for(let t of e)s=Math.min(s,t.x),c=Math.max(c,t.x),l=Math.min(l,t.y),u=Math.max(u,t.y);let d=c-s+i*2,f=u-l+i*2;if(d<=0||f<=0||n<=0||r<=0)return{zoom:1,panX:0,panY:0};let p=Math.min(n/d,r/f),m=Math.max(a,Math.min(o,p)),h=(s+c)/2-t.x,g=(l+u)/2-t.y;return{zoom:m,panX:-h*m,panY:-g*m}}var Ae=.4,je=.25,Y={x:600,y:450},X={type:`spring`,stiffness:180,damping:20},Me={category:{size:80,cornerRadius:14,dashed:!1,fillPct:14,fillHoverPct:25,strokePct:55,strokeHoverPct:85,strokeWidth:2,strokeHoverWidth:2.5},subcategory:{size:56,cornerRadius:10,dashed:!0,fillPct:10,fillHoverPct:20,strokePct:40,strokeHoverPct:70,strokeWidth:1.5,strokeHoverWidth:2}},Ne={category:`rounded-[3px]`,subcategory:`rounded-[3px] border-dashed`,skill:`rotate-45`,workspace:`rounded-full`},Pe=`Failed to load the memory graph.`;function Fe(e){return c({queryKey:[`memory-graph`,e],staleTime:5*6e4,queryFn:async()=>{let{data:t,error:n,response:r}=await S({path:{assistant_id:e},throwOnError:!1});if(T(r,n,Pe),!r.ok)throw new D(r.status,E(n,r,Pe));return!t||t.supported===!1?{kind:`unsupported`}:{kind:`ready`,graph:t}}})}var Ie=Math.PI*(3-Math.sqrt(5)),Le=7,Re=2.4,ze=34,Be=10;function Ve(e){return Math.min(ze,Le+Re*Math.sqrt(e))}function He(e){return e===`concept`||e===`skill`||e===`capability`?e:`other`}function Ue(e){return e===`link`||e===`learned`?e:`other`}function We(e,t={}){let n=t.center??Y,r=e.nodes,i=r.length;if(i===0)return{nodes:[],edges:[]};let a=new Map;r.forEach((e,t)=>a.set(e.id,t));let o=e.edges.filter(e=>e.source!==e.target&&a.has(e.source)&&a.has(e.target)),s=Array(i).fill(0),c=[];for(let e of o){let t=a.get(e.source),n=a.get(e.target);s[t]++,s[n]++,c.push([t,n])}let l=r.map((e,t)=>Ve(s[t])),u=70+26*Math.sqrt(i),d=r.map((e,t)=>{let r=(t+.5)/i,a=Math.acos(1-2*r),o=t*Ie,s=u*Math.cbrt(r),c=Math.sin(a);return{x:n.x+s*c*Math.cos(o),y:n.y+s*c*Math.sin(o),z:s*Math.cos(a),vx:0,vy:0,vz:0}}),f=t.iterations??Math.max(90,Math.min(340,Math.round(46e3/i))),p=.011,m=.82,h=.5,g=1,_=1-.001**(1/f);for(let e=0;e<f;e++){for(let e=0;e<i;e++){let t=d[e];for(let n=e+1;n<i;n++){let r=d[n],i=t.x-r.x,a=t.y-r.y,o=t.z-r.z,s=i*i+a*a+o*o;s<.01&&(i=(e-n)*.1+.1,a=.1,o=.05,s=i*i+a*a+o*o);let c=Math.sqrt(s),l=6400/s,u=i/c*l,f=a/c*l,p=o/c*l;t.vx+=u,t.vy+=f,t.vz+=p,r.vx-=u,r.vy-=f,r.vz-=p}}for(let[e,t]of c){let n=d[e],r=d[t],i=r.x-n.x,a=r.y-n.y,o=r.z-n.z,s=Math.sqrt(i*i+a*a+o*o)||.01,c=.05*(s-140),l=i/s*c,u=a/s*c,f=o/s*c;n.vx+=l,n.vy+=u,n.vz+=f,r.vx-=l,r.vy-=u,r.vz-=f}for(let e=0;e<i;e++){let t=d[e];t.vx+=(n.x-t.x)*p,t.vy+=(n.y-t.y)*p,t.vz+=(0-t.z)*p,t.x+=t.vx*g*h,t.y+=t.vy*g*h,t.z+=t.vz*g*h,t.vx*=m,t.vy*=m,t.vz*=m}g*=1-_}for(let e=0;e<10;e++){let e=!1;for(let t=0;t<i;t++){let n=d[t];for(let r=t+1;r<i;r++){let i=d[r],a=i.x-n.x,o=i.y-n.y,s=i.z-n.z,c=Math.sqrt(a*a+o*o+s*s),u=l[t]+l[r]+Be;if(c>=u)continue;c<.01&&(a=(r-t)*.1+.1,o=.1,s=.05,c=Math.sqrt(a*a+o*o+s*s));let f=(u-c)/2,p=a/c*f,m=o/c*f,h=s/c*f;n.x-=p,n.y-=m,n.z-=h,i.x+=p,i.y+=m,i.z+=h,e=!0}}if(!e)break}return{nodes:r.map((e,t)=>{let n={id:e.id,x:d[t].x,y:d[t].y,z:d[t].z,radius:l[t],label:e.label,kind:He(e.kind),degree:s[t]};return e.summary&&(n.summary=e.summary),e.updatedAtMs!==void 0&&(n.updatedAtMs=e.updatedAtMs),n}),edges:o.map((e,t)=>{let n={id:`${e.source}__${e.target}__${t}`,fromId:e.source,toId:e.target,kind:Ue(e.kind),directed:e.directed??!1};return e.description&&(n.description=e.description),n})}}var Ge=`Failed to load this concept.`;function Ke(e,t){return c({queryKey:[`memory-graph-node`,e,t],enabled:!!(e&&t),queryFn:async()=>{let{data:n,error:r,response:i}=await C({path:{assistant_id:e},query:{id:t??``},throwOnError:!1});if(T(i,r,Ge),!i.ok)throw new D(i.status,E(r,i,Ge));return n??{found:!1}}})}function qe(e){return e?new Date(e).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):null}function Je({assistantId:e,node:t,onClose:n}){let r=o(Ke(e,t.id)),a=r.data,s=qe(t.updatedAtMs);return(0,R.useEffect)(()=>{let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`div`,{"data-graph-panel":!0,className:`absolute inset-0 z-20 flex justify-end`,onPointerDown:e=>e.stopPropagation(),onPointerMove:e=>e.stopPropagation(),onPointerUp:e=>e.stopPropagation(),children:[(0,z.jsx)(`div`,{className:`absolute inset-0`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 55%, transparent)`},onClick:n}),(0,z.jsxs)(`aside`,{className:`relative flex h-full min-h-0 w-full max-w-md flex-col overflow-hidden`,style:{backgroundColor:`var(--surface-lift)`,borderLeft:`1px solid var(--border-base)`},children:[(0,z.jsxs)(`header`,{className:`flex shrink-0 items-start justify-between gap-3 border-b px-5 py-4`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(`h2`,{className:`truncate text-title-small`,style:{color:`var(--content-default)`},title:a?.title??t.label,children:a?.title??t.label}),s?(0,z.jsxs)(`p`,{className:`mt-0.5 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`Updated `,s]}):null]}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(b,{"aria-hidden":!0}),onClick:n,"aria-label":`Close`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-5 py-4`,style:{touchAction:`pan-y`},children:r.isLoading?(0,z.jsx)(`div`,{className:`flex justify-center py-8`,children:(0,z.jsx)(`div`,{className:`h-5 w-5 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})}):r.isError?(0,z.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Couldn't load this concept. Try again in a moment.`}):a?.found&&a.content?.trim()?(0,z.jsx)(x,{content:a.content}):(0,z.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This concept doesn't have written content yet — it exists as a link in the graph, but its page is empty.`})})]})]})}var Ye={concept:`#5B8DEF`,skill:`#A665C9`,capability:`#0E9B8B`,other:`#8D99A5`},Xe={concept:`Concept`,skill:`Skill`,capability:`Capability`,other:`Other`},Ze=`#E9A23B`;function Qe({nodeKinds:e,hasLinks:t,hasLearned:n}){return(0,z.jsxs)(`div`,{className:`pointer-events-none absolute bottom-4 left-4 flex flex-col gap-1.5 rounded-lg px-3 py-2`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 78%, transparent)`,border:`1px solid var(--border-base)`},children:[e.map(e=>(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-2.5 w-2.5 rounded-full`,style:{backgroundColor:Ye[e]}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:Xe[e]})]},e)),e.length>0&&(t||n)&&(0,z.jsx)(`div`,{className:`mt-0.5 border-t pt-1.5`,style:{borderColor:`var(--border-base)`}}),t&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-0 w-4`,style:{borderTop:`2px solid var(--content-tertiary)`}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:`Link`})]}),n&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`inline-block h-0 w-4`,style:{borderTop:`2px dashed #E9A23B`}}),(0,z.jsx)(`span`,{className:`text-[11px]`,style:{color:`var(--content-tertiary)`},children:`Learned`})]})]})}var $e=[`concept`,`skill`,`capability`,`other`],et=.13,tt=2600,nt=.006,rt=1.15,it=3,at=.32,ot=.45,st=3,ct=4;function lt(e){let t=getComputedStyle(e);return{content:t.getPropertyValue(`--content-default`).trim()||`#e5e7eb`,tertiary:t.getPropertyValue(`--content-tertiary`).trim()||`#8792a0`}}function Z({title:e,detail:t}){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 px-6 text-center`,children:[(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e}),t?(0,z.jsx)(`p`,{className:`max-w-sm text-body-small-default`,style:{color:`var(--content-tertiary)`},children:t}):null]})}function ut({assistantId:e,className:t,isFullscreen:n,onToggleFullscreen:r}){let a=(0,R.useRef)(null),s=(0,R.useRef)(null),c=o(Fe(e)),l=c.data?.kind===`ready`?c.data.graph:null,u=(0,R.useMemo)(()=>l?We(l):{nodes:[],edges:[]},[l]),d=c.data?.kind===`ready`&&u.nodes.length>0,f=(0,R.useMemo)(()=>{let e=new Map,t=(t,n)=>{let r=e.get(t);r||(r=new Set,e.set(t,r)),r.add(n)};for(let e of u.edges)t(e.fromId,e.toId),t(e.toId,e.fromId);return e},[u.edges]),p=(0,R.useMemo)(()=>{if(u.nodes.length===0)return 1;let e=u.nodes.map(e=>{let t=e.x-Y.x,n=e.y-Y.y;return Math.sqrt(t*t+n*n+e.z*e.z)+e.radius}).sort((e,t)=>e-t),t=Math.min(e.length-1,Math.floor(e.length*.92));return Math.max(1,e[t])},[u.nodes]),m=(0,R.useRef)({yaw:.5,pitch:.32,zoom:1,hoveredId:null,dragging:!1,moved:!1,lastX:0,lastY:0,lastInteractAt:-1/0,dirty:!0}),_=(0,R.useRef)([]),v=(0,R.useRef)({content:`#e5e7eb`,tertiary:`#8792a0`}),[y,b]=(0,R.useState)(null),[x,S]=(0,R.useState)(null),C=(0,R.useCallback)(e=>{if(!e)return null;let t=u.nodes.find(t=>t.id===e);return t?t.summary?`${t.label} — ${t.summary}`:t.label:null},[u.nodes]),w=(0,R.useCallback)(()=>{let e=m.current;e.yaw=.5,e.pitch=.32,e.zoom=1,e.lastInteractAt=-1/0,e.dirty=!0,b(null)},[]),T=(0,R.useCallback)(e=>{let t=m.current;t.zoom=Math.max(ot,Math.min(st,t.zoom*e)),t.lastInteractAt=performance.now(),t.dirty=!0},[]);(0,R.useEffect)(()=>{if(!d)return;let e=s.current,t=a.current;if(!e||!t)return;let n=e.getContext(`2d`);if(!n)return;let r=u.nodes,i=u.edges,o=f,c=p,l=window.matchMedia(`(prefers-reduced-motion: reduce)`).matches;v.current=lt(t);let h=Math.min(window.devicePixelRatio||1,2),g=0,y=0,b=()=>{let n=t.getBoundingClientRect();g=n.width,y=n.height,h=Math.min(window.devicePixelRatio||1,2),e.width=Math.max(1,Math.round(g*h)),e.height=Math.max(1,Math.round(y*h)),e.style.width=`${g}px`,e.style.height=`${y}px`,v.current=lt(t),m.current.dirty=!0};b();let x=new ResizeObserver(b);x.observe(t);let S=0,C=0,w=e=>{let t=C?Math.min(.05,(e-C)/1e3):0;C=e;let a=m.current,s=v.current;if(!a.dragging&&e-a.lastInteractAt>tt&&!l&&(a.yaw+=et*t),l&&!a.dirty){S=requestAnimationFrame(w);return}a.dirty=!1;let u=Math.cos(a.yaw),d=Math.sin(a.yaw),f=Math.cos(a.pitch),p=Math.sin(a.pitch),b=it*c,x=Math.min(g,y)*.88/(2*c)*a.zoom,T=g/2,E=y/2;n.setTransform(h,0,0,h,0,0),n.clearRect(0,0,g,y);let D=a.hoveredId,O=D?o.get(D):void 0,k=e=>!D||e===D||(O?.has(e)??!1),A=Array(r.length);for(let e=0;e<r.length;e++){let t=r[e],n=t.x-Y.x,i=t.y-Y.y,a=t.z,o=n*u+a*d,s=-n*d+a*u,l=i*f-s*p,m=i*p+s*f,h=b/(b-m);A[e]={node:t,sx:T+o*x*h,sy:E+l*x*h,sr:Math.max(1.2,t.radius*x*h),depth:Math.max(0,Math.min(1,(m+c)/(2*c)))}}let j=A.map((e,t)=>t).sort((e,t)=>A[e].depth-A[t].depth),M=new Map;for(let e of A)M.set(e.node.id,e);n.lineCap=`round`;for(let e of i){let t=M.get(e.fromId),r=M.get(e.toId);if(!t||!r)continue;let i=e.kind===`learned`,a=D!=null&&(e.fromId===D||e.toId===D),o=(t.depth+r.depth)/2,c=(i?.34:.28)*(.4+.6*o);D!=null&&(c=a?.9:k(e.fromId)&&k(e.toId)?c:.05),n.globalAlpha=c,n.strokeStyle=i?Ze:s.tertiary,n.lineWidth=(a?2:1)*(.6+.6*o),n.setLineDash(i?[4,4]:[]),n.beginPath(),n.moveTo(t.sx,t.sy),n.lineTo(r.sx,r.sy),n.stroke()}n.setLineDash([]);for(let e of j){let t=A[e],r=t.node,i=Ye[r.kind],a=k(r.id),o=r.id===D,s=at+(1-at)*t.depth,c=a?s:s*.18,l=(o?16:r.degree>=ct?8:4)*t.depth;n.shadowColor=i,n.shadowBlur=a?l:0,n.globalAlpha=c*.55,n.fillStyle=i,n.beginPath(),n.arc(t.sx,t.sy,t.sr,0,Math.PI*2),n.fill(),n.shadowBlur=0,n.globalAlpha=c,n.lineWidth=o?2.5:1.4,n.strokeStyle=i,n.stroke()}n.shadowBlur=0,n.textAlign=`center`,n.textBaseline=`top`,n.font=`11px ui-sans-serif, system-ui, sans-serif`;for(let e of j){let t=A[e],r=t.node;if(!(D==null?r.degree>=ct&&t.depth>.55:k(r.id)))continue;n.globalAlpha=(r.id===D?1:.85)*(.4+.6*t.depth),n.fillStyle=s.content;let i=r.label.length>22?`${r.label.slice(0,21)}…`:r.label;n.fillText(i,t.sx,t.sy+t.sr+3)}n.globalAlpha=1,_.current=A.map(e=>({id:e.node.id,sx:e.sx,sy:e.sy,sr:e.sr,depth:e.depth})),S=requestAnimationFrame(w)};return S=requestAnimationFrame(w),()=>{cancelAnimationFrame(S),x.disconnect()}},[d,u,f,p]);let E=(0,R.useCallback)((e,t)=>{let n=null,r=-1;for(let i of _.current){let a=e-i.sx,o=t-i.sy;a*a+o*o<=(i.sr+5)*(i.sr+5)&&i.depth>r&&(n=i.id,r=i.depth)}return n},[]),D=e=>{let t=a.current.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}},O=(0,R.useCallback)(e=>{if(e.button!==0||e.target.closest(`[data-graph-control]`))return;let t=m.current;t.dragging=!0,t.moved=!1,t.lastX=e.clientX,t.lastY=e.clientY,t.lastInteractAt=performance.now(),e.currentTarget.setPointerCapture(e.pointerId)},[]),k=(0,R.useCallback)(e=>{let t=m.current;if(t.dragging){let n=e.clientX-t.lastX,r=e.clientY-t.lastY;(Math.abs(n)>2||Math.abs(r)>2)&&(t.moved=!0),t.yaw+=n*nt,t.pitch=Math.max(-rt,Math.min(rt,t.pitch+r*nt)),t.lastX=e.clientX,t.lastY=e.clientY,t.lastInteractAt=performance.now(),t.dirty=!0;return}let{x:n,y:r}=D(e),i=E(n,r);i!==t.hoveredId&&(t.hoveredId=i,t.dirty=!0,b(C(i)))},[E,C]),A=(0,R.useCallback)(e=>{let t=m.current;if(!t.dragging)return;t.dragging=!1,t.lastInteractAt=performance.now(),t.dirty=!0;let n=e.currentTarget;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),!t.moved){let{x:t,y:n}=D(e),r=E(t,n);if(r){let e=u.nodes.find(e=>e.id===r);e&&S({id:e.id,label:e.label,updatedAtMs:e.updatedAtMs})}else b(null)}},[E,u.nodes]),j=(0,R.useCallback)(()=>{let e=m.current;e.dragging||e.hoveredId==null||(e.hoveredId=null,e.dirty=!0,b(null))},[]);(0,R.useEffect)(()=>{let e=a.current;if(!e||!d)return;let t=e=>{if(e.target.closest?.(`[data-graph-panel]`))return;e.preventDefault();let t=m.current;t.zoom=Math.max(ot,Math.min(st,t.zoom*(1-e.deltaY/500))),t.lastInteractAt=performance.now(),t.dirty=!0};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[d]);let M=(0,R.useMemo)(()=>{let e=new Set(u.nodes.map(e=>e.kind));return $e.filter(t=>e.has(t))},[u.nodes]),N=(0,R.useMemo)(()=>u.edges.some(e=>e.kind===`learned`),[u.edges]),P=(0,R.useMemo)(()=>u.edges.some(e=>e.kind!==`learned`),[u.edges]),F;return F=c.isLoading?(0,z.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})}):c.isError?(0,z.jsx)(Z,{title:`Couldn't load the memory graph`,detail:`Something went wrong fetching your assistant's memory. Try again in a moment.`}):c.data?.kind===`unsupported`?(0,z.jsx)(Z,{title:`Memory graph isn't available`,detail:`The active memory backend doesn't expose a concept graph.`}):d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`canvas`,{ref:s,className:`absolute inset-0 h-full w-full`}),(0,z.jsx)(Qe,{nodeKinds:M.length>1?M:[],hasLinks:P,hasLearned:N}),y?(0,z.jsx)(`div`,{className:`pointer-events-none absolute left-1/2 top-4 max-w-[80%] -translate-x-1/2 truncate rounded-full px-3 py-1 text-[12px]`,style:{backgroundColor:`color-mix(in srgb, var(--surface-base) 82%, transparent)`,border:`1px solid var(--border-base)`,color:`var(--content-default)`},children:y}):null,(0,z.jsx)(`div`,{className:`pointer-events-none absolute bottom-4 right-4 text-[11px]`,style:{color:`var(--content-tertiary)`},children:`drag to rotate · scroll to zoom`}),(0,z.jsxs)(`div`,{"data-graph-control":!0,className:`absolute right-4 top-4 flex flex-col gap-1`,children:[(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(oe,{}),onClick:()=>T(1.25),"aria-label":`Zoom in`,tooltip:`Zoom in`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ue,{}),onClick:()=>T(.8),"aria-label":`Zoom out`,tooltip:`Zoom out`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(te,{}),onClick:w,"aria-label":`Reset view`,tooltip:`Reset view`})]})]}):(0,z.jsx)(Z,{title:`No concepts yet`,detail:`As your assistant learns and links ideas, they'll appear here as a living map of its memory.`}),(0,z.jsxs)(`div`,{ref:a,className:`relative select-none overflow-hidden rounded-xl ${t??``}`,style:{backgroundColor:`var(--surface-base)`,backgroundImage:`radial-gradient(circle at center, color-mix(in srgb, var(--content-tertiary) 8%, transparent), transparent 62%)`,touchAction:`none`,cursor:d?`grab`:`default`},onPointerDown:d?O:void 0,onPointerMove:d?k:void 0,onPointerUp:d?A:void 0,onPointerCancel:d?A:void 0,onPointerLeave:d?j:void 0,children:[r?(0,z.jsx)(`div`,{className:`absolute left-4 top-4 z-10`,"data-graph-control":!0,children:(0,z.jsx)(i,{variant:`ghost`,iconOnly:n?(0,z.jsx)(g,{}):(0,z.jsx)(h,{}),onClick:r,"aria-label":n?`Exit fullscreen`:`Enter fullscreen`,tooltip:n?`Exit fullscreen`:`Enter fullscreen`})}):null,F,d&&x?(0,z.jsx)(Je,{assistantId:e,node:x,onClose:()=>S(null)}):null]})}function dt({edges:e,nodeById:t,visible:n}){return(0,z.jsx)(`svg`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0 h-full w-full overflow-visible`,children:e.map(e=>{let r=t.get(e.fromId),i=t.get(e.toId);if(!r||!i)return null;let{x1:a,y1:o,x2:s,y2:c}=Ce(r,i);return(0,z.jsx)(`line`,{x1:a,y1:o,x2:s,y2:c,stroke:e.color,strokeWidth:1.5,opacity:n?.45:0,style:{transition:`opacity 0.4s ease`}},e.id)})})}function Q({shape:e,label:t}){return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`flex h-4 w-4 items-center justify-center`,children:(0,z.jsx)(`span`,{className:N(`inline-block h-3 w-3 border-[1.5px] border-[var(--content-tertiary)]`,Ne[e])})}),(0,z.jsx)(`span`,{children:t})]})}function ft({visible:e}){return(0,z.jsx)(`div`,{"data-constellation-control":!0,className:`pointer-events-none absolute bottom-4 left-4 rounded-md px-3 py-2 text-body-small-default`,style:{backgroundColor:`color-mix(in srgb, var(--surface-overlay) 80%, transparent)`,border:`1px solid color-mix(in srgb, var(--content-tertiary) 20%, transparent)`,color:`var(--content-secondary)`,opacity:+!!e,transition:`opacity 0.35s ease`},children:(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsx)(Q,{shape:`category`,label:`Category`}),(0,z.jsx)(Q,{shape:`subcategory`,label:`Subcategory`}),(0,z.jsx)(Q,{shape:`skill`,label:`Skill`}),(0,z.jsx)(Q,{shape:`workspace`,label:`Workspace`})]})})}function pt({item:e,color:t,onViewDetails:n}){let r=e.kind===`skill`?`Skill`:`Workspace`,a=e.kind===`skill`?ne:m;return(0,z.jsxs)(l,{padding:`sm`,elevated:!0,className:`w-[260px] shadow-[var(--shadow-popover)]`,role:`dialog`,"aria-label":`${e.label} details`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md px-2 py-1 text-body-small-emphasised text-[var(--content-default)]`,style:{backgroundColor:`${t}33`},children:[(0,z.jsx)(a,{className:`h-3 w-3`,style:{color:t}}),r]}),n?(0,z.jsx)(i,{type:`button`,variant:`ghost`,size:`compact`,onClick:n,children:`View Details`}):null]}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-start gap-2`,children:[e.icon||e.emoji?(0,z.jsx)(L,{skill:e,className:`h-5 w-5 shrink-0 text-[20px] leading-none`}):null,(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`div`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:e.label}),e.description?(0,z.jsx)(`div`,{className:`mt-1 line-clamp-3 text-body-small-default text-[var(--content-secondary)]`,children:e.description}):null]})]})]})}function mt({onSingleClick:e,onDoubleClick:t,latency:n=200}){let r=(0,R.useRef)(null);return(0,R.useEffect)(()=>()=>{r.current&&clearTimeout(r.current)},[]),(0,R.useCallback)(i=>{r.current&&=(clearTimeout(r.current),null),e&&i.detail===1&&(r.current=setTimeout(()=>{r.current=null,e()},n)),t&&i.detail>=2&&i.detail%2==0&&t()},[e,t,n])}function ht(e,t,n){let[r,i]=(0,R.useState)(!1),a=r||n===!0,o=mt({onSingleClick:e,onDoubleClick:t});return{active:a,onClick:(0,R.useCallback)(n=>{!e&&!t||(n.stopPropagation(),o(n))},[e,t,o]),onPointerDown:(0,R.useCallback)(n=>{!e&&!t||n.stopPropagation()},[e,t]),onMouseEnter:(0,R.useCallback)(()=>i(!0),[]),onMouseLeave:(0,R.useCallback)(()=>i(!1),[])}}function $(e,t){return`color-mix(in oklab, ${e} ${Math.max(0,Math.min(100,t))}%, var(--surface-base))`}function gt(e,t){switch(e.kind.type){case`center`:return{visible:t>=1};case`category`:return{visible:t>=2};case`subCategory`:return{visible:t>=3};case`skill`:return{visible:t>=4}}}function _t(e,t){switch(e.kind.type){case`center`:return .05;case`category`:return t*.04;case`subCategory`:return t*.03;case`skill`:return .08+t*.02}}function vt(e){switch(e.kind.type){case`skill`:return e.kind.item;case`category`:{let t=H(e.kind.category);return{id:e.id,label:t.displayName,emoji:t.emoji,category:e.kind.category,kind:`workspaceFile`}}case`subCategory`:return{id:e.id,label:e.kind.label,emoji:e.kind.emoji,category:e.kind.category,kind:`workspaceFile`};default:return}}function yt({variant:e,x:t,y:n,color:r,tooltip:i,visibility:a,delay:o,children:s,isSelected:c,onSingleClick:l,onDoubleClick:u}){let d=Me[e],{active:f,...p}=ht(l,u,c),m={left:t-d.size/2,top:n-d.size/2,width:d.size,height:d.size,borderRadius:d.cornerRadius,backgroundColor:$(r,f?d.fillHoverPct:d.fillPct),borderStyle:d.dashed?`dashed`:`solid`,borderColor:$(r,f?d.strokeHoverPct:d.strokePct),borderWidth:f?d.strokeHoverWidth:d.strokeWidth,transition:`background-color 0.15s ease, border-color 0.15s ease, border-width 0.15s ease`,cursor:l||u?`pointer`:`default`};return(0,z.jsx)(P.div,{className:`pointer-events-auto absolute flex flex-col items-center justify-center`,"data-constellation-node":!0,style:m,initial:{opacity:0,scale:.3},animate:{opacity:+!!a.visible,scale:a.visible?1:.3},transition:{...X,delay:o},onMouseEnter:p.onMouseEnter,onMouseLeave:p.onMouseLeave,onPointerDown:p.onPointerDown,onClick:p.onClick,title:i,children:s})}function bt({x:e,y:t,item:n,color:r,fallbackEmoji:i,visibility:a,delay:o,isSelected:s,onSingleClick:c,onDoubleClick:l}){let{active:u,...d}=ht(c,l,s);return(0,z.jsxs)(P.div,{className:`pointer-events-auto absolute`,"data-constellation-node":!0,style:{left:e-64/2,top:t-64/2,width:64,height:64,cursor:c||l?`pointer`:`default`},initial:{opacity:0,scale:.4},animate:{opacity:+!!a.visible,scale:a.visible?1:.4},transition:{...X,delay:o},onMouseEnter:d.onMouseEnter,onMouseLeave:d.onMouseLeave,onPointerDown:d.onPointerDown,onClick:d.onClick,title:n.label,children:[(0,z.jsx)(`div`,{"aria-hidden":!0,className:`absolute inset-0 rounded-md`,style:{transform:`rotate(45deg)`,backgroundColor:$(r,u?20:10),border:`${u?2:1.5}px solid ${$(r,u?70:40)}`,transition:`background-color 0.15s ease, border-color 0.15s ease, border-width 0.15s ease`}}),(0,z.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center`,children:[(0,z.jsx)(L,{skill:n,className:`h-4 w-4 text-[16px] leading-none`,fallback:i}),(0,z.jsx)(`span`,{className:`mt-0.5 max-w-[42px] truncate text-[9px] font-medium leading-tight text-[var(--content-default)]`,title:n.label,children:n.label})]})]})}function xt({node:e,index:t,phase:n,components:r,traits:i,customImageUrl:a,isSelected:o,onSingleClick:s,onDoubleClick:c}){let l=gt(e,n),u=_t(e,t);if(e.kind.type===`center`)return(0,z.jsx)(P.div,{className:`pointer-events-none absolute`,style:{left:e.x-90/2,top:e.y-90/2,width:90,height:90},initial:{opacity:0,scale:.6},animate:{opacity:+!!l.visible,scale:l.visible?1:.6},transition:{...X,delay:u},children:(0,z.jsx)(I,{components:r,traits:i,customImageUrl:a,size:90})});if(e.kind.type===`category`||e.kind.type===`subCategory`){let t=H(e.kind.category),n=e.kind.type===`category`?`category`:`subcategory`,r=e.kind.type===`category`?t.emoji:e.kind.emoji,i=e.kind.type===`category`?t.displayName:e.kind.label,a=n===`category`?`text-[20px]`:`text-[14px]`,d=n===`category`?`mt-1 max-w-[85%] truncate text-label-medium-default leading-tight text-[var(--content-default)]`:`mt-0.5 max-w-[85%] truncate text-[9.5px] font-medium leading-tight text-[var(--content-default)]`;return(0,z.jsxs)(yt,{variant:n,x:e.x,y:e.y,color:t.color,tooltip:i,visibility:l,delay:u,isSelected:o,onSingleClick:s,onDoubleClick:c,children:[(0,z.jsx)(`span`,{className:`${a} leading-none`,"aria-hidden":!0,children:r}),(0,z.jsx)(`span`,{className:d,title:i,children:i})]})}if(e.kind.type===`skill`){let t=e.kind.item,n=H(t.category);return(0,z.jsx)(bt,{x:e.x,y:e.y,item:t,color:n.color,fallbackEmoji:n.emoji,visibility:l,delay:u,isSelected:o,onSingleClick:s,onDoubleClick:c})}return null}function St(e,t,n,r){let[i,a]=(0,R.useState)({width:0,height:0}),[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(!1),g=(0,R.useRef)(null),_=(0,R.useRef)(null);(0,R.useLayoutEffect)(()=>{let t=e.current;if(!t)return;let n=new ResizeObserver(e=>{for(let t of e){let{width:e,height:n}=t.contentRect;a({width:e,height:n})}});n.observe(t);let r=t.getBoundingClientRect();return a({width:r.width,height:r.height}),()=>n.disconnect()},[e]);let v=(0,R.useMemo)(()=>ke(t,Y,i.width,i.height),[t,i.width,i.height]),y=o??v.zoom,b=c??{x:v.panX,y:v.panY},x=(0,R.useCallback)(()=>{h(!0),g.current!=null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{h(!1),g.current=null},500)},[]);(0,R.useEffect)(()=>()=>{g.current!=null&&window.clearTimeout(g.current)},[]);let S=(0,R.useCallback)(()=>{s(null),l(null),p(null),x()},[x]),C=(0,R.useCallback)((e,t)=>{let n=Math.max(Ae,Math.min(3,e));if(n===y)return;let r=n/y;l({x:b.x*r,y:b.y*r}),s(n),p(null),t?.animate&&x()},[b.x,b.y,x,y]),w=(0,R.useCallback)(()=>{C(y+je,{animate:!0})},[C,y]),T=(0,R.useCallback)(()=>{C(y-je,{animate:!0})},[C,y]),E=(0,R.useCallback)(e=>{if(f===e){S();return}let t=n.get(e);if(!t)return;let r=1.8;s(r),l({x:(Y.x-t.x)*r,y:(Y.y-t.y)*r}),p(e),x()},[S,n,x,f]);return(0,R.useEffect)(()=>{let t=e.current;if(!t)return;let n=e=>{e.preventDefault();let t=e.ctrlKey||e.metaKey?150:400;C(y*(1+-e.deltaY/t))};return t.addEventListener(`wheel`,n,{passive:!1}),()=>t.removeEventListener(`wheel`,n)},[C,e,y]),{zoom:y,pan:b,isDragging:u,isAnimating:m,viewSize:i,zoomedNodeId:f,zoomIn:w,zoomOut:T,fitAll:S,zoomToNode:E,handlePointerDown:(0,R.useCallback)(e=>{if(e.button!==0)return;let t=e.target;t.closest(`[data-constellation-control]`)||(t.closest(`[data-constellation-node]`)||r?.(),_.current={startX:e.clientX,startY:e.clientY,panStartX:b.x,panStartY:b.y,pointerId:e.pointerId,moved:!1},d(!0),g.current!=null&&(window.clearTimeout(g.current),g.current=null),h(!1),e.currentTarget.setPointerCapture(e.pointerId))},[r,b.x,b.y]),handlePointerMove:(0,R.useCallback)(e=>{let t=_.current;if(!t||t.pointerId!==e.pointerId)return;let n=e.clientX-t.startX,r=e.clientY-t.startY;!t.moved&&(Math.abs(n)>3||Math.abs(r)>3)&&(t.moved=!0,p(null)),l({x:t.panStartX+n,y:t.panStartY+r})},[]),handlePointerUp:(0,R.useCallback)(e=>{let t=_.current;if(!(!t||t.pointerId!==e.pointerId)){_.current=null,d(!1);try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}}},[])}}function Ct({skills:e,components:t,traits:n,customImageUrl:r,className:a,isFullscreen:o,onToggleFullscreen:s,onSelectSkill:c}){let l=(0,R.useRef)(null),u=(0,R.useRef)(null),[d,f]=(0,R.useState)(0),[p,m]=(0,R.useState)(null),[_,v]=(0,R.useState)({width:240,height:120}),{nodes:y,edges:b}=(0,R.useMemo)(()=>De(Y,Oe(e.map(e=>({id:e.id,label:e.name,icon:e.icon,emoji:e.emoji,category:e.category??`system`,description:e.description,kind:`skill`}))),90),[e]),x=(0,R.useMemo)(()=>{let e=new Map;for(let t of y)e.set(t.id,t);return e},[y]),S=(0,R.useMemo)(()=>{if(p==null)return null;let e=x.get(p);return e?vt(e)??null:null},[p,x]),C=(0,R.useCallback)(()=>{m(null)},[]),w=St(l,y,x,C),T=e.length;(0,R.useEffect)(()=>{let e=!1,t=t=>{e||f(t)};t(0);let n=[setTimeout(()=>t(1),100),setTimeout(()=>t(2),300),setTimeout(()=>t(3),500),setTimeout(()=>t(4),700)];return()=>{e=!0,n.forEach(clearTimeout)}},[T]);let E=(0,R.useCallback)(e=>{m(t=>t===e?null:e)},[]),D=(0,R.useCallback)(()=>{!S||S.kind!==`skill`||(C(),c?.(S.id))},[C,c,S]);(0,R.useEffect)(()=>{if(p==null)return;let e=e=>{e.key===`Escape`&&C()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[C,p]),(0,R.useLayoutEffect)(()=>{if(S==null)return;let e=u.current;if(!e)return;let t=e.getBoundingClientRect();v({width:t.width,height:t.height})},[S]);let O={x:w.viewSize.width/2,y:w.viewSize.height/2},k=O.x-Y.x*w.zoom+w.pan.x,A=O.y-Y.y*w.zoom+w.pan.y,j=p==null?void 0:x.get(p),M=0,N=0;if(S!=null&&j){let e=k+j.x*w.zoom,t=A+j.y*w.zoom,n=e,r=t-60,i=_.width/2,a=_.height/2,o=i+8,s=Math.max(o,w.viewSize.width-i-8),c=a+8,l=Math.max(c,w.viewSize.height-a-8);M=Math.min(Math.max(n,o),s),N=Math.min(Math.max(r,c),l)}let I=(0,R.useCallback)(e=>{C(),w.zoomToNode(e)},[C,w]);return(0,z.jsxs)(`div`,{ref:l,className:`relative select-none overflow-hidden rounded-xl ${a??``}`,style:{backgroundColor:`var(--surface-base)`,backgroundImage:`radial-gradient(circle, color-mix(in srgb, var(--content-tertiary) 20%, transparent) 1px, transparent 1px)`,backgroundSize:`24px 24px`,backgroundPosition:`12px 12px`,touchAction:`none`,cursor:w.isDragging?`grabbing`:`grab`,userSelect:`none`,WebkitUserSelect:`none`},onPointerDown:w.handlePointerDown,onPointerMove:w.handlePointerMove,onPointerUp:w.handlePointerUp,onPointerCancel:w.handlePointerUp,children:[(0,z.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute inset-0`,style:{background:`radial-gradient(circle at center, color-mix(in srgb, var(--content-tertiary) 6%, transparent), transparent 60%)`}}),(0,z.jsxs)(`div`,{className:`absolute inset-0`,style:{transform:`translate(${k}px, ${A}px) scale(${w.zoom})`,transformOrigin:`0 0`,transition:w.isAnimating?`transform 0.4s cubic-bezier(0.22, 1, 0.36, 1)`:`none`},children:[(0,z.jsx)(dt,{edges:b,nodeById:x,visible:d>=2}),y.map((e,i)=>(0,z.jsx)(xt,{node:e,index:i,phase:d,components:t,traits:n,customImageUrl:r,isSelected:p===e.id||w.zoomedNodeId===e.id,onSingleClick:()=>E(e.id),onDoubleClick:()=>I(e.id)},e.id))]}),s&&(0,z.jsx)(`div`,{className:`absolute left-4 top-4`,"data-constellation-control":!0,children:(0,z.jsx)(i,{variant:`ghost`,iconOnly:o?(0,z.jsx)(g,{}):(0,z.jsx)(h,{}),onClick:s,"aria-label":o?`Exit fullscreen`:`Enter fullscreen`,tooltip:o?`Exit fullscreen`:`Enter fullscreen`})}),(0,z.jsx)(ft,{visible:d>=4}),(0,z.jsx)(F,{children:S==null?null:(0,z.jsx)(P.div,{ref:u,className:`pointer-events-auto absolute z-20`,"data-constellation-popover":!0,style:{left:M,top:N,transform:`translate(-50%, -50%)`},initial:{opacity:0,scale:.9},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.9},transition:{duration:.15,ease:`easeOut`},onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:(0,z.jsx)(pt,{item:S,color:H(S.category).color,onViewDetails:c&&S.kind===`skill`?D:void 0})},`constellation-popover`)}),(0,z.jsxs)(`div`,{"data-constellation-control":!0,className:`absolute bottom-4 right-4 flex items-center gap-1`,children:[(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(oe,{}),onClick:w.zoomIn,"aria-label":`Zoom in`,tooltip:`Zoom in`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ue,{}),onClick:w.zoomOut,"aria-label":`Zoom out`,tooltip:`Zoom out`}),(0,z.jsx)(i,{variant:`ghost`,iconOnly:(0,z.jsx)(ee,{}),onClick:w.fitAll,"aria-label":`Fit all`,tooltip:`Fit all`})]})]})}function wt({assistantName:e,assistantPersonality:t,assistantRole:n,hatchedDate:r,components:a,traits:o,customImageUrl:s,onOpenThread:c,onOpenModal:l}){return(0,z.jsxs)(`div`,{className:`w-full overflow-hidden rounded-xl`,style:{backgroundColor:`var(--surface-lift)`},children:[(0,z.jsxs)(`div`,{className:`relative p-6 pb-0`,children:[(0,z.jsx)(`div`,{className:`pr-8 text-center`,children:(0,z.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:e})}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your name`),disabled:!c,"aria-label":`Edit identity`,title:`Edit Name`,className:`absolute right-6 top-6`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsx)(`div`,{className:`flex justify-center py-6`,children:(0,z.jsx)(I,{components:a,traits:o,customImageUrl:s,size:200,interactive:!0})}),(0,z.jsx)(`div`,{className:`flex justify-center pb-6`,children:(0,z.jsx)(i,{type:`button`,variant:`outlined`,size:`regular`,onClick:l,className:`!rounded-full`,children:`Update Avatar`})}),(0,z.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Role`}),(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:n})]}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your role description`),disabled:!c,"aria-label":`Edit role`,title:`Edit Role`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Personality`}),(0,z.jsx)(`p`,{className:`truncate text-body-medium-default`,style:{color:`var(--content-default)`},title:t||`Not set`,children:t||`Not set`})]}),(0,z.jsx)(i,{type:`button`,variant:`ghost`,iconOnly:(0,z.jsx)(_,{"aria-hidden":!0}),onClick:()=>c?.(`I would like to change your personality`),disabled:!c,"aria-label":`Edit personality`,title:`Edit Personality`,tintColor:`var(--content-tertiary)`})]}),(0,z.jsxs)(`div`,{className:`px-4 py-3`,children:[(0,z.jsx)(`p`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`Hatched`}),(0,z.jsx)(`p`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:r})]})]})}function Tt({assistantId:e,onOpenThread:n}){let{components:r,traits:i,customImageUrl:a,isLoading:s,invalidate:c}=se(e),[l,u]=(0,R.useState)(null),[d,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(null),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(!1),b=o(Fe(e)),x=b.data?.kind===`unsupported`||b.isError,S=o({...w({path:{assistant_id:e},query:{kind:`installed`}}),select:e=>e.skills,enabled:!!e});(0,R.useEffect)(()=>{let n=!1;return Promise.all([f(e),O(e).catch(()=>({ok:!1,status:0,error:{}}))]).then(([t,r])=>{n||(u(t),r.ok?p(r.data.created):p(null),h(e))}).catch(e=>{n||t(e,{context:`identity_tab_load`})}),()=>{n=!0}},[e]);let C=m!==e||s,T=(0,R.useCallback)(()=>{c()},[c]),E=(0,R.useCallback)(()=>{_(!0)},[]),D=(0,R.useCallback)(()=>{_(!1)},[]),k=(0,R.useCallback)(()=>{n?.(`I'd like to create a custom AI-generated avatar.`)},[n]);if(C)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,z.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2`,style:{borderColor:`var(--border-base)`,borderTopColor:`var(--content-tertiary)`}})});let A=l?.name||`Assistant`,j=l?.personality||``,M=l?.role||`Not set`,N=d?new Date(d).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`Unknown`;return(0,z.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-6 lg:flex-row lg:items-stretch`,children:[(0,z.jsx)(`div`,{className:`mx-auto w-full max-w-md lg:mx-0 lg:h-full lg:shrink-0 lg:overflow-y-auto ${v?`hidden`:`flex`}`,children:(0,z.jsx)(wt,{assistantName:A,assistantPersonality:j,assistantRole:M,hatchedDate:N,components:r,traits:i,customImageUrl:a,onOpenThread:n,onOpenModal:E})}),(0,z.jsx)(`div`,{className:`min-h-[480px] min-w-0 flex-1 lg:min-h-0`,children:x?(0,z.jsx)(Ct,{skills:S.data??[],components:r,traits:i,customImageUrl:a,className:`h-full w-full`,isFullscreen:v,onToggleFullscreen:()=>y(e=>!e)}):(0,z.jsx)(ut,{assistantId:e,className:`h-full w-full`,isFullscreen:v,onToggleFullscreen:()=>y(e=>!e)})}),(0,z.jsx)(he,{open:g,onClose:D,assistantId:e,components:r,traits:i,customImageUrl:a,onSaveCharacter:T,onUploadImage:T,onGenerateWithAI:n?k:void 0})]})}function Et({onOpenThread:e}){return(0,z.jsx)(Tt,{assistantId:fe(),onOpenThread:e})}function Dt(){let e=a();return(0,z.jsx)(Et,{onOpenThread:t=>{j.getState().setMainView(`chat`);let n=M();A.getState().setActiveConversationId(n),e(`${k.conversation(n)}?prompt=${encodeURIComponent(t)}`)}},fe())}export{Dt as IdentityPageRoute};
|