decocms 4.325.1 → 4.325.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-Bs6oknH_.js → AlertCircle-Wbx84J6P.js} +1 -1
- package/dist/client/assets/{AreaChart-B4QZuiFF.js → AreaChart-Cld_d890.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BWSnRuGm.js → ArrowLeft-BJlpl6z3.js} +1 -1
- package/dist/client/assets/{ArrowUp--KPYS_Zx.js → ArrowUp-BSj9TnDQ.js} +1 -1
- package/dist/client/assets/{Check-tzg1v70M.js → Check-AnkVYvzC.js} +1 -1
- package/dist/client/assets/{CheckCircle-8VMJtbLE.js → CheckCircle-DwmOpGug.js} +1 -1
- package/dist/client/assets/{ChevronRight-CiQ4250Y.js → ChevronRight-pYTAY0dL.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-BoLsghjN.js → ChevronSelectorVertical-BbsmXbxd.js} +1 -1
- package/dist/client/assets/{ChevronUp-CdsnYS3o.js → ChevronUp-3g3WN6eT.js} +1 -1
- package/dist/client/assets/{Copy01-BMb_uucS.js → Copy01-sos155fT.js} +1 -1
- package/dist/client/assets/{CreditCard01-CYcMMyuv.js → CreditCard01-VG7XqKoo.js} +1 -1
- package/dist/client/assets/{DotsVertical-Csr6l19K.js → DotsVertical-DuuOH2An.js} +1 -1
- package/dist/client/assets/{Download01-DC7Ed5MF.js → Download01-DcuqUkne.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CWInPftf.js → ErrorBarContext-BM4rcvvu.js} +1 -1
- package/dist/client/assets/{Eye-D3-C_xXn.js → Eye-UqfDVX8c.js} +1 -1
- package/dist/client/assets/{GitBranch01-BBK46z_T.js → GitBranch01-DLsJ2eA8.js} +1 -1
- package/dist/client/assets/{Globe01-DZmHtz0b.js → Globe01-g_WhroPz.js} +1 -1
- package/dist/client/assets/{HardDrive-C5hOZFs-.js → HardDrive-DZFCo6aQ.js} +1 -1
- package/dist/client/assets/{Image01-DwIAdAUT.js → Image01-BZ7eP3sg.js} +1 -1
- package/dist/client/assets/{Key01-bUGu_NLF.js → Key01-ladeKbIs.js} +1 -1
- package/dist/client/assets/{Link01-CYHfOeCn.js → Link01-Cx-fsoFK.js} +1 -1
- package/dist/client/assets/{LinkExternal01-ItrpBJnM.js → LinkExternal01-Ct6ls10Y.js} +1 -1
- package/dist/client/assets/{Monitor01-B8OxufXb.js → Monitor01-CHYJhnW7.js} +1 -1
- package/dist/client/assets/{Package-B1Q6V5jC.js → Package-DlB0zfSe.js} +1 -1
- package/dist/client/assets/{Palette-CmDDPB-1.js → Palette-Cwg4Tz5U.js} +1 -1
- package/dist/client/assets/{Play-Cebbxrf7.js → Play-CNXxnEyG.js} +1 -1
- package/dist/client/assets/{Plus-DluN38us.js → Plus-CjjCgafZ.js} +1 -1
- package/dist/client/assets/{SearchMd-Dtd4_W0w.js → SearchMd-CZf0Jno3.js} +1 -1
- package/dist/client/assets/{Sector-jDW2HqNy.js → Sector-D6LGQ5el.js} +1 -1
- package/dist/client/assets/{Settings02-CdkkNZQs.js → Settings02-DA_70bcH.js} +1 -1
- package/dist/client/assets/{Share07-CQi_kYTg.js → Share07-B_yFA1PQ.js} +1 -1
- package/dist/client/assets/{Shield01-nF6J5QH3.js → Shield01-P1rLU6cR.js} +1 -1
- package/dist/client/assets/{Stars01-BkXOAWkF.js → Stars01-izYFmAbe.js} +1 -1
- package/dist/client/assets/{Sun-DqwL2RBY.js → Sun-DwCUi13i.js} +1 -1
- package/dist/client/assets/{Tool01-UNDZEmAI.js → Tool01-Z3QYZ79t.js} +1 -1
- package/dist/client/assets/{Tool02-DLBy4do6.js → Tool02-BQmdN0LJ.js} +1 -1
- package/dist/client/assets/{Trash01-BiGnC-j2.js → Trash01-B8XVvUnv.js} +1 -1
- package/dist/client/assets/{TrendUp01-DQn6MXk1.js → TrendUp01-CP0vQywV.js} +1 -1
- package/dist/client/assets/{Upload01-CEzfFT4A.js → Upload01-CbAoc2QM.js} +1 -1
- package/dist/client/assets/{User01-C7HywlOg.js → User01-Ct0i24vv.js} +1 -1
- package/dist/client/assets/{UserSquare-hx_yDjx2.js → UserSquare-BYbdOYH9.js} +1 -1
- package/dist/client/assets/{Users01-DSJGRawE.js → Users01-BYaxTYGQ.js} +1 -1
- package/dist/client/assets/{Users03-D0VbxK_7.js → Users03-jn24Kly8.js} +1 -1
- package/dist/client/assets/{XCircle-DpU-0ryx.js → XCircle-DlF5M8M0.js} +1 -1
- package/dist/client/assets/{XClose-BPl5N5wQ.js → XClose-CakjP9Y8.js} +1 -1
- package/dist/client/assets/{Zap-9WaWy-XB.js → Zap-Bf8uxQjq.js} +1 -1
- package/dist/client/assets/{ZoomOut-JTfIuUYt.js → ZoomOut-fURlNFfr.js} +1 -1
- package/dist/client/assets/{access-gate-C43dXf2x.js → access-gate-65i3zTD_.js} +1 -1
- package/dist/client/assets/{agent-icon-72FlHM-8.js → agent-icon-Sp3pGLLY.js} +1 -1
- package/dist/client/assets/agents-list-BZ7PpN5S.js +1 -0
- package/dist/client/assets/ai-providers-DlXNHZZI.js +1 -0
- package/dist/client/assets/{alert-DPh9CuwD.js → alert-Covq9TpT.js} +1 -1
- package/dist/client/assets/{alert-dialog-DY5pueun.js → alert-dialog-Cj0fNCkE.js} +1 -1
- package/dist/client/assets/{analytics-tab-BUjurxUV.js → analytics-tab-BGfMFYes.js} +1 -1
- package/dist/client/assets/{api-keys-BfTxJZ5X.js → api-keys-CwoRMmEY.js} +1 -1
- package/dist/client/assets/api-keys-Dcjx1Kt1.js +1 -0
- package/dist/client/assets/app-editor-BXmBcjlO.js +1 -0
- package/dist/client/assets/{auth-CRRmnvXP.js → auth-DzRAXSGB.js} +1 -1
- package/dist/client/assets/{auth-catchall-CHovBt0N.js → auth-catchall-C0obfXjs.js} +1 -1
- package/dist/client/assets/{auth-entry-BMs-KpEE.js → auth-entry-DpCTb7jI.js} +1 -1
- package/dist/client/assets/{auth-split-layout-RvH6q9Np.js → auth-split-layout-TPhGW0ur.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-D6lfMerI.js → authenticate-and-persist-oauth-B1cWso3x.js} +1 -1
- package/dist/client/assets/{automation-list-row-PO_mCBtT.js → automation-list-row-BR_7Wuv2.js} +1 -1
- package/dist/client/assets/{automation-runs-CzvbjIvf.js → automation-runs-Bt1_onfP.js} +1 -1
- package/dist/client/assets/automations-qhDCv6KW.js +1 -0
- package/dist/client/assets/{avatar-Br5BYZeI.js → avatar-B5NKRFBP.js} +1 -1
- package/dist/client/assets/{badge-BXMUzYIE.js → badge-BmwbVsh5.js} +1 -1
- package/dist/client/assets/{block-document-D1scmISJ.js → block-document-DsxmquN5.js} +1 -1
- package/dist/client/assets/{breadcrumb-CXuS6gNw.js → breadcrumb-B_bU6eJc.js} +1 -1
- package/dist/client/assets/{buckets-CwnhCBpn.js → buckets-CJXf1hSG.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-GXmEs2lp.js → bulk-category-panel-CEbuB3eE.js} +1 -1
- package/dist/client/assets/{capability-load-error-ClieXywX.js → capability-load-error-Du-FbaTG.js} +1 -1
- package/dist/client/assets/{cards-O9HwAVOg.js → cards-D4AMs5hh.js} +1 -1
- package/dist/client/assets/category-editor-Q8mnyuVW.js +1 -0
- package/dist/client/assets/{cdn-tab-CX4QEdwN.js → cdn-tab-YI9cEF0c.js} +1 -1
- package/dist/client/assets/{chart-B9GbOmAC.js → chart-Dodu1xOc.js} +1 -1
- package/dist/client/assets/chat-context-C0gBnrEt.js +35 -0
- package/dist/client/assets/{checkbox-HAQ_nhYr.js → checkbox-DnuAdak3.js} +1 -1
- package/dist/client/assets/{choose-editor-D3HFCFTx.js → choose-editor-z_RSHVAe.js} +1 -1
- package/dist/client/assets/{cli-auth-success-D2QQP4Pz.js → cli-auth-success-B04DqfZh.js} +1 -1
- package/dist/client/assets/{client-icons-BaBjOI1p.js → client-icons-DyKPA_If.js} +1 -1
- package/dist/client/assets/collection-detail-Bmgm6Xpz.js +1 -0
- package/dist/client/assets/{collection-display-button-BY4YA6Dx.js → collection-display-button-BjYcW4FZ.js} +1 -1
- package/dist/client/assets/{collection-search-BrUxTz45.js → collection-search-CDZk-ZPx.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DnbZ0Kcw.js → collection-table-wrapper-CGGQrcHR.js} +1 -1
- package/dist/client/assets/{collection-tabs-DsyRDJCm.js → collection-tabs-D1lKbsAt.js} +1 -1
- package/dist/client/assets/{command-CdGnJ_4A.js → command-Ci-j3lot.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CWKskFIZ.js → commerce-onboarding-Q76OphjB.js} +1 -1
- package/dist/client/assets/{connect-BuKUuVUR.js → connect-CE0PvrLj.js} +1 -1
- package/dist/client/assets/{connect-layout-DrkT05cr.js → connect-layout-CmPm31Qh.js} +1 -1
- package/dist/client/assets/{connection-card-CB2F5qRw.js → connection-card-Cuu-NGPd.js} +1 -1
- package/dist/client/assets/connection-detail-CQJhxj9a.js +1 -0
- package/dist/client/assets/{connection-form-helpers-zpf3c404.js → connection-form-helpers-CBOILzhO.js} +1 -1
- package/dist/client/assets/{connection-Cdt4e_MW.js → connection-gqBIrJrp.js} +1 -1
- package/dist/client/assets/{connections-o8DS2PkE.js → connections-k4235kPb.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CAXMeKuh.js → create-organization-dialog-C3yQmz3P.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-CU_zK481.js → decopilot-sse-pool-CdJPh08p.js} +1 -1
- package/dist/client/assets/{dialog-DMyJgxgJ.js → dialog-CWKQw2WC.js} +1 -1
- package/dist/client/assets/{domain-settings-DygUFpUg.js → domain-settings-BSba6mpG.js} +1 -1
- package/dist/client/assets/download-app-dialog-BEy2Wnzj.js +1 -0
- package/dist/client/assets/{drawer-DYxoRn2r.js → drawer-ClX3akJx.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Yn3mK79I.js → dropdown-menu-DUEIZWiX.js} +1 -1
- package/dist/client/assets/e2e-tab-DC0rCpOL.js +1 -0
- package/dist/client/assets/{editor-B0bws0TS.js → editor-DeUxecc_.js} +1 -1
- package/dist/client/assets/{empty-state-DTBt1PEx.js → empty-state-C-9VdPkJ.js} +1 -1
- package/dist/client/assets/{empty-state-BxVwjQ2y.js → empty-state-DYE3rkmB.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BJMOxVAc.js → extract-connection-data-KaTj8mHV.js} +1 -1
- package/dist/client/assets/file-explorer-D4SVt02z.js +2 -0
- package/dist/client/assets/{file-type-icon-BYEG4qUb.js → file-type-icon-CB7H_Wiy.js} +1 -1
- package/dist/client/assets/{folder-icon-Dhr9f8sV.js → folder-icon-C6cEeAnl.js} +1 -1
- package/dist/client/assets/{form-7uhYa81Z.js → form-CUXIC19o.js} +1 -1
- package/dist/client/assets/{general-Dfo1MRMx.js → general-DW9bVist.js} +1 -1
- package/dist/client/assets/github-repo-picker-9AcEQIzR.js +1 -0
- package/dist/client/assets/hooks-DquOZ-Xk.js +15 -0
- package/dist/client/assets/{hosting-tab-CPEQL5Zn.js → hosting-tab-fN4y3bIT.js} +1 -1
- package/dist/client/assets/{index-Bwv8rTxR.js → index-BRMuylL4.js} +1 -1
- package/dist/client/assets/{index-BQSq2G-I.js → index-BfWwYPwx.js} +1 -1
- package/dist/client/assets/{index-PqfClboL.js → index-BkawI5he.js} +3 -3
- package/dist/client/assets/{index-XRXk-Rxu.js → index-Cdu9R7BQ.js} +1 -1
- package/dist/client/assets/index-CiiXjYYX.css +1 -0
- package/dist/client/assets/index-CnZuejsK.js +1 -0
- package/dist/client/assets/index-D-9OW3Wb.js +823 -0
- package/dist/client/assets/{index-POPUMVNy.js → index-D821QKnk.js} +1 -1
- package/dist/client/assets/{index-ChsC-xtq.js → index-DGNeXmXN.js} +1 -1
- package/dist/client/assets/index-Dpj-HbFs.js +1 -0
- package/dist/client/assets/{index-DSfaX8ZJ.js → index-m6p9dAul.js} +2 -2
- package/dist/client/assets/{index-redirect-D3VpT043.js → index-redirect-1cfJeTJH.js} +1 -1
- package/dist/client/assets/{infra-billing-nit3ydE6.js → infra-billing-H5rZU-k1.js} +1 -1
- package/dist/client/assets/{input-D7VtAJjJ.js → input-fTgot4-g.js} +1 -1
- package/dist/client/assets/{integration-icon-lLjfXy11.js → integration-icon-BLOQWR7d.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BJIBOFoX.js → invite-member-dialog-BIgrWqr7.js} +1 -1
- package/dist/client/assets/{label-QKhMkhs7.js → label-CDt53aWD.js} +1 -1
- package/dist/client/assets/{layout-DOq1GsRD.js → layout-C_t6Nu2o.js} +1 -1
- package/dist/client/assets/{login-BBnes1GR.js → login-C7qvLy5B.js} +1 -1
- package/dist/client/assets/{markdown-Cxpdg1Ih.js → markdown-Dzj7KfMq.js} +1 -1
- package/dist/client/assets/{mcp-oauth-EPG_9QaY.js → mcp-oauth-PBuEj92n.js} +1 -1
- package/dist/client/assets/{members-BlESIwlU.js → members-D_XPbFzI.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dh9B6hNJ.js → monaco-editor-DAtKorVX.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DywkwDMi.js → monitoring-stats-row-zC9HU0u6.js} +1 -1
- package/dist/client/assets/{multi-select-Bz32pXhp.js → multi-select-Dnr7PAJj.js} +1 -1
- package/dist/client/assets/{oauth-callback-DhO6sCUj.js → oauth-callback-Cyp9j0ys.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DulaWBfe.js → oauth-callback-ai-provider-BkDqDLNZ.js} +1 -1
- package/dist/client/assets/{onboarding-ByioA-uf.js → onboarding-CvnwGB6M.js} +1 -1
- package/dist/client/assets/org-layout-DItAI5Di.js +1 -0
- package/dist/client/assets/{organization-choice-BCHO8vJQ.js → organization-choice-Brz54IKk.js} +1 -1
- package/dist/client/assets/{orgs-Bvnh03Bo.js → orgs-CcUI9HgJ.js} +1 -1
- package/dist/client/assets/{page-seo-form-Bt8Zizqh.js → page-seo-form-OTDku7Z1.js} +1 -1
- package/dist/client/assets/{popover-B2EbEKJC.js → popover-DjscXujA.js} +1 -1
- package/dist/client/assets/post-calendar-BcunQFOG.js +1 -0
- package/dist/client/assets/post-editor-N40xpPkk.js +1 -0
- package/dist/client/assets/{primitives-Bo7_tdMO.js → primitives-_Vnzju1y.js} +1 -1
- package/dist/client/assets/{profile-DsU0NYMZ.js → profile-B_l90EbD.js} +1 -1
- package/dist/client/assets/project-app-view-Dq7iYeXJ.js +1 -0
- package/dist/client/assets/{project-icon-B6DBvpFP.js → project-icon-D7jcmH3z.js} +1 -1
- package/dist/client/assets/{prompts-a208VJ3D.js → prompts-fLxWWgz-.js} +1 -1
- package/dist/client/assets/record-editor-Ci_NDgeT.js +1 -0
- package/dist/client/assets/redirect-editor-BePOP1Ph.js +1 -0
- package/dist/client/assets/registry-Bh5jhzbl.js +2 -0
- package/dist/client/assets/{registry-layout-wVidPSJE.js → registry-layout-CLY27ukG.js} +1 -1
- package/dist/client/assets/{reports-D6HjeWJ9.js → reports-CGghkfg_.js} +1 -1
- package/dist/client/assets/{require-capability-Dg6MWzmr.js → require-capability-D2jyLdx0.js} +1 -1
- package/dist/client/assets/{required-auth-layout-yWBNl8Cx.js → required-auth-layout-ZGcoBsTU.js} +1 -1
- package/dist/client/assets/{reset-password-DCP1Kpo3.js → reset-password-Dkrm3cHn.js} +1 -1
- package/dist/client/assets/{review-settings-BU6OU9b2.js → review-settings-DLtdjNmr.js} +1 -1
- package/dist/client/assets/{roles-DYdC1C9F.js → roles-CcvMkry_.js} +1 -1
- package/dist/client/assets/{schema-CExEiY9w.js → schema-C5E0ePqu.js} +1 -1
- package/dist/client/assets/{scroll-area-DWesqnEX.js → scroll-area-F200w2mh.js} +1 -1
- package/dist/client/assets/{search-input-DzDwGhUj.js → search-input-DJIbu8BB.js} +1 -1
- package/dist/client/assets/{secrets-CdlnUVmb.js → secrets-DMZxvEj_.js} +1 -1
- package/dist/client/assets/{sections-editor-BeCO13DA.js → sections-editor-DwiAEnZ7.js} +2 -2
- package/dist/client/assets/{select-fQpkdmCP.js → select-aD2SqHOW.js} +1 -1
- package/dist/client/assets/{select-model-B87liE0s.js → select-model-BAm7L9iK.js} +1 -1
- package/dist/client/assets/{self-tool-result-CI9lePBq.js → self-tool-result-j5kSv4ca.js} +1 -1
- package/dist/client/assets/seo-editor-Cm_lDZye.js +1 -0
- package/dist/client/assets/settings-layout-DLlpPiRj.js +1 -0
- package/dist/client/assets/{settings-sidebar-BK0qHuDP.js → settings-sidebar-CFckzuH2.js} +1 -1
- package/dist/client/assets/{shell-controls-CjEodxq6.js → shell-controls-B6jpfAPG.js} +1 -1
- package/dist/client/assets/shell-layout-BBeCMSA6.js +1 -0
- package/dist/client/assets/{skill-preview-JM1C9U_u.js → skill-preview-Crvic_gM.js} +1 -1
- package/dist/client/assets/{skills-Df3FjNOT.js → skills-CJys28KJ.js} +1 -1
- package/dist/client/assets/{sso-CdbC3Fg8.js → sso-BbCXtvEm.js} +1 -1
- package/dist/client/assets/{store-hf3sk0kY.js → store-DxhB5rKM.js} +1 -1
- package/dist/client/assets/store-registry-DECUw0kw.js +2 -0
- package/dist/client/assets/{switch-CXvibrMM.js → switch-BImv-gvt.js} +1 -1
- package/dist/client/assets/synced-repos-Y5DAHAzN.js +1 -0
- package/dist/client/assets/{table-kp1XE9dT.js → table-svMfP7N5.js} +1 -1
- package/dist/client/assets/{tabs-B3JjqSsa.js → tabs-DX2hIJ3b.js} +1 -1
- package/dist/client/assets/{task-board-Cu8abk2x.js → task-board-CU2obT3r.js} +1 -1
- package/dist/client/assets/task-route-DCBGrQpz.js +1 -0
- package/dist/client/assets/{tasks-N9V2sftX.js → tasks-g-5mQjJo.js} +1 -1
- package/dist/client/assets/{textarea-CiJM1au8.js → textarea-DJdAgtmk.js} +1 -1
- package/dist/client/assets/{toggle-group-B-2KCs2i.js → toggle-group-BtNaSJHm.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-DsVbEvkI.js → toolbar-icon-button-DI6yIlPy.js} +1 -1
- package/dist/client/assets/{toolbar-CUoJwayP.js → toolbar-kq9Y7nNF.js} +1 -1
- package/dist/client/assets/{track-DnpAx3e3.js → track-X0YKsDzo.js} +1 -1
- package/dist/client/assets/{types-ZeUbZJLS.js → types-BeDjBiKO.js} +1 -1
- package/dist/client/assets/{use-ai-providers-d40kZQC-.js → use-ai-providers-AGwxnFdj.js} +1 -1
- package/dist/client/assets/{use-automations-_m8whHp0.js → use-automations-CmwM0DEc.js} +1 -1
- package/dist/client/assets/{use-autosave-BIsH8JCz.js → use-autosave-lN3i2RtH.js} +1 -1
- package/dist/client/assets/{use-connection-amUUqPK2.js → use-connection-CsZlLbEZ.js} +1 -1
- package/dist/client/assets/{use-copy-24vRYGpf.js → use-copy-DHyeBoZ8.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CZJOLPMm.js → use-create-virtual-mcp-BOvsC0DW.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-zxAYDFyH.js → use-debounced-autosave-8VnwrEMs.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Bp44IQzu.js → use-debounced-value-3IbXIZAk.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-2Ng0Wxeb.js → use-decopilot-events-WOaP0SQC.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DcTxrCff.js → use-delete-connection-Df_yxWGf.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BiVz722u.js → use-deployment-admin-CMRSZLUJ.js} +1 -1
- package/dist/client/assets/{use-destination-route-C9WCN5J4.js → use-destination-route-B2O150Yr.js} +1 -1
- package/dist/client/assets/{use-file-configs-DBg-_83I.js → use-file-configs-B45QMkT9.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BMWJMaLX.js → use-infinite-scroll-PS5OvGme.js} +1 -1
- package/dist/client/assets/{use-join-requests-Di5GolzA.js → use-join-requests-DPn5Hwkp.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-8HlvMX_V.js → use-mcp-auth-status-CaPfR8Sa.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DJ1XmaTL.js → use-mcp-client-DxE4Ab64.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-BsTT4HpT.js → use-mcp-prompts-BNrqL_f0.js} +1 -1
- package/dist/client/assets/{use-members-CH0-g0gG.js → use-members-Nvqy7Dzy.js} +1 -1
- package/dist/client/assets/use-navigate-to-agent-Cf-IaJUb.js +5 -0
- package/dist/client/assets/{use-org-auth-client-YfM297vM.js → use-org-auth-client-BR0PCT04.js} +1 -1
- package/dist/client/assets/{use-org-sso-BlX-8VL5.js → use-org-sso-CblCPla_.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BpyMQI7X.js → use-organization-roles-PibAy9Wd.js} +1 -1
- package/dist/client/assets/{use-organization-settings-YKFwQGNn.js → use-organization-settings-BV17wl2V.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-CIgiHkeA.js → use-panel-navigate-BG-ooS17.js} +1 -1
- package/dist/client/assets/{use-registry-connections-zd4c05Ap.js → use-registry-connections-CdSZH0XX.js} +1 -1
- package/dist/client/assets/{use-secrets-BTq66_-S.js → use-secrets-BjE52mie.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DqvXqLZC.js → use-section-preview-base-BmQOZ8go.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DgQE41Lh.js → use-status-sounds-tS7pmMWO.js} +1 -1
- package/dist/client/assets/{use-tags-DGA6n_kJ.js → use-tags-B-KgG3zC.js} +1 -1
- package/dist/client/assets/{use-view-mode-DSzG493O.js → use-view-mode-DRYLjqJC.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BksmT3bT.js → use-virtual-mcp-DT_fCnuE.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Din4IYlF.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-BeASDmXg.js +1 -0
- package/dist/client/assets/{users-BPr-fuIf.js → users-ByFjNqYU.js} +1 -1
- package/dist/client/assets/variant-calendar-CJr-jUZm.js +1 -0
- package/dist/client/assets/{view-mode-toggle-C67UxAXH.js → view-mode-toggle-DTFhAaHw.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agents-list-BUPE60si.js +0 -1
- package/dist/client/assets/ai-providers-DmDe6Gty.js +0 -1
- package/dist/client/assets/api-keys-Bd9DYtgW.js +0 -1
- package/dist/client/assets/app-editor-BJKUCNC6.js +0 -1
- package/dist/client/assets/automations-nRglVV0y.js +0 -1
- package/dist/client/assets/category-editor-Di1MXTcN.js +0 -1
- package/dist/client/assets/chat-context-Cy0rls8c.js +0 -35
- package/dist/client/assets/collection-detail-DYHHeZVM.js +0 -1
- package/dist/client/assets/connection-detail-DAkCIdQD.js +0 -1
- package/dist/client/assets/e2e-tab-BXDm7nmf.js +0 -1
- package/dist/client/assets/file-explorer-t_U5CroL.js +0 -2
- package/dist/client/assets/github-repo-picker-EcTfqXw_.js +0 -1
- package/dist/client/assets/hooks-g1jnmSoE.js +0 -15
- package/dist/client/assets/index-jEPflMqW.js +0 -1
- package/dist/client/assets/index-qz9ifuG0.js +0 -1
- package/dist/client/assets/index-yssuKkag.css +0 -1
- package/dist/client/assets/index-z2239Bry.js +0 -827
- package/dist/client/assets/org-layout-Dvo2y_Om.js +0 -1
- package/dist/client/assets/post-calendar-38SpOhqM.js +0 -1
- package/dist/client/assets/post-editor-CVqw01s1.js +0 -1
- package/dist/client/assets/project-app-view-U3CUTPtn.js +0 -1
- package/dist/client/assets/record-editor-Bu1_BZdU.js +0 -1
- package/dist/client/assets/redirect-editor-Cm6r-l-h.js +0 -1
- package/dist/client/assets/registry-5rcVxBcm.js +0 -2
- package/dist/client/assets/seo-editor-CLInI0zF.js +0 -1
- package/dist/client/assets/settings-layout-Cp7g61nX.js +0 -1
- package/dist/client/assets/shell-layout-CyEhpljU.js +0 -1
- package/dist/client/assets/store-registry-BmzDbcKr.js +0 -2
- package/dist/client/assets/synced-repos-CtKGkEKp.js +0 -1
- package/dist/client/assets/task-route-DOCtDdvo.js +0 -1
- package/dist/client/assets/thread-intent-BXltPzDX.js +0 -1
- package/dist/client/assets/thread-route-CqJiATkn.js +0 -1
- package/dist/client/assets/use-mcp-tools-DrikIu-o.js +0 -1
- package/dist/client/assets/use-navigate-to-agent-C-nz-Qsl.js +0 -1
- package/dist/client/assets/useInfiniteQuery-ZaOAcalc.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Er-flM0P.js +0 -1
- package/dist/client/assets/variant-calendar-f0A7QMqN.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2980,7 +2980,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
2980
2980
|
${G.join(`
|
|
2981
2981
|
`)}`:Y}function yN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2982
2982
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Wd$=200,MN6=12,VN6,CN6=300,m71=3;var i71=D(()=>{rD();ST0();VN6={aheadBy:0,behindBy:0,files:[]}});function hN6($){if(!$||$.includes(".."))return!1;return gN6.test($)}function Fd$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!hN6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Hd$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var gN6;var Ud$=D(()=>{gN6=/^[\w./@-]+$/});function Is($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Nd$($,Z,X,Q){if(!Q.connectionId)throw new kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new kv(F9);await xO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let U=H instanceof Error?H.message:F9;throw new kv(U)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await fK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:U,message:N}=w9$(H instanceof Error?H.message:String(H));throw U?new kv(N):H}),K=eu($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await bO(F,uN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var uN6=10485760,kv;var p71=D(()=>{KJ();jT0();On();gi0();dy();kv=class kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function cN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!lN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Vv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(mN6)])}async function pN6($,Z){let X=$.var.studioContext,Q=JJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=MC(J?.metadata?.runtime);if(W)return W;let K=WD0(Z.virtualMcpMetadata),F=K==="cms"?await q71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",U=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(U&&J)cn(X,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:U});return H}async function nN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await KQ($.var.studioContext)}catch{return null}}function Sv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Yl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Is(Z,X);if(!Y)throw new d4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return zT0(Q,G.id,Y)}function n71($,Z){if(Z instanceof AA0)return $.json({error:Z.message},429,{...R5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof d4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,R5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,R5)}async function Dd$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function wd$($){try{let Z=await Yl($),X=await CT0(Z,$.get("vmClaim").branch);return $.json(X,200,R5)}catch(Z){return n71($,Z)}}function qs($,Z){let Q=(fT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return fT0.set($,Y),Y.finally(()=>{if(fT0.get($)===Y)fT0.delete($)}),Q}async function aZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let Q=X?.runner??Sv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,U={method:W,headers:F,body:K,...H?{signal:H}:{}},N=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,U);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...R5}})}}let O=await B.text(),w=X?.redactRepoDir?tN6(O):O,L=B.headers.get("content-type")??"application/json";return new Response(w,{status:B.status,headers:{"content-type":L,...R5}})};try{if(H){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((w,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function tN6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function bT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function oN6($){return Ld$.includes($)}var lN6,Bd$=524288,dN6=65536,mN6=1e4,Od$=2000,iN6,fT0,R5,Ld$,Ed$=()=>{let $=new W1;$.use("/:virtualMcpId/:branch/*",iN6),$.post("/:virtualMcpId/:branch/write",(X)=>aZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>aZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>aZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>aZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>aZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>aZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>aZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return aZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return aZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>aZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>aZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!oN6(Q))return X.json({error:`step must be one of: ${Ld$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await q71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await nN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Q==="start"){let J=n(X.var.studioContext),W=ly(Y.virtualMcpMetadata);try{await q70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return aZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return sU(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Ec$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return wd$(X);return Z(X)});let Z=(X)=>aZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Od$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return wd$(X);return aZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Od$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Yl(X),J=await _T0(G,Q.branch,Y.base);return X.json(J,200,R5)}catch(Y){return n71(X,Y)}return aZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,R5);let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return qs(Y,async()=>{try{await M71(W,Q,Y);let K=Is(G,J);if(K)await Nd$(W,Q,Y,K)}catch(K){if(K instanceof kv)return X.json({error:K.message},403,R5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,R5)}return aZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return qs(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,R5);try{let J=await Yl(X);return await Kd$(J,Q.branch,G),X.json({ok:!0},200,R5)}catch(J){let W=J instanceof d4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,R5)}});return qs(Q.claimName,()=>aZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return qs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Yl(X),F=W.base??await K.getDefaultBranch();return await vT0(K,Q.branch,F),X.json({ok:!0},200,R5)}catch(W){return n71(X,W)}});let Y=Sv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return qs(G,async()=>{try{await M71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,R5)}return aZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",r5({maxSize:Bd$,onError:(X)=>X.json({error:"Payload too large"},413,R5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Sv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,U=F.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=S71(H)&&N?[H,U]:Y?await Promise.all([bT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),bT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Yl(X);return Promise.all([CT0(L,Q.branch),_T0(L,Q.branch)])})(),w=await Tc$(K,B,O);return X.json(w,200,R5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return X.json({error:H},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",r5({maxSize:Bd$,onError:(X)=>X.json({error:"Payload too large"},413,R5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Sv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,U=F.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=S71(H)&&N?[H,U]:Y?await Promise.all([bT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),bT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Yl(X);return Promise.all([CT0(L,Q.branch),_T0(L,Q.branch)])})(),w=await Ic$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(w,200,R5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return X.json({error:H},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return Dd$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",r5({maxSize:dN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Fd$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Hd$(G,W.resolveType);return Dd$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var jd$=D(()=>{c$();MF();su();I71();Kn();Dc$();i3();Jg();wc$();r3();Lc$();jc$();bi0();Nn();v71();qc$();b71();rD();i71();Ud$();p71();lN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;iN6=ET0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=t0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{cN6(J)}catch(w){let L=w instanceof Error?w.message:String(w);return $.json({error:L},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Jn({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Vi0(X,J),H=Si0(F,Q),U=Oc$({userId:H,projectRef:K}),N=W.metadata??null,B=await pN6($,{claimName:U,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:N,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z();let O;try{O=await KQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:B}),Z()});fT0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ld$=["clone","install","start"]});function zd$($,Z,X){let Q=t71.get($);if(!Q)Q={pending:null,running:!1},t71.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)aN6($,Q);return G}async function aN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await sN6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)t71.delete($)}}async function sN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Ql(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=c71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,w]of $.set){let L=d71(K,O),E=`${JSON.stringify(w,null,2)}
|
|
2983
|
-
`,j=await Z.createBlob(E);await Yd$(Z.owner,Z.repo,j,E);let z=L[0]??`${VT0(Q)}/${y71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:P,sha:j,content:E});for(let A of L.slice(1))F.push({path:A,mode:"100644",type:"blob",sha:null}),H.delete(A)}for(let O of $.del)for(let w of d71(K,O))F.push({path:w,mode:"100644",type:"blob",sha:null}),H.delete(w);if(F.length===0)return G;let U=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===U)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=Ps(O);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);F.push({path:U,mode:"100644",type:"blob",sha:E})}let N=await Z.createTree(J,F),B=await Z.createCommit({message:eN6($),treeSha:N,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof d4&&O.status===422)||Y>=rN6-1)throw O;await L$($7(2000,200,Y,2,0.5))}}}function eN6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ji0(Q,$.deps.coAuthor)}var rN6=3,t71;var Pd$=D(()=>{P70();AT0();a8();rD();ST0();t71=new Map});import{createHmac as Ad$,randomBytes as $B6,timingSafeEqual as ZB6}from"crypto";function Td$(){if(xT0)return xT0;let $;try{let Z=V0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return xT0=$?Buffer.from($):$B6(32),xT0}function o71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+XB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Ad$("sha256",Td$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Rd$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Ad$("sha256",Td$()).update(Q).digest("base64url"));if(Y.length!==G.length||!ZB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var XB6=21600000,xT0=null;var Id$=D(()=>{D$()});import{z as Gl}from"zod";function YB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&QB6.test($)}function Sd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Ms($){let Z=$.get("decofileScope");return zT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ks($,Z){if(Z instanceof d4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Cd$(){let $=new W1;return $.use("/:virtualMcpId/:branch",Vd$),$.use("/:virtualMcpId/:branch/*",Vd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Gd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=o71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Sd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ks(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Ms(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ks(Z,Y)}}),$.patch("/:virtualMcpId/:branch",JB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=WB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{PT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(x71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Ms(Z),W=await zd$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eu(Q)},G),K=o71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Sd$(Z)})}catch(J){return ks(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof d4&&W.status===409))throw W;await vT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof d4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof d4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ks(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof d4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ks(Z,Q)}}),$}var QB6,qd$=500,Md$=1048576,kd$=1024,GB6=8388608,JB6,WB6,Vd$;var _d$=D(()=>{Qt0();AT0();c$();MF();I71();jT0();p71();b71();Pd$();Id$();i71();rD();ST0();QB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;JB6=r5({maxSize:GB6,onError:($)=>$.json({error:"Payload too large"},413)}),WB6=Gl.object({set:Gl.record(Gl.string(),Gl.unknown()).optional(),delete:Gl.array(Gl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=qd$,{message:`Patch cannot touch more than ${qd$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Md$),{message:`Each block must be at most ${Md$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=kd$),{message:`Each block key must be at most ${kd$} characters`}),Vd$=ET0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!YB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Rd$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!JD0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],U=Is(K,H);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var vd$=($)=>{let Z=new W1;if(Z.use("*",wv),Z.route("/",_A0()),Z.route("/",og$()),Z.route("/",Zc$()),Z.route("/",sl$()),Z.route("/",DT0()),Z.route("/tools",Kc$()),Z.route("/",Gc$()),Z.route("/",Cl$({kvStorage:$.kvStorage})),Z.route("/",Vl$()),Z.route("/fs",il$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ed$()),Z.route("/decofile",Cd$()),Z.route("/",ol$()),Z.route("/deco-sites",fA0()),Z.route("/hosting",gg$()),Z.route("/monitor",ig$()),Z.route("/sso",qA0()),Z.route("/",wT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vg$()),$.mountDevAssets)Z.route("/dev-assets",gA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Xx$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",nl$()),Z.route("/mcp",bL0()),Z.route("/mcp/self",OT0()),Z.route("/mcp",gL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var fd$=D(()=>{c$();zA0();fg$();o91();hg$();pg$();hA0();na();m91();Sl$();_l$();pl$();tt();g91();hL0();E71();tl$();rl$();el$();Xc$();Jc$();z71();Fc$();P71();xL0();jd$();_d$()});function KB6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var FB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},bd$=()=>{let $=new W1;return $.use("*",FB6),$.get("/",async(Z)=>{let X=V0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await zY(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:KB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var xd$=D(()=>{c$();D$();VP0()});import{z as q1}from"zod";function vF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function jB6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function zB6($,Z,X){try{return JSON.parse($)}catch{throw new hd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function PB6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:zB6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function AB6($){let Z=$.map((X)=>{let Q=X.function.parameters?aY(X.function.parameters):aY({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function TB6($){if(!$)return;return{openai:{response_format:$}}}function RB6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function gd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var HB6=256,UB6,NB6,BB6,OB6,DB6,wB6,LB6,EB6,hd$,ud$,ld$;var cd$=D(()=>{g4();c$();su();SU();UB6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),NB6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),BB6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(NB6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),OB6=q1.object({type:q1.literal("text")}),DB6=q1.object({type:q1.literal("json_object")}),wB6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),LB6=q1.union([OB6,DB6,wB6]),EB6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(BB6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(UB6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:LB6.optional(),user:q1.string().optional()});hd$=class hd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ud$=new W1;ud$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(vF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=EB6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=jB6(G.model);if(!J)return $.json(vF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>BL(j.providerId));if(!E)return $.json(vF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),U=PB6(G.messages),N=G.tools?AB6(G.tools):void 0,B=TB6(G.response_format),O=RB6(),w=Math.floor(Date.now()/1000);if(G.stream)return sU($,async(L)=>{let E=yd$(H,U,N,G,B,$.req.raw.signal);try{let j=SO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=HB6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:gd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=yd$(H,U,N,G,B,$.req.raw.signal),E=await kO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:gd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vF(Y.message,"server_error"),500)}});ld$=ud$});function IB6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function dd$(){let $=new W1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=t0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aX(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||m9(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let U of H){if(he1(U)!==G)continue;if(!IB6(U.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var md$=D(()=>{c$();hH()});var pd$;var id$=D(()=>{pd$={name:"decocms",version:"4.325.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function kB6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??MB6}}var nd$,MB6="https://ph.studio.decocms.com",td$;var od$=D(()=>{c$();$90();eC();h5();D$();q91();id$();nd$=new W1;nd$.get("/",($)=>{let Z={version:pd$.version,theme:Zp1(),..._H().logo&&{logo:_H().logo},...LU()&&{internalUrl:M_1()},...V0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!V0().firecrawlApiKey,hostingEnabled:!!V0().controlplaneRestUrl&&!!V0().controlplaneServiceToken,hostingControlPlaneGa:V0().hostingControlPlaneGa,monitorEnabled:!!V0().clickhouseAnalyticsUrl&&!!V0().clickhouseAnalyticsPassword,monitorGa:V0().monitorGa,auth:gy$(),posthog:kB6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:xs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});td$=nd$});function Jl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function r71($){return(Jl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ad$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Jl($))}&sz=${Z}`}function rd$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function sd$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?rd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):rd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as u0}from"zod";var Cv,VB6,SB6,CB6,_B6,ed$;var $m$=D(()=>{Cv=u0.enum(["good","bad","neutral"]),VB6=u0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},u0.object({kind:u0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:u0.coerce.string().optional(),tone:Cv.optional(),muted:u0.boolean().optional(),delta:u0.coerce.string().optional(),deltaDir:u0.enum(["up","down","neutral"]).optional(),points:u0.array(u0.coerce.number()).optional(),label:u0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),SB6=u0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},u0.array(VB6)),CB6={key:u0.coerce.string(),title:u0.coerce.string(),eyebrow:u0.coerce.string().optional(),headline:u0.coerce.string(),annotation:u0.coerce.string().optional(),methodology:u0.coerce.string().optional(),sources:u0.array(u0.object({name:u0.coerce.string(),logoUrl:u0.coerce.string()})).optional()},_B6=u0.discriminatedUnion("template",[u0.object({template:u0.literal("cover"),score:u0.object({value:u0.coerce.number(),max:u0.coerce.number().optional(),grade:u0.coerce.string().optional(),label:u0.coerce.string().optional()}).optional(),brandImage:u0.coerce.string().optional(),screenshot:u0.coerce.string().optional(),mobileScreenshot:u0.coerce.string().optional()}),u0.object({template:u0.literal("cta"),ctaUrl:u0.coerce.string().optional(),ctaLabel:u0.coerce.string().optional(),bullets:u0.array(u0.coerce.string()).optional()}),u0.object({template:u0.literal("series"),points:u0.array(u0.coerce.number()).min(2),xLabels:u0.array(u0.coerce.string()).min(1),unit:u0.coerce.string().optional(),callout:u0.object({index:u0.coerce.number(),value:u0.coerce.string(),tone:Cv.optional()})}),u0.object({template:u0.literal("threshold"),value:u0.coerce.string().default(""),metricLabel:u0.coerce.string().optional(),ratio:u0.coerce.number(),thresholdRatio:u0.coerce.number().optional(),thresholdLabel:u0.coerce.string().default(""),tone:Cv.optional()}),u0.object({template:u0.literal("stats"),stats:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),tone:Cv.optional()})).min(1)}),u0.object({template:u0.literal("bars"),items:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),ratio:u0.coerce.number(),tone:Cv.optional()})).min(1)}),u0.object({template:u0.literal("gauges"),gauges:u0.array(u0.object({label:u0.coerce.string(),value:u0.coerce.string(),status:u0.enum(["good","warn","bad"]).catch("warn"),caption:u0.coerce.string().optional(),ratio:u0.coerce.number().optional()})).min(1)}),u0.object({template:u0.literal("checklist"),checks:u0.array(u0.object({label:u0.coerce.string(),status:u0.enum(["pass","fail","warn"]).catch("fail"),value:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("table"),columns:u0.array(u0.object({label:u0.coerce.string(),align:u0.enum(["left","right"]).optional()})).min(1),rows:u0.array(SB6).min(1),highlightRow:u0.coerce.number().optional()}),u0.object({template:u0.literal("products"),products:u0.array(u0.object({name:u0.coerce.string(),price:u0.coerce.string().optional(),image:u0.coerce.string().optional(),url:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("list"),entries:u0.array(u0.object({label:u0.coerce.string(),severity:u0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:u0.coerce.number().optional()}),u0.object({template:u0.literal("keywords"),volumeLabel:u0.coerce.string().optional(),keywords:u0.array(u0.object({term:u0.coerce.string(),volume:u0.coerce.string(),position:u0.coerce.number().catch(0)})).min(1)}),u0.object({template:u0.literal("competitor"),metricLabel:u0.coerce.string().optional(),competitors:u0.array(u0.object({name:u0.coerce.string(),value:u0.coerce.string(),tone:Cv.optional(),isYou:u0.boolean().optional()})).min(1)}),u0.object({template:u0.literal("scorecard"),rivalLabel:u0.coerce.string().optional(),dimensions:u0.array(u0.object({label:u0.coerce.string(),you:u0.coerce.string(),rival:u0.coerce.string().optional(),rivalName:u0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),ed$=u0.object({...CB6,template:_B6})});function yT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ed$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var a71=D(()=>{$m$()});import{join as Zm$}from"path";async function fB6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(vB6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=yT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||r71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function bB6($,Z){let X=Jl($),Q=Z?.brand?.trim()||r71(X),Y=ad$(X,128),J=`${(V0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=sd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(F)}" />`,`<meta name="twitter:image:alt" content="${TG(H)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
|
|
2983
|
+
`,j=await Z.createBlob(E);await Yd$(Z.owner,Z.repo,j,E);let z=L[0]??`${VT0(Q)}/${y71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let P=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:P,sha:j,content:E});for(let A of L.slice(1))F.push({path:A,mode:"100644",type:"blob",sha:null}),H.delete(A)}for(let O of $.del)for(let w of d71(K,O))F.push({path:w,mode:"100644",type:"blob",sha:null}),H.delete(w);if(F.length===0)return G;let U=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===U)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=Ps(O);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);F.push({path:U,mode:"100644",type:"blob",sha:E})}let N=await Z.createTree(J,F),B=await Z.createCommit({message:eN6($),treeSha:N,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof d4&&O.status===422)||Y>=rN6-1)throw O;await L$($7(2000,200,Y,2,0.5))}}}function eN6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ji0(Q,$.deps.coAuthor)}var rN6=3,t71;var Pd$=D(()=>{P70();AT0();a8();rD();ST0();t71=new Map});import{createHmac as Ad$,randomBytes as $B6,timingSafeEqual as ZB6}from"crypto";function Td$(){if(xT0)return xT0;let $;try{let Z=V0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return xT0=$?Buffer.from($):$B6(32),xT0}function o71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+XB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Ad$("sha256",Td$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Rd$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Ad$("sha256",Td$()).update(Q).digest("base64url"));if(Y.length!==G.length||!ZB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var XB6=21600000,xT0=null;var Id$=D(()=>{D$()});import{z as Gl}from"zod";function YB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&QB6.test($)}function Sd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Ms($){let Z=$.get("decofileScope");return zT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ks($,Z){if(Z instanceof d4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Cd$(){let $=new W1;return $.use("/:virtualMcpId/:branch",Vd$),$.use("/:virtualMcpId/:branch/*",Vd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Gd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=o71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Sd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ks(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Ms(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ks(Z,Y)}}),$.patch("/:virtualMcpId/:branch",JB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=WB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{PT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(x71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Ms(Z),W=await zd$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:eu(Q)},G),K=o71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Sd$(Z)})}catch(J){return ks(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof d4&&W.status===409))throw W;await vT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof d4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof d4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ks(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Ms(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof d4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ks(Z,Q)}}),$}var QB6,qd$=500,Md$=1048576,kd$=1024,GB6=8388608,JB6,WB6,Vd$;var _d$=D(()=>{Qt0();AT0();c$();MF();I71();jT0();p71();b71();Pd$();Id$();i71();rD();ST0();QB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;JB6=r5({maxSize:GB6,onError:($)=>$.json({error:"Payload too large"},413)}),WB6=Gl.object({set:Gl.record(Gl.string(),Gl.unknown()).optional(),delete:Gl.array(Gl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=qd$,{message:`Patch cannot touch more than ${qd$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Md$),{message:`Each block must be at most ${Md$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=kd$),{message:`Each block key must be at most ${kd$} characters`}),Vd$=ET0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!YB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Rd$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!JD0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],U=Is(K,H);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:J}),Z()})});var vd$=($)=>{let Z=new W1;if(Z.use("*",wv),Z.route("/",_A0()),Z.route("/",og$()),Z.route("/",Zc$()),Z.route("/",sl$()),Z.route("/",DT0()),Z.route("/tools",Kc$()),Z.route("/",Gc$()),Z.route("/",Cl$({kvStorage:$.kvStorage})),Z.route("/",Vl$()),Z.route("/fs",il$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ed$()),Z.route("/decofile",Cd$()),Z.route("/",ol$()),Z.route("/deco-sites",fA0()),Z.route("/hosting",gg$()),Z.route("/monitor",ig$()),Z.route("/sso",qA0()),Z.route("/",wT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vg$()),$.mountDevAssets)Z.route("/dev-assets",gA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Xx$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",nl$()),Z.route("/mcp",bL0()),Z.route("/mcp/self",OT0()),Z.route("/mcp",gL0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var fd$=D(()=>{c$();zA0();fg$();o91();hg$();pg$();hA0();na();m91();Sl$();_l$();pl$();tt();g91();hL0();E71();tl$();rl$();el$();Xc$();Jc$();z71();Fc$();P71();xL0();jd$();_d$()});function KB6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var FB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},bd$=()=>{let $=new W1;return $.use("*",FB6),$.get("/",async(Z)=>{let X=V0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await zY(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:KB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var xd$=D(()=>{c$();D$();VP0()});import{z as q1}from"zod";function vF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function jB6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function zB6($,Z,X){try{return JSON.parse($)}catch{throw new hd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function PB6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:zB6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function AB6($){let Z=$.map((X)=>{let Q=X.function.parameters?aY(X.function.parameters):aY({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function TB6($){if(!$)return;return{openai:{response_format:$}}}function RB6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function gd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var HB6=256,UB6,NB6,BB6,OB6,DB6,wB6,LB6,EB6,hd$,ud$,ld$;var cd$=D(()=>{g4();c$();su();SU();UB6=q1.object({type:q1.literal("function"),function:q1.object({name:q1.string(),description:q1.string().optional(),parameters:q1.record(q1.string(),q1.unknown()).optional()})}),NB6=q1.object({id:q1.string(),type:q1.literal("function"),function:q1.object({name:q1.string(),arguments:q1.string()})}),BB6=q1.discriminatedUnion("role",[q1.object({role:q1.literal("system"),content:q1.string(),name:q1.string().optional()}),q1.object({role:q1.literal("user"),content:q1.union([q1.string(),q1.array(q1.union([q1.object({type:q1.literal("text"),text:q1.string()}),q1.object({type:q1.literal("image_url"),image_url:q1.object({url:q1.string(),detail:q1.string().optional()})})]))]),name:q1.string().optional()}),q1.object({role:q1.literal("assistant"),content:q1.string().nullable().optional(),name:q1.string().optional(),tool_calls:q1.array(NB6).optional()}),q1.object({role:q1.literal("tool"),content:q1.string(),tool_call_id:q1.string()})]),OB6=q1.object({type:q1.literal("text")}),DB6=q1.object({type:q1.literal("json_object")}),wB6=q1.object({type:q1.literal("json_schema"),json_schema:q1.object({name:q1.string(),description:q1.string().optional(),schema:q1.record(q1.string(),q1.unknown()),strict:q1.boolean().optional()})}),LB6=q1.union([OB6,DB6,wB6]),EB6=q1.object({model:q1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:q1.array(BB6),stream:q1.boolean().optional().default(!1),temperature:q1.number().min(0).max(2).optional(),max_tokens:q1.number().positive().optional(),top_p:q1.number().min(0).max(1).optional(),frequency_penalty:q1.number().min(-2).max(2).optional(),presence_penalty:q1.number().min(-2).max(2).optional(),stop:q1.union([q1.string(),q1.array(q1.string())]).optional(),tools:q1.array(UB6).optional(),tool_choice:q1.union([q1.literal("auto"),q1.literal("none"),q1.literal("required"),q1.object({type:q1.literal("function"),function:q1.object({name:q1.string()})})]).optional(),response_format:LB6.optional(),user:q1.string().optional()});hd$=class hd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ud$=new W1;ud$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(vF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=EB6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=jB6(G.model);if(!J)return $.json(vF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>BL(j.providerId));if(!E)return $.json(vF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),U=PB6(G.messages),N=G.tools?AB6(G.tools):void 0,B=TB6(G.response_format),O=RB6(),w=Math.floor(Date.now()/1000);if(G.stream)return sU($,async(L)=>{let E=yd$(H,U,N,G,B,$.req.raw.signal);try{let j=SO(E),z=!1,P=0,A="",I=async()=>{if(A.length===0)return;let k=A;A="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=HB6)await I()}else if(k.type==="tool-call"){await I();let M=P++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:gd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=yd$(H,U,N,G,B,$.req.raw.signal),E=await kO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:gd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vF(Y.message,"server_error"),500)}});ld$=ud$});function IB6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function dd$(){let $=new W1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=t0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!aX(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||m9(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let U of H){if(he1(U)!==G)continue;if(!IB6(U.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var md$=D(()=>{c$();hH()});var pd$;var id$=D(()=>{pd$={name:"decocms",version:"4.325.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function kB6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??MB6}}var nd$,MB6="https://ph.studio.decocms.com",td$;var od$=D(()=>{c$();$90();eC();h5();D$();q91();id$();nd$=new W1;nd$.get("/",($)=>{let Z={version:pd$.version,theme:Zp1(),..._H().logo&&{logo:_H().logo},...LU()&&{internalUrl:M_1()},...V0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!V0().firecrawlApiKey,hostingEnabled:!!V0().controlplaneRestUrl&&!!V0().controlplaneServiceToken,hostingControlPlaneGa:V0().hostingControlPlaneGa,monitorEnabled:!!V0().clickhouseAnalyticsUrl&&!!V0().clickhouseAnalyticsPassword,monitorGa:V0().monitorGa,auth:gy$(),posthog:kB6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:xs()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});td$=nd$});function Jl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function r71($){return(Jl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ad$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Jl($))}&sz=${Z}`}function rd$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function sd$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?rd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):rd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as u0}from"zod";var Cv,VB6,SB6,CB6,_B6,ed$;var $m$=D(()=>{Cv=u0.enum(["good","bad","neutral"]),VB6=u0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},u0.object({kind:u0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:u0.coerce.string().optional(),tone:Cv.optional(),muted:u0.boolean().optional(),delta:u0.coerce.string().optional(),deltaDir:u0.enum(["up","down","neutral"]).optional(),points:u0.array(u0.coerce.number()).optional(),label:u0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),SB6=u0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},u0.array(VB6)),CB6={key:u0.coerce.string(),title:u0.coerce.string(),eyebrow:u0.coerce.string().optional(),headline:u0.coerce.string(),annotation:u0.coerce.string().optional(),methodology:u0.coerce.string().optional(),sources:u0.array(u0.object({name:u0.coerce.string(),logoUrl:u0.coerce.string()})).optional()},_B6=u0.discriminatedUnion("template",[u0.object({template:u0.literal("cover"),score:u0.object({value:u0.coerce.number(),max:u0.coerce.number().optional(),grade:u0.coerce.string().optional(),label:u0.coerce.string().optional()}).optional(),brandImage:u0.coerce.string().optional(),screenshot:u0.coerce.string().optional(),mobileScreenshot:u0.coerce.string().optional()}),u0.object({template:u0.literal("cta"),ctaUrl:u0.coerce.string().optional(),ctaLabel:u0.coerce.string().optional(),bullets:u0.array(u0.coerce.string()).optional()}),u0.object({template:u0.literal("series"),points:u0.array(u0.coerce.number()).min(2),xLabels:u0.array(u0.coerce.string()).min(1),unit:u0.coerce.string().optional(),callout:u0.object({index:u0.coerce.number(),value:u0.coerce.string(),tone:Cv.optional()})}),u0.object({template:u0.literal("threshold"),value:u0.coerce.string().default(""),metricLabel:u0.coerce.string().optional(),ratio:u0.coerce.number(),thresholdRatio:u0.coerce.number().optional(),thresholdLabel:u0.coerce.string().default(""),tone:Cv.optional()}),u0.object({template:u0.literal("stats"),stats:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),tone:Cv.optional()})).min(1)}),u0.object({template:u0.literal("bars"),items:u0.array(u0.object({value:u0.coerce.string(),label:u0.coerce.string(),ratio:u0.coerce.number(),tone:Cv.optional()})).min(1)}),u0.object({template:u0.literal("gauges"),gauges:u0.array(u0.object({label:u0.coerce.string(),value:u0.coerce.string(),status:u0.enum(["good","warn","bad"]).catch("warn"),caption:u0.coerce.string().optional(),ratio:u0.coerce.number().optional()})).min(1)}),u0.object({template:u0.literal("checklist"),checks:u0.array(u0.object({label:u0.coerce.string(),status:u0.enum(["pass","fail","warn"]).catch("fail"),value:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("table"),columns:u0.array(u0.object({label:u0.coerce.string(),align:u0.enum(["left","right"]).optional()})).min(1),rows:u0.array(SB6).min(1),highlightRow:u0.coerce.number().optional()}),u0.object({template:u0.literal("products"),products:u0.array(u0.object({name:u0.coerce.string(),price:u0.coerce.string().optional(),image:u0.coerce.string().optional(),url:u0.coerce.string().optional()})).min(1)}),u0.object({template:u0.literal("list"),entries:u0.array(u0.object({label:u0.coerce.string(),severity:u0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:u0.coerce.number().optional()}),u0.object({template:u0.literal("keywords"),volumeLabel:u0.coerce.string().optional(),keywords:u0.array(u0.object({term:u0.coerce.string(),volume:u0.coerce.string(),position:u0.coerce.number().catch(0)})).min(1)}),u0.object({template:u0.literal("competitor"),metricLabel:u0.coerce.string().optional(),competitors:u0.array(u0.object({name:u0.coerce.string(),value:u0.coerce.string(),tone:Cv.optional(),isYou:u0.boolean().optional()})).min(1)}),u0.object({template:u0.literal("scorecard"),rivalLabel:u0.coerce.string().optional(),dimensions:u0.array(u0.object({label:u0.coerce.string(),you:u0.coerce.string(),rival:u0.coerce.string().optional(),rivalName:u0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),ed$=u0.object({...CB6,template:_B6})});function yT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ed$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var a71=D(()=>{$m$()});import{join as Zm$}from"path";async function fB6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(vB6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=yT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||r71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function bB6($,Z){let X=Jl($),Q=Z?.brand?.trim()||r71(X),Y=ad$(X,128),J=`${(V0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=sd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(F)}" />`,`<meta name="twitter:image:alt" content="${TG(H)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
|
|
2984
2984
|
`)}function xB6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2985
2985
|
</head>`)}function Xm$($){let Z=new W1;return Z.get("/:domain/og.png",async(X)=>{let Q=Jl(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Zm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(yB6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?Zm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await fB6(Jl(Q)),K=bB6(Q,W);return X.html(xB6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var vB6=2500,yB6=1e4;var Qm$=D(()=>{c$();a71();EE();D$()});function Vs($,Z){return fetch(`${DK({})}${$}`,Z)}async function gB6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Vs(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=yT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var hB6,$N,Ym$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Gm$;var Jm$=D(()=>{c$();nY();EE();a71();hB6=new Set(["complete","errored","terminated","unknown"]),$N=new W1;$N.use("*",async($,Z)=>{let X=await e$.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});$N.use("/link-token/*",Ym$);$N.use("/suggest",Ym$);$N.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await gB6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});$N.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Vs("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${LE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});$N.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Vs(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${LE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:hB6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});$N.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Vs(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});$N.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Vs(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Gm$=$N});import{createHmac as uB6,timingSafeEqual as lB6}from"crypto";function Km$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let U=F.slice(0,H).trim(),N=F.slice(H+1).trim();if(U==="t")Y=N;else if(U==="v1")G.push(N)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>cB6)return!1;let W=uB6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&lB6(K,H)})}function Fm$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=cJ(Z),Q=cJ(cJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:fF(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Hm$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function fF($){return typeof $==="string"?$:void 0}function cJ($){return typeof $==="object"&&$!==null?$:void 0}function gT0($){return typeof $==="number"?new Date($*1000):null}function $X1($){return fF($)??fF(cJ($)?.id)}function dB6($){return $X1($.subscription)??fF(cJ(cJ($.parent)?.subscription_details)?.subscription)}function mB6($){let Z=gT0($.current_period_end);if(Z)return Z;let X=cJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=cJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function s71($,Z){let X=gT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function e71($,Z){let X=gT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function iB6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=fF(cJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(fF(cJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(fF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=fF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(cJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:cJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(fF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=$X1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(s71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:$X1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:e71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=fF(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&s71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Hm$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:mB6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:e71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=dB6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(s71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:gT0(X.period_end),lastStripeEventAt:e71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function pB6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Hm$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Wm$($,Z){let X=pB6($,Z);if(!X)return;dY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ft1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Um$($){let Z=new UK(B8().db),X=await iB6(Z,$);if(!(X.handled&&X.topUp))Wm$($,X);if(X.handled&&X.topUp)await kj$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Wm$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await h0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof tY&&(Q.status===400||Q.status===404)))throw Q}return X}var cB6=300;var Nm$=D(()=>{rG();v4();v50();SE();W11()});var nB6=1048576,ZX1;var Bm$=D(()=>{c$();MF();D$();Nm$();ZX1=new W1;ZX1.post("/webhook",r5({maxSize:nB6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=V0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Km$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Fm$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Um$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as tB6}from"crypto";function rB6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return tB6(Buffer.from(Y),Buffer.from(Q))}var oB6=5242880,XX1;var Om$=D(()=>{c$();MF();r3();XX1=new W1;XX1.post("/webhook",r5({maxSize:oB6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!rB6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Zt0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Dm$($){let Z=new cU($.db,new gX($.encryptionKey)),X=new W1;return X.get("/attachments/:token",async(Q)=>{let Y=_K$(Q.req.param("token"));if(!Y)return Q.json({error:"Invalid or expired link"},404);let G=await Z.getByOrg(Y.organizationId);if(!G)return Q.json({error:"Jira is not connected"},404);let W=await new GG(G.siteUrl,G.email,G.apiToken).downloadAttachment(Y.attachmentId);if(!W.ok||!W.body)return Q.json({error:"Jira refused the download"},502);let K=new Headers;for(let F of["content-type","content-length","content-disposition"]){let H=W.headers.get(F);if(H)K.set(F,H)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),X}var wm$=D(()=>{c$();iN();st0();gC()});function Lm$($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let X=Z.issue?.id,Q=Z.issue?.key,Y=Z.changelog?.id;if(typeof X!=="string"&&typeof X!=="number"||typeof Q!=="string"||typeof Y!=="string"&&typeof Y!=="number")return null;let G=Z.changelog?.items?.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")return null;return{issueId:String(X),issueKey:Q,toStatus:G.toString,changelogId:String(Y)}}function Em$($,Z,X){let Q=[];for(let Y of Z){if(new Date(Y.created).getTime()<X.getTime())continue;let G=Y.items.find((J)=>J.field==="status");if(!G||typeof G.toString!=="string")continue;Q.push({issueId:$.id,issueKey:$.key,toStatus:G.toString,changelogId:Y.id})}return Q.sort((Y,G)=>Number(Y.changelogId)-Number(G.changelogId))}function eB6($){return`Jira ${$.key}: ${$.summary}`}async function hT0($,Z,X){if(!Z.enabled)return"disabled";let Q=Z.organizationId,Y=await $.storage.jiraIntegrations.getAutomation(Q,X.toStatus);if(!Y)return"no_rule";let G=new GG(Z.siteUrl,Z.email,Z.apiToken),J=await eD0(G,Z.siteUrl,X.issueId),W=await $O6($,Z,X,J);if(!await $.storage.jiraIntegrations.claimTrigger(Q,X.issueId,X.changelogId))return"duplicate";let F=await $.storage.taskBoard.update(W.id,Q,{assigneeId:d$,assignedBy:Z.createdBy},Z.createdBy);try{await ZW($,F,{instruction:Y.prompt??aB6,source:{kind:"jira",issueKey:J.key,title:eB6(J),body:`${$w0(J)}
|
|
2986
2986
|
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as he,b as ue,j as o,v as Ae,ab as Ie,B as le,b3 as Te,W as ye,n as Le,a as Fe,r as Q,m as ke,K as xe,e as Ee,o as U,t as pe,l as Pe,b9 as Ge,P as de}from"./index-PqfClboL.js";import{a as ce,b as we,D as ge,c as fe}from"./dropdown-menu-Yn3mK79I.js";import{b as Me}from"./Users03-D0VbxK_7.js";import{G as ve,b as ze,a as Oe}from"./github-repo-picker-EcTfqXw_.js";import{b as Be,a as Ue,c as Re}from"./use-virtual-mcp-BksmT3bT.js";import{i as $e}from"./DotsVertical-Csr6l19K.js";import{a as Ve}from"./Settings02-CdkkNZQs.js";import{s as He}from"./Trash01-BiGnC-j2.js";import{p as Ke,f as je}from"./pt-BR-CLy76QW2.js";import{A as qe,b9 as Qe}from"./agent-icon-72FlHM-8.js";import{u as _e}from"./use-navigate-to-agent-C-nz-Qsl.js";import{l as Je}from"./use-organization-settings-YKFwQGNn.js";import{E as We}from"./empty-state-DTBt1PEx.js";import{u as Ye}from"./use-create-virtual-mcp-CZJOLPMm.js";import{u as Xe}from"./use-connection-amUUqPK2.js";import{u as be}from"./use-mcp-client-DJ1XmaTL.js";import{S as Ze}from"./constants-DNuUCxmW.js";import{f as et,g as tt}from"./thread-intent-BXltPzDX.js";import{b as ot,f as st,a as it,G as rt,p as nt}from"./provision-repo-scoped-github-connection-WQFARyHG.js";import{D as lt,b as at,c as ct,d as mt,e as dt}from"./dialog-DMyJgxgJ.js";import{i as ut}from"./ArrowLeft-BWSnRuGm.js";import{C as pt}from"./collection-search-BrUxTz45.js";import{c as gt,d as ft,b as ht,f as xt,g as jt,e as bt,a as Ct,A as Dt}from"./alert-dialog-DY5pueun.js";import{S as yt}from"./search-input-DzDwGhUj.js";import{s as Ce}from"./Plus-DluN38us.js";import{u as wt}from"./use-debounced-value-Bp44IQzu.js";import"./Check-tzg1v70M.js";import"./ChevronRight-CiQ4250Y.js";import"./authenticate-and-persist-oauth-D6lfMerI.js";import"./mcp-oauth-EPG_9QaY.js";import"./auth-CRRmnvXP.js";import"./LinkExternal01-ItrpBJnM.js";import"./Share07-CQi_kYTg.js";import"./use-mcp-tools-DrikIu-o.js";import"./extract-connection-data-BJMOxVAc.js";import"./metadata-dUsYcpuu.js";import"./connection-Cdt4e_MW.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./AlertCircle-Bs6oknH_.js";import"./Tool01-UNDZEmAI.js";import"./ArrowUp--KPYS_Zx.js";import"./Tool02-DLBy4do6.js";import"./XCircle-DpU-0ryx.js";import"./TrendUp01-DQn6MXk1.js";import"./ZoomOut-JTfIuUYt.js";import"./CheckCircle-8VMJtbLE.js";import"./ChevronUp-CdsnYS3o.js";import"./ChevronSelectorVertical-BoLsghjN.js";import"./UserSquare-hx_yDjx2.js";import"./Copy01-BMb_uucS.js";import"./CreditCard01-CYcMMyuv.js";import"./Download01-DC7Ed5MF.js";import"./Eye-D3-C_xXn.js";import"./GitBranch01-BBK46z_T.js";import"./Globe01-DZmHtz0b.js";import"./XClose-BPl5N5wQ.js";import"./HardDrive-C5hOZFs-.js";import"./Image01-DwIAdAUT.js";import"./Key01-bUGu_NLF.js";import"./Link01-CYHfOeCn.js";import"./Monitor01-B8OxufXb.js";import"./Sun-DqwL2RBY.js";import"./Package-B1Q6V5jC.js";import"./Palette-CmDDPB-1.js";import"./Play-Cebbxrf7.js";import"./SearchMd-Dtd4_W0w.js";import"./Shield01-nF6J5QH3.js";import"./Stars01-BkXOAWkF.js";import"./Upload01-CEzfFT4A.js";import"./User01-C7HywlOg.js";import"./Users01-DSJGRawE.js";import"./Zap-9WaWy-XB.js";import"./use-destination-route-C9WCN5J4.js";import"./hooks-g1jnmSoE.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CU_zK481.js";import"./task-board-Cu8abk2x.js";import"./schema-CExEiY9w.js";import"./github-repo-COLY3wWI.js";import"./slugify-CEUa2lfQ.js";function De(t){const e=he.c(26),{onCreateFromScratch:r,onImportGitHub:i,onImportDeco:l,isCreating:b,align:y,side:M,showBetaBadge:f,showDecoImport:w}=t,v=y===void 0?"end":y,p=ue();let d;e[0]===Symbol.for("react.memo_cache_sentinel")?(d=o.jsx(Me,{size:14}),e[0]=d):d=e[0];let g;e[1]!==p?(g=p("common.createAgentDropdown.createFromScratch"),e[1]=p,e[2]=g):g=e[2];let c;e[3]!==b||e[4]!==r||e[5]!==g?(c=o.jsxs(ce,{disabled:b,onClick:r,children:[d,g]}),e[3]=b,e[4]=r,e[5]=g,e[6]=c):c=e[6];let _;e[7]===Symbol.for("react.memo_cache_sentinel")?(_=o.jsx(ve,{className:"size-3.5"}),e[7]=_):_=e[7];let m;e[8]!==p?(m=p("common.createAgentDropdown.importFromGitHub"),e[8]=p,e[9]=m):m=e[9];let n;e[10]!==f?(n=f&&o.jsx("span",{className:"ml-auto text-[10px] font-medium text-muted-foreground bg-muted rounded px-1 py-0.5",children:"Beta"}),e[10]=f,e[11]=n):n=e[11];let a;e[12]!==i||e[13]!==m||e[14]!==n?(a=o.jsxs(ce,{onClick:i,children:[_,m,n]}),e[12]=i,e[13]=m,e[14]=n,e[15]=a):a=e[15];let u;e[16]!==l||e[17]!==w||e[18]!==p?(u=w&&o.jsxs(ce,{onClick:l,children:[o.jsx("img",{src:"/logos/deco%20logo.svg",alt:"deco.cx",className:"size-3.5"}),p("common.createAgentDropdown.importFromDeco")]}),e[16]=l,e[17]=w,e[18]=p,e[19]=u):u=e[19];let h;return e[20]!==v||e[21]!==M||e[22]!==c||e[23]!==a||e[24]!==u?(h=o.jsxs(we,{side:M,align:v,className:"w-48",children:[c,a,u]}),e[20]=v,e[21]=M,e[22]=c,e[23]=a,e[24]=u,e[25]=h):h=e[25],h}function vt(t){const e=he.c(50),{project:r,lastUsedAt:i,onDeleteClick:l}=t,b=_e(),y=ue(),[M]=Ae(),f=M.language==="pt-BR"?Ke:void 0,w=r.metadata?.ui?.layout;let v;e[0]!==w?(v=Ie(w),e[0]=w,e[1]=v):v=e[1];const p=v;let d;e[2]!==p||e[3]!==b||e[4]!==r.id?(d=()=>b(r.id,{panel:p}),e[2]=p,e[3]=b,e[4]=r.id,e[5]=d):d=e[5];let g;e[6]!==r.title||e[7]!==d?(g=o.jsx("button",{type:"button",onClick:d,className:"absolute inset-0 z-0","aria-label":r.title}),e[6]=r.title,e[7]=d,e[8]=g):g=e[8];let c;e[9]!==r.icon||e[10]!==r.title?(c=o.jsx(qe,{icon:r.icon,name:r.title,size:"sm",className:"shrink-0 shadow-sm"}),e[9]=r.icon,e[10]=r.title,e[11]=c):c=e[11];let _;e[12]===Symbol.for("react.memo_cache_sentinel")?(_=o.jsx(ge,{asChild:!0,children:o.jsx(le,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",children:o.jsx($e,{size:20})})}),e[12]=_):_=e[12];let m;e[13]!==b||e[14]!==r.id?(m=()=>b(r.id,{panel:"settings"}),e[13]=b,e[14]=r.id,e[15]=m):m=e[15];let n;e[16]===Symbol.for("react.memo_cache_sentinel")?(n=o.jsx(Ve,{size:16}),e[16]=n):n=e[16];let a;e[17]!==m?(a=o.jsxs(ce,{onClick:m,children:[n,"Settings"]}),e[17]=m,e[18]=a):a=e[18];let u;e[19]!==l?(u=l&&o.jsxs(ce,{variant:"destructive",onClick:C=>{C.stopPropagation(),l(C)},children:[o.jsx(He,{size:16}),"Delete"]}),e[19]=l,e[20]=u):u=e[20];let h;e[21]!==u||e[22]!==a?(h=o.jsx("div",{className:"relative z-10 pointer-events-auto transition-opacity sm:opacity-0 sm:group-hover:opacity-100",children:o.jsxs(fe,{children:[_,o.jsxs(we,{align:"end",children:[a,u]})]})}),e[21]=u,e[22]=a,e[23]=h):h=e[23];let x;e[24]!==h||e[25]!==c?(x=o.jsxs("div",{className:"flex items-start justify-between",children:[c,h]}),e[24]=h,e[25]=c,e[26]=x):x=e[26];let z;e[27]!==r.title?(z=o.jsx("div",{className:"flex items-center gap-2 min-w-0",children:o.jsx("h3",{className:"text-sm font-medium text-foreground truncate",children:r.title})}),e[27]=r.title,e[28]=z):z=e[28];const E=r.description||"No description";let P;e[29]!==E?(P=o.jsx("p",{className:"text-sm text-muted-foreground line-clamp-2",children:E}),e[29]=E,e[30]=P):P=e[30];let S;e[31]!==z||e[32]!==P?(S=o.jsxs("div",{className:"flex flex-col gap-1",children:[z,P]}),e[31]=z,e[32]=P,e[33]=S):S=e[33];let I;e[34]!==x||e[35]!==S?(I=o.jsxs("div",{className:"flex flex-col gap-3 p-4.5",children:[x,S]}),e[34]=x,e[35]=S,e[36]=I):I=e[36];let T;e[37]!==i||e[38]!==f||e[39]!==r.updated_at||e[40]!==y?(T=i?y("home.projectCard.lastUsed",{time:je(new Date(i),{addSuffix:!0,locale:f})}):y("home.projectCard.updated",{time:je(new Date(r.updated_at),{addSuffix:!0,locale:f})}),e[37]=i,e[38]=f,e[39]=r.updated_at,e[40]=y,e[41]=T):T=e[41];let N;e[42]!==T?(N=o.jsx("div",{className:"border-t border-border mt-auto",children:o.jsx("div",{className:"h-10 flex items-center px-4.5",children:o.jsx("p",{className:"text-xs text-muted-foreground",children:T})})}),e[42]=T,e[43]=N):N=e[43];let j;e[44]!==I||e[45]!==N?(j=o.jsxs("div",{className:"flex flex-col flex-1 pointer-events-none",children:[I,N]}),e[44]=I,e[45]=N,e[46]=j):j=e[46];let s;return e[47]!==j||e[48]!==g?(s=o.jsxs(Te,{className:"relative transition-colors group overflow-hidden flex flex-col h-full hover:bg-muted/50",children:[g,j]}),e[47]=j,e[48]=g,e[49]=s):s=e[49],s}const _t="deco-sites";function St(t){if(!t||typeof t!="object")return null;const e=t.github;if(!e||typeof e!="object")return null;const r=e.owner,i=e.repo;return typeof r!="string"||typeof i!="string"||r.length===0||i.length===0?null:{owner:r,repo:i}}function Nt(t,e){const r=e?St(e):null,i=r?.owner??_t,l=r?.repo??t;return{owner:i,name:l,url:`https://github.com/${i}/${l}`}}function At(t){return t.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")}async function Se(t,e,r){const i=await fetch(t,e),l=await i.json().catch(()=>({}));if(!i.ok)throw new Error(l.error??`${r} (${i.status})`);return l}function It(t){return Se(`/api/${t}/deco-sites`,void 0,"Failed to load sites")}function Tt({open:t,onOpenChange:e,onBack:r}){const i=ue(),{org:l}=ye(),b=_e(),y=Le(),{data:M}=Fe.useSession(),[f,w]=Q.useState(null),[v,p]=Q.useState(null),[d,g]=Q.useState(""),c=be({connectionId:Ze,orgId:l.id,orgSlug:l.slug}),_=Xe({slug:"mcp-github"}),m=ot(_),n=ze({enabled:t&&m.length===0}),a=m.length===1?m[0]??null:v,u=m.length>1&&!a,h=be({connectionId:a?.id??"",orgId:l.id,orgSlug:l.slug}),x=t&&m.length===0&&(n.status==="installing"||n.status==="authenticating"||n.status==="idle"),{data:z,isLoading:E,error:P}=ke({queryKey:xe.decoSites(M?.user?.email),queryFn:()=>It(l.slug),enabled:t&&!!M?.user?.email,staleTime:6e4,retry:!1}),S=z?.sites??[],I=s=>{s||(w(null),p(null),g("")),e(s)},T=S.filter(s=>s.name.toLowerCase().includes(d.toLowerCase())||(s.domains?.[0]?.domain?.toLowerCase().includes(d.toLowerCase())??!1)),N=!f||T.some(s=>s.name===f),j=Ee({mutationFn:async s=>{if(!a)throw new Error(i("common.importFromDecoDialog.githubNotConnected"));U("deco_site_import_started",{site_name:s});const{installations:C}=await st(k=>c.callTool(k),a.id),L=S.find(k=>k.name===s);if(!L)throw new Error(i("common.importFromDecoDialog.siteNoLongerAvailable"));const D=Nt(s,L.metadata),F=it(C,D.owner);if(!F)throw new Error(i("common.importFromDecoDialog.installGithubApp",{owner:D.owner,installUrl:rt}));let O=null,K=null;const ae=async()=>{K&&await c.callTool({name:"COLLECTION_VIRTUAL_MCP_DELETE",arguments:{id:K}}).catch(()=>{}),O&&await c.callTool({name:"COLLECTION_CONNECTIONS_DELETE",arguments:{id:O,force:!0}}).catch(()=>{})};try{const k=await Se(`/api/${l.slug}/deco-sites/prepare`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({siteName:s})},i("common.importFromDecoDialog.failedToPrepareImport")),{childConnectionId:B,reused:H}=await nt({orgSlug:l.slug,sourceConnection:a,installationId:F.installationId,owner:D.owner,repo:D.name,githubCallTool:q=>h.callTool(q),selfCallTool:q=>c.callTool(q)});O=H?null:B;const R=k.icon??null,J=At(s),W=s.toLowerCase(),$=et(s),V=await c.callTool({name:"COLLECTION_VIRTUAL_MCP_CREATE",arguments:{data:{title:s,description:"Imported from deco.cx",pinned:!1,icon:R??null,metadata:{instructions:null,enabled_plugins:[],siteSlug:W,previewServerUrl:$,productionUrl:$,githubRepo:{owner:D.owner,name:D.name,url:D.url,installationId:F.installationId,connectionId:B},ui:{banner:null,bannerColor:"#22C55E",icon:R,themeColor:"#22C55E",slug:J,pinnedViews:null,layout:{defaultMainView:{type:"site-editor"},chatDefaultOpen:!1}}},connections:[{connection_id:B}]}}}),G=V.structuredContent??V;if(!G.item?.id)throw new Error(i("common.importFromDecoDialog.failedToCreateAgent"));return K=G.item.id,{slug:J,virtualMcpId:G.item.id,item:G.item}}catch(k){throw await ae(),k}},onSuccess:({slug:s,virtualMcpId:C,item:L})=>{U("deco_site_import_succeeded",{site_name:L.title,virtual_mcp_id:C,slug:s}),y.setQueryData(xe.collectionItem(c,l.id,"","VIRTUAL_MCP",C),{item:L}),y.invalidateQueries({predicate:D=>{const F=D.queryKey;return F[1]===l.id&&F[3]==="collection"&&F[4]==="VIRTUAL_MCP"}}),pe.success(i("common.importFromDecoDialog.importSuccess",{slug:s})),I(!1),b(C)},onError:s=>{U("deco_site_import_failed",{error:s instanceof Error?s.message:"Unknown error"}),pe.error(i("common.importFromDecoDialog.importFailed",{error:(s instanceof Error?s.message:i("common.importFromDecoDialog.unknownError"))??""}))}});return o.jsx(lt,{open:t,onOpenChange:I,children:o.jsxs(at,{className:"sm:max-w-[900px] p-0 gap-0 overflow-hidden",children:[o.jsx(ct,{className:"sr-only",children:o.jsx(mt,{children:i("common.importFromDecoDialog.title")})}),o.jsxs("div",{className:"flex items-center h-12 border-b border-border px-4 gap-3",children:[r&&o.jsx("button",{type:"button",onClick:r,className:"flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors","aria-label":i("common.importFromDecoDialog.goBack"),children:o.jsx(ut,{size:18})}),o.jsx("span",{className:"text-sm font-medium text-foreground",children:i("common.importFromDecoDialog.title")})]}),o.jsx("div",{children:o.jsx(pt,{value:d,onChange:g,placeholder:i("common.importFromDecoDialog.searchPlaceholder"),onKeyDown:s=>{s.key==="Escape"&&g("")}})}),o.jsxs("div",{className:"pb-0 min-h-[300px]",children:[n.status==="error"&&o.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 h-48 px-8 text-center",children:[o.jsx("p",{className:"text-sm text-destructive",children:n.error??i("common.importFromDecoDialog.failedToConnectGithub")}),o.jsx(le,{variant:"outline",size:"sm",onClick:n.retry,children:i("common.importFromDecoDialog.retryGithubSetup")})]}),x&&n.status!=="error"&&o.jsx("div",{className:"flex items-center justify-center h-48 text-sm text-muted-foreground",children:i("common.importFromDecoDialog.settingUpGithub")}),u&&!x&&n.status!=="error"&&o.jsxs("div",{className:"flex flex-col py-2",children:[o.jsx("div",{className:"px-8 py-2",children:o.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:i("common.importFromDecoDialog.selectGithubConnection")})}),m.map(s=>o.jsxs("button",{type:"button",onClick:()=>p(s),className:"flex items-center gap-3 px-8 py-3 hover:bg-accent transition-colors text-left",children:[s.icon?o.jsx("img",{src:s.icon,alt:s.title,className:"size-7 rounded-full shrink-0"}):o.jsx("div",{className:"size-7 rounded-full bg-muted flex items-center justify-center shrink-0",children:o.jsx(ve,{className:"size-3.5 text-muted-foreground"})}),o.jsx("span",{className:"text-sm font-medium",children:s.title})]},s.id))]}),E&&!x&&n.status!=="error"&&o.jsx("div",{className:"flex items-center justify-center h-48 text-sm text-muted-foreground",children:i("common.importFromDecoDialog.loadingSites")}),!E&&!x&&!u&&n.status!=="error"&&!P&&S.length===0&&o.jsx("div",{className:"flex items-center justify-center h-48 text-sm text-muted-foreground",children:i("common.importFromDecoDialog.noSitesFound")}),!E&&!x&&!u&&n.status!=="error"&&S.length>0&&o.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-4 max-h-[420px] overflow-y-auto py-4 px-8 [scrollbar-gutter:stable]",children:[T.length===0&&o.jsx("p",{className:"col-span-3 text-sm text-muted-foreground text-center py-8",children:i("common.importFromDecoDialog.noSitesMatch",{search:d})}),T.map(s=>{const C=tt(s.domains),L=f===s.name;return o.jsxs("button",{type:"button",onClick:()=>w(s.name),className:Pe("flex flex-col rounded-xl border overflow-hidden text-left transition-all cursor-pointer",L?"border-primary ring-1 ring-primary":"border-border hover:border-muted-foreground/40"),children:[o.jsx("div",{className:"w-full aspect-video bg-muted overflow-hidden",children:s.thumb_url?o.jsx("img",{src:s.thumb_url,alt:s.name,className:"w-full h-full object-cover",loading:"lazy"}):o.jsx("div",{className:"w-full h-full bg-muted"})}),o.jsxs("div",{className:"px-4 py-3",children:[o.jsx("p",{className:"text-sm font-medium text-foreground truncate",children:s.name}),C&&o.jsx("p",{className:"text-xs text-muted-foreground truncate mt-0.5",children:C})]})]},s.name)})]})]}),o.jsxs(dt,{className:"px-8 py-5 border-t border-border",children:[o.jsx(le,{variant:"outline",onClick:()=>I(!1),disabled:j.isPending,children:i("common.importFromDecoDialog.cancel")}),o.jsx(le,{disabled:!f||!N||j.isPending||E||x||u||!a||n.status==="error",onClick:()=>f&&j.mutate(f),children:j.isPending?i("common.importFromDecoDialog.importing"):i("common.importFromDecoDialog.import")})]})]})})}function ns(){const t=he.c(82),e=ue(),{org:r}=ye(),[i,l]=Q.useState(""),b=wt(i,300);let y;t[0]!==b?(y={searchTerm:b},t[0]=b,t[1]=y):y=t[1];const M=Be(y),f=Ue();let w;t[2]===Symbol.for("react.memo_cache_sentinel")?(w={navigateOnCreate:!0},t[2]=w):w=t[2];const{createVirtualMCP:v,isCreating:p}=Ye(w),[d,g]=Q.useState(null),[c,_]=Q.useState(!1),[m,n]=Q.useState(!1),{granted:a}=Ge("agents:manage"),u=Je();let h;t[3]!==r?(h=A=>A.id!==r.id,t[3]=r,t[4]=h):h=t[4];const x=M.filter(h),{data:z}=Re(x.map(Lt));let E;t[5]!==f||t[6]!==d||t[7]!==e?(E=async()=>{if(!d)return;const{id:A,title:Ne}=d;g(null);try{await f.delete.mutateAsync(A),U("agent_deleted",{agent_id:A,source:"agents_list"}),pe.success(e("routes.agentsList.deletedAgent",{title:Ne}))}catch{}},t[5]=f,t[6]=d,t[7]=e,t[8]=E):E=t[8];const P=E,S=de,I=de,T=de;let N;t[9]!==e?(N=e("routes.agentsList.title"),t[9]=e,t[10]=N):N=t[10];let j;t[11]!==N?(j=o.jsx(de.Title,{children:N}),t[11]=N,t[12]=j):j=t[12];let s;t[13]!==e?(s=e("routes.agentsList.searchPlaceholder"),t[13]=e,t[14]=s):s=t[14];let C;t[15]===Symbol.for("react.memo_cache_sentinel")?(C=A=>{A.key==="Escape"&&(l(""),A.target.blur())},t[15]=C):C=t[15];let L;t[16]!==i||t[17]!==s?(L=o.jsx(yt,{value:i,onChange:l,placeholder:s,className:"w-full md:w-[375px]",onKeyDown:C}),t[16]=i,t[17]=s,t[18]=L):L=t[18];let D;t[19]!==a||t[20]!==v||t[21]!==p||t[22]!==u||t[23]!==e?(D=a&&o.jsxs(fe,{children:[o.jsx(ge,{asChild:!0,children:o.jsxs(le,{size:"sm",children:[o.jsx(Ce,{size:14}),e("routes.agentsList.createAgent")]})}),o.jsx(De,{onCreateFromScratch:()=>{U("agent_create_clicked",{source:"agents_list",method:"scratch"}),v()},onImportGitHub:()=>{U("agent_create_clicked",{source:"agents_list",method:"github"}),n(!0)},onImportDeco:()=>{U("agent_create_clicked",{source:"agents_list",method:"deco"}),_(!0)},isCreating:p,align:"end",showDecoImport:u})]}),t[19]=a,t[20]=v,t[21]=p,t[22]=u,t[23]=e,t[24]=D):D=t[24];let F;t[25]!==L||t[26]!==D?(F=o.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[L,D]}),t[25]=L,t[26]=D,t[27]=F):F=t[27];let O;t[28]!==F||t[29]!==j?(O=o.jsxs("div",{className:"flex flex-col gap-6",children:[j,F]}),t[28]=F,t[29]=j,t[30]=O):O=t[30];const K=x.length===0&&o.jsx("div",{className:"flex items-center justify-center py-20",children:o.jsx(We,{image:o.jsx(Qe,{size:48,className:"text-muted-foreground"}),title:e(i?"routes.agentsList.noAgentsFound":"routes.agentsList.noAgentsYet"),description:i?e("routes.agentsList.noAgentsMatchSearch",{search:i}):e(a?"routes.agentsList.createAgentToGetStarted":"routes.agentsList.askAdminToCreate"),actions:!i&&a&&o.jsxs(fe,{children:[o.jsx(ge,{asChild:!0,children:o.jsxs(le,{size:"sm",children:[o.jsx(Ce,{size:14}),e("routes.agentsList.createAgent")]})}),o.jsx(De,{onCreateFromScratch:()=>{U("agent_create_clicked",{source:"agents_list_empty",method:"scratch"}),v()},onImportGitHub:()=>{U("agent_create_clicked",{source:"agents_list_empty",method:"github"}),n(!0)},onImportDeco:()=>{U("agent_create_clicked",{source:"agents_list_empty",method:"deco"}),_(!0)},isCreating:p,align:"center",showBetaBadge:!0,showDecoImport:u})]})})}),ae=x.length>0&&o.jsxs("div",{className:"mt-6 @container",children:[o.jsx("h3",{className:"text-sm font-medium text-muted-foreground mb-3",children:e("routes.agentsList.agentsHeading")}),o.jsx("div",{className:"grid grid-cols-1 @lg:grid-cols-2 @4xl:grid-cols-3 @6xl:grid-cols-4 gap-4",children:x.map(A=>o.jsx(vt,{project:A,lastUsedAt:z?.get(A.id)?.last_used_at,onDeleteClick:a?()=>g({id:A.id,title:A.title}):void 0},A.id))})]});let k;t[31]!==O||t[32]!==K||t[33]!==ae||t[34]!==T.Body?(k=o.jsxs(T.Body,{children:[O,K,ae]}),t[31]=O,t[32]=K,t[33]=ae,t[34]=T.Body,t[35]=k):k=t[35];let B;t[36]!==k||t[37]!==I.Content?(B=o.jsx(I.Content,{children:k}),t[36]=k,t[37]=I.Content,t[38]=B):B=t[38];let H;t[39]!==m?(H=o.jsx(Oe,{open:m,onOpenChange:n}),t[39]=m,t[40]=H):H=t[40];let R;t[41]!==c?(R=o.jsx(Tt,{open:c,onOpenChange:_}),t[41]=c,t[42]=R):R=t[42];const J=!!d;let W;t[43]===Symbol.for("react.memo_cache_sentinel")?(W=A=>!A&&g(null),t[43]=W):W=t[43];let $;t[44]!==e?($=e("routes.agentsList.deleteAgentTitle"),t[44]=e,t[45]=$):$=t[45];let V;t[46]!==$?(V=o.jsx(gt,{children:$}),t[46]=$,t[47]=V):V=t[47];let G;t[48]!==e?(G=e("routes.agentsList.deleteAgentDescription"),t[48]=e,t[49]=G):G=t[49];const q=d?.title;let Y;t[50]!==q?(Y=o.jsx("span",{className:"font-medium text-foreground",children:q}),t[50]=q,t[51]=Y):Y=t[51];let X;t[52]!==G||t[53]!==Y?(X=o.jsxs(ft,{children:[G," ",Y,"."]}),t[52]=G,t[53]=Y,t[54]=X):X=t[54];let Z;t[55]!==V||t[56]!==X?(Z=o.jsxs(ht,{children:[V,X]}),t[55]=V,t[56]=X,t[57]=Z):Z=t[57];let ee;t[58]!==e?(ee=e("routes.agentsList.cancelButton"),t[58]=e,t[59]=ee):ee=t[59];let te;t[60]!==ee?(te=o.jsx(xt,{children:ee}),t[60]=ee,t[61]=te):te=t[61];let oe;t[62]!==e?(oe=e("routes.agentsList.deleteButton"),t[62]=e,t[63]=oe):oe=t[63];let se;t[64]!==P||t[65]!==oe?(se=o.jsx(jt,{onClick:P,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:oe}),t[64]=P,t[65]=oe,t[66]=se):se=t[66];let ie;t[67]!==te||t[68]!==se?(ie=o.jsxs(bt,{children:[te,se]}),t[67]=te,t[68]=se,t[69]=ie):ie=t[69];let re;t[70]!==Z||t[71]!==ie?(re=o.jsxs(Ct,{children:[Z,ie]}),t[70]=Z,t[71]=ie,t[72]=re):re=t[72];let ne;t[73]!==J||t[74]!==re?(ne=o.jsx(Dt,{open:J,onOpenChange:W,children:re}),t[73]=J,t[74]=re,t[75]=ne):ne=t[75];let me;return t[76]!==S||t[77]!==B||t[78]!==H||t[79]!==R||t[80]!==ne?(me=o.jsxs(S,{children:[B,H,R,ne]}),t[76]=S,t[77]=B,t[78]=H,t[79]=R,t[80]=ne,t[81]=me):me=t[81],me}function Lt(t){return t.id}export{ns as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as J,b as se,as as Te,ar as Oe,r as W,j as s,at as et,ds as Fe,t as X,dr as Ie,dq as ke,b8 as Ue,W as be,a7 as re,n as je,e as le,K as te,m as Ke,b5 as $e,l as we,B as ee,v as He,o as Ae,h as tt,ae as st,ag as Pe,du as it}from"./index-PqfClboL.js";import{i as lt}from"./AlertCircle-Bs6oknH_.js";import{u as qe,b as _e,i as rt,c as ot,p as nt,d as De,e as at,f as ze}from"./use-ai-providers-d40kZQC-.js";import{i as ct}from"./CheckCircle-8VMJtbLE.js";import{b as dt,g as mt}from"./use-organization-settings-YKFwQGNn.js";import{S as ut}from"./schema-CExEiY9w.js";import{c as ft,d as Be,P as pt,C as Ee}from"./select-model-B87liE0s.js";import{u as gt}from"./use-debounced-autosave-zxAYDFyH.js";import{I as ye}from"./input-D7VtAJjJ.js";import{a as Re,T as xt}from"./toggle-group-B-2KCs2i.js";import{c as Ve,d as Le,b as Qe,f as Ge,g as Ye,e as We,a as Je,A as Xe}from"./alert-dialog-DY5pueun.js";import{s as ht}from"./Plus-DluN38us.js";import{p as vt,f as yt}from"./pt-BR-CLy76QW2.js";import{a as bt}from"./Tool01-UNDZEmAI.js";import{s as jt}from"./Trash01-BiGnC-j2.js";import{A as St}from"./avatar-Br5BYZeI.js";import{P as Ct}from"./ai-providers-logos-DD3qZ33J.js";import{i as _t}from"./Settings02-CdkkNZQs.js";import{s as Nt}from"./Eye-D3-C_xXn.js";import{d as Pt,c as It,b as kt,D as Kt,e as Dt}from"./dialog-DMyJgxgJ.js";import{R as wt}from"./require-capability-Dg6MWzmr.js";import"./constants-DNuUCxmW.js";import"./task-board-Cu8abk2x.js";import"./drawer-DYxoRn2r.js";import"./chat-context-Cy0rls8c.js";import"./use-panel-navigate-CIgiHkeA.js";import"./use-destination-route-C9WCN5J4.js";import"./thread-route-CqJiATkn.js";import"./Check-tzg1v70M.js";import"./Copy01-BMb_uucS.js";import"./Download01-DC7Ed5MF.js";import"./thread-intent-BXltPzDX.js";import"./slugify-CEUa2lfQ.js";import"./hooks-g1jnmSoE.js";import"./use-mcp-client-DJ1XmaTL.js";import"./auth-CRRmnvXP.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CU_zK481.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BksmT3bT.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-2Ng0Wxeb.js";import"./checkbox-HAQ_nhYr.js";import"./select-fQpkdmCP.js";import"./ChevronUp-CdsnYS3o.js";import"./ArrowLeft-BWSnRuGm.js";import"./ChevronSelectorVertical-BoLsghjN.js";import"./Key01-bUGu_NLF.js";import"./SearchMd-Dtd4_W0w.js";import"./Monitor01-B8OxufXb.js";import"./ChevronRight-CiQ4250Y.js";import"./Image01-DwIAdAUT.js";import"./Stars01-BkXOAWkF.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./User01-C7HywlOg.js";import"./access-gate-C43dXf2x.js";import"./capability-load-error-ClieXywX.js";const At=e=>e.capabilities?.includes("image")===!0,Et=e=>rt(e),Rt=e=>ot(e),Mt=[{key:"fast",filter:void 0},{key:"smart",filter:void 0},{key:"thinking",filter:void 0},{key:"image",filter:At},{key:"web_search",filter:Et},{key:"deep_research",filter:Rt}];function Tt(e){const t=J.c(30),{slot:i,onSlotChange:o,filterModels:n,defaultKeyId:c}=e,a=qe(),l=a.some(C=>C.id===i?.keyId)?i?.keyId:null,[u,_]=W.useState(l??c);let b,r;t[0]!==l?(b=()=>{l&&_(l)},r=[l],t[0]=l,t[1]=b,t[2]=r):(b=t[1],r=t[2]),W.useEffect(b,r);let p;t[3]!==a||t[4]!==c||t[5]!==u?(p=a.some(C=>C.id===u)?u:c,t[3]=a,t[4]=c,t[5]=u,t[6]=p):p=t[6];const m=p;let f;t[7]!==m||t[8]!==a?(f=m?a.find(C=>C.id===m):null,t[7]=m,t[8]=a,t[9]=f):f=t[9];const P=f,{models:h,isLoading:v}=_e(n?m??void 0:void 0),g=n?v||h.some(n):!0;let N;t[10]!==i||t[11]!==P?.providerId||t[12]!==l?(N=i&&l?{modelId:i.modelId,title:i.title??i.modelId,keyId:i.keyId,providerId:P?.providerId??"deco",description:null,logo:null,capabilities:[],limits:null,costs:null}:null,t[10]=i,t[11]=P?.providerId,t[12]=l,t[13]=N):N=t[13];const k=N,x=se();if(n&&!g){let C;t[14]!==x?(C=x("settings.simpleModeSection.notAvailableWithCurrentProvider"),t[14]=x,t[15]=C):C=t[15];let K;return t[16]!==C?(K=s.jsx("p",{className:"text-xs text-muted-foreground italic",children:C}),t[16]=C,t[17]=K):K=t[17],K}let j;t[18]!==x?(j=x("settings.simpleModeSection.pickModel"),t[18]=x,t[19]=j):j=t[19];let S;t[20]===Symbol.for("react.memo_cache_sentinel")?(S=C=>_(C),t[20]=S):S=t[20];let d;t[21]!==m||t[22]!==o?(d=C=>{const K=C.keyId??m??"";_(K),o({keyId:K,modelId:C.modelId,title:C.title})},t[21]=m,t[22]=o,t[23]=d):d=t[23];let y;return t[24]!==m||t[25]!==n||t[26]!==k||t[27]!==j||t[28]!==d?(y=s.jsx(ft,{variant:"bordered",placeholder:j,model:k,credentialId:m,filterModels:n,onCredentialChange:S,onModelChange:d}),t[24]=m,t[25]=n,t[26]=k,t[27]=j,t[28]=d,t[29]=y):y=t[29],y}function Ot(e){const t=J.c(10),{isPending:i,showSaved:o}=e,n=se();if(i){let c;t[0]===Symbol.for("react.memo_cache_sentinel")?(c=s.jsx(Ue,{size:12,className:"animate-spin"}),t[0]=c):c=t[0];let a;t[1]!==n?(a=n("settings.simpleModeSection.saving"),t[1]=n,t[2]=a):a=t[2];let l;return t[3]!==a?(l=s.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[c,a]}),t[3]=a,t[4]=l):l=t[4],l}if(o){let c;t[5]===Symbol.for("react.memo_cache_sentinel")?(c=s.jsx(ct,{size:12}),t[5]=c):c=t[5];let a;t[6]!==n?(a=n("settings.simpleModeSection.saved"),t[6]=n,t[7]=a):a=t[7];let l;return t[8]!==a?(l=s.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[c,a]}),t[8]=a,t[9]=l):l=t[9],l}return null}function Ft(){const e=J.c(58),t=se(),i=qe(),o=dt(),n=i.length>0;let c;e[0]===Symbol.for("react.memo_cache_sentinel")?(c=Te(ut),e[0]=c):c=e[0];let a;e[1]!==o?(a={resolver:c,values:o,mode:"onChange"},e[1]=o,e[2]=a):a=e[2];const l=Oe(a),{mutate:u,isPending:_,isSuccess:b}=mt(),r=l.formState.isDirty;let p;e[3]!==l||e[4]!==o||e[5]!==t||e[6]!==u?(p={delayMs:250,save:async()=>{const I=l.getValues();u(I,{onSuccess:()=>l.reset(I,{keepValues:!0}),onError:T=>{l.reset(o),X.error(t("settings.simpleModeSection.failedToSave",{error:T.message}))}})}},e[3]=l,e[4]=o,e[5]=t,e[6]=u,e[7]=p):p=e[7];const{schedule:m}=gt(p),f=i[0],P=i[1],h=i[2],{models:v}=_e(f?.id),{models:g}=_e(P?.id),{models:N}=_e(h?.id);let k,x;e[8]!==l||e[9]!==n?(k=()=>{n||l.reset({tiers:{fast:null,smart:null,thinking:null,image:null,web_search:null,deep_research:null}})},x=[n,l],e[8]=l,e[9]=n,e[10]=k,e[11]=x):(k=e[10],x=e[11]),W.useEffect(k,x);let j;e[12]!==i||e[13]!==l||e[14]!==f||e[15]!==P||e[16]!==h||e[17]!==v||e[18]!==g||e[19]!==N?(j=()=>{const I=l.getValues(),T=new Set(i.map(Ut)),O={};f?.id&&(O[f.id]=v),P?.id&&(O[P.id]=g),h?.id&&(O[h.id]=N);const M=Q=>Q!=null&&!T.has(Q.keyId),D={fast:M(I.tiers.fast)?null:I.tiers.fast,smart:M(I.tiers.smart)?null:I.tiers.smart,thinking:M(I.tiers.thinking)?null:I.tiers.thinking,image:M(I.tiers.image)?null:I.tiers.image,web_search:M(I.tiers.web_search)?null:I.tiers.web_search,deep_research:M(I.tiers.deep_research)?null:I.tiers.deep_research},G=!D.fast||!D.smart||!D.thinking||!D.image||!D.web_search||!D.deep_research,Y=D.fast===I.tiers.fast&&D.smart===I.tiers.smart&&D.thinking===I.tiers.thinking&&D.image===I.tiers.image&&D.web_search===I.tiers.web_search&&D.deep_research===I.tiers.deep_research;if(!G&&Y)return;const z=nt(i,O);l.reset({tiers:{fast:D.fast??z.chat.fast,smart:D.smart??z.chat.smart,thinking:D.thinking??z.chat.thinking,image:D.image??z.image,web_search:D.web_search??z.webSearch,deep_research:D.deep_research??z.deepResearch}},{keepDirty:!0})},e[12]=i,e[13]=l,e[14]=f,e[15]=P,e[16]=h,e[17]=v,e[18]=g,e[19]=N,e[20]=j):j=e[20];const S=f?.id,d=P?.id,y=h?.id;let C;e[21]!==i||e[22]!==l||e[23]!==v||e[24]!==g||e[25]!==N||e[26]!==S||e[27]!==d||e[28]!==y?(C=[l,i,v,g,N,S,d,y],e[21]=i,e[22]=l,e[23]=v,e[24]=g,e[25]=N,e[26]=S,e[27]=d,e[28]=y,e[29]=C):C=e[29],W.useEffect(j,C);let K;e[30]!==t?(K=I=>({fast:t("settings.simpleModeSection.tierFast"),smart:t("settings.simpleModeSection.tierSmart"),thinking:t("settings.simpleModeSection.tierThinking"),image:t("settings.simpleModeSection.tierImage"),web_search:t("settings.simpleModeSection.tierWebSearch"),deep_research:t("settings.simpleModeSection.tierDeepResearch")})[I]||I,e[30]=t,e[31]=K):K=e[31];const A=K;let w;e[32]!==t?(w=I=>({fast:t("settings.simpleModeSection.tierFastDesc"),smart:t("settings.simpleModeSection.tierSmartDesc"),thinking:t("settings.simpleModeSection.tierThinkingDesc"),image:t("settings.simpleModeSection.tierImageDesc"),web_search:t("settings.simpleModeSection.tierWebSearchDesc"),deep_research:t("settings.simpleModeSection.tierDeepResearchDesc")})[I]||"",e[32]=t,e[33]=w):w=e[33];const E=w;let R;e[34]!==t?(R=t("settings.simpleModeSection.defaultModels"),e[34]=t,e[35]=R):R=e[35];let F;e[36]!==t?(F=t("settings.simpleModeSection.modelsPowerDescription"),e[36]=t,e[37]=F):F=e[37];let B;e[38]!==F?(B=s.jsx("p",{className:"text-sm text-muted-foreground",children:F}),e[38]=F,e[39]=B):B=e[39];const L=b&&!r;let U;e[40]!==_||e[41]!==L?(U=s.jsx(Ot,{isPending:_,showSaved:L}),e[40]=_,e[41]=L,e[42]=U):U=e[42];let $;e[43]!==B||e[44]!==U?($=s.jsxs("div",{className:"flex items-center justify-between -mt-2 mb-2",children:[B,U]}),e[43]=B,e[44]=U,e[45]=$):$=e[45];let H;e[46]!==i[0]?.id||e[47]!==l.control||e[48]!==E||e[49]!==A||e[50]!==m?(H=Mt.map(I=>s.jsx(et,{control:l.control,name:`tiers.${I.key}`,render:T=>{const{field:O}=T;return s.jsx(Fe,{title:A(I.key),description:E(I.key),action:s.jsx(Tt,{slot:O.value,defaultKeyId:i[0]?.id??null,filterModels:I.filter,onSlotChange:M=>{O.onChange(M),m()}})})}},I.key)),e[46]=i[0]?.id,e[47]=l.control,e[48]=E,e[49]=A,e[50]=m,e[51]=H):H=e[51];let q;e[52]!==H?(q=s.jsx(Ie,{children:H}),e[52]=H,e[53]=q):q=e[53];let V;return e[54]!==R||e[55]!==$||e[56]!==q?(V=s.jsxs(ke,{title:R,headerClassName:"pl-0",children:[$,q]}),e[54]=R,e[55]=$,e[56]=q,e[57]=V):V=e[57],V}function Ut(e){return e.id}const $t={usd:[10,20,100],brl:[50,100,500]};function Ht(){const e=J.c(30),t=se(),i=re(),[o]=He(),[n,c]=W.useState(!1);let a;e[0]!==t?(a=d=>{X.error(t("settings.decoCreditsHero.topUpFailed",{message:d.message}))},e[0]=t,e[1]=a):a=e[1];const{mutate:l,isPending:u}=le({mutationFn:async d=>{const{url:y}=await i.call("AI_PROVIDER_TOPUP_URL",{providerId:"deco",amountCents:d,currency:m});return y},onSuccess:qt,onError:a}),[_,b]=W.useState(""),[r,p]=W.useState(o.language==="pt-BR"?"brl":"usd"),m=r,f=parseFloat(_),P=!isNaN(f)&&f>=1,h=m==="brl"?"R$":"$";let v;e[2]!==p?(v=d=>{d&&p(d)},e[2]=p,e[3]=v):v=e[3];let g,N;e[4]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx(Re,{value:"usd",className:"px-3.5 text-sm",children:"USD"}),N=s.jsx(Re,{value:"brl",className:"px-3.5 text-sm",children:"BRL"}),e[4]=g,e[5]=N):(g=e[4],N=e[5]);let k;e[6]!==m||e[7]!==v?(k=s.jsxs(xt,{type:"single",variant:"outline",size:"default",value:m,onValueChange:v,children:[g,N]}),e[6]=m,e[7]=v,e[8]=k):k=e[8];let x;e[9]!==m||e[10]!==h||e[11]!==n||e[12]!==u||e[13]!==t||e[14]!==l?(x=!n&&s.jsxs(s.Fragment,{children:[$t[m].map(d=>s.jsxs(ee,{variant:"outline",className:"h-10 px-4 text-sm font-medium tabular-nums",disabled:u,onClick:()=>l(d*100),children:[h,d]},d)),s.jsx(ee,{variant:"ghost",className:"h-10 px-4 text-sm text-muted-foreground",onClick:()=>c(!0),disabled:u,children:t("settings.decoCreditsHero.custom")})]}),e[9]=m,e[10]=h,e[11]=n,e[12]=u,e[13]=t,e[14]=l,e[15]=x):x=e[15];let j;e[16]!==h||e[17]!==_||e[18]!==f||e[19]!==n||e[20]!==P||e[21]!==u||e[22]!==b||e[23]!==t||e[24]!==l?(j=n&&s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"relative max-w-[140px]",children:[s.jsx("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground select-none",children:h}),s.jsx(ye,{type:"number",min:"1",step:"1",placeholder:t("settings.decoCreditsHero.amountPlaceholder"),value:_,onChange:d=>b(d.target.value),className:"h-10 text-sm pl-7",autoFocus:!0})]}),s.jsx(ee,{className:"h-10",disabled:!P||u,onClick:()=>l(Math.round(f*100)),children:u?"...":t("settings.decoCreditsHero.add")}),s.jsx(ee,{variant:"ghost",className:"h-10 text-sm text-muted-foreground",onClick:()=>{c(!1),b("")},children:t("settings.decoCreditsHero.cancel")})]}),e[16]=h,e[17]=_,e[18]=f,e[19]=n,e[20]=P,e[21]=u,e[22]=b,e[23]=t,e[24]=l,e[25]=j):j=e[25];let S;return e[26]!==k||e[27]!==x||e[28]!==j?(S=s.jsx("div",{className:"flex flex-col gap-2.5",children:s.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[k,x,j]})}),e[26]=k,e[27]=x,e[28]=j,e[29]=S):S=e[29],S}function qt(e){e&&window.open(e,"_blank","noopener,noreferrer")}function zt(e){return e<=0?"text-destructive":e<=1?"text-warning":"text-foreground"}function Bt(){const e=J.c(121),t=se(),{org:i}=be(),o=re(),n=je(),c=De();let a;e[0]!==c?(a=c.find(Vt),e[0]=c,e[1]=a):a=e[1];const l=a,[u,_]=W.useState(!1);let b;e[2]!==l||e[3]!==o?(b=async()=>{l&&await o.call("AI_PROVIDER_KEY_DELETE",{keyId:l.id})},e[2]=l,e[3]=o,e[4]=b):b=e[4];let r;e[5]!==i.id||e[6]!==n||e[7]!==t?(r=()=>{n.invalidateQueries({queryKey:te.aiProviderKeys(i.id)}),n.invalidateQueries({queryKey:te.aiProviders(i.id)}),X.success(t("settings.decoCreditsHero.disconnectSuccess")),_(!1)},e[5]=i.id,e[6]=n,e[7]=t,e[8]=r):r=e[8];let p;e[9]!==t?(p=Ze=>{X.error(t("settings.decoCreditsHero.disconnectError",{message:Ze.message}))},e[9]=t,e[10]=p):p=e[10];let m;e[11]!==b||e[12]!==r||e[13]!==p?(m={mutationFn:b,onSuccess:r,onError:p},e[11]=b,e[12]=r,e[13]=p,e[14]=m):m=e[14];const{mutate:f,isPending:P}=le(m);let h;e[15]!==i.id?(h=te.aiProviderCredits(i.id,"deco"),e[15]=i.id,e[16]=h):h=e[16];const v=!!l;let g;e[17]!==o?(g=async()=>{try{return await o.call("AI_PROVIDER_CREDITS",{providerId:"deco"})}catch{return null}},e[17]=o,e[18]=g):g=e[18];let N;e[19]!==h||e[20]!==v||e[21]!==g?(N={queryKey:h,enabled:v,staleTime:6e4,queryFn:g},e[19]=h,e[20]=v,e[21]=g,e[22]=N):N=e[22];const{data:k,isLoading:x,refetch:j,isFetching:S}=Ke(N);if(!l)return null;const d=k?.balanceCents!=null?k.balanceCents/100:null;let y;e[23]!==d?(y=d!=null?`$${d.toFixed(2)}`:"—",e[23]=d,e[24]=y):y=e[24];const C=y;let K;e[25]!==t?(K=t("settings.decoCreditsHero.title"),e[25]=t,e[26]=K):K=e[26];let A;e[27]!==t?(A=t("settings.decoCreditsHero.decoAiGatewayAlt"),e[27]=t,e[28]=A):A=e[28];let w;e[29]!==A?(w=s.jsx("img",{src:"/logos/deco%20logo.svg",alt:A,className:"size-9 rounded-lg object-contain dark:bg-white dark:p-0.5"}),e[29]=A,e[30]=w):w=e[30];let E;e[31]!==t?(E=t("settings.decoCreditsHero.accessModels"),e[31]=t,e[32]=E):E=e[32];let R;e[33]!==E?(R=s.jsx("div",{children:s.jsx("p",{className:"text-xs text-muted-foreground",children:E})}),e[33]=E,e[34]=R):R=e[34];let F;e[35]!==w||e[36]!==R?(F=s.jsxs("div",{className:"flex items-center gap-3",children:[w,R]}),e[35]=w,e[36]=R,e[37]=F):F=e[37];let B;e[38]===Symbol.for("react.memo_cache_sentinel")?(B=()=>_(!0),e[38]=B):B=e[38];let L;e[39]!==t?(L=t("settings.decoCreditsHero.disconnect"),e[39]=t,e[40]=L):L=e[40];let U;e[41]!==P||e[42]!==L?(U=s.jsx(ee,{variant:"ghost",size:"sm",className:"text-xs text-muted-foreground hover:text-destructive",onClick:B,disabled:P,children:L}),e[41]=P,e[42]=L,e[43]=U):U=e[43];let $;e[44]!==F||e[45]!==U?($=s.jsxs("div",{className:"flex items-center justify-between",children:[F,U]}),e[44]=F,e[45]=U,e[46]=$):$=e[46];let H;e[47]!==t?(H=t("settings.decoCreditsHero.disconnectTitle"),e[47]=t,e[48]=H):H=e[48];let q;e[49]!==H?(q=s.jsx(Ve,{children:H}),e[49]=H,e[50]=q):q=e[50];let V;e[51]!==t?(V=t("settings.decoCreditsHero.disconnectDescription"),e[51]=t,e[52]=V):V=e[52];let I;e[53]!==V?(I=s.jsx(Le,{children:V}),e[53]=V,e[54]=I):I=e[54];let T;e[55]!==q||e[56]!==I?(T=s.jsxs(Qe,{children:[q,I]}),e[55]=q,e[56]=I,e[57]=T):T=e[57];let O;e[58]!==t?(O=t("settings.decoCreditsHero.cancelButton"),e[58]=t,e[59]=O):O=e[59];let M;e[60]!==O?(M=s.jsx(Ge,{children:O}),e[60]=O,e[61]=M):M=e[61];let D;e[62]!==f?(D=()=>f(),e[62]=f,e[63]=D):D=e[63];let G;e[64]!==t?(G=t("settings.decoCreditsHero.disconnectButton"),e[64]=t,e[65]=G):G=e[65];let Y;e[66]!==D||e[67]!==G?(Y=s.jsx(Ye,{onClick:D,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:G}),e[66]=D,e[67]=G,e[68]=Y):Y=e[68];let z;e[69]!==M||e[70]!==Y?(z=s.jsxs(We,{children:[M,Y]}),e[69]=M,e[70]=Y,e[71]=z):z=e[71];let Q;e[72]!==T||e[73]!==z?(Q=s.jsxs(Je,{children:[T,z]}),e[72]=T,e[73]=z,e[74]=Q):Q=e[74];let ie;e[75]!==u||e[76]!==Q?(ie=s.jsx(Xe,{open:u,onOpenChange:_,children:Q}),e[75]=u,e[76]=Q,e[77]=ie):ie=e[77];let Z;e[78]!==d||e[79]!==C||e[80]!==S||e[81]!==x?(Z=x||S?s.jsx($e,{className:"h-9 w-24"}):s.jsx("span",{className:we("text-3xl font-semibold tabular-nums tracking-tight",d!=null&&zt(d)),children:C}),e[78]=d,e[79]=C,e[80]=S,e[81]=x,e[82]=Z):Z=e[82];let oe;e[83]!==j?(oe=()=>j(),e[83]=j,e[84]=oe):oe=e[84];let ne;e[85]!==t?(ne=t("settings.decoCreditsHero.refreshBalance"),e[85]=t,e[86]=ne):ne=e[86];const Ne=S&&"animate-spin";let ae;e[87]!==Ne?(ae=we(Ne),e[87]=Ne,e[88]=ae):ae=e[88];let ce;e[89]!==ae?(ce=s.jsx(Ue,{size:14,className:ae}),e[89]=ae,e[90]=ce):ce=e[90];let de;e[91]!==S||e[92]!==oe||e[93]!==ne||e[94]!==ce?(de=s.jsx("button",{type:"button",onClick:oe,disabled:S,className:"text-muted-foreground hover:text-foreground disabled:opacity-50 transition-colors p-1 rounded-md hover:bg-muted/50","aria-label":ne,children:ce}),e[91]=S,e[92]=oe,e[93]=ne,e[94]=ce,e[95]=de):de=e[95];let me;e[96]!==Z||e[97]!==de?(me=s.jsxs("div",{className:"flex items-baseline gap-2",children:[Z,de]}),e[96]=Z,e[97]=de,e[98]=me):me=e[98];let ue;e[99]!==t?(ue=t("settings.decoCreditsHero.availableBalance"),e[99]=t,e[100]=ue):ue=e[100];let fe;e[101]!==ue?(fe=s.jsx("p",{className:"text-xs text-muted-foreground",children:ue}),e[101]=ue,e[102]=fe):fe=e[102];let pe;e[103]!==me||e[104]!==fe?(pe=s.jsxs("div",{className:"flex flex-col gap-2 pt-2",children:[me,fe]}),e[103]=me,e[104]=fe,e[105]=pe):pe=e[105];let ge;e[106]!==t?(ge=t("settings.decoCreditsHero.addCredits"),e[106]=t,e[107]=ge):ge=e[107];let xe;e[108]!==ge?(xe=s.jsx("p",{className:"text-xs font-medium text-muted-foreground mb-2.5",children:ge}),e[108]=ge,e[109]=xe):xe=e[109];let Se;e[110]===Symbol.for("react.memo_cache_sentinel")?(Se=s.jsx(Ht,{}),e[110]=Se):Se=e[110];let he;e[111]!==xe?(he=s.jsxs("div",{className:"pt-4 border-t border-border/60",children:[xe,Se]}),e[111]=xe,e[112]=he):he=e[112];let ve;e[113]!==$||e[114]!==ie||e[115]!==pe||e[116]!==he?(ve=s.jsx(Ie,{children:s.jsxs("div",{className:"px-5 py-5 flex flex-col gap-5",children:[$,ie,pe,he]})}),e[113]=$,e[114]=ie,e[115]=pe,e[116]=he,e[117]=ve):ve=e[117];let Ce;return e[118]!==K||e[119]!==ve?(Ce=s.jsx(ke,{title:K,children:ve}),e[118]=K,e[119]=ve,e[120]=Ce):Ce=e[120],Ce}function Vt(e){return e.providerId==="deco"}function Lt(){const e=J.c(12),{org:t}=be(),i=re(),o=je(),n=se();let c;e[0]!==i?(c=async()=>{await i.call("AI_PROVIDER_PROVISION_KEY",{providerId:"deco"})},e[0]=i,e[1]=c):c=e[1];let a;e[2]!==t||e[3]!==o||e[4]!==n?(a=()=>{Ae("ai_provider_provision_succeeded",{provider_id:"deco"}),o.invalidateQueries({queryKey:te.aiProviderKeys(t.id)}),o.invalidateQueries({queryKey:te.aiProviders(t.id)}),X.success(n("settings.aiProviders.decoConnectSuccess"))},e[2]=t,e[3]=o,e[4]=n,e[5]=a):a=e[5];let l;e[6]!==n?(l=_=>{Ae("ai_provider_provision_failed",{provider_id:"deco",error:_.message}),X.error(n("settings.aiProviders.decoConnectError",{error:_.message}))},e[6]=n,e[7]=l):l=e[7];let u;return e[8]!==c||e[9]!==a||e[10]!==l?(u={mutationFn:c,onSuccess:a,onError:l},e[8]=c,e[9]=a,e[10]=l,e[11]=u):u=e[11],le(u)}function Qt(){const e=J.c(37),t=se(),{mutate:i,isPending:o}=Lt();let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=["radial-gradient(ellipse 50% 150% at -15% 50%, rgba(165,149,255,0.14) 0%, transparent 60%)","radial-gradient(ellipse 50% 150% at 115% 50%, rgba(208,236,26,0.11) 0%, transparent 60%)"],e[0]=n):n=e[0];let c;e[1]===Symbol.for("react.memo_cache_sentinel")?(c=s.jsx("div",{className:"absolute inset-0 pointer-events-none",style:{backgroundImage:n.join(", ")}}),e[1]=c):c=e[1];let a;e[2]!==t?(a=t("settings.decoNudgeCard.decoAiGateway"),e[2]=t,e[3]=a):a=e[3];let l;e[4]!==a?(l=s.jsx("img",{src:"/logos/deco%20logo.svg",alt:a,className:"size-12 shrink-0 rounded-xl object-contain dark:bg-white dark:p-1"}),e[4]=a,e[5]=l):l=e[5];let u;e[6]!==t?(u=t("settings.decoNudgeCard.decoAiGateway"),e[6]=t,e[7]=u):u=e[7];let _;e[8]!==u?(_=s.jsx("p",{className:"text-base font-semibold",children:u}),e[8]=u,e[9]=_):_=e[9];let b;e[10]!==t?(b=t("settings.decoNudgeCard.recommended"),e[10]=t,e[11]=b):b=e[11];let r;e[12]!==b?(r=s.jsx("span",{className:"rounded-full border border-border/60 bg-background/60 px-2 py-0.5 text-[10px] font-medium text-muted-foreground",children:b}),e[12]=b,e[13]=r):r=e[13];let p;e[14]!==_||e[15]!==r?(p=s.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[_,r]}),e[14]=_,e[15]=r,e[16]=p):p=e[16];let m;e[17]!==t?(m=t("settings.decoNudgeCard.description"),e[17]=t,e[18]=m):m=e[18];let f;e[19]!==m?(f=s.jsx("p",{className:"text-sm text-muted-foreground",children:m}),e[19]=m,e[20]=f):f=e[20];let P;e[21]!==f||e[22]!==p?(P=s.jsxs("div",{className:"flex-1 min-w-0",children:[p,f]}),e[21]=f,e[22]=p,e[23]=P):P=e[23];let h;e[24]!==i?(h=()=>i(),e[24]=i,e[25]=h):h=e[25];let v;e[26]!==o||e[27]!==t?(v=t(o?"settings.decoNudgeCard.connecting":"settings.decoNudgeCard.connectDeco"),e[26]=o,e[27]=t,e[28]=v):v=e[28];let g;e[29]!==o||e[30]!==h||e[31]!==v?(g=s.jsx(ee,{variant:"outline",disabled:o,onClick:h,children:v}),e[29]=o,e[30]=h,e[31]=v,e[32]=g):g=e[32];let N;return e[33]!==P||e[34]!==g||e[35]!==l?(N=s.jsxs("div",{className:"relative rounded-xl border border-border overflow-hidden",children:[c,s.jsxs("div",{className:"relative flex items-center gap-5 px-6 py-5",children:[l,P,g]})]}),e[33]=P,e[34]=g,e[35]=l,e[36]=N):N=e[36],N}const Gt=e=>st({label:Pe().min(1,e("settings.editProviderDialog.labelRequired")).max(100),apiKey:Pe().optional(),baseUrl:Pe().optional()});function Yt({isOpenAICompatible:e,baseUrl:t,currentBaseUrl:i,apiKey:o}){return e&&!!t&&t!==i&&!o}function Wt({providerKey:e,provider:t,preset:i,maskedKey:o,currentLabel:n,currentBaseUrl:c,onCancel:a,onSuccess:l}){const{org:u}=be(),_=re(),b=je(),r=se(),[p,m]=W.useState(!1),f=t.id==="openai-compatible",P=t.supportedMethods.includes("api-key"),h=Gt(r),{register:v,handleSubmit:g,watch:N,setError:k,formState:{errors:x}}=Oe({resolver:Te(h),defaultValues:{label:n,apiKey:"",baseUrl:c??""}}),j=N("apiKey")??"",{mutate:S,isPending:d}=le({mutationFn:async y=>{let C;y.apiKey&&(f?C=JSON.stringify({baseUrl:y.baseUrl||c||"",apiKey:y.apiKey}):C=y.apiKey),await _.call("AI_PROVIDER_KEY_UPDATE",{keyId:e.id,label:y.label,...C!==void 0?{apiKey:C}:{}})},onSuccess:()=>{b.invalidateQueries({queryKey:te.aiProviderKeys(u.id)}),b.invalidateQueries({queryKey:te.aiProviders(u.id)}),X.success(r("settings.editProviderDialog.providerUpdated")),l()},onError:y=>X.error(r("settings.editProviderDialog.failedToUpdate",{error:y.message}))});return s.jsxs("form",{onSubmit:g(y=>{if(Yt({isOpenAICompatible:f,baseUrl:y.baseUrl,currentBaseUrl:c,apiKey:y.apiKey})){k("apiKey",{message:r("settings.editProviderDialog.apiKeyRequiredForBaseUrlChange")});return}S(y)}),className:"space-y-3",children:[s.jsxs("div",{className:"space-y-1",children:[s.jsx("label",{className:"text-xs font-medium text-muted-foreground",children:r("settings.editProviderDialog.label")}),s.jsx(ye,{placeholder:r("settings.editProviderDialog.labelPlaceholder"),...v("label"),className:"h-8 text-sm"}),x.label&&s.jsx("p",{className:"text-xs text-destructive",children:x.label.message})]}),f&&!i?.defaultBaseUrl&&s.jsxs("div",{className:"space-y-1",children:[s.jsx("label",{className:"text-xs font-medium text-muted-foreground",children:r("settings.editProviderDialog.baseUrl")}),s.jsx(ye,{type:"url",placeholder:i?.baseUrlPlaceholder??r("settings.editProviderDialog.baseUrlPlaceholder"),...v("baseUrl"),className:"h-8 text-sm"})]}),P&&s.jsxs("div",{className:"space-y-1",children:[s.jsxs("label",{className:"text-xs font-medium text-muted-foreground",children:[r("settings.editProviderDialog.apiKey")," ",s.jsxs("span",{className:"text-muted-foreground/60",children:["(",r("settings.editProviderDialog.leaveBlankHint"),")"]})]}),s.jsxs("div",{className:"relative",children:[s.jsx(ye,{type:p&&j?"text":"password",placeholder:o,...v("apiKey"),className:"ph-no-capture h-8 text-sm pr-8"}),j&&s.jsx("button",{type:"button",onClick:()=>m(!p),"aria-label":r(p?"settings.editProviderDialog.hideApiKey":"settings.editProviderDialog.showApiKey"),className:"absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",children:p?s.jsx(_t,{size:14}):s.jsx(Nt,{size:14})})]}),x.apiKey&&s.jsx("p",{className:"text-xs text-destructive",children:x.apiKey.message})]}),i?.helpText&&s.jsx("p",{className:"text-xs text-muted-foreground",children:i.helpText}),s.jsxs(Dt,{children:[s.jsx(ee,{type:"button",variant:"ghost",size:"sm",onClick:a,disabled:d,children:r("settings.editProviderDialog.cancel")}),s.jsx(ee,{type:"submit",size:"sm",disabled:d,children:r(d?"settings.editProviderDialog.saving":"settings.editProviderDialog.save")})]})]})}function Jt(e){const t=J.c(31),{providerKey:i,provider:o,open:n,onOpenChange:c}=e,a=se(),l=re(),u=o.id==="openai-compatible"&&i.presetId?Be(i.presetId):void 0,_=u?.name??o.name;let b;t[0]!==i.id?(b=te.aiProviderKeyPreview(i.id),t[0]=i.id,t[1]=b):b=t[1];let r;t[2]!==i.id||t[3]!==l?(r=()=>l.call("AI_PROVIDER_KEY_PREVIEW",{keyId:i.id}),t[2]=i.id,t[3]=l,t[4]=r):r=t[4];let p;t[5]!==n||t[6]!==b||t[7]!==r?(p={queryKey:b,queryFn:r,enabled:n,staleTime:0},t[5]=n,t[6]=b,t[7]=r,t[8]=p):p=t[8];const{data:m,isLoading:f}=Ke(p),P=Kt,h=kt,v="sm:max-w-md",g=It,N=Pt,k=a("settings.editProviderDialog.editTitle",{name:_});let x;t[9]!==N||t[10]!==k?(x=s.jsx(N,{children:k}),t[9]=N,t[10]=k,t[11]=x):x=t[11];let j;t[12]!==g||t[13]!==x?(j=s.jsx(g,{children:x}),t[12]=g,t[13]=x,t[14]=j):j=t[14];let S;t[15]!==f||t[16]!==c||t[17]!==u||t[18]!==m||t[19]!==o||t[20]!==i?(S=f||!m?s.jsx("div",{className:"flex justify-center py-8",children:s.jsx(tt,{})}):s.jsx(Wt,{providerKey:i,provider:o,preset:u,maskedKey:m.maskedKey,currentLabel:m.label,currentBaseUrl:m.baseUrl,onCancel:()=>c(!1),onSuccess:()=>c(!1)}),t[15]=f,t[16]=c,t[17]=u,t[18]=m,t[19]=o,t[20]=i,t[21]=S):S=t[21];let d;t[22]!==h||t[23]!==j||t[24]!==S?(d=s.jsxs(h,{className:v,children:[j,S]}),t[22]=h,t[23]=j,t[24]=S,t[25]=d):d=t[25];let y;return t[26]!==P||t[27]!==c||t[28]!==n||t[29]!==d?(y=s.jsx(P,{open:n,onOpenChange:c,children:d}),t[26]=P,t[27]=c,t[28]=n,t[29]=d,t[30]=y):y=t[30],y}function Xt(e){const t=J.c(86),{providerKey:i,provider:o}=e,{org:n}=be(),c=re(),a=je(),[l,u]=W.useState(!1),[_,b]=W.useState(!1),r=se(),[p]=He(),m=p.language==="pt-BR"?vt:void 0,f=o?.id==="openai-compatible";let P;t[0]!==f||t[1]!==i.presetId?(P=f&&i.presetId?Be(i.presetId):void 0,t[0]=f,t[1]=i.presetId,t[2]=P):P=t[2];const h=P;let v;t[3]!==f||t[4]!==h||t[5]!==o?.name||t[6]!==i.providerId||t[7]!==r?(v=h?h.name:f?r("settings.aiProviders.customOpenAiCompatible"):o?.name??(i.providerId==="claude-code"?r("settings.providerKeyRow.claudeCode"):i.providerId==="codex"?r("settings.providerKeyRow.codex"):i.providerId),t[3]=f,t[4]=h,t[5]=o?.name,t[6]=i.providerId,t[7]=r,t[8]=v):v=t[8];const g=v,N=h?.logo??o?.logo??Ct[i.providerId];let k;e:{if(f){k=i.label;break e}let Z;t[9]!==m||t[10]!==i.createdAt||t[11]!==i.label||t[12]!==r?(Z=r("settings.providerKeyRow.addedTimeAgo",{label:i.label,time:yt(new Date(i.createdAt),{locale:m})}),t[9]=m,t[10]=i.createdAt,t[11]=i.label,t[12]=r,t[13]=Z):Z=t[13],k=Z}const x=k;let j;t[14]!==i.id||t[15]!==c?(j=async()=>{await c.call("AI_PROVIDER_KEY_DELETE",{keyId:i.id})},t[14]=i.id,t[15]=c,t[16]=j):j=t[16];let S;t[17]!==n||t[18]!==i.id||t[19]!==a||t[20]!==r?(S=()=>{a.invalidateQueries({queryKey:te.aiProviderKeys(n.id)}),a.invalidateQueries({queryKey:te.aiProviders(n.id)}),a.invalidateQueries({queryKey:te.aiProviderModels(n.id,i.id)}),X.success(r("settings.providerKeyRow.keyDeleted")),u(!1)},t[17]=n,t[18]=i.id,t[19]=a,t[20]=r,t[21]=S):S=t[21];let d;t[22]!==r?(d=Z=>X.error(r("settings.providerKeyRow.failedToDeleteKey",{error:Z.message})),t[22]=r,t[23]=d):d=t[23];let y;t[24]!==j||t[25]!==S||t[26]!==d?(y={mutationFn:j,onSuccess:S,onError:d},t[24]=j,t[25]=S,t[26]=d,t[27]=y):y=t[27];const{mutate:C,isPending:K}=le(y);let A;t[28]!==g||t[29]!==N?(A=N?s.jsx("img",{src:N,alt:g,className:"size-8 rounded-md object-contain dark:bg-white dark:p-0.5"}):s.jsx(St,{fallback:g.charAt(0),className:"size-8 bg-primary/10 text-primary"}),t[28]=g,t[29]=N,t[30]=A):A=t[30];let w;t[31]!==o||t[32]!==r?(w=o?s.jsx(ee,{variant:"ghost",size:"icon","aria-label":r("settings.providerKeyRow.editProviderKey"),className:"h-7 w-7 text-muted-foreground hover:text-foreground",onClick:()=>b(!0),children:s.jsx(bt,{size:14})}):null,t[31]=o,t[32]=r,t[33]=w):w=t[33];let E;t[34]!==r?(E=r("settings.providerKeyRow.deleteProviderKey"),t[34]=r,t[35]=E):E=t[35];let R,F;t[36]===Symbol.for("react.memo_cache_sentinel")?(R=()=>u(!0),F=s.jsx(jt,{size:14}),t[36]=R,t[37]=F):(R=t[36],F=t[37]);let B;t[38]!==K||t[39]!==E?(B=s.jsx(ee,{variant:"ghost",size:"icon","aria-label":E,className:"h-7 w-7 text-muted-foreground hover:text-destructive",disabled:K,onClick:R,children:F}),t[38]=K,t[39]=E,t[40]=B):B=t[40];let L;t[41]!==B||t[42]!==w?(L=s.jsxs("div",{className:"flex items-center gap-0.5",children:[w,B]}),t[41]=B,t[42]=w,t[43]=L):L=t[43];let U;t[44]!==x||t[45]!==g||t[46]!==L||t[47]!==A?(U=s.jsx(Fe,{icon:A,title:g,description:x,action:L}),t[44]=x,t[45]=g,t[46]=L,t[47]=A,t[48]=U):U=t[48];let $;t[49]!==_||t[50]!==o||t[51]!==i?($=o?s.jsx(Jt,{providerKey:i,provider:o,open:_,onOpenChange:b}):null,t[49]=_,t[50]=o,t[51]=i,t[52]=$):$=t[52];let H;t[53]!==r?(H=r("settings.providerKeyRow.deleteApiKey"),t[53]=r,t[54]=H):H=t[54];let q;t[55]!==H?(q=s.jsx(Ve,{children:H}),t[55]=H,t[56]=q):q=t[56];let V;t[57]!==i.label?(V=s.jsxs(Le,{children:["This action cannot be undone. This will permanently delete"," ",s.jsx("span",{className:"font-medium text-foreground",children:i.label}),"."]}),t[57]=i.label,t[58]=V):V=t[58];let I;t[59]!==q||t[60]!==V?(I=s.jsxs(Qe,{children:[q,V]}),t[59]=q,t[60]=V,t[61]=I):I=t[61];let T;t[62]!==r?(T=r("settings.providerKeyRow.cancel"),t[62]=r,t[63]=T):T=t[63];let O;t[64]!==T?(O=s.jsx(Ge,{children:T}),t[64]=T,t[65]=O):O=t[65];let M;t[66]!==C?(M=()=>C(),t[66]=C,t[67]=M):M=t[67];let D;t[68]!==r?(D=r("settings.providerKeyRow.delete"),t[68]=r,t[69]=D):D=t[69];let G;t[70]!==M||t[71]!==D?(G=s.jsx(Ye,{onClick:M,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:D}),t[70]=M,t[71]=D,t[72]=G):G=t[72];let Y;t[73]!==O||t[74]!==G?(Y=s.jsxs(We,{children:[O,G]}),t[73]=O,t[74]=G,t[75]=Y):Y=t[75];let z;t[76]!==I||t[77]!==Y?(z=s.jsxs(Je,{children:[I,Y]}),t[76]=I,t[77]=Y,t[78]=z):z=t[78];let Q;t[79]!==l||t[80]!==z?(Q=s.jsx(Xe,{open:l,onOpenChange:u,children:z}),t[79]=l,t[80]=z,t[81]=Q):Q=t[81];let ie;return t[82]!==U||t[83]!==$||t[84]!==Q?(ie=s.jsxs(s.Fragment,{children:[U,$,Q]}),t[82]=U,t[83]=$,t[84]=Q,t[85]=ie):ie=t[85],ie}function Zt(e){const t=e.filter(i=>at(i.providerId));return{hasInventory:e.length>0,hasHostedProvider:t.length>0,hasDeco:t.some(i=>i.providerId==="deco")}}function es(e,t){return e.filter(i=>i.providerId!=="deco").map(i=>({key:i,provider:t.find(o=>o.id===i.providerId)??null}))}function Me(e){const t=J.c(13),{onConnectClick:i}=e,o=se(),n=De(),c=ze();let a;if(t[0]!==c?.providers||t[1]!==n||t[2]!==i||t[3]!==o){const l=c?.providers??[],u=es(n,l);let _;t[5]!==o?(_=o("settings.connectedProvidersSection.sectionTitle"),t[5]=o,t[6]=_):_=t[6];let b;t[7]===Symbol.for("react.memo_cache_sentinel")?(b=s.jsx(ht,{size:14}),t[7]=b):b=t[7];let r;t[8]!==o?(r=o("settings.connectedProvidersSection.connectButton"),t[8]=o,t[9]=r):r=t[9];let p;t[10]!==i||t[11]!==r?(p=s.jsxs(ee,{size:"sm",onClick:i,children:[b,r]}),t[10]=i,t[11]=r,t[12]=p):p=t[12],a=s.jsx(ke,{title:_,headerClassName:"px-0",actions:p,children:u.length===0?s.jsx("p",{className:"text-sm text-muted-foreground px-1",children:o("settings.connectedProvidersSection.emptyState")}):s.jsx(Ie,{children:u.map(ts)})}),t[0]=c?.providers,t[1]=n,t[2]=i,t[3]=o,t[4]=a}else a=t[4];return a}function ts(e){const{key:t,provider:i}=e;return s.jsx(Xt,{providerKey:t,provider:i},t.id)}function ss(){const e=J.c(55),t=se(),{org:i}=be(),o=re(),n=je(),[c,a]=W.useState("");let l;e[0]!==i.id?(l=te.claudeSubscription(i.id),e[0]=i.id,e[1]=l):l=e[1];let u;e[2]!==o?(u=()=>o.call("CLAUDE_SUBSCRIPTION_STATUS",{}),e[2]=o,e[3]=u):u=e[3];let _;e[4]!==l||e[5]!==u?(_={queryKey:l,queryFn:u},e[4]=l,e[5]=u,e[6]=_):_=e[6];const b=Ke(_);let r;e[7]!==i.id||e[8]!==n?(r=()=>n.invalidateQueries({queryKey:te.claudeSubscription(i.id)}),e[7]=i.id,e[8]=n,e[9]=r):r=e[9];const p=r;let m;e[10]!==o||e[11]!==c?(m=()=>o.call("CLAUDE_SUBSCRIPTION_CONNECT",{token:c}),e[10]=o,e[11]=c,e[12]=m):m=e[12];let f;e[13]!==p||e[14]!==t?(f=async()=>{a(""),await p(),X.success(t("settings.claudeSubscription.connected"))},e[13]=p,e[14]=t,e[15]=f):f=e[15];let P;e[16]!==m||e[17]!==f?(P={mutationFn:m,onSuccess:f,onError:ls},e[16]=m,e[17]=f,e[18]=P):P=e[18];const h=le(P);let v;e[19]!==o?(v=()=>o.call("CLAUDE_SUBSCRIPTION_DISCONNECT",{}),e[19]=o,e[20]=v):v=e[20];let g;e[21]!==p||e[22]!==t?(g=async()=>{await p(),X.success(t("settings.claudeSubscription.disconnected"))},e[21]=p,e[22]=t,e[23]=g):g=e[23];let N;e[24]!==v||e[25]!==g?(N={mutationFn:v,onSuccess:g,onError:is},e[24]=v,e[25]=g,e[26]=N):N=e[26];const k=le(N),x=b.data?.connected===!0,j=!x&&!!b.data?.linkedAt;let S;e[27]!==t?(S=t("settings.claudeSubscription.title"),e[27]=t,e[28]=S):S=e[28];let d;e[29]!==S?(d=s.jsx("p",{className:"text-base font-semibold",children:S}),e[29]=S,e[30]=d):d=e[30];let y;e[31]!==x||e[32]!==j||e[33]!==t?(y=t(x?"settings.claudeSubscription.active":j?"settings.claudeSubscription.expired":"settings.claudeSubscription.description"),e[31]=x,e[32]=j,e[33]=t,e[34]=y):y=e[34];let C;e[35]!==y?(C=s.jsx("p",{className:"text-sm text-muted-foreground",children:y}),e[35]=y,e[36]=C):C=e[36];let K;e[37]!==d||e[38]!==C?(K=s.jsxs("div",{className:"flex-1 min-w-0",children:[d,C]}),e[37]=d,e[38]=C,e[39]=K):K=e[39];let A;e[40]!==x||e[41]!==k||e[42]!==t?(A=x?s.jsx(ee,{variant:"outline",disabled:k.isPending,onClick:()=>k.mutate(),children:t("settings.claudeSubscription.disconnect")}):null,e[40]=x,e[41]=k,e[42]=t,e[43]=A):A=e[43];let w;e[44]!==K||e[45]!==A?(w=s.jsxs("div",{className:"flex items-center gap-4",children:[K,A]}),e[44]=K,e[45]=A,e[46]=w):w=e[46];let E;e[47]!==h||e[48]!==x||e[49]!==t||e[50]!==c?(E=x?null:s.jsxs("div",{className:"flex flex-col gap-2",children:[s.jsxs("p",{className:"text-sm text-muted-foreground",children:[t("settings.claudeSubscription.howTo")," ",s.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:"claude setup-token"})]}),s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx(ye,{type:"password",value:c,onChange:F=>a(F.target.value),placeholder:t("settings.claudeSubscription.tokenPlaceholder")}),s.jsx(ee,{disabled:c.trim().length===0||h.isPending,onClick:()=>h.mutate(),children:t("settings.claudeSubscription.connect")})]})]}),e[47]=h,e[48]=x,e[49]=t,e[50]=c,e[51]=E):E=e[51];let R;return e[52]!==w||e[53]!==E?(R=s.jsxs("div",{className:"rounded-xl border border-border px-6 py-5 flex flex-col gap-4",children:[w,E]}),e[52]=w,e[53]=E,e[54]=R):R=e[54],R}function is(e){return X.error(e.message)}function ls(e){return X.error(e.message)}function rs(e){const t=J.c(3),{error:i}=e;let o;t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(lt,{size:16}),t[0]=o):o=t[0];let n;return t[1]!==i.message?(n=s.jsxs("div",{className:"p-4 rounded-md bg-destructive/10 text-destructive flex items-center gap-2",children:[o,s.jsxs("span",{className:"text-sm font-medium",children:["Failed to load AI providers: ",i.message]})]}),t[1]=i.message,t[2]=n):n=t[2],n}function os(){const e=J.c(27),t=De();let i;e[0]!==t?(i=Zt(t),e[0]=t,e[1]=i):i=e[1];const{hasInventory:o,hasHostedProvider:n,hasDeco:c}=i,[a,l]=W.useState(!1),[u,_]=W.useState(null),b=ze();let r;e[2]!==b?.providers?(r=b?.providers??[],e[2]=b?.providers,e[3]=r):r=e[3];const p=r;if(!n){let N;e[4]===Symbol.for("react.memo_cache_sentinel")?(N=()=>l(!0),e[4]=N):N=e[4];let k;e[5]!==p?(k=s.jsx(pt,{providers:p,onSelect:_,onShowAll:N}),e[5]=p,e[6]=k):k=e[6];const x=u!==null||a;let j;e[7]===Symbol.for("react.memo_cache_sentinel")?(j=K=>{K||(_(null),l(!1))},e[7]=j):j=e[7];const S=u??void 0;let d;e[8]!==x||e[9]!==S?(d=s.jsx(Ee,{open:x,onOpenChange:j,initialProvider:S}),e[8]=x,e[9]=S,e[10]=d):d=e[10];let y;e[11]!==o?(y=o?s.jsx(Me,{onConnectClick:()=>l(!0)}):null,e[11]=o,e[12]=y):y=e[12];let C;return e[13]!==k||e[14]!==d||e[15]!==y?(C=s.jsxs(s.Fragment,{children:[k,d,y]}),e[13]=k,e[14]=d,e[15]=y,e[16]=C):C=e[16],C}let m;e[17]===Symbol.for("react.memo_cache_sentinel")?(m=s.jsx(W.Suspense,{fallback:s.jsx($e,{className:"h-16 w-full"}),children:s.jsx(Ft,{})}),e[17]=m):m=e[17];let f;e[18]!==c?(f=c?s.jsx(Bt,{}):s.jsx(Qt,{}),e[18]=c,e[19]=f):f=e[19];let P;e[20]===Symbol.for("react.memo_cache_sentinel")?(P=s.jsx(ss,{}),e[20]=P):P=e[20];let h;e[21]===Symbol.for("react.memo_cache_sentinel")?(h=s.jsx(Me,{onConnectClick:()=>l(!0)}),e[21]=h):h=e[21];let v;e[22]!==a?(v=s.jsx(Ee,{open:a,onOpenChange:l}),e[22]=a,e[23]=v):v=e[23];let g;return e[24]!==f||e[25]!==v?(g=s.jsxs(s.Fragment,{children:[m,f,P,h,v]}),e[24]=f,e[25]=v,e[26]=g):g=e[26],g}function ns(){const e=J.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(it,{group:"billing",errorFallback:as,children:s.jsx(os,{})}),e[0]=t):t=e[0],t}function as(e){const{error:t}=e;return s.jsx(rs,{error:t??new Error("Failed to load AI providers")})}function fi(){const e=J.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(wt,{capability:"ai-providers:manage",area:"AI providers",children:s.jsx(ns,{})}),e[0]=t):t=e[0],t}export{fi as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as o,j as r}from"./index-PqfClboL.js";import{O as m}from"./api-keys-BfTxJZ5X.js";import{R as p}from"./require-capability-Dg6MWzmr.js";import"./AlertCircle-Bs6oknH_.js";import"./Copy01-BMb_uucS.js";import"./Key01-bUGu_NLF.js";import"./Plus-DluN38us.js";import"./Trash01-BiGnC-j2.js";import"./alert-dialog-DY5pueun.js";import"./dialog-DMyJgxgJ.js";import"./input-D7VtAJjJ.js";import"./label-QKhMkhs7.js";import"./use-mcp-client-DJ1XmaTL.js";import"./constants-DNuUCxmW.js";import"./auth-CRRmnvXP.js";import"./access-gate-C43dXf2x.js";import"./capability-load-error-ClieXywX.js";function A(){const t=o.c(1);let i;return t[0]===Symbol.for("react.memo_cache_sentinel")?(i=r.jsx(p,{capability:"api-keys:manage",area:"api-keys",children:r.jsx(m,{})}),t[0]=i):i=t[0],i}export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as jt,b as Bt,r as A,j as o,l as _t,h as wt,t as ht}from"./index-PqfClboL.js";import{b as At}from"./chat-context-Cy0rls8c.js";import{i as Et}from"./ChevronRight-CiQ4250Y.js";import{S as Nt}from"./scroll-area-DWesqnEX.js";import{u as Rt,A as Tt}from"./use-section-preview-base-DqvXqLZC.js";import{n as Ct,r as Kt,c as Pt,d as Ft,e as Ot,g as Ut,h as $t,S as It,i as zt,j as Lt}from"./index-z2239Bry.js";import"./use-panel-navigate-CIgiHkeA.js";import"./use-destination-route-C9WCN5J4.js";import"./thread-route-CqJiATkn.js";import"./dialog-DMyJgxgJ.js";import"./Check-tzg1v70M.js";import"./Copy01-BMb_uucS.js";import"./Download01-DC7Ed5MF.js";import"./constants-DNuUCxmW.js";import"./thread-intent-BXltPzDX.js";import"./slugify-CEUa2lfQ.js";import"./hooks-g1jnmSoE.js";import"./use-mcp-client-DJ1XmaTL.js";import"./auth-CRRmnvXP.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CU_zK481.js";import"./task-board-Cu8abk2x.js";import"./schema-CExEiY9w.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BksmT3bT.js";import"./use-ai-providers-d40kZQC-.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-2Ng0Wxeb.js";import"./use-organization-settings-YKFwQGNn.js";import"./select-fQpkdmCP.js";import"./ChevronUp-CdsnYS3o.js";import"./agent-icon-72FlHM-8.js";import"./AlertCircle-Bs6oknH_.js";import"./Tool01-UNDZEmAI.js";import"./ArrowUp--KPYS_Zx.js";import"./ArrowLeft-BWSnRuGm.js";import"./Tool02-DLBy4do6.js";import"./XCircle-DpU-0ryx.js";import"./TrendUp01-DQn6MXk1.js";import"./ZoomOut-JTfIuUYt.js";import"./Users03-D0VbxK_7.js";import"./CheckCircle-8VMJtbLE.js";import"./ChevronSelectorVertical-BoLsghjN.js";import"./DotsVertical-Csr6l19K.js";import"./UserSquare-hx_yDjx2.js";import"./CreditCard01-CYcMMyuv.js";import"./Settings02-CdkkNZQs.js";import"./Eye-D3-C_xXn.js";import"./Share07-CQi_kYTg.js";import"./GitBranch01-BBK46z_T.js";import"./Globe01-DZmHtz0b.js";import"./XClose-BPl5N5wQ.js";import"./HardDrive-C5hOZFs-.js";import"./Image01-DwIAdAUT.js";import"./Key01-bUGu_NLF.js";import"./Link01-CYHfOeCn.js";import"./LinkExternal01-ItrpBJnM.js";import"./Monitor01-B8OxufXb.js";import"./Sun-DqwL2RBY.js";import"./Package-B1Q6V5jC.js";import"./Palette-CmDDPB-1.js";import"./Play-Cebbxrf7.js";import"./Plus-DluN38us.js";import"./SearchMd-Dtd4_W0w.js";import"./Shield01-nF6J5QH3.js";import"./Stars01-BkXOAWkF.js";import"./Trash01-BiGnC-j2.js";import"./Upload01-CEzfFT4A.js";import"./User01-C7HywlOg.js";import"./Users01-DSJGRawE.js";import"./Zap-9WaWy-XB.js";import"./input-D7VtAJjJ.js";import"./automation-runs-CzvbjIvf.js";import"./useInfiniteQuery-ZaOAcalc.js";import"./use-infinite-scroll-BMWJMaLX.js";import"./use-connection-amUUqPK2.js";import"./table-kp1XE9dT.js";import"./empty-state-DTBt1PEx.js";import"./use-members-CH0-g0gG.js";import"./use-org-auth-client-YfM297vM.js";import"./use-automations-_m8whHp0.js";import"./useSuspenseInfiniteQuery-Er-flM0P.js";import"./avatar-Br5BYZeI.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-24vRYGpf.js";import"./markdown-Cxpdg1Ih.js";import"./monaco-editor-Dh9B6hNJ.js";import"./editor-B0bws0TS.js";import"./types-ZeUbZJLS.js";import"./shell-layout-CyEhpljU.js";import"./project-icon-B6DBvpFP.js";import"./github-repo-COLY3wWI.js";import"./command-CdGnJ_4A.js";import"./index-Bwv8rTxR.js";import"./required-auth-layout-yWBNl8Cx.js";import"./use-org-sso-BlX-8VL5.js";import"./integration-icon-lLjfXy11.js";import"./use-navigate-to-agent-C-nz-Qsl.js";import"./use-mcp-prompts-BsTT4HpT.js";import"./form-7uhYa81Z.js";import"./label-QKhMkhs7.js";import"./file-type-icon-BYEG4qUb.js";import"./drawer-DYxoRn2r.js";import"./collection-search-BrUxTz45.js";import"./use-mcp-tools-DrikIu-o.js";import"./tabs-B3JjqSsa.js";import"./toggle-group-B-2KCs2i.js";import"./task-route-DOCtDdvo.js";import"./toolbar-icon-button-DsVbEvkI.js";import"./popover-B2EbEKJC.js";import"./github-repo-picker-EcTfqXw_.js";import"./use-debounced-value-Bp44IQzu.js";import"./authenticate-and-persist-oauth-D6lfMerI.js";import"./mcp-oauth-EPG_9QaY.js";import"./extract-connection-data-BJMOxVAc.js";import"./metadata-dUsYcpuu.js";import"./connection-Cdt4e_MW.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./connection-card-CB2F5qRw.js";import"./use-registry-connections-zd4c05Ap.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./textarea-CiJM1au8.js";import"./connection-form-helpers-zpf3c404.js";import"./collection-tabs-DsyRDJCm.js";import"./badge-BXMUzYIE.js";import"./use-file-configs-DBg-_83I.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-Yn3mK79I.js";import"./get-initials-D-f_fDFw.js";import"./select-model-B87liE0s.js";import"./checkbox-HAQ_nhYr.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-Dhr9f8sV.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-DgQE41Lh.js";import"./toolbar-CUoJwayP.js";import"./skill-preview-JM1C9U_u.js";import"./pt-BR-CLy76QW2.js";import"./alert-dialog-DY5pueun.js";import"./use-debounced-autosave-zxAYDFyH.js";import"./search-input-DzDwGhUj.js";import"./use-mcp-auth-status-8HlvMX_V.js";import"./switch-CXvibrMM.js";import"./use-secrets-BTq66_-S.js";import"./client-icons-BaBjOI1p.js";import"./connect-layout-DrkT05cr.js";import"./self-tool-result-CI9lePBq.js";import"./track-DnpAx3e3.js";import"./use-tags-DGA6n_kJ.js";import"./breadcrumb-CXuS6gNw.js";import"./safe-image-url-D5z803Ot.js";import"./automation-list-row-PO_mCBtT.js";import"./site-error--i37Vnuw.js";import"./cards-O9HwAVOg.js";function Vt(n,t){const s=(n.title||n.resolveType.split("/").pop()||"").replace(/\.(tsx?|jsx?)$/,"").replace(/[^A-Za-z0-9_-]/g,""),i=/^[A-Za-z]/.test(s)&&s.length>0?s:"Section",m=Ct(t,i);return{blockKey:m,data:{__resolveType:n.resolveType,name:m}}}function Lr(n){const t=jt.c(79),{orgSlug:s,virtualMcpId:i,branch:m,blockKey:p,block:x,meta:a,decofile:l,title:bt,excludeFields:Z,schemaPending:lt,previewBaseUrl:ct}=n,D=lt===void 0?!1:lt,H=ct===void 0?null:ct,G=At()?.taskId??null,c=Bt();let N;t[0]!==H||t[1]!==i?(N={virtualMcpId:i,sandboxUrl:H},t[0]=H,t[1]=i,t[2]=N):N=t[2];const h=Rt(N),v=typeof x?.__resolveType=="string"?x.__resolveType:"";let R;t[3]!==Z||t[4]!==a||t[5]!==v?(R=Kt(v,a,Z),t[3]=Z,t[4]=a,t[5]=v,t[6]=R):R=t[6];const b=R;let T;t[7]!==b?(T=!!b&&Object.keys(b.properties??{}).length>0,t[7]=b,t[8]=T):T=t[8];const J=T,dt=bt??(x?Pt(p,x,a):p);let C;t[9]!==m||t[10]!==s||t[11]!==i?(C={orgSlug:s,virtualMcpId:i,branch:m},t[9]=m,t[10]=s,t[11]=i,t[12]=C):C=t[12];const{save:S,flush:Q,isPending:W}=Ft(C);let K;t[13]!==m||t[14]!==s||t[15]!==i?(K={orgSlug:s,virtualMcpId:i,branch:m},t[13]=m,t[14]=s,t[15]=i,t[16]=K):K=t[16];const X=Ot(K);let P;t[17]!==S?(P=zt((e,r)=>S(e,r)),t[17]=S,t[18]=P):P=t[18];const Y=P,[vt,St]=A.useState(p),[tt,ut]=A.useState(null),[et,ft]=A.useState(0);let F;t[19]===Symbol.for("react.memo_cache_sentinel")?(F=[],t[19]=F):F=t[19];const[g,xt]=A.useState(F),[ot,d]=A.useState(!1),O=A.useRef(null);vt!==p&&(St(p),ut(null),ft(Mt),xt([]));let U;t[20]!==x?(U=x??{},t[20]=x,t[21]=U):U=t[21];const rt=U;let y;t[22]!==tt?(y=tt??{},t[22]=tt,t[23]=y):y=t[23];let $;t[24]!==rt||t[25]!==y?($={...rt,...y},t[24]=rt,t[25]=y,t[26]=$):$=t[26];const it=$;let I;t[27]!==p||t[28]!==v||t[29]!==S?(I=e=>{const r=e;ut(r),S(p,{...r,__resolveType:v})},t[27]=p,t[28]=v,t[29]=S,t[30]=I):I=t[30];const st=I;let z;t[31]===Symbol.for("react.memo_cache_sentinel")?(z=e=>{xt(e)},t[31]=z):z=t[31];const E=z;let L;t[32]!==l||t[33]!==Q||t[34]!==X||t[35]!==c?(L=async(e,r)=>{try{const{blockKey:u,data:f}=Vt(e,l);await X.mutateAsync({blockKey:u,data:f}),ht.success(c("sandbox.appEditor.createdSection",{name:u})),r({__resolveType:u}),Q()}catch(u){const f=u,kt=f instanceof Error?f.message:c("sandbox.appEditor.failedAddSection");throw ht.error(kt),f}},t[32]=l,t[33]=Q,t[34]=X,t[35]=c,t[36]=L):L=t[36];const k=L;let V;t[37]!==d?(V=e=>{O.current=e.append,d(!0)},t[37]=d,t[38]=V):V=t[38];const mt=V;let q;t[39]!==k||t[40]!==d?(q=async e=>{const r=O.current;if(r)try{await k(e,u=>{r(u),d(!1),O.current=null})}catch{}},t[39]=k,t[40]=d,t[41]=q):q=t[41];const pt=q,at=g.length>0?[dt,...g]:[],gt="flex h-full flex-col",yt="flex h-12 shrink-0 items-center justify-between border-b px-6",nt=at.length>0?o.jsx("nav",{"aria-label":c("sandbox.appEditor.editingBreadcrumb"),className:"flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm",children:at.map((e,r)=>{const u=r===at.length-1,f=Ut(e);return o.jsxs("span",{className:"flex min-w-0 items-center gap-1 overflow-hidden",children:[r>0&&o.jsx(Et,{className:"size-3 shrink-0 text-muted-foreground/60"}),o.jsx("button",{type:"button",onClick:()=>{E(r===0?[]:$t(g,r)),ft(qt)},title:f,className:_t("min-w-0 truncate rounded-md px-1 py-0.5 text-left transition-colors",u?"font-medium text-foreground":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),children:f})]},`${f}-${r}`)})}):o.jsx("span",{className:"text-sm font-medium",children:dt});let j;t[42]!==W?(j=o.jsx(Lt,{isPending:W,isError:!1}),t[42]=W,t[43]=j):j=t[43];let B;t[44]!==nt||t[45]!==j?(B=o.jsxs("div",{className:yt,children:[nt,j]}),t[44]=nt,t[45]=j,t[46]=B):B=t[46];let _;t[47]!==p||t[48]!==m||t[49]!==g||t[50]!==l||t[51]!==it||t[52]!==et||t[53]!==k||t[54]!==E||t[55]!==st||t[56]!==mt||t[57]!==J||t[58]!==a||t[59]!==s||t[60]!==Y||t[61]!==b||t[62]!==D||t[63]!==h||t[64]!==c||t[65]!==G||t[66]!==i?(_=o.jsx(Nt,{className:"min-h-0 min-w-0 flex-1 [&_[data-slot=scroll-area-viewport]>div]:!block",children:o.jsx("div",{className:"px-6 py-6",children:o.jsx("div",{className:"mx-auto max-w-xl",children:J?o.jsx(It,{schema:b,value:it,onChange:st,basePath:"",breadcrumbPath:g,onBreadcrumbChange:E,decofile:l,meta:a,onSaveReferencedBlock:Y,previewBaseUrl:h,onAddSectionItem:k,onRequestAddSection:mt,sandbox:{orgSlug:s,virtualMcpId:i,branch:m,threadId:G}},`${p}:${et}`):D?o.jsxs("div",{className:"flex flex-col items-center gap-2 py-6 text-center text-xs text-muted-foreground",children:[o.jsx(wt,{className:"size-4"}),c("sandbox.appEditor.loadingSchema")]}):o.jsx("div",{className:"py-6 text-center text-xs text-muted-foreground",children:c("sandbox.appEditor.noEditableSchema")})})})}),t[47]=p,t[48]=m,t[49]=g,t[50]=l,t[51]=it,t[52]=et,t[53]=k,t[54]=E,t[55]=st,t[56]=mt,t[57]=J,t[58]=a,t[59]=s,t[60]=Y,t[61]=b,t[62]=D,t[63]=h,t[64]=c,t[65]=G,t[66]=i,t[67]=_):_=t[67];let w;t[68]!==ot||t[69]!==l||t[70]!==pt||t[71]!==a||t[72]!==h||t[73]!==d?(w=h&&o.jsx(Tt,{open:ot,onOpenChange:e=>{d(e),e||(O.current=null)},meta:a,decofile:l,previewBaseUrl:h,onSelect:e=>{pt(e)}}),t[68]=ot,t[69]=l,t[70]=pt,t[71]=a,t[72]=h,t[73]=d,t[74]=w):w=t[74];let M;return t[75]!==B||t[76]!==_||t[77]!==w?(M=o.jsxs("div",{className:gt,children:[B,_,w]}),t[75]=B,t[76]=_,t[77]=w,t[78]=M):M=t[78],M}function qt(n){return n+1}function Mt(n){return n+1}export{Lr as AppEditor};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,j as o,b as $,W as D,d as M,r as q,P as d,B as V,o as R}from"./index-PqfClboL.js";import{s as W}from"./Plus-DluN38us.js";import{i as S}from"./Zap-9WaWy-XB.js";import{S as F}from"./search-input-DzDwGhUj.js";import{E as T}from"./empty-state-DTBt1PEx.js";import{c as G}from"./use-automations-_m8whHp0.js";import{u as H}from"./use-navigate-to-agent-C-nz-Qsl.js";import{A as J}from"./automation-list-row-PO_mCBtT.js";import{h as K}from"./constants-DNuUCxmW.js";import{b as O}from"./use-virtual-mcp-BksmT3bT.js";import{R as Q}from"./require-capability-Dg6MWzmr.js";import"./SearchMd-Dtd4_W0w.js";import"./use-mcp-client-DJ1XmaTL.js";import"./auth-CRRmnvXP.js";import"./use-destination-route-C9WCN5J4.js";import"./hooks-g1jnmSoE.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CU_zK481.js";import"./task-board-Cu8abk2x.js";import"./schema-CExEiY9w.js";import"./thread-intent-BXltPzDX.js";import"./slugify-CEUa2lfQ.js";import"./github-repo-COLY3wWI.js";import"./alert-dialog-DY5pueun.js";import"./dropdown-menu-Yn3mK79I.js";import"./Check-tzg1v70M.js";import"./ChevronRight-CiQ4250Y.js";import"./DotsVertical-Csr6l19K.js";import"./agent-icon-72FlHM-8.js";import"./AlertCircle-Bs6oknH_.js";import"./Tool01-UNDZEmAI.js";import"./ArrowUp--KPYS_Zx.js";import"./ArrowLeft-BWSnRuGm.js";import"./Tool02-DLBy4do6.js";import"./XCircle-DpU-0ryx.js";import"./TrendUp01-DQn6MXk1.js";import"./ZoomOut-JTfIuUYt.js";import"./Users03-D0VbxK_7.js";import"./CheckCircle-8VMJtbLE.js";import"./ChevronUp-CdsnYS3o.js";import"./ChevronSelectorVertical-BoLsghjN.js";import"./UserSquare-hx_yDjx2.js";import"./Copy01-BMb_uucS.js";import"./CreditCard01-CYcMMyuv.js";import"./Download01-DC7Ed5MF.js";import"./Settings02-CdkkNZQs.js";import"./Eye-D3-C_xXn.js";import"./Share07-CQi_kYTg.js";import"./GitBranch01-BBK46z_T.js";import"./Globe01-DZmHtz0b.js";import"./XClose-BPl5N5wQ.js";import"./HardDrive-C5hOZFs-.js";import"./Image01-DwIAdAUT.js";import"./Key01-bUGu_NLF.js";import"./Link01-CYHfOeCn.js";import"./LinkExternal01-ItrpBJnM.js";import"./Monitor01-B8OxufXb.js";import"./Sun-DqwL2RBY.js";import"./Package-B1Q6V5jC.js";import"./Palette-CmDDPB-1.js";import"./Play-Cebbxrf7.js";import"./Shield01-nF6J5QH3.js";import"./Stars01-BkXOAWkF.js";import"./Trash01-BiGnC-j2.js";import"./Upload01-CEzfFT4A.js";import"./User01-C7HywlOg.js";import"./Users01-DSJGRawE.js";import"./access-gate-C43dXf2x.js";import"./capability-load-error-ClieXywX.js";function U(){const t=B.c(20),e=$(),{org:l}=D(),{data:C}=G(void 0),g=C===void 0?[]:C,k=O(),P=H(),f=M(),[x,E]=q.useState(""),h=x.toLowerCase(),b=new Map(k.map(X)),A=g.filter(i=>{if(!h||i.name.toLowerCase().includes(h))return!0;if(i.virtual_mcp_id){const p=b.get(i.virtual_mcp_id);if(p&&p.title.toLowerCase().includes(h))return!0}return!1}),z=(i,p)=>{const N=p&&b.has(p)?p:K(l.id);R("automations_list_row_clicked",{automation_id:i,agent_id:N,source:"settings_automations"}),P(N,{panel:`automation:${i}`})};let c;t[0]!==f||t[1]!==l.slug?(c=()=>{R("automations_empty_state_browse_agents_clicked"),f({to:"/$org/settings/agents",params:{org:l.slug}})},t[0]=f,t[1]=l.slug,t[2]=c):c=t[2];const L=c,j=d,v=d,w=d;let s;t[3]!==e?(s=e("settings.automations.pageTitle"),t[3]=e,t[4]=s):s=t[4];let r;t[5]!==s?(r=o.jsx(d.Title,{children:s}),t[5]=s,t[6]=r):r=t[6];const _=g.length>0&&o.jsx(F,{value:x,onChange:E,placeholder:e("settings.automations.searchPlaceholder"),className:"w-full md:w-[375px]"});let m;t[7]!==r||t[8]!==_?(m=o.jsxs("div",{className:"flex flex-col gap-6",children:[r,_]}),t[7]=r,t[8]=_,t[9]=m):m=t[9];const y=g.length===0?o.jsx("div",{className:"flex items-center justify-center py-20",children:o.jsx(T,{image:o.jsx(S,{size:48,className:"text-muted-foreground"}),title:e("settings.automations.emptyTitle"),description:e("settings.automations.emptyDescription"),actions:o.jsxs(V,{size:"sm",onClick:L,children:[o.jsx(W,{size:14}),e("settings.automations.browseAgentsButton")]})})}):A.length===0?o.jsx("div",{className:"flex items-center justify-center py-20",children:o.jsx(T,{image:o.jsx(S,{size:48,className:"text-muted-foreground"}),title:e("settings.automations.noResultsTitle"),description:e("settings.automations.noResultsDescription",{search:x})})}):o.jsx("div",{className:"mt-6 rounded-xl border border-border overflow-hidden",children:A.map(i=>o.jsx(J,{automation:i,showAgent:!0,onClick:()=>z(i.id,i.virtual_mcp_id)},i.id))});let n;t[10]!==w.Body||t[11]!==m||t[12]!==y?(n=o.jsxs(w.Body,{children:[m,y]}),t[10]=w.Body,t[11]=m,t[12]=y,t[13]=n):n=t[13];let a;t[14]!==v.Content||t[15]!==n?(a=o.jsx(v.Content,{children:n}),t[14]=v.Content,t[15]=n,t[16]=a):a=t[16];let u;return t[17]!==j||t[18]!==a?(u=o.jsx(j,{children:a}),t[17]=j,t[18]=a,t[19]=u):u=t[19],u}function X(t){return[t.id,t]}function go(){const t=B.c(1);let e;return t[0]===Symbol.for("react.memo_cache_sentinel")?(e=o.jsx(Q,{capability:"automations:manage",area:"automations",children:o.jsx(U,{})}),t[0]=e):e=t[0],e}export{go as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as X,r as k,l as Y,j as t,b as Z,B as $,h as _,t as H}from"./index-PqfClboL.js";import{b as K}from"./chat-context-Cy0rls8c.js";import{i as tt}from"./XCircle-DpU-0ryx.js";import{i as U}from"./ZoomOut-JTfIuUYt.js";import{n as ot}from"./LinkExternal01-ItrpBJnM.js";import{bk as et}from"./agent-icon-72FlHM-8.js";import{A as rt,a as it,b as st,c as at,d as nt,e as mt,f as lt,g as pt}from"./alert-dialog-DY5pueun.js";import{I as W}from"./input-D7VtAJjJ.js";import{L as M}from"./label-QKhMkhs7.js";import{e as ct,v as dt,w as ut,a5 as gt,j as xt,y as A,H as ft,a6 as ht,z as yt}from"./index-z2239Bry.js";import{c as bt,B as jt,a as vt}from"./block-document-D1scmISJ.js";import{u as Et}from"./use-autosave-BIsH8JCz.js";import{t as Ct}from"./ChevronUp-CdsnYS3o.js";import{al as Nt,am as St,an as wt}from"./automation-runs-CzvbjIvf.js";import{s as j,E as kt}from"./primitives-Bo7_tdMO.js";import"./use-panel-navigate-CIgiHkeA.js";import"./use-destination-route-C9WCN5J4.js";import"./thread-route-CqJiATkn.js";import"./dialog-DMyJgxgJ.js";import"./Check-tzg1v70M.js";import"./Copy01-BMb_uucS.js";import"./Download01-DC7Ed5MF.js";import"./constants-DNuUCxmW.js";import"./thread-intent-BXltPzDX.js";import"./slugify-CEUa2lfQ.js";import"./hooks-g1jnmSoE.js";import"./use-mcp-client-DJ1XmaTL.js";import"./auth-CRRmnvXP.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CU_zK481.js";import"./task-board-Cu8abk2x.js";import"./schema-CExEiY9w.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BksmT3bT.js";import"./use-ai-providers-d40kZQC-.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-2Ng0Wxeb.js";import"./use-organization-settings-YKFwQGNn.js";import"./AlertCircle-Bs6oknH_.js";import"./Tool01-UNDZEmAI.js";import"./ArrowUp--KPYS_Zx.js";import"./ArrowLeft-BWSnRuGm.js";import"./Tool02-DLBy4do6.js";import"./TrendUp01-DQn6MXk1.js";import"./Users03-D0VbxK_7.js";import"./CheckCircle-8VMJtbLE.js";import"./ChevronRight-CiQ4250Y.js";import"./ChevronSelectorVertical-BoLsghjN.js";import"./DotsVertical-Csr6l19K.js";import"./UserSquare-hx_yDjx2.js";import"./CreditCard01-CYcMMyuv.js";import"./Settings02-CdkkNZQs.js";import"./Eye-D3-C_xXn.js";import"./Share07-CQi_kYTg.js";import"./GitBranch01-BBK46z_T.js";import"./Globe01-DZmHtz0b.js";import"./XClose-BPl5N5wQ.js";import"./HardDrive-C5hOZFs-.js";import"./Image01-DwIAdAUT.js";import"./Key01-bUGu_NLF.js";import"./Link01-CYHfOeCn.js";import"./Monitor01-B8OxufXb.js";import"./Sun-DqwL2RBY.js";import"./Package-B1Q6V5jC.js";import"./Palette-CmDDPB-1.js";import"./Play-Cebbxrf7.js";import"./Plus-DluN38us.js";import"./SearchMd-Dtd4_W0w.js";import"./Shield01-nF6J5QH3.js";import"./Stars01-BkXOAWkF.js";import"./Trash01-BiGnC-j2.js";import"./Upload01-CEzfFT4A.js";import"./User01-C7HywlOg.js";import"./Users01-DSJGRawE.js";import"./Zap-9WaWy-XB.js";import"./drawer-DYxoRn2r.js";import"./collection-search-BrUxTz45.js";import"./use-mcp-prompts-BsTT4HpT.js";import"./shell-layout-CyEhpljU.js";import"./avatar-Br5BYZeI.js";import"./project-icon-B6DBvpFP.js";import"./github-repo-COLY3wWI.js";import"./command-CdGnJ_4A.js";import"./index-Bwv8rTxR.js";import"./required-auth-layout-yWBNl8Cx.js";import"./use-org-sso-BlX-8VL5.js";import"./use-mcp-tools-DrikIu-o.js";import"./form-7uhYa81Z.js";import"./select-fQpkdmCP.js";import"./tabs-B3JjqSsa.js";import"./toggle-group-B-2KCs2i.js";import"./task-route-DOCtDdvo.js";import"./toolbar-icon-button-DsVbEvkI.js";import"./popover-B2EbEKJC.js";import"./github-repo-picker-EcTfqXw_.js";import"./use-debounced-value-Bp44IQzu.js";import"./use-connection-amUUqPK2.js";import"./authenticate-and-persist-oauth-D6lfMerI.js";import"./mcp-oauth-EPG_9QaY.js";import"./extract-connection-data-BJMOxVAc.js";import"./metadata-dUsYcpuu.js";import"./connection-Cdt4e_MW.js";import"./use-navigate-to-agent-C-nz-Qsl.js";import"./provision-repo-scoped-github-connection-WQFARyHG.js";import"./connection-card-CB2F5qRw.js";import"./use-registry-connections-zd4c05Ap.js";import"./useInfiniteQuery-ZaOAcalc.js";import"./use-infinite-scroll-BMWJMaLX.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./integration-icon-lLjfXy11.js";import"./textarea-CiJM1au8.js";import"./connection-form-helpers-zpf3c404.js";import"./collection-tabs-DsyRDJCm.js";import"./badge-BXMUzYIE.js";import"./useSuspenseInfiniteQuery-Er-flM0P.js";import"./use-file-configs-DBg-_83I.js";import"./site-slug-uya6Wp4-.js";import"./dropdown-menu-Yn3mK79I.js";import"./get-initials-D-f_fDFw.js";import"./select-model-B87liE0s.js";import"./checkbox-HAQ_nhYr.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-Dhr9f8sV.js";import"./question-004-sINsf4GQ.js";import"./use-members-CH0-g0gG.js";import"./use-org-auth-client-YfM297vM.js";import"./use-status-sounds-DgQE41Lh.js";import"./empty-state-DTBt1PEx.js";import"./toolbar-CUoJwayP.js";import"./types-ZeUbZJLS.js";import"./file-type-icon-BYEG4qUb.js";import"./skill-preview-JM1C9U_u.js";import"./markdown-Cxpdg1Ih.js";import"./editor-B0bws0TS.js";import"./pt-BR-CLy76QW2.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-debounced-autosave-zxAYDFyH.js";import"./scroll-area-DWesqnEX.js";import"./search-input-DzDwGhUj.js";import"./use-mcp-auth-status-8HlvMX_V.js";import"./switch-CXvibrMM.js";import"./use-secrets-BTq66_-S.js";import"./client-icons-BaBjOI1p.js";import"./format-time-BnbuEtat.js";import"./connect-layout-DrkT05cr.js";import"./self-tool-result-CI9lePBq.js";import"./track-DnpAx3e3.js";import"./use-tags-DGA6n_kJ.js";import"./breadcrumb-CXuS6gNw.js";import"./use-copy-24vRYGpf.js";import"./monaco-editor-Dh9B6hNJ.js";import"./safe-image-url-D5z803Ot.js";import"./use-automations-_m8whHp0.js";import"./automation-list-row-PO_mCBtT.js";import"./site-error--i37Vnuw.js";import"./cards-O9HwAVOg.js";import"./table-kp1XE9dT.js";function Pt(h){const o=X.c(18),{icon:d,title:n,defaultOpen:v,children:u}=h,P=v===void 0?!1:v,[g,D]=k.useState(P);let m;o[0]!==d?(m=t.jsx(d,{size:15}),o[0]=d,o[1]=m):m=o[1];let r;o[2]!==n?(r=t.jsx("span",{className:"flex-1 text-left",children:n}),o[2]=n,o[3]=r):r=o[3];const y=g&&"rotate-180";let s;o[4]!==y?(s=Y("transition-transform",y),o[4]=y,o[5]=s):s=o[5];let l;o[6]!==s?(l=t.jsx(Ct,{size:15,className:s}),o[6]=s,o[7]=l):l=o[7];let p;o[8]!==m||o[9]!==r||o[10]!==l?(p=t.jsx(Nt,{asChild:!0,children:t.jsxs("button",{type:"button",className:"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground cursor-pointer",children:[m,r,l]})}),o[8]=m,o[9]=r,o[10]=l,o[11]=p):p=o[11];let i;o[12]!==u?(i=t.jsx(St,{className:"px-2 pt-4",children:u}),o[12]=u,o[13]=i):i=o[13];let x;return o[14]!==g||o[15]!==p||o[16]!==i?(x=t.jsxs(wt,{open:g,onOpenChange:D,className:"mt-4",children:[p,i]}),o[14]=g,o[15]=p,o[16]=i,o[17]=x):x=o[17],x}function kr({orgSlug:h,virtualMcpId:o,branch:d,blockKey:n,block:v,decofile:u,meta:P,onManagePosts:g,onOpenPost:D,previewBaseUrl:m}){const r=Z(),y=K()?.taskId??null,s=ct({orgSlug:h,virtualMcpId:o,branch:d}),l=dt({orgSlug:h,virtualMcpId:o,branch:d}),p=ut(v,"categories"),[i,x,q]=Et(p,e=>{s.mutate({blockKey:n,data:A(n,"categories",e)})}),E=(e,w)=>x({...i,[e]:w}),z=bt({decofile:u,category:i,previewBaseUrl:m,draftPointer:l}),a=j(i.slug),[B,b]=k.useState(a),[c,C]=k.useState(null),[N,T]=k.useState(!1),F=a?gt(u).filter(e=>e.categorySlugs.includes(a)):[],S=F.length,G=e=>E("slug",e),J=async(e,w)=>{const V=j(i.name);T(!0);try{let f=0;for(const{key:R,payload:I}of ft(u,"posts")){const L=ht(I,e,{name:V,slug:w});L!==I&&(await s.mutateAsync({blockKey:R,data:A(R,"posts",yt(L))}),f+=1)}const O={...i,slug:w};await s.mutateAsync({blockKey:n,data:A(n,"categories",O)}),q(O),H.success(f>0?r("sandbox.categoryEditor.renameSuccessWithPosts",{count:String(f)}):r("sandbox.categoryEditor.renameSuccessNoPosts")),C(null)}catch(f){b(e),C(null),H.error(f instanceof Error?f.message:r("sandbox.categoryEditor.renameFailed"))}finally{T(!1)}},Q=()=>{const e=B.trim();if(e===a){B!==e&&b(e);return}if(!e){b(a);return}if(S===0){G(e);return}C({oldSlug:a,newSlug:e,count:S})};return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"flex h-full flex-col",children:[t.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[t.jsx("span",{className:"truncate text-sm font-medium",children:j(i.name)||r("sandbox.categoryEditor.untitledCategory")}),t.jsxs("div",{className:"flex shrink-0 items-center gap-3",children:[t.jsx(xt,{isPending:s.isPending,isError:s.isError}),z&&t.jsxs($,{type:"button",variant:"outline",size:"sm",title:r("sandbox.categoryEditor.previewTooltip"),onClick:()=>window.open(z,"_blank","noopener,noreferrer"),children:[t.jsx(ot,{size:14}),r("sandbox.categoryEditor.seeCategoryPreview")]})]})]}),t.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto",children:t.jsxs("div",{className:"mx-auto max-w-4xl px-8 py-8",children:[t.jsx(kt,{value:j(i.name),onChange:e=>E("name",e),placeholder:r("sandbox.categoryEditor.categoryNamePlaceholder"),className:"py-1 text-3xl font-bold text-foreground"}),t.jsxs("div",{className:"mt-4 space-y-2",children:[t.jsx(M,{htmlFor:"category-slug",children:r("sandbox.categoryEditor.slugLabel")}),t.jsx(W,{id:"category-slug",value:B,onChange:e=>b(e.target.value),onBlur:Q,placeholder:r("sandbox.categoryEditor.slugPlaceholder"),className:"h-10"})]}),t.jsxs("div",{className:"mt-4 space-y-2",children:[t.jsx(M,{htmlFor:"category-description",children:r("sandbox.categoryEditor.descriptionLabel")}),t.jsx(W,{id:"category-description",value:j(i.description),onChange:e=>E("description",e.target.value),placeholder:r("sandbox.categoryEditor.descriptionPlaceholder"),className:"h-10"})]}),t.jsx(Pt,{icon:et,title:r("sandbox.categoryEditor.contentTitle"),defaultOpen:!0,children:t.jsx(jt,{value:vt(i.sections),onChange:e=>E("sections",e),meta:P,sandboxRef:{orgSlug:h,virtualMcpId:o,branch:d,threadId:y},emptyMessage:r("sandbox.categoryEditor.noContentEmpty")})}),t.jsxs("div",{className:"mt-6 overflow-hidden rounded-lg border bg-muted/30",children:[t.jsxs("div",{className:"flex items-center justify-between gap-3 px-4 py-3",children:[t.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.jsx(U,{size:16,className:"shrink-0 text-muted-foreground"}),t.jsx("span",{className:"text-sm",children:r("sandbox.categoryEditor.postsInCategory",{count:String(S)})})]}),t.jsxs($,{type:"button",variant:"outline",size:"sm",disabled:!a,title:r(a?"sandbox.categoryEditor.pickPostsTooltip":"sandbox.categoryEditor.setSlugTooltip"),onClick:()=>g(a),children:[r("sandbox.categoryEditor.addPostsButton"),t.jsx(tt,{size:14})]})]}),S>0&&t.jsx("ul",{className:"divide-y border-t bg-background",children:F.map(e=>t.jsx("li",{children:t.jsxs("button",{type:"button",onClick:()=>D(e.key),className:"flex w-full items-center gap-2.5 px-4 py-2.5 text-left transition-colors hover:bg-muted cursor-pointer",children:[t.jsx(U,{size:14,className:"shrink-0 text-muted-foreground"}),t.jsxs("span",{className:"min-w-0 flex-1",children:[t.jsx("span",{className:"block truncate text-sm",children:e.title||r("sandbox.categoryEditor.untitledPost")}),e.slug&&t.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:e.slug})]})]})},e.key))})]})]})})]}),t.jsx(rt,{open:!!c,onOpenChange:e=>{e||N||(b(a),C(null))},children:t.jsxs(it,{children:[t.jsxs(st,{children:[t.jsx(at,{children:r("sandbox.categoryEditor.renameDialogTitle")}),t.jsx(nt,{children:c?r("sandbox.categoryEditor.renameDialogDescription",{oldSlug:c.oldSlug,newSlug:c.newSlug,count:String(c.count)}):null})]}),t.jsxs(mt,{children:[t.jsx(lt,{disabled:N,children:r("sandbox.categoryEditor.cancelButton")}),t.jsx(pt,{onClick:e=>{e.preventDefault(),c&&J(c.oldSlug,c.newSlug)},disabled:N,children:N?t.jsxs(t.Fragment,{children:[t.jsx(_,{className:"size-3.5"}),r("sandbox.categoryEditor.renamingLabel")]}):r("sandbox.categoryEditor.renameActionButton")})]})]})})]})}export{kr as CategoryEditor};
|