decocms 4.169.0 → 4.170.1
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-CDqm3BkI.js} +1 -1
- package/dist/client/assets/{AreaChart-l3T-nMKm.js → AreaChart-IwoeGQMt.js} +1 -1
- package/dist/client/assets/{ArrowUp-Dj-cFAwv.js → ArrowUp-CWNpel29.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-Y5hPCdzr.js → ArrowUpRight-DJBH8eqK.js} +1 -1
- package/dist/client/assets/{Check-CSyoUAf4.js → Check-BVFRFKGW.js} +1 -1
- package/dist/client/assets/{CheckCircle-janeTcXa.js → CheckCircle-Cj6GsKMI.js} +1 -1
- package/dist/client/assets/{ChevronDown-CzvzcnHE.js → ChevronDown-DpY066wf.js} +1 -1
- package/dist/client/assets/{ChevronRight-DBis8PDW.js → ChevronRight-BEYUeheA.js} +1 -1
- package/dist/client/assets/{ChevronUp-B-NKfo1g.js → ChevronUp-BBMyuq9Y.js} +1 -1
- package/dist/client/assets/{Copy01-8C9VbGWL.js → Copy01-DZlvdvRQ.js} +1 -1
- package/dist/client/assets/{CpuChip01-A8bcIFzB.js → CpuChip01-B9ypyZc7.js} +1 -1
- package/dist/client/assets/{DotsVertical-BdE4_w9h.js → DotsVertical-BhNq3eth.js} +1 -1
- package/dist/client/assets/{Eye-EvVbP4rR.js → Eye-Diq4SDiD.js} +1 -1
- package/dist/client/assets/{FilterLines-Gaw0UmED.js → FilterLines-BVigldfU.js} +1 -1
- package/dist/client/assets/{HardDrive-C_qMCg5y.js → HardDrive-COMq7Lly.js} +1 -1
- package/dist/client/assets/{Key01-Bfcda0jJ.js → Key01-BuTgkaVQ.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BdRKWF_p.js → LayoutLeft-tGXhbV2_.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CobVwvk5.js → LinkExternal01-C58m1ZUC.js} +1 -1
- package/dist/client/assets/{LogOut01-doI_2tq1.js → LogOut01-DdfD6ngb.js} +1 -1
- package/dist/client/assets/{Monitor01-BFfrIAEb.js → Monitor01-DQdBfp79.js} +1 -1
- package/dist/client/assets/{Palette-Aamq_16P.js → Palette-BR3ZHx5Y.js} +1 -1
- package/dist/client/assets/{Play-DfCnwo1c.js → Play-BIu81WKO.js} +1 -1
- package/dist/client/assets/{Plus-CPpb1y_T.js → Plus-Drwq00jj.js} +1 -1
- package/dist/client/assets/{SearchLg-CWWzlUvD.js → SearchLg-CHTQRQCv.js} +1 -1
- package/dist/client/assets/{SearchMd-BCWVjSri.js → SearchMd-BgWQzmCc.js} +1 -1
- package/dist/client/assets/{Settings02-pC2SAFuD.js → Settings02-CsiOpdyg.js} +1 -1
- package/dist/client/assets/{Shield01-CFZIhAYB.js → Shield01-Bo63VvCj.js} +1 -1
- package/dist/client/assets/{Star01-WnnjHkp9.js → Star01-DuRTi96S.js} +1 -1
- package/dist/client/assets/{Stars01-BGA48AlN.js → Stars01-BuAqCIoS.js} +1 -1
- package/dist/client/assets/{Stars02-B7Z_FmwK.js → Stars02-ayCNzEo7.js} +1 -1
- package/dist/client/assets/{Sun-BX81qTgU.js → Sun-Bj8OQXhO.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-D2aK9o1v.js → SwitchHorizontal01-B1QH3pri.js} +1 -1
- package/dist/client/assets/{Tool01-B4WsGGMZ.js → Tool01-Dhilizli.js} +1 -1
- package/dist/client/assets/{Tool02-BngdhbjZ.js → Tool02-CMHGfTGK.js} +1 -1
- package/dist/client/assets/{Trash01-K_-17n2i.js → Trash01-C2eiT94f.js} +1 -1
- package/dist/client/assets/{TrendUp01-_rLV-_oy.js → TrendUp01-CsOYx201.js} +1 -1
- package/dist/client/assets/{Upload01-C595E5Fz.js → Upload01-CZoclz4_.js} +1 -1
- package/dist/client/assets/{User01-Chdj0dm8.js → User01-Dmy4OXe5.js} +1 -1
- package/dist/client/assets/{Users01-CCeCEY4G.js → Users01-9Fw6RkhQ.js} +1 -1
- package/dist/client/assets/{Users03-DJ9QTo8l.js → Users03-DA0fSXT9.js} +1 -1
- package/dist/client/assets/{X-DiL2Rl_p.js → X-rjk00JCm.js} +1 -1
- package/dist/client/assets/{XCircle-CDV12pjf.js → XCircle-C5Urwmgg.js} +1 -1
- package/dist/client/assets/{XClose-norW3ist.js → XClose-Cc5zaSrf.js} +1 -1
- package/dist/client/assets/{Zap-UFgvYSLH.js → Zap-Dx6gJG-7.js} +1 -1
- package/dist/client/assets/{ZapSquare-IFLfTQf2.js → ZapSquare-BX9CVwuY.js} +1 -1
- package/dist/client/assets/{access-gate-DGUL_UcD.js → access-gate-LLqLjJqi.js} +1 -1
- package/dist/client/assets/{add-section-modal-DTq5sMKM.js → add-section-modal-BlOwU79I.js} +1 -1
- package/dist/client/assets/{agent-icon-zT-2RUx7.js → agent-icon-CMXbHiQd.js} +1 -1
- package/dist/client/assets/{agents-list-DBDEVL02.js → agents-list-CvIWP3Ux.js} +1 -1
- package/dist/client/assets/{ai-providers-BRzUDSVT.js → ai-providers-Fv2eRIRK.js} +1 -1
- package/dist/client/assets/{alert-BB3xGluS.js → alert-AXmQKAFL.js} +1 -1
- package/dist/client/assets/{alert-dialog-Cene-7ya.js → alert-dialog-C3-s341g.js} +1 -1
- package/dist/client/assets/{app-editor-CZFvukFx.js → app-editor-CMGBcA8j.js} +1 -1
- package/dist/client/assets/{auth-CU2bavW6.js → auth-CqNzilic.js} +1 -1
- package/dist/client/assets/{auth-catchall-BK249rmi.js → auth-catchall-BeLEbeBc.js} +1 -1
- package/dist/client/assets/{auth-entry-BN-iHbys.js → auth-entry-DsMvEkd2.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BP1XC8RF.js → auth-split-layout-DjUYRih1.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-WxZneatC.js → authenticate-and-persist-oauth-DTeTCtcu.js} +1 -1
- package/dist/client/assets/{automation-list-row-DG0u7EnC.js → automation-list-row-CtBXrCXy.js} +1 -1
- package/dist/client/assets/{automation-runs-BZvstwOZ.js → automation-runs-ZE3sZFU-.js} +1 -1
- package/dist/client/assets/{automations-BYxmkEsd.js → automations-DywuBtbl.js} +1 -1
- package/dist/client/assets/{avatar-WftJ6-cv.js → avatar-nvx57e-B.js} +1 -1
- package/dist/client/assets/{badge-CngbfVN3.js → badge-B4cG_-au.js} +1 -1
- package/dist/client/assets/{block-document-D3zId0t2.js → block-document-Djl746bf.js} +1 -1
- package/dist/client/assets/{brand-context-DR22dUFM.js → brand-context-C3EfEOQW.js} +1 -1
- package/dist/client/assets/{buckets-CChnFANR.js → buckets-BR1ncNMV.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DlGXsJrs.js → bulk-category-panel-BCHS8yf4.js} +1 -1
- package/dist/client/assets/{calendar-CsGWZ_S6.js → calendar-B5HuSET3.js} +1 -1
- package/dist/client/assets/{capability-load-error-BcUvQo1M.js → capability-load-error-BPEfNjwz.js} +1 -1
- package/dist/client/assets/{card-ClYuWJUa.js → card-pQqTZwi8.js} +1 -1
- package/dist/client/assets/{category-editor-C2M1K5r7.js → category-editor-B9hUfcMJ.js} +1 -1
- package/dist/client/assets/{chat-context-CF6DlBKA.js → chat-context-D7wSke11.js} +1 -1
- package/dist/client/assets/{checkbox-Bh4CEti1.js → checkbox-3f5dJs46.js} +1 -1
- package/dist/client/assets/{cli-auth-success-J_4myM4V.js → cli-auth-success-BUTJH4x3.js} +1 -1
- package/dist/client/assets/{collection-detail-C_uKdK0e.js → collection-detail-B_su1ZX-.js} +1 -1
- package/dist/client/assets/{collection-display-button-h_MqjIGa.js → collection-display-button-CjqJ-tqS.js} +1 -1
- package/dist/client/assets/{collection-search-BPsHlues.js → collection-search-D8EOIDwN.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-EuJPoGLv.js → collection-table-wrapper--XXzfBGf.js} +1 -1
- package/dist/client/assets/{collection-tabs-B4btCcQK.js → collection-tabs-nRZ9fYfu.js} +1 -1
- package/dist/client/assets/{command-CEwrg9I3.js → command-CYB7frps.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-Bcs4XvA5.js → commerce-onboarding-CeyHrVZs.js} +1 -1
- package/dist/client/assets/{companions-core-CgvTY-LL.js → companions-core-m2LaPACN.js} +1 -1
- package/dist/client/assets/{connect-BoicHjh_.js → connect-DyxQqtiK.js} +1 -1
- package/dist/client/assets/{connection-CvvO_ps_.js → connection-Csd7wxxM.js} +1 -1
- package/dist/client/assets/{connection-card-B95sNnDR.js → connection-card-DjgkpE4H.js} +1 -1
- package/dist/client/assets/{connection-detail-BmjJdTKV.js → connection-detail-YF1TRub_.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CkZhYHbj.js → connection-form-helpers-R4TXyOh_.js} +1 -1
- package/dist/client/assets/{connections-MUVwsnZL.js → connections-mrc7gr62.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-waZ_rU9X.js → decopilot-sse-pool-B_-zAk0R.js} +1 -1
- package/dist/client/assets/{dialog-DuRT12ix.js → dialog-7MTA_b4C.js} +1 -1
- package/dist/client/assets/{domain-settings-B3Na6PzM.js → domain-settings-B9SLbz5w.js} +1 -1
- package/dist/client/assets/{drawer-sfBh0-Fv.js → drawer-Cwc1DcBo.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CsjV1r80.js → dropdown-menu-BuE1_v9y.js} +1 -1
- package/dist/client/assets/{empty-state-D6MRkxtc.js → empty-state-BOAyivN6.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DOJCD4gJ.js → extract-connection-data-BeBDGhqP.js} +1 -1
- package/dist/client/assets/{file-explorer-BVtEaAXh.js → file-explorer-BcjEzKA-.js} +1 -1
- package/dist/client/assets/{form-CY4eVoPQ.js → form-DM7HRYDj.js} +1 -1
- package/dist/client/assets/general-DVrcQuIO.js +1 -0
- package/dist/client/assets/{github-repo-picker-BiXEMaAr.js → github-repo-picker-OcNOhtcN.js} +1 -1
- package/dist/client/assets/{hooks-dHIdKcw0.js → hooks-BncxQB2K.js} +1 -1
- package/dist/client/assets/{index-_J6TZRhY.js → index-B29mxiS-.js} +3 -3
- package/dist/client/assets/{index-mqZ-uRip.js → index-BQXh6HAV.js} +1 -1
- package/dist/client/assets/{index-Dajxa_Es.js → index-CRl7Pf4H.js} +1 -1
- package/dist/client/assets/{index-CSXauqf7.js → index-CTQC81fZ.js} +1 -1
- package/dist/client/assets/{index-DtUPhr8V.js → index-C_bDYfNO.js} +1 -1
- package/dist/client/assets/{index-CU5TPed0.js → index-Ci5aWJdL.js} +1 -1
- package/dist/client/assets/{index-CgAQSnkZ.js → index-CqL1rBBB.js} +4 -4
- package/dist/client/assets/{index-BE9BOpQs.js → index-Cs__7M40.js} +34 -34
- package/dist/client/assets/index-Cw0lZSdB.css +1 -0
- package/dist/client/assets/{index-BgtTeA9z.js → index-DUDyiV46.js} +1 -1
- package/dist/client/assets/{index-to_1Kzx7.js → index-Vw320eZp.js} +1 -1
- package/dist/client/assets/{index-redirect-Y4ChBzWT.js → index-redirect-VJ483q6V.js} +1 -1
- package/dist/client/assets/{index-C9dQEl37.js → index-v4uwuOj3.js} +1 -1
- package/dist/client/assets/{input-CHE0hHBC.js → input-CCCTwjFF.js} +1 -1
- package/dist/client/assets/{integration-icon-D2mH-Jkd.js → integration-icon-BmocLuhr.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CqzNxjME.js → invite-member-dialog-CpegRbLc.js} +1 -1
- package/dist/client/assets/{label-DwVnbuko.js → label-BcuNjzWD.js} +1 -1
- package/dist/client/assets/{layout-Caoz8ush.js → layout-CvV5k8cC.js} +1 -1
- package/dist/client/assets/{login-BKYs4uy1.js → login-BfBmmgQO.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DQ2pY9Pk.js → mcp-oauth-Ccg_U67s.js} +1 -1
- package/dist/client/assets/{members-Dct86MXi.js → members-yuzngH1a.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dj-IdsHa.js → monaco-editor-CjD0vqNM.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Cre2etB8.js → monitoring-stats-row-KJF6nQdN.js} +1 -1
- package/dist/client/assets/{multi-select-CFkntjz3.js → multi-select-CZMwBVTA.js} +1 -1
- package/dist/client/assets/{oauth-callback-HRS7qtkR.js → oauth-callback-ZVwDXXuL.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DrFdY2c1.js → oauth-callback-ai-provider-8pwx9inT.js} +1 -1
- package/dist/client/assets/{onboarding-Cr1K0J8J.js → onboarding-FWi3mF_K.js} +1 -1
- package/dist/client/assets/{org-layout-DaSkvfvO.js → org-layout-BCYNu922.js} +1 -1
- package/dist/client/assets/{organization-choice-Dyq7bKZl.js → organization-choice-B7xv6zlU.js} +1 -1
- package/dist/client/assets/{orgs-BxC49mPC.js → orgs-BorQphaA.js} +1 -1
- package/dist/client/assets/{page-seo-form-ldbyqodA.js → page-seo-form-CSRPhE43.js} +1 -1
- package/dist/client/assets/{popover-EJdSdU2R.js → popover-DOe4iREO.js} +1 -1
- package/dist/client/assets/{post-editor-DvrgHaCl.js → post-editor-2UlGkOx3.js} +1 -1
- package/dist/client/assets/{primitives-DZBu37jf.js → primitives-DLv3BKMq.js} +1 -1
- package/dist/client/assets/{profile-4lm5h4pF.js → profile-URrgbisJ.js} +1 -1
- package/dist/client/assets/project-app-view-ChJkcHn0.js +1 -0
- package/dist/client/assets/record-editor-C9JBt-1Y.js +1 -0
- package/dist/client/assets/{redirect-editor-Cw3SjuOc.js → redirect-editor-CZmU1uwp.js} +1 -1
- package/dist/client/assets/registry-B70GXui5.js +2 -0
- package/dist/client/assets/{registry-layout-CTZB8f0R.js → registry-layout-C1Ksq4mY.js} +1 -1
- package/dist/client/assets/{reports-BXEV0yfu.js → reports-Dpom_Jtq.js} +1 -1
- package/dist/client/assets/{require-capability-DrkYr70Z.js → require-capability-CKWTPoFA.js} +1 -1
- package/dist/client/assets/{required-auth-layout-B6vtrKAD.js → required-auth-layout-DQbDWdLC.js} +1 -1
- package/dist/client/assets/{reset-password-p-3CwomQ.js → reset-password-Cj2xn6zs.js} +1 -1
- package/dist/client/assets/{roles-CmuBIJp8.js → roles-Dc-VAdFj.js} +1 -1
- package/dist/client/assets/{search-input-DHP5_Hg7.js → search-input-fKv3QIWf.js} +1 -1
- package/dist/client/assets/{secrets-DC_R2-bM.js → secrets-BPlWK46k.js} +1 -1
- package/dist/client/assets/{sections-editor-FZrSIhzS.js → sections-editor-C8sRo8y6.js} +1 -1
- package/dist/client/assets/{select-DX4-JeQs.js → select-DFKVfjlW.js} +1 -1
- package/dist/client/assets/{select-model-BWniT-zS.js → select-model-CqDqC0jE.js} +1 -1
- package/dist/client/assets/{self-tool-result-CQ5bxpQJ.js → self-tool-result-M58qCXHE.js} +1 -1
- package/dist/client/assets/{seo-editor-CTb7kcqp.js → seo-editor-CXQ6iNgC.js} +1 -1
- package/dist/client/assets/{settings-layout-Bd8sXbF-.js → settings-layout-pbNmQd02.js} +1 -1
- package/dist/client/assets/{settings-section-3OqkMxsU.js → settings-section-CrRai56k.js} +1 -1
- package/dist/client/assets/{shell-controls-DX6d19p1.js → shell-controls-CwJaFUGs.js} +1 -1
- package/dist/client/assets/{shell-layout-C54fW9fN.js → shell-layout-MOzejAzs.js} +1 -1
- package/dist/client/assets/{sidebar-CSmYAwNE.js → sidebar-CUQ4JZAf.js} +1 -1
- package/dist/client/assets/{skeleton-CF1G_JNJ.js → skeleton-CKkik4LS.js} +1 -1
- package/dist/client/assets/{spinner-BCrFtw47.js → spinner-B8Ju2pT-.js} +1 -1
- package/dist/client/assets/{sso-BUmcP8uB.js → sso-D9DFzGYU.js} +1 -1
- package/dist/client/assets/{store-BlSIrn0n.js → store-Cl8i58XU.js} +1 -1
- package/dist/client/assets/store-registry-C4AyvtVW.js +2 -0
- package/dist/client/assets/{studio-tools-Dt_Nz2ZR.js → studio-tools-CFTrglMl.js} +1 -1
- package/dist/client/assets/{switch-Dq88gwUX.js → switch-DLH-VS9R.js} +1 -1
- package/dist/client/assets/{tab-id-C3dMkfSN.js → tab-id-B7feias9.js} +1 -1
- package/dist/client/assets/{table-DtnFgt1P.js → table-CiNvpArP.js} +1 -1
- package/dist/client/assets/{tabs-CvLevm39.js → tabs-CYzoTEfI.js} +1 -1
- package/dist/client/assets/{textarea-P9iZqCQw.js → textarea-CMPPErTK.js} +1 -1
- package/dist/client/assets/{toggle-group-Cp18zHbL.js → toggle-group-BUXnwW8h.js} +1 -1
- package/dist/client/assets/{toolbar-CTFRzgG_.js → toolbar-Du2Pcngk.js} +1 -1
- package/dist/client/assets/{tooltip-CPzDr35B.js → tooltip-BADScVWm.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BVqvTgTt.js → use-ai-providers-DvG3jagd.js} +1 -1
- package/dist/client/assets/{use-automations-yaXDjUyj.js → use-automations-Dqs65Xtc.js} +1 -1
- package/dist/client/assets/{use-autosave-CWn6eQzu.js → use-autosave-DhHt0ll1.js} +1 -1
- package/dist/client/assets/{use-capability-Bx3Aous3.js → use-capability-2hd4Ogvf.js} +1 -1
- package/dist/client/assets/{use-clock-tick-3BC52fl2.js → use-clock-tick-YTMDTn0-.js} +1 -1
- package/dist/client/assets/{use-connection-waGAP3_8.js → use-connection-RmkjihlS.js} +1 -1
- package/dist/client/assets/{use-copy-DdYavl9J.js → use-copy-DSJ046GP.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Do3eak_a.js → use-create-virtual-mcp-BfVMAYle.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Cz0m2SIt.js → use-debounced-autosave-BgbB4RmT.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CawzPtuY.js → use-debounced-value-gP8_9L0j.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BZW42SVE.js → use-deco-credits-C2rxrw0Q.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-uIvxhgZU.js → use-decopilot-events-DtpQ8cH5.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DKkCdJK4.js → use-delete-connection-Bx8ZPbS9.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-1Q_zx2o6.js → use-deployment-admin-B4gDjtfL.js} +1 -1
- package/dist/client/assets/{use-file-configs-5np55VXP.js → use-file-configs-D-sPMdB6.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DxyVjvA-.js → use-infinite-scroll-DlhmKnJa.js} +1 -1
- package/dist/client/assets/{use-join-requests-BrWdODmX.js → use-join-requests-l8GNRpiI.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BJEHQ79H.js → use-mcp-auth-status-D0rEPz5R.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B4o54gkr.js → use-mcp-client-BDJmM3qR.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BpXABiGW.js → use-mcp-tools-DieEsULL.js} +1 -1
- package/dist/client/assets/{use-members-BluEn-Xz.js → use-members-hFToNUVS.js} +1 -1
- package/dist/client/assets/{use-mobile-DdpcC-kW.js → use-mobile-pc-tnHny.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CriTJ4nX.js → use-navigate-to-agent-DtnhN_GJ.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-7VI-2ivW.js → use-org-auth-client-CqAZnf-w.js} +1 -1
- package/dist/client/assets/{use-org-sso-gASlJc1Y.js → use-org-sso-BZ-DK4nQ.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CsNvvbTO.js → use-organization-roles-B_tn0WKz.js} +1 -1
- package/dist/client/assets/{use-organization-settings-8VLD97hQ.js → use-organization-settings-BXVAuCWj.js} +1 -1
- package/dist/client/assets/{use-registry-connections-KqDKYhMW.js → use-registry-connections-yUpiQW-t.js} +1 -1
- package/dist/client/assets/{use-secrets-ByliR705.js → use-secrets-C9txCY5R.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BXJXMeiE.js → use-status-sounds-DVt8v5Rz.js} +1 -1
- package/dist/client/assets/{use-tags-syMz2bE_.js → use-tags-CZ06PK1w.js} +1 -1
- package/dist/client/assets/{use-view-mode-CBc8_c7H.js → use-view-mode-BvslrTfX.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CLnDaYb3.js → use-virtual-mcp-BNm_L6pc.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DsiIWQ_i.js +1 -0
- package/dist/client/assets/{useQueries-nGThkn2V.js → useQueries-CgYx8hSA.js} +1 -1
- package/dist/client/assets/{useRouterState-B2iSGy4D.js → useRouterState-BVSqLcRD.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BqG6jap9.js +1 -0
- package/dist/client/assets/{users-pEdk07gE.js → users-X1mUOoo7.js} +1 -1
- package/dist/client/assets/{variant-calendar-D-TKtVJ9.js → variant-calendar-sA73oHbp.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BFoTStlx.js → view-mode-toggle-DvDTi911.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/general-uJAjf1TQ.js +0 -1
- package/dist/client/assets/index-GilS3VqV.css +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
|
@@ -1036,7 +1036,7 @@ Keep both indexes concise \u2014 a curated list of durable facts and one-line po
|
|
|
1036
1036
|
- \`org/public/<set>/\` \u2014 curated read-only skill sets, mounted here. Your skills are listed in the <available-skills> catalog; load one with the \`skill\` tool before applying it.
|
|
1037
1037
|
- \`org/upload/\` \u2014 files the user attached to this conversation are already here; read them directly (no copy step needed).
|
|
1038
1038
|
- \`org/output/\` \u2014 write final deliverables here; they are shared back to the organization under this run's folder.
|
|
1039
|
-
</organization-filesystem>`}var IU=B(()=>{SD();My0()});function ky0($){let Z=new Map;for(let G of $){let Q=Z.get(G.message_id);if(Q)Q.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Q]of Z){let Y=[...Q].sort((K,W)=>K.seq-W.seq),J=Y[0];X.push({id:G,role:J.role,parts:Y.filter((K)=>K.kind!=="finish").map((K)=>K.payload&&typeof K.payload==="object"&&!Array.isArray(K.payload)?{...K.payload,created_at:K.created_at}:K.payload),created_at:J.created_at,status:Y.some((K)=>K.kind==="finish")?"complete":"in_progress",metadata:Y.find((K)=>K.kind==="finish")?.metadata??null})}return X.sort((G,Q)=>G.created_at<Q.created_at?-1:G.created_at>Q.created_at?1:0),X}function sg8($,Z){let X=0,G=0,Q=[$];while(Q.length>0){if(X>Z||++G>rg8)return 1/0;let Y=Q.pop();if(typeof Y==="string")X+=Y.length;else if(Array.isArray(Y))for(let J of Y)Q.push(J);else if(Y!==null&&typeof Y==="object")for(let J of Object.values(Y))Q.push(J)}return X}function Zh8($){return $.replace(eg8,"").replace($h8,"\uFFFD")}function dm1($){if(sg8($,lm1)>lm1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Zh8(X):X)}class Sy0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Z.has(Y.id))continue;if(Z.add(Y.id),G.set(Y.id,Y),X.push({id:Y.id,seq:Y.seq,org_id:Y.org_id,thread_id:Y.thread_id,run_id:Y.run_id,message_id:Y.message_id,role:Y.role,kind:Y.kind,payload:dm1(Y.payload),payload_ref:Y.payload_ref??null,metadata:Y.metadata!=null?dm1(Y.metadata):null,created_at:Y.created_at}),(Q+1)%ag8===0)await w8(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Q)=>Q.column("id").doNothing()).returning("id").execute()).map((Q)=>X.get(Q.id)).filter((Q)=>Q!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Q)=>{let Y=await Q.selectFrom("thread_message_parts").select((W)=>W.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Y?.created_at!=null?new Date(Y.created_at).getTime():null,K=J!=null&&Number.isFinite(J)?G.map((W)=>({...W,created_at:new Date(J+W.seq).toISOString()})):G;if(await Q.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),K.length>0)await Q.insertInto("thread_message_parts").values(K).onConflict((W)=>W.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Q)=>Q.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((W)=>W.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Q=Number(G?.count??0),Y=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((W)=>W.not(W.exists(W.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((W)=>W.message_id),...Y.map((W)=>W.message_id)];if(J.length===0)return{messages:[],total:Q};let K=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:ky0(K),total:Q}}async backfillFromMessages($,Z){let X=[],G=0;for(let Q of $)X.push({id:`${Z.runId}:${Q.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Q.id,role:Q.role,kind:"text",payload:Q.parts,payload_ref:null,metadata:Q.metadata??null,created_at:Q.created_at}),X.push({id:`${Z.runId}:${Q.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Q.id,role:Q.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Q.created_at});await this.appendParts(X)}}var lm1=50000000,rg8=1e5,ag8=25,eg8,$h8;var mm1=B(()=>{L5();eg8=/\u0000/g,$h8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Zf}from"kysely";function VD($){return typeof $==="string"?$:$.toISOString()}function im1($){return $.replace(/[\\%_]/g,"\\$&")}class Vy0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class Xf{db;constructor($){this.db=$}messageParts(){return new Sy0(this.db)}async create($){let Z=$.id??n8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=RU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Q=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Q)return{...this.threadFromDbRow(Q),isNew:!0};let Y=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Y),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Q={updated_at:new Date().toISOString()};if(X.title!==void 0)Q.title=X.title;if(X.description!==void 0)Q.description=X.description;if(X.updated_by!==void 0)Q.updated_by=X.updated_by;if(X.hidden!==void 0)Q.hidden=X.hidden;if(X.status!==void 0)Q.status=X.status;if(X.context_start_message_id!==void 0)Q.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Q.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Q.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Q.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Q.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Q.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Q.failure_kind=X.failure_kind;if(X.metadata!==void 0)Q.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Q.branch=X.branch;if(X.virtual_mcp_id!==void 0)Q.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Q.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Q.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Q.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Q).where("id","=",$).where("organization_id","=",Z).execute();let Y=await this.get($,Z);if(!Y)throw Error("Thread not found after update");return Y}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Zf`coalesce(${Zf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Zf`coalesce(${Zf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Q)=>X.sandboxProviderKind===null?Q("sandbox_provider_kind","is",null):Q.or([Q("sandbox_provider_kind","is",null),Q("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Y=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Q=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Q=Q.where("run_fence_token","=",X);return((await Q.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Q=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Q=Q.where("created_by","=",Z);let Y=X?.virtualMcpId??X?.agentId;if(Y)Q=Q.where("virtual_mcp_id","=",Y);if(X?.hasTrigger===!0)Q=Q.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Q=Q.where("trigger_id","is",null);if(X?.startDate)Q=Q.where("updated_at",">=",X.startDate);if(X?.endDate)Q=Q.where("updated_at","<=",X.endDate);if(X?.search)Q=Q.where("title","ilike",`%${im1(X.search)}%`);if(X?.status)Q=Q.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Y)J=J.where("virtual_mcp_id","=",Y);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${im1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[K,W]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{threads:K.map((N)=>this.threadFromDbRow(N)),total:Number(W?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Q=this.db.selectFrom("threads").select((K)=>K.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Y,J]=await Promise.all([G.execute(),Q.executeTakeFirst()]);return{threads:Y.map((K)=>this.threadFromDbRow(K)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Q of G)X.set(Q.virtual_mcp_id,{last_used_at:VD(Q.created_at),last_used_by:Q.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Q)=>Q.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Q)=>Q.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Q)=>({thread:this.threadFromDbRow(Q),lastMessage:this.messageFromDbRow({id:Q.lm_id,thread_id:Q.lm_thread_id,metadata:Q.lm_metadata,parts:Q.lm_parts,role:Q.lm_role,created_at:Q.lm_created_at,updated_at:Q.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Q=X?.sort??"asc",Y=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Q).orderBy("id",Q),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[K,W]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{messages:K.map((N)=>this.messageFromDbRow(N)),total:Number(W?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Q)=>{if(Q==null)return null;let Y=(Q instanceof Date?Q:new Date(Q)).getTime();return Number.isNaN(Y)?null:Y};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Q)=>Q.or([Q("run_acked_seq","is",null),Q("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?VD($.run_started_at):null,last_progress_at:$.last_progress_at?VD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:VD($.created_at),updated_at:VD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:VD($.created_at),updated_at:VD($.updated_at)}}}var Cy0=B(()=>{BX();IU();mm1()});import{sql as _y0}from"kysely";function j40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function P40($){return`msg_async_stub_${$}`}async function vy0($,Z){await $.deleteFrom("thread_messages").where("id","=",P40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",P40(Z)).execute()}function Xh8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function by0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:j40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Xh8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:j40($.created_at)??"",updatedAt:j40($.updated_at)??"",completedAt:j40($.completed_at)}}class fy0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class Md{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Q)=>Q.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return by0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return by0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?by0(X):null}async markPolling($,Z,X,G){let Q=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{if(await Y.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Q,updated_at:Q}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Y.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let K=P40(Z);await Y.insertInto("thread_message_parts").values([{id:`${G.threadId}:${K}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:K,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Q},{id:`${G.threadId}:${K}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:K,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Q}]).onConflict((W)=>W.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:_y0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Q=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:_y0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(_y0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Q.length===0)return 0;let Y=Q.map((J)=>P40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Y).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Y).execute(),Q.length})}}var xy0=()=>{};function A40(){let $=new Map;function Z(G,Q){let Y=$.get(Q);if(Y)return Y;let J=new z9({name:`outbound-client-${Q}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:K5});J.onclose=()=>{$.delete(Q)};let K=J.connect(G).then(()=>J).catch((W)=>{throw $.delete(Q),W});return $.set(Q,K),K}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Q,Y]of $)G.push(Y.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var yy0=B(()=>{a3();jX()});import{sql as Gh8}from"kysely";function nm1($){return $ instanceof Date?$.toISOString():String($)}class gy0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:nm1($.created_at),updatedBy:$.updated_by,updatedAt:nm1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new qU($.id)}async create($){let Z=n8("sec"),X=await this.vault.encrypt($.value),G=new Date,Q=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(T40).executeTakeFirstOrThrow();return this.rowToInfo(Q)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new FY($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(T40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new FY($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(T40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(T40).executeTakeFirst();if(!G)throw new FY($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new FY($);this.assertVisible(G,X);let Q=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Q}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Gh8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new FY(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var T40,FY,qU;var kd=B(()=>{BX();T40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];FY=class FY extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};qU=class qU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Qh8}from"kysely";function pm1($){return $ instanceof Date?$.toISOString():String($)}class hy0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:pm1($.created_at),updatedBy:$.updated_by,updatedAt:pm1($.updated_at)}}async create($){let Z=n8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Q=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(R40).executeTakeFirstOrThrow();return this.rowToInfo(Q)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Gf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(R40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Gf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(R40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(R40).executeTakeFirst();if(!X)throw new Gf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Gf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Qh8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Gf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var R40,Gf;var tm1=B(()=>{BX();R40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Gf=class Gf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function I40($){return uy0.test($)}var uy0;var q40=B(()=>{uy0=/^[a-z0-9][a-z0-9-]{0,59}$/});function om1($){return $ instanceof Date?$.toISOString():String($)}function cy0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:om1($.created_at),updatedBy:$.updated_by,updatedAt:om1($.updated_at)}}class dy0{db;constructor($){this.db=$}async claimSite($){if(!I40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Y)=>Y.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return cy0(X);let G=await this.getBySlug($.slug);if(!G)throw new ly0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new ly0($.slug,G.organizationId);let Q=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return cy0(Q)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?cy0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var ly0;var rm1=B(()=>{q40();ly0=class ly0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function am1($,Z){return $?.startsWith(`${Sd[Z]}:`)??!1}function my0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Yh8($,Z){let X=my0($),G=new Map;for(let Q of $){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;if(new Date(Q.occurredAt).getTime()<X)continue;let Y=Q.data??{};if(Y.reviewer!=="qa"&&Y.reviewer!=="code_review")continue;if(Q.action==="review_approved"){if(Z?.verifiedOnly&&Y.verified!==!0)continue;G.set(Y.reviewer,"approved")}else G.set(Y.reviewer,"changes_requested")}return G}function Qf($,Z,X){if(Z.length===0)return!1;let G=Yh8($,X);return Z.every((Q)=>G.get(Q)==="approved")}var c5="super-agent",MU,Sd,kU,sm1="task-board.item.updated",em1="task-board.item.deleted";var fJ=B(()=>{MU=["qa","code_review"],Sd={qa:"QA Agent",code_review:"Code Reviewer"},kU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Jh8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function iy0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Kh8.has(X.status))}function Wh8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class CD{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=n8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Q}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Q??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Y)}async update($,Z,X,G){let Q=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async delete($,Z){await this.inTransaction(async(X)=>{await X.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute()})}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Q)=>Q.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Q=await this.getById(G,Z);if(!Q||!iy0(Q))continue;X.push(await this.update(G,Z,{status:"in_review"},Q.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Q.status,to:"in_review"}}).catch((Y)=>console.error("[task-board] in_review activity write failed",Y))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Q=await this.getById(G,Z);if(!Q||Q.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Q.updatedBy))}return X}async claimConflictResolution($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",c5).returningAll().executeTakeFirst();if(!G)return null;let Q=this.itemFromDbRow(G);return await this.attachRefs([Q],Z),Q}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Q=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Y=new Map;for(let J of Q){let K={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:Jh8(J.lastMessagePayload),hasPreview:Wh8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},W=Y.get(J.taskId);if(W)W.push(K);else Y.set(J.taskId,[K])}for(let J of Z)J.threads=Y.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Y)=>Y.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Q=new Map;for(let Y of G){let J={id:Y.id,name:Y.name,color:Y.color??null,createdBy:Y.createdBy,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt},K=Q.get(Y.taskId);if(K)K.push(J);else Q.set(Y.taskId,[J])}for(let Y of Z)Y.tags=Q.get(Y.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:n8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Q=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Q)return{claimed:!0,token:Q.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:n8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Kh8;var Vd=B(()=>{BX();fJ();Kh8=new Set(["completed","failed","expired"])});class ny0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Q=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Q,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function NK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function M40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(M40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||M40(X)));return!1}function py0($){return Array.isArray($)&&$.every(M40)}function Cd($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||M40(X)))}var ki1="vercel.ai.error",Nh8,$i1,Zi1,Y1,Si1="AI_APICallError",Vi1,Hh8,Xi1,Gi1,r8,Ci1="AI_EmptyResponseBodyError",_i1,Fh8,Qi1,Yi1,k40,vi1="AI_InvalidArgumentError",bi1,Uh8,Ji1,Ki1,SU,fi1="AI_InvalidPromptError",xi1,wh8,Wi1,Ni1,UY,yi1="AI_InvalidResponseDataError",gi1,Oh8,Hi1,Fi1,Yf,hi1="AI_JSONParseError",ui1,Bh8,Ui1,wi1,jN,ci1="AI_LoadAPIKeyError",li1,Dh8,Oi1,Bi1,_D,di1="AI_LoadSettingError",mi1,Lh8,Di1,Li1,ii1,ni1="AI_NoContentGeneratedError",pi1,Eh8,Ei1,zi1,ti1,oi1="AI_NoSuchModelError",ri1,zh8,ji1,Pi1,A5,ai1="AI_TooManyEmbeddingValuesForCallError",si1,jh8,Ai1,Ti1,Jf,ei1="AI_TypeValidationError",$n1,Ph8,Ri1,Ii1,r6,Zn1="AI_UnsupportedFunctionalityError",Xn1,Ah8,qi1,Mi1,T4;var o1=B(()=>{Nh8=Symbol.for(ki1),Y1=class $ extends(Zi1=Error,$i1=Nh8,Zi1){constructor({name:Z,message:X,cause:G}){super(X);this[$i1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,ki1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Vi1=`vercel.ai.error.${Si1}`,Hh8=Symbol.for(Vi1),r8=class extends(Gi1=Y1,Xi1=Hh8,Gi1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Q,responseBody:Y,cause:J,isRetryable:K=G!=null&&(G===408||G===409||G===429||G>=500),data:W}){super({name:Si1,message:$,cause:J});this[Xi1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Q,this.responseBody=Y,this.isRetryable=K,this.data=W}static isInstance($){return Y1.hasMarker($,Vi1)}},_i1=`vercel.ai.error.${Ci1}`,Fh8=Symbol.for(_i1),k40=class extends(Yi1=Y1,Qi1=Fh8,Yi1){constructor({message:$="Empty response body"}={}){super({name:Ci1,message:$});this[Qi1]=!0}static isInstance($){return Y1.hasMarker($,_i1)}};bi1=`vercel.ai.error.${vi1}`,Uh8=Symbol.for(bi1),SU=class extends(Ki1=Y1,Ji1=Uh8,Ki1){constructor({message:$,cause:Z,argument:X}){super({name:vi1,message:$,cause:Z});this[Ji1]=!0,this.argument=X}static isInstance($){return Y1.hasMarker($,bi1)}},xi1=`vercel.ai.error.${fi1}`,wh8=Symbol.for(xi1),UY=class extends(Ni1=Y1,Wi1=wh8,Ni1){constructor({prompt:$,message:Z,cause:X}){super({name:fi1,message:`Invalid prompt: ${Z}`,cause:X});this[Wi1]=!0,this.prompt=$}static isInstance($){return Y1.hasMarker($,xi1)}},gi1=`vercel.ai.error.${yi1}`,Oh8=Symbol.for(gi1),Yf=class extends(Fi1=Y1,Hi1=Oh8,Fi1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:yi1,message:Z});this[Hi1]=!0,this.data=$}static isInstance($){return Y1.hasMarker($,gi1)}},ui1=`vercel.ai.error.${hi1}`,Bh8=Symbol.for(ui1),jN=class extends(wi1=Y1,Ui1=Bh8,wi1){constructor({text:$,cause:Z}){super({name:hi1,message:`JSON parsing failed: Text: ${$}.
|
|
1039
|
+
</organization-filesystem>`}var IU=B(()=>{SD();My0()});function ky0($){let Z=new Map;for(let G of $){let Q=Z.get(G.message_id);if(Q)Q.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Q]of Z){let Y=[...Q].sort((K,W)=>K.seq-W.seq),J=Y[0];X.push({id:G,role:J.role,parts:Y.filter((K)=>K.kind!=="finish").map((K)=>K.payload&&typeof K.payload==="object"&&!Array.isArray(K.payload)?{...K.payload,created_at:K.created_at}:K.payload),created_at:J.created_at,status:Y.some((K)=>K.kind==="finish")?"complete":"in_progress",metadata:Y.find((K)=>K.kind==="finish")?.metadata??null})}return X.sort((G,Q)=>G.created_at<Q.created_at?-1:G.created_at>Q.created_at?1:0),X}function sg8($,Z){let X=0,G=0,Q=[$];while(Q.length>0){if(X>Z||++G>rg8)return 1/0;let Y=Q.pop();if(typeof Y==="string")X+=Y.length;else if(Array.isArray(Y))for(let J of Y)Q.push(J);else if(Y!==null&&typeof Y==="object")for(let J of Object.values(Y))Q.push(J)}return X}function Zh8($){return $.replace(eg8,"").replace($h8,"\uFFFD")}function dm1($){if(sg8($,lm1)>lm1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Zh8(X):X)}class Sy0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Z.has(Y.id))continue;if(Z.add(Y.id),G.set(Y.id,Y),X.push({id:Y.id,seq:Y.seq,org_id:Y.org_id,thread_id:Y.thread_id,run_id:Y.run_id,message_id:Y.message_id,role:Y.role,kind:Y.kind,payload:dm1(Y.payload),payload_ref:Y.payload_ref??null,metadata:Y.metadata!=null?dm1(Y.metadata):null,created_at:Y.created_at}),(Q+1)%ag8===0)await w8(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Q)=>Q.column("id").doNothing()).returning("id").execute()).map((Q)=>X.get(Q.id)).filter((Q)=>Q!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Q)=>{let Y=await Q.selectFrom("thread_message_parts").select((W)=>W.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Y?.created_at!=null?new Date(Y.created_at).getTime():null,K=J!=null&&Number.isFinite(J)?G.map((W)=>({...W,created_at:new Date(J+W.seq).toISOString()})):G;if(await Q.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),K.length>0)await Q.insertInto("thread_message_parts").values(K).onConflict((W)=>W.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Q)=>Q.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((W)=>W.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Q=Number(G?.count??0),Y=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((W)=>W.not(W.exists(W.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((W)=>W.message_id),...Y.map((W)=>W.message_id)];if(J.length===0)return{messages:[],total:Q};let K=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:ky0(K),total:Q}}async backfillFromMessages($,Z){let X=[],G=0;for(let Q of $)X.push({id:`${Z.runId}:${Q.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Q.id,role:Q.role,kind:"text",payload:Q.parts,payload_ref:null,metadata:Q.metadata??null,created_at:Q.created_at}),X.push({id:`${Z.runId}:${Q.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Q.id,role:Q.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Q.created_at});await this.appendParts(X)}}var lm1=50000000,rg8=1e5,ag8=25,eg8,$h8;var mm1=B(()=>{L5();eg8=/\u0000/g,$h8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Zf}from"kysely";function VD($){return typeof $==="string"?$:$.toISOString()}function im1($){return $.replace(/[\\%_]/g,"\\$&")}class Vy0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class Xf{db;constructor($){this.db=$}messageParts(){return new Sy0(this.db)}async create($){let Z=$.id??n8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=RU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Q=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Q)return{...this.threadFromDbRow(Q),isNew:!0};let Y=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Y),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Q={updated_at:new Date().toISOString()};if(X.title!==void 0)Q.title=X.title;if(X.description!==void 0)Q.description=X.description;if(X.updated_by!==void 0)Q.updated_by=X.updated_by;if(X.hidden!==void 0)Q.hidden=X.hidden;if(X.status!==void 0)Q.status=X.status;if(X.context_start_message_id!==void 0)Q.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Q.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Q.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Q.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Q.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Q.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Q.failure_kind=X.failure_kind;if(X.metadata!==void 0)Q.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Q.branch=X.branch;if(X.virtual_mcp_id!==void 0)Q.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Q.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Q.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Q.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Q).where("id","=",$).where("organization_id","=",Z).execute();let Y=await this.get($,Z);if(!Y)throw Error("Thread not found after update");return Y}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Zf`coalesce(${Zf.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Zf`coalesce(${Zf.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Q)=>X.sandboxProviderKind===null?Q("sandbox_provider_kind","is",null):Q.or([Q("sandbox_provider_kind","is",null),Q("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Y=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Q=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Q=Q.where("run_fence_token","=",X);return((await Q.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Q=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Q=Q.where("created_by","=",Z);let Y=X?.virtualMcpId??X?.agentId;if(Y)Q=Q.where("virtual_mcp_id","=",Y);if(X?.hasTrigger===!0)Q=Q.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Q=Q.where("trigger_id","is",null);if(X?.startDate)Q=Q.where("updated_at",">=",X.startDate);if(X?.endDate)Q=Q.where("updated_at","<=",X.endDate);if(X?.search)Q=Q.where("title","ilike",`%${im1(X.search)}%`);if(X?.status)Q=Q.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Y)J=J.where("virtual_mcp_id","=",Y);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${im1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[K,W]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{threads:K.map((N)=>this.threadFromDbRow(N)),total:Number(W?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Q=this.db.selectFrom("threads").select((K)=>K.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Y,J]=await Promise.all([G.execute(),Q.executeTakeFirst()]);return{threads:Y.map((K)=>this.threadFromDbRow(K)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Q of G)X.set(Q.virtual_mcp_id,{last_used_at:VD(Q.created_at),last_used_by:Q.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Q)=>Q.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Q)=>Q.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Q)=>({thread:this.threadFromDbRow(Q),lastMessage:this.messageFromDbRow({id:Q.lm_id,thread_id:Q.lm_thread_id,metadata:Q.lm_metadata,parts:Q.lm_parts,role:Q.lm_role,created_at:Q.lm_created_at,updated_at:Q.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Q=X?.sort??"asc",Y=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Q).orderBy("id",Q),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[K,W]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{messages:K.map((N)=>this.messageFromDbRow(N)),total:Number(W?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Q)=>{if(Q==null)return null;let Y=(Q instanceof Date?Q:new Date(Q)).getTime();return Number.isNaN(Y)?null:Y};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Zf`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Q)=>Q.or([Q("run_acked_seq","is",null),Q("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?VD($.run_started_at):null,last_progress_at:$.last_progress_at?VD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:VD($.created_at),updated_at:VD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:VD($.created_at),updated_at:VD($.updated_at)}}}var Cy0=B(()=>{BX();IU();mm1()});import{sql as _y0}from"kysely";function j40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function P40($){return`msg_async_stub_${$}`}async function vy0($,Z){await $.deleteFrom("thread_messages").where("id","=",P40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",P40(Z)).execute()}function Xh8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function by0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:j40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Xh8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:j40($.created_at)??"",updatedAt:j40($.updated_at)??"",completedAt:j40($.completed_at)}}class fy0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class Md{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Q)=>Q.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return by0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return by0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?by0(X):null}async markPolling($,Z,X,G){let Q=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{if(await Y.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Q,updated_at:Q}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Y.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let K=P40(Z);await Y.insertInto("thread_message_parts").values([{id:`${G.threadId}:${K}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:K,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Q},{id:`${G.threadId}:${K}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:K,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Q}]).onConflict((W)=>W.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:_y0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{await Q.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await vy0(Q,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Q=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:_y0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(_y0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Q.length===0)return 0;let Y=Q.map((J)=>P40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Y).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Y).execute(),Q.length})}}var xy0=()=>{};function A40(){let $=new Map;function Z(G,Q){let Y=$.get(Q);if(Y)return Y;let J=new z9({name:`outbound-client-${Q}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:K5});J.onclose=()=>{$.delete(Q)};let K=J.connect(G).then(()=>J).catch((W)=>{throw $.delete(Q),W});return $.set(Q,K),K}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Q,Y]of $)G.push(Y.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var yy0=B(()=>{a3();jX()});import{sql as Gh8}from"kysely";function nm1($){return $ instanceof Date?$.toISOString():String($)}class gy0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:nm1($.created_at),updatedBy:$.updated_by,updatedAt:nm1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new qU($.id)}async create($){let Z=n8("sec"),X=await this.vault.encrypt($.value),G=new Date,Q=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(T40).executeTakeFirstOrThrow();return this.rowToInfo(Q)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new FY($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(T40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new FY($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(T40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(T40).executeTakeFirst();if(!G)throw new FY($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new FY($);this.assertVisible(G,X);let Q=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Q}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Gh8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new FY(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var T40,FY,qU;var kd=B(()=>{BX();T40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];FY=class FY extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};qU=class qU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Qh8}from"kysely";function pm1($){return $ instanceof Date?$.toISOString():String($)}class hy0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:pm1($.created_at),updatedBy:$.updated_by,updatedAt:pm1($.updated_at)}}async create($){let Z=n8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Q=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(R40).executeTakeFirstOrThrow();return this.rowToInfo(Q)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new Gf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(R40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new Gf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(R40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(R40).executeTakeFirst();if(!X)throw new Gf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new Gf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Qh8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new Gf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var R40,Gf;var tm1=B(()=>{BX();R40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];Gf=class Gf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function I40($){return uy0.test($)}var uy0;var q40=B(()=>{uy0=/^[a-z0-9][a-z0-9-]{0,59}$/});function om1($){return $ instanceof Date?$.toISOString():String($)}function cy0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:om1($.created_at),updatedBy:$.updated_by,updatedAt:om1($.updated_at)}}class dy0{db;constructor($){this.db=$}async claimSite($){if(!I40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Y)=>Y.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return cy0(X);let G=await this.getBySlug($.slug);if(!G)throw new ly0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new ly0($.slug,G.organizationId);let Q=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return cy0(Q)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?cy0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var ly0;var rm1=B(()=>{q40();ly0=class ly0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function am1($,Z){return $?.startsWith(`${Sd[Z]}:`)??!1}function my0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Yh8($,Z){let X=my0($),G=new Map;for(let Q of $){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;if(new Date(Q.occurredAt).getTime()<X)continue;let Y=Q.data??{};if(Y.reviewer!=="qa"&&Y.reviewer!=="code_review")continue;if(Q.action==="review_approved"){if(Z?.verifiedOnly&&Y.verified!==!0)continue;G.set(Y.reviewer,"approved")}else G.set(Y.reviewer,"changes_requested")}return G}function Qf($,Z,X){if(Z.length===0)return!1;let G=Yh8($,X);return Z.every((Q)=>G.get(Q)==="approved")}var c5="super-agent",MU,Sd,kU,sm1="task-board.item.updated",em1="task-board.item.deleted";var fJ=B(()=>{MU=["qa","code_review"],Sd={qa:"QA Agent",code_review:"Code Reviewer"},kU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Jh8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function iy0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Kh8.has(X.status))}function Wh8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class CD{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=n8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Q}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Y=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Q??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Y)}async update($,Z,X,G){let Q=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async delete($,Z){await this.inTransaction(async(X)=>{await X.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await X.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute()})}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Q)=>Q.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Q=await this.getById(G,Z);if(!Q||!iy0(Q))continue;X.push(await this.update(G,Z,{status:"in_review"},Q.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Q.status,to:"in_review"}}).catch((Y)=>console.error("[task-board] in_review activity write failed",Y))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Q=await this.getById(G,Z);if(!Q||Q.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Q.updatedBy))}return X}async claimConflictResolution($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",c5).returningAll().executeTakeFirst();if(!G)return null;let Q=this.itemFromDbRow(G);return await this.attachRefs([Q],Z),Q}async claimReviewChangesBounce($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").returningAll().executeTakeFirst();if(!G)return null;let Q=this.itemFromDbRow(G);return await this.attachRefs([Q],Z),Q}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Q=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Y=new Map;for(let J of Q){let K={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:Jh8(J.lastMessagePayload),hasPreview:Wh8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},W=Y.get(J.taskId);if(W)W.push(K);else Y.set(J.taskId,[K])}for(let J of Z)J.threads=Y.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Y)=>Y.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Q=new Map;for(let Y of G){let J={id:Y.id,name:Y.name,color:Y.color??null,createdBy:Y.createdBy,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt},K=Q.get(Y.taskId);if(K)K.push(J);else Q.set(Y.taskId,[J])}for(let Y of Z)Y.tags=Q.get(Y.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:n8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Q=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Q)return{claimed:!0,token:Q.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:n8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Kh8;var Vd=B(()=>{BX();fJ();Kh8=new Set(["completed","failed","expired"])});class ny0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Q=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Q,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}function NK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function M40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(M40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||M40(X)));return!1}function py0($){return Array.isArray($)&&$.every(M40)}function Cd($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||M40(X)))}var ki1="vercel.ai.error",Nh8,$i1,Zi1,Y1,Si1="AI_APICallError",Vi1,Hh8,Xi1,Gi1,r8,Ci1="AI_EmptyResponseBodyError",_i1,Fh8,Qi1,Yi1,k40,vi1="AI_InvalidArgumentError",bi1,Uh8,Ji1,Ki1,SU,fi1="AI_InvalidPromptError",xi1,wh8,Wi1,Ni1,UY,yi1="AI_InvalidResponseDataError",gi1,Oh8,Hi1,Fi1,Yf,hi1="AI_JSONParseError",ui1,Bh8,Ui1,wi1,jN,ci1="AI_LoadAPIKeyError",li1,Dh8,Oi1,Bi1,_D,di1="AI_LoadSettingError",mi1,Lh8,Di1,Li1,ii1,ni1="AI_NoContentGeneratedError",pi1,Eh8,Ei1,zi1,ti1,oi1="AI_NoSuchModelError",ri1,zh8,ji1,Pi1,A5,ai1="AI_TooManyEmbeddingValuesForCallError",si1,jh8,Ai1,Ti1,Jf,ei1="AI_TypeValidationError",$n1,Ph8,Ri1,Ii1,r6,Zn1="AI_UnsupportedFunctionalityError",Xn1,Ah8,qi1,Mi1,T4;var o1=B(()=>{Nh8=Symbol.for(ki1),Y1=class $ extends(Zi1=Error,$i1=Nh8,Zi1){constructor({name:Z,message:X,cause:G}){super(X);this[$i1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,ki1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Vi1=`vercel.ai.error.${Si1}`,Hh8=Symbol.for(Vi1),r8=class extends(Gi1=Y1,Xi1=Hh8,Gi1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Q,responseBody:Y,cause:J,isRetryable:K=G!=null&&(G===408||G===409||G===429||G>=500),data:W}){super({name:Si1,message:$,cause:J});this[Xi1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Q,this.responseBody=Y,this.isRetryable=K,this.data=W}static isInstance($){return Y1.hasMarker($,Vi1)}},_i1=`vercel.ai.error.${Ci1}`,Fh8=Symbol.for(_i1),k40=class extends(Yi1=Y1,Qi1=Fh8,Yi1){constructor({message:$="Empty response body"}={}){super({name:Ci1,message:$});this[Qi1]=!0}static isInstance($){return Y1.hasMarker($,_i1)}};bi1=`vercel.ai.error.${vi1}`,Uh8=Symbol.for(bi1),SU=class extends(Ki1=Y1,Ji1=Uh8,Ki1){constructor({message:$,cause:Z,argument:X}){super({name:vi1,message:$,cause:Z});this[Ji1]=!0,this.argument=X}static isInstance($){return Y1.hasMarker($,bi1)}},xi1=`vercel.ai.error.${fi1}`,wh8=Symbol.for(xi1),UY=class extends(Ni1=Y1,Wi1=wh8,Ni1){constructor({prompt:$,message:Z,cause:X}){super({name:fi1,message:`Invalid prompt: ${Z}`,cause:X});this[Wi1]=!0,this.prompt=$}static isInstance($){return Y1.hasMarker($,xi1)}},gi1=`vercel.ai.error.${yi1}`,Oh8=Symbol.for(gi1),Yf=class extends(Fi1=Y1,Hi1=Oh8,Fi1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:yi1,message:Z});this[Hi1]=!0,this.data=$}static isInstance($){return Y1.hasMarker($,gi1)}},ui1=`vercel.ai.error.${hi1}`,Bh8=Symbol.for(ui1),jN=class extends(wi1=Y1,Ui1=Bh8,wi1){constructor({text:$,cause:Z}){super({name:hi1,message:`JSON parsing failed: Text: ${$}.
|
|
1040
1040
|
Error message: ${NK(Z)}`,cause:Z});this[Ui1]=!0,this.text=$}static isInstance($){return Y1.hasMarker($,ui1)}},li1=`vercel.ai.error.${ci1}`,Dh8=Symbol.for(li1),_D=class extends(Bi1=Y1,Oi1=Dh8,Bi1){constructor({message:$}){super({name:ci1,message:$});this[Oi1]=!0}static isInstance($){return Y1.hasMarker($,li1)}},mi1=`vercel.ai.error.${di1}`,Lh8=Symbol.for(mi1),ii1=class extends(Li1=Y1,Di1=Lh8,Li1){constructor({message:$}){super({name:di1,message:$});this[Di1]=!0}static isInstance($){return Y1.hasMarker($,mi1)}},pi1=`vercel.ai.error.${ni1}`,Eh8=Symbol.for(pi1),ti1=class extends(zi1=Y1,Ei1=Eh8,zi1){constructor({message:$="No content generated."}={}){super({name:ni1,message:$});this[Ei1]=!0}static isInstance($){return Y1.hasMarker($,pi1)}},ri1=`vercel.ai.error.${oi1}`,zh8=Symbol.for(ri1),A5=class extends(Pi1=Y1,ji1=zh8,Pi1){constructor({errorName:$=oi1,modelId:Z,modelType:X,message:G=`No such ${X}: ${Z}`}){super({name:$,message:G});this[ji1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return Y1.hasMarker($,ri1)}},si1=`vercel.ai.error.${ai1}`,jh8=Symbol.for(si1),Jf=class extends(Ti1=Y1,Ai1=jh8,Ti1){constructor($){super({name:ai1,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[Ai1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return Y1.hasMarker($,si1)}},$n1=`vercel.ai.error.${ei1}`,Ph8=Symbol.for($n1),r6=class $ extends(Ii1=Y1,Ri1=Ph8,Ii1){constructor({value:Z,cause:X,context:G}){let Q="Type validation failed";if(G==null?void 0:G.field)Q+=` for ${G.field}`;if((G==null?void 0:G.entityName)||(G==null?void 0:G.entityId)){Q+=" (";let Y=[];if(G.entityName)Y.push(G.entityName);if(G.entityId)Y.push(`id: "${G.entityId}"`);Q+=Y.join(", "),Q+=")"}super({name:ei1,message:`${Q}: Value: ${JSON.stringify(Z)}.
|
|
1041
1041
|
Error message: ${NK(X)}`,cause:X});this[Ri1]=!0,this.value=Z,this.context=G}static isInstance(Z){return Y1.hasMarker(Z,$n1)}static wrap({value:Z,cause:X,context:G}){var Q,Y,J;if($.isInstance(X)&&X.value===Z&&((Q=X.context)==null?void 0:Q.field)===(G==null?void 0:G.field)&&((Y=X.context)==null?void 0:Y.entityName)===(G==null?void 0:G.entityName)&&((J=X.context)==null?void 0:J.entityId)===(G==null?void 0:G.entityId))return X;return new $({value:Z,cause:X,context:G})}},Xn1=`vercel.ai.error.${Zn1}`,Ah8=Symbol.for(Xn1),T4=class extends(Mi1=Y1,qi1=Ah8,Mi1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:Zn1,message:Z});this[qi1]=!0,this.functionality=$}static isInstance($){return Y1.hasMarker($,Xn1)}}});import*as _40 from"zod/v4";import{ZodFirstPartyTypeKind as J4}from"zod/v3";import{ZodFirstPartyTypeKind as uh8}from"zod/v3";import{ZodFirstPartyTypeKind as S40}from"zod/v3";function d$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function V40({tools:$=[],providerToolNames:Z,resolveProviderToolName:X}){var G;let Q={},Y={};for(let J of $)if(J.type==="provider"){let K=(G=X==null?void 0:X(J))!=null?G:(J.id in Z)?Z[J.id]:void 0;if(K==null)continue;Q[J.name]=K,Y[K]=J.name}return{toProviderToolName:(J)=>{var K;return(K=Q[J])!=null?K:J},toCustomToolName:(J)=>{var K;return(K=Y[J])!=null?K:J}}}async function QG($,Z){if($==null)return Promise.resolve();let X=Z==null?void 0:Z.abortSignal;return new Promise((G,Q)=>{if(X==null?void 0:X.aborted){Q(Gn1());return}let Y=setTimeout(()=>{J(),G()},$),J=()=>{clearTimeout(Y),X==null||X.removeEventListener("abort",K)},K=()=>{J(),Q(Gn1())};X==null||X.addEventListener("abort",K)})}function Gn1(){return new DOMException("Delay was aborted","AbortError")}function Kf($){return Object.fromEntries([...$.headers])}function Q9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=Rh8(Z);return Uint8Array.from(X,(G)=>G.codePointAt(0))}function JG($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return Th8(Z)}function i9($){return $ instanceof Uint8Array?JG($):$}function Nn1($,Z={}){let{useArrayBrackets:X=!0}=Z,G=new FormData;for(let[Q,Y]of Object.entries($)){if(Y==null)continue;if(Array.isArray(Y)){if(Y.length===1){G.append(Q,Y[0]);continue}let J=X?`${Q}[]`:Q;for(let K of Y)G.append(J,K);continue}G.append(Q,Y)}return G}async function _d($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function qh8($=globalThis){return $.window!=null}function Mh8($){let Z;try{Z=new URL($)}catch(G){throw new m9({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new m9({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new m9({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new m9({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let G=X.slice(1,-1);if(Sh8(G))throw new m9({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(Un1(X)){if(wn1(X))throw new m9({url:$,message:`URL with IP address ${X} is not allowed`});return}}function Un1($){let Z=$.split(".");if(Z.length!==4)return!1;return Z.every((X)=>{let G=Number(X);return Number.isInteger(G)&&G>=0&&G<=255&&String(G)===X})}function wn1($){let Z=$.split(".").map(Number),[X,G,Q]=Z;if(X===0)return!0;if(X===10)return!0;if(X===100&&G>=64&&G<=127)return!0;if(X===127)return!0;if(X===169&&G===254)return!0;if(X===172&&G>=16&&G<=31)return!0;if(X===192&&G===0&&Q===0)return!0;if(X===192&&G===168)return!0;if(X===198&&(G===18||G===19))return!0;if(X>=240)return!0;return!1}function kh8($){let Z=$.toLowerCase(),X=Z.indexOf("%");if(X!==-1)Z=Z.slice(0,X);let G=Z.split("::");if(G.length>2)return null;let Q=(J)=>{if(J==="")return[];let K=[],W=J.split(":");for(let N=0;N<W.length;N++){let H=W[N];if(H.includes(".")){if(N!==W.length-1||!Un1(H))return null;let[F,U,w,O]=H.split(".").map(Number);K.push(F<<8|U,w<<8|O);continue}if(!/^[0-9a-f]{1,4}$/.test(H))return null;K.push(parseInt(H,16))}return K},Y=Q(G[0]);if(Y===null)return null;if(G.length===2){let J=Q(G[1]);if(J===null)return null;let K=8-Y.length-J.length;if(K<0)return null;return[...Y,...Array(K).fill(0),...J]}return Y.length===8?Y:null}function Sh8($){let Z=kh8($);if(Z===null)return!0;let X=(Q)=>Z.slice(0,Q).every((Y)=>Y===0);if(X(7)&&(Z[7]===0||Z[7]===1))return!0;if((Z[0]&65024)===64512)return!0;if((Z[0]&65472)===65152)return!0;if((Z[0]&65472)===65216)return!0;if((Z[0]&65280)===65280)return!0;if(X(6)||X(5)&&Z[5]===65535||X(4)&&Z[4]===65535&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===0&&Z[3]===0&&Z[4]===0&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===1){let Q=Z[6]>>8&255,Y=Z[6]&255,J=Z[7]>>8&255,K=Z[7]&255;return wn1(`${Q}.${Y}.${J}.${K}`)}return!1}async function sy0({url:$,headers:Z,abortSignal:X,maxRedirects:G=Vh8}){let Q={signal:X};if(Z!==void 0)Q.headers=Z;let Y=$;for(let J=0;J<=G;J++){Mh8(Y);let K=await fetch(Y,{...Q,redirect:"manual"});if(K.type==="opaqueredirect"){if(!qh8())throw new m9({url:$,message:`Redirect from ${Y} could not be validated and was blocked`});return await fetch(Y,{...Q,redirect:"follow"})}let W=K.headers.get("location");if(K.status>=300&&K.status<400&&W){await _d(K),Y=new URL(W,Y).toString();continue}return K}throw new m9({url:$,message:`Too many redirects (max ${G})`})}async function ey0({response:$,url:Z,maxBytes:X=C40}){let G=$.headers.get("content-length");if(G!=null){let H=parseInt(G,10);if(!isNaN(H)&&H>X)throw await _d($),new m9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${H}).`})}let Q=$.body;if(Q==null)return new Uint8Array(0);let Y=Q.getReader(),J=[],K=0;try{while(!0){let{done:H,value:F}=await Y.read();if(H)break;if(K+=F.length,K>X)throw new m9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(F)}}finally{try{await Y.cancel()}finally{Y.releaseLock()}}let W=new Uint8Array(K),N=0;for(let H of J)W.set(H,N),N+=H.length;return W}async function $g0($,Z){var X,G;try{let Q=await sy0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Q.ok)throw await _d(Q),new m9({url:$,statusCode:Q.status,statusText:Q.statusText});let Y=await ey0({response:Q,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:C40}),J=(G=Q.headers.get("content-type"))!=null?G:void 0;return new Blob([Y],J?{type:J}:void 0)}catch(Q){if(m9.isInstance(Q))throw Q;throw new m9({url:$,cause:Q})}}function Wf($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function GG($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function vh8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&_h8.includes(Z))return!0;return!1}function On1({error:$,url:Z,requestBodyValues:X}){if(GG($))return $;if($ instanceof TypeError&&Ch8.includes($.message.toLowerCase())){let G=$.cause;if(G!=null)return new r8({message:`Cannot connect to API: ${G.message}`,cause:G,url:Z,requestBodyValues:X,isRetryable:!0})}if(vh8($))return new r8({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function VU($=globalThis){var Z,X,G;if($.window)return"runtime/browser";if((Z=$.navigator)==null?void 0:Z.userAgent)return`runtime/${$.navigator.userAgent.toLowerCase()}`;if((G=(X=$.process)==null?void 0:X.versions)==null?void 0:G.node)return`runtime/node.js/${$.process.version.substring(0)}`;if($.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function CU($){if($==null)return{};let Z={};if($ instanceof Headers)$.forEach((X,G)=>{Z[G.toLowerCase()]=X});else{if(!Array.isArray($))$=Object.entries($);for(let[X,G]of $)if(G!=null)Z[X.toLowerCase()]=G}return Z}function u4($,...Z){let X=new Headers(CU($)),G=X.get("user-agent")||"";return X.set("user-agent",[G,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function bD($){return $!=null}function Dn1($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function Ln1({mediaType:$,url:Z,supportedUrls:X}){return Z=Z.toLowerCase(),$=$.toLowerCase(),Object.entries(X).map(([G,Q])=>{let Y=G.toLowerCase();return Y==="*"||Y==="*/*"?{mediaTypePrefix:"",regexes:Q}:{mediaTypePrefix:Y.replace(/\*/,""),regexes:Q}}).filter(({mediaTypePrefix:G})=>$.startsWith(G)).flatMap(({regexes:G})=>G).some((G)=>G.test(Z))}function Nf({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:G}){if(typeof $==="string")return $;if($!=null)throw new _D({message:`${G} API key must be a string.`});if(typeof process>"u")throw new _D({message:`${G} API key is missing. Pass it using the '${X}' parameter. Environment variables are not supported in this environment.`});if($=process.env[Z],$==null)throw new _D({message:`${G} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new _D({message:`${G} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function HK({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function En1($){var Z;let[X,G=""]=$.toLowerCase().split("/");return(Z={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[G])!=null?Z:G}function Jn1($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(fh8.test($)===!1&&xh8.test($)===!1)return Z;return yh8(Z)}function yh8($){let Z=[$];while(Z.length){let X=Z;Z=[];for(let G of X){if(Object.prototype.hasOwnProperty.call(G,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(G,"constructor")&&G.constructor!==null&&typeof G.constructor==="object"&&Object.prototype.hasOwnProperty.call(G.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let Q in G){let Y=G[Q];if(Y&&typeof Y==="object")Z.push(Y)}}}return $}function Zg0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return Jn1($)}try{return Jn1($)}finally{Error.stackTraceLimit=Z}}function Xg0($){if($.type==="object"||Array.isArray($.type)&&$.type.includes("object")){$.additionalProperties=!1;let{properties:X}=$;if(X!=null)for(let G of Object.keys(X))X[G]=vD(X[G])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(vD):vD($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(vD);if($.allOf!=null)$.allOf=$.allOf.map(vD);if($.oneOf!=null)$.oneOf=$.oneOf.map(vD);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=vD(Z[X]);return $}function vD($){if(typeof $==="boolean")return $;return Xg0($)}function KQ(){return{}}function ch8($,Z){var X,G,Q;let Y={type:"array"};if(((X=$.type)==null?void 0:X._def)&&((Q=(G=$.type)==null?void 0:G._def)==null?void 0:Q.typeName)!==uh8.ZodAny)Y.items=J6($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)Y.minItems=$.minLength.value;if($.maxLength)Y.maxItems=$.maxLength.value;if($.exactLength)Y.minItems=$.exactLength.value,Y.maxItems=$.exactLength.value;return Y}function lh8($){let Z={type:"integer",format:"int64"};if(!$.checks)return Z;for(let X of $.checks)switch(X.kind){case"min":if(X.inclusive)Z.minimum=X.value;else Z.exclusiveMinimum=X.value;break;case"max":if(X.inclusive)Z.maximum=X.value;else Z.exclusiveMaximum=X.value;break;case"multipleOf":Z.multipleOf=X.value;break}return Z}function dh8(){return{type:"boolean"}}function zn1($,Z){return J6($.type._def,Z)}function jn1($,Z,X){let G=X!=null?X:Z.dateStrategy;if(Array.isArray(G))return{anyOf:G.map((Q,Y)=>jn1($,Z,Q))};switch(G){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return ih8($)}}function nh8($,Z){return{...J6($.innerType._def,Z),default:$.defaultValue()}}function ph8($,Z){return Z.effectStrategy==="input"?J6($.schema._def,Z):KQ()}function th8($){return{type:"string",enum:Array.from($.values)}}function rh8($,Z){let X=[J6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),J6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Q)=>!!Q),G=[];return X.forEach((Q)=>{if(oh8(Q))G.push(...Q.allOf);else{let Y=Q;if("additionalProperties"in Q&&Q.additionalProperties===!1){let{additionalProperties:J,...K}=Q;Y=K}G.push(Y)}}),G.length?{allOf:G}:void 0}function ah8($){let Z=typeof $.value;if(Z!=="bigint"&&Z!=="number"&&Z!=="boolean"&&Z!=="string")return{type:Array.isArray($.value)?"array":"object"};return{type:Z==="bigint"?"integer":Z,const:$.value}}function Pn1($,Z){let X={type:"string"};if($.checks)for(let G of $.checks)switch(G.kind){case"min":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value;break;case"max":X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"email":switch(Z.emailStrategy){case"format:email":yJ(X,"email",G.message,Z);break;case"format:idn-email":yJ(X,"idn-email",G.message,Z);break;case"pattern:zod":RX(X,xJ.email,G.message,Z);break}break;case"url":yJ(X,"uri",G.message,Z);break;case"uuid":yJ(X,"uuid",G.message,Z);break;case"regex":RX(X,G.regex,G.message,Z);break;case"cuid":RX(X,xJ.cuid,G.message,Z);break;case"cuid2":RX(X,xJ.cuid2,G.message,Z);break;case"startsWith":RX(X,RegExp(`^${oy0(G.value,Z)}`),G.message,Z);break;case"endsWith":RX(X,RegExp(`${oy0(G.value,Z)}$`),G.message,Z);break;case"datetime":yJ(X,"date-time",G.message,Z);break;case"date":yJ(X,"date",G.message,Z);break;case"time":yJ(X,"time",G.message,Z);break;case"duration":yJ(X,"duration",G.message,Z);break;case"length":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value,X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"includes":{RX(X,RegExp(oy0(G.value,Z)),G.message,Z);break}case"ip":{if(G.version!=="v6")yJ(X,"ipv4",G.message,Z);if(G.version!=="v4")yJ(X,"ipv6",G.message,Z);break}case"base64url":RX(X,xJ.base64url,G.message,Z);break;case"jwt":RX(X,xJ.jwt,G.message,Z);break;case"cidr":{if(G.version!=="v6")RX(X,xJ.ipv4Cidr,G.message,Z);if(G.version!=="v4")RX(X,xJ.ipv6Cidr,G.message,Z);break}case"emoji":RX(X,xJ.emoji(),G.message,Z);break;case"ulid":{RX(X,xJ.ulid,G.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{yJ(X,"binary",G.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{RX(X,xJ.base64,G.message,Z);break}}break}case"nanoid":RX(X,xJ.nanoid,G.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function oy0($,Z){return Z.patternStrategy==="escape"?eh8($):$}function eh8($){let Z="";for(let X=0;X<$.length;X++){if(!sh8.has($[X]))Z+="\\";Z+=$[X]}return Z}function yJ($,Z,X,G){var Q;if($.format||((Q=$.anyOf)==null?void 0:Q.some((Y)=>Y.format))){if(!$.anyOf)$.anyOf=[];if($.format)$.anyOf.push({format:$.format}),delete $.format;$.anyOf.push({format:Z,...X&&G.errorMessages&&{errorMessage:{format:X}}})}else $.format=Z}function RX($,Z,X,G){var Q;if($.pattern||((Q=$.allOf)==null?void 0:Q.some((Y)=>Y.pattern))){if(!$.allOf)$.allOf=[];if($.pattern)$.allOf.push({pattern:$.pattern}),delete $.pattern;$.allOf.push({pattern:Wn1(Z,G),...X&&G.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=Wn1(Z,G)}function Wn1($,Z){var X;if(!Z.applyRegexFlags||!$.flags)return $.source;let G={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Q=G.i?$.source.toLowerCase():$.source,Y="",J=!1,K=!1,W=!1;for(let N=0;N<Q.length;N++){if(J){Y+=Q[N],J=!1;continue}if(G.i){if(K){if(Q[N].match(/[a-z]/)){if(W)Y+=Q[N],Y+=`${Q[N-2]}-${Q[N]}`.toUpperCase(),W=!1;else if(Q[N+1]==="-"&&((X=Q[N+2])==null?void 0:X.match(/[a-z]/)))Y+=Q[N],W=!0;else Y+=`${Q[N]}${Q[N].toUpperCase()}`;continue}}else if(Q[N].match(/[a-z]/)){Y+=`[${Q[N]}${Q[N].toUpperCase()}]`;continue}}if(G.m){if(Q[N]==="^"){Y+=`(^|(?<=[\r
|
|
1042
1042
|
]))`;continue}else if(Q[N]==="$"){Y+=`($|(?=[\r
|
|
@@ -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.claimReviewChangesBounce($,J,K.updatedBy);if(await CY(Y,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Q,verified:N}}),!D)return{status:(await Y.storage.taskBoard.getById($,J)??K).status,merged:!1};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.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",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}),
|