@vellumai/web 0.10.7-dev.202607092332.9deedf4 → 0.10.7-dev.202607100313.fffdfea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{account-page-CMV43GIE.js → account-page-Ce-pbLMJ.js} +1 -1
- package/dist/assets/{acp-run-detail-panel-Q6Pa1K4J.js → acp-run-detail-panel-T0GBDg-W.js} +1 -1
- package/dist/assets/{activity-steps-panel-CtNAZTDH.js → activity-steps-panel-BXXeXc19.js} +1 -1
- package/dist/assets/{advanced-page-BznS_S2-.js → advanced-page-C8Ib_u5F.js} +1 -1
- package/dist/assets/ai-page-BezzLmVq.js +1 -0
- package/dist/assets/{animated-avatar-DK4gO-3x.js → animated-avatar-DDpjZzRx.js} +1 -1
- package/dist/assets/{api-ByWcEKXC.js → api-Zs5JMgKY.js} +1 -1
- package/dist/assets/{api-key-screen-COgM-31V.js → api-key-screen-B_g5hH5v.js} +1 -1
- package/dist/assets/{archive-page-CbI42Xl9.js → archive-page-rl2uRUik.js} +1 -1
- package/dist/assets/{assistant-feature-flag-store-DZtH0LSq.js → assistant-feature-flag-store-CKUjJHuh.js} +1 -1
- package/dist/assets/{assistant-status-panel-je6tdnDq.js → assistant-status-panel-DPwgE1TF.js} +1 -1
- package/dist/assets/{auth-store-B0Vpa2Ej.js → auth-store-CKsDsnkp.js} +1 -1
- package/dist/assets/{background-task-detail-panel-C9gXqdcp.js → background-task-detail-panel-3xiHMnCC.js} +1 -1
- package/dist/assets/{billing-page-1lNYGQXM.js → billing-page-D-gIsav0.js} +1 -1
- package/dist/assets/{bookmarks-page-CrTrSqCx.js → bookmarks-page-giPayf1N.js} +1 -1
- package/dist/assets/{build-state-mRQrHtjQ.js → build-state-BLXpH8o6.js} +1 -1
- package/dist/assets/{channels-page-route-CH4rDnAa.js → channels-page-route-DAZ5e9vo.js} +1 -1
- package/dist/assets/{chat-markdown-message-Di8W_mZ2.js → chat-markdown-message-BuypfAkx.js} +1 -1
- package/dist/assets/{client-feature-flag-store-DdDbgq_C.js → client-feature-flag-store-C0g8zi1W.js} +1 -1
- package/dist/assets/{command-palette-CESousz_.js → command-palette-C0XZVlzp.js} +1 -1
- package/dist/assets/{command-palette-window-page-CDsU8OFx.js → command-palette-window-page-CxIvQGwt.js} +1 -1
- package/dist/assets/{community-page-C5ZLBw-d.js → community-page-CwSloAl0.js} +1 -1
- package/dist/assets/{contacts-page-route-7vAYmrEW.js → contacts-page-route-CBqOhX8s.js} +1 -1
- package/dist/assets/{conversation-list-fetchers-DPPBc9-e.js → conversation-list-fetchers-tE99dnUJ.js} +1 -1
- package/dist/assets/{credentials-page-DPAWp3ig.js → credentials-page-Bd-E5j_2.js} +1 -1
- package/dist/assets/{debug-page-ChigwOvQ.js → debug-page-CU0jo5tG.js} +1 -1
- package/dist/assets/{deploy-dialogs-BYLzWrGV.js → deploy-dialogs-8TBhlLXZ.js} +1 -1
- package/dist/assets/{detail-panel-stop-button-CzdpVulo.js → detail-panel-stop-button-B0utUgSr.js} +1 -1
- package/dist/assets/{developer-page-DpEsh6NB.js → developer-page-Da1bdSPK.js} +1 -1
- package/dist/assets/{devices-page-Pnn1eowJ.js → devices-page-DC9det1s.js} +1 -1
- package/dist/assets/{dictation-overlay-page-ChVTUFRD.js → dictation-overlay-page-6l-KJCrE.js} +1 -1
- package/dist/assets/{document-viewer-page-2ll_cJLl.js → document-viewer-page-djjsg4WE.js} +1 -1
- package/dist/assets/{earn-credits-modal-DeZpTKSj.js → earn-credits-modal-B4iirPUC.js} +1 -1
- package/dist/assets/{emails-page-ABf-We6M.js → emails-page-RItjmMG5.js} +1 -1
- package/dist/assets/feature-flag-catalog-CHuc71P8.js +1 -0
- package/dist/assets/{general-page-DkKSrMme.js → general-page-BtAuGqFM.js} +1 -1
- package/dist/assets/{hatching-screen-D8Pjfvhy.js → hatching-screen-C71v2Kqp.js} +1 -1
- package/dist/assets/{home-page-route-B1N6-RGa.js → home-page-route-DxKq7gEn.js} +1 -1
- package/dist/assets/{hosting-screen-BiP9Rnsg.js → hosting-screen-DBN9hO0s.js} +1 -1
- package/dist/assets/{identity-page-route-BWqNkDHQ.js → identity-page-route-Ck1TCmSd.js} +1 -1
- package/dist/assets/index-DQjUULFO.js +113 -0
- package/dist/assets/{inspect-page-C4TiFioA.js → inspect-page-BuriU_iU.js} +2 -2
- package/dist/assets/{integrations-page-DtTvWU0Y.js → integrations-page-N-I7F_JQ.js} +1 -1
- package/dist/assets/{intelligence-layout-BUgKwjS8.js → intelligence-layout-C_H2Uec7.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-page-B2sR16aW.js → keyboard-shortcuts-page-B2ozF8zY.js} +1 -1
- package/dist/assets/{library-detail-page-CWNbUJqt.js → library-detail-page-BKj7gWNL.js} +1 -1
- package/dist/assets/{library-page-5UprXzT9.js → library-page-BJljT3MY.js} +1 -1
- package/dist/assets/{login-flow-C69Wgb68.js → login-flow-C4Ehxg-g.js} +1 -1
- package/dist/assets/{login-page-jYS-XYJb.js → login-page-CZBdlVje.js} +1 -1
- package/dist/assets/{logout-page-DDATXd1t.js → logout-page-BryU7bK_.js} +1 -1
- package/dist/assets/{logs-layout-DGGiZCW7.js → logs-layout-nPLZjXX5.js} +1 -1
- package/dist/assets/{memory-router-playground-page-CC3Q-ii9.js → memory-router-playground-page-qIG7U97D.js} +1 -1
- package/dist/assets/{messages-CUJ5eqjM.js → messages-DF7pzUR8.js} +2 -2
- package/dist/assets/{mobile-sidebar-drawer-UKduN0Pv.js → mobile-sidebar-drawer-DpvWGGSA.js} +1 -1
- package/dist/assets/{notifications-page-7QBHhSOv.js → notifications-page-DBlKmak1.js} +1 -1
- package/dist/assets/{oauth-complete-page-nDiAeozi.js → oauth-complete-page-D8aQ3tJ_.js} +1 -1
- package/dist/assets/{oauth-popup-complete-page-weYCBDud.js → oauth-popup-complete-page-CXXZdxWJ.js} +1 -1
- package/dist/assets/{pairing-page-BAl_HWtd.js → pairing-page-b1uNitAm.js} +1 -1
- package/dist/assets/{platform-loopback-page-Bgb9VIUM.js → platform-loopback-page-hCZEK9-q.js} +1 -1
- package/dist/assets/{plugins-page-B4pNE_2E.js → plugins-page-C0TtdwgQ.js} +1 -1
- package/dist/assets/{prechat-route-C9OMadRC.js → prechat-route-CnIcxqAR.js} +1 -1
- package/dist/assets/{prefs-DIsAodtg.js → prefs-hu4Ft3Gc.js} +1 -1
- package/dist/assets/{privacy-page-59CvcL5F.js → privacy-page-PFWKww1A.js} +1 -1
- package/dist/assets/{privacy-screen-BoOkqfMk.js → privacy-screen-DSr2ddPX.js} +1 -1
- package/dist/assets/{provider-callback-page-BZSaYWMK.js → provider-callback-page-CVVL9mxY.js} +1 -1
- package/dist/assets/{provider-key-BBkXTnhk.js → provider-key-B9HxajGj.js} +1 -1
- package/dist/assets/{provider-signup-page-Dxl1u-LY.js → provider-signup-page-BBqT_sHe.js} +1 -1
- package/dist/assets/{quick-input-page-C8ZUm4TO.js → quick-input-page-CLwquN93.js} +1 -1
- package/dist/assets/react-query.gen-DOfazqkL.js +1 -0
- package/dist/assets/{research-mock-page-CyAaxUmt.js → research-mock-page-DeBKxHSz.js} +1 -1
- package/dist/assets/{research-onboarding-route-DfFaJpJ1.js → research-onboarding-route-2nc0yKsq.js} +4 -4
- package/dist/assets/{review-terms-screen-sQAJ3zHo.js → review-terms-screen-QliTExQL.js} +1 -1
- package/dist/assets/{risk-CrkyJx_W.js → risk-jKF7qGwV.js} +1 -1
- package/dist/assets/{schedules-BnoWhTUm.js → schedules-CQO3UwTc.js} +1 -1
- package/dist/assets/sdk.gen-jDeNbBv8.js +6 -0
- package/dist/assets/{security-page-edEfQa2K.js → security-page-CQfQh2wW.js} +1 -1
- package/dist/assets/{select-assistant-screen-BaWxwdJN.js → select-assistant-screen-BsGcZIsZ.js} +1 -1
- package/dist/assets/{settings-layout-DmT_OhwB.js → settings-layout-hvCEbqwx.js} +1 -1
- package/dist/assets/{share-feedback-modal-CiZZc4P8.js → share-feedback-modal-BFxBtlP7.js} +1 -1
- package/dist/assets/{sidebar-tree-DqBUS7Di.js → sidebar-tree-BaU6dAAM.js} +1 -1
- package/dist/assets/{signup-page-RKGKd4D4.js → signup-page-COVsB50a.js} +1 -1
- package/dist/assets/{site-favicon-BOtLPhLi.js → site-favicon-D9Rp1QPZ.js} +1 -1
- package/dist/assets/{skill-detail-page-BA-R0TUF.js → skill-detail-page-D5UAAUmZ.js} +1 -1
- package/dist/assets/{skill-detail-panel-qExRv5Fy.js → skill-detail-panel-DIoN-AUc.js} +1 -1
- package/dist/assets/{skills-cdOwT5VQ.js → skills-C9wbjXsQ.js} +1 -1
- package/dist/assets/{skills-page-DTyII3yz.js → skills-page-DhUitBj9.js} +1 -1
- package/dist/assets/{sound-manager-D6rR29ls.js → sound-manager-CSAwT8Vm.js} +1 -1
- package/dist/assets/{sounds-page-DX0M0BI7.js → sounds-page-DeBeDlcY.js} +1 -1
- package/dist/assets/{subagent-detail-panel-DZ2aFOtQ.js → subagent-detail-panel-CF-VVQJA.js} +1 -1
- package/dist/assets/{subagent-store-CkVBDrlq.js → subagent-store-C-pyGmFU.js} +1 -1
- package/dist/assets/{system-events-page-C7PYjQ1_.js → system-events-page-CYqUpGpC.js} +1 -1
- package/dist/assets/{tiptap-document-editor-UuUX9dDg.js → tiptap-document-editor-aGPkbqbr.js} +1 -1
- package/dist/assets/{tool-detail-panel-CNNk22iE.js → tool-detail-panel-CzkNK-ue.js} +1 -1
- package/dist/assets/{upgrade-cancel-page-DtomPtfd.js → upgrade-cancel-page-BytvxNqQ.js} +1 -1
- package/dist/assets/{upgrade-success-page-ByqZaDgj.js → upgrade-success-page-CeuBASa8.js} +1 -1
- package/dist/assets/{usage-page-4pf5Kokb.js → usage-page-CI7scN-b.js} +1 -1
- package/dist/assets/{use-edge-swipe-back-KZ3UbiGX.js → use-edge-swipe-back-U9h8O8rp.js} +1 -1
- package/dist/assets/{use-invite-link-dialog-CefIg3No.js → use-invite-link-dialog-JL5Jevln.js} +1 -1
- package/dist/assets/use-is-org-ready-BP6_0L-A.js +1 -0
- package/dist/assets/{use-onboarding-login-BE7XAcLS.js → use-onboarding-login-CP7O8ZzB.js} +1 -1
- package/dist/assets/{use-skill-actions-DvXJseoE.js → use-skill-actions-BKfLB9Oe.js} +1 -1
- package/dist/assets/{use-skill-categories-SyeYfwMa.js → use-skill-categories-8DmU61Hs.js} +1 -1
- package/dist/assets/{use-skill-detail-files-DEAuvZ9C.js → use-skill-detail-files-DmLQiG5u.js} +1 -1
- package/dist/assets/{viewer-store-B7if16dM.js → viewer-store-SsoxBypb.js} +1 -1
- package/dist/assets/{voice-page-vBrdgTVm.js → voice-page-DX8ma3dY.js} +1 -1
- package/dist/assets/{weather-forecast-display-LnisXlEl.js → weather-forecast-display-hxrsJwFy.js} +1 -1
- package/dist/assets/{welcome-screen-CWHGZa4i.js → welcome-screen-Drx018g8.js} +1 -1
- package/dist/assets/{workflow-detail-panel-BUjpdiIu.js → workflow-detail-panel-n5adDCz2.js} +1 -1
- package/dist/assets/{workflow-store-CKPwCutv.js → workflow-store-B_M196cU.js} +1 -1
- package/dist/assets/workspace-page-CYDMc7C-.js +1 -0
- package/dist/index.html +23 -23
- package/package.json +1 -1
- package/dist/assets/ai-page-DUWe0qVj.js +0 -1
- package/dist/assets/feature-flag-catalog-8Bd8qhz2.js +0 -1
- package/dist/assets/index-6YxiY2Ly.js +0 -113
- package/dist/assets/react-query.gen-SVZdN1r_.js +0 -1
- package/dist/assets/sdk.gen-D-8W_bKa.js +0 -6
- package/dist/assets/use-is-org-ready-BrsKMV8W.js +0 -1
- package/dist/assets/workspace-page-BTFdn_4T.js +0 -1
package/dist/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<link rel="apple-touch-icon" href="/assistant/favicon.svg" />
|
|
11
11
|
<title>Vellum Assistant</title>
|
|
12
12
|
<script src="/assistant/theme-init.js"></script>
|
|
13
|
-
<script type="module" crossorigin src="/assistant/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assistant/assets/index-DQjUULFO.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assistant/assets/chunk-jRWAZmH_.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assistant/assets/preload-helper-BewR0kVT.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assistant/assets/is-electron-y5bNUVyG.js">
|
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assistant/assets/api-Cp8mt2wS.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assistant/assets/client.gen-DVfIRXUZ.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assistant/assets/sdk.gen-CmKfVpgB.js">
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/sdk.gen-
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/sdk.gen-jDeNbBv8.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assistant/assets/api-errors-CrWDzVca.js">
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/api-
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/api-Zs5JMgKY.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assistant/assets/avatar-svg-compositor-CnDf9Ibf.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assistant/assets/jsx-runtime-CVSDxk6A.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assistant/assets/proxy-BzlH_XAe.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assistant/assets/use-reduced-motion-CcGT6CHV.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assistant/assets/createLucideIcon-IRfcSUxS.js">
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/animated-avatar-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/animated-avatar-DDpjZzRx.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assistant/assets/domains-D3QF404Q.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assistant/assets/return-to-BwxkOGDI.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assistant/assets/routes-BbeIx_F9.js">
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assistant/assets/typed-storage-5IU6qVWg.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assistant/assets/QueryClientProvider-DKhXIxGb.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assistant/assets/useQuery-B45lW1Kk.js">
|
|
45
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/auth-store-
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/auth-store-CKsDsnkp.js">
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assistant/assets/prechat-P1y7ZM6C.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assistant/assets/platform-detection-BrxvFUiR.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assistant/assets/impersonate-version-flag-BhxfH6iZ.js">
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
<link rel="modulepreload" crossorigin href="/assistant/assets/browser-timezone-2SnmKDjM.js">
|
|
51
51
|
<link rel="modulepreload" crossorigin href="/assistant/assets/effective-timezone-C4nukIC4.js">
|
|
52
52
|
<link rel="modulepreload" crossorigin href="/assistant/assets/semver-DIkpaM51.js">
|
|
53
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/messages-
|
|
53
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/messages-DF7pzUR8.js">
|
|
54
54
|
<link rel="modulepreload" crossorigin href="/assistant/assets/bundle-mjs-BZt35okJ.js">
|
|
55
55
|
<link rel="modulepreload" crossorigin href="/assistant/assets/cn-C36Yvcac.js">
|
|
56
56
|
<link rel="modulepreload" crossorigin href="/assistant/assets/button-amTXFI-2.js">
|
|
@@ -93,11 +93,11 @@
|
|
|
93
93
|
<link rel="modulepreload" crossorigin href="/assistant/assets/chevron-left-BMF1xNfR.js">
|
|
94
94
|
<link rel="modulepreload" crossorigin href="/assistant/assets/download-CAuK-nZ6.js">
|
|
95
95
|
<link rel="modulepreload" crossorigin href="/assistant/assets/file-DsyJLS2u.js">
|
|
96
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/chat-markdown-message-
|
|
96
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/chat-markdown-message-BuypfAkx.js">
|
|
97
97
|
<link rel="modulepreload" crossorigin href="/assistant/assets/chat-B8mgARYR.js">
|
|
98
98
|
<link rel="modulepreload" crossorigin href="/assistant/assets/diagnostics-COsnZMe5.js">
|
|
99
99
|
<link rel="modulepreload" crossorigin href="/assistant/assets/conversation-store-BljZWolF.js">
|
|
100
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/risk-
|
|
100
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/risk-jKF7qGwV.js">
|
|
101
101
|
<link rel="modulepreload" crossorigin href="/assistant/assets/three-dot-indicator-BVtP8eei.js">
|
|
102
102
|
<link rel="modulepreload" crossorigin href="/assistant/assets/misc-BYQPh7vS.js">
|
|
103
103
|
<link rel="modulepreload" crossorigin href="/assistant/assets/AnimatePresence-C8APSgIu.js">
|
|
@@ -108,40 +108,40 @@
|
|
|
108
108
|
<link rel="modulepreload" crossorigin href="/assistant/assets/monitor-DfbL8_59.js">
|
|
109
109
|
<link rel="modulepreload" crossorigin href="/assistant/assets/sparkles-PGiR5v1g.js">
|
|
110
110
|
<link rel="modulepreload" crossorigin href="/assistant/assets/user-plus-DMh4_UTz.js">
|
|
111
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/site-favicon-
|
|
111
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/site-favicon-D9Rp1QPZ.js">
|
|
112
112
|
<link rel="modulepreload" crossorigin href="/assistant/assets/composer-focus-BZr63Cvs.js">
|
|
113
113
|
<link rel="modulepreload" crossorigin href="/assistant/assets/by-tool-use-id-index-BokzI3ZP.js">
|
|
114
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/subagent-store-
|
|
114
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/subagent-store-C-pyGmFU.js">
|
|
115
115
|
<link rel="modulepreload" crossorigin href="/assistant/assets/workflow-status-ZrbiLW5D.js">
|
|
116
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/workflow-store-
|
|
116
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/workflow-store-B_M196cU.js">
|
|
117
117
|
<link rel="modulepreload" crossorigin href="/assistant/assets/optimistic-lifecycle-DTggtDfs.js">
|
|
118
118
|
<link rel="modulepreload" crossorigin href="/assistant/assets/conversation-selection-BBHkzcfy.js">
|
|
119
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/prefs-
|
|
119
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/prefs-hu4Ft3Gc.js">
|
|
120
120
|
<link rel="modulepreload" crossorigin href="/assistant/assets/research-onboarding-persistence-DnuHyFyB.js">
|
|
121
121
|
<link rel="modulepreload" crossorigin href="/assistant/assets/useMutation-Lj4VunQV.js">
|
|
122
122
|
<link rel="modulepreload" crossorigin href="/assistant/assets/infiniteQueryOptions-C6p49ZmI.js">
|
|
123
123
|
<link rel="modulepreload" crossorigin href="/assistant/assets/queryOptions-BtNi-_9H.js">
|
|
124
124
|
<link rel="modulepreload" crossorigin href="/assistant/assets/react-query.gen-DPzPS206.js">
|
|
125
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/react-query.gen-
|
|
125
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/react-query.gen-DOfazqkL.js">
|
|
126
126
|
<link rel="modulepreload" crossorigin href="/assistant/assets/sdk.gen-BhtkuoSl.js">
|
|
127
127
|
<link rel="modulepreload" crossorigin href="/assistant/assets/use-bus-subscription-C3H3CmM_.js">
|
|
128
128
|
<link rel="modulepreload" crossorigin href="/assistant/assets/use-copy-to-clipboard-tXJpCn2M.js">
|
|
129
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/use-is-org-ready-
|
|
130
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/build-state-
|
|
131
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/login-flow-
|
|
129
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/use-is-org-ready-BP6_0L-A.js">
|
|
130
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/build-state-BLXpH8o6.js">
|
|
131
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/login-flow-C4Ehxg-g.js">
|
|
132
132
|
<link rel="modulepreload" crossorigin href="/assistant/assets/chunk-5KNZJZUH-DdS6bb-3.js">
|
|
133
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/use-onboarding-login-
|
|
133
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/use-onboarding-login-CP7O8ZzB.js">
|
|
134
134
|
<link rel="modulepreload" crossorigin href="/assistant/assets/utils-xg2dl_KJ.js">
|
|
135
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/feature-flag-catalog-
|
|
136
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/sound-manager-
|
|
135
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/feature-flag-catalog-CHuc71P8.js">
|
|
136
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/sound-manager-CSAwT8Vm.js">
|
|
137
137
|
<link rel="modulepreload" crossorigin href="/assistant/assets/client-identity-CadrtY_b.js">
|
|
138
138
|
<link rel="modulepreload" crossorigin href="/assistant/assets/native-deep-link-CJGNy9bj.js">
|
|
139
139
|
<link rel="modulepreload" crossorigin href="/assistant/assets/native-file-Cn3RbQbT.js">
|
|
140
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/assistant-feature-flag-store-
|
|
141
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/client-feature-flag-store-
|
|
142
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/viewer-store-
|
|
140
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/assistant-feature-flag-store-CKUjJHuh.js">
|
|
141
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/client-feature-flag-store-C0g8zi1W.js">
|
|
142
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/viewer-store-SsoxBypb.js">
|
|
143
143
|
<link rel="modulepreload" crossorigin href="/assistant/assets/avatar-bundled-components--1Wyhs4r.js">
|
|
144
|
-
<link rel="modulepreload" crossorigin href="/assistant/assets/conversation-list-fetchers-
|
|
144
|
+
<link rel="modulepreload" crossorigin href="/assistant/assets/conversation-list-fetchers-tE99dnUJ.js">
|
|
145
145
|
<link rel="modulepreload" crossorigin href="/assistant/assets/haptics-DKVhthJo.js">
|
|
146
146
|
<link rel="modulepreload" crossorigin href="/assistant/assets/pointer-Cdz7NGHe.js">
|
|
147
147
|
<link rel="modulepreload" crossorigin href="/assistant/assets/public-asset-Di3QykUd.js">
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{i as t,r as n,s as r}from"./local-settings-lVNyIOJ_.js";import{r as i,t as a}from"./capture-error-Dhiismgm.js";import{t as o}from"./react-DJZBPgpf.js";import{t as s}from"./button-amTXFI-2.js";import{d as c,h as l}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as u}from"./QueryClientProvider-DKhXIxGb.js";import{t as d}from"./useQuery-B45lW1Kk.js";import{t as f}from"./useMutation-Lj4VunQV.js";import{t as p}from"./jsx-runtime-CVSDxk6A.js";import{t as m}from"./typography-D5f7kt80.js";import{t as h}from"./createLucideIcon-IRfcSUxS.js";import{t as g}from"./check-DFNrQERi.js";import{t as _}from"./circle-alert-zOqdmf25.js";import{t as v}from"./circle-check-VSiny8yl.js";import{n as y,t as b}from"./domain-field-C5a2iMot.js";import{t as x}from"./external-link-Dqpx9nRm.js";import{t as S}from"./info-DsOyuMO9.js";import{t as C}from"./loader-circle-Cz7opInR.js";import{t as w}from"./triangle-alert-Z0Gq0IuB.js";import{t as T}from"./notice-DkcNAP8O.js";import{t as E}from"./tag-CV4v7fRF.js";import{t as D}from"./input-CoUmPnRU.js";import{t as O}from"./toggle-CDfguvUz.js";import{n as k}from"./stat-square-CTHnQ1jc.js";import{t as A}from"./modal-D5nLWNN9.js";import{n as j}from"./toast-xTp-xwYL.js";import{t as M}from"./confirm-dialog-CSkhRFRk.js";import{t as N}from"./dropdown-ByHOpeOU.js";import{Ht as P,Ut as F,bn as I,dt as L,j as R,lt as z,tr as B}from"./sdk.gen-D-8W_bKa.js";import{H as ee,Pt as V,V as te,_t as H,c as U,d as ne,f as W,l as G,m as re,p as ie,u as K,zt as q}from"./react-query.gen-SVZdN1r_.js";import{t as J}from"./assistant-identity-store-CX03CK8q.js";import{n as ae}from"./utils-xg2dl_KJ.js";import{r as oe}from"./api-errors-CrWDzVca.js";import{c as se}from"./routes-BbeIx_F9.js";import{t as ce}from"./use-is-org-ready-BrsKMV8W.js";import{c as le,d as ue,f as de,g as fe,h as pe,it as me,l as he,m as ge,o as _e,p as ve,s as ye,u as be,v as xe,y as Se}from"./react-query.gen-DPzPS206.js";import{t as Ce}from"./assistant-feature-flag-store-DZtH0LSq.js";import{$r as we,Ar as Te,Br as Ee,C as De,D as Oe,E as ke,Fr as Ae,Gr as je,Ir as Me,Jr as Ne,Kr as Pe,Lr as Fe,Mr as Ie,Nr as Le,Or as Re,Pr as ze,Qn as Be,Qr as Ve,Rr as He,Sa as Ue,T as We,Vr as Ge,Wr as Ke,Xr as qe,Yr as Je,Zr as Ye,ai as Xe,ci as Ze,ei as Qe,ii as $e,ji as et,jr as tt,kr as nt,ni as rt,oi as it,qr as at,ri as ot,si as st,ti as ct,w as lt,yi as ut,zr as dt}from"./index-6YxiY2Ly.js";import{t as Y}from"./use-active-assistant-id-BNRMo_Mi.js";import{t as ft}from"./detail-card-RGTjHkZ8.js";import{t as pt}from"./environment-store-fb1I8_0E.js";var mt=h(`grip-vertical`,[[`circle`,{cx:`9`,cy:`12`,r:`1`,key:`1vctgf`}],[`circle`,{cx:`9`,cy:`5`,r:`1`,key:`hp0tcf`}],[`circle`,{cx:`9`,cy:`19`,r:`1`,key:`fkjjf6`}],[`circle`,{cx:`15`,cy:`12`,r:`1`,key:`1tmaij`}],[`circle`,{cx:`15`,cy:`5`,r:`1`,key:`19l28e`}],[`circle`,{cx:`15`,cy:`19`,r:`1`,key:`f4zoj3`}]]),X=e(o(),1),Z=p();function ht({mode:e,onChange:t}){return(0,Z.jsx)(`div`,{className:`max-w-[280px]`,children:(0,Z.jsx)(k,{ariaLabel:`Service mode`,value:e,onChange:t,items:[{value:`managed`,label:`Managed`},{value:`your-own`,label:`Your Own`}]})})}function gt({id:e,title:t,subtitle:n,mode:r,onModeChange:i,children:a}){return(0,Z.jsxs)(ft,{id:e,title:t,subtitle:n,accessory:(0,Z.jsx)(ht,{mode:r,onChange:i}),children:[(0,Z.jsx)(`div`,{className:`h-px bg-[var(--surface-active)]`}),(0,Z.jsx)(`div`,{className:`mt-4`,children:a})]})}function Q({onClick:e,disabled:t}){return(0,Z.jsx)(s,{onClick:e,disabled:t,children:`Save`})}function _t({onClick:e,filled:t=!1}){return(0,Z.jsx)(s,{variant:t?`danger`:`dangerGhost`,onClick:e,children:`Reset`})}function vt({id:e,title:t,subtitle:n,children:r}){return(0,Z.jsxs)(ft,{id:e,title:t,subtitle:n,children:[(0,Z.jsx)(`div`,{className:`h-px bg-[var(--surface-active)]`}),(0,Z.jsx)(`div`,{className:`mt-4`,children:r})]})}function yt({guide:e}){return(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(S,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsx)(`span`,{children:e.description}),(0,Z.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[e.linkLabel,(0,Z.jsx)(x,{className:`h-3 w-3`})]})]})]})}function bt({status:e,message:t,isLoading:n}){return n?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--tag-bg-neutral)] px-2.5 py-0.5 text-body-small-default text-[var(--content-quiet)]`,children:[(0,Z.jsx)(C,{className:`h-3 w-3 animate-spin`}),`Checking domain…`]}):e?e===`verified`?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-positive-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-positive-strong)]`,title:`DNS records have been verified. Your domain is ready to send and receive email.`,children:[(0,Z.jsx)(g,{className:`h-3 w-3`}),`Domain verified`]}):e===`pending`||e===`not_started`?(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-mid-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-mid-strong)]`,title:`DNS records have been provisioned. Waiting for the email provider to verify them — this usually takes a few minutes.`,children:[(0,Z.jsx)(Ue,{className:`h-3 w-3`}),`Verifying domain…`]}):(0,Z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--system-negative-weak)] px-2.5 py-0.5 text-body-small-default text-[var(--system-negative-strong)]`,title:`Domain verification failed. DNS records may not have propagated correctly. You could try releasing and re-registering the domain.`,children:[(0,Z.jsx)(_,{className:`h-3 w-3`}),`Verification failed`]}):(0,Z.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--tag-bg-neutral)] px-2.5 py-0.5 text-body-small-default text-[var(--content-quiet)]`,title:`Unable to retrieve domain verification status.`,children:`Unknown status`})}var xt=`__custom__`;function St(e){return e?!!(e.profile||e.provider||e.model):!1}function Ct(e,t){let n=St(e);return n===St(t)?n?(e?.profile??null)===(t?.profile??null)&&(e?.provider??null)===(t?.provider??null)&&(e?.model??null)===(t?.model??null):!0:!1}function wt({id:e,displayName:t,description:n,defaultProfileLabel:r,draft:i,profileOptions:a,onDraftChange:o,onToggle:s}){let c=St(i),l=!i||!c?``:i.provider||i.model?xt:i.profile??``,u=l===xt,d=He(),f=d[0]??$e[0],p=d.find(e=>e===i?.provider)??f,m=st(p).map(e=>({value:e.id,label:e.displayName})),h=!!i?.provider&&!i?.model;function g(t){t===`__custom__`?o(e,{profile:null,provider:f,model:it(f)??``}):t===``?o(e,null):o(e,{profile:t,provider:null,model:null})}function _(t){let n=it(t)??``;o(e,{...i??{},profile:null,provider:t,model:n})}function v(t){o(e,{...i??{},model:t})}return(0,Z.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)] bg-[var(--surface-base)] p-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-default font-medium text-[var(--content-default)]`,children:t}),n&&(0,Z.jsxs)(`p`,{className:`mt-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[n,r&&(0,Z.jsxs)(`span`,{className:`ml-1.5 text-body-small-default text-[var(--content-tertiary)] opacity-60`,children:[`· Default: `,r]})]})]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[c&&(0,Z.jsx)(N,{value:l,onChange:g,options:a,className:`w-44`,menuMinWidth:280,menuAlign:`end`}),(0,Z.jsx)(O,{checked:c,onChange:t=>s(e,t),"aria-label":`Override ${t}`})]})]}),c&&u&&(0,Z.jsxs)(`div`,{className:`mt-3 space-y-2 border-t border-[var(--border-base)] pt-3`,children:[(0,Z.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Z.jsxs)(`div`,{className:`flex-1`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:p??``,onChange:_,options:d.map(e=>({value:e,label:Xe[e]??e}))})]}),(0,Z.jsxs)(`div`,{className:`flex-1`,children:[(0,Z.jsx)(`label`,{className:`mb-1 block text-body-small-default text-[var(--content-tertiary)]`,children:`Model`}),(0,Z.jsx)(N,{value:i?.model??``,onChange:v,options:m})]})]}),h&&(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--system-negative-strong)]`,children:`Pick a model`})]})]})}function Tt({isOpen:e,onClose:t,assistantId:n}){let r=(0,X.useRef)(!1);return(0,Z.jsx)(A.Root,{open:e,onOpenChange:e=>{!e&&!r.current&&t()},children:e?(0,Z.jsx)(Et,{assistantId:n,onClose:t,onSavingChange:e=>{r.current=e}}):null})}function Et({assistantId:e,onClose:t,onSavingChange:n}){let r=u(),{data:i}=d({...U({path:{assistant_id:e}}),staleTime:3e4}),o=(0,X.useMemo)(()=>i?.llm?.profiles??{},[i?.llm?.profiles]),c=(0,X.useMemo)(()=>i?.llm?.profileOrder??[],[i?.llm?.profileOrder]),l=(0,X.useMemo)(()=>i?.llm?.callSites??{},[i?.llm?.callSites]),f=(0,X.useMemo)(()=>Pe(o,c),[o,c]),p=He(),m=q({onSuccess:t=>{K(r,{path:{assistant_id:e}},t)}}),[h,g]=(0,X.useState)(``),[_,v]=(0,X.useState)({}),[y,b]=(0,X.useState)(!1),[x,S]=(0,X.useState)(!1),w=Ce.use.analyzeConversation(),{data:T,isLoading:E,isError:O,refetch:k}=d({...ne({path:{assistant_id:e}}),enabled:!!e,staleTime:6e4,refetchOnWindowFocus:!1}),N=(0,X.useMemo)(()=>{let e=(T?.callSites??[]).filter(e=>e.id!==`mainAgent`);return w||(e=e.filter(e=>e.id!==`analyzeConversation`)),e},[T,w]),P=!E&&!O&&!!T&&!!i,F=(0,X.useMemo)(()=>N.map(e=>e.id),[N]),I=(0,X.useMemo)(()=>{if(!P)return{};let e={};for(let t of F)if(t in _)e[t]=_[t];else{let n=l[t];e[t]=n?{...n}:{}}return e},[P,F,l,_]),L=(0,X.useMemo)(()=>new Set(F),[F]),R=(0,X.useMemo)(()=>Object.entries(l).some(([e,t])=>L.has(e)&&(t?.profile!=null||t?.provider!=null||t?.model!=null)),[l,L]),z=(0,X.useMemo)(()=>{if(!P)return!1;for(let e of Object.keys(I))if(!Ct(I[e],l[e]))return!0;return!1},[P,I,l]),B=(0,X.useMemo)(()=>Object.values(I).some(e=>St(e)&&!!e?.provider&&!e?.model),[I]),ee=(0,X.useCallback)(e=>[...ke(f,[e]).map(e=>({value:e.name,label:lt(e)})),{value:xt,label:`Custom`}],[f]),V=(0,X.useMemo)(()=>{if(!h.trim())return N;let e=h.toLowerCase();return N.filter(t=>(t.displayName??``).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)||(t.domain??``).toLowerCase().includes(e))},[N,h]),te=(0,X.useMemo)(()=>{if(!T)return[];let e=T.domains.map(e=>e.id),t=new Map(T.domains.map(e=>[e.id,e])),n=[];for(let r of e){let e=V.filter(e=>e.domain===r);e.length>0&&n.push({domain:t.get(r),sites:e})}let r=new Set(e),i=V.filter(e=>!r.has(e.domain));return i.length>0&&n.push({domain:{id:`other`,displayName:`Other`},sites:i}),n},[T,V]),H=(0,X.useCallback)((e,t)=>{v(n=>({...n,[e]:t}))},[]),W=(0,X.useCallback)((e,t)=>{if(!t){v(t=>({...t,[e]:null}));return}let n=We(f,N.find(t=>t.id===e)?.defaultProfile);if(n)v(t=>({...t,[e]:{profile:n}}));else{let t=p[0]??$e[0],n=it(t)??``;v(r=>({...r,[e]:{provider:t,model:n}}))}},[N,f,p]),G=(0,X.useCallback)(async()=>{b(!0),n?.(!0);try{let n={};for(let e of Object.keys(I)){let t=I[e]??null;n[e]=St(t)?{profile:t?.profile??null,provider:t?.provider??null,model:t?.model??null}:null}await m.mutateAsync({path:{assistant_id:e},body:{llm:{callSites:n}}}),t(),j.success(`Overrides saved.`)}catch(e){j.error(`Failed to save overrides. Please try again.`),a(e,{context:`call_site_overrides_save`})}finally{b(!1),n?.(!1)}},[I,t,m,n,e]),re=(0,X.useCallback)(async()=>{b(!0),n?.(!0);try{let n={};for(let e of Object.keys(I))n[e]=null;await m.mutateAsync({path:{assistant_id:e},body:{llm:{callSites:n}}}),t(),j.success(`Overrides reset.`)}catch(e){j.error(`Failed to reset overrides. Please try again.`),a(e,{context:`call_site_overrides_reset`})}finally{b(!1),n?.(!1)}},[I,t,m,n,e]);return(0,Z.jsxs)(A.Content,{size:`lg`,hideCloseButton:!0,children:[(0,Z.jsxs)(A.Header,{children:[(0,Z.jsx)(A.Title,{children:`Action Overrides`}),(0,Z.jsx)(A.Description,{children:`Customize which model profile specific actions should use. Uses your default profile if no override is set.`})]}),(0,Z.jsxs)(A.Body,{children:[(0,Z.jsx)(`div`,{className:`mb-4`,children:(0,Z.jsx)(D,{type:`search`,value:h,onChange:e=>g(e.target.value),placeholder:`Search actions…`,leftIcon:(0,Z.jsx)(et,{className:`h-4 w-4`}),fullWidth:!0})}),E&&(0,Z.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,Z.jsx)(C,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`})}),O&&(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-12 text-center`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:`Couldn't load actions`}),(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Make sure your assistant is running`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:()=>void k(),children:`Retry`})]}),!E&&!O&&T&&(0,Z.jsx)(`div`,{className:`space-y-4`,children:te.length===0?(0,Z.jsx)(`p`,{className:`py-8 text-center text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No actions match your search.`}):te.map(({domain:e,sites:t})=>(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`p`,{className:`mb-2 text-body-small-default font-semibold uppercase tracking-wider text-[var(--content-tertiary)]`,children:e.displayName}),(0,Z.jsx)(`div`,{className:`space-y-1`,children:t.map(e=>{let t=(()=>{let t=I[e.id]??null;return!t||!St(t)?``:t.provider||t.model?`__custom__`:t.profile??``})(),n=e.defaultProfile?f.find(t=>t.name===e.defaultProfile)?.label??e.defaultProfile:null;return(0,Z.jsx)(wt,{id:e.id,displayName:e.displayName,description:e.description,defaultProfileLabel:n,draft:I[e.id]??null,profileOptions:ee(t===``||t===`__custom__`?null:t),onDraftChange:H,onToggle:W},e.id)})})]},e.id))})]}),(0,Z.jsxs)(A.Footer,{children:[R&&(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:()=>S(!0),disabled:y||!P,tintColor:`var(--system-negative-strong)`,className:`mr-auto`,children:`Reset to Defaults`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:t,disabled:y,children:`Cancel`}),(0,Z.jsx)(s,{variant:`primary`,size:`compact`,onClick:()=>void G(),disabled:!z||B||y,children:y?(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin`}):`Save`})]}),(0,Z.jsx)(M,{open:x,title:`Reset to Defaults`,message:`Every task override will be reset and will follow your active profile. This cannot be undone.`,confirmLabel:`Reset to Defaults`,destructive:!0,onConfirm:()=>{S(!1),re()},onCancel:()=>S(!1)})]})}function Dt({blocked:e,availableReplacements:t,replacement:n,onReplacementChange:r,error:i,saving:a,onClose:o,onConfirm:c}){let l=``;if(e){let t=e.label||e.name;l=e.isActive&&e.callSiteIds.length>0?`"${t}" is the active profile and is used by ${e.callSiteIds.length} call site(s). Pick a replacement profile.`:e.isActive?`"${t}" is the active profile. Pick a different active profile before deleting, or select a replacement below.`:`"${t}" is used by ${e.callSiteIds.length} call site(s). Select a replacement profile to reassign them before deleting.`}return(0,Z.jsx)(A.Root,{open:e!==null,onOpenChange:e=>{e||o()},children:(0,Z.jsxs)(A.Content,{size:`sm`,children:[(0,Z.jsx)(A.Header,{children:(0,Z.jsx)(A.Title,{children:`Can't Delete Profile`})}),(0,Z.jsxs)(A.Body,{className:`space-y-4`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`p`,children:l}),e&&e.callSiteIds.length>0&&(0,Z.jsx)(`ul`,{className:`space-y-1 pl-1`,children:e.callSiteIds.map(e=>(0,Z.jsxs)(`li`,{className:`text-body-small-default text-(--content-secondary)`,children:[`• `,(0,Z.jsx)(`code`,{children:e})]},e))}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Replacement profile`}),(0,Z.jsx)(N,{"aria-label":`Replacement profile`,value:n,onChange:r,options:[{value:``,label:`Select a replacement…`},...t.map(e=>({value:e.name,label:e.label??e.name}))]})]}),i&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-(--system-negative-strong)`,children:i})]}),(0,Z.jsxs)(A.Footer,{children:[(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,onClick:o,children:`Cancel`}),(0,Z.jsx)(s,{variant:`primary`,size:`compact`,disabled:!n||a,onClick:c,children:a?`Saving…`:`Reassign and Delete`})]})]})})}function Ot(e,t){if(e){let n=st(e).find(e=>e.id===t);if(n)return n.displayName}let n=t.lastIndexOf(`/`);return n>=0?t.slice(n+1):t}function kt(e){let t=[];e.description&&t.push(e.description);let n=[];if(e.model&&n.push(Ot(e.provider,e.model)),e.provider){let t=Xe[e.provider]??e.provider;n.push(`hosted by ${t}`)}return n.length>0&&t.push(n.join(` `)),t.join(` – `)}function At({profile:e,isDragging:t,dropTarget:n,isDeleting:r,deleteError:i,isToggling:a,onDragStart:o,onDragEnd:c,onDragOver:l,onDragLeave:u,onDrop:d,onEditClick:f,onDeleteClick:p,onStatusToggle:h}){let g=e.source===`managed`,_=e.invariant===!0,v=e.status!==`disabled`;return(0,Z.jsxs)(`div`,{className:`relative`,children:[n?.name===e.name&&!n.after&&(0,Z.jsx)(`div`,{className:`mx-0 h-0.5 rounded-full bg-[var(--border-active)]`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg pr-2 py-2${t?` opacity-50`:``}`,draggable:!g,onDragStart:o,onDragEnd:c,onDragOver:l,onDragLeave:u,onDrop:d,children:[(0,Z.jsx)(mt,{className:`h-4 w-4 shrink-0 ${g?`invisible`:`cursor-grab text-[var(--content-tertiary)]`}`}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1${v?``:` opacity-55`}`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`span`,className:`text-(--content-default)`,children:e.label??e.name}),g&&(0,Z.jsx)(E,{tone:`positive`,title:`Managed by Platform — this profile cannot be disabled, deleted, or renamed.`,children:`Platform`})]}),e.description||e.model||e.provider?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`mt-0.5 text-(--content-tertiary)`,children:kt(e)}):null]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(!_||!v)&&(0,Z.jsx)(`div`,{className:`flex shrink-0 items-center`,title:v?`Active — toggle to hide from pickers`:`Disabled — toggle to show in pickers`,children:(0,Z.jsx)(O,{checked:v,onChange:e=>h(e),disabled:a,"aria-label":`${v?`Disable`:`Enable`} ${e.label??e.name}`})}),(0,Z.jsxs)(`div`,{className:`flex w-[92px] items-center justify-end gap-2`,children:[(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,onClick:f,children:g||_?`View`:`Edit`}),(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(ut,{}),"aria-label":`Delete ${e.label??e.name}`,disabled:g||_||r,title:g||_?`Managed profiles cannot be deleted`:void 0,onClick:p,tintColor:`var(--system-negative-strong)`})]})]})]}),n?.name===e.name&&n.after&&(0,Z.jsx)(`div`,{className:`mx-0 h-0.5 rounded-full bg-[var(--border-active)]`}),i?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`px-2 pb-1 text-(--system-negative-strong)`,children:i}):null]})}function jt({isOpen:e,assistantId:t,onClose:n}){let r=u(),{data:i}=d({...U({path:{assistant_id:t}}),staleTime:3e4}),o=(0,X.useMemo)(()=>i?.llm?.profiles??{},[i?.llm?.profiles]),s=(0,X.useMemo)(()=>i?.llm?.profileOrder??[],[i?.llm?.profileOrder]),c=i?.llm?.activeProfile??null,l=i?.llm?.callSites??{},f=(0,X.useMemo)(()=>Pe(o,s),[o,s]),p=q({onSuccess:e=>{K(r,{path:{assistant_id:t}},e)}}),[m,h]=(0,X.useState)(!1),[g,_]=(0,X.useState)(null),{data:v}=d({...te({path:{assistant_id:t}}),enabled:e}),y=v?.connections,b=Object.keys(o);async function x(e,n,r){let i=r?.mode??`replace`,c=!(e in o);if(i===`merge`&&!c){await p.mutateAsync({path:{assistant_id:t},body:{llm:{profiles:{[e]:n}}}}),h(!1),_(null);return}let l={profiles:{[e]:n}};if(c&&(l.profileOrder=s.includes(e)?s:[...s,e]),c)await p.mutateAsync({path:{assistant_id:t},body:{llm:l}});else{let n=o[e];await p.mutateAsync({path:{assistant_id:t},body:{llm:{profiles:{[e]:null}}}});try{await p.mutateAsync({path:{assistant_id:t},body:{llm:l}})}catch(r){throw a(r,{context:`settings-ai-profile-edit-recreate`}),n!=null&&await p.mutateAsync({path:{assistant_id:t},body:{llm:{profiles:{[e]:n}}}}).catch(()=>{}),r}}c&&j.success(`Profile "${n.label??e}" created`),h(!1),_(null)}return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(A.Root,{open:e,onOpenChange:e=>{e||n()},children:e?(0,Z.jsx)(Mt,{assistantId:t,profiles:o,profileOrder:s,orderedProfiles:f,activeProfile:c,callSiteOverrides:l,onClose:n,onEditClick:e=>{_(e),h(!0)},onNewClick:()=>{_(null),h(!0)}}):null}),(0,Z.jsx)(Re,{isOpen:m,mode:g?g.source===`managed`||g.invariant===!0?`view`:`edit`:`create`,profileName:g?.name,initialValues:g??void 0,existingNames:b,connections:y,assistantId:t,onSave:x,onCancel:()=>{h(!1),_(null)}})]})}function Mt({assistantId:e,profiles:t,profileOrder:n,orderedProfiles:r,activeProfile:i,callSiteOverrides:o,onClose:c,onEditClick:l,onNewClick:d}){let f=u(),p=q({onSuccess:t=>{K(f,{path:{assistant_id:e}},t)}}),[h,g]=(0,X.useState)({}),[_,v]=(0,X.useState)({}),[y,b]=(0,X.useState)(new Set),[x,S]=(0,X.useState)(null),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(null),[D,O]=(0,X.useState)(null),k=(0,X.useRef)(null),j=(0,X.useRef)(null),[M,N]=(0,X.useState)(null),[P,F]=(0,X.useState)(null),[I,L]=(0,X.useState)(``),[R,z]=(0,X.useState)(!1),B=(0,X.useMemo)(()=>r,[r]);async function ee(n,r){if(y.has(n.name))return!1;b(e=>new Set(e).add(n.name)),S(null);let i=r?`active`:`disabled`;if(!t[n.name])return b(e=>{let t=new Set(e);return t.delete(n.name),t}),!1;try{return await p.mutateAsync({path:{assistant_id:e},body:{llm:{profiles:{[n.name]:{status:i}}}}}),!0}catch(e){return a(e,{context:`settings-ai-profile-toggle`}),S(`Couldn't update "${n.label??n.name}". Please try again.`),!1}finally{b(e=>{let t=new Set(e);return t.delete(n.name),t})}}async function V(t){v(e=>({...e,[t]:!0})),g(e=>{let n={...e};return delete n[t],n});try{let r=n.filter(e=>e!==t);await p.mutateAsync({path:{assistant_id:e},body:{llm:{profiles:{[t]:null},profileOrder:r}}})}catch(e){a(e,{context:`settings-ai-profile-delete`}),g(e=>({...e,[t]:`Failed to delete profile. Please try again.`}))}finally{v(e=>{let n={...e};return delete n[t],n})}}function te(e){let t=B.find(t=>t.name===e)?.label??e,n=e===i,r=Object.entries(o).filter(([t,n])=>t!==`mainAgent`&&n?.profile===e).map(([e])=>e);if(n||r.length>0){N({name:e,label:t,isActive:n,callSiteIds:r}),L(``),F(null);return}V(e)}async function H(){if(!M||!I)return;z(!0),F(null);let t={};if(M.isActive&&(t.activeProfile=I),M.callSiteIds.length>0){let e={};for(let t of M.callSiteIds)e[t]={profile:I};t.callSites=e}if(Object.keys(t).length>0)try{await p.mutateAsync({path:{assistant_id:e},body:{llm:t}})}catch(e){a(e,{context:`settings-ai-profile-reassign-delete`}),F(`Failed to reassign references. Please try again.`),z(!1);return}let n=M.name;N(null),z(!1),V(n)}async function U(t,r){if(t===r.name)return;O(null);let i=n.filter(e=>e!==t),o=i.indexOf(r.name);if(o===-1)return;r.after&&(o+=1);let s=[...i.slice(0,o),t,...i.slice(o)];try{await p.mutateAsync({path:{assistant_id:e},body:{llm:{profileOrder:s}}})}catch(e){a(e,{context:`settings-ai-profile-reorder`}),O(`Failed to reorder profiles. Please try again.`)}}let ne=B.filter(e=>e.name!==M?.name&&e.source!==`managed`),W=ne.length>0?ne:B.filter(e=>e.name!==M?.name);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(A.Content,{size:`md`,children:[(0,Z.jsxs)(A.Header,{children:[(0,Z.jsx)(A.Title,{children:`Model Profiles`}),(0,Z.jsx)(A.Description,{children:`Bundle a provider and model into a named profile. Assign profiles to specific actions or swap between them when chatting.`})]}),(0,Z.jsxs)(A.Body,{children:[B.length===0?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`py-4 text-center text-(--content-tertiary)`,children:`No profiles yet. Create one to get started.`}):(0,Z.jsx)(`div`,{className:`space-y-1`,children:B.map(e=>(0,Z.jsx)(At,{profile:e,isDragging:C===e.name,dropTarget:T,isDeleting:_[e.name]??!1,deleteError:h[e.name],isToggling:y.has(e.name),onDragStart:t=>{k.current=e.name,w(e.name),t.dataTransfer&&(t.dataTransfer.effectAllowed=`move`)},onDragEnd:()=>{k.current=null,j.current=null,w(null),E(null)},onDragOver:t=>{t.preventDefault();let n=t.currentTarget.getBoundingClientRect(),r=t.clientY>n.top+n.height/2,i={name:e.name,after:r};j.current=i,E(i)},onDragLeave:t=>{t.currentTarget.contains(t.relatedTarget)||(j.current=null,E(t=>t?.name===e.name?null:t))},onDrop:e=>{e.preventDefault();let t=k.current,n=j.current;k.current=null,j.current=null,w(null),E(null),t&&n&&U(t,n)},onEditClick:()=>l(e),onDeleteClick:()=>te(e.name),onStatusToggle:t=>void ee(e,t)},e.name))}),D&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-2 text-(--system-negative-strong)`,children:D}),x&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-2 text-(--system-negative-strong)`,children:x})]}),(0,Z.jsxs)(A.Footer,{className:`justify-between`,children:[(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:d,children:`+ New Profile`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:c,children:`Done`})]})]}),(0,Z.jsx)(Dt,{blocked:M,availableReplacements:W,replacement:I,onReplacementChange:L,error:P,saving:R,onClose:()=>{N(null),F(null)},onConfirm:()=>void H()})]})}var Nt=`0.10.8`;function Pt(){return ae(Nt)}function Ft({mode:e,connection:t,assistantId:n,existingNames:r,onSave:i,onCancel:a}){let[o,c]=(0,X.useState)(t?.label??``),[l,d]=(0,X.useState)(t?.name??``),[f,p]=(0,X.useState)(t?.provider??`anthropic`),[h,g]=(0,X.useState)(()=>t?t.auth.type:`platform`),[_,v]=(0,X.useState)(()=>t?.auth.type===`api_key`?t.auth.credential:t?``:`credential/anthropic/api_key`),[y,b]=(0,X.useState)(t?.baseUrl??``),[x,S]=(0,X.useState)(()=>t?.models?t.models.map(e=>e.id).join(`, `):``),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(null),O=f===`openai-compatible`,k=Fe(),j=(0,X.useMemo)(()=>f&&!k.includes(f)?[...k,f]:k,[f,k]),{handleLabelChange:M,resetDirty:P}=tt(e,c,d),[I,L]=(0,X.useState)(``),[R,z]=(0,X.useState)(!1),ee=u(),V=(0,X.useMemo)(()=>Ge(_),[_]),te=h===`api_key`&&V!==null,{hasStoredCredential:U,isLoading:ne}=Me({assistantId:n,credentialKind:`credential`,credentialName:V?`${V.service}:${V.field}`:``,enabled:te}),{credentials:W}=Te({assistantId:n,enabled:h===`api_key`});(0,X.useEffect)(()=>{let e=t?.provider??`anthropic`;c(t?.label??``),d(t?.name??``),p(e),g(t?t.auth.type:`platform`),t?.auth.type===`api_key`?v(t.auth.credential):v(t?``:`credential/${e}/api_key`),P(),E(null),b(t?.baseUrl??``),S(t?.models?t.models.map(e=>e.id).join(`, `):``),L(``),z(!1)},[t,P]);let G=l.trim().length>0;async function re(){if(G){w(!0),E(null);try{let e;if(h===`api_key`){let t=_.trim()||`credential/${f}/api_key`,r=I.trim();if(r){z(!0);try{let e=Ge(t);await B({path:{assistant_id:n},body:e?{type:`credential`,name:`${e.service}:${e.field}`,value:r}:{type:`api_key`,name:f,value:r},throwOnError:!0});let i=Ae(n,`credential`,e?`${e.service}:${e.field}`:``);ee.setQueryData(i,!0),ee.invalidateQueries({queryKey:H({path:{assistant_id:n}})})}catch{E(`Failed to save API key. Please try again.`);return}finally{z(!1)}}e={type:`api_key`,credential:t}}else if(h===`oauth_subscription`)if(t?.auth.type===`oauth_subscription`)e=t.auth;else{E(`Use the "Sign in with ChatGPT" button to connect your subscription.`);return}else if(h===`service_account`)if(t?.auth.type===`service_account`)e=t.auth;else{E(`Service account connections cannot be created through this form.`);return}else e=h===`none`?{type:`none`}:{type:`platform`};let r=o.trim()||null,a={auth:e,label:r,...O&&{base_url:y.trim()||null,models:x.trim()?x.split(`,`).map(e=>({id:e.trim()})).filter(e=>e.id):null}},{data:s,response:c}=await F({path:{assistant_id:n,name:t?.name??l.trim()},body:a});if(!c?.ok){let e;try{let t=await c?.json();typeof t?.error?.message==`string`&&(e=t.error.message)}catch{}E(e||Ee(c?.status,l.trim()));return}if(!s){E(`Server returned an empty response. Please try again.`);return}i(s)}catch{E(`Failed to save connection. Please try again.`)}finally{w(!1)}}}let ie=W.filter(e=>e.service===f),K=e!==`create`&&t?.auth.type===`api_key`,q=ie.length>0||K,J=Ie(`Enter your API key`,U);return e===`create`?(0,Z.jsx)(nt,{variant:`modal`,assistantId:n,existingNames:r,defaultProviderType:f,onCreated:i,onCancel:a}):(0,Z.jsxs)(A.Content,{size:`md`,children:[(0,Z.jsxs)(A.Header,{children:[(0,Z.jsx)(A.Title,{children:`Edit Connection`}),(0,Z.jsx)(A.Description,{children:`Editing "${t?.name}".`})]}),(0,Z.jsxs)(A.Body,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsxs)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:[`Display Name`,` `,(0,Z.jsx)(`span`,{className:`text-[var(--content-disabled)]`,children:`(optional)`})]}),(0,Z.jsx)(D,{value:o,onChange:e=>M(e.target.value),placeholder:`e.g. My Anthropic Key`,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Key`}),(0,Z.jsx)(D,{value:l,placeholder:`e.g. anthropic-personal`,disabled:!0,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{"aria-label":`Provider`,value:f,onChange:p,disabled:!0,options:j.map(e=>({value:e,label:Xe[e]}))})]}),O&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Base URL`}),(0,Z.jsx)(D,{value:y,onChange:e=>b(e.target.value),placeholder:`https://api.example.com/v1`,fullWidth:!0})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Models`}),(0,Z.jsx)(D,{value:x,onChange:e=>S(e.target.value),placeholder:`model-1, model-2`,fullWidth:!0}),(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-[var(--content-tertiary)]`,children:`Comma-separated model identifiers exposed by your endpoint.`})]})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Auth Type`}),(0,Z.jsx)(N,{"aria-label":`Auth type`,value:h,onChange:e=>{g(e),E(null)},disabled:f===`ollama`,options:(()=>{let e;return e=f===`ollama`?[`none`]:Ze(f)?[`api_key`,`platform`]:[`api_key`],h&&!e.includes(h)&&e.push(h),e.map(e=>({value:e,label:dt[e]}))})()})]}),h===`api_key`&&(0,Z.jsx)(Le,{apiKeyValue:I,onApiKeyChange:L,credential:_,onCredentialChange:v,isLoadingCredential:ne,apiKeyPlaceholder:J,provider:f,providerCredentials:ie,showAdvancedSection:q,onError:E}),h===`oauth_subscription`&&(0,Z.jsx)(ze,{assistantId:n,onConnected:i}),T&&(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`text-(--system-negative-strong)`,children:T})]}),(0,Z.jsxs)(A.Footer,{children:[(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,onClick:a,children:`Cancel`}),(0,Z.jsx)(s,{variant:`primary`,size:`compact`,disabled:!G||C||R,onClick:()=>void re(),children:C?`Saving…`:`Save`})]})]})}var It={anthropic:!0,openai:!0,gemini:!0,fireworks:!0,openrouter:!0,vellum:!0};function Lt(e){return e in It}function Rt(e){if(typeof e!=`object`||!e)return;let t=e.error;if(typeof t!=`object`||!t)return;let n=t.message;return typeof n==`string`&&n.length>0?n:void 0}function zt(e){switch(e.type){case`api_key`:return`API key · ${e.credential}`;case`oauth_subscription`:return`ChatGPT Subscription`;case`platform`:return`Managed proxy`;case`none`:return`None (local)`;default:return e.type}}function Bt({isOpen:e,assistantId:t,onClose:n}){let[r,i]=(0,X.useState)(!1),[a,o]=(0,X.useState)(null),s=u(),{data:c,isLoading:l,isError:f}=d({...te({path:{assistant_id:t}}),enabled:e}),p=Pt(),{data:m}=d({...W({path:{assistant_id:t}}),enabled:e&&p}),h=(0,X.useMemo)(()=>c?.connections??[],[c]);function g(){s.invalidateQueries({queryKey:ie({path:{assistant_id:t}})}),s.invalidateQueries({queryKey:G({path:{assistant_id:t}})})}function _(e){s.invalidateQueries({queryKey:ee({path:{assistant_id:t}})}),i(!1),o(null)}let v=h.map(e=>e.name),y=()=>{i(!1),o(null)};return(0,Z.jsx)(A.Root,{open:e,onOpenChange:e=>{e||(r?y():n())},children:e?r?(0,Z.jsx)(Ft,{mode:a?`edit`:`create`,connection:a??void 0,assistantId:t,existingNames:v,onSave:_,onCancel:y}):(0,Z.jsx)(Vt,{connections:h,loading:l,isError:f,assistantId:t,supportsDefaultProvider:p,defaultConnectionName:p?m?.resolvedConnectionName??null:null,onDefaultChanged:g,onClose:n,onEditClick:e=>{o(e),i(!0)},onNewClick:()=>{o(null),i(!0)},onConnectionDeleted:()=>{s.invalidateQueries({queryKey:ee({path:{assistant_id:t}})})}}):null})}function Vt({connections:e,loading:t,isError:n,assistantId:r,supportsDefaultProvider:i,defaultConnectionName:o,onDefaultChanged:c,onClose:l,onEditClick:u,onNewClick:d,onConnectionDeleted:p}){let[h,g]=(0,X.useState)({}),[_,v]=(0,X.useState)({}),y=f({...re(),onMutate:e=>{let t=e.body?.connectionName;t&&g(e=>{let n={...e};return delete n[t],n})},onSuccess:c,onError:(e,t)=>{a(e,{context:`settings-ai-set-default-provider`});let n=t.body?.connectionName;n&&g(e=>({...e,[n]:`Failed to set default provider. Please try again.`}))}});function b(e){Lt(e.provider)&&y.mutate({path:{assistant_id:r},body:{provider:e.provider,connectionName:e.name}})}async function x(e){v(t=>({...t,[e]:!0})),g(t=>{let n={...t};return delete n[e],n});try{let{error:t,response:n}=await P({path:{assistant_id:r,name:e}});n?.ok||n?.status===404?p(e):n?.status===409?g(n=>({...n,[e]:Rt(t)??`Connection is in use by one or more profiles. Remove those references first.`})):g(t=>({...t,[e]:`Failed to delete connection. Please try again.`}))}catch{g(t=>({...t,[e]:`Failed to delete connection. Please try again.`}))}finally{v(t=>{let n={...t};return delete n[e],n})}}return(0,Z.jsxs)(A.Content,{size:`md`,children:[(0,Z.jsxs)(A.Header,{children:[(0,Z.jsx)(A.Title,{children:`Provider Connections`}),(0,Z.jsx)(A.Description,{children:`Manage inference provider connections. Each connection binds a name to a provider and auth configuration.`})]}),(0,Z.jsx)(A.Body,{children:t?(0,Z.jsx)(`div`,{className:`space-y-2 py-2`,children:[1,2,3].map(e=>(0,Z.jsx)(`div`,{className:`h-10 animate-pulse rounded-lg bg-[var(--surface-active)]`},e))}):n?(0,Z.jsx)(m,{variant:`body-medium-default`,as:`p`,className:`py-4 text-center text-(--system-negative-strong)`,children:`Failed to load connections. Please try again.`}):e.length===0?(0,Z.jsx)(m,{variant:`body-medium-lighter`,as:`p`,className:`py-4 text-center text-(--content-tertiary)`,children:`No connections yet. Create one to get started.`}):(0,Z.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>{let t=_[e.name]??!1,n=h[e.name],r=e.isManaged??!1,a=e.name===o,c=Lt(e.provider),l=y.isPending&&y.variables?.body?.connectionName===e.name;return(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-3 rounded-lg px-2 py-2`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(m,{variant:`body-medium-default`,as:`span`,className:`text-(--content-default)`,children:e.label??e.name}),r&&(0,Z.jsx)(E,{tone:`positive`,title:`Managed by Platform — auth is locked, but you can rename this connection.`,children:`Platform`}),a&&(0,Z.jsx)(E,{tone:`info`,title:`Built-in profiles (Balanced, Quality, Speed) run through this connection.`,children:`Default`})]}),(0,Z.jsxs)(m,{variant:`body-medium-lighter`,as:`p`,className:`mt-0.5 text-(--content-tertiary)`,children:[e.label?`${e.name} · `:``,Xe[e.provider]??e.provider,` · `,zt(e.auth)]})]}),(0,Z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[i&&!a&&(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,disabled:!c||l,title:c?`Run the built-in profiles through this connection.`:`Built-in profiles can't run on this provider.`,onClick:()=>b(e),children:`Set as default`}),!r&&(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,onClick:()=>u(e),children:`Edit`}),(0,Z.jsx)(s,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(ut,{}),"aria-label":`Delete ${e.name}`,disabled:r||a||t,title:r?`Managed connections cannot be deleted`:a?`This connection serves your default provider. Set another connection as default first.`:void 0,onClick:()=>void x(e.name),tintColor:`var(--system-negative-strong)`})]})]}),n?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`px-2 pb-1 text-(--system-negative-strong)`,children:n}):null]},e.name)})})}),(0,Z.jsxs)(A.Footer,{className:`justify-between`,children:[(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:d,children:`+ New Connection`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:l,children:`Done`})]})]})}function $(e){let[t,n]=(0,X.useState)(void 0);return(0,X.useEffect)(()=>{t!==void 0&&e===t.value&&n(void 0)},[e,t]),[t===void 0?e:t.value,(0,X.useCallback)(e=>n(e===void 0?void 0:{value:e}),[])]}function Ht(){let e=Y(),t=u(),{data:n}=d({...U({path:{assistant_id:e}}),staleTime:3e4}),r=Pt(),{data:i,refetch:o}=d({...W({path:{assistant_id:e}}),enabled:r}),c=i?.availability,l=n?.llm?.activeProfile??null,f=n?.llm?.advisorProfile??null,p=n?.llm?.callSites??{},{profiles:h,profileOrder:g}=De(n?.llm,e),_=(0,X.useMemo)(()=>Pe(h,g),[h,g]),v=q({onSuccess:n=>{K(t,{path:{assistant_id:e}},n)}}),[y,b]=$(l),[x,S]=$(f),[w,E]=(0,X.useState)(!1),[D,O]=(0,X.useState)(!1),[k,A]=(0,X.useState)(!1),M=(0,X.useMemo)(()=>ke(_,[y]),[_,y]),P=(0,X.useMemo)(()=>ke(_,[x]),[_,x]),F=Object.entries(p).filter(([e,t])=>e!==`mainAgent`&&(t?.profile!=null||t?.provider!=null||t?.model!=null)).length,I=F===1?`1 Override`:F>0?`${F} Overrides`:`Overrides`,L=y!==l,R=x!==f,z=(0,X.useCallback)(async()=>{try{let t={};L&&(t.activeProfile=y),R&&(t.advisorProfile=x),await v.mutateAsync({path:{assistant_id:e},body:{llm:t}}),j.success(`Saved.`)}catch(e){j.error(`Failed to save. Please try again.`),a(e,{context:`settings-ai-language-model-save`})}},[L,R,y,x,v,e]);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(vt,{title:`Language Model`,subtitle:`Configure the LLMs that power your assistant`,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[c&&c.status!==`ok`&&(0,Z.jsx)(T,{tone:c.status===`unknown`?`warning`:`error`,children:c.message??`Your default provider is not available.`}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Default Profile`}),(0,Z.jsx)(N,{value:y??``,onChange:e=>{b(e===``?null:e)},placeholder:`Select a default profile…`,options:M.map(e=>({value:e.name,label:lt(e)}))}),M.length===0?(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-1 text-(--content-tertiary)`,children:`No profiles yet. Click Profiles below to create one.`}):null]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Advisor Profile`}),(0,Z.jsx)(N,{value:x??``,onChange:e=>{S(e===``?null:e)},placeholder:`Select an advisor profile…`,options:P.map(e=>({value:e.name,label:lt(e)}))}),(0,Z.jsx)(m,{variant:`body-small-default`,as:`p`,className:`mt-1 text-(--content-tertiary)`,children:`Which model your assistant consults for a second opinion`})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:()=>A(!0),children:`Providers`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:()=>E(!0),children:`Profiles`}),(0,Z.jsx)(s,{variant:`outlined`,size:`compact`,onClick:()=>O(!0),children:I})]}),(L||R)&&(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:z,disabled:v.isPending}),v.isPending&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]})}),e&&(0,Z.jsx)(jt,{isOpen:w,assistantId:e,onClose:()=>E(!1)}),e&&(0,Z.jsx)(Tt,{isOpen:D,onClose:()=>O(!1),assistantId:e}),e&&(0,Z.jsx)(Bt,{isOpen:k,assistantId:e,onClose:()=>{A(!1),r&&o()}})]})}var Ut=`vellum:ai:imageGenMode`,Wt=`vellum:ai:imageGenModel`,Gt=`vellum:ai:webSearchMode`,Kt=`vellum:ai:webSearchProvider`,qt=`vellum:ai:webFetchProvider`,Jt=`vellum:ai:emailMode`,Yt=`vellum:ai:emailByoProvider`,Xt=`vellum:voice:ttsProvider`,Zt=`vellum:voice:ttsApiKey:`,Qt=`vellum:voice:ttsVoiceId:`,$t=`vellum:voice:sttProvider`,en=`vellum:voice:sttApiKey:`;function tn(){let e=Y();return(0,X.useCallback)(async(t,n)=>{try{let{data:r}=await B({path:{assistant_id:e},body:{value:n,type:`api_key`,name:t},throwOnError:!0});je(r)}catch(e){throw e instanceof Error&&e.message===`No assistant found`?j.error(`Assistant not ready. Please try again.`):j.error(`Failed to save ${t} API key. Please try again.`),a(e,{context:`provision_provider_key`}),e}},[e])}function nn(){let e=Y(),i=u(),{data:o}=d({...U({path:{assistant_id:e}}),staleTime:3e4}),s=q({onSuccess:t=>{K(i,{path:{assistant_id:e}},t)}}),c=tn(),{serverWebSearchMode:l,serverWebSearchProvider:f}=(0,X.useMemo)(()=>{if(!o)return{serverWebSearchMode:Je(n(Gt,`your-own`),`your-own`),serverWebSearchProvider:n(Kt,`inference-provider-native`)};let e=o.services?.[`web-search`];return{serverWebSearchMode:Je(e?.mode??n(`vellum:ai:webSearchMode`,`your-own`),`your-own`),serverWebSearchProvider:e?.provider||n(`vellum:ai:webSearchProvider`,`inference-provider-native`)}},[o]),[p,m]=(0,X.useState)(!1),[h,g]=$(l),[_,v]=$(f),[y,b]=(0,X.useState)(``),x=qe.has(_),{hasStoredCredential:S}=Me({assistantId:e,credentialKind:`api_key`,credentialName:_,enabled:x}),w=y.trim().length>0,T=p||h===`your-own`&&x&&!S&&!w||!(h!==l||(h===`managed`?`inference-provider-native`:_)!==f)&&!w,E=Ie(we[_]??`Enter your API key`,S),O=(0,X.useCallback)(async()=>{m(!0);let t=y.trim(),n=h===`managed`?`inference-provider-native`:_,o=Ne(n),l=h===`your-own`&&x&&t.length>0;try{l&&await c(n,t),await s.mutateAsync({path:{assistant_id:e},body:{services:{"web-search":{mode:h,provider:n}}}}).catch(e=>{throw j.error(`Failed to update assistant configuration. Please try again.`),a(e,{context:`patch_daemon_config`}),e})}catch{m(!1);return}m(!1);try{if(r(Gt,h),r(Kt,n),l){o&&r(o,t);let n=Ae(e,`api_key`,_);i.setQueryData(n,!0),i.invalidateQueries({queryKey:n}),b(``)}j.success(`Web search settings saved.`)}catch(e){a(e,{context:`settings-ai-web-search-persist-local`}),j.error(`Saved, but local preferences could not be written.`)}},[x,s,c,i,e,y,h,_]),k=(0,X.useCallback)(()=>{let e=Ne(_);e&&t(e),b(``),v(`inference-provider-native`),r(Kt,`inference-provider-native`)},[_,v]);return(0,Z.jsx)(gt,{title:`Web Search`,subtitle:`Configure how your assistant should search the web`,mode:h,onModeChange:e=>g(e),children:h===`managed`?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Web search is included with managed inference.`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:O,disabled:T}),p&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:_,onChange:v,options:Ve.map(e=>({value:e,label:Ye[e]??e}))})]}),x&&(0,Z.jsx)(D,{label:`API Key`,type:`password`,value:y,onChange:e=>b(e.target.value),placeholder:E,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:O,disabled:T}),p&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`}),x&&(0,Z.jsx)(_t,{onClick:k,filled:!0})]})]})})}var rn=`default`;function an(){let e=Y(),i=u(),{data:o}=d({...U({path:{assistant_id:e}}),staleTime:3e4}),s=q({onSuccess:t=>{K(i,{path:{assistant_id:e}},t)}}),c=tn(),l=(0,X.useMemo)(()=>o?o.services?.[`web-fetch`]?.provider||n(`vellum:ai:webFetchProvider`,rn):n(qt,rn),[o]),[f,p]=(0,X.useState)(!1),[m,h]=$(l),[g,_]=(0,X.useState)(``),v=Qe.has(m),{hasStoredCredential:y}=Me({assistantId:e,credentialKind:`api_key`,credentialName:m,enabled:v}),b=g.trim().length>0,x=f||v&&!y&&!b||m===l&&!b,S=Ie(ot[m]??`Enter your API key`,y),w=(0,X.useCallback)(async()=>{p(!0);let t=g.trim(),n=v&&t.length>0;try{n&&await c(m,t),await s.mutateAsync({path:{assistant_id:e},body:{services:{"web-fetch":{provider:m}}}}).catch(e=>{throw j.error(`Failed to update assistant configuration. Please try again.`),a(e,{context:`patch_daemon_config`}),e})}catch{p(!1);return}p(!1);try{if(r(qt,m),n){let n=at(m);n&&r(n,t);let a=Ae(e,`api_key`,m);i.setQueryData(a,!0),i.invalidateQueries({queryKey:a}),_(``)}j.success(`Web fetch settings saved.`)}catch(e){a(e,{context:`settings-ai-web-fetch-persist-local`}),j.error(`Saved, but local preferences could not be written.`)}},[v,s,c,i,e,g,m]),T=(0,X.useCallback)(()=>{let e=at(m);e&&t(e),_(``),h(rn),r(qt,rn)},[m,h]);return(0,Z.jsx)(vt,{id:`web-fetch`,title:`Web Fetch`,subtitle:`Configure how your assistant reads individual web pages`,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:m,onChange:h,options:rt.map(e=>({value:e,label:ct[e]??e}))})]}),v&&(0,Z.jsx)(D,{label:`API Key`,type:`password`,value:g,onChange:e=>_(e.target.value),placeholder:S,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:w,disabled:x}),f&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`}),v&&(0,Z.jsx)(_t,{onClick:T,filled:!0})]})]})})}var on=[{id:`elevenlabs`,displayName:`ElevenLabs`,subtitle:`High-quality voice synthesis for conversations and read-aloud. Requires an ElevenLabs API key.`,supportsVoiceSelection:!0,apiKeyPlaceholder:`sk_…`,credentialsGuide:{description:`Sign in to ElevenLabs, go to your Profile, and copy your API key.`,url:`https://elevenlabs.io/app/settings/api-keys`,linkLabel:`Open ElevenLabs API Keys`}},{id:`fish-audio`,displayName:`Fish Audio`,subtitle:`Natural-sounding voice synthesis with custom voice cloning. Requires a Fish Audio API key and voice reference ID.`,supportsVoiceSelection:!0,apiKeyPlaceholder:`Enter your Fish Audio API key`,credentialsGuide:{description:`Sign in to Fish Audio, navigate to API Keys in your dashboard, and create a new key.`,url:`https://fish.audio/app/api-keys/`,linkLabel:`Open Fish Audio API Keys`}},{id:`deepgram`,displayName:`Deepgram`,subtitle:`Fast, accurate text-to-speech synthesis. Uses the same API key as Deepgram speech-to-text.`,supportsVoiceSelection:!1,apiKeyPlaceholder:`Enter your Deepgram API key`,credentialsGuide:{description:`Sign in to Deepgram, navigate to your API Keys page, and create or copy an existing key. This is the same key used for speech-to-text.`,url:`https://console.deepgram.com/`,linkLabel:`Open Deepgram Console`}},{id:`xai`,displayName:`xAI`,subtitle:`Text-to-speech from xAI with expressive voices (eve, ara, rex, sal, leo). Requires an xAI API key.`,supportsVoiceSelection:!1,apiKeyPlaceholder:`Enter your xAI API key`,credentialsGuide:{description:`Sign in to the xAI console, navigate to API Keys, and create a new key.`,url:`https://console.x.ai/`,linkLabel:`Open xAI Console`}}],sn=[{id:`deepgram`,displayName:`Deepgram`,subtitle:`Fast, accurate speech-to-text transcription. Uses the same API key as Deepgram text-to-speech.`,apiKeyPlaceholder:`Enter your Deepgram API key`,credentialsGuide:{description:`Sign in to Deepgram, navigate to your API Keys page, and create or copy an existing key. This is the same key used for text-to-speech.`,url:`https://console.deepgram.com/`,linkLabel:`Open Deepgram Console`}},{id:`openai`,displayName:`OpenAI`,subtitle:`OpenAI Whisper transcription. Requires an OpenAI API key.`,apiKeyPlaceholder:`sk-…`,credentialsGuide:{description:`Sign in to the OpenAI platform, navigate to API Keys, and create a new secret key.`,url:`https://platform.openai.com/api-keys`,linkLabel:`Open OpenAI API Keys`}},{id:`macos-native`,displayName:`macOS Native Dictation`,subtitle:`Apple's on-device speech recognition, running locally through the macOS helper. Works offline and needs no API key.`,requiresNativeDictation:!0,setupWarning:`Requires macOS Dictation to be turned on: open System Settings → Keyboard, then enable Dictation. macOS downloads the on-device speech model the first time Dictation is enabled — without it, voice input produces no transcript.`}],cn=[{id:`mailgun`,displayName:`Mailgun`,setupSkill:`mailgun-setup`,docsUrl:`https://www.mailgun.com/`},{id:`resend`,displayName:`Resend`,setupSkill:`resend-setup`,docsUrl:`https://resend.com/`}],ln=[`gemini-3.1-flash-image-preview`,`gemini-3-pro-image-preview`,`gpt-image-2`],un={"gemini-3.1-flash-image-preview":`Nano Banana 2`,"gemini-3-pro-image-preview":`Nano Banana Pro`,"gpt-image-2":`GPT Image 2`};function dn(e){return e.startsWith(`gpt-`)||e.startsWith(`dall-e-`)?`openai`:(e.startsWith(`gemini-`),`gemini`)}function fn({assistantId:e,assistantHandle:t,emailRootDomain:n}){let r=u(),i=c(),[o,p]=l(),[m,h]=(0,X.useState)(``),[g,_]=(0,X.useState)(!1),[v,x]=(0,X.useState)(null),[S,w]=(0,X.useState)(``),[E,D]=(0,X.useState)(null),[O,k]=(0,X.useState)(!1),[A,N]=(0,X.useState)(!1),[P,F]=(0,X.useState)(!1);(0,X.useEffect)(()=>{g||!t||m||(h(t),_(!0))},[t,g,m]);let I=d({...me(),enabled:!0}),L=I.data,R=L?.entitlements,z=R?.managed_email===!0,B=!!R&&!z,ee=!L&&I.isError&&!I.isFetching,V=d({...le({path:{assistant_id:e}}),enabled:!B}),te=d({...ve({path:{assistant_id:e}}),enabled:!B}),H=V.data?.results?.[0],U=te.data?.results?.[0],ne=H?`${H.subdomain}.${n}`:null,W=d({...pe({path:{assistant_id:e,id:U?.id??``}}),enabled:!!U?.id,refetchOnWindowFocus:!1}),G=d({...be({path:{assistant_id:e,id:H?.id??``}}),enabled:!!H?.id,refetchInterval:e=>{let t=e.state.data?.status;return t===`verified`||t===`failed`?!1:1e4},refetchOnWindowFocus:!0});(0,X.useEffect)(()=>{o.get(`release`)!==`1`||!H||U||(N(!0),p(e=>{let t=new URLSearchParams(e);return t.delete(`release`),t},{replace:!0}))},[U,H,o,p]);let re=f(_e()),ie=f(ye()),K=f(ue()),q=f(de()),J=(0,X.useCallback)(()=>{let t={assistant_id:e};r.invalidateQueries({queryKey:he({path:t})}),r.invalidateQueries({queryKey:ge({path:t})}),U?.id&&r.invalidateQueries({queryKey:fe({path:{...t,id:U.id}})}),r.invalidateQueries({queryKey:Se()})},[U?.id,e,r]),ae=(0,X.useCallback)(async()=>{let t=m.trim().toLowerCase();if(!t){x(`Enter a subdomain.`);return}k(!1);try{await re.mutateAsync({path:{assistant_id:e},body:{subdomain:t}}),h(``),x(null),J(),j.success(`Domain ${t}.${n} registered.`)}catch(e){x(oe(e,void 0,`Failed to register domain.`))}},[e,n,J,re,m]),ce=(0,X.useCallback)(async()=>{let t=S.trim().toLowerCase();if(!t){D(`Enter an email username.`);return}try{await K.mutateAsync({path:{assistant_id:e},body:{username:t}}),w(``),D(null),J(),j.success(`Email address created.`)}catch(e){D(oe(e,void 0,`Failed to create email address.`))}},[e,J,K,S]),xe=(0,X.useCallback)(async()=>{if(U?.id){F(!1);try{await q.mutateAsync({path:{assistant_id:e,id:U.id}}),J(),j.success(`Email address removed.`)}catch(e){a(e,{context:`email_address_delete`}),j.error(`Failed to remove email address.`)}}},[U?.id,e,q,J]),Ce=(0,X.useCallback)(async()=>{if(!H?.id)return;if(U){j.error(`Remove the email address first.`);return}N(!1);let t=H.subdomain;try{await ie.mutateAsync({path:{assistant_id:e,id:H.id}}),h(t),J(),j.success(`Domain released.`)}catch(e){a(e,{context:`email_domain_release`}),j.error(`Failed to release domain.`)}},[U,e,ie,H?.id,H?.subdomain,J]);if(I.isLoading)return(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin`}),`Checking subscription…`]});if(B)return(0,Z.jsxs)(T,{tone:`info`,icon:(0,Z.jsx)(y,{className:`h-4 w-4`,"aria-hidden":!0}),title:`Get a dedicated email address for your assistant`,actions:(0,Z.jsx)(s,{size:`compact`,onClick:()=>i(`${se.settings.billing}?adjust_plan`),children:`Upgrade to Pro`}),children:[`Pro plans include a managed`,` `,`<your-subdomain>.${n}`,` inbox — no provider setup required. Or switch to `,(0,Z.jsx)(`strong`,{children:`Your Own`}),` to bring an existing provider.`]});let we=ee?(0,Z.jsx)(T,{tone:`warning`,title:`Couldn't verify subscription status`,actions:(0,Z.jsx)(s,{size:`compact`,variant:`outlined`,onClick:()=>I.refetch(),children:`Retry`}),children:`We couldn't reach the billing service. The form below assumes managed email is enabled for your org — if it isn't, registering a domain will fail.`}):null;return H?U?(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[we,(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Address`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`font-mono text-body-small-default text-[var(--content-default)]`,children:U.address}),(0,Z.jsx)(bt,{status:G.data?.status,message:G.data?.message,isLoading:G.isLoading}),(0,Z.jsx)(s,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,Z.jsx)(ut,{}),onClick:()=>F(!0),disabled:q.isPending,"aria-label":`Remove email address`})]}),(0,Z.jsx)(M,{open:P,title:`Remove Email Address`,message:(0,Z.jsxs)(Z.Fragment,{children:[`Are you sure you want to remove `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:U.address}),`? Your assistant will no longer be able to send or receive email at this address.`]}),confirmLabel:`Remove`,destructive:!0,onConfirm:xe,onCancel:()=>F(!1)})]}),W.data?.usage&&(0,Z.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[W.data.usage.sent_today,` /`,` `,W.data.usage.daily_limit,` sent today ·`,` `,W.data.usage.received_today,` received`]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[we,(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Domain`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsxs)(`span`,{className:`font-mono text-body-small-default text-[var(--content-default)]`,children:[H.subdomain,`.`,n]}),(0,Z.jsx)(bt,{status:G.data?.status,message:G.data?.message,isLoading:G.isLoading}),(0,Z.jsx)(s,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,Z.jsx)(ut,{}),onClick:()=>N(!0),disabled:ie.isPending,"aria-label":`Release domain`})]}),(0,Z.jsx)(M,{open:A,title:`Release Domain`,message:(0,Z.jsxs)(Z.Fragment,{children:[`Are you sure you want to release `,(0,Z.jsxs)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:[H.subdomain,`.`,n]}),`? The subdomain will become available for others to claim.`]}),confirmLabel:`Release`,destructive:!0,onConfirm:Ce,onCancel:()=>N(!1)})]}),(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Email address`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsxs)(`div`,{className:`flex h-9 min-w-0 flex-1 items-center rounded-md border bg-[var(--field-bg)] text-body-medium-lighter transition-[border-color] duration-150 ${E?`border-[var(--system-negative-strong)]`:`border-[var(--field-border)] focus-within:border-[var(--border-active)]`}`,children:[(0,Z.jsx)(`input`,{value:S,onChange:e=>{w(e.target.value.toLowerCase()),E&&D(null)},placeholder:`hi`,"aria-label":`Email username`,"aria-invalid":!!E,className:`h-full min-w-0 flex-1 bg-transparent pl-3 pr-1 text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`}),(0,Z.jsxs)(`span`,{className:`shrink-0 pr-3 font-mono text-[var(--content-secondary)]`,children:[`@`,ne]})]}),(0,Z.jsx)(s,{onClick:ce,disabled:K.isPending||!S.trim(),children:K.isPending?`Creating…`:`Create`})]}),E&&(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--system-negative-strong)]`,children:E})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[we,(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Subdomain`}),(0,Z.jsx)(b,{subdomain:m,onSubdomainChange:e=>{h(e),v&&x(null)},domainSuffix:n,subdomainPlaceholder:`my-assistant`,error:v}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Each assistant gets its own subdomain. Lowercase letters, numbers, and hyphens only.`}),(0,Z.jsx)(s,{onClick:()=>k(!0),disabled:re.isPending||!m.trim(),children:re.isPending?`Registering…`:`Register`}),(0,Z.jsx)(M,{open:O,title:`Set Subdomain`,message:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 font-mono text-[0.9em]`,children:m.trim().toLowerCase()||`subdomain`}),` will also become your assistant's public handle. You won't be able to change it once set.`]}),confirmLabel:`Confirm`,onConfirm:ae,onCancel:()=>k(!1)})]})}function pn(){let e=Y(),t=ce(),{data:o}=d({...xe(),enabled:t}),s=o?.results?.[0]?.handle,c=pt.use.emailRootDomain(),l=Ke(),[u,f]=(0,X.useState)(()=>l===`gated`?`your-own`:Je(n(Jt,`managed`),`managed`)),[p,m]=(0,X.useState)(()=>{let e=n(Yt,`resend`);return e===`mailgun`||e===`resend`?e:`resend`}),h=d({queryKey:[`byoEmailCredential`,e,p],queryFn:async()=>{let{data:t}=await z({path:{assistant_id:e},body:{service:p,field:`api_key`},throwOnError:!0});return t},enabled:u===`your-own`||l===`gated`,staleTime:6e4,retry:i,meta:{errorContext:`byo_email_credential_check`}});(0,X.useEffect)(()=>{h.error&&a(h.error,{context:`byo_email_credential_check`,bestEffort:!0})},[h.error]);let g=h.data?.hasSecret===!0,_=(0,X.useCallback)(e=>{f(e),r(Jt,e)},[]),y=(0,X.useCallback)(()=>{r(Yt,p),j.success(`Email settings saved.`)},[p]),b=(0,X.useMemo)(()=>cn.find(e=>e.id===p)??cn[0],[p]),C=(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(S,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Z.jsxs)(`span`,{children:[`Configure `,b.displayName,` via the assistant CLI: ask the assistant to run the`,` `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 text-[12px]`,children:b.setupSkill}),` `,`skill. It walks you through storing the API key, detecting the domain, and (optionally) wiring up an inbound webhook.`]}),(0,Z.jsxs)(`a`,{href:b.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[`Open `,b.displayName,(0,Z.jsx)(x,{className:`h-3 w-3`})]})]})]}),w=(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:p,onChange:e=>{(e===`mailgun`||e===`resend`)&&m(e)},options:cn.map(e=>({value:e.id,label:e.displayName}))})]}),g?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-[var(--system-positive-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-default)]`,children:[(0,Z.jsx)(v,{className:`h-4 w-4 shrink-0 text-[var(--system-positive-strong)]`}),(0,Z.jsxs)(`span`,{children:[b.displayName,` API key configured. To reconfigure, run the`,` `,(0,Z.jsx)(`code`,{className:`rounded bg-[var(--surface-active)] px-1 py-0.5 text-[12px]`,children:b.setupSkill}),` `,`skill.`]})]}),(0,Z.jsxs)(`a`,{href:b.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-body-small-default text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[`Open `,b.displayName,(0,Z.jsx)(x,{className:`h-3 w-3`})]})]}):C,(0,Z.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,Z.jsx)(Q,{onClick:y,disabled:!1})})]});return l===`gated`?(0,Z.jsx)(vt,{id:`email`,title:`Email`,subtitle:`Configure how your assistant sends and receives email`,children:w}):(0,Z.jsx)(gt,{id:`email`,title:`Email`,subtitle:`Configure how your assistant sends and receives email`,mode:u,onModeChange:_,children:u===`managed`?(0,Z.jsx)(`div`,{className:`space-y-4`,children:l===`disabled`?(0,Z.jsx)(Oe,{children:`Log in to the Vellum platform to manage email settings.`}):(0,Z.jsx)(fn,{assistantId:e,assistantHandle:s,emailRootDomain:c})}):w})}function mn(){let e=Y(),t=u(),{data:i}=d({...U({path:{assistant_id:e}}),staleTime:3e4}),o=q({onSuccess:n=>{K(t,{path:{assistant_id:e}},n)}}),s=tn(),[c,l]=$((0,X.useMemo)(()=>Je(i?i.services?.[`image-generation`]?.mode??n(`vellum:ai:imageGenMode`,`your-own`):n(Ut,`your-own`),`your-own`),[i])),[f,p]=(0,X.useState)(()=>n(Wt,`gemini-3.1-flash-image-preview`)),[m,h]=(0,X.useState)(``),[g,_]=(0,X.useState)(!1),v=(0,X.useCallback)(async()=>{_(!0);let n=m.trim(),i=c===`your-own`&&n.length>0;try{i&&await s(dn(f),n),await o.mutateAsync({path:{assistant_id:e},body:{services:{"image-generation":{mode:c}}}}).catch(e=>{throw j.error(`Failed to update assistant configuration. Please try again.`),a(e,{context:`patch_daemon_config`}),e});try{await I({path:{assistant_id:e},body:{modelId:f},throwOnError:!0})}catch(e){throw j.error(`Failed to update image generation model. Please try again.`),a(e,{context:`set_image_gen_model`}),e}finally{t.invalidateQueries({queryKey:G({path:{assistant_id:e}})})}}catch{_(!1);return}_(!1);try{r(Ut,c),r(Wt,f),i&&h(``),j.success(`Image generation settings saved.`)}catch(e){a(e,{context:`settings-ai-image-gen-persist-local`}),j.error(`Saved, but local preferences could not be written.`)}},[m,c,f,e,o,s,t]),y=(0,X.useCallback)(()=>{h(``),p(`gemini-3.1-flash-image-preview`),r(Wt,`gemini-3.1-flash-image-preview`)},[]);return(0,Z.jsx)(gt,{title:`Image Generation`,subtitle:`Configure which model your assistant uses to generate images`,mode:c,onModeChange:e=>l(e),children:c===`managed`?(0,Z.jsxs)(`div`,{className:`space-y-3`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Active Model`}),(0,Z.jsxs)(`div`,{className:`flex items-end gap-3`,children:[(0,Z.jsx)(N,{className:`flex-1`,value:f,onChange:p,options:ln.map(e=>({value:e,label:un[e]??e}))}),(0,Z.jsx)(Q,{onClick:v,disabled:g}),g&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`})]})]}):(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsx)(D,{label:`API Key`,type:`password`,value:m,onChange:e=>h(e.target.value),placeholder:dn(f)===`openai`?`Enter your OpenAI API key`:`Enter your Gemini API key`,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Active Model`}),(0,Z.jsx)(N,{value:f,onChange:p,options:ln.map(e=>({value:e,label:un[e]??e}))})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:v,disabled:g}),g&&(0,Z.jsx)(C,{className:`h-4 w-4 animate-spin text-[var(--content-disabled)]`}),(0,Z.jsx)(_t,{onClick:y})]})]})})}async function hn(e){let{provider:t,apiKey:n,voiceId:r,text:i}=e;if(n.trim().length===0)return{kind:`error`,message:`Save an API key for this provider first.`};try{return t===`elevenlabs`?await gn(n,r,i):t===`deepgram`?await _n(n,i):t===`fish-audio`?{kind:`unsupported`,message:`Fish Audio TTS is only supported in the desktop app today. Use ElevenLabs or Deepgram to test from the browser.`}:t===`xai`?{kind:`unsupported`,message:`xAI TTS is only supported in the desktop app today. Use ElevenLabs or Deepgram to test from the browser.`}:{kind:`unsupported`,message:`TTS testing for "${t}" is not supported from the browser yet.`}}catch(e){return{kind:`error`,message:e instanceof Error?e.message:`Failed to reach the TTS provider.`}}}async function gn(e,t,n){let r=t.trim();if(r.length===0)return{kind:`error`,message:`Enter and save a Voice ID before testing ElevenLabs.`};let i=await fetch(`https://api.elevenlabs.io/v1/text-to-speech/${encodeURIComponent(r)}?output_format=mp3_44100_128`,{method:`POST`,headers:{"xi-api-key":e,"Content-Type":`application/json`,Accept:`audio/mpeg`},body:JSON.stringify({text:n,model_id:`eleven_turbo_v2_5`})});return i.ok?{kind:`audio`,blob:await i.blob()}:{kind:`error`,message:await vn(i,`ElevenLabs rejected the request.`)}}async function _n(e,t){let n=await fetch(`https://api.deepgram.com/v1/speak?model=aura-2-thalia-en`,{method:`POST`,headers:{Authorization:`Token ${e}`,"Content-Type":`application/json`,Accept:`audio/mpeg`},body:JSON.stringify({text:t})});return n.ok?{kind:`audio`,blob:await n.blob()}:{kind:`error`,message:await vn(n,`Deepgram rejected the request.`)}}async function vn(e,t){try{let n=await e.text();if(n.length===0)return`${t} (HTTP ${e.status})`;try{let e=JSON.parse(n);if(e&&typeof e==`object`&&`detail`in e&&typeof e.detail==`string`)return e.detail;if(e&&typeof e==`object`&&`message`in e&&typeof e.message==`string`)return e.message}catch{}return n.slice(0,200)}catch{return`${t} (HTTP ${e.status})`}}var yn={elevenlabs:`voiceId`,"fish-audio":`referenceId`,xai:`voiceId`};function bn(){let e=Y(),t=J.use.name()??`your assistant`,i=ce(),a=u(),{data:o}=d({...V({path:{assistant_id:e}}),enabled:i,staleTime:1/0}),c=o?.providers??on,{data:l}=d({...U({path:{assistant_id:e}}),enabled:i,staleTime:3e4}),f=l?.services?.tts?.provider,p=c[0]?.id??`elevenlabs`,m=(0,X.useMemo)(()=>f??n(`vellum:voice:ttsProvider`,p),[f,p]),h=!!f,[g,_]=$(m),[v,y]=(0,X.useState)(``),[b,x]=(0,X.useState)(``),[S,C]=(0,X.useState)(``),[w,T]=(0,X.useState)(!1),[E,O]=(0,X.useState)(!1),[k,A]=(0,X.useState)(!1),M=(0,X.useMemo)(()=>c.find(e=>e.id===g)??c[0],[g,c]),P=(0,X.useCallback)(e=>{let t=n(Zt+e,``),r=n(Qt+e,``);T(t.length>0),x(r),C(r),y(``)},[]);(0,X.useEffect)(()=>{P(g)},[g,P]);let F=(0,X.useMemo)(()=>{let e=g!==m,t=v.trim().length>0,n=b.trim()!==S;return e||t||n},[g,m,v,b,S]),I=(0,X.useCallback)(async()=>{let t=v.trim(),i=b.trim();r(Xt,g),t.length>0&&r(Zt+g,t),r(Qt+g,i);let o=t.length>0?t:n(Zt+g,``),s=yn[g];A(!0);try{if(o.length>0){let{response:t}=await L({path:{assistant_id:e},body:{service:g,field:`api_key`,value:o,label:`${M.displayName} API Key`},throwOnError:!1});if(!t?.ok)throw Error(`Failed to store API key (HTTP ${t?.status??`?`})`)}let t={...g!==m||!h?{provider:g}:{},...s?{providers:{[g]:{[s]:i}}}:{}};if(Object.keys(t).length>0){let{response:n}=await R({path:{assistant_id:e},body:{services:{tts:t}},throwOnError:!1});if(!n?.ok)throw Error(`Failed to save configuration (HTTP ${n?.status??`?`})`)}T(o.length>0),C(i),y(``),a.invalidateQueries({queryKey:G({path:{assistant_id:e}})}),j.success(`Text-to-speech settings saved`)}catch(e){j.error(e instanceof Error?e.message:`Failed to save text-to-speech settings`)}finally{A(!1)}},[e,g,v,b,M,m,h,a]),z=(0,X.useCallback)(()=>{r(Zt+g,``),T(!1),y(``)},[g]),B=(0,X.useCallback)(async()=>{O(!0);try{let e=n(Zt+g,``),r=v.trim(),i=r.length>0?r:e;if(i.length===0){j.error(`Save an API key for this provider before testing.`);return}let a=n(Qt+g,``),o=b.trim(),s=await hn({provider:g,apiKey:i,voiceId:o.length>0?o:a,text:`Hey! It's ${t}. How does this sound?`});if(s.kind!==`audio`){j.error(s.message);return}let c=URL.createObjectURL(s.blob);try{let e=new Audio(c);await e.play(),await new Promise(t=>{e.onended=()=>t(),e.onerror=()=>t()})}finally{URL.revokeObjectURL(c)}}finally{O(!1)}},[t,v,g,b]),ee=w?`•••••••• (Enter a new key to replace)`:M.apiKeyPlaceholder;return(0,Z.jsx)(vt,{title:`Text-to-Speech`,subtitle:M.subtitle,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:g,onChange:_,options:c.map(e=>({value:e.id,label:e.displayName})),"aria-label":`TTS provider`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`API Key`}),(0,Z.jsx)(D,{type:`password`,value:v,onChange:e=>y(e.target.value),placeholder:ee,fullWidth:!0})]}),M.supportsVoiceSelection&&(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Voice ID`}),(0,Z.jsx)(D,{type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:`Enter a voice ID`,fullWidth:!0})]}),(0,Z.jsx)(yt,{guide:M.credentialsGuide}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(s,{variant:`outlined`,onClick:B,disabled:E,children:E?`Testing…`:`Test`}),(0,Z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,Z.jsx)(Q,{onClick:I,disabled:!F||k}),w&&(0,Z.jsx)(_t,{onClick:z})]})]})]})})}var xn={deepgram:{provider:`deepgram`,credentialService:`deepgram`},openai:{provider:`openai-whisper`,credentialService:`openai`}},Sn={deepgram:`deepgram`,"openai-whisper":`openai`};function Cn(){let e=Y(),t=ce(),i=u(),[a]=(0,X.useState)(()=>sn.filter(e=>!e.requiresNativeDictation||Be())),o=a[0]?.id??`deepgram`,{data:s}=d({...U({path:{assistant_id:e}}),enabled:t,staleTime:3e4}),c=s?.services?.stt?.provider,l=(0,X.useMemo)(()=>{let e=c?Sn[c]:void 0;if(e&&a.some(t=>t.id===e))return e;let t=n($t,o);return a.some(e=>e.id===t)?t:o},[c,a,o]),f=!!c,[p,m]=$(l),[h,g]=(0,X.useState)(``),[_,v]=(0,X.useState)(!1),[y,b]=(0,X.useState)(!1);(0,X.useEffect)(()=>{let e=n($t,o);e===`macos-native`&&!a.some(t=>t.id===e)&&r($t,o)},[a,o]);let x=(0,X.useMemo)(()=>a.find(e=>e.id===p)??a[0],[a,p]),S=x.apiKeyPlaceholder!==void 0;(0,X.useEffect)(()=>{v(n(en+p,``).length>0),g(``)},[p]);let C=(0,X.useMemo)(()=>{let e=p!==l,t=h.trim().length>0;return e||t},[p,l,h]),T=(0,X.useCallback)(async()=>{let t=h.trim();r($t,p),t.length>0&&r(en+p,t);let a=xn[p];b(!0);try{if(a){let r=t.length>0?t:n(en+p,``);if(r.length>0){let{response:t}=await L({path:{assistant_id:e},body:{service:a.credentialService,field:`api_key`,value:r,label:`${x.displayName} API Key`},throwOnError:!1});if(!t?.ok)throw Error(`Failed to store API key (HTTP ${t?.status??`?`})`)}if(p!==l||!f){let{response:t}=await R({path:{assistant_id:e},body:{services:{stt:{provider:a.provider}}},throwOnError:!1});if(!t?.ok)throw Error(`Failed to save configuration (HTTP ${t?.status??`?`})`)}}t.length>0&&v(!0),g(``),i.invalidateQueries({queryKey:G({path:{assistant_id:e}})}),j.success(`Speech-to-text settings saved`)}catch(e){j.error(e instanceof Error?e.message:`Failed to save speech-to-text settings`)}finally{b(!1)}},[e,p,h,x,l,f,i]),E=(0,X.useCallback)(()=>{r(en+p,``),v(!1),g(``)},[p]),O=_?`•••••••• (Enter a new key to replace)`:x.apiKeyPlaceholder;return(0,Z.jsx)(vt,{title:`Speech-to-Text`,subtitle:x.subtitle,children:(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`Provider`}),(0,Z.jsx)(N,{value:p,onChange:m,options:a.map(e=>({value:e.id,label:e.displayName})),"aria-label":`STT provider`})]}),S&&(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`label`,{className:`block text-body-small-default text-[var(--content-tertiary)]`,children:`API Key`}),(0,Z.jsx)(D,{type:`password`,value:h,onChange:e=>g(e.target.value),placeholder:O,fullWidth:!0})]}),x.setupWarning&&(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-subtle)] bg-[var(--surface-sunken)] p-3 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(w,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--system-mid-strong)]`}),(0,Z.jsx)(`span`,{children:x.setupWarning})]}),x.credentialsGuide&&(0,Z.jsx)(yt,{guide:x.credentialsGuide}),(0,Z.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[(0,Z.jsx)(Q,{onClick:T,disabled:!C||y}),_&&(0,Z.jsx)(_t,{onClick:E})]})]})})}function wn(){return(0,X.useEffect)(()=>{let e=window.location.hash.slice(1);e&&requestAnimationFrame(()=>{document.getElementById(e)?.scrollIntoView({block:`start`})})},[]),(0,Z.jsxs)(`div`,{className:`space-y-5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-[var(--border-base)] bg-[var(--surface-base)] px-4 py-2.5`,children:[(0,Z.jsx)(S,{className:`mt-0.5 h-4 w-4 shrink-0 text-[var(--content-tertiary)]`}),(0,Z.jsxs)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:[`Managed services are metered and deducted from your Vellum account balance.`,` `,(0,Z.jsxs)(`a`,{href:`https://www.vellum.ai/docs/pricing`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-[var(--primary-base)] hover:underline`,children:[`View pricing`,(0,Z.jsx)(x,{className:`h-3.5 w-3.5`})]})]})]}),(0,Z.jsx)(Ht,{}),(0,Z.jsx)(nn,{}),(0,Z.jsx)(an,{}),(0,Z.jsx)(pn,{}),(0,Z.jsx)(mn,{}),(0,Z.jsx)(bn,{}),(0,Z.jsx)(Cn,{})]})}export{wn as AiPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={version:1,flags:[{id:`auto-analyze`,scope:`assistant`,key:`auto-analyze`,label:`Auto-analyze conversations`,description:`Automatically trigger conversation analysis on the same cadence as memory extraction (batch threshold, idle debounce, end-of-conversation). The analysis agent has full tool access and writes back to memory and skills without user approval.`,defaultEnabled:!1},{id:`user-hosted-enabled`,scope:`client`,key:`user-hosted-enabled`,label:`User Hosted Enabled`,description:`Enable user-hosted onboarding flow`,defaultEnabled:!1},{id:`pre-chat-onboarding-experiment-2026-06-06`,scope:`client`,key:`pre-chat-onboarding-experiment-2026-06-06`,label:`Pre-chat Onboarding Experiment 2026-06-06`,description:`Pre-chat onboarding experiment with control and variant-a arms. Control shows the full funnel; variant-a shows the condensed pared-down flow.`,defaultEnabled:`control`,values:[`control`,`variant-a`]},{id:`experiment-activation-flow-2026-06-03`,scope:`both`,key:`experiment-activation-flow-2026-06-03`,label:`Activation Flow Experiment 2026-06-03`,description:`Multivariate activation-flow experiment. control = standard flow; variant-a = activation rail; personal-page = new sign-up-page variant (front-end only). Targeted via LaunchDarkly.`,defaultEnabled:`control`,values:[`control`,`variant-a`,`personal-page`]},{id:`local-docker-enabled`,scope:`client`,key:`local-docker-enabled`,label:`Local Docker Mode`,description:`When enabled, the Local hosting option uses Docker under the hood for sandboxed execution, hiding the separate Docker card`,defaultEnabled:!1},{id:`a2a-channel`,scope:`assistant`,key:`a2a-channel`,label:`A2A Channel`,description:`Enable the A2A (Agent-to-Agent) channel for inter-assistant communication via the open A2A protocol`,defaultEnabled:!1},{id:`trace-collection`,scope:`assistant`,key:`trace-collection`,label:`Trace Collection`,description:`Gate per-turn conversation trace (user/assistant/tool-call/tool-response) collection. The daemon attaches a trace to its turn telemetry only when this flag AND the owner's share_diagnostics consent are both on. Defaults off (fail-closed) — the live value is delivered from LaunchDarkly.`,defaultEnabled:!1},{id:`settings-developer-nav`,scope:`assistant`,key:`settings-developer-nav`,label:`Settings Developer Nav`,description:`Control Developer nav visibility in macOS settings`,defaultEnabled:!1},{id:`developer-menu-items`,scope:`client`,key:`developer-menu-items`,label:`Developer Menu Items`,description:`Show Component Gallery and Replay Onboarding in the menu bar`,defaultEnabled:!1},{id:`settings-embedding-provider`,scope:`assistant`,key:`settings-embedding-provider`,label:`Embedding Provider Settings`,description:`Show the Embedding service card in Models & Services settings`,defaultEnabled:!1},{id:`multi-platform-assistant`,scope:`client`,key:`multi-platform-assistant`,label:`Multi-Platform Assistant Switcher`,description:`Enable the menu-bar assistant switcher for managing multiple platform-hosted assistants (new/switch/retire)`,defaultEnabled:!1},{id:`quick-input`,scope:`client`,key:`quick-input`,label:`Quick Input`,description:`Enable the Quick Input popover on right-click of the menu bar icon`,defaultEnabled:!1},{id:`expand-completed-steps`,scope:`client`,key:`expand-completed-steps`,label:`Expand Completed Steps`,description:`Auto-expand completed tool call step groups instead of showing them collapsed`,defaultEnabled:!1},{id:`backward-releases`,scope:`assistant`,key:`backward-releases`,label:`Backward Releases`,description:`Show older versions in the version picker, allowing rollback to previous releases`,defaultEnabled:!1},{id:`voice-mode`,scope:`assistant`,key:`voice-mode`,label:`Voice Mode`,description:`Show the live voice conversation button in the composer`,defaultEnabled:!1},{id:`fast-mode`,scope:`assistant`,key:`fast-mode`,label:`Fast Mode`,description:`Enable Anthropic fast mode for Opus models (4.6, 4.7, 4.8), delivering up to 2.5x higher output tokens per second at premium pricing`,defaultEnabled:!1},{id:`teleport`,scope:`client`,key:`teleport`,label:`Teleport`,description:`Enable teleport UI in General settings for moving assistants between hosting environments`,defaultEnabled:!1},{id:`apple-container`,scope:`client`,key:`apple-container`,label:`Apple Container`,description:`Enable assistant sandboxing via Apple Containers on macOS 26+, providing a lightweight native sandbox without third-party dependencies`,defaultEnabled:!1},{id:`bookmarks`,scope:`client`,key:`bookmarks`,label:`Message Bookmarks`,description:`Show the bookmark icon on messages and enable the Bookmarks tab in Settings`,defaultEnabled:!1},{id:`fork-from-message`,scope:`client`,key:`fork-from-message`,label:`Fork from Message`,description:`Show the 'Fork from here' option in message overflow menus`,defaultEnabled:!1},{id:`home-tab`,scope:`client`,key:`home-tab`,label:`Home Tab`,description:`Replace the knowledge graph top-level tab with a new Home page showing relationship progression, facts, and capability tiers`,defaultEnabled:!1},{id:`scroll-debug-overlay`,scope:`client`,key:`scroll-debug-overlay`,label:`Scroll Debug Overlay`,description:`Show a live HUD in the top-right of the conversation with scroll geometry, velocity, update rate, and anchor-preserver activity. Developer diagnostic for investigating scroll jank.`,defaultEnabled:!1},{id:`coding-agents-panel`,scope:`client`,key:`coding-agents-panel`,label:`Coding Agents Panel`,description:`Gate native macOS Coding Agents panel entry points and inline ACP session deep links.`,defaultEnabled:!1},{id:`compaction-playground`,scope:`assistant`,key:`compaction-playground`,label:`Compaction Playground`,description:`Expose the developer-only Compaction Playground tab in macOS Settings and enable the /playground/* HTTP endpoints for exercising compaction conditions. Dev-only; default off.`,defaultEnabled:!1},{id:`app-control`,scope:`assistant`,key:`app-control`,label:`App Control`,description:`Enable the app-control skill (per-app screenshot + raw input bypassing AX tree)`,defaultEnabled:!1},{id:`analyze-conversation`,scope:`assistant`,key:`analyze-conversation`,label:`Analyze Conversation`,description:`Show the 'Analyze' / 'Analyze conversation' option in conversation context menus and the conversation title actions dropdown.`,defaultEnabled:!1},{id:`velvet-theme`,scope:`client`,key:`velvet-theme`,label:`Velvet Theme`,description:`Show the Velvet theme option in the macOS appearance settings. Velvet is a dark-mode variant with red/pink accent colors.`,defaultEnabled:!1},{id:`queue-steering`,scope:`assistant`,key:`queue-steering`,label:`Queue Steering`,description:`Enable the 'Push to agent' button on queued messages, allowing users to steer the assistant to a specific queued message by aborting the current generation and promoting the message to the head of the queue.`,defaultEnabled:!1},{id:`chat-pull-to-refresh-enabled`,scope:`client`,key:`chat-pull-to-refresh-enabled`,label:`Chat Pull to Refresh`,description:`Enable pull-to-refresh gesture in the chat view.`,defaultEnabled:!1},{id:`platform-notifications`,scope:`client`,key:`platform-notifications`,label:`Platform Notifications`,description:`Enable the Notifications tab in settings.`,defaultEnabled:!1},{id:`centralized-assistant-status`,scope:`client`,key:`centralized-assistant-status`,label:`Centralized Assistant Status`,description:`Enable client polling of the centralized assistant operational status endpoint.`,defaultEnabled:!1},{id:`preview-channel`,scope:`client`,key:`preview-channel`,label:`Preview Channel`,description:`Enable user-facing Preview release channel controls in assistant settings.`,defaultEnabled:!1},{id:`rollback-enabled`,scope:`assistant`,key:`rollback-enabled`,label:`Rollback Enabled`,description:`Show older versions in the version picker, allowing rollback to previous releases.`,defaultEnabled:!1},{id:`self-hosted-assistant`,scope:`client`,key:`self-hosted-assistant`,label:`Self-Hosted Assistant`,description:`Enable self-hosted assistant configuration.`,defaultEnabled:!1},{id:`web-remote-ingress`,scope:`assistant`,key:`web-remote-ingress`,label:`Web Remote Ingress`,description:`Serve the web client over a public tunnel and enable browser pairing for self-hosted assistants.`,defaultEnabled:!1},{id:`settings-sleep-policy`,scope:`assistant`,key:`settings-sleep-policy`,label:`Settings Sleep Policy`,description:`Enable sleep policy settings.`,defaultEnabled:!1},{id:`velvet`,scope:`client`,key:`velvet`,label:`Velvet`,description:`Enable the Velvet design theme.`,defaultEnabled:!1},{id:`memory-router-playground`,scope:`client`,key:`memory-router-playground`,label:`Memory Router Playground`,description:`Expose the developer-only Memory Router Playground tab in macOS Settings and the /assistant/memory-router-playground web page for dry-running v4 router config overrides against the live page index. Dev-only; default off.`,defaultEnabled:!1},{id:`memory-v3-injection-gate`,scope:`assistant`,key:`memory-v3-injection-gate`,label:`Memory v3 injection gate`,description:`Per-turn injection gate for memory v3: after the BM25F needle + dense cosine finder lanes run, skip the selectPool LLM call (inject nothing) when finder-lane scores fall below the configured thresholds (memory.v3.gate). Default on (flipped remotely July 2026); this registry value is the fallback when no platform snapshot is available.`,defaultEnabled:!0},{id:`memory-concept-graph`,scope:`assistant`,key:`memory-concept-graph`,label:`Memory concept graph`,description:`Gates the Obsidian-style memory concept graph on the assistant identity page and the backend-agnostic /memory-graph + /memory-graph-node routes that feed it. When off, the identity page shows the skills constellation instead. Only produces a graph on memory-v3 backends. Default off.`,defaultEnabled:!1},{id:`self-intro-greeting`,scope:`both`,key:`self-intro-greeting`,label:`Self-intro first message`,description:`On the first conversation, send a natural self-introduction (e.g. "Hi Vela, I'm alex. Nice to meet you.") on the user's behalf and route it through real LLM inference, instead of serving the canned first greeting. Names come from the onboarding context; falls back to the canned greeting when no name is known. Exposed to clients so pre-hatch onboarding can compute the source-of-truth initial message, and to the assistant so older clients can still be gated server-side. See assistant/src/daemon/first-greeting.ts (buildSelfIntroMessage).`,defaultEnabled:!1},{id:`research-onboarding`,scope:`client`,key:`research-onboarding`,label:`Research onboarding (spike)`,description:`Spike: replace pre-chat onboarding with a web-research "here's what I know about you" flow, including a Google Calendar "Let's chat tomorrow" step shown over the streaming research. Gates the /assistant/onboarding/research route and the research mock harness. Off by default; enable locally via the feature-flags panel.`,defaultEnabled:!1},{id:`personality-onboarding`,scope:`client`,key:`personality-onboarding`,label:`Personality onboarding step (spike)`,description:`Spike: show the "Create my personality" trait-slider step in the research-onboarding flow (between the pitch and the integration step). On continue it applies the sliders to the assistant's persona on a throwaway side conversation. When off, the step is skipped entirely. Off by default; enable locally via the feature-flags panel.`,defaultEnabled:!1},{id:`channel-trust-floors`,scope:`assistant`,key:`channel-trust-floors`,label:`Channel Trust Floors`,description:`Expose the Channel Trust Floors settings card (per-channel inbound admission policy) on the Privacy settings page. When off, the card is hidden and channels fall back to their default admission floors. Off by default while the feature is in development.`,defaultEnabled:!1},{id:`mcp-add-server`,scope:`assistant`,key:`mcp-add-server`,label:`MCP Add Server`,description:`Show the Add Server action on the MCP settings page. The MCP page itself remains visible; this flag gates only creating new Model Context Protocol server connections.`,defaultEnabled:!1},{id:`os-beta`,scope:`assistant`,key:`os-beta`,label:`OS Beta`,description:`Enable the OS Beta model profile (MiniMax M3 / Together) in the assistant's model profile selection.`,defaultEnabled:!1},{id:`new-thread-suggestions`,scope:`client`,key:`new-thread-suggestions`,label:`New-thread suggestions library`,description:`Replace the empty-state conversation-starter chips with the scrollable, categorized suggestions library and detail drawer (currently mocked data).`,defaultEnabled:!1},{id:`account-mfa`,scope:`client`,key:`account-mfa`,label:`Account MFA`,description:`Surface the Security settings page where users enroll and manage TOTP two-factor authentication for their Vellum (WorkOS) account. Applies to email/password sign-in only.`,defaultEnabled:!1},{id:`credentials-settings`,scope:`assistant`,key:`credentials-settings`,label:`Credentials settings page`,description:`Show the Credentials page in web settings for listing, adding, and deleting stored credentials.`,defaultEnabled:!1},{id:`credential-requests`,scope:`assistant`,key:`credential-requests`,label:`One-time credential request links`,description:`Enable one-time credential-request links: the generate-link action in settings, the public credential entry page, and assistant-initiated links on channels without secure input.`,defaultEnabled:!1},{id:`summarize-up-to-here`,scope:`both`,key:`summarize-up-to-here`,label:`Summarize Up To Here`,description:`Show the per-message Summarize up to here action and enable the conversation summarize endpoint`,defaultEnabled:!1},{id:`skill-creation-card`,scope:`both`,key:`skill-creation-card`,label:`Skill creation card`,description:`Insert an in-chat card into the source conversation when the memory retrospective authors a new skill, and render it in the web client.`,defaultEnabled:!1},{id:`override-or-default-resolution`,scope:`assistant`,key:`override-or-default-resolution`,label:`Override-or-Default Profile Resolution`,description:`Resolve inference profiles as single complete overrides (or the call site's default intent through the default provider) instead of the legacy deep-merge cascade. Ships enabled; disable as a kill switch to restore merge semantics.`,defaultEnabled:!0}]};function t(e,t){return e===t||e===`both`}var n=e.flags,r={};function i(e){return r[e]||e.split(`-`).map((e,t)=>e===`ui`?`UI`:t===0?e:e[0].toUpperCase()+e.slice(1)).join(``)}function a(e){let r={};for(let a of n)typeof a.defaultEnabled==`boolean`&&t(a.scope,e)&&(r[i(a.key)]=a.defaultEnabled);return r}function o(e){let r={};for(let a of n)typeof a.defaultEnabled==`string`&&t(a.scope,e)&&(r[i(a.key)]=a.defaultEnabled);return r}var s=a(`client`),c=a(`assistant`),l=o(`client`),u=o(`assistant`),d=new Map;for(let e of n)d.set(i(e.key),e);var f=new Map;for(let e of n)f.set(i(e.key),e.key);function p(e){return i(e)}function m(e){return f.get(e)}function h(e){return d.get(e)}var g=`VITE_VELLUM_FLAG_`;function _(e){return e.toLowerCase().replace(/_/g,`-`)}var v=new Set([`true`,`1`,`yes`,`on`]),y=new Set([`false`,`0`,`no`,`off`]);function b(e){let t=e.toLowerCase();return v.has(t)?!0:y.has(t)?!1:e}function x(){if(typeof window<`u`&&window.__VELLUM_FLAG_OVERRIDES__!=null)return{...window.__VELLUM_FLAG_OVERRIDES__};let e={},t={BASE_URL:`/assistant/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_PLATFORM_MODE:`false`};for(let n of Object.keys(t))if(n.startsWith(g)){let r=_(n.slice(17)),i=t[n];i!=null&&(e[r]=b(i))}return e}var S=null;function C(){return S===null&&(S=x()),S}var w=new Map;for(let e of n)w.set(e.key,e);function T(e){let n=C(),r={},i={};for(let[a,o]of Object.entries(n)){let n=w.get(a);if(!n||!t(n.scope,e))continue;let s=p(a);typeof o==`boolean`?r[s]=o:i[s]=o}return{bool:r,str:i}}export{p as a,h as c,l as i,t as l,u as n,n as o,s as r,T as s,c as t,m as u};
|