decocms 4.294.2 → 4.294.4
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-qZDg2e-H.js → AlertCircle-COfoHlYo.js} +1 -1
- package/dist/client/assets/{AreaChart-D1rWRcUm.js → AreaChart-k1GdGLk3.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CatEVOI7.js → ArrowLeft-DvfIRo1L.js} +1 -1
- package/dist/client/assets/{ArrowUp-DMDdMhAA.js → ArrowUp-CukalgWz.js} +1 -1
- package/dist/client/assets/{Check-C5RWnyNL.js → Check-CQfGOUkn.js} +1 -1
- package/dist/client/assets/{CheckCircle-V0GvWvtd.js → CheckCircle-B5B8UVD6.js} +1 -1
- package/dist/client/assets/{ChevronDown-CeGZsBnS.js → ChevronDown-DJW5HhkM.js} +1 -1
- package/dist/client/assets/{ChevronRight-Dh8_6pj1.js → ChevronRight-CdylS1le.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-Im3Lz_4E.js → ChevronSelectorVertical-DjiLaY0h.js} +1 -1
- package/dist/client/assets/{ChevronUp-DCx43qHY.js → ChevronUp-DOnt1lNa.js} +1 -1
- package/dist/client/assets/{Copy01-DhfruII6.js → Copy01-DT_VNucR.js} +1 -1
- package/dist/client/assets/{CreditCard01-Cy0s6gAf.js → CreditCard01-Bi19p04V.js} +1 -1
- package/dist/client/assets/{DotsVertical-B39kxqbi.js → DotsVertical-veJCsKg6.js} +1 -1
- package/dist/client/assets/{Download01-C1FmC7JV.js → Download01-BC66vxkd.js} +1 -1
- package/dist/client/assets/{Eye-m8QZKf2Y.js → Eye-DhvNNTcF.js} +1 -1
- package/dist/client/assets/{FilterLines-BBF-m2ZJ.js → FilterLines-DCFzTCRB.js} +1 -1
- package/dist/client/assets/{Globe01-C2F_PPuX.js → Globe01-CnIzUI9D.js} +1 -1
- package/dist/client/assets/{Globe04-CMCnFTSr.js → Globe04-DtNi2ZyL.js} +1 -1
- package/dist/client/assets/{HardDrive-DmqNZKD8.js → HardDrive-CLNcCFxS.js} +1 -1
- package/dist/client/assets/{Key01-DbCU9LZF.js → Key01-28MkH09O.js} +1 -1
- package/dist/client/assets/{LinkExternal01-kQnRXU4w.js → LinkExternal01-BmdVn0um.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-D5OpQeQe.js → LockUnlocked01-xbaMcbOK.js} +1 -1
- package/dist/client/assets/{LogOut01-BePTyd5L.js → LogOut01-CUumDUY-.js} +1 -1
- package/dist/client/assets/{Monitor01-DPqlemzQ.js → Monitor01-DnWcZI3D.js} +1 -1
- package/dist/client/assets/{Palette-DzT0S9Gl.js → Palette-BbL1PNN-.js} +1 -1
- package/dist/client/assets/{Play-Btu3v5FX.js → Play-DWeLA7lK.js} +1 -1
- package/dist/client/assets/{Plus-B7vTVmKH.js → Plus-DEP38EYY.js} +1 -1
- package/dist/client/assets/{SearchLg-CAAIuTYj.js → SearchLg-BO_-rqE7.js} +1 -1
- package/dist/client/assets/{SearchMd-COQJLRw-.js → SearchMd-B7xHuJq4.js} +1 -1
- package/dist/client/assets/{Settings02-xEBQxvJD.js → Settings02-DE8fnfTk.js} +1 -1
- package/dist/client/assets/{Share07-CLkT7SlV.js → Share07-Bk8835lK.js} +1 -1
- package/dist/client/assets/{Shield01-C2USnj9G.js → Shield01-BUK8VCxJ.js} +1 -1
- package/dist/client/assets/{Stars01-DkoqcM4j.js → Stars01-C5onyQkg.js} +1 -1
- package/dist/client/assets/{Stars02-4GZ9SjIq.js → Stars02-b1P1T_48.js} +1 -1
- package/dist/client/assets/{Sun-D0KW7MLF.js → Sun-B_-yVQ2_.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DwxljZOI.js → SwitchHorizontal01-rtsYQduN.js} +1 -1
- package/dist/client/assets/{Tool01-tn2PFBHQ.js → Tool01-BMVX3tOF.js} +1 -1
- package/dist/client/assets/{Tool02-BalBR7uK.js → Tool02-WBvKkURX.js} +1 -1
- package/dist/client/assets/{Trash01-CwqV1gzD.js → Trash01-CiqyPob_.js} +1 -1
- package/dist/client/assets/{TrendUp01-6TR_k_0Y.js → TrendUp01-CahTnQ2p.js} +1 -1
- package/dist/client/assets/{Upload01-mqAHBbZV.js → Upload01-CWR5PH57.js} +1 -1
- package/dist/client/assets/{User01-DWaPmCwS.js → User01-S_RGxi2I.js} +1 -1
- package/dist/client/assets/{UserSquare-ClSByuB-.js → UserSquare-nHDcwF_u.js} +1 -1
- package/dist/client/assets/{Users01-CFDNbxgJ.js → Users01-OC7kfFvk.js} +1 -1
- package/dist/client/assets/{Users03-BT3gPqQL.js → Users03-CasZyOXJ.js} +1 -1
- package/dist/client/assets/{XCircle-BOrCVYLf.js → XCircle-BrD26F_t.js} +1 -1
- package/dist/client/assets/{XClose-DMSeuF30.js → XClose-DbkY8wiR.js} +1 -1
- package/dist/client/assets/{YAxis-CjueDU_j.js → YAxis-DrMnrLGw.js} +1 -1
- package/dist/client/assets/{Zap-CwYGo5D6.js → Zap-uo4AxzhY.js} +1 -1
- package/dist/client/assets/{ZapSquare-DkKtoQ7W.js → ZapSquare-BXyJZB2H.js} +1 -1
- package/dist/client/assets/{access-gate-DXIgG9H-.js → access-gate-Doy8MTWW.js} +1 -1
- package/dist/client/assets/{agent-icon-C9_7Msf7.js → agent-icon-BK-LdAbb.js} +1 -1
- package/dist/client/assets/{agents-list-CrYr2LdT.js → agents-list-BExPOUFd.js} +1 -1
- package/dist/client/assets/{ai-providers-9B822Ytz.js → ai-providers-ByfOx-iG.js} +1 -1
- package/dist/client/assets/{alert-DeOSO_Ec.js → alert-DHk1Duu5.js} +1 -1
- package/dist/client/assets/{alert-dialog-BWONJIzw.js → alert-dialog-EuQzy5n4.js} +1 -1
- package/dist/client/assets/{api-keys-BHGQjiZT.js → api-keys-CkO4l_xX.js} +1 -1
- package/dist/client/assets/{app-editor-GCmyfLNC.js → app-editor-BqXRQEpA.js} +1 -1
- package/dist/client/assets/{auth-BqxUQw-v.js → auth-Ck-CYI0s.js} +1 -1
- package/dist/client/assets/{auth-catchall-q5v2tPZU.js → auth-catchall-Bwnt6nAM.js} +1 -1
- package/dist/client/assets/{auth-entry-Dx-_gZ2g.js → auth-entry-xKtC3zLP.js} +1 -1
- package/dist/client/assets/{auth-split-layout-YdeWuYN1.js → auth-split-layout-BQ1bEHAM.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DRVU48ic.js → authenticate-and-persist-oauth-Bnxs7yjQ.js} +1 -1
- package/dist/client/assets/{automation-list-row-BMiRTeOK.js → automation-list-row-CbU006h8.js} +1 -1
- package/dist/client/assets/{automation-runs-CzcGADVN.js → automation-runs-DJXgmGit.js} +1 -1
- package/dist/client/assets/{automations-DDnrk0LJ.js → automations-4WtbAMRr.js} +1 -1
- package/dist/client/assets/{avatar-1XE5IjoT.js → avatar-BGhjOwGM.js} +1 -1
- package/dist/client/assets/{badge-CXIV4O-0.js → badge-Db5xIffE.js} +1 -1
- package/dist/client/assets/{block-document-BufBxpL6.js → block-document-BreIOxf_.js} +1 -1
- package/dist/client/assets/{breadcrumb-FUX_wv57.js → breadcrumb-yuTxiBYX.js} +1 -1
- package/dist/client/assets/{buckets-DQPGFSM3.js → buckets-DpGmU5zM.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-CNgfZPUK.js → bulk-category-panel--UILFV7T.js} +1 -1
- package/dist/client/assets/{capability-load-error-BKGEHfpt.js → capability-load-error-D0M3HC9t.js} +1 -1
- package/dist/client/assets/{cards-DJSm_nho.js → cards-DjdS8mnO.js} +1 -1
- package/dist/client/assets/{category-editor-ByRsnfkE.js → category-editor-BVw0za2r.js} +1 -1
- package/dist/client/assets/{chart-Bgue_7DQ.js → chart-CsLoGKFV.js} +1 -1
- package/dist/client/assets/{chat-context-C-BdNZCf.js → chat-context-BaV72O1g.js} +1 -1
- package/dist/client/assets/{checkbox-DvC3nAT5.js → checkbox-YMTFrO1r.js} +1 -1
- package/dist/client/assets/{choose-editor-CFBXNqp3.js → choose-editor-BlU5Wexq.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CUav6RQy.js → cli-auth-success-z65wjSmk.js} +1 -1
- package/dist/client/assets/{collection-detail-LByozjyF.js → collection-detail-Bqyrlcae.js} +1 -1
- package/dist/client/assets/{collection-display-button-D4ItaSc8.js → collection-display-button-CUsSTflP.js} +1 -1
- package/dist/client/assets/{collection-search-DBnGb4Zg.js → collection-search-CiPLUXMb.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DCUZlFkx.js → collection-table-wrapper-ClqU84Kc.js} +1 -1
- package/dist/client/assets/{collection-tabs-CAUEdmSI.js → collection-tabs-B32iAo6N.js} +1 -1
- package/dist/client/assets/{command-Ct_4mokr.js → command-DOfXQ3iQ.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-C2UgJ-TR.js → commerce-onboarding-BhfT16ic.js} +1 -1
- package/dist/client/assets/{config-DG69PD1X.js → config-sObTbFZQ.js} +1 -1
- package/dist/client/assets/{connect-DLRRtQi0.js → connect-C5xAKAEp.js} +1 -1
- package/dist/client/assets/{connection-Dg1mnPcO.js → connection-RGa3bMYb.js} +1 -1
- package/dist/client/assets/{connection-card-CgUgSGsh.js → connection-card-CaXPkEtx.js} +1 -1
- package/dist/client/assets/{connection-detail-CAhXUEiD.js → connection-detail-j6Hg2C9_.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-gU6TF210.js → connection-form-helpers-CAJu7GAu.js} +1 -1
- package/dist/client/assets/{connections-tQk1fh_m.js → connections-BFlBx3eR.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DDszDk42.js → decopilot-sse-pool-RJKXQFNl.js} +1 -1
- package/dist/client/assets/{dialog-DYg0AoO0.js → dialog-v9lm8kV3.js} +1 -1
- package/dist/client/assets/{domain-settings-xR7ZmjBb.js → domain-settings-DtzQhB08.js} +1 -1
- package/dist/client/assets/{drawer-DrqU_8fl.js → drawer-DBmJy2OH.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BGreHXNg.js → dropdown-menu-kAhQsmIq.js} +1 -1
- package/dist/client/assets/{empty-state-DNKOHljA.js → empty-state-DGfgLPT9.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BI_gbc3h.js → extract-connection-data-BPW_Djea.js} +1 -1
- package/dist/client/assets/{file-explorer-D9_-DWtI.js → file-explorer-D9vNN4Ai.js} +1 -1
- package/dist/client/assets/{file-type-icon-Cr_jiDFe.js → file-type-icon-Cp2yVzTz.js} +1 -1
- package/dist/client/assets/{form-DUYaeuN1.js → form-KfWVSNEC.js} +1 -1
- package/dist/client/assets/{general-CVMzbMNL.js → general-Cq15YFKz.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BjTlfZRh.js → github-repo-picker-BgSzUzWL.js} +1 -1
- package/dist/client/assets/{hooks-DvV-YCly.js → hooks-ndMd0rOE.js} +1 -1
- package/dist/client/assets/{index-CgA3qf5E.js → index-AYOlfrqu.js} +1 -1
- package/dist/client/assets/{index-BOALwCeh.js → index-BAkM-bvY.js} +1 -1
- package/dist/client/assets/{index-Bk7mmffp.js → index-BLOTG8F6.js} +1 -1
- package/dist/client/assets/{index-pYJ2-T-r.js → index-BMtomEba.js} +1 -1
- package/dist/client/assets/{index-BWVLjCpL.js → index-BUlvC5Z0.js} +6 -6
- package/dist/client/assets/{index-RXRS2M8q.js → index-Cvq1ebr1.js} +1 -1
- package/dist/client/assets/{index-CxsfTXSQ.js → index-DkH2JDxv.js} +1 -1
- package/dist/client/assets/{index-CXtbLiKC.js → index-Gwx_pD8S.js} +1 -1
- package/dist/client/assets/{index-DHLutK6v.js → index-kc-p0Tho.js} +3 -3
- package/dist/client/assets/{index-redirect-CUFx5Ci3.js → index-redirect-Dtrld574.js} +1 -1
- package/dist/client/assets/{infra-billing-C7HR_T7J.js → infra-billing-CiXyqP0z.js} +1 -1
- package/dist/client/assets/{input-zNG5Uz1T.js → input-CoA1YEYW.js} +1 -1
- package/dist/client/assets/{integration-icon-CVsQlE88.js → integration-icon-Db_3_1Xt.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BocroOxJ.js → invite-member-dialog--rStSant.js} +1 -1
- package/dist/client/assets/{label-CEq9oqa2.js → label-COrU7OvG.js} +1 -1
- package/dist/client/assets/{layout-DFoH_xu7.js → layout-Dw5HsV5p.js} +1 -1
- package/dist/client/assets/{login-DQ-omlrv.js → login-zSNYYLrC.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DGSZYZtZ.js → mcp-oauth-KDpSMvkd.js} +1 -1
- package/dist/client/assets/{members-1vFWUjqy.js → members-DBUg3WK3.js} +1 -1
- package/dist/client/assets/{monaco-editor-BIUU4YtT.js → monaco-editor-C37CkGWQ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Drb7zrQ3.js → monitoring-stats-row-4aj-ddP2.js} +1 -1
- package/dist/client/assets/{multi-select-CeA0LiDA.js → multi-select-CNe6aWif.js} +1 -1
- package/dist/client/assets/{oauth-callback-BLBnsV0m.js → oauth-callback-CplvzY-h.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-_ZIgbe1k.js → oauth-callback-ai-provider-xi9UFQxQ.js} +1 -1
- package/dist/client/assets/{onboarding-DHEpPKxX.js → onboarding-D0Phxs-H.js} +1 -1
- package/dist/client/assets/{org-layout-CZwey9tp.js → org-layout-BMiLJodT.js} +1 -1
- package/dist/client/assets/{organization-choice-CinweDu8.js → organization-choice-BM0bUwZh.js} +1 -1
- package/dist/client/assets/{orgs-Cewt5f_m.js → orgs-B3KfLtXg.js} +1 -1
- package/dist/client/assets/{page-seo-form-DCXZwoTq.js → page-seo-form-B-kTujwr.js} +1 -1
- package/dist/client/assets/{popover-CPDUuAsK.js → popover-B0YbN5z6.js} +1 -1
- package/dist/client/assets/{post-calendar-B2MLz9zN.js → post-calendar-Dtrz1ddb.js} +1 -1
- package/dist/client/assets/{post-editor-xPbcpUyS.js → post-editor-DsQuK9Oa.js} +1 -1
- package/dist/client/assets/{primitives-bdzFl9KQ.js → primitives-Xx0pIitg.js} +1 -1
- package/dist/client/assets/{profile-DRVuFWo1.js → profile-DytMpCX8.js} +1 -1
- package/dist/client/assets/{project-app-view-C0-tH6m6.js → project-app-view-CgtJDq_r.js} +1 -1
- package/dist/client/assets/{prompts-DHayAFpv.js → prompts-DGB_aYxK.js} +1 -1
- package/dist/client/assets/record-editor-BKnPZeAl.js +1 -0
- package/dist/client/assets/{redirect-editor-OElGvzsY.js → redirect-editor-5tWecuOB.js} +1 -1
- package/dist/client/assets/registry-BH-InggM.js +2 -0
- package/dist/client/assets/{registry-layout-BTzECwAf.js → registry-layout-BObW66Mi.js} +1 -1
- package/dist/client/assets/{reports-BlhyDDdZ.js → reports-BKQhqTCw.js} +1 -1
- package/dist/client/assets/{require-capability-BJjD7GXa.js → require-capability-B-toWf1T.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Bi3hMcfQ.js → required-auth-layout-CPEZLxXW.js} +1 -1
- package/dist/client/assets/{reset-password-BLXOXnD3.js → reset-password-B2xsPOz7.js} +1 -1
- package/dist/client/assets/{review-settings-0bpnzbvB.js → review-settings-CQcW0UJP.js} +1 -1
- package/dist/client/assets/{roles-C9DLuLWB.js → roles-BahMe3Yj.js} +1 -1
- package/dist/client/assets/{scroll-area-Dw0578rC.js → scroll-area-Dy82C7p_.js} +1 -1
- package/dist/client/assets/{search-input-lOvS7ZZY.js → search-input-BupwGxLP.js} +1 -1
- package/dist/client/assets/{secrets-DEtSas2W.js → secrets-CMSdKJ02.js} +1 -1
- package/dist/client/assets/{sections-editor-DDSHgrQf.js → sections-editor-K0jU5DNu.js} +1 -1
- package/dist/client/assets/{select-W8jorDji.js → select-DwECBvqm.js} +1 -1
- package/dist/client/assets/{select-model-CVJuTB71.js → select-model-D3_B27r5.js} +1 -1
- package/dist/client/assets/{self-tool-result-DYCZ2dxI.js → self-tool-result-BWeTClq7.js} +1 -1
- package/dist/client/assets/{seo-editor-CqSjFrJe.js → seo-editor-Bv2R8igF.js} +1 -1
- package/dist/client/assets/{settings-layout-Cj60dDE0.js → settings-layout-BdmXRuID.js} +1 -1
- package/dist/client/assets/{shell-controls-CcajpdEy.js → shell-controls-Be5eyBnD.js} +1 -1
- package/dist/client/assets/{shell-layout-BbKgiGKQ.js → shell-layout-Btlvd1G3.js} +1 -1
- package/dist/client/assets/{spinner-DEaGcbnH.js → spinner-Ba0CkhBN.js} +1 -1
- package/dist/client/assets/{sso-DFyPw3S-.js → sso-zfNVjVfI.js} +1 -1
- package/dist/client/assets/{store-B-DY1jsG.js → store-CgKz3-lQ.js} +1 -1
- package/dist/client/assets/store-registry-CXJ_5Ae5.js +2 -0
- package/dist/client/assets/{super-agent-icon-DxowWKwv.js → super-agent-icon-f5MMUEZI.js} +1 -1
- package/dist/client/assets/{switch-BsAR0Ue8.js → switch-CvaUzcu8.js} +1 -1
- package/dist/client/assets/{synced-repos-BxJ8BZWX.js → synced-repos-VI3iwOU2.js} +1 -1
- package/dist/client/assets/{table-RKi74_kY.js → table-CNWQQ1ny.js} +1 -1
- package/dist/client/assets/{tabs-DFRRVuh7.js → tabs---ylShNh.js} +1 -1
- package/dist/client/assets/{task-board-D9PHUZff.js → task-board-d9aI3xON.js} +1 -1
- package/dist/client/assets/{tasks-CiijDgSs.js → tasks-CqsZedy1.js} +1 -1
- package/dist/client/assets/{textarea-XbuS70jj.js → textarea-CvXIGUrZ.js} +1 -1
- package/dist/client/assets/{toggle-group-WZyFFujP.js → toggle-group-9H7MENld.js} +1 -1
- package/dist/client/assets/{toolbar-CmaLqa3-.js → toolbar-CFGjTZKp.js} +1 -1
- package/dist/client/assets/{track-BFh4WctH.js → track-rDKtvIJ6.js} +1 -1
- package/dist/client/assets/{types-CrdXjhQP.js → types-BR-rJmTQ.js} +1 -1
- package/dist/client/assets/{use-ai-providers-WmO5B1wa.js → use-ai-providers-D-DLX2r-.js} +1 -1
- package/dist/client/assets/{use-api-keys-CHuWewKt.js → use-api-keys-Ba1kau-j.js} +1 -1
- package/dist/client/assets/{use-automations-g--nS4Go.js → use-automations-DCQErfJY.js} +1 -1
- package/dist/client/assets/{use-autosave-BsqWx81g.js → use-autosave-COQ2KNxK.js} +1 -1
- package/dist/client/assets/{use-connection-D8j2CnOC.js → use-connection-DN4iufew.js} +1 -1
- package/dist/client/assets/{use-copy-lK-vhEre.js → use-copy-BrNQw893.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Bdpos1w0.js → use-create-virtual-mcp-mTrVU1Cr.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DsCulVkO.js → use-debounced-autosave-C96mZ7FL.js} +1 -1
- package/dist/client/assets/{use-debounced-value-D5wCJf5h.js → use-debounced-value-w4-tTzSs.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CEhAvB_E.js → use-decopilot-events-DQphD5G3.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BAty9GWK.js → use-delete-connection-B2YaAVmg.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CD-qM4Qw.js → use-deployment-admin-ChQMmdpu.js} +1 -1
- package/dist/client/assets/{use-destination-route-BMJNYrmL.js → use-destination-route-DwR5EZdM.js} +1 -1
- package/dist/client/assets/{use-file-configs-CEny8PB8.js → use-file-configs-BQA5pT_r.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DzHJHyr0.js → use-infinite-scroll-xFY_A5TW.js} +1 -1
- package/dist/client/assets/{use-join-requests-z_I5qiFl.js → use-join-requests-BVeSRkzW.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-dyqIaOq0.js → use-mcp-auth-status-g4f-5p6M.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Bac4vccq.js → use-mcp-client-C2WpJqGp.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-FenH0JaE.js → use-mcp-tools-D2jDyaSa.js} +1 -1
- package/dist/client/assets/{use-members-_2HCzEHc.js → use-members-D3qbSIYx.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-yAkGdje4.js → use-navigate-to-agent-BnGGkvww.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Cb5lYh1t.js → use-org-auth-client-6ydcGnsW.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DbzFw6wJ.js → use-org-repo-syncs-ioAfxmUp.js} +1 -1
- package/dist/client/assets/{use-org-sso-cefqXe6X.js → use-org-sso-DMKUn11x.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DA6OSxjH.js → use-organization-roles-JJdzyzc2.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BsgcrCz-.js → use-organization-settings-BqyTxtql.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-C8-xot4V.js → use-panel-navigate-DSXuFDWh.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BoC6e9Ko.js → use-registry-connections-owrgLOps.js} +1 -1
- package/dist/client/assets/{use-secrets-CNOFekf-.js → use-secrets-D8LOTarp.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CFAiIdAN.js → use-section-preview-base-BWjBzoZV.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CdtGOM4G.js → use-status-sounds-BxmwD3Ts.js} +1 -1
- package/dist/client/assets/{use-tags-CnmdA4eJ.js → use-tags-CsnYBdZ3.js} +1 -1
- package/dist/client/assets/{use-view-mode-DHrNQrCI.js → use-view-mode-Ce8VSwQi.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-X7MaI4-V.js → use-virtual-mcp-C1lgXcOb.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-PqMaSXlJ.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-BO55lV73.js +1 -0
- package/dist/client/assets/{users-CNOqKONO.js → users-WlHHd84i.js} +1 -1
- package/dist/client/assets/{variant-calendar-DzbjSxwP.js → variant-calendar-BbU1vB51.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-C_beZllv.js → view-mode-toggle-SNjppYRr.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/record-editor-BabiokFj.js +0 -1
- package/dist/client/assets/registry-Bpp0Gik6.js +0 -2
- package/dist/client/assets/store-registry-CW8CS7Je.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CP11XfQS.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-vPet_vok.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -985,9 +985,9 @@ Repositories imported into this organization:
|
|
|
985
985
|
${X}
|
|
986
986
|
|
|
987
987
|
Pass the connectionId of the repo to load.`}async function UJ$($){let{ctx:Z,orgId:X,virtualMcpId:Q,userId:Y,threadId:G,writer:J,rebindFs:W}=$;if(!xG(Q))return null;let K=await xF4(Z,X);if(K.length===0)return null;let F=new Map(K.map((H)=>[H.connectionId,H]));return I$({description:gF4(K),inputSchema:$0(FJ$.object({connectionId:FJ$.string().describe("connectionId of the imported repository to load (see the list in this tool's description).")})),execute:async({connectionId:H})=>{let N=F.get(H);if(!N)return{success:!1,error:`No imported repository found for connectionId "${H}". Available: ${K.map((k)=>k.connectionId).join(", ")||"none"}.`};let U=uH(G,N.connectionId),B={url:`https://github.com/${N.owner}/${N.repo}`,owner:N.owner,name:N.repo,installationId:N.installationId,connectionId:N.connectionId},O=await Z.storage.threads.get(G);await Z.storage.threads.update(G,{metadata:{...O?.metadata??{},githubRepo:B},branch:U,updated_by:Y});let L=await ly({virtualMcpId:Q,branch:U},Z),w=sp(I9(O?.metadata),Y,U,L);J.write({type:"data-open-preview",id:G,data:{previewUrl:L.previewUrl??null,branch:U,githubRepo:B,sandboxMap:w}});let E=await dy(Z,{virtualMcpId:Q,branch:U,userId:Y,threadId:G}),j=Date.now()+HJ$,z="",A=!1,P=0,I=null;while(Date.now()<j){let k=await E.onBash("if git -C /app/repo rev-parse HEAD >/dev/null 2>&1; then echo __CLONED__; fi; ls -A /app/repo 2>/dev/null").then((m)=>({ok:!0,stdout:m.stdout})).catch(()=>({ok:!1,stdout:""}));if(!k.ok){if(++P>=bF4)break;await L$(NJ$);continue}P=0;let S=yF4(k.stdout);if(S.cloned&&S.listing===I){A=!0,z=S.listing;break}I=S.cloned?S.listing:null,await L$(NJ$)}let q=!1;if(A&&W)try{await W(U),q=!0}catch(k){console.warn("[load_repo] live fs rebind failed",k)}return{success:!0,repo:`${N.owner}/${N.repo}`,previewUrl:L.previewUrl??null,cloned:A,files:z,message:!A?`Loaded ${N.owner}/${N.repo} and opened the Preview, but the clone did not finish within ${Math.round(HJ$/1000)}s. It may still be in progress \u2014 your file tools will use it next message.`:q?`Loaded ${N.owner}/${N.repo} and opened the Preview. The repo is cloned and its dev server is booting. Your file tools (read/write/edit/bash/grep/glob) now operate on it \u2014 you can use it right away.`:`Loaded ${N.owner}/${N.repo} and opened the Preview. The repo is cloned and its dev server is booting. Your file tools operate on it from your next message.`}}})}var HJ$=120000,NJ$=1500,bF4=5;var oO0=D(()=>{W4();D4();_Q();_8();iQ();xn();y3();tO0()});import{AsyncLocalStorage as hF4}from"async_hooks";function rO0(){let $=aH.getStore();if(!$)throw Error("This tool is only available on a task run's MCP endpoint (/api/<org>/mcp/task-run/<threadId>).");return $}function OJ$($){return DK.some((X)=>wE($,X))?yn0:BJ$}var aH,BJ$,yn0;var xO=D(()=>{C6();aH=new hF4;BJ$=["TASK_ADD_REPO","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_PRS_GET","TASK_BOARD_ITEM_PR_LINK","TASK_BOARD_ACTIVITY_LIST","TASK_BOARD_COMMENT_LIST","TASK_BOARD_COMMENT_CREATE","TASK_BOARD_COMMENT_UPDATE"],yn0=[...BJ$,"TASK_BOARD_REVIEW_DECISION"]});import{z as GJ}from"zod";async function dF4($,Z,X,Q){return g6(async()=>{let Y=RK(await Y70($,Z),X,Q);if(!Y)throw Error("sandbox record not written yet");return Y},{maxAttempts:uF4,minTimeout:cF4,maxTimeout:lF4,jitter:0}).catch(()=>null)}function iF4($,Z,X=jJ$){let Q=(G)=>`${G.owner}/${G.name}`.toLowerCase(),Y=Q(Z);if($.some((G)=>Q(G)===Y))return!1;return $.length>=X}async function wJ$($,Z,X,Q){let Y=await $.proxyDaemonRequest(Z,"/_sandbox/bash",{method:"POST",headers:new Headers({"content-type":"application/json","x-thread-id":X}),body:JSON.stringify({command:Q})});if(!Y.ok)throw Error(`sandbox bash failed (${Y.status} ${Y.statusText})`);let G=await Y.json();return{stdout:G.stdout??"",exitCode:G.exitCode??0}}function pF4($){let Z=$.split(`
|
|
988
|
-
`).map((
|
|
988
|
+
`).map((Y)=>Y.trim()),X=Z.includes("__CLONED__"),Q=Z.filter((Y)=>Y&&Y!==".git"&&Y!=="__CLONED__");return{cloned:X,listing:Q.join(`
|
|
989
989
|
`)}}async function tF4($,Z){let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"});return my(X)}async function oF4($,Z){let X=Xn(Z);return(await Promise.all(Z.map(async(Y,G)=>{if(!Y.connectionId)return null;try{let{cloneUrl:J}=await IK(Y.connectionId,Y.owner,Y.name,$.db,$.vault,{bufferMs:EJ$});return{cloneUrl:J,repoName:X[G],submoduleCredentials:[]}}catch(J){return console.warn(`[TASK_ADD_REPO] skipping secondary ${Y.owner}/${Y.name}:`,J instanceof Error?J.message:J),null}}))).filter((Y)=>Y!==null)}var EJ$=3300000,uF4=4,cF4=250,lF4=2000,DJ$=45000,LJ$=1500,mF4=5,jJ$=20,nF4,gn0;var zJ$=D(()=>{M0();oO0();pO0();l3();Ty();iQ();y3();W4();xO();nF4=['token=$(git remote get-url origin | sed -n "s|.*x-access-token:\\([^@]*\\)@.*|\\1|p")','[ -n "$token" ] || exit 0','mkdir -p "${HOME:-/root}/.config/gh"',"umask 077",'printf "github.com:\\n oauth_token: %s\\n git_protocol: https\\n" "$token" > "${HOME:-/root}/.config/gh/hosts.yml"'].join(`
|
|
990
|
-
`);gn0=u({name:"TASK_ADD_REPO",description:"Clone one of this organization's repositories into your working directory. "+"Your working directory is EMPTY until you call this \u2014 do not look for "+"files, and do not run git, before it returns. Call it once, with the repository the task is about; it waits for the checkout and returns the repository root listing, so you can start reading files immediately after. `git` and `gh` are authenticated once it returns. Call TASK_ADD_REPO with no arguments to list the repositories available.",annotations:{title:"Add Repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:GJ.object({connectionId:GJ.string().optional().describe("connectionId of the repository to clone. Omit to list the available repositories.")}),outputSchema:GJ.object({success:GJ.boolean(),repositories:GJ.array(GJ.object({connectionId:GJ.string(),repo:GJ.string()})).optional(),repo:GJ.string().optional(),cloned:GJ.boolean().optional(),files:GJ.string().optional(),message:GJ.string()}),handler:async($,Z)=>{o(Z),await Z.access.check();let X=t(Z),Q=o0(Z);if(!Q)throw Error("User ID required");let{threadId:Y}=rO0(),G=await tF4(Z,X.id),J=$.connectionId?G.find((i)=>i.connectionId===$.connectionId):void 0;if(!J){let i=G.map((c)=>({connectionId:c.connectionId,repo:`${c.owner}/${c.repo}`}));return{success:!1,repositories:i,message:$.connectionId?`No imported repository for connectionId "${$.connectionId}". Pick one of the repositories listed.`:i.length===0?"This organization has no repositories imported, so none can be cloned.":"Pick a repository and call TASK_ADD_REPO again with its connectionId."}}let W=await Z.storage.threads.get(Y);if(!W)throw Error(`Thread not found: ${Y}`);let K=await Q70(Z,{threadId:Y,runBranch:W.branch}),F=await vE(Z,K,Q),H=await $Q(Z),N=await dF4(Z,Y,F,K);if(!N)throw Error(`No sandbox is registered for this run (thread ${Y}), so there is nowhere to clone into.`);let U=W.metadata?.githubRepo?.owner,B=W.metadata?.githubRepos??[];if(U&&iF4(B,{owner:J.owner,name:J.repo}))return{success:!1,repo:`${J.owner}/${J.repo}`,cloned:!1,message:`This run already has ${jJ$} additional repositories checked out, which is the limit. Work with what's already checked out instead of adding another.`};await TO({ctx:Z,connectionId:J.connectionId,organizationId:X.id,forceRefresh:!0,onLegacyMintError:(i)=>console.error("[TASK_ADD_REPO] legacy repo-scoped mint failed",{connectionId:J.connectionId,error:i.message})});let{cloneUrl:O,gitUserName:L,gitUserEmail:w}=await IK(J.connectionId,J.owner,J.repo,Z.db,Z.vault,{bufferMs:EJ$}),E={url:`https://github.com/${J.owner}/${J.repo}`,owner:J.owner,name:J.repo,installationId:J.installationId,connectionId:J.connectionId},j=!U,z=j?[]:await Z.storage.threads.appendThreadGithubRepo(Y,E);if(j)await Z.storage.threads.update(Y,{metadata:{...W.metadata??{},githubRepo:E},updated_by:Q});let A=iO0({branch:K,derivedRef:cH(K),recordedHeadRef:null,sticky:!1}),P=await H.proxyDaemonRequest(N.sandboxHandle,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{...j?{repository:{cloneUrl:O,branch:A,repoName:`${J.owner}/${J.repo}`}}:{repositories:await oF4(Z,z)},identity:{userName:L,userEmail:w}}})});if(!P.ok)throw Error(`the sandbox rejected the repository (${P.status} ${P.statusText})`);await H.proxyDaemonRequest(N.sandboxHandle,"/_sandbox/setup/clone",{method:"POST",headers:new Headers({"content-type":"application/json"}),body:"{}"}).catch((i)=>{console.warn("[TASK_ADD_REPO] explicit clone kick failed",i)});let I=j?null:Q5$(z,{owner:J.owner,name:J.repo}),q=j||!I?".":`"$(dirname "$PWD")/repos/${I}"`,k=Date.now()+DJ$,S=!1,m="",f=0,b=null;while(Date.now()<k){let i=await wJ$(H,N.sandboxHandle,Y,`cd ${q} 2>/dev/null || exit 1; if git rev-parse HEAD >/dev/null 2>&1; then echo __CLONED__; fi; ls -A 2>/dev/null`).catch(()=>null);if(!i){if(++f>=mF4)break;await L$(LJ$);continue}f=0;let c=pF4(i.stdout);if(c.cloned&&c.listing===b){S=!0,m=c.listing;break}b=c.cloned?c.listing:null,await L$(LJ$)}if(S)await wJ$(H,N.sandboxHandle,Y,nF4).catch((i)=>console.warn("[TASK_ADD_REPO] gh auth setup failed",i));return{success:S,repo:`${J.owner}/${J.repo}`,cloned:S,files:m,message:S?j?`${J.owner}/${J.repo} is checked out at your working directory on branch ${A}. \`git\` and \`gh\` are authenticated. Start working.`:`${J.owner}/${J.repo} is checked out at ../repos/${I}, beside your working directory, on its default branch. \`git\` and \`gh\` are authenticated there too. Your first checkout is untouched \u2014 commit and open a pull request in each repository you change.`:`The clone of ${J.owner}/${J.repo} did not finish within ${Math.round(DJ$/1000)}s. It may still be in progress \u2014 check your working directory before calling this again.`}}})});function TJ$($){return typeof $==="string"&&hn0.includes($)}function AJ$($){if(!$.startsAt)return null;let Z=Date.parse($.startsAt);return Number.isNaN(Z)?null:Z}function RJ$($,Z){let X=PJ$[$.state]-PJ$[Z.state];if(X!==0)return X;let Q=AJ$($),Y=AJ$(Z);if(Q===null||Y===null){if(Q!==Y)return Q===null?1:-1}else if(Q!==Y)return $.state==="closed"?Y-Q:Q-Y;return $.name.localeCompare(Z.name)||$.id.localeCompare(Z.id)}var hn0,PJ$;var aO0=D(()=>{hn0=["active","future","closed"];PJ$={active:0,future:1,closed:2}});import{z as A1}from"zod";var sO0=50000,eO0=500,$D0=200,d3,IJ$,yn,BC,rF4,aF4,sF4,qJ$,iy,eF4,$H4,MJ$;var m3=D(()=>{aO0();C6();C6();d3=A1.enum(["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"]),IJ$=A1.object({id:A1.string(),name:A1.string(),state:A1.enum(hn0),startsAt:A1.string().nullable(),endsAt:A1.string().nullable()}),yn=A1.enum(["bug","feature","chore","spike","security"]),BC=A1.enum(["none","low","medium","high","urgent"]),rF4=A1.object({threadId:A1.string(),virtualMcpId:A1.string().nullable(),status:A1.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:A1.string().nullable(),lastMessage:A1.string().nullable(),hasPreview:A1.boolean(),failureKind:A1.string().nullable(),hasMessages:A1.boolean(),costUsd:A1.number().nullable(),costProvider:A1.string().nullable(),createdAt:A1.string(),lastActiveAt:A1.string()}),aF4=A1.object({reviewer:A1.enum(DK),verdict:A1.enum(["approved","changes_requested"]),verified:A1.boolean()}),sF4=A1.object({id:A1.string(),name:A1.string(),color:A1.string().nullable().describe('Hex color, e.g. "#3b82f6"'),createdBy:A1.string(),createdAt:A1.string().datetime()}),qJ$=A1.object({url:A1.string(),number:A1.number(),repoOwner:A1.string(),repoName:A1.string(),createdAt:A1.string(),title:A1.string().nullable(),body:A1.string().nullable(),state:A1.enum(["open","closed"]).nullable(),draft:A1.boolean().nullable(),merged:A1.boolean().nullable(),mergeable:A1.boolean().nullable(),checksStatus:A1.enum(["pending","passing","failing"]).nullable(),checks:A1.array(A1.object({name:A1.string(),status:A1.string(),conclusion:A1.string().nullable(),detailsUrl:A1.string().nullable(),summary:A1.string().nullable()})),previewUrl:A1.string().nullable()}),iy=A1.object({id:A1.string(),organizationId:A1.string(),title:A1.string(),description:A1.string().nullable(),status:d3,priority:BC,type:yn,assigneeId:A1.string().nullable(),assignedBy:A1.string().nullable(),repo:A1.string().nullable(),dueDate:A1.string().datetime().nullable(),sprintId:A1.string().nullable(),sortOrder:A1.number(),keySeq:A1.number().nullable(),jiraIssueKey:A1.string().nullable(),retryAttempts:A1.number(),threads:A1.array(rF4),tags:A1.array(sF4),reviewVerdicts:A1.array(aF4),createdBy:A1.string(),createdAt:A1.string().datetime(),updatedBy:A1.string(),updatedAt:A1.string().datetime()}),eF4=["created","status_changed","assignee_changed","priority_changed","due_date_changed","title_changed","description_changed","tags_changed","review_requested","review_approved","review_changes_requested","merge_conflict_resolution","merge_failed","type_changed"],$H4=A1.enum(eF4),MJ$=A1.object({id:A1.string(),taskBoardItemId:A1.string(),action:$H4,actorId:A1.string().nullable(),data:A1.record(A1.string(),A1.unknown()),occurredAt:A1.string().datetime()})});async function ZD0($,Z,X){if(X===Y8)return;let{members:Q}=await $.boundAuth.organization.listMembers({organizationId:Z,filterField:"userId",filterValue:X});if(!Q.some((Y)=>Y.userId===X))throw Error("assigneeId is not a member of the organization")}var un0=D(()=>{m3()});function SJ$($){let Z={};for(let[X,Q]of Object.entries($)){if(X.startsWith(ZH4))continue;Z[X]=Q}return Z}function XD0($){return{taskBoardItemId:$.id,...xQ($)&&{[kJ$]:VJ$}}}function XH4($){return $?.[kJ$]===VJ$}function QH4($){if(/[:\s]/.test($))throw Error("organization id unsuitable for the subsidy key scheme");return`subsidy:${$}`}async function YH4($,Z){let X=b0();try{let Q=await $.storage.subsidizedGatewayKeys.get(Z);if(Q)return Q;let Y=$.auth?.user?.id;if(Y&&X.aiGatewayEnabled&&X.studioProvisionSecretKey&&cB.provisionKey){let G=await xW(Y,$.auth?.user?.email),J=await cB.provisionKey(G,QH4(Z));return await $.storage.subsidizedGatewayKeys.put(Z,J),J}}catch(Q){console.error("[subsidized-runs] subsidy key unavailable \u2014 run stays on the org's key:",Q)}return}async function CJ$($,Z,X){if(!b0().taskQuotaEnforced)return;if(!XH4(X))return;let Q=X?.taskBoardItemId;if(!Q)return;let Y=await $.storage.taskBoard.getById(Q,Z);if(!Y||!xQ(Y))return;if(!await Y0$($,Q))return;return await YH4($,Z)}function _J$($,Z){if(!Z)return $;if($.providerId!=="deco")return $;return{...$,apiKey:Z}}var ZH4="srv.",kJ$="srv.billing",VJ$="subscription";var gn=D(()=>{P90();bU();R$();aG()});function QD0($){let Z=$?.runClass;return Z&&Z in cn0?cn0[Z]:cn0.interactive}var cn0,py="runClass";var ny=D(()=>{cn0={interactive:10,reviewer:20,retry:30,new_task:40}});async function ln0($,Z,X){let Q;try{return await Promise.race([$.aiProviders.listModels(Z,X),new Promise((G,J)=>{Q=setTimeout(()=>J(Error("listModels timeout")),GH4)})])}finally{if(Q)clearTimeout(Q)}}function JH4($,Z){switch($){case"fast":return Z.chat.fast;case"smart":return Z.chat.smart;case"thinking":return Z.chat.thinking;case"image":return Z.image;case"web_search":return Z.webSearch;case"deep_research":return Z.deepResearch}}function dn0($,Z,X){let Q=$.find((Y)=>Y.modelId===Z);return{title:Q?.title??X??Z,providerId:Q?.providerId,capabilities:Q?.capabilities,limits:Q?.limits??null}}async function cZ($,Z,X){let Q=$.organization?.id;if(!Q)throw Error("resolveTier called without an organization");let G=(await $.storage.organizationSettings.get(Q))?.simple_mode?.tiers?.[Z]??null,J=$.auth?.user?.id,W=$O.safeParse(Z),K=X?.applyUserPrefs&&W.success&&J?(await $.storage.userModelPreferences.get(J,Q))?.tiers?.[W.data]??null:null,F=(await $.storage.aiProviderKeys.list({organizationId:Q})).filter((O)=>Qw(O.providerId));for(let O of[K,G])if(O&&F.some((L)=>L.id===O.keyId)){let L=await ln0($,O.keyId,Q).catch(()=>[]);return{credentialId:O.keyId,modelId:O.modelId,modelMeta:dn0(L,O.modelId,O.title)}}if(F.length===0)throw new ty(Z);let H={};await Promise.all(F.map(async(O)=>{H[O.id]=await ln0($,O.id,Q).catch(()=>[])}));let N=F.map((O)=>({id:O.id,providerId:O.providerId,label:O.label,presetId:O.presetId,createdBy:O.createdBy,createdAt:O.createdAt})),U=Gh1(N,H),B=JH4(Z,U);if(!B)throw new ty(Z);return{credentialId:B.keyId,modelId:B.modelId,modelMeta:dn0(H[B.keyId]??[],B.modelId,B.title)}}async function vJ$($,Z,X){let Q=$.organization?.id;if(!Q)throw Error("resolveSpecificModel called without an organization");let Y=await $.storage.aiProviderKeys.findById(Z,Q).catch((J)=>{if(J instanceof Error&&J.message==="Provider key not found")throw new hn(`AI provider credential "${Z}" was not found`,{cause:J});throw J});if(!Qw(Y.providerId))throw new hn(`AI provider credential "${Z}" uses native-only provider "${Y.providerId}" and cannot run a hosted model`);let G=await ln0($,Z,Q).catch(()=>[]);return{credentialId:Z,modelId:X,modelMeta:dn0(G,X)}}async function JJ($,Z){try{return await cZ($,Z)}catch(X){if(X instanceof ty)return null;return console.warn(`[resolveTier] tier "${Z}" resolution failed:`,X),null}}var ty,hn,GH4=5000;var sH=D(()=>{xZ();_8();ty=class ty extends Error{tier;constructor($){super(`No model available for tier "${$}". Connect a provider or configure the tier in organization settings.`);this.tier=$;this.name="TierUnavailableError"}};hn=class hn extends Error{constructor($,Z){super($,Z);this.name="SpecificModelCredentialUnavailableError"}}});function fJ$($){return $ instanceof CK||typeof $==="object"&&$!==null&&$.permanent===!0}var CK;var mn0=D(()=>{CK=class CK extends Error{permanent=!0;code;constructor($,Z){super(Z);this.name="PermanentRunError",this.code=$}}});function xJ$($){return $==="reviewer"?"reviewer":"default"}function gJ$($,Z="default"){let{providerId:X,apiKey:Q,baseUrl:Y}=$,G=KH4[Z],J={CLAUDE_CODE_MAX_OUTPUT_TOKENS:`${WH4}`,CLAUDE_CODE_MAX_TURNS:G===null?null:`${G}`};if(X==="anthropic")return{...J,CLAUDE_CODE_MODEL:in0.anthropic[Z],ANTHROPIC_API_KEY:Q,ANTHROPIC_AUTH_TOKEN:null,CLAUDE_CODE_OAUTH_TOKEN:null,ANTHROPIC_BASE_URL:Y??null};if(X==="claude-subscription")return{...J,CLAUDE_CODE_MODEL:in0.anthropic[Z],CLAUDE_CODE_OAUTH_TOKEN:Q,ANTHROPIC_API_KEY:null,ANTHROPIC_AUTH_TOKEN:null,ANTHROPIC_BASE_URL:null};if(X==="openrouter"||X==="deco")return{...J,CLAUDE_CODE_MODEL:in0.openrouter[Z],ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:Q,CLAUDE_CODE_OAUTH_TOKEN:null,ANTHROPIC_BASE_URL:Y??"https://openrouter.ai/api"};throw new yJ$(X)}var bJ$="claude-subscription",in0,YD0="claudeCodeModelClass",WH4=32000,KH4,yJ$;var GD0=D(()=>{in0={anthropic:{default:"claude-opus-5",reviewer:"claude-sonnet-5"},openrouter:{default:"anthropic/claude-opus-5",reviewer:"anthropic/claude-sonnet-5"}};KH4={default:null,reviewer:60};yJ$=class yJ$ extends Error{constructor($){super(`the claude-code harness needs an Anthropic, OpenRouter or Deco model credential; this run's model resolves to "${$}". Point the agent's thinking model at one of those, or run it with Decopilot.`);this.name="UnsupportedClaudeCodeProviderError"}}});import{z as d1}from"zod";var hJ$,FH4,un,HH4,NH4,NR9;var uJ$=D(()=>{hJ$=d1.object({chunks:d1.array(d1.unknown()),done:d1.boolean().nullish().transform(($)=>$??!1),error:d1.object({code:d1.string(),message:d1.string()}).nullish().transform(($)=>$??null)}),FH4=d1.record(d1.string(),d1.unknown()),un=d1.object({id:d1.string(),title:d1.string().optional(),provider:d1.string().nullable().optional(),credentialId:d1.string(),limits:d1.object({contextWindow:d1.number().int().positive().optional(),maxOutputTokens:d1.number().int().positive().optional()}).optional(),capabilities:d1.object({vision:d1.boolean().optional(),text:d1.boolean().optional(),reasoning:d1.boolean().optional()}).optional()}).strict(),HH4=d1.object({thinking:un.extend({title:d1.string()}),fast:un.optional(),smart:un.optional(),image:un.optional(),deepResearch:un.optional()}).strict(),NH4=d1.discriminatedUnion("cwd",[d1.object({cwd:d1.literal("/repo"),repo:d1.object({owner:d1.string(),name:d1.string(),connectedGithub:d1.boolean()}).strict().optional(),branch:d1.string().nullable()}).strict(),d1.object({cwd:d1.null()}).strict()]),NR9=d1.object({threadId:d1.string(),userMessage:FH4,harness:d1.object({sessionId:d1.string().optional()}).strict(),workspace:NH4,models:HH4,mcp:d1.object({url:d1.string().url(),headers:d1.record(d1.string(),d1.string()),expiresAt:d1.number().int().positive()}).strict(),orgMcps:d1.array(d1.object({name:d1.string(),url:d1.string().url(),headers:d1.record(d1.string(),d1.string())}).strict()).optional(),mode:d1.enum(["default","plan","web-search","gen-image"]),temperature:d1.number(),toolApprovalLevel:d1.enum(["auto","readonly"]),toolAllowlist:d1.array(d1.string()).nullable().optional(),maxAgentSteps:d1.number().int().optional(),user:d1.object({id:d1.string(),email:d1.string()}).strict(),organizationId:d1.string(),agent:d1.object({id:d1.string(),instructions:d1.string().optional(),disallowedTools:d1.array(d1.string()).optional()}).strict(),currentThreadTitle:d1.string().optional(),resume:d1.object({reason:d1.string()}).strict().optional()}).strict()});var cJ$="sandbox_gone",JD0="[SANDBOX_UNREACHABLE]";function UH4($){let Z=[$.contentType??"file"];if($.size!=null)Z.push(`${$.size} bytes`);return Z.join(", ")}function BH4($){let Z=($??[]).filter((Q)=>Q.kind!=="skill");if(Z.length===0)return null;return["<knowledge>","The following files are attached to you as reference knowledge. They are mounted in your sandbox at the paths below; read them with your file tools when relevant to the task, and treat them as authoritative reference material.","","Attached files:",Z.map((Q)=>`- ${Q.name} (${UH4(Q)}), read it at \`${RO(Q.volume,Q.path)}\``).join(`
|
|
990
|
+
`);gn0=u({name:"TASK_ADD_REPO",description:"Clone one of this organization's repositories into your working directory. "+"Your working directory is EMPTY until you call this \u2014 do not look for "+"files, and do not run git, before it returns. Call it once, with the repository the task is about; it waits for the checkout and returns the repository root listing, so you can start reading files immediately after. `git` and `gh` are authenticated once it returns. Call TASK_ADD_REPO with no arguments to list the repositories available.",annotations:{title:"Add Repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:GJ.object({connectionId:GJ.string().optional().describe("connectionId of the repository to clone. Omit to list the available repositories.")}),outputSchema:GJ.object({success:GJ.boolean(),repositories:GJ.array(GJ.object({connectionId:GJ.string(),repo:GJ.string()})).optional(),repo:GJ.string().optional(),cloned:GJ.boolean().optional(),files:GJ.string().optional(),message:GJ.string()}),handler:async($,Z)=>{o(Z),await Z.access.check();let X=t(Z),Q=o0(Z);if(!Q)throw Error("User ID required");let{threadId:Y}=rO0(),G=await tF4(Z,X.id),J=$.connectionId?G.find((i)=>i.connectionId===$.connectionId):void 0;if(!J){let i=G.map((c)=>({connectionId:c.connectionId,repo:`${c.owner}/${c.repo}`}));return{success:!1,repositories:i,message:$.connectionId?`No imported repository for connectionId "${$.connectionId}". Pick one of the repositories listed.`:i.length===0?"This organization has no repositories imported, so none can be cloned.":"Pick a repository and call TASK_ADD_REPO again with its connectionId."}}let W=await Z.storage.threads.get(Y);if(!W)throw Error(`Thread not found: ${Y}`);let K=await Q70(Z,{threadId:Y,runBranch:W.branch}),F=await vE(Z,K,Q),H=await $Q(Z),N=await dF4(Z,Y,F,K);if(!N)throw Error(`No sandbox is registered for this run (thread ${Y}), so there is nowhere to clone into.`);let U=W.metadata?.githubRepo?.owner,B=W.metadata?.githubRepos??[];if(U&&iF4(B,{owner:J.owner,name:J.repo}))return{success:!1,repo:`${J.owner}/${J.repo}`,cloned:!1,message:`This run already has ${jJ$} additional repositories checked out, which is the limit. Work with what's already checked out instead of adding another.`};await TO({ctx:Z,connectionId:J.connectionId,organizationId:X.id,forceRefresh:!0,onLegacyMintError:(i)=>console.error("[TASK_ADD_REPO] legacy repo-scoped mint failed",{connectionId:J.connectionId,error:i.message})});let{cloneUrl:O,gitUserName:L,gitUserEmail:w}=await IK(J.connectionId,J.owner,J.repo,Z.db,Z.vault,{bufferMs:EJ$}),E={url:`https://github.com/${J.owner}/${J.repo}`,owner:J.owner,name:J.repo,installationId:J.installationId,connectionId:J.connectionId},j=!U,z=j?[]:await Z.storage.threads.appendThreadGithubRepo(Y,E);if(j)await Z.storage.threads.update(Y,{metadata:{...W.metadata??{},githubRepo:E},updated_by:Q});let A=iO0({branch:K,derivedRef:cH(K),recordedHeadRef:null,sticky:!1}),P=await H.proxyDaemonRequest(N.sandboxHandle,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{...j?{repository:{cloneUrl:O,branch:A,repoName:`${J.owner}/${J.repo}`}}:{repositories:await oF4(Z,z)},identity:{userName:L,userEmail:w}}})});if(!P.ok)throw Error(`the sandbox rejected the repository (${P.status} ${P.statusText})`);await H.proxyDaemonRequest(N.sandboxHandle,"/_sandbox/setup/clone",{method:"POST",headers:new Headers({"content-type":"application/json"}),body:"{}"}).catch((i)=>{console.warn("[TASK_ADD_REPO] explicit clone kick failed",i)});let I=j?null:Q5$(z,{owner:J.owner,name:J.repo}),q=j||!I?".":`"$(dirname "$PWD")/repos/${I}"`,k=Date.now()+DJ$,S=!1,m="",f=0,b=null;while(Date.now()<k){let i=await wJ$(H,N.sandboxHandle,Y,`cd ${q} 2>/dev/null || exit 1; if [ -n "$(git ls-files 2>/dev/null | head -1)" ]; then echo __CLONED__; fi; ls -A 2>/dev/null`).catch(()=>null);if(!i){if(++f>=mF4)break;await L$(LJ$);continue}f=0;let c=pF4(i.stdout);if(c.cloned&&c.listing===b){S=!0,m=c.listing;break}b=c.cloned?c.listing:null,await L$(LJ$)}if(S)await wJ$(H,N.sandboxHandle,Y,nF4).catch((i)=>console.warn("[TASK_ADD_REPO] gh auth setup failed",i));return{success:S,repo:`${J.owner}/${J.repo}`,cloned:S,files:m,message:S?j?`${J.owner}/${J.repo} is checked out at your working directory on branch ${A}. \`git\` and \`gh\` are authenticated. Start working.`:`${J.owner}/${J.repo} is checked out at ../repos/${I}, beside your working directory, on its default branch. \`git\` and \`gh\` are authenticated there too. Your first checkout is untouched \u2014 commit and open a pull request in each repository you change.`:`The clone of ${J.owner}/${J.repo} did not finish within ${Math.round(DJ$/1000)}s. It may still be in progress \u2014 check your working directory before calling this again.`}}})});function TJ$($){return typeof $==="string"&&hn0.includes($)}function AJ$($){if(!$.startsAt)return null;let Z=Date.parse($.startsAt);return Number.isNaN(Z)?null:Z}function RJ$($,Z){let X=PJ$[$.state]-PJ$[Z.state];if(X!==0)return X;let Q=AJ$($),Y=AJ$(Z);if(Q===null||Y===null){if(Q!==Y)return Q===null?1:-1}else if(Q!==Y)return $.state==="closed"?Y-Q:Q-Y;return $.name.localeCompare(Z.name)||$.id.localeCompare(Z.id)}var hn0,PJ$;var aO0=D(()=>{hn0=["active","future","closed"];PJ$={active:0,future:1,closed:2}});import{z as A1}from"zod";var sO0=50000,eO0=500,$D0=200,d3,IJ$,yn,BC,rF4,aF4,sF4,qJ$,iy,eF4,$H4,MJ$;var m3=D(()=>{aO0();C6();C6();d3=A1.enum(["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"]),IJ$=A1.object({id:A1.string(),name:A1.string(),state:A1.enum(hn0),startsAt:A1.string().nullable(),endsAt:A1.string().nullable()}),yn=A1.enum(["bug","feature","chore","spike","security"]),BC=A1.enum(["none","low","medium","high","urgent"]),rF4=A1.object({threadId:A1.string(),virtualMcpId:A1.string().nullable(),status:A1.enum(["in_progress","requires_action","failed","completed","expired"]).nullable(),title:A1.string().nullable(),lastMessage:A1.string().nullable(),hasPreview:A1.boolean(),failureKind:A1.string().nullable(),hasMessages:A1.boolean(),costUsd:A1.number().nullable(),costProvider:A1.string().nullable(),createdAt:A1.string(),lastActiveAt:A1.string()}),aF4=A1.object({reviewer:A1.enum(DK),verdict:A1.enum(["approved","changes_requested"]),verified:A1.boolean()}),sF4=A1.object({id:A1.string(),name:A1.string(),color:A1.string().nullable().describe('Hex color, e.g. "#3b82f6"'),createdBy:A1.string(),createdAt:A1.string().datetime()}),qJ$=A1.object({url:A1.string(),number:A1.number(),repoOwner:A1.string(),repoName:A1.string(),createdAt:A1.string(),title:A1.string().nullable(),body:A1.string().nullable(),state:A1.enum(["open","closed"]).nullable(),draft:A1.boolean().nullable(),merged:A1.boolean().nullable(),mergeable:A1.boolean().nullable(),checksStatus:A1.enum(["pending","passing","failing"]).nullable(),checks:A1.array(A1.object({name:A1.string(),status:A1.string(),conclusion:A1.string().nullable(),detailsUrl:A1.string().nullable(),summary:A1.string().nullable()})),previewUrl:A1.string().nullable()}),iy=A1.object({id:A1.string(),organizationId:A1.string(),title:A1.string(),description:A1.string().nullable(),status:d3,priority:BC,type:yn,assigneeId:A1.string().nullable(),assignedBy:A1.string().nullable(),repo:A1.string().nullable(),dueDate:A1.string().datetime().nullable(),sprintId:A1.string().nullable(),sortOrder:A1.number(),keySeq:A1.number().nullable(),jiraIssueKey:A1.string().nullable(),retryAttempts:A1.number(),threads:A1.array(rF4),tags:A1.array(sF4),reviewVerdicts:A1.array(aF4),createdBy:A1.string(),createdAt:A1.string().datetime(),updatedBy:A1.string(),updatedAt:A1.string().datetime()}),eF4=["created","status_changed","assignee_changed","priority_changed","due_date_changed","title_changed","description_changed","tags_changed","review_requested","review_approved","review_changes_requested","merge_conflict_resolution","merge_failed","type_changed"],$H4=A1.enum(eF4),MJ$=A1.object({id:A1.string(),taskBoardItemId:A1.string(),action:$H4,actorId:A1.string().nullable(),data:A1.record(A1.string(),A1.unknown()),occurredAt:A1.string().datetime()})});async function ZD0($,Z,X){if(X===Y8)return;let{members:Q}=await $.boundAuth.organization.listMembers({organizationId:Z,filterField:"userId",filterValue:X});if(!Q.some((Y)=>Y.userId===X))throw Error("assigneeId is not a member of the organization")}var un0=D(()=>{m3()});function SJ$($){let Z={};for(let[X,Q]of Object.entries($)){if(X.startsWith(ZH4))continue;Z[X]=Q}return Z}function XD0($){return{taskBoardItemId:$.id,...xQ($)&&{[kJ$]:VJ$}}}function XH4($){return $?.[kJ$]===VJ$}function QH4($){if(/[:\s]/.test($))throw Error("organization id unsuitable for the subsidy key scheme");return`subsidy:${$}`}async function YH4($,Z){let X=b0();try{let Q=await $.storage.subsidizedGatewayKeys.get(Z);if(Q)return Q;let Y=$.auth?.user?.id;if(Y&&X.aiGatewayEnabled&&X.studioProvisionSecretKey&&cB.provisionKey){let G=await xW(Y,$.auth?.user?.email),J=await cB.provisionKey(G,QH4(Z));return await $.storage.subsidizedGatewayKeys.put(Z,J),J}}catch(Q){console.error("[subsidized-runs] subsidy key unavailable \u2014 run stays on the org's key:",Q)}return}async function CJ$($,Z,X){if(!b0().taskQuotaEnforced)return;if(!XH4(X))return;let Q=X?.taskBoardItemId;if(!Q)return;let Y=await $.storage.taskBoard.getById(Q,Z);if(!Y||!xQ(Y))return;if(!await Y0$($,Q))return;return await YH4($,Z)}function _J$($,Z){if(!Z)return $;if($.providerId!=="deco")return $;return{...$,apiKey:Z}}var ZH4="srv.",kJ$="srv.billing",VJ$="subscription";var gn=D(()=>{P90();bU();R$();aG()});function QD0($){let Z=$?.runClass;return Z&&Z in cn0?cn0[Z]:cn0.interactive}var cn0,py="runClass";var ny=D(()=>{cn0={interactive:10,reviewer:20,retry:30,new_task:40}});async function ln0($,Z,X){let Q;try{return await Promise.race([$.aiProviders.listModels(Z,X),new Promise((G,J)=>{Q=setTimeout(()=>J(Error("listModels timeout")),GH4)})])}finally{if(Q)clearTimeout(Q)}}function JH4($,Z){switch($){case"fast":return Z.chat.fast;case"smart":return Z.chat.smart;case"thinking":return Z.chat.thinking;case"image":return Z.image;case"web_search":return Z.webSearch;case"deep_research":return Z.deepResearch}}function dn0($,Z,X){let Q=$.find((Y)=>Y.modelId===Z);return{title:Q?.title??X??Z,providerId:Q?.providerId,capabilities:Q?.capabilities,limits:Q?.limits??null}}async function cZ($,Z,X){let Q=$.organization?.id;if(!Q)throw Error("resolveTier called without an organization");let G=(await $.storage.organizationSettings.get(Q))?.simple_mode?.tiers?.[Z]??null,J=$.auth?.user?.id,W=$O.safeParse(Z),K=X?.applyUserPrefs&&W.success&&J?(await $.storage.userModelPreferences.get(J,Q))?.tiers?.[W.data]??null:null,F=(await $.storage.aiProviderKeys.list({organizationId:Q})).filter((O)=>Qw(O.providerId));for(let O of[K,G])if(O&&F.some((L)=>L.id===O.keyId)){let L=await ln0($,O.keyId,Q).catch(()=>[]);return{credentialId:O.keyId,modelId:O.modelId,modelMeta:dn0(L,O.modelId,O.title)}}if(F.length===0)throw new ty(Z);let H={};await Promise.all(F.map(async(O)=>{H[O.id]=await ln0($,O.id,Q).catch(()=>[])}));let N=F.map((O)=>({id:O.id,providerId:O.providerId,label:O.label,presetId:O.presetId,createdBy:O.createdBy,createdAt:O.createdAt})),U=Gh1(N,H),B=JH4(Z,U);if(!B)throw new ty(Z);return{credentialId:B.keyId,modelId:B.modelId,modelMeta:dn0(H[B.keyId]??[],B.modelId,B.title)}}async function vJ$($,Z,X){let Q=$.organization?.id;if(!Q)throw Error("resolveSpecificModel called without an organization");let Y=await $.storage.aiProviderKeys.findById(Z,Q).catch((J)=>{if(J instanceof Error&&J.message==="Provider key not found")throw new hn(`AI provider credential "${Z}" was not found`,{cause:J});throw J});if(!Qw(Y.providerId))throw new hn(`AI provider credential "${Z}" uses native-only provider "${Y.providerId}" and cannot run a hosted model`);let G=await ln0($,Z,Q).catch(()=>[]);return{credentialId:Z,modelId:X,modelMeta:dn0(G,X)}}async function JJ($,Z){try{return await cZ($,Z)}catch(X){if(X instanceof ty)return null;return console.warn(`[resolveTier] tier "${Z}" resolution failed:`,X),null}}var ty,hn,GH4=5000;var sH=D(()=>{xZ();_8();ty=class ty extends Error{tier;constructor($){super(`No model available for tier "${$}". Connect a provider or configure the tier in organization settings.`);this.tier=$;this.name="TierUnavailableError"}};hn=class hn extends Error{constructor($,Z){super($,Z);this.name="SpecificModelCredentialUnavailableError"}}});function fJ$($){return $ instanceof CK||typeof $==="object"&&$!==null&&$.permanent===!0}var CK;var mn0=D(()=>{CK=class CK extends Error{permanent=!0;code;constructor($,Z){super(Z);this.name="PermanentRunError",this.code=$}}});function xJ$($){return $==="reviewer"?"reviewer":"default"}function gJ$($,Z="default"){let{providerId:X,apiKey:Q,baseUrl:Y}=$,G=KH4[Z],J={CLAUDE_CODE_MAX_OUTPUT_TOKENS:`${WH4}`,CLAUDE_CODE_MAX_TURNS:G===null?null:`${G}`};if(X==="anthropic")return{...J,CLAUDE_CODE_MODEL:in0.anthropic[Z],ANTHROPIC_API_KEY:Q,ANTHROPIC_AUTH_TOKEN:null,CLAUDE_CODE_OAUTH_TOKEN:null,ANTHROPIC_BASE_URL:Y??null};if(X==="claude-subscription")return{...J,CLAUDE_CODE_MODEL:in0.anthropic[Z],CLAUDE_CODE_OAUTH_TOKEN:Q,ANTHROPIC_API_KEY:null,ANTHROPIC_AUTH_TOKEN:null,ANTHROPIC_BASE_URL:null};if(X==="openrouter"||X==="deco")return{...J,CLAUDE_CODE_MODEL:in0.openrouter[Z],ANTHROPIC_API_KEY:"",ANTHROPIC_AUTH_TOKEN:Q,CLAUDE_CODE_OAUTH_TOKEN:null,ANTHROPIC_BASE_URL:Y??"https://openrouter.ai/api"};throw new yJ$(X)}var bJ$="claude-subscription",in0,YD0="claudeCodeModelClass",WH4=32000,KH4,yJ$;var GD0=D(()=>{in0={anthropic:{default:"claude-opus-5",reviewer:"claude-sonnet-5"},openrouter:{default:"anthropic/claude-opus-5",reviewer:"anthropic/claude-sonnet-5"}};KH4={default:null,reviewer:60};yJ$=class yJ$ extends Error{constructor($){super(`the claude-code harness needs an Anthropic, OpenRouter or Deco model credential; this run's model resolves to "${$}". Point the agent's thinking model at one of those, or run it with Decopilot.`);this.name="UnsupportedClaudeCodeProviderError"}}});import{z as d1}from"zod";var hJ$,FH4,un,HH4,NH4,NR9;var uJ$=D(()=>{hJ$=d1.object({chunks:d1.array(d1.unknown()),done:d1.boolean().nullish().transform(($)=>$??!1),error:d1.object({code:d1.string(),message:d1.string()}).nullish().transform(($)=>$??null)}),FH4=d1.record(d1.string(),d1.unknown()),un=d1.object({id:d1.string(),title:d1.string().optional(),provider:d1.string().nullable().optional(),credentialId:d1.string(),limits:d1.object({contextWindow:d1.number().int().positive().optional(),maxOutputTokens:d1.number().int().positive().optional()}).optional(),capabilities:d1.object({vision:d1.boolean().optional(),text:d1.boolean().optional(),reasoning:d1.boolean().optional()}).optional()}).strict(),HH4=d1.object({thinking:un.extend({title:d1.string()}),fast:un.optional(),smart:un.optional(),image:un.optional(),deepResearch:un.optional()}).strict(),NH4=d1.discriminatedUnion("cwd",[d1.object({cwd:d1.literal("/repo"),repo:d1.object({owner:d1.string(),name:d1.string(),connectedGithub:d1.boolean()}).strict().optional(),branch:d1.string().nullable()}).strict(),d1.object({cwd:d1.null()}).strict()]),NR9=d1.object({threadId:d1.string(),userMessage:FH4,harness:d1.object({sessionId:d1.string().optional()}).strict(),workspace:NH4,models:HH4,mcp:d1.object({url:d1.string().url(),headers:d1.record(d1.string(),d1.string()),expiresAt:d1.number().int().positive()}).strict(),orgMcps:d1.array(d1.object({name:d1.string(),url:d1.string().url(),headers:d1.record(d1.string(),d1.string())}).strict()).optional(),mode:d1.enum(["default","plan","web-search","gen-image"]),temperature:d1.number(),toolApprovalLevel:d1.enum(["auto","readonly"]),toolAllowlist:d1.array(d1.string()).nullable().optional(),maxAgentSteps:d1.number().int().optional(),user:d1.object({id:d1.string(),email:d1.string()}).strict(),organizationId:d1.string(),agent:d1.object({id:d1.string(),instructions:d1.string().optional(),disallowedTools:d1.array(d1.string()).optional()}).strict(),currentThreadTitle:d1.string().optional(),resume:d1.object({reason:d1.string()}).strict().optional()}).strict()});var cJ$="sandbox_gone",JD0="[SANDBOX_UNREACHABLE]";function UH4($){let Z=[$.contentType??"file"];if($.size!=null)Z.push(`${$.size} bytes`);return Z.join(", ")}function BH4($){let Z=($??[]).filter((Q)=>Q.kind!=="skill");if(Z.length===0)return null;return["<knowledge>","The following files are attached to you as reference knowledge. They are mounted in your sandbox at the paths below; read them with your file tools when relevant to the task, and treat them as authoritative reference material.","","Attached files:",Z.map((Q)=>`- ${Q.name} (${UH4(Q)}), read it at \`${RO(Q.volume,Q.path)}\``).join(`
|
|
991
991
|
`),"</knowledge>"].join(`
|
|
992
992
|
`)}function lJ$($,Z){let X=BH4(Z);if(!X)return $;return $?`${$}
|
|
993
993
|
|
|
@@ -2920,7 +2920,7 @@ Respond with the structured verdict and a short reason.`,dc$;var ic$=D(()=>{D4()
|
|
|
2920
2920
|
${G.join(`
|
|
2921
2921
|
`)}`:Y}function UN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2922
2922
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var ql$=200,QN6=12,GN6,WN6=300,w71=3;var E71=D(()=>{hD();FT0();GN6={aheadBy:0,behindBy:0,files:[]}});function ON6($){if(!$||$.includes(".."))return!1;return BN6.test($)}function kl$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!ON6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Vl$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var BN6;var Sl$=D(()=>{BN6=/^[\w./@-]+$/});function Us($,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 Cl$($,Z,X,Q){if(!Q.connectionId)throw new Kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Kv(G9);await TO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:G9;throw new Kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await IK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=E5$(H instanceof Error?H.message:String(H));throw N?new Kv(U):H}),K=lu($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await AO(F,DN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var DN6=10485760,Kv;var j71=D(()=>{XJ();sA0();Jn();Bi0();Ty();Kv=class Kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function wN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!LN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Fv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(jN6)])}async function PN6($,Z){let X=$.var.studioContext,Q=$J(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=UC(J?.metadata?.runtime);if(W)return W;let K=mO0(Z.virtualMcpMetadata),F=K==="cms"?await $71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)bn(X,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function AN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await $Q($.var.studioContext)}catch{return null}}function Hv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function nu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Us(Z,X);if(!Y)throw new M4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return eA0(Q,G.id,Y)}function z71($,Z){if(Z instanceof YA0)return $.json({error:Z.message},429,{...P5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof M4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,P5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,P5)}async function fl$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function bl$($){try{let Z=await nu($),X=await HT0(Z,$.get("vmClaim").branch);return $.json(X,200,P5)}catch(Z){return z71($,Z)}}function Bs($,Z){let Q=(BT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return BT0.set($,Y),Y.finally(()=>{if(BT0.get($)===Y)BT0.delete($)}),Q}async function tZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,P5);let Q=X?.runner??Hv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...P5}})}}let O=await B.text(),L=X?.redactRepoDir?TN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...P5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function TN6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function OT0($,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 RN6($){return xl$.includes($)}var LN6,_l$=524288,EN6=65536,jN6=1e4,vl$=2000,zN6,BT0,P5,xl$,yl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",zN6),$.post("/:virtualMcpId/:branch/write",(X)=>tZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>tZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>tZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>tZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>tZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>tZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Fv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>tZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Fv(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 tZ(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 tZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!RN6(Q))return X.json({error:`step must be one of: ${xl$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await $71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,P5);if(Q==="start"){let J=t(X.var.studioContext),W=Py(Y.virtualMcpMetadata);try{await J70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return tZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return lN(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 yc$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return bl$(X);return Z(X)});let Z=(X)=>tZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(vl$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return bl$(X);return tZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(vl$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await nu(X),J=await NT0(G,Q.branch,Y.base);return X.json(J,200,P5)}catch(Y){return z71(X,Y)}return tZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,P5);let Q=Hv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Bs(Y,async()=>{try{await Z71(W,Q,Y);let K=Us(G,J);if(K)await Cl$(W,Q,Y,K)}catch(K){if(K instanceof Kv)return X.json({error:K.message},403,P5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,P5)}return tZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,P5);try{let J=await nu(X);return await Ml$(J,Q.branch,G),X.json({ok:!0},200,P5)}catch(J){let W=J instanceof M4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,P5)}});return Bs(Q.claimName,()=>tZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await nu(X),F=W.base??await K.getDefaultBranch();return await UT0(K,Q.branch,F),X.json({ok:!0},200,P5)}catch(W){return z71(X,W)}});let Y=Hv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Bs(G,async()=>{try{await Z71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,P5)}return tZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",p5({maxSize:_l$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Hv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=Y71(H)&&U?[H,N]:Y?await Promise.all([OT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),OT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([HT0(w,Q.branch),NT0(w,Q.branch)])})(),L=await lc$(K,B,O);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",p5({maxSize:_l$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Hv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=Y71(H)&&U?[H,N]:Y?await Promise.all([OT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),OT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([HT0(w,Q.branch),NT0(w,Q.branch)])})(),L=await mc$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Hv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return fl$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",p5({maxSize:EN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Hv(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=kl$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Vl$(G,W.resolveType);return fl$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var gl$=D(()=>{U8();LF();cu();eZ1();Zn();fc$();y3();cy();bc$();l3();xc$();gc$();Hi0();Yn();W71();ic$();F71();hD();E71();Sl$();j71();LN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zN6=aA0(async($,Z)=>{let X=$.var.studioContext;try{o(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(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{wN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},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=ep({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Yi0(X,J),H=Gi0(F,Q),N=vc$({userId:H,projectRef:K}),U=W.metadata??null,B=await PN6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await $Q(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});BT0=new Map;P5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};xl$=["clone","install","start"]});function hl$($,Z,X){let Q=P71.get($);if(!Q)Q={pending:null,running:!1},P71.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)qN6($,Q);return G}async function qN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await MN6(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)P71.delete($)}}async function MN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await pu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=D71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=L71(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2923
|
-
`,j=await Z.createBlob(E);await Tl$(Z.owner,Z.repo,j,E);let z=w[0]??`${KT0(Q)}/${H71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of L71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=IN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function kN6($){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 sm0(Q,$.deps.coAuthor)}var IN6=3,P71;var ul$=D(()=>{gO0();ZT0();W4();hD();FT0();P71=new Map});import{createHmac as cl$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function ll$(){if(DT0)return DT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DT0=$?Buffer.from($):VN6(32),DT0}function A71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=cl$("sha256",ll$()).update(Q).digest("base64url");return`${Q}.${Y}`}function dl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(cl$("sha256",ll$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(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 CN6=21600000,DT0=null;var ml$=D(()=>{R$()});import{z as tu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function ol$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return eA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof M4){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 rl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",tl$),$.use("/:virtualMcpId/:branch/*",tl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Rl$(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=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ol$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{$T0(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 Os(Z),W=await hl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ol$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof M4&&W.status===409))throw W;await UT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof M4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof M4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof M4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,il$=500,pl$=1048576,nl$=1024,fN6=8388608,bN6,xN6,tl$;var al$=D(()=>{ZT0();U8();LF();eZ1();sA0();j71();F71();ul$();ml$();E71();hD();FT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=p5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=il$,{message:`Patch cannot touch more than ${il$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pl$),{message:`Each block must be at most ${pl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=nl$),{message:`Each block key must be at most ${nl$} characters`}),tl$=aA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!dl$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)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:N,userId:J}),Z()})});var sl$=($)=>{let Z=new H1;if(Z.use("*",s_),Z.route("/",OA0()),Z.route("/",Og$()),Z.route("/",zc$()),Z.route("/",wc$()),Z.route("/",tA0()),Z.route("/tools",Mc$()),Z.route("/",Rc$()),Z.route("/",ru$({kvStorage:$.kvStorage})),Z.route("/",tu$()),Z.route("/fs",Hc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",yl$()),Z.route("/decofile",rl$()),Z.route("/",Oc$()),Z.route("/deco-sites",LA0()),Z.route("/sso",KA0()),Z.route("/",oA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jg$()),$.mountDevAssets)Z.route("/dev-assets",wA0({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("/",qb$()),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",Uc$()),Z.route("/mcp",Ew0()),Z.route("/mcp/self",nA0()),Z.route("/mcp",Pw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var el$=D(()=>{U8();P91();Wg$();I91();EA0();fa();j91();ou$();au$();Nc$();ct();B91();Aw0();pZ1();Bc$();Dc$();Ec$();Pc$();Ic$();tZ1();kc$();oZ1();jw0();gl$();al$()});function yN6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$d$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zd$=D(()=>{U8();R$();UP0()});import{z as M1}from"zod";function PF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Yd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xd$($,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 Qd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Yd$,Gd$,Jd$;var Wd$=D(()=>{D4();U8();cu();PN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=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(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=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()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),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(uN6).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:pN6.optional(),user:M1.string().optional()});Yd$=class Yd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gd$=new H1;Gd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PF("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(PF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(PF("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)=>Qw(j.providerId));if(!E)return $.json(PF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return lN($,async(w)=>{let E=Xd$(H,N,U,G,B,$.req.raw.signal);try{let j=wO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=hN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Qd$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Xd$(H,N,U,G,B,$.req.raw.signal),E=await DO(w),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:L,model:G.model,choices:[{index:0,message:j,finish_reason:Qd$(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(PF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PF(Y.message,"server_error"),500)}});Jd$=Gd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Kd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(as1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Fd$=D(()=>{U8();eB()});var Nd$;var Hd$=D(()=>{Nd$={name:"decocms",version:"4.294.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Ud$,XU6="https://ph.studio.decocms.com",Bd$;var Od$=D(()=>{U8();h50();vC();$9();R$();Y91();Hd$();Ud$=new H1;Ud$.get("/",($)=>{let Z={version:Nd$.version,theme:Pi1(),...AH().logo&&{logo:AH().logo},...KN()&&{internalUrl:aC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ly$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Bd$=Ud$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function T71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Ld$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Dd$($,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 wd$($){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()?Dd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Dd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Nv,YU6,GU6,JU6,WU6,Ed$;var jd$=D(()=>{Nv=l0.enum(["good","bad","neutral"]),YU6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Nv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.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 $})),GU6=l0.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},l0.array(YU6)),JU6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WU6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Nv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Nv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Nv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Nv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GU6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Nv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Nv.optional()})).min(1)})]),Ed$=l0.object({...JU6,template:WU6})});function LT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ed$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var R71=D(()=>{jd$()});import{join as zd$}from"path";async function FU6($){try{let Z=await fetch(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=LT0(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()||T71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HU6($,Z){let X=ou($),Q=Z?.brand?.trim()||T71(X),Y=Ld$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(J)}" />`,`<meta property="og:image" content="${DG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(F)}" />`,`<meta name="twitter:image:alt" content="${DG(H)}" />`,`<link rel="canonical" href="${DG(J)}" />`,`<link rel="icon" href="${DG(Y)}" sizes="any" />`].join(`
|
|
2923
|
+
`,j=await Z.createBlob(E);await Tl$(Z.owner,Z.repo,j,E);let z=w[0]??`${KT0(Q)}/${H71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of L71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:kN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof M4&&O.status===422)||Y>=IN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function kN6($){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 sm0(Q,$.deps.coAuthor)}var IN6=3,P71;var ul$=D(()=>{gO0();ZT0();W4();hD();FT0();P71=new Map});import{createHmac as cl$,randomBytes as VN6,timingSafeEqual as SN6}from"crypto";function ll$(){if(DT0)return DT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return DT0=$?Buffer.from($):VN6(32),DT0}function A71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=cl$("sha256",ll$()).update(Q).digest("base64url");return`${Q}.${Y}`}function dl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(cl$("sha256",ll$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SN6(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 CN6=21600000,DT0=null;var ml$=D(()=>{R$()});import{z as tu}from"zod";function vN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_N6.test($)}function ol$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return eA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof M4){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 rl$(){let $=new H1;return $.use("/:virtualMcpId/:branch",tl$),$.use("/:virtualMcpId/:branch/*",tl$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Rl$(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=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ol$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xN6.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{$T0(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 Os(Z),W=await hl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=A71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ol$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof M4&&W.status===409))throw W;await UT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof M4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof M4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof M4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var _N6,il$=500,pl$=1048576,nl$=1024,fN6=8388608,bN6,xN6,tl$;var al$=D(()=>{ZT0();U8();LF();eZ1();sA0();j71();F71();ul$();ml$();E71();hD();FT0();_N6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bN6=p5({maxSize:fN6,onError:($)=>$.json({error:"Payload too large"},413)}),xN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=il$,{message:`Patch cannot touch more than ${il$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pl$),{message:`Each block must be at most ${pl$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=nl$),{message:`Each block key must be at most ${nl$} characters`}),tl$=aA0(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(!vN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!dl$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);if(!N)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:N,userId:J}),Z()})});var sl$=($)=>{let Z=new H1;if(Z.use("*",s_),Z.route("/",OA0()),Z.route("/",Og$()),Z.route("/",zc$()),Z.route("/",wc$()),Z.route("/",tA0()),Z.route("/tools",Mc$()),Z.route("/",Rc$()),Z.route("/",ru$({kvStorage:$.kvStorage})),Z.route("/",tu$()),Z.route("/fs",Hc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",yl$()),Z.route("/decofile",rl$()),Z.route("/",Oc$()),Z.route("/deco-sites",LA0()),Z.route("/sso",KA0()),Z.route("/",oA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jg$()),$.mountDevAssets)Z.route("/dev-assets",wA0({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("/",qb$()),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",Uc$()),Z.route("/mcp",Ew0()),Z.route("/mcp/self",nA0()),Z.route("/mcp",Pw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var el$=D(()=>{U8();P91();Wg$();I91();EA0();fa();j91();ou$();au$();Nc$();ct();B91();Aw0();pZ1();Bc$();Dc$();Ec$();Pc$();Ic$();tZ1();kc$();oZ1();jw0();gl$();al$()});function yN6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$d$=()=>{let $=new H1;return $.use("*",gN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zd$=D(()=>{U8();R$();UP0()});import{z as M1}from"zod";function PF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tN6($){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 oN6($,Z,X){try{return JSON.parse($)}catch{throw new Yd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rN6($){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:oN6(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 aN6($){let Z=$.map((X)=>{let Q=X.function.parameters?mY(X.function.parameters):mY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function sN6($){if(!$)return;return{openai:{response_format:$}}}function eN6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xd$($,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 Qd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hN6=256,uN6,cN6,lN6,dN6,mN6,iN6,pN6,nN6,Yd$,Gd$,Jd$;var Wd$=D(()=>{D4();U8();cu();PN();uN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lN6=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(cN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dN6=M1.object({type:M1.literal("text")}),mN6=M1.object({type:M1.literal("json_object")}),iN6=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()})}),pN6=M1.union([dN6,mN6,iN6]),nN6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lN6),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(uN6).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:pN6.optional(),user:M1.string().optional()});Yd$=class Yd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gd$=new H1;Gd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PF("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(PF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nN6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tN6(G.model);if(!J)return $.json(PF("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)=>Qw(j.providerId));if(!E)return $.json(PF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(PF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=rN6(G.messages),U=G.tools?aN6(G.tools):void 0,B=sN6(G.response_format),O=eN6(),L=Math.floor(Date.now()/1000);if(G.stream)return lN($,async(w)=>{let E=Xd$(H,N,U,G,B,$.req.raw.signal);try{let j=wO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=hN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Qd$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Xd$(H,N,U,G,B,$.req.raw.signal),E=await DO(w),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:L,model:G.model,choices:[{index:0,message:j,finish_reason:Qd$(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(PF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(PF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(PF(Y.message,"server_error"),500)}});Jd$=Gd$});function $U6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Kd$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||_Z(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(as1(N)!==G)continue;if(!$U6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Fd$=D(()=>{U8();eB()});var Nd$;var Hd$=D(()=>{Nd$={name:"decocms",version:"4.294.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XU6}}var Ud$,XU6="https://ph.studio.decocms.com",Bd$;var Od$=D(()=>{U8();h50();vC();$9();R$();Y91();Hd$();Ud$=new H1;Ud$.get("/",($)=>{let Z={version:Nd$.version,theme:Pi1(),...AH().logo&&{logo:AH().logo},...KN()&&{internalUrl:aC1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ly$(),posthog:QU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Bd$=Ud$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function T71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Ld$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Dd$($,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 wd$($){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()?Dd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Dd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Nv,YU6,GU6,JU6,WU6,Ed$;var jd$=D(()=>{Nv=l0.enum(["good","bad","neutral"]),YU6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Nv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.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 $})),GU6=l0.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},l0.array(YU6)),JU6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WU6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Nv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Nv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Nv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Nv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GU6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Nv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Nv.optional()})).min(1)})]),Ed$=l0.object({...JU6,template:WU6})});function LT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Ed$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var R71=D(()=>{jd$()});import{join as zd$}from"path";async function FU6($){try{let Z=await fetch(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=LT0(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()||T71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HU6($,Z){let X=ou($),Q=Z?.brand?.trim()||T71(X),Y=Ld$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=wd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(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="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(J)}" />`,`<meta property="og:image" content="${DG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(F)}" />`,`<meta name="twitter:image:alt" content="${DG(H)}" />`,`<link rel="canonical" href="${DG(J)}" />`,`<link rel="icon" href="${DG(Y)}" sizes="any" />`].join(`
|
|
2924
2924
|
`)}function NU6($,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}
|
|
2925
2925
|
</head>`)}function Pd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=ou(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(zd$($,"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(`${WK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(UU6)}),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=$?zd$($,"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 FU6(ou(Q)),K=HU6(Q,W);return X.html(NU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var KU6=2500,UU6=1e4;var Ad$=D(()=>{U8();R71();WE();R$()});function Ls($,Z){return fetch(`${WK({})}${$}`,Z)}async function BU6($,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 Ls(`/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}=LT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var OU6,mN,Td$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Rd$;var Id$=D(()=>{U8();uY();WE();R71();OU6=new Set(["complete","errored","terminated","unknown"]),mN=new H1;mN.use("*",async($,Z)=>{let X=await X8.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});mN.use("/link-token/*",Td$);mN.use("/suggest",Td$);mN.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 BU6(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)}});mN.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 Ls("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${JE({})}`},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)}});mN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ls(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${JE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:OU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});mN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ls(`/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)}});mN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ls(`/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:[]})}});Rd$=mN});import{createHmac as DU6,timingSafeEqual as LU6}from"crypto";function Md$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>wU6)return!1;let W=DU6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&LU6(K,H)})}function kd$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=xJ(Z),Q=xJ(xJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:AF(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 Vd$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function AF($){return typeof $==="string"?$:void 0}function xJ($){return typeof $==="object"&&$!==null?$:void 0}function wT0($){return typeof $==="number"?new Date($*1000):null}function M71($){return AF($)??AF(xJ($)?.id)}function EU6($){return M71($.subscription)??AF(xJ(xJ($.parent)?.subscription_details)?.subscription)}function jU6($){let Z=wT0($.current_period_end);if(Z)return Z;let X=xJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=xJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function I71($,Z){let X=wT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function q71($,Z){let X=wT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function zU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=AF(xJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(AF(xJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(AF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=AF(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(xJ(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:xJ(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(AF(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=M71(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(I71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:M71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=AF(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&&I71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Vd$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:jU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=EU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(I71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:wT0(X.period_end),lastStripeEventAt:q71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function PU6($,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:Vd$(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 qd$($,Z){let X=PU6($,Z);if(!X)return;bY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Vn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Sd$($){let Z=new QK(r8().db),X=await zU6(Z,$);if(!(X.handled&&X.topUp))qd$($,X);if(X.handled&&X.topUp)await oE$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),qd$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await te1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof cY&&(Q.status===400||Q.status===404)))throw Q}return X}var wU6=300;var Cd$=D(()=>{dG();_4();E50();LE();g01()});var AU6=1048576,k71;var _d$=D(()=>{U8();LF();R$();Cd$();k71=new H1;k71.post("/webhook",p5({maxSize:AU6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Md$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=kd$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Sd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as TU6}from"crypto";function IU6($,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 TU6(Buffer.from(Y),Buffer.from(Q))}var RU6=5242880,V71;var vd$=D(()=>{U8();LF();l3();V71=new H1;V71.post("/webhook",p5({maxSize:RU6,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(!IU6(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 _n0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function fd$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var bd$,qU6,MU6,xd$;var yd$=D(()=>{U8();z3();Lg();sx();bd$=new H1,qU6=["range","if-none-match","if-modified-since"],MU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];bd$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Au($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Ut(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&nG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return fd$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of qU6){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(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 $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of MU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),fd$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});xd$=bd$});var ws=_((Uv)=>{var kU6=Uv&&Uv.__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]}),VU6=Uv&&Uv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kU6(Z,$,X)};Object.defineProperty(Uv,"__esModule",{value:!0});VU6(zY(),Uv)});var ud$=_((gd$)=>{Object.defineProperty(gd$,"__esModule",{value:!0});gd$.version=void 0;gd$.version="3.4.0"});var dd$=_((TF)=>{var SU6=TF&&TF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(TF,"__esModule",{value:!0});TF.NodeTransport=TF.VERSION=void 0;TF.nodeResolveHost=xU6;var s6=ws(),CU6=j0("net"),S71=j0("tls"),_U6=j0("path"),cd$=j0("fs"),vU6=SU6(j0("dns")),fU6=ud$();TF.VERSION=fU6.version;var bU6="nats.js";class ld${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bU6,this.version=TF.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,s6.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 s6.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 s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,CU6.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,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.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,s6.deferred)();try{if($=(0,_U6.resolve)($),!(0,cd$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,cd$.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,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,S71.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 s6.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,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,S71.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 s6.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,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.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 S71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.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}}TF.NodeTransport=ld$;function xU6($){let Z=(0,s6.deferred)();return vU6.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 td$=_((nd$)=>{Object.defineProperty(nd$,"__esModule",{value:!0});nd$.connect=yU6;var md$=dd$(),id$=ws(),pd$=ws();function yU6($={}){if((0,pd$.hasWsProtocol)($))return Promise.reject(pd$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,id$.setTransportFactory)({factory:()=>{return new md$.NodeTransport},dnsResolveFn:md$.nodeResolveHost}),id$.NatsConnectionImpl.connect($)}});var od$=_((iN)=>{var hU6=iN&&iN.__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]}),uU6=iN&&iN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hU6(Z,$,X)};Object.defineProperty(iN,"__esModule",{value:!0});iN.connect=void 0;var cU6=td$();Object.defineProperty(iN,"connect",{enumerable:!0,get:function(){return cU6.connect}});uU6(ws(),iN)});function ed$($){let Z=$?.connectFn??iU6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:mU6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=aZ(dU6,lU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?rd$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=sd$.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 iU6($){return ad$.connect($)}var rd$,ad$,sd$,lU6=100,dU6=3000,mU6=3000;var $m$=D(()=>{W4();rd$=V(zc(),1),ad$=V(od$(),1),sd$=V(HL(),1)});function C71($,Z){return`${$}.${Z}`}class _71{cache;constructor($){this.cache=Qu({ttlMs:$?.ttlMs??pU6,maxSize:$?.maxSize??nU6})}async get($,Z){return this.cache.get(C71($,Z))??null}async set($,Z,X){this.cache.set(C71($,Z),X)}async invalidate($,Z){this.cache.delete(C71($,Z))}teardown(){this.cache.clear()}}var pU6=600000,nU6=5000;var Zm$=()=>{};function ET0($,Z){return`${$}:${Z}`}function v71($){let Z=Qu({ttlMs:$?.ttlMs??tU6,maxSize:$?.maxSize??oU6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Xm$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(ET0(K,F))},set(K,F,H){Z.set(ET0(K,F),H)},invalidate(K,F){Z.delete(ET0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Xm$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(ET0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Xm$="studio.ai-provider-keys.invalidate",tU6=30000,oU6=5000;var Qm$=()=>{};class f71{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)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}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var Ym$=($)=>{let Z;return()=>Z??=$()},b71,x71;var Gm$=D(()=>{I6();b71=Ym$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),x71=Ym$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XB6($=Km$){return{name:dK,subjects:[`${er0}.>`],storage:wW.StorageType.File,max_age:sU6,max_bytes:$B6,max_msgs_per_subject:ZB6,discard:wW.DiscardPolicy.Old,retention:wW.RetentionPolicy.Limits,duplicate_window:eU6,num_replicas:$}}class Fm${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 Jm$($){let Z=Wm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function JB6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,aU6().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 WB6($,Z){return $.info?.cluster?Z:1}function KB6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class y71{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=async(Q,Y)=>{let G=XB6(Y);try{await Q.streams.info(dK),await Q.streams.update(dK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(dK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(dK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await wW.jetstreamManager($),Y=WB6($,Km$);try{await Z(Q,Y)}catch(G){if(Y<=1||!KB6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Mg});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=JB6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=gB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Za0(F,{runId:Z}),U=performance.now()-H;b71().record(U),x71().add(1,{"org.id":Q??"unknown"}),GB6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Jm$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(K(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),W(),YB6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Jm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Za0(Z,{runId:$,dedup:X});b71().record(performance.now()-Y),x71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=yB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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"?wW.DeliverPolicy.New:wW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=ZD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(dK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=sL0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(tL0()).pipeThrough(oL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(dK,{filter:ZD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var wW,Wm$,rU6=($)=>{let Z;return()=>Z??=$()},aU6,sU6=86400000000000,eU6=120000000000,$B6=4294967296,Km$,ZB6=500000,QB6,YB6,GB6;var Hm$=D(()=>{W4();Xa0();eL0();rL0();I6();Gm$();wW=V(HL(),1),Wm$=V(zc(),1),aU6=rU6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Km$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);QB6=process.env.STREAM_ENCODE_TRACE==="1",YB6=process.env.DECOPILOT_STREAM_TRACE==="1";GB6=QB6?new Fm$:null});function jT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,uW(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 Nm$=D(()=>{_8()});class g71{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}}async function Um$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!VC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=LK(Y?.flags),J=await $.storage.taskBoard.update(Z.id,Q,{status:G},Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),u$(Q,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Bm$=D(()=>{C6();WX();Bg();E5()});function DB6($){return $ instanceof nX}function LB6($,Z){return Z-$>=BB6}class h71{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??FB6;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??NB6,X=this.options.itemIntervalMs??HB6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}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()-zt0),jo0);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()-OB6));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 wo0(this.taskBoard,Y,Q),await Eo0(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!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await JN(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),DB6(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()+UB6)).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(()=>{}),u$(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(!LB6(fH(X),Date.now()))return;await yK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===Y8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await Dg(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await Um$(J,Q,W))return!0;if(await qO$(J,Q))return!0;if(!Y)return!1;if(!go0(W))return!1;return await HL0(J,Q,{previewMatchesHead:ho0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var FB6=60000,HB6=300000,NB6=50,UB6=60000,BB6=900000,OB6=120000;var Om$=D(()=>{C6();Vo0();YN();vt();Bm$();E5();aG();zo0();$G();Kt()});import{readdir as wB6,rm as zT0}from"fs/promises";import{join as PT0}from"path";async function AT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Bv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Dm$($,Y,Z);else if(!Y.startsWith(".")){let G=PT0($,Y),J=await Bv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Dm$(G,K,Z)}if((await Bv(G)).length===0)await zT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Dm$($,Z,X){let Q=0,Y=PT0($,Z),G=await Bv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=PT0(Y,W),F=await Bv(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=PT0(K,N);await zT0(B,{recursive:!0,force:!0}),Q++}}if((await Bv(K)).length===0)await zT0(K,{recursive:!0,force:!0})}if((await Bv(Y)).length===0)await zT0(Y,{recursive:!0,force:!0});return Q}async function Bv($){try{return(await wB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var EB6=30;var u71=()=>{};import{DBOS as c71,SchedulerMode as jB6}from"@dbos-inc/dbos-sdk";async function PB6(){let $=[gJ(),Ov(),MF()],Z=0;for(let X of $)try{Z+=await AT0(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 AB6($,Z){await c71.runStep(()=>PB6(),{name:"monitoringRetention"})}function wm$(){if(Lm$)return;Lm$=!0;let $=c71.registerWorkflow(AB6,{name:"monitoringRetentionWorkflow"});c71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:zB6,mode:jB6.ExactlyOncePerIntervalWhenActive})}var zB6="23 4 * * *",Lm$=!1;var Em$=D(()=>{LY();u71()});function jm$($){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 HJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Lt($.db,Z,Q.role);return Y.boundAuth=c51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new mw(X,void 0,Y.boundAuth,Q.role,"self"),iO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var zm$=D(()=>{iw();pO()});function TB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function RB6(){return{services:TB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function qB6(){for(let $ of IB6)$()}function Pm$($){let Z=[...l71.logs,$];l71={...l71,logs:Z.length>500?Z.slice(-500):Z},qB6()}function d71(){return MB6}var l71,IB6,MB6=!1;var m71=D(()=>{l71=RB6(),IB6=new Set});import{EventEmitter as kB6}from"events";var i71;var Am$=D(()=>{m71();i71=new kB6;i71.on("request",($)=>{Pm$($)})});function Tm$(){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 B=ru(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>ru(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${ru(U.method)}${J5.reset}`}}catch{}}let W=ru(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${ru(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=SB6(Q),F=J?"\u25C0":"\u2190";if(!d71())console.log(`${J5.dim}${F}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=VB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!d71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);i71.emit("request",{method:Q,path:ru(Y),status:N,duration:H,timestamp:new Date})}}}var J5,VB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},SB6=($)=>{return J5[$]||J5.reset},ru=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Rm$=D(()=>{m71();Am$();J5={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 km$}from"crypto";import{mkdir as CB6,readdir as _B6,rm as Im$,stat as Vm$}from"fs/promises";import{join as n71,relative as vB6}from"path";import{z as P$}from"zod";function Cm$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return n71(fB6,Z)}function _m$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function p71($,Z){let X=Cm$($),Q=_m$(Z);return n71(X,Q)}function bB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return km$("sha256",Y).update(G).digest("hex")}function Mm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=bB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${_m$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function vm$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${km$("md5","etag").update(Q).digest("hex")}"`}async function fm$($,Z,X,Q,Y){try{let G=await _B6($,{withFileTypes:!0});for(let J of G){let W=n71($,J.name),F=vB6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await fm$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await Vm$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:vm$(W,H.mtime,H.size)})}catch{}}}}catch{}}function bm$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Cm$(Q);await CB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await fm$(H,H,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=p71(Q,G.key),W=await Vm$(J);return{contentType:M91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:vm$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??qm$;return{url:Mm$(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:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??qm$;return{url:Mm$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=p71(Q,G.key);try{return await Im$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=p71(Q,K);try{await Im$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function t71($,Z,X){let Q=bm$(Z,X),Y=new nW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new YQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),zJ(Y,G,$,"mcp:dev-assets")}async function xm$($,Z,X,Q){let G=bm$(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 fB6="./data/assets",qm$=3600,Sm$,ym$;var gm$=D(()=>{R$();vg();U8();dd();aC();gX();EA0();Sm$=new H1;Sm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return t71($.req.raw,Z,Q)});ym$=Sm$});var hm$={};J4(hm$,{mountDevRoutes:()=>xB6});function xB6($,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 t71(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(),F=await xm$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ym$);let X=new H1;X.use("*",DW({mountPath:"/api/dev-assets"})),X.route("/",wA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var um$=D(()=>{U8();z91();EA0();gm$()});import{sql as yB6}from"kysely";import{randomUUID as cm$}from"crypto";import{z as gB6}from"zod";async function uB6($){let Z=new Date().toISOString(),X=cm$(),Q=C8.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:cm$(),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 yB6`SELECT
|
|
2926
2926
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,b as L,j as r}from"./index-DHLutK6v.js";import{I as A}from"./input-zNG5Uz1T.js";import{L as F}from"./label-CEq9oqa2.js";import{S as R,a as V,b as z,c as O,d as D}from"./select-W8jorDji.js";import{T as G}from"./textarea-XbuS70jj.js";import{G as J,V as M,K as X,X as $,a5 as q}from"./index-BWVLjCpL.js";import{s as P}from"./primitives-bdzFl9KQ.js";import{u as H}from"./use-autosave-BsqWx81g.js";import"./Check-C5RWnyNL.js";import"./ChevronDown-CeGZsBnS.js";import"./ChevronUp-DCx43qHY.js";import"./ArrowUp-DMDdMhAA.js";import"./chat-context-C-BdNZCf.js";import"./use-panel-navigate-C8-xot4V.js";import"./dialog-DYg0AoO0.js";import"./Copy01-DhfruII6.js";import"./Download01-C1FmC7JV.js";import"./use-destination-route-BMJNYrmL.js";import"./constants-dLUUoWH7.js";import"./session-runtime-wVXsCwcJ.js";import"./hooks-DvV-YCly.js";import"./use-mcp-client-Bac4vccq.js";import"./auth-BqxUQw-v.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-DDszDk42.js";import"./task-board-D9PHUZff.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-X7MaI4-V.js";import"./use-ai-providers-WmO5B1wa.js";import"./use-decopilot-events-CEhAvB_E.js";import"./use-organization-settings-BsgcrCz-.js";import"./automation-runs-CzcGADVN.js";import"./agent-icon-C9_7Msf7.js";import"./AlertCircle-qZDg2e-H.js";import"./UserSquare-ClSByuB-.js";import"./Tool01-tn2PFBHQ.js";import"./ArrowLeft-CatEVOI7.js";import"./Tool02-BalBR7uK.js";import"./XCircle-BOrCVYLf.js";import"./TrendUp01-6TR_k_0Y.js";import"./ZapSquare-DkKtoQ7W.js";import"./Users03-BT3gPqQL.js";import"./CheckCircle-V0GvWvtd.js";import"./ChevronRight-Dh8_6pj1.js";import"./ChevronSelectorVertical-Im3Lz_4E.js";import"./DotsVertical-B39kxqbi.js";import"./Stars02-4GZ9SjIq.js";import"./CreditCard01-Cy0s6gAf.js";import"./Settings02-xEBQxvJD.js";import"./Eye-m8QZKf2Y.js";import"./FilterLines-BBF-m2ZJ.js";import"./Share07-CLkT7SlV.js";import"./Globe01-C2F_PPuX.js";import"./Globe04-CMCnFTSr.js";import"./SwitchHorizontal01-DwxljZOI.js";import"./HardDrive-DmqNZKD8.js";import"./Key01-DbCU9LZF.js";import"./LinkExternal01-kQnRXU4w.js";import"./LockUnlocked01-D5OpQeQe.js";import"./LogOut01-BePTyd5L.js";import"./Monitor01-DPqlemzQ.js";import"./Sun-D0KW7MLF.js";import"./Palette-DzT0S9Gl.js";import"./Play-Btu3v5FX.js";import"./Plus-B7vTVmKH.js";import"./SearchLg-CAAIuTYj.js";import"./SearchMd-COQJLRw-.js";import"./Shield01-C2USnj9G.js";import"./Stars01-DkoqcM4j.js";import"./Trash01-CwqV1gzD.js";import"./Upload01-mqAHBbZV.js";import"./User01-DWaPmCwS.js";import"./Users01-CFDNbxgJ.js";import"./XClose-DMSeuF30.js";import"./Zap-CwYGo5D6.js";import"./useInfiniteQuery-CP11XfQS.js";import"./use-infinite-scroll-DzHJHyr0.js";import"./use-connection-D8j2CnOC.js";import"./table-RKi74_kY.js";import"./empty-state-DNKOHljA.js";import"./use-members-_2HCzEHc.js";import"./use-org-auth-client-Cb5lYh1t.js";import"./use-automations-g--nS4Go.js";import"./useSuspenseInfiniteQuery-vPet_vok.js";import"./avatar-1XE5IjoT.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-lK-vhEre.js";import"./monaco-editor-BIUU4YtT.js";import"./spinner-DEaGcbnH.js";import"./types-CrdXjhQP.js";import"./shell-layout-BbKgiGKQ.js";import"./required-auth-layout-Bi3hMcfQ.js";import"./use-org-sso-cefqXe6X.js";import"./integration-icon-CVsQlE88.js";import"./use-navigate-to-agent-yAkGdje4.js";import"./chart-Bgue_7DQ.js";import"./index-pYJ2-T-r.js";import"./form-DUYaeuN1.js";import"./file-type-icon-Cr_jiDFe.js";import"./drawer-DrqU_8fl.js";import"./collection-search-DBnGb4Zg.js";import"./tabs-DFRRVuh7.js";import"./toggle-group-WZyFFujP.js";import"./super-agent-icon-DxowWKwv.js";import"./self-tool-result-DYCZ2dxI.js";import"./alert-dialog-BWONJIzw.js";import"./extract-connection-data-BI_gbc3h.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-D5wCJf5h.js";import"./authenticate-and-persist-oauth-DRVU48ic.js";import"./mcp-oauth-DGSZYZtZ.js";import"./track-BFh4WctH.js";import"./popover-CPDUuAsK.js";import"./toolbar-CmaLqa3-.js";import"./github-repo-picker-BjTlfZRh.js";import"./use-mcp-tools-FenH0JaE.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CgUgSGsh.js";import"./use-registry-connections-BoC6e9Ko.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-gU6TF210.js";import"./collection-tabs-CAUEdmSI.js";import"./badge-CXIV4O-0.js";import"./select-model-CVJuTB71.js";import"./checkbox-DvC3nAT5.js";import"./ai-providers-logos-DD3qZ33J.js";import"./cards-DJSm_nho.js";import"./dropdown-menu-BGreHXNg.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CdtGOM4G.js";import"./use-file-configs-CEny8PB8.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-DsCulVkO.js";import"./scroll-area-Dw0578rC.js";import"./search-input-lOvS7ZZY.js";import"./use-mcp-auth-status-dyqIaOq0.js";import"./switch-BsAR0Ue8.js";import"./use-secrets-CNOFekf-.js";import"./AreaChart-D1rWRcUm.js";import"./config-DG69PD1X.js";import"./breadcrumb-FUX_wv57.js";import"./command-Ct_4mokr.js";import"./index-RXRS2M8q.js";import"./get-initials-D-f_fDFw.js";import"./use-tags-CnmdA4eJ.js";import"./automation-list-row-BMiRTeOK.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-DbzFw6wJ.js";const Q={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"}]},U={authors:"sandbox.recordEditor.titleAuthor"};function Gr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=J(h);let g;t[4]!==f||t[5]!==a?(g=M(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:$(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=H(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=U[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(X,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(q,{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(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(V,{id:o.key,className:"h-10 w-full",children:r.jsx(z,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(G,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(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[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==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[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Gr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BTzECwAf.js","assets/index-DHLutK6v.js","assets/index-DJSuP9VA.css","assets/Tool02-BalBR7uK.js","assets/CheckCircle-V0GvWvtd.js","assets/Settings02-xEBQxvJD.js","assets/use-mcp-client-Bac4vccq.js","assets/constants-dLUUoWH7.js","assets/auth-BqxUQw-v.js","assets/useInfiniteQuery-CP11XfQS.js","assets/use-infinite-scroll-DzHJHyr0.js","assets/badge-CXIV4O-0.js","assets/input-zNG5Uz1T.js","assets/dropdown-menu-BGreHXNg.js","assets/Check-C5RWnyNL.js","assets/ChevronRight-Dh8_6pj1.js","assets/DotsVertical-B39kxqbi.js","assets/table-RKi74_kY.js","assets/toggle-group-WZyFFujP.js","assets/use-view-mode-DHrNQrCI.js","assets/FilterLines-BBF-m2ZJ.js","assets/Globe01-C2F_PPuX.js","assets/SearchMd-COQJLRw-.js","assets/dialog-DYg0AoO0.js","assets/AlertCircle-qZDg2e-H.js","assets/Download01-C1FmC7JV.js","assets/Upload01-mqAHBbZV.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BWONJIzw.js","assets/Trash01-CwqV1gzD.js","assets/label-CEq9oqa2.js","assets/select-W8jorDji.js","assets/ChevronDown-CeGZsBnS.js","assets/ChevronUp-DCx43qHY.js","assets/switch-BsAR0Ue8.js","assets/textarea-XbuS70jj.js","assets/ArrowLeft-CatEVOI7.js","assets/XCircle-BOrCVYLf.js","assets/checkbox-DvC3nAT5.js","assets/Eye-m8QZKf2Y.js","assets/LinkExternal01-kQnRXU4w.js","assets/use-copy-lK-vhEre.js","assets/Copy01-DhfruII6.js","assets/Key01-DbCU9LZF.js","assets/Plus-B7vTVmKH.js","assets/mcp-oauth-DGSZYZtZ.js","assets/Play-Btu3v5FX.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,bp as o}from"./index-DHLutK6v.js";import{R as n}from"./require-capability-BJjD7GXa.js";import"./access-gate-DXIgG9H-.js";import"./capability-load-error-BKGEHfpt.js";const c=s.lazy(()=>o(()=>import("./registry-layout-BTzECwAf.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])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{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(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BTzECwAf.js","assets/index-DHLutK6v.js","assets/index-DJSuP9VA.css","assets/Tool02-BalBR7uK.js","assets/CheckCircle-V0GvWvtd.js","assets/Settings02-xEBQxvJD.js","assets/use-mcp-client-Bac4vccq.js","assets/constants-dLUUoWH7.js","assets/auth-BqxUQw-v.js","assets/useInfiniteQuery-CP11XfQS.js","assets/use-infinite-scroll-DzHJHyr0.js","assets/badge-CXIV4O-0.js","assets/input-zNG5Uz1T.js","assets/dropdown-menu-BGreHXNg.js","assets/Check-C5RWnyNL.js","assets/ChevronRight-Dh8_6pj1.js","assets/DotsVertical-B39kxqbi.js","assets/table-RKi74_kY.js","assets/toggle-group-WZyFFujP.js","assets/use-view-mode-DHrNQrCI.js","assets/FilterLines-BBF-m2ZJ.js","assets/Globe01-C2F_PPuX.js","assets/SearchMd-COQJLRw-.js","assets/dialog-DYg0AoO0.js","assets/AlertCircle-qZDg2e-H.js","assets/Download01-C1FmC7JV.js","assets/Upload01-mqAHBbZV.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BWONJIzw.js","assets/Trash01-CwqV1gzD.js","assets/label-CEq9oqa2.js","assets/select-W8jorDji.js","assets/ChevronDown-CeGZsBnS.js","assets/ChevronUp-DCx43qHY.js","assets/switch-BsAR0Ue8.js","assets/textarea-XbuS70jj.js","assets/ArrowLeft-CatEVOI7.js","assets/XCircle-BOrCVYLf.js","assets/checkbox-DvC3nAT5.js","assets/Eye-m8QZKf2Y.js","assets/LinkExternal01-kQnRXU4w.js","assets/use-copy-lK-vhEre.js","assets/Copy01-DhfruII6.js","assets/Key01-DbCU9LZF.js","assets/Plus-B7vTVmKH.js","assets/mcp-oauth-DGSZYZtZ.js","assets/Play-Btu3v5FX.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as n,d as c,f as m,j as t,k as f,r as l,bp as p}from"./index-DHLutK6v.js";import{R as u}from"./require-capability-BJjD7GXa.js";import"./access-gate-DXIgG9H-.js";import"./capability-load-error-BKGEHfpt.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BTzECwAf.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])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(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{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as i}from"./use-infinite-scroll-DzHJHyr0.js";import{fi as u}from"./index-DHLutK6v.js";function t(e,r){return u(e,i,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-DzHJHyr0.js";import{fi as u,b$ as n}from"./index-DHLutK6v.js";function i(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{i as u};
|