@vellumai/web 0.11.2-staging.1 → 0.11.2-staging.2
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/{access-DRXEXX07.js → access-CVnesk0m.js} +1 -1
- package/dist/assets/{account-page-CX6hJQwg.js → account-page-mMG1nL1O.js} +1 -1
- package/dist/assets/{acp-run-detail-panel-CiQqwf32.js → acp-run-detail-panel-SN6NIuW5.js} +1 -1
- package/dist/assets/activity-steps-panel-bduSS8_d.js +1 -0
- package/dist/assets/{ai-page-DMad1ZuI.js → ai-page-BMqECtJX.js} +1 -1
- package/dist/assets/{app-card-CiARsZNb.js → app-card-BJigGog3.js} +1 -1
- package/dist/assets/{assistant-status-panel-BcO4L1Ot.js → assistant-status-panel-DyjhJvK6.js} +1 -1
- package/dist/assets/auth-store-C9aYqB9U.js +2 -0
- package/dist/assets/background-task-actions-DmocXKSr.js +1 -0
- package/dist/assets/{background-task-detail-panel-Cwy0aX1X.js → background-task-detail-panel-DCtBOnvF.js} +1 -1
- package/dist/assets/{billing-page-DtY1C_1i.js → billing-page-TF_LgX6K.js} +1 -1
- package/dist/assets/{bookmarks-page-CR6qlXH4.js → bookmarks-page-Brvj5Jf6.js} +1 -1
- package/dist/assets/{build-state-dDRg651i.js → build-state-9uUe0jN5.js} +1 -1
- package/dist/assets/{channels-page-route-BkAp7hp5.js → channels-page-route-8vJJE2LN.js} +1 -1
- package/dist/assets/{chat-markdown-message-Da34digC.js → chat-markdown-message-B7qvlO44.js} +1 -1
- package/dist/assets/{checkout-page-ChHhRSW7.js → checkout-page-MpIPAAgf.js} +1 -1
- package/dist/assets/{command-palette-window-page-BYRKvEj-.js → command-palette-window-page-CoweYsZl.js} +1 -1
- package/dist/assets/{contacts-page-route-6Pnu98io.js → contacts-page-route-BOpVOsYK.js} +1 -1
- package/dist/assets/{conversation-navigation-BqoIExAQ.js → conversation-navigation-Bf3cDRKh.js} +1 -1
- package/dist/assets/{conversation-queries-Dcm9S7mz.js → conversation-queries-BBj4FfQn.js} +1 -1
- package/dist/assets/{credentials-page-BnxIymyf.js → credentials-page-DBLT8nUI.js} +1 -1
- package/dist/assets/{debug-page-Bjdmoc6_.js → debug-page-DfPZPo6D.js} +1 -1
- package/dist/assets/{developer-page-CiJvs_Lu.js → developer-page-DwBmhm09.js} +1 -1
- package/dist/assets/{document-viewer-page-CsLTrhRq.js → document-viewer-page-CA1ParJ6.js} +1 -1
- package/dist/assets/{emails-page-DPdeEAZJ.js → emails-page-Bo0Bwem2.js} +1 -1
- package/dist/assets/{first-run-scope-CXWfJKeP.js → first-run-scope-CPJpXaWU.js} +1 -1
- package/dist/assets/{general-page-DYnUkwRE.js → general-page-BXeIQDGi.js} +1 -1
- package/dist/assets/{hatching-screen-CxSp0qa2.js → hatching-screen-BUpSlvBy.js} +1 -1
- package/dist/assets/{home-page-route-dqvJQwjW.js → home-page-route-BPht0PNp.js} +1 -1
- package/dist/assets/{hosting-screen-kj-kAK7Q.js → hosting-screen-DxtyBx0I.js} +1 -1
- package/dist/assets/index-C7_04HXM.css +2 -0
- package/dist/assets/index-CPeIfypI.js +11 -0
- package/dist/assets/{inspect-page-BlY6O00x.js → inspect-page-C8aLJOd6.js} +1 -1
- package/dist/assets/{integrations-page-49zuLodO.js → integrations-page-Bp2Q81Qt.js} +1 -1
- package/dist/assets/{library-detail-page-fsYlOanf.js → library-detail-page-gC4yIWnV.js} +1 -1
- package/dist/assets/{library-page-CjJhvK-9.js → library-page-B10gnbXU.js} +1 -1
- package/dist/assets/{local-runtime-upgrade-BvHY1msh.js → local-runtime-upgrade-CnY-6TiF.js} +1 -1
- package/dist/assets/{login-flow-DmQTk-x9.js → login-flow-CQhvCbQQ.js} +1 -1
- package/dist/assets/{login-page-BvisuxEP.js → login-page-CbWRbJDE.js} +1 -1
- package/dist/assets/{logout-page-BMKKBE_F.js → logout-page-DCyzi0V6.js} +1 -1
- package/dist/assets/{logs-layout-BJe9y8po.js → logs-layout-CYkqau4S.js} +1 -1
- package/dist/assets/{memory-page-route-BcZNNNO7.js → memory-page-route-j_3602nh.js} +1 -1
- package/dist/assets/{memory-router-playground-page-DTR4Mrw4.js → memory-router-playground-page-x5X662qi.js} +1 -1
- package/dist/assets/message-content-B6_GZQl9.js +1 -0
- package/dist/assets/{message-files-panel-CKeLnC4N.js → message-files-panel-C8JokH6e.js} +1 -1
- package/dist/assets/{messages-QgGSiklY.js → messages-Dyp1xUqz.js} +1 -1
- package/dist/assets/{notifications-rSx7pNPi.js → notifications-BTG4cTbF.js} +1 -1
- package/dist/assets/{notifications-page-Cu8hoFGy.js → notifications-page-BA2BW5y6.js} +1 -1
- package/dist/assets/{open-workspace-file-B_Rft7dd.js → open-workspace-file-CivxJWcw.js} +2 -2
- package/dist/assets/{plans-page-BDMR-ZtU.js → plans-page-BfyCgy38.js} +1 -1
- package/dist/assets/{platform-login-notice-q7ZuGeuo.js → platform-login-notice-DFmjUE9q.js} +1 -1
- package/dist/assets/{platform-loopback-page-e9XVrvYR.js → platform-loopback-page-BGF_H8f_.js} +1 -1
- package/dist/assets/{privacy-page-BZSbEQ1K.js → privacy-page-BhEGh78C.js} +1 -1
- package/dist/assets/{privacy-screen-BnQiOWl7.js → privacy-screen-CWVCI_KU.js} +1 -1
- package/dist/assets/{provider-callback-page-z2Cgryjl.js → provider-callback-page-DP5cKqPE.js} +1 -1
- package/dist/assets/{provider-signup-page-B-Li8WKA.js → provider-signup-page-BjiiJWS_.js} +1 -1
- package/dist/assets/{research-onboarding-route-C7jtWVgW.js → research-onboarding-route-DZF-B2Rk.js} +1 -1
- package/dist/assets/{retire-confirm-dialog-CgvcI85l.js → retire-confirm-dialog-8xlq4bkx.js} +1 -1
- package/dist/assets/{review-terms-screen-Bwu6-idm.js → review-terms-screen-C5BAI3Rx.js} +1 -1
- package/dist/assets/routes-uGHUgv4F.js +23 -0
- package/dist/assets/{runtime-upgrade-banner-BhPmj3_g.js → runtime-upgrade-banner-DjFuJawk.js} +1 -1
- package/dist/assets/{schedules-page-CT6myKlW.js → schedules-page-3ZE1nR6I.js} +1 -1
- package/dist/assets/{select-assistant-screen-DbeX0PLD.js → select-assistant-screen-D4WHHv61.js} +1 -1
- package/dist/assets/{settings-layout-ChyYdGV8.js → settings-layout-BmOglXDq.js} +1 -1
- package/dist/assets/{settings-navigation-DNl4C8Cc.js → settings-navigation-CyH-twYD.js} +1 -1
- package/dist/assets/{share-feedback-modal-7O61hwO1.js → share-feedback-modal-Rwuho_1S.js} +1 -1
- package/dist/assets/{sidebar-tree-CsfghEZ-.js → sidebar-tree-Dxx5qLMQ.js} +1 -1
- package/dist/assets/{signup-page-DDuZGMBS.js → signup-page-BAEo45pt.js} +1 -1
- package/dist/assets/site-favicon-CDH0mg6Q.js +1 -0
- package/dist/assets/{skill-detail-page-u1LBXWn1.js → skill-detail-page-DswXTTyb.js} +1 -1
- package/dist/assets/{subagent-detail-panel-8-Z5ZMUL.js → subagent-detail-panel-CidisBCf.js} +1 -1
- package/dist/assets/{system-events-page-DLvxCVqo.js → system-events-page-BrvTNeiN.js} +1 -1
- package/dist/assets/{tool-detail-panel-BmohMKch.js → tool-detail-panel-B2CIRZkB.js} +2 -2
- package/dist/assets/transcript-message-body-shared-BfKwS5qD.js +1 -0
- package/dist/assets/{upgrade-cancel-page-DcWOus4Y.js → upgrade-cancel-page-DjeqfvTa.js} +1 -1
- package/dist/assets/{upgrade-success-page-BSzX2vWY.js → upgrade-success-page-B4TCn340.js} +1 -1
- package/dist/assets/{use-checkout-dismiss-refresh-BcEeQKyP.js → use-checkout-dismiss-refresh-CV_H4uEB.js} +1 -1
- package/dist/assets/{use-command-palette-sections-DvMBAWZC.js → use-command-palette-sections-BshFMe0w.js} +1 -1
- package/dist/assets/{use-edit-app-DOmv9zsZ.js → use-edit-app-Bd1eXXFq.js} +1 -1
- package/dist/assets/{use-is-org-ready-Df3qfx4p.js → use-is-org-ready-3vHDbj4G.js} +1 -1
- package/dist/assets/{use-onboarding-login-V-vR-6Zd.js → use-onboarding-login-CiQyxJLM.js} +1 -1
- package/dist/assets/{use-platform-assistant-id-y2pWr9on.js → use-platform-assistant-id-DgrNmSy2.js} +1 -1
- package/dist/assets/{use-platform-gate-B_3hHMqw.js → use-platform-gate-C5bNA5Pn.js} +1 -1
- package/dist/assets/{use-return-to-short-circuit-DzCxe5P0.js → use-return-to-short-circuit-g88hMnN8.js} +1 -1
- package/dist/assets/{use-sticky-profiles-DamFnjb1.js → use-sticky-profiles-D5TVHOgw.js} +1 -1
- package/dist/assets/use-subagent-card-data-bjGydvhR.js +1 -0
- package/dist/assets/{use-transcript-message-by-id-BxaY6TIY.js → use-transcript-message-by-id-BgyP3Ki5.js} +1 -1
- package/dist/assets/{use-transcript-messages-CgESPWZ3.js → use-transcript-messages-C2uwkjKL.js} +1 -1
- package/dist/assets/{viewer-store-Cp5tMX-G.js → viewer-store-DbIS4l8d.js} +1 -1
- package/dist/assets/{voice-list-yvKUrPIf.js → voice-list-D26Lzbpv.js} +1 -1
- package/dist/assets/{voice-page-C8EoRpvD.js → voice-page-CQ2Vp8p4.js} +1 -1
- package/dist/assets/{welcome-screen-DzQAH74J.js → welcome-screen-CdsjDVfi.js} +1 -1
- package/dist/index.html +34 -34
- package/package.json +1 -1
- package/dist/assets/activity-steps-panel-Ds6C3Jf0.js +0 -1
- package/dist/assets/auth-store-CWJoXmMk.js +0 -2
- package/dist/assets/background-task-actions-762wxVkT.js +0 -1
- package/dist/assets/index-DQqBZlYO.js +0 -11
- package/dist/assets/index-OYTmjL3q.css +0 -2
- package/dist/assets/risk-Bnj8QXuk.js +0 -1
- package/dist/assets/routes-SchRo2Ae.js +0 -23
- package/dist/assets/site-favicon-FokoB0J2.js +0 -1
- package/dist/assets/transcript-message-body-shared-DkwwIkg0.js +0 -1
- package/dist/assets/use-subagent-card-data-B31LofB3.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,t as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./cn-CJf7MmLX.js";import{t as d}from"./typography-DEI9Ra9z.js";import{t as f}from"./card-DRIctGVs.js";import{_ as p,c as m,f as h,g,l as _,o as v,u as y,x as b}from"./use-save-twilio-credentials-yqA7lnzq.js";import{t as x}from"./chevron-down-BNidRDh1.js";import{t as S}from"./circle-check-big-DtV6IJuh.js";import{I as C,L as w,a as T,o as E,r as D}from"./src-Da9g8qsW.js";import{o as O,r as k,t as A,u as j}from"./threshold-presets-B-RqvhUM.js";import{t as M}from"./message-square-CHUvAEY9.js";import{t as N}from"./search-DL-2uX3K.js";import{t as P}from"./notice-Dslxs3H6.js";import{t as F}from"./tag-gOOX7fbA.js";import{t as I}from"./input-tXUFa7Eo.js";import{t as ee}from"./panel-item-CJh95P_q.js";import{t as L}from"./confirm-dialog-j9o2h3xs.js";import{t as te}from"./dropdown-B3FHWc_n.js";import{n as ne,t as re}from"./create-selectors-BfxF8Sx_.js";import{t as ie}from"./assistant-identity-store-B51BX78j.js";import{i as ae}from"./utils-DtVy-_pB.js";import{d as oe}from"./routes-DrfnNoYS.js";import{n as se}from"./conversation-navigation-BqoIExAQ.js";import{i as R,o as ce,r as z}from"./sdk.gen-BpJ1vF7l.js";import{t as le}from"./assistant-feature-flag-store-BvLDPeej.js";import{t as B}from"./public-asset-OTnPMErp.js";import{t as ue}from"./use-active-assistant-id-JLsAfn3e.js";import{t as de}from"./slack-setup-wizard-DPzdheN0.js";import{t as fe}from"./index-DQqBZlYO.js";import{t as pe}from"./detail-card-BElAV1cp.js";import{n as me,t as he}from"./mobile-sidebar-drawer-BwCIAm23.js";import{c as ge,i as _e,n as ve,o as ye,r as be,s as xe,t as Se}from"./use-invite-link-dialog-TNGI1l4g.js";import{t as V}from"./mutation-error-YLfUU5XL.js";var H=e(t(),1),U=re(ne()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})}))),W={slack:{label:`Slack`,disconnectMessage:`This clears the stored Slack bot and app tokens for this assistant. You can reconnect later.`,hasTrustFloorControl:!1},telegram:{label:`Telegram`,disconnectMessage:`This clears the stored Telegram bot token for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect a Telegram bot so ${e} can send and receive messages on Telegram.`},phone:{label:`Phone Calling`,disconnectMessage:`This clears the stored Twilio credentials for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect your Twilio account so ${e} can make and answer phone calls.`}},G=l();function K({channels:e,selectedKey:t,onSelect:n}){return(0,G.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,G.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,G.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Channels`}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,G.jsx)(Ce,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})]})})}function Ce({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=h(e.key),a=r?`Connected`:`Not connected`;return(0,G.jsx)(ee,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,G.jsxs)(`button`,{type:`button`,onClick:n,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,G.jsx)(y,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,G.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,G.jsx)(F,{tone:r?`positive`:`neutral`,children:a})})]})})}function q({icon:e,title:t,description:n,action:r,className:i}){return(0,G.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,G.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--surface-sunken)] text-[var(--content-tertiary)]`,children:e}):null,(0,G.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,G.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,G.jsx)(`div`,{className:`mt-1`,children:r}):null]})}function we({assistantDisplayName:e,policy:t,saving:n=!1,loading:r=!1,error:i=!1,onChange:a}){let o=t??`trusted_contacts`,s=ge(e),c=ye.map(e=>({value:e,label:xe[e],tooltip:s[e]}));return(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsxs)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:[`Who can message `,e]}),r?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load this setting. Try reopening this page.`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{style:{maxWidth:280},children:(0,G.jsx)(te,{value:o,onChange:a,options:c,disabled:n,"aria-label":`Who can message ${e}`})}),(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:s[o]}),o===`trusted_contacts`?(0,G.jsxs)(P,{tone:`info`,className:`max-w-lg`,children:[`People you haven’t verified yet (even teammates in the same channel) can’t get through: `,e,` lets them know they need to be verified and notifies you. You can verify people ahead of time in Contacts.`]}):null]})]})}function Te({address:e,pending:t,onDisconnect:r}){return(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(F,{tone:`positive`,leftIcon:(0,G.jsx)(S,{}),children:`Connected`}),e?(0,G.jsx)(`span`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e}):null,(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`danger`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}function Ee({children:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:B(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,G.jsx)(f.Body,{children:e})]})}A.map(e=>e.riskThreshold);var De=[`none`,`low`];function J(e){if(e!==void 0)return e===`none`?`none`:`low`}var Y={none:{label:k(`none`).label,sublabel:`asks every time`,tone:`negative`,dotColor:`var(--system-negative-strong)`},low:{label:k(`low`).label,sublabel:`safe lookups`,tone:`warning`,dotColor:`var(--system-mid-strong)`},medium:{label:k(`medium`).label,sublabel:`broader lookups`,tone:`info`,dotColor:`var(--system-info-strong)`},high:{label:k(`high`).label,sublabel:`any lookup`,tone:`positive`,dotColor:`var(--system-positive-strong)`}},X=[`trusted_contact`,`unverified_contact`,`unknown`];function Oe(e,t){let n={};for(let r of e){if(r.selector.scope!==`channel`||r.selector.adapter!==t)continue;let e=r.selector.channelExternalId;e&&(r.contactType===`trusted_contact`||!(e in n))&&(n[e]=r.threshold)}return n}function Z(e,t,n){return n===`channels`?e.selector.scope===`adapter`&&e.selector.adapter===t:e.selector.scope===`channel_type`&&e.selector.adapter===t&&e.selector.channelType===`dm`}function ke(e,t,n){let r;for(let i of e)Z(i,t,n)&&(i.contactType===`trusted_contact`||r===void 0)&&(r=i.threshold);return r}var Ae=`__default__`;function Q({color:e}){return(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 shrink-0 rounded-full`,style:{backgroundColor:e}})}function je({tier:e,defaultTier:t,disabled:n,onTierChange:r,onReset:i,"aria-label":a}){let o=J(e??t??void 0),s=J(t??void 0)??null,c=De.map(e=>({value:e,label:Y[e].label,icon:(0,G.jsx)(Q,{color:Y[e].dotColor}),suffix:e===s?(0,G.jsx)(`span`,{className:`text-[color:var(--content-tertiary)]`,children:`default`}):void 0,tooltip:Y[e].sublabel}));return s===null&&c.unshift({value:Ae,label:`Default`,icon:(0,G.jsx)(Q,{color:`transparent`}),tooltip:`follows the default level`}),(0,G.jsx)(te,{value:o??``,onChange:e=>{e===Ae||e===s?i():r(e)},options:c,placeholder:`Default`,disabled:n,size:`compact`,menuAlign:`end`,"aria-label":a})}function $(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Me(e){return e.filter(e=>$(e)!==`dm`)}function Ne(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||$(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Pe(e){let t={public:0,private:0,dm:0};for(let n of e)t[$(n)]+=1;return t}function Fe(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Ie=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Le={public:b,private:j},Re=100,ze=new Set;function Be({assistantDisplayName:e,slackHandle:t,channels:n,loading:r=!1,error:i=!1,tierOverrides:a,defaultTier:o=null,accessControlsSupported:s=!0,tierOverridesLoading:c=!1,tierOverridesError:l=!1,pendingChannelIds:f=ze,onTierChange:p,onTierReset:m}){let[h,g]=(0,H.useState)(``),[_,v]=(0,H.useState)(null),y=(0,H.useMemo)(()=>Me(n??[]),[n]),x=(0,H.useMemo)(()=>Ne(y,h,_),[y,h,_]),S=(0,H.useMemo)(()=>Pe(y),[y]),C=t??`@${e}`;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,G.jsx)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:(0,G.jsxs)(G.Fragment,{children:[`Add with`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,C]}),` `,`or remove with`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,C]}),` `,`in that Slack channel. Only channels `,e,` is in appear here.`]})}),r?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):y.length===0?(0,G.jsx)(q,{icon:(0,G.jsx)(b,{className:`h-6 w-6`}),title:`No channels yet`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,G.jsx)(I,{type:`search`,value:h,onChange:e=>g(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,G.jsx)(N,{className:`h-4 w-4`}),fullWidth:!0})}),(0,G.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Ie.map(({value:e,label:t})=>{let n=_===e,r=e===null?y.length:S[e];return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>v(e),className:u(`inline-flex h-6 items-center rounded-full px-2.5 text-body-small-emphasised leading-none transition-colors`,n?`bg-[var(--content-default)] text-[var(--surface-base)]`:`bg-[var(--tag-bg-neutral)] text-[color:var(--content-secondary)] hover:text-[color:var(--content-default)]`),children:[t,` `,r]},e??`all`)})})]}),x.length===0?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):x.length>Re?(0,G.jsx)(`div`,{className:`h-96`,children:(0,G.jsx)(E,{items:x,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,G.jsx)(Ve,{channel:t,pending:f.has(t.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[t.id],onTierChange:e=>p?.(t.id,e),onReset:()=>m?.(t.id)}),className:`h-full`})}):(0,G.jsx)(`div`,{className:`max-h-96 overflow-y-auto`,children:x.map(e=>(0,G.jsx)(Ve,{channel:e,pending:f.has(e.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[e.id],onTierChange:t=>p?.(e.id,t),onReset:()=>m?.(e.id)},e.id))})]})]})}function Ve({channel:e,pending:t,overridesLoading:n,overridesError:r,defaultTier:i,accessControls:a,tierOverride:o,onTierChange:s,onReset:c}){let l=$(e);if(l===`dm`)return null;let u=Le[l],d=Fe(e),f=`[&+&]:border-t [&+&]:border-[var(--border-base)]`;return a?(0,G.jsx)(D,{className:f,leading:(0,G.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,subtitle:d??void 0,trailing:(0,G.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,G.jsx)(je,{tier:o,defaultTier:i,disabled:t||n||r,onTierChange:s,onReset:c,"aria-label":`Assistant Access in ${e.name}`})})}):(0,G.jsx)(D,{className:f,leading:(0,G.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:d==null?void 0:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:d})})}function He(e){return e===`none`?`Asks before every action, even a web search.`:`Asks before anything beyond looking things up and saving files in its own workspace.`}function Ue({defaultTier:e}){let t=J(e??void 0)??null;return(0,G.jsx)(`div`,{className:`flex flex-col gap-2 px-4 py-3`,children:(0,G.jsx)(`ul`,{className:`grid gap-x-6 gap-y-3 sm:grid-cols-2`,children:[...De].reverse().map(e=>{let n=Y[e];return(0,G.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(Q,{color:n.dotColor}),(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label}),e===t?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`· default`}):null]}),(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:He(e)})]},e)})})})}var We=[{bucket:`channels`,icon:b,title:`Channels`,description:`Public and private channels`},{bucket:`dm`,icon:M,title:`Direct messages`,description:`One-on-one DMs`}];function Ge({assistantName:e,globalDefaultTier:t,bucketTiers:n,loading:r,error:a,pendingBuckets:o,onBucketChange:s,onBucketReset:c}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Default access`,(0,G.jsxs)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:[`How much `,e,` does on its own, by conversation type. Individual channels can override this below, and`,` `,(0,G.jsx)(i,{to:oe.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune when it asks.`]})]})}),(0,G.jsx)(f.Body,{className:`py-1`,children:We.map(({bucket:e,icon:i,title:l,description:u})=>{let d=e===`dm`?n?.channels??t:t;return(0,G.jsx)(D,{className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,leading:(0,G.jsx)(i,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:l,subtitle:u,trailing:(0,G.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,G.jsx)(je,{tier:n?.[e],defaultTier:d,disabled:r||a||o.has(e),onTierChange:t=>s(e,t),onReset:()=>c(e),"aria-label":`Default Assistant Access for ${l}`})})},e)})}),(0,G.jsx)(f.Footer,{className:`p-0`,children:(0,G.jsx)(Ue,{defaultTier:t})})]})}var Ke=`0.11.0`;function qe(){return ae(Ke)}var Je=new Set([404,501]);function Ye(e){let t=fe(e);return t!==void 0&&Je.has(t)}function Xe(e,t,n){return X.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Ze(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function Qe(e,t){return t===`channels`?{scope:`adapter`,adapter:e}:{scope:`channel_type`,adapter:e,channelType:`dm`}}function $e(e,t,n){let r=Qe(e,t);return X.map(e=>({selector:r,contactType:e,threshold:n}))}function et({assistantId:e,adapter:t}){let n=o(),r=qe()&&!!e,i=(0,H.useMemo)(()=>({path:{assistant_id:e}}),[e]),a=(0,H.useMemo)(()=>p(i),[i]),l=(0,H.useMemo)(()=>[`channel-permission-resolve`,e,t],[e,t]),u=s({...g(i),enabled:r}),d=u.data?.cells,f=(0,H.useMemo)(()=>d?Oe(d,t):void 0,[d,t]),m=(0,H.useMemo)(()=>d?{channels:ke(d,t,`channels`),dm:ke(d,t,`dm`)}:void 0,[d,t]),h=s({queryKey:l,queryFn:async()=>{let{data:e}=await ce({...i,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:r,retry:!1,staleTime:3e4}),_=(e,t)=>{let r=n.getQueryData(a),i=Date.now();return n.setQueryData(a,n=>({cells:[...(n?.cells??[]).filter(t=>!e(t)),...t.map(e=>({...e,updatedAt:i}))]})),{previous:r}},v=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(Xe(t,e,n).map(e=>R({...i,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>_(n=>Ze(n,t,e),Xe(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),y=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(X.map(n=>z({...i,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>_(n=>Ze(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),b=c({mutationFn:async({bucket:e,tier:n})=>{await Promise.all($e(t,e,n).map(e=>R({...i,body:e,throwOnError:!0})))},onMutate:({bucket:e,tier:n})=>_(n=>Z(n,t,e),$e(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to save the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),x=c({mutationFn:async({bucket:e})=>{let n=Qe(t,e);await Promise.all(X.map(e=>z({...i,body:{selector:n,contactType:e},throwOnError:!0})))},onMutate:({bucket:e})=>_(n=>Z(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to reset the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),S=(0,H.useMemo)(()=>{let e=new Set;return v.isPending&&v.variables&&e.add(v.variables.channelExternalId),y.isPending&&y.variables&&e.add(y.variables.channelExternalId),e},[v.isPending,v.variables,y.isPending,y.variables]),C=(0,H.useMemo)(()=>{let e=new Set;return b.isPending&&b.variables&&e.add(b.variables.bucket),x.isPending&&x.variables&&e.add(x.variables.bucket),e},[b.isPending,b.variables,x.isPending,x.variables]);return!r||u.isError&&Ye(u.error)?{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,bucketTiers:void 0,pendingChannelIds:new Set,pendingBuckets:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0,onBucketChange:void 0,onBucketReset:void 0}:{supported:!0,tierOverrides:f,defaultCellTier:h.data,bucketTiers:m,pendingChannelIds:S,pendingBuckets:C,isLoading:u.isPending,isError:u.isError,onTierChange:(e,t)=>v.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{f?.[e]!==void 0&&y.mutate({channelExternalId:e})},onBucketChange:(e,t)=>b.mutate({bucket:e,tier:t}),onBucketReset:e=>{m?.[e]!==void 0&&x.mutate({bucket:e})}}}function tt({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...v(e),enabled:!!e,select:e=>e.channels}),i=et({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>O(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a,c=(0,G.jsx)(Be,{assistantDisplayName:t,slackHandle:n,accessControlsSupported:i.supported,defaultTier:o,channels:r.data,loading:r.isPending,error:r.isError,tierOverrides:i.tierOverrides,tierOverridesLoading:i.isLoading,tierOverridesError:i.isError,pendingChannelIds:i.pendingChannelIds,onTierChange:i.onTierChange,onTierReset:i.onTierReset});return!i.supported||!i.onBucketChange||!i.onBucketReset?(0,G.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:c}):(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[i.isError?(0,G.jsx)(P,{tone:`error`,children:`Couldn’t load access settings. These controls stay disabled until they load. Try reopening this page.`}):null,(0,G.jsx)(Ge,{assistantName:t,globalDefaultTier:a,bucketTiers:i.bucketTiers,loading:i.isLoading,error:i.isError,pendingBuckets:i.pendingBuckets,onBucketChange:i.onBucketChange,onBucketReset:i.onBucketReset}),(0,G.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:(0,G.jsx)(T.Root,{type:`single`,collapsible:!0,children:(0,G.jsxs)(T.Item,{value:`per-channel-overrides`,children:[(0,G.jsxs)(T.Trigger,{className:`group justify-between gap-2 px-4 py-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:`Per-channel overrides`}),(0,G.jsx)(x,{"aria-hidden":`true`,className:`h-4 w-4 shrink-0 text-[var(--content-tertiary)] transition-transform group-data-[state=open]:rotate-180`})]}),(0,G.jsx)(T.Content,{className:`border-[var(--border-base)] data-[state=open]:border-t`,children:c})]})})})]})}function nt({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:B(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,G.jsx)(F,{tone:`positive`,leftIcon:(0,G.jsx)(S,{}),children:`Connected`}),(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,G.jsx)(f.Body,{children:i})]})}function rt({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,G.jsxs)(w,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,G.jsx)(C,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,G.jsx)(C,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}function it({onSave:e}){let[t,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),c=t.trim().length>0&&!i;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(I,{label:`Bot Token`,type:`password`,value:t,onChange:e=>r(e.target.value),placeholder:`Paste your Telegram bot token`,disabled:i,fullWidth:!0}),o?(0,G.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:o}):null,(0,G.jsx)(`div`,{children:(0,G.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!c)){a(!0),s(null);try{await e(t.trim()),r(``)}catch(e){s(e instanceof Error?e.message:`Failed to save`)}finally{a(!1)}}},disabled:!c,children:i?`Saving…`:`Save`})})]})}function at({onSave:e}){let[t,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(null),u=t.trim().length>0&&i.trim().length>0&&!o;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(I,{label:`Account SID`,type:`text`,value:t,onChange:e=>r(e.target.value),placeholder:`ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`,disabled:o,fullWidth:!0}),(0,G.jsx)(I,{label:`Auth Token`,type:`password`,value:i,onChange:e=>a(e.target.value),placeholder:`Twilio auth token`,disabled:o,fullWidth:!0}),c?(0,G.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:c}):null,(0,G.jsx)(`div`,{children:(0,G.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!u)){s(!0),l(null);try{await e(t.trim(),i.trim()),r(``),a(``)}catch(e){l(e instanceof Error?e.message:`Failed to save`)}finally{s(!1)}}},disabled:!u,children:o?`Saving…`:`Save`})})]})}function ot({channel:e,assistantId:t,assistantName:r,assistantDisplayName:i,pending:a,initialManualEntry:o=!1,onSetup:s,onDisconnect:c,onSaveTelegramToken:l,onSaveSlackConfig:u,slackSaveStatus:d,slackSaveError:f,slackThreadMode:p,slackThreadModePending:m=!1,onSlackThreadModeChange:g,onSaveTwilioCredentials:_,policy:v,policySaving:b=!1,policyLoading:x=!1,policyError:S=!1,onPolicyChange:C}){let w=e.status===`ready`,[T,E]=(0,H.useState)(o);if(e.key===`slack`)return(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[w?(0,G.jsx)(nt,{slackHandle:e.address,disconnectPending:a,onDisconnect:c,children:(0,G.jsx)(rt,{threadMode:p,threadModePending:m,onThreadModeChange:g})}):(0,G.jsx)(Ee,{children:(0,G.jsx)(de,{assistantName:r,onSave:u,saveStatus:d,saveError:f})}),w?(0,G.jsx)(tt,{assistantId:t,assistantDisplayName:i,slackHandle:e.address}):null]});let D=W[e.key];return(0,G.jsx)(`div`,{className:`flex flex-col gap-4`,children:w?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Te,{address:e.address,pending:a,onDisconnect:c}),D.hasTrustFloorControl&&C?(0,G.jsx)(we,{assistantDisplayName:i,policy:v,saving:b,loading:x,error:S,onChange:C}):null]}):T?e.key===`telegram`?(0,G.jsx)(it,{onSave:l}):(0,G.jsx)(at,{onSave:_}):(0,G.jsx)(q,{icon:(0,G.jsx)(y,{channelId:e.key,className:`h-6 w-6`}),title:`${h(e.key)} isn't connected`,description:D.disconnectedPitch?.(i),action:(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Opening…`:`Set up`}),(0,G.jsx)(n,{type:`button`,variant:`link`,onClick:()=>E(!0),children:`or connect manually`})]})})})}var st={no_one:{title:`Block all messages?`,message:`Setting this channel to “No one” hard-denies every inbound message, including messages from you.
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,t as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./cn-CJf7MmLX.js";import{t as d}from"./typography-DEI9Ra9z.js";import{t as f}from"./card-DRIctGVs.js";import{_ as p,c as m,f as h,g,l as _,o as v,u as y,x as b}from"./use-save-twilio-credentials-yqA7lnzq.js";import{t as x}from"./chevron-down-BNidRDh1.js";import{t as S}from"./circle-check-big-DtV6IJuh.js";import{I as C,L as w,a as T,o as E,r as D}from"./src-Da9g8qsW.js";import{o as O,r as k,t as A,u as j}from"./threshold-presets-B-RqvhUM.js";import{t as M}from"./message-square-CHUvAEY9.js";import{t as N}from"./search-DL-2uX3K.js";import{t as P}from"./notice-Dslxs3H6.js";import{t as F}from"./tag-gOOX7fbA.js";import{t as I}from"./input-tXUFa7Eo.js";import{t as ee}from"./panel-item-CJh95P_q.js";import{t as L}from"./confirm-dialog-j9o2h3xs.js";import{t as te}from"./dropdown-B3FHWc_n.js";import{n as ne,t as re}from"./create-selectors-BfxF8Sx_.js";import{t as ie}from"./assistant-identity-store-B51BX78j.js";import{i as ae}from"./utils-DtVy-_pB.js";import{d as oe}from"./routes-DrfnNoYS.js";import{n as se}from"./conversation-navigation-Bf3cDRKh.js";import{i as R,o as ce,r as z}from"./sdk.gen-BpJ1vF7l.js";import{t as le}from"./assistant-feature-flag-store-BvLDPeej.js";import{t as B}from"./public-asset-OTnPMErp.js";import{t as ue}from"./use-active-assistant-id-JLsAfn3e.js";import{t as de}from"./slack-setup-wizard-DPzdheN0.js";import{t as fe}from"./index-CPeIfypI.js";import{t as pe}from"./detail-card-BElAV1cp.js";import{n as me,t as he}from"./mobile-sidebar-drawer-BwCIAm23.js";import{c as ge,i as _e,n as ve,o as ye,r as be,s as xe,t as Se}from"./use-invite-link-dialog-TNGI1l4g.js";import{t as V}from"./mutation-error-YLfUU5XL.js";var H=e(t(),1),U=re(ne()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})}))),W={slack:{label:`Slack`,disconnectMessage:`This clears the stored Slack bot and app tokens for this assistant. You can reconnect later.`,hasTrustFloorControl:!1},telegram:{label:`Telegram`,disconnectMessage:`This clears the stored Telegram bot token for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect a Telegram bot so ${e} can send and receive messages on Telegram.`},phone:{label:`Phone Calling`,disconnectMessage:`This clears the stored Twilio credentials for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect your Twilio account so ${e} can make and answer phone calls.`}},G=l();function K({channels:e,selectedKey:t,onSelect:n}){return(0,G.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,G.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,G.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Channels`}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,G.jsx)(Ce,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})]})})}function Ce({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=h(e.key),a=r?`Connected`:`Not connected`;return(0,G.jsx)(ee,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,G.jsxs)(`button`,{type:`button`,onClick:n,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,G.jsx)(y,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,G.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,G.jsx)(F,{tone:r?`positive`:`neutral`,children:a})})]})})}function q({icon:e,title:t,description:n,action:r,className:i}){return(0,G.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,G.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--surface-sunken)] text-[var(--content-tertiary)]`,children:e}):null,(0,G.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,G.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,G.jsx)(`div`,{className:`mt-1`,children:r}):null]})}function we({assistantDisplayName:e,policy:t,saving:n=!1,loading:r=!1,error:i=!1,onChange:a}){let o=t??`trusted_contacts`,s=ge(e),c=ye.map(e=>({value:e,label:xe[e],tooltip:s[e]}));return(0,G.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,G.jsxs)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:[`Who can message `,e]}),r?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load this setting. Try reopening this page.`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{style:{maxWidth:280},children:(0,G.jsx)(te,{value:o,onChange:a,options:c,disabled:n,"aria-label":`Who can message ${e}`})}),(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:s[o]}),o===`trusted_contacts`?(0,G.jsxs)(P,{tone:`info`,className:`max-w-lg`,children:[`People you haven’t verified yet (even teammates in the same channel) can’t get through: `,e,` lets them know they need to be verified and notifies you. You can verify people ahead of time in Contacts.`]}):null]})]})}function Te({address:e,pending:t,onDisconnect:r}){return(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(F,{tone:`positive`,leftIcon:(0,G.jsx)(S,{}),children:`Connected`}),e?(0,G.jsx)(`span`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e}):null,(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`danger`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}function Ee({children:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:B(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,G.jsx)(f.Body,{children:e})]})}A.map(e=>e.riskThreshold);var De=[`none`,`low`];function J(e){if(e!==void 0)return e===`none`?`none`:`low`}var Y={none:{label:k(`none`).label,sublabel:`asks every time`,tone:`negative`,dotColor:`var(--system-negative-strong)`},low:{label:k(`low`).label,sublabel:`safe lookups`,tone:`warning`,dotColor:`var(--system-mid-strong)`},medium:{label:k(`medium`).label,sublabel:`broader lookups`,tone:`info`,dotColor:`var(--system-info-strong)`},high:{label:k(`high`).label,sublabel:`any lookup`,tone:`positive`,dotColor:`var(--system-positive-strong)`}},X=[`trusted_contact`,`unverified_contact`,`unknown`];function Oe(e,t){let n={};for(let r of e){if(r.selector.scope!==`channel`||r.selector.adapter!==t)continue;let e=r.selector.channelExternalId;e&&(r.contactType===`trusted_contact`||!(e in n))&&(n[e]=r.threshold)}return n}function Z(e,t,n){return n===`channels`?e.selector.scope===`adapter`&&e.selector.adapter===t:e.selector.scope===`channel_type`&&e.selector.adapter===t&&e.selector.channelType===`dm`}function ke(e,t,n){let r;for(let i of e)Z(i,t,n)&&(i.contactType===`trusted_contact`||r===void 0)&&(r=i.threshold);return r}var Ae=`__default__`;function Q({color:e}){return(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 shrink-0 rounded-full`,style:{backgroundColor:e}})}function je({tier:e,defaultTier:t,disabled:n,onTierChange:r,onReset:i,"aria-label":a}){let o=J(e??t??void 0),s=J(t??void 0)??null,c=De.map(e=>({value:e,label:Y[e].label,icon:(0,G.jsx)(Q,{color:Y[e].dotColor}),suffix:e===s?(0,G.jsx)(`span`,{className:`text-[color:var(--content-tertiary)]`,children:`default`}):void 0,tooltip:Y[e].sublabel}));return s===null&&c.unshift({value:Ae,label:`Default`,icon:(0,G.jsx)(Q,{color:`transparent`}),tooltip:`follows the default level`}),(0,G.jsx)(te,{value:o??``,onChange:e=>{e===Ae||e===s?i():r(e)},options:c,placeholder:`Default`,disabled:n,size:`compact`,menuAlign:`end`,"aria-label":a})}function $(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Me(e){return e.filter(e=>$(e)!==`dm`)}function Ne(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||$(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Pe(e){let t={public:0,private:0,dm:0};for(let n of e)t[$(n)]+=1;return t}function Fe(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Ie=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Le={public:b,private:j},Re=100,ze=new Set;function Be({assistantDisplayName:e,slackHandle:t,channels:n,loading:r=!1,error:i=!1,tierOverrides:a,defaultTier:o=null,accessControlsSupported:s=!0,tierOverridesLoading:c=!1,tierOverridesError:l=!1,pendingChannelIds:f=ze,onTierChange:p,onTierReset:m}){let[h,g]=(0,H.useState)(``),[_,v]=(0,H.useState)(null),y=(0,H.useMemo)(()=>Me(n??[]),[n]),x=(0,H.useMemo)(()=>Ne(y,h,_),[y,h,_]),S=(0,H.useMemo)(()=>Pe(y),[y]),C=t??`@${e}`;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,G.jsx)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:(0,G.jsxs)(G.Fragment,{children:[`Add with`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,C]}),` `,`or remove with`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,C]}),` `,`in that Slack channel. Only channels `,e,` is in appear here.`]})}),r?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):y.length===0?(0,G.jsx)(q,{icon:(0,G.jsx)(b,{className:`h-6 w-6`}),title:`No channels yet`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,G.jsx)(I,{type:`search`,value:h,onChange:e=>g(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,G.jsx)(N,{className:`h-4 w-4`}),fullWidth:!0})}),(0,G.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Ie.map(({value:e,label:t})=>{let n=_===e,r=e===null?y.length:S[e];return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>v(e),className:u(`inline-flex h-6 items-center rounded-full px-2.5 text-body-small-emphasised leading-none transition-colors`,n?`bg-[var(--content-default)] text-[var(--surface-base)]`:`bg-[var(--tag-bg-neutral)] text-[color:var(--content-secondary)] hover:text-[color:var(--content-default)]`),children:[t,` `,r]},e??`all`)})})]}),x.length===0?(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):x.length>Re?(0,G.jsx)(`div`,{className:`h-96`,children:(0,G.jsx)(E,{items:x,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,G.jsx)(Ve,{channel:t,pending:f.has(t.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[t.id],onTierChange:e=>p?.(t.id,e),onReset:()=>m?.(t.id)}),className:`h-full`})}):(0,G.jsx)(`div`,{className:`max-h-96 overflow-y-auto`,children:x.map(e=>(0,G.jsx)(Ve,{channel:e,pending:f.has(e.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[e.id],onTierChange:t=>p?.(e.id,t),onReset:()=>m?.(e.id)},e.id))})]})]})}function Ve({channel:e,pending:t,overridesLoading:n,overridesError:r,defaultTier:i,accessControls:a,tierOverride:o,onTierChange:s,onReset:c}){let l=$(e);if(l===`dm`)return null;let u=Le[l],d=Fe(e),f=`[&+&]:border-t [&+&]:border-[var(--border-base)]`;return a?(0,G.jsx)(D,{className:f,leading:(0,G.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,subtitle:d??void 0,trailing:(0,G.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,G.jsx)(je,{tier:o,defaultTier:i,disabled:t||n||r,onTierChange:s,onReset:c,"aria-label":`Assistant Access in ${e.name}`})})}):(0,G.jsx)(D,{className:f,leading:(0,G.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:d==null?void 0:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:d})})}function He(e){return e===`none`?`Asks before every action, even a web search.`:`Asks before anything beyond looking things up and saving files in its own workspace.`}function Ue({defaultTier:e}){let t=J(e??void 0)??null;return(0,G.jsx)(`div`,{className:`flex flex-col gap-2 px-4 py-3`,children:(0,G.jsx)(`ul`,{className:`grid gap-x-6 gap-y-3 sm:grid-cols-2`,children:[...De].reverse().map(e=>{let n=Y[e];return(0,G.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(Q,{color:n.dotColor}),(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label}),e===t?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`· default`}):null]}),(0,G.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:He(e)})]},e)})})})}var We=[{bucket:`channels`,icon:b,title:`Channels`,description:`Public and private channels`},{bucket:`dm`,icon:M,title:`Direct messages`,description:`One-on-one DMs`}];function Ge({assistantName:e,globalDefaultTier:t,bucketTiers:n,loading:r,error:a,pendingBuckets:o,onBucketChange:s,onBucketReset:c}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Default access`,(0,G.jsxs)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:[`How much `,e,` does on its own, by conversation type. Individual channels can override this below, and`,` `,(0,G.jsx)(i,{to:oe.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune when it asks.`]})]})}),(0,G.jsx)(f.Body,{className:`py-1`,children:We.map(({bucket:e,icon:i,title:l,description:u})=>{let d=e===`dm`?n?.channels??t:t;return(0,G.jsx)(D,{className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,leading:(0,G.jsx)(i,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:l,subtitle:u,trailing:(0,G.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,G.jsx)(je,{tier:n?.[e],defaultTier:d,disabled:r||a||o.has(e),onTierChange:t=>s(e,t),onReset:()=>c(e),"aria-label":`Default Assistant Access for ${l}`})})},e)})}),(0,G.jsx)(f.Footer,{className:`p-0`,children:(0,G.jsx)(Ue,{defaultTier:t})})]})}var Ke=`0.11.0`;function qe(){return ae(Ke)}var Je=new Set([404,501]);function Ye(e){let t=fe(e);return t!==void 0&&Je.has(t)}function Xe(e,t,n){return X.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Ze(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function Qe(e,t){return t===`channels`?{scope:`adapter`,adapter:e}:{scope:`channel_type`,adapter:e,channelType:`dm`}}function $e(e,t,n){let r=Qe(e,t);return X.map(e=>({selector:r,contactType:e,threshold:n}))}function et({assistantId:e,adapter:t}){let n=o(),r=qe()&&!!e,i=(0,H.useMemo)(()=>({path:{assistant_id:e}}),[e]),a=(0,H.useMemo)(()=>p(i),[i]),l=(0,H.useMemo)(()=>[`channel-permission-resolve`,e,t],[e,t]),u=s({...g(i),enabled:r}),d=u.data?.cells,f=(0,H.useMemo)(()=>d?Oe(d,t):void 0,[d,t]),m=(0,H.useMemo)(()=>d?{channels:ke(d,t,`channels`),dm:ke(d,t,`dm`)}:void 0,[d,t]),h=s({queryKey:l,queryFn:async()=>{let{data:e}=await ce({...i,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:r,retry:!1,staleTime:3e4}),_=(e,t)=>{let r=n.getQueryData(a),i=Date.now();return n.setQueryData(a,n=>({cells:[...(n?.cells??[]).filter(t=>!e(t)),...t.map(e=>({...e,updatedAt:i}))]})),{previous:r}},v=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(Xe(t,e,n).map(e=>R({...i,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>_(n=>Ze(n,t,e),Xe(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),y=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(X.map(n=>z({...i,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>_(n=>Ze(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),b=c({mutationFn:async({bucket:e,tier:n})=>{await Promise.all($e(t,e,n).map(e=>R({...i,body:e,throwOnError:!0})))},onMutate:({bucket:e,tier:n})=>_(n=>Z(n,t,e),$e(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to save the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),x=c({mutationFn:async({bucket:e})=>{let n=Qe(t,e);await Promise.all(X.map(e=>z({...i,body:{selector:n,contactType:e},throwOnError:!0})))},onMutate:({bucket:e})=>_(n=>Z(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),V(`Failed to reset the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),S=(0,H.useMemo)(()=>{let e=new Set;return v.isPending&&v.variables&&e.add(v.variables.channelExternalId),y.isPending&&y.variables&&e.add(y.variables.channelExternalId),e},[v.isPending,v.variables,y.isPending,y.variables]),C=(0,H.useMemo)(()=>{let e=new Set;return b.isPending&&b.variables&&e.add(b.variables.bucket),x.isPending&&x.variables&&e.add(x.variables.bucket),e},[b.isPending,b.variables,x.isPending,x.variables]);return!r||u.isError&&Ye(u.error)?{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,bucketTiers:void 0,pendingChannelIds:new Set,pendingBuckets:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0,onBucketChange:void 0,onBucketReset:void 0}:{supported:!0,tierOverrides:f,defaultCellTier:h.data,bucketTiers:m,pendingChannelIds:S,pendingBuckets:C,isLoading:u.isPending,isError:u.isError,onTierChange:(e,t)=>v.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{f?.[e]!==void 0&&y.mutate({channelExternalId:e})},onBucketChange:(e,t)=>b.mutate({bucket:e,tier:t}),onBucketReset:e=>{m?.[e]!==void 0&&x.mutate({bucket:e})}}}function tt({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...v(e),enabled:!!e,select:e=>e.channels}),i=et({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>O(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a,c=(0,G.jsx)(Be,{assistantDisplayName:t,slackHandle:n,accessControlsSupported:i.supported,defaultTier:o,channels:r.data,loading:r.isPending,error:r.isError,tierOverrides:i.tierOverrides,tierOverridesLoading:i.isLoading,tierOverridesError:i.isError,pendingChannelIds:i.pendingChannelIds,onTierChange:i.onTierChange,onTierReset:i.onTierReset});return!i.supported||!i.onBucketChange||!i.onBucketReset?(0,G.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:c}):(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[i.isError?(0,G.jsx)(P,{tone:`error`,children:`Couldn’t load access settings. These controls stay disabled until they load. Try reopening this page.`}):null,(0,G.jsx)(Ge,{assistantName:t,globalDefaultTier:a,bucketTiers:i.bucketTiers,loading:i.isLoading,error:i.isError,pendingBuckets:i.pendingBuckets,onBucketChange:i.onBucketChange,onBucketReset:i.onBucketReset}),(0,G.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:(0,G.jsx)(T.Root,{type:`single`,collapsible:!0,children:(0,G.jsxs)(T.Item,{value:`per-channel-overrides`,children:[(0,G.jsxs)(T.Trigger,{className:`group justify-between gap-2 px-4 py-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:`Per-channel overrides`}),(0,G.jsx)(x,{"aria-hidden":`true`,className:`h-4 w-4 shrink-0 text-[var(--content-tertiary)] transition-transform group-data-[state=open]:rotate-180`})]}),(0,G.jsx)(T.Content,{className:`border-[var(--border-base)] data-[state=open]:border-t`,children:c})]})})})]})}function nt({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:B(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,G.jsx)(F,{tone:`positive`,leftIcon:(0,G.jsx)(S,{}),children:`Connected`}),(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,G.jsx)(f.Body,{children:i})]})}function rt({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,G.jsxs)(w,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,G.jsx)(C,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,G.jsx)(C,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}function it({onSave:e}){let[t,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),c=t.trim().length>0&&!i;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(I,{label:`Bot Token`,type:`password`,value:t,onChange:e=>r(e.target.value),placeholder:`Paste your Telegram bot token`,disabled:i,fullWidth:!0}),o?(0,G.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:o}):null,(0,G.jsx)(`div`,{children:(0,G.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!c)){a(!0),s(null);try{await e(t.trim()),r(``)}catch(e){s(e instanceof Error?e.message:`Failed to save`)}finally{a(!1)}}},disabled:!c,children:i?`Saving…`:`Save`})})]})}function at({onSave:e}){let[t,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(null),u=t.trim().length>0&&i.trim().length>0&&!o;return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(I,{label:`Account SID`,type:`text`,value:t,onChange:e=>r(e.target.value),placeholder:`ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`,disabled:o,fullWidth:!0}),(0,G.jsx)(I,{label:`Auth Token`,type:`password`,value:i,onChange:e=>a(e.target.value),placeholder:`Twilio auth token`,disabled:o,fullWidth:!0}),c?(0,G.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:c}):null,(0,G.jsx)(`div`,{children:(0,G.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!u)){s(!0),l(null);try{await e(t.trim(),i.trim()),r(``),a(``)}catch(e){l(e instanceof Error?e.message:`Failed to save`)}finally{s(!1)}}},disabled:!u,children:o?`Saving…`:`Save`})})]})}function ot({channel:e,assistantId:t,assistantName:r,assistantDisplayName:i,pending:a,initialManualEntry:o=!1,onSetup:s,onDisconnect:c,onSaveTelegramToken:l,onSaveSlackConfig:u,slackSaveStatus:d,slackSaveError:f,slackThreadMode:p,slackThreadModePending:m=!1,onSlackThreadModeChange:g,onSaveTwilioCredentials:_,policy:v,policySaving:b=!1,policyLoading:x=!1,policyError:S=!1,onPolicyChange:C}){let w=e.status===`ready`,[T,E]=(0,H.useState)(o);if(e.key===`slack`)return(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[w?(0,G.jsx)(nt,{slackHandle:e.address,disconnectPending:a,onDisconnect:c,children:(0,G.jsx)(rt,{threadMode:p,threadModePending:m,onThreadModeChange:g})}):(0,G.jsx)(Ee,{children:(0,G.jsx)(de,{assistantName:r,onSave:u,saveStatus:d,saveError:f})}),w?(0,G.jsx)(tt,{assistantId:t,assistantDisplayName:i,slackHandle:e.address}):null]});let D=W[e.key];return(0,G.jsx)(`div`,{className:`flex flex-col gap-4`,children:w?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Te,{address:e.address,pending:a,onDisconnect:c}),D.hasTrustFloorControl&&C?(0,G.jsx)(we,{assistantDisplayName:i,policy:v,saving:b,loading:x,error:S,onChange:C}):null]}):T?e.key===`telegram`?(0,G.jsx)(it,{onSave:l}):(0,G.jsx)(at,{onSave:_}):(0,G.jsx)(q,{icon:(0,G.jsx)(y,{channelId:e.key,className:`h-6 w-6`}),title:`${h(e.key)} isn't connected`,description:D.disconnectedPitch?.(i),action:(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Opening…`:`Set up`}),(0,G.jsx)(n,{type:`button`,variant:`link`,onClick:()=>E(!0),children:`or connect manually`})]})})})}var st={no_one:{title:`Block all messages?`,message:`Setting this channel to “No one” hard-denies every inbound message, including messages from you.
|
|
2
2
|
|
|
3
3
|
You can reverse this at any time.`,confirmLabel:`Block all`,destructive:!0},any_contact:{title:`Allow any contact?`,message:`“Any contact” admits every matched contact in this channel (including pending, unverified ones), not just your verified contacts.
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-CqtAGHQu.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-Dy5001j6.js";import{t as i}from"./useQuery-Bz-fbQ-m.js";import{t as a}from"./jsx-runtime-D3ZM-ToX.js";import{t as o}from"./cn-CJf7MmLX.js";import{t as s}from"./typography-DEI9Ra9z.js";import{t as c}from"./createLucideIcon-CAM1RhH8.js";import{t as l}from"./archive-BQ3zdIPv.js";import{t as u}from"./check-Dt2rQhdg.js";import{t as d}from"./menu-wESJw6y3.js";import{a as f,c as p,l as m,o as h,s as g,t as _,u as v}from"./use-attachment-preview-CQjpDfsc.js";import{B as y,l as b,u as x,y as ee}from"./src-Da9g8qsW.js";import{t as S}from"./download-Cnb8zZrK.js";import{t as te}from"./ellipsis-C5fQnusC.js";import{t as C}from"./external-link-GPGZ1LGU.js";import{t as ne}from"./eye-off-DQ4xakzN.js";import{t as re}from"./eye-B_jBDDRn.js";import{t as ie}from"./file-text-CwGsMgaa.js";import{t as ae}from"./file-DOePafLU.js";import{t as w}from"./key-round-BFkuiQGH.js";import{t as oe}from"./loader-circle-DWWXcfTQ.js";import{n as T}from"./toast-BtFgiPe3.js";import{n as se}from"./resolved-assistants-store-C6oDdTxB.js";import{dt as ce,l as le}from"./sdk.gen-CjtCuSlS.js";import{t as ue}from"./dist-an0Z446E.js";import{r as de}from"./use-is-org-ready-Df3qfx4p.js";import{n as fe}from"./browser-CcdNg0HN.js";import{t as E}from"./conversation-store-CTMy9QPV.js";import{i as D}from"./viewer-store-Cp5tMX-G.js";import{t as pe}from"./open-workspace-file-B_Rft7dd.js";import{a as me,i as he,n as ge,o as O,r as k,s as _e,t as A}from"./workspace-path-links-vDBIljq_.js";import{t as ve}from"./copy-to-clipboard-DgY-nZpm.js";import{a as ye,i as be,s as xe}from"./use-local-file-info-D2-ycwyJ.js";import{a as Se,n as Ce,o as we}from"./pdf-preview-pscVmtvX.js";import{n as Te,r as Ee}from"./workspace-tree-query-Dfkrp_rV.js";import{t as De}from"./native-anchor-D1Sy2PbD.js";var Oe=c(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),ke=c(`picture-in-picture-2`,[[`path`,{d:`M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4`,key:`daa4of`}],[`rect`,{width:`10`,height:`7`,x:`12`,y:`13`,rx:`2`,key:`1nb8gs`}]]),j=e(n(),1),Ae=`width=500,height=600`;function M(e){if(!e)return null;let t;try{let n=typeof window>`u`?`http://localhost`:window.location.origin;t=new URL(e,n)}catch{return null}return t.protocol!==`https:`&&t.protocol!==`http:`?null:t}function je(e){let t=M(e);if(!t)return!1;let n=t.pathname.toLowerCase();return t.searchParams.get(`response_type`)===`code`&&t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)||t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)&&/oauth|authorize|auth/.test(n)}function Me(e){if(typeof window>`u`)return null;let t=M(e);return!t||t.origin!==window.location.origin?null:`${t.pathname}${t.search}${t.hash}`}function Ne(e){return M(e)?.href??null}function Pe(e){if(!je(e))return!1;if(ue.isNativePlatform()){let t=Ne(e);return t?(fe(t),!0):!1}let t=window.open(e,`_blank`,Ae);return t===null?!1:(t.focus(),!0)}function Fe(e){return Pe(e)}function Ie(e){if(Pe(e))return!0;let t=window.open(e,`_blank`);return t===null?!1:(t.focus(),!0)}function Le(e,t){let n=Me(e);if(n)return t.push(n),{kind:`routed`};let r=Ne(e);return r?t.isNative?(fe(r),{kind:`opened`}):Ie(r)?{kind:`opened`}:{kind:`blocked`,url:r}:{kind:`invalid`}}var N=a(),Re={image:p,video:g,audio:m,pdf:f,code:v,archive:l,spreadsheet:h,document:ie,text:ie,file:ae};function ze(e,t){return e===`file`?Ce(``,t):e}function P(e){return xe({sniffedMime:null,serverMime:null,filename:e}).kind}function F({kind:e,filename:t,className:n}){let r=Re[ze(e,t)];return(0,N.jsx)(r,{className:n,"aria-hidden":!0})}var Be=100*1024*1024,Ve=25*1024*1024;function He(e){switch(e){case`image`:case`audio`:case`video`:return Be;default:return Ve}}var Ue=1500,I=`inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-lg bg-[var(--surface-overlay)] px-2 py-1 align-middle text-[0.85em] leading-tight text-[var(--content-secondary)]`,L=`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`;function We({type:e,service:t,field:n,assistantId:r,neutralized:i}){let a=se.use.activeAssistantId(),o=r===void 0?a:r,[s,c]=(0,j.useState)(null),[l,d]=(0,j.useState)(!1),[f,p]=(0,j.useState)(!1),m=(0,j.useRef)(null),h=(0,j.useRef)(0),g=e??`Secret`,_=t!==void 0&&n!==void 0&&o!=null,v=_?`${t}:${n}`:g,b=(0,j.useCallback)(()=>{h.current++,c(null),d(!1),p(!1),m.current&&=(clearTimeout(m.current),null)},[]),x=(0,j.useCallback)(async()=>{if(!_)return;let e=++h.current;d(!0);try{let{data:r}=await ce({path:{assistant_id:o},body:{service:t,field:n},throwOnError:!0});h.current===e&&c(r.value)}catch{h.current===e&&T.error(`Couldn't reveal ${v}.`)}finally{h.current===e&&d(!1)}},[_,o,t,n,v]),ee=(0,j.useCallback)(()=>{s!=null&&ve(s,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{p(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>p(!1),Ue)}})},[s]);if(i)return(0,N.jsxs)(`span`,{className:I,title:`Redaction marker — not verified by the assistant`,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,N.jsx)(`span`,{className:`truncate`,children:`Redacted`})]});if(!_)return(0,N.jsxs)(`span`,{className:I,title:`Redacted — this value is not linked to a stored credential`,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,N.jsx)(`span`,{className:`truncate`,children:g})]});let S=s!==null;return(0,N.jsxs)(`span`,{className:I,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),S?(0,N.jsx)(`span`,{className:`min-w-0 truncate font-mono text-[var(--content-default)]`,children:s}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`${g} · click to reveal`,className:`min-w-0 select-none truncate rounded-sm text-left blur-[3px] transition-[filter] hover:blur-[2px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:v}),l?(0,N.jsx)(oe,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):S?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`button`,{type:`button`,onClick:ee,"aria-label":`Copy value for ${v}`,title:`Copy value`,className:L,children:f?(0,N.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,N.jsx)(y,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,N.jsx)(`button`,{type:`button`,onClick:b,"aria-label":`Hide value for ${v}`,title:`Hide value`,className:L,children:(0,N.jsx)(ne,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`Click to reveal`,className:L,children:(0,N.jsx)(re,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})}var R=`redacted`;function z(e){try{return decodeURIComponent(e)}catch{return}}function Ge(){return RegExp(`〔${R}:([^:\u3014\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function Ke(){return RegExp(`〔\\u2060${R}:([^:\\u3014\\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function qe(e){let[,t,n,r]=e;if(n!==void 0&&r!==void 0){let e=z(n),i=z(r);if(e!==void 0&&i!==void 0)return{type:t,service:e,field:i}}return{type:t}}var B=`redacted-credential`,Je=new Set([`pre`,`code`,`style`,`script`,`a`]);function Ye(e){return e.type===`element`}function Xe(e){let t=[],n=Ge(),r;for(;(r=n.exec(e))!==null;){let e=qe(r);t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:B,properties:{type:e.type,...e.service!==void 0&&e.field!==void 0?{service:e.service,field:e.field}:{}},children:[]}})}let i=Ke();for(;(r=i.exec(e))!==null;)t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:B,properties:{neutralized:!0},children:[]}});if(t.length===0)return;t.sort((e,t)=>e.index-t.index);let a=[],o=0;for(let n of t)n.index>o&&a.push({type:`text`,value:e.slice(o,n.index)}),a.push(n.element),o=n.index+n.length;return o<e.length&&a.push({type:`text`,value:e.slice(o)}),a}function V(e){if(Ye(e)&&Je.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){V(n);continue}let r=n.value;if(!r.includes(`〔`))continue;let i=Xe(r);i&&t.splice(e,1,...i)}}function Ze(){return e=>{V(e)}}var Qe=new Set([`pre`,`code`,`style`,`script`]),H=5,U=.4,$e=`stream-word-fade`;function et(e){return e.type===`element`}function tt(e){if(et(e)&&Qe.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){tt(n);continue}let r=n.value.match(/\S+|\s+/g);if(!r||r.length===1&&/^\s+$/.test(r[0]))continue;let i=r.map(e=>/^\s+$/.test(e)?{type:`text`,value:e}:{type:`element`,tagName:`span`,properties:{className:[$e]},children:[{type:`text`,value:e}]});t.splice(e,1,...i)}}function nt(e,t){if(et(e)){let n=e.properties?.className;if(Array.isArray(n)&&n.includes($e)){t.push(e);return}}if(e.children)for(let n of e.children)nt(n,t)}function rt(e){let t=e?.caughtUp??!1;return e=>{if(tt(e),t)return;let n=[];nt(e,n);let r=Math.min(H,n.length);for(let e=0;e<r;e++){let t=n[n.length-1-e],r=(U+(1-U)*((e+1)/(H+1))).toFixed(3);t.properties={...t.properties,style:`opacity:${r}`}}}}var it=new Set([`pre`,`a`,`style`,`script`]);function at(e){return e.type===`element`}function ot(e){if(e.children.length!==1)return;let t=e.children[0];return t.type===`text`?t.value:void 0}function st(e){let t=e.children;if(t){for(let e of t)if(at(e)&&!it.has(e.tagName)){if(e.tagName===`code`){let t=ot(e),n=t===void 0?null:me(t);n!==null&&t!==void 0&&(e.tagName=A,e.properties={...e.properties,path:n,raw:t},e.children=[]);continue}st(e)}}}function ct(){return e=>{st(e)}}var lt=15e3,ut=1e4,dt=9e4;function ft({path:e,raw:t,assistantId:n,onOpen:r}){let a=t??e??``,o=de(),s=!!(e&&n&&r&&o),[c]=(0,j.useState)(()=>Date.now()+dt),{data:l}=i({...Te({assistantId:n??``,path:e?_e(e):``}),enabled:s,staleTime:lt,retry:!1,refetchInterval:t=>Date.now()>=c||(t.state.data?.entries.some(t=>t.type===`file`&&t.path===e)??!1)?!1:ut});return!(0,j.useMemo)(()=>e!=null&&(l?.entries.some(t=>t.type===`file`&&t.path===e)??!1),[l,e])||!e||!r?(0,N.jsx)(`code`,{className:b,children:a}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>r(he(e),O(e)),className:`${b} cursor-pointer text-[var(--system-positive-strong)] underline decoration-dotted underline-offset-2 hover:opacity-80`,title:`Open ${e}`,children:a})}var pt=/^[a-zA-Z][a-zA-Z0-9+.-]*:/;function mt(e){try{return decodeURIComponent(e)}catch{return null}}function ht(e){return(e.split(`#`,1)[0]??``).split(`?`,1)[0]??``}function gt(e){let t=mt(ht(e));if(t===null)return null;let n=t.trim();if(n.length===0||n.length>512||n.includes(`\0`))return null;let r;if(n.startsWith(`/`)){let e=n.lastIndexOf(ge);if(e===-1)return null;r=n.slice(e+ge.length)}else r=n.startsWith(`./`)?n.slice(2):n;return k(r)?r:null}function _t(e){let t=ht(e.trim()).split(`/`).pop()??``;return mt(t)??t}function W(e){if(e==null)return{kind:`other`};let t=e.trim();if(t.length===0||t.startsWith(`#`))return{kind:`other`};if(t.startsWith(`//`))return{kind:`web`};let n=pt.exec(t)?.[0];if(n){let e=n.slice(0,-1).toLowerCase();return e===`vellum`?{kind:`vellum`}:e===`http`||e===`https`?{kind:`web`}:{kind:`other`}}if(!(t.startsWith(`/`)||t.startsWith(`./`)||t.includes(`/`)))return{kind:`other`};let r=gt(t);return{kind:`local-file`,workspacePath:r,filename:r?O(r):_t(t)}}function G({workspacePath:e,filename:t,assistantId:n,disabled:i,onPictureInPicture:a,className:s}){let c=i===!0||e===null,l=(0,j.useCallback)(()=>{e!==null&&pe(e)},[e]),u=(0,j.useCallback)(async()=>{if(!(e===null||!n))try{await Ee({assistantId:n,path:e,filename:t})}catch{T.error(`Failed to download file`,{description:t})}},[n,t,e]);return(0,N.jsxs)(d.Root,{children:[(0,N.jsx)(d.Trigger,{asChild:!0,children:(0,N.jsx)(r,{variant:`ghost`,size:`compact`,expandOnMobile:!1,iconOnly:(0,N.jsx)(te,{}),"aria-label":`File actions`,className:o(`shrink-0`,s),onClick:e=>e.stopPropagation(),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()}})}),(0,N.jsxs)(d.Content,{align:`end`,sideOffset:4,children:[(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(C,{size:14}),disabled:c,onSelect:l,className:`whitespace-nowrap`,children:`Go to file`}),a!==void 0&&(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(ke,{size:14}),onSelect:a,className:`whitespace-nowrap`,children:`Picture in Picture`}),(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(S,{size:14}),disabled:c||!n,onSelect:()=>void u(),className:`whitespace-nowrap`,children:`Download`})]})]})}var vt=new Set([`md`,`markdown`]),yt=new Map([[`csv`,`csv`],[`tsv`,`csv`],[`txt`,`text`],[`log`,`text`],[`json`,`text`],[`yaml`,`text`],[`yml`,`text`],[`xml`,`text`],[`pdf`,`pdf`],[`png`,`image`],[`jpg`,`image`],[`jpeg`,`image`],[`gif`,`image`],[`webp`,`image`],[`svg`,`image`],[`avif`,`image`],[`mp3`,`audio`],[`wav`,`audio`],[`m4a`,`audio`],[`ogg`,`audio`],[`flac`,`audio`],[`mp4`,`video`],[`mov`,`video`],[`webm`,`video`],[`m4v`,`video`]]);function bt(e){let t=e.lastIndexOf(`.`);return t<=0?null:e.slice(t+1).toLowerCase()}function xt(e){let t=bt(e);return t!==null&&vt.has(t)}function St(e){let t=bt(e);return t===null?null:yt.get(t)??null}function Ct(e){return St(e)??`unsupported`}function K(e,t,n){return t?xt(e)?n?{mode:`document`,assistantId:t,conversationId:n}:{mode:`workspace`}:{mode:`preview`,assistantId:t,previewKind:Ct(e)}:{mode:`workspace`}}function wt(e,t,n){return K(e,t,n).mode!==`workspace`}function Tt(e,t,n){return e===`document`&&t!==null&&t.workspacePath===n}function Et(e){let t=D.use.mainView(),n=D.use.openedDocumentState();return e===null?!1:Tt(t,n,e)}function Dt(e,t,n,r){let i=K(t,n,r);if(i.mode===`document`){D.getState().loadWorkspaceFileDocument(i.assistantId,e,i.conversationId);return}if(i.mode===`preview`){D.getState().openWorkspaceFilePreview(e,i.previewKind);return}pe(e)}function q(e,t,n,r){let i=D.getState();if(wt(t,n,r)&&Tt(i.mainView,i.openedDocumentState,e)){i.closeDocument();return}Dt(e,t,n,r)}var Ot=[`opacity-0 transition-opacity`,`group-hover/local-file-card:opacity-100`,`group-focus-visible/local-file-card:opacity-100`,`[@media(pointer:coarse)]:opacity-100`].join(` `);function kt(e){return e===`workspace`?{label:`Open in workspace`,Icon:C}:e===`preview`?{label:`Open preview`,Icon:Oe}:{label:`Open in editor`,Icon:Oe}}var At={workspace:`workspace`,document:`editor`,preview:`preview`};function jt(e,t,n){return e===`missing`?`File not found`:e===`unavailable`?`File isn't available here`:n===t?null:n}function J({displayName:e,filename:t,sizeBytes:n,kind:r,state:i,workspacePath:a,assistantId:c}){let l=E.use.activeConversationId(),u=i===`ready`,d=u&&a!==null,{mode:f}=K(t,c,l),p=f!==`workspace`,m=Et(d?a:null)&&p,h=jt(i,e,t),{label:g,Icon:_}=kt(f),v=m?`Close ${At[f]} for ${t}`:`Open ${t}`,y=()=>{d&&q(a,t,c,l)};return(0,N.jsxs)(`span`,{role:d?`button`:void 0,tabIndex:d?0:void 0,"aria-label":d?v:void 0,"aria-expanded":d&&p?m:void 0,title:t,onClick:d?y:void 0,onKeyDown:d?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())}:void 0,className:o(`group/local-file-card my-2 flex w-full max-w-md items-center gap-2.5 rounded-lg border p-2 transition-colors`,m?`border-[var(--border-active)] bg-[var(--surface-active)]`:`border-[var(--border-element)] bg-[var(--surface-lift)]`,d&&`cursor-pointer`),children:[(0,N.jsx)(`span`,{className:o(`flex h-9 w-9 shrink-0 items-center justify-center rounded-md`,m?`bg-[var(--surface-lift)]`:`bg-[var(--surface-sunken)]`,u?`text-[var(--content-secondary)]`:`text-[var(--content-disabled)]`),children:(0,N.jsx)(F,{kind:r,filename:t,className:`h-4 w-4`})}),(0,N.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,N.jsx)(s,{as:`span`,variant:`body-small-default`,className:o(`truncate`,m?`text-[var(--content-emphasised)]`:`text-[var(--content-default)]`),children:we(e,40)}),h!==null&&(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`truncate text-[var(--content-tertiary)]`,children:h})]}),d&&!m&&(0,N.jsxs)(`span`,{"aria-hidden":`true`,className:o(`flex shrink-0 items-center gap-1`,Ot,`text-[var(--content-tertiary)]`),children:[(0,N.jsx)(_,{className:`h-3.5 w-3.5`}),(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`whitespace-nowrap`,children:g})]}),n!==null&&(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`shrink-0 text-[var(--content-disabled)]`,children:Se(n)}),(0,N.jsx)(G,{workspacePath:a,filename:t,assistantId:c,disabled:!u})]})}var Mt=`vellum://workspace/`;function Nt(e){let t=e.trim().split(`/`).pop()??``;try{return decodeURIComponent(t)}catch{return t}}function Pt(e){return e.split(`/`).map(e=>{try{return decodeURIComponent(e)}catch{return e}}).join(`/`)}function Y(e){let t=e.trim();if(t.startsWith(Mt)){let e=Pt(t.slice(19));return{workspacePath:k(e)?e:null,filename:O(e)}}let n=W(t);return n.kind===`local-file`?{workspacePath:n.workspacePath,filename:n.filename}:{workspacePath:null,filename:Nt(t)}}var X=`max-h-[400px] max-w-full rounded-lg border border-[var(--border-element)] object-contain`,Ft=[`pointer-events-none absolute right-2 top-2 rounded-md bg-[var(--surface-lift)] opacity-0 transition-opacity`,`group-hover/local-media:pointer-events-auto group-hover/local-media:opacity-100`,`group-focus-within/local-media:pointer-events-auto group-focus-within/local-media:opacity-100`,`[@media(pointer:coarse)]:pointer-events-auto [@media(pointer:coarse)]:opacity-100`].join(` `);function It(){return typeof document<`u`&&`pictureInPictureEnabled`in document&&document.pictureInPictureEnabled}function Lt({children:e,menu:t}){return(0,N.jsxs)(`span`,{className:`group/local-media relative my-2 inline-block max-w-full align-top`,children:[e,(0,N.jsx)(`span`,{className:Ft,children:t})]})}function Rt({href:e,alt:t,assistantId:n}){let r=(0,j.useMemo)(()=>Y(e),[e]),i=be(r.workspacePath,n),[a,o]=(0,j.useState)(null),s=(0,j.useRef)(null),c=(0,j.useCallback)(async()=>{let e=s.current;if(e!==null){if(document.pictureInPictureElement===e){try{await document.exitPictureInPicture()}catch{}return}e.disablePictureInPicture=!1;try{await e.requestPictureInPicture()}catch{e.disablePictureInPicture=!0,T.error(`Picture in Picture isn't available`);return}e.addEventListener(`leavepictureinpicture`,()=>{e.disablePictureInPicture=!0},{once:!0})}},[]),l=i.status===`ready`?i:null,u=l?.filename??r.filename,d=l?.kind??P(u),f=l?.sizeBytes??null,p=l!==null&&(d===`image`||d===`video`||d===`audio`)&&!(f!==null&&f>104857600)&&a!==e,{url:m,isError:h}=ye({workspacePath:r.workspacePath,mime:l?.mime??null,enabled:p,assistantId:n}),g=t.trim().length>0?t:u,_=g.length>0?g:u,v=(0,N.jsx)(G,{workspacePath:r.workspacePath,filename:u,assistantId:n}),y=(0,N.jsx)(`span`,{role:`status`,"aria-label":`Loading ${_}`,className:`my-2 inline-block h-7 w-40 animate-pulse rounded-lg bg-[var(--surface-lift)] align-middle`});if(n===void 0)return(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});if(i.status===`loading`)return y;if(i.status===`unavailable`)return(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:i.reason===`missing`?`missing`:`unavailable`,workspacePath:r.workspacePath,assistantId:n});let b=(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:f,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});return!p||h?b:m===null?y:d===`image`?(0,N.jsx)(Lt,{menu:v,children:(0,N.jsx)(`img`,{src:m,alt:t,onError:()=>o(e),className:X})}):d===`video`?(0,N.jsx)(Lt,{menu:(0,N.jsx)(G,{workspacePath:r.workspacePath,filename:u,assistantId:n,onPictureInPicture:It()?()=>void c():void 0}),children:(0,N.jsx)(`video`,{ref:s,src:m,controls:!0,controlsList:`nodownload noplaybackrate`,disablePictureInPicture:!0,playsInline:!0,preload:`metadata`,"aria-label":_,className:X})}):d===`audio`?(0,N.jsxs)(`span`,{className:`my-2 flex w-full max-w-md items-center gap-2`,children:[(0,N.jsx)(`audio`,{src:m,controls:!0,controlsList:`nodownload noplaybackrate`,preload:`metadata`,"aria-label":_,className:`min-w-0 flex-1`}),v]}):b}function zt({href:e,workspacePath:t,assistantId:n,children:r,onActivate:i}){let a=E.use.activeConversationId(),o=t===null?Nt(e):O(t);return(0,N.jsxs)(`a`,{href:e,onClick:e=>{if(e.preventDefault(),i){i();return}if(t===null){T.error(`This file isn't available here`);return}q(t,o,n,a)},className:`inline-flex items-baseline gap-1 cursor-pointer text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[(0,N.jsx)(F,{kind:P(o),filename:o,className:`h-3.5 w-3.5 shrink-0 self-center`}),r]})}function Z(e){return e!=null&&(e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`))}function Bt(e){return Z(e)?e:ee(e)}function Vt({href:e,children:t}){let n=je(e),r=/^https?:\/\//i.test(e??``);return(0,N.jsxs)(`a`,{href:e,target:`_blank`,rel:n?void 0:`noopener noreferrer`,onClick:t=>{if(Fe(e)){t.preventDefault();return}De(t,e)},className:`text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[t,r?(0,N.jsx)(C,{"aria-hidden":!0,className:`ml-0.5 inline h-3.5 w-3.5 shrink-0 align-[-0.125em]`}):null]})}function Q(e){return typeof e==`string`?e:typeof e==`number`?String(e):Array.isArray(e)?e.map(Q).join(``):(0,j.isValidElement)(e)?Q(e.props.children):``}var Ht=`my-2 max-w-full max-h-[400px] rounded-lg border border-[var(--border-element)] object-contain`;function $({alt:e}){return(0,N.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Image failed to load`,e?` (${e})`:``]})}function Ut({src:e,alt:t}){let[n,r]=(0,j.useState)(!1);return n?(0,N.jsx)($,{alt:t}):(0,N.jsx)(`img`,{src:e,alt:t,onError:()=>r(!0),className:Ht})}function Wt(e){try{return decodeURIComponent(e)}catch{return e}}function Gt(e,t){let n=Wt(e.split(`/`).pop()??``),r=t?.find(e=>e.filename===n);if(!r)return;let i=r.mimeType;if(!(i===void 0||!i.startsWith(`image/`)))return r}function Kt({attachment:e,alt:n,assistantId:r,onOpenPreview:i}){let[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(!1);if((0,j.useEffect)(()=>{if(!r||e.id.startsWith(`rehydrated:`))return;let n=!1;return(async()=>{try{let{data:t,error:i}=await le({path:{assistant_id:r,id:e.id},parseAs:`blob`,throwOnError:!1});if(n)return;if(i||!(t instanceof Blob)){c(!0);return}o(URL.createObjectURL(t))}catch(e){n||(c(!0),t(e,{context:`WorkspaceInlineImage`,bestEffort:!0}))}})(),()=>{n=!0,o(e=>(e&&URL.revokeObjectURL(e),null))}},[e,r]),s)return(0,N.jsx)($,{alt:n||e.filename});if(!a)return(0,N.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Loading image…`,n?` (${n})`:``]});let l=(0,N.jsx)(`img`,{src:a,alt:n,className:Ht});return i?(0,N.jsx)(`button`,{type:`button`,onClick:()=>i(e),className:`cursor-zoom-in appearance-none border-0 bg-transparent p-0`,"aria-label":n?`Expand image: ${n}`:`Expand image`,children:l}):l}var qt=(0,j.memo)(function({content:e,className:t,hardLineBreaks:n,onVellumLinkClick:r,attachments:i,assistantId:a,streamWordFade:o,redactedCredentialChips:s,workspacePathLinks:c}){let{openPreview:l,previewModal:u}=_(a,i),d=E.use.activeConversationId(),f=(0,j.useCallback)((e,t)=>{let{workspacePath:n,filename:i}=Y(e);if(a&&n!==null){q(n,i,a,d);return}r?.(e,t)},[a,d,r]),p=(0,j.useCallback)(({href:e,children:t})=>{if(e!=null&&Z(e)){let{workspacePath:n}=Y(e);return(0,N.jsx)(zt,{href:e,workspacePath:n,assistantId:a??void 0,onActivate:r&&!(a&&n!==null)?()=>r(e,Q(t)):void 0,children:t})}let n=W(e);if(e!=null&&n.kind===`local-file`){let{workspacePath:i}=n;return(0,N.jsx)(zt,{href:e,workspacePath:i,assistantId:a??void 0,onActivate:r&&i!==null&&!a?()=>r(he(i),Q(t)):void 0,children:t})}return(0,N.jsx)(Vt,{href:e,children:t})},[r,a]),m=(0,j.useMemo)(()=>[...s?[Ze]:[],...c&&r?[ct]:[],...o?[[rt,{caughtUp:o===`caughtUp`}]]:[]],[s,o,c,r]),h=(0,j.useMemo)(()=>({src:e,alt:t})=>{let n=(0,N.jsx)(Rt,{href:e,alt:t,assistantId:a??void 0});if(Z(e)){let r=Gt(e,i);return r?(0,N.jsx)(Kt,{attachment:r,alt:t,assistantId:a,onOpenPreview:l}):n}return W(e).kind===`local-file`?n:e.length===0?(0,N.jsx)($,{alt:t}):(0,N.jsx)(Ut,{src:e,alt:t})},[i,a,l]),g=(0,j.useMemo)(()=>({[B]:e=>(0,N.jsx)(We,{...e,assistantId:a},`${a??``}\u0000${e.service??``}\u0000${e.field??``}`),[A]:e=>(0,N.jsx)(ft,{...e,assistantId:a,onOpen:r?f:void 0})}),[a,r,f]);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(x,{content:e,className:t,hardLineBreaks:n,linkComponent:p,imageComponent:h,urlTransform:Bt,extraRehypePlugins:m,extraComponents:s||c&&r?g:void 0}),u]})});export{Le as a,P as i,He as n,Ie as o,F as r,qt as t};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-CqtAGHQu.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-Dy5001j6.js";import{t as i}from"./useQuery-Bz-fbQ-m.js";import{t as a}from"./jsx-runtime-D3ZM-ToX.js";import{t as o}from"./cn-CJf7MmLX.js";import{t as s}from"./typography-DEI9Ra9z.js";import{t as c}from"./createLucideIcon-CAM1RhH8.js";import{t as l}from"./archive-BQ3zdIPv.js";import{t as u}from"./check-Dt2rQhdg.js";import{t as d}from"./menu-wESJw6y3.js";import{a as f,c as p,l as m,o as h,s as g,t as _,u as v}from"./use-attachment-preview-CQjpDfsc.js";import{B as y,l as b,u as x,y as ee}from"./src-Da9g8qsW.js";import{t as S}from"./download-Cnb8zZrK.js";import{t as te}from"./ellipsis-C5fQnusC.js";import{t as C}from"./external-link-GPGZ1LGU.js";import{t as ne}from"./eye-off-DQ4xakzN.js";import{t as re}from"./eye-B_jBDDRn.js";import{t as ie}from"./file-text-CwGsMgaa.js";import{t as ae}from"./file-DOePafLU.js";import{t as w}from"./key-round-BFkuiQGH.js";import{t as oe}from"./loader-circle-DWWXcfTQ.js";import{n as T}from"./toast-BtFgiPe3.js";import{n as se}from"./resolved-assistants-store-C6oDdTxB.js";import{dt as ce,l as le}from"./sdk.gen-CjtCuSlS.js";import{t as ue}from"./dist-an0Z446E.js";import{r as de}from"./use-is-org-ready-3vHDbj4G.js";import{n as fe}from"./browser-CcdNg0HN.js";import{t as E}from"./conversation-store-CTMy9QPV.js";import{i as D}from"./viewer-store-DbIS4l8d.js";import{t as pe}from"./open-workspace-file-CivxJWcw.js";import{a as me,i as he,n as ge,o as O,r as k,s as _e,t as A}from"./workspace-path-links-vDBIljq_.js";import{t as ve}from"./copy-to-clipboard-DgY-nZpm.js";import{a as ye,i as be,s as xe}from"./use-local-file-info-D2-ycwyJ.js";import{a as Se,n as Ce,o as we}from"./pdf-preview-pscVmtvX.js";import{n as Te,r as Ee}from"./workspace-tree-query-Dfkrp_rV.js";import{t as De}from"./native-anchor-D1Sy2PbD.js";var Oe=c(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),ke=c(`picture-in-picture-2`,[[`path`,{d:`M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4`,key:`daa4of`}],[`rect`,{width:`10`,height:`7`,x:`12`,y:`13`,rx:`2`,key:`1nb8gs`}]]),j=e(n(),1),Ae=`width=500,height=600`;function M(e){if(!e)return null;let t;try{let n=typeof window>`u`?`http://localhost`:window.location.origin;t=new URL(e,n)}catch{return null}return t.protocol!==`https:`&&t.protocol!==`http:`?null:t}function je(e){let t=M(e);if(!t)return!1;let n=t.pathname.toLowerCase();return t.searchParams.get(`response_type`)===`code`&&t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)||t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)&&/oauth|authorize|auth/.test(n)}function Me(e){if(typeof window>`u`)return null;let t=M(e);return!t||t.origin!==window.location.origin?null:`${t.pathname}${t.search}${t.hash}`}function Ne(e){return M(e)?.href??null}function Pe(e){if(!je(e))return!1;if(ue.isNativePlatform()){let t=Ne(e);return t?(fe(t),!0):!1}let t=window.open(e,`_blank`,Ae);return t===null?!1:(t.focus(),!0)}function Fe(e){return Pe(e)}function Ie(e){if(Pe(e))return!0;let t=window.open(e,`_blank`);return t===null?!1:(t.focus(),!0)}function Le(e,t){let n=Me(e);if(n)return t.push(n),{kind:`routed`};let r=Ne(e);return r?t.isNative?(fe(r),{kind:`opened`}):Ie(r)?{kind:`opened`}:{kind:`blocked`,url:r}:{kind:`invalid`}}var N=a(),Re={image:p,video:g,audio:m,pdf:f,code:v,archive:l,spreadsheet:h,document:ie,text:ie,file:ae};function ze(e,t){return e===`file`?Ce(``,t):e}function P(e){return xe({sniffedMime:null,serverMime:null,filename:e}).kind}function F({kind:e,filename:t,className:n}){let r=Re[ze(e,t)];return(0,N.jsx)(r,{className:n,"aria-hidden":!0})}var Be=100*1024*1024,Ve=25*1024*1024;function He(e){switch(e){case`image`:case`audio`:case`video`:return Be;default:return Ve}}var Ue=1500,I=`inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-lg bg-[var(--surface-overlay)] px-2 py-1 align-middle text-[0.85em] leading-tight text-[var(--content-secondary)]`,L=`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`;function We({type:e,service:t,field:n,assistantId:r,neutralized:i}){let a=se.use.activeAssistantId(),o=r===void 0?a:r,[s,c]=(0,j.useState)(null),[l,d]=(0,j.useState)(!1),[f,p]=(0,j.useState)(!1),m=(0,j.useRef)(null),h=(0,j.useRef)(0),g=e??`Secret`,_=t!==void 0&&n!==void 0&&o!=null,v=_?`${t}:${n}`:g,b=(0,j.useCallback)(()=>{h.current++,c(null),d(!1),p(!1),m.current&&=(clearTimeout(m.current),null)},[]),x=(0,j.useCallback)(async()=>{if(!_)return;let e=++h.current;d(!0);try{let{data:r}=await ce({path:{assistant_id:o},body:{service:t,field:n},throwOnError:!0});h.current===e&&c(r.value)}catch{h.current===e&&T.error(`Couldn't reveal ${v}.`)}finally{h.current===e&&d(!1)}},[_,o,t,n,v]),ee=(0,j.useCallback)(()=>{s!=null&&ve(s,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{p(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>p(!1),Ue)}})},[s]);if(i)return(0,N.jsxs)(`span`,{className:I,title:`Redaction marker — not verified by the assistant`,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,N.jsx)(`span`,{className:`truncate`,children:`Redacted`})]});if(!_)return(0,N.jsxs)(`span`,{className:I,title:`Redacted — this value is not linked to a stored credential`,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,N.jsx)(`span`,{className:`truncate`,children:g})]});let S=s!==null;return(0,N.jsxs)(`span`,{className:I,children:[(0,N.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),S?(0,N.jsx)(`span`,{className:`min-w-0 truncate font-mono text-[var(--content-default)]`,children:s}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`${g} · click to reveal`,className:`min-w-0 select-none truncate rounded-sm text-left blur-[3px] transition-[filter] hover:blur-[2px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:v}),l?(0,N.jsx)(oe,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):S?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`button`,{type:`button`,onClick:ee,"aria-label":`Copy value for ${v}`,title:`Copy value`,className:L,children:f?(0,N.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,N.jsx)(y,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,N.jsx)(`button`,{type:`button`,onClick:b,"aria-label":`Hide value for ${v}`,title:`Hide value`,className:L,children:(0,N.jsx)(ne,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`Click to reveal`,className:L,children:(0,N.jsx)(re,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})}var R=`redacted`;function z(e){try{return decodeURIComponent(e)}catch{return}}function Ge(){return RegExp(`〔${R}:([^:\u3014\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function Ke(){return RegExp(`〔\\u2060${R}:([^:\\u3014\\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function qe(e){let[,t,n,r]=e;if(n!==void 0&&r!==void 0){let e=z(n),i=z(r);if(e!==void 0&&i!==void 0)return{type:t,service:e,field:i}}return{type:t}}var B=`redacted-credential`,Je=new Set([`pre`,`code`,`style`,`script`,`a`]);function Ye(e){return e.type===`element`}function Xe(e){let t=[],n=Ge(),r;for(;(r=n.exec(e))!==null;){let e=qe(r);t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:B,properties:{type:e.type,...e.service!==void 0&&e.field!==void 0?{service:e.service,field:e.field}:{}},children:[]}})}let i=Ke();for(;(r=i.exec(e))!==null;)t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:B,properties:{neutralized:!0},children:[]}});if(t.length===0)return;t.sort((e,t)=>e.index-t.index);let a=[],o=0;for(let n of t)n.index>o&&a.push({type:`text`,value:e.slice(o,n.index)}),a.push(n.element),o=n.index+n.length;return o<e.length&&a.push({type:`text`,value:e.slice(o)}),a}function V(e){if(Ye(e)&&Je.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){V(n);continue}let r=n.value;if(!r.includes(`〔`))continue;let i=Xe(r);i&&t.splice(e,1,...i)}}function Ze(){return e=>{V(e)}}var Qe=new Set([`pre`,`code`,`style`,`script`]),H=5,U=.4,$e=`stream-word-fade`;function et(e){return e.type===`element`}function tt(e){if(et(e)&&Qe.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){tt(n);continue}let r=n.value.match(/\S+|\s+/g);if(!r||r.length===1&&/^\s+$/.test(r[0]))continue;let i=r.map(e=>/^\s+$/.test(e)?{type:`text`,value:e}:{type:`element`,tagName:`span`,properties:{className:[$e]},children:[{type:`text`,value:e}]});t.splice(e,1,...i)}}function nt(e,t){if(et(e)){let n=e.properties?.className;if(Array.isArray(n)&&n.includes($e)){t.push(e);return}}if(e.children)for(let n of e.children)nt(n,t)}function rt(e){let t=e?.caughtUp??!1;return e=>{if(tt(e),t)return;let n=[];nt(e,n);let r=Math.min(H,n.length);for(let e=0;e<r;e++){let t=n[n.length-1-e],r=(U+(1-U)*((e+1)/(H+1))).toFixed(3);t.properties={...t.properties,style:`opacity:${r}`}}}}var it=new Set([`pre`,`a`,`style`,`script`]);function at(e){return e.type===`element`}function ot(e){if(e.children.length!==1)return;let t=e.children[0];return t.type===`text`?t.value:void 0}function st(e){let t=e.children;if(t){for(let e of t)if(at(e)&&!it.has(e.tagName)){if(e.tagName===`code`){let t=ot(e),n=t===void 0?null:me(t);n!==null&&t!==void 0&&(e.tagName=A,e.properties={...e.properties,path:n,raw:t},e.children=[]);continue}st(e)}}}function ct(){return e=>{st(e)}}var lt=15e3,ut=1e4,dt=9e4;function ft({path:e,raw:t,assistantId:n,onOpen:r}){let a=t??e??``,o=de(),s=!!(e&&n&&r&&o),[c]=(0,j.useState)(()=>Date.now()+dt),{data:l}=i({...Te({assistantId:n??``,path:e?_e(e):``}),enabled:s,staleTime:lt,retry:!1,refetchInterval:t=>Date.now()>=c||(t.state.data?.entries.some(t=>t.type===`file`&&t.path===e)??!1)?!1:ut});return!(0,j.useMemo)(()=>e!=null&&(l?.entries.some(t=>t.type===`file`&&t.path===e)??!1),[l,e])||!e||!r?(0,N.jsx)(`code`,{className:b,children:a}):(0,N.jsx)(`button`,{type:`button`,onClick:()=>r(he(e),O(e)),className:`${b} cursor-pointer text-[var(--system-positive-strong)] underline decoration-dotted underline-offset-2 hover:opacity-80`,title:`Open ${e}`,children:a})}var pt=/^[a-zA-Z][a-zA-Z0-9+.-]*:/;function mt(e){try{return decodeURIComponent(e)}catch{return null}}function ht(e){return(e.split(`#`,1)[0]??``).split(`?`,1)[0]??``}function gt(e){let t=mt(ht(e));if(t===null)return null;let n=t.trim();if(n.length===0||n.length>512||n.includes(`\0`))return null;let r;if(n.startsWith(`/`)){let e=n.lastIndexOf(ge);if(e===-1)return null;r=n.slice(e+ge.length)}else r=n.startsWith(`./`)?n.slice(2):n;return k(r)?r:null}function _t(e){let t=ht(e.trim()).split(`/`).pop()??``;return mt(t)??t}function W(e){if(e==null)return{kind:`other`};let t=e.trim();if(t.length===0||t.startsWith(`#`))return{kind:`other`};if(t.startsWith(`//`))return{kind:`web`};let n=pt.exec(t)?.[0];if(n){let e=n.slice(0,-1).toLowerCase();return e===`vellum`?{kind:`vellum`}:e===`http`||e===`https`?{kind:`web`}:{kind:`other`}}if(!(t.startsWith(`/`)||t.startsWith(`./`)||t.includes(`/`)))return{kind:`other`};let r=gt(t);return{kind:`local-file`,workspacePath:r,filename:r?O(r):_t(t)}}function G({workspacePath:e,filename:t,assistantId:n,disabled:i,onPictureInPicture:a,className:s}){let c=i===!0||e===null,l=(0,j.useCallback)(()=>{e!==null&&pe(e)},[e]),u=(0,j.useCallback)(async()=>{if(!(e===null||!n))try{await Ee({assistantId:n,path:e,filename:t})}catch{T.error(`Failed to download file`,{description:t})}},[n,t,e]);return(0,N.jsxs)(d.Root,{children:[(0,N.jsx)(d.Trigger,{asChild:!0,children:(0,N.jsx)(r,{variant:`ghost`,size:`compact`,expandOnMobile:!1,iconOnly:(0,N.jsx)(te,{}),"aria-label":`File actions`,className:o(`shrink-0`,s),onClick:e=>e.stopPropagation(),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()}})}),(0,N.jsxs)(d.Content,{align:`end`,sideOffset:4,children:[(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(C,{size:14}),disabled:c,onSelect:l,className:`whitespace-nowrap`,children:`Go to file`}),a!==void 0&&(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(ke,{size:14}),onSelect:a,className:`whitespace-nowrap`,children:`Picture in Picture`}),(0,N.jsx)(d.Item,{leftIcon:(0,N.jsx)(S,{size:14}),disabled:c||!n,onSelect:()=>void u(),className:`whitespace-nowrap`,children:`Download`})]})]})}var vt=new Set([`md`,`markdown`]),yt=new Map([[`csv`,`csv`],[`tsv`,`csv`],[`txt`,`text`],[`log`,`text`],[`json`,`text`],[`yaml`,`text`],[`yml`,`text`],[`xml`,`text`],[`pdf`,`pdf`],[`png`,`image`],[`jpg`,`image`],[`jpeg`,`image`],[`gif`,`image`],[`webp`,`image`],[`svg`,`image`],[`avif`,`image`],[`mp3`,`audio`],[`wav`,`audio`],[`m4a`,`audio`],[`ogg`,`audio`],[`flac`,`audio`],[`mp4`,`video`],[`mov`,`video`],[`webm`,`video`],[`m4v`,`video`]]);function bt(e){let t=e.lastIndexOf(`.`);return t<=0?null:e.slice(t+1).toLowerCase()}function xt(e){let t=bt(e);return t!==null&&vt.has(t)}function St(e){let t=bt(e);return t===null?null:yt.get(t)??null}function Ct(e){return St(e)??`unsupported`}function K(e,t,n){return t?xt(e)?n?{mode:`document`,assistantId:t,conversationId:n}:{mode:`workspace`}:{mode:`preview`,assistantId:t,previewKind:Ct(e)}:{mode:`workspace`}}function wt(e,t,n){return K(e,t,n).mode!==`workspace`}function Tt(e,t,n){return e===`document`&&t!==null&&t.workspacePath===n}function Et(e){let t=D.use.mainView(),n=D.use.openedDocumentState();return e===null?!1:Tt(t,n,e)}function Dt(e,t,n,r){let i=K(t,n,r);if(i.mode===`document`){D.getState().loadWorkspaceFileDocument(i.assistantId,e,i.conversationId);return}if(i.mode===`preview`){D.getState().openWorkspaceFilePreview(e,i.previewKind);return}pe(e)}function q(e,t,n,r){let i=D.getState();if(wt(t,n,r)&&Tt(i.mainView,i.openedDocumentState,e)){i.closeDocument();return}Dt(e,t,n,r)}var Ot=[`opacity-0 transition-opacity`,`group-hover/local-file-card:opacity-100`,`group-focus-visible/local-file-card:opacity-100`,`[@media(pointer:coarse)]:opacity-100`].join(` `);function kt(e){return e===`workspace`?{label:`Open in workspace`,Icon:C}:e===`preview`?{label:`Open preview`,Icon:Oe}:{label:`Open in editor`,Icon:Oe}}var At={workspace:`workspace`,document:`editor`,preview:`preview`};function jt(e,t,n){return e===`missing`?`File not found`:e===`unavailable`?`File isn't available here`:n===t?null:n}function J({displayName:e,filename:t,sizeBytes:n,kind:r,state:i,workspacePath:a,assistantId:c}){let l=E.use.activeConversationId(),u=i===`ready`,d=u&&a!==null,{mode:f}=K(t,c,l),p=f!==`workspace`,m=Et(d?a:null)&&p,h=jt(i,e,t),{label:g,Icon:_}=kt(f),v=m?`Close ${At[f]} for ${t}`:`Open ${t}`,y=()=>{d&&q(a,t,c,l)};return(0,N.jsxs)(`span`,{role:d?`button`:void 0,tabIndex:d?0:void 0,"aria-label":d?v:void 0,"aria-expanded":d&&p?m:void 0,title:t,onClick:d?y:void 0,onKeyDown:d?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())}:void 0,className:o(`group/local-file-card my-2 flex w-full max-w-md items-center gap-2.5 rounded-lg border p-2 transition-colors`,m?`border-[var(--border-active)] bg-[var(--surface-active)]`:`border-[var(--border-element)] bg-[var(--surface-lift)]`,d&&`cursor-pointer`),children:[(0,N.jsx)(`span`,{className:o(`flex h-9 w-9 shrink-0 items-center justify-center rounded-md`,m?`bg-[var(--surface-lift)]`:`bg-[var(--surface-sunken)]`,u?`text-[var(--content-secondary)]`:`text-[var(--content-disabled)]`),children:(0,N.jsx)(F,{kind:r,filename:t,className:`h-4 w-4`})}),(0,N.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,N.jsx)(s,{as:`span`,variant:`body-small-default`,className:o(`truncate`,m?`text-[var(--content-emphasised)]`:`text-[var(--content-default)]`),children:we(e,40)}),h!==null&&(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`truncate text-[var(--content-tertiary)]`,children:h})]}),d&&!m&&(0,N.jsxs)(`span`,{"aria-hidden":`true`,className:o(`flex shrink-0 items-center gap-1`,Ot,`text-[var(--content-tertiary)]`),children:[(0,N.jsx)(_,{className:`h-3.5 w-3.5`}),(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`whitespace-nowrap`,children:g})]}),n!==null&&(0,N.jsx)(s,{as:`span`,variant:`label-small-default`,className:`shrink-0 text-[var(--content-disabled)]`,children:Se(n)}),(0,N.jsx)(G,{workspacePath:a,filename:t,assistantId:c,disabled:!u})]})}var Mt=`vellum://workspace/`;function Nt(e){let t=e.trim().split(`/`).pop()??``;try{return decodeURIComponent(t)}catch{return t}}function Pt(e){return e.split(`/`).map(e=>{try{return decodeURIComponent(e)}catch{return e}}).join(`/`)}function Y(e){let t=e.trim();if(t.startsWith(Mt)){let e=Pt(t.slice(19));return{workspacePath:k(e)?e:null,filename:O(e)}}let n=W(t);return n.kind===`local-file`?{workspacePath:n.workspacePath,filename:n.filename}:{workspacePath:null,filename:Nt(t)}}var X=`max-h-[400px] max-w-full rounded-lg border border-[var(--border-element)] object-contain`,Ft=[`pointer-events-none absolute right-2 top-2 rounded-md bg-[var(--surface-lift)] opacity-0 transition-opacity`,`group-hover/local-media:pointer-events-auto group-hover/local-media:opacity-100`,`group-focus-within/local-media:pointer-events-auto group-focus-within/local-media:opacity-100`,`[@media(pointer:coarse)]:pointer-events-auto [@media(pointer:coarse)]:opacity-100`].join(` `);function It(){return typeof document<`u`&&`pictureInPictureEnabled`in document&&document.pictureInPictureEnabled}function Lt({children:e,menu:t}){return(0,N.jsxs)(`span`,{className:`group/local-media relative my-2 inline-block max-w-full align-top`,children:[e,(0,N.jsx)(`span`,{className:Ft,children:t})]})}function Rt({href:e,alt:t,assistantId:n}){let r=(0,j.useMemo)(()=>Y(e),[e]),i=be(r.workspacePath,n),[a,o]=(0,j.useState)(null),s=(0,j.useRef)(null),c=(0,j.useCallback)(async()=>{let e=s.current;if(e!==null){if(document.pictureInPictureElement===e){try{await document.exitPictureInPicture()}catch{}return}e.disablePictureInPicture=!1;try{await e.requestPictureInPicture()}catch{e.disablePictureInPicture=!0,T.error(`Picture in Picture isn't available`);return}e.addEventListener(`leavepictureinpicture`,()=>{e.disablePictureInPicture=!0},{once:!0})}},[]),l=i.status===`ready`?i:null,u=l?.filename??r.filename,d=l?.kind??P(u),f=l?.sizeBytes??null,p=l!==null&&(d===`image`||d===`video`||d===`audio`)&&!(f!==null&&f>104857600)&&a!==e,{url:m,isError:h}=ye({workspacePath:r.workspacePath,mime:l?.mime??null,enabled:p,assistantId:n}),g=t.trim().length>0?t:u,_=g.length>0?g:u,v=(0,N.jsx)(G,{workspacePath:r.workspacePath,filename:u,assistantId:n}),y=(0,N.jsx)(`span`,{role:`status`,"aria-label":`Loading ${_}`,className:`my-2 inline-block h-7 w-40 animate-pulse rounded-lg bg-[var(--surface-lift)] align-middle`});if(n===void 0)return(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});if(i.status===`loading`)return y;if(i.status===`unavailable`)return(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:i.reason===`missing`?`missing`:`unavailable`,workspacePath:r.workspacePath,assistantId:n});let b=(0,N.jsx)(J,{displayName:g,filename:u,sizeBytes:f,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});return!p||h?b:m===null?y:d===`image`?(0,N.jsx)(Lt,{menu:v,children:(0,N.jsx)(`img`,{src:m,alt:t,onError:()=>o(e),className:X})}):d===`video`?(0,N.jsx)(Lt,{menu:(0,N.jsx)(G,{workspacePath:r.workspacePath,filename:u,assistantId:n,onPictureInPicture:It()?()=>void c():void 0}),children:(0,N.jsx)(`video`,{ref:s,src:m,controls:!0,controlsList:`nodownload noplaybackrate`,disablePictureInPicture:!0,playsInline:!0,preload:`metadata`,"aria-label":_,className:X})}):d===`audio`?(0,N.jsxs)(`span`,{className:`my-2 flex w-full max-w-md items-center gap-2`,children:[(0,N.jsx)(`audio`,{src:m,controls:!0,controlsList:`nodownload noplaybackrate`,preload:`metadata`,"aria-label":_,className:`min-w-0 flex-1`}),v]}):b}function zt({href:e,workspacePath:t,assistantId:n,children:r,onActivate:i}){let a=E.use.activeConversationId(),o=t===null?Nt(e):O(t);return(0,N.jsxs)(`a`,{href:e,onClick:e=>{if(e.preventDefault(),i){i();return}if(t===null){T.error(`This file isn't available here`);return}q(t,o,n,a)},className:`inline-flex items-baseline gap-1 cursor-pointer text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[(0,N.jsx)(F,{kind:P(o),filename:o,className:`h-3.5 w-3.5 shrink-0 self-center`}),r]})}function Z(e){return e!=null&&(e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`))}function Bt(e){return Z(e)?e:ee(e)}function Vt({href:e,children:t}){let n=je(e),r=/^https?:\/\//i.test(e??``);return(0,N.jsxs)(`a`,{href:e,target:`_blank`,rel:n?void 0:`noopener noreferrer`,onClick:t=>{if(Fe(e)){t.preventDefault();return}De(t,e)},className:`text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[t,r?(0,N.jsx)(C,{"aria-hidden":!0,className:`ml-0.5 inline h-3.5 w-3.5 shrink-0 align-[-0.125em]`}):null]})}function Q(e){return typeof e==`string`?e:typeof e==`number`?String(e):Array.isArray(e)?e.map(Q).join(``):(0,j.isValidElement)(e)?Q(e.props.children):``}var Ht=`my-2 max-w-full max-h-[400px] rounded-lg border border-[var(--border-element)] object-contain`;function $({alt:e}){return(0,N.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Image failed to load`,e?` (${e})`:``]})}function Ut({src:e,alt:t}){let[n,r]=(0,j.useState)(!1);return n?(0,N.jsx)($,{alt:t}):(0,N.jsx)(`img`,{src:e,alt:t,onError:()=>r(!0),className:Ht})}function Wt(e){try{return decodeURIComponent(e)}catch{return e}}function Gt(e,t){let n=Wt(e.split(`/`).pop()??``),r=t?.find(e=>e.filename===n);if(!r)return;let i=r.mimeType;if(!(i===void 0||!i.startsWith(`image/`)))return r}function Kt({attachment:e,alt:n,assistantId:r,onOpenPreview:i}){let[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(!1);if((0,j.useEffect)(()=>{if(!r||e.id.startsWith(`rehydrated:`))return;let n=!1;return(async()=>{try{let{data:t,error:i}=await le({path:{assistant_id:r,id:e.id},parseAs:`blob`,throwOnError:!1});if(n)return;if(i||!(t instanceof Blob)){c(!0);return}o(URL.createObjectURL(t))}catch(e){n||(c(!0),t(e,{context:`WorkspaceInlineImage`,bestEffort:!0}))}})(),()=>{n=!0,o(e=>(e&&URL.revokeObjectURL(e),null))}},[e,r]),s)return(0,N.jsx)($,{alt:n||e.filename});if(!a)return(0,N.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Loading image…`,n?` (${n})`:``]});let l=(0,N.jsx)(`img`,{src:a,alt:n,className:Ht});return i?(0,N.jsx)(`button`,{type:`button`,onClick:()=>i(e),className:`cursor-zoom-in appearance-none border-0 bg-transparent p-0`,"aria-label":n?`Expand image: ${n}`:`Expand image`,children:l}):l}var qt=(0,j.memo)(function({content:e,className:t,hardLineBreaks:n,onVellumLinkClick:r,attachments:i,assistantId:a,streamWordFade:o,redactedCredentialChips:s,workspacePathLinks:c}){let{openPreview:l,previewModal:u}=_(a,i),d=E.use.activeConversationId(),f=(0,j.useCallback)((e,t)=>{let{workspacePath:n,filename:i}=Y(e);if(a&&n!==null){q(n,i,a,d);return}r?.(e,t)},[a,d,r]),p=(0,j.useCallback)(({href:e,children:t})=>{if(e!=null&&Z(e)){let{workspacePath:n}=Y(e);return(0,N.jsx)(zt,{href:e,workspacePath:n,assistantId:a??void 0,onActivate:r&&!(a&&n!==null)?()=>r(e,Q(t)):void 0,children:t})}let n=W(e);if(e!=null&&n.kind===`local-file`){let{workspacePath:i}=n;return(0,N.jsx)(zt,{href:e,workspacePath:i,assistantId:a??void 0,onActivate:r&&i!==null&&!a?()=>r(he(i),Q(t)):void 0,children:t})}return(0,N.jsx)(Vt,{href:e,children:t})},[r,a]),m=(0,j.useMemo)(()=>[...s?[Ze]:[],...c&&r?[ct]:[],...o?[[rt,{caughtUp:o===`caughtUp`}]]:[]],[s,o,c,r]),h=(0,j.useMemo)(()=>({src:e,alt:t})=>{let n=(0,N.jsx)(Rt,{href:e,alt:t,assistantId:a??void 0});if(Z(e)){let r=Gt(e,i);return r?(0,N.jsx)(Kt,{attachment:r,alt:t,assistantId:a,onOpenPreview:l}):n}return W(e).kind===`local-file`?n:e.length===0?(0,N.jsx)($,{alt:t}):(0,N.jsx)(Ut,{src:e,alt:t})},[i,a,l]),g=(0,j.useMemo)(()=>({[B]:e=>(0,N.jsx)(We,{...e,assistantId:a},`${a??``}\u0000${e.service??``}\u0000${e.field??``}`),[A]:e=>(0,N.jsx)(ft,{...e,assistantId:a,onOpen:r?f:void 0})}),[a,r,f]);return(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(x,{content:e,className:t,hardLineBreaks:n,linkComponent:p,imageComponent:h,urlTransform:Bt,extraRehypePlugins:m,extraComponents:s||c&&r?g:void 0}),u]})});export{Le as a,P as i,He as n,Ie as o,F as r,qt as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,t as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useMutation-CXGTrp4W.js";import{t as c}from"./jsx-runtime-D3ZM-ToX.js";import{t as l}from"./loader-circle-DWWXcfTQ.js";import{at as u,c as d,l as f}from"./auth-store-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,t as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useMutation-CXGTrp4W.js";import{t as c}from"./jsx-runtime-D3ZM-ToX.js";import{t as l}from"./loader-circle-DWWXcfTQ.js";import{at as u,c as d,l as f}from"./auth-store-C9aYqB9U.js";import{C as p,b as m,y as h}from"./native-biometric-DetUqtjl.js";import{d as g}from"./routes-DrfnNoYS.js";import{d as _}from"./platform-detection-AHYibqOx.js";import{a as v}from"./use-platform-gate-C5bNA5Pn.js";import{i as y}from"./use-is-org-ready-3vHDbj4G.js";import{n as b}from"./browser-CcdNg0HN.js";import{dt as x}from"./react-query.gen-BtYBixpk.js";import{n as S,r as C}from"./checkout-continuation-CYDyrqci.js";import{t as w}from"./checkout-return-target-BStfEab4.js";var T=e(t(),1),E=c();function D(){m(),f()}function O(){let e=a(),[t]=r(),c=t.get(`package`)??``,f=(0,T.useMemo)(()=>c?null:h(t),[c,t]),m=v(),_=y(),O=C(),k=S(t,g.plans),A=k===g.plans?`View plans`:`Continue setup`,j=o(),{mutateAsync:M}=s(x()),[N,P]=(0,T.useState)(!1),[F,I]=(0,T.useState)(!1),L=(0,T.useRef)(`idle`),R=(0,T.useCallback)(async()=>{L.current=`running`,P(!1),I(!1);let t=w();try{let n=await M({body:f?{target_plan_id:`pro`,confirm:!0,machine_tier:f.machineTier,storage_tier:f.storageTier,credit_tier:f.creditTier,return_target:t}:{target_plan_id:`pro`,package:c,confirm:!0,return_target:t}});if(L.current!==`running`)return;if(n.status===`redirect`&&n.checkout_url){L.current=`handed_off`,p(f?{kind:`custom`,machineTier:f.machineTier,storageTier:f.storageTier,creditTier:f.creditTier}:{kind:`package`,packageKey:c}),d(j),I(t===`native`),b(n.checkout_url);return}L.current=`settled`,D(),e(k===g.plans&&c?g.plansForPackage(c):k,{replace:!0})}catch{if(L.current!==`running`)return;L.current=`settled`,P(!0)}},[k,f,M,e,c,j]),z=(0,T.useCallback)(()=>{if(_===`ready`){R();return}L.current=`idle`,P(!1),I(!1),_===`unavailable`&&u.getState().fetchOrganizations()},[_,R]);return(0,T.useEffect)(()=>{if(!c&&!f||m===`disabled`||m===`gated`||O===`disabled`){if(L.current===`handed_off`)return;L.current=`settled`,D(),e(k,{replace:!0});return}if(!(O!==`enabled`||m!==`full`||L.current!==`idle`)&&_!==`resolving`){if(_===`unavailable`){L.current=`settled`,P(!0);return}R()}},[k,f,m,e,_,c,R,O]),N?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`We couldn’t start your checkout. Please try again.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Try again`}),(0,E.jsx)(i,{to:k,onClick:D,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):F?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`Checkout opened in your browser. Finish there to complete your upgrade.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Reopen checkout`}),(0,E.jsx)(i,{to:k,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-3`,children:[(0,E.jsx)(l,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`,"aria-label":`Preparing checkout`}),(0,E.jsx)(`p`,{className:`text-sm text-[var(--content-tertiary)]`,children:`Preparing checkout…`})]})}function k(){let e=a(),[t]=r(),n=S(t,g.settings.usageBilling);return(0,T.useEffect)(()=>{D(),e(n,{replace:!0})},[e,n]),null}function A(){return _()?(0,E.jsx)(k,{}):(0,E.jsx)(O,{})}export{A as CheckoutPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./jsx-runtime-D3ZM-ToX.js";import{c as r,i,n as a,o,t as s}from"./use-command-palette-sections-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./jsx-runtime-D3ZM-ToX.js";import{c as r,i,n as a,o,t as s}from"./use-command-palette-sections-BshFMe0w.js";import{n as c}from"./resolved-assistants-store-C6oDdTxB.js";import{i as l,n as u,nt as d,s as f}from"./auth-store-C9aYqB9U.js";import{t as p}from"./use-app-theme-yiZ38i4_.js";import{i as m}from"./conversation-queries-BBj4FfQn.js";import{CommandPalette as h}from"./command-palette-Bd1GTwZQ.js";var g=e(t(),1),_=n(),v=()=>void 0,y=e=>void 0,b=e=>{switch(e.id){case`action-new-conversation`:return{kind:`newConversation`};case`action-current-conversation`:return{kind:`currentConversation`};case`action-settings`:return{kind:`openSettings`};case`action-library`:return{kind:`openLibrary`};case`action-intelligence`:return{kind:`openIdentity`};default:return e.id.startsWith(`conv-`)?{kind:`openConversation`,conversationId:e.id.slice(5)}:e.id.startsWith(`search-conv-`)?{kind:`openConversation`,conversationId:e.id.slice(12)}:e.id.startsWith(`search-schedule-`)||e.id.startsWith(`search-contact-`)?{kind:`openIdentity`}:null}};function x(){let e=u.use.sessionStatus(),t=f(),n=l();p(),o(!t),r({sessionStatus:e,hasPlatformSession:n});let x=c.use.assistants(),S=c.use.activeAssistantId(),C=d(),w=(0,g.useMemo)(()=>{let e=C??S;if(!e)return null;let t=x.find(t=>t.id===e);return t?{id:t.id,name:t.name}:null},[C,S,x]),T=w?.id??null,{conversations:E}=m(T,!0),D=(0,g.useCallback)(e=>{let t=b(e);t&&i(t)},[]),{commandPalette:O,mergedSections:k,handleItemSelect:A}=s({assistantId:T,assistantName:w?.name,conversations:E,activeConversationId:void 0,startNewConversation:v,switchConversation:v,navigate:y,navigateToSettings:v,isOpen:!0,onClose:()=>{a()},onItemSelect:D});return(0,_.jsx)(`div`,{className:`h-screen w-screen bg-transparent`,children:(0,_.jsx)(h,{isOpen:!0,surface:`window`,onClose:O.close,query:O.query,onQueryChange:O.setQuery,highlightTokens:O.searchTokens,selectedIndex:O.selectedIndex,sections:k,isSearching:O.isSearching,onItemSelect:A,onKeyDown:O.handleKeyDown})})}export{x as CommandPaletteWindowPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,n as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./typography-DEI9Ra9z.js";import{t as d}from"./card-DRIctGVs.js";import{t as f}from"./createLucideIcon-CAM1RhH8.js";import{t as p}from"./arrow-left-W84B6oJL.js";import{t as m}from"./arrow-right-ChqGeAaW.js";import{S as h,a as g,b as _,c as v,f as y,l as b,u as x,x as S}from"./use-save-twilio-credentials-yqA7lnzq.js";import{t as C}from"./circle-check-big-DtV6IJuh.js";import{t as w}from"./ellipsis-vertical-qQRDY5dB.js";import{t as T}from"./link-2-DhyrrFaE.js";import{t as E}from"./loader-circle-DWWXcfTQ.js";import{t as D}from"./mail-DyUf40pu.js";import{t as O}from"./message-square-CHUvAEY9.js";import{t as k}from"./pencil-Cm5DdeRM.js";import{t as A}from"./plus-EJu6s6xR.js";import{t as j}from"./search-DL-2uX3K.js";import{t as M}from"./send-Bdmy_GSE.js";import{t as N}from"./user-plus-DjxxnQ8G.js";import{t as P}from"./tag-gOOX7fbA.js";import{t as F}from"./input-tXUFa7Eo.js";import{t as I}from"./modal-xr_vw1ZO.js";import{t as L}from"./panel-item-CJh95P_q.js";import{n as ee}from"./toast-BtFgiPe3.js";import{t as R}from"./confirm-dialog-j9o2h3xs.js";import{t as te}from"./assistant-identity-store-B51BX78j.js";import{C as ne}from"./sdk.gen-CjtCuSlS.js";import{d as re}from"./routes-DrfnNoYS.js";import{Gt as ie,Kt as ae,S as z,a as oe,b as se,x as ce}from"./react-query.gen-C7om930f.js";import{n as B}from"./conversation-navigation-BqoIExAQ.js";import{t as le}from"./assistant-feature-flag-store-BvLDPeej.js";import{t as V}from"./use-active-assistant-id-JLsAfn3e.js";import{t as H}from"./detail-card-BElAV1cp.js";import{n as ue,t as de}from"./mobile-sidebar-drawer-BwCIAm23.js";import{i as fe,n as pe,r as U,t as me}from"./use-invite-link-dialog-TNGI1l4g.js";import{t as W}from"./mutation-error-YLfUU5XL.js";import{a as he,i as ge,n as _e,t as ve}from"./contacts-gateway-DRzp5PC6.js";var ye=f(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),be=f(`git-merge`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]),G=e(t(),1),xe=new Set([`slack`]);function K(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var q=l();function Se({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,G.useState)(null);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,q.jsxs)(`div`,{children:[i>0?(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,q.jsx)(J,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,q.jsx)(R,{open:i!==null,title:`Disconnect ${i?y(i):``}?`,message:`This clears the stored credentials for this channel. You can reconnect later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{i&&r&&r(i),a(null)},onCancel:()=>a(null)})]})}function J({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(x,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:y(e.key)}),a&&e.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),(0,q.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Y({role:e,contactType:t}){let{label:n,tone:r}=X(e,t);return(0,q.jsx)(P,{tone:r,children:n})}function X(e,t){switch(e){case`guardian`:return{label:`Guardian`,tone:`positive`};case`assistant`:return{label:`Assistant`,tone:`negative`};default:return t===`assistant`?{label:`Assistant`,tone:`negative`}:{label:`Human`,tone:`warning`}}}function Ce({assistantName:e,...t}){let n=b(e);return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(H,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,q.jsx)(Se,{...t})})]})}var Z=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function we(e){return Z.has(e)}function Te(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&K(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function Ee(e,t,n){let r=[],i=new Set;if(e)for(let t of e)t.id===`a2a`&&!n||(r.push(t),i.add(t.id));for(let e of t)e.status===`revoked`||i.has(e.type)||e.type===`a2a`&&!n||we(e.type)&&(r.push({id:e.type,label:e.type.charAt(0).toUpperCase()+e.type.slice(1),subtitle:``,icon:`help-circle`,supportsVerification:!1,setupMessages:{guardian:``,contact:``}}),i.add(e.type));return r}function Q({name:e,className:t,style:n}){switch(e){case`bot`:return(0,q.jsx)(h,{className:t,style:n});case`hash`:return(0,q.jsx)(S,{className:t,style:n});case`send`:return(0,q.jsx)(M,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(D,{className:t,style:n});case`message-square`:return(0,q.jsx)(O,{className:t,style:n});default:return(0,q.jsx)(ye,{className:t,style:n})}}function $({contactChannels:e,availableChannels:t,a2aEnabled:n,setupLabel:r=`Invite`,verifyLoading:i,verifySubject:a=`self`,onSetupChannel:o,onVerifyChannel:s,onRevokeChannel:c,onLinkAccount:l}){let[u,d]=(0,G.useState)(null),[f,p]=(0,G.useState)(null),m=new Map;for(let t of e)t.status!==`revoked`&&(m.has(t.type)||m.set(t.type,t));return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:Ee(t,e,n).map((e,t)=>{let n=m.get(e.id);return(0,q.jsxs)(`div`,{children:[t>0&&(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,q.jsx)(De,{info:e,existing:n,setupLabel:r,verifyLoading:i,onSetup:o?()=>o(e.id):void 0,onVerify:s&&e.supportsVerification?()=>d(e):void 0,onRevoke:c&&n?()=>p({channelId:n.id,channel:e}):void 0,onLinkAccount:l&&xe.has(e.id)?()=>l(e.id):void 0})]},e.id)})}),u&&(0,q.jsx)(R,{open:!0,title:`Verify ${u.label}`,message:a===`contact`?`This will mark this contact's ${u.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${u.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{u&&(s?.(u.id),d(null))},onCancel:()=>d(null)}),f&&(0,q.jsx)(R,{open:!0,title:`Revoke ${f.channel.label}`,message:`This will disconnect the verified channel. The contact will need to re-verify to use this channel again.`,confirmLabel:`Revoke`,destructive:!0,onConfirm:()=>{c?.(f.channelId,f.channel.id),p(null)},onCancel:()=>p(null)})]})}function De({info:e,existing:t,setupLabel:r,verifyLoading:i,onSetup:a,onVerify:o,onRevoke:s,onLinkAccount:c}){let l=Te(e,t);return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(Q,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:l.kind===`connected`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`verified`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Verified`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`unverified`?(0,q.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o||i,children:i?`Verifying…`:`Verify`}):l.kind===`setup`?e.id===`a2a`?null:(0,q.jsxs)(q.Fragment,{children:[c?(0,q.jsxs)(n,{onClick:c,children:[(0,q.jsx)(T,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,q.jsx)(n,{variant:`outlined`,onClick:a,disabled:!a,children:r})]}):null})]})}function Oe(e){return(0,q.jsx)(ke,{...e},e.contact.id)}function ke({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,onSave:l,onDelete:u,onMerge:d,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h}){let g=e.displayName===`New Contact`,[_,v]=(0,G.useState)(g?``:e.displayName),[y,b]=(0,G.useState)(e.notes??``),[x,S]=(0,G.useState)(!1),C=_.trim(),w=y.trim(),T=g?``:e.displayName,E=e.notes??``,D=C!==T||w!==E,O=C.length>0&&D&&!t&&!r,k=g&&e.channels.length===0&&e.interactionCount===0,A=C||e.displayName,j=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:A,accessory:(0,q.jsx)(Y,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:j,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:_,onChange:e=>v(e.target.value),placeholder:`Give this human a name`,autoFocus:g,disabled:t||r,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{type:`button`,onClick:()=>l({displayName:C,notes:w}),disabled:!O,children:t?`Saving…`:`Save`}),d?(0,q.jsx)(n,{type:`button`,variant:`outlined`,onClick:d,disabled:!o||k||D||a||t||r,title:o?k?`Save this contact before merging`:D?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,q.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?u():S(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,q.jsx)(H,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,verifyLoading:i,verifySubject:`contact`,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h})}),(0,q.jsx)(R,{open:x,title:`Delete ${e.displayName}?`,message:`This will permanently delete this contact and all their channels. This action cannot be undone.`,confirmLabel:`Delete`,destructive:!0,onConfirm:()=>{S(!1),u()},onCancel:()=>S(!1)})]})}function Ae(e){return(0,q.jsx)(je,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function je({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,G.useState)(``),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{d&&!r.some(e=>e.id===d)&&f(null)},[r,d]);let m=(0,G.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=d?r.find(e=>e.id===d)??null:null,g=Ie(t);return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,q.jsxs)(I.Content,{size:`md`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsx)(I.Title,{icon:be,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,q.jsx)(I.Description,{children:h?`Channels and notes from the merged contact will move over. The merged contact will be deleted.`:`The contact you pick will be deleted. Its channels and notes will be added to this one.`})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[h?(0,q.jsx)(Pe,{survivor:t,donor:h}):r.length===0?(0,q.jsx)(Fe,{}):(0,q.jsx)(Me,{search:c,onSearch:l,candidates:m,onPick:f}),a?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,q.jsx)(I.Footer,{children:h?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,q.jsx)(p,{"aria-hidden":!0}),children:`Back`}),(0,q.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Me({search:e,onSearch:t,candidates:n,onPick:r}){return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(F,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,q.jsx)(j,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,q.jsx)(`div`,{className:`flex max-h-[320px] min-h-[120px] flex-col gap-1 overflow-y-auto`,role:`listbox`,"aria-label":`Select a contact to merge`,children:n.length===0?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,q.jsx)(Ne,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Ne({contact:e,onPick:t}){let n=Be(e).join(` | `)||void 0;return(0,q.jsx)(L,{asChild:!0,label:``,children:(0,q.jsx)(`button`,{type:`button`,onClick:t,role:`option`,"aria-selected":`false`,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,q.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function Pe({survivor:e,donor:t}){let n=Ie(e),{moved:r,duplicates:i}=ze(e,t);return(0,q.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,q.jsxs)(`li`,{children:[(0,q.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,q.jsx)(`li`,{children:r.length===0?`No new channels will move to ${n}.`:`${r.length} channel${r.length===1?``:`s`} will move to ${n}: ${r.map(e=>Re(e.type)).join(`, `)}.`}),i.length>0?(0,q.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,q.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,q.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Fe(){return(0,q.jsx)(u,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ie(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var Le={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Re(e){return Le[e.toLowerCase()]??e}function ze(e,t){let n=[],r=[];for(let i of t.channels)i.status!==`revoked`&&(e.channels.some(e=>e.type===i.type&&e.address.toLowerCase()===i.address.toLowerCase())?r.push(i):n.push(i));return{moved:n,duplicates:r}}function Be(e){let t=new Set,n=[];for(let r of e.channels){if(r.status===`revoked`)continue;let e=r.type.toLowerCase();t.has(e)||(t.add(e),n.push(Le[e]??r.type))}return n}function Ve({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,G.useState)(``),f=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,q.jsx)(d.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,q.jsxs)(d.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,q.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,q.jsx)(E,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(A,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,q.jsx)(He,{name:t.displayName?`${t.displayName} (You)`:`You`,role:t.role,channelTypes:t.channelTypes,selected:a?.kind===`contact`&&a.contactId===t.id,onClick:()=>o({kind:`contact`,contactId:t.id}),trailingIcon:`pencil`}):null,(0,q.jsx)(He,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,q.jsx)(F,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,q.jsx)(j,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,q.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[f.map(e=>(0,q.jsx)(He,{name:e.displayName,role:e.role,contactType:e.contactType,channelTypes:e.channelTypes,verified:e.verified,selected:a?.kind===`contact`&&a.contactId===e.id,onClick:()=>o({kind:`contact`,contactId:e.id}),trailingIcon:`more`},e.id)),f.length===0?(0,q.jsx)(`p`,{className:`px-3 py-4 text-center text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`No matching contacts`}):null]}):e?null:(0,q.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,q.jsx)(E,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(N,{"aria-hidden":!0}),children:`Add Contact`})]})})}function He({name:e,role:t,contactType:n,channelTypes:r,selected:i,onClick:a,trailingIcon:o,verified:s}){let c=r&&r.length>0?r.join(` | `):void 0;return(0,q.jsx)(L,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(k,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(w,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,q.jsxs)(`button`,{type:`button`,onClick:a,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,q.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,q.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,q.jsx)(P,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,q.jsx)(Y,{role:t,contactType:n})]})]})})}function Ue(e){return(0,q.jsx)(We,{...e},e.contact.id)}function We({contact:e,savePending:t,verifyPending:r,mergePending:i=!1,canMerge:a=!1,availableChannels:o,a2aEnabled:s,onSave:c,onMerge:l,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f,onGenerateInviteLink:p}){let m=e.displayName.startsWith(`vellum-principal-`),h=m?``:e.displayName,[g,_]=(0,G.useState)(h),[v,y]=(0,G.useState)(e.notes??``),b=g.trim(),x=v.trim(),S=b!==h.trim()||x!==(e.notes??``).trim(),C=S&&!t,w=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,q.jsx)(Y,{role:`guardian`}),compactAccessory:!0,subtitle:w,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Notes about yourself which AI will take into account`,disabled:t,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:x}),disabled:!C,children:t?`Saving…`:`Save`}),l?(0,q.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||S||i||t,title:a?S?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,q.jsx)(H,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,q.jsx)(U,{onClick:p}):null]})}function Ge(e,t){let n=t.trim().toLowerCase().replace(/^@/,``);return n===``?e:e.filter(e=>e.displayName.toLowerCase().includes(n)||e.username.toLowerCase().includes(n))}function Ke(e){let t=e.trim().split(/\s+/).filter(Boolean);return`${t[0]?.[0]??`?`}${t.length>1?t[t.length-1]?.[0]??``:``}`.toUpperCase()}function qe({open:e,channelLabel:t,contactName:r,accounts:i,loading:a,errorMessage:o,pendingAccountId:s,onPick:c,onClose:l,onInviteInstead:u}){let[d,f]=(0,G.useState)(``);(0,G.useEffect)(()=>{e&&f(``)},[e]);let p=(0,G.useMemo)(()=>Ge(i??[],d),[i,d]),h=s!=null;return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,q.jsxs)(I.Content,{size:`sm`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsxs)(I.Title,{children:[`Link `,t,` account`]}),(0,q.jsxs)(I.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[(0,q.jsx)(F,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,q.jsx)(j,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,q.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,q.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:(i?.length??0)===0?`No workspace members found.`:`No members match.`}):(0,q.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:h,className:`flex w-full cursor-pointer items-center gap-3 rounded-md px-2 py-2 text-left transition-colors hover:bg-[var(--surface-overlay)] disabled:cursor-not-allowed disabled:opacity-60`,children:[e.imageUrl?(0,q.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,q.jsx)(`span`,{"aria-hidden":`true`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--tag-bg-neutral)] text-body-small-emphasised text-[color:var(--content-secondary)]`,children:Ke(e.displayName)}),(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,q.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,q.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,q.jsxs)(I.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,q.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,q.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:h,children:[`Or send an invite instead`,(0,q.jsx)(m,{className:`h-3.5 w-3.5`})]}):null]})]})})}function Je({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,G.useState)(!1),o=c({mutationFn:n=>_e(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),ee.success(`Linked as @${t.account.username}`),r()}}),s=(0,G.useCallback)(()=>{o.reset(),a(!0)},[o]),l=(0,G.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,G.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:l,linkErrorMessage:o.error instanceof Error?o.error.message:o.error?`Failed to link account`:null,pendingAccountId:o.isPending?o.variables.account.id:null,pick:u}}var Ye=[{id:`slack`,label:`Slack`,subtitle:`Message your assistant from Slack`,icon:`hash`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Slack. Can you help me set that up?`,contact:`I'd like to verify a contact's Slack identity. Can you walk me through it?`}},{id:`telegram`,label:`Telegram`,subtitle:`Message your assistant from Telegram`,icon:`send`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Telegram. Can you help me set that up?`,contact:`I'd like to verify a contact's Telegram identity. Can you walk me through it?`}},{id:`phone`,label:`Phone Calling`,subtitle:`Call or text your assistant via phone`,icon:`phone`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian for phone calls. Can you help me set that up?`,contact:`I'd like to verify a contact's phone number. Can you help me set that up?`}}],Xe=[];function Ze({assistantId:e,onStartSetupConversation:t}){let n=le.use.a2aChannel(),a=te.use.name(),l=o(),[u]=r(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=me(e),[_,y]=(0,G.useState)(!1),[x,S]=(0,G.useState)(!1),C=b(a),w=(0,G.useMemo)(()=>({path:{assistant_id:e}}),[e]),T=ce(w),E=s({...se(w),enabled:!!e,select:e=>e.contacts}),D=pe({assistantId:e,onStartSetupConversation:t}),O=s({...oe({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await ne({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:Ye};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??Xe,k=E.data,A=(0,G.useMemo)(()=>k?.find(e=>e.role===`guardian`)??null,[k]),j=(0,G.useMemo)(()=>k?.filter(e=>e.role!==`guardian`)??[],[k]),M=(0,G.useMemo)(()=>p.kind===`contact`?k?.find(e=>e.id===p.contactId)??null:null,[k,p]),N=(0,G.useMemo)(()=>!k||!M?[]:k.filter(e=>e.id!==M.id&&e.role!==`guardian`),[k,M]),P=N.length>0,F=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{F.current||A&&(F.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let I=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),L=c({mutationFn:()=>ge(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{z(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:W(`Failed to create contact`),onSettled:()=>I()}),R=c({mutationFn:t=>ve(e,t),onSuccess:(e,t)=>{z(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:W(`Failed to delete contact`),onSettled:()=>I()}),B=c({mutationFn:({contactId:t,patch:n})=>ge(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{z(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:W(`Failed to save contact`),onSettled:()=>I()}),V=ae({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(z(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==r).map(e=>e.id===n.id?n:e)}:void 0),m({kind:`contact`,contactId:n.id})),S(!1),ee.success(`Contacts merged`)},onSettled:()=>I()}),H=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),V.reset()},[V]),U=(0,G.useCallback)(()=>{V.reset(),S(!0)},[V]),_e=(0,G.useCallback)(()=>{V.isPending||(S(!1),V.reset())},[V]),ye=ie({onSuccess:()=>I()}),be=(0,G.useCallback)((t,n)=>{ye.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[ye,e]),xe=(0,G.useCallback)(()=>{L.isPending||L.mutate()},[L]),K=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[O,t]),Se=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[O,t]),J=c({mutationFn:t=>he(e,t.channelId),onSuccess:()=>I(),onError:W(`Failed to verify channel`)}),Y=(0,G.useCallback)(e=>{if(!M)return;let t=M.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&J.mutate({channelId:t.id})},[M,J]),X=Je({assistantId:e,channelType:`slack`,contact:M?{id:M.id,displayName:M.displayName}:null,onLinked:I}),Z=s({...g(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),we=D.channels.some(e=>e.key===`slack`&&e.status===`ready`),Te=(0,G.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=R.isPending?R.variables:null,Q=(0,G.useMemo)(()=>M?B.isPending&&B.variables?.contactId===M.id?{...M,displayName:B.variables.patch.displayName,notes:B.variables.patch.notes}:M:null,[M,B.isPending,B.variables]);if(f)return(0,q.jsx)(i,{to:`${re.channels}?setup=${f}`,replace:!0});let $={loading:E.isLoading,assistantName:C,guardian:A?{id:A.id,displayName:A.displayName.startsWith(`vellum-principal-`)?``:A.displayName,role:A.role,channelTypes:tt(A.channels,n)}:null,regularContacts:j.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:tt(e.channels,n),verified:et(e.channels)})),selection:p,onAddContact:xe,addingContact:L.isPending};return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,q.jsx)(ue,{onClick:()=>y(!0)})}),(0,q.jsx)(de,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:H})}),(0,q.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,q.jsx)(Ve,{...$,onSelect:H})}),(0,q.jsx)(`section`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto`,children:p.kind===`assistant`||p.kind===`contact`&&p.contactId===Ee?(0,q.jsx)(Ce,{assistantName:C,channels:D.channels,pendingChannelKey:D.pendingChannelKey,onConnect:D.onSetup,onDisconnect:D.onDisconnect}):Q?Q.role===`guardian`?(0,q.jsx)(Ue,{contact:Q,savePending:B.isPending,verifyPending:J.isPending,mergePending:V.isPending,canMerge:P,availableChannels:O,a2aEnabled:n,onSave:e=>{B.mutate({contactId:Q.id,patch:e})},onMerge:U,onSetupChannel:t?Se:void 0,onVerifyChannel:Y,onRevokeChannel:be,onGenerateInviteLink:n?h.open:void 0}):(0,q.jsx)(Oe,{contact:Q,savePending:B.isPending,deletePending:R.isPending,verifyPending:J.isPending,mergePending:V.isPending,canMerge:P,availableChannels:O,a2aEnabled:n,onSave:e=>{B.mutate({contactId:Q.id,patch:e})},onDelete:()=>{R.mutate(Q.id)},onMerge:U,onSetupChannel:t?K:void 0,onVerifyChannel:Y,onRevokeChannel:be,onLinkAccount:we?Te:void 0}):(0,q.jsx)(Qe,{})}),M?(0,q.jsx)(Ae,{open:x,survivor:M,candidates:N,pending:V.isPending,errorMessage:V.error instanceof Error?V.error.message:V.error?`Failed to merge contacts`:null,onMerge:t=>V.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:_e}):null,(0,q.jsx)(qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:M?.displayName??``,accounts:Z.data,loading:Z.isLoading,errorMessage:Z.isError?`Couldn’t load the workspace roster. Check the Slack connection and try again.`:X.linkErrorMessage,pendingAccountId:X.pendingAccountId,onPick:X.pick,onClose:X.close,onInviteInstead:t?()=>{X.close(),K(X.channelType)}:void 0}),(0,q.jsx)(fe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function Qe(){return(0,q.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,q.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var $e={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function et(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||K(e)))}function tt(e,t){let n=new Set,r=[];for(let i of e){if(i.status===`revoked`)continue;let e=i.type.toLowerCase();n.has(e)||e===`a2a`&&!t||(n.add(e),r.push($e[e]??i.type))}return r}function nt(){let e=a(),t=V();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{B(e,{prompt:t})}},t)}export{nt as ContactsPageRoute};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-Dy5001j6.js";import{m as r,n as i,u as a}from"./chunk-5KNZJZUH-Bsoom5--.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./typography-DEI9Ra9z.js";import{t as d}from"./card-DRIctGVs.js";import{t as f}from"./createLucideIcon-CAM1RhH8.js";import{t as p}from"./arrow-left-W84B6oJL.js";import{t as m}from"./arrow-right-ChqGeAaW.js";import{S as h,a as g,b as _,c as v,f as y,l as b,u as x,x as S}from"./use-save-twilio-credentials-yqA7lnzq.js";import{t as C}from"./circle-check-big-DtV6IJuh.js";import{t as w}from"./ellipsis-vertical-qQRDY5dB.js";import{t as T}from"./link-2-DhyrrFaE.js";import{t as E}from"./loader-circle-DWWXcfTQ.js";import{t as D}from"./mail-DyUf40pu.js";import{t as O}from"./message-square-CHUvAEY9.js";import{t as k}from"./pencil-Cm5DdeRM.js";import{t as A}from"./plus-EJu6s6xR.js";import{t as j}from"./search-DL-2uX3K.js";import{t as M}from"./send-Bdmy_GSE.js";import{t as N}from"./user-plus-DjxxnQ8G.js";import{t as P}from"./tag-gOOX7fbA.js";import{t as F}from"./input-tXUFa7Eo.js";import{t as I}from"./modal-xr_vw1ZO.js";import{t as L}from"./panel-item-CJh95P_q.js";import{n as ee}from"./toast-BtFgiPe3.js";import{t as R}from"./confirm-dialog-j9o2h3xs.js";import{t as te}from"./assistant-identity-store-B51BX78j.js";import{C as ne}from"./sdk.gen-CjtCuSlS.js";import{d as re}from"./routes-DrfnNoYS.js";import{Gt as ie,Kt as ae,S as z,a as oe,b as se,x as ce}from"./react-query.gen-C7om930f.js";import{n as B}from"./conversation-navigation-Bf3cDRKh.js";import{t as le}from"./assistant-feature-flag-store-BvLDPeej.js";import{t as V}from"./use-active-assistant-id-JLsAfn3e.js";import{t as H}from"./detail-card-BElAV1cp.js";import{n as ue,t as de}from"./mobile-sidebar-drawer-BwCIAm23.js";import{i as fe,n as pe,r as U,t as me}from"./use-invite-link-dialog-TNGI1l4g.js";import{t as W}from"./mutation-error-YLfUU5XL.js";import{a as he,i as ge,n as _e,t as ve}from"./contacts-gateway-DRzp5PC6.js";var ye=f(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),be=f(`git-merge`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]),G=e(t(),1),xe=new Set([`slack`]);function K(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var q=l();function Se({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,G.useState)(null);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,q.jsxs)(`div`,{children:[i>0?(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,q.jsx)(J,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,q.jsx)(R,{open:i!==null,title:`Disconnect ${i?y(i):``}?`,message:`This clears the stored credentials for this channel. You can reconnect later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{i&&r&&r(i),a(null)},onCancel:()=>a(null)})]})}function J({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(x,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:y(e.key)}),a&&e.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),(0,q.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Y({role:e,contactType:t}){let{label:n,tone:r}=X(e,t);return(0,q.jsx)(P,{tone:r,children:n})}function X(e,t){switch(e){case`guardian`:return{label:`Guardian`,tone:`positive`};case`assistant`:return{label:`Assistant`,tone:`negative`};default:return t===`assistant`?{label:`Assistant`,tone:`negative`}:{label:`Human`,tone:`warning`}}}function Ce({assistantName:e,...t}){let n=b(e);return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(H,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,q.jsx)(Se,{...t})})]})}var Z=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function we(e){return Z.has(e)}function Te(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&K(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function Ee(e,t,n){let r=[],i=new Set;if(e)for(let t of e)t.id===`a2a`&&!n||(r.push(t),i.add(t.id));for(let e of t)e.status===`revoked`||i.has(e.type)||e.type===`a2a`&&!n||we(e.type)&&(r.push({id:e.type,label:e.type.charAt(0).toUpperCase()+e.type.slice(1),subtitle:``,icon:`help-circle`,supportsVerification:!1,setupMessages:{guardian:``,contact:``}}),i.add(e.type));return r}function Q({name:e,className:t,style:n}){switch(e){case`bot`:return(0,q.jsx)(h,{className:t,style:n});case`hash`:return(0,q.jsx)(S,{className:t,style:n});case`send`:return(0,q.jsx)(M,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(D,{className:t,style:n});case`message-square`:return(0,q.jsx)(O,{className:t,style:n});default:return(0,q.jsx)(ye,{className:t,style:n})}}function $({contactChannels:e,availableChannels:t,a2aEnabled:n,setupLabel:r=`Invite`,verifyLoading:i,verifySubject:a=`self`,onSetupChannel:o,onVerifyChannel:s,onRevokeChannel:c,onLinkAccount:l}){let[u,d]=(0,G.useState)(null),[f,p]=(0,G.useState)(null),m=new Map;for(let t of e)t.status!==`revoked`&&(m.has(t.type)||m.set(t.type,t));return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:Ee(t,e,n).map((e,t)=>{let n=m.get(e.id);return(0,q.jsxs)(`div`,{children:[t>0&&(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,q.jsx)(De,{info:e,existing:n,setupLabel:r,verifyLoading:i,onSetup:o?()=>o(e.id):void 0,onVerify:s&&e.supportsVerification?()=>d(e):void 0,onRevoke:c&&n?()=>p({channelId:n.id,channel:e}):void 0,onLinkAccount:l&&xe.has(e.id)?()=>l(e.id):void 0})]},e.id)})}),u&&(0,q.jsx)(R,{open:!0,title:`Verify ${u.label}`,message:a===`contact`?`This will mark this contact's ${u.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${u.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{u&&(s?.(u.id),d(null))},onCancel:()=>d(null)}),f&&(0,q.jsx)(R,{open:!0,title:`Revoke ${f.channel.label}`,message:`This will disconnect the verified channel. The contact will need to re-verify to use this channel again.`,confirmLabel:`Revoke`,destructive:!0,onConfirm:()=>{c?.(f.channelId,f.channel.id),p(null)},onCancel:()=>p(null)})]})}function De({info:e,existing:t,setupLabel:r,verifyLoading:i,onSetup:a,onVerify:o,onRevoke:s,onLinkAccount:c}){let l=Te(e,t);return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(Q,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:l.kind===`connected`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`verified`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,q.jsx)(C,{className:`h-3 w-3`}),`Verified`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`unverified`?(0,q.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o||i,children:i?`Verifying…`:`Verify`}):l.kind===`setup`?e.id===`a2a`?null:(0,q.jsxs)(q.Fragment,{children:[c?(0,q.jsxs)(n,{onClick:c,children:[(0,q.jsx)(T,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,q.jsx)(n,{variant:`outlined`,onClick:a,disabled:!a,children:r})]}):null})]})}function Oe(e){return(0,q.jsx)(ke,{...e},e.contact.id)}function ke({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,onSave:l,onDelete:u,onMerge:d,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h}){let g=e.displayName===`New Contact`,[_,v]=(0,G.useState)(g?``:e.displayName),[y,b]=(0,G.useState)(e.notes??``),[x,S]=(0,G.useState)(!1),C=_.trim(),w=y.trim(),T=g?``:e.displayName,E=e.notes??``,D=C!==T||w!==E,O=C.length>0&&D&&!t&&!r,k=g&&e.channels.length===0&&e.interactionCount===0,A=C||e.displayName,j=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:A,accessory:(0,q.jsx)(Y,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:j,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:_,onChange:e=>v(e.target.value),placeholder:`Give this human a name`,autoFocus:g,disabled:t||r,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{type:`button`,onClick:()=>l({displayName:C,notes:w}),disabled:!O,children:t?`Saving…`:`Save`}),d?(0,q.jsx)(n,{type:`button`,variant:`outlined`,onClick:d,disabled:!o||k||D||a||t||r,title:o?k?`Save this contact before merging`:D?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,q.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?u():S(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,q.jsx)(H,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,verifyLoading:i,verifySubject:`contact`,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h})}),(0,q.jsx)(R,{open:x,title:`Delete ${e.displayName}?`,message:`This will permanently delete this contact and all their channels. This action cannot be undone.`,confirmLabel:`Delete`,destructive:!0,onConfirm:()=>{S(!1),u()},onCancel:()=>S(!1)})]})}function Ae(e){return(0,q.jsx)(je,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function je({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,G.useState)(``),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{d&&!r.some(e=>e.id===d)&&f(null)},[r,d]);let m=(0,G.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=d?r.find(e=>e.id===d)??null:null,g=Ie(t);return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,q.jsxs)(I.Content,{size:`md`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsx)(I.Title,{icon:be,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,q.jsx)(I.Description,{children:h?`Channels and notes from the merged contact will move over. The merged contact will be deleted.`:`The contact you pick will be deleted. Its channels and notes will be added to this one.`})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[h?(0,q.jsx)(Pe,{survivor:t,donor:h}):r.length===0?(0,q.jsx)(Fe,{}):(0,q.jsx)(Me,{search:c,onSearch:l,candidates:m,onPick:f}),a?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,q.jsx)(I.Footer,{children:h?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,q.jsx)(p,{"aria-hidden":!0}),children:`Back`}),(0,q.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Me({search:e,onSearch:t,candidates:n,onPick:r}){return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(F,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,q.jsx)(j,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,q.jsx)(`div`,{className:`flex max-h-[320px] min-h-[120px] flex-col gap-1 overflow-y-auto`,role:`listbox`,"aria-label":`Select a contact to merge`,children:n.length===0?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,q.jsx)(Ne,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Ne({contact:e,onPick:t}){let n=Be(e).join(` | `)||void 0;return(0,q.jsx)(L,{asChild:!0,label:``,children:(0,q.jsx)(`button`,{type:`button`,onClick:t,role:`option`,"aria-selected":`false`,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,q.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function Pe({survivor:e,donor:t}){let n=Ie(e),{moved:r,duplicates:i}=ze(e,t);return(0,q.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,q.jsxs)(`li`,{children:[(0,q.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,q.jsx)(`li`,{children:r.length===0?`No new channels will move to ${n}.`:`${r.length} channel${r.length===1?``:`s`} will move to ${n}: ${r.map(e=>Re(e.type)).join(`, `)}.`}),i.length>0?(0,q.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,q.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,q.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Fe(){return(0,q.jsx)(u,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ie(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var Le={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Re(e){return Le[e.toLowerCase()]??e}function ze(e,t){let n=[],r=[];for(let i of t.channels)i.status!==`revoked`&&(e.channels.some(e=>e.type===i.type&&e.address.toLowerCase()===i.address.toLowerCase())?r.push(i):n.push(i));return{moved:n,duplicates:r}}function Be(e){let t=new Set,n=[];for(let r of e.channels){if(r.status===`revoked`)continue;let e=r.type.toLowerCase();t.has(e)||(t.add(e),n.push(Le[e]??r.type))}return n}function Ve({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,G.useState)(``),f=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,q.jsx)(d.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,q.jsxs)(d.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,q.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,q.jsx)(E,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(A,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,q.jsx)(He,{name:t.displayName?`${t.displayName} (You)`:`You`,role:t.role,channelTypes:t.channelTypes,selected:a?.kind===`contact`&&a.contactId===t.id,onClick:()=>o({kind:`contact`,contactId:t.id}),trailingIcon:`pencil`}):null,(0,q.jsx)(He,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,q.jsx)(F,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,q.jsx)(j,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,q.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[f.map(e=>(0,q.jsx)(He,{name:e.displayName,role:e.role,contactType:e.contactType,channelTypes:e.channelTypes,verified:e.verified,selected:a?.kind===`contact`&&a.contactId===e.id,onClick:()=>o({kind:`contact`,contactId:e.id}),trailingIcon:`more`},e.id)),f.length===0?(0,q.jsx)(`p`,{className:`px-3 py-4 text-center text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`No matching contacts`}):null]}):e?null:(0,q.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,q.jsx)(E,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(N,{"aria-hidden":!0}),children:`Add Contact`})]})})}function He({name:e,role:t,contactType:n,channelTypes:r,selected:i,onClick:a,trailingIcon:o,verified:s}){let c=r&&r.length>0?r.join(` | `):void 0;return(0,q.jsx)(L,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(k,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(w,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,q.jsxs)(`button`,{type:`button`,onClick:a,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,q.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,q.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,q.jsx)(P,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,q.jsx)(Y,{role:t,contactType:n})]})]})})}function Ue(e){return(0,q.jsx)(We,{...e},e.contact.id)}function We({contact:e,savePending:t,verifyPending:r,mergePending:i=!1,canMerge:a=!1,availableChannels:o,a2aEnabled:s,onSave:c,onMerge:l,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f,onGenerateInviteLink:p}){let m=e.displayName.startsWith(`vellum-principal-`),h=m?``:e.displayName,[g,_]=(0,G.useState)(h),[v,y]=(0,G.useState)(e.notes??``),b=g.trim(),x=v.trim(),S=b!==h.trim()||x!==(e.notes??``).trim(),C=S&&!t,w=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(H,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,q.jsx)(Y,{role:`guardian`}),compactAccessory:!0,subtitle:w,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Notes about yourself which AI will take into account`,disabled:t,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:x}),disabled:!C,children:t?`Saving…`:`Save`}),l?(0,q.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||S||i||t,title:a?S?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,q.jsx)(H,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,q.jsx)(U,{onClick:p}):null]})}function Ge(e,t){let n=t.trim().toLowerCase().replace(/^@/,``);return n===``?e:e.filter(e=>e.displayName.toLowerCase().includes(n)||e.username.toLowerCase().includes(n))}function Ke(e){let t=e.trim().split(/\s+/).filter(Boolean);return`${t[0]?.[0]??`?`}${t.length>1?t[t.length-1]?.[0]??``:``}`.toUpperCase()}function qe({open:e,channelLabel:t,contactName:r,accounts:i,loading:a,errorMessage:o,pendingAccountId:s,onPick:c,onClose:l,onInviteInstead:u}){let[d,f]=(0,G.useState)(``);(0,G.useEffect)(()=>{e&&f(``)},[e]);let p=(0,G.useMemo)(()=>Ge(i??[],d),[i,d]),h=s!=null;return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,q.jsxs)(I.Content,{size:`sm`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsxs)(I.Title,{children:[`Link `,t,` account`]}),(0,q.jsxs)(I.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[(0,q.jsx)(F,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,q.jsx)(j,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,q.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,q.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:(i?.length??0)===0?`No workspace members found.`:`No members match.`}):(0,q.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:h,className:`flex w-full cursor-pointer items-center gap-3 rounded-md px-2 py-2 text-left transition-colors hover:bg-[var(--surface-overlay)] disabled:cursor-not-allowed disabled:opacity-60`,children:[e.imageUrl?(0,q.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,q.jsx)(`span`,{"aria-hidden":`true`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--tag-bg-neutral)] text-body-small-emphasised text-[color:var(--content-secondary)]`,children:Ke(e.displayName)}),(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,q.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,q.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,q.jsxs)(I.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,q.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,q.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:h,children:[`Or send an invite instead`,(0,q.jsx)(m,{className:`h-3.5 w-3.5`})]}):null]})]})})}function Je({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,G.useState)(!1),o=c({mutationFn:n=>_e(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),ee.success(`Linked as @${t.account.username}`),r()}}),s=(0,G.useCallback)(()=>{o.reset(),a(!0)},[o]),l=(0,G.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,G.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:l,linkErrorMessage:o.error instanceof Error?o.error.message:o.error?`Failed to link account`:null,pendingAccountId:o.isPending?o.variables.account.id:null,pick:u}}var Ye=[{id:`slack`,label:`Slack`,subtitle:`Message your assistant from Slack`,icon:`hash`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Slack. Can you help me set that up?`,contact:`I'd like to verify a contact's Slack identity. Can you walk me through it?`}},{id:`telegram`,label:`Telegram`,subtitle:`Message your assistant from Telegram`,icon:`send`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Telegram. Can you help me set that up?`,contact:`I'd like to verify a contact's Telegram identity. Can you walk me through it?`}},{id:`phone`,label:`Phone Calling`,subtitle:`Call or text your assistant via phone`,icon:`phone`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian for phone calls. Can you help me set that up?`,contact:`I'd like to verify a contact's phone number. Can you help me set that up?`}}],Xe=[];function Ze({assistantId:e,onStartSetupConversation:t}){let n=le.use.a2aChannel(),a=te.use.name(),l=o(),[u]=r(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=me(e),[_,y]=(0,G.useState)(!1),[x,S]=(0,G.useState)(!1),C=b(a),w=(0,G.useMemo)(()=>({path:{assistant_id:e}}),[e]),T=ce(w),E=s({...se(w),enabled:!!e,select:e=>e.contacts}),D=pe({assistantId:e,onStartSetupConversation:t}),O=s({...oe({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await ne({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:Ye};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??Xe,k=E.data,A=(0,G.useMemo)(()=>k?.find(e=>e.role===`guardian`)??null,[k]),j=(0,G.useMemo)(()=>k?.filter(e=>e.role!==`guardian`)??[],[k]),M=(0,G.useMemo)(()=>p.kind===`contact`?k?.find(e=>e.id===p.contactId)??null:null,[k,p]),N=(0,G.useMemo)(()=>!k||!M?[]:k.filter(e=>e.id!==M.id&&e.role!==`guardian`),[k,M]),P=N.length>0,F=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{F.current||A&&(F.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let I=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),L=c({mutationFn:()=>ge(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{z(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:W(`Failed to create contact`),onSettled:()=>I()}),R=c({mutationFn:t=>ve(e,t),onSuccess:(e,t)=>{z(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:W(`Failed to delete contact`),onSettled:()=>I()}),B=c({mutationFn:({contactId:t,patch:n})=>ge(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{z(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:W(`Failed to save contact`),onSettled:()=>I()}),V=ae({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(z(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==r).map(e=>e.id===n.id?n:e)}:void 0),m({kind:`contact`,contactId:n.id})),S(!1),ee.success(`Contacts merged`)},onSettled:()=>I()}),H=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),V.reset()},[V]),U=(0,G.useCallback)(()=>{V.reset(),S(!0)},[V]),_e=(0,G.useCallback)(()=>{V.isPending||(S(!1),V.reset())},[V]),ye=ie({onSuccess:()=>I()}),be=(0,G.useCallback)((t,n)=>{ye.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[ye,e]),xe=(0,G.useCallback)(()=>{L.isPending||L.mutate()},[L]),K=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[O,t]),Se=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[O,t]),J=c({mutationFn:t=>he(e,t.channelId),onSuccess:()=>I(),onError:W(`Failed to verify channel`)}),Y=(0,G.useCallback)(e=>{if(!M)return;let t=M.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&J.mutate({channelId:t.id})},[M,J]),X=Je({assistantId:e,channelType:`slack`,contact:M?{id:M.id,displayName:M.displayName}:null,onLinked:I}),Z=s({...g(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),we=D.channels.some(e=>e.key===`slack`&&e.status===`ready`),Te=(0,G.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=R.isPending?R.variables:null,Q=(0,G.useMemo)(()=>M?B.isPending&&B.variables?.contactId===M.id?{...M,displayName:B.variables.patch.displayName,notes:B.variables.patch.notes}:M:null,[M,B.isPending,B.variables]);if(f)return(0,q.jsx)(i,{to:`${re.channels}?setup=${f}`,replace:!0});let $={loading:E.isLoading,assistantName:C,guardian:A?{id:A.id,displayName:A.displayName.startsWith(`vellum-principal-`)?``:A.displayName,role:A.role,channelTypes:tt(A.channels,n)}:null,regularContacts:j.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:tt(e.channels,n),verified:et(e.channels)})),selection:p,onAddContact:xe,addingContact:L.isPending};return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,q.jsx)(ue,{onClick:()=>y(!0)})}),(0,q.jsx)(de,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:H})}),(0,q.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,q.jsx)(Ve,{...$,onSelect:H})}),(0,q.jsx)(`section`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto`,children:p.kind===`assistant`||p.kind===`contact`&&p.contactId===Ee?(0,q.jsx)(Ce,{assistantName:C,channels:D.channels,pendingChannelKey:D.pendingChannelKey,onConnect:D.onSetup,onDisconnect:D.onDisconnect}):Q?Q.role===`guardian`?(0,q.jsx)(Ue,{contact:Q,savePending:B.isPending,verifyPending:J.isPending,mergePending:V.isPending,canMerge:P,availableChannels:O,a2aEnabled:n,onSave:e=>{B.mutate({contactId:Q.id,patch:e})},onMerge:U,onSetupChannel:t?Se:void 0,onVerifyChannel:Y,onRevokeChannel:be,onGenerateInviteLink:n?h.open:void 0}):(0,q.jsx)(Oe,{contact:Q,savePending:B.isPending,deletePending:R.isPending,verifyPending:J.isPending,mergePending:V.isPending,canMerge:P,availableChannels:O,a2aEnabled:n,onSave:e=>{B.mutate({contactId:Q.id,patch:e})},onDelete:()=>{R.mutate(Q.id)},onMerge:U,onSetupChannel:t?K:void 0,onVerifyChannel:Y,onRevokeChannel:be,onLinkAccount:we?Te:void 0}):(0,q.jsx)(Qe,{})}),M?(0,q.jsx)(Ae,{open:x,survivor:M,candidates:N,pending:V.isPending,errorMessage:V.error instanceof Error?V.error.message:V.error?`Failed to merge contacts`:null,onMerge:t=>V.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:_e}):null,(0,q.jsx)(qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:M?.displayName??``,accounts:Z.data,loading:Z.isLoading,errorMessage:Z.isError?`Couldn’t load the workspace roster. Check the Slack connection and try again.`:X.linkErrorMessage,pendingAccountId:X.pendingAccountId,onPick:X.pick,onClose:X.close,onInviteInstead:t?()=>{X.close(),K(X.channelType)}:void 0}),(0,q.jsx)(fe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function Qe(){return(0,q.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,q.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var $e={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function et(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||K(e)))}function tt(e,t){let n=new Set,r=[];for(let i of e){if(i.status===`revoked`)continue;let e=i.type.toLowerCase();n.has(e)||e===`a2a`&&!t||(n.add(e),r.push($e[e]??i.type))}return r}function nt(){let e=a(),t=V();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{B(e,{prompt:t})}},t)}export{nt as ContactsPageRoute};
|
package/dist/assets/{conversation-navigation-BqoIExAQ.js → conversation-navigation-Bf3cDRKh.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e}from"./routes-DrfnNoYS.js";import{t}from"./conversation-store-CTMy9QPV.js";import{i as n}from"./viewer-store-
|
|
1
|
+
import{d as e}from"./routes-DrfnNoYS.js";import{t}from"./conversation-store-CTMy9QPV.js";import{i as n}from"./viewer-store-DbIS4l8d.js";import{t as r}from"./haptics-C4p_Rjba.js";import{r as i}from"./subagent-store-DibRR9Ij.js";import{t as a}from"./workflow-store-zCcRcvi8.js";import{t as o}from"./conversation-selection-CJs3Fnse.js";import{t as s}from"./sound-manager-Bv6Sc7Ut.js";var c=`vellum:focus-composer`,l=!1;function u(){l=!0,typeof window<`u`&&window.dispatchEvent(new Event(c))}function d(){let e=l;return l=!1,e}var f=[`input`,`textarea`,`select`,`[contenteditable=""]`,`[contenteditable="true"]`,`[role="textbox"]`].join(`,`);function p(e){return!!e?.closest(f)}function m(e){return!!e?.closest(`a[href], button, summary`)}function h(e,t){return!(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey||e.isComposing||e.keyCode===229||typeof e.key!=`string`||e.key.length!==1||p(t)||e.key===` `&&m(t))}function g({value:e,text:t,selectionStart:n,selectionEnd:r}){let i=Math.max(0,Math.min(n??e.length,e.length)),a=Math.max(i,Math.min(r??i,e.length));return{value:e.slice(0,i)+t+e.slice(a),cursor:i+t.length}}function _(o,s,c){c?.silent||r.light(),n.getState().setMainView(`chat`),s!==t.getState().activeConversationId&&(i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads()),t.getState().setActiveConversationId(s),o(c?.messageId?e.conversationAtMessage(s,c.messageId):e.conversation(s))}function v(c,l){l?.silent||(r.light(),s().play(`new_conversation`)),n.getState().setMainView(`chat`),i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads();let d=o();t.getState().setActiveConversationId(d);let f=e.conversation(d);if(l?.prompt){let e=new URLSearchParams({prompt:l.prompt});f=`${f}?${e.toString()}`}c(f),u()}export{g as a,d as i,v as n,u as o,c as r,h as s,_ as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./useQuery-Bz-fbQ-m.js";import{r as t}from"./use-is-org-ready-
|
|
1
|
+
import{t as e}from"./useQuery-Bz-fbQ-m.js";import{r as t}from"./use-is-org-ready-3vHDbj4G.js";import{O as n}from"./react-query.gen-C7om930f.js";import{a as r,p as i,r as a,t as o}from"./conversation-list-fetchers-C6W8PkvR.js";var s=[],c=[];function l(n,i=!0){let a=t(),o=e({...r(n),enabled:i&&!!n&&a});return{conversations:o.data??s,isLoading:o.isLoading,isPending:o.isPending,isError:o.isError,error:o.error,refetch:()=>{o.refetch()}}}function u(n,r=!0){let i=t(),o=e({...a(n),enabled:r&&!!n&&i});return{conversations:o.data??s,isLoading:o.isLoading,isPending:o.isPending,isError:o.isError,refetch:()=>{o.refetch()}}}function d(n,r=!0){let a=t(),o=e({...i(n),enabled:r&&!!n&&a});return{conversations:o.data??s,isLoading:o.isLoading,isPending:o.isPending,isError:o.isError,refetch:()=>{o.refetch()}}}function f(n,r=!0){let i=t(),a=e({...o(n),enabled:r&&!!n&&i});return{conversations:a.data??s,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function p(r,i=!0){let a=t(),o=e({...n({path:{assistant_id:r??``}}),select:e=>e.groups,enabled:i&&!!r&&a,staleTime:3e4});return{conversationGroups:o.data??c,isLoading:o.isLoading}}export{d as a,l as i,u as n,p as r,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t}from"./capture-error-CqtAGHQu.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-Dy5001j6.js";import{n as i}from"./QueryClientProvider-CMu7CkQU.js";import{t as a}from"./useQuery-Bz-fbQ-m.js";import{t as o}from"./jsx-runtime-D3ZM-ToX.js";import{t as s}from"./card-DRIctGVs.js";import{t as c}from"./check-Dt2rQhdg.js";import{t as l}from"./chevron-down-BNidRDh1.js";import{B as u,P as d}from"./src-Da9g8qsW.js";import{t as f}from"./eye-off-DQ4xakzN.js";import{t as p}from"./eye-B_jBDDRn.js";import{t as m}from"./key-round-BFkuiQGH.js";import{t as h}from"./link-2-DhyrrFaE.js";import{t as g}from"./loader-circle-DWWXcfTQ.js";import{t as _}from"./plus-EJu6s6xR.js";import{t as v}from"./search-DL-2uX3K.js";import{t as y}from"./trash-2-DfVRfykB.js";import{t as b}from"./tag-gOOX7fbA.js";import{t as x}from"./popover-B-3isZCV.js";import{t as S}from"./input-tXUFa7Eo.js";import{t as C}from"./modal-xr_vw1ZO.js";import{n as w,t as T}from"./panel-item-CJh95P_q.js";import{n as E}from"./toast-BtFgiPe3.js";import{t as D}from"./confirm-dialog-j9o2h3xs.js";import{t as O}from"./assistant-identity-store-B51BX78j.js";import{dt as k,qr as A,ut as j}from"./sdk.gen-CjtCuSlS.js";import{r as M}from"./use-is-org-ready-Df3qfx4p.js";import{qt as N}from"./react-query.gen-C7om930f.js";import{n as P}from"./use-is-mobile-MmHo-OM6.js";import{t as F}from"./copy-to-clipboard-DgY-nZpm.js";import{t as I}from"./use-active-assistant-id-JLsAfn3e.js";import{n as ee,t as te}from"./add-credential-modal-4zzd0MPK.js";import{t as L}from"./not-found-Bh7ZsdAo.js";import{t as R}from"./detail-card-BElAV1cp.js";import{t as z}from"./use-supports-credentials-settings-3jGHR8fw.js";var B=e(n(),1),V=o(),H=1500;function U(e){if(!e)return``;try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function ne({credential:e,assistantId:t,generatingLink:n,deleting:r,onGenerateLink:i,onDelete:a}){let o=`${e.service}:${e.field}`,[c,l]=(0,B.useState)(!1),u=[e.alias?o:null,e.createdAt?`added ${U(e.createdAt)}`:null].filter(e=>!!e);return(0,V.jsx)(s.Root,{children:(0,V.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,V.jsx)(m,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.alias||o}),(0,V.jsx)(`div`,{className:`mt-0.5 flex min-w-0 items-center`,children:(0,V.jsx)(W,{assistantId:t,credential:e})}),u.length>0&&(0,V.jsx)(`p`,{className:`mt-0.5 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:u.join(` · `)})]}),(0,V.jsx)(`div`,{className:`shrink-0`,children:(0,V.jsx)(G,{name:o,open:c,onOpenChange:l,generatingLink:n,deleting:r,onGenerateLink:()=>{l(!1),i()},onDelete:()=>{l(!1),a()}})})]})})}function W({assistantId:e,credential:t}){let[n,r]=(0,B.useState)(null),[i,a]=(0,B.useState)(!1),[o,s]=(0,B.useState)(!1),l=(0,B.useRef)(null),d=(0,B.useRef)(0),m=`${t.service}:${t.field}`,h=(0,B.useCallback)(()=>{d.current++,r(null),a(!1),s(!1),l.current&&=(clearTimeout(l.current),null)},[]);(0,B.useEffect)(()=>{h()},[t.updatedAt,h]);let _=(0,B.useCallback)(async()=>{let n=++d.current;a(!0);try{let{data:i}=await k({path:{assistant_id:e},body:{service:t.service,field:t.field},throwOnError:!0});d.current===n&&r(i.value)}catch{d.current===n&&E.error(`Couldn't reveal ${m}.`)}finally{d.current===n&&a(!1)}},[e,t.service,t.field,m]),v=(0,B.useCallback)(()=>{n!=null&&F(n,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{s(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>s(!1),H)}})},[n]),y=n!==null;return t.hasSecret?(0,V.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 align-middle font-mono text-body-medium-lighter`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>y?h():void _(),disabled:i,"aria-label":y?`Hide value for ${m}`:`Reveal value for ${m}`,title:y?`Hide value`:`Click to reveal`,"data-private":!0,className:`min-w-0 truncate rounded-sm text-left transition-[filter,color] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)] ${y?`text-[var(--content-secondary)]`:`select-none text-[var(--content-tertiary)] blur-[3px] hover:blur-[2px]`}`,children:y?n:t.scrubbedValue}),i?(0,V.jsx)(g,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):y?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,onClick:v,"aria-label":`Copy value for ${m}`,title:`Copy value`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:o?(0,V.jsx)(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,V.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,V.jsx)(`button`,{type:`button`,onClick:h,"aria-label":`Hide value for ${m}`,title:`Hide value`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:(0,V.jsx)(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,V.jsx)(`button`,{type:`button`,onClick:()=>void _(),"aria-label":`Reveal value for ${m}`,title:`Click to reveal`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:(0,V.jsx)(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,V.jsx)(`span`,{className:`min-w-0 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:t.scrubbedValue})}function G({name:e,open:t,onOpenChange:n,generatingLink:i,deleting:a,onGenerateLink:o,onDelete:s}){let c=P(),u=i||a,d=(0,V.jsx)(r,{variant:`outlined`,rightIcon:(0,V.jsx)(l,{}),"aria-haspopup":`menu`,"aria-expanded":t,"aria-label":`Configure ${e}`,leftIcon:u?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):void 0,children:`Configure`});return c?(0,V.jsxs)(w.Root,{open:t,onOpenChange:n,children:[(0,V.jsx)(w.Trigger,{asChild:!0,children:d}),(0,V.jsxs)(w.Content,{children:[(0,V.jsx)(w.Header,{children:(0,V.jsx)(w.Title,{children:e})}),(0,V.jsxs)(w.Body,{children:[(0,V.jsx)(T,{icon:i?g:h,label:`Generate link`,onSelect:()=>{u||o()}}),(0,V.jsx)(T,{icon:a?g:y,label:`Delete`,onSelect:()=>{u||s()}})]})]})]}):(0,V.jsxs)(x.Root,{open:t,onOpenChange:n,children:[(0,V.jsx)(x.Trigger,{asChild:!0,children:d}),(0,V.jsxs)(x.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,V.jsx)(r,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:o,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:i?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,V.jsx)(h,{"aria-hidden":!0}),children:`Generate link`}),(0,V.jsx)(r,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:s,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:a?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,V.jsx)(y,{"aria-hidden":!0}),children:`Delete`})]})]})}function K(e){return e>0xe8d4a51000?e:e*1e3}async function q(e,t){let{data:n,response:r}=await A.post({url:`/v1/assistants/{assistant_id}/credential-requests`,path:{assistant_id:e},body:t});if(!r?.ok)throw Error(`Failed to create credential request: ${r?.status}`);return n}var J=6;function Y(){let e=I(),t=z(e),n=O.use.assistantId();return O.use.version()!==null&&n===e&&!t?(0,V.jsx)(L,{}):t?(0,V.jsx)(X,{}):null}function X(){let e=I(),n=i(),o=M(),c=ee(e),l=a({queryKey:c,queryFn:async()=>{let{data:t}=await j({path:{assistant_id:e},body:{},throwOnError:!0});return{credentials:t.credentials,managedCredentials:t.managedCredentials}},enabled:o,retry:t}),f=(0,B.useMemo)(()=>l.data?.credentials??[],[l.data]),p=(0,B.useMemo)(()=>l.data?.managedCredentials??[],[l.data]),y=N({onError:e=>{E.error(e.message||`Failed to delete credential`)}}),[x,w]=(0,B.useState)(!1),[T,O]=(0,B.useState)(`own`),[k,A]=(0,B.useState)(``),[P,L]=(0,B.useState)(null),[z,H]=(0,B.useState)(null),[U,W]=(0,B.useState)(null),G=y.isPending?`${y.variables?.body?.service}:${y.variables?.body?.field}`:null,Y=(0,B.useMemo)(()=>{let e=k.trim().toLowerCase();return e?f.filter(t=>[t.service,t.field,`${t.service}:${t.field}`,t.alias??``].join(` `).toLowerCase().includes(e)):f},[f,k]);(0,B.useEffect)(()=>{f.length<=J&&A(``)},[f.length]),(0,B.useEffect)(()=>{f.length===0&&p.length>0&&O(`managed`)},[f.length,p.length]);let X=()=>{let t=P;L(null),t&&y.mutate({path:{assistant_id:e},body:{service:t.service,field:t.field}},{onSuccess:()=>{n.invalidateQueries({queryKey:c}),E.success(`Deleted ${t.service}:${t.field}.`)}})},re=async t=>{let n=`${t.service}:${t.field}`;W(n);try{let r=await q(e,{service:t.service,field:t.field,label:t.alias??void 0});r.ok&&r.url?H({name:n,url:r.url,expiresAt:r.expiresAt??null}):E.error(r.error||`Failed to generate a one-time link`)}catch(e){E.error(e instanceof Error?e.message:`Failed to generate a one-time link`)}finally{W(null)}},ie=()=>{let e=z?.url;e&&F(e,{successMessage:`Link copied to clipboard.`,errorMessage:`Couldn't copy the link. Select it and copy manually.`})};if(l.isLoading)return(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(g,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})});let Z=f.length>0,Q=p.length>0,ae=f.length>J,$=T===`managed`&&Q;return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(R,{title:`Credentials`,subtitle:$?`Provided through your Vellum-managed integrations. These are read-only here.`:`Stored encrypted in your assistant's credential vault. Reveal a value on demand, or replace or delete it at any time.`,accessory:(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[Q?(0,V.jsx)(d,{items:[{value:`own`,label:`Your own`},{value:`managed`,label:`Managed`}],value:T,onChange:O,ariaLabel:`Credential source`}):null,!$&&Z?(0,V.jsx)(r,{type:`button`,variant:`primary`,size:`regular`,onClick:()=>w(!0),leftIcon:(0,V.jsx)(_,{"aria-hidden":!0}),children:`Add`}):null]}),children:$?(0,V.jsx)(`div`,{className:`space-y-2`,children:p.map(e=>(0,V.jsx)(s.Root,{children:(0,V.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,V.jsx)(m,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.provider}),(0,V.jsxs)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:[e.accountInfo??e.handle,` · `,e.status]})]}),(0,V.jsx)(b,{tone:`neutral`,children:`Managed`})]})},e.handle))}):(0,V.jsxs)(`div`,{className:`space-y-4`,children:[Z?(0,V.jsxs)(`div`,{className:`space-y-3`,children:[ae?(0,V.jsx)(S,{type:`text`,value:k,onChange:e=>A(e.target.value),placeholder:`Search credentials`,"aria-label":`Search credentials`,leftIcon:(0,V.jsx)(v,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,Y.length===0?(0,V.jsxs)(`p`,{className:`px-1 py-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No credentials matched “`,k.trim(),`”.`]}):(0,V.jsx)(`div`,{className:`space-y-2`,children:Y.map(t=>{let n=`${t.service}:${t.field}`;return(0,V.jsx)(ne,{credential:t,assistantId:e,generatingLink:U===n,deleting:G===n,onGenerateLink:()=>void re(t),onDelete:()=>L(t)},t.credentialId??n)})})]}):(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center px-6 py-12 text-center`,children:[(0,V.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,V.jsx)(m,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`,"aria-hidden":!0})}),(0,V.jsx)(`h3`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No credentials yet`}),(0,V.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Add an API key or token to let tools and integrations use it.`})]}),Z?null:(0,V.jsx)(r,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>w(!0),className:`w-full border-dashed`,leftIcon:(0,V.jsx)(_,{"aria-hidden":!0}),children:`Add Credential`})]})}),(0,V.jsx)(D,{open:P!==null,title:`Delete credential`,message:P?`Delete ${P.service}:${P.field}? Tools and integrations using it will lose access.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:X,onCancel:()=>L(null)}),(0,V.jsx)(te,{open:x,onClose:()=>w(!1)}),(0,V.jsx)(C.Root,{open:z!==null,onOpenChange:e=>{e||H(null)},children:(0,V.jsxs)(C.Content,{size:`sm`,children:[(0,V.jsxs)(C.Header,{children:[(0,V.jsx)(C.Title,{icon:h,children:`One-time credential link`}),(0,V.jsx)(C.Description,{children:z?`Send this link to whoever should provide ${z.name}. It works exactly once${z.expiresAt===null?``:` and expires ${new Date(K(z.expiresAt)).toLocaleString()}`}. Anyone with the link can set this credential, so share it over a trusted channel.`:``})]}),(0,V.jsx)(C.Body,{children:(0,V.jsx)(S,{label:`Link`,type:`text`,readOnly:!0,value:z?.url??``,onFocus:e=>e.currentTarget.select(),fullWidth:!0})}),(0,V.jsx)(C.Footer,{children:(0,V.jsx)(r,{type:`button`,size:`compact`,onClick:ie,leftIcon:(0,V.jsx)(u,{"aria-hidden":!0}),children:`Copy link`})})]})})]})}export{Y as CredentialsPage};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t}from"./capture-error-CqtAGHQu.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-Dy5001j6.js";import{n as i}from"./QueryClientProvider-CMu7CkQU.js";import{t as a}from"./useQuery-Bz-fbQ-m.js";import{t as o}from"./jsx-runtime-D3ZM-ToX.js";import{t as s}from"./card-DRIctGVs.js";import{t as c}from"./check-Dt2rQhdg.js";import{t as l}from"./chevron-down-BNidRDh1.js";import{B as u,P as d}from"./src-Da9g8qsW.js";import{t as f}from"./eye-off-DQ4xakzN.js";import{t as p}from"./eye-B_jBDDRn.js";import{t as m}from"./key-round-BFkuiQGH.js";import{t as h}from"./link-2-DhyrrFaE.js";import{t as g}from"./loader-circle-DWWXcfTQ.js";import{t as _}from"./plus-EJu6s6xR.js";import{t as v}from"./search-DL-2uX3K.js";import{t as y}from"./trash-2-DfVRfykB.js";import{t as b}from"./tag-gOOX7fbA.js";import{t as x}from"./popover-B-3isZCV.js";import{t as S}from"./input-tXUFa7Eo.js";import{t as C}from"./modal-xr_vw1ZO.js";import{n as w,t as T}from"./panel-item-CJh95P_q.js";import{n as E}from"./toast-BtFgiPe3.js";import{t as D}from"./confirm-dialog-j9o2h3xs.js";import{t as O}from"./assistant-identity-store-B51BX78j.js";import{dt as k,qr as A,ut as j}from"./sdk.gen-CjtCuSlS.js";import{r as M}from"./use-is-org-ready-3vHDbj4G.js";import{qt as N}from"./react-query.gen-C7om930f.js";import{n as P}from"./use-is-mobile-MmHo-OM6.js";import{t as F}from"./copy-to-clipboard-DgY-nZpm.js";import{t as I}from"./use-active-assistant-id-JLsAfn3e.js";import{n as ee,t as te}from"./add-credential-modal-4zzd0MPK.js";import{t as L}from"./not-found-Bh7ZsdAo.js";import{t as R}from"./detail-card-BElAV1cp.js";import{t as z}from"./use-supports-credentials-settings-3jGHR8fw.js";var B=e(n(),1),V=o(),H=1500;function U(e){if(!e)return``;try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function ne({credential:e,assistantId:t,generatingLink:n,deleting:r,onGenerateLink:i,onDelete:a}){let o=`${e.service}:${e.field}`,[c,l]=(0,B.useState)(!1),u=[e.alias?o:null,e.createdAt?`added ${U(e.createdAt)}`:null].filter(e=>!!e);return(0,V.jsx)(s.Root,{children:(0,V.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,V.jsx)(m,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.alias||o}),(0,V.jsx)(`div`,{className:`mt-0.5 flex min-w-0 items-center`,children:(0,V.jsx)(W,{assistantId:t,credential:e})}),u.length>0&&(0,V.jsx)(`p`,{className:`mt-0.5 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:u.join(` · `)})]}),(0,V.jsx)(`div`,{className:`shrink-0`,children:(0,V.jsx)(G,{name:o,open:c,onOpenChange:l,generatingLink:n,deleting:r,onGenerateLink:()=>{l(!1),i()},onDelete:()=>{l(!1),a()}})})]})})}function W({assistantId:e,credential:t}){let[n,r]=(0,B.useState)(null),[i,a]=(0,B.useState)(!1),[o,s]=(0,B.useState)(!1),l=(0,B.useRef)(null),d=(0,B.useRef)(0),m=`${t.service}:${t.field}`,h=(0,B.useCallback)(()=>{d.current++,r(null),a(!1),s(!1),l.current&&=(clearTimeout(l.current),null)},[]);(0,B.useEffect)(()=>{h()},[t.updatedAt,h]);let _=(0,B.useCallback)(async()=>{let n=++d.current;a(!0);try{let{data:i}=await k({path:{assistant_id:e},body:{service:t.service,field:t.field},throwOnError:!0});d.current===n&&r(i.value)}catch{d.current===n&&E.error(`Couldn't reveal ${m}.`)}finally{d.current===n&&a(!1)}},[e,t.service,t.field,m]),v=(0,B.useCallback)(()=>{n!=null&&F(n,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{s(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>s(!1),H)}})},[n]),y=n!==null;return t.hasSecret?(0,V.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 align-middle font-mono text-body-medium-lighter`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>y?h():void _(),disabled:i,"aria-label":y?`Hide value for ${m}`:`Reveal value for ${m}`,title:y?`Hide value`:`Click to reveal`,"data-private":!0,className:`min-w-0 truncate rounded-sm text-left transition-[filter,color] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)] ${y?`text-[var(--content-secondary)]`:`select-none text-[var(--content-tertiary)] blur-[3px] hover:blur-[2px]`}`,children:y?n:t.scrubbedValue}),i?(0,V.jsx)(g,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):y?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`button`,{type:`button`,onClick:v,"aria-label":`Copy value for ${m}`,title:`Copy value`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:o?(0,V.jsx)(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,V.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,V.jsx)(`button`,{type:`button`,onClick:h,"aria-label":`Hide value for ${m}`,title:`Hide value`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:(0,V.jsx)(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,V.jsx)(`button`,{type:`button`,onClick:()=>void _(),"aria-label":`Reveal value for ${m}`,title:`Click to reveal`,className:`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:(0,V.jsx)(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,V.jsx)(`span`,{className:`min-w-0 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:t.scrubbedValue})}function G({name:e,open:t,onOpenChange:n,generatingLink:i,deleting:a,onGenerateLink:o,onDelete:s}){let c=P(),u=i||a,d=(0,V.jsx)(r,{variant:`outlined`,rightIcon:(0,V.jsx)(l,{}),"aria-haspopup":`menu`,"aria-expanded":t,"aria-label":`Configure ${e}`,leftIcon:u?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):void 0,children:`Configure`});return c?(0,V.jsxs)(w.Root,{open:t,onOpenChange:n,children:[(0,V.jsx)(w.Trigger,{asChild:!0,children:d}),(0,V.jsxs)(w.Content,{children:[(0,V.jsx)(w.Header,{children:(0,V.jsx)(w.Title,{children:e})}),(0,V.jsxs)(w.Body,{children:[(0,V.jsx)(T,{icon:i?g:h,label:`Generate link`,onSelect:()=>{u||o()}}),(0,V.jsx)(T,{icon:a?g:y,label:`Delete`,onSelect:()=>{u||s()}})]})]})]}):(0,V.jsxs)(x.Root,{open:t,onOpenChange:n,children:[(0,V.jsx)(x.Trigger,{asChild:!0,children:d}),(0,V.jsxs)(x.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,V.jsx)(r,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:o,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:i?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,V.jsx)(h,{"aria-hidden":!0}),children:`Generate link`}),(0,V.jsx)(r,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:s,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:a?(0,V.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,V.jsx)(y,{"aria-hidden":!0}),children:`Delete`})]})]})}function K(e){return e>0xe8d4a51000?e:e*1e3}async function q(e,t){let{data:n,response:r}=await A.post({url:`/v1/assistants/{assistant_id}/credential-requests`,path:{assistant_id:e},body:t});if(!r?.ok)throw Error(`Failed to create credential request: ${r?.status}`);return n}var J=6;function Y(){let e=I(),t=z(e),n=O.use.assistantId();return O.use.version()!==null&&n===e&&!t?(0,V.jsx)(L,{}):t?(0,V.jsx)(X,{}):null}function X(){let e=I(),n=i(),o=M(),c=ee(e),l=a({queryKey:c,queryFn:async()=>{let{data:t}=await j({path:{assistant_id:e},body:{},throwOnError:!0});return{credentials:t.credentials,managedCredentials:t.managedCredentials}},enabled:o,retry:t}),f=(0,B.useMemo)(()=>l.data?.credentials??[],[l.data]),p=(0,B.useMemo)(()=>l.data?.managedCredentials??[],[l.data]),y=N({onError:e=>{E.error(e.message||`Failed to delete credential`)}}),[x,w]=(0,B.useState)(!1),[T,O]=(0,B.useState)(`own`),[k,A]=(0,B.useState)(``),[P,L]=(0,B.useState)(null),[z,H]=(0,B.useState)(null),[U,W]=(0,B.useState)(null),G=y.isPending?`${y.variables?.body?.service}:${y.variables?.body?.field}`:null,Y=(0,B.useMemo)(()=>{let e=k.trim().toLowerCase();return e?f.filter(t=>[t.service,t.field,`${t.service}:${t.field}`,t.alias??``].join(` `).toLowerCase().includes(e)):f},[f,k]);(0,B.useEffect)(()=>{f.length<=J&&A(``)},[f.length]),(0,B.useEffect)(()=>{f.length===0&&p.length>0&&O(`managed`)},[f.length,p.length]);let X=()=>{let t=P;L(null),t&&y.mutate({path:{assistant_id:e},body:{service:t.service,field:t.field}},{onSuccess:()=>{n.invalidateQueries({queryKey:c}),E.success(`Deleted ${t.service}:${t.field}.`)}})},re=async t=>{let n=`${t.service}:${t.field}`;W(n);try{let r=await q(e,{service:t.service,field:t.field,label:t.alias??void 0});r.ok&&r.url?H({name:n,url:r.url,expiresAt:r.expiresAt??null}):E.error(r.error||`Failed to generate a one-time link`)}catch(e){E.error(e instanceof Error?e.message:`Failed to generate a one-time link`)}finally{W(null)}},ie=()=>{let e=z?.url;e&&F(e,{successMessage:`Link copied to clipboard.`,errorMessage:`Couldn't copy the link. Select it and copy manually.`})};if(l.isLoading)return(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(g,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})});let Z=f.length>0,Q=p.length>0,ae=f.length>J,$=T===`managed`&&Q;return(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(R,{title:`Credentials`,subtitle:$?`Provided through your Vellum-managed integrations. These are read-only here.`:`Stored encrypted in your assistant's credential vault. Reveal a value on demand, or replace or delete it at any time.`,accessory:(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[Q?(0,V.jsx)(d,{items:[{value:`own`,label:`Your own`},{value:`managed`,label:`Managed`}],value:T,onChange:O,ariaLabel:`Credential source`}):null,!$&&Z?(0,V.jsx)(r,{type:`button`,variant:`primary`,size:`regular`,onClick:()=>w(!0),leftIcon:(0,V.jsx)(_,{"aria-hidden":!0}),children:`Add`}):null]}),children:$?(0,V.jsx)(`div`,{className:`space-y-2`,children:p.map(e=>(0,V.jsx)(s.Root,{children:(0,V.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,V.jsx)(m,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.provider}),(0,V.jsxs)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:[e.accountInfo??e.handle,` · `,e.status]})]}),(0,V.jsx)(b,{tone:`neutral`,children:`Managed`})]})},e.handle))}):(0,V.jsxs)(`div`,{className:`space-y-4`,children:[Z?(0,V.jsxs)(`div`,{className:`space-y-3`,children:[ae?(0,V.jsx)(S,{type:`text`,value:k,onChange:e=>A(e.target.value),placeholder:`Search credentials`,"aria-label":`Search credentials`,leftIcon:(0,V.jsx)(v,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,Y.length===0?(0,V.jsxs)(`p`,{className:`px-1 py-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No credentials matched “`,k.trim(),`”.`]}):(0,V.jsx)(`div`,{className:`space-y-2`,children:Y.map(t=>{let n=`${t.service}:${t.field}`;return(0,V.jsx)(ne,{credential:t,assistantId:e,generatingLink:U===n,deleting:G===n,onGenerateLink:()=>void re(t),onDelete:()=>L(t)},t.credentialId??n)})})]}):(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center px-6 py-12 text-center`,children:[(0,V.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,V.jsx)(m,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`,"aria-hidden":!0})}),(0,V.jsx)(`h3`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No credentials yet`}),(0,V.jsx)(`p`,{className:`mt-1 text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Add an API key or token to let tools and integrations use it.`})]}),Z?null:(0,V.jsx)(r,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>w(!0),className:`w-full border-dashed`,leftIcon:(0,V.jsx)(_,{"aria-hidden":!0}),children:`Add Credential`})]})}),(0,V.jsx)(D,{open:P!==null,title:`Delete credential`,message:P?`Delete ${P.service}:${P.field}? Tools and integrations using it will lose access.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:X,onCancel:()=>L(null)}),(0,V.jsx)(te,{open:x,onClose:()=>w(!1)}),(0,V.jsx)(C.Root,{open:z!==null,onOpenChange:e=>{e||H(null)},children:(0,V.jsxs)(C.Content,{size:`sm`,children:[(0,V.jsxs)(C.Header,{children:[(0,V.jsx)(C.Title,{icon:h,children:`One-time credential link`}),(0,V.jsx)(C.Description,{children:z?`Send this link to whoever should provide ${z.name}. It works exactly once${z.expiresAt===null?``:` and expires ${new Date(K(z.expiresAt)).toLocaleString()}`}. Anyone with the link can set this credential, so share it over a trusted channel.`:``})]}),(0,V.jsx)(C.Body,{children:(0,V.jsx)(S,{label:`Link`,type:`text`,readOnly:!0,value:z?.url??``,onFocus:e=>e.currentTarget.select(),fullWidth:!0})}),(0,V.jsx)(C.Footer,{children:(0,V.jsx)(r,{type:`button`,size:`compact`,onClick:ie,leftIcon:(0,V.jsx)(u,{"aria-hidden":!0}),children:`Copy link`})})]})})]})}export{Y as CredentialsPage};
|