@vellumai/web 0.11.2-dev.202608051734.355dff7 → 0.11.2-dev.202608051933.deffc0f
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/{AnimatePresence-DWbwz63e.js → AnimatePresence-DYJ0_Bk3.js} +1 -1
- package/dist/assets/{BundleConfirmPage-DYLY3nDm.js → BundleConfirmPage-V0d2zlXh.js} +1 -1
- package/dist/assets/{about-page-hRb6IdZ6.js → about-page-o0ZAOc3y.js} +1 -1
- package/dist/assets/access-C6QblWKw.js +1 -0
- package/dist/assets/account-page-By0i89qq.js +1 -0
- package/dist/assets/{acp-run-actions-BjsVHIf8.js → acp-run-actions-CyNeqOUd.js} +1 -1
- package/dist/assets/{acp-run-detail-panel-CD4lYudn.js → acp-run-detail-panel-D5ORadRs.js} +1 -1
- package/dist/assets/{acp-run-store-ZJ3pQsPd.js → acp-run-store-f3ZZ5vfh.js} +1 -1
- package/dist/assets/{activity-steps-panel-DZiWfoRC.js → activity-steps-panel-Chsx-fKi.js} +1 -1
- package/dist/assets/{add-credential-modal-G4RqUBYE.js → add-credential-modal-DCKFcBNK.js} +1 -1
- package/dist/assets/{add-credits-modal-DHWpxP-h.js → add-credits-modal-DJ9cd50F.js} +1 -1
- package/dist/assets/ai-page-BR76Z8wh.js +1 -0
- package/dist/assets/{animate-CIunG13_.js → animate-BbrG8x9N.js} +1 -1
- package/dist/assets/{animated-avatar-CkKsoJMb.js → animated-avatar-DGpGKFC7.js} +1 -1
- package/dist/assets/{api-D4Wq3tEJ.js → api-B02rrru9.js} +1 -1
- package/dist/assets/{api-key-screen-Dk_Erqj0.js → api-key-screen-BD9bEMKw.js} +1 -1
- package/dist/assets/{app-card-D_b7ajlP.js → app-card-62yIjexu.js} +1 -1
- package/dist/assets/{assistant-feature-flag-store-Bpiyb3UO.js → assistant-feature-flag-store-QGyc5F15.js} +1 -1
- package/dist/assets/{assistant-status-panel-DOlaZNjY.js → assistant-status-panel-7jk9yz-d.js} +1 -1
- package/dist/assets/auth-store-DQBqJ9Zf.js +2 -0
- package/dist/assets/{avatar-random-CAM6TfyJ.js → avatar-random-Cqr15AaZ.js} +1 -1
- package/dist/assets/{avatar-renderer-BnZamcjg.js → avatar-renderer-gGO0o7tZ.js} +1 -1
- package/dist/assets/{background-task-actions-Dqussw7U.js → background-task-actions-CEod2hv4.js} +1 -1
- package/dist/assets/{background-task-detail-panel-DhKq02MR.js → background-task-detail-panel-DxuIKotW.js} +1 -1
- package/dist/assets/{background-task-store-CrpkniEd.js → background-task-store-DBkMeElr.js} +1 -1
- package/dist/assets/{billing-page-CbkWoSp3.js → billing-page-esFxG7ch.js} +3 -3
- package/dist/assets/{bookmarks-page-CeEjDpy_.js → bookmarks-page-DIYhiWMy.js} +1 -1
- package/dist/assets/browser-DpbIFTGf.js +2 -0
- package/dist/assets/{build-state-GJ6TT3dL.js → build-state-RmkzjNSl.js} +1 -1
- package/dist/assets/{channels-page-route-p1mQhgYB.js → channels-page-route-U4_5sRxV.js} +1 -1
- package/dist/assets/{chat-avatar-sQ6tX-4v.js → chat-avatar-DJKAfDJW.js} +1 -1
- package/dist/assets/{chat-markdown-message-VgOMwk_z.js → chat-markdown-message-B36GrH1l.js} +1 -1
- package/dist/assets/checkout-continuation-BO0Ny9h3.js +1 -0
- package/dist/assets/checkout-page-CiDWTxWV.js +1 -0
- package/dist/assets/{client-feature-flag-store-DcNe2lt_.js → client-feature-flag-store-DujD6DL8.js} +1 -1
- package/dist/assets/{client-perf-C-MJwJKu.js → client-perf-CQuu6r5h.js} +1 -1
- package/dist/assets/{command-palette-DiL9Fymo.js → command-palette-DflsVP7s.js} +1 -1
- package/dist/assets/{command-palette-window-page-DIBHrw7U.js → command-palette-window-page-BEBH_7GI.js} +1 -1
- package/dist/assets/{community-page-TXu2RMFs.js → community-page-DOPJGC9b.js} +1 -1
- package/dist/assets/{composer-settings-D_Ypd9n6.js → composer-settings-DMFWvZRm.js} +1 -1
- package/dist/assets/{connect-page-BOwqoXDH.js → connect-page-D8l1oHxd.js} +1 -1
- package/dist/assets/{consent-controls-_cOoTVc3.js → consent-controls-DvwbwUOq.js} +1 -1
- package/dist/assets/consent-eo_quPak.js +1 -0
- package/dist/assets/{contacts-gateway-EHsHomBl.js → contacts-gateway-Dml5USpK.js} +1 -1
- package/dist/assets/{contacts-page-route-CuaE_MD2.js → contacts-page-route-DR3e4M5g.js} +1 -1
- package/dist/assets/conversation-cache-DWJJt1dq.js +1 -0
- package/dist/assets/conversation-list-fetchers-CVn_WHcU.js +1 -0
- package/dist/assets/{conversation-navigation-CxUK4Fhh.js → conversation-navigation-DnxNTtTG.js} +1 -1
- package/dist/assets/conversation-queries-Bf5aB-kP.js +1 -0
- package/dist/assets/{credentials-page-ClXliep6.js → credentials-page-Mf-beCDU.js} +1 -1
- package/dist/assets/{csv-preview-D5EScRyC.js → csv-preview-Cb3O6FJ3.js} +1 -1
- package/dist/assets/{debug-page-DdKMk_VT.js → debug-page-kCuKgzKW.js} +1 -1
- package/dist/assets/{deploy-dialogs-Sz7_4XGL.js → deploy-dialogs-CdgMLVKR.js} +1 -1
- package/dist/assets/{deploy-store-DfhOfBLF.js → deploy-store-DOEwnSYF.js} +1 -1
- package/dist/assets/{developer-page-DebBhzLg.js → developer-page-tGacR_j2.js} +1 -1
- package/dist/assets/{diagnostics-B8CfVwTx.js → diagnostics-zbC2olIU.js} +1 -1
- package/dist/assets/{doctor-handoff-store-DiF_qO2F.js → doctor-handoff-store-938U_PWE.js} +1 -1
- package/dist/assets/{document-viewer-container-Cez0vbTM.js → document-viewer-container-B3H5r6Vx.js} +2 -2
- package/dist/assets/{document-viewer-page-BtKjhRR1.js → document-viewer-page-BuqA-5AL.js} +1 -1
- package/dist/assets/effective-timezone-C6X5Vt_s.js +1 -0
- package/dist/assets/{emails-page-pbiiAg7j.js → emails-page-BvpdSrVe.js} +1 -1
- package/dist/assets/{feature-flag-catalog-DLSx2qti.js → feature-flag-catalog-Cigl5R2_.js} +1 -1
- package/dist/assets/{file-editor-DE-Dw4iG.js → file-editor-DsgRiCQJ.js} +1 -1
- package/dist/assets/first-run-scope-BQ2FTcs1.js +1 -0
- package/dist/assets/{funnel-events-Xu4h-ISW.js → funnel-events-Cqx7t1f1.js} +1 -1
- package/dist/assets/{general-page-BIC9lrJt.js → general-page-aweJSuPL.js} +1 -1
- package/dist/assets/{get-memory-stats-DEXAf_xr.js → get-memory-stats-u6Hkt6fb.js} +1 -1
- package/dist/assets/haptics-UlcaJKo6.js +2 -0
- package/dist/assets/{hatching-screen-NSDcJdso.js → hatching-screen-snGzVqU6.js} +1 -1
- package/dist/assets/home-page-route-CLmXyyQJ.js +1 -0
- package/dist/assets/{hosting-screen-DEvExAiv.js → hosting-screen-Byp-xUVG.js} +1 -1
- package/dist/assets/identity-BBf0d0zw.js +1 -0
- package/dist/assets/{identity-page-route-DXjKIUCT.js → identity-page-route-BPKi5m8E.js} +2 -2
- package/dist/assets/{index-C4yZJVsJ.js → index-DUBUiRly.js} +3 -3
- package/dist/assets/{ingest-DaEam2-h.js → ingest-CMGYRNYA.js} +1 -1
- package/dist/assets/{inspect-page-Dd9vRZFU.js → inspect-page-BEgoFImS.js} +4 -4
- package/dist/assets/{installed-plugins-query-DqNOfIzB.js → installed-plugins-query-BKLXToLk.js} +1 -1
- package/dist/assets/{integration-icon-CEj6of8V.js → integration-icon-B2RF_VOY.js} +1 -1
- package/dist/assets/integrations-page-BA2GnVoX.js +1 -0
- package/dist/assets/{intelligence-layout-CYOs9g5z.js → intelligence-layout-DqPt0nQG.js} +1 -1
- package/dist/assets/{invalidate-memory-queries-CmAE1n6k.js → invalidate-memory-queries-m_zGW-Q9.js} +1 -1
- package/dist/assets/{invalidate-plugin-queries-8-nVuyT-.js → invalidate-plugin-queries-DAB1Z6NN.js} +1 -1
- package/dist/assets/{latest-assistant-text-CAl0YM3t.js → latest-assistant-text-BrEYsqsD.js} +2 -2
- package/dist/assets/{library-detail-page-ZAksMCi8.js → library-detail-page-BcyLIWfW.js} +1 -1
- package/dist/assets/{library-page-C_bHG29P.js → library-page-CCO-P9Mf.js} +1 -1
- package/dist/assets/{local-runtime-upgrade-BtnfGFvX.js → local-runtime-upgrade-COfY4aeu.js} +1 -1
- package/dist/assets/{login-flow-BNaCTXwB.js → login-flow-C4Q6PuZ8.js} +1 -1
- package/dist/assets/login-page-DlRIP8KI.js +1 -0
- package/dist/assets/logout-page-D3L-Upv3.js +1 -0
- package/dist/assets/{logs-layout-CPq-uymB.js → logs-layout-B9bGBYsj.js} +1 -1
- package/dist/assets/{media-preview-DA0rS8cw.js → media-preview-BpeDmKF8.js} +1 -1
- package/dist/assets/{memory-page-route-B5B2Dxeb.js → memory-page-route-2MWgT0ZS.js} +2 -2
- package/dist/assets/{memory-router-playground-page-CJT6dCJJ.js → memory-router-playground-page-_xIMvJ1T.js} +1 -1
- package/dist/assets/{message-files-panel-C7fZmKu9.js → message-files-panel-Dnlf1NMr.js} +1 -1
- package/dist/assets/{messages-Bzoxmx-l.js → messages-BsebAxbJ.js} +2 -2
- package/dist/assets/{metric-card-Do3wNbPI.js → metric-card-Cn3Pxp_y.js} +1 -1
- package/dist/assets/{mobile-sidebar-drawer-BJd6tv4Y.js → mobile-sidebar-drawer-DLQTNJ0f.js} +1 -1
- package/dist/assets/native-anchor-DlLucCuN.js +1 -0
- package/dist/assets/navigation-resolver-G5hvXj7n.js +1 -0
- package/dist/assets/{not-found-PdwOnNTv.js → not-found-D7zMNeoP.js} +1 -1
- package/dist/assets/notifications-KDnxMuel.js +1 -0
- package/dist/assets/{notifications-page-BwstYa-9.js → notifications-page-DOvBG6MA.js} +1 -1
- package/dist/assets/{oauth-complete-page-BkgOY2_3.js → oauth-complete-page-BtAOD5L_.js} +1 -1
- package/dist/assets/{oauth-popup-complete-page-BBTQrcoD.js → oauth-popup-complete-page-BOhgbJpy.js} +1 -1
- package/dist/assets/{onboarding-layout-vvQBbcNH.js → onboarding-layout-BJGGWHC5.js} +1 -1
- package/dist/assets/open-workspace-file-DuM6YljK.js +2 -0
- package/dist/assets/page-empty-state-DMOmLL3O.js +1 -0
- package/dist/assets/pairing-page-DUGGmtF7.js +1 -0
- package/dist/assets/{pdf-file-preview-Cu8sMBOL.js → pdf-file-preview-lOeUDEY0.js} +1 -1
- package/dist/assets/{personality-page-DWEuqYvL.js → personality-page-BJ4zMN_J.js} +1 -1
- package/dist/assets/plans-page-DXkMROlG.js +1 -0
- package/dist/assets/platform-detection-DVo8Md11.js +6 -0
- package/dist/assets/{platform-login-notice-6RhKIp2V.js → platform-login-notice-QBjBs-bf.js} +1 -1
- package/dist/assets/platform-loopback-page-DHfJc1sP.js +1 -0
- package/dist/assets/{plugin-detail-page-Dn6mFgg9.js → plugin-detail-page-hhCC8N_y.js} +1 -1
- package/dist/assets/plugins-surface-CLevPrO2.js +1 -0
- package/dist/assets/{prefs-DCq3owwr.js → prefs-BmjzWWYT.js} +1 -1
- package/dist/assets/privacy-page-BY3uqWM6.js +1 -0
- package/dist/assets/privacy-screen-BqwK5OY5.js +1 -0
- package/dist/assets/provider-callback-page-CZdG8aZO.js +1 -0
- package/dist/assets/{provider-key-C6EBUeUy.js → provider-key-DttR9fDs.js} +1 -1
- package/dist/assets/provider-signup-page-ZZ8fcOTI.js +1 -0
- package/dist/assets/{provisioning-targets-P0R2EB_9.js → provisioning-targets-D0PQtccl.js} +1 -1
- package/dist/assets/push-registration-C51GEWeG.js +2 -0
- package/dist/assets/{quick-input-page-CJTRL6h3.js → quick-input-page-QikxtuDe.js} +1 -1
- package/dist/assets/react-query.gen-DYPHpypm.js +1 -0
- package/dist/assets/{remove-from-device-dialog-BgHwDgjL.js → remove-from-device-dialog-DPjq2HVH.js} +1 -1
- package/dist/assets/{research-mock-page-B--gQIPc.js → research-mock-page-DuGMQ8Gj.js} +1 -1
- package/dist/assets/{research-onboarding-route-S64sLFJm.js → research-onboarding-route-CJZ7RsRT.js} +3 -3
- package/dist/assets/{research-results-view-DZcYXLOV.js → research-results-view-C9to0vk2.js} +1 -1
- package/dist/assets/{retire-confirm-dialog-z1e5g-T2.js → retire-confirm-dialog-ChBsQoPV.js} +1 -1
- package/dist/assets/review-terms-screen-D2Nrs2g_.js +1 -0
- package/dist/assets/routes-XSuDx207.js +23 -0
- package/dist/assets/runtime-upgrade-banner-BDkDHeFs.js +2 -0
- package/dist/assets/{schedules-TiY9ctCJ.js → schedules-pP64xy_x.js} +1 -1
- package/dist/assets/{schedules-page-DRdg3lrg.js → schedules-page-Dl67yc8g.js} +1 -1
- package/dist/assets/sdk.gen-Dy1Bb8sS.js +6 -0
- package/dist/assets/{select-assistant-screen-Dry2a53v.js → select-assistant-screen-CX3yQoVF.js} +1 -1
- package/dist/assets/settings-layout-BeyEfawX.js +1 -0
- package/dist/assets/settings-navigation-m6QhETIa.js +1 -0
- package/dist/assets/{share-feedback-modal-BwZXYT6i.js → share-feedback-modal-CpPZwk_w.js} +1 -1
- package/dist/assets/{sidebar-tree-DqCdhWH0.js → sidebar-tree-CzLoiQ8C.js} +1 -1
- package/dist/assets/signup-page-DjhLpIIJ.js +1 -0
- package/dist/assets/{signup-shell-DQoX-73u.js → signup-shell-n2TrmmNi.js} +1 -1
- package/dist/assets/{site-favicon-Dy0dGKv4.js → site-favicon-BF7RhCjo.js} +1 -1
- package/dist/assets/{skill-detail-page-BBVw63ek.js → skill-detail-page-Bwtdr5Ze.js} +1 -1
- package/dist/assets/{skill-detail-panel-CZYcz8zJ.js → skill-detail-panel-DmmtSmZB.js} +1 -1
- package/dist/assets/{skills-CobQEp0Y.js → skills-BNvHTcYo.js} +1 -1
- package/dist/assets/{slack-setup-wizard-qz8Y2kbN.js → slack-setup-wizard-Dt8mhYhN.js} +1 -1
- package/dist/assets/{sound-manager-DdFhLSnM.js → sound-manager-C-FXxZhq.js} +1 -1
- package/dist/assets/{sounds-page-DFytZ95a.js → sounds-page-Chp1s4M-.js} +1 -1
- package/dist/assets/{start-screen-CAUO7iU0.js → start-screen-CH0iSBVN.js} +1 -1
- package/dist/assets/stt-language-picker-modal-Dy379lW1.js +1 -0
- package/dist/assets/{subagent-detail-panel-BiZcxtca.js → subagent-detail-panel-BdPfn7BV.js} +1 -1
- package/dist/assets/{subagent-store-CaYz_-6p.js → subagent-store-DwBJL4BM.js} +1 -1
- package/dist/assets/superpowers-page-C4B5FREg.js +1 -0
- package/dist/assets/{system-events-page-en3PLLA2.js → system-events-page-D3ZA138u.js} +1 -1
- package/dist/assets/{text-preview-GzzXU2th.js → text-preview-BmuS3Jnw.js} +1 -1
- package/dist/assets/{theme-stage-page-DfXinJSb.js → theme-stage-page-CpsFSfFV.js} +1 -1
- package/dist/assets/{threshold-presets-nk5pzNj0.js → threshold-presets-CQ7vI-Wq.js} +1 -1
- package/dist/assets/{tool-detail-panel-Duob5Onw.js → tool-detail-panel-0Sp3CHFJ.js} +1 -1
- package/dist/assets/{transcript-message-body-shared-B8tylrby.js → transcript-message-body-shared-C_Ijqrn5.js} +1 -1
- package/dist/assets/{trust-rules-api-yGqV5NSi.js → trust-rules-api-B4g_XMAO.js} +1 -1
- package/dist/assets/{upgrade-cancel-page-BO1g_2dY.js → upgrade-cancel-page-Dem0wnzu.js} +1 -1
- package/dist/assets/{upgrade-success-page-JLfUPRXK.js → upgrade-success-page-CnQyI3_u.js} +1 -1
- package/dist/assets/{use-app-theme-D47xo0HN.js → use-app-theme-BAGQ6WMq.js} +1 -1
- package/dist/assets/use-assistant-avatar-CqTCEKcn.js +1 -0
- package/dist/assets/{use-assistant-capability-DW1-G9gT.js → use-assistant-capability-CUEzubv5.js} +1 -1
- package/dist/assets/{use-assistant-identity-details-CYJJlhVI.js → use-assistant-identity-details-DlLs9xww.js} +1 -1
- package/dist/assets/{use-attachment-preview-xtU_G3Z8.js → use-attachment-preview-BZuYc4Vc.js} +2 -2
- package/dist/assets/use-attachment-squares-NEEA7Zuc.js +1 -0
- package/dist/assets/{use-avatar-accent-var-DpG_e3Ig.js → use-avatar-accent-var-CUL1kls8.js} +1 -1
- package/dist/assets/{use-bookmarks-BxeHtxr6.js → use-bookmarks-DRRtDvQB.js} +1 -1
- package/dist/assets/{use-bundled-avatar-components-DjSw8dxI.js → use-bundled-avatar-components-BzgMHQcH.js} +2 -2
- package/dist/assets/use-checkout-dismiss-refresh-DhzMx3v8.js +1 -0
- package/dist/assets/{use-command-palette-sections-Cuznzj_A.js → use-command-palette-sections-DmP2C3s9.js} +1 -1
- package/dist/assets/{use-edge-swipe-Cn0pKFX0.js → use-edge-swipe-DLpSYIqE.js} +1 -1
- package/dist/assets/{use-edge-swipe-back-DkPfMOdP.js → use-edge-swipe-back-Bbc-9rPY.js} +1 -1
- package/dist/assets/{use-edit-app-IZp8w7bB.js → use-edit-app-d9VPKqhM.js} +1 -1
- package/dist/assets/{use-effective-timezone-BK7XyO_V.js → use-effective-timezone-DixfAba2.js} +1 -1
- package/dist/assets/use-invite-link-dialog-CYX6yRMD.js +1 -0
- package/dist/assets/{use-is-org-ready-CzV7o_oQ.js → use-is-org-ready-XO3KhcpH.js} +1 -1
- package/dist/assets/{use-local-file-info-DaNZn1QT.js → use-local-file-info-BhIb0tEw.js} +1 -1
- package/dist/assets/use-onboarding-login-Fi5kWxZq.js +1 -0
- package/dist/assets/{use-platform-assistant-id-CfSQv1Jk.js → use-platform-assistant-id-CzGrGP7A.js} +1 -1
- package/dist/assets/{use-platform-gate-eiz8Kj6G.js → use-platform-gate-BO0EH_L6.js} +1 -1
- package/dist/assets/{use-reduced-motion-CznEG-5y.js → use-reduced-motion-Blpe7z4_.js} +1 -1
- package/dist/assets/use-return-to-short-circuit-CdGWtw01.js +1 -0
- package/dist/assets/{use-save-twilio-credentials-Dm0bhx_A.js → use-save-twilio-credentials-D2l1lp1p.js} +1 -1
- package/dist/assets/{use-skill-actions-BkMRz2kV.js → use-skill-actions-BJSFEj-2.js} +1 -1
- package/dist/assets/{use-skill-detail-files-c0kyL9qZ.js → use-skill-detail-files-DpE4ZhKF.js} +1 -1
- package/dist/assets/use-sticky-profiles-B6BkFXi7.js +1 -0
- package/dist/assets/{use-subagent-card-data-C7ZEUE5M.js → use-subagent-card-data-eoetJ052.js} +1 -1
- package/dist/assets/{use-supports-bookmarks-DYxpaoa_.js → use-supports-bookmarks-sSuQiAsQ.js} +1 -1
- package/dist/assets/use-supports-credentials-settings-BGk1AxJ5.js +1 -0
- package/dist/assets/{use-swipe-engine-VZ15d2Yh.js → use-swipe-engine--jntXWQT.js} +1 -1
- package/dist/assets/use-transcript-message-by-id-By23xt-c.js +1 -0
- package/dist/assets/{use-transcript-messages--IFYHvqK.js → use-transcript-messages-KoFuifkV.js} +1 -1
- package/dist/assets/{use-voice-sample-preview-CFjnL9wj.js → use-voice-sample-preview-DiXNs-im.js} +1 -1
- package/dist/assets/{utils-Dr_wOC7R.js → utils-B2hm7pwO.js} +1 -1
- package/dist/assets/{utils-CPWCnpba.js → utils-CThlho72.js} +1 -1
- package/dist/assets/{viewer-store-COyBTSXn.js → viewer-store-BdgeUnmH.js} +1 -1
- package/dist/assets/voice-list-BPgpjHIk.js +1 -0
- package/dist/assets/voice-page-BkCYY9At.js +1 -0
- package/dist/assets/{weather-forecast-display-C60AEmxC.js → weather-forecast-display-CR94vzni.js} +1 -1
- package/dist/assets/{welcome-screen-qydptjIT.js → welcome-screen-DukaWmAY.js} +1 -1
- package/dist/assets/{workflow-detail-panel-BiouTrdj.js → workflow-detail-panel-B2y2HOes.js} +1 -1
- package/dist/assets/{workflow-store-DPRUYCna.js → workflow-store-BPw35C7H.js} +1 -1
- package/dist/assets/workspace-page-Bi28RIvE.js +1 -0
- package/dist/assets/workspace-tree-query-Cp0iX1ma.js +1 -0
- package/dist/index.html +152 -153
- package/package.json +1 -1
- package/dist/assets/access-BSsaN2On.js +0 -1
- package/dist/assets/account-page-CSGAEOcI.js +0 -1
- package/dist/assets/ai-page-DU2k-A_I.js +0 -1
- package/dist/assets/auth-store-344lpSdW.js +0 -2
- package/dist/assets/browser-vie4LRYm.js +0 -2
- package/dist/assets/checkout-continuation-CnwFJDxg.js +0 -1
- package/dist/assets/checkout-page-CLOktjEp.js +0 -1
- package/dist/assets/consent-BpATHDME.js +0 -1
- package/dist/assets/conversation-cache-Beenngrg.js +0 -1
- package/dist/assets/conversation-list-fetchers-DCLRirbj.js +0 -1
- package/dist/assets/conversation-queries-SlTB6ibo.js +0 -1
- package/dist/assets/effective-timezone-C3ee9H8L.js +0 -1
- package/dist/assets/first-run-scope-BVltBd3g.js +0 -1
- package/dist/assets/haptics-Blk_K02O.js +0 -2
- package/dist/assets/home-page-route-DlOwKMZn.js +0 -1
- package/dist/assets/identity-CCWRQBqs.js +0 -1
- package/dist/assets/integrations-page-Ca6ZZDNB.js +0 -1
- package/dist/assets/login-page-uBp3mUse.js +0 -1
- package/dist/assets/logout-page-CvwqF-4Y.js +0 -1
- package/dist/assets/native-anchor-Qk379M-W.js +0 -1
- package/dist/assets/native-biometric-CbCUFdjC.js +0 -6
- package/dist/assets/navigation-resolver-y9MHLxam.js +0 -1
- package/dist/assets/notifications-CsTAeEjD.js +0 -1
- package/dist/assets/open-workspace-file-CpTrcRQg.js +0 -2
- package/dist/assets/page-empty-state-BKU_UJ5Z.js +0 -1
- package/dist/assets/pairing-page-DFly7SIf.js +0 -1
- package/dist/assets/plans-page-DKnsdczi.js +0 -1
- package/dist/assets/platform-detection-C5Xt8-QJ.js +0 -1
- package/dist/assets/platform-loopback-page-BQy56wr2.js +0 -1
- package/dist/assets/plugins-surface-CSW8ge7J.js +0 -1
- package/dist/assets/privacy-page-yZ8NOrgd.js +0 -1
- package/dist/assets/privacy-screen-Dn_PscxS.js +0 -1
- package/dist/assets/provider-callback-page-D9rRddgx.js +0 -1
- package/dist/assets/provider-signup-page-2swsxRIy.js +0 -1
- package/dist/assets/push-registration-23UkBXeo.js +0 -2
- package/dist/assets/react-query.gen-D0Q5L-je.js +0 -1
- package/dist/assets/review-terms-screen-F1o1JWC8.js +0 -1
- package/dist/assets/routes-4aGUKLYP.js +0 -23
- package/dist/assets/runtime-upgrade-banner-D8TSBqKf.js +0 -2
- package/dist/assets/sdk.gen-CsUgJyBR.js +0 -6
- package/dist/assets/settings-layout-DbpkQ0qP.js +0 -1
- package/dist/assets/settings-navigation-CjPoGbpD.js +0 -1
- package/dist/assets/signup-page-C8l2WsPS.js +0 -1
- package/dist/assets/superpowers-page-CWj7rGy1.js +0 -1
- package/dist/assets/use-assistant-avatar-C7ze3vgm.js +0 -1
- package/dist/assets/use-attachment-squares-BBxMZP7o.js +0 -1
- package/dist/assets/use-checkout-dismiss-refresh-Bfms2Ch3.js +0 -1
- package/dist/assets/use-invite-link-dialog-Dv3ig9W1.js +0 -1
- package/dist/assets/use-onboarding-login-jt_ejqRb.js +0 -1
- package/dist/assets/use-return-to-short-circuit-BFgPJjCM.js +0 -1
- package/dist/assets/use-sticky-profiles-DfDcQ-kB.js +0 -1
- package/dist/assets/use-supports-credentials-settings-DAFFDbZ4.js +0 -1
- package/dist/assets/use-transcript-message-by-id-CgKXNqmO.js +0 -1
- package/dist/assets/voice-list-CUXyi8jy.js +0 -1
- package/dist/assets/voice-page-B_vaHVZn.js +0 -1
- package/dist/assets/workspace-page-B4R0RGFq.js +0 -1
- package/dist/assets/workspace-tree-query-CCVpyMq8.js +0 -1
- /package/dist/assets/{a2a-invite-Cx2okV6a.js → a2a-invite-Bm584O1Q.js} +0 -0
- /package/dist/assets/{account-shell-BFwCqbiW.js → account-shell-BAxD1c33.js} +0 -0
- /package/dist/assets/{android-consumption-only-DT4SppcW.js → android-consumption-only-BhpxWm8b.js} +0 -0
- /package/dist/assets/{app-info-D-aHGnE-.js → app-info-CFDDITP8.js} +0 -0
- /package/dist/assets/{app-types-DyIrz4FQ.js → app-types-BaF0YViN.js} +0 -0
- /package/dist/assets/{apple-logo-_x2VgiOh.js → apple-logo-QxCmgL_8.js} +0 -0
- /package/dist/assets/{avatar-bundled-components-CwoY0fNX.js → avatar-bundled-components-CpUPtepI.js} +0 -0
- /package/dist/assets/{avatar-subagent-BzM5BMYE.js → avatar-subagent-CODNemgH.js} +0 -0
- /package/dist/assets/{avatar-svg-compositor-BWsnZx7I.js → avatar-svg-compositor-HKhsTl-B.js} +0 -0
- /package/dist/assets/{avatar-tone-Cnko8w64.js → avatar-tone-DJBf2301.js} +0 -0
- /package/dist/assets/{browser-timezone-Bt06ntni.js → browser-timezone-CIJphq8z.js} +0 -0
- /package/dist/assets/{by-tool-use-id-index-CsMrRoeV.js → by-tool-use-id-index-BNlydLFB.js} +0 -0
- /package/dist/assets/{chat-layout-slots-store-4BKpWVWP.js → chat-layout-slots-store-Df14mWpo.js} +0 -0
- /package/dist/assets/{chat-Bwc_Va4x.js → chat-qr1cXxyu.js} +0 -0
- /package/dist/assets/{conversation-selection-CxnP6yVT.js → conversation-selection-BQ2rwj3i.js} +0 -0
- /package/dist/assets/{conversation-store-pVTpsull.js → conversation-store-CRB7YBVE.js} +0 -0
- /package/dist/assets/{copy-to-clipboard-Bxl-OHim.js → copy-to-clipboard-Begy4gA7.js} +0 -0
- /package/dist/assets/{credential-entry-page-CHEnzRl_.js → credential-entry-page-Ctcscm1e.js} +0 -0
- /package/dist/assets/{detail-card-CIG8Ur34.js → detail-card-Jp-4dqnZ.js} +0 -0
- /package/dist/assets/{detail-drawer-NoEo8D31.js → detail-drawer-D_NmfOfo.js} +0 -0
- /package/dist/assets/{detail-panel-stop-button-BdEcyDIr.js → detail-panel-stop-button-D0pZKzCv.js} +0 -0
- /package/dist/assets/{detail-shell-Ber1o-Jd.js → detail-shell-Cfhmm8Ht.js} +0 -0
- /package/dist/assets/{dictation-overlay-page-B-ZiRDCN.js → dictation-overlay-page-B0G77Lxf.js} +0 -0
- /package/dist/assets/{edit-chat-session-DV3JHy7m.js → edit-chat-session-DKHJkqrM.js} +0 -0
- /package/dist/assets/{emoji-catalog-data-DFDbUp2o.js → emoji-catalog-data-wClcJhQd.js} +0 -0
- /package/dist/assets/{environment-store-DPPZjQBr.js → environment-store-CY9Rnrfi.js} +0 -0
- /package/dist/assets/{esm-CNeJzEKI.js → esm-DapZX4Er.js} +0 -0
- /package/dist/assets/{external-urls-DjcLrlMy.js → external-urls-DdNdyTc4.js} +0 -0
- /package/dist/assets/{eye-bbox-C3QvquSe.js → eye-bbox-CL9fV-US.js} +0 -0
- /package/dist/assets/{format-date-BVeYupnR.js → format-date-C_mIPxz2.js} +0 -0
- /package/dist/assets/{hard-navigate-9vglJJTR.js → hard-navigate-DqAmkZZE.js} +0 -0
- /package/dist/assets/{link-click-CncSkJ2L.js → link-click-DEZzmUsj.js} +0 -0
- /package/dist/assets/{machine-sizes-DwjJlMD9.js → machine-sizes-fKP6e9yR.js} +0 -0
- /package/dist/assets/{misc-DkLRKNc9.js → misc-D9--6g1n.js} +0 -0
- /package/dist/assets/{native-file-CzcnZ6ES.js → native-file-BTjo719k.js} +0 -0
- /package/dist/assets/{oauth-connection-utils-B_y5U8k5.js → oauth-connection-utils-DLsnIBSh.js} +0 -0
- /package/dist/assets/{oauth-popup-h31BDZz7.js → oauth-popup-DEdfcSaL.js} +0 -0
- /package/dist/assets/{onboarding-step-layout-CsE4NokU.js → onboarding-step-layout-Cm0PD1db.js} +0 -0
- /package/dist/assets/{onboarding-store-CHNXLvVd.js → onboarding-store-BllETOYg.js} +0 -0
- /package/dist/assets/{optimistic-lifecycle-DYPK-Ow7.js → optimistic-lifecycle-Zm4t_MWl.js} +0 -0
- /package/dist/assets/{page-shell-CTGK0BYQ.js → page-shell-BitkSRw8.js} +0 -0
- /package/dist/assets/{password-reset-page-wBsuzxY1.js → password-reset-page-i1oxLRuB.js} +0 -0
- /package/dist/assets/{pdf-preview-BUviTR8O.js → pdf-preview-BeENvA7P.js} +0 -0
- /package/dist/assets/{plugin-attribution-CqwqgBBt.js → plugin-attribution-C3Kyge4T.js} +0 -0
- /package/dist/assets/{plugins-page-BM7uyCVq.js → plugins-page-B6xzLuM-.js} +0 -0
- /package/dist/assets/{pointer-CbRUenvI.js → pointer-Di9xGve4.js} +0 -0
- /package/dist/assets/{prechat-BhksnvOi.js → prechat-D0kfFLHe.js} +0 -0
- /package/dist/assets/{preview-skeleton-SOAvtgSp.js → preview-skeleton-Dr_FZPD0.js} +0 -0
- /package/dist/assets/{profile-metadata-CV0PnVCc.js → profile-metadata-ABpt5sF3.js} +0 -0
- /package/dist/assets/{proxy-CJDjUn7E.js → proxy-lK4w-Bft.js} +0 -0
- /package/dist/assets/{public-asset-CXfLVmJu.js → public-asset-Di_CM-Tf.js} +0 -0
- /package/dist/assets/{radio-card-nav-B8eyoVlT.js → radio-card-nav-DJHt6k5l.js} +0 -0
- /package/dist/assets/{react-query.gen-nOsyoQ6U.js → react-query.gen-BtWMgf9p.js} +0 -0
- /package/dist/assets/{research-facts-DiJ-nQ1R.js → research-facts-BElRDNOP.js} +0 -0
- /package/dist/assets/{research-onboarding-persistence-D4qPVBNx.js → research-onboarding-persistence-BBFfx020.js} +0 -0
- /package/dist/assets/{sandbox-bridge-l7hxmFmg.js → sandbox-bridge-BNwuZJHp.js} +0 -0
- /package/dist/assets/{sdk.gen-CY1afY_n.js → sdk.gen-DGleJJuY.js} +0 -0
- /package/dist/assets/{setting-row-zsrcjZm0.js → setting-row-Dgoez0aa.js} +0 -0
- /package/dist/assets/{skills-page-D1fhMr6r.js → skills-page-BuFYHg6T.js} +0 -0
- /package/dist/assets/{status-badge-pill-DYBOsHm1.js → status-badge-pill-D7j-0FLr.js} +0 -0
- /package/dist/assets/{theme-preferences-BV8pm97v.js → theme-preferences-D7_-kTyl.js} +0 -0
- /package/dist/assets/{three-dot-indicator-kyZ3c9IW.js → three-dot-indicator-uhGzoECR.js} +0 -0
- /package/dist/assets/{tiptap-document-editor-DxfJdAvi.js → tiptap-document-editor-BV7KYOAB.js} +0 -0
- /package/dist/assets/{usage-redirect-page-Dko1TiFl.js → usage-redirect-page-DUkPPZtp.js} +0 -0
- /package/dist/assets/{use-active-assistant-id-BF7k_8wM.js → use-active-assistant-id-Ga7QpWoG.js} +0 -0
- /package/dist/assets/{use-bus-subscription-BpN_ExxB.js → use-bus-subscription-B-nzwF5c.js} +0 -0
- /package/dist/assets/{use-copy-to-clipboard-FnRYJ4Kv.js → use-copy-to-clipboard-Da76__Tl.js} +0 -0
- /package/dist/assets/{use-is-mobile-BZEx6kJ_.js → use-is-mobile-C0Jx9AxD.js} +0 -0
- /package/dist/assets/{voice-providers-note-D0NlUr34.js → voice-providers-note-BVDt6Sob.js} +0 -0
- /package/dist/assets/{workflow-status-KgjQhFZ8.js → workflow-status-9khXBfP6.js} +0 -0
- /package/dist/assets/{workspace-path-links-D6BeIXR9.js → workspace-path-links-C1A7ZMlC.js} +0 -0
- /package/dist/assets/{workspace-theme-tokens-PCjFiNBt.js → workspace-theme-tokens-hEF46cJM.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-DWxxMNqc.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-BeUa5Fd-.js";import{t as d}from"./card-q0GJX1HZ.js";import{t as f}from"./createLucideIcon-C1mdGPB9.js";import{t as p}from"./arrow-left-BikDV6F2.js";import{t as m}from"./arrow-right-UTImTy7b.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-Dm0bhx_A.js";import{t as C}from"./circle-check-big-DYlsR-nv.js";import{N as w}from"./src-CqJTlX1y.js";import{t as T}from"./ellipsis-vertical-ti9kRVDr.js";import{t as E}from"./link-2-DeNtOuO4.js";import{t as D}from"./loader-circle-D7A_UeUb.js";import{t as O}from"./mail-CgnilCq4.js";import{t as k}from"./message-square-DfH2BAPN.js";import{t as A}from"./pencil-CXI-g4K0.js";import{t as j}from"./plus-K9nUP77O.js";import{t as M}from"./search-DZBQ2Z4C.js";import{t as N}from"./send-JCA1n029.js";import{t as ee}from"./user-plus-CVFntILV.js";import{t as P}from"./tag-D1UeSlPe.js";import{t as F}from"./input-DF52UqKH.js";import{t as I}from"./modal-UqO42jBg.js";import{n as te}from"./toast-DFRsyumK.js";import{t as L}from"./confirm-dialog-CsxDM9Vd.js";import{t as ne}from"./assistant-identity-store-Dk3c04VV.js";import{C as re}from"./sdk.gen-CsUgJyBR.js";import{d as ie}from"./routes-gT_HcUb1.js";import{Gt as ae,Kt as oe,S as R,a as se,b as ce,x as le}from"./react-query.gen-D0Q5L-je.js";import{n as z}from"./conversation-navigation-CxUK4Fhh.js";import{t as ue}from"./assistant-feature-flag-store-Bpiyb3UO.js";import{t as B}from"./use-active-assistant-id-BF7k_8wM.js";import{t as V}from"./detail-card-CIG8Ur34.js";import{n as de,t as fe}from"./mobile-sidebar-drawer-BJd6tv4Y.js";import{a as H,i as pe,n as me,r as U,t as he}from"./use-invite-link-dialog-Dv3ig9W1.js";import{a as ge,i as _e,n as ve,t as ye}from"./contacts-gateway-EHsHomBl.js";var W=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)(L,{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)(V,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(V,{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)(N,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(O,{className:t,style:n});case`message-square`:return(0,q.jsx)(k,{className:t,style:n});default:return(0,q.jsx)(W,{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)(L,{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)(L,{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)(E,{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)(V,{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)(V,{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)(L,{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)(M,{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)(w,{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)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(j,{"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)(M,{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)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(ee,{"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)(w,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(A,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(T,{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)(V,{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)(V,{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)(M,{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=>ve(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),te.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=ue.use.a2aChannel(),a=ne.use.name(),l=o(),[u]=r(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=he(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=le(w),E=s({...ce(w),enabled:!!e,select:e=>e.contacts}),D=me({assistantId:e,onStartSetupConversation:t}),O=s({...se({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await re({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]),ee=N.length>0,P=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{P.current||A&&(P.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let F=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),I=c({mutationFn:()=>_e(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{R(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:H(`Failed to create contact`),onSettled:()=>F()}),L=c({mutationFn:t=>ye(e,t),onSuccess:(e,t)=>{R(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:H(`Failed to delete contact`),onSettled:()=>F()}),z=c({mutationFn:({contactId:t,patch:n})=>_e(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{R(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:H(`Failed to save contact`),onSettled:()=>F()}),B=oe({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(R(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),te.success(`Contacts merged`)},onSettled:()=>F()}),V=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),B.reset()},[B]),U=(0,G.useCallback)(()=>{B.reset(),S(!0)},[B]),ve=(0,G.useCallback)(()=>{B.isPending||(S(!1),B.reset())},[B]),W=ae({onSuccess:()=>F()}),be=(0,G.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,G.useCallback)(()=>{I.isPending||I.mutate()},[I]),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=>ge(e,t.channelId),onSuccess:()=>F(),onError:H(`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:F}),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=L.isPending?L.variables:null,Q=(0,G.useMemo)(()=>M?z.isPending&&z.variables?.contactId===M.id?{...M,displayName:z.variables.patch.displayName,notes:z.variables.patch.notes}:M:null,[M,z.isPending,z.variables]);if(f)return(0,q.jsx)(i,{to:`${ie.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:I.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)(de,{onClick:()=>y(!0)})}),(0,q.jsx)(fe,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(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:V})}),(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:z.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.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:z.isPending,deletePending:L.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onDelete:()=>{L.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:B.isPending,errorMessage:B.error instanceof Error?B.error.message:B.error?`Failed to merge contacts`:null,onMerge:t=>B.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:ve}):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)(pe,{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=B();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{z(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-DWxxMNqc.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-BeUa5Fd-.js";import{t as d}from"./card-q0GJX1HZ.js";import{t as f}from"./createLucideIcon-C1mdGPB9.js";import{t as p}from"./arrow-left-BikDV6F2.js";import{t as m}from"./arrow-right-UTImTy7b.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-D2l1lp1p.js";import{t as C}from"./circle-check-big-DYlsR-nv.js";import{N as w}from"./src-CqJTlX1y.js";import{t as T}from"./ellipsis-vertical-ti9kRVDr.js";import{t as E}from"./link-2-DeNtOuO4.js";import{t as D}from"./loader-circle-D7A_UeUb.js";import{t as O}from"./mail-CgnilCq4.js";import{t as k}from"./message-square-DfH2BAPN.js";import{t as A}from"./pencil-CXI-g4K0.js";import{t as j}from"./plus-K9nUP77O.js";import{t as M}from"./search-DZBQ2Z4C.js";import{t as N}from"./send-JCA1n029.js";import{t as ee}from"./user-plus-CVFntILV.js";import{t as P}from"./tag-D1UeSlPe.js";import{t as F}from"./input-DF52UqKH.js";import{t as I}from"./modal-UqO42jBg.js";import{n as te}from"./toast-DFRsyumK.js";import{t as L}from"./confirm-dialog-CsxDM9Vd.js";import{t as ne}from"./assistant-identity-store-Dk3c04VV.js";import{C as re}from"./sdk.gen-Dy1Bb8sS.js";import{d as ie}from"./routes-gT_HcUb1.js";import{Kt as ae,S as R,a as oe,b as se,qt as ce,x as le}from"./react-query.gen-DYPHpypm.js";import{n as z}from"./conversation-navigation-DnxNTtTG.js";import{t as ue}from"./assistant-feature-flag-store-QGyc5F15.js";import{t as B}from"./use-active-assistant-id-Ga7QpWoG.js";import{t as V}from"./detail-card-Jp-4dqnZ.js";import{n as de,t as fe}from"./mobile-sidebar-drawer-DLQTNJ0f.js";import{a as H,i as pe,n as me,r as U,t as he}from"./use-invite-link-dialog-CYX6yRMD.js";import{a as ge,i as _e,n as ve,t as ye}from"./contacts-gateway-Dml5USpK.js";var W=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)(L,{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)(V,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(V,{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)(N,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(O,{className:t,style:n});case`message-square`:return(0,q.jsx)(k,{className:t,style:n});default:return(0,q.jsx)(W,{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)(L,{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)(L,{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)(E,{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)(V,{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)(V,{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)(L,{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)(M,{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)(w,{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)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(j,{"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)(M,{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)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(ee,{"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)(w,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(A,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(T,{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)(V,{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)(V,{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)(M,{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=>ve(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),te.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=ue.use.a2aChannel(),a=ne.use.name(),l=o(),[u]=r(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=he(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=le(w),E=s({...se(w),enabled:!!e,select:e=>e.contacts}),D=me({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 re({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]),ee=N.length>0,P=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{P.current||A&&(P.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let F=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),I=c({mutationFn:()=>_e(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{R(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:H(`Failed to create contact`),onSettled:()=>F()}),L=c({mutationFn:t=>ye(e,t),onSuccess:(e,t)=>{R(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:H(`Failed to delete contact`),onSettled:()=>F()}),z=c({mutationFn:({contactId:t,patch:n})=>_e(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{R(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:H(`Failed to save contact`),onSettled:()=>F()}),B=ce({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(R(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),te.success(`Contacts merged`)},onSettled:()=>F()}),V=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),B.reset()},[B]),U=(0,G.useCallback)(()=>{B.reset(),S(!0)},[B]),ve=(0,G.useCallback)(()=>{B.isPending||(S(!1),B.reset())},[B]),W=ae({onSuccess:()=>F()}),be=(0,G.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,G.useCallback)(()=>{I.isPending||I.mutate()},[I]),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=>ge(e,t.channelId),onSuccess:()=>F(),onError:H(`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:F}),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=L.isPending?L.variables:null,Q=(0,G.useMemo)(()=>M?z.isPending&&z.variables?.contactId===M.id?{...M,displayName:z.variables.patch.displayName,notes:z.variables.patch.notes}:M:null,[M,z.isPending,z.variables]);if(f)return(0,q.jsx)(i,{to:`${ie.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:I.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)(de,{onClick:()=>y(!0)})}),(0,q.jsx)(fe,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(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:V})}),(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:z.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.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:z.isPending,deletePending:L.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onDelete:()=>{L.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:B.isPending,errorMessage:B.error instanceof Error?B.error.message:B.error?`Failed to merge contacts`:null,onMerge:t=>B.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:ve}):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)(pe,{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=B();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{z(e,{prompt:t})}},t)}export{nt as ContactsPageRoute};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{g as e,i as t,m as n,o as r,s as i}from"./conversation-list-fetchers-CVn_WHcU.js";async function a(t,n){await Promise.all([t.cancelQueries({queryKey:r(n)}),t.cancelQueries({queryKey:e(n)})])}function o(e,t){return e.getQueriesData({queryKey:r(t)}).map(([e,t])=>[e,t])}function s(e,t){for(let[n,r]of t)e.setQueryData(n,r)}async function c(t,n){await Promise.all([t.invalidateQueries({queryKey:r(n)}),t.invalidateQueries({queryKey:e(n)})])}function l(e,t,n){e.setQueryData(t,e=>{let t=e??[],r=n(t);return r===t?e:r})}function u(e,t,n){l(e,i(t),n)}function d(e,n,r){l(e,t(n),r)}function f(e,t,r){l(e,n(t),r)}function p(e,t,n){if(!t)return;let i=e.getQueriesData({queryKey:r(t)});for(let[t,r]of i){if(!r)continue;let i=n(r);i!==r&&e.setQueryData(t,i)}}function m(e,t,n){if(!t)return;let i=e.getQueriesData({queryKey:r(t)});for(let[,e]of i){let t=e?.find(e=>e.conversationId===n);if(t)return t}}function h(...e){let[t=[],...n]=e;if(n.every(e=>e.length===0))return t;let r=new Set(t.map(e=>e.conversationId)),i=[...t];for(let e of n)for(let t of e)r.has(t.conversationId)||(r.add(t.conversationId),i.push(t));return i}function g(e,t){return t?h(...e.getQueriesData({queryKey:r(t)}).map(([,e])=>e??[])):[]}function _(e,t,n,r){p(e,t,e=>{let t=!1,i=e.map(e=>e.conversationId===n?(t=!0,{...e,...r}):e);return t?i:e})}export{h as a,o as c,u as d,f,c as i,p as l,m as n,_ as o,g as r,s,a as t,d as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./queryOptions-CMSBCFOf.js";import{a as t,i as n,n as r,t as i}from"./api-errors-BmlR1gU1.js";import{$ as a,st as o}from"./sdk.gen-Dy1Bb8sS.js";import{T as s}from"./react-query.gen-DYPHpypm.js";import{t as c}from"./client-perf-CQuu6r5h.js";import{a as l}from"./diagnostics-zbC2olIU.js";function u(e){return e.surfacedAt==null?e.conversationType===`background`||e.conversationType===`scheduled`||e.groupId===`system:background`||e.groupId===`system:scheduled`:!1}function d(e){return e.conversationType===`scheduled`||e.groupId===`system:scheduled`}function f(e){return!e.hasUnseenLatestAssistantMessage&&!u(e)&&e.conversationId!=null&&e.latestAssistantMessageAt!=null}function p(e){return e.hasUnseenLatestAssistantMessage===!0&&!u(e)&&e.conversationId!=null}function m(e){return e.hasUnseenLatestAssistantMessage===!0&&!u(e)&&e.archivedAt==null}function h(e){return e.reduce((e,t)=>m(t)?e+1:e,0)}function g(e){let t=e.headers.get(`content-length`);if(t===null||t.trim()===``)return null;let n=Number(t);return Number.isFinite(n)?n:null}function _(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function v(e){return typeof e==`string`?e:void 0}function y(e){if(e)return{sourceChannel:e.sourceChannel,externalChatId:e.externalChatId,externalThreadId:e.externalThreadId,externalChatName:e.externalChatName,externalUserId:v(e.externalUserId),displayName:v(e.displayName),username:v(e.username),slackChannel:e.slackChannel?{channelId:e.slackChannel.channelId,name:e.slackChannel.name,link:e.slackChannel.link?.webUrl?{webUrl:e.slackChannel.link.webUrl}:void 0}:void 0,slackThread:e.slackThread?{channelId:e.slackThread.channelId,threadTs:e.slackThread.threadTs,link:e.slackThread.link?.appUrl||e.slackThread.link?.webUrl?{appUrl:e.slackThread.link.appUrl,webUrl:e.slackThread.link.webUrl}:void 0}:void 0}}function b(e){let t=e.assistantAttention,n=e.channelBinding?.sourceChannel??v(e.conversationOriginChannel);return{conversationId:e.id,title:e.title,createdAt:_(e.createdAt),lastMessageAt:_(e.lastMessageAt??e.updatedAt),hasUnseenLatestAssistantMessage:t?.hasUnseenLatestAssistantMessage,latestAssistantMessageAt:_(t?.latestAssistantMessageAt),lastSeenAssistantMessageAt:_(t?.lastSeenAssistantMessageAt),archivedAt:e.archivedAt,surfacedAt:_(e.surfacedAt),groupId:v(e.groupId),source:e.source,isPinned:e.isPinned,conversationType:e.conversationType,scheduleJobId:e.scheduleJobId,displayOrder:_(e.displayOrder),channelBinding:y(e.channelBinding),originChannel:n,isProcessing:e.isProcessing}}function x(e){return b(e)}var S=`conversation-list`;function C(e){return[S,e??``]}function w(e){return[S,e??``,`foreground`]}function T(e){return[S,e??``,`archived`]}function E(e){return[S,e??``,`background`]}function D(e){return[S,e??``,`scheduled`]}function O(e){return[S,e??``,`channel`]}function k(e){return s({path:{assistant_id:e??``}})}function A(e){return(t,n)=>(n[e]??0)-(t[e]??0)}var j=50,M=200;function N(e){return e.archiveStatus===`archived`?`archived`:e.conversationType===void 0?e.originChannel===void 0?`foreground`:`origin_channel`:e.conversationType}function P(e,t,n,r){l(`conversation_list_page_fetch`,{assistantId:e,offset:0,status:t.status,count:t.conversations.length,hasMore:t.hasMore,durationMs:t.durationMs,bytes:t.bytes,listKind:n,source:r})}async function F(e,t,o,s={}){let{conversationType:c,archiveStatus:u,originChannel:d}=s,f=performance.now(),{data:p,error:m,response:h}=await a({path:{assistant_id:e},query:{limit:j,offset:t,...c?{conversationType:c}:{},...u?{archiveStatus:u}:{},...d?{originChannel:d}:{}},throwOnError:!1});r(h,m,`Failed to list conversations.`);let _=Math.round(performance.now()-f);if(!h.ok){l(`conversation_list_page_fetch_error`,{assistantId:e,offset:t,status:h.status,durationMs:_,bytes:g(h),listKind:N(s),source:o});let r=n(m,h,`Failed to list conversations.`);throw new i(h.status,r)}return{conversations:(p?.conversations??[]).map(b),hasMore:p?.hasMore??!1,status:h.status,durationMs:_,bytes:g(h)}}async function I(e,t={}){let n=[],r=new Set,i=performance.now(),a=0,o=0,s=null,u=r=>{let u=Math.round(performance.now()-i);l(`conversation_list_drain`,{assistantId:e,outcome:r,pages:a,rows:n.length,totalMs:u,maxPageMs:o,totalBytes:s,listKind:N(t)}),c(`client_list.drain`,u,{outcome:r,pages:a,rows:n.length,max_page_ms:o,total_bytes:s,list_kind:N(t)})};try{for(let i=0;i<M;i++){let c=await F(e,i*j,`drain`,t);a++,o=Math.max(o,c.durationMs),c.bytes!==null&&(s=(s??0)+c.bytes),i===0&&P(e,c,N(t),`drain`);for(let e of c.conversations)r.has(e.conversationId)||(r.add(e.conversationId),n.push(e));if(!c.hasMore||c.conversations.length===0)break}}catch(e){throw u(`error`),e}return u(`ok`),n}async function L(e,t=`active`,n=`lastMessageAt`){let r=t===`active`?{}:{archiveStatus:t},i={...r,conversationType:`background`},[a,o]=await Promise.allSettled([I(e,r),I(e,i)]);if(a.status===`rejected`)throw a.reason;if(o.status===`rejected`)throw o.reason;let s=a.value,c=o.value,l=new Set,u=[];for(let e of[...s,...c])l.has(e.conversationId)||(l.add(e.conversationId),u.push(e));return u.sort(A(n)),u}async function R(e){return[...await I(e)].sort(A(`lastMessageAt`))}async function z(e){let{conversations:t}=await F(e,0,`existence_probe`);return t.length>0}async function B(e){return(await I(e,{conversationType:`background`})).filter(e=>!d(e)).sort(A(`lastMessageAt`))}async function V(e){return[...await I(e,{conversationType:`scheduled`})].sort(A(`lastMessageAt`))}async function H(e){return L(e,`archived`,`archivedAt`)}async function U(e,n){let{data:i,error:a,response:s}=await o({path:{assistant_id:e},throwOnError:!1,signal:n});if(r(s,a,`Failed to fetch unread conversation count.`),!s.ok){if(s.status===404)return null;throw t(a,s)}return i?.count??null}async function W(e){let t=await F(e,0,`first_page_refresh`);return P(e,t,`foreground`,`first_page_refresh`),{conversations:[...t.conversations].sort(A(`lastMessageAt`)),hasMore:t.hasMore}}async function G(e){let t=await F(e,0,`first_page_refresh`,{conversationType:`background`});return P(e,t,`background`,`first_page_refresh`),{conversations:t.conversations.filter(e=>!d(e)).sort(A(`lastMessageAt`)),hasMore:t.hasMore}}async function K(e){let t=await F(e,0,`first_page_refresh`,{conversationType:`scheduled`});return P(e,t,`scheduled`,`first_page_refresh`),{conversations:[...t.conversations].sort(A(`lastMessageAt`)),hasMore:t.hasMore}}var q=3e4;function J(t){return e({queryKey:w(t),queryFn:()=>R(t),staleTime:q})}function Y(t){return e({queryKey:E(t),queryFn:()=>B(t),staleTime:q})}function X(t){return e({queryKey:D(t),queryFn:()=>V(t),staleTime:q})}function Z(t){return e({queryKey:T(t),queryFn:()=>H(t),staleTime:q})}function Q(t){return e({queryKey:k(t),queryFn:({signal:e})=>U(t,e),staleTime:q,refetchOnWindowFocus:!1})}export{u as C,h as S,x as _,J as a,f as b,z as c,K as d,O as f,k as g,Q as h,E as i,G as l,D as m,T as n,C as o,X as p,Y as r,w as s,Z as t,W as u,g as v,d as w,m as x,p as y};
|
package/dist/assets/{conversation-navigation-CxUK4Fhh.js → conversation-navigation-DnxNTtTG.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e}from"./routes-gT_HcUb1.js";import{t}from"./conversation-store-
|
|
1
|
+
import{d as e}from"./routes-gT_HcUb1.js";import{t}from"./conversation-store-CRB7YBVE.js";import{i as n}from"./viewer-store-BdgeUnmH.js";import{t as r}from"./haptics-UlcaJKo6.js";import{r as i}from"./subagent-store-DwBJL4BM.js";import{t as a}from"./workflow-store-BPw35C7H.js";import{t as o}from"./conversation-selection-BQ2rwj3i.js";import{t as s}from"./sound-manager-C-FXxZhq.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./useQuery-Bz-fbQ-m.js";import{r}from"./use-is-org-ready-XO3KhcpH.js";import{k as i}from"./react-query.gen-DYPHpypm.js";import{S as a,a as o,h as s,p as c,r as l,t as u}from"./conversation-list-fetchers-CVn_WHcU.js";var d=e(t(),1),f=[],p=[];function m(e,t=!0){let i=r(),a=n({...o(e),enabled:t&&!!e&&i});return{conversations:a.data??f,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function h(e,t=!0){let i=r(),a=n({...l(e),enabled:t&&!!e&&i});return{conversations:a.data??f,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function g(e,t=!0){let i=r(),a=n({...c(e),enabled:t&&!!e&&i});return{conversations:a.data??f,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function _(e,t=!0){let i=r();return n({...s(e),enabled:t&&!!e&&i}).data??null}function v(e,t,n=!0){let r=_(e,n),i=(0,d.useMemo)(()=>a(t),[t]);return Math.max(0,r??i)}function y(e,t=!0){let i=r(),a=n({...u(e),enabled:t&&!!e&&i});return{conversations:a.data??f,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function b(e,t=!0){let a=r(),o=n({...i({path:{assistant_id:e??``}}),select:e=>e.groups,enabled:t&&!!e&&a,staleTime:3e4});return{conversationGroups:o.data??p,isLoading:o.isLoading}}export{g as a,m as i,h as n,v as o,b as r,y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t}from"./capture-error-D12Gu3Tx.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-DWxxMNqc.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-q0GJX1HZ.js";import{t as c}from"./check-DRqtWHWc.js";import{t as l}from"./chevron-down-BcYoJcfl.js";import{G as u,I as d,N as f,z as p}from"./src-CqJTlX1y.js";import{t as m}from"./eye-off-BoTYWQ24.js";import{t as h}from"./eye-UsxzX-cT.js";import{t as g}from"./key-round-DwjCZmHI.js";import{t as _}from"./link-2-DeNtOuO4.js";import{t as v}from"./loader-circle-D7A_UeUb.js";import{t as y}from"./plus-K9nUP77O.js";import{t as ee}from"./search-DZBQ2Z4C.js";import{t as b}from"./trash-2-CCIeETW1.js";import{t as te}from"./tag-D1UeSlPe.js";import{t as x}from"./popover-BdpFLBqi.js";import{t as S}from"./input-DF52UqKH.js";import{t as C}from"./modal-UqO42jBg.js";import{n as w}from"./toast-DFRsyumK.js";import{t as ne}from"./confirm-dialog-CsxDM9Vd.js";import{t as T}from"./assistant-identity-store-Dk3c04VV.js";import{Jr as E,dt as D,ut as O}from"./sdk.gen-CsUgJyBR.js";import{r as re}from"./use-is-org-ready-CzV7o_oQ.js";import{qt as k}from"./react-query.gen-D0Q5L-je.js";import{n as A}from"./use-is-mobile-BZEx6kJ_.js";import{t as ie}from"./assistant-feature-flag-store-Bpiyb3UO.js";import{t as j}from"./copy-to-clipboard-Bxl-OHim.js";import{t as M}from"./use-active-assistant-id-BF7k_8wM.js";import{n as N,t as P}from"./add-credential-modal-G4RqUBYE.js";import{t as F}from"./not-found-PdwOnNTv.js";import{t as I}from"./detail-card-CIG8Ur34.js";import{t as L}from"./use-supports-credentials-settings-DAFFDbZ4.js";var R=e(n(),1),z=o(),B=1500;function V(e){if(!e)return``;try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function H({credential:e,assistantId:t,generatingLink:n,deleting:r,onGenerateLink:i,onDelete:a}){let o=`${e.service}:${e.field}`,[c,l]=(0,R.useState)(!1),u=[e.alias?o:null,e.createdAt?`added ${V(e.createdAt)}`:null].filter(e=>!!e);return(0,z.jsx)(s.Root,{children:(0,z.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,z.jsx)(g,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.alias||o}),(0,z.jsx)(`div`,{className:`mt-0.5 flex min-w-0 items-center`,children:(0,z.jsx)(U,{assistantId:t,credential:e})}),u.length>0&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:u.join(` · `)})]}),(0,z.jsx)(`div`,{className:`shrink-0`,children:(0,z.jsx)(W,{name:o,open:c,onOpenChange:l,generatingLink:n,deleting:r,onGenerateLink:()=>{l(!1),i()},onDelete:()=>{l(!1),a()}})})]})})}function U({assistantId:e,credential:t}){let[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(!1),[o,s]=(0,R.useState)(!1),l=(0,R.useRef)(null),d=(0,R.useRef)(0),f=`${t.service}:${t.field}`,p=(0,R.useCallback)(()=>{d.current++,r(null),a(!1),s(!1),l.current&&=(clearTimeout(l.current),null)},[]);(0,R.useEffect)(()=>{p()},[t.updatedAt,p]);let g=(0,R.useCallback)(async()=>{let n=++d.current;a(!0);try{let{data:i}=await D({path:{assistant_id:e},body:{service:t.service,field:t.field},throwOnError:!0});d.current===n&&r(i.value)}catch{d.current===n&&w.error(`Couldn't reveal ${f}.`)}finally{d.current===n&&a(!1)}},[e,t.service,t.field,f]),_=(0,R.useCallback)(()=>{n!=null&&j(n,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{s(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>s(!1),B)}})},[n]),y=n!==null;return t.hasSecret?(0,z.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 align-middle font-mono text-body-medium-lighter`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>y?p():void g(),disabled:i,"aria-label":y?`Hide value for ${f}`:`Reveal value for ${f}`,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,z.jsx)(v,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):y?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:_,"aria-label":`Copy value for ${f}`,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,z.jsx)(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,z.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,z.jsx)(`button`,{type:`button`,onClick:p,"aria-label":`Hide value for ${f}`,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,z.jsx)(m,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(),"aria-label":`Reveal value for ${f}`,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,z.jsx)(h,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,z.jsx)(`span`,{className:`min-w-0 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:t.scrubbedValue})}function W({name:e,open:t,onOpenChange:n,generatingLink:i,deleting:a,onGenerateLink:o,onDelete:s}){let c=A(),u=i||a,p=(0,z.jsx)(r,{variant:`outlined`,rightIcon:(0,z.jsx)(l,{}),"aria-haspopup":`menu`,"aria-expanded":t,"aria-label":`Configure ${e}`,leftIcon:u?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):void 0,children:`Configure`});return c?(0,z.jsxs)(d.Root,{open:t,onOpenChange:n,children:[(0,z.jsx)(d.Trigger,{asChild:!0,children:p}),(0,z.jsxs)(d.Content,{children:[(0,z.jsx)(d.Header,{children:(0,z.jsx)(d.Title,{children:e})}),(0,z.jsxs)(d.Body,{children:[(0,z.jsx)(f,{icon:i?v:_,label:`Generate link`,onSelect:()=>{u||o()}}),(0,z.jsx)(f,{icon:a?v:b,label:`Delete`,onSelect:()=>{u||s()}})]})]})]}):(0,z.jsxs)(x.Root,{open:t,onOpenChange:n,children:[(0,z.jsx)(x.Trigger,{asChild:!0,children:p}),(0,z.jsxs)(x.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,z.jsx)(r,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:o,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:i?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):(0,z.jsx)(_,{"aria-hidden":!0}),children:`Generate link`}),(0,z.jsx)(r,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:s,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:a?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):(0,z.jsx)(b,{"aria-hidden":!0}),children:`Delete`})]})]})}function G(e){return e>0xe8d4a51000?e:e*1e3}async function K(e,t){let{data:n,response:r}=await E.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 q=6;function J(){let e=M(),t=L(e),n=T.use.assistantId();return T.use.version()!==null&&n===e&&!t?(0,z.jsx)(F,{}):t?(0,z.jsx)(Y,{}):null}function Y(){let e=M(),n=i(),o=re(),c=N(e),l=a({queryKey:c,queryFn:async()=>{let{data:t}=await O({path:{assistant_id:e},body:{},throwOnError:!0});return{credentials:t.credentials,managedCredentials:t.managedCredentials}},enabled:o,retry:t}),d=(0,R.useMemo)(()=>l.data?.credentials??[],[l.data]),f=ie.use.settingsDeveloperNav(),m=(0,R.useMemo)(()=>f?l.data?.managedCredentials??[]:[],[f,l.data]),h=k({onError:e=>{w.error(e.message||`Failed to delete credential`)}}),[b,x]=(0,R.useState)(!1),[T,E]=(0,R.useState)(`own`),[D,A]=(0,R.useState)(``),[F,L]=(0,R.useState)(null),[B,V]=(0,R.useState)(null),[U,W]=(0,R.useState)(null),J=h.isPending?`${h.variables?.body?.service}:${h.variables?.body?.field}`:null,Y=(0,R.useMemo)(()=>{let e=D.trim().toLowerCase();return e?d.filter(t=>[t.service,t.field,`${t.service}:${t.field}`,t.alias??``].join(` `).toLowerCase().includes(e)):d},[d,D]);(0,R.useEffect)(()=>{d.length<=q&&A(``)},[d.length]),(0,R.useEffect)(()=>{d.length===0&&m.length>0&&E(`managed`)},[d.length,m.length]);let ae=()=>{let t=F;L(null),t&&h.mutate({path:{assistant_id:e},body:{service:t.service,field:t.field}},{onSuccess:()=>{n.invalidateQueries({queryKey:c}),w.success(`Deleted ${t.service}:${t.field}.`)}})},X=async t=>{let n=`${t.service}:${t.field}`;W(n);try{let r=await K(e,{service:t.service,field:t.field,label:t.alias??void 0});r.ok&&r.url?V({name:n,url:r.url,expiresAt:r.expiresAt??null}):w.error(r.error||`Failed to generate a one-time link`)}catch(e){w.error(e instanceof Error?e.message:`Failed to generate a one-time link`)}finally{W(null)}},oe=()=>{let e=B?.url;e&&j(e,{successMessage:`Link copied to clipboard.`,errorMessage:`Couldn't copy the link. Select it and copy manually.`})};if(l.isLoading)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,z.jsx)(v,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})});let Z=d.length>0,Q=m.length>0,se=d.length>q,$=T===`managed`&&Q;return(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsx)(I,{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,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[Q?(0,z.jsx)(p,{items:[{value:`own`,label:`Your own`},{value:`managed`,label:`Managed`}],value:T,onChange:E,ariaLabel:`Credential source`}):null,!$&&Z?(0,z.jsx)(r,{type:`button`,variant:`primary`,size:`regular`,onClick:()=>x(!0),leftIcon:(0,z.jsx)(y,{"aria-hidden":!0}),children:`Add`}):null]}),children:$?(0,z.jsx)(`div`,{className:`space-y-2`,children:m.map(e=>(0,z.jsx)(s.Root,{children:(0,z.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,z.jsx)(g,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.provider}),(0,z.jsxs)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:[e.accountInfo??e.handle,` · `,e.status]})]}),(0,z.jsx)(te,{tone:`neutral`,children:`Managed`})]})},e.handle))}):(0,z.jsxs)(`div`,{className:`space-y-4`,children:[Z?(0,z.jsxs)(`div`,{className:`space-y-3`,children:[se?(0,z.jsx)(S,{type:`text`,value:D,onChange:e=>A(e.target.value),placeholder:`Search credentials`,"aria-label":`Search credentials`,leftIcon:(0,z.jsx)(ee,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,Y.length===0?(0,z.jsxs)(`p`,{className:`px-1 py-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No credentials matched “`,D.trim(),`”.`]}):(0,z.jsx)(`div`,{className:`space-y-2`,children:Y.map(t=>{let n=`${t.service}:${t.field}`;return(0,z.jsx)(H,{credential:t,assistantId:e,generatingLink:U===n,deleting:J===n,onGenerateLink:()=>void X(t),onDelete:()=>L(t)},t.credentialId??n)})})]}):(0,z.jsxs)(`div`,{className:`flex flex-col items-center justify-center px-6 py-12 text-center`,children:[(0,z.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,z.jsx)(g,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`,"aria-hidden":!0})}),(0,z.jsx)(`h3`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No credentials yet`}),(0,z.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,z.jsx)(r,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>x(!0),className:`w-full border-dashed`,leftIcon:(0,z.jsx)(y,{"aria-hidden":!0}),children:`Add Credential`})]})}),(0,z.jsx)(ne,{open:F!==null,title:`Delete credential`,message:F?`Delete ${F.service}:${F.field}? Tools and integrations using it will lose access.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:ae,onCancel:()=>L(null)}),(0,z.jsx)(P,{open:b,onClose:()=>x(!1)}),(0,z.jsx)(C.Root,{open:B!==null,onOpenChange:e=>{e||V(null)},children:(0,z.jsxs)(C.Content,{size:`sm`,children:[(0,z.jsxs)(C.Header,{children:[(0,z.jsx)(C.Title,{icon:_,children:`One-time credential link`}),(0,z.jsx)(C.Description,{children:B?`Send this link to whoever should provide ${B.name}. It works exactly once${B.expiresAt===null?``:` and expires ${new Date(G(B.expiresAt)).toLocaleString()}`}. Anyone with the link can set this credential, so share it over a trusted channel.`:``})]}),(0,z.jsx)(C.Body,{children:(0,z.jsx)(S,{label:`Link`,type:`text`,readOnly:!0,value:B?.url??``,onFocus:e=>e.currentTarget.select(),fullWidth:!0})}),(0,z.jsx)(C.Footer,{children:(0,z.jsx)(r,{type:`button`,size:`compact`,onClick:oe,leftIcon:(0,z.jsx)(u,{"aria-hidden":!0}),children:`Copy link`})})]})})]})}export{J as CredentialsPage};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t}from"./capture-error-D12Gu3Tx.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-DWxxMNqc.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-q0GJX1HZ.js";import{t as c}from"./check-DRqtWHWc.js";import{t as l}from"./chevron-down-BcYoJcfl.js";import{G as u,I as d,N as f,z as p}from"./src-CqJTlX1y.js";import{t as m}from"./eye-off-BoTYWQ24.js";import{t as h}from"./eye-UsxzX-cT.js";import{t as g}from"./key-round-DwjCZmHI.js";import{t as _}from"./link-2-DeNtOuO4.js";import{t as v}from"./loader-circle-D7A_UeUb.js";import{t as y}from"./plus-K9nUP77O.js";import{t as ee}from"./search-DZBQ2Z4C.js";import{t as b}from"./trash-2-CCIeETW1.js";import{t as te}from"./tag-D1UeSlPe.js";import{t as x}from"./popover-BdpFLBqi.js";import{t as S}from"./input-DF52UqKH.js";import{t as C}from"./modal-UqO42jBg.js";import{n as w}from"./toast-DFRsyumK.js";import{t as ne}from"./confirm-dialog-CsxDM9Vd.js";import{t as T}from"./assistant-identity-store-Dk3c04VV.js";import{Yr as E,dt as D,ft as O}from"./sdk.gen-Dy1Bb8sS.js";import{r as re}from"./use-is-org-ready-XO3KhcpH.js";import{Jt as k}from"./react-query.gen-DYPHpypm.js";import{n as A}from"./use-is-mobile-C0Jx9AxD.js";import{t as ie}from"./assistant-feature-flag-store-QGyc5F15.js";import{t as j}from"./copy-to-clipboard-Begy4gA7.js";import{t as M}from"./use-active-assistant-id-Ga7QpWoG.js";import{n as N,t as P}from"./add-credential-modal-DCKFcBNK.js";import{t as F}from"./not-found-D7zMNeoP.js";import{t as I}from"./detail-card-Jp-4dqnZ.js";import{t as L}from"./use-supports-credentials-settings-BGk1AxJ5.js";var R=e(n(),1),z=o(),B=1500;function V(e){if(!e)return``;try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function H({credential:e,assistantId:t,generatingLink:n,deleting:r,onGenerateLink:i,onDelete:a}){let o=`${e.service}:${e.field}`,[c,l]=(0,R.useState)(!1),u=[e.alias?o:null,e.createdAt?`added ${V(e.createdAt)}`:null].filter(e=>!!e);return(0,z.jsx)(s.Root,{children:(0,z.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,z.jsx)(g,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.alias||o}),(0,z.jsx)(`div`,{className:`mt-0.5 flex min-w-0 items-center`,children:(0,z.jsx)(U,{assistantId:t,credential:e})}),u.length>0&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:u.join(` · `)})]}),(0,z.jsx)(`div`,{className:`shrink-0`,children:(0,z.jsx)(W,{name:o,open:c,onOpenChange:l,generatingLink:n,deleting:r,onGenerateLink:()=>{l(!1),i()},onDelete:()=>{l(!1),a()}})})]})})}function U({assistantId:e,credential:t}){let[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(!1),[o,s]=(0,R.useState)(!1),l=(0,R.useRef)(null),d=(0,R.useRef)(0),f=`${t.service}:${t.field}`,p=(0,R.useCallback)(()=>{d.current++,r(null),a(!1),s(!1),l.current&&=(clearTimeout(l.current),null)},[]);(0,R.useEffect)(()=>{p()},[t.updatedAt,p]);let g=(0,R.useCallback)(async()=>{let n=++d.current;a(!0);try{let{data:i}=await O({path:{assistant_id:e},body:{service:t.service,field:t.field},throwOnError:!0});d.current===n&&r(i.value)}catch{d.current===n&&w.error(`Couldn't reveal ${f}.`)}finally{d.current===n&&a(!1)}},[e,t.service,t.field,f]),_=(0,R.useCallback)(()=>{n!=null&&j(n,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{s(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>s(!1),B)}})},[n]),y=n!==null;return t.hasSecret?(0,z.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 align-middle font-mono text-body-medium-lighter`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>y?p():void g(),disabled:i,"aria-label":y?`Hide value for ${f}`:`Reveal value for ${f}`,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,z.jsx)(v,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):y?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:_,"aria-label":`Copy value for ${f}`,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,z.jsx)(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,z.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,z.jsx)(`button`,{type:`button`,onClick:p,"aria-label":`Hide value for ${f}`,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,z.jsx)(m,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(),"aria-label":`Reveal value for ${f}`,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,z.jsx)(h,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,z.jsx)(`span`,{className:`min-w-0 truncate font-mono text-body-medium-lighter text-[var(--content-tertiary)]`,children:t.scrubbedValue})}function W({name:e,open:t,onOpenChange:n,generatingLink:i,deleting:a,onGenerateLink:o,onDelete:s}){let c=A(),u=i||a,p=(0,z.jsx)(r,{variant:`outlined`,rightIcon:(0,z.jsx)(l,{}),"aria-haspopup":`menu`,"aria-expanded":t,"aria-label":`Configure ${e}`,leftIcon:u?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):void 0,children:`Configure`});return c?(0,z.jsxs)(d.Root,{open:t,onOpenChange:n,children:[(0,z.jsx)(d.Trigger,{asChild:!0,children:p}),(0,z.jsxs)(d.Content,{children:[(0,z.jsx)(d.Header,{children:(0,z.jsx)(d.Title,{children:e})}),(0,z.jsxs)(d.Body,{children:[(0,z.jsx)(f,{icon:i?v:_,label:`Generate link`,onSelect:()=>{u||o()}}),(0,z.jsx)(f,{icon:a?v:b,label:`Delete`,onSelect:()=>{u||s()}})]})]})]}):(0,z.jsxs)(x.Root,{open:t,onOpenChange:n,children:[(0,z.jsx)(x.Trigger,{asChild:!0,children:p}),(0,z.jsxs)(x.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,z.jsx)(r,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:o,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:i?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):(0,z.jsx)(_,{"aria-hidden":!0}),children:`Generate link`}),(0,z.jsx)(r,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:s,disabled:u,className:`w-full justify-start rounded-none`,leftIcon:a?(0,z.jsx)(v,{className:`animate-spin`,"aria-hidden":!0}):(0,z.jsx)(b,{"aria-hidden":!0}),children:`Delete`})]})]})}function G(e){return e>0xe8d4a51000?e:e*1e3}async function K(e,t){let{data:n,response:r}=await E.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 q=6;function J(){let e=M(),t=L(e),n=T.use.assistantId();return T.use.version()!==null&&n===e&&!t?(0,z.jsx)(F,{}):t?(0,z.jsx)(Y,{}):null}function Y(){let e=M(),n=i(),o=re(),c=N(e),l=a({queryKey:c,queryFn:async()=>{let{data:t}=await D({path:{assistant_id:e},body:{},throwOnError:!0});return{credentials:t.credentials,managedCredentials:t.managedCredentials}},enabled:o,retry:t}),d=(0,R.useMemo)(()=>l.data?.credentials??[],[l.data]),f=ie.use.settingsDeveloperNav(),m=(0,R.useMemo)(()=>f?l.data?.managedCredentials??[]:[],[f,l.data]),h=k({onError:e=>{w.error(e.message||`Failed to delete credential`)}}),[b,x]=(0,R.useState)(!1),[T,E]=(0,R.useState)(`own`),[O,A]=(0,R.useState)(``),[F,L]=(0,R.useState)(null),[B,V]=(0,R.useState)(null),[U,W]=(0,R.useState)(null),J=h.isPending?`${h.variables?.body?.service}:${h.variables?.body?.field}`:null,Y=(0,R.useMemo)(()=>{let e=O.trim().toLowerCase();return e?d.filter(t=>[t.service,t.field,`${t.service}:${t.field}`,t.alias??``].join(` `).toLowerCase().includes(e)):d},[d,O]);(0,R.useEffect)(()=>{d.length<=q&&A(``)},[d.length]),(0,R.useEffect)(()=>{d.length===0&&m.length>0&&E(`managed`)},[d.length,m.length]);let ae=()=>{let t=F;L(null),t&&h.mutate({path:{assistant_id:e},body:{service:t.service,field:t.field}},{onSuccess:()=>{n.invalidateQueries({queryKey:c}),w.success(`Deleted ${t.service}:${t.field}.`)}})},X=async t=>{let n=`${t.service}:${t.field}`;W(n);try{let r=await K(e,{service:t.service,field:t.field,label:t.alias??void 0});r.ok&&r.url?V({name:n,url:r.url,expiresAt:r.expiresAt??null}):w.error(r.error||`Failed to generate a one-time link`)}catch(e){w.error(e instanceof Error?e.message:`Failed to generate a one-time link`)}finally{W(null)}},oe=()=>{let e=B?.url;e&&j(e,{successMessage:`Link copied to clipboard.`,errorMessage:`Couldn't copy the link. Select it and copy manually.`})};if(l.isLoading)return(0,z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,z.jsx)(v,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})});let Z=d.length>0,Q=m.length>0,se=d.length>q,$=T===`managed`&&Q;return(0,z.jsxs)(`div`,{className:`space-y-4`,children:[(0,z.jsx)(I,{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,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[Q?(0,z.jsx)(p,{items:[{value:`own`,label:`Your own`},{value:`managed`,label:`Managed`}],value:T,onChange:E,ariaLabel:`Credential source`}):null,!$&&Z?(0,z.jsx)(r,{type:`button`,variant:`primary`,size:`regular`,onClick:()=>x(!0),leftIcon:(0,z.jsx)(y,{"aria-hidden":!0}),children:`Add`}):null]}),children:$?(0,z.jsx)(`div`,{className:`space-y-2`,children:m.map(e=>(0,z.jsx)(s.Root,{children:(0,z.jsxs)(s.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,z.jsx)(g,{className:`h-5 w-5 shrink-0 text-[var(--content-secondary)]`,"aria-hidden":!0}),(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:e.provider}),(0,z.jsxs)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:[e.accountInfo??e.handle,` · `,e.status]})]}),(0,z.jsx)(te,{tone:`neutral`,children:`Managed`})]})},e.handle))}):(0,z.jsxs)(`div`,{className:`space-y-4`,children:[Z?(0,z.jsxs)(`div`,{className:`space-y-3`,children:[se?(0,z.jsx)(S,{type:`text`,value:O,onChange:e=>A(e.target.value),placeholder:`Search credentials`,"aria-label":`Search credentials`,leftIcon:(0,z.jsx)(ee,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,Y.length===0?(0,z.jsxs)(`p`,{className:`px-1 py-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No credentials matched “`,O.trim(),`”.`]}):(0,z.jsx)(`div`,{className:`space-y-2`,children:Y.map(t=>{let n=`${t.service}:${t.field}`;return(0,z.jsx)(H,{credential:t,assistantId:e,generatingLink:U===n,deleting:J===n,onGenerateLink:()=>void X(t),onDelete:()=>L(t)},t.credentialId??n)})})]}):(0,z.jsxs)(`div`,{className:`flex flex-col items-center justify-center px-6 py-12 text-center`,children:[(0,z.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,z.jsx)(g,{className:`h-6 w-6 text-[var(--content-disabled)] dark:text-[var(--content-default)]`,"aria-hidden":!0})}),(0,z.jsx)(`h3`,{className:`mt-4 text-title-small text-[var(--content-default)]`,children:`No credentials yet`}),(0,z.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,z.jsx)(r,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>x(!0),className:`w-full border-dashed`,leftIcon:(0,z.jsx)(y,{"aria-hidden":!0}),children:`Add Credential`})]})}),(0,z.jsx)(ne,{open:F!==null,title:`Delete credential`,message:F?`Delete ${F.service}:${F.field}? Tools and integrations using it will lose access.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:ae,onCancel:()=>L(null)}),(0,z.jsx)(P,{open:b,onClose:()=>x(!1)}),(0,z.jsx)(C.Root,{open:B!==null,onOpenChange:e=>{e||V(null)},children:(0,z.jsxs)(C.Content,{size:`sm`,children:[(0,z.jsxs)(C.Header,{children:[(0,z.jsx)(C.Title,{icon:_,children:`One-time credential link`}),(0,z.jsx)(C.Description,{children:B?`Send this link to whoever should provide ${B.name}. It works exactly once${B.expiresAt===null?``:` and expires ${new Date(G(B.expiresAt)).toLocaleString()}`}. Anyone with the link can set this credential, so share it over a trusted channel.`:``})]}),(0,z.jsx)(C.Body,{children:(0,z.jsx)(S,{label:`Link`,type:`text`,readOnly:!0,value:B?.url??``,onFocus:e=>e.currentTarget.select(),fullWidth:!0})}),(0,z.jsx)(C.Footer,{children:(0,z.jsx)(r,{type:`button`,size:`compact`,onClick:oe,leftIcon:(0,z.jsx)(u,{"aria-hidden":!0}),children:`Copy link`})})]})})]})}export{J as CredentialsPage};
|
|
@@ -1,4 +1,4 @@
|
|
|
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{t as r}from"./typography-BeUa5Fd-.js";import{s as i}from"./src-CqJTlX1y.js";import{t as a}from"./preview-error-Cd4DNvvi.js";import{t as o}from"./preview-skeleton-
|
|
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{t as r}from"./typography-BeUa5Fd-.js";import{s as i}from"./src-CqJTlX1y.js";import{t as a}from"./preview-error-Cd4DNvvi.js";import{t as o}from"./preview-skeleton-Dr_FZPD0.js";var s=e(t(),1),c=[`,`,`;`,` `];function l(e){let t=e.trim();return t===``?!1:/^[+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?$/.test(t)}function u(e,t){let n=0,r=!1,i=!1;for(let a=0;a<e.length;a+=1){let o=e[a];if(r){o===`"`&&(e[a+1]===`"`?a+=1:r=!1),i=!0;continue}if(o===`"`){r=!0,i=!0;continue}if(o===`
|
|
2
2
|
`||o===`\r`){if(i)break;continue}o===t&&(n+=1),i=!0}return n}function d(e){let t=c[0],n=0;for(let r of c){let i=u(e,r);i>n&&(t=r,n=i)}return t}function f(e,t){let n=[],r=[],i=``,a=!1,o=!1,s=()=>{r.push(i),i=``,r.length===1&&r[0]===``||n.push(r),r=[]};for(let c=0;c<e.length;c+=1){let l=e[c];if(a){l===`"`?e[c+1]===`"`?(i+=`"`,c+=1):a=!1:i+=l;continue}if(l===`"`&&i===``){a=!0;continue}if(l===t){r.push(i),i=``;continue}if(l===`\r`||l===`
|
|
3
3
|
`){if(l===`\r`&&e[c+1]===`
|
|
4
4
|
`&&(c+=1),s(),n.length>=5e3)return o=e.slice(c+1).trim()!==``,{records:n,truncated:o};continue}i+=l}return(i!==``||r.length>0)&&s(),{records:n,truncated:o}}function p(e){let t=e[0];return!t||e.length<2||t.some(e=>e.trim()===``||l(e))?!1:e.slice(1).some(e=>e.some(e=>l(e)))}function m(e){let t=e.charCodeAt(0)===65279?e.slice(1):e;if(t.trim()===``)return{headers:null,rows:[],truncated:!1};let{records:n,truncated:r}=f(t,d(t));if(n.length===0)return{headers:null,rows:[],truncated:r};let i=n.reduce((e,t)=>Math.max(e,t.length),0),a=Math.min(i,200),o=i>200,s=n.map(e=>{let t=e.slice(0,a);for(;t.length<a;)t.push(``);return t}),c=p(s);return{headers:c?s[0]:null,rows:c?s.slice(1):s,truncated:r||o}}var h=n(),g=30,_=`border-b border-r border-[var(--border-element)] px-2 py-1 align-top last:border-r-0`,v={Table:({style:e,...t})=>(0,h.jsx)(`table`,{...t,className:`w-full min-w-max border-collapse text-body-small-default text-[var(--content-default)]`,style:e}),TableRow:({item:e,...t})=>(0,h.jsx)(`tr`,{...t})};function y({blob:e,filename:t}){let[n,c]=(0,s.useState)(null),[l,u]=(0,s.useState)(!1);(0,s.useEffect)(()=>{let t=!1;return c(null),u(!1),e.text().then(e=>{t||c(e)},()=>{t||u(!0)}),()=>{t=!0}},[e]);let d=(0,s.useMemo)(()=>n===null?null:m(n),[n]),f=d?.headers??null,p=(0,s.useCallback)(()=>f===null?null:(0,h.jsx)(`tr`,{children:f.map((e,t)=>(0,h.jsx)(`th`,{scope:`col`,title:e,className:`${_} bg-[var(--surface-sunken)] text-left text-body-small-emphasised`,children:(0,h.jsx)(`span`,{className:`block max-w-[20rem] truncate`,children:e})},t))}),[f]);if(l)return(0,h.jsx)(a,{filename:t});if(d===null)return(0,h.jsx)(o,{});let y=f?.length??d.rows[0]?.length??0;return y===0?(0,h.jsx)(`div`,{role:`status`,className:`flex h-full items-center justify-center p-4`,children:(0,h.jsx)(r,{as:`span`,variant:`body-small-default`,className:`text-[var(--content-tertiary)]`,children:`This file is empty`})}):(0,h.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,h.jsx)(i,{data:d.rows,initialItemCount:Math.min(d.rows.length,g),components:v,fixedHeaderContent:f===null?void 0:p,itemContent:(e,t)=>t.map((e,t)=>(0,h.jsx)(`td`,{title:e,className:_,children:(0,h.jsx)(`span`,{className:`block max-w-[20rem] truncate`,children:e})},t)),className:`min-h-0 flex-1`}),(0,h.jsxs)(r,{as:`p`,variant:`label-small-default`,className:`shrink-0 border-t border-[var(--border-element)] px-3 py-1.5 text-[var(--content-tertiary)]`,children:[`${d.rows.length} rows x ${y} columns`,d.truncated?` (truncated)`:``]})]})}export{y as CsvPreview};
|