@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.
Files changed (119) hide show
  1. package/dist/assets/{account-page-CMV43GIE.js → account-page-Ce-pbLMJ.js} +1 -1
  2. package/dist/assets/{acp-run-detail-panel-Q6Pa1K4J.js → acp-run-detail-panel-T0GBDg-W.js} +1 -1
  3. package/dist/assets/{activity-steps-panel-CtNAZTDH.js → activity-steps-panel-BXXeXc19.js} +1 -1
  4. package/dist/assets/{advanced-page-BznS_S2-.js → advanced-page-C8Ib_u5F.js} +1 -1
  5. package/dist/assets/ai-page-BezzLmVq.js +1 -0
  6. package/dist/assets/{animated-avatar-DK4gO-3x.js → animated-avatar-DDpjZzRx.js} +1 -1
  7. package/dist/assets/{api-ByWcEKXC.js → api-Zs5JMgKY.js} +1 -1
  8. package/dist/assets/{api-key-screen-COgM-31V.js → api-key-screen-B_g5hH5v.js} +1 -1
  9. package/dist/assets/{archive-page-CbI42Xl9.js → archive-page-rl2uRUik.js} +1 -1
  10. package/dist/assets/{assistant-feature-flag-store-DZtH0LSq.js → assistant-feature-flag-store-CKUjJHuh.js} +1 -1
  11. package/dist/assets/{assistant-status-panel-je6tdnDq.js → assistant-status-panel-DPwgE1TF.js} +1 -1
  12. package/dist/assets/{auth-store-B0Vpa2Ej.js → auth-store-CKsDsnkp.js} +1 -1
  13. package/dist/assets/{background-task-detail-panel-C9gXqdcp.js → background-task-detail-panel-3xiHMnCC.js} +1 -1
  14. package/dist/assets/{billing-page-1lNYGQXM.js → billing-page-D-gIsav0.js} +1 -1
  15. package/dist/assets/{bookmarks-page-CrTrSqCx.js → bookmarks-page-giPayf1N.js} +1 -1
  16. package/dist/assets/{build-state-mRQrHtjQ.js → build-state-BLXpH8o6.js} +1 -1
  17. package/dist/assets/{channels-page-route-CH4rDnAa.js → channels-page-route-DAZ5e9vo.js} +1 -1
  18. package/dist/assets/{chat-markdown-message-Di8W_mZ2.js → chat-markdown-message-BuypfAkx.js} +1 -1
  19. package/dist/assets/{client-feature-flag-store-DdDbgq_C.js → client-feature-flag-store-C0g8zi1W.js} +1 -1
  20. package/dist/assets/{command-palette-CESousz_.js → command-palette-C0XZVlzp.js} +1 -1
  21. package/dist/assets/{command-palette-window-page-CDsU8OFx.js → command-palette-window-page-CxIvQGwt.js} +1 -1
  22. package/dist/assets/{community-page-C5ZLBw-d.js → community-page-CwSloAl0.js} +1 -1
  23. package/dist/assets/{contacts-page-route-7vAYmrEW.js → contacts-page-route-CBqOhX8s.js} +1 -1
  24. package/dist/assets/{conversation-list-fetchers-DPPBc9-e.js → conversation-list-fetchers-tE99dnUJ.js} +1 -1
  25. package/dist/assets/{credentials-page-DPAWp3ig.js → credentials-page-Bd-E5j_2.js} +1 -1
  26. package/dist/assets/{debug-page-ChigwOvQ.js → debug-page-CU0jo5tG.js} +1 -1
  27. package/dist/assets/{deploy-dialogs-BYLzWrGV.js → deploy-dialogs-8TBhlLXZ.js} +1 -1
  28. package/dist/assets/{detail-panel-stop-button-CzdpVulo.js → detail-panel-stop-button-B0utUgSr.js} +1 -1
  29. package/dist/assets/{developer-page-DpEsh6NB.js → developer-page-Da1bdSPK.js} +1 -1
  30. package/dist/assets/{devices-page-Pnn1eowJ.js → devices-page-DC9det1s.js} +1 -1
  31. package/dist/assets/{dictation-overlay-page-ChVTUFRD.js → dictation-overlay-page-6l-KJCrE.js} +1 -1
  32. package/dist/assets/{document-viewer-page-2ll_cJLl.js → document-viewer-page-djjsg4WE.js} +1 -1
  33. package/dist/assets/{earn-credits-modal-DeZpTKSj.js → earn-credits-modal-B4iirPUC.js} +1 -1
  34. package/dist/assets/{emails-page-ABf-We6M.js → emails-page-RItjmMG5.js} +1 -1
  35. package/dist/assets/feature-flag-catalog-CHuc71P8.js +1 -0
  36. package/dist/assets/{general-page-DkKSrMme.js → general-page-BtAuGqFM.js} +1 -1
  37. package/dist/assets/{hatching-screen-D8Pjfvhy.js → hatching-screen-C71v2Kqp.js} +1 -1
  38. package/dist/assets/{home-page-route-B1N6-RGa.js → home-page-route-DxKq7gEn.js} +1 -1
  39. package/dist/assets/{hosting-screen-BiP9Rnsg.js → hosting-screen-DBN9hO0s.js} +1 -1
  40. package/dist/assets/{identity-page-route-BWqNkDHQ.js → identity-page-route-Ck1TCmSd.js} +1 -1
  41. package/dist/assets/index-DQjUULFO.js +113 -0
  42. package/dist/assets/{inspect-page-C4TiFioA.js → inspect-page-BuriU_iU.js} +2 -2
  43. package/dist/assets/{integrations-page-DtTvWU0Y.js → integrations-page-N-I7F_JQ.js} +1 -1
  44. package/dist/assets/{intelligence-layout-BUgKwjS8.js → intelligence-layout-C_H2Uec7.js} +1 -1
  45. package/dist/assets/{keyboard-shortcuts-page-B2sR16aW.js → keyboard-shortcuts-page-B2ozF8zY.js} +1 -1
  46. package/dist/assets/{library-detail-page-CWNbUJqt.js → library-detail-page-BKj7gWNL.js} +1 -1
  47. package/dist/assets/{library-page-5UprXzT9.js → library-page-BJljT3MY.js} +1 -1
  48. package/dist/assets/{login-flow-C69Wgb68.js → login-flow-C4Ehxg-g.js} +1 -1
  49. package/dist/assets/{login-page-jYS-XYJb.js → login-page-CZBdlVje.js} +1 -1
  50. package/dist/assets/{logout-page-DDATXd1t.js → logout-page-BryU7bK_.js} +1 -1
  51. package/dist/assets/{logs-layout-DGGiZCW7.js → logs-layout-nPLZjXX5.js} +1 -1
  52. package/dist/assets/{memory-router-playground-page-CC3Q-ii9.js → memory-router-playground-page-qIG7U97D.js} +1 -1
  53. package/dist/assets/{messages-CUJ5eqjM.js → messages-DF7pzUR8.js} +2 -2
  54. package/dist/assets/{mobile-sidebar-drawer-UKduN0Pv.js → mobile-sidebar-drawer-DpvWGGSA.js} +1 -1
  55. package/dist/assets/{notifications-page-7QBHhSOv.js → notifications-page-DBlKmak1.js} +1 -1
  56. package/dist/assets/{oauth-complete-page-nDiAeozi.js → oauth-complete-page-D8aQ3tJ_.js} +1 -1
  57. package/dist/assets/{oauth-popup-complete-page-weYCBDud.js → oauth-popup-complete-page-CXXZdxWJ.js} +1 -1
  58. package/dist/assets/{pairing-page-BAl_HWtd.js → pairing-page-b1uNitAm.js} +1 -1
  59. package/dist/assets/{platform-loopback-page-Bgb9VIUM.js → platform-loopback-page-hCZEK9-q.js} +1 -1
  60. package/dist/assets/{plugins-page-B4pNE_2E.js → plugins-page-C0TtdwgQ.js} +1 -1
  61. package/dist/assets/{prechat-route-C9OMadRC.js → prechat-route-CnIcxqAR.js} +1 -1
  62. package/dist/assets/{prefs-DIsAodtg.js → prefs-hu4Ft3Gc.js} +1 -1
  63. package/dist/assets/{privacy-page-59CvcL5F.js → privacy-page-PFWKww1A.js} +1 -1
  64. package/dist/assets/{privacy-screen-BoOkqfMk.js → privacy-screen-DSr2ddPX.js} +1 -1
  65. package/dist/assets/{provider-callback-page-BZSaYWMK.js → provider-callback-page-CVVL9mxY.js} +1 -1
  66. package/dist/assets/{provider-key-BBkXTnhk.js → provider-key-B9HxajGj.js} +1 -1
  67. package/dist/assets/{provider-signup-page-Dxl1u-LY.js → provider-signup-page-BBqT_sHe.js} +1 -1
  68. package/dist/assets/{quick-input-page-C8ZUm4TO.js → quick-input-page-CLwquN93.js} +1 -1
  69. package/dist/assets/react-query.gen-DOfazqkL.js +1 -0
  70. package/dist/assets/{research-mock-page-CyAaxUmt.js → research-mock-page-DeBKxHSz.js} +1 -1
  71. package/dist/assets/{research-onboarding-route-DfFaJpJ1.js → research-onboarding-route-2nc0yKsq.js} +4 -4
  72. package/dist/assets/{review-terms-screen-sQAJ3zHo.js → review-terms-screen-QliTExQL.js} +1 -1
  73. package/dist/assets/{risk-CrkyJx_W.js → risk-jKF7qGwV.js} +1 -1
  74. package/dist/assets/{schedules-BnoWhTUm.js → schedules-CQO3UwTc.js} +1 -1
  75. package/dist/assets/sdk.gen-jDeNbBv8.js +6 -0
  76. package/dist/assets/{security-page-edEfQa2K.js → security-page-CQfQh2wW.js} +1 -1
  77. package/dist/assets/{select-assistant-screen-BaWxwdJN.js → select-assistant-screen-BsGcZIsZ.js} +1 -1
  78. package/dist/assets/{settings-layout-DmT_OhwB.js → settings-layout-hvCEbqwx.js} +1 -1
  79. package/dist/assets/{share-feedback-modal-CiZZc4P8.js → share-feedback-modal-BFxBtlP7.js} +1 -1
  80. package/dist/assets/{sidebar-tree-DqBUS7Di.js → sidebar-tree-BaU6dAAM.js} +1 -1
  81. package/dist/assets/{signup-page-RKGKd4D4.js → signup-page-COVsB50a.js} +1 -1
  82. package/dist/assets/{site-favicon-BOtLPhLi.js → site-favicon-D9Rp1QPZ.js} +1 -1
  83. package/dist/assets/{skill-detail-page-BA-R0TUF.js → skill-detail-page-D5UAAUmZ.js} +1 -1
  84. package/dist/assets/{skill-detail-panel-qExRv5Fy.js → skill-detail-panel-DIoN-AUc.js} +1 -1
  85. package/dist/assets/{skills-cdOwT5VQ.js → skills-C9wbjXsQ.js} +1 -1
  86. package/dist/assets/{skills-page-DTyII3yz.js → skills-page-DhUitBj9.js} +1 -1
  87. package/dist/assets/{sound-manager-D6rR29ls.js → sound-manager-CSAwT8Vm.js} +1 -1
  88. package/dist/assets/{sounds-page-DX0M0BI7.js → sounds-page-DeBeDlcY.js} +1 -1
  89. package/dist/assets/{subagent-detail-panel-DZ2aFOtQ.js → subagent-detail-panel-CF-VVQJA.js} +1 -1
  90. package/dist/assets/{subagent-store-CkVBDrlq.js → subagent-store-C-pyGmFU.js} +1 -1
  91. package/dist/assets/{system-events-page-C7PYjQ1_.js → system-events-page-CYqUpGpC.js} +1 -1
  92. package/dist/assets/{tiptap-document-editor-UuUX9dDg.js → tiptap-document-editor-aGPkbqbr.js} +1 -1
  93. package/dist/assets/{tool-detail-panel-CNNk22iE.js → tool-detail-panel-CzkNK-ue.js} +1 -1
  94. package/dist/assets/{upgrade-cancel-page-DtomPtfd.js → upgrade-cancel-page-BytvxNqQ.js} +1 -1
  95. package/dist/assets/{upgrade-success-page-ByqZaDgj.js → upgrade-success-page-CeuBASa8.js} +1 -1
  96. package/dist/assets/{usage-page-4pf5Kokb.js → usage-page-CI7scN-b.js} +1 -1
  97. package/dist/assets/{use-edge-swipe-back-KZ3UbiGX.js → use-edge-swipe-back-U9h8O8rp.js} +1 -1
  98. package/dist/assets/{use-invite-link-dialog-CefIg3No.js → use-invite-link-dialog-JL5Jevln.js} +1 -1
  99. package/dist/assets/use-is-org-ready-BP6_0L-A.js +1 -0
  100. package/dist/assets/{use-onboarding-login-BE7XAcLS.js → use-onboarding-login-CP7O8ZzB.js} +1 -1
  101. package/dist/assets/{use-skill-actions-DvXJseoE.js → use-skill-actions-BKfLB9Oe.js} +1 -1
  102. package/dist/assets/{use-skill-categories-SyeYfwMa.js → use-skill-categories-8DmU61Hs.js} +1 -1
  103. package/dist/assets/{use-skill-detail-files-DEAuvZ9C.js → use-skill-detail-files-DmLQiG5u.js} +1 -1
  104. package/dist/assets/{viewer-store-B7if16dM.js → viewer-store-SsoxBypb.js} +1 -1
  105. package/dist/assets/{voice-page-vBrdgTVm.js → voice-page-DX8ma3dY.js} +1 -1
  106. package/dist/assets/{weather-forecast-display-LnisXlEl.js → weather-forecast-display-hxrsJwFy.js} +1 -1
  107. package/dist/assets/{welcome-screen-CWHGZa4i.js → welcome-screen-Drx018g8.js} +1 -1
  108. package/dist/assets/{workflow-detail-panel-BUjpdiIu.js → workflow-detail-panel-n5adDCz2.js} +1 -1
  109. package/dist/assets/{workflow-store-CKPwCutv.js → workflow-store-B_M196cU.js} +1 -1
  110. package/dist/assets/workspace-page-CYDMc7C-.js +1 -0
  111. package/dist/index.html +23 -23
  112. package/package.json +1 -1
  113. package/dist/assets/ai-page-DUWe0qVj.js +0 -1
  114. package/dist/assets/feature-flag-catalog-8Bd8qhz2.js +0 -1
  115. package/dist/assets/index-6YxiY2Ly.js +0 -113
  116. package/dist/assets/react-query.gen-SVZdN1r_.js +0 -1
  117. package/dist/assets/sdk.gen-D-8W_bKa.js +0 -6
  118. package/dist/assets/use-is-org-ready-BrsKMV8W.js +0 -1
  119. package/dist/assets/workspace-page-BTFdn_4T.js +0 -1
