decocms 4.163.0 → 4.163.2
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-ti3Pu3kK.js → AlertCircle-BZ5uUp33.js} +1 -1
- package/dist/client/assets/{AreaChart-BpnZ_7SJ.js → AreaChart-RKDjLQou.js} +1 -1
- package/dist/client/assets/{ArrowUp-Bf_YffT3.js → ArrowUp-DWoLVGTg.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-BmHQxyY6.js → ArrowUpRight-CUgq40t2.js} +1 -1
- package/dist/client/assets/{Check-Dl9VA67i.js → Check-2AcWjzOf.js} +1 -1
- package/dist/client/assets/{CheckCircle-ngI5WaH_.js → CheckCircle-CTEJQ351.js} +1 -1
- package/dist/client/assets/{ChevronDown-BYjJlyLN.js → ChevronDown-CDdmtcy6.js} +1 -1
- package/dist/client/assets/{ChevronRight-CHUOn5n9.js → ChevronRight-9379Od8d.js} +1 -1
- package/dist/client/assets/{ChevronUp-DVtoQDnd.js → ChevronUp-oe0lDn1N.js} +1 -1
- package/dist/client/assets/{Copy01-965RrpjX.js → Copy01-Btw70Aes.js} +1 -1
- package/dist/client/assets/{CpuChip01-DBf5H5mA.js → CpuChip01-DFv_gHFs.js} +1 -1
- package/dist/client/assets/{DotsVertical-DEB201om.js → DotsVertical-Cjn6YGrU.js} +1 -1
- package/dist/client/assets/{Eye-CgkFzpTD.js → Eye-B0neBfTk.js} +1 -1
- package/dist/client/assets/{FilterLines-BG44bodv.js → FilterLines-HfVy6A-w.js} +1 -1
- package/dist/client/assets/{HardDrive-DaPgqmiq.js → HardDrive-9UI1DDT_.js} +1 -1
- package/dist/client/assets/{Key01-DW0yvGkT.js → Key01-Dobf1jZ_.js} +1 -1
- package/dist/client/assets/{LayoutLeft-M37kqvFg.js → LayoutLeft-CByt2qP4.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Dn4hoZr7.js → LinkExternal01-DQaZsPR-.js} +1 -1
- package/dist/client/assets/{LogOut01-CxdGbFfc.js → LogOut01-CMV1BsaS.js} +1 -1
- package/dist/client/assets/{Monitor01-Ci9totvI.js → Monitor01-CvKuxwsa.js} +1 -1
- package/dist/client/assets/{Palette-DXKwKHjA.js → Palette-ZEErkwMI.js} +1 -1
- package/dist/client/assets/{Play-yjpVhW0_.js → Play-DwnSw9Tq.js} +1 -1
- package/dist/client/assets/{Plus-0d2UuDSn.js → Plus-BRe4-S1L.js} +1 -1
- package/dist/client/assets/{SearchLg-Csxdk914.js → SearchLg-CMheHgX9.js} +1 -1
- package/dist/client/assets/{SearchMd-DDsU6A88.js → SearchMd-C7HOHjTl.js} +1 -1
- package/dist/client/assets/{Settings02-Czpn3CZA.js → Settings02-BJ4vWSm4.js} +1 -1
- package/dist/client/assets/{Shield01-ZsfAoy5n.js → Shield01-BpIXTCoE.js} +1 -1
- package/dist/client/assets/{Star01-B7LuQRN5.js → Star01-DA4wkNyA.js} +1 -1
- package/dist/client/assets/{Stars01-BCJedufT.js → Stars01-mViNacNL.js} +1 -1
- package/dist/client/assets/{Stars02-DgOsFnRy.js → Stars02-RXEYy9-m.js} +1 -1
- package/dist/client/assets/{Sun-HRota3Gt.js → Sun-Cx7F80lP.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-SAWs9UZb.js → SwitchHorizontal01-BT1C_QeG.js} +1 -1
- package/dist/client/assets/{Tool01-CmNFiaOd.js → Tool01-DZ8kXd38.js} +1 -1
- package/dist/client/assets/{Tool02-B3a9_UnC.js → Tool02-9P3B5y2_.js} +1 -1
- package/dist/client/assets/{Trash01-HjhDXK-j.js → Trash01-T1I231Gx.js} +1 -1
- package/dist/client/assets/{TrendUp01-CVdp5lOw.js → TrendUp01-D5SVXPSi.js} +1 -1
- package/dist/client/assets/{Upload01-aDI7fYe2.js → Upload01-BVgh7n-m.js} +1 -1
- package/dist/client/assets/{User01-C-e9I8LM.js → User01-Bmgtlzg4.js} +1 -1
- package/dist/client/assets/{Users01-CbE7OgV1.js → Users01-BkQ0IGbO.js} +1 -1
- package/dist/client/assets/{Users03-CqrzC-61.js → Users03-CXjzAJCL.js} +1 -1
- package/dist/client/assets/{X-Cpa-4tY8.js → X-zkjgovg6.js} +1 -1
- package/dist/client/assets/{XCircle-Cc5dbnAP.js → XCircle-BYWiuRFZ.js} +1 -1
- package/dist/client/assets/{XClose-BpJtEZCi.js → XClose-DIU1NlSR.js} +1 -1
- package/dist/client/assets/{Zap-DBmcAhRL.js → Zap-lj1IB3Nf.js} +1 -1
- package/dist/client/assets/{ZapSquare-C_9eVdy7.js → ZapSquare-BPMd-0Nq.js} +1 -1
- package/dist/client/assets/{access-gate-BdZx5t_O.js → access-gate-CC_HFjwI.js} +1 -1
- package/dist/client/assets/{add-section-modal-DhWmeBP-.js → add-section-modal-CaXRPsUD.js} +1 -1
- package/dist/client/assets/{agent-icon-BZwf-0L5.js → agent-icon-BGVU2GaU.js} +1 -1
- package/dist/client/assets/{agents-list-DR2RCf1X.js → agents-list-Cgyp228M.js} +1 -1
- package/dist/client/assets/{ai-providers-ZnGATH3-.js → ai-providers-D5odE7Er.js} +1 -1
- package/dist/client/assets/{alert-DuPRWm0k.js → alert-DnA0w3CQ.js} +1 -1
- package/dist/client/assets/{alert-dialog-DKZMEv6W.js → alert-dialog-CU8qwP7M.js} +1 -1
- package/dist/client/assets/{app-editor-DtkxS_dD.js → app-editor-bG4_7VOY.js} +1 -1
- package/dist/client/assets/{auth-CukKYLpe.js → auth-DP416MP8.js} +1 -1
- package/dist/client/assets/{auth-catchall-Dg_TsJNy.js → auth-catchall-Dp0nYMeG.js} +1 -1
- package/dist/client/assets/{auth-entry-BzZUp_Rx.js → auth-entry-DQBeFn7T.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CGnvVGdP.js → auth-split-layout-W617Olul.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CD7P-JRl.js → authenticate-and-persist-oauth-px99lMUu.js} +1 -1
- package/dist/client/assets/{automation-list-row-f_dKKdi2.js → automation-list-row-CQ8-iORV.js} +1 -1
- package/dist/client/assets/{automation-runs-DDvO1cio.js → automation-runs-BiVYhtNb.js} +1 -1
- package/dist/client/assets/{automations-BMRJoIQl.js → automations-D2W7YXBF.js} +1 -1
- package/dist/client/assets/{avatar-DlmhqAFz.js → avatar-Bm2GdcrI.js} +1 -1
- package/dist/client/assets/{badge-BsTm-Hzg.js → badge-CdIVMCyA.js} +1 -1
- package/dist/client/assets/{block-document-BPM0FyRM.js → block-document-DiRo_c7P.js} +1 -1
- package/dist/client/assets/{brand-context-BeGri80o.js → brand-context-CM5ByAO0.js} +1 -1
- package/dist/client/assets/{buckets-BW610lZ4.js → buckets-C8iseayd.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-D2YNZHfv.js → bulk-category-panel-DBXYUOEz.js} +1 -1
- package/dist/client/assets/{calendar-Bk_nFZ1w.js → calendar-D5_9OFkY.js} +1 -1
- package/dist/client/assets/{capability-load-error-D2OMsdaf.js → capability-load-error-Dzx0DFbw.js} +1 -1
- package/dist/client/assets/{card-DmIrghk9.js → card-BsXyxxvJ.js} +1 -1
- package/dist/client/assets/{category-editor-BUNZZgoJ.js → category-editor-C4hDnuA5.js} +1 -1
- package/dist/client/assets/{chat-context-BPLKmgUf.js → chat-context-CI9n98Nh.js} +4 -5
- package/dist/client/assets/{checkbox-DiX_Aibc.js → checkbox-KIltkVU4.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CG28X0PS.js → cli-auth-success-kc_yGiDz.js} +1 -1
- package/dist/client/assets/{collection-detail-AZu9wl9i.js → collection-detail-9Ava1ixp.js} +1 -1
- package/dist/client/assets/{collection-display-button-DDCltC7W.js → collection-display-button-JevqW4DP.js} +1 -1
- package/dist/client/assets/{collection-search-Bd39Ty93.js → collection-search-CINmlXbX.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CtC7kITz.js → collection-table-wrapper-5OiODBX3.js} +1 -1
- package/dist/client/assets/{collection-tabs-DL4kPQ6M.js → collection-tabs-CN98fDiU.js} +1 -1
- package/dist/client/assets/{command-BHk6o7mF.js → command-Dvwl0hOJ.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CuKivMvY.js → commerce-onboarding-9pxmCdus.js} +1 -1
- package/dist/client/assets/{companions-core-bbx0bQkr.js → companions-core-_jKf_ASy.js} +1 -1
- package/dist/client/assets/{connect-B4NgEj6a.js → connect-CdsuH3lD.js} +1 -1
- package/dist/client/assets/{connection-Dc6rTRVb.js → connection-BMYkWDLm.js} +1 -1
- package/dist/client/assets/{connection-card-Brf9stvI.js → connection-card-DBmjORWV.js} +1 -1
- package/dist/client/assets/{connection-detail-DVy64MLr.js → connection-detail-Cu7IFtlC.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CW8Dvuhm.js → connection-form-helpers-G4fbDzDK.js} +1 -1
- package/dist/client/assets/{connections-BzFLeAiu.js → connections-Cx5X7Xnl.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-D2VYWLbF.js → decopilot-sse-pool-CMaq4dw5.js} +1 -1
- package/dist/client/assets/{dialog-eccDqfDY.js → dialog-EWobQe0o.js} +1 -1
- package/dist/client/assets/{domain-settings-_3LQLqGd.js → domain-settings-BIPb4aD7.js} +1 -1
- package/dist/client/assets/{drawer-BHAigiqw.js → drawer-Ux7BXZpv.js} +1 -1
- package/dist/client/assets/{dropdown-menu-VKVNItQB.js → dropdown-menu-w86iGtja.js} +1 -1
- package/dist/client/assets/{empty-state-BQBOhe9i.js → empty-state-B1NXmGrk.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CpSXosWl.js → extract-connection-data-nNm41Q_U.js} +1 -1
- package/dist/client/assets/{file-explorer-jztB0bTV.js → file-explorer-By28LbnJ.js} +1 -1
- package/dist/client/assets/{form-DTe5FR5B.js → form-DKQf1SuG.js} +1 -1
- package/dist/client/assets/{general-bk_tZOsT.js → general-BiB1Kl-j.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CXx_pb1g.js → github-repo-picker-DIuZuT1N.js} +1 -1
- package/dist/client/assets/{hooks-DG7ciaea.js → hooks-CISw4arr.js} +1 -1
- package/dist/client/assets/{index-Brt7IRdN.js → index-BVXsyVeE.js} +5 -5
- package/dist/client/assets/{index-QYD1kCPQ.js → index-BZUcNCam.js} +1 -1
- package/dist/client/assets/{index-Dc6BHLcV.js → index-COMWr3K_.js} +3 -3
- package/dist/client/assets/{index-BMoDCepY.js → index-CPeoZUeU.js} +1 -1
- package/dist/client/assets/{index-Ddr2_EhW.js → index-Cb6pJrm4.js} +1 -1
- package/dist/client/assets/{index-DoPXbjwA.js → index-ClwfVk1w.js} +1 -1
- package/dist/client/assets/{index-BauNjP_Q.js → index-DJwZ_Qmr.js} +1 -1
- package/dist/client/assets/{index-Dg3mj-78.js → index-EBvscSpq.js} +1 -1
- package/dist/client/assets/{index-Czz8zq-M.js → index-LC5zcR1I.js} +3 -3
- package/dist/client/assets/{index-CBeLWIus.js → index-_d3BXv-c.js} +1 -1
- package/dist/client/assets/{index-D0mv-0LW.js → index-r3fILkXo.js} +1 -1
- package/dist/client/assets/{index-redirect-DtGSaXFd.js → index-redirect-D1uIGUCd.js} +1 -1
- package/dist/client/assets/{input-C4hWY6oj.js → input-CSgoj-o-.js} +1 -1
- package/dist/client/assets/{integration-icon-d7X2fLnq.js → integration-icon-BKsEvs2_.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CFjVr7QF.js → invite-member-dialog-DVXh9An9.js} +1 -1
- package/dist/client/assets/{label-C7Ydt9op.js → label-C1j9OAMJ.js} +1 -1
- package/dist/client/assets/{layout-DqNW2J-G.js → layout-BRc7Dnn4.js} +1 -1
- package/dist/client/assets/{login-BeK2JYf_.js → login-DcAqmmV3.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CbqNfo_L.js → mcp-oauth-BtJyo-tO.js} +1 -1
- package/dist/client/assets/{members--Y5icCSA.js → members-C-JZ2DHT.js} +1 -1
- package/dist/client/assets/{monaco-editor-DDHgiR5s.js → monaco-editor-CoCGu6F4.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CFnSQJPb.js → monitoring-stats-row-a4iaQcdD.js} +1 -1
- package/dist/client/assets/{multi-select-5bCKTJK_.js → multi-select-BVX9sRI4.js} +1 -1
- package/dist/client/assets/{oauth-callback-Cr3LPs-p.js → oauth-callback-DeC6HbES.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-D3uVpONF.js → oauth-callback-ai-provider-BpHJ5ay8.js} +1 -1
- package/dist/client/assets/{onboarding-BveJcJSR.js → onboarding-vMt8nc2t.js} +1 -1
- package/dist/client/assets/{org-layout-DYIHjm60.js → org-layout-CBhZFDdB.js} +1 -1
- package/dist/client/assets/{organization-choice-CpGPmWiP.js → organization-choice-DfWC55Nh.js} +1 -1
- package/dist/client/assets/{orgs-DTu-EbUr.js → orgs-C_l05NL7.js} +1 -1
- package/dist/client/assets/{page-seo-form-DTHFP-Ey.js → page-seo-form-tC5pgxZw.js} +1 -1
- package/dist/client/assets/{popover-Bd-jbefm.js → popover-BKI8kJQO.js} +1 -1
- package/dist/client/assets/{post-editor-CuWFbgIg.js → post-editor-UWb7kwB7.js} +1 -1
- package/dist/client/assets/{primitives-DPjI8jZN.js → primitives-VbgBF80i.js} +1 -1
- package/dist/client/assets/{profile-Zik8L35T.js → profile-DgGrFBV2.js} +1 -1
- package/dist/client/assets/project-app-view-QN1zvyVP.js +1 -0
- package/dist/client/assets/record-editor-B1lYBA30.js +1 -0
- package/dist/client/assets/{redirect-editor-B-7oGrzI.js → redirect-editor-e4XkOceV.js} +1 -1
- package/dist/client/assets/registry-BQHoENIj.js +2 -0
- package/dist/client/assets/{registry-layout-C5N6gB_V.js → registry-layout-BHEZBHuH.js} +1 -1
- package/dist/client/assets/{reports-Bxbv432E.js → reports-DPNA9mnB.js} +1 -1
- package/dist/client/assets/{require-capability-BksNuDZT.js → require-capability-DCIX-8lv.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CQEgmxXV.js → required-auth-layout-BWYKkhAX.js} +1 -1
- package/dist/client/assets/{reset-password-BESGgxg0.js → reset-password-Bv363PQT.js} +1 -1
- package/dist/client/assets/{roles-bUWRe9YV.js → roles-BkFLGzPt.js} +1 -1
- package/dist/client/assets/{search-input-BORWq34N.js → search-input-CcaHjEA0.js} +1 -1
- package/dist/client/assets/{secrets-CJ4YV6qZ.js → secrets-DScsiPB9.js} +1 -1
- package/dist/client/assets/{sections-editor-CoWDmj5O.js → sections-editor-CNw058mf.js} +1 -1
- package/dist/client/assets/{select-zQuR8Sqj.js → select-_ZSbK5or.js} +1 -1
- package/dist/client/assets/{select-model-CUnyew1j.js → select-model-C8qAGDWv.js} +1 -1
- package/dist/client/assets/{self-tool-result-CMg7eAwe.js → self-tool-result-BA6pr-4V.js} +1 -1
- package/dist/client/assets/{seo-editor-bQKyo-SO.js → seo-editor-lljIqdb0.js} +1 -1
- package/dist/client/assets/{settings-layout-BVogLuxy.js → settings-layout-B-OwC_bI.js} +1 -1
- package/dist/client/assets/{settings-section-JZZlweID.js → settings-section-DPVJu564.js} +1 -1
- package/dist/client/assets/{shell-controls-Ddct7BqP.js → shell-controls-BPL1nCa7.js} +1 -1
- package/dist/client/assets/{shell-layout-ZlXt23su.js → shell-layout-8Rc3738k.js} +1 -1
- package/dist/client/assets/{sidebar-BkStRxDT.js → sidebar-mItyCeAc.js} +1 -1
- package/dist/client/assets/{skeleton-D-I_pOuk.js → skeleton-CnXuFsfR.js} +1 -1
- package/dist/client/assets/{spinner-DD08wc6q.js → spinner-DPM-yX6b.js} +1 -1
- package/dist/client/assets/{sso-D4qzo6G5.js → sso-k8mvFyVG.js} +1 -1
- package/dist/client/assets/{store-vW7og05p.js → store-LQVj6L0g.js} +1 -1
- package/dist/client/assets/store-registry-DnaLRiEb.js +2 -0
- package/dist/client/assets/{studio-tools-BPPCCWXf.js → studio-tools-Bn-loM7_.js} +1 -1
- package/dist/client/assets/{switch-DxdQ5vrY.js → switch-DyFKNxvZ.js} +1 -1
- package/dist/client/assets/{tab-id-FQNpqTpn.js → tab-id-MI30AnUC.js} +1 -1
- package/dist/client/assets/{table-ihueNrlC.js → table-D1r0Tm53.js} +1 -1
- package/dist/client/assets/{tabs-CqdH0tsp.js → tabs-DXHIfvuK.js} +1 -1
- package/dist/client/assets/{textarea-GdS0gjtE.js → textarea-BmIP24hL.js} +1 -1
- package/dist/client/assets/{toggle-group-CzY0_WrP.js → toggle-group-DTt3nPYc.js} +1 -1
- package/dist/client/assets/{toolbar-BpklR9pD.js → toolbar-CUKMbJln.js} +1 -1
- package/dist/client/assets/{tooltip-BNhPNrKe.js → tooltip-DnA85u6o.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DBSETegu.js → use-ai-providers-F6SYEEw_.js} +1 -1
- package/dist/client/assets/{use-automations-DxITYrKN.js → use-automations-DyDkufEr.js} +1 -1
- package/dist/client/assets/{use-autosave-D991EwNV.js → use-autosave-DQEMmTVM.js} +1 -1
- package/dist/client/assets/{use-capability-Da-zOQM3.js → use-capability-BVeJXBCJ.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DcvtsA2A.js → use-clock-tick-C6s8dFH5.js} +1 -1
- package/dist/client/assets/{use-connection-BuMQx4ki.js → use-connection-CmZN0ezt.js} +1 -1
- package/dist/client/assets/{use-copy-DNDEIbKS.js → use-copy-D3jANsQP.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-D6RB0TgY.js → use-create-virtual-mcp-DKwlPHVT.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Cgb6YpZp.js → use-debounced-autosave-DJA_sRkV.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BNGiIib3.js → use-debounced-value-BLsBYGK2.js} +1 -1
- package/dist/client/assets/{use-deco-credits-XnJiEJuK.js → use-deco-credits-CEAP7uUP.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-C7kOxyI8.js → use-decopilot-events-DVk7NfH-.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DIVEu8lp.js → use-delete-connection-H-9PoiDP.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BMY0jdD6.js → use-deployment-admin-BvrbtokR.js} +1 -1
- package/dist/client/assets/{use-file-configs-CE8ExSwD.js → use-file-configs-CAP01vv_.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BpR1k-qF.js → use-infinite-scroll-B1roqY6U.js} +1 -1
- package/dist/client/assets/{use-join-requests-CdUg8tEq.js → use-join-requests-D7SWixFc.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BR6D4nc3.js → use-mcp-auth-status--ulHnwDi.js} +1 -1
- package/dist/client/assets/{use-mcp-client-2_fvLjiP.js → use-mcp-client-ChuqcZtd.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BvzMqHnQ.js → use-mcp-tools-DZnsWrtC.js} +1 -1
- package/dist/client/assets/{use-members-2SOgYNjB.js → use-members-CAakmVIA.js} +1 -1
- package/dist/client/assets/{use-mobile-D5Acv4lR.js → use-mobile-1oBCf8eJ.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-D-4iER-1.js → use-navigate-to-agent-BGDRz2UZ.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-4_haKjM7.js → use-org-auth-client-y_c9xm6l.js} +1 -1
- package/dist/client/assets/{use-org-sso-vn-1LtBS.js → use-org-sso-BIf_80VE.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BKPcU92N.js → use-organization-roles-DEfoqn2x.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DJptHq-J.js → use-organization-settings-DXpnlD7q.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DzAzSwb8.js → use-registry-connections-OpyDLpkT.js} +1 -1
- package/dist/client/assets/{use-secrets-B1RdRaKQ.js → use-secrets-D7-SXEPt.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BYb6xNbe.js → use-status-sounds-B0jaqMPf.js} +1 -1
- package/dist/client/assets/{use-tags-BW-81eIo.js → use-tags-B3vu8ZRv.js} +1 -1
- package/dist/client/assets/{use-view-mode-CNNH_8Ku.js → use-view-mode-BrR3n5rp.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BisiWdxz.js → use-virtual-mcp-DuHpEfQz.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Ccg5a1hc.js +1 -0
- package/dist/client/assets/{useQueries-Bbci3K-m.js → useQueries-BxO15kGg.js} +1 -1
- package/dist/client/assets/{useRouterState-oUZ6nlDV.js → useRouterState-CNYwtycj.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-ZbGkC2Wx.js +1 -0
- package/dist/client/assets/{users-B1LyyDda.js → users-Dj7hST_K.js} +1 -1
- package/dist/client/assets/{variant-calendar-DIM527zt.js → variant-calendar-URaypSlx.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CjhqURhq.js → view-mode-toggle-GBGarfca.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -3
- package/dist/server/server.js +2 -3
- package/package.json +1 -1
- package/dist/client/assets/project-app-view-hhQ2zFtc.js +0 -1
- package/dist/client/assets/record-editor-BFWvdGcG.js +0 -1
- package/dist/client/assets/registry-Cvci0c2h.js +0 -2
- package/dist/client/assets/store-registry-C1MZanSQ.js +0 -2
- package/dist/client/assets/useInfiniteQuery-gQfHKtAA.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-B0gKYiYE.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1187,8 +1187,7 @@ ${N}`:N;return{...J,description:H,inputExamples:X?void 0:J.inputExamples}});retu
|
|
|
1187
1187
|
|
|
1188
1188
|
`)},flush($){$.enqueue(`data: [DONE]
|
|
1189
1189
|
|
|
1190
|
-
`)}})}},Id0={"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive","x-vercel-ai-ui-message-stream":"v1","x-accel-buffering":"no"};ni=s0.record(s0.string(),AL.optional()),qd0=w0(()=>s(s0.union([s0.strictObject({type:s0.literal("text-start"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("text-delta"),id:s0.string(),delta:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("text-end"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("error"),errorText:s0.string()}),s0.strictObject({type:s0.literal("tool-input-start"),toolCallId:s0.string(),toolName:s0.string(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-input-delta"),toolCallId:s0.string(),inputTextDelta:s0.string()}),s0.strictObject({type:s0.literal("tool-input-available"),toolCallId:s0.string(),toolName:s0.string(),input:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-input-error"),toolCallId:s0.string(),toolName:s0.string(),input:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),errorText:s0.string(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-approval-request"),approvalId:s0.string(),toolCallId:s0.string(),signature:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-output-available"),toolCallId:s0.string(),output:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),preliminary:s0.boolean().optional()}),s0.strictObject({type:s0.literal("tool-output-error"),toolCallId:s0.string(),errorText:s0.string(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional()}),s0.strictObject({type:s0.literal("tool-output-denied"),toolCallId:s0.string()}),s0.strictObject({type:s0.literal("reasoning-start"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("reasoning-delta"),id:s0.string(),delta:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("reasoning-end"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("source-url"),sourceId:s0.string(),url:s0.string(),title:s0.string().optional(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("source-document"),sourceId:s0.string(),mediaType:s0.string(),title:s0.string(),filename:s0.string().optional(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("file"),url:s0.string(),mediaType:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.custom(($)=>typeof $==="string"&&$.startsWith("data-"),{message:'Type must start with "data-"'}),id:s0.string().optional(),data:s0.unknown(),transient:s0.boolean().optional()}),s0.strictObject({type:s0.literal("start-step")}),s0.strictObject({type:s0.literal("finish-step")}),s0.strictObject({type:s0.literal("start"),messageId:s0.string().optional(),messageMetadata:s0.unknown().optional()}),s0.strictObject({type:s0.literal("finish"),finishReason:s0.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:s0.unknown().optional()}),s0.strictObject({type:s0.literal("abort"),reason:s0.string().optional()}),s0.strictObject({type:s0.literal("message-metadata"),messageMetadata:s0.unknown()})])));o14=kY;r14=oi;s14=gJ({prefix:"aitxt",size:24}),e14={file:!0,source:!0,"text-start":!0,"text-end":!0,"text-delta":!0,"reasoning-start":!0,"reasoning-end":!0,"reasoning-delta":!0,"tool-input-start":!0,"tool-input-end":!0,"tool-input-delta":!0,"tool-approval-request":!0,"tool-call":!0,"tool-result":!0,"tool-error":!0,"stream-start":!1,"response-metadata":!1,finish:!1,error:!1,raw:!1};EG=K0.record(K0.string(),AL.optional()),Q$4=w0(()=>s(K0.array(K0.object({id:K0.string(),role:K0.enum(["system","user","assistant"]),metadata:K0.unknown().optional(),parts:K0.array(K0.union([K0.object({type:K0.literal("text"),text:K0.string(),state:K0.enum(["streaming","done"]).optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("reasoning"),text:K0.string(),state:K0.enum(["streaming","done"]).optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("source-url"),sourceId:K0.string(),url:K0.string(),title:K0.string().optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("source-document"),sourceId:K0.string(),mediaType:K0.string(),title:K0.string(),filename:K0.string().optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("file"),mediaType:K0.string(),filename:K0.string().optional(),url:K0.string(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("step-start")}),K0.object({type:K0.string().startsWith("data-"),id:K0.string().optional(),data:K0.unknown()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-streaming"),input:K0.unknown().optional(),providerExecuted:K0.boolean().optional(),callProviderMetadata:K$.optional(),output:K0.never().optional(),errorText:K0.never().optional(),approval:K0.never().optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-available"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.never().optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-requested"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.never().optional(),reason:K0.never().optional(),signature:K0.string().optional()})}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-responded"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.boolean(),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-available"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.unknown(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),preliminary:K0.boolean().optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-error"),input:K0.unknown().optional(),rawInput:K0.unknown().optional(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.string(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-denied"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!1),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-streaming"),providerExecuted:K0.boolean().optional(),callProviderMetadata:K$.optional(),input:K0.unknown().optional(),output:K0.never().optional(),errorText:K0.never().optional(),approval:K0.never().optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-available"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.never().optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-requested"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.never().optional(),reason:K0.never().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-responded"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.boolean(),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-available"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.unknown(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),preliminary:K0.boolean().optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-error"),providerExecuted:K0.boolean().optional(),input:K0.unknown().optional(),rawInput:K0.unknown().optional(),output:K0.never().optional(),errorText:K0.string(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-denied"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!1),reason:K0.string().optional(),signature:K0.string().optional()})})])).nonempty("Message must contain at least one part")})).nonempty("Messages array must not be empty")));w$4=K90,O$4={type:"no-schema",jsonSchema:async()=>{return},async validatePartialResult({value:$,textDelta:Z}){return{success:!0,value:{partial:$,textDelta:Z}}},async validateFinalResult($,Z){return $===void 0?{success:!1,error:new jG({message:"No object generated: response did not match schema.",text:Z.text,response:Z.response,usage:Z.usage,finishReason:Z.finishReason})}:{success:!0,value:$}},createElementStream(){throw new A4({functionality:"element streams in no-schema mode"})}};E$4=gJ({prefix:"aiobj",size:24});T$4=gJ({prefix:"aiobj",size:24});q$4=class extends Fw{constructor({data:$,mediaType:Z}){super({data:$,mediaType:Z});let X="mp3";if(Z){let G=Z.split("/");if(G.length===2){if(Z!=="audio/mpeg")X=G[1]}}if(!X)throw Error("Audio format must be provided or determinable from media type");this.format=X}};S$4={word:/\S+\s+/m,line:/\n+/m};C$4=_d0();o$4=u4$,l4$=`vercel.ai.error.${c4$}`,r$4=Symbol.for(l4$),m4$=class extends E5{constructor({modelId:$,modelType:Z,providerId:X,availableProviders:G,message:Q=`No such provider: ${X} (available providers: ${G.join()})`}){super({errorName:c4$,modelId:$,modelType:Z,message:Q});this[d4$]=!0,this.providerId=X,this.availableProviders=G}static isInstance($){return Q1.hasMarker($,l4$)}};d4$=r$4;a$4=i4$;$84=_d0();p4$=class extends fd0{constructor($={}){super($)}processResponseStream($){return qN({stream:$,schema:qd0}).pipeThrough(new TransformStream({async transform(Z,X){if(!Z.success)throw Z.error;X.enqueue(Z.value)}}))}};F84=class extends fd0{constructor($={}){super($)}processResponseStream($){return H84({stream:$.pipeThrough(new TextDecoderStream)})}}});function t4$($){return{type:"data-title-result",data:{title:$},transient:!0}}function yd0($){return $.type==="data-title-input"}function gd0($){return $.type==="data-title-result"}async function*o4$($,Z){let X=Z.persistTitle??((Q,Y)=>Z.ctx.storage.threads.update(Q,{title:Y}).then(()=>{})),G=!1;for await(let Q of $){if(yd0(Q)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if(gd0(Q)){if(G){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(G=!0,Z.currentThreadTitle!==TN)continue;let Y=Q.data.title;if(!Y)continue;await X(Z.threadId,Y).catch((J)=>{console.error("[title-interceptor] persist failed for thread",Z.threadId,J)});try{await Z.onTitleUpdated?.(Y)}catch(J){console.error("[title-interceptor] onTitleUpdated callback failed",J)}if(!Z.isStreamFinished())try{Z.writer.write({type:"data-thread-title",data:{title:Y},transient:!0})}catch(J){console.error("[title-interceptor] writer.write failed",J)}continue}yield Q}}function r4$($,Z){let X=Z.persistTitle??((Q,Y)=>Z.ctx.storage.threads.update(Q,{title:Y}).then(()=>{})),G=!1;return $.pipeThrough(new TransformStream({async transform(Q,Y){if(yd0(Q)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");return}if(gd0(Q)){if(G){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");return}if(G=!0,Z.currentThreadTitle!==TN)return;let J=Q.data.title;if(!J)return;await X(Z.threadId,J).catch((K)=>{console.error("[title-interceptor] persist failed for thread",Z.threadId,K)});try{await Z.onTitleUpdated?.(J)}catch(K){console.error("[title-interceptor] onTitleUpdated callback failed",K)}if(!Z.isStreamFinished())try{Z.writer.write({type:"data-thread-title",data:{title:J},transient:!0})}catch(K){console.error("[title-interceptor] writer.write failed",K)}return}Y.enqueue(Q)}}))}var a4$=B(()=>{CU()});function U84($){let Z=$[Symbol.asyncIterator]();return new ReadableStream({async pull(X){try{let{value:G,done:Q}=await Z.next();if(Q)X.close();else X.enqueue(G)}catch(G){X.error(G)}},async cancel(X){await Z.return?.(X)}})}function w84($,Z){let X=$.getReader(),G=!1,Q=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Y){try{let{done:J,value:K}=await X.read();if(J)Q(),Y.close();else Y.enqueue(K)}catch(J){Z(),Q(),Y.error(J)}},async cancel(Y){await X.cancel(Y),Q()}})}function O84($){let Z=$.metadata?.usage;if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let X=Z,G=(Q)=>typeof Q==="number"?Q:0;return{...X,inputTokens:G(X.inputTokens),outputTokens:G(X.outputTokens),totalTokens:G(X.totalTokens)}}function W90($){let Z=[],X=!1,G=!1,Q=!1,Y=!0,J=$.errorMessageId??crypto.randomUUID(),K,W=new Promise((z)=>{K=z});if(!$.chunks&&!$.chunkStream)throw Error("consumeHarnessStream requires chunks or chunkStream");let N=$.chunks?async function*(){try{yield*$.chunks}catch(z){throw Q=!0,z}}():null,H=$.chunkStream?w84($.chunkStream,()=>{Q=!0}):null,F=$.originalMessages?.at(-1),U=!$.generateMessageId&&F?.role==="assistant"?F.id:void 0,w=new Map,O=null,D=(z)=>{if($.generateMessageId){let j=w.get(z);if(j===void 0)j=$.generateMessageId(),w.set(z,j);return j}if(O===null)O=z;return U&&z===O?U:z},L=(z)=>({...z,id:D(z.id)});return{uiStream:Vd0({originalMessages:$.originalMessages,execute:({writer:z})=>{let j={ctx:null,isStreamFinished:()=>X,currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,writer:z,onTitleUpdated:$.title.onTitleUpdated,persistTitle:$.title.persistTitle};if(H){z.merge(r4$(H,j));return}let A=o4$(N,j);z.merge(U84(A))},onStepFinish:({responseMessage:z})=>{let j=L(z);Z.push($.persistence.emitStepParts(j).catch((A)=>{Y=!1,console.error("[consume-harness-stream] emitStepParts failed",A)})),Z.push(Promise.resolve($.hooks?.onStep?.(j)).catch((A)=>console.error("[consume-harness-stream] onStep hook failed",A)))},onFinish:async({responseMessage:z,finishReason:j})=>{X=!0,await Promise.allSettled(Z);let A=L(z);if(!G){if(j)A.metadata={...A.metadata??{},finishReason:j};await $.persistence.emitFinal(A).catch((q)=>{Y=!1,console.error("[consume-harness-stream] emitFinal failed",q)})}let P=O84(A);if(P)await Promise.resolve($.hooks?.onUsage?.(P)).catch((q)=>console.error("[consume-harness-stream] onUsage hook failed",q));if(!Q)await Promise.resolve($.hooks?.onFinish?.(A,j,{persistenceOk:Y})).catch((q)=>console.error("[consume-harness-stream] onFinish hook failed",q));K()},onError:(z)=>{X=!0;let j=z instanceof Error?z.message:String(z);if(!G)G=!0,Z.push($.persistence.emitError(J,j).catch((A)=>{Y=!1,console.error("[consume-harness-stream] emitError failed",A)})),Z.push(Promise.resolve($.hooks?.onError?.(z)).catch((A)=>console.error("[consume-harness-stream] onError hook failed",A)));return $.sanitizeErrorText?$.sanitizeErrorText(z):j}}),whenComplete:W,isStreamFinished:()=>X}}var hd0=B(()=>{k4();a4$()});function B84($){return{type:"data-user-message",data:$}}function s4$($){if(!$||typeof $!=="object")return!1;return $.type==="data-user-message"}async function e4$($,Z,X){if(!$)return;try{await $.publishRawChunk(Z,B84(X))}catch{}}function $6$($){return f0$($)||s4$($)}async function D84($){let Z=$.getReader();try{while(!0){let{done:X}=await Z.read();if(X)break}}finally{Z.releaseLock()}}function L84($,Z){let X=$.getReader(),G=!1,Q=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Y){try{let{done:J,value:K}=await X.read();if(J)Q(),Y.close();else Y.enqueue(K)}catch(J){Z(J),Q(),Y.error(J)}},async cancel(Y){await X.cancel(Y),Q()}})}async function Z6$($){if(!$.chunks&&!$.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let Z=null,X=!1,G=void 0,Q={inputTokens:0,outputTokens:0,totalTokens:0},Y=[],J=null,K=(O)=>{if(J===null)J=O;throw O},W=$.chunks?async function*(){try{for await(let O of $.chunks){if($6$(O))continue;yield O}}catch(O){throw Z=O,O}}():void 0,N=$.chunkStream?L84($.chunkStream,(O)=>{Z=O}).pipeThrough(new TransformStream({transform(O,D){if(!$6$(O))D.enqueue(O)}})):void 0,H={emitStepParts:(O)=>$.persistence.emitStepParts(O).catch(K),emitFinal:(O)=>$.persistence.emitFinal(O).catch(K),emitError:(O,D)=>$.persistence.emitError(O,D).catch(K)},{uiStream:F,whenComplete:U}=W90({chunks:W,chunkStream:N,originalMessages:$.originalMessages??[],title:$.title?{currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,persistTitle:$.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:H,sanitizeErrorText:$.sanitizeErrorText,errorMessageId:$.errorMessageId,generateMessageId:$.generateMessageId,hooks:{onUsage:(O)=>{Q={inputTokens:O.inputTokens,outputTokens:O.outputTokens,totalTokens:O.totalTokens}},onError:()=>{X=!0},onFinish:(O,D)=>{G=D,Y=Array.isArray(O.parts)?O.parts.filter((L)=>L!=null&&typeof L==="object"&&("type"in L)):[]}}});if(await D84(F).catch(()=>{}),await U,J!==null)throw J;if(Z!==null)throw Z;return{failed:X&&G===void 0,finishReason:G,usage:Q,finalParts:Y}}var X6$=B(()=>{hd0();Yx()});var Gn=786432;function z84($){if(/[.*>\s]/.test($))throw Error("Invalid NATS subject token")}function Lw($){return z84($),`${N90}.${$}`}function G6$($){let Z=`${$.runId}:${$.fenceToken}:${$.seq}`;return $.fragmentIndex===void 0?Z:`${Z}:frag:${$.fragmentIndex}`}function j84($){return`${$.runId}:${$.fenceToken}:done:${$.finalSeq}`}function Q6$($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>0?Z:null}function P84($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>=0?Z:null}function A84($){if(!$)return null;let Z=$.split(":"),[X,G,Q,Y,J]=Z;if(!X||!G||!Q)return null;if(Q==="done"){let W=Q6$(Y);return Z.length===4&&W!==null?{kind:"done",runId:X,fenceToken:G,finalSeq:W}:null}if(Q==="ckpt")return null;let K=Q6$(Q);if(K===null)return null;if(Z.length===3)return{kind:"chunk",runId:X,fenceToken:G,seq:K,fragmentIndex:null};if(Z.length===5&&Y==="frag"){let W=P84(J);return W===null?null:{kind:"chunk",runId:X,fenceToken:G,seq:K,fragmentIndex:W}}return null}function cd0($,Z){let X=Lw(Z.runId),G=ud0.encode(JSON.stringify({p:$}));if(G.length>E84)return[];if(G.length<=Gn)return[{subject:X,data:G,msgId:Z.dedup?G6$({runId:Z.runId,...Z.dedup}):void 0}];let Q=Math.ceil(G.length/Gn),Y=[];for(let J=0;J<Q;J++)Y.push({subject:X,data:G.slice(J*Gn,(J+1)*Gn),headers:{[Y6$]:String(J),[J6$]:String(Q)},msgId:Z.dedup?G6$({runId:Z.runId,...Z.dedup,fragmentIndex:J}):void 0});return Y}function K6$($){return{subject:Lw($.runId),data:ud0.encode(JSON.stringify({done:!0,finalSeq:$.finalSeq})),msgId:j84($)}}function W6$($){return{subject:Lw($),data:ud0.encode(JSON.stringify({done:!0}))}}function T84($){let Z=$.reduce((Q,Y)=>Q+(Y?.length??0),0),X=new Uint8Array(Z),G=0;for(let Q of $){if(!Q)continue;X.set(Q,G),G+=Q.length}return X}function H90(){let $=null;return new TransformStream({transform(Z,X){let G=Z.headers?.get(J6$);if(!G){X.enqueue(Z);return}let Q=Number(G),Y=Number(Z.headers?.get(Y6$)??"0");if(Y===0)$={total:Q,received:0,parts:Array(Q)};else if(!$||$.total!==Q)return;if(!$.parts[Y])$.received++;if($.parts[Y]=Z.data,$.received<$.total)return;let J=T84($.parts);$=null,X.enqueue({subject:Z.subject,data:J,headers:Z.headers})}})}function R84($){return typeof $==="number"&&Number.isInteger($)&&$>0}function q84($){let Z=A84($.headers?.get("Nats-Msg-Id")||void 0),X;try{X=JSON.parse(I84.decode($.data))}catch{return null}if(!X||typeof X!=="object")return null;let G=X;if(G.done===!0)return{kind:"done",runId:Z?.kind==="done"?Z.runId:null,fenceToken:Z?.kind==="done"?Z.fenceToken:null,envelopeFinalSeq:R84(G.finalSeq)?G.finalSeq:null,msgIdFinalSeq:Z?.kind==="done"?Z.finalSeq:null};if("p"in G)return{kind:"chunk",seq:Z?.kind==="chunk"?Z.seq:null,runId:Z?.kind==="chunk"?Z.runId:null,fenceToken:Z?.kind==="chunk"?Z.fenceToken:null,chunk:G.p};return null}function F90(){return new TransformStream({transform($,Z){let X=q84($);if(X)Z.enqueue(X)}})}var N90="decopilot.stream",Y6$="Dp-Frag-Idx",J6$="Dp-Frag-Total",E84=33554432,ud0,I84;var N6$=B(()=>{ud0=new TextEncoder;I84=new TextDecoder});var U90=B(()=>{N6$()});var tN="DECOPILOT_STREAMS";var ld0=B(()=>{U90()});function H6$($,Z){return new TransformStream({transform(X,G){if(X.runId!==$||X.fenceToken!==Z)return;G.enqueue(X)}})}function F6$(){let $=1;return new TransformStream({transform(Z,X){if(Z.kind==="done"){X.enqueue(Z);return}if(Z.seq===null){X.error(Error("projector chunk missing seq"));return}if(Z.seq<$)return;if(Z.seq>$){X.error(new Qn($,Z.seq));return}$++,X.enqueue(Z)}})}function U6$($){let Z=$.getReader(),X=!1,G=0,Q=()=>{if(X)return;X=!0,Z.releaseLock()};return new ReadableStream({async pull(Y){for(;;){let{done:J,value:K}=await Z.read();if(J){await Z.cancel(),Q(),Y.error(Error("reader stopped before done"));return}let W=K;if(W.kind==="done"){if(!(W.envelopeFinalSeq!=null&&W.envelopeFinalSeq===W.msgIdFinalSeq))continue;if(W.envelopeFinalSeq!==G){await Z.cancel(),Q(),Y.error(new Qn(G+1,null));return}await Z.cancel(),Q(),Y.close();return}G=W.seq??G,Y.enqueue(W.chunk);return}},async cancel(Y){await Z.cancel(Y),Q()}})}function M84($){if(Symbol.asyncIterator in $)return $[Symbol.asyncIterator]();let Z=$[Symbol.iterator]();return{next:async()=>Z.next(),return:async(X)=>Z.return?Z.return(X):{done:!0,value:X}}}function O90($){let Z=M84($.messages),X=$.idleTimeoutMs,G=!1,Q=(Y)=>{if(G)return;G=!0,Z.return?.(Y).catch(()=>{}),$.onCancel?.()};return new ReadableStream({async pull(Y){if(X===void 0){let{done:H,value:F}=await Z.next();if(H){Y.close();return}Y.enqueue(F);return}let J=new AbortController,K=Z.next().then((H)=>{return J.abort(),H}),W=V8(X,{signal:J.signal}).then(()=>"idle").catch(()=>"cancelled"),N=await Promise.race([K,W]);if(N==="idle"){Y.error(new w90(X));return}if(N==="cancelled")return;if(N.done){Y.close();return}Y.enqueue(N.value)},async cancel(Y){Q(Y)}})}var w90,Qn;var B90=B(()=>{C5();w90=class w90 extends Error{idleTimeoutMs;constructor($){super("producer produced no output before timeout");this.idleTimeoutMs=$;this.name="StreamIdleTimeoutError"}};Qn=class Qn extends Error{expectedSeq;gotSeq;constructor($,Z){super(Z===null?`missing seq ${$} (stream ended at the fenced done)`:`missing seq ${$} (next delivered is ${Z})`);this.expectedSeq=$;this.gotSeq=Z;this.name="StreamGapError"}}});function k84($){let X=O90({messages:$.messages,idleTimeoutMs:$.idleTimeoutMs,onCancel:$.onDone}).pipeThrough(H90()).pipeThrough(F90()).pipeThrough(H6$($.runId,$.fenceToken)).pipeThrough(F6$());return U6$(X)}async function O6$($){let X=await(await $.js.consumers.get(tN,{filter_subjects:Lw($.runId),deliver_policy:w6$.DeliverPolicy.All})).consume();async function*G(){try{for await(let Q of X)yield{subject:Q.subject,data:Q.data,headers:Q.headers}}finally{X.stop()}}return k84({messages:G(),runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs,onDone:()=>X.stop()})}var w6$;var B6$=B(()=>{ld0();B90();U90();w6$=M(bO(),1)});function md0($){let Z=$.type;if(typeof Z!=="string")return!1;if(Z==="text"||Z==="reasoning")return $.state!=="streaming";if(Z==="step-start")return!1;if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="approval-requested"||Z==="tool-user_ask"&&$.state==="input-available"||$.state==="output-available"||$.state==="output-error"||$.state==="output-denied";return!0}function dd0($){let Z=$.type??"";if(Z==="reasoning")return"reasoning";if(Z==="file")return"file";if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="output-available"||$.state==="output-error"||$.state==="output-denied"?"tool_result":"tool_call";return"text"}class id0{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor($){this.ctx=$;this.base=$.baseTimeMs??Date.now()}hasEmittedContentFor($){let Z=`${$}#`;for(let X of this.emitted)if(X.startsWith(Z))return!0;return!1}seqFor($){let Z=this.seqByPart.get($);if(Z!==void 0)return Z;let X=this.nextSeq++;return this.seqByPart.set($,X),X}row($,Z,X,G,Q,Y=null){return{id:`${this.ctx.runId}:${$}:${X}`,seq:X,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:$,role:Z,kind:G,payload:Q,payload_ref:null,metadata:Y,created_at:new Date(this.base+X).toISOString()}}emitMessageParts($){let Z=$.parts??[],X=[];for(let G=0;G<Z.length;G++){let Q=Z[G];if(!md0(Q))continue;let Y=`${$.id}#${G}`;if(this.emitted.has(Y))continue;let J=this.seqFor(Y),K=this.row($.id,$.role,J,dd0(Q),Q);this.partKeyByRowId.set(K.id,Y),X.push(K)}return X}emitRequestMessageParts($){let Z=$.parts??[],X=[];for(let G=0;G<Z.length;G++){let Q=Z[G],Y=`${$.id}#${G}`,J=this.seqFor(Y),K=this.row($.id,$.role,J,dd0(Q),Q);this.partKeyByRowId.set(K.id,Y),X.push(K)}return X}markFinished($,Z,X=null){if(this.finished.has($))return[];let G=this.seqFor(`${$}#finish`),Q=this.row($,Z,G,"finish",{},X);return this.finishMessageIdByRowId.set(Q.id,$),[Q]}markRequestFinished($,Z,X=null){let G=this.seqFor(`${$}#finish`),Q=this.row($,Z,G,"finish",{},X);return this.finishMessageIdByRowId.set(Q.id,$),[Q]}acknowledge($){for(let Z of $){let X=this.partKeyByRowId.get(Z.id);if(X!==void 0)this.emitted.add(X);let G=this.finishMessageIdByRowId.get(Z.id);if(G!==void 0)this.finished.add(G)}}emitUserMessage($){return[...this.emitMessageParts($),...this.markFinished($.id,$.role,$.metadata??null)]}emitRequestMessage($){return[...this.emitRequestMessageParts($),...this.markRequestFinished($.id,$.role,$.metadata??null)]}emitStepParts($){return this.emitMessageParts($)}emitFinal($){let Z=this.emitMessageParts($);if(Z.length===0&&!this.hasEmittedContentFor($.id))return Z;return[...Z,...this.markFinished($.id,$.role,$.metadata??null)]}emitFinalSnapshot($){let Z=$.parts??[],X=[];for(let Y=0;Y<Z.length;Y++){let J=Z[Y];if(!md0(J))continue;let K=`${$.id}#${Y}`,W=this.seqFor(K),N=this.row($.id,$.role,W,dd0(J),J);this.partKeyByRowId.set(N.id,K),X.push(N)}if(X.length===0&&!this.hasEmittedContentFor($.id))return X;let G=this.seqFor(`${$.id}#finish`),Q=this.row($.id,$.role,G,"finish",{},$.metadata??null);return this.finishMessageIdByRowId.set(Q.id,$.id),[...X,Q]}emitError($,Z){let X=`${$}#error`,G=[];if(!this.emitted.has(X)){let Q=this.seqFor(X),Y=this.row($,"assistant",Q,"error",{type:"text",text:`Error: ${Z}`});this.partKeyByRowId.set(Y.id,X),G.push(Y)}return[...G,...this.markFinished($,"assistant")]}}class i7{ctx;builder;constructor($){this.ctx=$;this.builder=new id0($)}async appendBuiltRows($){await this.ctx.storage.appendParts($),this.builder.acknowledge($)}async emitUserMessage($){await this.appendBuiltRows(this.builder.emitUserMessage($))}async emitRequestMessage($){let Z=this.builder.emitRequestMessage($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitStepParts($){await this.appendBuiltRows(this.builder.emitStepParts($))}async emitFinal($){await this.appendBuiltRows(this.builder.emitFinal($))}async replaceFinal($){let Z=this.builder.emitFinalSnapshot($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitError($,Z){await this.appendBuiltRows(this.builder.emitError($,Z))}}var Ew=()=>{};async function S84($){let X=($.requestMessageId?await $.messageParts.maxCreatedAtMsForMessage($.runId,$.requestMessageId):null)??await $.messageParts.maxCreatedAtMsForRun($.runId);return new i7({storage:$.messageParts,orgId:$.orgId,threadId:$.runId,runId:$.runId,baseTimeMs:(X??Date.now())+1})}async function D6$($){let Z=await S84($),X=$.replaceFinal?(G)=>Z.replaceFinal(G):(G)=>Z.emitFinal(G);return{emitStepParts:(G)=>Z.emitStepParts(G),emitFinal:X,emitError:(G,Q)=>Z.emitError(G,Q)}}var L6$=B(()=>{Ew()});function D90($,Z){V84.add(1,{"org.id":Z??"unknown"})}var V84;var E6$=B(()=>{X5();V84=Q8.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class nd0{intervalMs;lastBumpMs=new Map;constructor($=3000){this.intervalMs=$}shouldBump($,Z=Date.now()){let X=this.lastBumpMs.get($);if(X!==void 0&&Z-X<this.intervalMs)return!1;return this.lastBumpMs.set($,Z),!0}clear($){this.lastBumpMs.delete($)}}function z6$($,Z,X,G){return $.pipeThrough(new TransformStream({transform(Q,Y){if(X.shouldBump(Z))G();Y.enqueue(Q)},flush(){X.clear(Z)}}))}function L90($,Z=[]){if($==="stop")return Z.filter((Q)=>Q.type==="text"&&Q.text).map((Q)=>Q.text).join(`
|
|
1191
|
-
`).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if($==="tool-calls"){let X=Z.some((Q)=>Q.type==="tool-user_ask"&&Q.state==="input-available"),G=Z.some((Q)=>Q.state==="approval-requested");return X||G?"requires_action":"completed"}return"failed"}function zw($,Z){return`error-${$}:${Z}`}function E90($){return{id:$.id,role:$.role,parts:$.parts,metadata:$.metadata??void 0}}var pd0=()=>{};function C84($){return`liveness: no stream events for ${Math.round($/60000)}m`}function od0($){return $.runFenceToken!==null&&$.runFenceToken!==$.fenceToken}function P6$($){td0=$}function A6$(){if(!td0)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return td0}function T6$(){return A6$()}async function R6$($,Z,X){let G=A6$(),Q=G.getJetStream();if(!Q)throw Error("JetStream unavailable");let Y=(await G.messageParts.loadWindow($.runId,{limit:500})).messages.map(E90);return{chunkCount:0,attempts:1,outcome:await Z6$({chunkStream:z6$(await O6$({js:Q,runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs}),$.runId,_84,()=>{G.bumpProgress({runId:$.runId,orgId:Z}).catch(()=>{})}),persistence:await D6$({messageParts:G.messageParts,orgId:Z,runId:$.runId,requestMessageId:$.messageId,replaceFinal:!0}),originalMessages:Y,errorMessageId:zw($.runId,$.fenceToken),title:{threadId:$.runId,currentThreadTitle:X,persistTitle:async(K,W)=>{await G.persistTitle($.runId,Z,W),await G.onTitleUpdated({runId:$.runId,orgId:Z,title:W})}}})}}async function j6$($,Z,X){let G=await $.resolveRun(Z).catch(()=>null);return G!==null&&G.runFenceToken===X&&["completed","failed","requires_action"].includes(G.status)}async function I6$($,Z,X){let G=await v84($,Z);if("skip"in G)return;let Q=G.row.orgId,Y=G.row.createdBy??$.runId,J=G.row.title;try{let{outcome:K}=await X($,Q,J),W=K?.failed?"failed":K?.finishReason==null?"completed":L90(K.finishReason,K.finalParts);if(W==="failed"){let N=K?.finishReason?`harness reported an error: ${K.finishReason}`:"harness reported an error";if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,N,"harness"))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:N,kind:"harness"})}else if(W==="requires_action")await Z.markRunRequiresAction($.runId,Q),await Z.clearSynthesizedError($.runId,$.fenceToken);else{if(await Z.completeRunIfNotCompleted($.runId,Q))await Z.recordCompleted({runId:$.runId,orgId:Q,distinctId:Y,usage:K?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await Z.clearSynthesizedError($.runId,$.fenceToken)}await Z.purgeRun($.runId,$.fenceToken)}catch(K){if(K instanceof Qn){if(await j6$(Z,$.runId,$.fenceToken)){await Z.clearSynthesizedError($.runId,$.fenceToken),await Z.purgeRun($.runId,$.fenceToken);return}let U=`stream truncated before projection could replay it: ${K.message}`;if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,U,"projection"))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:U,kind:"projection"});await Z.purgeRun($.runId,$.fenceToken);return}let W=K instanceof w90;if(W&&await j6$(Z,$.runId,$.fenceToken)){await Z.purgeRun($.runId,$.fenceToken);return}let N=W?C84(K.idleTimeoutMs):K instanceof Error?K.message:String(K),H=W?"liveness":"projection";if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,N,H))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:N,kind:H});if(W)await Z.clearSynthesizedError($.runId,$.fenceToken);throw K}}async function v84($,Z){let X=await Z.resolveRun($.runId);if(!X)return{skip:"missing"};if(od0({status:X.status,runFenceToken:X.runFenceToken,fenceToken:$.fenceToken}))return{skip:"stale",row:X};if(X.version!==2)return{skip:"legacy-v1",row:X};return{row:X}}var td0=null,_84;var rd0=B(()=>{X6$();B6$();B90();L6$();E6$();pd0();_84=new nd0});function q6$($,Z){switch($.type){case"START":{let X={type:"RUN_STARTED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,runConfig:$.runConfig,podId:$.podId,messageId:$.messageId};if(Z?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:$.taskId,orgId:Z.orgId},X];return[X]}case"STEP_DONE":{if(Z?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:Z.status.stepCount+1}]}case"FINISH":{if(Z==null||Z.status.tag!=="running")return[];let{stepCount:X}=Z.status;if($.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];if($.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"error"}]}case"CANCEL":{if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"cancelled"}]}case"RESUME":{if(Z?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,podId:$.podId}]}case"FORCE_FAIL":{if($.reason==="ghost")return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z?.orgId??$.orgId,reason:$.reason,expectedFenceToken:$.expectedFenceToken??null}];if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:$.reason}]}}}function M6$($,Z,X=new Date){switch(Z.type){case"RUN_STARTED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"RUN_RESUMED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"STEP_COMPLETED":if($?.status.tag!=="running")return $;return{...$,status:{...$.status,stepCount:Z.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function k6$($,Z,X,G){let{storage:Q,sseHub:Y}=G,J=await Q.get($,Z);Y.emit(Z,c3($,X,{virtualMcpId:J?.virtual_mcp_id??void 0,createdBy:J?.created_by,triggerId:J?.trigger_id,title:J?.title,branch:J?.branch??null,createdAt:J?.created_at,updatedAt:J?.updated_at})),Y.emit(Z,F00($,X))}async function f84($,Z){let{storage:X,sseHub:G}=Z;switch($.type){case"RUN_STARTED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_config:$.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"in_progress",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at,messageId:$.messageId}));return}case"RUN_RESUMED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"in_progress",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at}));return}case"STEP_COMPLETED":G.emit($.orgId,gV0($.taskId,$.stepCount));return;case"RUN_COMPLETED":await k6$($.taskId,$.orgId,"completed",Z);return;case"RUN_REQUIRES_ACTION":await k6$($.taskId,$.orgId,"requires_action",Z);return;case"RUN_FAILED":{if($.reason==="ghost"){if(!await X.forceFailIfInProgress($.taskId,$.orgId,$.expectedFenceToken))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null})}else await X.update($.taskId,$.orgId,{status:"failed",run_config:null,run_started_at:null,...$.reason==="reaped"?{failure_reason:b84,failure_kind:"stall"}:{}});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"failed",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at})),G.emit($.orgId,F00($.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function S6$($,Z){for(let{event:X}of $)await f84(X,Z)}var b84="Run stalled \u2014 no progress within the idle timeout window";var V6$=B(()=>{U8()});function C6$($){return $.now-$.lastProgressAt>$.idleTimeoutMs}function _6$($){return Math.max($.persistedLastProgressAt??Number.NEGATIVE_INFINITY,$.currentRunStartedAt)}class sd0{deps;clock;states=new Map;reaperTimer=null;constructor($,Z=()=>new Date){this.deps=$;this.clock=Z;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((X)=>{console.error("[RunRegistry] Reaper sweep failed",X)})},x84)}async execute($){let Z=this.dispatch($);return await this.react(Z),Z}dispatch($){let Z=this.states.get($.taskId),X=q6$($,Z),G=[];for(let Q of X){let Y=this.states.get(Q.taskId);if(Q.type==="PREVIOUS_RUN_ABORTED"||Q.type==="RUN_FAILED"){if(Y?.status.tag==="running")Y.status.abortController.abort()}let J=M6$(Y,Q,this.clock());if(J===void 0)this.states.delete(Q.taskId);else this.states.set(Q.taskId,J);if(G.push({event:Q,state:J}),y84.has(Q.type))v6$().add(1,{"org.id":Q.orgId});else if(g84.has(Q.type)&&Y?.status.tag==="running")v6$().add(-1,{"org.id":Q.orgId})}return G}react($){return S6$($,this.deps)}getAbortSignal($){let Z=this.states.get($);if(Z?.status.tag==="running")return Z.status.abortController.signal;return null}isRunning($){return this.states.get($)?.status.tag==="running"}async stopAll(){for(let[,$]of this.states)if($.status.tag==="running")$.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let $=this.clock().getTime(),Z=[...this.states].filter(([,X])=>X.status.tag==="running");for(let[X,G]of Z){if(this.states.get(X)?.status.tag!=="running")continue;let Y;try{let K=await this.deps.storage.getProgress(X,G.orgId);Y=_6$({persistedLastProgressAt:K?.lastProgressAt??null,currentRunStartedAt:G.status.startedAt.getTime()})}catch(K){console.warn(`[RunRegistry] Reaper progress read failed for ${X}; skipping`,K);continue}if(!C6$({lastProgressAt:Y,now:$,idleTimeoutMs:z90}))continue;let J=await this.deps.storage.get(X,G.orgId).catch(()=>null);if(J&&J.status!=="in_progress"){let K=this.states.get(X);if(K?.status.tag==="running")K.status.abortController.abort();this.states.delete(X);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${X} (idle > ${z90/60000}m) ...`),h84().add(1,{"org.id":G.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:X,reason:"reaped"}).catch((K)=>{console.error("[RunRegistry] Reaper execute failed",K)})}}}var x84=300000,ad0,z90,y84,g84,b6$=($)=>{let Z;return()=>Z??=$()},v6$,h84;var ed0=B(()=>{V6$();X5();ad0=Number(process.env.RUN_IDLE_TIMEOUT_MS),z90=Number.isFinite(ad0)&&ad0>0?ad0:600000,y84=new Set(["RUN_STARTED","RUN_RESUMED"]),g84=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),v6$=b6$(()=>Q8.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),h84=b6$(()=>Q8.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function f6$($){let{runId:Z}=$,X=T6$(),G=await X.resolveRun(Z),Q=$.fenceToken??G?.runFenceToken;if(!G||G.version!==2||Q==null)return;if(od0({status:G.status,runFenceToken:G.runFenceToken,fenceToken:Q}))return;if(!X.getJetStream())throw Error("JetStream unavailable for consume step");await I6$({runId:Z,fenceToken:Q,messageId:$.messageId,idleTimeoutMs:$.idleTimeoutMs??z90},X,R6$)}var x6$=B(()=>{rd0();ed0()});class Yn{intervalMs;emitFn;sleepFn;controller=null;stopped=!1;constructor($){this.intervalMs=$.intervalMs??u84,this.emitFn=$.emit,this.sleepFn=$.sleepFn??V8}arm(){if(this.stopped)return;this.controller?.abort();let $=new AbortController;this.controller=$,this.wait($.signal)}async wait($){try{await this.sleepFn(this.intervalMs,{signal:$})}catch{return}if(this.stopped||$.aborted)return;try{await this.emitFn()}catch{this.stop();return}if(!this.stopped&&!$.aborted)this.arm()}stop(){if(this.stopped)return;this.stopped=!0,this.controller?.abort(),this.controller=null}}function y6$($=Date.now){return{type:"data-liveness",data:{t:$()},transient:!0}}var u84=30000;var $m0=B(()=>{C5()});function Zm0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,G=[];return{async acquire(){if(X<Z)X++;else await new Promise((Y)=>G.push(Y));let Q=!1;return()=>{if(Q)return;Q=!0;let Y=G.shift();if(Y)Y();else X--}},get active(){return X},get pending(){return G.length}}}var c84,g6$=()=>c84.acquire();var Xm0=B(()=>{k$();c84=Zm0(m0().decopilotMaxConcurrentSubagents)});var j90,jw,h6$=()=>({active:jw.active,pending:jw.pending,max:j90}),u6$=($)=>{if(jw.active>=j90)console.log("[hostedHarness] run parked at concurrency cap",{active:jw.active,pending:jw.pending,max:j90}),$?.();return jw.acquire()};var Gm0=B(()=>{Xm0();k$();X5();j90=m0().decopilotMaxConcurrentHostedRuns,jw=Zm0(j90);Q8.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(jw.active));Q8.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(jw.pending))});function c6$($){let Z=$[1],X=$[2],G=Number($[3]);return{owner:Z,repo:X,number:G,url:`https://github.com/${Z}/${X}/pull/${G}`}}function P90($){let Z=$.length>200000?$.slice(0,200000):$,X=l84.exec(Z);if(X&&Number(X[3])>0)return c6$(X);let G=d84.exec(Z);if(G&&Number(G[3])>0)return c6$(G);return null}function l6$($){if($==null)return null;if(typeof $==="string")return P90($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?P90(Z):null}var l84,d84;var Qm0=B(()=>{l84=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,d84=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});class i6${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=m6$)return console.warn(`[SSEHub] Total connection limit reached (${m6$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=d6$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${d6$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let G of X.values()){if(G.typePatterns&&!m84(Z.type,G.typePatterns))continue;try{G.push(Z)}catch{this.remove($,G.id)}}}}function m84($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let G=X.slice(0,-1);if($.startsWith(G))return!0}}return!1}var d6$=50,m6$=500,i5;var A90=B(()=>{X5();i5=new i6$;Q8.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(i5.count))});function T9($,Z){i5.emit($,{id:crypto.randomUUID(),type:S0$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function p6$($,Z){i5.emit($,{id:crypto.randomUUID(),type:V0$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function i84($,Z){return $?[$]:Z}async function t6$($,Z,X){let G=$.metadata?.runMetadata?.taskBoardItemId,Q=!G&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return i84(G,Q)}async function Ox($,Z,X){let G=$.organization?.id;if(!G)return;try{for(let Q of await t6$($,G,X)){let Y=await $.storage.taskBoard.getById(Q,G);if(!Y||n6$[Z]<=n6$[Y.status])continue;let J=await $.storage.taskBoard.update(Q,G,{status:Z},$.auth?.user?.id??Y.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:Y.status,to:Z}}).catch((K)=>console.error("[task-board] activity log write failed",K)),T9(G,J)}}catch(Q){console.error("[task-board] run transition failed",Q)}}async function T90($,Z,X,G){let Q=$.organization?.id;if(!Q)return;try{let Y=l6$(Z);if(!Y)return;let J=await t6$($,Q,G);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,organizationId:Q,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo,connectionId:X??null})}catch(Y){console.error("[task-board] PR capture failed",Y)}}async function Jn($,Z,X){try{let G=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let Q of G)T9(X,Q)}catch(G){console.error("[task-board] thread-finish transition failed",G)}}async function o6$($,Z){let X=$.organization?.id;if(!X)return;try{let G=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Q of G)T9(X,Q)}catch(G){console.error("[task-board] thread-run reopen failed",G)}}function r6$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function a6$($){if(n84.test($))return!0;return p84.test($)&&t84.test($)}var n6$,n84,p84,t84;var PG=B(()=>{Qm0();A90();mN();n6$={triage:0,todo:1,in_progress:2,in_review:3,done:4};n84=/\bgh\s+pr\s+create\b/,p84=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,t84=/(?:-X|--request)\s+POST/});import{DBOS as kL}from"@dbos-inc/dbos-sdk";function Km0($){Ym0=$}function e6$(){if(!Ym0)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return Ym0}async function o84($,Z){let X=e6$(),{request:G}=$,Q=Z??await X.studioContextFactory(G.organizationId,G.userId);if(!Q)throw Error("user membership lost mid-dispatch");if(G.runMetadata)Q.metadata.runMetadata=G.runMetadata;let Y=new AbortController,J=!1,K=new Yn({emit:()=>s6$(X,$)}),W=await u6$(()=>{J=!0,s6$(X,$),K.arm()}).finally(()=>K.stop());try{if(J&&await r84($))throw Error("run cancelled while queued for a free runner");if(Ox(Q,"in_progress",$.threadId),!G.runMetadata?.taskBoardItemId)o6$(Q,$.threadId);await X.dispatchRunFn({...G,abortSignal:Y.signal},Q,X.deps)}finally{W()}}async function r84($){try{return(await kL.getWorkflowStatus(Wm0($.runId,$.fenceToken)))?.status==="CANCELLED"}catch(Z){return console.error(`[hostedHarness] could not read child status for run=${$.runId} fence=${$.fenceToken}`,Z),!1}}function a84($,Z,X,G=1){let Q=X instanceof Error?X.message:String(X);return{messageId:zw($,Z),errorChunk:{type:"error",errorText:Q},seq:G,finalSeq:G}}function s84($){if(!($ instanceof Error))return;let Z=$.lastAckSeq;return typeof Z==="number"?Z+1:void 0}async function e84($,Z){let X=e6$(),{streamBuffer:G}=X.deps,{messageId:Q,errorChunk:Y,seq:J,finalSeq:K}=a84($.runId,$.fenceToken,Z,s84(Z));if(!G){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${$.runId} fence=${$.fenceToken} messageId=${Q}`);return}if(!await G.publishRawChunk($.runId,Y,{fenceToken:$.fenceToken,seq:J})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${$.runId} fence=${$.fenceToken} messageId=${Q}`);return}await G.publishDone($.runId,$.fenceToken,K)}async function $44($){try{await kL.runStep(()=>o84($),{name:"runHostedHarness",retriesAllowed:!1})}catch(Z){await kL.runStep(()=>e84($,Z),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((X)=>{console.error(`[hostedHarness] could not publish terminal error for run=${$.runId} fence=${$.fenceToken}`,X)})}}function Wm0($,Z){return`decopilot-hosted:${$}:${Z}`}async function $5$($){return{workflowID:(await kL.startWorkflow(Z44,{workflowID:Wm0($.runId,$.fenceToken),queueName:OW,enqueueOptions:{queuePartitionKey:$.threadId}})($)).workflowID}}async function Nm0($,Z){await kL.cancelWorkflow(Wm0($,Z))}var Jm0=1,Ym0=null,s6$=($,Z)=>eJ($.deps.streamBuffer,Z.runId,"waiting-capacity"),Z44;var Hm0=B(()=>{$m0();Yx();Gm0();PG();Z44=kL.registerWorkflow($44,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Bx}from"@dbos-inc/dbos-sdk";function wm0($){if($!=="decopilot")throw Error(`hosted dispatch requires an explicit Decopilot harness; got ${JSON.stringify($)}`)}function Om0($){Fm0=$}function X44(){if(!Fm0)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return Fm0}function G44($,Z=g50){let X=$.runFenceToken;if(X)return{runFenceToken:X,claimedRequest:$,shouldPersistFence:!1};let G=Z();return{runFenceToken:G,claimedRequest:{...$,runFenceToken:G},shouldPersistFence:!0}}async function Q44($){let Z=X44(),{request:X}=$,G=X.taskId??$.threadId;if(b0$({harnessId:X.harnessId}))await eJ(Z.deps.streamBuffer,G,"starting-run");let Q=await Z.studioContextFactory(X.organizationId,X.userId);if(!Q)throw Error("user membership lost mid-dispatch");wm0(X.harnessId);let Y=X.taskId??$.threadId,{runFenceToken:J,claimedRequest:K,shouldPersistFence:W}=G44(X);if(W)await Q.storage.threads.setRunFence(Y,J);return{runFenceToken:J,hostedEnqueue:{runId:G,fenceToken:J,threadId:$.threadId,request:K}}}async function Y44($){if($.source!=="user-message")return;let{request:Z}=$;f1.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function J44($,Z){if($.source!=="user-message")return;let{request:X}=$;f1.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:X.taskId??$.threadId,agent_id:X.agent,model_id:X.models.thinking.id,mode:X.mode,error_category:"setup",error_message:Z}})}async function R90($){wm0($.request.harnessId),await Bx.runStep(()=>Y44($),{name:"trackMessageStarted"});let Z;try{Z=await Bx.runStep(()=>Q44($),{name:"dispatchRunAndWait",retriesAllowed:!0}),await $5$(Z.hostedEnqueue)}catch(Q){let Y=Q instanceof Error?Q.message:String(Q);throw await Bx.runStep(()=>J44($,Y),{name:"trackMessageFailed"}),Q}let X=$.request.taskId??$.threadId,G="messages"in $.request?void 0:$.request.messageId;return await Bx.runStep(()=>f6$({runId:X,fenceToken:Z.runFenceToken,messageId:G}),{name:"consumeRunProjection"}),{taskId:$.request.taskId??$.threadId}}async function K44($){return R90($)}async function oN($,Z){return wm0($.request.harnessId),{workflowID:(await Bx.startWorkflow(W44,{queueName:iY,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}var Um0=1,Fm0=null,W44;var Z5$=B(()=>{O6();Yx();x6$();Hm0();W44=Bx.registerWorkflow(K44,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var SL=B(()=>{Z5$();Hm0()});async function I90($,Z,X){let G=Z.organizationId,Q=Z.assignedBy??Z.createdBy,Y=await l7($,"smart"),J=qB(G),K=await $.storage.threads.create({organization_id:G,title:X.title,status:"in_progress",virtual_mcp_id:J,message_storage_version:2,harness_id:"decopilot",sandbox_provider_kind:"agent-sandbox",created_by:Q});await $.storage.taskBoard.linkThread(Z.id,K.id,G);let W={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:X.prompt}]};return await new i7({storage:$.storage.threads.messageParts(),orgId:G,threadId:K.id,runId:K.id}).emitRequestMessage(W),await oN({threadId:K.id,source:"background-tool",request:{messages:[W],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:J},temperature:X.temperature,toolApprovalLevel:"auto",mode:"default",organizationId:G,userId:Q,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",taskId:K.id,runMetadata:{taskBoardItemId:Z.id}}}),{threadId:K.id}}var Bm0=B(()=>{Nw();SL();Ew();U8()});async function Dx($,Z){if(Z.assigneeId!==sZ)return;await Dm0($,Z).catch((X)=>{console.error("[task-board] Super Agent enqueue failed",X)})}async function Dm0($,Z,X){let G=["You've been assigned this task. Complete it.","","You are running AUTONOMOUSLY \u2014 no human is watching this run, so drive it "+"to completion on your own. Use `user_ask` ONLY for a genuine, unresolvable blocker a human must clear (a missing credential/secret, or "+"a decision so ambiguous you truly cannot proceed) \u2014 that should be rare. "+"Do not ask for confirmation of a reasonable choice; make it and move on.","",`Title: ${Z.title}`,Z.description?`
|
|
1190
|
+
`)}})}},Id0={"content-type":"text/event-stream","cache-control":"no-cache",connection:"keep-alive","x-vercel-ai-ui-message-stream":"v1","x-accel-buffering":"no"};ni=s0.record(s0.string(),AL.optional()),qd0=w0(()=>s(s0.union([s0.strictObject({type:s0.literal("text-start"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("text-delta"),id:s0.string(),delta:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("text-end"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("error"),errorText:s0.string()}),s0.strictObject({type:s0.literal("tool-input-start"),toolCallId:s0.string(),toolName:s0.string(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-input-delta"),toolCallId:s0.string(),inputTextDelta:s0.string()}),s0.strictObject({type:s0.literal("tool-input-available"),toolCallId:s0.string(),toolName:s0.string(),input:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-input-error"),toolCallId:s0.string(),toolName:s0.string(),input:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),errorText:s0.string(),title:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-approval-request"),approvalId:s0.string(),toolCallId:s0.string(),signature:s0.string().optional()}),s0.strictObject({type:s0.literal("tool-output-available"),toolCallId:s0.string(),output:s0.unknown(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional(),preliminary:s0.boolean().optional()}),s0.strictObject({type:s0.literal("tool-output-error"),toolCallId:s0.string(),errorText:s0.string(),providerExecuted:s0.boolean().optional(),providerMetadata:K$.optional(),toolMetadata:ni.optional(),dynamic:s0.boolean().optional()}),s0.strictObject({type:s0.literal("tool-output-denied"),toolCallId:s0.string()}),s0.strictObject({type:s0.literal("reasoning-start"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("reasoning-delta"),id:s0.string(),delta:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("reasoning-end"),id:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("source-url"),sourceId:s0.string(),url:s0.string(),title:s0.string().optional(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("source-document"),sourceId:s0.string(),mediaType:s0.string(),title:s0.string(),filename:s0.string().optional(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.literal("file"),url:s0.string(),mediaType:s0.string(),providerMetadata:K$.optional()}),s0.strictObject({type:s0.custom(($)=>typeof $==="string"&&$.startsWith("data-"),{message:'Type must start with "data-"'}),id:s0.string().optional(),data:s0.unknown(),transient:s0.boolean().optional()}),s0.strictObject({type:s0.literal("start-step")}),s0.strictObject({type:s0.literal("finish-step")}),s0.strictObject({type:s0.literal("start"),messageId:s0.string().optional(),messageMetadata:s0.unknown().optional()}),s0.strictObject({type:s0.literal("finish"),finishReason:s0.enum(["stop","length","content-filter","tool-calls","error","other"]).optional(),messageMetadata:s0.unknown().optional()}),s0.strictObject({type:s0.literal("abort"),reason:s0.string().optional()}),s0.strictObject({type:s0.literal("message-metadata"),messageMetadata:s0.unknown()})])));o14=kY;r14=oi;s14=gJ({prefix:"aitxt",size:24}),e14={file:!0,source:!0,"text-start":!0,"text-end":!0,"text-delta":!0,"reasoning-start":!0,"reasoning-end":!0,"reasoning-delta":!0,"tool-input-start":!0,"tool-input-end":!0,"tool-input-delta":!0,"tool-approval-request":!0,"tool-call":!0,"tool-result":!0,"tool-error":!0,"stream-start":!1,"response-metadata":!1,finish:!1,error:!1,raw:!1};EG=K0.record(K0.string(),AL.optional()),Q$4=w0(()=>s(K0.array(K0.object({id:K0.string(),role:K0.enum(["system","user","assistant"]),metadata:K0.unknown().optional(),parts:K0.array(K0.union([K0.object({type:K0.literal("text"),text:K0.string(),state:K0.enum(["streaming","done"]).optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("reasoning"),text:K0.string(),state:K0.enum(["streaming","done"]).optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("source-url"),sourceId:K0.string(),url:K0.string(),title:K0.string().optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("source-document"),sourceId:K0.string(),mediaType:K0.string(),title:K0.string(),filename:K0.string().optional(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("file"),mediaType:K0.string(),filename:K0.string().optional(),url:K0.string(),providerMetadata:K$.optional()}),K0.object({type:K0.literal("step-start")}),K0.object({type:K0.string().startsWith("data-"),id:K0.string().optional(),data:K0.unknown()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-streaming"),input:K0.unknown().optional(),providerExecuted:K0.boolean().optional(),callProviderMetadata:K$.optional(),output:K0.never().optional(),errorText:K0.never().optional(),approval:K0.never().optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-available"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.never().optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-requested"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.never().optional(),reason:K0.never().optional(),signature:K0.string().optional()})}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-responded"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.boolean(),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-available"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.unknown(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),preliminary:K0.boolean().optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-error"),input:K0.unknown().optional(),rawInput:K0.unknown().optional(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.string(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.literal("dynamic-tool"),toolName:K0.string(),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-denied"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!1),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-streaming"),providerExecuted:K0.boolean().optional(),callProviderMetadata:K$.optional(),input:K0.unknown().optional(),output:K0.never().optional(),errorText:K0.never().optional(),approval:K0.never().optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("input-available"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.never().optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-requested"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.never().optional(),reason:K0.never().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("approval-responded"),input:K0.unknown(),providerExecuted:K0.boolean().optional(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.boolean(),reason:K0.string().optional(),signature:K0.string().optional()})}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-available"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.unknown(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),preliminary:K0.boolean().optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-error"),providerExecuted:K0.boolean().optional(),input:K0.unknown().optional(),rawInput:K0.unknown().optional(),output:K0.never().optional(),errorText:K0.string(),callProviderMetadata:K$.optional(),resultProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!0),reason:K0.string().optional(),signature:K0.string().optional()}).optional()}),K0.object({type:K0.string().startsWith("tool-"),toolCallId:K0.string(),toolMetadata:EG.optional(),state:K0.literal("output-denied"),providerExecuted:K0.boolean().optional(),input:K0.unknown(),output:K0.never().optional(),errorText:K0.never().optional(),callProviderMetadata:K$.optional(),approval:K0.object({id:K0.string(),approved:K0.literal(!1),reason:K0.string().optional(),signature:K0.string().optional()})})])).nonempty("Message must contain at least one part")})).nonempty("Messages array must not be empty")));w$4=K90,O$4={type:"no-schema",jsonSchema:async()=>{return},async validatePartialResult({value:$,textDelta:Z}){return{success:!0,value:{partial:$,textDelta:Z}}},async validateFinalResult($,Z){return $===void 0?{success:!1,error:new jG({message:"No object generated: response did not match schema.",text:Z.text,response:Z.response,usage:Z.usage,finishReason:Z.finishReason})}:{success:!0,value:$}},createElementStream(){throw new A4({functionality:"element streams in no-schema mode"})}};E$4=gJ({prefix:"aiobj",size:24});T$4=gJ({prefix:"aiobj",size:24});q$4=class extends Fw{constructor({data:$,mediaType:Z}){super({data:$,mediaType:Z});let X="mp3";if(Z){let G=Z.split("/");if(G.length===2){if(Z!=="audio/mpeg")X=G[1]}}if(!X)throw Error("Audio format must be provided or determinable from media type");this.format=X}};S$4={word:/\S+\s+/m,line:/\n+/m};C$4=_d0();o$4=u4$,l4$=`vercel.ai.error.${c4$}`,r$4=Symbol.for(l4$),m4$=class extends E5{constructor({modelId:$,modelType:Z,providerId:X,availableProviders:G,message:Q=`No such provider: ${X} (available providers: ${G.join()})`}){super({errorName:c4$,modelId:$,modelType:Z,message:Q});this[d4$]=!0,this.providerId=X,this.availableProviders=G}static isInstance($){return Q1.hasMarker($,l4$)}};d4$=r$4;a$4=i4$;$84=_d0();p4$=class extends fd0{constructor($={}){super($)}processResponseStream($){return qN({stream:$,schema:qd0}).pipeThrough(new TransformStream({async transform(Z,X){if(!Z.success)throw Z.error;X.enqueue(Z.value)}}))}};F84=class extends fd0{constructor($={}){super($)}processResponseStream($){return H84({stream:$.pipeThrough(new TextDecoderStream)})}}});function t4$($){return{type:"data-title-result",data:{title:$},transient:!0}}function yd0($){return $.type==="data-title-input"}function gd0($){return $.type==="data-title-result"}async function*o4$($,Z){let X=Z.persistTitle??((Q,Y)=>Z.ctx.storage.threads.update(Q,{title:Y}).then(()=>{})),G=!1;for await(let Q of $){if(yd0(Q)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");continue}if(gd0(Q)){if(G){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");continue}if(G=!0,Z.currentThreadTitle!==TN)continue;let Y=Q.data.title;if(!Y)continue;await X(Z.threadId,Y).catch((J)=>{console.error("[title-interceptor] persist failed for thread",Z.threadId,J)});try{await Z.onTitleUpdated?.(Y)}catch(J){console.error("[title-interceptor] onTitleUpdated callback failed",J)}if(!Z.isStreamFinished())try{Z.writer.write({type:"data-thread-title",data:{title:Y},transient:!0})}catch(J){console.error("[title-interceptor] writer.write failed",J)}continue}yield Q}}function r4$($,Z){let X=Z.persistTitle??((Q,Y)=>Z.ctx.storage.threads.update(Q,{title:Y}).then(()=>{})),G=!1;return $.pipeThrough(new TransformStream({async transform(Q,Y){if(yd0(Q)){console.warn("[title-interceptor] harness emitted deprecated data-title-input chunk; ignoring");return}if(gd0(Q)){if(G){console.warn("[title-interceptor] harness emitted multiple data-title-result chunks; ignoring extra");return}if(G=!0,Z.currentThreadTitle!==TN)return;let J=Q.data.title;if(!J)return;await X(Z.threadId,J).catch((K)=>{console.error("[title-interceptor] persist failed for thread",Z.threadId,K)});try{await Z.onTitleUpdated?.(J)}catch(K){console.error("[title-interceptor] onTitleUpdated callback failed",K)}if(!Z.isStreamFinished())try{Z.writer.write({type:"data-thread-title",data:{title:J},transient:!0})}catch(K){console.error("[title-interceptor] writer.write failed",K)}return}Y.enqueue(Q)}}))}var a4$=B(()=>{CU()});function U84($){let Z=$[Symbol.asyncIterator]();return new ReadableStream({async pull(X){try{let{value:G,done:Q}=await Z.next();if(Q)X.close();else X.enqueue(G)}catch(G){X.error(G)}},async cancel(X){await Z.return?.(X)}})}function w84($,Z){let X=$.getReader(),G=!1,Q=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Y){try{let{done:J,value:K}=await X.read();if(J)Q(),Y.close();else Y.enqueue(K)}catch(J){Z(),Q(),Y.error(J)}},async cancel(Y){await X.cancel(Y),Q()}})}function O84($){let Z=$.metadata?.usage;if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let X=Z,G=(Q)=>typeof Q==="number"?Q:0;return{...X,inputTokens:G(X.inputTokens),outputTokens:G(X.outputTokens),totalTokens:G(X.totalTokens)}}function W90($){let Z=[],X=!1,G=!1,Q=!1,Y=!0,J=$.errorMessageId??crypto.randomUUID(),K,W=new Promise((z)=>{K=z});if(!$.chunks&&!$.chunkStream)throw Error("consumeHarnessStream requires chunks or chunkStream");let N=$.chunks?async function*(){try{yield*$.chunks}catch(z){throw Q=!0,z}}():null,H=$.chunkStream?w84($.chunkStream,()=>{Q=!0}):null,F=$.originalMessages?.at(-1),U=!$.generateMessageId&&F?.role==="assistant"?F.id:void 0,w=new Map,O=null,D=(z)=>{if($.generateMessageId){let j=w.get(z);if(j===void 0)j=$.generateMessageId(),w.set(z,j);return j}if(O===null)O=z;return U&&z===O?U:z},L=(z)=>({...z,id:D(z.id)});return{uiStream:Vd0({originalMessages:$.originalMessages,execute:({writer:z})=>{let j={ctx:null,isStreamFinished:()=>X,currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,writer:z,onTitleUpdated:$.title.onTitleUpdated,persistTitle:$.title.persistTitle};if(H){z.merge(r4$(H,j));return}let A=o4$(N,j);z.merge(U84(A))},onStepFinish:({responseMessage:z})=>{let j=L(z);Z.push($.persistence.emitStepParts(j).catch((A)=>{Y=!1,console.error("[consume-harness-stream] emitStepParts failed",A)})),Z.push(Promise.resolve($.hooks?.onStep?.(j)).catch((A)=>console.error("[consume-harness-stream] onStep hook failed",A)))},onFinish:async({responseMessage:z,finishReason:j})=>{X=!0,await Promise.allSettled(Z);let A=L(z);if(!G){if(j)A.metadata={...A.metadata??{},finishReason:j};await $.persistence.emitFinal(A).catch((q)=>{Y=!1,console.error("[consume-harness-stream] emitFinal failed",q)})}let P=O84(A);if(P)await Promise.resolve($.hooks?.onUsage?.(P)).catch((q)=>console.error("[consume-harness-stream] onUsage hook failed",q));if(!Q)await Promise.resolve($.hooks?.onFinish?.(A,j,{persistenceOk:Y})).catch((q)=>console.error("[consume-harness-stream] onFinish hook failed",q));K()},onError:(z)=>{X=!0;let j=z instanceof Error?z.message:String(z);if(!G)G=!0,Z.push($.persistence.emitError(J,j).catch((A)=>{Y=!1,console.error("[consume-harness-stream] emitError failed",A)})),Z.push(Promise.resolve($.hooks?.onError?.(z)).catch((A)=>console.error("[consume-harness-stream] onError hook failed",A)));return $.sanitizeErrorText?$.sanitizeErrorText(z):j}}),whenComplete:W,isStreamFinished:()=>X}}var hd0=B(()=>{k4();a4$()});function B84($){return{type:"data-user-message",data:$}}function s4$($){if(!$||typeof $!=="object")return!1;return $.type==="data-user-message"}async function e4$($,Z,X){if(!$)return;try{await $.publishRawChunk(Z,B84(X))}catch{}}function $6$($){return f0$($)||s4$($)}async function D84($){let Z=$.getReader();try{while(!0){let{done:X}=await Z.read();if(X)break}}finally{Z.releaseLock()}}function L84($,Z){let X=$.getReader(),G=!1,Q=()=>{if(G)return;G=!0,X.releaseLock()};return new ReadableStream({async pull(Y){try{let{done:J,value:K}=await X.read();if(J)Q(),Y.close();else Y.enqueue(K)}catch(J){Z(J),Q(),Y.error(J)}},async cancel(Y){await X.cancel(Y),Q()}})}async function Z6$($){if(!$.chunks&&!$.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let Z=null,X=!1,G=void 0,Q={inputTokens:0,outputTokens:0,totalTokens:0},Y=[],J=null,K=(O)=>{if(J===null)J=O;throw O},W=$.chunks?async function*(){try{for await(let O of $.chunks){if($6$(O))continue;yield O}}catch(O){throw Z=O,O}}():void 0,N=$.chunkStream?L84($.chunkStream,(O)=>{Z=O}).pipeThrough(new TransformStream({transform(O,D){if(!$6$(O))D.enqueue(O)}})):void 0,H={emitStepParts:(O)=>$.persistence.emitStepParts(O).catch(K),emitFinal:(O)=>$.persistence.emitFinal(O).catch(K),emitError:(O,D)=>$.persistence.emitError(O,D).catch(K)},{uiStream:F,whenComplete:U}=W90({chunks:W,chunkStream:N,originalMessages:$.originalMessages??[],title:$.title?{currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,persistTitle:$.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:H,sanitizeErrorText:$.sanitizeErrorText,errorMessageId:$.errorMessageId,generateMessageId:$.generateMessageId,hooks:{onUsage:(O)=>{Q={inputTokens:O.inputTokens,outputTokens:O.outputTokens,totalTokens:O.totalTokens}},onError:()=>{X=!0},onFinish:(O,D)=>{G=D,Y=Array.isArray(O.parts)?O.parts.filter((L)=>L!=null&&typeof L==="object"&&("type"in L)):[]}}});if(await D84(F).catch(()=>{}),await U,J!==null)throw J;if(Z!==null)throw Z;return{failed:X&&G===void 0,finishReason:G,usage:Q,finalParts:Y}}var X6$=B(()=>{hd0();Yx()});var Gn=786432;function z84($){if(/[.*>\s]/.test($))throw Error("Invalid NATS subject token")}function Lw($){return z84($),`${N90}.${$}`}function G6$($){let Z=`${$.runId}:${$.fenceToken}:${$.seq}`;return $.fragmentIndex===void 0?Z:`${Z}:frag:${$.fragmentIndex}`}function j84($){return`${$.runId}:${$.fenceToken}:done:${$.finalSeq}`}function Q6$($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>0?Z:null}function P84($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>=0?Z:null}function A84($){if(!$)return null;let Z=$.split(":"),[X,G,Q,Y,J]=Z;if(!X||!G||!Q)return null;if(Q==="done"){let W=Q6$(Y);return Z.length===4&&W!==null?{kind:"done",runId:X,fenceToken:G,finalSeq:W}:null}if(Q==="ckpt")return null;let K=Q6$(Q);if(K===null)return null;if(Z.length===3)return{kind:"chunk",runId:X,fenceToken:G,seq:K,fragmentIndex:null};if(Z.length===5&&Y==="frag"){let W=P84(J);return W===null?null:{kind:"chunk",runId:X,fenceToken:G,seq:K,fragmentIndex:W}}return null}function cd0($,Z){let X=Lw(Z.runId),G=ud0.encode(JSON.stringify({p:$}));if(G.length>E84)return[];if(G.length<=Gn)return[{subject:X,data:G,msgId:Z.dedup?G6$({runId:Z.runId,...Z.dedup}):void 0}];let Q=Math.ceil(G.length/Gn),Y=[];for(let J=0;J<Q;J++)Y.push({subject:X,data:G.slice(J*Gn,(J+1)*Gn),headers:{[Y6$]:String(J),[J6$]:String(Q)},msgId:Z.dedup?G6$({runId:Z.runId,...Z.dedup,fragmentIndex:J}):void 0});return Y}function K6$($){return{subject:Lw($.runId),data:ud0.encode(JSON.stringify({done:!0,finalSeq:$.finalSeq})),msgId:j84($)}}function W6$($){return{subject:Lw($),data:ud0.encode(JSON.stringify({done:!0}))}}function T84($){let Z=$.reduce((Q,Y)=>Q+(Y?.length??0),0),X=new Uint8Array(Z),G=0;for(let Q of $){if(!Q)continue;X.set(Q,G),G+=Q.length}return X}function H90(){let $=null;return new TransformStream({transform(Z,X){let G=Z.headers?.get(J6$);if(!G){X.enqueue(Z);return}let Q=Number(G),Y=Number(Z.headers?.get(Y6$)??"0");if(Y===0)$={total:Q,received:0,parts:Array(Q)};else if(!$||$.total!==Q)return;if(!$.parts[Y])$.received++;if($.parts[Y]=Z.data,$.received<$.total)return;let J=T84($.parts);$=null,X.enqueue({subject:Z.subject,data:J,headers:Z.headers})}})}function R84($){return typeof $==="number"&&Number.isInteger($)&&$>0}function q84($){let Z=A84($.headers?.get("Nats-Msg-Id")||void 0),X;try{X=JSON.parse(I84.decode($.data))}catch{return null}if(!X||typeof X!=="object")return null;let G=X;if(G.done===!0)return{kind:"done",runId:Z?.kind==="done"?Z.runId:null,fenceToken:Z?.kind==="done"?Z.fenceToken:null,envelopeFinalSeq:R84(G.finalSeq)?G.finalSeq:null,msgIdFinalSeq:Z?.kind==="done"?Z.finalSeq:null};if("p"in G)return{kind:"chunk",seq:Z?.kind==="chunk"?Z.seq:null,runId:Z?.kind==="chunk"?Z.runId:null,fenceToken:Z?.kind==="chunk"?Z.fenceToken:null,chunk:G.p};return null}function F90(){return new TransformStream({transform($,Z){let X=q84($);if(X)Z.enqueue(X)}})}var N90="decopilot.stream",Y6$="Dp-Frag-Idx",J6$="Dp-Frag-Total",E84=33554432,ud0,I84;var N6$=B(()=>{ud0=new TextEncoder;I84=new TextDecoder});var U90=B(()=>{N6$()});var tN="DECOPILOT_STREAMS";var ld0=B(()=>{U90()});function H6$($,Z){return new TransformStream({transform(X,G){if(X.runId!==$||X.fenceToken!==Z)return;G.enqueue(X)}})}function F6$(){let $=1;return new TransformStream({transform(Z,X){if(Z.kind==="done"){X.enqueue(Z);return}if(Z.seq===null){X.error(Error("projector chunk missing seq"));return}if(Z.seq<$)return;if(Z.seq>$){X.error(new Qn($,Z.seq));return}$++,X.enqueue(Z)}})}function U6$($){let Z=$.getReader(),X=!1,G=0,Q=()=>{if(X)return;X=!0,Z.releaseLock()};return new ReadableStream({async pull(Y){for(;;){let{done:J,value:K}=await Z.read();if(J){await Z.cancel(),Q(),Y.error(Error("reader stopped before done"));return}let W=K;if(W.kind==="done"){if(!(W.envelopeFinalSeq!=null&&W.envelopeFinalSeq===W.msgIdFinalSeq))continue;if(W.envelopeFinalSeq!==G){await Z.cancel(),Q(),Y.error(new Qn(G+1,null));return}await Z.cancel(),Q(),Y.close();return}G=W.seq??G,Y.enqueue(W.chunk);return}},async cancel(Y){await Z.cancel(Y),Q()}})}function M84($){if(Symbol.asyncIterator in $)return $[Symbol.asyncIterator]();let Z=$[Symbol.iterator]();return{next:async()=>Z.next(),return:async(X)=>Z.return?Z.return(X):{done:!0,value:X}}}function O90($){let Z=M84($.messages),X=$.idleTimeoutMs,G=!1,Q=(Y)=>{if(G)return;G=!0,Z.return?.(Y).catch(()=>{}),$.onCancel?.()};return new ReadableStream({async pull(Y){if(X===void 0){let{done:H,value:F}=await Z.next();if(H){Y.close();return}Y.enqueue(F);return}let J=new AbortController,K=Z.next().then((H)=>{return J.abort(),H}),W=V8(X,{signal:J.signal}).then(()=>"idle").catch(()=>"cancelled"),N=await Promise.race([K,W]);if(N==="idle"){Y.error(new w90(X));return}if(N==="cancelled")return;if(N.done){Y.close();return}Y.enqueue(N.value)},async cancel(Y){Q(Y)}})}var w90,Qn;var B90=B(()=>{C5();w90=class w90 extends Error{idleTimeoutMs;constructor($){super("producer produced no output before timeout");this.idleTimeoutMs=$;this.name="StreamIdleTimeoutError"}};Qn=class Qn extends Error{expectedSeq;gotSeq;constructor($,Z){super(Z===null?`missing seq ${$} (stream ended at the fenced done)`:`missing seq ${$} (next delivered is ${Z})`);this.expectedSeq=$;this.gotSeq=Z;this.name="StreamGapError"}}});function k84($){let X=O90({messages:$.messages,idleTimeoutMs:$.idleTimeoutMs,onCancel:$.onDone}).pipeThrough(H90()).pipeThrough(F90()).pipeThrough(H6$($.runId,$.fenceToken)).pipeThrough(F6$());return U6$(X)}async function O6$($){let X=await(await $.js.consumers.get(tN,{filter_subjects:Lw($.runId),deliver_policy:w6$.DeliverPolicy.All})).consume();async function*G(){try{for await(let Q of X)yield{subject:Q.subject,data:Q.data,headers:Q.headers}}finally{X.stop()}}return k84({messages:G(),runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs,onDone:()=>X.stop()})}var w6$;var B6$=B(()=>{ld0();B90();U90();w6$=M(bO(),1)});function md0($){let Z=$.type;if(typeof Z!=="string")return!1;if(Z==="text"||Z==="reasoning")return $.state!=="streaming";if(Z==="step-start")return!1;if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="approval-requested"||Z==="tool-user_ask"&&$.state==="input-available"||$.state==="output-available"||$.state==="output-error"||$.state==="output-denied";return!0}function dd0($){let Z=$.type??"";if(Z==="reasoning")return"reasoning";if(Z==="file")return"file";if(Z.startsWith("tool-")||Z==="dynamic-tool")return $.state==="output-available"||$.state==="output-error"||$.state==="output-denied"?"tool_result":"tool_call";return"text"}class id0{ctx;base;seqByPart=new Map;emitted=new Set;finished=new Set;partKeyByRowId=new Map;finishMessageIdByRowId=new Map;nextSeq=0;constructor($){this.ctx=$;this.base=$.baseTimeMs??Date.now()}hasEmittedContentFor($){let Z=`${$}#`;for(let X of this.emitted)if(X.startsWith(Z))return!0;return!1}seqFor($){let Z=this.seqByPart.get($);if(Z!==void 0)return Z;let X=this.nextSeq++;return this.seqByPart.set($,X),X}row($,Z,X,G,Q,Y=null){return{id:`${this.ctx.runId}:${$}:${X}`,seq:X,org_id:this.ctx.orgId,thread_id:this.ctx.threadId,run_id:this.ctx.runId,message_id:$,role:Z,kind:G,payload:Q,payload_ref:null,metadata:Y,created_at:new Date(this.base+X).toISOString()}}emitMessageParts($){let Z=$.parts??[],X=[];for(let G=0;G<Z.length;G++){let Q=Z[G];if(!md0(Q))continue;let Y=`${$.id}#${G}`;if(this.emitted.has(Y))continue;let J=this.seqFor(Y),K=this.row($.id,$.role,J,dd0(Q),Q);this.partKeyByRowId.set(K.id,Y),X.push(K)}return X}emitRequestMessageParts($){let Z=$.parts??[],X=[];for(let G=0;G<Z.length;G++){let Q=Z[G],Y=`${$.id}#${G}`,J=this.seqFor(Y),K=this.row($.id,$.role,J,dd0(Q),Q);this.partKeyByRowId.set(K.id,Y),X.push(K)}return X}markFinished($,Z,X=null){if(this.finished.has($))return[];let G=this.seqFor(`${$}#finish`),Q=this.row($,Z,G,"finish",{},X);return this.finishMessageIdByRowId.set(Q.id,$),[Q]}markRequestFinished($,Z,X=null){let G=this.seqFor(`${$}#finish`),Q=this.row($,Z,G,"finish",{},X);return this.finishMessageIdByRowId.set(Q.id,$),[Q]}acknowledge($){for(let Z of $){let X=this.partKeyByRowId.get(Z.id);if(X!==void 0)this.emitted.add(X);let G=this.finishMessageIdByRowId.get(Z.id);if(G!==void 0)this.finished.add(G)}}emitUserMessage($){return[...this.emitMessageParts($),...this.markFinished($.id,$.role,$.metadata??null)]}emitRequestMessage($){return[...this.emitRequestMessageParts($),...this.markRequestFinished($.id,$.role,$.metadata??null)]}emitStepParts($){return this.emitMessageParts($)}emitFinal($){let Z=this.emitMessageParts($);if(Z.length===0&&!this.hasEmittedContentFor($.id))return Z;return[...Z,...this.markFinished($.id,$.role,$.metadata??null)]}emitFinalSnapshot($){let Z=$.parts??[],X=[];for(let Y=0;Y<Z.length;Y++){let J=Z[Y];if(!md0(J))continue;let K=`${$.id}#${Y}`,W=this.seqFor(K),N=this.row($.id,$.role,W,dd0(J),J);this.partKeyByRowId.set(N.id,K),X.push(N)}if(X.length===0&&!this.hasEmittedContentFor($.id))return X;let G=this.seqFor(`${$.id}#finish`),Q=this.row($.id,$.role,G,"finish",{},$.metadata??null);return this.finishMessageIdByRowId.set(Q.id,$.id),[...X,Q]}emitError($,Z){let X=`${$}#error`,G=[];if(!this.emitted.has(X)){let Q=this.seqFor(X),Y=this.row($,"assistant",Q,"error",{type:"text",text:`Error: ${Z}`});this.partKeyByRowId.set(Y.id,X),G.push(Y)}return[...G,...this.markFinished($,"assistant")]}}class i7{ctx;builder;constructor($){this.ctx=$;this.builder=new id0($)}async appendBuiltRows($){await this.ctx.storage.appendParts($),this.builder.acknowledge($)}async emitUserMessage($){await this.appendBuiltRows(this.builder.emitUserMessage($))}async emitRequestMessage($){let Z=this.builder.emitRequestMessage($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitStepParts($){await this.appendBuiltRows(this.builder.emitStepParts($))}async emitFinal($){await this.appendBuiltRows(this.builder.emitFinal($))}async replaceFinal($){let Z=this.builder.emitFinalSnapshot($);await this.ctx.storage.replaceMessageParts(this.ctx.threadId,$.id,Z),this.builder.acknowledge(Z)}async emitError($,Z){await this.appendBuiltRows(this.builder.emitError($,Z))}}var Ew=()=>{};async function S84($){let X=($.requestMessageId?await $.messageParts.maxCreatedAtMsForMessage($.runId,$.requestMessageId):null)??await $.messageParts.maxCreatedAtMsForRun($.runId);return new i7({storage:$.messageParts,orgId:$.orgId,threadId:$.runId,runId:$.runId,baseTimeMs:(X??Date.now())+1})}async function D6$($){let Z=await S84($),X=$.replaceFinal?(G)=>Z.replaceFinal(G):(G)=>Z.emitFinal(G);return{emitStepParts:(G)=>Z.emitStepParts(G),emitFinal:X,emitError:(G,Q)=>Z.emitError(G,Q)}}var L6$=B(()=>{Ew()});function D90($,Z){V84.add(1,{"org.id":Z??"unknown"})}var V84;var E6$=B(()=>{X5();V84=Q8.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class nd0{intervalMs;lastBumpMs=new Map;constructor($=3000){this.intervalMs=$}shouldBump($,Z=Date.now()){let X=this.lastBumpMs.get($);if(X!==void 0&&Z-X<this.intervalMs)return!1;return this.lastBumpMs.set($,Z),!0}clear($){this.lastBumpMs.delete($)}}function z6$($,Z,X,G){return $.pipeThrough(new TransformStream({transform(Q,Y){if(X.shouldBump(Z))G();Y.enqueue(Q)},flush(){X.clear(Z)}}))}function L90($,Z=[]){if($==="stop")return"completed";if($==="tool-calls"){let X=Z.some((Q)=>Q.type==="tool-user_ask"&&Q.state==="input-available"),G=Z.some((Q)=>Q.state==="approval-requested");return X||G?"requires_action":"completed"}return"failed"}function zw($,Z){return`error-${$}:${Z}`}function E90($){return{id:$.id,role:$.role,parts:$.parts,metadata:$.metadata??void 0}}var pd0=()=>{};function C84($){return`liveness: no stream events for ${Math.round($/60000)}m`}function od0($){return $.runFenceToken!==null&&$.runFenceToken!==$.fenceToken}function P6$($){td0=$}function A6$(){if(!td0)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return td0}function T6$(){return A6$()}async function R6$($,Z,X){let G=A6$(),Q=G.getJetStream();if(!Q)throw Error("JetStream unavailable");let Y=(await G.messageParts.loadWindow($.runId,{limit:500})).messages.map(E90);return{chunkCount:0,attempts:1,outcome:await Z6$({chunkStream:z6$(await O6$({js:Q,runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs}),$.runId,_84,()=>{G.bumpProgress({runId:$.runId,orgId:Z}).catch(()=>{})}),persistence:await D6$({messageParts:G.messageParts,orgId:Z,runId:$.runId,requestMessageId:$.messageId,replaceFinal:!0}),originalMessages:Y,errorMessageId:zw($.runId,$.fenceToken),title:{threadId:$.runId,currentThreadTitle:X,persistTitle:async(K,W)=>{await G.persistTitle($.runId,Z,W),await G.onTitleUpdated({runId:$.runId,orgId:Z,title:W})}}})}}async function j6$($,Z,X){let G=await $.resolveRun(Z).catch(()=>null);return G!==null&&G.runFenceToken===X&&["completed","failed","requires_action"].includes(G.status)}async function I6$($,Z,X){let G=await v84($,Z);if("skip"in G)return;let Q=G.row.orgId,Y=G.row.createdBy??$.runId,J=G.row.title;try{let{outcome:K}=await X($,Q,J),W=K?.failed?"failed":K?.finishReason==null?"completed":L90(K.finishReason,K.finalParts);if(W==="failed"){let N=K?.finishReason?`harness reported an error: ${K.finishReason}`:"harness reported an error";if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,N,"harness"))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:N,kind:"harness"})}else if(W==="requires_action")await Z.markRunRequiresAction($.runId,Q),await Z.clearSynthesizedError($.runId,$.fenceToken);else{if(await Z.completeRunIfNotCompleted($.runId,Q))await Z.recordCompleted({runId:$.runId,orgId:Q,distinctId:Y,usage:K?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await Z.clearSynthesizedError($.runId,$.fenceToken)}await Z.purgeRun($.runId,$.fenceToken)}catch(K){if(K instanceof Qn){if(await j6$(Z,$.runId,$.fenceToken)){await Z.clearSynthesizedError($.runId,$.fenceToken),await Z.purgeRun($.runId,$.fenceToken);return}let U=`stream truncated before projection could replay it: ${K.message}`;if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,U,"projection"))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:U,kind:"projection"});await Z.purgeRun($.runId,$.fenceToken);return}let W=K instanceof w90;if(W&&await j6$(Z,$.runId,$.fenceToken)){await Z.purgeRun($.runId,$.fenceToken);return}let N=W?C84(K.idleTimeoutMs):K instanceof Error?K.message:String(K),H=W?"liveness":"projection";if(D90($.runId,Q),await Z.markRunFailed($.runId,Q,N,H))await Z.recordFailed({runId:$.runId,orgId:Q,distinctId:Y,reason:N,kind:H});if(W)await Z.clearSynthesizedError($.runId,$.fenceToken);throw K}}async function v84($,Z){let X=await Z.resolveRun($.runId);if(!X)return{skip:"missing"};if(od0({status:X.status,runFenceToken:X.runFenceToken,fenceToken:$.fenceToken}))return{skip:"stale",row:X};if(X.version!==2)return{skip:"legacy-v1",row:X};return{row:X}}var td0=null,_84;var rd0=B(()=>{X6$();B6$();B90();L6$();E6$();pd0();_84=new nd0});function q6$($,Z){switch($.type){case"START":{let X={type:"RUN_STARTED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,runConfig:$.runConfig,podId:$.podId,messageId:$.messageId};if(Z?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:$.taskId,orgId:Z.orgId},X];return[X]}case"STEP_DONE":{if(Z?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:Z.status.stepCount+1}]}case"FINISH":{if(Z==null||Z.status.tag!=="running")return[];let{stepCount:X}=Z.status;if($.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];if($.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"error"}]}case"CANCEL":{if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"cancelled"}]}case"RESUME":{if(Z?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,podId:$.podId}]}case"FORCE_FAIL":{if($.reason==="ghost")return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z?.orgId??$.orgId,reason:$.reason,expectedFenceToken:$.expectedFenceToken??null}];if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:$.reason}]}}}function M6$($,Z,X=new Date){switch(Z.type){case"RUN_STARTED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"RUN_RESUMED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"STEP_COMPLETED":if($?.status.tag!=="running")return $;return{...$,status:{...$.status,stepCount:Z.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function k6$($,Z,X,G){let{storage:Q,sseHub:Y}=G,J=await Q.get($,Z);Y.emit(Z,c3($,X,{virtualMcpId:J?.virtual_mcp_id??void 0,createdBy:J?.created_by,triggerId:J?.trigger_id,title:J?.title,branch:J?.branch??null,createdAt:J?.created_at,updatedAt:J?.updated_at})),Y.emit(Z,F00($,X))}async function f84($,Z){let{storage:X,sseHub:G}=Z;switch($.type){case"RUN_STARTED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_config:$.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"in_progress",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at,messageId:$.messageId}));return}case"RUN_RESUMED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"in_progress",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at}));return}case"STEP_COMPLETED":G.emit($.orgId,gV0($.taskId,$.stepCount));return;case"RUN_COMPLETED":await k6$($.taskId,$.orgId,"completed",Z);return;case"RUN_REQUIRES_ACTION":await k6$($.taskId,$.orgId,"requires_action",Z);return;case"RUN_FAILED":{if($.reason==="ghost"){if(!await X.forceFailIfInProgress($.taskId,$.orgId,$.expectedFenceToken))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null})}else await X.update($.taskId,$.orgId,{status:"failed",run_config:null,run_started_at:null,...$.reason==="reaped"?{failure_reason:b84,failure_kind:"stall"}:{}});let Q=await X.get($.taskId,$.orgId);G.emit($.orgId,c3($.taskId,"failed",{virtualMcpId:Q?.virtual_mcp_id??void 0,createdBy:Q?.created_by,triggerId:Q?.trigger_id,title:Q?.title,branch:Q?.branch??null,createdAt:Q?.created_at,updatedAt:Q?.updated_at})),G.emit($.orgId,F00($.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function S6$($,Z){for(let{event:X}of $)await f84(X,Z)}var b84="Run stalled \u2014 no progress within the idle timeout window";var V6$=B(()=>{U8()});function C6$($){return $.now-$.lastProgressAt>$.idleTimeoutMs}function _6$($){return Math.max($.persistedLastProgressAt??Number.NEGATIVE_INFINITY,$.currentRunStartedAt)}class sd0{deps;clock;states=new Map;reaperTimer=null;constructor($,Z=()=>new Date){this.deps=$;this.clock=Z;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((X)=>{console.error("[RunRegistry] Reaper sweep failed",X)})},x84)}async execute($){let Z=this.dispatch($);return await this.react(Z),Z}dispatch($){let Z=this.states.get($.taskId),X=q6$($,Z),G=[];for(let Q of X){let Y=this.states.get(Q.taskId);if(Q.type==="PREVIOUS_RUN_ABORTED"||Q.type==="RUN_FAILED"){if(Y?.status.tag==="running")Y.status.abortController.abort()}let J=M6$(Y,Q,this.clock());if(J===void 0)this.states.delete(Q.taskId);else this.states.set(Q.taskId,J);if(G.push({event:Q,state:J}),y84.has(Q.type))v6$().add(1,{"org.id":Q.orgId});else if(g84.has(Q.type)&&Y?.status.tag==="running")v6$().add(-1,{"org.id":Q.orgId})}return G}react($){return S6$($,this.deps)}getAbortSignal($){let Z=this.states.get($);if(Z?.status.tag==="running")return Z.status.abortController.signal;return null}isRunning($){return this.states.get($)?.status.tag==="running"}async stopAll(){for(let[,$]of this.states)if($.status.tag==="running")$.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let $=this.clock().getTime(),Z=[...this.states].filter(([,X])=>X.status.tag==="running");for(let[X,G]of Z){if(this.states.get(X)?.status.tag!=="running")continue;let Y;try{let K=await this.deps.storage.getProgress(X,G.orgId);Y=_6$({persistedLastProgressAt:K?.lastProgressAt??null,currentRunStartedAt:G.status.startedAt.getTime()})}catch(K){console.warn(`[RunRegistry] Reaper progress read failed for ${X}; skipping`,K);continue}if(!C6$({lastProgressAt:Y,now:$,idleTimeoutMs:z90}))continue;let J=await this.deps.storage.get(X,G.orgId).catch(()=>null);if(J&&J.status!=="in_progress"){let K=this.states.get(X);if(K?.status.tag==="running")K.status.abortController.abort();this.states.delete(X);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${X} (idle > ${z90/60000}m) ...`),h84().add(1,{"org.id":G.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:X,reason:"reaped"}).catch((K)=>{console.error("[RunRegistry] Reaper execute failed",K)})}}}var x84=300000,ad0,z90,y84,g84,b6$=($)=>{let Z;return()=>Z??=$()},v6$,h84;var ed0=B(()=>{V6$();X5();ad0=Number(process.env.RUN_IDLE_TIMEOUT_MS),z90=Number.isFinite(ad0)&&ad0>0?ad0:600000,y84=new Set(["RUN_STARTED","RUN_RESUMED"]),g84=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),v6$=b6$(()=>Q8.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),h84=b6$(()=>Q8.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function f6$($){let{runId:Z}=$,X=T6$(),G=await X.resolveRun(Z),Q=$.fenceToken??G?.runFenceToken;if(!G||G.version!==2||Q==null)return;if(od0({status:G.status,runFenceToken:G.runFenceToken,fenceToken:Q}))return;if(!X.getJetStream())throw Error("JetStream unavailable for consume step");await I6$({runId:Z,fenceToken:Q,messageId:$.messageId,idleTimeoutMs:$.idleTimeoutMs??z90},X,R6$)}var x6$=B(()=>{rd0();ed0()});class Yn{intervalMs;emitFn;sleepFn;controller=null;stopped=!1;constructor($){this.intervalMs=$.intervalMs??u84,this.emitFn=$.emit,this.sleepFn=$.sleepFn??V8}arm(){if(this.stopped)return;this.controller?.abort();let $=new AbortController;this.controller=$,this.wait($.signal)}async wait($){try{await this.sleepFn(this.intervalMs,{signal:$})}catch{return}if(this.stopped||$.aborted)return;try{await this.emitFn()}catch{this.stop();return}if(!this.stopped&&!$.aborted)this.arm()}stop(){if(this.stopped)return;this.stopped=!0,this.controller?.abort(),this.controller=null}}function y6$($=Date.now){return{type:"data-liveness",data:{t:$()},transient:!0}}var u84=30000;var $m0=B(()=>{C5()});function Zm0($){let Z=Number.isFinite($)?Math.max(1,$):1,X=0,G=[];return{async acquire(){if(X<Z)X++;else await new Promise((Y)=>G.push(Y));let Q=!1;return()=>{if(Q)return;Q=!0;let Y=G.shift();if(Y)Y();else X--}},get active(){return X},get pending(){return G.length}}}var c84,g6$=()=>c84.acquire();var Xm0=B(()=>{k$();c84=Zm0(m0().decopilotMaxConcurrentSubagents)});var j90,jw,h6$=()=>({active:jw.active,pending:jw.pending,max:j90}),u6$=($)=>{if(jw.active>=j90)console.log("[hostedHarness] run parked at concurrency cap",{active:jw.active,pending:jw.pending,max:j90}),$?.();return jw.acquire()};var Gm0=B(()=>{Xm0();k$();X5();j90=m0().decopilotMaxConcurrentHostedRuns,jw=Zm0(j90);Q8.createObservableGauge("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(jw.active));Q8.createObservableGauge("hosted_runs.pending",{description:"Hosted agent-loop runs parked waiting for a slot on this pod",unit:"{runs}"}).addCallback(($)=>$.observe(jw.pending))});function c6$($){let Z=$[1],X=$[2],G=Number($[3]);return{owner:Z,repo:X,number:G,url:`https://github.com/${Z}/${X}/pull/${G}`}}function P90($){let Z=$.length>200000?$.slice(0,200000):$,X=l84.exec(Z);if(X&&Number(X[3])>0)return c6$(X);let G=d84.exec(Z);if(G&&Number(G[3])>0)return c6$(G);return null}function l6$($){if($==null)return null;if(typeof $==="string")return P90($);let Z;try{Z=JSON.stringify($)}catch{return null}return Z?P90(Z):null}var l84,d84;var Qm0=B(()=>{l84=/https?:\/\/github\.com\/([^/\s"']+)\/([^/\s"']+)\/pull\/(\d+)/,d84=/https?:\/\/api\.github\.com\/repos\/([^/\s"']+)\/([^/\s"']+)\/pulls\/(\d+)/});class i6${listeners=new Map;totalCount=0;strategy=null;started=!1;async start($){if(this.started){if(!$)return;await this.stop()}this.strategy=$,await this.strategy.start((Z,X)=>this.localEmit(Z,X)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add($){if(this.totalCount>=m6$)return console.warn(`[SSEHub] Total connection limit reached (${m6$})`),null;let Z=this.listeners.get($.organizationId);if(!Z)Z=new Map,this.listeners.set($.organizationId,Z);if(Z.size>=d6$)return console.warn(`[SSEHub] Per-org connection limit reached for ${$.organizationId} (${d6$})`),null;return Z.set($.id,$),this.totalCount++,$.id}remove($,Z){let X=this.listeners.get($);if(!X)return;if(X.delete(Z)){if(this.totalCount--,X.size===0)this.listeners.delete($)}}emit($,Z){if(this.strategy)this.strategy.broadcast($,Z);else this.localEmit($,Z)}countForOrg($){return this.listeners.get($)?.size??0}get count(){return this.totalCount}localEmit($,Z){let X=this.listeners.get($);if(!X||X.size===0)return;for(let G of X.values()){if(G.typePatterns&&!m84(Z.type,G.typePatterns))continue;try{G.push(Z)}catch{this.remove($,G.id)}}}}function m84($,Z){for(let X of Z){if(X===$)return!0;if(X.endsWith(".*")){let G=X.slice(0,-1);if($.startsWith(G))return!0}}return!1}var d6$=50,m6$=500,i5;var A90=B(()=>{X5();i5=new i6$;Q8.createObservableGauge("sse_hub.connections",{description:"Active SSE listeners held by this pod",unit:"{connections}"}).addCallback(($)=>$.observe(i5.count))});function T9($,Z){i5.emit($,{id:crypto.randomUUID(),type:S0$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()})}function p6$($,Z){i5.emit($,{id:crypto.randomUUID(),type:V0$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function i84($,Z){return $?[$]:Z}async function t6$($,Z,X){let G=$.metadata?.runMetadata?.taskBoardItemId,Q=!G&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return i84(G,Q)}async function Ox($,Z,X){let G=$.organization?.id;if(!G)return;try{for(let Q of await t6$($,G,X)){let Y=await $.storage.taskBoard.getById(Q,G);if(!Y||n6$[Z]<=n6$[Y.status])continue;let J=await $.storage.taskBoard.update(Q,G,{status:Z},$.auth?.user?.id??Y.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Q,action:"status_changed",actorId:null,data:{from:Y.status,to:Z}}).catch((K)=>console.error("[task-board] activity log write failed",K)),T9(G,J)}}catch(Q){console.error("[task-board] run transition failed",Q)}}async function T90($,Z,X,G){let Q=$.organization?.id;if(!Q)return;try{let Y=l6$(Z);if(!Y)return;let J=await t6$($,Q,G);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,organizationId:Q,url:Y.url,prNumber:Y.number,repoOwner:Y.owner,repoName:Y.repo,connectionId:X??null})}catch(Y){console.error("[task-board] PR capture failed",Y)}}async function Jn($,Z,X){try{let G=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X);for(let Q of G)T9(X,Q)}catch(G){console.error("[task-board] thread-finish transition failed",G)}}async function o6$($,Z){let X=$.organization?.id;if(!X)return;try{let G=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Q of G)T9(X,Q)}catch(G){console.error("[task-board] thread-run reopen failed",G)}}function r6$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function a6$($){if(n84.test($))return!0;return p84.test($)&&t84.test($)}var n6$,n84,p84,t84;var PG=B(()=>{Qm0();A90();mN();n6$={triage:0,todo:1,in_progress:2,in_review:3,done:4};n84=/\bgh\s+pr\s+create\b/,p84=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,t84=/(?:-X|--request)\s+POST/});import{DBOS as kL}from"@dbos-inc/dbos-sdk";function Km0($){Ym0=$}function e6$(){if(!Ym0)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return Ym0}async function o84($,Z){let X=e6$(),{request:G}=$,Q=Z??await X.studioContextFactory(G.organizationId,G.userId);if(!Q)throw Error("user membership lost mid-dispatch");if(G.runMetadata)Q.metadata.runMetadata=G.runMetadata;let Y=new AbortController,J=!1,K=new Yn({emit:()=>s6$(X,$)}),W=await u6$(()=>{J=!0,s6$(X,$),K.arm()}).finally(()=>K.stop());try{if(J&&await r84($))throw Error("run cancelled while queued for a free runner");if(Ox(Q,"in_progress",$.threadId),!G.runMetadata?.taskBoardItemId)o6$(Q,$.threadId);await X.dispatchRunFn({...G,abortSignal:Y.signal},Q,X.deps)}finally{W()}}async function r84($){try{return(await kL.getWorkflowStatus(Wm0($.runId,$.fenceToken)))?.status==="CANCELLED"}catch(Z){return console.error(`[hostedHarness] could not read child status for run=${$.runId} fence=${$.fenceToken}`,Z),!1}}function a84($,Z,X,G=1){let Q=X instanceof Error?X.message:String(X);return{messageId:zw($,Z),errorChunk:{type:"error",errorText:Q},seq:G,finalSeq:G}}function s84($){if(!($ instanceof Error))return;let Z=$.lastAckSeq;return typeof Z==="number"?Z+1:void 0}async function e84($,Z){let X=e6$(),{streamBuffer:G}=X.deps,{messageId:Q,errorChunk:Y,seq:J,finalSeq:K}=a84($.runId,$.fenceToken,Z,s84(Z));if(!G){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${$.runId} fence=${$.fenceToken} messageId=${Q}`);return}if(!await G.publishRawChunk($.runId,Y,{fenceToken:$.fenceToken,seq:J})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${$.runId} fence=${$.fenceToken} messageId=${Q}`);return}await G.publishDone($.runId,$.fenceToken,K)}async function $44($){try{await kL.runStep(()=>o84($),{name:"runHostedHarness",retriesAllowed:!1})}catch(Z){await kL.runStep(()=>e84($,Z),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((X)=>{console.error(`[hostedHarness] could not publish terminal error for run=${$.runId} fence=${$.fenceToken}`,X)})}}function Wm0($,Z){return`decopilot-hosted:${$}:${Z}`}async function $5$($){return{workflowID:(await kL.startWorkflow(Z44,{workflowID:Wm0($.runId,$.fenceToken),queueName:OW,enqueueOptions:{queuePartitionKey:$.threadId}})($)).workflowID}}async function Nm0($,Z){await kL.cancelWorkflow(Wm0($,Z))}var Jm0=1,Ym0=null,s6$=($,Z)=>eJ($.deps.streamBuffer,Z.runId,"waiting-capacity"),Z44;var Hm0=B(()=>{$m0();Yx();Gm0();PG();Z44=kL.registerWorkflow($44,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as Bx}from"@dbos-inc/dbos-sdk";function wm0($){if($!=="decopilot")throw Error(`hosted dispatch requires an explicit Decopilot harness; got ${JSON.stringify($)}`)}function Om0($){Fm0=$}function X44(){if(!Fm0)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return Fm0}function G44($,Z=g50){let X=$.runFenceToken;if(X)return{runFenceToken:X,claimedRequest:$,shouldPersistFence:!1};let G=Z();return{runFenceToken:G,claimedRequest:{...$,runFenceToken:G},shouldPersistFence:!0}}async function Q44($){let Z=X44(),{request:X}=$,G=X.taskId??$.threadId;if(b0$({harnessId:X.harnessId}))await eJ(Z.deps.streamBuffer,G,"starting-run");let Q=await Z.studioContextFactory(X.organizationId,X.userId);if(!Q)throw Error("user membership lost mid-dispatch");wm0(X.harnessId);let Y=X.taskId??$.threadId,{runFenceToken:J,claimedRequest:K,shouldPersistFence:W}=G44(X);if(W)await Q.storage.threads.setRunFence(Y,J);return{runFenceToken:J,hostedEnqueue:{runId:G,fenceToken:J,threadId:$.threadId,request:K}}}async function Y44($){if($.source!=="user-message")return;let{request:Z}=$;f1.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function J44($,Z){if($.source!=="user-message")return;let{request:X}=$;f1.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:X.taskId??$.threadId,agent_id:X.agent,model_id:X.models.thinking.id,mode:X.mode,error_category:"setup",error_message:Z}})}async function R90($){wm0($.request.harnessId),await Bx.runStep(()=>Y44($),{name:"trackMessageStarted"});let Z;try{Z=await Bx.runStep(()=>Q44($),{name:"dispatchRunAndWait",retriesAllowed:!0}),await $5$(Z.hostedEnqueue)}catch(Q){let Y=Q instanceof Error?Q.message:String(Q);throw await Bx.runStep(()=>J44($,Y),{name:"trackMessageFailed"}),Q}let X=$.request.taskId??$.threadId,G="messages"in $.request?void 0:$.request.messageId;return await Bx.runStep(()=>f6$({runId:X,fenceToken:Z.runFenceToken,messageId:G}),{name:"consumeRunProjection"}),{taskId:$.request.taskId??$.threadId}}async function K44($){return R90($)}async function oN($,Z){return wm0($.request.harnessId),{workflowID:(await Bx.startWorkflow(W44,{queueName:iY,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}var Um0=1,Fm0=null,W44;var Z5$=B(()=>{O6();Yx();x6$();Hm0();W44=Bx.registerWorkflow(K44,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var SL=B(()=>{Z5$();Hm0()});async function I90($,Z,X){let G=Z.organizationId,Q=Z.assignedBy??Z.createdBy,Y=await l7($,"smart"),J=qB(G),K=await $.storage.threads.create({organization_id:G,title:X.title,status:"in_progress",virtual_mcp_id:J,message_storage_version:2,harness_id:"decopilot",sandbox_provider_kind:"agent-sandbox",created_by:Q});await $.storage.taskBoard.linkThread(Z.id,K.id,G);let W={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:X.prompt}]};return await new i7({storage:$.storage.threads.messageParts(),orgId:G,threadId:K.id,runId:K.id}).emitRequestMessage(W),await oN({threadId:K.id,source:"background-tool",request:{messages:[W],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:J},temperature:X.temperature,toolApprovalLevel:"auto",mode:"default",organizationId:G,userId:Q,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",taskId:K.id,runMetadata:{taskBoardItemId:Z.id}}}),{threadId:K.id}}var Bm0=B(()=>{Nw();SL();Ew();U8()});async function Dx($,Z){if(Z.assigneeId!==sZ)return;await Dm0($,Z).catch((X)=>{console.error("[task-board] Super Agent enqueue failed",X)})}async function Dm0($,Z,X){let G=["You've been assigned this task. Complete it.","","You are running AUTONOMOUSLY \u2014 no human is watching this run, so drive it "+"to completion on your own. Use `user_ask` ONLY for a genuine, unresolvable blocker a human must clear (a missing credential/secret, or "+"a decision so ambiguous you truly cannot proceed) \u2014 that should be rare. "+"Do not ask for confirmation of a reasonable choice; make it and move on.","",`Title: ${Z.title}`,Z.description?`
|
|
1192
1191
|
Description:
|
|
1193
1192
|
${Z.description}
|
|
1194
1193
|
`:"",X?.feedback?[X.pr?`A reviewer requested changes on the existing pull request #${X.pr.number} (${X.pr.url}):`:"A reviewer requested changes on your previous work:",X.feedback,X.pr?`Load the repo, then CHECK OUT that PR's branch (e.g. \`gh pr checkout ${X.pr.number}\`) before editing, address the feedback, commit, and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch.`:"Address this feedback.",""].join(`
|
|
@@ -2714,7 +2713,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2714
2713
|
|
|
2715
2714
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2716
2715
|
|
|
2717
|
-
Respond with the structured verdict and a short reason.`,cS$;var dS$=B(()=>{k4();Nw();E$1();Ye4=z$1.object({requiresReview:z$1.boolean().describe("true if the changes should go through pull-request review"),reason:z$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});cS$={requiresReview:!1,reason:""}});function Ne4($){if(!$||$.includes(".."))return!1;return We4.test($)}function mS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ne4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function iS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var We4;var nS$=B(()=>{We4=/^[\w./@-]+$/});function j$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 pS$($,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 tS$($,Z,X,G){if(!G.connectionId)throw new Bg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Bg(h7);await OG0({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Bg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await jy(G.connectionId,G.owner,G.name,$.db,$.vault),W=RE0($),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 aw(N,He4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var He4=10485760,Bg;var oS$=B(()=>{eU();F$1();vp();BG0();Bg=class Bg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Ue4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Fe4.test(Z))throw Error(`Invalid branch name: ${$}`)}function UC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Oe4)])}function wC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function P$1($,Z){let G=(IE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return IE0.set($,Q),Q.finally(()=>{if(IE0.get($)===Q)IE0.delete($)}),G}async function kZ($,Z,X){let G=wC($);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",...vQ}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?De4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...vQ}})};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 De4($){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 qE0($,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 Le4($){return sS$.includes($)}var Fe4,rS$=524288,we4=65536,Oe4=1e4,aS$=2000,Be4,IE0,vQ,sS$,eS$=()=>{let $=new E1;return $.use("/:virtualMcpId/:branch/*",Be4),$.post("/:virtualMcpId/:branch/write",(Z)=>kZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>kZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>kZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>kZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>kZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>kZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>kZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:UC(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||!Le4(X))return Z.json({error:`step must be one of: ${sS$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=$0(Z.var.studioContext),Y=p90(G.virtualMcpMetadata);try{await wG0({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 VH(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 fS$(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(aS$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(aS$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>kZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=wC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return P$1(G,async()=>{try{await U$1(J,X,G);let K=pS$(Q,Y);if(K)await tS$(J,X,G,K)}catch(K){if(K instanceof Bg)return Z.json({error:K.message},403,vQ);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,vQ)}return kZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return P$1(X,()=>kZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=wC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return P$1(G,async()=>{try{await U$1(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,vQ)}return kZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:rS$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=wC(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]=B$1(W)&&H?[W,N]:await Promise.all([qE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),qE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await uS$(J,F,U);return Z.json(w,200,vQ)}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,vQ);return Z.json({error:W},502,vQ)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:rS$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=wC(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]=B$1(W)&&H?[W,N]:await Promise.all([qE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),qE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await lS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,vQ)}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,vQ);return Z.json({error:W},502,vQ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=wC(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=j$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:we4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=wC(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=mS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=iS$(Q,J.resolveType),W=j$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 $V$=B(()=>{i8();GC();Og();CS$();HH();vS$();gL();yy();bS$();xS$();vr0();Dn();E$1();dS$();nS$();oS$();Fe4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Be4=VS$(async($,Z)=>{let X=$.var.studioContext;try{J0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=B1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=$0(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{Ue4(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=Cp({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await yL(X,J,G),H=_S$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await j3(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()});IE0=new Map;vQ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};sS$=["clone","install","start"]});var ZV$=($)=>{let Z=new E1;if(Z.use("*",XC),Z.route("/",cL0()),Z.route("/",Lq$()),Z.route("/",LS$()),Z.route("/",BS$()),Z.route("/",PE0()),Z.route("/tools",RS$()),Z.route("/",PS$()),Z.route("/",ek$({kvStorage:$.kvStorage})),Z.route("/",ak$()),Z.route("/fs",HS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",eS$()),Z.route("/",US$()),Z.route("/deco-sites",dL0()),Z.route("/sso",$L0()),Z.route("/",AE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Hq$()),$.mountDevAssets)Z.route("/dev-assets",mL0({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("/",Va1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",a90()),Z.route("/mcp/self",jE0()),Z.route("/mcp",$Z0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var XV$=B(()=>{i8();_01();Fq$();y01();iL0();At();V01();sk$();$S$();FS$();Ni();Re0();ZZ0();Q$1();wS$();DS$();ES$();AS$();J$1();IS$();K$1();s90();$V$()});function ze4($){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 je4($,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(Ee4)});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 Ee4=1e4,Pe4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},GV$=()=>{let $=new E1;return $.use("*",Pe4),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await je4(G,Q);return Z.json({apps:ze4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var QV$=B(()=>{i8();k$()});import{z as I1}from"zod";function FW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Ce4($){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 _e4($,Z,X){try{return JSON.parse($)}catch{throw new KV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ve4($){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:_e4(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 be4($){let Z=$.map((X)=>{let G=X.function.parameters?FQ(X.function.parameters):FQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function fe4($){if(!$)return;return{openai:{response_format:$}}}function xe4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function YV$($,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 JV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ae4=256,Te4,Re4,Ie4,qe4,Me4,ke4,Se4,Ve4,KV$,WV$,NV$;var HV$=B(()=>{k4();i8();Og();eN();Te4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Re4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),Ie4=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(Re4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),qe4=I1.object({type:I1.literal("text")}),Me4=I1.object({type:I1.literal("json_object")}),ke4=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()})}),Se4=I1.union([qe4,Me4,ke4]),Ve4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(Ie4),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(Te4).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:Se4.optional(),user:I1.string().optional()});KV$=class KV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};WV$=new E1;WV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(FW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(FW("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(FW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=Ve4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(FW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=Ce4(Y.model);if(!J)return $.json(FW("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)=>IB(z.providerId));if(!E)return $.json(FW("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(FW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=ve4(Y.messages),U=Y.tools?be4(Y.tools):void 0,w=fe4(Y.response_format),O=xe4(),D=Math.floor(Date.now()/1000);if(Y.stream)return VH($,async(L)=>{let E=YV$(H,F,U,Y,w,$.req.raw.signal);try{let z=Dw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let C=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:C},finish_reason:null}]})})};for await(let C of z.fullStream){if(!j&&(C.type==="text-delta"||C.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(C.type==="text-delta"){if(P+=C.text,P.length>=Ae4)await q()}else if(C.type==="tool-call"){await q();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:C.toolCallId,type:"function",function:{name:C.toolName,arguments:JSON.stringify(C.input)}}]},finish_reason:null}]})})}else if(C.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:JV$(C.finishReason)}],usage:C.totalUsage?{prompt_tokens:C.totalUsage.inputTokens??0,completion_tokens:C.totalUsage.outputTokens??0,total_tokens:C.totalUsage.totalTokens??0}:void 0})})}await q(),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=YV$(H,F,U,Y,w,$.req.raw.signal),E=await Ow(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:JV$(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(FW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(FW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(FW(Q.message,"server_error"),500)}});NV$=WV$});var UV$;var FV$=B(()=>{UV$={name:"decocms",version:"4.163.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 he4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ge4}}var wV$,ge4="https://ph.studio.decocms.com",OV$;var BV$=B(()=>{i8();UC0();aV();wZ();k$();ze0();FV$();wV$=new E1;wV$.get("/",($)=>{let Z={version:UV$.version,theme:JM1(),...vB().logo&&{logo:vB().logo},...QW()&&{internalUrl:P00()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:ET$(),posthog:he4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!QW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});OV$=wV$});function Dg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function A$1($){return(Dg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function LV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Dg($))}&sz=${Z}`}function DV$($,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 EV$($){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()?DV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):DV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var OC,ue4,ce4,le4,de4,zV$;var jV$=B(()=>{OC=c0.enum(["good","bad","neutral"]),ue4=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:OC.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 $})),ce4=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(ue4)),le4={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()},de4=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:OC.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:OC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:OC.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:OC.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(ce4).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:OC.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:OC.optional()})).min(1)})]),zV$=c0.object({...le4,template:de4})});function ME0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=zV$.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 T$1=B(()=>{jV$()});import{join as PV$}from"path";async function ie4($){try{let Z=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(me4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=ME0(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()||A$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function bQ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ne4($,Z){let X=Dg($),G=Z?.brand?.trim()||A$1(X),Q=LV$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=EV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${bQ(K)}</title>`,`<meta name="description" content="${bQ(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="${bQ(K)}" />`,`<meta property="og:description" content="${bQ(W)}" />`,`<meta property="og:url" content="${bQ(J)}" />`,`<meta property="og:image" content="${bQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${bQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${bQ(K)}" />`,`<meta name="twitter:description" content="${bQ(W)}" />`,`<meta name="twitter:image" content="${bQ(N)}" />`,`<meta name="twitter:image:alt" content="${bQ(H)}" />`,`<link rel="canonical" href="${bQ(J)}" />`,`<link rel="icon" href="${bQ(Q)}" sizes="any" />`].join(`
|
|
2716
|
+
Respond with the structured verdict and a short reason.`,cS$;var dS$=B(()=>{k4();Nw();E$1();Ye4=z$1.object({requiresReview:z$1.boolean().describe("true if the changes should go through pull-request review"),reason:z$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});cS$={requiresReview:!1,reason:""}});function Ne4($){if(!$||$.includes(".."))return!1;return We4.test($)}function mS$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ne4(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function iS$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var We4;var nS$=B(()=>{We4=/^[\w./@-]+$/});function j$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 pS$($,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 tS$($,Z,X,G){if(!G.connectionId)throw new Bg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Q=$.organization?.id;if(!Q)throw new Bg(h7);await OG0({ctx:$,connectionId:G.connectionId,organizationId:Q,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:h7;throw new Bg(F)}});let{cloneUrl:Y,gitUserName:J,gitUserEmail:K}=await jy(G.connectionId,G.owner,G.name,$.db,$.vault),W=RE0($),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 aw(N,He4).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var He4=10485760,Bg;var oS$=B(()=>{eU();F$1();vp();BG0();Bg=class Bg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Ue4($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Fe4.test(Z))throw Error(`Invalid branch name: ${$}`)}function UC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Oe4)])}function wC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function P$1($,Z){let G=(IE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Q=G.catch(()=>{});return IE0.set($,Q),Q.finally(()=>{if(IE0.get($)===Q)IE0.delete($)}),G}async function kZ($,Z,X){let G=wC($);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",...vQ}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?De4(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...vQ}})};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 De4($){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 qE0($,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 Le4($){return sS$.includes($)}var Fe4,rS$=524288,we4=65536,Oe4=1e4,aS$=2000,Be4,IE0,vQ,sS$,eS$=()=>{let $=new E1;return $.use("/:virtualMcpId/:branch/*",Be4),$.post("/:virtualMcpId/:branch/write",(Z)=>kZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>kZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>kZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>kZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>kZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>kZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:UC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>kZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:UC(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||!Le4(X))return Z.json({error:`step must be one of: ${sS$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Q=$0(Z.var.studioContext),Y=p90(G.virtualMcpMetadata);try{await wG0({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 VH(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 fS$(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(aS$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>kZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(aS$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>kZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=wC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Q,connectionIds:Y}=Z.get("vmClaim"),J=Z.var.studioContext;return P$1(G,async()=>{try{await U$1(J,X,G);let K=pS$(Q,Y);if(K)await tS$(J,X,G,K)}catch(K){if(K instanceof Bg)return Z.json({error:K.message},403,vQ);let W=K instanceof Error?K.message:String(K);return Z.json({error:W},502,vQ)}return kZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return P$1(X,()=>kZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=wC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Q=Z.var.studioContext;return P$1(G,async()=>{try{await U$1(Q,X,G)}catch(Y){let J=Y instanceof Error?Y.message:String(Y);return Z.json({error:J},502,vQ)}return kZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",H7({maxSize:rS$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=wC(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]=B$1(W)&&H?[W,N]:await Promise.all([qE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),qE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await uS$(J,F,U);return Z.json(w,200,vQ)}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,vQ);return Z.json({error:W},502,vQ)}}),$.post("/:virtualMcpId/:branch/git/judge-review",H7({maxSize:rS$,onError:(Z)=>Z.json({error:"Payload too large"},413,vQ)}),async(Z)=>{let X=wC(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]=B$1(W)&&H?[W,N]:await Promise.all([qE0(X,G,"/_sandbox/git/status","GET",{userId:Q,projectRef:Y}),qE0(X,G,"/_sandbox/git/diff","GET",{userId:Q,projectRef:Y})]),w=await lS$(J,F,U,typeof K.language==="string"?K.language:void 0);return Z.json(w,200,vQ)}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,vQ);return Z.json({error:W},502,vQ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=wC(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=j$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:we4,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=wC(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=mS$(Y);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let K=iS$(Q,J.resolveType),W=j$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 $V$=B(()=>{i8();GC();Og();CS$();HH();vS$();gL();yy();bS$();xS$();vr0();Dn();E$1();dS$();nS$();oS$();Fe4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Be4=VS$(async($,Z)=>{let X=$.var.studioContext;try{J0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=B1(X);if(!G)return $.json({error:"Unauthorized"},401);let Q;try{Q=$0(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{Ue4(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=Cp({orgId:Q.id,virtualMcpId:Y,branch:J}),N=await yL(X,J,G),H=_S$({userId:N,projectRef:W},J),F=K.metadata??null,U;try{U=(await j3(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()});IE0=new Map;vQ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};sS$=["clone","install","start"]});var ZV$=($)=>{let Z=new E1;if(Z.use("*",XC),Z.route("/",cL0()),Z.route("/",Lq$()),Z.route("/",LS$()),Z.route("/",BS$()),Z.route("/",PE0()),Z.route("/tools",RS$()),Z.route("/",PS$()),Z.route("/",ek$({kvStorage:$.kvStorage})),Z.route("/",ak$()),Z.route("/fs",HS$({getConnection:$.getNatsConnection})),Z.route("/sandbox",eS$()),Z.route("/",US$()),Z.route("/deco-sites",dL0()),Z.route("/sso",$L0()),Z.route("/",AE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Hq$()),$.mountDevAssets)Z.route("/dev-assets",mL0({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("/",Va1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp",a90()),Z.route("/mcp/self",jE0()),Z.route("/mcp",$Z0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var XV$=B(()=>{i8();_01();Fq$();y01();iL0();At();V01();sk$();$S$();FS$();Ni();Re0();ZZ0();Q$1();wS$();DS$();ES$();AS$();J$1();IS$();K$1();s90();$V$()});function ze4($){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 je4($,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(Ee4)});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 Ee4=1e4,Pe4=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},GV$=()=>{let $=new E1;return $.use("*",Pe4),$.get("/",async(Z)=>{let X=m0(),G=X.decoSupabaseUrl,Q=X.decoSupabaseServiceKey;if(!G||!Q)return Z.json({apps:[]});try{let Y=await je4(G,Q);return Z.json({apps:ze4(Y)})}catch(Y){return console.error("[deco-apps] GET error:",Y),Z.json({error:"Failed to fetch apps"},502)}}),$};var QV$=B(()=>{i8();k$()});import{z as I1}from"zod";function FW($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Ce4($){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 _e4($,Z,X){try{return JSON.parse($)}catch{throw new KV$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function ve4($){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:_e4(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 be4($){let Z=$.map((X)=>{let G=X.function.parameters?FQ(X.function.parameters):FQ({type:"object",properties:{}});return[X.function.name,V$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function fe4($){if(!$)return;return{openai:{response_format:$}}}function xe4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function YV$($,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 JV$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ae4=256,Te4,Re4,Ie4,qe4,Me4,ke4,Se4,Ve4,KV$,WV$,NV$;var HV$=B(()=>{k4();i8();Og();eN();Te4=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),Re4=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),Ie4=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(Re4).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),qe4=I1.object({type:I1.literal("text")}),Me4=I1.object({type:I1.literal("json_object")}),ke4=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()})}),Se4=I1.union([qe4,Me4,ke4]),Ve4=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(Ie4),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(Te4).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:Se4.optional(),user:I1.string().optional()});KV$=class KV$ extends Error{constructor($){super($);this.name="MessageConversionError"}};WV$=new E1;WV$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(FW("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(FW("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(FW("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Q=Ve4.safeParse(G);if(!Q.success){let L=Q.error.issues[0]??{message:"Invalid request",path:[]};return $.json(FW(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Y=Q.data,J=Ce4(Y.model);if(!J)return $.json(FW("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)=>IB(z.providerId));if(!E)return $.json(FW("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(FW(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(W),F=ve4(Y.messages),U=Y.tools?be4(Y.tools):void 0,w=fe4(Y.response_format),O=xe4(),D=Math.floor(Date.now()/1000);if(Y.stream)return VH($,async(L)=>{let E=YV$(H,F,U,Y,w,$.req.raw.signal);try{let z=Dw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let C=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{content:C},finish_reason:null}]})})};for await(let C of z.fullStream){if(!j&&(C.type==="text-delta"||C.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(C.type==="text-delta"){if(P+=C.text,P.length>=Ae4)await q()}else if(C.type==="tool-call"){await q();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:C.toolCallId,type:"function",function:{name:C.toolName,arguments:JSON.stringify(C.input)}}]},finish_reason:null}]})})}else if(C.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Y.model,choices:[{index:0,delta:{},finish_reason:JV$(C.finishReason)}],usage:C.totalUsage?{prompt_tokens:C.totalUsage.inputTokens??0,completion_tokens:C.totalUsage.outputTokens??0,total_tokens:C.totalUsage.totalTokens??0}:void 0})})}await q(),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=YV$(H,F,U,Y,w,$.req.raw.signal),E=await Ow(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:JV$(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(FW("Request aborted","invalid_request_error"),400);if(Q.name==="MessageConversionError")return $.json(FW(Q.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Q.message,Q.stack),$.json(FW(Q.message,"server_error"),500)}});NV$=WV$});var UV$;var FV$=B(()=>{UV$={name:"decocms",version:"4.163.2",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 he4(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ge4}}var wV$,ge4="https://ph.studio.decocms.com",OV$;var BV$=B(()=>{i8();UC0();aV();wZ();k$();ze0();FV$();wV$=new E1;wV$.get("/",($)=>{let Z={version:UV$.version,theme:JM1(),...vB().logo&&{logo:vB().logo},...QW()&&{internalUrl:P00()},...m0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!m0().firecrawlApiKey,auth:ET$(),posthog:he4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!QW()&&m0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});OV$=wV$});function Dg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function A$1($){return(Dg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function LV$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Dg($))}&sz=${Z}`}function DV$($,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 EV$($){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()?DV$(`${Q.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):DV$(`How does ${X} really perform? ${J}`,200);return{title:Y,description:K}}import{z as c0}from"zod";var OC,ue4,ce4,le4,de4,zV$;var jV$=B(()=>{OC=c0.enum(["good","bad","neutral"]),ue4=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:OC.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 $})),ce4=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(ue4)),le4={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()},de4=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:OC.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:OC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:OC.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:OC.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(ce4).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:OC.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:OC.optional()})).min(1)})]),zV$=c0.object({...le4,template:de4})});function ME0($){let Z=[],X=[...$.sections].sort((G,Q)=>G.position-Q.position).map((G)=>{let Q=zV$.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 T$1=B(()=>{jV$()});import{join as PV$}from"path";async function ie4($){try{let Z=await fetch(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(me4)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=ME0(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()||A$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Q?.annotation?.trim()||Q?.headline?.trim()||void 0}}catch{return null}}function bQ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ne4($,Z){let X=Dg($),G=Z?.brand?.trim()||A$1(X),Q=LV$(X,128),J=`${(m0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:K,description:W}=EV$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${bQ(K)}</title>`,`<meta name="description" content="${bQ(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="${bQ(K)}" />`,`<meta property="og:description" content="${bQ(W)}" />`,`<meta property="og:url" content="${bQ(J)}" />`,`<meta property="og:image" content="${bQ(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${bQ(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${bQ(K)}" />`,`<meta name="twitter:description" content="${bQ(W)}" />`,`<meta name="twitter:image" content="${bQ(N)}" />`,`<meta name="twitter:image:alt" content="${bQ(H)}" />`,`<link rel="canonical" href="${bQ(J)}" />`,`<link rel="icon" href="${bQ(Q)}" sizes="any" />`].join(`
|
|
2718
2717
|
`)}function pe4($,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}
|
|
2719
2718
|
</head>`)}function AV$($){let Z=new E1;return Z.get("/:domain/og.png",async(X)=>{let G=Dg(X.req.param("domain")),Q=async()=>{let Y=$?Bun.file(PV$($,"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(`${eQ({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(te4)}),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=86400"})}catch{return Q()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Q=$?PV$($,"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 ie4(Dg(G)),W=ne4(G,K);return X.html(pe4(J,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var me4=2500,te4=1e4;var TV$=B(()=>{i8();T$1();SF();k$()});function ot($,Z){return fetch(`${eQ({})}${$}`,Z)}async function oe4($,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 ot(`/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}=ME0(J);return{status:K.slides.length?"ready":"empty",deck:K,scanned_at:J.scanned_at,drops:W}}var re4,BC,RV$;var IV$=B(()=>{i8();AY();SF();T$1();re4=new Set(["complete","errored","terminated","unknown"]),BC=new E1;BC.use("*",async($,Z)=>{let X=await B8.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});BC.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 oe4(Z,X,G);return $.header("Cache-Control","private, no-store"),$.json(Q)}catch{return $.json({error:"report read failed"},502)}});BC.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 ot("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${MB({})}`},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)}});BC.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await ot(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${MB({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Q=(await X.json()).status??"unknown",Y={done:re4.has(Q),status:Q};return $.json(Y)}catch{return $.json({error:"status failed"},502)}});BC.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await ot(`/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)}});BC.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await ot(`/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:[]})}});RV$=BC});import{createHmac as ae4,timingSafeEqual as se4}from"crypto";function qV$($,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)>ee4)return!1;let K=ae4("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&&se4(W,H)})}function MV$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=dY(Z),G=dY(dY(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:lY(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 $06($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function lY($){return typeof $==="string"?$:void 0}function dY($){return typeof $==="object"&&$!==null?$:void 0}function kE0($){return typeof $==="number"?new Date($*1000):null}function q$1($){return lY($)??lY(dY($)?.id)}function Z06($){return q$1($.subscription)??lY(dY(dY($.parent)?.subscription_details)?.subscription)}function X06($){let Z=kE0($.current_period_end);if(Z)return Z;let X=dY($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Q of X){let Y=dY(Q)?.current_period_end;if(typeof Y==="number"&&Y>G)G=Y}return G>0?new Date(G*1000):null}function R$1($,Z){let X=kE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function I$1($,Z){let X=kE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function G06($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=lY(dY(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(lY(dY(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(lY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let K=lY(X.id);if(!K)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(dY(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:dY(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${K}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(lY(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Q=await $.getBilling(G);if(!Q)return{handled:!1,reason:"unknown org"};if(Q.legacy||Q.billingMode!=="self_serve")return console.error("stripe webhook: refused checkout bind",{organizationId:G,eventId:Z.id,legacy:Q.legacy,billingMode:Q.billingMode}),{handled:!1,reason:"org is not self-serve"};let Y=q$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(R$1(Z,Q))return{handled:!1,reason:"stale event"};let J=`stripe-checkout:${lY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(G,{stripeCustomerId:q$1(X.customer),stripeSubscriptionId:Y,status:"active",benefitsReferenceId:J,lastStripeEventAt:I$1(Z,Q)}),{handled:!0,organizationId:G,benefitsReferenceId:J}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=lY(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&&R$1(Z,Q))return{handled:!1,reason:"stale event"};let J=Y?"canceled":$06(X.status),K=X06(X),W=`stripe-sub:${G}:${J}:${K?.getTime()??0}`;return await $.updateStripeState(Q.organizationId,{status:J,currentPeriodEnd:K,...Y&&{stripeSubscriptionId:null},benefitsReferenceId:W,lastStripeEventAt:I$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:W}}case"invoice.paid":{let G=Z06(X);if(!G)return{handled:!1,reason:"no sub id"};let Q=await $.getBillingByStripeSubscriptionId(G);if(!Q)return{handled:!1,reason:"unknown subscription"};if(R$1(Z,Q))return{handled:!1,reason:"stale event"};let Y=`stripe-invoice:${lY(X.id)??crypto.randomUUID()}`;return await $.updateStripeState(Q.organizationId,{status:"active",currentPeriodEnd:kE0(X.period_end),benefitsReferenceId:Y,lastStripeEventAt:I$1(Z,Q)}),{handled:!0,organizationId:Q.organizationId,benefitsReferenceId:Y}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function Y06($,Z){let[X,G]=await Promise.all([$.getBilling(Z),$.listPaidSeatUserIds(Z)]);if(!Zv(X))return;if(await P0$({subscriptionId:X.stripeSubscriptionId,targetQuantity:G.length}))console.error("stripe webhook: reconciled diverged seat quantity",{organizationId:Z,targetQuantity:G.length})}async function kV$($){let Z=new oW(C8().db),X=await G06(Z,$);if(X.handled&&X.topUp)await oI1({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(X.handled&&X.benefitsReferenceId)try{await ZN(X.organizationId,X.benefitsReferenceId,"apply")}catch(G){console.error("Failed to enqueue benefit sync (sweep covers):",G)}if(X.handled&&Q06.has($.type))try{await Y06(Z,X.organizationId)}catch(G){console.error("Failed to reconcile seat quantity (next cycle):",G)}if(!X.handled&&X.orphanSubscriptionId)try{await j0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof DG&&(G.status===400||G.status===404)))throw G}return X}var ee4=300,Q06;var SV$=B(()=>{sG();m_();$x();ce();Xv();Q06=new Set(["checkout.session.completed","checkout.session.async_payment_succeeded","invoice.paid"])});var J06=1048576,M$1;var VV$=B(()=>{i8();GC();k$();SV$();M$1=new E1;M$1.post("/webhook",H7({maxSize:J06,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=m0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!qV$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Q=MV$(X);if(!Q)return $.json({error:"invalid payload"},400);let Y=await kV$(Q);return console.log("stripe webhook",{eventId:Q.id,type:Q.type,livemode:Q.livemode,...Y}),$.json({received:!0})})});function CV$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var _V$,K06,W06,vV$;var bV$=B(()=>{i8();DJ();dy();Qv();_V$=new E1,K06=["range","if-none-match","if-modified-since"],W06=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];_V$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ay($))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 Ot(G,Z);if(!Q)throw new X$(503,{message:"Object storage not configured"});if(Q.startsWith("data:")&&BJ()){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 CV$(U,N),new Response(F,{status:200,headers:U})}let Y=new Headers;for(let W of K06){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 W06){let N=J.headers.get(W);if(N)K.set(W,N)}return K.set("Cache-Control","private, max-age=86400"),CV$(K,K.get("content-type")??""),new Response(J.body,{status:J.status,headers:K})});vV$=_V$});var rt=V((DC)=>{var N06=DC&&DC.__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]}),H06=DC&&DC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))N06(Z,$,X)};Object.defineProperty(DC,"__esModule",{value:!0});H06(dG(),DC)});var yV$=V((fV$)=>{Object.defineProperty(fV$,"__esModule",{value:!0});fV$.version=void 0;fV$.version="3.4.0"});var uV$=V((UW)=>{var F06=UW&&UW.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(UW,"__esModule",{value:!0});UW.NodeTransport=UW.VERSION=void 0;UW.nodeResolveHost=L06;var x6=rt(),U06=j0("net"),k$1=j0("tls"),w06=j0("path"),gV$=j0("fs"),O06=F06(j0("dns")),B06=yV$();UW.VERSION=B06.version;var D06="nats.js";class hV${socket;version;lang;yields=[];signal=(0,x6.deferred)();closedNotification=(0,x6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=D06,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,x6.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 x6.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 x6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Y,K=J==="ECONNREFUSED"?new x6.errors.ConnectionError("connection refused",{cause:Y}):Y;throw this.socket?.destroy(),K}}dial($){let Z=(0,x6.deferred)(),X,G=(0,U06.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,x6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=x6.DataBuffer.concat(...this.yields),Q=(0,x6.extractProtocolMessage)(G);if(Q!=="")try{let Y=x6.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,x6.deferred)();try{if($=(0,w06.resolve)($),!(0,gV$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,gV$.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,x6.extend)(X,this.options.tls,Q)}catch(Q){return Promise.reject(new x6.errors.ConnectionError(Q.message,{cause:Q}))}let G=(0,x6.deferred)();try{let Q=(0,k$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 x6.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,x6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new x6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,x6.deferred)();try{let G=(0,k$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 x6.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,x6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,x6.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 k$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,x6.render)($)}`);let Z=(0,x6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,x6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,x6.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=hV$;function L06($){let Z=(0,x6.deferred)();return O06.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 iV$=V((mV$)=>{Object.defineProperty(mV$,"__esModule",{value:!0});mV$.connect=E06;var cV$=uV$(),lV$=rt(),dV$=rt();function E06($={}){if((0,dV$.hasWsProtocol)($))return Promise.reject(dV$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,lV$.setTransportFactory)({factory:()=>{return new cV$.NodeTransport},dnsResolveFn:cV$.nodeResolveHost}),lV$.NatsConnectionImpl.connect($)}});var nV$=V((CH)=>{var j06=CH&&CH.__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]}),P06=CH&&CH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))j06(Z,$,X)};Object.defineProperty(CH,"__esModule",{value:!0});CH.connect=void 0;var A06=iV$();Object.defineProperty(CH,"connect",{enumerable:!0,get:function(){return A06.connect}});P06(rt(),CH)});function rV$($){let Z=$?.connectFn??q06,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:I06,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=yG(R06,T06,O-1,2,0.5);await V8(D)}}return{init(U,w){if(Q)return;Q=!0,Y=!1;let O=w?.creds?pV$.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=oV$.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 q06($){return tV$.connect($)}var pV$,tV$,oV$,T06=100,R06=3000,I06=3000;var aV$=B(()=>{C5();pV$=M(dg(),1),tV$=M(nV$(),1),oV$=M(bO(),1)});function S$1($,Z){return`${$}.${Z}`}class V$1{cache;constructor($){this.cache=Dy({ttlMs:$?.ttlMs??M06,maxSize:$?.maxSize??k06})}async get($,Z){return this.cache.get(S$1($,Z))??null}async set($,Z,X){this.cache.set(S$1($,Z),X)}async invalidate($,Z){this.cache.delete(S$1($,Z))}teardown(){this.cache.clear()}}var M06=600000,k06=5000;var sV$=()=>{};function SE0($,Z){return`${$}:${Z}`}function C$1($){let Z=Dy({ttlMs:$?.ttlMs??S06,maxSize:$?.maxSize??V06}),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(eV$,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(SE0(W,N))},set(W,N,H){Z.set(SE0(W,N),H)},invalidate(W,N){Z.delete(SE0(W,N)),K(W,N)},start(){if(J)return;let W=X?.();if(!W)return;J=W.subscribe(eV$),(async()=>{for await(let N of J)try{let H=JSON.parse(Y.decode(N.data));if(H.originId===G)continue;Z.delete(SE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var eV$="studio.ai-provider-keys.invalidate",S06=30000,V06=5000;var $C$=()=>{};class _$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=ZC$.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 ZC$)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 ZC$;var XC$=B(()=>{ZC$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var GC$=($)=>{let Z;return()=>Z??=$()},v$1,b$1;var QC$=B(()=>{X5();v$1=GC$(()=>Q8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),b$1=GC$(()=>Q8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function y06(){return{name:tN,subjects:[`${N90}.>`],storage:T3.StorageType.File,max_age:v06,max_bytes:f06,max_msgs_per_subject:x06,discard:T3.DiscardPolicy.Old,retention:T3.RetentionPolicy.Limits,duplicate_window:b06,num_replicas:1}}class KC${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 YC$($){let Z=JC$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function c06($,Z){let X=0;return{publish(G,Q,Y,J){G.publish(Q,Y,J?{headers:J}:void 0).catch((K)=>{if(X++,_06().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 l06($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class f$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=y06(),X=await gG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await T3.jetstreamManager($);try{await G.streams.info(tN),await G.streams.update(tN,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(tN),await G.streams.add(Z);else throw Q}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:l06});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=c06(Z,G),J=!1,K=()=>{if(J)return;J=!0;let N=W6$(Z);Q.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",K,{once:!0});let W=(N)=>{let H=performance.now(),F=cd0(N,{runId:Z}),U=performance.now()-H;if(v$1().record(U),b$1().add(1,{"org.id":G??"unknown"}),u06?.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?YC$(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(),h06)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=cd0(Z,{runId:$,dedup:X});if(v$1().record(performance.now()-Q),b$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:YC$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Q=K6$({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=Lw($),K;try{K=await(await G.consumers.get(tN,{filter_subjects:J,deliver_policy:Q})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=O90({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(H90()).pipeThrough(F90()).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(tN,{filter:Lw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var T3,JC$,C06=($)=>{let Z;return()=>Z??=$()},_06,v06=86400000000000,b06=120000000000,f06=4294967296,x06=500000,g06,h06,u06;var WC$=B(()=>{C5();ld0();B90();U90();X5();QC$();T3=M(bO(),1),JC$=M(dg(),1),_06=C06(()=>Q8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));g06=process.env.STREAM_ENCODE_TRACE==="1",h06=process.env.DECOPILOT_STREAM_TRACE==="1";u06=g06?new KC$:null});function VE0($,Z,X,G){if(!G)return!1;return $.emit(Z,c3(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 NC$=B(()=>{U8()});class x$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 d06,rm as CE0}from"fs/promises";import{join as _E0}from"path";async function vE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-m06),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await LC($);for(let Q of G)if(/^\d{4}$/.test(Q))X+=await HC$($,Q,Z);else if(!Q.startsWith(".")){let Y=_E0($,Q),J=await LC(Y);for(let W of J){if(!/^\d{4}$/.test(W))continue;X+=await HC$(Y,W,Z)}if((await LC(Y)).length===0)await CE0(Y,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function HC$($,Z,X){let G=0,Q=_E0($,Z),Y=await LC(Q);for(let K of Y){if(!/^\d{2}$/.test(K))continue;let W=_E0(Q,K),N=await LC(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=_E0(W,F);await CE0(w,{recursive:!0,force:!0}),G++}}if((await LC(W)).length===0)await CE0(W,{recursive:!0,force:!0})}if((await LC(Q)).length===0)await CE0(Q,{recursive:!0,force:!0});return G}async function LC($){try{return(await d06($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var m06=30;var y$1=()=>{};import{DBOS as g$1,SchedulerMode as i06}from"@dbos-inc/dbos-sdk";async function p06(){let $=[nY(),EC(),BW()],Z=0;for(let X of $)try{Z+=await vE0(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 t06($,Z){await g$1.runStep(()=>p06(),{name:"monitoringRetention"})}function UC$(){if(FC$)return;FC$=!0;let $=g$1.registerWorkflow(t06,{name:"monitoringRetentionWorkflow"});g$1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:n06,mode:i06.ExactlyOncePerIntervalWhenActive})}var n06="23 4 * * *",FC$=!1;var wC$=B(()=>{hG();y$1()});function OC$($){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 aU.create();Q.auth.user={id:X,role:G.role},Q.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Y=await au0($.db,Z,G.role);return Q.boundAuth=ru0({auth:Q.authInstance,headers:new Headers,role:G.role,permissions:Y,userId:X}),Q.access=new VD(X,void 0,Q.boundAuth,G.role,"self"),n60(Q,{id:G.orgId,slug:G.orgSlug}),Q}}var BC$=B(()=>{CD();Ji()});function o06(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function a06(){for(let $ of r06)$()}function DC$($){let Z=[...h$1.logs,$];h$1={...h$1,logs:Z.length>500?Z.slice(-500):Z},a06()}function u$1(){return s06}var h$1,r06,s06=!1;var c$1=B(()=>{h$1=o06(),r06=new Set});import{EventEmitter as e06}from"events";var l$1;var LC$=B(()=>{c$1();l$1=new e06;l$1.on("request",($)=>{DC$($)})});function EC$(){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=Lg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Lg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Y=`${m6.tool}${w}${m6.dim}(${L})${m6.reset}`}else if(U.method)Y=`${m6.dim}${Lg(U.method)}${m6.reset}`}}catch{}}let K=Lg(Q);if(Q.startsWith("/mcp/conn_")){let H=Q.split("/")[2]??"";K=`/mcp/${m6.mcp}${Lg(H.slice(0,12))}\u2026${m6.reset}`}else if(Q==="/mcp")K=`${m6.mcp}/mcp${m6.reset}`;else if(Q==="/mcp/registry")K=`${m6.mcp}/mcp/registry${m6.reset}`;let W=Z16(G),N=J?"\u25C0":"\u2190";if(!u$1())console.log(`${m6.dim}${N}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=$16(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!u$1())console.log(`${m6.dim}${O}${m6.reset} ${W}${G}${m6.reset} ${K}${Y?` ${Y}`:""} ${U}${F}${m6.reset} ${m6.duration}${w}${m6.reset}`);l$1.emit("request",{method:G,path:Lg(Q),status:F,duration:H,timestamp:new Date})}}}var m6,$16=($)=>{if($>=500)return m6.serverError;if($>=400)return m6.clientError;if($>=300)return m6.redirect;return m6.ok},Z16=($)=>{return m6[$]||m6.reset},Lg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var zC$=B(()=>{c$1();LC$();m6={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 TC$}from"crypto";import{mkdir as X16,readdir as G16,rm as jC$,stat as RC$}from"fs/promises";import{join as m$1,relative as Q16}from"path";import{z as B$}from"zod";function qC$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return m$1(Y16,Z)}function MC$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function d$1($,Z){let X=qC$($),G=MC$(Z);return m$1(X,G)}function J16($,Z,X,G){let Q=m0().encryptionKey||"dev-secret",Y=`${$}:${Z}:${X}:${G}`;return TC$("sha256",Q).update(Y).digest("hex")}function AC$($,Z,X,G,Q){let Y=Math.floor(Date.now()/1000)+G,J=J16(Z,X,Y,Q),K=new URL(`/api/dev-assets/${Z}/${MC$(X)}`,$);return K.searchParams.set("expires",Y.toString()),K.searchParams.set("signature",J),K.searchParams.set("method",Q),K.toString()}function kC$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${TC$("md5","etag").update(G).digest("hex")}"`}async function SC$($,Z,X,G,Q){try{let Y=await G16($,{withFileTypes:!0});for(let J of Y){let K=m$1($,J.name),N=Q16(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 SC$(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 RC$(K);Q.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:kC$(K,H.mtime,H.size)})}catch{}}}}catch{}}function VC$($,Z){let G=$0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:B$.object({prefix:B$.string().optional(),maxKeys:B$.number().optional().default(1000),continuationToken:B$.string().optional(),delimiter:B$.string().optional()}),outputSchema:B$.object({objects:B$.array(B$.object({key:B$.string(),size:B$.number(),lastModified:B$.string(),etag:B$.string()})),nextContinuationToken:B$.string().optional(),isTruncated:B$.boolean(),commonPrefixes:B$.array(B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=Y.prefix||"",K=Y.maxKeys??1000,W=Y.delimiter,N=Y.continuationToken,H=qC$(G);await X16(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await SC$(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:B$.object({key:B$.string()}),outputSchema:B$.object({contentType:B$.string().optional(),contentLength:B$.number(),lastModified:B$.string(),etag:B$.string(),metadata:B$.record(B$.string(),B$.string()).optional()}),handler:async(Q)=>{let Y=Q,J=d$1(G,Y.key),K=await RC$(J);return{contentType:h01(Y.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:kC$(J,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:B$.object({key:B$.string(),expiresIn:B$.number().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??PC$;return{url:AC$(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:B$.object({key:B$.string(),expiresIn:B$.number().optional(),contentType:B$.string().optional()}),outputSchema:B$.object({url:B$.string(),expiresIn:B$.number()}),handler:async(Q)=>{let Y=Q,J=Y.expiresIn??PC$;return{url:AC$(Z,G,Y.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:B$.object({key:B$.string()}),outputSchema:B$.object({success:B$.boolean(),key:B$.string()}),handler:async(Q)=>{let Y=Q,J=d$1(G,Y.key);try{return await jC$(J),{success:!0,key:Y.key}}catch{return{success:!1,key:Y.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:B$.object({keys:B$.array(B$.string()).max(1000)}),outputSchema:B$.object({deleted:B$.array(B$.string()),errors:B$.array(B$.object({key:B$.string(),message:B$.string()}))}),handler:async(Q)=>{let Y=Q,J=[],K=[];return await Promise.all(Y.keys.map(async(W)=>{let N=d$1(G,W);try{await jC$(N),J.push(W)}catch(H){K.push({key:W,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:K}}}]}async function i$1($,Z,X){let G=VC$(Z,X),Q=new ON({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of G){let K="shape"in J.inputSchema?J.inputSchema.shape:B$.object({}).shape,W=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:B$.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 AQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Q.connect(Y),yK(Q,Y,$,"mcp:dev-assets")}async function CC$($,Z,X,G){let Y=VC$(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 Y16="./data/assets",PC$=3600,IC$,_C$;var vC$=B(()=>{k$();Fn();i8();ic();zx();PX();iL0();IC$=new E1;IC$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return i$1($.req.raw,Z,G)});_C$=IC$});var bC$={};W4(bC$,{mountDevRoutes:()=>K16});function K16($,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 i$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 CC$(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",_C$);let X=new E1;X.use("*",P3({mountPath:"/api/dev-assets"})),X.route("/",mL0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var fC$=B(()=>{i8();C01();iL0();vC$()});import{sql as W16}from"kysely";import{randomUUID as xC$}from"crypto";import{z as N16}from"zod";async function F16($){let Z=new Date().toISOString(),X=xC$(),G=f4.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:xC$(),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 W16`SELECT
|
|
2720
2719
|
pg_notify('studio_events', ${X}),
|