decocms 4.169.0 → 4.170.0
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-BHQjUcef.js → AlertCircle-BYHJV2GV.js} +1 -1
- package/dist/client/assets/{AreaChart-l3T-nMKm.js → AreaChart-B2o7rUw7.js} +1 -1
- package/dist/client/assets/{ArrowUp-Dj-cFAwv.js → ArrowUp-MX4iWYYn.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-Y5hPCdzr.js → ArrowUpRight-6YZER-oU.js} +1 -1
- package/dist/client/assets/{Check-CSyoUAf4.js → Check-BrkGfLcR.js} +1 -1
- package/dist/client/assets/{CheckCircle-janeTcXa.js → CheckCircle-CmGYC05_.js} +1 -1
- package/dist/client/assets/{ChevronDown-CzvzcnHE.js → ChevronDown-Cg5y4i7a.js} +1 -1
- package/dist/client/assets/{ChevronRight-DBis8PDW.js → ChevronRight-CW6xxWnj.js} +1 -1
- package/dist/client/assets/{ChevronUp-B-NKfo1g.js → ChevronUp-vrjxPJAs.js} +1 -1
- package/dist/client/assets/{Copy01-8C9VbGWL.js → Copy01-DqRJDTwu.js} +1 -1
- package/dist/client/assets/{CpuChip01-A8bcIFzB.js → CpuChip01-DcaVUCTy.js} +1 -1
- package/dist/client/assets/{DotsVertical-BdE4_w9h.js → DotsVertical-IlNcwotl.js} +1 -1
- package/dist/client/assets/{Eye-EvVbP4rR.js → Eye-B41L3FgW.js} +1 -1
- package/dist/client/assets/{FilterLines-Gaw0UmED.js → FilterLines-B-l52E0g.js} +1 -1
- package/dist/client/assets/{HardDrive-C_qMCg5y.js → HardDrive-D0B85GBW.js} +1 -1
- package/dist/client/assets/{Key01-Bfcda0jJ.js → Key01-BjIPfxyL.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BdRKWF_p.js → LayoutLeft-B26SsbEL.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CobVwvk5.js → LinkExternal01-bJAvaskC.js} +1 -1
- package/dist/client/assets/{LogOut01-doI_2tq1.js → LogOut01-CiAF6cDS.js} +1 -1
- package/dist/client/assets/{Monitor01-BFfrIAEb.js → Monitor01-DmmsVkRP.js} +1 -1
- package/dist/client/assets/{Palette-Aamq_16P.js → Palette-B3DXvWwR.js} +1 -1
- package/dist/client/assets/{Play-DfCnwo1c.js → Play-D0fVsuc1.js} +1 -1
- package/dist/client/assets/{Plus-CPpb1y_T.js → Plus-BwGN2zdU.js} +1 -1
- package/dist/client/assets/{SearchLg-CWWzlUvD.js → SearchLg-0IPX1BNy.js} +1 -1
- package/dist/client/assets/{SearchMd-BCWVjSri.js → SearchMd-Dp7qjY7b.js} +1 -1
- package/dist/client/assets/{Settings02-pC2SAFuD.js → Settings02-DMOaaPkn.js} +1 -1
- package/dist/client/assets/{Shield01-CFZIhAYB.js → Shield01-B_5yQoix.js} +1 -1
- package/dist/client/assets/{Star01-WnnjHkp9.js → Star01-CyxV6aKl.js} +1 -1
- package/dist/client/assets/{Stars01-BGA48AlN.js → Stars01-D7q-Avrg.js} +1 -1
- package/dist/client/assets/{Stars02-B7Z_FmwK.js → Stars02-DAWWYHpt.js} +1 -1
- package/dist/client/assets/{Sun-BX81qTgU.js → Sun-CDsqoxsx.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-D2aK9o1v.js → SwitchHorizontal01-Cb-eA4pA.js} +1 -1
- package/dist/client/assets/{Tool01-B4WsGGMZ.js → Tool01-CphPk7Yz.js} +1 -1
- package/dist/client/assets/{Tool02-BngdhbjZ.js → Tool02-BvDCQRR4.js} +1 -1
- package/dist/client/assets/{Trash01-K_-17n2i.js → Trash01-Sloq9J0V.js} +1 -1
- package/dist/client/assets/{TrendUp01-_rLV-_oy.js → TrendUp01-CkquVjI6.js} +1 -1
- package/dist/client/assets/{Upload01-C595E5Fz.js → Upload01-CVz4XujD.js} +1 -1
- package/dist/client/assets/{User01-Chdj0dm8.js → User01-HIWW9kOr.js} +1 -1
- package/dist/client/assets/{Users01-CCeCEY4G.js → Users01-BNK7FXHA.js} +1 -1
- package/dist/client/assets/{Users03-DJ9QTo8l.js → Users03-BSfDHL0v.js} +1 -1
- package/dist/client/assets/{X-DiL2Rl_p.js → X-CGYRx_28.js} +1 -1
- package/dist/client/assets/{XCircle-CDV12pjf.js → XCircle-Edej3Zll.js} +1 -1
- package/dist/client/assets/{XClose-norW3ist.js → XClose-CcN7CLAF.js} +1 -1
- package/dist/client/assets/{Zap-UFgvYSLH.js → Zap-DaHTr7kO.js} +1 -1
- package/dist/client/assets/{ZapSquare-IFLfTQf2.js → ZapSquare-6rsOc9GS.js} +1 -1
- package/dist/client/assets/{access-gate-DGUL_UcD.js → access-gate-BdPe32Mu.js} +1 -1
- package/dist/client/assets/{add-section-modal-DTq5sMKM.js → add-section-modal-BPYtFKJB.js} +1 -1
- package/dist/client/assets/{agent-icon-zT-2RUx7.js → agent-icon-D2F-Kjip.js} +1 -1
- package/dist/client/assets/{agents-list-DBDEVL02.js → agents-list-DyiHSXML.js} +1 -1
- package/dist/client/assets/{ai-providers-BRzUDSVT.js → ai-providers-ZHKXZnkd.js} +1 -1
- package/dist/client/assets/{alert-BB3xGluS.js → alert-DV53gjz1.js} +1 -1
- package/dist/client/assets/{alert-dialog-Cene-7ya.js → alert-dialog-3hOgioGE.js} +1 -1
- package/dist/client/assets/{app-editor-CZFvukFx.js → app-editor-CPKcS-gL.js} +1 -1
- package/dist/client/assets/{auth-CU2bavW6.js → auth-BMGpgYgd.js} +1 -1
- package/dist/client/assets/{auth-catchall-BK249rmi.js → auth-catchall-iyDIAUK2.js} +1 -1
- package/dist/client/assets/{auth-entry-BN-iHbys.js → auth-entry-D0sVnwRC.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BP1XC8RF.js → auth-split-layout-DiNJs6ER.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-WxZneatC.js → authenticate-and-persist-oauth-BJ9Id0Zn.js} +1 -1
- package/dist/client/assets/{automation-list-row-DG0u7EnC.js → automation-list-row-D7gAsd0J.js} +1 -1
- package/dist/client/assets/{automation-runs-BZvstwOZ.js → automation-runs-C5_HzWR2.js} +1 -1
- package/dist/client/assets/{automations-BYxmkEsd.js → automations-r1D1_utQ.js} +1 -1
- package/dist/client/assets/{avatar-WftJ6-cv.js → avatar-kwzEFZkt.js} +1 -1
- package/dist/client/assets/{badge-CngbfVN3.js → badge-CIHen4Uf.js} +1 -1
- package/dist/client/assets/{block-document-D3zId0t2.js → block-document-Iy9IFn2B.js} +1 -1
- package/dist/client/assets/{brand-context-DR22dUFM.js → brand-context-DvJMzn25.js} +1 -1
- package/dist/client/assets/{buckets-CChnFANR.js → buckets-dMAhC4YN.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DlGXsJrs.js → bulk-category-panel-C6CMph6x.js} +1 -1
- package/dist/client/assets/{calendar-CsGWZ_S6.js → calendar-C8abdXhM.js} +1 -1
- package/dist/client/assets/{capability-load-error-BcUvQo1M.js → capability-load-error-CXTQv9Dg.js} +1 -1
- package/dist/client/assets/{card-ClYuWJUa.js → card-Clkyds1x.js} +1 -1
- package/dist/client/assets/{category-editor-C2M1K5r7.js → category-editor-BiwlW5Va.js} +1 -1
- package/dist/client/assets/{chat-context-CF6DlBKA.js → chat-context-DCplmn6Y.js} +1 -1
- package/dist/client/assets/{checkbox-Bh4CEti1.js → checkbox-Bd4_D2hH.js} +1 -1
- package/dist/client/assets/{cli-auth-success-J_4myM4V.js → cli-auth-success-CpW90dwY.js} +1 -1
- package/dist/client/assets/{collection-detail-C_uKdK0e.js → collection-detail-CSOyQlyn.js} +1 -1
- package/dist/client/assets/{collection-display-button-h_MqjIGa.js → collection-display-button-D1CIwG-J.js} +1 -1
- package/dist/client/assets/{collection-search-BPsHlues.js → collection-search-Buv13VcZ.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-EuJPoGLv.js → collection-table-wrapper-DnCovBwD.js} +1 -1
- package/dist/client/assets/{collection-tabs-B4btCcQK.js → collection-tabs-BmB25Ehl.js} +1 -1
- package/dist/client/assets/{command-CEwrg9I3.js → command-C0WA2sON.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-Bcs4XvA5.js → commerce-onboarding-Debt58Ft.js} +1 -1
- package/dist/client/assets/{companions-core-CgvTY-LL.js → companions-core-VU8gGOg5.js} +1 -1
- package/dist/client/assets/{connect-BoicHjh_.js → connect-CyCXKZ6s.js} +1 -1
- package/dist/client/assets/{connection-CvvO_ps_.js → connection-DCMeHLjd.js} +1 -1
- package/dist/client/assets/{connection-card-B95sNnDR.js → connection-card-D0JrNfZ1.js} +1 -1
- package/dist/client/assets/{connection-detail-BmjJdTKV.js → connection-detail-v3Dsw5Ur.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CkZhYHbj.js → connection-form-helpers-CQNVYqGO.js} +1 -1
- package/dist/client/assets/{connections-MUVwsnZL.js → connections-CPtuIhpH.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-waZ_rU9X.js → decopilot-sse-pool-B0paEDc_.js} +1 -1
- package/dist/client/assets/{dialog-DuRT12ix.js → dialog-D6uO7ot8.js} +1 -1
- package/dist/client/assets/{domain-settings-B3Na6PzM.js → domain-settings-Bq-MJcwj.js} +1 -1
- package/dist/client/assets/{drawer-sfBh0-Fv.js → drawer-UjrfpvUn.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CsjV1r80.js → dropdown-menu-D7vqvkYm.js} +1 -1
- package/dist/client/assets/{empty-state-D6MRkxtc.js → empty-state-Bdp-mpQ8.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DOJCD4gJ.js → extract-connection-data-Dtp6Ehpu.js} +1 -1
- package/dist/client/assets/{file-explorer-BVtEaAXh.js → file-explorer--CbgS_cp.js} +1 -1
- package/dist/client/assets/{form-CY4eVoPQ.js → form-BCICVvG7.js} +1 -1
- package/dist/client/assets/general-DkuUkEkT.js +1 -0
- package/dist/client/assets/{github-repo-picker-BiXEMaAr.js → github-repo-picker-gNYKe9zc.js} +1 -1
- package/dist/client/assets/{hooks-dHIdKcw0.js → hooks-5-RXv9Wf.js} +1 -1
- package/dist/client/assets/{index-_J6TZRhY.js → index-BGZ0M4S4.js} +3 -3
- package/dist/client/assets/{index-CgAQSnkZ.js → index-BivGvjP-.js} +4 -4
- package/dist/client/assets/{index-C9dQEl37.js → index-BuqpOFji.js} +1 -1
- package/dist/client/assets/{index-CU5TPed0.js → index-BwXjHv9U.js} +1 -1
- package/dist/client/assets/{index-DtUPhr8V.js → index-CJD2bFa_.js} +1 -1
- package/dist/client/assets/{index-BgtTeA9z.js → index-CTFbcP__.js} +1 -1
- package/dist/client/assets/{index-Dajxa_Es.js → index-CiEaoay8.js} +1 -1
- package/dist/client/assets/{index-CSXauqf7.js → index-CxtffGc9.js} +1 -1
- package/dist/client/assets/{index-to_1Kzx7.js → index-DObkDSge.js} +1 -1
- package/dist/client/assets/{index-mqZ-uRip.js → index-DSLoXAfJ.js} +1 -1
- package/dist/client/assets/{index-BE9BOpQs.js → index-hGQ2mnT0.js} +5 -5
- package/dist/client/assets/{index-redirect-Y4ChBzWT.js → index-redirect-DW5GkRS6.js} +1 -1
- package/dist/client/assets/{input-CHE0hHBC.js → input-Coobsayw.js} +1 -1
- package/dist/client/assets/{integration-icon-D2mH-Jkd.js → integration-icon-B9vXzEZt.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CqzNxjME.js → invite-member-dialog-D5E_9szJ.js} +1 -1
- package/dist/client/assets/{label-DwVnbuko.js → label-C1IeHNJc.js} +1 -1
- package/dist/client/assets/{layout-Caoz8ush.js → layout-DJCFmK0p.js} +1 -1
- package/dist/client/assets/{login-BKYs4uy1.js → login-By2RJx9C.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DQ2pY9Pk.js → mcp-oauth-DZPtnDd0.js} +1 -1
- package/dist/client/assets/{members-Dct86MXi.js → members-CuQhbsjc.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dj-IdsHa.js → monaco-editor-B1BrsITQ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Cre2etB8.js → monitoring-stats-row-_kR6LNnQ.js} +1 -1
- package/dist/client/assets/{multi-select-CFkntjz3.js → multi-select-CleE7UeZ.js} +1 -1
- package/dist/client/assets/{oauth-callback-HRS7qtkR.js → oauth-callback-DLExYXvG.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DrFdY2c1.js → oauth-callback-ai-provider-BjdcLJcU.js} +1 -1
- package/dist/client/assets/{onboarding-Cr1K0J8J.js → onboarding-CvB28dLt.js} +1 -1
- package/dist/client/assets/{org-layout-DaSkvfvO.js → org-layout-CEUB8-A5.js} +1 -1
- package/dist/client/assets/{organization-choice-Dyq7bKZl.js → organization-choice-BGHsi8Kr.js} +1 -1
- package/dist/client/assets/{orgs-BxC49mPC.js → orgs-Ueou16eM.js} +1 -1
- package/dist/client/assets/{page-seo-form-ldbyqodA.js → page-seo-form-epWky0S8.js} +1 -1
- package/dist/client/assets/{popover-EJdSdU2R.js → popover-CU70IQGF.js} +1 -1
- package/dist/client/assets/{post-editor-DvrgHaCl.js → post-editor-DJYtPLa2.js} +1 -1
- package/dist/client/assets/{primitives-DZBu37jf.js → primitives-Dhuengoa.js} +1 -1
- package/dist/client/assets/{profile-4lm5h4pF.js → profile-yg4NoqWi.js} +1 -1
- package/dist/client/assets/project-app-view-OybgjTzS.js +1 -0
- package/dist/client/assets/record-editor-JSE7RbaE.js +1 -0
- package/dist/client/assets/{redirect-editor-Cw3SjuOc.js → redirect-editor-g8dnLt05.js} +1 -1
- package/dist/client/assets/registry-COARHJda.js +2 -0
- package/dist/client/assets/{registry-layout-CTZB8f0R.js → registry-layout-Bdr1is_y.js} +1 -1
- package/dist/client/assets/{reports-BXEV0yfu.js → reports-DWudyTdM.js} +1 -1
- package/dist/client/assets/{require-capability-DrkYr70Z.js → require-capability-CYsr8Uv8.js} +1 -1
- package/dist/client/assets/{required-auth-layout-B6vtrKAD.js → required-auth-layout-CA9F_SWp.js} +1 -1
- package/dist/client/assets/{reset-password-p-3CwomQ.js → reset-password-USPUEodQ.js} +1 -1
- package/dist/client/assets/{roles-CmuBIJp8.js → roles-CzUd7OcT.js} +1 -1
- package/dist/client/assets/{search-input-DHP5_Hg7.js → search-input-CvJ-Awnm.js} +1 -1
- package/dist/client/assets/{secrets-DC_R2-bM.js → secrets-DttlllK_.js} +1 -1
- package/dist/client/assets/{sections-editor-FZrSIhzS.js → sections-editor-BCxdzyB0.js} +1 -1
- package/dist/client/assets/{select-DX4-JeQs.js → select-BCfageZp.js} +1 -1
- package/dist/client/assets/{select-model-BWniT-zS.js → select-model-yBXR_-Sd.js} +1 -1
- package/dist/client/assets/{self-tool-result-CQ5bxpQJ.js → self-tool-result-lMLrjaeq.js} +1 -1
- package/dist/client/assets/{seo-editor-CTb7kcqp.js → seo-editor-CVJP8ORM.js} +1 -1
- package/dist/client/assets/{settings-layout-Bd8sXbF-.js → settings-layout-C5_yXtQG.js} +1 -1
- package/dist/client/assets/{settings-section-3OqkMxsU.js → settings-section-BC78F1iW.js} +1 -1
- package/dist/client/assets/{shell-controls-DX6d19p1.js → shell-controls-9iXLhKxR.js} +1 -1
- package/dist/client/assets/{shell-layout-C54fW9fN.js → shell-layout-BHK1M3T7.js} +1 -1
- package/dist/client/assets/{sidebar-CSmYAwNE.js → sidebar-DA3ricbL.js} +1 -1
- package/dist/client/assets/{skeleton-CF1G_JNJ.js → skeleton-DnyWBGsC.js} +1 -1
- package/dist/client/assets/{spinner-BCrFtw47.js → spinner-DRNGdBCM.js} +1 -1
- package/dist/client/assets/{sso-BUmcP8uB.js → sso-DzG4EOv-.js} +1 -1
- package/dist/client/assets/{store-BlSIrn0n.js → store-CdUO14qi.js} +1 -1
- package/dist/client/assets/store-registry-BS-Jupw1.js +2 -0
- package/dist/client/assets/{studio-tools-Dt_Nz2ZR.js → studio-tools-Bd4Up0-C.js} +1 -1
- package/dist/client/assets/{switch-Dq88gwUX.js → switch-CVlsoYND.js} +1 -1
- package/dist/client/assets/{tab-id-C3dMkfSN.js → tab-id-FdiVjuVJ.js} +1 -1
- package/dist/client/assets/{table-DtnFgt1P.js → table-DPrNwMu9.js} +1 -1
- package/dist/client/assets/{tabs-CvLevm39.js → tabs-2pJ4rMxv.js} +1 -1
- package/dist/client/assets/{textarea-P9iZqCQw.js → textarea-vv5cwGAn.js} +1 -1
- package/dist/client/assets/{toggle-group-Cp18zHbL.js → toggle-group-C0PNw2Kq.js} +1 -1
- package/dist/client/assets/{toolbar-CTFRzgG_.js → toolbar-Df46087V.js} +1 -1
- package/dist/client/assets/{tooltip-CPzDr35B.js → tooltip-Bl7r7v8C.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BVqvTgTt.js → use-ai-providers-DmVCAkKp.js} +1 -1
- package/dist/client/assets/{use-automations-yaXDjUyj.js → use-automations-kgDgnzQ9.js} +1 -1
- package/dist/client/assets/{use-autosave-CWn6eQzu.js → use-autosave-DBgcFl9j.js} +1 -1
- package/dist/client/assets/{use-capability-Bx3Aous3.js → use-capability-BJSHiGxC.js} +1 -1
- package/dist/client/assets/{use-clock-tick-3BC52fl2.js → use-clock-tick-BpuHAF3-.js} +1 -1
- package/dist/client/assets/{use-connection-waGAP3_8.js → use-connection-sd54qNBS.js} +1 -1
- package/dist/client/assets/{use-copy-DdYavl9J.js → use-copy-D4vDlaDj.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Do3eak_a.js → use-create-virtual-mcp-31bpvssy.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Cz0m2SIt.js → use-debounced-autosave-B3IoPDZI.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CawzPtuY.js → use-debounced-value-B3GuqXcd.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BZW42SVE.js → use-deco-credits-BSYu3Fl5.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-uIvxhgZU.js → use-decopilot-events-CHuMH_qH.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DKkCdJK4.js → use-delete-connection-XnLrrBCG.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-1Q_zx2o6.js → use-deployment-admin-XVaF6uCz.js} +1 -1
- package/dist/client/assets/{use-file-configs-5np55VXP.js → use-file-configs-DtjZNr9r.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DxyVjvA-.js → use-infinite-scroll-drSHjOZB.js} +1 -1
- package/dist/client/assets/{use-join-requests-BrWdODmX.js → use-join-requests-Af3zO_gf.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BJEHQ79H.js → use-mcp-auth-status-CehPYeOs.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B4o54gkr.js → use-mcp-client-3Ty5G5W_.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BpXABiGW.js → use-mcp-tools-BTCVUfnA.js} +1 -1
- package/dist/client/assets/{use-members-BluEn-Xz.js → use-members-C8Y7Dr-g.js} +1 -1
- package/dist/client/assets/{use-mobile-DdpcC-kW.js → use-mobile-CLp-jqyF.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CriTJ4nX.js → use-navigate-to-agent-DmmNua7o.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-7VI-2ivW.js → use-org-auth-client-kpwHtnik.js} +1 -1
- package/dist/client/assets/{use-org-sso-gASlJc1Y.js → use-org-sso-D02n6Tcy.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CsNvvbTO.js → use-organization-roles-CEVrE1Dx.js} +1 -1
- package/dist/client/assets/{use-organization-settings-8VLD97hQ.js → use-organization-settings-CcPvgBkt.js} +1 -1
- package/dist/client/assets/{use-registry-connections-KqDKYhMW.js → use-registry-connections-O8wLie-b.js} +1 -1
- package/dist/client/assets/{use-secrets-ByliR705.js → use-secrets-DR9GckcM.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BXJXMeiE.js → use-status-sounds-CXFDHEre.js} +1 -1
- package/dist/client/assets/{use-tags-syMz2bE_.js → use-tags-Bhs8rJHt.js} +1 -1
- package/dist/client/assets/{use-view-mode-CBc8_c7H.js → use-view-mode-Di1mTpL-.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CLnDaYb3.js → use-virtual-mcp-h_TKmrCY.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CVgYg0La.js +1 -0
- package/dist/client/assets/{useQueries-nGThkn2V.js → useQueries-BT7vIZIc.js} +1 -1
- package/dist/client/assets/{useRouterState-B2iSGy4D.js → useRouterState-D8lv76o4.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CAmy4fGh.js +1 -0
- package/dist/client/assets/{users-pEdk07gE.js → users-fK7yHX41.js} +1 -1
- package/dist/client/assets/{variant-calendar-D-TKtVJ9.js → variant-calendar-BgTzjadG.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BFoTStlx.js → view-mode-toggle-Pyei0Set.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/general-uJAjf1TQ.js +0 -1
- package/dist/client/assets/project-app-view-CgZmXp9l.js +0 -1
- package/dist/client/assets/record-editor-7dsCFH8x.js +0 -1
- package/dist/client/assets/registry-CzjAuK1P.js +0 -2
- package/dist/client/assets/store-registry-a9DCucZk.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CgqG_-vz.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BdXBswCG.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1552,7 +1552,7 @@ ${$.description}
|
|
|
1552
1552
|
Task description:
|
|
1553
1553
|
${Z.description}
|
|
1554
1554
|
`:"","How to work:","- Call `TASK_BOARD_ITEM_PRS_GET` with the task id below to find the pull request under review, then load its repository to inspect / exercise the change.","- Do NOT push commits or change the code yourself. You are reviewing, not implementing.",`- End the run by calling \`TASK_BOARD_REVIEW_DECISION\` exactly once with the task id, reviewer "${X}", the reviewToken below, and your decision:`," - `approve` when it's good to ship. Include a short summary of what you verified."," - `request_changes` when something is wrong or missing. Include specific, actionable notes \u2014 the task goes back to the Super Agent with your notes.","- The reviewToken proves you are this reviewer \u2014 pass it through EXACTLY as given. Without it your approval won't count toward an automatic merge.","",`(task id: ${Z.id})`,`(reviewToken: ${G})`].join(`
|
|
1555
|
-
`);await tn($,Z,{title:`${Sd[X]}: ${Z.title}`,prompt:Y,temperature:0.3}),await CY($,{taskBoardItemId:Z.id,action:"review_requested",actorId:null,data:{reviewer:X}});let J=await $.storage.taskBoard.getById(Z.id,Q);if(J)o5(Q,J)}var CW4,_W4;var hp0=B(()=>{fJ();yw();bX();Vp0();CW4=new Set(["completed","failed","expired"]),_W4={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function xW4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=FW$}async function mw0($,Z,X,G){if(X.status!=="in_review")return!1;if(X.assigneeId!==c5)return!1;if(G.conflict!==!0)return!1;let Y=(await $.storage.organizationSettings.get(Z))?.flags??{};if(Y.auto_merge!==!0)return!1;let J=MU.filter((H)=>Y[kU[H]]===!0),K=await $.storage.taskBoard.listActivity(X.id,Z);if(!Qf(K,J,{verifiedOnly:!0}))return!1;if(xW4(K))return console.warn(`[task-board] conflict auto-resolve cap (${FW$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let W=G.pr,N=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!N)return!1;return await CY($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:W.number}}),o5(Z,N),await on($,N,{pr:{number:W.number,url:W.url},resolveConflict:!0}),!0}var FW$=3;var up0=B(()=>{fJ();yw();bX();dx()});import{z as iw0}from"zod";async function an($,Z,X,G){if(X){let J=await $.storage.connections.findById(X,Z);if(J&&J.status==="active")return J}let{items:Q}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Y=Q.filter((J)=>J.status==="active");if(G){let J=Y.find((K)=>{let W=qX(K);return W?.owner===G.owner&&W?.repo===G.name});if(J)return J}return Y.find((J)=>qX(J)===null)??Y[0]??null}function sn($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((G)=>G.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function lp0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")}function yW4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&lp0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function gW4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[];for(let X of Z){let G=X&&typeof X.body==="string"?X.body:"";if(!G)continue;let Q=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(Q?.[1]&&lp0(Q[1]))return Q[1];let Y=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((J)=>lp0(J));if(Y)return Y}return null}function UW$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function OW$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,G=!1;for(let Q of Z){if(!Q||typeof Q!=="object")continue;let{status:Y,conclusion:J}=Q;if(Y!=="completed")G=!0;else if(typeof J==="string"&&wW$.has(J))X=!0}if(X)return"failing";if(G)return"pending";return"passing"}function BW$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function hW4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let G of Z){if(!G||typeof G!=="object")continue;let Q=G;X.push({id:typeof Q.id==="number"?Q.id:null,name:typeof Q.name==="string"?Q.name:"",status:typeof Q.status==="string"?Q.status:"completed",conclusion:typeof Q.conclusion==="string"?Q.conclusion:null,detailsUrl:typeof Q.html_url==="string"?Q.html_url:typeof Q.details_url==="string"?Q.details_url:null})}return X}function uW4($){return $.status==="completed"&&$.conclusion!=null&&wW$.has($.conclusion)}async function cW4($,Z,X){try{let Q=sn(await $.callTool({name:"GET_CHECK_RUN",arguments:{owner:Z.repoOwner,repo:Z.repoName,checkRunId:X}},void 0,{timeout:rn}))?.output,Y=typeof Q?.summary==="string"?Q.summary:null,J=typeof Q?.text==="string"?Q.text:null;return Y??J??null}catch{return null}}async function DW$($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Q=await P5(G,$,!0),Y=async(J)=>sn(await Q.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn}));try{let J=null;try{J=UW$(await Y("get_status"))}catch{}try{J=BW$(J,OW$(await Y("get_check_runs")))}catch{}return J}finally{await Q.close().catch(()=>{})}}function LW$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function EW$($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Q=await P5(G,$,!0);try{return LW$(sn(await Q.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn})))}catch{return null}finally{await Q.close().catch(()=>{})}}async function lW4($,Z){let X=async(N)=>{try{return sn(await $.callTool({name:"pull_request_read",arguments:{method:N,owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number}},void 0,{timeout:rn}))}catch{return null}},[G,Q,Y]=await Promise.all([X("get_status"),X("get_check_runs"),X("get_comments")]),J=BW$(UW$(G),OW$(Q)),K=yW4(G)??gW4(Y),W=await Promise.all(hW4(Q).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:uW4(N)&&N.id!=null?await cW4($,Z,N.id):null})));return{checksStatus:J,checks:W,previewUrl:K}}async function dW4($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return cp0;let Q=await P5(G,$,!0);try{let[Y,J]=await Promise.all([Q.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn}),lW4(Q,X)]),K=sn(Y);if(!K)return cp0;let W=K.state,N=W==="open";return{title:typeof K.title==="string"?K.title:null,body:typeof K.body==="string"?K.body:null,state:W==="closed"?"closed":N?"open":null,draft:typeof K.draft==="boolean"?K.draft:null,merged:typeof K.merged==="boolean"?K.merged:null,mergeable:N&&typeof K.mergeable==="boolean"?K.mergeable:null,checksStatus:N?J.checksStatus:null,checks:N?J.checks:[],previewUrl:N?J.previewUrl:null}}catch{return cp0}finally{await Q.close().catch(()=>{})}}var rn=8000,cp0,wW$,dp0;var nw0=B(()=>{f0();bN();CN();fJ();qK();bX();hp0();up0();In0();cp0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};wW$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);dp0=m({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:iw0.object({taskBoardItemId:iw0.string()}),outputSchema:iw0.object({prs:iw0.array(J0$)}),handler:async({taskBoardItemId:$},Z)=>{W0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);for(let N of G?.threads??[]){let H=N.lastMessage?Zw0(N.lastMessage):null;if(!H)continue;try{await Z.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:X,url:H.url,prNumber:H.number,repoOwner:H.owner,repoName:H.repo,connectionId:null})}catch(F){console.error("[task-board] PR recovery from thread text failed",F)}}let Q=await Z.storage.taskBoard.listPrs($,X),Y=await Promise.all(Q.map(async(N)=>{let H=await dW4(Z,X,N);return{url:N.url,number:N.number,repoOwner:N.repoOwner,repoName:N.repoName,createdAt:N.createdAt,...H}})),J=Y.find((N)=>N.state==="open"&&!N.merged),K=J!=null&&J.checksStatus!=="pending"&&J.checksStatus!=="failing";if(G&&G.status==="in_review"&&G.assigneeId===c5&&K)await gp0(Z,G).catch((N)=>{console.error("[task-board] reviewer auto-handoff failed",N)});let W=J?LW$({state:J.state,mergeable:J.mergeable}):null;if(G&&G.status==="in_review"&&G.assigneeId===c5&&J&&W===!0)await mw0(Z,X,G,{pr:{number:J.number,url:J.url},conflict:!0}).catch((N)=>{console.error("[task-board] conflict auto-resolve failed",N)});if(Y.some((N)=>N.merged))try{if(G&&G.status!=="done"){let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);o5(X,N)}}catch(N){console.error("[task-board] merge\u2192done reconcile failed",N)}return{prs:Y}}})});async function pw0($,Z,X){let Q=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!Q)return!1;let Y=await DW$($,Z,Q);if(Y==="failing"||Y==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${Y} on PR #${Q.number}`),!1;let J=await an($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!J)return!1;let K=await P5(J,$,!0);try{return!(await K.callTool({name:"merge_pull_request",arguments:{owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:mW4}))?.isError}catch(W){return console.error("[task-board] merge PR failed",W),!1}finally{await K.close().catch(()=>{})}}var mW4=15000;var mp0=B(()=>{bN();nw0()});import{z as hw}from"zod";async function iW4($,Z,X){let Q=(await $.storage.organizationSettings.get(Z))?.flags??{},Y=MU.filter((K)=>Q[kU[K]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return Qf(J,Y,{verifiedOnly:!0})}var ip0;var zW$=B(()=>{f0();fJ();qK();yw();bX();dx();mp0();nw0();up0();ip0=m({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:hw.object({taskBoardItemId:hw.string(),reviewer:hw.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:hw.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:hw.enum(["approve","request_changes"]),notes:hw.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:hw.object({status:uN,merged:hw.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:G,notes:Q},Y)=>{W0(Y),await Y.access.check();let J=Y.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let K=await Y.storage.taskBoard.getById($,J);if(!K)throw Error(`Task board item not found: ${$}`);let N=(X?await Y.storage.taskBoard.resolveReviewClaimByToken($,X):null)?.reviewer===Z;if(G==="request_changes"){let D=await Y.storage.taskBoard.update($,J,{status:"in_progress"},K.updatedBy);await CY(Y,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Q,verified:N}}),o5(J,D);let E=(await Y.storage.taskBoard.listPrs($,J))[0];return await on(Y,D,{feedback:`${Sd[Z]}: ${Q}`,pr:E?{number:E.number,url:E.url}:void 0}),{status:D.status,merged:!1}}if(await CY(Y,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Q,verified:N}}),!await iW4(Y,J,$)){let D=await Y.storage.taskBoard.getById($,J)??K;return o5(J,D),{status:D.status,merged:!1}}let U=(await Y.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(U?await pw0(Y,J,$):!1){let D=await Y.storage.taskBoard.update($,J,{status:"done"},K.updatedBy);return await CY(Y,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:K.status,to:"done"}}),o5(J,D),{status:D.status,merged:!0}}let O=await Y.storage.taskBoard.getById($,J)??K;if(U){let L=(await Y.storage.taskBoard.listPrs($,J))[0];if(L?await mw0(Y,J,O,{pr:{number:L.number,url:L.url},conflict:await EW$(Y,J,L)}).catch((z)=>{return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await Y.storage.taskBoard.getById($,J)??O).status,merged:!1}}return o5(J,O),{status:O.status,merged:!1}}})});import{z as tw0}from"zod";function nW4($,Z,X){if($!=="in_review")return!1;return X.length===0||Qf(Z,X)}var np0;var jW$=B(()=>{f0();fJ();qK();yw();bX();mp0();np0=m({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:tw0.object({taskBoardItemId:tw0.string()}),outputSchema:tw0.object({status:uN,merged:tw0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{W0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);let Y=(await Z.storage.organizationSettings.get(X))?.flags??{},J=MU.filter((H)=>Y[kU[H]]===!0),K=await Z.storage.taskBoard.listActivity($,X);if(!nW4(G.status,K,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await pw0(Z,X,$))return{status:G.status,merged:!1};let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);if(G.status!=="done")await CY(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}});return o5(X,N),{status:N.status,merged:!0}}})});var PW$=B(()=>{YW$();WW$();NW$();HW$();nw0();zW$();jW$();yw()});import{z as ZH}from"zod";var pp0;var AW$=B(()=>{f0();pp0=m({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZH.object({}),outputSchema:ZH.object({tags:ZH.array(ZH.object({id:ZH.string(),organizationId:ZH.string(),name:ZH.string(),color:ZH.string().nullable(),createdAt:ZH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as lK}from"zod";var tp0;var TW$=B(()=>{f0();tp0=m({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:lK.object({name:lK.string().min(1).max(50).describe("Tag name"),color:lK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:lK.object({tag:lK.object({id:lK.string(),organizationId:lK.string(),name:lK.string(),color:lK.string().nullable(),createdAt:lK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z),G=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}}}})});import{z as ow0}from"zod";var op0;var RW$=B(()=>{f0();op0=m({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ow0.object({tagId:ow0.string().describe("Tag ID to delete")}),outputSchema:ow0.object({success:ow0.boolean()}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z),G=await Z.storage.tags.getTag($.tagId);if(!G)throw Error("Tag not found");if(G.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as dK}from"zod";var rp0;var IW$=B(()=>{f0();rp0=m({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:dK.object({memberId:dK.string().describe("Member ID")}),outputSchema:dK.object({tags:dK.array(dK.object({id:dK.string(),organizationId:dK.string(),name:dK.string(),color:dK.string().nullable(),createdAt:dK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as _Y}from"zod";var ap0;var qW$=B(()=>{f0();ap0=m({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_Y.object({memberId:_Y.string().describe("Member ID"),tagIds:_Y.array(_Y.string()).describe("Array of tag IDs to assign")}),outputSchema:_Y.object({success:_Y.boolean(),tags:_Y.array(_Y.object({id:_Y.string(),organizationId:_Y.string(),name:_Y.string(),createdAt:_Y.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Y of $.tagIds){let J=await Z.storage.tags.getTag(Y);if(!J)throw Error(`Tag not found: ${Y}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${Y}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});var MW$=B(()=>{AW$();TW$();RW$();IW$();qW$()});import{z as kW$}from"zod";function aW4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Q],[,Y])=>{let J=Math.max(0,...Object.values(Q).map((W)=>W.createdAt??0));return Math.max(0,...Object.values(Y).map((W)=>W.createdAt??0))-J})[0]?.[0]}var oW4,rW4,sp0;var SW$=B(()=>{B6();f0();UV();BX();oW4=kW$.object({data:w3$.describe("Data for the new thread (id is auto-generated if not provided)")}),rW4=kW$.object({item:cK.describe("The created thread entity")});sp0=m({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:oW4,outputSchema:rW4,handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("User ID required to create thread");let{data:Q}=$,Y=Q.id??n8("thrd"),J=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`);let K=J.metadata,W=K?.githubRepo,N=null;if(W)N=Q.branch??aW4(K?.sandboxMap,G)??cU0(uU0(Z.auth.user));let H=await Z.storage.threads.create({id:Y,organization_id:X.id,title:Q.title,description:Q.description,virtual_mcp_id:Q.virtual_mcp_id,branch:N,created_by:G});if(H.isNew)x1.capture({distinctId:G,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y,has_title:!!$.data.title,created_via:"tool"}});return{item:VY(H)}}})});import{z as ep0}from"zod";var sW4,eW4,$t0;var VW$=B(()=>{B6();f0();UV();sW4=ep0.object({id:ep0.string().describe("ID of the thread to update"),data:O3$.describe("Partial thread data to update")}),eW4=ep0.object({item:cK.describe("The updated thread entity")}),$t0=m({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sW4,outputSchema:eW4,handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("User ID required to update thread");let{id:Q,data:Y}=$,J=await Z.storage.threads.get(Q);if(!J)throw Error("Thread not found in organization");if(Y.virtual_mcp_id!==void 0){let N=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!N||N.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`)}if(Y.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let K={title:Y.title,description:Y.description,hidden:Y.hidden,updated_by:G};if(Y.status)K.status=Y.status;if(Y.metadata!==void 0)K.metadata=Y.metadata;if(Y.branch!==void 0)K.branch=Y.branch;if(Y.virtual_mcp_id!==void 0)K.virtual_mcp_id=Y.virtual_mcp_id;let W=await Z.storage.threads.update(Q,K);if(Y.hidden!==void 0&&Y.hidden!==J.hidden)x1.capture({distinctId:G,event:Y.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Q}});return{item:VY(W)}}})});var Zt0;var CW$=B(()=>{TY();UV();B6();f0();Zt0=m({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ji,outputSchema:Pi(cK),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Q=z1(Z);if(Q)x1.capture({distinctId:Q,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:VY(G)}}})});var _W$=B(()=>{SW$();mn0();in0();VW$();CW$();nn0()});function ZN4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function XN4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let G=Z.parts.find((Q)=>Q.type==="text"&&typeof Q.text==="string");if(!G?.text||typeof G.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:ZN4(G.text)}}})}function rw0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return XN4(Z)}import{z as b6}from"zod";var Xt0;var vW$=B(()=>{B6();f0();IY();Xt0=m({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:b6.object({name:b6.string().min(1).max(255),virtual_mcp_id:b6.string(),messages:b6.union([b6.string(),b6.array(b6.looseObject({id:b6.string().optional(),role:b6.enum(["user","assistant","system"]),parts:b6.array(b6.record(b6.string(),b6.unknown())),metadata:b6.unknown().optional()}))]),models:b6.object({tier:sU,modelId:b6.string().optional(),credentialId:b6.string().optional()}).loose().default({tier:"smart"}),tools:b6.array(b6.string()).nullable().optional(),maxAgentSteps:b6.number().int().min(1).max(100).nullable().optional(),temperature:b6.number().default(0.5),active:b6.boolean().default(!0)}),outputSchema:b6.object({id:b6.string(),name:b6.string(),active:b6.boolean(),created_at:b6.string()}),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("Unable to determine user identity");let Q=rw0($.messages),Y=await Z.storage.automations.create({organization_id:X.id,created_by:G,name:$.name,messages:JSON.stringify(Q),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return x1.capture({distinctId:G,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:Y.id,virtual_mcp_id:$.virtual_mcp_id,active:Y.active,tier:$.models.tier}}),{id:Y.id,name:Y.name,active:Y.active,created_at:Y.created_at}}})});import{z as A6}from"zod";var Gt0;var bW$=B(()=>{f0();Gt0=m({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A6.object({id:A6.string()}),outputSchema:A6.object({automation:A6.object({id:A6.string(),name:A6.string(),active:A6.boolean(),created_by:A6.string(),created_at:A6.string(),updated_at:A6.string(),virtual_mcp_id:A6.string(),messages:A6.unknown(),models:A6.unknown(),tools:A6.array(A6.string()).nullable(),maxAgentSteps:A6.number().nullable(),temperature:A6.number(),triggers:A6.array(A6.object({id:A6.string(),type:A6.enum(["cron","event","webhook"]),cron_expression:A6.string().nullable(),connection_id:A6.string().nullable(),event_type:A6.string().nullable(),params:A6.unknown().nullable(),last_run_at:A6.string().nullable(),api_key_id:A6.string().nullable(),created_at:A6.string()}))}).nullable()}),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=await Z.storage.automations.findById($.id,X.id);if(!G)return{automation:null};let Q=await Z.storage.automations.listTriggers(G.id);return{automation:{id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,updated_at:G.updated_at,virtual_mcp_id:G.virtual_mcp_id,messages:JSON.parse(G.messages),models:JSON.parse(G.models),tools:G.tools?JSON.parse(G.tools):null,maxAgentSteps:G.max_agent_steps,temperature:G.temperature,triggers:Q.map((Y)=>({id:Y.id,type:Y.type,cron_expression:Y.cron_expression,connection_id:Y.connection_id,event_type:Y.event_type,params:Y.params?JSON.parse(Y.params):null,last_run_at:Y.last_run_at,api_key_id:Y.api_key_id,created_at:Y.created_at}))}}}})});import{z as IQ}from"zod";var Qt0;var fW$=B(()=>{f0();Qt0=m({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IQ.object({virtual_mcp_id:IQ.string().optional().nullable()}),outputSchema:IQ.object({automations:IQ.array(IQ.object({id:IQ.string(),name:IQ.string(),active:IQ.boolean(),created_by:IQ.string(),created_at:IQ.string(),trigger_count:IQ.number(),nearest_next_run_at:IQ.string().nullable(),virtual_mcp_id:IQ.string()}))}),handler:async($,Z)=>{W0(Z);let X=e(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((Y)=>({id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,trigger_count:Y.trigger_count,nearest_next_run_at:Y.nearest_next_run_at,virtual_mcp_id:Y.virtual_mcp_id}))}}})});function GN4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function xW$($){return`${$}:context`}function yW$($,Z,X,G,Q){return{messages:JSON.parse($.messages).map((W,N)=>({...W,id:`${X}:${N}`})),models:{credentialId:G.credentialId,thinking:G.thinking,...G.image?{image:G.image}:{},...G.webSearch?{webSearch:G.webSearch}:{},...G.deepResearch?{deepResearch:G.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:GN4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...Q?{runMetadata:Q}:{},taskId:X}}function o7($,Z,X,G,Q,Y,J,K){return o7.fromTZ(o7.tp($,Z,X,G,Q,Y,J),K)}function Yt0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function QN4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=$.substring(9);return $.includes("Z")||G.includes("-")||G.includes("+")?o7.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):o7.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function YN4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new vY($.startAt,$.timezone)),$.stopAt&&($.stopAt=new vY($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function en($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function JN4($){return en($)}function KN4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Jt0=32,$p,cW$,gW$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new vY(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,$p),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,G){let Q=this[$],Y=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Y)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Q.fill(G);let J=Z.split(",");if(J.length>1)for(let K=0;K<J.length;K++)this.partToArray($,J[K],X,G);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,G):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,G):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,G):Z!==""&&this.handleNumber(Z,$,X,G)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,X,G){let Q=this.extractNth($,Z),Y=parseInt(Q[0],10)+X;if(isNaN(Y))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Y,Q[1]||G)}setPart($,Z,X){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,X);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=X}handleRangeWithStepping($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Y===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,K,W]=Y,N=parseInt(J,10)+X,H=parseInt(K,10)+X,F=parseInt(W,10);if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(N>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=N;U<=H;U+=F)this.setPart(Z,U,Q[1]||G)}extractNth($,Z){let X=$,G;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].split("-");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Y[0],10)+X,K=parseInt(Y[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>K)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let W=J;W<=K;W++)this.setPart(Z,W,Q[1]||G)}handleStepping($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].split("/");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Y[0]===""&&(Y[0]="*");let J=0;Y[0]!=="*"&&(J=parseInt(Y[0],10)+X);let K=parseInt(Y[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let W=J;W<this[Z].length;W+=K)this.setPart(Z,W,Q[1]||G)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|Jt0;else if(Z===$p)this.dayOfWeek[$]=$p;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|cW$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},hW$,XH,vY=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,X,G,Q){let Y=new Date(Date.UTC(Z,X,G)).getUTCDay(),J=0;for(let K=1;K<=G;K++)new Date(Date.UTC(Z,X,K)).getUTCDay()===Y&&J++;if(Q&$p&&cW$[J-1]&Q)return!0;if(Q&Jt0){let K=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let W=G+1;W<=K;W++)if(new Date(Date.UTC(Z,X,W)).getUTCDay()===Y)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let X=o7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>hW$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let X=o7.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(o7.fromTZISO(Z,this.tz))}findNext(Z,X,G,Q){let Y=this[X],J;G.lastDayOfMonth&&(this.month!==1?J=hW$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let W=this[X]+Q;W<G[X].length;W++){let N=G[X][W];if(X==="day"&&G.lastDayOfMonth&&W-Q==J&&(N=1),X==="day"&&!G.starDOW){let H=G.dayOfWeek[(K+(W-Q-1))%7];if(H&&H&$p)H=this.isNthWeekdayOfMonth(this.year,this.month,W-Q,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!G.starDOM?N=N||H:N=N&&H}if(N)return this[X]=W-Q,Y!==this[X]?2:1}return 3}recurse(Z,X,G){let Q=this.findNext(X,XH[G][0],Z,XH[G][2]);if(Q>1){let Y=G+1;for(;Y<XH.length;)this[XH[Y][0]]=-XH[Y][2],Y++;if(Q===3)return this[XH[G][1]]++,this[XH[G][0]]=-XH[G][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,G-1)}return G+=1,G>=XH.length?this:this.year>=3000?null:this.recurse(Z,X,G)}increment(Z,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):o7.fromTZ(o7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},uW$=30000,aw0,sw0=class{name;options;_states;fn;constructor($,Z,X){let G,Q;if(en(Z))Q=Z;else if(typeof Z=="object")G=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(en(X))Q=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=YN4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new gW$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new vY($,this.options.timezone||this.options.utcOffset):this._states.pattern=new gW$($,this.options.timezone),this.name){if(aw0.find((Y)=>Y.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");aw0.push(this)}return Q!==void 0&&JN4(Q)&&(this.fn=Q,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let X=[],G=Z||this._states.currentRun||void 0;for(;$--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return Z&&X&&G&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof vY||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new vY($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=aw0.indexOf(this);$>=0&&aw0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>uW$&&(Z=uW$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&KN4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new vY(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){en(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new vY($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,X=!this._states.paused&&Z.getTime()>=$.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&en(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new vY($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let G=this._states.once||new vY($,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun($,Z){let X=new vY(void 0,this.options.timezone||this.options.utcOffset),G=$;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Q=G.getTime()+this.options.interval*1000;for(;Q<=X.getTime();)G=new vY(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Q=G.getTime()+this.options.interval*1000;Z=!0}return G===null&&(G=void 0),[G,Z]}};var Kt0=B(()=>{o7.fromTZISO=($,Z,X)=>o7.fromTZ(QN4($,Z),X);o7.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),G=Yt0($.tz,X),Q=new Date(X.getTime()-G),Y=Yt0($.tz,Q);if(Y-G===0)return Q;{let J=new Date(X.getTime()-Y),K=Yt0($.tz,J);if(K-Y===0)return J;if(!Z&&K-Y>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Q}};o7.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:Z}};o7.tp=($,Z,X,G,Q,Y,J)=>({y:$,m:Z,d:X,h:G,i:Q,s:Y,tz:J});o7.minitz=o7;$p=31|Jt0,cW$=[1,2,4,8,16],hW$=[31,28,31,30,31,30,31,31,30,31,30,31],XH=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];aw0=[]});function ew0($,Z){try{return new sw0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Wt0=B(()=>{Kt0()});import{DBOS as Z7,SchedulerMode as WN4}from"@dbos-inc/dbos-sdk";async function wt0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
|
|
1555
|
+
`);await tn($,Z,{title:`${Sd[X]}: ${Z.title}`,prompt:Y,temperature:0.3}),await CY($,{taskBoardItemId:Z.id,action:"review_requested",actorId:null,data:{reviewer:X}});let J=await $.storage.taskBoard.getById(Z.id,Q);if(J)o5(Q,J)}var CW4,_W4;var hp0=B(()=>{fJ();yw();bX();Vp0();CW4=new Set(["completed","failed","expired"]),_W4={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function xW4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=FW$}async function mw0($,Z,X,G){if(X.status!=="in_review")return!1;if(X.assigneeId!==c5)return!1;if(G.conflict!==!0)return!1;let Y=(await $.storage.organizationSettings.get(Z))?.flags??{};if(Y.auto_merge!==!0)return!1;let J=MU.filter((H)=>Y[kU[H]]===!0),K=await $.storage.taskBoard.listActivity(X.id,Z);if(!Qf(K,J,{verifiedOnly:!0}))return!1;if(xW4(K))return console.warn(`[task-board] conflict auto-resolve cap (${FW$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let W=G.pr,N=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!N)return!1;return await CY($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:W.number}}),o5(Z,N),await on($,N,{pr:{number:W.number,url:W.url},resolveConflict:!0}),!0}var FW$=3;var up0=B(()=>{fJ();yw();bX();dx()});import{z as iw0}from"zod";async function an($,Z,X,G){if(X){let J=await $.storage.connections.findById(X,Z);if(J&&J.status==="active")return J}let{items:Q}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Y=Q.filter((J)=>J.status==="active");if(G){let J=Y.find((K)=>{let W=qX(K);return W?.owner===G.owner&&W?.repo===G.name});if(J)return J}return Y.find((J)=>qX(J)===null)??Y[0]??null}function sn($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((G)=>G.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function lp0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")}function yW4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&lp0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function gW4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[];for(let X of Z){let G=X&&typeof X.body==="string"?X.body:"";if(!G)continue;let Q=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(Q?.[1]&&lp0(Q[1]))return Q[1];let Y=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((J)=>lp0(J));if(Y)return Y}return null}function UW$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function OW$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,G=!1;for(let Q of Z){if(!Q||typeof Q!=="object")continue;let{status:Y,conclusion:J}=Q;if(Y!=="completed")G=!0;else if(typeof J==="string"&&wW$.has(J))X=!0}if(X)return"failing";if(G)return"pending";return"passing"}function BW$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function hW4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let G of Z){if(!G||typeof G!=="object")continue;let Q=G;X.push({id:typeof Q.id==="number"?Q.id:null,name:typeof Q.name==="string"?Q.name:"",status:typeof Q.status==="string"?Q.status:"completed",conclusion:typeof Q.conclusion==="string"?Q.conclusion:null,detailsUrl:typeof Q.html_url==="string"?Q.html_url:typeof Q.details_url==="string"?Q.details_url:null})}return X}function uW4($){return $.status==="completed"&&$.conclusion!=null&&wW$.has($.conclusion)}async function cW4($,Z,X){try{let Q=sn(await $.callTool({name:"GET_CHECK_RUN",arguments:{owner:Z.repoOwner,repo:Z.repoName,checkRunId:X}},void 0,{timeout:rn}))?.output,Y=typeof Q?.summary==="string"?Q.summary:null,J=typeof Q?.text==="string"?Q.text:null;return Y??J??null}catch{return null}}async function DW$($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Q=await P5(G,$,!0),Y=async(J)=>sn(await Q.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn}));try{let J=null;try{J=UW$(await Y("get_status"))}catch{}try{J=BW$(J,OW$(await Y("get_check_runs")))}catch{}return J}finally{await Q.close().catch(()=>{})}}function LW$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function EW$($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Q=await P5(G,$,!0);try{return LW$(sn(await Q.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn})))}catch{return null}finally{await Q.close().catch(()=>{})}}async function lW4($,Z){let X=async(N)=>{try{return sn(await $.callTool({name:"pull_request_read",arguments:{method:N,owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number}},void 0,{timeout:rn}))}catch{return null}},[G,Q,Y]=await Promise.all([X("get_status"),X("get_check_runs"),X("get_comments")]),J=BW$(UW$(G),OW$(Q)),K=yW4(G)??gW4(Y),W=await Promise.all(hW4(Q).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:uW4(N)&&N.id!=null?await cW4($,Z,N.id):null})));return{checksStatus:J,checks:W,previewUrl:K}}async function dW4($,Z,X){let G=await an($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return cp0;let Q=await P5(G,$,!0);try{let[Y,J]=await Promise.all([Q.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:rn}),lW4(Q,X)]),K=sn(Y);if(!K)return cp0;let W=K.state,N=W==="open";return{title:typeof K.title==="string"?K.title:null,body:typeof K.body==="string"?K.body:null,state:W==="closed"?"closed":N?"open":null,draft:typeof K.draft==="boolean"?K.draft:null,merged:typeof K.merged==="boolean"?K.merged:null,mergeable:N&&typeof K.mergeable==="boolean"?K.mergeable:null,checksStatus:N?J.checksStatus:null,checks:N?J.checks:[],previewUrl:N?J.previewUrl:null}}catch{return cp0}finally{await Q.close().catch(()=>{})}}var rn=8000,cp0,wW$,dp0;var nw0=B(()=>{f0();bN();CN();fJ();qK();bX();hp0();up0();In0();cp0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};wW$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);dp0=m({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:iw0.object({taskBoardItemId:iw0.string()}),outputSchema:iw0.object({prs:iw0.array(J0$)}),handler:async({taskBoardItemId:$},Z)=>{W0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);for(let N of G?.threads??[]){let H=N.lastMessage?Zw0(N.lastMessage):null;if(!H)continue;try{await Z.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:X,url:H.url,prNumber:H.number,repoOwner:H.owner,repoName:H.repo,connectionId:null})}catch(F){console.error("[task-board] PR recovery from thread text failed",F)}}let Q=await Z.storage.taskBoard.listPrs($,X),Y=await Promise.all(Q.map(async(N)=>{let H=await dW4(Z,X,N);return{url:N.url,number:N.number,repoOwner:N.repoOwner,repoName:N.repoName,createdAt:N.createdAt,...H}})),J=Y.find((N)=>N.state==="open"&&!N.merged),K=J!=null&&J.checksStatus!=="pending"&&J.checksStatus!=="failing";if(G&&G.status==="in_review"&&G.assigneeId===c5&&K)await gp0(Z,G).catch((N)=>{console.error("[task-board] reviewer auto-handoff failed",N)});let W=J?LW$({state:J.state,mergeable:J.mergeable}):null;if(G&&G.status==="in_review"&&G.assigneeId===c5&&J&&W===!0)await mw0(Z,X,G,{pr:{number:J.number,url:J.url},conflict:!0}).catch((N)=>{console.error("[task-board] conflict auto-resolve failed",N)});if(Y.some((N)=>N.merged))try{if(G&&G.status!=="done"){let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);o5(X,N)}}catch(N){console.error("[task-board] merge\u2192done reconcile failed",N)}return{prs:Y}}})});async function pw0($,Z,X){let Q=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!Q)return!1;let Y=await DW$($,Z,Q);if(Y==="failing"||Y==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${Y} on PR #${Q.number}`),!1;let J=await an($,Z,Q.connectionId,{owner:Q.repoOwner,name:Q.repoName});if(!J)return!1;let K=await P5(J,$,!0);try{return!(await K.callTool({name:"merge_pull_request",arguments:{owner:Q.repoOwner,repo:Q.repoName,pullNumber:Q.number}},void 0,{timeout:mW4}))?.isError}catch(W){return console.error("[task-board] merge PR failed",W),!1}finally{await K.close().catch(()=>{})}}var mW4=15000;var mp0=B(()=>{bN();nw0()});import{z as hw}from"zod";async function iW4($,Z,X){let Q=(await $.storage.organizationSettings.get(Z))?.flags??{},Y=MU.filter((K)=>Q[kU[K]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return Qf(J,Y,{verifiedOnly:!0})}var ip0;var zW$=B(()=>{f0();fJ();qK();yw();bX();dx();mp0();nw0();up0();ip0=m({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:hw.object({taskBoardItemId:hw.string(),reviewer:hw.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:hw.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:hw.enum(["approve","request_changes"]),notes:hw.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:hw.object({status:uN,merged:hw.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:G,notes:Q},Y)=>{W0(Y),await Y.access.check();let J=Y.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let K=await Y.storage.taskBoard.getById($,J);if(!K)throw Error(`Task board item not found: ${$}`);let N=(X?await Y.storage.taskBoard.resolveReviewClaimByToken($,X):null)?.reviewer===Z;if(G==="request_changes"){let D=await Y.storage.taskBoard.update($,J,{status:"in_progress"},K.updatedBy);await CY(Y,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Q,verified:N}}),o5(J,D);let E=(await Y.storage.taskBoard.listPrs($,J))[0];return await on(Y,D,{feedback:`${Sd[Z]}: ${Q}`,pr:E?{number:E.number,url:E.url}:void 0}).catch((z)=>{console.error("[task-board] request_changes re-enqueue failed",z)}),{status:D.status,merged:!1}}if(await CY(Y,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Q,verified:N}}),!await iW4(Y,J,$)){let D=await Y.storage.taskBoard.getById($,J)??K;return o5(J,D),{status:D.status,merged:!1}}let U=(await Y.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(U?await pw0(Y,J,$):!1){let D=await Y.storage.taskBoard.update($,J,{status:"done"},K.updatedBy);return await CY(Y,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:K.status,to:"done"}}),o5(J,D),{status:D.status,merged:!0}}let O=await Y.storage.taskBoard.getById($,J)??K;if(U){let L=(await Y.storage.taskBoard.listPrs($,J))[0];if(L?await mw0(Y,J,O,{pr:{number:L.number,url:L.url},conflict:await EW$(Y,J,L)}).catch((z)=>{return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await Y.storage.taskBoard.getById($,J)??O).status,merged:!1}}return o5(J,O),{status:O.status,merged:!1}}})});import{z as tw0}from"zod";function nW4($,Z,X){if($!=="in_review")return!1;return X.length===0||Qf(Z,X)}var np0;var jW$=B(()=>{f0();fJ();qK();yw();bX();mp0();np0=m({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:tw0.object({taskBoardItemId:tw0.string()}),outputSchema:tw0.object({status:uN,merged:tw0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{W0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);let Y=(await Z.storage.organizationSettings.get(X))?.flags??{},J=MU.filter((H)=>Y[kU[H]]===!0),K=await Z.storage.taskBoard.listActivity($,X);if(!nW4(G.status,K,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await pw0(Z,X,$))return{status:G.status,merged:!1};let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);if(G.status!=="done")await CY(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}});return o5(X,N),{status:N.status,merged:!0}}})});var PW$=B(()=>{YW$();WW$();NW$();HW$();nw0();zW$();jW$();yw()});import{z as ZH}from"zod";var pp0;var AW$=B(()=>{f0();pp0=m({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ZH.object({}),outputSchema:ZH.object({tags:ZH.array(ZH.object({id:ZH.string(),organizationId:ZH.string(),name:ZH.string(),color:ZH.string().nullable(),createdAt:ZH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as lK}from"zod";var tp0;var TW$=B(()=>{f0();tp0=m({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:lK.object({name:lK.string().min(1).max(50).describe("Tag name"),color:lK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:lK.object({tag:lK.object({id:lK.string(),organizationId:lK.string(),name:lK.string(),color:lK.string().nullable(),createdAt:lK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z),G=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}}}})});import{z as ow0}from"zod";var op0;var RW$=B(()=>{f0();op0=m({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ow0.object({tagId:ow0.string().describe("Tag ID to delete")}),outputSchema:ow0.object({success:ow0.boolean()}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z),G=await Z.storage.tags.getTag($.tagId);if(!G)throw Error("Tag not found");if(G.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as dK}from"zod";var rp0;var IW$=B(()=>{f0();rp0=m({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:dK.object({memberId:dK.string().describe("Member ID")}),outputSchema:dK.object({tags:dK.array(dK.object({id:dK.string(),organizationId:dK.string(),name:dK.string(),color:dK.string().nullable(),createdAt:dK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as _Y}from"zod";var ap0;var qW$=B(()=>{f0();ap0=m({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_Y.object({memberId:_Y.string().describe("Member ID"),tagIds:_Y.array(_Y.string()).describe("Array of tag IDs to assign")}),outputSchema:_Y.object({success:_Y.boolean(),tags:_Y.array(_Y.object({id:_Y.string(),organizationId:_Y.string(),name:_Y.string(),createdAt:_Y.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{W0(Z),await Z.access.check();let X=e(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Y of $.tagIds){let J=await Z.storage.tags.getTag(Y);if(!J)throw Error(`Tag not found: ${Y}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${Y}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});var MW$=B(()=>{AW$();TW$();RW$();IW$();qW$()});import{z as kW$}from"zod";function aW4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Q],[,Y])=>{let J=Math.max(0,...Object.values(Q).map((W)=>W.createdAt??0));return Math.max(0,...Object.values(Y).map((W)=>W.createdAt??0))-J})[0]?.[0]}var oW4,rW4,sp0;var SW$=B(()=>{B6();f0();UV();BX();oW4=kW$.object({data:w3$.describe("Data for the new thread (id is auto-generated if not provided)")}),rW4=kW$.object({item:cK.describe("The created thread entity")});sp0=m({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:oW4,outputSchema:rW4,handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("User ID required to create thread");let{data:Q}=$,Y=Q.id??n8("thrd"),J=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`);let K=J.metadata,W=K?.githubRepo,N=null;if(W)N=Q.branch??aW4(K?.sandboxMap,G)??cU0(uU0(Z.auth.user));let H=await Z.storage.threads.create({id:Y,organization_id:X.id,title:Q.title,description:Q.description,virtual_mcp_id:Q.virtual_mcp_id,branch:N,created_by:G});if(H.isNew)x1.capture({distinctId:G,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y,has_title:!!$.data.title,created_via:"tool"}});return{item:VY(H)}}})});import{z as ep0}from"zod";var sW4,eW4,$t0;var VW$=B(()=>{B6();f0();UV();sW4=ep0.object({id:ep0.string().describe("ID of the thread to update"),data:O3$.describe("Partial thread data to update")}),eW4=ep0.object({item:cK.describe("The updated thread entity")}),$t0=m({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sW4,outputSchema:eW4,handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("User ID required to update thread");let{id:Q,data:Y}=$,J=await Z.storage.threads.get(Q);if(!J)throw Error("Thread not found in organization");if(Y.virtual_mcp_id!==void 0){let N=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!N||N.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`)}if(Y.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let K={title:Y.title,description:Y.description,hidden:Y.hidden,updated_by:G};if(Y.status)K.status=Y.status;if(Y.metadata!==void 0)K.metadata=Y.metadata;if(Y.branch!==void 0)K.branch=Y.branch;if(Y.virtual_mcp_id!==void 0)K.virtual_mcp_id=Y.virtual_mcp_id;let W=await Z.storage.threads.update(Q,K);if(Y.hidden!==void 0&&Y.hidden!==J.hidden)x1.capture({distinctId:G,event:Y.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Q}});return{item:VY(W)}}})});var Zt0;var CW$=B(()=>{TY();UV();B6();f0();Zt0=m({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ji,outputSchema:Pi(cK),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Q=z1(Z);if(Q)x1.capture({distinctId:Q,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:VY(G)}}})});var _W$=B(()=>{SW$();mn0();in0();VW$();CW$();nn0()});function ZN4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function XN4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let G=Z.parts.find((Q)=>Q.type==="text"&&typeof Q.text==="string");if(!G?.text||typeof G.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:ZN4(G.text)}}})}function rw0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return XN4(Z)}import{z as b6}from"zod";var Xt0;var vW$=B(()=>{B6();f0();IY();Xt0=m({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:b6.object({name:b6.string().min(1).max(255),virtual_mcp_id:b6.string(),messages:b6.union([b6.string(),b6.array(b6.looseObject({id:b6.string().optional(),role:b6.enum(["user","assistant","system"]),parts:b6.array(b6.record(b6.string(),b6.unknown())),metadata:b6.unknown().optional()}))]),models:b6.object({tier:sU,modelId:b6.string().optional(),credentialId:b6.string().optional()}).loose().default({tier:"smart"}),tools:b6.array(b6.string()).nullable().optional(),maxAgentSteps:b6.number().int().min(1).max(100).nullable().optional(),temperature:b6.number().default(0.5),active:b6.boolean().default(!0)}),outputSchema:b6.object({id:b6.string(),name:b6.string(),active:b6.boolean(),created_at:b6.string()}),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=z1(Z);if(!G)throw Error("Unable to determine user identity");let Q=rw0($.messages),Y=await Z.storage.automations.create({organization_id:X.id,created_by:G,name:$.name,messages:JSON.stringify(Q),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return x1.capture({distinctId:G,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:Y.id,virtual_mcp_id:$.virtual_mcp_id,active:Y.active,tier:$.models.tier}}),{id:Y.id,name:Y.name,active:Y.active,created_at:Y.created_at}}})});import{z as A6}from"zod";var Gt0;var bW$=B(()=>{f0();Gt0=m({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A6.object({id:A6.string()}),outputSchema:A6.object({automation:A6.object({id:A6.string(),name:A6.string(),active:A6.boolean(),created_by:A6.string(),created_at:A6.string(),updated_at:A6.string(),virtual_mcp_id:A6.string(),messages:A6.unknown(),models:A6.unknown(),tools:A6.array(A6.string()).nullable(),maxAgentSteps:A6.number().nullable(),temperature:A6.number(),triggers:A6.array(A6.object({id:A6.string(),type:A6.enum(["cron","event","webhook"]),cron_expression:A6.string().nullable(),connection_id:A6.string().nullable(),event_type:A6.string().nullable(),params:A6.unknown().nullable(),last_run_at:A6.string().nullable(),api_key_id:A6.string().nullable(),created_at:A6.string()}))}).nullable()}),handler:async($,Z)=>{W0(Z);let X=e(Z);await Z.access.check();let G=await Z.storage.automations.findById($.id,X.id);if(!G)return{automation:null};let Q=await Z.storage.automations.listTriggers(G.id);return{automation:{id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,updated_at:G.updated_at,virtual_mcp_id:G.virtual_mcp_id,messages:JSON.parse(G.messages),models:JSON.parse(G.models),tools:G.tools?JSON.parse(G.tools):null,maxAgentSteps:G.max_agent_steps,temperature:G.temperature,triggers:Q.map((Y)=>({id:Y.id,type:Y.type,cron_expression:Y.cron_expression,connection_id:Y.connection_id,event_type:Y.event_type,params:Y.params?JSON.parse(Y.params):null,last_run_at:Y.last_run_at,api_key_id:Y.api_key_id,created_at:Y.created_at}))}}}})});import{z as IQ}from"zod";var Qt0;var fW$=B(()=>{f0();Qt0=m({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IQ.object({virtual_mcp_id:IQ.string().optional().nullable()}),outputSchema:IQ.object({automations:IQ.array(IQ.object({id:IQ.string(),name:IQ.string(),active:IQ.boolean(),created_by:IQ.string(),created_at:IQ.string(),trigger_count:IQ.number(),nearest_next_run_at:IQ.string().nullable(),virtual_mcp_id:IQ.string()}))}),handler:async($,Z)=>{W0(Z);let X=e(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((Y)=>({id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,trigger_count:Y.trigger_count,nearest_next_run_at:Y.nearest_next_run_at,virtual_mcp_id:Y.virtual_mcp_id}))}}})});function GN4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function xW$($){return`${$}:context`}function yW$($,Z,X,G,Q){return{messages:JSON.parse($.messages).map((W,N)=>({...W,id:`${X}:${N}`})),models:{credentialId:G.credentialId,thinking:G.thinking,...G.image?{image:G.image}:{},...G.webSearch?{webSearch:G.webSearch}:{},...G.deepResearch?{deepResearch:G.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:GN4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...Q?{runMetadata:Q}:{},taskId:X}}function o7($,Z,X,G,Q,Y,J,K){return o7.fromTZ(o7.tp($,Z,X,G,Q,Y,J),K)}function Yt0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function QN4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=$.substring(9);return $.includes("Z")||G.includes("-")||G.includes("+")?o7.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):o7.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function YN4($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new vY($.startAt,$.timezone)),$.stopAt&&($.stopAt=new vY($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function en($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function JN4($){return en($)}function KN4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Jt0=32,$p,cW$,gW$=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new vY(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,$p),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,G){let Q=this[$],Y=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Y)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Q.fill(G);let J=Z.split(",");if(J.length>1)for(let K=0;K<J.length;K++)this.partToArray($,J[K],X,G);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,G):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,G):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,G):Z!==""&&this.handleNumber(Z,$,X,G)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,X,G){let Q=this.extractNth($,Z),Y=parseInt(Q[0],10)+X;if(isNaN(Y))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Y,Q[1]||G)}setPart($,Z,X){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,X);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=X}handleRangeWithStepping($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Y===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,K,W]=Y,N=parseInt(J,10)+X,H=parseInt(K,10)+X,F=parseInt(W,10);if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(N>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=N;U<=H;U+=F)this.setPart(Z,U,Q[1]||G)}extractNth($,Z){let X=$,G;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].split("-");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Y[0],10)+X,K=parseInt(Y[1],10)+X;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>K)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let W=J;W<=K;W++)this.setPart(Z,W,Q[1]||G)}handleStepping($,Z,X,G){let Q=this.extractNth($,Z),Y=Q[0].split("/");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Y[0]===""&&(Y[0]="*");let J=0;Y[0]!=="*"&&(J=parseInt(Y[0],10)+X);let K=parseInt(Y[1],10);if(isNaN(K))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(K===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(K>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let W=J;W<this[Z].length;W+=K)this.setPart(Z,W,Q[1]||G)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|Jt0;else if(Z===$p)this.dayOfWeek[$]=$p;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|cW$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},hW$,XH,vY=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,X,G,Q){let Y=new Date(Date.UTC(Z,X,G)).getUTCDay(),J=0;for(let K=1;K<=G;K++)new Date(Date.UTC(Z,X,K)).getUTCDay()===Y&&J++;if(Q&$p&&cW$[J-1]&Q)return!0;if(Q&Jt0){let K=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let W=G+1;W<=K;W++)if(new Date(Date.UTC(Z,X,W)).getUTCDay()===Y)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let X=o7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>hW$[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let X=o7.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(o7.fromTZISO(Z,this.tz))}findNext(Z,X,G,Q){let Y=this[X],J;G.lastDayOfMonth&&(this.month!==1?J=hW$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let K=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let W=this[X]+Q;W<G[X].length;W++){let N=G[X][W];if(X==="day"&&G.lastDayOfMonth&&W-Q==J&&(N=1),X==="day"&&!G.starDOW){let H=G.dayOfWeek[(K+(W-Q-1))%7];if(H&&H&$p)H=this.isNthWeekdayOfMonth(this.year,this.month,W-Q,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!G.starDOM?N=N||H:N=N&&H}if(N)return this[X]=W-Q,Y!==this[X]?2:1}return 3}recurse(Z,X,G){let Q=this.findNext(X,XH[G][0],Z,XH[G][2]);if(Q>1){let Y=G+1;for(;Y<XH.length;)this[XH[Y][0]]=-XH[Y][2],Y++;if(Q===3)return this[XH[G][1]]++,this[XH[G][0]]=-XH[G][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,G-1)}return G+=1,G>=XH.length?this:this.year>=3000?null:this.recurse(Z,X,G)}increment(Z,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):o7.fromTZ(o7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},uW$=30000,aw0,sw0=class{name;options;_states;fn;constructor($,Z,X){let G,Q;if(en(Z))Q=Z;else if(typeof Z=="object")G=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(en(X))Q=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=YN4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new gW$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new vY($,this.options.timezone||this.options.utcOffset):this._states.pattern=new gW$($,this.options.timezone),this.name){if(aw0.find((Y)=>Y.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");aw0.push(this)}return Q!==void 0&&JN4(Q)&&(this.fn=Q,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let X=[],G=Z||this._states.currentRun||void 0;for(;$--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return Z&&X&&G&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof vY||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new vY($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=aw0.indexOf(this);$>=0&&aw0.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>uW$&&(Z=uW$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&KN4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new vY(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){en(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new vY($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,X=!this._states.paused&&Z.getTime()>=$.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&en(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new vY($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let G=this._states.once||new vY($,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun($,Z){let X=new vY(void 0,this.options.timezone||this.options.utcOffset),G=$;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Q=G.getTime()+this.options.interval*1000;for(;Q<=X.getTime();)G=new vY(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Q=G.getTime()+this.options.interval*1000;Z=!0}return G===null&&(G=void 0),[G,Z]}};var Kt0=B(()=>{o7.fromTZISO=($,Z,X)=>o7.fromTZ(QN4($,Z),X);o7.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),G=Yt0($.tz,X),Q=new Date(X.getTime()-G),Y=Yt0($.tz,Q);if(Y-G===0)return Q;{let J=new Date(X.getTime()-Y),K=Yt0($.tz,J);if(K-Y===0)return J;if(!Z&&K-Y>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Q}};o7.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:Z}};o7.tp=($,Z,X,G,Q,Y,J)=>({y:$,m:Z,d:X,h:G,i:Q,s:Y,tz:J});o7.minitz=o7;$p=31|Jt0,cW$=[1,2,4,8,16],hW$=[31,28,31,30,31,30,31,31,30,31,30,31],XH=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];aw0=[]});function ew0($,Z){try{return new sw0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Wt0=B(()=>{Kt0()});import{DBOS as Z7,SchedulerMode as WN4}from"@dbos-inc/dbos-sdk";async function wt0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
|
|
1556
1556
|
WHERE q.name LIKE $1
|
|
1557
1557
|
AND NOT EXISTS (
|
|
1558
1558
|
SELECT 1 FROM dbos.workflow_status w
|
|
@@ -2716,7 +2716,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2716
2716
|
|
|
2717
2717
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2718
2718
|
|
|
2719
|
-
Respond with the structured verdict and a short reason.`,xS$;var gS$=B(()=>{S4();Xw();Y$1();Qe4=J$1.object({requiresReview:J$1.boolean().describe("true if the changes should go through pull-request review"),reason:J$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});xS$={requiresReview:!1,reason:""}});function We4($){if(!$||$.includes(".."))return!1;return Ke4.test($)}function hS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!We4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function uS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ke4;var cS$=B(()=>{Ke4=/^[\w./@-]+$/});function K$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function lS$($,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 dS$($,Z,X,G){if(!G.connectionId)throw new Hg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Hg(h7);await U90({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Hg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await Nx(G.connectionId,G.owner,G.name,$.db,$.vault),W=BE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:K}},...W?{operator:W}:{}})});if(!N.ok){let H=await kw(N,Ne4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Ne4=10485760,Hg;var mS$=B(()=>{tU();s11();_n();w90();Hg=class Hg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Fe4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!He4.test(Z))throw Error(`Invalid branch name: ${$}`)}function FC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(we4)])}function UC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function W$1($,Z){let G=(DE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return DE0.set($,Q),Q.finally(()=>{if(DE0.get($)===Q)DE0.delete($)}),G}async function kZ($,Z,X){let G=UC($);if(G instanceof Response)return G;let{claimName:Q,userId:Y,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,N=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:K,headers:N,body:W,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Q,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Y,projectRef:J},Q))w=await G.proxyDaemonRequest(Q,Z,F);if(w.status===404){try{await w.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",..._Q}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?Be4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,..._Q}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Be4($){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 LE0($,Z,X,G="GET",Q){let Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Y.status===404&&Q){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Q,Z))Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok)try{let K=JSON.parse(J);throw Error(K.error??`Daemon error (${Y.status})`)}catch(K){if(K instanceof Error&&K.message!==J)throw K;throw Error(`Daemon error (${Y.status})`)}return JSON.parse(J)}function De4($){return pS$.includes($)}var He4,iS$=524288,Ue4=65536,we4=1e4,nS$=2000,Oe4,DE0,_Q,pS$,tS$=()=>{let $=new L1;return $.use("/:virtualMcpId/:branch/*",Oe4),$.post("/:virtualMcpId/:branch/write",(Z)=>kZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>kZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>kZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>kZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>kZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>kZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>kZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return kZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return kZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>kZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>kZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!De4(X))return Z.json({error:`step must be one of: ${pS$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=e(Z.var.studioContext),Y=gU0(G.virtualMcpMetadata);try{await hU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Q.id,userId:G.callerUserId,entries:Y})}catch(J){let K=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${K}`},502)}}}return kZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return IH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return VS$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(nS$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(nS$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>kZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return W$1(G,async()=>{try{await e11(J,X,G);let K=lS$(Q,Y);if(K)await dS$(J,X,G,K)}catch(K){if(K instanceof Hg)return Z.json({error:K.message},403,_Q);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,_Q)}return kZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return W$1(X,()=>kZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return W$1(G,async()=>{try{await e11(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,_Q)}return kZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:iS$,onError:(Z)=>Z.json({error:"Payload too large"},413,_Q)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=X$1(W)&&H?[W,N]:await Promise.all([LE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),LE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await fS$(J,F,U);return Z.json(w,200,_Q)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,_Q);return Z.json({error:W},502,_Q)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:iS$,onError:(Z)=>Z.json({error:"Payload too large"},413,_Q)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=X$1(W)&&H?[W,N]:await Promise.all([LE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),LE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await yS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,_Q)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,_Q);return Z.json({error:W},502,_Q)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.req.query("path");if(!Q||!Q.startsWith("/")||Q.startsWith("//")||Q.includes("..")||Q.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),K=K$1(`${J}${Q}`),W;try{W=await fetch(K?.url??`${J}${Q}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await W.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:W.status,headers:{"content-type":W.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",H7({maxSize:Ue4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=hS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=uS$(Q,J.resolveType),W=K$1(K),N;try{N=await fetch(W?.url??K,{method:"POST",headers:{"content-type":"application/json",...W?{host:W.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var oS$=B(()=>{i8();XC();Ng();qS$();mN();kS$();yK();GV();SS$();CS$();Yn0();Cn();Y$1();gS$();cS$();mS$();He4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Oe4=IS$(async($,Z)=>{let X=$.var.studioContext;try{W0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=z1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{Fe4(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=$n({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await QV(X,J,G),H=MS$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await AQ(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Y,branch:J,userId:N,projectRef:W,virtualMcpMetadata:F,connectionIds:K.connections?.map((w)=>w.connection_id)??[]}),Z()});DE0=new Map;_Q={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};pS$=["clone","install","start"]});var rS$=($)=>{let Z=new L1;if(Z.use("*",ZC),Z.route("/",_L0()),Z.route("/",Uq$()),Z.route("/",US$()),Z.route("/",HS$()),Z.route("/",UE0()),Z.route("/tools",zS$()),Z.route("/",DS$()),Z.route("/",tk$({kvStorage:$.kvStorage})),Z.route("/",nk$()),Z.route("/fs",YS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",tS$()),Z.route("/",KS$()),Z.route("/deco-sites",bL0()),Z.route("/sso",IL0()),Z.route("/",wE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Qq$()),$.mountDevAssets)Z.route("/dev-assets",fL0({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.route("/",Oa1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",YO0()),Z.route("/mcp/self",FE0()),Z.route("/mcp",WO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var aS$=B(()=>{i8();z01();Yq$();R01();xL0();Tt();L01();pk$();ok$();JS$();Ji();W01();NO0();i11();WS$();FS$();wS$();LS$();p11();jS$();t11();JO0();oS$()});function Ee4($){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}}))}async function ze4($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(Le4)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var Le4=1e4,je4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},sS$=()=>{let $=new L1;return $.use("*",je4),$.get("/",async(Z)=>{let X=n0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await ze4(G,Q);return Z.json({apps:Ee4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var eS$=B(()=>{i8();f$()});import{z as I1}from"zod";function HW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Ve4($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function Ce4($,Z,X){try{return JSON.parse($)}catch{throw new XV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function _e4($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:Ce4(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function ve4($){let Z=$.map((X)=>{let G=X.function.parameters?NQ(X.function.parameters):NQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function be4($){if(!$)return;return{openai:{response_format:$}}}function fe4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function $V$($,Z,X,G,Q,Y){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Y};return Q?{...J,providerOptions:Q}:J}function ZV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Pe4=256,Ae4,Te4,Re4,Ie4,qe4,Me4,ke4,Se4,XV$,GV$,QV$;var YV$=B(()=>{S4();i8();Ng();QH();Ae4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Te4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),Re4=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(Te4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),Ie4=I1.object({type:I1.literal("text")}),qe4=I1.object({type:I1.literal("json_object")}),Me4=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),ke4=I1.union([Ie4,qe4,Me4]),Se4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(Re4),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(Ae4).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:ke4.optional(),user:I1.string().optional()});XV$=class XV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};GV$=new L1;GV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(HW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(HW("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(HW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=Se4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(HW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=Ve4(Y.model);if(!J)return $.json(HW("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>TB(z.providerId));if(!E)return $.json(HW("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);K=E.id}let N;try{N=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(HW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=_e4(Y.messages),U=Y.tools?ve4(Y.tools):void 0,w=be4(Y.response_format),O=fe4(),D=Math.floor(Date.now()/1000);if(Y.stream)return IH($,async(L)=>{let E=$V$(H,F,U,Y,w,$.req.raw.signal);try{let z=Hw(E),j=!1,A=0,P="",I=async()=>{if(P.length===0)return;let V=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:V},finish_reason:null}]})})};for await(let V of z.fullStream){if(!j&&(V.type==="text-delta"||V.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(V.type==="text-delta"){if(P+=V.text,P.length>=Pe4)await I()}else if(V.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:V.toolCallId,type:"function",function:{name:V.toolName,arguments:JSON.stringify(V.input)}}]},finish_reason:null}]})})}else if(V.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:ZV$(V.finishReason)}],usage:V.totalUsage?{prompt_tokens:V.totalUsage.inputTokens??0,completion_tokens:V.totalUsage.outputTokens??0,total_tokens:V.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=$V$(H,F,U,Y,w,$.req.raw.signal),E=await Ww(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:z,finish_reason:ZV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Q=G;if(Q.name==="AbortError")return $.json(HW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(HW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(HW(Q.message,"server_error"),500)}});QV$=GV$});var KV$;var JV$=B(()=>{KV$={name:"decocms",version:"4.169.0",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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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","@nats-io/jwt":"0.0.10-5","@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 ge4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ye4}}var WV$,ye4="https://ph.studio.decocms.com",NV$;var HV$=B(()=>{i8();sV0();WV();wZ();f$();G01();JV$();WV$=new L1;WV$.get("/",($)=>{let Z={version:KV$.version,theme:Rq1(),...kB().logo&&{logo:kB().logo},...hK()&&{internalUrl:qI1()},...n0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!n0().firecrawlApiKey,auth:z2$(),posthog:ge4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!hK()&&n0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});NV$=WV$});function Fg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function N$1($){return(Fg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function UV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Fg($))}&sz=${Z}`}function FV$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Q=G.lastIndexOf(" ");return`${(Q>Z*0.6?G.slice(0,Q):G).trimEnd()}\u2026`}function wV$($){let{brand:Z,domain:X,score:G,verdict:Q}=$,Y=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Q?.trim()?FV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):FV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var wC,he4,ue4,ce4,le4,OV$;var BV$=B(()=>{wC=c0.enum(["good","bad","neutral"]),he4=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:wC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),ue4=c0.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},c0.array(he4)),ce4={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},le4=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:wC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:wC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:wC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:wC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(ue4).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:wC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:wC.optional()})).min(1)})]),OV$=c0.object({...ce4,template:le4})});function EE0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=OV$.safeParse(G.props);if(Q.success)return Q.data;let Y=Q.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Y?`${Y.path.join(".")||"(root)"}: ${Y.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var H$1=B(()=>{BV$()});import{join as DV$}from"path";async function me4($){try{let Z=await fetch(`${e3({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(de4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=EE0(X);if(!G.slides.length)return null;let Q=G.slides.find((K)=>K.template.template==="cover"),Y=Q?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:G.meta.brand?.trim()||N$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function vQ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ie4($,Z){let X=Fg($),G=Z?.brand?.trim()||N$1(X),Q=UV$(X,128),J=`${(n0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=wV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${vQ(K)}</title>`,`<meta name="description" content="${vQ(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${vQ(K)}" />`,`<meta property="og:description" content="${vQ(W)}" />`,`<meta property="og:url" content="${vQ(J)}" />`,`<meta property="og:image" content="${vQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${vQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${vQ(K)}" />`,`<meta name="twitter:description" content="${vQ(W)}" />`,`<meta name="twitter:image" content="${vQ(N)}" />`,`<meta name="twitter:image:alt" content="${vQ(H)}" />`,`<link rel="canonical" href="${vQ(J)}" />`,`<link rel="icon" href="${vQ(Q)}" sizes="any" />`].join(`
|
|
2719
|
+
Respond with the structured verdict and a short reason.`,xS$;var gS$=B(()=>{S4();Xw();Y$1();Qe4=J$1.object({requiresReview:J$1.boolean().describe("true if the changes should go through pull-request review"),reason:J$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});xS$={requiresReview:!1,reason:""}});function We4($){if(!$||$.includes(".."))return!1;return Ke4.test($)}function hS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!We4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function uS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ke4;var cS$=B(()=>{Ke4=/^[\w./@-]+$/});function K$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function lS$($,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 dS$($,Z,X,G){if(!G.connectionId)throw new Hg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Hg(h7);await U90({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Hg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await Nx(G.connectionId,G.owner,G.name,$.db,$.vault),W=BE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:K}},...W?{operator:W}:{}})});if(!N.ok){let H=await kw(N,Ne4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var Ne4=10485760,Hg;var mS$=B(()=>{tU();s11();_n();w90();Hg=class Hg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Fe4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!He4.test(Z))throw Error(`Invalid branch name: ${$}`)}function FC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(we4)])}function UC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function W$1($,Z){let G=(DE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return DE0.set($,Q),Q.finally(()=>{if(DE0.get($)===Q)DE0.delete($)}),G}async function kZ($,Z,X){let G=UC($);if(G instanceof Response)return G;let{claimName:Q,userId:Y,projectRef:J}=$.get("vmClaim"),K=X?.method??"POST",W=null,N=new Headers;if(X?.jsonBody!==void 0)W=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)W=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:K,headers:N,body:W,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Q,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Y,projectRef:J},Q))w=await G.proxyDaemonRequest(Q,Z,F);if(w.status===404){try{await w.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",..._Q}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?Be4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,..._Q}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Be4($){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 LE0($,Z,X,G="GET",Q){let Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Y.status===404&&Q){try{await Y.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Q,Z))Y=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Y.status===404){try{await Y.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Y.text();if(!Y.ok)try{let K=JSON.parse(J);throw Error(K.error??`Daemon error (${Y.status})`)}catch(K){if(K instanceof Error&&K.message!==J)throw K;throw Error(`Daemon error (${Y.status})`)}return JSON.parse(J)}function De4($){return pS$.includes($)}var He4,iS$=524288,Ue4=65536,we4=1e4,nS$=2000,Oe4,DE0,_Q,pS$,tS$=()=>{let $=new L1;return $.use("/:virtualMcpId/:branch/*",Oe4),$.post("/:virtualMcpId/:branch/write",(Z)=>kZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>kZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>kZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>kZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>kZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>kZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>kZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:FC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return kZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return kZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>kZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>kZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!De4(X))return Z.json({error:`step must be one of: ${pS$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=e(Z.var.studioContext),Y=gU0(G.virtualMcpMetadata);try{await hU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Q.id,userId:G.callerUserId,entries:Y})}catch(J){let K=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${K}`},502)}}}return kZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return IH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return VS$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(nS$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(nS$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>kZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return W$1(G,async()=>{try{await e11(J,X,G);let K=lS$(Q,Y);if(K)await dS$(J,X,G,K)}catch(K){if(K instanceof Hg)return Z.json({error:K.message},403,_Q);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,_Q)}return kZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return W$1(X,()=>kZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return W$1(G,async()=>{try{await e11(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,_Q)}return kZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:iS$,onError:(Z)=>Z.json({error:"Payload too large"},413,_Q)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=X$1(W)&&H?[W,N]:await Promise.all([LE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),LE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await fS$(J,F,U);return Z.json(w,200,_Q)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,_Q);return Z.json({error:W},502,_Q)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:iS$,onError:(Z)=>Z.json({error:"Payload too large"},413,_Q)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Q,projectRef:Y}=Z.get("vmClaim"),J=Z.var.studioContext;try{let K=await Z.req.json().catch(()=>({})),W=K.status,N=K.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=X$1(W)&&H?[W,N]:await Promise.all([LE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),LE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await yS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,_Q)}catch(K){let W=K instanceof Error?K.message:String(K);if(W==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,_Q);return Z.json({error:W},502,_Q)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.req.query("path");if(!Q||!Q.startsWith("/")||Q.startsWith("//")||Q.includes("..")||Q.includes("\\"))return Z.json({error:"Path not allowed"},403);let Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let J=Y.replace(/\/+$/,""),K=K$1(`${J}${Q}`),W;try{W=await fetch(K?.url??`${J}${Q}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await W.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:W.status,headers:{"content-type":W.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",H7({maxSize:Ue4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=UC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let Y;try{Y=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Y||typeof Y!=="object"||Array.isArray(Y))return Z.json({error:"Invalid JSON body"},400);let J=hS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=uS$(Q,J.resolveType),W=K$1(K),N;try{N=await fetch(W?.url??K,{method:"POST",headers:{"content-type":"application/json",...W?{host:W.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var oS$=B(()=>{i8();XC();Ng();qS$();mN();kS$();yK();GV();SS$();CS$();Yn0();Cn();Y$1();gS$();cS$();mS$();He4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Oe4=IS$(async($,Z)=>{let X=$.var.studioContext;try{W0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=z1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{Fe4(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let K=await X.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let W=$n({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await QV(X,J,G),H=MS$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await AQ(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Y,branch:J,userId:N,projectRef:W,virtualMcpMetadata:F,connectionIds:K.connections?.map((w)=>w.connection_id)??[]}),Z()});DE0=new Map;_Q={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};pS$=["clone","install","start"]});var rS$=($)=>{let Z=new L1;if(Z.use("*",ZC),Z.route("/",_L0()),Z.route("/",Uq$()),Z.route("/",US$()),Z.route("/",HS$()),Z.route("/",UE0()),Z.route("/tools",zS$()),Z.route("/",DS$()),Z.route("/",tk$({kvStorage:$.kvStorage})),Z.route("/",nk$()),Z.route("/fs",YS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",tS$()),Z.route("/",KS$()),Z.route("/deco-sites",bL0()),Z.route("/sso",IL0()),Z.route("/",wE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Qq$()),$.mountDevAssets)Z.route("/dev-assets",fL0({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.route("/",Oa1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",YO0()),Z.route("/mcp/self",FE0()),Z.route("/mcp",WO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var aS$=B(()=>{i8();z01();Yq$();R01();xL0();Tt();L01();pk$();ok$();JS$();Ji();W01();NO0();i11();WS$();FS$();wS$();LS$();p11();jS$();t11();JO0();oS$()});function Ee4($){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}}))}async function ze4($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(Le4)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var Le4=1e4,je4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},sS$=()=>{let $=new L1;return $.use("*",je4),$.get("/",async(Z)=>{let X=n0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await ze4(G,Q);return Z.json({apps:Ee4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var eS$=B(()=>{i8();f$()});import{z as I1}from"zod";function HW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Ve4($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function Ce4($,Z,X){try{return JSON.parse($)}catch{throw new XV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function _e4($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.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((Q)=>{if(Q.type==="text")return{type:"text",text:Q.text};return{type:"image",image:Q.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Q)=>({type:"tool-call",toolCallId:Q.id,toolName:Q.function.name,input:Ce4(Q.function.arguments,Q.id,Q.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function ve4($){let Z=$.map((X)=>{let G=X.function.parameters?NQ(X.function.parameters):NQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function be4($){if(!$)return;return{openai:{response_format:$}}}function fe4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function $V$($,Z,X,G,Q,Y){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Y};return Q?{...J,providerOptions:Q}:J}function ZV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Pe4=256,Ae4,Te4,Re4,Ie4,qe4,Me4,ke4,Se4,XV$,GV$,QV$;var YV$=B(()=>{S4();i8();Ng();QH();Ae4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Te4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),Re4=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(Te4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),Ie4=I1.object({type:I1.literal("text")}),qe4=I1.object({type:I1.literal("json_object")}),Me4=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),ke4=I1.union([Ie4,qe4,Me4]),Se4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(Re4),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(Ae4).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:ke4.optional(),user:I1.string().optional()});XV$=class XV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};GV$=new L1;GV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(HW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(HW("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(HW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=Se4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(HW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=Ve4(Y.model);if(!J)return $.json(HW("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:K}=J,{modelId:W}=J;if(!K){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>TB(z.providerId));if(!E)return $.json(HW("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);K=E.id}let N;try{N=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(HW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=_e4(Y.messages),U=Y.tools?ve4(Y.tools):void 0,w=be4(Y.response_format),O=fe4(),D=Math.floor(Date.now()/1000);if(Y.stream)return IH($,async(L)=>{let E=$V$(H,F,U,Y,w,$.req.raw.signal);try{let z=Hw(E),j=!1,A=0,P="",I=async()=>{if(P.length===0)return;let V=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:V},finish_reason:null}]})})};for await(let V of z.fullStream){if(!j&&(V.type==="text-delta"||V.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(V.type==="text-delta"){if(P+=V.text,P.length>=Pe4)await I()}else if(V.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:V.toolCallId,type:"function",function:{name:V.toolName,arguments:JSON.stringify(V.input)}}]},finish_reason:null}]})})}else if(V.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:ZV$(V.finishReason)}],usage:V.totalUsage?{prompt_tokens:V.totalUsage.inputTokens??0,completion_tokens:V.totalUsage.outputTokens??0,total_tokens:V.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=$V$(H,F,U,Y,w,$.req.raw.signal),E=await Ww(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Y.model,choices:[{index:0,message:z,finish_reason:ZV$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Q=G;if(Q.name==="AbortError")return $.json(HW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(HW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(HW(Q.message,"server_error"),500)}});QV$=GV$});var KV$;var JV$=B(()=>{KV$={name:"decocms",version:"4.170.0",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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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","@nats-io/jwt":"0.0.10-5","@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 ge4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ye4}}var WV$,ye4="https://ph.studio.decocms.com",NV$;var HV$=B(()=>{i8();sV0();WV();wZ();f$();G01();JV$();WV$=new L1;WV$.get("/",($)=>{let Z={version:KV$.version,theme:Rq1(),...kB().logo&&{logo:kB().logo},...hK()&&{internalUrl:qI1()},...n0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!n0().firecrawlApiKey,auth:z2$(),posthog:ge4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!hK()&&n0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});NV$=WV$});function Fg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function N$1($){return(Fg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function UV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Fg($))}&sz=${Z}`}function FV$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Q=G.lastIndexOf(" ");return`${(Q>Z*0.6?G.slice(0,Q):G).trimEnd()}\u2026`}function wV$($){let{brand:Z,domain:X,score:G,verdict:Q}=$,Y=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,K=Q?.trim()?FV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):FV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var wC,he4,ue4,ce4,le4,OV$;var BV$=B(()=>{wC=c0.enum(["good","bad","neutral"]),he4=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:wC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),ue4=c0.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},c0.array(he4)),ce4={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},le4=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:wC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:wC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:wC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:wC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(ue4).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:wC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:wC.optional()})).min(1)})]),OV$=c0.object({...ce4,template:le4})});function EE0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=OV$.safeParse(G.props);if(Q.success)return Q.data;let Y=Q.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Y?`${Y.path.join(".")||"(root)"}: ${Y.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var H$1=B(()=>{BV$()});import{join as DV$}from"path";async function me4($){try{let Z=await fetch(`${e3({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(de4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=EE0(X);if(!G.slides.length)return null;let Q=G.slides.find((K)=>K.template.template==="cover"),Y=Q?.template,J=Y&&Y.template==="cover"?Y:void 0;return{brand:G.meta.brand?.trim()||N$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function vQ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ie4($,Z){let X=Fg($),G=Z?.brand?.trim()||N$1(X),Q=UV$(X,128),J=`${(n0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=wV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${vQ(K)}</title>`,`<meta name="description" content="${vQ(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${vQ(K)}" />`,`<meta property="og:description" content="${vQ(W)}" />`,`<meta property="og:url" content="${vQ(J)}" />`,`<meta property="og:image" content="${vQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${vQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${vQ(K)}" />`,`<meta name="twitter:description" content="${vQ(W)}" />`,`<meta name="twitter:image" content="${vQ(N)}" />`,`<meta name="twitter:image:alt" content="${vQ(H)}" />`,`<link rel="canonical" href="${vQ(J)}" />`,`<link rel="icon" href="${vQ(Q)}" sizes="any" />`].join(`
|
|
2720
2720
|
`)}function ne4($,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}
|
|
2721
2721
|
</head>`)}function LV$($){let Z=new L1;return Z.get("/:domain/og.png",async(X)=>{let G=Fg(X.req.param("domain")),Q=async()=>{let Y=$?Bun.file(DV$($,"report-og-fallback.png")):null;if(!Y||!await Y.exists())return X.notFound();return X.body(new Uint8Array(await Y.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Y=await fetch(`${e3({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(pe4)}),J=Y.headers.get("content-type")??"";if(!Y.ok||!J.startsWith("image/")||!Y.body)return Q();return X.body(Y.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Q()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Q=$?DV$($,"index.html"):null,Y=Q?Bun.file(Q):null;if(!Y||!await Y.exists())return X.notFound();let J=await Y.text();try{let K=await me4(Fg(G)),W=ie4(G,K);return X.html(ne4(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var de4=2500,pe4=1e4;var EV$=B(()=>{i8();H$1();ZD();f$()});function rt($,Z){return fetch(`${e3({})}${$}`,Z)}async function te4($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Q=G.toString()?`?${G.toString()}`:"",Y=await rt(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Q}`,{headers:{Accept:"application/json"}});if(Y.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Y.ok)throw Error(`report read HTTP ${Y.status}`);let J=await Y.json(),{deck:K,drops:W}=EE0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var oe4,OC,zV$;var jV$=B(()=>{i8();PY();ZD();H$1();oe4=new Set(["complete","errored","terminated","unknown"]),OC=new L1;OC.use("*",async($,Z)=>{let X=await L8.api.getSession({headers:$.req.raw.headers});if(!X?.user?.id)return $.json({error:"Authentication required"},401,{"Cache-Control":"private, no-store",Vary:"Cookie"});$.set("reportUser",{email:X.user.email}),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});OC.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.req.query("key")?.trim()||void 0,G=$.req.query("lang")?.trim()||void 0;try{let Q=await te4(Z,X,G);return $.header("Cache-Control","private, no-store"),$.json(Q)}catch{return $.json({error:"report read failed"},502)}});OC.post("/run",async($)=>{let Z;try{Z=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let X=typeof Z.domain==="string"?Z.domain.trim():"";if(!X)return $.json({error:"domain is required"},400);let G=$.get("reportUser").email,Q=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;try{let Y=await rt("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${$D({})}`},body:JSON.stringify({url:X,email:G,distinct_id:Q})});if(!Y.ok)return $.json({error:`run HTTP ${Y.status}`},502);let J=await Y.json(),K=J.blocked?{state:"blocked"}:J.status==="fresh"?{state:"fresh"}:J.mode==="sync"?{state:"sync"}:{state:"running",id:J.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});OC.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await rt(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${$D({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Q=(await X.json()).status??"unknown",Y={done:oe4.has(Q),status:Q};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});OC.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await rt(`/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)}});OC.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await rt(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});zV$=OC});import{createHmac as re4,timingSafeEqual as ae4}from"crypto";function PV$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Q,Y=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Q=U;else if(F==="v1")Y.push(U)}if(!Q||Y.length===0)return!1;let J=Number(Q);if(!Number.isFinite(J)||Math.abs(G/1000-J)>se4)return!1;let K=re4("sha256",X).update(`${Q}.${$}`).digest("hex"),W=Buffer.from(K,"hex");return Y.some((N)=>{let H=Buffer.from(N,"hex");return W.length===H.length&&ae4(W,H)})}function AV$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=lY(Z),G=lY(lY(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:FW(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:G}}}function ee4($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function FW($){return typeof $==="string"?$:void 0}function lY($){return typeof $==="object"&&$!==null?$:void 0}function zE0($){return typeof $==="number"?new Date($*1000):null}function w$1($){return FW($)??FW(lY($)?.id)}function $06($){return w$1($.subscription)??FW(lY(lY($.parent)?.subscription_details)?.subscription)}function Z06($){let Z=zE0($.current_period_end);if(Z)return Z;let X=lY($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Q of X){let Y=lY(Q)?.current_period_end;if(typeof Y==="number"&&Y>G)G=Y}return G>0?new Date(G*1000):null}function F$1($,Z){let X=zE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function U$1($,Z){let X=zE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function X06($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=FW(lY(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(FW(lY(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(FW(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=FW(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let K=Number(lY(X.metadata)?.creditCents);if(!Number.isInteger(K)||K<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:lY(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:K,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(FW(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await $.getBilling(G);if(!Q)return{handled:!1,reason:"unknown org"};let Y=w$1(X.subscription);if(Q.stripeSubscriptionId&&Y&&Q.stripeSubscriptionId!==Y)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Y};if(F$1(Z,Q))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:w$1(X.customer),stripeSubscriptionId:Y,status:"active",lastStripeEventAt:U$1(Z,Q)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=FW(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};let Y=Z.type==="customer.subscription.deleted";if(!Y&&F$1(Z,Q))return{handled:!1,reason:"stale event"};let J=Y?"canceled":ee4(X.status);return await $.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:Z06(X),...Y&&{stripeSubscriptionId:null},lastStripeEventAt:U$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId}}case"invoice.paid":{let G=$06(X);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};if(F$1(Z,Q))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:zE0(X.period_end),lastStripeEventAt:U$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function TV$($){let Z=new jd(Z4().db),X=await X06(Z,$);if(X.handled&&X.topUp)await fN$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await X0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof eJ&&(G.status===400||G.status===404)))throw G}return X}var se4=300;var RV$=B(()=>{ZY();_i();it0()});var G06=1048576,O$1;var IV$=B(()=>{i8();XC();f$();RV$();O$1=new L1;O$1.post("/webhook",H7({maxSize:G06,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=n0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!PV$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Q=AV$(X);if(!Q)return $.json({error:"invalid payload"},400);let Y=await TV$(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...Y}),$.json({received:!0})})});function qV$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var MV$,Q06,Y06,kV$;var SV$=B(()=>{i8();BJ();Cx();e_();MV$=new L1,Q06=["range","if-none-match","if-modified-since"],Y06=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];MV$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(my($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new X$(401,{message:"Authentication required"})}if(!X)throw new X$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new X$(400,{message:"Missing file key"});let Q=await yn(G,Z);if(!Q)throw new X$(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&OJ()){let W=Q.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new X$(500,{message:"Invalid data URL from storage"});let[,N,H]=W,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return qV$(U,N),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let W of Q06){let N=$.req.header(W);if(N)Y.set(W,N)}let J=await fetch(Q,{headers:Y});if(J.status===403||J.status===404)throw new X$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new X$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of Y06){let N=J.headers.get(W);if(N)K.set(W,N)}return K.set("Cache-Control","private, max-age=86400"),qV$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});kV$=MV$});var at=C((BC)=>{var J06=BC&&BC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),K06=BC&&BC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))J06(Z,$,X)};Object.defineProperty(BC,"__esModule",{value:!0});K06(lG(),BC)});var _V$=C((VV$)=>{Object.defineProperty(VV$,"__esModule",{value:!0});VV$.version=void 0;VV$.version="3.4.0"});var fV$=C((UW)=>{var W06=UW&&UW.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(UW,"__esModule",{value:!0});UW.NodeTransport=UW.VERSION=void 0;UW.nodeResolveHost=O06;var y6=at(),N06=P0("net"),B$1=P0("tls"),H06=P0("path"),vV$=P0("fs"),F06=W06(P0("dns")),U06=_V$();UW.VERSION=U06.version;var w06="nats.js";class bV${socket;version;lang;yields=[];signal=(0,y6.deferred)();closedNotification=(0,y6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=w06,this.version=UW.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Q=await this.peekInfo();(0,y6.checkOptions)(Q,Z);let{tls_required:Y,tls_available:J}=Q,K=J===!0&&Z.tls!==null;if(!G&&(Y||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Y&&this.socket.encrypted!==!0)throw y6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Q){let Y=Q;if(!Y)Y=new y6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,K=J==="ECONNREFUSED"?new y6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),K}}dial($){let Z=(0,y6.deferred)(),X,G=(0,N06.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Q)=>{X=Q}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,y6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=y6.DataBuffer.concat(...this.yields),Q=(0,y6.extractProtocolMessage)(G);if(Q!=="")try{let Y=y6.INFO.exec(Q);if(!Y)throw Error("unexpected response from server");let J=JSON.parse(Y[1]);$.resolve(J)}catch(Y){$.reject(Y)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,y6.deferred)();try{if($=(0,H06.resolve)($),!(0,vV$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,vV$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Q,keyFile:Y,key:J}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(X)$.cert=X;if(Y){let K=await this.loadFile(Y);if(K)$.key=K}else if(J)$.key=J;if(G){let K=await this.loadFile(G);if(K)$.ca=[K]}else if(Q)$.ca=Q;return Promise.resolve($)}catch(K){return Promise.reject(K)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};X=(0,y6.extend)(X,this.options.tls,Q)}catch(Q){return Promise.reject(new y6.errors.ConnectionError(Q.message,{cause:Q}))}let G=(0,y6.deferred)();try{let Q=(0,B$1.connect)($.port,$.hostname,X,()=>{Q.removeAllListeners(),G.resolve(Q)});Q.on("error",(Y)=>{Z=Y}),Q.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{G.reject(Z),Q.removeAllListeners()}),Q.setNoDelay(!0)}catch(Q){G.reject(new y6.errors.ConnectionError(Q.message,{cause:Q}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,y6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new y6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,y6.deferred)();try{let G=(0,B$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Q)=>{$=Q}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new y6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,y6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,y6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof B$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,y6.render)($)}`);let Z=(0,y6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,y6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,y6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}UW.NodeTransport=bV$;function O06($){let Z=(0,y6.deferred)();return F06.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Q=[];for(let Y of G)Q.push(Y.address);if(Q.length===0)Q.push($);Z.resolve(Q)}),Z}});var uV$=C((hV$)=>{Object.defineProperty(hV$,"__esModule",{value:!0});hV$.connect=B06;var xV$=fV$(),yV$=at(),gV$=at();function B06($={}){if((0,gV$.hasWsProtocol)($))return Promise.reject(gV$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,yV$.setTransportFactory)({factory:()=>{return new xV$.NodeTransport},dnsResolveFn:xV$.nodeResolveHost}),yV$.NatsConnectionImpl.connect($)}});var cV$=C((qH)=>{var L06=qH&&qH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Q=Object.getOwnPropertyDescriptor(Z,X);if(!Q||("get"in Q?!Z.__esModule:Q.writable||Q.configurable))Q={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Q)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),E06=qH&&qH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))L06(Z,$,X)};Object.defineProperty(qH,"__esModule",{value:!0});qH.connect=void 0;var z06=uV$();Object.defineProperty(qH,"connect",{enumerable:!0,get:function(){return z06.connect}});E06(at(),qH)});function iV$($){let Z=$?.connectFn??T06,X=null,G=null,Q=!1,Y=!1,J=!1,K=[];function W(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let U of K)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Y)try{X=await Z({servers:U,timeout:A06,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=xG(P06,j06,O-1,2,0.5);await w8(D)}}return{init(U,w){if(Q)return;Q=!0,Y=!1;let O=w?.creds?lV$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?X:null},getJetStream(){if(!W())return null;if(!G)G=mV$.jetstream(X);return G},onReady(U){if(K.push(U),W())try{U()}catch{}},async drain(){if(Y=!0,Q=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function T06($){return dV$.connect($)}var lV$,dV$,mV$,j06=100,P06=3000,A06=3000;var nV$=B(()=>{L5();lV$=M(gg(),1),dV$=M(cV$(),1),mV$=M(CO(),1)});function D$1($,Z){return`${$}.${Z}`}class L$1{cache;constructor($){this.cache=cy({ttlMs:$?.ttlMs??R06,maxSize:$?.maxSize??I06})}async get($,Z){return this.cache.get(D$1($,Z))??null}async set($,Z,X){this.cache.set(D$1($,Z),X)}async invalidate($,Z){this.cache.delete(D$1($,Z))}teardown(){this.cache.clear()}}var R06=600000,I06=5000;var pV$=()=>{};function jE0($,Z){return`${$}:${Z}`}function E$1($){let Z=cy({ttlMs:$?.ttlMs??q06,maxSize:$?.maxSize??M06}),X=$?.getConnection,G=crypto.randomUUID(),Q=new TextEncoder,Y=new TextDecoder,J=null;function K(W,N){let H=X?.();if(!H)return;try{H.publish(tV$,Q.encode(JSON.stringify({organizationId:W,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(W,N){return Z.get(jE0(W,N))},set(W,N,H){Z.set(jE0(W,N),H)},invalidate(W,N){Z.delete(jE0(W,N)),K(W,N)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(tV$),(async()=>{for await(let N of J)try{let H=JSON.parse(Y.decode(N.data));if(H.originId===G)continue;Z.delete(jE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var tV$="studio.ai-provider-keys.invalidate",q06=30000,M06=5000;var oV$=()=>{};class z$1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=rV$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Q of G)try{let Y=JSON.parse(X.decode(Q.data));if(Y.originId===this.originId)continue;if(Y.messageId&&this.hasSeen(Y.messageId))continue;this.onCancel?.(Y.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of rV$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var rV$;var aV$=B(()=>{rV$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var sV$=($)=>{let Z;return()=>Z??=$()},j$1,P$1;var eV$=B(()=>{G5();j$1=sV$(()=>Q8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),P$1=sV$(()=>Q8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function b06(){return{name:$H,subjects:[`${Cw0}.>`],storage:T3.StorageType.File,max_age:V06,max_bytes:_06,max_msgs_per_subject:v06,discard:T3.DiscardPolicy.Old,retention:T3.RetentionPolicy.Limits,duplicate_window:C06,num_replicas:1}}class XC${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function $C$($){let Z=ZC$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function g06($,Z){let X=0;return{publish(G,Q,Y,J){G.publish(Q,Y,J?{headers:J}:void 0).catch((K)=>{if(X++,S06().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,K)})},get errorCount(){return X}}}function h06($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class A$1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=b06(),X=await yG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await T3.jetstreamManager($);try{await G.streams.info($H),await G.streams.update($H,Z)}catch(Q){if(Q instanceof Error&&Q.message.includes("stream not found"))await G.streams.add(Z);else if(Q instanceof Error&&/can ?not change.*storage|storage type/i.test(Q.message))await G.streams.delete($H),await G.streams.add(Z);else throw Q}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:h06});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Q=this.js;if(!Q)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Y=g06(Z,G),J=!1,K=()=>{if(J)return;J=!0;let N=zK$(Z);Q.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(N)=>{let H=performance.now(),F=Hp0(N,{runId:Z}),U=performance.now()-H;if(j$1().record(U),P$1().add(1,{"org.id":G??"unknown"}),y06?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Y.publish(Q,w.subject,w.data,w.headers?$C$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(W(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),K(),x06)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Y.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Q=performance.now(),Y=Hp0(Z,{runId:$,dedup:X});if(j$1().record(performance.now()-Q),P$1().add(1),Y.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Y)await G.publish(J.subject,J.data,{...J.headers?{headers:$C$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Q=EK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Q.subject,Q.data,{msgID:Q.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Q=X?.deliverPolicy==="new"?T3.DeliverPolicy.New:T3.DeliverPolicy.All,Y=X?.closeOnDone??!1,J=fw($),K;try{K=await(await G.consumers.get($H,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=xw0({messages:async function*(){try{for await(let D of K)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(_w0()).pipeThrough(vw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,K.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Y){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge($H,{filter:fw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var T3,ZC$,k06=($)=>{let Z;return()=>Z??=$()},S06,V06=86400000000000,C06=120000000000,_06=4294967296,v06=500000,f06,x06,y06;var GC$=B(()=>{L5();Fp0();yw0();bw0();G5();eV$();T3=M(CO(),1),ZC$=M(gg(),1),S06=k06(()=>Q8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));f06=process.env.STREAM_ENCODE_TRACE==="1",x06=process.env.DECOPILOT_STREAM_TRACE==="1";y06=f06?new XC$:null});function PE0($,Z,X,G){if(!G)return!1;return $.emit(Z,l3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var QC$=B(()=>{O8()});class T$1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as u06,rm as AE0}from"fs/promises";import{join as TE0}from"path";async function RE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-c06),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await DC($);for(let Q of G)if(/^\d{4}$/.test(Q))X+=await YC$($,Q,Z);else if(!Q.startsWith(".")){let Y=TE0($,Q),J=await DC(Y);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await YC$(Y,W,Z)}if((await DC(Y)).length===0)await AE0(Y,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function YC$($,Z,X){let G=0,Q=TE0($,Z),Y=await DC(Q);for(let K of Y){if(!/^\d{2}$/.test(K))continue;let W=TE0(Q,K),N=await DC(W);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${K}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=TE0(W,F);await AE0(w,{recursive:!0,force:!0}),G++}}if((await DC(W)).length===0)await AE0(W,{recursive:!0,force:!0})}if((await DC(Q)).length===0)await AE0(Q,{recursive:!0,force:!0});return G}async function DC($){try{return(await u06($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var c06=30;var R$1=()=>{};import{DBOS as I$1,SchedulerMode as l06}from"@dbos-inc/dbos-sdk";async function m06(){let $=[iY(),LC(),BW()],Z=0;for(let X of $)try{Z+=await RE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function i06($,Z){await I$1.runStep(()=>m06(),{name:"monitoringRetention"})}function KC$(){if(JC$)return;JC$=!0;let $=I$1.registerWorkflow(i06,{name:"monitoringRetentionWorkflow"});I$1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:d06,mode:l06.ExactlyOncePerIntervalWhenActive})}var d06="23 4 * * *",JC$=!1;var WC$=B(()=>{gG();R$1()});function NC$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Q=await pU.create();Q.auth.user={id:X,role:G.role},Q.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Y=await hu0($.db,Z,G.role);return Q.boundAuth=gu0({auth:Q.authInstance,headers:new Headers,role:G.role,permissions:Y,userId:X}),Q.access=new MD(X,void 0,Q.boundAuth,G.role,"self"),u60(Q,{id:G.orgId,slug:G.orgSlug}),Q}}var HC$=B(()=>{kD();Gi()});function n06(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function t06(){for(let $ of p06)$()}function FC$($){let Z=[...q$1.logs,$];q$1={...q$1,logs:Z.length>500?Z.slice(-500):Z},t06()}function M$1(){return o06}var q$1,p06,o06=!1;var k$1=B(()=>{q$1=n06(),p06=new Set});import{EventEmitter as r06}from"events";var S$1;var UC$=B(()=>{k$1();S$1=new r06;S$1.on("request",($)=>{FC$($)})});function wC$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Q=$.req.path;if(Q==="/api/auth/get-session"||Q.includes("favicon")){await Z();return}let Y="",J=!1;if(Q.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Ug(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Ug(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${i6.tool}${w}${i6.dim}(${L})${i6.reset}`}else if(U.method)Y=`${i6.dim}${Ug(U.method)}${i6.reset}`}}catch{}}let K=Ug(Q);if(Q.startsWith("/mcp/conn_")){let H=Q.split("/")[2]??"";K=`/mcp/${i6.mcp}${Ug(H.slice(0,12))}\u2026${i6.reset}`}else if(Q==="/mcp")K=`${i6.mcp}/mcp${i6.reset}`;else if(Q==="/mcp/registry")K=`${i6.mcp}/mcp/registry${i6.reset}`;let W=s06(G),N=J?"\u25C0":"\u2190";if(!M$1())console.log(`${i6.dim}${N}${i6.reset} ${W}${G}${i6.reset} ${K}${Y?` ${Y}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=a06(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!M$1())console.log(`${i6.dim}${O}${i6.reset} ${W}${G}${i6.reset} ${K}${Y?` ${Y}`:""} ${U}${F}${i6.reset} ${i6.duration}${w}${i6.reset}`);S$1.emit("request",{method:G,path:Ug(Q),status:F,duration:H,timestamp:new Date})}}}var i6,a06=($)=>{if($>=500)return i6.serverError;if($>=400)return i6.clientError;if($>=300)return i6.redirect;return i6.ok},s06=($)=>{return i6[$]||i6.reset},Ug=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var OC$=B(()=>{k$1();UC$();i6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as EC$}from"crypto";import{mkdir as e06,readdir as $16,rm as BC$,stat as zC$}from"fs/promises";import{join as C$1,relative as Z16}from"path";import{z as D$}from"zod";function PC$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return C$1(X16,Z)}function AC$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function V$1($,Z){let X=PC$($),G=AC$(Z);return C$1(X,G)}function G16($,Z,X,G){let Q=n0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${G}`;return EC$("sha256",Q).update(Y).digest("hex")}function LC$($,Z,X,G,Q){let Y=Math.floor(Date.now()/1000)+G,J=G16(Z,X,Y,Q),K=new URL(`/api/dev-assets/${Z}/${AC$(X)}`,$);return K.searchParams.set("expires",Y.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Q),K.toString()}function TC$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${EC$("md5","etag").update(G).digest("hex")}"`}async function RC$($,Z,X,G,Q){try{let Y=await $16($,{withFileTypes:!0});for(let J of Y){let K=C$1($,J.name),N=Z16(Z,K).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Q.commonPrefixes.add(H)}}else await RC$(K,Z,X,G,Q);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Q.commonPrefixes.add(U);continue}}try{let H=await zC$(K);Q.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:TC$(K,H.mtime,H.size)})}catch{}}}}catch{}}function IC$($,Z){let G=e($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:D$.object({prefix:D$.string().optional(),maxKeys:D$.number().optional().default(1000),continuationToken:D$.string().optional(),delimiter:D$.string().optional()}),outputSchema:D$.object({objects:D$.array(D$.object({key:D$.string(),size:D$.number(),lastModified:D$.string(),etag:D$.string()})),nextContinuationToken:D$.string().optional(),isTruncated:D$.boolean(),commonPrefixes:D$.array(D$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=Y.prefix||"",K=Y.maxKeys??1000,W=Y.delimiter,N=Y.continuationToken,H=PC$(G);await e06(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await RC$(H,H,J,W,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+K),O=U+K<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:D$.object({key:D$.string()}),outputSchema:D$.object({contentType:D$.string().optional(),contentLength:D$.number(),lastModified:D$.string(),etag:D$.string(),metadata:D$.record(D$.string(),D$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=V$1(G,Y.key),K=await zC$(J);return{contentType:q01(Y.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:TC$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:D$.object({key:D$.string(),expiresIn:D$.number().optional()}),outputSchema:D$.object({url:D$.string(),expiresIn:D$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??DC$;return{url:LC$(Z,G,Y.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:D$.object({key:D$.string(),expiresIn:D$.number().optional(),contentType:D$.string().optional()}),outputSchema:D$.object({url:D$.string(),expiresIn:D$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??DC$;return{url:LC$(Z,G,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:D$.object({key:D$.string()}),outputSchema:D$.object({success:D$.boolean(),key:D$.string()}),handler:async(Q)=>{let Y=Q,J=V$1(G,Y.key);try{return await BC$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:D$.object({keys:D$.array(D$.string()).max(1000)}),outputSchema:D$.object({deleted:D$.array(D$.string()),errors:D$.array(D$.object({key:D$.string(),message:D$.string()}))}),handler:async(Q)=>{let Y=Q,J=[],K=[];return await Promise.all(Y.keys.map(async(W)=>{let N=V$1(G,W);try{await BC$(N),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function _$1($,Z,X){let G=IC$(Z,X),Q=new HN({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K5});for(let J of G){let K="shape"in J.inputSchema?J.inputSchema.shape:D$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:D$.object({}).shape;Q.registerTool(J.name,{description:J.description??"",inputSchema:K,outputSchema:W,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Y=new qQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect(Y),mK(Q,Y,$,"mcp:dev-assets")}async function qC$($,Z,X,G){let Y=IC$(X,G).find((J)=>J.name===$);if(!Y)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Y.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var X16="./data/assets",DC$=3600,jC$,MC$;var kC$=B(()=>{f$();Xp();i8();hc();nx();jX();xL0();jC$=new L1;jC$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return _$1($.req.raw,Z,G)});MC$=jC$});var SC$={};N4(SC$,{mountDevRoutes:()=>Q16});function Q16($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`;return _$1(G.req.raw,Q,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Q=G.get("studioContext"),Y=new URL(G.req.url),J=`${Y.protocol}//${Y.host}`,K=G.req.param("toolName");if(!K)return G.json({error:"Missing tool name"},400);let W=await G.req.json(),N=await qC$(K,W,Q,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",MC$);let X=new L1;X.use("*",P3({mountPath:"/api/dev-assets"})),X.route("/",fL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var VC$=B(()=>{i8();E01();xL0();kC$()});import{sql as Y16}from"kysely";import{randomUUID as CC$}from"crypto";import{z as J16}from"zod";async function W16($){let Z=new Date().toISOString(),X=CC$(),G=x4.SELF($.organizationId),Q="registry.publish_request.created",Y={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Y),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((K)=>K.or([K("publisher","is",null),K("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((K)=>({id:CC$(),event_id:X,subscription_id:K.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await Y16`SELECT
|
|
2722
2722
|
pg_notify('studio_events', ${X}),
|