@@ -1,4 +1,4 @@
1
- import{t as e}from"./capture-error-Dhiismgm.js";import{Fr as t,_n as n,gn as r,jr as i,u as a,vn as o,yn as s}from"./sdk.gen-D-8W_bKa.js";import{t as c}from"./assistant-identity-store-CX03CK8q.js";import{r as l,t as u}from"./semver-DIkpaM51.js";import{n as d,r as f}from"./api-errors-CrWDzVca.js";import{n as p}from"./platform-detection-BrxvFUiR.js";import{a as m,s as h}from"./prechat-P1y7ZM6C.js";import{t as g}from"./effective-timezone-C4nukIC4.js";var _=/^\[File attachment\] (.+?), type=([^,\n]+?)(?:, size=([^\n]+))?$/,v=/^([\d.]+)\s*(B|KB|MB|GB)$/;function y(e){let t=v.exec(e.trim());if(!t)return 0;let n=Number.parseFloat(t[1]);if(!Number.isFinite(n))return 0;switch(t[2]){case`B`:return Math.round(n);case`KB`:return Math.round(n*1024);case`MB`:return Math.round(n*1024*1024);case`GB`:return Math.round(n*1024*1024*1024);default:return 0}}function b(e){let t=e.indexOf(`[File attachment] `);if(t<0||!(t===0||e[t-1]===`
1
+ import{t as e}from"./capture-error-Dhiismgm.js";import{Ar as t,Pr as n,_n as r,gn as i,hn as a,u as o,vn as s}from"./sdk.gen-jDeNbBv8.js";import{t as c}from"./assistant-identity-store-CX03CK8q.js";import{r as l,t as u}from"./semver-DIkpaM51.js";import{n as d,r as f}from"./api-errors-CrWDzVca.js";import{n as p}from"./platform-detection-BrxvFUiR.js";import{a as m,s as h}from"./prechat-P1y7ZM6C.js";import{t as g}from"./effective-timezone-C4nukIC4.js";var _=/^\[File attachment\] (.+?), type=([^,\n]+?)(?:, size=([^\n]+))?$/,v=/^([\d.]+)\s*(B|KB|MB|GB)$/;function y(e){let t=v.exec(e.trim());if(!t)return 0;let n=Number.parseFloat(t[1]);if(!Number.isFinite(n))return 0;switch(t[2]){case`B`:return Math.round(n);case`KB`:return Math.round(n*1024);case`MB`:return Math.round(n*1024*1024);case`GB`:return Math.round(n*1024*1024*1024);default:return 0}}function b(e){let t=e.indexOf(`[File attachment] `);if(t<0||!(t===0||e[t-1]===`
2
2
  `))return{cleanedContent:e,attachments:void 0};let n=t>0&&e[t-1]===`
3
3
  `?e.slice(0,t-1):e.slice(0,t),r=[];for(let n of e.slice(t).split(`
4
4
  `)){let e=_.exec(n);if(!e)continue;let[,t,i,a]=e;r.push({id:`rehydrated:${r.length}`,filename:t,mimeType:i,sizeBytes:a?y(a):0,previewUrl:null,thumbnailUrl:null})}return{cleanedContent:n,attachments:r.length>0?r:void 0}}var x=[`users/guardian.md`,`users/default.md`],S=`## Onboarding Context`;function C(e){let t=[S,``];return e.preferredName&&t.push(`- **Preferred name:** ${e.preferredName}`),e.occupation&&t.push(`- **Role:** ${e.occupation}`),e.commonWork.length>0&&t.push(`- **Common work:** ${e.commonWork.join(`; `)}`),e.dailyTools.length>0&&t.push(`- **Daily tools:** ${e.dailyTools.join(`, `)}`),t.push(``),t.join(`
@@ -10,4 +10,4 @@ import{t as e}from"./capture-error-Dhiismgm.js";import{Fr as t,_n as n,gn as r,j
10
10
  `),n.endsWith(`
11
11
 
12
12
  `)||(n+=`
13
- `),n+t}async function T(e,t){let{data:n,error:r,response:a}=await i({path:{assistant_id:e},query:{path:t},throwOnError:!1});if(d(a,r,`Failed to fetch onboarding profile file`),a.status===404)return null;if(!a.ok)throw Error(`Failed to fetch onboarding profile file (${a.status})`);if(n?.isBinary)throw Error(`Onboarding profile file is binary`);return typeof n?.content==`string`?n.content:null}async function E(e,n,r){let{error:i,response:a}=await t({path:{assistant_id:e},body:{path:n,content:r},throwOnError:!1});if(d(a,i,`Failed to write onboarding profile file`),!a.ok)throw Error(`Failed to write onboarding profile file (${a.status})`)}async function D(e,t,n){await E(e,t,w(await T(e,t),n))}async function O(e,t){let n=C(h(t));await Promise.allSettled(x.map(t=>D(e,t,n)))}function k(e,t,n,r){let i=e.toLowerCase().startsWith(`video/`);return{previewUrl:t&&(!i||i&&!r)?`data:${e};base64,${t}`:null,thumbnailUrl:n?`data:image/jpeg;base64,${n}`:null}}function A(e){return e.map(e=>{let{previewUrl:t,thumbnailUrl:n}=k(e.mimeType,e.data,e.thumbnailData,!0);return{id:e.id,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,previewUrl:t,thumbnailUrl:n}})}function j(e){return e===`inline`||e===`panel`?e:void 0}function M(e){return{surfaceId:e.surfaceId,surfaceType:e.surfaceType,title:e.title,data:e.data,actions:e.actions,display:j(e.display),completed:e.completed,completionSummary:e.completionSummary,toolCallId:e.toolCallId}}function N(e){return e.map(M)}function P(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}}function F(e){if(!e||e.length===0)return{segments:void 0,attachments:void 0};let t=[];return{segments:e.map(e=>{let{cleanedContent:n,attachments:r}=b(e);return r&&t.push(...r),n}),attachments:t.length>0?t.map((e,t)=>({...e,id:`rehydrated:${t}`})):void 0}}function I(e){let{segments:t,attachments:n}=F(e.textSegments&&e.textSegments.length>0?e.textSegments:void 0),r=e.attachments&&e.attachments.length>0?A(e.attachments):void 0,i=G(e.contentOrder),a=K(e),o=e.toolCalls&&e.toolCalls.length>0?U(e.toolCalls,e.id):void 0,s=P(e.timestamp),c=e.thinkingSegments&&e.thinkingSegments.length>0?e.thinkingSegments:void 0,l={id:e.id,role:e.role};e.mergedMessageIds?.length&&(l.mergedMessageIds=e.mergedMessageIds),e.clientMessageId&&(l.clientMessageId=e.clientMessageId),e.surfaces&&(l.surfaces=N(e.surfaces)),a&&(l.contentBlocks=a),t&&(l.textSegments=t),i&&(l.contentOrder=i),c&&(l.thinkingSegments=c),e.subagentNotification&&(l.isSubagentNotification=!0),e.acpNotification&&(l.isAcpNotification=!0),e.backgroundEventNotification&&(l.isBackgroundEventNotification=!0),e.slackMessage&&(l.slackMessage=e.slackMessage),o&&(l.toolCalls=o),s!=null&&(l.timestamp=s);let u=r??n;return u&&(l.attachments=u),l}var L=`0.8.6`;function R(){let e=c.getState().version;if(!e)return`conversationKey`;let t=l(e),n=l(L);return!t||!n?`conversationKey`:u({...t,pre:null},n)>=0?`conversationId`:`conversationKey`}var z=1e3,B=12e4;function V(e){return{id:e.id,toolName:e.toolName,conversationId:e.conversationId,command:e.command,startedAt:e.startedAt,status:e.status,exitCode:e.exitCode,output:e.output,completedAt:e.completedAt}}async function H(e,t,n){let i=Date.now()+B;for(;Date.now()<i;){let{data:i,error:a,response:o}=await r({path:{assistant_id:e},query:{conversationId:n},throwOnError:!1});if(d(o,a,`Failed to poll for messages`),!o.ok){let e=f(a,o,`Failed to poll for messages`);throw Error(e)}let s=i?.messages??[],c=s.findIndex(e=>e.id===t);if(c>=0){let e=s.slice(c+1).find(e=>e.role===`assistant`);if(e)return e}await new Promise(e=>setTimeout(e,z))}return null}function U(e,t){return e.map((e,n)=>{let{confirmationDecision:r,...i}=e;return{...i,id:e.id??`tool-history-${t}-${n}`,...r===void 0?{}:{confirmationDecision:r}}})}function W(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e;if(typeof t.type==`string`&&typeof t.id==`string`)return{type:t.type,id:t.id}}if(typeof e==`string`){let t=e.indexOf(`:`);if(t>0)return{type:e.slice(0,t),id:e.slice(t+1)}}return null}function G(e){if(!e||e.length===0)return;let t=[];for(let n of e){let e=W(n);e&&t.push(e)}return t.length>0?t:void 0}function K(e){if(e.contentBlocks!==void 0)return e.contentBlocks;let t=G(e.contentOrder);if(!t)return;let n=[];for(let{type:r,id:i}of t){let t=Number.parseInt(i,10);if(!Number.isNaN(t))switch(r){case`text`:{let r=e.textSegments?.[t];if(r==null)break;let{cleanedContent:i}=b(r);i.trim().length>0&&n.push({type:`text`,text:i});break}case`thinking`:{let r=e.thinkingSegments?.[t];r!=null&&n.push({type:`thinking`,thinking:r});break}case`tool`:case`toolCall`:{let r=e.toolCalls?.[t];r&&n.push({type:`tool_use`,toolCall:{...r,id:r.id??`tool-history-${e.id}-${t}`}});break}case`surface`:{let r=e.surfaces?.[t];r&&n.push({type:`surface`,surface:r});break}case`attachment`:{let r=e.attachments[t];r&&n.push({type:`attachment`,attachment:r});break}}}return n.length>0?n:void 0}async function q(e,t,n){let i=n?.latestPageLimit==null?{conversationId:t}:{conversationId:t,page:`latest`,limit:n.latestPageLimit},{data:a,error:o,response:s}=await r({path:{assistant_id:e},query:i,throwOnError:!1});if(d(s,o,`Failed to fetch conversation messages`),!s.ok)throw Error(`Failed to fetch conversation messages (HTTP ${s.status})`);return a}async function J(e,t){let n=t.name||`attachment`,r=t.type||`application/octet-stream`,{data:i,error:o,response:s}=await a({path:{assistant_id:e},body:{file:t,filename:n,mimeType:r},throwOnError:!1});if(d(s,o,`Failed to upload attachment`),!s.ok){let e=o&&typeof o==`object`&&!Array.isArray(o)?o:{},t=(typeof e.detail==`string`?e.detail:void 0)??(typeof e.error==`string`?e.error:void 0)??`HTTP ${s.status}`;return{ok:!1,status:s.status,error:{detail:t}}}let c=i?.id;return c?{ok:!0,id:c,...typeof i.filename==`string`?{filename:i.filename}:{},...typeof i.mimeType==`string`?{mimeType:i.mimeType}:{},...typeof i.sizeBytes==`number`?{sizeBytes:i.sizeBytes}:{}}:{ok:!1,status:422,error:{detail:`Upload response did not include an attachment id.`}}}async function Y(t,r,i,a={}){let{attachmentIds:o=[],onboarding:s,clientMessageId:c,inferenceProfile:l,enabledPlugins:u,hidden:f}=a,h={content:i,sourceChannel:`vellum`,interface:`web`,clientOs:p()},_=g();_&&(h.clientTimezone=_);let v=R();(r!==null||v!==`conversationId`)&&(h[v]=r),o.length>0&&(h.attachmentIds=o),c&&(h.clientMessageId=c),l&&(h.inferenceProfile=l),u!=null&&(h.enabledPlugins=u),f&&(h.hidden=!0);let y=s?m(s):void 0;if(y){let e={tools:y.tools,tasks:y.tasks,tone:y.tone};y.userName!==void 0&&(e.userName=y.userName),y.occupation!==void 0&&(e.occupation=y.occupation),y.assistantName!==void 0&&(e.assistantName=y.assistantName),y.googleConnected!==void 0&&(e.googleConnected=y.googleConnected),y.googleScopes!==void 0&&(e.googleScopes=y.googleScopes),y.priorAssistants!==void 0&&(e.priorAssistants=y.priorAssistants),y.cohort!==void 0&&(e.cohort=y.cohort),y.bootstrapTemplate!==void 0&&(e.bootstrapTemplate=y.bootstrapTemplate),y.initialMessage!==void 0&&y.initialMessage.trim().toLowerCase().replace(/[.!?]+$/,``)!==`wake up, my friend`&&(e.initialMessage=y.initialMessage),y.skills!==void 0&&(e.skills=y.skills),y.title!==void 0&&(e.title=y.title),h.onboarding=e}y&&O(t,y).catch(t=>e(t,{context:`persistPreChatOnboardingProfile`}));let{data:b,error:x,response:S}=await n({path:{assistant_id:t},body:h,throwOnError:!1});if(d(S,x,`Failed to send chat message`),!S.ok){let e=x&&typeof x==`object`&&!Array.isArray(x)?x:{},t=e.error&&typeof e.error==`object`&&!Array.isArray(e.error)?e.error:{};return{ok:!1,status:S.status,error:{code:typeof e.code==`string`?e.code:typeof t.code==`string`?t.code:typeof e.error==`string`?e.error:void 0,detail:(typeof e.detail==`string`?e.detail:void 0)??(typeof e.message==`string`?e.message:void 0)??(typeof t.message==`string`?t.message:void 0)??`HTTP ${S.status}`}}}let C=b;if(!C?.accepted)return{ok:!1,status:422,error:{detail:`Message was not accepted by the assistant.`}};let w=typeof C.conversationId==`string`?C.conversationId:void 0;return w===void 0?{ok:!1,status:422,error:{detail:`Assistant accepted the message but did not return a conversation id.`}}:C.queued?{ok:!0,queued:!0,assistantId:t,conversationId:w,requestId:typeof C.requestId==`string`?C.requestId:void 0}:typeof C.messageId==`string`?{ok:!0,assistantId:t,conversationId:w,messageId:C.messageId}:{ok:!1,status:422,error:{detail:`Message was not accepted by the assistant.`}}}async function X(e,t,n){try{let{response:r}=await s({path:{assistant_id:e,id:n},query:{conversationId:t},throwOnError:!1});return r?.ok??!1}catch{return!1}}async function Z(e,t,n){try{let{response:r}=await o({path:{assistant_id:e,id:n},query:{conversationId:t},throwOnError:!1});return r?.ok??!1}catch{return!1}}export{Y as a,J as c,k as d,H as i,I as l,q as n,X as o,K as r,V as s,Z as t,M as u};
13
+ `),n+t}async function T(e,n){let{data:r,error:i,response:a}=await t({path:{assistant_id:e},query:{path:n},throwOnError:!1});if(d(a,i,`Failed to fetch onboarding profile file`),a.status===404)return null;if(!a.ok)throw Error(`Failed to fetch onboarding profile file (${a.status})`);if(r?.isBinary)throw Error(`Onboarding profile file is binary`);return typeof r?.content==`string`?r.content:null}async function E(e,t,r){let{error:i,response:a}=await n({path:{assistant_id:e},body:{path:t,content:r},throwOnError:!1});if(d(a,i,`Failed to write onboarding profile file`),!a.ok)throw Error(`Failed to write onboarding profile file (${a.status})`)}async function D(e,t,n){await E(e,t,w(await T(e,t),n))}async function O(e,t){let n=C(h(t));await Promise.allSettled(x.map(t=>D(e,t,n)))}function k(e,t,n,r){let i=e.toLowerCase().startsWith(`video/`);return{previewUrl:t&&(!i||i&&!r)?`data:${e};base64,${t}`:null,thumbnailUrl:n?`data:image/jpeg;base64,${n}`:null}}function A(e){return e.map(e=>{let{previewUrl:t,thumbnailUrl:n}=k(e.mimeType,e.data,e.thumbnailData,!0);return{id:e.id,filename:e.filename,mimeType:e.mimeType,sizeBytes:e.sizeBytes,previewUrl:t,thumbnailUrl:n}})}function j(e){return e===`inline`||e===`panel`?e:void 0}function M(e){return{surfaceId:e.surfaceId,surfaceType:e.surfaceType,title:e.title,data:e.data,actions:e.actions,display:j(e.display),completed:e.completed,completionSummary:e.completionSummary,toolCallId:e.toolCallId}}function N(e){return e.map(M)}function P(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}}function F(e){if(!e||e.length===0)return{segments:void 0,attachments:void 0};let t=[];return{segments:e.map(e=>{let{cleanedContent:n,attachments:r}=b(e);return r&&t.push(...r),n}),attachments:t.length>0?t.map((e,t)=>({...e,id:`rehydrated:${t}`})):void 0}}function I(e){let{segments:t,attachments:n}=F(e.textSegments&&e.textSegments.length>0?e.textSegments:void 0),r=e.attachments&&e.attachments.length>0?A(e.attachments):void 0,i=G(e.contentOrder),a=K(e),o=e.toolCalls&&e.toolCalls.length>0?U(e.toolCalls,e.id):void 0,s=P(e.timestamp),c=e.thinkingSegments&&e.thinkingSegments.length>0?e.thinkingSegments:void 0,l={id:e.id,role:e.role};e.mergedMessageIds?.length&&(l.mergedMessageIds=e.mergedMessageIds),e.clientMessageId&&(l.clientMessageId=e.clientMessageId),e.surfaces&&(l.surfaces=N(e.surfaces)),a&&(l.contentBlocks=a),t&&(l.textSegments=t),i&&(l.contentOrder=i),c&&(l.thinkingSegments=c),e.subagentNotification&&(l.isSubagentNotification=!0),e.acpNotification&&(l.isAcpNotification=!0),e.backgroundEventNotification&&(l.isBackgroundEventNotification=!0),e.slackMessage&&(l.slackMessage=e.slackMessage),o&&(l.toolCalls=o),s!=null&&(l.timestamp=s);let u=r??n;return u&&(l.attachments=u),l}var L=`0.8.6`;function R(){let e=c.getState().version;if(!e)return`conversationKey`;let t=l(e),n=l(L);return!t||!n?`conversationKey`:u({...t,pre:null},n)>=0?`conversationId`:`conversationKey`}var z=1e3,B=12e4;function V(e){return{id:e.id,toolName:e.toolName,conversationId:e.conversationId,command:e.command,startedAt:e.startedAt,status:e.status,exitCode:e.exitCode,output:e.output,completedAt:e.completedAt}}async function H(e,t,n){let r=Date.now()+B;for(;Date.now()<r;){let{data:r,error:i,response:o}=await a({path:{assistant_id:e},query:{conversationId:n},throwOnError:!1});if(d(o,i,`Failed to poll for messages`),!o.ok){let e=f(i,o,`Failed to poll for messages`);throw Error(e)}let s=r?.messages??[],c=s.findIndex(e=>e.id===t);if(c>=0){let e=s.slice(c+1).find(e=>e.role===`assistant`);if(e)return e}await new Promise(e=>setTimeout(e,z))}return null}function U(e,t){return e.map((e,n)=>{let{confirmationDecision:r,...i}=e;return{...i,id:e.id??`tool-history-${t}-${n}`,...r===void 0?{}:{confirmationDecision:r}}})}function W(e){if(e&&typeof e==`object`&&!Array.isArray(e)){let t=e;if(typeof t.type==`string`&&typeof t.id==`string`)return{type:t.type,id:t.id}}if(typeof e==`string`){let t=e.indexOf(`:`);if(t>0)return{type:e.slice(0,t),id:e.slice(t+1)}}return null}function G(e){if(!e||e.length===0)return;let t=[];for(let n of e){let e=W(n);e&&t.push(e)}return t.length>0?t:void 0}function K(e){if(e.contentBlocks!==void 0)return e.contentBlocks;let t=G(e.contentOrder);if(!t)return;let n=[];for(let{type:r,id:i}of t){let t=Number.parseInt(i,10);if(!Number.isNaN(t))switch(r){case`text`:{let r=e.textSegments?.[t];if(r==null)break;let{cleanedContent:i}=b(r);i.trim().length>0&&n.push({type:`text`,text:i});break}case`thinking`:{let r=e.thinkingSegments?.[t];r!=null&&n.push({type:`thinking`,thinking:r});break}case`tool`:case`toolCall`:{let r=e.toolCalls?.[t];r&&n.push({type:`tool_use`,toolCall:{...r,id:r.id??`tool-history-${e.id}-${t}`}});break}case`surface`:{let r=e.surfaces?.[t];r&&n.push({type:`surface`,surface:r});break}case`attachment`:{let r=e.attachments[t];r&&n.push({type:`attachment`,attachment:r});break}}}return n.length>0?n:void 0}async function q(e,t,n){let r=n?.latestPageLimit==null?{conversationId:t}:{conversationId:t,page:`latest`,limit:n.latestPageLimit},{data:i,error:o,response:s}=await a({path:{assistant_id:e},query:r,throwOnError:!1});if(d(s,o,`Failed to fetch conversation messages`),!s.ok)throw Error(`Failed to fetch conversation messages (HTTP ${s.status})`);return i}async function J(e,t){let n=t.name||`attachment`,r=t.type||`application/octet-stream`,{data:i,error:a,response:s}=await o({path:{assistant_id:e},body:{file:t,filename:n,mimeType:r},throwOnError:!1});if(d(s,a,`Failed to upload attachment`),!s.ok){let e=a&&typeof a==`object`&&!Array.isArray(a)?a:{},t=(typeof e.detail==`string`?e.detail:void 0)??(typeof e.error==`string`?e.error:void 0)??`HTTP ${s.status}`;return{ok:!1,status:s.status,error:{detail:t}}}let c=i?.id;return c?{ok:!0,id:c,...typeof i.filename==`string`?{filename:i.filename}:{},...typeof i.mimeType==`string`?{mimeType:i.mimeType}:{},...typeof i.sizeBytes==`number`?{sizeBytes:i.sizeBytes}:{}}:{ok:!1,status:422,error:{detail:`Upload response did not include an attachment id.`}}}async function Y(t,n,r,a={}){let{attachmentIds:o=[],onboarding:s,clientMessageId:c,inferenceProfile:l,enabledPlugins:u,hidden:f}=a,h={content:r,sourceChannel:`vellum`,interface:`web`,clientOs:p()},_=g();_&&(h.clientTimezone=_);let v=R();(n!==null||v!==`conversationId`)&&(h[v]=n),o.length>0&&(h.attachmentIds=o),c&&(h.clientMessageId=c),l&&(h.inferenceProfile=l),u!=null&&(h.enabledPlugins=u),f&&(h.hidden=!0);let y=s?m(s):void 0;if(y){let e={tools:y.tools,tasks:y.tasks,tone:y.tone};y.userName!==void 0&&(e.userName=y.userName),y.occupation!==void 0&&(e.occupation=y.occupation),y.assistantName!==void 0&&(e.assistantName=y.assistantName),y.googleConnected!==void 0&&(e.googleConnected=y.googleConnected),y.googleScopes!==void 0&&(e.googleScopes=y.googleScopes),y.priorAssistants!==void 0&&(e.priorAssistants=y.priorAssistants),y.cohort!==void 0&&(e.cohort=y.cohort),y.bootstrapTemplate!==void 0&&(e.bootstrapTemplate=y.bootstrapTemplate),y.initialMessage!==void 0&&y.initialMessage.trim().toLowerCase().replace(/[.!?]+$/,``)!==`wake up, my friend`&&(e.initialMessage=y.initialMessage),y.skills!==void 0&&(e.skills=y.skills),y.title!==void 0&&(e.title=y.title),h.onboarding=e}y&&O(t,y).catch(t=>e(t,{context:`persistPreChatOnboardingProfile`}));let{data:b,error:x,response:S}=await i({path:{assistant_id:t},body:h,throwOnError:!1});if(d(S,x,`Failed to send chat message`),!S.ok){let e=x&&typeof x==`object`&&!Array.isArray(x)?x:{},t=e.error&&typeof e.error==`object`&&!Array.isArray(e.error)?e.error:{};return{ok:!1,status:S.status,error:{code:typeof e.code==`string`?e.code:typeof t.code==`string`?t.code:typeof e.error==`string`?e.error:void 0,detail:(typeof e.detail==`string`?e.detail:void 0)??(typeof e.message==`string`?e.message:void 0)??(typeof t.message==`string`?t.message:void 0)??`HTTP ${S.status}`}}}let C=b;if(!C?.accepted)return{ok:!1,status:422,error:{detail:`Message was not accepted by the assistant.`}};let w=typeof C.conversationId==`string`?C.conversationId:void 0;return w===void 0?{ok:!1,status:422,error:{detail:`Assistant accepted the message but did not return a conversation id.`}}:C.queued?{ok:!0,queued:!0,assistantId:t,conversationId:w,requestId:typeof C.requestId==`string`?C.requestId:void 0}:typeof C.messageId==`string`?{ok:!0,assistantId:t,conversationId:w,messageId:C.messageId}:{ok:!1,status:422,error:{detail:`Message was not accepted by the assistant.`}}}async function X(e,t,n){try{let{response:r}=await s({path:{assistant_id:e,id:n},query:{conversationId:t},throwOnError:!1});return r?.ok??!1}catch{return!1}}async function Z(e,t,n){try{let{response:i}=await r({path:{assistant_id:e,id:n},query:{conversationId:t},throwOnError:!1});return i?.ok??!1}catch{return!1}}export{Y as a,J as c,k as d,H as i,I as l,q as n,X as o,K as r,V as s,Z as t,M as u};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{t as i}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{qi as a}from"./index-6YxiY2Ly.js";var o=e(t(),1),s=r(),c=`(min-width: 640px)`,l=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`,`);function u({open:e,onClose:t,children:r,title:a}){let u=(0,o.useRef)(null),d=(0,o.useRef)(null),f=(0,o.useRef)(t);return(0,o.useEffect)(()=>{f.current=t}),(0,o.useEffect)(()=>{if(!e)return;d.current?.focus();let t=document.body.style.overflow;document.body.style.overflow=`hidden`;let n=window.matchMedia(c),r=e=>{e.matches&&f.current()};n.addEventListener(`change`,r);let i=e=>{if(e.key===`Escape`){f.current();return}if(e.key!==`Tab`||!u.current)return;let t=u.current.querySelectorAll(l),n=t[0],r=t[t.length-1];if(!n||!r){e.preventDefault();return}let i=document.activeElement,a=u.current.contains(i);e.shiftKey?(!a||i===n)&&(e.preventDefault(),r.focus()):(!a||i===r)&&(e.preventDefault(),n.focus())};return document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`keydown`,i),n.removeEventListener(`change`,r),document.body.style.overflow=t}},[e]),e?(0,s.jsxs)(`div`,{ref:u,className:`fixed inset-0 sm:hidden`,style:{zIndex:40},role:`dialog`,"aria-modal":`true`,"aria-label":a,children:[(0,s.jsx)(`button`,{type:`button`,"aria-label":`Close sidebar`,className:`absolute inset-0 h-full w-full cursor-default`,style:{background:`rgba(0, 0, 0, 0.4)`,zIndex:40},onClick:t}),(0,s.jsxs)(`aside`,{className:`relative flex h-full w-[80vw] max-w-xs flex-col shadow-xl`,style:{background:`var(--surface-lift)`,borderRight:`1px solid var(--border-base)`,zIndex:50,paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`},children:[(0,s.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,s.jsx)(`span`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:a}),(0,s.jsx)(n,{ref:d,type:`button`,variant:`ghost`,size:`compact`,iconOnly:(0,s.jsx)(i,{"aria-hidden":!0}),onClick:t,"aria-label":`Close`,tintColor:`var(--content-tertiary)`})]}),(0,s.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,children:r})]})]}):null}function d({onClick:e}){return(0,s.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:(0,s.jsx)(a,{"aria-hidden":!0}),onClick:e,"aria-label":`Open sidebar`,tintColor:`var(--content-secondary)`,className:`sm:hidden`})}export{d as n,u as t};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{t as i}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{qi as a}from"./index-DQjUULFO.js";var o=e(t(),1),s=r(),c=`(min-width: 640px)`,l=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`,`);function u({open:e,onClose:t,children:r,title:a}){let u=(0,o.useRef)(null),d=(0,o.useRef)(null),f=(0,o.useRef)(t);return(0,o.useEffect)(()=>{f.current=t}),(0,o.useEffect)(()=>{if(!e)return;d.current?.focus();let t=document.body.style.overflow;document.body.style.overflow=`hidden`;let n=window.matchMedia(c),r=e=>{e.matches&&f.current()};n.addEventListener(`change`,r);let i=e=>{if(e.key===`Escape`){f.current();return}if(e.key!==`Tab`||!u.current)return;let t=u.current.querySelectorAll(l),n=t[0],r=t[t.length-1];if(!n||!r){e.preventDefault();return}let i=document.activeElement,a=u.current.contains(i);e.shiftKey?(!a||i===n)&&(e.preventDefault(),r.focus()):(!a||i===r)&&(e.preventDefault(),n.focus())};return document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`keydown`,i),n.removeEventListener(`change`,r),document.body.style.overflow=t}},[e]),e?(0,s.jsxs)(`div`,{ref:u,className:`fixed inset-0 sm:hidden`,style:{zIndex:40},role:`dialog`,"aria-modal":`true`,"aria-label":a,children:[(0,s.jsx)(`button`,{type:`button`,"aria-label":`Close sidebar`,className:`absolute inset-0 h-full w-full cursor-default`,style:{background:`rgba(0, 0, 0, 0.4)`,zIndex:40},onClick:t}),(0,s.jsxs)(`aside`,{className:`relative flex h-full w-[80vw] max-w-xs flex-col shadow-xl`,style:{background:`var(--surface-lift)`,borderRight:`1px solid var(--border-base)`,zIndex:50,paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`},children:[(0,s.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,s.jsx)(`span`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:a}),(0,s.jsx)(n,{ref:d,type:`button`,variant:`ghost`,size:`compact`,iconOnly:(0,s.jsx)(i,{"aria-hidden":!0}),onClick:t,"aria-label":`Close`,tintColor:`var(--content-tertiary)`})]}),(0,s.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,children:r})]})]}):null}function d({onClick:e}){return(0,s.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:(0,s.jsx)(a,{"aria-hidden":!0}),onClick:e,"aria-label":`Open sidebar`,tintColor:`var(--content-secondary)`,className:`sm:hidden`})}export{d as n,u as t};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{r as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./useMutation-Lj4VunQV.js";import{t as o}from"./jsx-runtime-CVSDxk6A.js";import{t as s}from"./createLucideIcon-IRfcSUxS.js";import{t as c}from"./bell-BQLonLMp.js";import{t as l}from"./check-DFNrQERi.js";import{t as u}from"./menu-Dy5QbnTj.js";import{t as d}from"./loader-circle-Cz7opInR.js";import{t as f}from"./moon-B8qiwjrW.js";import{t as p}from"./triangle-alert-Z0Gq0IuB.js";import{t as m}from"./notice-DkcNAP8O.js";import{t as h}from"./popover-CFL4WZTr.js";import{t as g}from"./input-CoUmPnRU.js";import{n as _,t as v}from"./panel-item-CouW2A55.js";import{n as y}from"./toast-xTp-xwYL.js";import{c as b}from"./routes-BbeIx_F9.js";import{_t as x,ft as S,gt as C,ht as w,mt as T,pt as E,vt as D}from"./react-query.gen-DPzPS206.js";import{D as O,Hr as k,Ur as A,Wr as j,vr as M}from"./index-6YxiY2Ly.js";import{t as N}from"./mutation-error-CrhKyTkx.js";import{r as P}from"./format-date-BczUbfC1.js";var F=s(`bell-off`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742`,key:`178tsu`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05`,key:`1hqiys`}]]),I=s(`check-check`,[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]),L=e(t(),1);function R(e){e.invalidateQueries({queryKey:T()}),e.invalidateQueries({queryKey:D()})}function z(e){return e.snoozed_until?new Date(e.snoozed_until)>new Date:!1}var B=[{label:`1 hour`,hours:1},{label:`4 hours`,hours:4},{label:`24 hours`,hours:24},{label:`1 week`,hours:168}],V=o();function H({notificationId:e,currentlySnoozed:t,children:n}){let i=r(),o=a(x()),s=M(),[c,l]=(0,L.useState)(!1),d=()=>R(i),f=t=>{let n=new Date(new Date().getTime()+t*60*60*1e3).toISOString();o.mutate({path:{id:e},body:{snoozed_until:n}},{onSuccess:d,onError:N(`Failed to snooze notification`)})},p=()=>{o.mutate({path:{id:e},body:{snoozed_until:null}},{onSuccess:d,onError:N(`Failed to clear snooze`)})};return s?(0,V.jsxs)(_.Root,{open:c,onOpenChange:l,children:[(0,V.jsx)(_.Trigger,{asChild:!0,children:n}),(0,V.jsxs)(_.Content,{children:[(0,V.jsx)(_.Header,{children:(0,V.jsx)(_.Title,{children:`Snooze until…`})}),(0,V.jsxs)(_.Body,{children:[B.map(({label:e,hours:t})=>(0,V.jsx)(v,{label:e,onSelect:()=>{o.isPending||(l(!1),f(t))}},e)),t&&(0,V.jsx)(v,{label:`Clear snooze`,onSelect:()=>{o.isPending||(l(!1),p())}})]})]})]}):(0,V.jsxs)(u.Root,{open:c,onOpenChange:l,children:[(0,V.jsx)(u.Trigger,{children:n}),(0,V.jsxs)(u.Content,{align:`start`,className:`min-w-[12rem]`,children:[(0,V.jsx)(u.Label,{children:`Snooze until…`}),B.map(({label:e,hours:t})=>(0,V.jsx)(u.Item,{disabled:o.isPending,onSelect:()=>f(t),children:e},e)),t&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(u.Separator,{}),(0,V.jsx)(u.Item,{disabled:o.isPending,onSelect:()=>p(),children:`Clear snooze`})]})]})]})}function U({existingRules:e,onClose:t,onPauseCreated:n,onPauseDeleted:i,hideTitle:o=!1}){let s=r(),c=a(w()),l=a(C()),[u,f]=(0,L.useState)(``),p=()=>R(s),m=()=>{let e=new Date(new Date().getTime()+365*24*60*60*1e3).toISOString();c.mutate({body:{notification_type:`alert`,dedupe_key_prefix:``,reason:u.trim()||`User requested pause`,expires_at:e}},{onSuccess:e=>{n(e),p(),t()},onError:N(`Failed to pause alerts`)})},h=e=>{l.mutate({path:{rule_id:e}},{onSuccess:()=>{i(e),p(),t()},onError:N(`Failed to resume alerts`)})},_=c.isPending||l.isPending;return(0,V.jsxs)(`div`,{children:[!o&&(0,V.jsx)(`p`,{className:`mb-2 text-body-medium-default text-[var(--content-default)]`,children:`Pause alerts`}),e.length>0?(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Active pause rules:`}),e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-2 py-2`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-body-small-default text-[var(--content-default)]`,children:e.reason||`All alerts paused`}),e.expires_at&&(0,V.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:[`Expires `,P(e.expires_at)]})]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>h(e.id),disabled:_,className:`ml-2 shrink-0 cursor-pointer rounded px-2 py-1 text-body-small-default text-[var(--system-negative-strong)] transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,children:`Resume`})]},e.id))]}):(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Temporarily mute all alert notifications.`}),(0,V.jsx)(g,{type:`text`,value:u,onChange:e=>f(e.target.value),placeholder:`Reason (optional)`}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>m(),disabled:_,className:`w-full cursor-pointer rounded-md bg-[var(--primary-base)] px-3 py-1.5 text-body-medium-default text-[var(--content-inset)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50`,children:c.isPending?(0,V.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}),`Pausing…`]}):`Pause all alerts`})]})]})}function W({notification:e,onAck:t,isAcking:n}){let r=e.notification_type===`alert`,i=z(e),a=!e.is_read;return(0,V.jsxs)(`div`,{className:`relative rounded-lg border border-[var(--border-base)] p-4`,style:{background:e.is_resolved?`var(--surface-base)`:`var(--surface-lift)`,opacity:e.is_resolved?.75:1},children:[(0,V.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col items-start gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[a&&!e.is_resolved&&(0,V.jsx)(`span`,{"aria-hidden":!0,className:`h-2 w-2 shrink-0 rounded-full bg-[var(--primary-base)]`}),r&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[color-mix(in_oklab,var(--system-negative-strong)_14%,transparent)] px-2 py-0.5 text-body-small-default text-[var(--system-negative-strong)]`,children:[(0,V.jsx)(p,{className:`h-3 w-3`}),`Alert`]}),i&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--surface-base)] px-2 py-0.5 text-body-small-default text-[var(--content-secondary)]`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),`Snoozed`]}),e.is_resolved&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[color-mix(in_oklab,var(--system-positive-strong)_14%,transparent)] px-2 py-0.5 text-body-small-default text-[var(--system-positive-strong)]`,children:[(0,V.jsx)(l,{className:`h-3 w-3`}),`Resolved`]})]}),(0,V.jsx)(`h3`,{className:`text-body-medium-default leading-tight`,style:{color:e.is_resolved?`var(--content-secondary)`:`var(--content-default)`},children:e.title}),e.body&&(0,V.jsx)(`p`,{className:`text-body-small-default leading-relaxed text-[var(--content-secondary)]`,children:e.body})]})}),(0,V.jsxs)(`div`,{className:`mt-3 flex items-center gap-3 text-body-small-default text-[var(--content-secondary)]`,children:[(0,V.jsxs)(`span`,{children:[`Last seen `,P(e.last_seen_at)]}),e.occurrence_count>1&&(0,V.jsxs)(`span`,{children:[`· `,e.occurrence_count,`× occurrences`]})]}),!e.is_resolved&&(0,V.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-[var(--border-base)] pt-3`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>t(e.id,a),disabled:n,className:`flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-1.5 text-body-small-default transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,style:{background:a?`var(--primary-base)`:`var(--surface-base)`,color:a?`var(--content-inset)`:`var(--content-secondary)`},children:[n?(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}):(0,V.jsx)(l,{className:`h-3 w-3`}),a?`Mark as read`:`Mark as unread`]}),(0,V.jsx)(H,{notificationId:e.id,currentlySnoozed:i,children:(0,V.jsxs)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),i?`Change snooze`:`Snooze`]})})]})]})}function G(){let e=j({platformHostedOnly:!0}),t=k(),o=A(),s=r(),l=M(),[u,f]=(0,L.useState)(`open`),[p,g]=(0,L.useState)(!1),[v,x]=(0,L.useState)([]),{data:C,isLoading:w,isError:T,refetch:D}=i({...E({query:{status:u}}),enabled:e===`full`&&t}),N=e===`full`&&o||(t?w:!1);(0,L.useEffect)(()=>{!t&&p&&g(!1)},[t,p]);let P=t?T:!1,z=t?C?.results??[]:[],B=z.filter(e=>!e.is_read&&!e.is_resolved),H=a(S()),[G,K]=(0,L.useState)(new Set),[q,J]=(0,L.useState)(!1),Y=(0,L.useCallback)(()=>R(s),[s]),X=async(e,t)=>{K(t=>new Set(t).add(e));try{await H.mutateAsync({path:{id:e},body:{acknowledged:t}}),Y()}catch(e){y.error(e instanceof Error?e.message:`Failed to update notification`)}finally{K(t=>{let n=new Set(t);return n.delete(e),n})}},Z=async()=>{if(!(B.length===0||q)){J(!0);try{await Promise.allSettled(B.map(e=>H.mutateAsync({path:{id:e.id},body:{acknowledged:!0}})))}finally{Y(),J(!1)}}},Q=(0,V.jsxs)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80`,title:`Pause alerts`,children:[(0,V.jsx)(F,{className:`h-3.5 w-3.5`}),`Pause alerts`]}),$=(0,V.jsx)(U,{existingRules:v,onClose:()=>g(!1),onPauseCreated:e=>x(t=>[...t,e]),onPauseDeleted:e=>x(t=>t.filter(t=>t.id!==e))});return e===`gated`?(0,V.jsx)(n,{replace:!0,to:b.settings.general}):e===`disabled`?(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`}),(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Notifications`}),(0,V.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:`Platform alerts and status notifications`})]})]}),(0,V.jsx)(O,{children:`Log in to the Vellum platform to view notifications.`})]}):(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`}),(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Notifications`}),(0,V.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:`Platform alerts and status notifications`})]}),t&&(l?(0,V.jsxs)(_.Root,{open:p,onOpenChange:g,children:[(0,V.jsx)(_.Trigger,{asChild:!0,children:Q}),(0,V.jsxs)(_.Content,{children:[(0,V.jsx)(_.Header,{children:(0,V.jsx)(_.Title,{children:`Pause alerts`})}),(0,V.jsx)(_.Body,{children:(0,V.jsx)(U,{existingRules:v,onClose:()=>g(!1),onPauseCreated:e=>x(t=>[...t,e]),onPauseDeleted:e=>x(t=>t.filter(t=>t.id!==e)),hideTitle:!0})})]})]}):(0,V.jsxs)(h.Root,{open:p,onOpenChange:g,children:[(0,V.jsx)(h.Trigger,{asChild:!0,children:Q}),(0,V.jsx)(h.Content,{align:`end`,className:`w-72`,children:$})]}))]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`flex gap-1 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] p-1`,children:[`open`,`resolved`].map(e=>{let t=u===e;return(0,V.jsx)(`button`,{type:`button`,onClick:()=>f(e),className:`cursor-pointer rounded px-3 py-1 text-body-small-default capitalize transition-colors`,style:{background:t?`var(--surface-lift)`:`transparent`,color:t?`var(--content-default)`:`var(--content-secondary)`,boxShadow:t?`0 1px 2px rgba(0,0,0,0.08)`:void 0},children:e},e)})}),u===`open`&&B.length>1&&(0,V.jsxs)(`button`,{type:`button`,onClick:()=>void Z(),disabled:q,className:`ml-auto flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-transparent px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,children:[q?(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}):(0,V.jsx)(I,{className:`h-3 w-3`}),`Mark all as read (`,B.length,`)`]})]}),N?(0,V.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-secondary)]`,children:[(0,V.jsx)(d,{className:`h-4 w-4 animate-spin`}),`Loading notifications…`]}):P?(0,V.jsxs)(m,{tone:`error`,children:[`Failed to load notifications.`,` `,(0,V.jsx)(`button`,{type:`button`,onClick:()=>void D(),className:`cursor-pointer underline hover:no-underline`,children:`Retry`})]}):z.length===0?(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 py-12 text-center`,children:[(0,V.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`})}),(0,V.jsxs)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:[`No `,u,` notifications`]}),(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:u===`open`?`You're all caught up!`:`Nothing to show here.`})]}):(0,V.jsx)(`div`,{className:`space-y-3`,children:z.map(e=>(0,V.jsx)(W,{notification:e,onAck:(e,t)=>void X(e,t),isAcking:G.has(e.id)},e.id))})]})}export{G as NotificationsPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{r as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./useMutation-Lj4VunQV.js";import{t as o}from"./jsx-runtime-CVSDxk6A.js";import{t as s}from"./createLucideIcon-IRfcSUxS.js";import{t as c}from"./bell-BQLonLMp.js";import{t as l}from"./check-DFNrQERi.js";import{t as u}from"./menu-Dy5QbnTj.js";import{t as d}from"./loader-circle-Cz7opInR.js";import{t as f}from"./moon-B8qiwjrW.js";import{t as p}from"./triangle-alert-Z0Gq0IuB.js";import{t as m}from"./notice-DkcNAP8O.js";import{t as h}from"./popover-CFL4WZTr.js";import{t as g}from"./input-CoUmPnRU.js";import{n as _,t as v}from"./panel-item-CouW2A55.js";import{n as y}from"./toast-xTp-xwYL.js";import{c as b}from"./routes-BbeIx_F9.js";import{_t as x,ft as S,gt as C,ht as w,mt as T,pt as E,vt as D}from"./react-query.gen-DPzPS206.js";import{D as O,Hr as k,Ur as A,Wr as j,vr as M}from"./index-DQjUULFO.js";import{t as N}from"./mutation-error-CrhKyTkx.js";import{r as P}from"./format-date-BczUbfC1.js";var F=s(`bell-off`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742`,key:`178tsu`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05`,key:`1hqiys`}]]),I=s(`check-check`,[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]),L=e(t(),1);function R(e){e.invalidateQueries({queryKey:T()}),e.invalidateQueries({queryKey:D()})}function z(e){return e.snoozed_until?new Date(e.snoozed_until)>new Date:!1}var B=[{label:`1 hour`,hours:1},{label:`4 hours`,hours:4},{label:`24 hours`,hours:24},{label:`1 week`,hours:168}],V=o();function H({notificationId:e,currentlySnoozed:t,children:n}){let i=r(),o=a(x()),s=M(),[c,l]=(0,L.useState)(!1),d=()=>R(i),f=t=>{let n=new Date(new Date().getTime()+t*60*60*1e3).toISOString();o.mutate({path:{id:e},body:{snoozed_until:n}},{onSuccess:d,onError:N(`Failed to snooze notification`)})},p=()=>{o.mutate({path:{id:e},body:{snoozed_until:null}},{onSuccess:d,onError:N(`Failed to clear snooze`)})};return s?(0,V.jsxs)(_.Root,{open:c,onOpenChange:l,children:[(0,V.jsx)(_.Trigger,{asChild:!0,children:n}),(0,V.jsxs)(_.Content,{children:[(0,V.jsx)(_.Header,{children:(0,V.jsx)(_.Title,{children:`Snooze until…`})}),(0,V.jsxs)(_.Body,{children:[B.map(({label:e,hours:t})=>(0,V.jsx)(v,{label:e,onSelect:()=>{o.isPending||(l(!1),f(t))}},e)),t&&(0,V.jsx)(v,{label:`Clear snooze`,onSelect:()=>{o.isPending||(l(!1),p())}})]})]})]}):(0,V.jsxs)(u.Root,{open:c,onOpenChange:l,children:[(0,V.jsx)(u.Trigger,{children:n}),(0,V.jsxs)(u.Content,{align:`start`,className:`min-w-[12rem]`,children:[(0,V.jsx)(u.Label,{children:`Snooze until…`}),B.map(({label:e,hours:t})=>(0,V.jsx)(u.Item,{disabled:o.isPending,onSelect:()=>f(t),children:e},e)),t&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(u.Separator,{}),(0,V.jsx)(u.Item,{disabled:o.isPending,onSelect:()=>p(),children:`Clear snooze`})]})]})]})}function U({existingRules:e,onClose:t,onPauseCreated:n,onPauseDeleted:i,hideTitle:o=!1}){let s=r(),c=a(w()),l=a(C()),[u,f]=(0,L.useState)(``),p=()=>R(s),m=()=>{let e=new Date(new Date().getTime()+365*24*60*60*1e3).toISOString();c.mutate({body:{notification_type:`alert`,dedupe_key_prefix:``,reason:u.trim()||`User requested pause`,expires_at:e}},{onSuccess:e=>{n(e),p(),t()},onError:N(`Failed to pause alerts`)})},h=e=>{l.mutate({path:{rule_id:e}},{onSuccess:()=>{i(e),p(),t()},onError:N(`Failed to resume alerts`)})},_=c.isPending||l.isPending;return(0,V.jsxs)(`div`,{children:[!o&&(0,V.jsx)(`p`,{className:`mb-2 text-body-medium-default text-[var(--content-default)]`,children:`Pause alerts`}),e.length>0?(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Active pause rules:`}),e.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-2 py-2`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`p`,{className:`truncate text-body-small-default text-[var(--content-default)]`,children:e.reason||`All alerts paused`}),e.expires_at&&(0,V.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:[`Expires `,P(e.expires_at)]})]}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>h(e.id),disabled:_,className:`ml-2 shrink-0 cursor-pointer rounded px-2 py-1 text-body-small-default text-[var(--system-negative-strong)] transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,children:`Resume`})]},e.id))]}):(0,V.jsxs)(`div`,{className:`space-y-2`,children:[(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Temporarily mute all alert notifications.`}),(0,V.jsx)(g,{type:`text`,value:u,onChange:e=>f(e.target.value),placeholder:`Reason (optional)`}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>m(),disabled:_,className:`w-full cursor-pointer rounded-md bg-[var(--primary-base)] px-3 py-1.5 text-body-medium-default text-[var(--content-inset)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50`,children:c.isPending?(0,V.jsxs)(`span`,{className:`flex items-center justify-center gap-2`,children:[(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}),`Pausing…`]}):`Pause all alerts`})]})]})}function W({notification:e,onAck:t,isAcking:n}){let r=e.notification_type===`alert`,i=z(e),a=!e.is_read;return(0,V.jsxs)(`div`,{className:`relative rounded-lg border border-[var(--border-base)] p-4`,style:{background:e.is_resolved?`var(--surface-base)`:`var(--surface-lift)`,opacity:e.is_resolved?.75:1},children:[(0,V.jsx)(`div`,{className:`flex items-start gap-3`,children:(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col items-start gap-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[a&&!e.is_resolved&&(0,V.jsx)(`span`,{"aria-hidden":!0,className:`h-2 w-2 shrink-0 rounded-full bg-[var(--primary-base)]`}),r&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[color-mix(in_oklab,var(--system-negative-strong)_14%,transparent)] px-2 py-0.5 text-body-small-default text-[var(--system-negative-strong)]`,children:[(0,V.jsx)(p,{className:`h-3 w-3`}),`Alert`]}),i&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[var(--surface-base)] px-2 py-0.5 text-body-small-default text-[var(--content-secondary)]`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),`Snoozed`]}),e.is_resolved&&(0,V.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-[color-mix(in_oklab,var(--system-positive-strong)_14%,transparent)] px-2 py-0.5 text-body-small-default text-[var(--system-positive-strong)]`,children:[(0,V.jsx)(l,{className:`h-3 w-3`}),`Resolved`]})]}),(0,V.jsx)(`h3`,{className:`text-body-medium-default leading-tight`,style:{color:e.is_resolved?`var(--content-secondary)`:`var(--content-default)`},children:e.title}),e.body&&(0,V.jsx)(`p`,{className:`text-body-small-default leading-relaxed text-[var(--content-secondary)]`,children:e.body})]})}),(0,V.jsxs)(`div`,{className:`mt-3 flex items-center gap-3 text-body-small-default text-[var(--content-secondary)]`,children:[(0,V.jsxs)(`span`,{children:[`Last seen `,P(e.last_seen_at)]}),e.occurrence_count>1&&(0,V.jsxs)(`span`,{children:[`· `,e.occurrence_count,`× occurrences`]})]}),!e.is_resolved&&(0,V.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-[var(--border-base)] pt-3`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>t(e.id,a),disabled:n,className:`flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-1.5 text-body-small-default transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,style:{background:a?`var(--primary-base)`:`var(--surface-base)`,color:a?`var(--content-inset)`:`var(--content-secondary)`},children:[n?(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}):(0,V.jsx)(l,{className:`h-3 w-3`}),a?`Mark as read`:`Mark as unread`]}),(0,V.jsx)(H,{notificationId:e.id,currentlySnoozed:i,children:(0,V.jsxs)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80`,children:[(0,V.jsx)(f,{className:`h-3 w-3`}),i?`Change snooze`:`Snooze`]})})]})]})}function G(){let e=j({platformHostedOnly:!0}),t=k(),o=A(),s=r(),l=M(),[u,f]=(0,L.useState)(`open`),[p,g]=(0,L.useState)(!1),[v,x]=(0,L.useState)([]),{data:C,isLoading:w,isError:T,refetch:D}=i({...E({query:{status:u}}),enabled:e===`full`&&t}),N=e===`full`&&o||(t?w:!1);(0,L.useEffect)(()=>{!t&&p&&g(!1)},[t,p]);let P=t?T:!1,z=t?C?.results??[]:[],B=z.filter(e=>!e.is_read&&!e.is_resolved),H=a(S()),[G,K]=(0,L.useState)(new Set),[q,J]=(0,L.useState)(!1),Y=(0,L.useCallback)(()=>R(s),[s]),X=async(e,t)=>{K(t=>new Set(t).add(e));try{await H.mutateAsync({path:{id:e},body:{acknowledged:t}}),Y()}catch(e){y.error(e instanceof Error?e.message:`Failed to update notification`)}finally{K(t=>{let n=new Set(t);return n.delete(e),n})}},Z=async()=>{if(!(B.length===0||q)){J(!0);try{await Promise.allSettled(B.map(e=>H.mutateAsync({path:{id:e.id},body:{acknowledged:!0}})))}finally{Y(),J(!1)}}},Q=(0,V.jsxs)(`button`,{type:`button`,className:`flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80`,title:`Pause alerts`,children:[(0,V.jsx)(F,{className:`h-3.5 w-3.5`}),`Pause alerts`]}),$=(0,V.jsx)(U,{existingRules:v,onClose:()=>g(!1),onPauseCreated:e=>x(t=>[...t,e]),onPauseDeleted:e=>x(t=>t.filter(t=>t.id!==e))});return e===`gated`?(0,V.jsx)(n,{replace:!0,to:b.settings.general}):e===`disabled`?(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`}),(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Notifications`}),(0,V.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:`Platform alerts and status notifications`})]})]}),(0,V.jsx)(O,{children:`Log in to the Vellum platform to view notifications.`})]}):(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`}),(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Notifications`}),(0,V.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:`Platform alerts and status notifications`})]}),t&&(l?(0,V.jsxs)(_.Root,{open:p,onOpenChange:g,children:[(0,V.jsx)(_.Trigger,{asChild:!0,children:Q}),(0,V.jsxs)(_.Content,{children:[(0,V.jsx)(_.Header,{children:(0,V.jsx)(_.Title,{children:`Pause alerts`})}),(0,V.jsx)(_.Body,{children:(0,V.jsx)(U,{existingRules:v,onClose:()=>g(!1),onPauseCreated:e=>x(t=>[...t,e]),onPauseDeleted:e=>x(t=>t.filter(t=>t.id!==e)),hideTitle:!0})})]})]}):(0,V.jsxs)(h.Root,{open:p,onOpenChange:g,children:[(0,V.jsx)(h.Trigger,{asChild:!0,children:Q}),(0,V.jsx)(h.Content,{align:`end`,className:`w-72`,children:$})]}))]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`div`,{className:`flex gap-1 rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] p-1`,children:[`open`,`resolved`].map(e=>{let t=u===e;return(0,V.jsx)(`button`,{type:`button`,onClick:()=>f(e),className:`cursor-pointer rounded px-3 py-1 text-body-small-default capitalize transition-colors`,style:{background:t?`var(--surface-lift)`:`transparent`,color:t?`var(--content-default)`:`var(--content-secondary)`,boxShadow:t?`0 1px 2px rgba(0,0,0,0.08)`:void 0},children:e},e)})}),u===`open`&&B.length>1&&(0,V.jsxs)(`button`,{type:`button`,onClick:()=>void Z(),disabled:q,className:`ml-auto flex cursor-pointer items-center gap-1.5 rounded-md border border-[var(--border-base)] bg-transparent px-3 py-1.5 text-body-small-default text-[var(--content-secondary)] transition-opacity hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50`,children:[q?(0,V.jsx)(d,{className:`h-3 w-3 animate-spin`}):(0,V.jsx)(I,{className:`h-3 w-3`}),`Mark all as read (`,B.length,`)`]})]}),N?(0,V.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-secondary)]`,children:[(0,V.jsx)(d,{className:`h-4 w-4 animate-spin`}),`Loading notifications…`]}):P?(0,V.jsxs)(m,{tone:`error`,children:[`Failed to load notifications.`,` `,(0,V.jsx)(`button`,{type:`button`,onClick:()=>void D(),className:`cursor-pointer underline hover:no-underline`,children:`Retry`})]}):z.length===0?(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 py-12 text-center`,children:[(0,V.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-[var(--surface-base)]`,children:(0,V.jsx)(c,{className:`h-5 w-5 text-[var(--content-secondary)]`})}),(0,V.jsxs)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:[`No `,u,` notifications`]}),(0,V.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:u===`open`?`You're all caught up!`:`Nothing to show here.`})]}):(0,V.jsx)(`div`,{className:`space-y-3`,children:z.map(e=>(0,V.jsx)(W,{notification:e,onAck:(e,t)=>void X(e,t),isAcking:G.has(e.id)},e.id))})]})}export{G as NotificationsPage};
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{en as i}from"./index-6YxiY2Ly.js";var a=e(t(),1),o=r();function s(){return(0,o.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,o.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-positive-bg)`}),(0,o.jsx)(`path`,{className:`oauth-check`,d:`M17 28.5L24.5 36L39 21`,stroke:`var(--oauth-positive-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function c(){return(0,o.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,o.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-negative-bg)`}),(0,o.jsx)(`path`,{className:`oauth-cross oauth-cross-1`,d:`M20 20L36 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`}),(0,o.jsx)(`path`,{className:`oauth-cross oauth-cross-2`,d:`M36 20L20 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`})]})}var l=`
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{en as i}from"./index-DQjUULFO.js";var a=e(t(),1),o=r();function s(){return(0,o.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,o.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-positive-bg)`}),(0,o.jsx)(`path`,{className:`oauth-check`,d:`M17 28.5L24.5 36L39 21`,stroke:`var(--oauth-positive-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function c(){return(0,o.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,o.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-negative-bg)`}),(0,o.jsx)(`path`,{className:`oauth-cross oauth-cross-1`,d:`M20 20L36 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`}),(0,o.jsx)(`path`,{className:`oauth-cross oauth-cross-2`,d:`M36 20L20 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`})]})}var l=`
2
2
  :root {
3
3
  --oauth-surface: #F5F3EB;
4
4
  --oauth-surface-card: #FFFFFF;
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{n as i,r as a}from"./native-deep-link-CJGNy9bj.js";import{en as o}from"./index-6YxiY2Ly.js";var s=e(t(),1),c=r();function l(){return(0,c.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,c.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-positive-bg)`}),(0,c.jsx)(`path`,{className:`oauth-check`,d:`M17 28.5L24.5 36L39 21`,stroke:`var(--oauth-positive-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function u(){return(0,c.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,c.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-negative-bg)`}),(0,c.jsx)(`path`,{className:`oauth-cross oauth-cross-1`,d:`M20 20L36 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`}),(0,c.jsx)(`path`,{className:`oauth-cross oauth-cross-2`,d:`M36 20L20 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`})]})}var d=`
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{n as i,r as a}from"./native-deep-link-CJGNy9bj.js";import{en as o}from"./index-DQjUULFO.js";var s=e(t(),1),c=r();function l(){return(0,c.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,c.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-positive-bg)`}),(0,c.jsx)(`path`,{className:`oauth-check`,d:`M17 28.5L24.5 36L39 21`,stroke:`var(--oauth-positive-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`})]})}function u(){return(0,c.jsxs)(`svg`,{className:`oauth-icon`,viewBox:`0 0 56 56`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,children:[(0,c.jsx)(`circle`,{cx:`28`,cy:`28`,r:`28`,fill:`var(--oauth-negative-bg)`}),(0,c.jsx)(`path`,{className:`oauth-cross oauth-cross-1`,d:`M20 20L36 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`}),(0,c.jsx)(`path`,{className:`oauth-cross oauth-cross-2`,d:`M36 20L20 36`,stroke:`var(--oauth-negative-fg)`,strokeWidth:`3.5`,strokeLinecap:`round`,fill:`none`})]})}var d=`
2
2
  :root {
3
3
  --oauth-surface: #F5F3EB;
4
4
  --oauth-surface-card: #FFFFFF;
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{d as n,u as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./circle-alert-zOqdmf25.js";import{t as o}from"./circle-check-VSiny8yl.js";import{t as s}from"./loader-circle-Cz7opInR.js";import{g as c}from"./local-mode-grqHUoNh.js";import{a as l,i as u,n as d,r as f,t as p}from"./remote-gateway-session-CbBWrPZH.js";import{t as m}from"./return-to-BwxkOGDI.js";import{c as h}from"./routes-BbeIx_F9.js";import{t as g}from"./index-6YxiY2Ly.js";var _=e(t(),1),v=i();function y(e){switch(e.kind){case`starting`:return{title:`Starting pairing`,body:`Creating a code for this browser.`};case`approved`:return{title:`Connected`,body:`Opening your assistant.`};case`expired`:return{title:`Pairing expired`,body:`Start a new web pairing from the local assistant.`};case`error`:return{title:`Pairing failed`,body:e.message};case`polling`:return{title:`Waiting for approval`,body:`Confirm this code on the machine running your assistant.`}}}function b({state:e}){return e.kind===`approved`?(0,v.jsx)(o,{className:`h-5 w-5 text-green-600`,"aria-hidden":!0}):e.kind===`starting`||e.kind===`polling`?(0,v.jsx)(s,{className:`h-5 w-5 animate-spin text-blue-600`,"aria-hidden":!0}):(0,v.jsx)(a,{className:`h-5 w-5 text-red-600`,"aria-hidden":!0})}function x(){let e=r(),t=n(),i=c(),a=(0,_.useMemo)(()=>m(new URLSearchParams(e.search).get(`returnTo`),h.assistant),[e.search]),o=(0,_.useMemo)(()=>l(`${e.pathname}${e.search}${e.hash}`),[e.pathname,e.search,e.hash]),[s,x]=(0,_.useState)(()=>o.deviceCode?{deviceCode:o.deviceCode,userCode:o.userCode}:null),[S,C]=(0,_.useState)(s?{kind:`polling`,expiresAt:null}:{kind:`starting`});if((0,_.useEffect)(()=>{if(!i||s)return;let e=new AbortController;return(async()=>{try{let t=await f(e.signal);x({deviceCode:t.deviceCode,userCode:t.userCode}),C({kind:`polling`,expiresAt:t.expiresAt})}catch{if(e.signal.aborted)return;C({kind:`error`,message:`The assistant could not start pairing. Refresh the page to try again.`})}})(),()=>{e.abort()}},[i,s]),(0,_.useEffect)(()=>{if(!i||!s?.deviceCode)return;let e=new AbortController,n=null,r=async()=>{try{let i=await u(s.deviceCode,e.signal);if(i.status===`pending`){C({kind:`polling`,expiresAt:i.expiresAt||null}),n=setTimeout(()=>void r(),Math.max(1,i.intervalSeconds)*1e3);return}d(i),C({kind:`approved`}),n=setTimeout(()=>t(a,{replace:!0}),250)}catch(t){if(e.signal.aborted)return;if(t instanceof p&&t.status===401){C({kind:`expired`});return}if(t instanceof p&&t.code===`GUARDIAN_REPAIR_REQUIRED`){C({kind:`error`,message:`The assistant's trust database needs repair. Run guardian repair on the machine hosting the assistant, then retry this same pairing link — the code stays valid.`});return}C({kind:`error`,message:`The assistant could not complete pairing. Try starting a new pairing.`})}};return r(),()=>{e.abort(),n&&clearTimeout(n)}},[i,s?.deviceCode,t,a]),!i)return(0,v.jsx)(g,{});let w=y(S);return(0,v.jsx)(`main`,{className:`flex min-h-svh items-center justify-center bg-[var(--background-default)] px-6 py-10 text-[var(--content-primary)]`,children:(0,v.jsxs)(`section`,{className:`w-full max-w-md rounded-lg border border-[var(--border-default)] bg-[var(--background-surface)] p-8 shadow-sm`,children:[(0,v.jsxs)(`div`,{className:`mb-5 flex items-center gap-3`,children:[(0,v.jsx)(b,{state:S}),(0,v.jsx)(`h1`,{className:`text-xl font-semibold`,children:w.title})]}),s?.userCode?(0,v.jsxs)(`div`,{className:`mb-5 rounded-md border border-[var(--border-subtle)] bg-[var(--background-muted)] p-4 text-center`,children:[(0,v.jsx)(`div`,{className:`text-xs font-medium uppercase text-[var(--content-secondary)]`,children:`Pairing code`}),(0,v.jsx)(`div`,{className:`mt-2 font-mono text-3xl font-semibold tracking-[0.18em]`,children:s.userCode})]}):null,(0,v.jsx)(`p`,{className:`text-sm leading-6 text-[var(--content-secondary)]`,children:w.body}),S.kind===`polling`&&S.expiresAt?(0,v.jsxs)(`p`,{className:`mt-4 text-xs text-[var(--content-tertiary)]`,children:[`Expires `,new Date(S.expiresAt).toLocaleTimeString(),`.`]}):null]})})}export{x as RemoteWebPairingPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{d as n,u as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./circle-alert-zOqdmf25.js";import{t as o}from"./circle-check-VSiny8yl.js";import{t as s}from"./loader-circle-Cz7opInR.js";import{g as c}from"./local-mode-grqHUoNh.js";import{a as l,i as u,n as d,r as f,t as p}from"./remote-gateway-session-CbBWrPZH.js";import{t as m}from"./return-to-BwxkOGDI.js";import{c as h}from"./routes-BbeIx_F9.js";import{t as g}from"./index-DQjUULFO.js";var _=e(t(),1),v=i();function y(e){switch(e.kind){case`starting`:return{title:`Starting pairing`,body:`Creating a code for this browser.`};case`approved`:return{title:`Connected`,body:`Opening your assistant.`};case`expired`:return{title:`Pairing expired`,body:`Start a new web pairing from the local assistant.`};case`error`:return{title:`Pairing failed`,body:e.message};case`polling`:return{title:`Waiting for approval`,body:`Confirm this code on the machine running your assistant.`}}}function b({state:e}){return e.kind===`approved`?(0,v.jsx)(o,{className:`h-5 w-5 text-green-600`,"aria-hidden":!0}):e.kind===`starting`||e.kind===`polling`?(0,v.jsx)(s,{className:`h-5 w-5 animate-spin text-blue-600`,"aria-hidden":!0}):(0,v.jsx)(a,{className:`h-5 w-5 text-red-600`,"aria-hidden":!0})}function x(){let e=r(),t=n(),i=c(),a=(0,_.useMemo)(()=>m(new URLSearchParams(e.search).get(`returnTo`),h.assistant),[e.search]),o=(0,_.useMemo)(()=>l(`${e.pathname}${e.search}${e.hash}`),[e.pathname,e.search,e.hash]),[s,x]=(0,_.useState)(()=>o.deviceCode?{deviceCode:o.deviceCode,userCode:o.userCode}:null),[S,C]=(0,_.useState)(s?{kind:`polling`,expiresAt:null}:{kind:`starting`});if((0,_.useEffect)(()=>{if(!i||s)return;let e=new AbortController;return(async()=>{try{let t=await f(e.signal);x({deviceCode:t.deviceCode,userCode:t.userCode}),C({kind:`polling`,expiresAt:t.expiresAt})}catch{if(e.signal.aborted)return;C({kind:`error`,message:`The assistant could not start pairing. Refresh the page to try again.`})}})(),()=>{e.abort()}},[i,s]),(0,_.useEffect)(()=>{if(!i||!s?.deviceCode)return;let e=new AbortController,n=null,r=async()=>{try{let i=await u(s.deviceCode,e.signal);if(i.status===`pending`){C({kind:`polling`,expiresAt:i.expiresAt||null}),n=setTimeout(()=>void r(),Math.max(1,i.intervalSeconds)*1e3);return}d(i),C({kind:`approved`}),n=setTimeout(()=>t(a,{replace:!0}),250)}catch(t){if(e.signal.aborted)return;if(t instanceof p&&t.status===401){C({kind:`expired`});return}if(t instanceof p&&t.code===`GUARDIAN_REPAIR_REQUIRED`){C({kind:`error`,message:`The assistant's trust database needs repair. Run guardian repair on the machine hosting the assistant, then retry this same pairing link — the code stays valid.`});return}C({kind:`error`,message:`The assistant could not complete pairing. Try starting a new pairing.`})}};return r(),()=>{e.abort(),n&&clearTimeout(n)}},[i,s?.deviceCode,t,a]),!i)return(0,v.jsx)(g,{});let w=y(S);return(0,v.jsx)(`main`,{className:`flex min-h-svh items-center justify-center bg-[var(--background-default)] px-6 py-10 text-[var(--content-primary)]`,children:(0,v.jsxs)(`section`,{className:`w-full max-w-md rounded-lg border border-[var(--border-default)] bg-[var(--background-surface)] p-8 shadow-sm`,children:[(0,v.jsxs)(`div`,{className:`mb-5 flex items-center gap-3`,children:[(0,v.jsx)(b,{state:S}),(0,v.jsx)(`h1`,{className:`text-xl font-semibold`,children:w.title})]}),s?.userCode?(0,v.jsxs)(`div`,{className:`mb-5 rounded-md border border-[var(--border-subtle)] bg-[var(--background-muted)] p-4 text-center`,children:[(0,v.jsx)(`div`,{className:`text-xs font-medium uppercase text-[var(--content-secondary)]`,children:`Pairing code`}),(0,v.jsx)(`div`,{className:`mt-2 font-mono text-3xl font-semibold tracking-[0.18em]`,children:s.userCode})]}):null,(0,v.jsx)(`p`,{className:`text-sm leading-6 text-[var(--content-secondary)]`,children:w.body}),S.kind===`polling`&&S.expiresAt?(0,v.jsxs)(`p`,{className:`mt-4 text-xs text-[var(--content-tertiary)]`,children:[`Expires `,new Date(S.expiresAt).toLocaleTimeString(),`.`]}):null]})})}export{x as RemoteWebPairingPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{g as t}from"./native-biometric-Czaf9IqI.js";import{t as n}from"./react-DJZBPgpf.js";import{d as r,h as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{j as o,w as s}from"./local-mode-grqHUoNh.js";import{D as c,n as l}from"./auth-store-B0Vpa2Ej.js";import{c as u}from"./api-ByWcEKXC.js";import{c as d}from"./routes-BbeIx_F9.js";var f=e(n(),1),p=a(),m=`vellum:loopback:state`,h=`vellum:loopback:returnTo`;function g(){let[e]=i(),n=r(),[a,g]=(0,f.useState)(null);return(0,f.useEffect)(()=>{let r=e.get(`state`),i=e.get(`session_token`),a=sessionStorage.getItem(m),f=sessionStorage.getItem(h)||d.assistant;if(sessionStorage.removeItem(m),sessionStorage.removeItem(h),!r||r!==a){g(`Login failed: state mismatch. Please try again.`);return}if(!i){g(`Login failed: no session token received. Please try again.`);return}if(!/^[a-zA-Z0-9]+$/.test(i)){g(`Login failed: invalid session token.`);return}(async()=>{if(!await o(i)){g(`Login failed: couldn't reach the local Vellum server to store the session. Please try again.`);return}await l.getState().initSession(),await t(!0);try{let e=await u();if(e.ok&&e.data.length>0){await s(e.data,c.getState().currentOrganizationId??void 0),n(d.assistant,{replace:!0});return}}catch{}n(f,{replace:!0})})()},[e,n]),a?(0,p.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[var(--surface-base)] text-[var(--content-default)]`,children:(0,p.jsxs)(`div`,{className:`max-w-md text-center`,children:[(0,p.jsx)(`p`,{className:`text-body-medium-default`,children:a}),(0,p.jsx)(`button`,{type:`button`,className:`mt-4 rounded-lg border border-[var(--border-disabled)] px-4 py-2 text-sm hover:bg-[var(--surface-lift)]`,onClick:()=>void n(d.welcome),children:`Back to Welcome`})]})}):(0,p.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[var(--surface-base)] text-[var(--content-default)]`,children:(0,p.jsx)(`p`,{className:`text-body-medium-default`,children:`Completing login...`})})}export{g as PlatformLoopbackPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{g as t}from"./native-biometric-Czaf9IqI.js";import{t as n}from"./react-DJZBPgpf.js";import{d as r,h as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{j as o,w as s}from"./local-mode-grqHUoNh.js";import{D as c,n as l}from"./auth-store-CKsDsnkp.js";import{c as u}from"./api-Zs5JMgKY.js";import{c as d}from"./routes-BbeIx_F9.js";var f=e(n(),1),p=a(),m=`vellum:loopback:state`,h=`vellum:loopback:returnTo`;function g(){let[e]=i(),n=r(),[a,g]=(0,f.useState)(null);return(0,f.useEffect)(()=>{let r=e.get(`state`),i=e.get(`session_token`),a=sessionStorage.getItem(m),f=sessionStorage.getItem(h)||d.assistant;if(sessionStorage.removeItem(m),sessionStorage.removeItem(h),!r||r!==a){g(`Login failed: state mismatch. Please try again.`);return}if(!i){g(`Login failed: no session token received. Please try again.`);return}if(!/^[a-zA-Z0-9]+$/.test(i)){g(`Login failed: invalid session token.`);return}(async()=>{if(!await o(i)){g(`Login failed: couldn't reach the local Vellum server to store the session. Please try again.`);return}await l.getState().initSession(),await t(!0);try{let e=await u();if(e.ok&&e.data.length>0){await s(e.data,c.getState().currentOrganizationId??void 0),n(d.assistant,{replace:!0});return}}catch{}n(f,{replace:!0})})()},[e,n]),a?(0,p.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[var(--surface-base)] text-[var(--content-default)]`,children:(0,p.jsxs)(`div`,{className:`max-w-md text-center`,children:[(0,p.jsx)(`p`,{className:`text-body-medium-default`,children:a}),(0,p.jsx)(`button`,{type:`button`,className:`mt-4 rounded-lg border border-[var(--border-disabled)] px-4 py-2 text-sm hover:bg-[var(--surface-lift)]`,onClick:()=>void n(d.welcome),children:`Back to Welcome`})]})}):(0,p.jsx)(`div`,{className:`flex min-h-screen items-center justify-center bg-[var(--surface-base)] text-[var(--content-default)]`,children:(0,p.jsx)(`p`,{className:`text-body-medium-default`,children:`Completing login...`})})}export{g as PlatformLoopbackPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{a as t,t as n}from"./local-settings-lVNyIOJ_.js";import{t as r}from"./react-DJZBPgpf.js";import{F as i,t as a}from"./button-amTXFI-2.js";import{h as o,r as s}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as c}from"./QueryClientProvider-DKhXIxGb.js";import{t as l}from"./useQuery-B45lW1Kk.js";import{t as u}from"./useMutation-Lj4VunQV.js";import{t as d}from"./jsx-runtime-CVSDxk6A.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./createLucideIcon-IRfcSUxS.js";import{t as m}from"./arrow-left-DI9551VI.js";import{t as h}from"./check-DFNrQERi.js";import{t as g}from"./cloud-off-Db1nySkc.js";import{t as _}from"./download-CAuK-nZ6.js";import{t as v}from"./external-link-Dqpx9nRm.js";import{i as y,n as b,r as x,t as S}from"./use-skill-categories-SyeYfwMa.js";import{t as C}from"./globe-4qSOWE2N.js";import{t as w}from"./hard-drive-rDxhoRUm.js";import{t as T}from"./loader-circle-Cz7opInR.js";import{t as E}from"./sparkles-PGiR5v1g.js";import{t as D}from"./triangle-alert-Z0Gq0IuB.js";import{t as ee}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{t as O}from"./tag-CV4v7fRF.js";import{t as k}from"./popover-CFL4WZTr.js";import{t as A}from"./input-CoUmPnRU.js";import{t as j}from"./toggle-CDfguvUz.js";import{n as M,t as N}from"./panel-item-CouW2A55.js";import{n as P}from"./toast-xTp-xwYL.js";import{t as F}from"./confirm-dialog-CSkhRFRk.js";import{t as I}from"./file-markdown-BXUvAQ24.js";import{In as te,Nn as L,Pn as ne,zn as re}from"./sdk.gen-D-8W_bKa.js";import{at as ie,ct as ae,in as oe,nn as se,rn as ce,rt as le,st as R}from"./react-query.gen-SVZdN1r_.js";import{t as ue}from"./assistant-identity-store-CX03CK8q.js";import{n as de}from"./utils-xg2dl_KJ.js";import{c as fe}from"./routes-BbeIx_F9.js";import{t as z}from"./misc-BYQPh7vS.js";import{Da as B,Ea as V,Fi as H,Ii as U,Na as W,ji as pe,mr as me,ta as G,vr as he,xt as ge,yi as _e}from"./index-6YxiY2Ly.js";import{t as ve}from"./use-active-assistant-id-BNRMo_Mi.js";import{t as ye}from"./plugins-surface-C7NU-_rg.js";var K=p(`power-off`,[[`path`,{d:`M18.36 6.64A9 9 0 0 1 20.77 15`,key:`dxknvb`}],[`path`,{d:`M6.16 6.16a9 9 0 1 0 12.68 12.68`,key:`1x7qb5`}],[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),q=e(r(),1),J=d(),be={sm:`h-7 w-7`,md:`h-8 w-8 text-3xl`};function Y({external:e=!1,icon:t,iconSrc:n,size:r=`sm`,className:i}){let[a,o]=(0,q.useState)(!1);(0,q.useEffect)(()=>{o(!1)},[n]);let s=t||(e?`📦`:`🧩`),c=!!n&&!a;return(0,J.jsx)(`span`,{className:z(`flex shrink-0 items-center justify-center`,be[r],i),children:c?(0,J.jsx)(`img`,{src:n,alt:``,"aria-hidden":!0,loading:`lazy`,className:`h-full w-full object-contain`,onError:()=>o(!0)}):s})}var xe=e=>`Remove "${e}" from this assistant?`,Se=e=>`"${e}" has local edits that will be overwritten by the upgrade. Continue?`,Ce=`Upgrade anyway`,we=`Failed to install plugin. Please try again.`,Te=`Failed to remove plugin. Please try again.`,Ee=`Failed to upgrade plugin. Please try again.`,De=`Failed to update plugin. Please try again.`;function Oe(e,t){let n=e.map(e=>({name:e.name,description:e.description??void 0,status:`installed`,external:void 0,version:e.version??void 0,path:e.path,issues:e.issues,enabled:e.enabled,icon:e.icon,hasIcon:e.hasIcon,iconVersion:e.iconVersion})),r=new Set(n.map(e=>e.name)),i=t.filter(e=>!r.has(e.name)).map(e=>({name:e.name,description:e.description,status:`available`,external:!0,path:e.path}));return[...n,...i]}function ke(e,t){let n=t.trim().toLowerCase();return n?[e.name,e.description].some(e=>e?.toLowerCase().includes(n)):!0}function Ae(e){return[...e].sort((e,t)=>{let n=e.status===`installed`;return n===(t.status===`installed`)?e.name.localeCompare(t.name,void 0,{sensitivity:`base`}):n?-1:1})}function je(e,t){switch(t){case`all`:return e;case`available`:return e.filter(e=>e.status===`available`);case`installed`:return e.filter(e=>e.status===`installed`);case`active`:return e.filter(e=>e.status===`installed`&&e.enabled!==!1);case`off`:return e.filter(e=>e.status===`installed`&&e.enabled===!1)}}function X(e){return e?e.slice(0,7):`unknown`}function Z({plugin:e,surfaces:t=null,className:n}){let r=[{label:`Source`,value:e.source?.kind===`github`?e.source.repo:`Local`,href:(e.source?.kind===`github`?`https://github.com/${e.source.repo}`:null)??void 0}];return e.homepage&&r.push({label:`Homepage`,value:e.homepage,href:e.homepage}),e.license&&r.push({label:`License`,value:e.license}),t&&(t.skills.length>0&&r.push({label:`Skills`,value:String(t.skills.length)}),t.hooks.length>0&&r.push({label:`Hooks`,value:String(t.hooks.length)}),t.tools.length>0&&r.push({label:`Tools`,value:String(t.tools.length)})),(0,J.jsx)(`dl`,{className:z(`mb-5 grid gap-x-6 gap-y-2 border-b pb-5 sm:grid-cols-[max-content_1fr]`,n),style:{borderColor:`var(--border-base)`},children:r.map(e=>(0,J.jsxs)(`div`,{className:`contents`,children:[(0,J.jsx)(`dt`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:e.label}),(0,J.jsx)(`dd`,{className:`min-w-0 truncate text-body-small-default`,style:{color:`var(--content-secondary)`},children:e.href?(0,J.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline`,style:{color:`var(--primary-base, #60a5fa)`},children:[e.value,(0,J.jsx)(v,{className:`h-3 w-3`,"aria-hidden":!0})]}):e.value})]},e.label))})}function Q({plugin:e,drift:t,onInstall:n,onRemove:r,onUpgrade:i,isInstalling:o,isRemoving:s,isUpgrading:c,hasLocalEdits:l,enabled:u,onToggle:d,isToggling:f}){let[p,m]=(0,q.useState)(!1),[h,g]=(0,q.useState)(!1),v=e.installed??!1,y=e.artifact??null,b=t?.status===`update-available`,x=b?`Upgrade ${X(t?.local?.commit??null)} → ${X(t?.remote?.commit??null)}`:void 0;return(0,J.jsxs)(J.Fragment,{children:[v?(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 md:flex-nowrap md:shrink-0`,children:[u!==void 0&&d?(0,J.jsx)(j,{label:`Auto-include in chat`,checked:u,onChange:()=>d(),disabled:f}):null,y?(0,J.jsx)(a,{asChild:!0,leftIcon:(0,J.jsx)(_,{"aria-hidden":!0}),children:(0,J.jsx)(`a`,{href:y.url,download:!0,children:y.label??`Download`})}):null,b?(0,J.jsx)(a,{type:`button`,onClick:()=>{if(l){g(!0);return}i()},disabled:c,title:x,leftIcon:c?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(B,{"aria-hidden":!0}),children:`Upgrade`}):null,(0,J.jsx)(a,{type:`button`,variant:`dangerOutline`,onClick:()=>m(!0),disabled:s,leftIcon:s?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(_e,{"aria-hidden":!0}),children:`Remove`})]}):(0,J.jsx)(a,{type:`button`,onClick:n,disabled:o,leftIcon:o?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(W,{"aria-hidden":!0}),children:`Install`}),(0,J.jsx)(F,{open:p,title:`Remove plugin`,message:xe(e.name),confirmLabel:`Remove`,destructive:!0,onConfirm:()=>{m(!1),r()},onCancel:()=>m(!1)}),(0,J.jsx)(F,{open:h,title:`Upgrade plugin`,message:Se(e.name),confirmLabel:Ce,destructive:!0,onConfirm:()=>{g(!1),i()},onCancel:()=>g(!1)})]})}function Me(){return(0,J.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,J.jsx)(T,{className:`h-6 w-6 animate-spin`,style:{color:`var(--content-tertiary)`}})})}function Ne(){return(0,J.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 py-12 text-center`,style:{color:`var(--content-tertiary)`},children:[(0,J.jsx)(D,{className:`h-6 w-6`,"aria-hidden":!0}),(0,J.jsx)(`p`,{className:`text-body-medium-default`,children:`We couldn't load this plugin.`}),(0,J.jsx)(`p`,{className:`text-body-small-default`,children:`It may not exist, or your assistant may be on an older build.`})]})}function Pe({isInstallError:e,isRemoveError:t,isUpgradeError:n}){let r=e?we:t?Te:n?Ee:null;return r?(0,J.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 rounded px-3 py-2 text-body-small-default`,style:{backgroundColor:`var(--surface-secondary)`,color:`var(--content-warning, var(--content-tertiary))`},role:`alert`,children:[(0,J.jsx)(D,{className:`h-4 w-4 shrink-0`,"aria-hidden":!0}),r]}):null}function Fe({external:e,className:t}){let n=e?{label:`External`,icon:C}:{label:`Local`,icon:w};return(0,J.jsx)(O,{tone:`neutral`,leftIcon:(0,q.createElement)(n.icon),className:t,children:n.label})}function Ie({onClick:e,isUpgrading:t=!1}={}){let n=(0,J.jsx)(O,{tone:`warning`,leftIcon:(0,q.createElement)(t?T:B,{className:t?`animate-spin`:void 0}),className:`shrink-0`,children:`Update available`});return e?(0,J.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),e()},disabled:t,"aria-label":`Upgrade plugin`,className:`shrink-0 rounded-[6px] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:cursor-not-allowed`,children:n}):n}var Le=300*1e3;function Re({assistantId:e,name:t,enabled:n=!0}){return l({...ie({path:{assistant_id:e,name:t}}),enabled:!!e&&!!t&&n,staleTime:Le,retry:!1})}function ze(e){let t=e?.local?.localChanges;return!!t&&t?.clean===!1}function Be(e,t,n){let r=c(),i=n?.onRemoved,a=l({...le({path:{assistant_id:e,name:t}}),enabled:!!e&&!!t}),o=Re({assistantId:e,name:t,enabled:a.data?.installed??!1}).data,s=(0,q.useCallback)(()=>me(r,e,t),[e,t,r]),u=oe({onSuccess:()=>{s(),P.success(`Installed ${t||`plugin`}`)}}),d=se({onSuccess:()=>{s(),i?.()}}),f=ce({onSuccess:e=>{s(),P.success(e.outcome===`already-up-to-date`?`${t||`Plugin`} is already up to date`:`Upgraded ${t||`plugin`} to ${X(e.toCommit)}`)}});return{plugin:a.data??null,drift:o,isLoading:a.isLoading,isError:a.isError,install:()=>{u.mutate({path:{assistant_id:e},body:{name:t}})},remove:()=>{d.mutate({path:{assistant_id:e,name:t}})},upgrade:()=>{f.mutate({path:{assistant_id:e,name:t},body:{}})},isInstalling:u.isPending,isRemoving:d.isPending,isUpgrading:f.isPending,isInstallError:u.isError,isRemoveError:d.isError,isUpgradeError:f.isError,hasLocalEdits:ze(o)}}var Ve=`0.10.5`;function He(){return de(Ve)}function Ue(e,t,n,r){let i=He(),{data:a}=l({queryKey:[`pluginIcon`,e,t,r],queryFn:async()=>{let{data:n,error:r}=await te({path:{assistant_id:e,name:t},parseAs:`blob`,throwOnError:!1});if(r||!(n instanceof Blob))throw Error(`Failed to load plugin icon`);return n},enabled:!!(i&&n&&r),staleTime:1/0,retry:!1}),[o,s]=(0,q.useState)(void 0);return(0,q.useEffect)(()=>{if(!a){s(void 0);return}let e=URL.createObjectURL(a);return s(e),()=>{URL.revokeObjectURL(e)}},[a]),o}function We(e){let t=c(),n={queryKey:R({path:{assistant_id:e}})},r=(e,r)=>{t.setQueriesData(n,t=>t&&{...t,plugins:t.plugins.map(t=>t.name===e?{...t,enabled:r}:t)})},i=u({mutationFn:async({name:t,nextEnabled:n})=>{let r=await(n?ne({path:{assistant_id:e,name:t},throwOnError:!1}):L({path:{assistant_id:e,name:t},throwOnError:!1})),i=r.response?.status;if(r.response?.ok||i===409)return r;throw Error(`Plugin toggle failed (${i??`network error`})`)},onMutate:async({name:e,nextEnabled:i})=>{await t.cancelQueries(n),r(e,i)},onError:(e,{name:t,nextEnabled:n})=>{r(t,!n),P.error(De)},onSettled:(n,r,i)=>{me(t,e,i.name)}});return{toggle:(e,t)=>{i.mutate({name:e,nextEnabled:t})},togglingName:i.isPending?i.variables?.name??null:null}}function Ge({assistantId:e,name:t,onBack:n,externalHint:r,enabled:i}){let{plugin:o,drift:s,isLoading:c,isError:l,install:u,remove:d,upgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,isInstallError:v,isRemoveError:y,isUpgradeError:b,hasLocalEdits:x}=Be(e,t,{onRemoved:n}),{toggle:S,togglingName:C}=We(e),w=Ue(e,t,o?.hasIcon,o?.iconVersion);return(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1 flex-col`,children:[(0,J.jsxs)(`div`,{className:`mb-4 flex items-start gap-3`,children:[(0,J.jsx)(a,{type:`button`,variant:`ghost`,iconOnly:(0,J.jsx)(m,{"aria-hidden":!0}),"aria-label":`Back to plugins`,onClick:n}),(0,J.jsx)(Ke,{name:t,plugin:o,externalHint:r,iconSrc:w,drift:s,onInstall:u,onRemove:d,onUpgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,hasLocalEdits:x,enabled:i,onToggle:()=>S(t,!i),isToggling:C===t})]}),(v||y||b)&&(0,J.jsx)(Pe,{isInstallError:v,isRemoveError:y,isUpgradeError:b}),(0,J.jsx)(f.Root,{asChild:!0,children:(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-6 py-5`,children:c?(0,J.jsx)(Me,{}):l||!o?(0,J.jsx)(Ne,{}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Z,{plugin:o,surfaces:s?.surfaces??null}),o.readme?(0,J.jsx)(I,{content:o.readme}):(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This plugin doesn't ship a README.`})]})})})]})}function Ke({name:e,plugin:t,externalHint:n,iconSrc:r,drift:i,onInstall:a,onRemove:o,onUpgrade:s,isInstalling:c,isRemoving:l,isUpgrading:u,hasLocalEdits:d,enabled:f,onToggle:p,isToggling:m}){let h=t?.source?.kind===`github`,g=t?h:n,_=i?.status===`update-available`;return(0,J.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,J.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[g===void 0?(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0`}):(0,J.jsx)(Y,{external:g,icon:t?.icon??void 0,iconSrc:r,size:`md`}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,J.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:t?.name??e}),t?.version?(0,J.jsxs)(`span`,{className:`shrink-0 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`v`,t.version]}):null,t?(0,J.jsx)(Fe,{external:h}):null,_?(0,J.jsx)(Ie,{}):null]}),t?.description?(0,J.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-body-medium-lighter`,style:{color:`var(--content-secondary)`},children:t.description}):null]})]}),t?(0,J.jsx)(Q,{plugin:t,drift:i,onInstall:a,onRemove:o,onUpgrade:s,isInstalling:c,isRemoving:l,isUpgrading:u,hasLocalEdits:d,enabled:f,onToggle:p,isToggling:m}):null]})}var qe=e(i(),1);function Je({assistantId:e,name:t,onBack:n,externalHint:r,enabled:i}){let{plugin:o,drift:s,isLoading:c,isError:l,install:u,remove:d,upgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,isInstallError:v,isRemoveError:y,isUpgradeError:b,hasLocalEdits:x}=Be(e,t,{onRemoved:n}),{toggle:S,togglingName:C}=We(e),[w,T]=(0,q.useState)(null);(0,q.useEffect)(()=>{T(document.getElementById(`viewport-overlays`))},[]);let E=o?.source?.kind===`github`,D=o?E:r,ee=s?.status===`update-available`,O=o?.name??t,k=Ue(e,t,o?.hasIcon,o?.iconVersion),A=(0,J.jsxs)(`div`,{className:`fixed inset-0 z-40 flex flex-col overflow-hidden bg-[var(--surface-overlay)]`,style:{paddingTop:`calc(8px + var(--safe-area-inset-top, env(safe-area-inset-top, 0px)))`,paddingBottom:`calc(8px + var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px)))`,paddingLeft:`calc(12px + var(--safe-area-inset-left, env(safe-area-inset-left, 0px)))`,paddingRight:`calc(12px + var(--safe-area-inset-right, env(safe-area-inset-right, 0px)))`},children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,J.jsx)(a,{variant:`ghost`,iconOnly:(0,J.jsx)(m,{"aria-hidden":!0}),expandOnMobile:!0,"aria-label":`Back to plugins`,onClick:n,className:`max-md:bg-[var(--surface-active)]`}),(0,J.jsx)(`span`,{className:`min-w-0 flex-1 truncate px-2 text-center text-body-medium-default`,style:{color:`var(--content-secondary)`},children:O}),(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0 touch-mobile:h-10 touch-mobile:w-10`})]}),(0,J.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,J.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[D===void 0?(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0`}):(0,J.jsx)(Y,{external:D,icon:o?.icon??void 0,iconSrc:k,size:`md`}),(0,J.jsx)(`h2`,{className:`min-w-0 truncate text-title-medium`,style:{color:`var(--content-emphasised)`},children:O})]}),(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[ee?(0,J.jsx)(Ie,{}):null,o?(0,J.jsx)(Fe,{external:E}):null]})]}),o?.description?(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:o.description}):null]}),o?(0,J.jsx)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:(0,J.jsx)(Q,{plugin:o,drift:s,enabled:i,onToggle:()=>S(t,!i),isToggling:C===t,onInstall:u,onRemove:d,onUpgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,hasLocalEdits:x})}):null,(v||y||b)&&(0,J.jsx)(`div`,{className:`mt-3`,children:(0,J.jsx)(Pe,{isInstallError:v,isRemoveError:y,isUpgradeError:b})}),(0,J.jsx)(f.Root,{asChild:!0,noPadding:!0,children:(0,J.jsx)(`div`,{className:`mt-6 flex min-h-0 flex-1 flex-col overflow-hidden rounded-2xl border bg-[var(--surface-lift)]`,style:{borderColor:`var(--border-hover)`},children:(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-4`,children:c?(0,J.jsx)(Me,{}):l||!o?(0,J.jsx)(Ne,{}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Z,{plugin:o,surfaces:s?.surfaces??null}),o.readme?(0,J.jsx)(I,{content:o.readme}):(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This plugin doesn't ship a README.`})]})})})})]});return w?(0,qe.createPortal)(A,w):A}var Ye={value:`all`,label:`All`,icon:G},Xe={value:`available`,label:`Available`,icon:W};function Ze(e){return e?[Ye,{value:`active`,label:`Active`,icon:U},{value:`off`,label:`Off`,icon:K},Xe]:[Ye,{value:`installed`,label:`Installed`,icon:V},Xe]}function Qe({search:e,onSearchChange:t,filter:n,onFilterChange:r,isSearching:i=!1,categories:a,category:o,onCategoryChange:s,counts:c,totalCount:l,showCounts:u,pluginToggleSupported:d}){return(0,J.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,J.jsx)(A,{type:`search`,value:e,onChange:e=>{t(e.target.value)},placeholder:`Search plugins`,"aria-label":`Search plugins`,leftIcon:(0,J.jsx)(pe,{className:`h-4 w-4`,"aria-hidden":!0}),rightIcon:i?(0,J.jsx)(T,{className:`h-4 w-4 animate-spin`,"aria-hidden":!0}):void 0,fullWidth:!0,wrapperClassName:`flex-1`}),(0,J.jsx)($e,{filter:n,onFilterChange:r,categories:a,category:o,onCategoryChange:s,counts:c,totalCount:l,showCounts:u,pluginToggleSupported:d})]})}function $e(e){let t=he(),[n,r]=(0,q.useState)(!1),i=(0,J.jsx)(a,{type:`button`,variant:`outlined`,iconOnly:(0,J.jsx)(y,{"aria-hidden":!0}),"aria-label":`Filter plugins`,"aria-haspopup":t?`dialog`:`listbox`,"aria-expanded":n,tintColor:`var(--primary-base)`});return t?(0,J.jsx)(et,{...e,open:n,onOpenChange:r,trigger:i}):(0,J.jsxs)(k.Root,{open:n,onOpenChange:r,children:[(0,J.jsx)(k.Trigger,{asChild:!0,children:i}),(0,J.jsx)(k.Content,{align:`end`,sideOffset:4,className:`w-44 overflow-hidden p-0`,children:(0,J.jsx)(`ul`,{role:`listbox`,children:(0,J.jsx)(rt,{label:`Status`,options:Ze(e.pluginToggleSupported),selected:e.filter,onSelect:t=>{e.onFilterChange(t),r(!1)}})})})]})}function et({filter:e,onFilterChange:t,categories:n,category:r,onCategoryChange:i,counts:o,totalCount:s,showCounts:c,pluginToggleSupported:l,open:u,onOpenChange:d,trigger:f}){let p=[...n].sort((e,t)=>e.label.localeCompare(t.label));return(0,J.jsxs)(M.Root,{open:u,onOpenChange:d,children:[(0,J.jsx)(M.Trigger,{asChild:!0,children:f}),(0,J.jsxs)(M.Content,{className:`max-h-[85dvh]`,"aria-describedby":void 0,children:[(0,J.jsx)(`div`,{"aria-hidden":!0,className:`mx-auto mb-3 h-1 w-9 shrink-0 rounded-full bg-[var(--border-element)]`}),(0,J.jsx)(M.Header,{children:(0,J.jsx)(M.Title,{children:`Filters`})}),(0,J.jsxs)(M.Body,{className:`flex flex-col gap-3 pt-2`,children:[(0,J.jsx)(tt,{label:`Status`,children:Ze(l).map(n=>(0,J.jsx)(nt,{icon:n.icon,label:n.label,active:e===n.value,onSelect:()=>t(n.value)},n.value))}),n.length>0&&(0,J.jsxs)(tt,{label:`Categories`,children:[(0,J.jsx)(nt,{icon:G,label:`All`,active:r===null,badge:c?s:void 0,onSelect:()=>i(null)}),p.map(e=>(0,J.jsx)(nt,{icon:x(e.icon)??G,label:e.label,active:r===e.slug,badge:c?o[e.slug]??0:void 0,onSelect:()=>i(e.slug)},e.slug))]})]}),(0,J.jsx)(M.Footer,{children:(0,J.jsx)(a,{type:`button`,variant:`primary`,fullWidth:!0,onClick:()=>d(!1),children:`Done`})})]})]})}function tt({label:e,children:t}){return(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`px-2 pb-1 text-body-small-default uppercase tracking-wide`,style:{color:`var(--content-tertiary)`},children:e}),t]})}function nt({icon:e,label:t,active:n,badge:r,onSelect:i}){return(0,J.jsx)(N,{icon:e,label:t,active:n,activeVariant:`branded`,badge:r,trailingAction:n&&r==null?(0,J.jsx)(h,{className:`h-4 w-4 text-[var(--primary-base)]`,"aria-hidden":!0}):void 0,onSelect:i})}function rt({label:e,options:t,selected:n,onSelect:r}){return(0,J.jsxs)(`li`,{children:[(0,J.jsx)(`div`,{className:`px-3 pb-1 pt-2 text-body-small-default uppercase tracking-wide`,style:{color:`var(--content-tertiary)`},children:e}),(0,J.jsx)(`ul`,{children:t.map(e=>{let t=e.icon,i=n===e.value;return(0,J.jsx)(`li`,{children:(0,J.jsxs)(`button`,{type:`button`,onClick:()=>r(e.value),role:`option`,"aria-selected":i,className:`flex w-full items-center gap-2 px-3 py-1.5 text-left text-body-medium-lighter transition-colors hover:bg-[var(--surface-hover)]`,style:{color:i?`var(--primary-base)`:`var(--content-default)`},children:[(0,J.jsx)(t,{className:`h-4 w-4`,"aria-hidden":!0}),(0,J.jsx)(`span`,{className:`flex-1`,children:e.label}),i&&(0,J.jsx)(V,{className:`h-3.5 w-3.5`,"aria-hidden":!0})]})},e.value)})})]})}function it({assistantId:e,item:t,drift:n,onSelect:r,onInstall:i,onRemove:o,onUpgrade:s,isInstalling:c=!1,isRemoving:l=!1,isUpgrading:u=!1}){let d=t.status===`available`,p=n?.status===`update-available`,m=t.enabled!==void 0,h=t.enabled===!1,g=Ue(e,t.name,t.hasIcon,t.iconVersion);return(0,J.jsx)(f.Root,{asChild:!0,children:(0,J.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:r,onKeyDown:e=>{e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),r())},className:`flex cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-[var(--surface-hover)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`,children:[(0,J.jsx)(Y,{size:`sm`,external:t.external,icon:t.icon,iconSrc:g,className:h?`opacity-50`:void 0}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`span`,{className:`truncate text-body-medium-default`,style:{color:h?`var(--content-tertiary)`:`var(--content-emphasised)`},children:t.name}),t.version?(0,J.jsxs)(`span`,{className:`shrink-0 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`v`,t.version]}):null,p?(0,J.jsx)(Ie,{onClick:s,isUpgrading:u}):null]}),(0,J.jsx)(`p`,{className:`mt-1 truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.description??`No description provided.`}),t.issues&&t.issues.length>0?(0,J.jsxs)(`p`,{className:`mt-1 truncate text-body-small-default`,style:{color:`var(--content-warning, var(--content-tertiary))`},title:t.issues.join(`; `),children:[t.issues[0],t.issues.length>1?` (+${t.issues.length-1} more)`:``]}):null]}),d?c?(0,J.jsx)(a,{type:`button`,iconOnly:(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}),disabled:!0,"aria-label":`Installing`,expandOnMobile:!1}):(0,J.jsx)(a,{type:`button`,iconOnly:(0,J.jsx)(W,{"aria-hidden":!0}),onClick:e=>{e.stopPropagation(),i?.()},disabled:!i,"aria-label":`Install plugin`,expandOnMobile:!1}):(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[m?(0,J.jsx)(O,{tone:t.enabled?`positive`:`neutral`,children:t.enabled?`Enabled`:`Disabled`}):null,(0,J.jsx)(a,{type:`button`,variant:`dangerOutline`,iconOnly:l?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(_e,{"aria-hidden":!0}),onClick:e=>{e.stopPropagation(),o?.()},disabled:l||u||!o,"aria-label":`Remove plugin`,expandOnMobile:!1})]})]})})}var at=300*1e3,$=[],ot=[];async function st(e,t,n){let r=await re({path:{assistant_id:e},query:{q:void 0,category:t},signal:n,throwOnError:!1});if(r.response?.status===404)return{plugins:[]};if(!r.response?.ok)throw Error(`Failed to load plugins`);return r.data??{plugins:[]}}function ct(e,t){let[n,r]=(0,q.useState)({assistantId:e,latched:!1}),i=n.assistantId===e?n.latched:!1;return n.assistantId!==e&&r({assistantId:e,latched:!1}),(0,q.useEffect)(()=>{t&&r(t=>t.assistantId===e&&t.latched?t:{assistantId:e,latched:!0})},[e,t]),i||t}function lt(e,t=null){let n=t??void 0,r=l({queryKey:R({path:{assistant_id:e},query:{q:void 0,category:n}}),queryFn:({signal:t})=>st(e,n,t),enabled:!!e,staleTime:at}),i=l({...ge(e),enabled:!!e&&t!==null}),a=l({...ae({path:{assistant_id:e},query:{q:void 0}}),enabled:!!e,staleTime:at}),o=(0,q.useMemo)(()=>{let e=t===null?r.data?.plugins:i.data?.plugins??r.data?.plugins;return new Set((e??$).map(e=>e.name))},[t,i.data?.plugins,r.data?.plugins]),s=(0,q.useMemo)(()=>{let e=r.data?.plugins??$,n=a.data?.matches??ot;return Ae(Oe(e,(t===null?n:n.filter(e=>(e.category??`system`)===t)).filter(e=>!o.has(e.name))))},[r.data?.plugins,a.data?.matches,t,o]),u=t===null?r.data:i.data,d=ct(e,u?.categoryCounts!==void 0),f=ct(e,(u?.plugins??$).some(e=>e.enabled!==void 0)),p=c(),m=(0,q.useRef)(null);return(0,q.useEffect)(()=>{if(m.current===e||!a.isSuccess)return;let t=u?.plugins;if(!t?.length)return;let n=new Map((a.data?.matches??ot).map(e=>[e.name,e.category]));t.some(e=>{let t=n.get(e.name);return t!=null&&t!==`system`&&(e.category??`system`)===`system`})&&(m.current=e,p.invalidateQueries({queryKey:R({path:{assistant_id:e},query:{q:void 0}})}))},[e,a.isSuccess,a.data?.matches,u?.plugins,p]),{items:s,isLoading:r.isLoading,catalogLoading:a.isLoading,isError:r.isError,isFetching:r.isFetching||a.isFetching,catalogError:a.isError,categorySupported:d,pluginToggleSupported:f,installedCategoryCounts:u?.categoryCounts,installedPlugins:u?.plugins??$,installedTotal:u?.totalCount,catalogMatches:a.data?.matches??ot,unfilteredInstalledNames:o}}var ut=`vellum:plugins:tipDismissed`;function dt({assistantId:e}){let r=c(),i=he(),[a,s]=o(),l=a.get(`plugin`),[u,d]=(0,q.useState)(``),[f,p]=(0,q.useState)(`all`),[m,h]=(0,q.useState)(null),[g,_]=(0,q.useState)(null),[v,y]=(0,q.useState)(null),[x,C]=(0,q.useState)(null),[w,T]=(0,q.useState)(null),[E,D]=(0,q.useState)(null),[ee,O]=(0,q.useState)(()=>n(ut,!1)),[k,A]=(0,q.useState)(e);e!==k&&(A(e),h(null));let j=e===k?m:null,{data:M=[]}=S(e),{items:N,isLoading:I,catalogLoading:te,isError:L,isFetching:ne,catalogError:re,categorySupported:ie,pluginToggleSupported:ae,installedCategoryCounts:le,installedPlugins:R,installedTotal:ue,catalogMatches:de,unfilteredInstalledNames:fe}=lt(e,j),z=(ae?[`all`,`active`,`off`,`available`]:[`all`,`installed`,`available`]).includes(f)?f:`all`,{counts:B,totalCount:V}=ft(le,R,ue,de,fe,z),H=ie&&M.length>0,U=(0,q.useCallback)(t=>me(r,e,t),[e,r]),W=oe({onMutate:e=>_(e.body.name),onSuccess:(e,t)=>P.success(`Installed ${t.body.name}`),onError:()=>P.error(we),onSettled:(e,t,n)=>{_(null),U(n.body.name)}}),pe=se({onMutate:e=>y(e.path.name),onSuccess:(e,t)=>P.success(`Removed ${t.path.name}`),onError:()=>P.error(Te),onSettled:(e,t,n)=>{y(null),U(n.path.name)}}),G=ce({onMutate:e=>C(e.path.name),onSuccess:(e,t)=>P.success(e.outcome===`already-up-to-date`?`${t.path.name} is already up to date`:`Upgraded ${t.path.name} to ${X(e.toCommit)}`),onError:()=>P.error(Ee),onSettled:(e,t,n)=>{C(null),U(n.path.name)}}),ge=(0,q.useCallback)(e=>s(t=>{let n=new URLSearchParams(t);return n.set(`plugin`,e.name),n}),[s]),_e=(0,q.useCallback)(()=>s(e=>{let t=new URLSearchParams(e);return t.delete(`plugin`),t},{replace:!0}),[s]),ve=(0,q.useCallback)(t=>{W.mutate({path:{assistant_id:e},body:{name:t.name}})},[e,W]),ye=(0,q.useCallback)(()=>{w&&(pe.mutate({path:{assistant_id:e,name:w.name}}),T(null))},[e,w,pe]),K=(0,q.useCallback)(t=>{G.mutate({path:{assistant_id:e,name:t},body:{}})},[e,G]),be=(0,q.useCallback)(()=>{E&&(K(E.name),D(null))},[E,K]),Y=(0,q.useCallback)((e,t)=>{if(ze(t)){D(e);return}K(e.name)},[K]),De=(0,q.useCallback)(()=>{O(!0),t(ut,!0)},[]),Oe=(0,q.useMemo)(()=>je(N,z).filter(e=>ke(e,u)),[N,z,u]),Ae=ne&&!I,Z=u.trim().length>0;if(l){let t=N.find(e=>e.name===l),n={assistantId:e,name:l,externalHint:t?.external,enabled:t?.enabled,onBack:_e};return i?(0,J.jsx)(Je,{...n}):(0,J.jsx)(Ge,{...n})}let Q=(0,J.jsx)(`div`,{className:`min-w-0 flex-1 overflow-y-auto`,children:I?(0,J.jsx)(gt,{}):L?(0,J.jsx)(_t,{}):Oe.length===0?te&&(z===`all`||z===`available`)?(0,J.jsx)(gt,{}):(0,J.jsx)(vt,{filter:z,category:j}):(0,J.jsx)(`ul`,{className:`flex flex-col gap-2`,children:Oe.map(t=>(0,J.jsx)(`li`,{children:t.status===`installed`?(0,J.jsx)(pt,{assistantId:e,item:t,onSelect:()=>ge(t),onRemove:()=>T(t),onUpgrade:e=>Y(t,e),isRemoving:v===t.name,isUpgrading:x===t.name}):(0,J.jsx)(it,{assistantId:e,item:t,onSelect:()=>ge(t),onInstall:()=>ve(t),isInstalling:g===t.name})},t.name))})});return(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1 flex-col gap-4`,children:[!ee&&(0,J.jsx)(mt,{onDismiss:De}),(0,J.jsx)(Qe,{search:u,onSearchChange:d,filter:z,onFilterChange:p,isSearching:Ae,categories:H?M:[],category:j,onCategoryChange:h,counts:B,totalCount:V,showCounts:!Z,pluginToggleSupported:ae}),re&&!I&&!L?(0,J.jsx)(ht,{}):null,H?(0,J.jsxs)(`div`,{className:`flex min-h-0 flex-1 gap-6`,children:[(0,J.jsx)(`aside`,{className:`hidden w-56 shrink-0 overflow-y-auto md:block`,children:(0,J.jsx)(b,{ariaLabel:`Plugin categories`,selected:j,onSelect:h,counts:B,totalCount:V,showCounts:!Z,categories:M})}),Q]}):Q,(0,J.jsx)(F,{open:w!==null,title:`Remove plugin`,message:w?xe(w.name):``,confirmLabel:`Remove`,destructive:!0,onConfirm:ye,onCancel:()=>T(null)}),(0,J.jsx)(F,{open:E!==null,title:`Upgrade plugin`,message:E?Se(E.name):``,confirmLabel:Ce,destructive:!0,onConfirm:be,onCancel:()=>D(null)})]})}function ft(e,t,n,r,i,a){return(0,q.useMemo)(()=>{let o={},s=a!==`available`,c=a===`all`||a===`available`,l=a===`active`||a===`off`,u=l?t.filter(e=>a===`off`?e.enabled===!1:e.enabled!==!1):t;if(s)if(!l&&e&&Object.keys(e).length>0)Object.assign(o,e);else for(let e of u){let t=e.category??`system`;o[t]=(o[t]??0)+1}let d=0;if(c)for(let e of r){if(i.has(e.name))continue;let t=e.category??`system`;o[t]=(o[t]??0)+1,d+=1}let f=l?u.length:n??t.length;return{counts:o,totalCount:(s?f:0)+d}},[e,t,n,r,i,a])}function pt({assistantId:e,item:t,onSelect:n,onRemove:r,onUpgrade:i,isRemoving:a,isUpgrading:o}){let s=Re({assistantId:e,name:t.name}).data;return(0,J.jsx)(it,{assistantId:e,item:t,drift:s,onSelect:n,onRemove:r,onUpgrade:()=>i(s),isRemoving:a,isUpgrading:o})}function mt({onDismiss:e}){return(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-body-small-default`,style:{backgroundColor:`var(--surface-base)`,color:`var(--content-secondary)`},children:[(0,J.jsx)(E,{className:`h-4 w-4 shrink-0`,style:{color:`var(--primary-base)`}}),(0,J.jsx)(`p`,{className:`flex-1`,children:`Browse the catalog below to install plugins that extend your assistant.`}),(0,J.jsx)(a,{type:`button`,variant:`ghost`,size:`compact`,iconOnly:(0,J.jsx)(ee,{"aria-hidden":!0}),onClick:e,"aria-label":`Dismiss tip`,tintColor:`var(--content-tertiary)`,expandOnMobile:!1})]})}function ht(){return(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-body-small-default`,style:{backgroundColor:`var(--surface-base)`,color:`var(--content-secondary)`},children:[(0,J.jsx)(g,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`},"aria-hidden":!0}),(0,J.jsx)(`p`,{className:`flex-1`,children:`Catalog browsing is temporarily unavailable. Installed plugins are still listed below.`})]})}function gt(){return(0,J.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,J.jsx)(T,{className:`h-6 w-6 animate-spin`,style:{color:`var(--content-tertiary)`}})})}function _t(){return(0,J.jsx)(f.Root,{children:(0,J.jsxs)(f.Body,{className:`flex flex-col items-center justify-center py-16 text-center`,children:[(0,J.jsx)(D,{className:`mb-3 h-8 w-8`,style:{color:`var(--system-danger)`},"aria-hidden":!0}),(0,J.jsx)(`h3`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:`Failed to load plugins`}),(0,J.jsx)(`p`,{className:`mt-1 max-w-sm text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Something went wrong. Try refreshing the page.`})]})})}function vt({filter:e,category:t}){let{title:n,subtitle:r,Icon:i}=yt(e,t);return(0,J.jsx)(f.Root,{children:(0,J.jsxs)(f.Body,{className:`flex flex-col items-center justify-center py-16 text-center`,children:[(0,J.jsx)(i,{className:`mb-3 h-8 w-8`,style:{color:`var(--content-tertiary)`},"aria-hidden":!0}),(0,J.jsx)(`h3`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:n}),(0,J.jsx)(`p`,{className:`mt-1 max-w-sm text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:r})]})})}function yt(e,t){if(t)return{title:`No plugins in this category`,subtitle:`Try selecting a different category or clearing the filter.`,Icon:G};switch(e){case`installed`:return{title:`No Plugins Installed`,subtitle:`Browse the catalog to install plugins that extend your assistant.`,Icon:H};case`active`:return{title:`No Active Plugins`,subtitle:`Install a plugin from the catalog, or turn on an installed one.`,Icon:H};case`off`:return{title:`No Plugins Turned Off`,subtitle:`Installed plugins you turn off will appear here.`,Icon:H};case`available`:return{title:`No Plugins Available`,subtitle:`Every catalog plugin is already installed.`,Icon:V};default:return{title:`No Plugins Found`,subtitle:`Browse the catalog to install plugins that extend your assistant.`,Icon:H}}}function bt(){let e=ue.use.version(),t=ye(),n=ve();return e===null?null:t?(0,J.jsx)(dt,{assistantId:n}):(0,J.jsx)(s,{to:fe.identity,replace:!0})}export{bt as PluginsPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{a as t,t as n}from"./local-settings-lVNyIOJ_.js";import{t as r}from"./react-DJZBPgpf.js";import{F as i,t as a}from"./button-amTXFI-2.js";import{h as o,r as s}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as c}from"./QueryClientProvider-DKhXIxGb.js";import{t as l}from"./useQuery-B45lW1Kk.js";import{t as u}from"./useMutation-Lj4VunQV.js";import{t as d}from"./jsx-runtime-CVSDxk6A.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./createLucideIcon-IRfcSUxS.js";import{t as m}from"./arrow-left-DI9551VI.js";import{t as h}from"./check-DFNrQERi.js";import{t as g}from"./cloud-off-Db1nySkc.js";import{t as _}from"./download-CAuK-nZ6.js";import{t as v}from"./external-link-Dqpx9nRm.js";import{i as y,n as b,r as x,t as S}from"./use-skill-categories-8DmU61Hs.js";import{t as C}from"./globe-4qSOWE2N.js";import{t as w}from"./hard-drive-rDxhoRUm.js";import{t as T}from"./loader-circle-Cz7opInR.js";import{t as E}from"./sparkles-PGiR5v1g.js";import{t as D}from"./triangle-alert-Z0Gq0IuB.js";import{t as ee}from"./x-CkSVp1Ok.js";import"./src-B2IjVySQ.js";import{t as O}from"./tag-CV4v7fRF.js";import{t as k}from"./popover-CFL4WZTr.js";import{t as A}from"./input-CoUmPnRU.js";import{t as j}from"./toggle-CDfguvUz.js";import{n as M,t as N}from"./panel-item-CouW2A55.js";import{n as P}from"./toast-xTp-xwYL.js";import{t as F}from"./confirm-dialog-CSkhRFRk.js";import{t as I}from"./file-markdown-BXUvAQ24.js";import{Fn as te,Mn as L,Nn as ne,Rn as re}from"./sdk.gen-jDeNbBv8.js";import{at as ie,ct as ae,in as oe,nn as se,rn as ce,rt as le,st as R}from"./react-query.gen-DOfazqkL.js";import{t as ue}from"./assistant-identity-store-CX03CK8q.js";import{n as de}from"./utils-xg2dl_KJ.js";import{c as fe}from"./routes-BbeIx_F9.js";import{t as z}from"./misc-BYQPh7vS.js";import{Da as B,Ea as V,Fi as H,Ii as U,Na as W,ji as pe,mr as me,ta as G,vr as he,xt as ge,yi as _e}from"./index-DQjUULFO.js";import{t as ve}from"./use-active-assistant-id-BNRMo_Mi.js";import{t as ye}from"./plugins-surface-C7NU-_rg.js";var K=p(`power-off`,[[`path`,{d:`M18.36 6.64A9 9 0 0 1 20.77 15`,key:`dxknvb`}],[`path`,{d:`M6.16 6.16a9 9 0 1 0 12.68 12.68`,key:`1x7qb5`}],[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),q=e(r(),1),J=d(),be={sm:`h-7 w-7`,md:`h-8 w-8 text-3xl`};function Y({external:e=!1,icon:t,iconSrc:n,size:r=`sm`,className:i}){let[a,o]=(0,q.useState)(!1);(0,q.useEffect)(()=>{o(!1)},[n]);let s=t||(e?`📦`:`🧩`),c=!!n&&!a;return(0,J.jsx)(`span`,{className:z(`flex shrink-0 items-center justify-center`,be[r],i),children:c?(0,J.jsx)(`img`,{src:n,alt:``,"aria-hidden":!0,loading:`lazy`,className:`h-full w-full object-contain`,onError:()=>o(!0)}):s})}var xe=e=>`Remove "${e}" from this assistant?`,Se=e=>`"${e}" has local edits that will be overwritten by the upgrade. Continue?`,Ce=`Upgrade anyway`,we=`Failed to install plugin. Please try again.`,Te=`Failed to remove plugin. Please try again.`,Ee=`Failed to upgrade plugin. Please try again.`,De=`Failed to update plugin. Please try again.`;function Oe(e,t){let n=e.map(e=>({name:e.name,description:e.description??void 0,status:`installed`,external:void 0,version:e.version??void 0,path:e.path,issues:e.issues,enabled:e.enabled,icon:e.icon,hasIcon:e.hasIcon,iconVersion:e.iconVersion})),r=new Set(n.map(e=>e.name)),i=t.filter(e=>!r.has(e.name)).map(e=>({name:e.name,description:e.description,status:`available`,external:!0,path:e.path}));return[...n,...i]}function ke(e,t){let n=t.trim().toLowerCase();return n?[e.name,e.description].some(e=>e?.toLowerCase().includes(n)):!0}function Ae(e){return[...e].sort((e,t)=>{let n=e.status===`installed`;return n===(t.status===`installed`)?e.name.localeCompare(t.name,void 0,{sensitivity:`base`}):n?-1:1})}function je(e,t){switch(t){case`all`:return e;case`available`:return e.filter(e=>e.status===`available`);case`installed`:return e.filter(e=>e.status===`installed`);case`active`:return e.filter(e=>e.status===`installed`&&e.enabled!==!1);case`off`:return e.filter(e=>e.status===`installed`&&e.enabled===!1)}}function X(e){return e?e.slice(0,7):`unknown`}function Z({plugin:e,surfaces:t=null,className:n}){let r=[{label:`Source`,value:e.source?.kind===`github`?e.source.repo:`Local`,href:(e.source?.kind===`github`?`https://github.com/${e.source.repo}`:null)??void 0}];return e.homepage&&r.push({label:`Homepage`,value:e.homepage,href:e.homepage}),e.license&&r.push({label:`License`,value:e.license}),t&&(t.skills.length>0&&r.push({label:`Skills`,value:String(t.skills.length)}),t.hooks.length>0&&r.push({label:`Hooks`,value:String(t.hooks.length)}),t.tools.length>0&&r.push({label:`Tools`,value:String(t.tools.length)})),(0,J.jsx)(`dl`,{className:z(`mb-5 grid gap-x-6 gap-y-2 border-b pb-5 sm:grid-cols-[max-content_1fr]`,n),style:{borderColor:`var(--border-base)`},children:r.map(e=>(0,J.jsxs)(`div`,{className:`contents`,children:[(0,J.jsx)(`dt`,{className:`text-body-small-default`,style:{color:`var(--content-tertiary)`},children:e.label}),(0,J.jsx)(`dd`,{className:`min-w-0 truncate text-body-small-default`,style:{color:`var(--content-secondary)`},children:e.href?(0,J.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline`,style:{color:`var(--primary-base, #60a5fa)`},children:[e.value,(0,J.jsx)(v,{className:`h-3 w-3`,"aria-hidden":!0})]}):e.value})]},e.label))})}function Q({plugin:e,drift:t,onInstall:n,onRemove:r,onUpgrade:i,isInstalling:o,isRemoving:s,isUpgrading:c,hasLocalEdits:l,enabled:u,onToggle:d,isToggling:f}){let[p,m]=(0,q.useState)(!1),[h,g]=(0,q.useState)(!1),v=e.installed??!1,y=e.artifact??null,b=t?.status===`update-available`,x=b?`Upgrade ${X(t?.local?.commit??null)} → ${X(t?.remote?.commit??null)}`:void 0;return(0,J.jsxs)(J.Fragment,{children:[v?(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 md:flex-nowrap md:shrink-0`,children:[u!==void 0&&d?(0,J.jsx)(j,{label:`Auto-include in chat`,checked:u,onChange:()=>d(),disabled:f}):null,y?(0,J.jsx)(a,{asChild:!0,leftIcon:(0,J.jsx)(_,{"aria-hidden":!0}),children:(0,J.jsx)(`a`,{href:y.url,download:!0,children:y.label??`Download`})}):null,b?(0,J.jsx)(a,{type:`button`,onClick:()=>{if(l){g(!0);return}i()},disabled:c,title:x,leftIcon:c?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(B,{"aria-hidden":!0}),children:`Upgrade`}):null,(0,J.jsx)(a,{type:`button`,variant:`dangerOutline`,onClick:()=>m(!0),disabled:s,leftIcon:s?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(_e,{"aria-hidden":!0}),children:`Remove`})]}):(0,J.jsx)(a,{type:`button`,onClick:n,disabled:o,leftIcon:o?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(W,{"aria-hidden":!0}),children:`Install`}),(0,J.jsx)(F,{open:p,title:`Remove plugin`,message:xe(e.name),confirmLabel:`Remove`,destructive:!0,onConfirm:()=>{m(!1),r()},onCancel:()=>m(!1)}),(0,J.jsx)(F,{open:h,title:`Upgrade plugin`,message:Se(e.name),confirmLabel:Ce,destructive:!0,onConfirm:()=>{g(!1),i()},onCancel:()=>g(!1)})]})}function Me(){return(0,J.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,J.jsx)(T,{className:`h-6 w-6 animate-spin`,style:{color:`var(--content-tertiary)`}})})}function Ne(){return(0,J.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 py-12 text-center`,style:{color:`var(--content-tertiary)`},children:[(0,J.jsx)(D,{className:`h-6 w-6`,"aria-hidden":!0}),(0,J.jsx)(`p`,{className:`text-body-medium-default`,children:`We couldn't load this plugin.`}),(0,J.jsx)(`p`,{className:`text-body-small-default`,children:`It may not exist, or your assistant may be on an older build.`})]})}function Pe({isInstallError:e,isRemoveError:t,isUpgradeError:n}){let r=e?we:t?Te:n?Ee:null;return r?(0,J.jsxs)(`div`,{className:`mb-3 flex items-center gap-2 rounded px-3 py-2 text-body-small-default`,style:{backgroundColor:`var(--surface-secondary)`,color:`var(--content-warning, var(--content-tertiary))`},role:`alert`,children:[(0,J.jsx)(D,{className:`h-4 w-4 shrink-0`,"aria-hidden":!0}),r]}):null}function Fe({external:e,className:t}){let n=e?{label:`External`,icon:C}:{label:`Local`,icon:w};return(0,J.jsx)(O,{tone:`neutral`,leftIcon:(0,q.createElement)(n.icon),className:t,children:n.label})}function Ie({onClick:e,isUpgrading:t=!1}={}){let n=(0,J.jsx)(O,{tone:`warning`,leftIcon:(0,q.createElement)(t?T:B,{className:t?`animate-spin`:void 0}),className:`shrink-0`,children:`Update available`});return e?(0,J.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),e()},disabled:t,"aria-label":`Upgrade plugin`,className:`shrink-0 rounded-[6px] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] disabled:cursor-not-allowed`,children:n}):n}var Le=300*1e3;function Re({assistantId:e,name:t,enabled:n=!0}){return l({...ie({path:{assistant_id:e,name:t}}),enabled:!!e&&!!t&&n,staleTime:Le,retry:!1})}function ze(e){let t=e?.local?.localChanges;return!!t&&t?.clean===!1}function Be(e,t,n){let r=c(),i=n?.onRemoved,a=l({...le({path:{assistant_id:e,name:t}}),enabled:!!e&&!!t}),o=Re({assistantId:e,name:t,enabled:a.data?.installed??!1}).data,s=(0,q.useCallback)(()=>me(r,e,t),[e,t,r]),u=oe({onSuccess:()=>{s(),P.success(`Installed ${t||`plugin`}`)}}),d=se({onSuccess:()=>{s(),i?.()}}),f=ce({onSuccess:e=>{s(),P.success(e.outcome===`already-up-to-date`?`${t||`Plugin`} is already up to date`:`Upgraded ${t||`plugin`} to ${X(e.toCommit)}`)}});return{plugin:a.data??null,drift:o,isLoading:a.isLoading,isError:a.isError,install:()=>{u.mutate({path:{assistant_id:e},body:{name:t}})},remove:()=>{d.mutate({path:{assistant_id:e,name:t}})},upgrade:()=>{f.mutate({path:{assistant_id:e,name:t},body:{}})},isInstalling:u.isPending,isRemoving:d.isPending,isUpgrading:f.isPending,isInstallError:u.isError,isRemoveError:d.isError,isUpgradeError:f.isError,hasLocalEdits:ze(o)}}var Ve=`0.10.5`;function He(){return de(Ve)}function Ue(e,t,n,r){let i=He(),{data:a}=l({queryKey:[`pluginIcon`,e,t,r],queryFn:async()=>{let{data:n,error:r}=await te({path:{assistant_id:e,name:t},parseAs:`blob`,throwOnError:!1});if(r||!(n instanceof Blob))throw Error(`Failed to load plugin icon`);return n},enabled:!!(i&&n&&r),staleTime:1/0,retry:!1}),[o,s]=(0,q.useState)(void 0);return(0,q.useEffect)(()=>{if(!a){s(void 0);return}let e=URL.createObjectURL(a);return s(e),()=>{URL.revokeObjectURL(e)}},[a]),o}function We(e){let t=c(),n={queryKey:R({path:{assistant_id:e}})},r=(e,r)=>{t.setQueriesData(n,t=>t&&{...t,plugins:t.plugins.map(t=>t.name===e?{...t,enabled:r}:t)})},i=u({mutationFn:async({name:t,nextEnabled:n})=>{let r=await(n?ne({path:{assistant_id:e,name:t},throwOnError:!1}):L({path:{assistant_id:e,name:t},throwOnError:!1})),i=r.response?.status;if(r.response?.ok||i===409)return r;throw Error(`Plugin toggle failed (${i??`network error`})`)},onMutate:async({name:e,nextEnabled:i})=>{await t.cancelQueries(n),r(e,i)},onError:(e,{name:t,nextEnabled:n})=>{r(t,!n),P.error(De)},onSettled:(n,r,i)=>{me(t,e,i.name)}});return{toggle:(e,t)=>{i.mutate({name:e,nextEnabled:t})},togglingName:i.isPending?i.variables?.name??null:null}}function Ge({assistantId:e,name:t,onBack:n,externalHint:r,enabled:i}){let{plugin:o,drift:s,isLoading:c,isError:l,install:u,remove:d,upgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,isInstallError:v,isRemoveError:y,isUpgradeError:b,hasLocalEdits:x}=Be(e,t,{onRemoved:n}),{toggle:S,togglingName:C}=We(e),w=Ue(e,t,o?.hasIcon,o?.iconVersion);return(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1 flex-col`,children:[(0,J.jsxs)(`div`,{className:`mb-4 flex items-start gap-3`,children:[(0,J.jsx)(a,{type:`button`,variant:`ghost`,iconOnly:(0,J.jsx)(m,{"aria-hidden":!0}),"aria-label":`Back to plugins`,onClick:n}),(0,J.jsx)(Ke,{name:t,plugin:o,externalHint:r,iconSrc:w,drift:s,onInstall:u,onRemove:d,onUpgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,hasLocalEdits:x,enabled:i,onToggle:()=>S(t,!i),isToggling:C===t})]}),(v||y||b)&&(0,J.jsx)(Pe,{isInstallError:v,isRemoveError:y,isUpgradeError:b}),(0,J.jsx)(f.Root,{asChild:!0,children:(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-6 py-5`,children:c?(0,J.jsx)(Me,{}):l||!o?(0,J.jsx)(Ne,{}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Z,{plugin:o,surfaces:s?.surfaces??null}),o.readme?(0,J.jsx)(I,{content:o.readme}):(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This plugin doesn't ship a README.`})]})})})]})}function Ke({name:e,plugin:t,externalHint:n,iconSrc:r,drift:i,onInstall:a,onRemove:o,onUpgrade:s,isInstalling:c,isRemoving:l,isUpgrading:u,hasLocalEdits:d,enabled:f,onToggle:p,isToggling:m}){let h=t?.source?.kind===`github`,g=t?h:n,_=i?.status===`update-available`;return(0,J.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,J.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-start gap-3`,children:[g===void 0?(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0`}):(0,J.jsx)(Y,{external:g,icon:t?.icon??void 0,iconSrc:r,size:`md`}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,J.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:t?.name??e}),t?.version?(0,J.jsxs)(`span`,{className:`shrink-0 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`v`,t.version]}):null,t?(0,J.jsx)(Fe,{external:h}):null,_?(0,J.jsx)(Ie,{}):null]}),t?.description?(0,J.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-body-medium-lighter`,style:{color:`var(--content-secondary)`},children:t.description}):null]})]}),t?(0,J.jsx)(Q,{plugin:t,drift:i,onInstall:a,onRemove:o,onUpgrade:s,isInstalling:c,isRemoving:l,isUpgrading:u,hasLocalEdits:d,enabled:f,onToggle:p,isToggling:m}):null]})}var qe=e(i(),1);function Je({assistantId:e,name:t,onBack:n,externalHint:r,enabled:i}){let{plugin:o,drift:s,isLoading:c,isError:l,install:u,remove:d,upgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,isInstallError:v,isRemoveError:y,isUpgradeError:b,hasLocalEdits:x}=Be(e,t,{onRemoved:n}),{toggle:S,togglingName:C}=We(e),[w,T]=(0,q.useState)(null);(0,q.useEffect)(()=>{T(document.getElementById(`viewport-overlays`))},[]);let E=o?.source?.kind===`github`,D=o?E:r,ee=s?.status===`update-available`,O=o?.name??t,k=Ue(e,t,o?.hasIcon,o?.iconVersion),A=(0,J.jsxs)(`div`,{className:`fixed inset-0 z-40 flex flex-col overflow-hidden bg-[var(--surface-overlay)]`,style:{paddingTop:`calc(8px + var(--safe-area-inset-top, env(safe-area-inset-top, 0px)))`,paddingBottom:`calc(8px + var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px)))`,paddingLeft:`calc(12px + var(--safe-area-inset-left, env(safe-area-inset-left, 0px)))`,paddingRight:`calc(12px + var(--safe-area-inset-right, env(safe-area-inset-right, 0px)))`},children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,J.jsx)(a,{variant:`ghost`,iconOnly:(0,J.jsx)(m,{"aria-hidden":!0}),expandOnMobile:!0,"aria-label":`Back to plugins`,onClick:n,className:`max-md:bg-[var(--surface-active)]`}),(0,J.jsx)(`span`,{className:`min-w-0 flex-1 truncate px-2 text-center text-body-medium-default`,style:{color:`var(--content-secondary)`},children:O}),(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0 touch-mobile:h-10 touch-mobile:w-10`})]}),(0,J.jsxs)(`div`,{className:`mt-4 flex flex-col gap-2`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,J.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[D===void 0?(0,J.jsx)(`span`,{"aria-hidden":!0,className:`h-8 w-8 shrink-0`}):(0,J.jsx)(Y,{external:D,icon:o?.icon??void 0,iconSrc:k,size:`md`}),(0,J.jsx)(`h2`,{className:`min-w-0 truncate text-title-medium`,style:{color:`var(--content-emphasised)`},children:O})]}),(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[ee?(0,J.jsx)(Ie,{}):null,o?(0,J.jsx)(Fe,{external:E}):null]})]}),o?.description?(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:o.description}):null]}),o?(0,J.jsx)(`div`,{className:`mt-3 flex flex-wrap items-center gap-2`,children:(0,J.jsx)(Q,{plugin:o,drift:s,enabled:i,onToggle:()=>S(t,!i),isToggling:C===t,onInstall:u,onRemove:d,onUpgrade:p,isInstalling:h,isRemoving:g,isUpgrading:_,hasLocalEdits:x})}):null,(v||y||b)&&(0,J.jsx)(`div`,{className:`mt-3`,children:(0,J.jsx)(Pe,{isInstallError:v,isRemoveError:y,isUpgradeError:b})}),(0,J.jsx)(f.Root,{asChild:!0,noPadding:!0,children:(0,J.jsx)(`div`,{className:`mt-6 flex min-h-0 flex-1 flex-col overflow-hidden rounded-2xl border bg-[var(--surface-lift)]`,style:{borderColor:`var(--border-hover)`},children:(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-4`,children:c?(0,J.jsx)(Me,{}):l||!o?(0,J.jsx)(Ne,{}):(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Z,{plugin:o,surfaces:s?.surfaces??null}),o.readme?(0,J.jsx)(I,{content:o.readme}):(0,J.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`This plugin doesn't ship a README.`})]})})})})]});return w?(0,qe.createPortal)(A,w):A}var Ye={value:`all`,label:`All`,icon:G},Xe={value:`available`,label:`Available`,icon:W};function Ze(e){return e?[Ye,{value:`active`,label:`Active`,icon:U},{value:`off`,label:`Off`,icon:K},Xe]:[Ye,{value:`installed`,label:`Installed`,icon:V},Xe]}function Qe({search:e,onSearchChange:t,filter:n,onFilterChange:r,isSearching:i=!1,categories:a,category:o,onCategoryChange:s,counts:c,totalCount:l,showCounts:u,pluginToggleSupported:d}){return(0,J.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,J.jsx)(A,{type:`search`,value:e,onChange:e=>{t(e.target.value)},placeholder:`Search plugins`,"aria-label":`Search plugins`,leftIcon:(0,J.jsx)(pe,{className:`h-4 w-4`,"aria-hidden":!0}),rightIcon:i?(0,J.jsx)(T,{className:`h-4 w-4 animate-spin`,"aria-hidden":!0}):void 0,fullWidth:!0,wrapperClassName:`flex-1`}),(0,J.jsx)($e,{filter:n,onFilterChange:r,categories:a,category:o,onCategoryChange:s,counts:c,totalCount:l,showCounts:u,pluginToggleSupported:d})]})}function $e(e){let t=he(),[n,r]=(0,q.useState)(!1),i=(0,J.jsx)(a,{type:`button`,variant:`outlined`,iconOnly:(0,J.jsx)(y,{"aria-hidden":!0}),"aria-label":`Filter plugins`,"aria-haspopup":t?`dialog`:`listbox`,"aria-expanded":n,tintColor:`var(--primary-base)`});return t?(0,J.jsx)(et,{...e,open:n,onOpenChange:r,trigger:i}):(0,J.jsxs)(k.Root,{open:n,onOpenChange:r,children:[(0,J.jsx)(k.Trigger,{asChild:!0,children:i}),(0,J.jsx)(k.Content,{align:`end`,sideOffset:4,className:`w-44 overflow-hidden p-0`,children:(0,J.jsx)(`ul`,{role:`listbox`,children:(0,J.jsx)(rt,{label:`Status`,options:Ze(e.pluginToggleSupported),selected:e.filter,onSelect:t=>{e.onFilterChange(t),r(!1)}})})})]})}function et({filter:e,onFilterChange:t,categories:n,category:r,onCategoryChange:i,counts:o,totalCount:s,showCounts:c,pluginToggleSupported:l,open:u,onOpenChange:d,trigger:f}){let p=[...n].sort((e,t)=>e.label.localeCompare(t.label));return(0,J.jsxs)(M.Root,{open:u,onOpenChange:d,children:[(0,J.jsx)(M.Trigger,{asChild:!0,children:f}),(0,J.jsxs)(M.Content,{className:`max-h-[85dvh]`,"aria-describedby":void 0,children:[(0,J.jsx)(`div`,{"aria-hidden":!0,className:`mx-auto mb-3 h-1 w-9 shrink-0 rounded-full bg-[var(--border-element)]`}),(0,J.jsx)(M.Header,{children:(0,J.jsx)(M.Title,{children:`Filters`})}),(0,J.jsxs)(M.Body,{className:`flex flex-col gap-3 pt-2`,children:[(0,J.jsx)(tt,{label:`Status`,children:Ze(l).map(n=>(0,J.jsx)(nt,{icon:n.icon,label:n.label,active:e===n.value,onSelect:()=>t(n.value)},n.value))}),n.length>0&&(0,J.jsxs)(tt,{label:`Categories`,children:[(0,J.jsx)(nt,{icon:G,label:`All`,active:r===null,badge:c?s:void 0,onSelect:()=>i(null)}),p.map(e=>(0,J.jsx)(nt,{icon:x(e.icon)??G,label:e.label,active:r===e.slug,badge:c?o[e.slug]??0:void 0,onSelect:()=>i(e.slug)},e.slug))]})]}),(0,J.jsx)(M.Footer,{children:(0,J.jsx)(a,{type:`button`,variant:`primary`,fullWidth:!0,onClick:()=>d(!1),children:`Done`})})]})]})}function tt({label:e,children:t}){return(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`div`,{className:`px-2 pb-1 text-body-small-default uppercase tracking-wide`,style:{color:`var(--content-tertiary)`},children:e}),t]})}function nt({icon:e,label:t,active:n,badge:r,onSelect:i}){return(0,J.jsx)(N,{icon:e,label:t,active:n,activeVariant:`branded`,badge:r,trailingAction:n&&r==null?(0,J.jsx)(h,{className:`h-4 w-4 text-[var(--primary-base)]`,"aria-hidden":!0}):void 0,onSelect:i})}function rt({label:e,options:t,selected:n,onSelect:r}){return(0,J.jsxs)(`li`,{children:[(0,J.jsx)(`div`,{className:`px-3 pb-1 pt-2 text-body-small-default uppercase tracking-wide`,style:{color:`var(--content-tertiary)`},children:e}),(0,J.jsx)(`ul`,{children:t.map(e=>{let t=e.icon,i=n===e.value;return(0,J.jsx)(`li`,{children:(0,J.jsxs)(`button`,{type:`button`,onClick:()=>r(e.value),role:`option`,"aria-selected":i,className:`flex w-full items-center gap-2 px-3 py-1.5 text-left text-body-medium-lighter transition-colors hover:bg-[var(--surface-hover)]`,style:{color:i?`var(--primary-base)`:`var(--content-default)`},children:[(0,J.jsx)(t,{className:`h-4 w-4`,"aria-hidden":!0}),(0,J.jsx)(`span`,{className:`flex-1`,children:e.label}),i&&(0,J.jsx)(V,{className:`h-3.5 w-3.5`,"aria-hidden":!0})]})},e.value)})})]})}function it({assistantId:e,item:t,drift:n,onSelect:r,onInstall:i,onRemove:o,onUpgrade:s,isInstalling:c=!1,isRemoving:l=!1,isUpgrading:u=!1}){let d=t.status===`available`,p=n?.status===`update-available`,m=t.enabled!==void 0,h=t.enabled===!1,g=Ue(e,t.name,t.hasIcon,t.iconVersion);return(0,J.jsx)(f.Root,{asChild:!0,children:(0,J.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:r,onKeyDown:e=>{e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),r())},className:`flex cursor-pointer items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-[var(--surface-hover)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`,children:[(0,J.jsx)(Y,{size:`sm`,external:t.external,icon:t.icon,iconSrc:g,className:h?`opacity-50`:void 0}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,J.jsx)(`span`,{className:`truncate text-body-medium-default`,style:{color:h?`var(--content-tertiary)`:`var(--content-emphasised)`},children:t.name}),t.version?(0,J.jsxs)(`span`,{className:`shrink-0 text-body-small-default`,style:{color:`var(--content-tertiary)`},children:[`v`,t.version]}):null,p?(0,J.jsx)(Ie,{onClick:s,isUpgrading:u}):null]}),(0,J.jsx)(`p`,{className:`mt-1 truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.description??`No description provided.`}),t.issues&&t.issues.length>0?(0,J.jsxs)(`p`,{className:`mt-1 truncate text-body-small-default`,style:{color:`var(--content-warning, var(--content-tertiary))`},title:t.issues.join(`; `),children:[t.issues[0],t.issues.length>1?` (+${t.issues.length-1} more)`:``]}):null]}),d?c?(0,J.jsx)(a,{type:`button`,iconOnly:(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}),disabled:!0,"aria-label":`Installing`,expandOnMobile:!1}):(0,J.jsx)(a,{type:`button`,iconOnly:(0,J.jsx)(W,{"aria-hidden":!0}),onClick:e=>{e.stopPropagation(),i?.()},disabled:!i,"aria-label":`Install plugin`,expandOnMobile:!1}):(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[m?(0,J.jsx)(O,{tone:t.enabled?`positive`:`neutral`,children:t.enabled?`Enabled`:`Disabled`}):null,(0,J.jsx)(a,{type:`button`,variant:`dangerOutline`,iconOnly:l?(0,J.jsx)(T,{className:`animate-spin`,"aria-hidden":!0}):(0,J.jsx)(_e,{"aria-hidden":!0}),onClick:e=>{e.stopPropagation(),o?.()},disabled:l||u||!o,"aria-label":`Remove plugin`,expandOnMobile:!1})]})]})})}var at=300*1e3,$=[],ot=[];async function st(e,t,n){let r=await re({path:{assistant_id:e},query:{q:void 0,category:t},signal:n,throwOnError:!1});if(r.response?.status===404)return{plugins:[]};if(!r.response?.ok)throw Error(`Failed to load plugins`);return r.data??{plugins:[]}}function ct(e,t){let[n,r]=(0,q.useState)({assistantId:e,latched:!1}),i=n.assistantId===e?n.latched:!1;return n.assistantId!==e&&r({assistantId:e,latched:!1}),(0,q.useEffect)(()=>{t&&r(t=>t.assistantId===e&&t.latched?t:{assistantId:e,latched:!0})},[e,t]),i||t}function lt(e,t=null){let n=t??void 0,r=l({queryKey:R({path:{assistant_id:e},query:{q:void 0,category:n}}),queryFn:({signal:t})=>st(e,n,t),enabled:!!e,staleTime:at}),i=l({...ge(e),enabled:!!e&&t!==null}),a=l({...ae({path:{assistant_id:e},query:{q:void 0}}),enabled:!!e,staleTime:at}),o=(0,q.useMemo)(()=>{let e=t===null?r.data?.plugins:i.data?.plugins??r.data?.plugins;return new Set((e??$).map(e=>e.name))},[t,i.data?.plugins,r.data?.plugins]),s=(0,q.useMemo)(()=>{let e=r.data?.plugins??$,n=a.data?.matches??ot;return Ae(Oe(e,(t===null?n:n.filter(e=>(e.category??`system`)===t)).filter(e=>!o.has(e.name))))},[r.data?.plugins,a.data?.matches,t,o]),u=t===null?r.data:i.data,d=ct(e,u?.categoryCounts!==void 0),f=ct(e,(u?.plugins??$).some(e=>e.enabled!==void 0)),p=c(),m=(0,q.useRef)(null);return(0,q.useEffect)(()=>{if(m.current===e||!a.isSuccess)return;let t=u?.plugins;if(!t?.length)return;let n=new Map((a.data?.matches??ot).map(e=>[e.name,e.category]));t.some(e=>{let t=n.get(e.name);return t!=null&&t!==`system`&&(e.category??`system`)===`system`})&&(m.current=e,p.invalidateQueries({queryKey:R({path:{assistant_id:e},query:{q:void 0}})}))},[e,a.isSuccess,a.data?.matches,u?.plugins,p]),{items:s,isLoading:r.isLoading,catalogLoading:a.isLoading,isError:r.isError,isFetching:r.isFetching||a.isFetching,catalogError:a.isError,categorySupported:d,pluginToggleSupported:f,installedCategoryCounts:u?.categoryCounts,installedPlugins:u?.plugins??$,installedTotal:u?.totalCount,catalogMatches:a.data?.matches??ot,unfilteredInstalledNames:o}}var ut=`vellum:plugins:tipDismissed`;function dt({assistantId:e}){let r=c(),i=he(),[a,s]=o(),l=a.get(`plugin`),[u,d]=(0,q.useState)(``),[f,p]=(0,q.useState)(`all`),[m,h]=(0,q.useState)(null),[g,_]=(0,q.useState)(null),[v,y]=(0,q.useState)(null),[x,C]=(0,q.useState)(null),[w,T]=(0,q.useState)(null),[E,D]=(0,q.useState)(null),[ee,O]=(0,q.useState)(()=>n(ut,!1)),[k,A]=(0,q.useState)(e);e!==k&&(A(e),h(null));let j=e===k?m:null,{data:M=[]}=S(e),{items:N,isLoading:I,catalogLoading:te,isError:L,isFetching:ne,catalogError:re,categorySupported:ie,pluginToggleSupported:ae,installedCategoryCounts:le,installedPlugins:R,installedTotal:ue,catalogMatches:de,unfilteredInstalledNames:fe}=lt(e,j),z=(ae?[`all`,`active`,`off`,`available`]:[`all`,`installed`,`available`]).includes(f)?f:`all`,{counts:B,totalCount:V}=ft(le,R,ue,de,fe,z),H=ie&&M.length>0,U=(0,q.useCallback)(t=>me(r,e,t),[e,r]),W=oe({onMutate:e=>_(e.body.name),onSuccess:(e,t)=>P.success(`Installed ${t.body.name}`),onError:()=>P.error(we),onSettled:(e,t,n)=>{_(null),U(n.body.name)}}),pe=se({onMutate:e=>y(e.path.name),onSuccess:(e,t)=>P.success(`Removed ${t.path.name}`),onError:()=>P.error(Te),onSettled:(e,t,n)=>{y(null),U(n.path.name)}}),G=ce({onMutate:e=>C(e.path.name),onSuccess:(e,t)=>P.success(e.outcome===`already-up-to-date`?`${t.path.name} is already up to date`:`Upgraded ${t.path.name} to ${X(e.toCommit)}`),onError:()=>P.error(Ee),onSettled:(e,t,n)=>{C(null),U(n.path.name)}}),ge=(0,q.useCallback)(e=>s(t=>{let n=new URLSearchParams(t);return n.set(`plugin`,e.name),n}),[s]),_e=(0,q.useCallback)(()=>s(e=>{let t=new URLSearchParams(e);return t.delete(`plugin`),t},{replace:!0}),[s]),ve=(0,q.useCallback)(t=>{W.mutate({path:{assistant_id:e},body:{name:t.name}})},[e,W]),ye=(0,q.useCallback)(()=>{w&&(pe.mutate({path:{assistant_id:e,name:w.name}}),T(null))},[e,w,pe]),K=(0,q.useCallback)(t=>{G.mutate({path:{assistant_id:e,name:t},body:{}})},[e,G]),be=(0,q.useCallback)(()=>{E&&(K(E.name),D(null))},[E,K]),Y=(0,q.useCallback)((e,t)=>{if(ze(t)){D(e);return}K(e.name)},[K]),De=(0,q.useCallback)(()=>{O(!0),t(ut,!0)},[]),Oe=(0,q.useMemo)(()=>je(N,z).filter(e=>ke(e,u)),[N,z,u]),Ae=ne&&!I,Z=u.trim().length>0;if(l){let t=N.find(e=>e.name===l),n={assistantId:e,name:l,externalHint:t?.external,enabled:t?.enabled,onBack:_e};return i?(0,J.jsx)(Je,{...n}):(0,J.jsx)(Ge,{...n})}let Q=(0,J.jsx)(`div`,{className:`min-w-0 flex-1 overflow-y-auto`,children:I?(0,J.jsx)(gt,{}):L?(0,J.jsx)(_t,{}):Oe.length===0?te&&(z===`all`||z===`available`)?(0,J.jsx)(gt,{}):(0,J.jsx)(vt,{filter:z,category:j}):(0,J.jsx)(`ul`,{className:`flex flex-col gap-2`,children:Oe.map(t=>(0,J.jsx)(`li`,{children:t.status===`installed`?(0,J.jsx)(pt,{assistantId:e,item:t,onSelect:()=>ge(t),onRemove:()=>T(t),onUpgrade:e=>Y(t,e),isRemoving:v===t.name,isUpgrading:x===t.name}):(0,J.jsx)(it,{assistantId:e,item:t,onSelect:()=>ge(t),onInstall:()=>ve(t),isInstalling:g===t.name})},t.name))})});return(0,J.jsxs)(`div`,{className:`flex h-full min-h-0 flex-1 flex-col gap-4`,children:[!ee&&(0,J.jsx)(mt,{onDismiss:De}),(0,J.jsx)(Qe,{search:u,onSearchChange:d,filter:z,onFilterChange:p,isSearching:Ae,categories:H?M:[],category:j,onCategoryChange:h,counts:B,totalCount:V,showCounts:!Z,pluginToggleSupported:ae}),re&&!I&&!L?(0,J.jsx)(ht,{}):null,H?(0,J.jsxs)(`div`,{className:`flex min-h-0 flex-1 gap-6`,children:[(0,J.jsx)(`aside`,{className:`hidden w-56 shrink-0 overflow-y-auto md:block`,children:(0,J.jsx)(b,{ariaLabel:`Plugin categories`,selected:j,onSelect:h,counts:B,totalCount:V,showCounts:!Z,categories:M})}),Q]}):Q,(0,J.jsx)(F,{open:w!==null,title:`Remove plugin`,message:w?xe(w.name):``,confirmLabel:`Remove`,destructive:!0,onConfirm:ye,onCancel:()=>T(null)}),(0,J.jsx)(F,{open:E!==null,title:`Upgrade plugin`,message:E?Se(E.name):``,confirmLabel:Ce,destructive:!0,onConfirm:be,onCancel:()=>D(null)})]})}function ft(e,t,n,r,i,a){return(0,q.useMemo)(()=>{let o={},s=a!==`available`,c=a===`all`||a===`available`,l=a===`active`||a===`off`,u=l?t.filter(e=>a===`off`?e.enabled===!1:e.enabled!==!1):t;if(s)if(!l&&e&&Object.keys(e).length>0)Object.assign(o,e);else for(let e of u){let t=e.category??`system`;o[t]=(o[t]??0)+1}let d=0;if(c)for(let e of r){if(i.has(e.name))continue;let t=e.category??`system`;o[t]=(o[t]??0)+1,d+=1}let f=l?u.length:n??t.length;return{counts:o,totalCount:(s?f:0)+d}},[e,t,n,r,i,a])}function pt({assistantId:e,item:t,onSelect:n,onRemove:r,onUpgrade:i,isRemoving:a,isUpgrading:o}){let s=Re({assistantId:e,name:t.name}).data;return(0,J.jsx)(it,{assistantId:e,item:t,drift:s,onSelect:n,onRemove:r,onUpgrade:()=>i(s),isRemoving:a,isUpgrading:o})}function mt({onDismiss:e}){return(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-body-small-default`,style:{backgroundColor:`var(--surface-base)`,color:`var(--content-secondary)`},children:[(0,J.jsx)(E,{className:`h-4 w-4 shrink-0`,style:{color:`var(--primary-base)`}}),(0,J.jsx)(`p`,{className:`flex-1`,children:`Browse the catalog below to install plugins that extend your assistant.`}),(0,J.jsx)(a,{type:`button`,variant:`ghost`,size:`compact`,iconOnly:(0,J.jsx)(ee,{"aria-hidden":!0}),onClick:e,"aria-label":`Dismiss tip`,tintColor:`var(--content-tertiary)`,expandOnMobile:!1})]})}function ht(){return(0,J.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg px-4 py-2.5 text-body-small-default`,style:{backgroundColor:`var(--surface-base)`,color:`var(--content-secondary)`},children:[(0,J.jsx)(g,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-tertiary)`},"aria-hidden":!0}),(0,J.jsx)(`p`,{className:`flex-1`,children:`Catalog browsing is temporarily unavailable. Installed plugins are still listed below.`})]})}function gt(){return(0,J.jsx)(`div`,{className:`flex items-center justify-center py-16`,children:(0,J.jsx)(T,{className:`h-6 w-6 animate-spin`,style:{color:`var(--content-tertiary)`}})})}function _t(){return(0,J.jsx)(f.Root,{children:(0,J.jsxs)(f.Body,{className:`flex flex-col items-center justify-center py-16 text-center`,children:[(0,J.jsx)(D,{className:`mb-3 h-8 w-8`,style:{color:`var(--system-danger)`},"aria-hidden":!0}),(0,J.jsx)(`h3`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:`Failed to load plugins`}),(0,J.jsx)(`p`,{className:`mt-1 max-w-sm text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Something went wrong. Try refreshing the page.`})]})})}function vt({filter:e,category:t}){let{title:n,subtitle:r,Icon:i}=yt(e,t);return(0,J.jsx)(f.Root,{children:(0,J.jsxs)(f.Body,{className:`flex flex-col items-center justify-center py-16 text-center`,children:[(0,J.jsx)(i,{className:`mb-3 h-8 w-8`,style:{color:`var(--content-tertiary)`},"aria-hidden":!0}),(0,J.jsx)(`h3`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:n}),(0,J.jsx)(`p`,{className:`mt-1 max-w-sm text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:r})]})})}function yt(e,t){if(t)return{title:`No plugins in this category`,subtitle:`Try selecting a different category or clearing the filter.`,Icon:G};switch(e){case`installed`:return{title:`No Plugins Installed`,subtitle:`Browse the catalog to install plugins that extend your assistant.`,Icon:H};case`active`:return{title:`No Active Plugins`,subtitle:`Install a plugin from the catalog, or turn on an installed one.`,Icon:H};case`off`:return{title:`No Plugins Turned Off`,subtitle:`Installed plugins you turn off will appear here.`,Icon:H};case`available`:return{title:`No Plugins Available`,subtitle:`Every catalog plugin is already installed.`,Icon:V};default:return{title:`No Plugins Found`,subtitle:`Browse the catalog to install plugins that extend your assistant.`,Icon:H}}}function bt(){let e=ue.use.version(),t=ye(),n=ve();return e===null?null:t?(0,J.jsx)(dt,{assistantId:n}):(0,J.jsx)(s,{to:fe.identity,replace:!0})}export{bt as PluginsPage};