decocms 4.205.1 → 4.205.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-CwMegZoT.js → AlertCircle-DT4ogH7T.js} +1 -1
- package/dist/client/assets/{AreaChart-BJo9IqDZ.js → AreaChart-CUMoC-gq.js} +1 -1
- package/dist/client/assets/{ArrowLeft-vR1tssES.js → ArrowLeft-BBoCs-vs.js} +1 -1
- package/dist/client/assets/{ArrowUp-DOw2yZqo.js → ArrowUp-fFQOhYSl.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-B0A7d5n3.js → ArrowUpRight-BGE42lZT.js} +1 -1
- package/dist/client/assets/{Check-DMpoRsrF.js → Check-CwoDm-BZ.js} +1 -1
- package/dist/client/assets/{CheckCircle-DTTE6MpM.js → CheckCircle-BifN-c-M.js} +1 -1
- package/dist/client/assets/{ChevronDown-5atPDaQl.js → ChevronDown-IMS4VarS.js} +1 -1
- package/dist/client/assets/{ChevronRight-CT8dbaPA.js → ChevronRight-DwwxMXbJ.js} +1 -1
- package/dist/client/assets/{ChevronUp-BvLx59gN.js → ChevronUp-5rvpPh6i.js} +1 -1
- package/dist/client/assets/{Copy01-DTuZ0kjc.js → Copy01-C8K4qVaI.js} +1 -1
- package/dist/client/assets/{CpuChip01-C8DQ7k7v.js → CpuChip01-BHB5Svc8.js} +1 -1
- package/dist/client/assets/{CreditCard01-CCrWov5d.js → CreditCard01-BN45_sIz.js} +1 -1
- package/dist/client/assets/{DotsVertical-D8rqygCU.js → DotsVertical-B9CpFwiR.js} +1 -1
- package/dist/client/assets/{Eye-C3hS2uua.js → Eye-BRmj20OZ.js} +1 -1
- package/dist/client/assets/{FilterLines-DpH7Of5i.js → FilterLines-C_jqY_xU.js} +1 -1
- package/dist/client/assets/{Globe01-V9fa0k1_.js → Globe01-Ddac6lPc.js} +1 -1
- package/dist/client/assets/{Globe04-JLlm86A-.js → Globe04-Du0b80Uv.js} +1 -1
- package/dist/client/assets/{HardDrive-aTteyFC1.js → HardDrive-D_c-C6Eg.js} +1 -1
- package/dist/client/assets/{Key01-DDn6neQd.js → Key01-B22jC5bn.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CZ0NsETn.js → LayoutLeft-C20sxRVe.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BQ6ioy13.js → LinkExternal01-BDouqx5Q.js} +1 -1
- package/dist/client/assets/{LogOut01-38zM6Sg1.js → LogOut01-DXL6_Qr2.js} +1 -1
- package/dist/client/assets/{Monitor01-D6sM3LT4.js → Monitor01-C7QRCXPb.js} +1 -1
- package/dist/client/assets/{Palette-d1lf9wnp.js → Palette-tMKRKQFl.js} +1 -1
- package/dist/client/assets/{Play-8kpsjOuB.js → Play-UTlssgLs.js} +1 -1
- package/dist/client/assets/{Plus-C262IMCE.js → Plus-Q1colDUQ.js} +1 -1
- package/dist/client/assets/{SearchLg-Cv3kXNhF.js → SearchLg-DJzGFa6n.js} +1 -1
- package/dist/client/assets/{SearchMd-70hNe4jU.js → SearchMd--SerfgxV.js} +1 -1
- package/dist/client/assets/{Settings02-fqyJZZBR.js → Settings02-Cr2gx_1C.js} +1 -1
- package/dist/client/assets/{Share07-DMx-n_BB.js → Share07-BQBk4G5H.js} +1 -1
- package/dist/client/assets/{Shield01-DVZrvFyF.js → Shield01-BsLY8Gmb.js} +1 -1
- package/dist/client/assets/{Star01-BT1eR0WA.js → Star01-PFFRv69z.js} +1 -1
- package/dist/client/assets/{Stars01-CA-Z1xgD.js → Stars01-Botvz2bI.js} +1 -1
- package/dist/client/assets/{Stars02-CWH_vqoG.js → Stars02-BobCFF3I.js} +1 -1
- package/dist/client/assets/{Sun-Hd-bzNDN.js → Sun-BuxyFxUr.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-zDsIQHTk.js → SwitchHorizontal01-BWjXGXL8.js} +1 -1
- package/dist/client/assets/{Tool01-DnJGb8Tm.js → Tool01-CIJcWYM8.js} +1 -1
- package/dist/client/assets/{Tool02-CICjp9wZ.js → Tool02-CwnG6aB4.js} +1 -1
- package/dist/client/assets/{Trash01-BD-_6YfL.js → Trash01-BAkKcs6B.js} +1 -1
- package/dist/client/assets/{TrendUp01-BPPgqMYM.js → TrendUp01-BKt75543.js} +1 -1
- package/dist/client/assets/{Upload01-C6XebHEp.js → Upload01-B_-YLTnI.js} +1 -1
- package/dist/client/assets/{User01-D-7fxE8s.js → User01-5DEVPoDT.js} +1 -1
- package/dist/client/assets/{Users01-D6neIHPG.js → Users01-A_RC1j2Z.js} +1 -1
- package/dist/client/assets/{Users03-CMdC8bFp.js → Users03-BztLJOTk.js} +1 -1
- package/dist/client/assets/{X-5cWfFurM.js → X-DWjGvs9Y.js} +1 -1
- package/dist/client/assets/{XCircle-CNxIdaXs.js → XCircle-zXn3UqPV.js} +1 -1
- package/dist/client/assets/{XClose-mchEejxX.js → XClose-DGX3A8va.js} +1 -1
- package/dist/client/assets/{Zap-CHWKX5FC.js → Zap-DQK6JCpg.js} +1 -1
- package/dist/client/assets/{ZapSquare-CSYgxLM0.js → ZapSquare-BMIe2avN.js} +1 -1
- package/dist/client/assets/{access-gate-BUKqorLU.js → access-gate-DAhgJpAk.js} +1 -1
- package/dist/client/assets/{agent-icon-PPJ-PY4I.js → agent-icon-C-DDTkgE.js} +1 -1
- package/dist/client/assets/{agents-list-4CR9dU1z.js → agents-list-Dy2PzAv4.js} +1 -1
- package/dist/client/assets/{ai-providers-BdikO0QI.js → ai-providers-DYnZorR6.js} +1 -1
- package/dist/client/assets/{alert-DWva8r95.js → alert-8VDkIqlq.js} +1 -1
- package/dist/client/assets/{alert-dialog-DiWnOI_-.js → alert-dialog-CfzGfedS.js} +1 -1
- package/dist/client/assets/{app-editor-D_Lbeplg.js → app-editor-DbMZu-gC.js} +1 -1
- package/dist/client/assets/{auth-DQUPKxF2.js → auth-D-LTL2HK.js} +1 -1
- package/dist/client/assets/{auth-catchall-D3JDqGo5.js → auth-catchall-CYmiRFqD.js} +1 -1
- package/dist/client/assets/{auth-entry-DYSqVNon.js → auth-entry-QkdvZK9K.js} +1 -1
- package/dist/client/assets/{auth-split-layout-o7c0EsgY.js → auth-split-layout-DxRv6e2h.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-56dXcFhu.js → authenticate-and-persist-oauth-Cm1Y0dlk.js} +1 -1
- package/dist/client/assets/{automation-list-row-D0hjgxSh.js → automation-list-row-Cu5DjMOZ.js} +1 -1
- package/dist/client/assets/{automation-runs-CZpVg96A.js → automation-runs-DqecvFb-.js} +1 -1
- package/dist/client/assets/{automations-BpeWPrGv.js → automations-LhZtItmx.js} +1 -1
- package/dist/client/assets/{avatar-CS9n_6qw.js → avatar-BZeVTTOK.js} +1 -1
- package/dist/client/assets/{badge-Dxt-Ks9r.js → badge-BPCpCm8-.js} +1 -1
- package/dist/client/assets/{billing-DQVosSgE.js → billing-B4mFcJs5.js} +1 -1
- package/dist/client/assets/{block-document-Dw040KP0.js → block-document-DRZuLa4u.js} +1 -1
- package/dist/client/assets/{brand-context-DhFTtk1Y.js → brand-context-DUBjWP_l.js} +1 -1
- package/dist/client/assets/{buckets-nya7bwxv.js → buckets-D_fCLOHz.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-Ddni0mWj.js → bulk-category-panel-qqpmkjYm.js} +1 -1
- package/dist/client/assets/{capability-load-error-tktsunqW.js → capability-load-error-CWZpHRnD.js} +1 -1
- package/dist/client/assets/{card-DfDlTt2i.js → card-DyDb4Jle.js} +1 -1
- package/dist/client/assets/{cards-BhdvNoQu.js → cards-C-CYIOTG.js} +1 -1
- package/dist/client/assets/{category-editor-D508pW_w.js → category-editor-CoDQwnKr.js} +1 -1
- package/dist/client/assets/{chat-context-BeoQ3zsQ.js → chat-context-BRGTVDoJ.js} +1 -1
- package/dist/client/assets/{checkbox-CasOOVtk.js → checkbox-DmQLUyKd.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DyRaR52C.js → cli-auth-success-CSSTROim.js} +1 -1
- package/dist/client/assets/{collection-detail-_Ilpz3e1.js → collection-detail-9_riYquc.js} +1 -1
- package/dist/client/assets/{collection-display-button-BrBpWHZ3.js → collection-display-button-BKNSmWCv.js} +1 -1
- package/dist/client/assets/{collection-search-DXcywpkT.js → collection-search-D7DLkxpI.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BtBiNL00.js → collection-table-wrapper-CUczGdsi.js} +1 -1
- package/dist/client/assets/{collection-tabs-DJzSsgQL.js → collection-tabs-BOt_tF0Z.js} +1 -1
- package/dist/client/assets/{command-BkgFyvtI.js → command-wAssRwCP.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-BAi0K1zl.js → commerce-onboarding-BKbKGvGk.js} +1 -1
- package/dist/client/assets/{connect-j4BqFf53.js → connect-a_Kc0mv-.js} +1 -1
- package/dist/client/assets/{connection-7m452ddr.js → connection-C8le19RQ.js} +1 -1
- package/dist/client/assets/{connection-card-Bxl4j9YE.js → connection-card-Cq1eoRdR.js} +1 -1
- package/dist/client/assets/{connection-detail-CYSHZeWy.js → connection-detail-uHt9VtRi.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Bsl4YuNL.js → connection-form-helpers-DCwoZRkE.js} +1 -1
- package/dist/client/assets/{connections-Bf3DcPUA.js → connections-DeZcofvR.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-D3pRDmBO.js → decopilot-sse-pool-DwvSnXbs.js} +1 -1
- package/dist/client/assets/{dialog-Fp5lYNIA.js → dialog-RctqmW5f.js} +1 -1
- package/dist/client/assets/{domain-settings-DpAfmTLU.js → domain-settings-BwEBfFTU.js} +1 -1
- package/dist/client/assets/{drawer-3bb91VKW.js → drawer-BL-rm4El.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DGoW0k6q.js → dropdown-menu-OZIKRhC6.js} +1 -1
- package/dist/client/assets/{empty-state-CHB589Im.js → empty-state-mluW8SPC.js} +1 -1
- package/dist/client/assets/{extract-connection-data-C5-1oHtH.js → extract-connection-data-DPY7WXBa.js} +1 -1
- package/dist/client/assets/{file-explorer-Bkyy4ror.js → file-explorer-BXu2FPoI.js} +1 -1
- package/dist/client/assets/{file-type-icon-BH8NLLf2.js → file-type-icon-CwcBsPQB.js} +1 -1
- package/dist/client/assets/{form-8YCGpVAg.js → form-ekTJ6dzg.js} +1 -1
- package/dist/client/assets/{general-B2mWiMCO.js → general-qziECEnS.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BzS6MrzY.js → github-repo-picker-7zVikfWX.js} +1 -1
- package/dist/client/assets/{hooks-B6ScbZWq.js → hooks-1YxcXvrI.js} +1 -1
- package/dist/client/assets/{index-E9jtWUQL.js → index-1-8hrBMG.js} +1 -1
- package/dist/client/assets/{index-5BUDi8T1.js → index-BPKD15i5.js} +1 -1
- package/dist/client/assets/{index-DURMQ-bj.js → index-BWvsPBN3.js} +1 -1
- package/dist/client/assets/{index-DGDDvdHv.js → index-BdmbzbDr.js} +44 -44
- package/dist/client/assets/{index-ACaa76fL.js → index-C1KPmxzw.js} +5 -5
- package/dist/client/assets/{index-BRlYOlPA.js → index-C4ProsEc.js} +1 -1
- package/dist/client/assets/{index-BeBdqE6c.js → index-CywUMbfX.js} +1 -1
- package/dist/client/assets/{index-DCzOebzy.js → index-DOD4Ev_Q.js} +1 -1
- package/dist/client/assets/{index-CdK3Webx.js → index-DiIx5Gvt.js} +1 -1
- package/dist/client/assets/{index-LGPGUi4U.js → index-UBYvdpKD.js} +1 -1
- package/dist/client/assets/{index-redirect-DDov1oYT.js → index-redirect-Bvjdilku.js} +1 -1
- package/dist/client/assets/{input-DKITayoD.js → input-CMXTf_xX.js} +1 -1
- package/dist/client/assets/{integration-icon-5UaVb6Hz.js → integration-icon-DeuW4yT1.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-Sx4_9Hin.js → invite-member-dialog-Lal4Zdch.js} +1 -1
- package/dist/client/assets/{label-DtGvW-rJ.js → label-CBGhn9yh.js} +1 -1
- package/dist/client/assets/{layout-DQcVTl7P.js → layout-tILx2JEG.js} +1 -1
- package/dist/client/assets/{login-Cnvvmt3p.js → login-Be_WWg4t.js} +1 -1
- package/dist/client/assets/{mcp-oauth-B3t3VPni.js → mcp-oauth-DJVZ4GGn.js} +1 -1
- package/dist/client/assets/{members-Cj9GncG0.js → members-Cz3YClTM.js} +1 -1
- package/dist/client/assets/{monaco-editor-B5g97WLU.js → monaco-editor-c2IpXYqZ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D0DLd8iM.js → monitoring-stats-row-DET-MJsD.js} +1 -1
- package/dist/client/assets/{multi-select-rEqKubpU.js → multi-select-hfhWOgV7.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DLGgaRYp.js → oauth-callback-ai-provider-DNSAjUPq.js} +1 -1
- package/dist/client/assets/{oauth-callback-BSr1Gbvk.js → oauth-callback-l7ucoTjw.js} +1 -1
- package/dist/client/assets/{onboarding-BlK9PA1U.js → onboarding-BwA88Pjz.js} +1 -1
- package/dist/client/assets/{org-layout-D4tQK8uG.js → org-layout-CC80_gVN.js} +1 -1
- package/dist/client/assets/{organization-choice-B5EXzLiF.js → organization-choice-2DzPnUz8.js} +1 -1
- package/dist/client/assets/{orgs-CRKrM747.js → orgs-Bqz-FijN.js} +1 -1
- package/dist/client/assets/{page-seo-form-DSITeEFI.js → page-seo-form-CdqBiIpP.js} +1 -1
- package/dist/client/assets/{popover-BUAb3HyX.js → popover-C0ce_fcK.js} +1 -1
- package/dist/client/assets/{post-editor-CHGKWeuB.js → post-editor-UlxOV2eD.js} +1 -1
- package/dist/client/assets/{primitives-CNniwpOF.js → primitives-C_Sw0giD.js} +1 -1
- package/dist/client/assets/{profile-DNUXCjEb.js → profile-GzGqsplI.js} +1 -1
- package/dist/client/assets/{project-app-view-ETn_lvvc.js → project-app-view-BQMc0ZDe.js} +1 -1
- package/dist/client/assets/record-editor-C2k0YqCy.js +1 -0
- package/dist/client/assets/{redirect-editor-DhpAIlro.js → redirect-editor-BCf_CGXs.js} +1 -1
- package/dist/client/assets/registry-DkCxx0B2.js +2 -0
- package/dist/client/assets/{registry-layout-DhJ9g2NW.js → registry-layout-BAUuoPuq.js} +1 -1
- package/dist/client/assets/{reports-C2nEwMZo.js → reports-1qQ-xrMf.js} +1 -1
- package/dist/client/assets/{require-capability-DvKJiQfx.js → require-capability-Dv7RzEaX.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DA5C6lyd.js → required-auth-layout-B0w8q8h4.js} +1 -1
- package/dist/client/assets/{reset-password-CaRQPGLj.js → reset-password-DSNTDue1.js} +1 -1
- package/dist/client/assets/{roles-VwD4bthl.js → roles-BLO-NvYm.js} +1 -1
- package/dist/client/assets/{search-input-r9-KineS.js → search-input-B80ackAh.js} +1 -1
- package/dist/client/assets/{secrets-CAgODVnM.js → secrets-YfluQU11.js} +1 -1
- package/dist/client/assets/{sections-editor-C1YuG7nJ.js → sections-editor-DvVbKrXY.js} +1 -1
- package/dist/client/assets/{select-5UKVGKGF.js → select-CWYubPco.js} +1 -1
- package/dist/client/assets/{select-model-Du6Ij79A.js → select-model-DDAHC-f0.js} +1 -1
- package/dist/client/assets/{self-tool-result-D8ufyAEf.js → self-tool-result-CbcsfrLH.js} +1 -1
- package/dist/client/assets/{seo-editor-DOJG3Zeg.js → seo-editor-gor1NZux.js} +1 -1
- package/dist/client/assets/{settings-layout-CaJJGvcu.js → settings-layout-DgIcloas.js} +1 -1
- package/dist/client/assets/{settings-section-CtwpADpK.js → settings-section-d2uXEQIW.js} +1 -1
- package/dist/client/assets/{shell-controls-Cfs3jQdw.js → shell-controls-C5bmuK3U.js} +1 -1
- package/dist/client/assets/{shell-layout-CEIBK0hL.js → shell-layout-Ywi2J373.js} +1 -1
- package/dist/client/assets/{sidebar-C96Dmedp.js → sidebar-CykWDHgi.js} +1 -1
- package/dist/client/assets/{skeleton-CYdcQGdA.js → skeleton-DEqFi2K3.js} +1 -1
- package/dist/client/assets/{spinner-0r5CeiP0.js → spinner-B-Et2Rql.js} +1 -1
- package/dist/client/assets/{sso-Cicm5ZVy.js → sso-WhK7Glkp.js} +1 -1
- package/dist/client/assets/{store-NSizk_Kg.js → store-iTMn61AS.js} +1 -1
- package/dist/client/assets/store-registry-DVLoUwwk.js +2 -0
- package/dist/client/assets/{studio-tools-DeeeXmHE.js → studio-tools-D9rGQPxm.js} +1 -1
- package/dist/client/assets/{switch-C-TK4ISD.js → switch-hgFRSh80.js} +1 -1
- package/dist/client/assets/{synced-repos-BK41KPKg.js → synced-repos-FySBqK5k.js} +1 -1
- package/dist/client/assets/{tab-id-CHq91VvJ.js → tab-id-DnVMEJgY.js} +1 -1
- package/dist/client/assets/{table-ZHSRQZ20.js → table-X-NkiHIu.js} +1 -1
- package/dist/client/assets/{tabs-HNRAr_J4.js → tabs-CBAQOMey.js} +1 -1
- package/dist/client/assets/{textarea-BYOlWKAU.js → textarea-CfCykLsx.js} +1 -1
- package/dist/client/assets/{toggle-group-CR2Ij8kh.js → toggle-group-DSfSES7Z.js} +1 -1
- package/dist/client/assets/{toolbar-CQyxoGna.js → toolbar-CTozWbiD.js} +1 -1
- package/dist/client/assets/{tooltip-CGSP7hhy.js → tooltip-CpJiwq4X.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CcX28vuZ.js → use-ai-providers-8oxmwtvB.js} +1 -1
- package/dist/client/assets/{use-automations-GkXekUCM.js → use-automations-C-CYQomu.js} +1 -1
- package/dist/client/assets/{use-autosave-vxsaYzY_.js → use-autosave-CsbIheZz.js} +1 -1
- package/dist/client/assets/{use-capability-Biitkoc1.js → use-capability-BPv-RiGf.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Ct6gXcQY.js → use-clock-tick-BOGk9zyU.js} +1 -1
- package/dist/client/assets/{use-connection-NImC3wlZ.js → use-connection-DM3HSMSQ.js} +1 -1
- package/dist/client/assets/{use-copy-BK9Iipma.js → use-copy-BMO4yQox.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-_WcOencv.js → use-create-virtual-mcp-BJPqZDRq.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Z1fugeaN.js → use-debounced-autosave-DAHuGXYG.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BNC1zI_M.js → use-debounced-value-Ckt9Zohs.js} +1 -1
- package/dist/client/assets/{use-deco-credits-kQV_X8TC.js → use-deco-credits-DIvaze32.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-D9w4tjr_.js → use-decopilot-events-BOfGPnP3.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DQzY_KJX.js → use-delete-connection-CEPVFkka.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Bb8d6era.js → use-deployment-admin-fcH1uOfX.js} +1 -1
- package/dist/client/assets/{use-file-configs-BAOuWxZ6.js → use-file-configs-Dr_t9ZJG.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-_tJBOoM2.js → use-infinite-scroll-DrSDlnaP.js} +1 -1
- package/dist/client/assets/{use-join-requests-JhH1iD9Y.js → use-join-requests-miAhbcpj.js} +1 -1
- package/dist/client/assets/{use-mcp-client-A7K2GmJo.js → use-mcp-client-Id-huKGb.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-D_eU7Wxc.js → use-mcp-tools-1AXW6cKy.js} +1 -1
- package/dist/client/assets/{use-members-BjIR9Mwb.js → use-members-BW5AInzP.js} +1 -1
- package/dist/client/assets/{use-mobile-Ce_-g6kA.js → use-mobile-DOUfE59G.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BiAIlypZ.js → use-navigate-to-agent-DPYeYLWV.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-DG743E79.js → use-open-billing-url-C-tDZIKU.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CiOqVhzJ.js → use-org-auth-client-CX7xcPjj.js} +1 -1
- package/dist/client/assets/{use-org-sso-C13FRQnV.js → use-org-sso-B04U2ggi.js} +1 -1
- package/dist/client/assets/{use-organization-roles-eDB0bY4K.js → use-organization-roles-DAWdJy95.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Dgq1l6C4.js → use-organization-settings-BB4jWajK.js} +1 -1
- package/dist/client/assets/{use-registry-connections-7li0O3Kn.js → use-registry-connections-BcY5Rc2i.js} +1 -1
- package/dist/client/assets/{use-secrets-CCOpTRfv.js → use-secrets-DaBsQ4R7.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-BUQx9RZ1.js → use-section-preview-base-CpJHSOY-.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Due4QsrV.js → use-status-sounds-D3MytbK8.js} +1 -1
- package/dist/client/assets/{use-tags-BZ7MDfDU.js → use-tags-CSUg0q_3.js} +1 -1
- package/dist/client/assets/{use-view-mode-C0L_wgQs.js → use-view-mode-BmMHlKNA.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CyeEkrV_.js → use-virtual-mcp-DBlf_6gT.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-IHwGk8aa.js +1 -0
- package/dist/client/assets/{useRouterState-DYV5SxUE.js → useRouterState-Bhd7F5_V.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CP80kQ5s.js +1 -0
- package/dist/client/assets/{users-Bhk_A6DW.js → users-COsoPIBa.js} +1 -1
- package/dist/client/assets/{variant-calendar-pdzfuYdr.js → variant-calendar-ChpZdRh_.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-KVYGzUS7.js → view-mode-toggle-BppWi5ko.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-CU5audUX.js +0 -1
- package/dist/client/assets/registry-DjO16Nr2.js +0 -2
- package/dist/client/assets/store-registry-C2V-lQpA.js +0 -2
- package/dist/client/assets/useInfiniteQuery-NGANAgDE.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BwlABGDm.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2731,7 +2731,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2731
2731
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2732
2732
|
|
|
2733
2733
|
Respond with the structured verdict and a short reason.`,Gf$;var Wf$=B(()=>{S4();rw();s41();r66=e41.object({requiresReview:e41.boolean().describe("true if the changes should go through pull-request review"),reason:e41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Gf$={requiresReview:!1,reason:""}});function Kf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function rj0($){return Kf$($?.previewServerUrl)??Kf$($?.productionUrl)}function Hf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Nf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Ff$($){let Z=Wh.get($);if(!Z)return;Wh.delete($),$61-=Z.bytes}function X56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Ff$($),Q>Z56)return;Wh.set($,{etag:Z,body:X,bytes:Q}),$61+=Q;while($61>$56||Wh.size>e66){let Y=Wh.keys().next().value;if(Y===void 0)break;Ff$(Y)}}function Uf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${Hf$()}${K}`,U=Nf$(W,K)?Wh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new m6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Nf$(W,K)){let D=w.headers.get("etag");if(D)X56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${oC(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${oC(W)}`,H=await fetch(`${Hf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new m6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new m6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new m6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new m6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${oC(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function oC($){return $.split("/").map(encodeURIComponent).join("/")}var e66=512,$56=8388608,Z56=262144,Wh,$61=0,m6;var rC=B(()=>{Wh=new Map;m6=class m6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function aj0($,Z,X){if(!X.connectionId)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await Kx($,Q);return Uf$({owner:X.owner,repo:X.name,accessToken:Y})}var Z61=B(()=>{t50();rC()});function Q56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function sj0($){if(Q56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Xr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function X61($){return sj0($),encodeURIComponent($)}function Qr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Xr(Y.stem))}:${G}`}return`${X}}`}var wf$=()=>{};var ej0=B(()=>{wf$()});function Y56($){return $.startsWith("merged/")?"merged":"blobs"}function Q61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=Y56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Of$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Kh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Bf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Kh($,U);return Kh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Yr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function Y61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Pf$}from"crypto";import{mkdir as Gr,readdir as G56,readFile as J56,rename as W56,rm as Af$,stat as Tf$,statfs as K56,unlink as H56,writeFile as N56}from"fs/promises";import{tmpdir as F56}from"os";import{dirname as U56,join as A7}from"path";function Hh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function B56(){if($z0)return $z0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?A7(F56(),"studio-fast-preview-cache"):$;return $z0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Hh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Df$),maxMergedBytes:Hh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Zz0),maxEntryBytes:{blobs:Hh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Zz0),merged:Hh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Zz0)}},freeFloorBytes:Hh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Df$),sweepIntervalMs:Hh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},$z0}function D56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function L56(){if($B)return;$B={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Nh)return;$.observe(Nh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Nh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Nh)return;let Z={blobs:0,merged:0};for(let X of Nh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function E56($){aC.hits[$]+=1,$B?.hits.add(1,{area:$})}function Lf$($){aC.misses[$]+=1,$B?.misses.add(1,{area:$})}function G61(){aC.evictions+=1,$B?.evictions.add(1)}function KF($){aC.errors+=1,$B?.errors.add(1,{op:$})}function j56($){aC.invalidKeySkips+=1,$B?.errors.add(1,{op:`${$}_invalid_key`})}function J61(){return Ef$??=P56(),Ef$}async function P56(){let $=B56();if(!$.enabled)return null;L56();try{await Gr(A7($.root,"blobs"),{recursive:!0}),await Gr(A7($.root,"merged"),{recursive:!0}),await Gr(A7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await Rf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:Q61(Z,$.index),cfg:$};return Nh=X,R56(X),X}async function Xz0($){try{return await G56($)}catch{return[]}}async function Rf$($){let Z=[];for(let X of["blobs","merged"]){let Q=A7($,X);for(let Y of await Xz0(Q)){let G=A7(Q,Y);for(let J of await Xz0(G)){let W=A7(G,J);for(let K of await Xz0(W))try{let H=await Tf$(A7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function If$($,Z,X){if(!Y61(X))return null;try{return`blobs/${Yr($)}/${Yr(Z)}/${X}`}catch{return null}}function qf$($,Z,X){if(!Y61(X))return null;try{return`merged/${Yr($)}/${Yr(Z)}/${X}.json`}catch{return null}}async function Mf$($,Z){try{let X=await J61();if(!X)return null;if(Z===null)return Lf$($),null;try{let Q=await J56(A7(X.root,Z),"utf8");return Of$(X.index,Z),E56($),Q}catch{return Lf$($),null}}catch{return KF(`get_${$}`),null}}function kf$($,Z,X){return Mf$("blobs",If$($,Z,X))}function Sf$($,Z,X){return Mf$("merged",qf$($,Z,X))}async function A56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await K56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Qz0($){try{await H56($)}catch{}}async function T56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Kh($.index,X.value),await Qz0(A7($.root,X.value)),G61()}}catch{KF("emergency_evict")}}async function Vf$($,Z,X,Q){try{let Y=await J61();if(!Y)return;if(X===null){j56(Z);return}if(!await A56(Y)){aC.floorSkips+=1,$B?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Bf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){aC.admissionRefusals+=1;return}for(let K of J.evict)await Qz0(A7(Y.root,K)),G61();let W=A7(Y.root,"tmp",`stage-${Pf$()}`);try{await N56(W,Q,"utf8");let K=A7(Y.root,X);await Gr(U56(K),{recursive:!0}),await W56(W,K)}catch(K){if(Kh(Y.index,X),await Qz0(W),KF(Z),K?.code==="ENOSPC")await T56(Y)}}catch{KF(Z)}}function Yz0($,Z,X,Q){return Vf$("blobs","put_blob",If$($,Z,X),Q)}function Cf$($,Z,X,Q){return Vf$("merged","put_merged",qf$($,Z,X),Q)}async function _f$(){try{let $=await J61();if(!$)return null;let Z=A7($.root,"tmp",Pf$());return await Gr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function vf$($){try{await Af$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function R56($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;jf$=new AbortController,C$(Math.random()*Z,{signal:jf$.signal}).then(()=>{zf$($);let X=setInterval(()=>void zf$($),Z);X.unref?.(),z56=X}).catch(()=>{})}async function zf$($){try{let Z=Q61(await Rf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Kh(Z,G),await Qz0(A7($.root,G)),G61()}$.index=Z;let Q=A7($.root,"tmp"),Y=Date.now();for(let G of await Xz0(Q)){let J=A7(Q,G);try{let W=await Tf$(J);if(Y-W.mtimeMs>O56)await Af$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var w56=1024,Zz0,Df$,O56=3600000,$z0=null,$B=null,aC,Ef$=null,Nh=null,z56=null,jf$=null;var ff$=B(()=>{$6();C6();Zz0=1024*w56,Df$=1024*Zz0;aC=D56()});function bf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as I56,stat as q56}from"fs/promises";import{join as xf$}from"path";function M56($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function k56(){return yf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),yf$}async function gf$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Jr(`invalid blocks path prefix: ${X}`);let Y=await k56(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...M56(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Jr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Jr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await S56(Z,Q);if(N.length===0)throw new Jr(`tar extracted no ${G} members into ${Z}`);return N}async function S56($,Z){let X=xf$($,...Z.split("/")),Q;try{Q=await I56(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=xf$(X,G);try{if(!(await q56(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Jr,yf$=null;var hf$=B(()=>{Jr=class Jr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as V56}from"crypto";import{readFile as C56}from"fs/promises";async function Wr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof m6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof m6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function v56(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return cf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):cf$}function f56($){lf$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),lf$.add(1,{path:$})}async function Gz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Jz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function W61($,Z){let X=`${Jz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function K61($,Z){return $.filter((X)=>Xr(X.stem)===Z).map((X)=>X.path).sort()}function df$($,Z,X,Q){return Yz0($,Z,X,Q)}function b56($,Z){if(!Z)return $;return V56("sha1").update(`${$}:${Z}`).digest("hex")}async function mf$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Wr($,Z):await $.getHeadSha(Z);return x56.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>y56($,Y,X))}async function y56($,Z,X){let{owner:Q,repo:Y}=$,G=b56(Z,X),J=await Sf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=W61(K,X),N=new Map;if(await Gz0(H,uf$,async(O)=>{let D=await kf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>_56){let O=await g56($,Z,X,H);if(f56(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Gz0(H,uf$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Yz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Qr(U);return await Cf$(Q,Y,G,w),{sha:Z,decofile:w}}async function g56($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=v56(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await _f$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await gf$(K,W,Jz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await C56(U.diskPath,"utf8");await Yz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await vf$(W)}}var uf$=12,_56=50,cf$=134217728,lf$=null,x56;var Wz0=B(()=>{ej0();C6();ff$();rC();hf$();x56=bf$()});async function Kz0($,Z){let X=await $.getDefaultBranch(),Q=await Wr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Hz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,h56),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Gz0(G,u56,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function if$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof m6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new m6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await d56($,Z,X)}async function d56($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=c56)throw new m6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof m6&&U.status===422&&Q<l56)continue;throw U}}}var h56=200,u56=12,c56=300,l56=3;var nf$=B(()=>{rC();Wz0()});function i56($){if(!$||$.includes(".."))return!1;return m56.test($)}function pf$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!i56(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function tf$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var m56;var of$=B(()=>{m56=/^[\w./@-]+$/});function H61($){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 Kr($,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 rf$($,Z,X,Q){if(!Q.connectionId)throw new Fh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Fh(p7);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:p7;throw new Fh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Jh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await tw(H,n56).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var n56=10485760,Fh;var N61=B(()=>{WN();oj0();ei();Hx();Fh=class Fh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function t56($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!p56.test(Z))throw Error(`Invalid branch name: ${$}`)}function sC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(r56)])}function eC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Kr(Z,X);if(!Y)throw new m6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return aj0(Q,G.id,Y)}function F61($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,E9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,E9)}async function ef$($){try{let Z=await Hr($),X=await Kz0(Z,$.get("vmClaim").branch);return $.json(X,200,E9)}catch(Z){return F61($,Z)}}function Fz0($,Z){let Q=(Nz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Nz0.set($,Y),Y.finally(()=>{if(Nz0.get($)===Y)Nz0.delete($)}),Q}async function yZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,E9);let Q=eC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,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",...E9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?s56(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...E9}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.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 s56($){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 Uz0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function e56($){return $b$.includes($)}var p56,af$=524288,o56=65536,r56=1e4,sf$=2000,a56,Nz0,E9,$b$,Zb$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",a56),$.post("/:virtualMcpId/:branch/write",(X)=>yZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>yZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>yZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>yZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>yZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>yZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>yZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!e56(Q))return X.json({error:`step must be one of: ${$b$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=qx(Y.virtualMcpMetadata);try{await RU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return yZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return WF(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ev$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return Z(X)});let Z=(X)=>yZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return yZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Hr(X),J=await Hz0(G,Q.branch,Y.base);return X.json(J,200,E9)}catch(Y){return F61(X,Y)}return yZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,E9);let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Fz0(Y,async()=>{try{await n41(W,Q,Y);let K=Kr(G,J);if(K)await rf$(W,Q,Y,K)}catch(K){if(K instanceof Fh)return X.json({error:K.message},403,E9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,E9)}return yZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,E9);return Fz0(Q,()=>yZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Fz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hr(X),H=W.base??await K.getDefaultBranch();return await if$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,E9)}catch(W){return F61(X,W)}});let Y=eC(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Fz0(G,async()=>{try{await n41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,E9)}return yZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Yf$(K,w,O);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Jf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=H61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:o56,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=pf$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=tf$(G,W.resolveType),H=H61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var Xb$=B(()=>{C8();oO();Gh();i41();JN();av$();T3();mw();sv$();$f$();Im0();ai();s41();Wf$();Z61();rC();nf$();of$();N61();p56=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;a56=tj0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{t56(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ji({orgId:Y.id,virtualMcpId:G,branch:J}),H=await DN(X,J,Q),N=rv$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&rj0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Nz0=new Map;E9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};$b$=["clone","install","start"]});function Qb$($,Z,X){let Q=U61.get($);if(!Q)Q={pending:null,running:!1},U61.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)Z96($,Q);return G}async function Z96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await X96(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)U61.delete($)}}async function X96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Wr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=W61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=K61(K,O),E=`${JSON.stringify(D,null,2)}
|
|
2734
|
-
`,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:Q96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=$96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function Q96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var $96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as Y96,timingSafeEqual as G96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):Y96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+J96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!G96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var J96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function K96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&W96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=H96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var W96,H96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();W96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!K96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Rk$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function F96($){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 U96($,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(N96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var N96=1e4,w96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",w96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await U96(Q,Y);return Z.json({apps:F96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function T96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function R96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function I96($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:R96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function q96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function M96($){if(!$)return;return{openai:{response_format:$}}}function k96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var O96=256,B96,D96,L96,E96,j96,z96,P96,A96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();B96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),D96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),L96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(D96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),E96=M1.object({type:M1.literal("text")}),j96=M1.object({type:M1.literal("json_object")}),z96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),P96=M1.union([E96,j96,z96]),A96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(L96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(B96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:P96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=A96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=T96(G.model);if(!J)return $.json(lK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>HD(j.providerId));if(!E)return $.json(lK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=I96(G.messages),U=G.tools?q96(G.tools):void 0,w=M96(G.response_format),O=k96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=O96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.205.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function C96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??V96}}var Ib$,V96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:C96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Vb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,_96,v96,f96,b96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),_96=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:$_.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 $})),v96=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(_96)),f96={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()},b96=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:$_.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:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.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:$_.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(v96).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:$_.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:$_.optional()})).min(1)})]),Cb$=c0.object({...f96,template:b96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var B61=B(()=>{_b$()});import{join as vb$}from"path";async function y96($){try{let Z=await fetch(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(x96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function g96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
|
|
2734
|
+
`,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:Q96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=$96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function Q96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var $96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as Y96,timingSafeEqual as G96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):Y96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+J96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!G96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var J96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function K96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&W96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=H96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var W96,H96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();W96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;H96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!K96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Rk$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function F96($){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 U96($,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(N96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var N96=1e4,w96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",w96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await U96(Q,Y);return Z.json({apps:F96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function T96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function R96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function I96($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:R96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function q96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function M96($){if(!$)return;return{openai:{response_format:$}}}function k96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var O96=256,B96,D96,L96,E96,j96,z96,P96,A96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();B96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),D96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),L96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(D96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),E96=M1.object({type:M1.literal("text")}),j96=M1.object({type:M1.literal("json_object")}),z96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),P96=M1.union([E96,j96,z96]),A96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(L96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(B96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:P96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=A96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=T96(G.model);if(!J)return $.json(lK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>HD(j.providerId));if(!E)return $.json(lK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=I96(G.messages),U=G.tools?q96(G.tools):void 0,w=M96(G.response_format),O=k96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=O96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.205.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 C96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??V96}}var Ib$,V96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:C96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Vb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,_96,v96,f96,b96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),_96=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:$_.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 $})),v96=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(_96)),f96={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()},b96=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:$_.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:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.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:$_.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(v96).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:$_.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:$_.optional()})).min(1)})]),Cb$=c0.object({...f96,template:b96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var B61=B(()=>{_b$()});import{join as vb$}from"path";async function y96($){try{let Z=await fetch(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(x96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function g96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
|
|
2735
2735
|
`)}function h96($,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}
|
|
2736
2736
|
</head>`)}function fb$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=wh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(vb$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${yW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(u96)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?vb$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await y96(wh(Q)),K=g96(Q,W);return X.html(h96(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var x96=2500,u96=1e4;var bb$=B(()=>{C8();B61();wL();M$()});function Nr($,Z){return fetch(`${yW({})}${$}`,Z)}async function c96($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Nr(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=Dz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var l96,HF,xb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},yb$;var gb$=B(()=>{C8();MG();wL();B61();l96=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});HF.use("/link-token/*",xb$);HF.use("/suggest",xb$);HF.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await c96(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});HF.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Nr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${UL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Nr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${UL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:l96.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Nr(`/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)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Nr(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});yb$=HF});import{createHmac as d96,timingSafeEqual as m96}from"crypto";function ub$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>i96)return!1;let W=d96("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&m96(K,N)})}function cb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=KJ(Z),Q=KJ(KJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:dK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function lb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dK($){return typeof $==="string"?$:void 0}function KJ($){return typeof $==="object"&&$!==null?$:void 0}function Lz0($){return typeof $==="number"?new Date($*1000):null}function E61($){return dK($)??dK(KJ($)?.id)}function n96($){return E61($.subscription)??dK(KJ(KJ($.parent)?.subscription_details)?.subscription)}function p96($){let Z=Lz0($.current_period_end);if(Z)return Z;let X=KJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=KJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function D61($,Z){let X=Lz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function L61($,Z){let X=Lz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function t96($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=dK(KJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(dK(KJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=dK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(KJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:KJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=E61(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:E61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=dK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&D61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":lb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:p96(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=n96(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Lz0(X.period_end),lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function o96($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:lb$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function hb$($,Z){let X=o96($,Z);if(!X)return;aJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:jd1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function db$($){let Z=new vW(m8().db),X=await t96(Z,$);if(!(X.handled&&X.topUp))hb$($,X);if(X.handled&&X.topUp)await SU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),hb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof W3&&(Q.status===400||Q.status===404)))throw Q}return X}var i96=300;var mb$=B(()=>{jG();x4();U40();om();nr0()});var r96=1048576,j61;var ib$=B(()=>{C8();oO();M$();mb$();j61=new U1;j61.post("/webhook",FZ({maxSize:r96,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ub$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=cb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await db$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as a96}from"crypto";function e96($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return a96(Buffer.from(Y),Buffer.from(Q))}var s96=5242880,z61;var nb$=B(()=>{C8();oO();ti();z61=new U1;z61.post("/webhook",FZ({maxSize:s96,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!e96(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await jm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function pb$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var tb$,$Z6,ZZ6,ob$;var rb$=B(()=>{C8();rJ();ux();ub();tb$=new U1,$Z6=["range","if-none-match","if-modified-since"],ZZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];tb$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ug($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await Rn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&X3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return pb$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of $Z6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new e1(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:`,Q),new e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of ZZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pb$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});ob$=tb$});var Fr=C((Z_)=>{var XZ6=Z_&&Z_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),QZ6=Z_&&Z_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))XZ6(Z,$,X)};Object.defineProperty(Z_,"__esModule",{value:!0});QZ6(QY(),Z_)});var eb$=C((ab$)=>{Object.defineProperty(ab$,"__esModule",{value:!0});ab$.version=void 0;ab$.version="3.4.0"});var Xx$=C((mK)=>{var YZ6=mK&&mK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(mK,"__esModule",{value:!0});mK.NodeTransport=mK.VERSION=void 0;mK.nodeResolveHost=NZ6;var i6=Fr(),GZ6=z0("net"),P61=z0("tls"),JZ6=z0("path"),$x$=z0("fs"),WZ6=YZ6(z0("dns")),KZ6=eb$();mK.VERSION=KZ6.version;var HZ6="nats.js";class Zx${socket;version;lang;yields=[];signal=(0,i6.deferred)();closedNotification=(0,i6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=HZ6,this.version=mK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,i6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw i6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new i6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new i6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,i6.deferred)(),X,Q=(0,GZ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,i6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=i6.DataBuffer.concat(...this.yields),Y=(0,i6.extractProtocolMessage)(Q);if(Y!=="")try{let G=i6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}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,i6.deferred)();try{if($=(0,JZ6.resolve)($),!(0,$x$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,$x$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}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 Y=await this.loadClientCerts()||{};X=(0,i6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,i6.deferred)();try{let Y=(0,P61.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,i6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,i6.deferred)();try{let Q=(0,P61.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}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,i6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,i6.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 P61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,i6.render)($)}`);let Z=(0,i6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,i6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,i6.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}}mK.NodeTransport=Zx$;function NZ6($){let Z=(0,i6.deferred)();return WZ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Wx$=C((Jx$)=>{Object.defineProperty(Jx$,"__esModule",{value:!0});Jx$.connect=FZ6;var Qx$=Xx$(),Yx$=Fr(),Gx$=Fr();function FZ6($={}){if((0,Gx$.hasWsProtocol)($))return Promise.reject(Gx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Yx$.setTransportFactory)({factory:()=>{return new Qx$.NodeTransport},dnsResolveFn:Qx$.nodeResolveHost}),Yx$.NatsConnectionImpl.connect($)}});var Kx$=C((NF)=>{var wZ6=NF&&NF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),OZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))wZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var BZ6=Wx$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return BZ6.connect}});OZ6(Fr(),NF)});function Ux$($){let Z=$?.connectFn??jZ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(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,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:EZ6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=uZ(LZ6,DZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?Hx$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Fx$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function jZ6($){return Nx$.connect($)}var Hx$,Nx$,Fx$,DZ6=100,LZ6=3000,EZ6=3000;var wx$=B(()=>{$6();Hx$=k(hh(),1),Nx$=k(Kx$(),1),Fx$=k(LB(),1)});function A61($,Z){return`${$}.${Z}`}class T61{cache;constructor($){this.cache=qg({ttlMs:$?.ttlMs??zZ6,maxSize:$?.maxSize??PZ6})}async get($,Z){return this.cache.get(A61($,Z))??null}async set($,Z,X){this.cache.set(A61($,Z),X)}async invalidate($,Z){this.cache.delete(A61($,Z))}teardown(){this.cache.clear()}}var zZ6=600000,PZ6=5000;var Ox$=()=>{};function Ez0($,Z){return`${$}:${Z}`}function R61($){let Z=qg({ttlMs:$?.ttlMs??AZ6,maxSize:$?.maxSize??TZ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Bx$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Ez0(K,H))},set(K,H,N){Z.set(Ez0(K,H),N)},invalidate(K,H){Z.delete(Ez0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Bx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Ez0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Bx$="studio.ai-provider-keys.invalidate",AZ6=30000,TZ6=5000;var Dx$=()=>{};class I61{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=Lx$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.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 Q of Lx$)Z.publish(Q,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 Lx$;var Ex$=B(()=>{Lx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var jx$=($)=>{let Z;return()=>Z??=$()},q61,M61;var zx$=B(()=>{C6();q61=jx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),M61=jx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function VZ6(){return{name:kN,subjects:[`${ow0}.>`],storage:p3.StorageType.File,max_age:qZ6,max_bytes:kZ6,max_msgs_per_subject:SZ6,discard:p3.DiscardPolicy.Old,retention:p3.RetentionPolicy.Limits,duplicate_window:MZ6,num_replicas:1}}class Tx${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 Px$($){let Z=Ax$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function fZ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,IZ6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function bZ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class k61{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=VZ6(),X=await cZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await p3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:bZ6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=fZ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=BW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=mn0(H,{runId:Z}),U=performance.now()-N;if(q61().record(U),M61().add(1,{"org.id":Q??"unknown"}),vZ6?.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)G.publish(Y,w.subject,w.data,w.headers?Px$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=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(H.releaseLock(),W(),_Z6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=mn0(Z,{runId:$,dedup:X});if(q61().record(performance.now()-Y),M61().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Px$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=OW$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?p3.DeliverPolicy.New:p3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=NO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=$O0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(rw0()).pipeThrough(aw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kN,{filter:NO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var p3,Ax$,RZ6=($)=>{let Z;return()=>Z??=$()},IZ6,qZ6=86400000000000,MZ6=120000000000,kZ6=4294967296,SZ6=500000,CZ6,_Z6,vZ6;var Rx$=B(()=>{$6();in0();ZO0();sw0();C6();zx$();p3=k(LB(),1),Ax$=k(hh(),1),IZ6=RZ6(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));CZ6=process.env.STREAM_ENCODE_TRACE==="1",_Z6=process.env.DECOPILOT_STREAM_TRACE==="1";vZ6=CZ6?new Tx$:null});function jz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,DW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Ix$=B(()=>{L8()});class S61{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}}function lZ6($){return $ instanceof zQ}function dZ6($,Z){return Z-$>=uZ6}class V61{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??xZ6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??gZ6,X=this.options.itemIntervalMs??yZ6,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-NJ$),Ip0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-cZ6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await wn0(this.taskBoard,Y,Q),await On0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),lZ6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+hZ6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),y4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!dZ6(PL(X),Date.now()))return;await GO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await PK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Ap0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Pp0(G))return!1;return await JO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var xZ6=60000,yZ6=300000,gZ6=50,hZ6=60000,uZ6=900000,cZ6=120000;var qx$=B(()=>{kZ();Op0();FO();BO0();ZZ();K3();qp0();sx()});import{readdir as mZ6,rm as zz0}from"fs/promises";import{join as Pz0}from"path";async function Az0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-iZ6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await X_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Mx$($,Y,Z);else if(!Y.startsWith(".")){let G=Pz0($,Y),J=await X_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Mx$(G,K,Z)}if((await X_(G)).length===0)await zz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Mx$($,Z,X){let Q=0,Y=Pz0($,Z),G=await X_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Pz0(Y,W),H=await X_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Pz0(K,F);await zz0(w,{recursive:!0,force:!0}),Q++}}if((await X_(K)).length===0)await zz0(K,{recursive:!0,force:!0})}if((await X_(Y)).length===0)await zz0(Y,{recursive:!0,force:!0});return Q}async function X_($){try{return(await mZ6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var iZ6=30;var C61=()=>{};import{DBOS as _61,SchedulerMode as nZ6}from"@dbos-inc/dbos-sdk";async function tZ6(){let $=[wJ(),Q_(),nK()],Z=0;for(let X of $)try{Z+=await Az0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function oZ6($,Z){await _61.runStep(()=>tZ6(),{name:"monitoringRetention"})}function Sx$(){if(kx$)return;kx$=!0;let $=_61.registerWorkflow(oZ6,{name:"monitoringRetentionWorkflow"});_61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:pZ6,mode:nZ6.ExactlyOncePerIntervalWhenActive})}var pZ6="23 4 * * *",kx$=!1;var Vx$=B(()=>{eQ();C61()});function Cx$($){return async(Z,X)=>{let Q=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(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await yK.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await g$1($.db,Z,Q.role);return Y.boundAuth=y$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,Q.role,"self"),gg(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var _x$=B(()=>{rD();Cg()});function rZ6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function sZ6(){for(let $ of aZ6)$()}function vx$($){let Z=[...v61.logs,$];v61={...v61,logs:Z.length>500?Z.slice(-500):Z},sZ6()}function f61(){return eZ6}var v61,aZ6,eZ6=!1;var b61=B(()=>{v61=rZ6(),aZ6=new Set});import{EventEmitter as $76}from"events";var x61;var fx$=B(()=>{b61();x61=new $76;x61.on("request",($)=>{vx$($)})});function bx$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="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=Oh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Oh(U.method)}${Z5.reset}`}}catch{}}let W=Oh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Oh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=X76(Q),H=J?"\u25C0":"\u2190";if(!f61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=Z76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!f61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);x61.emit("request",{method:Q,path:Oh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,Z76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},X76=($)=>{return Z5[$]||Z5.reset},Oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var xx$=B(()=>{b61();fx$();Z5={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 ux$}from"crypto";import{mkdir as Q76,readdir as Y76,rm as yx$,stat as cx$}from"fs/promises";import{join as g61,relative as G76}from"path";import{z as E$}from"zod";function dx$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return g61(J76,Z)}function mx$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function y61($,Z){let X=dx$($),Q=mx$(Z);return g61(X,Q)}function W76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ux$("sha256",Y).update(G).digest("hex")}function hx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=W76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${mx$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ix$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ux$("md5","etag").update(Q).digest("hex")}"`}async function nx$($,Z,X,Q,Y){try{let G=await Y76($,{withFileTypes:!0});for(let J of G){let W=g61($,J.name),H=G76(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await nx$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await cx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:ix$(W,N.mtime,N.size)})}catch{}}}}catch{}}function px$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=dx$(Q);await Q76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await nx$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<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:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key),W=await cx$(J);return{contentType:j81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ix$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key);try{return await yx$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=y61(Q,K);try{await yx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function h61($,Z,X){let Q=px$(Z,X),Y=new TW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),pG(Y,G,$,"mcp:dev-assets")}async function tx$($,Z,X,Q){let G=px$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.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 J76="./data/assets",gx$=3600,lx$,ox$;var rx$=B(()=>{M$();Qy();C8();Nl();cV();MX();Bj0();lx$=new U1;lx$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return h61($.req.raw,Z,Q)});ox$=lx$});var ax$={};N4(ax$,{mountDevRoutes:()=>K76});function K76($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return h61(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await tx$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ox$);let X=new U1;X.use("*",i3({mountPath:"/api/dev-assets"})),X.route("/",Oj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var sx$=B(()=>{C8();F81();Bj0();rx$()});import{sql as H76}from"kysely";import{randomUUID as ex$}from"crypto";import{z as N76}from"zod";async function U76($){let Z=new Date().toISOString(),X=ex$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={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:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),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((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:ex$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await H76`SELECT
|
|
2737
2737
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as L,b as R,j as r}from"./index-ACaa76fL.js";import{I as A}from"./input-DKITayoD.js";import{L as I}from"./label-DtGvW-rJ.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-5UKVGKGF.js";import{T as D}from"./textarea-BYOlWKAU.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-DGDDvdHv.js";import{s as F}from"./primitives-CNniwpOF.js";import{u as Q}from"./use-autosave-vxsaYzY_.js";import"./tooltip-CGSP7hhy.js";import"./Check-DMpoRsrF.js";import"./ChevronDown-5atPDaQl.js";import"./ChevronUp-BvLx59gN.js";import"./ArrowUp-DOw2yZqo.js";import"./chat-context-BeoQ3zsQ.js";import"./tab-id-CHq91VvJ.js";import"./dialog-Fp5lYNIA.js";import"./X-5cWfFurM.js";import"./Copy01-DTuZ0kjc.js";import"./hooks-B6ScbZWq.js";import"./use-mcp-client-A7K2GmJo.js";import"./auth-DQUPKxF2.js";import"./decopilot-sse-pool-D3pRDmBO.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-CyeEkrV_.js";import"./use-ai-providers-CcX28vuZ.js";import"./studio-tools-DeeeXmHE.js";import"./use-decopilot-events-D9w4tjr_.js";import"./use-organization-settings-Dgq1l6C4.js";import"./automation-runs-CZpVg96A.js";import"./agent-icon-PPJ-PY4I.js";import"./AlertCircle-CwMegZoT.js";import"./Tool01-DnJGb8Tm.js";import"./ArrowLeft-vR1tssES.js";import"./Tool02-CICjp9wZ.js";import"./XCircle-CNxIdaXs.js";import"./ArrowUpRight-B0A7d5n3.js";import"./TrendUp01-BPPgqMYM.js";import"./ZapSquare-CSYgxLM0.js";import"./Users03-CMdC8bFp.js";import"./CheckCircle-DTTE6MpM.js";import"./ChevronRight-CT8dbaPA.js";import"./DotsVertical-D8rqygCU.js";import"./Stars02-CWH_vqoG.js";import"./CpuChip01-C8DQ7k7v.js";import"./CreditCard01-CCrWov5d.js";import"./Globe01-V9fa0k1_.js";import"./Settings02-fqyJZZBR.js";import"./Eye-C3hS2uua.js";import"./FilterLines-DpH7Of5i.js";import"./Share07-DMx-n_BB.js";import"./Star01-BT1eR0WA.js";import"./Globe04-JLlm86A-.js";import"./SwitchHorizontal01-zDsIQHTk.js";import"./HardDrive-aTteyFC1.js";import"./Key01-DDn6neQd.js";import"./LayoutLeft-CZ0NsETn.js";import"./LinkExternal01-BQ6ioy13.js";import"./LogOut01-38zM6Sg1.js";import"./Monitor01-D6sM3LT4.js";import"./Sun-Hd-bzNDN.js";import"./Palette-d1lf9wnp.js";import"./Play-8kpsjOuB.js";import"./Plus-C262IMCE.js";import"./SearchLg-Cv3kXNhF.js";import"./SearchMd-70hNe4jU.js";import"./Shield01-DVZrvFyF.js";import"./Stars01-CA-Z1xgD.js";import"./Trash01-BD-_6YfL.js";import"./Upload01-C6XebHEp.js";import"./User01-D-7fxE8s.js";import"./Users01-D6neIHPG.js";import"./XClose-mchEejxX.js";import"./Zap-CHWKX5FC.js";import"./useInfiniteQuery-NGANAgDE.js";import"./use-infinite-scroll-_tJBOoM2.js";import"./use-connection-NImC3wlZ.js";import"./card-DfDlTt2i.js";import"./sidebar-C96Dmedp.js";import"./use-mobile-Ce_-g6kA.js";import"./table-ZHSRQZ20.js";import"./empty-state-CHB589Im.js";import"./use-members-BjIR9Mwb.js";import"./use-org-auth-client-CiOqVhzJ.js";import"./use-clock-tick-Ct6gXcQY.js";import"./use-automations-GkXekUCM.js";import"./useSuspenseInfiniteQuery-BwlABGDm.js";import"./avatar-CS9n_6qw.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BK9Iipma.js";import"./monaco-editor-B5g97WLU.js";import"./spinner-0r5CeiP0.js";import"./index-LGPGUi4U.js";import"./shell-layout-CEIBK0hL.js";import"./required-auth-layout-DA5C6lyd.js";import"./use-org-sso-C13FRQnV.js";import"./integration-icon-5UaVb6Hz.js";import"./use-navigate-to-agent-BiAIlypZ.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-BJo9IqDZ.js";import"./form-8YCGpVAg.js";import"./file-type-icon-BH8NLLf2.js";import"./drawer-3bb91VKW.js";import"./collection-search-DXcywpkT.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-HNRAr_J4.js";import"./toggle-group-CR2Ij8kh.js";import"./use-deco-credits-kQV_X8TC.js";import"./popover-BUAb3HyX.js";import"./alert-dialog-DiWnOI_-.js";import"./toolbar-CQyxoGna.js";import"./skeleton-CYdcQGdA.js";import"./github-repo-picker-BzS6MrzY.js";import"./use-debounced-value-BNC1zI_M.js";import"./authenticate-and-persist-oauth-56dXcFhu.js";import"./mcp-oauth-B3t3VPni.js";import"./use-mcp-tools-D_eU7Wxc.js";import"./extract-connection-data-C5-1oHtH.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-ufuvpGD9.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-Bxl4j9YE.js";import"./use-registry-connections-7li0O3Kn.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-Bsl4YuNL.js";import"./collection-tabs-DJzSsgQL.js";import"./badge-Dxt-Ks9r.js";import"./use-open-billing-url-DG743E79.js";import"./select-model-Du6Ij79A.js";import"./checkbox-CasOOVtk.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-CtwpADpK.js";import"./cards-BhdvNoQu.js";import"./dropdown-menu-DGoW0k6q.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-Due4QsrV.js";import"./use-capability-Biitkoc1.js";import"./pt-BR-CLy76QW2.js";import"./switch-C-TK4ISD.js";import"./use-debounced-autosave-Z1fugeaN.js";import"./index-BRlYOlPA.js";import"./search-input-r9-KineS.js";import"./index-DCzOebzy.js";import"./use-secrets-CCOpTRfv.js";import"./self-tool-result-D8ufyAEf.js";import"./use-tags-BZ7MDfDU.js";import"./get-initials-D-f_fDFw.js";import"./command-BkgFyvtI.js";import"./index-5BUDi8T1.js";import"./use-file-configs-BAOuWxZ6.js";import"./automation-list-row-D0hjgxSh.js";const X={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Wr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DhJ9g2NW.js","assets/index-ACaa76fL.js","assets/index-Dh_qilfV.css","assets/Tool02-CICjp9wZ.js","assets/CheckCircle-DTTE6MpM.js","assets/Settings02-fqyJZZBR.js","assets/use-mcp-client-A7K2GmJo.js","assets/auth-DQUPKxF2.js","assets/useInfiniteQuery-NGANAgDE.js","assets/use-infinite-scroll-_tJBOoM2.js","assets/studio-tools-DeeeXmHE.js","assets/badge-Dxt-Ks9r.js","assets/input-DKITayoD.js","assets/dropdown-menu-DGoW0k6q.js","assets/Check-DMpoRsrF.js","assets/ChevronRight-CT8dbaPA.js","assets/DotsVertical-D8rqygCU.js","assets/table-ZHSRQZ20.js","assets/toggle-group-CR2Ij8kh.js","assets/use-view-mode-C0L_wgQs.js","assets/use-mobile-Ce_-g6kA.js","assets/FilterLines-DpH7Of5i.js","assets/Globe01-V9fa0k1_.js","assets/SearchMd-70hNe4jU.js","assets/dialog-Fp5lYNIA.js","assets/X-5cWfFurM.js","assets/AlertCircle-CwMegZoT.js","assets/Upload01-C6XebHEp.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-DiWnOI_-.js","assets/card-DfDlTt2i.js","assets/Trash01-BD-_6YfL.js","assets/label-DtGvW-rJ.js","assets/select-5UKVGKGF.js","assets/tooltip-CGSP7hhy.js","assets/ChevronDown-5atPDaQl.js","assets/ChevronUp-BvLx59gN.js","assets/switch-C-TK4ISD.js","assets/textarea-BYOlWKAU.js","assets/ArrowLeft-vR1tssES.js","assets/XCircle-CNxIdaXs.js","assets/checkbox-CasOOVtk.js","assets/Eye-C3hS2uua.js","assets/LinkExternal01-BQ6ioy13.js","assets/use-copy-BK9Iipma.js","assets/Copy01-DTuZ0kjc.js","assets/Key01-DDn6neQd.js","assets/Plus-C262IMCE.js","assets/mcp-oauth-B3t3VPni.js","assets/Play-8kpsjOuB.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aG as o}from"./index-ACaa76fL.js";import{R as m}from"./require-capability-DvKJiQfx.js";import"./use-capability-Biitkoc1.js";import"./access-gate-BUKqorLU.js";import"./capability-load-error-tktsunqW.js";const n=s.lazy(()=>o(()=>import("./registry-layout-DhJ9g2NW.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DhJ9g2NW.js","assets/index-ACaa76fL.js","assets/index-Dh_qilfV.css","assets/Tool02-CICjp9wZ.js","assets/CheckCircle-DTTE6MpM.js","assets/Settings02-fqyJZZBR.js","assets/use-mcp-client-A7K2GmJo.js","assets/auth-DQUPKxF2.js","assets/useInfiniteQuery-NGANAgDE.js","assets/use-infinite-scroll-_tJBOoM2.js","assets/studio-tools-DeeeXmHE.js","assets/badge-Dxt-Ks9r.js","assets/input-DKITayoD.js","assets/dropdown-menu-DGoW0k6q.js","assets/Check-DMpoRsrF.js","assets/ChevronRight-CT8dbaPA.js","assets/DotsVertical-D8rqygCU.js","assets/table-ZHSRQZ20.js","assets/toggle-group-CR2Ij8kh.js","assets/use-view-mode-C0L_wgQs.js","assets/use-mobile-Ce_-g6kA.js","assets/FilterLines-DpH7Of5i.js","assets/Globe01-V9fa0k1_.js","assets/SearchMd-70hNe4jU.js","assets/dialog-Fp5lYNIA.js","assets/X-5cWfFurM.js","assets/AlertCircle-CwMegZoT.js","assets/Upload01-C6XebHEp.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-DiWnOI_-.js","assets/card-DfDlTt2i.js","assets/Trash01-BD-_6YfL.js","assets/label-DtGvW-rJ.js","assets/select-5UKVGKGF.js","assets/tooltip-CGSP7hhy.js","assets/ChevronDown-5atPDaQl.js","assets/ChevronUp-BvLx59gN.js","assets/switch-C-TK4ISD.js","assets/textarea-BYOlWKAU.js","assets/ArrowLeft-vR1tssES.js","assets/XCircle-CNxIdaXs.js","assets/checkbox-CasOOVtk.js","assets/Eye-C3hS2uua.js","assets/LinkExternal01-BQ6ioy13.js","assets/use-copy-BK9Iipma.js","assets/Copy01-DTuZ0kjc.js","assets/Key01-DDn6neQd.js","assets/Plus-C262IMCE.js","assets/mcp-oauth-B3t3VPni.js","assets/Play-8kpsjOuB.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aG as p}from"./index-ACaa76fL.js";import{R as u}from"./require-capability-DvKJiQfx.js";import"./use-capability-Biitkoc1.js";import"./access-gate-BUKqorLU.js";import"./capability-load-error-tktsunqW.js";const g=l.lazy(()=>p(()=>import("./registry-layout-DhJ9g2NW.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-_tJBOoM2.js";import{e4 as i}from"./index-ACaa76fL.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-_tJBOoM2.js";import{e4 as u,b2 as n}from"./index-ACaa76fL.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|