decocms 4.179.2 → 4.179.3
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-D6c8LYe2.js → AlertCircle-RaWn2qdE.js} +1 -1
- package/dist/client/assets/{AreaChart-CH8Js2pi.js → AreaChart-BKtglana.js} +1 -1
- package/dist/client/assets/{ArrowUp-kEV48sO6.js → ArrowUp-_v1PyJZC.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-BJYmfFMN.js → ArrowUpRight-B444FnlJ.js} +1 -1
- package/dist/client/assets/{Check-ABlJjCtF.js → Check-wOEWxhdD.js} +1 -1
- package/dist/client/assets/{CheckCircle-fH3Msw4R.js → CheckCircle-D7Yco-4X.js} +1 -1
- package/dist/client/assets/{ChevronDown-CL6RDz5r.js → ChevronDown-D2DVQmsy.js} +1 -1
- package/dist/client/assets/{ChevronRight-D2QIyurw.js → ChevronRight-BCM3C67B.js} +1 -1
- package/dist/client/assets/{ChevronUp-WdrPgkPC.js → ChevronUp-DuTqOSnE.js} +1 -1
- package/dist/client/assets/{Copy01-ChG3zPJ0.js → Copy01-BbpoCCyO.js} +1 -1
- package/dist/client/assets/{CpuChip01-Bxo-OgNH.js → CpuChip01-Ds3Siuba.js} +1 -1
- package/dist/client/assets/{DotsVertical-BZgAyV6r.js → DotsVertical-C_vKkJ1J.js} +1 -1
- package/dist/client/assets/{Eye-CxGSRvYT.js → Eye-C5cEGVY_.js} +1 -1
- package/dist/client/assets/{FilterLines-zBVPjUus.js → FilterLines-uTkCMuiI.js} +1 -1
- package/dist/client/assets/{HardDrive-P4-L952D.js → HardDrive-Cp6U5rpQ.js} +1 -1
- package/dist/client/assets/{Key01-B5XIt7RR.js → Key01-CqVB3UBj.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CMzVyzfF.js → LayoutLeft-CxXB7X--.js} +1 -1
- package/dist/client/assets/{LinkExternal01-D5kaL51e.js → LinkExternal01-DrPyuW_v.js} +1 -1
- package/dist/client/assets/{LogOut01-BIgAap7M.js → LogOut01-B3b0EefQ.js} +1 -1
- package/dist/client/assets/{Monitor01-Brls3Mpk.js → Monitor01-h6QKqUY2.js} +1 -1
- package/dist/client/assets/{Palette-BfkvPfr9.js → Palette-D9tuxjKh.js} +1 -1
- package/dist/client/assets/{Play-BUR5ZZG_.js → Play-CAF_iHYC.js} +1 -1
- package/dist/client/assets/{Plus-B6_X_P_4.js → Plus-fz3_8U8E.js} +1 -1
- package/dist/client/assets/{SearchLg-Ce7J_1q7.js → SearchLg-DrUjqH4f.js} +1 -1
- package/dist/client/assets/{SearchMd-XsnDUwN2.js → SearchMd-CjfiBnuw.js} +1 -1
- package/dist/client/assets/{Settings02-DMM46Cmi.js → Settings02-nzKOBdvA.js} +1 -1
- package/dist/client/assets/{Shield01-EWp8tUSc.js → Shield01-DoD88fg7.js} +1 -1
- package/dist/client/assets/{Star01-DQ9hzdT-.js → Star01-5QeNs8i6.js} +1 -1
- package/dist/client/assets/{Stars01-BO74Adtc.js → Stars01-CI3urKc2.js} +1 -1
- package/dist/client/assets/{Stars02-CwpBILJw.js → Stars02-zKxDyY55.js} +1 -1
- package/dist/client/assets/{Sun-DHdilogk.js → Sun-BQaO4Ai0.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-C9NmbYS6.js → SwitchHorizontal01-Bq5heGnG.js} +1 -1
- package/dist/client/assets/{Tool01-CamnMBwA.js → Tool01-CsvOceJe.js} +1 -1
- package/dist/client/assets/{Tool02-BFsJ0nQe.js → Tool02-Bnake2Hk.js} +1 -1
- package/dist/client/assets/{Trash01-CW5LSIHJ.js → Trash01-Y7uWt21-.js} +1 -1
- package/dist/client/assets/{TrendUp01-CkRTnQ7B.js → TrendUp01-BzStLm9A.js} +1 -1
- package/dist/client/assets/{Upload01-BtC3p48n.js → Upload01-DhzpvAbC.js} +1 -1
- package/dist/client/assets/{User01-BeMqcvR2.js → User01-CILHYDPl.js} +1 -1
- package/dist/client/assets/{Users01-CHLB2Bd2.js → Users01-BQ9Gg6eP.js} +1 -1
- package/dist/client/assets/{Users03-BQ13o3ba.js → Users03-Z3UygFKB.js} +1 -1
- package/dist/client/assets/{X-BwJEoUio.js → X-BPrNOELh.js} +1 -1
- package/dist/client/assets/{XCircle-C85zLpV2.js → XCircle-B1ExbbAQ.js} +1 -1
- package/dist/client/assets/{XClose-CQGidY34.js → XClose-DGwMZ7_N.js} +1 -1
- package/dist/client/assets/{Zap-CLcTXDga.js → Zap-BCHs3zmd.js} +1 -1
- package/dist/client/assets/{ZapSquare-7-GJcAiY.js → ZapSquare-Dp_5fp2Z.js} +1 -1
- package/dist/client/assets/{access-gate-DbVLkPTf.js → access-gate-DNOkJOpD.js} +1 -1
- package/dist/client/assets/{add-section-modal-_LliHN-t.js → add-section-modal-CmXxpFx7.js} +1 -1
- package/dist/client/assets/{agent-icon-Dhl-sFkB.js → agent-icon-DShg4THN.js} +1 -1
- package/dist/client/assets/{agents-list-DvTA8xjo.js → agents-list-lf0-hWgy.js} +1 -1
- package/dist/client/assets/{ai-providers-DvJtez0R.js → ai-providers-CF4lCUV4.js} +1 -1
- package/dist/client/assets/{alert-Gkha_D03.js → alert-C0bxRzay.js} +1 -1
- package/dist/client/assets/{alert-dialog-D9zdnhjA.js → alert-dialog-D-ko5RoT.js} +1 -1
- package/dist/client/assets/{app-editor-4Yk9DE48.js → app-editor-D6LKC7Ww.js} +1 -1
- package/dist/client/assets/{auth-ChokZ9Zk.js → auth-BmWlFaf3.js} +1 -1
- package/dist/client/assets/{auth-catchall-qU16A355.js → auth-catchall-B6gA2Yva.js} +1 -1
- package/dist/client/assets/{auth-entry-CHy0sgXn.js → auth-entry-BXGJkLso.js} +1 -1
- package/dist/client/assets/{auth-split-layout-B2AuAMHa.js → auth-split-layout-B6XVJe9S.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-ZChCauXW.js → authenticate-and-persist-oauth--lbNdQqp.js} +1 -1
- package/dist/client/assets/{automation-list-row-BQWybGt8.js → automation-list-row-_bdWs_W4.js} +1 -1
- package/dist/client/assets/{automation-runs-C7ms741v.js → automation-runs-C2BB3D8W.js} +1 -1
- package/dist/client/assets/{automations-BfKficEg.js → automations-hNT_H_kV.js} +1 -1
- package/dist/client/assets/{avatar-BFoFykFY.js → avatar-CTppg1We.js} +1 -1
- package/dist/client/assets/{badge-CMT8AbHk.js → badge-BPouPRrf.js} +1 -1
- package/dist/client/assets/{block-document-CmcO-xP6.js → block-document-DIi_Xnlv.js} +1 -1
- package/dist/client/assets/{brand-context-qbc8etKL.js → brand-context-CrKQcZt7.js} +1 -1
- package/dist/client/assets/{buckets-BViCwhfu.js → buckets-Bx_6ds__.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BgoUjrxA.js → bulk-category-panel-BPl6O4QF.js} +1 -1
- package/dist/client/assets/{calendar-Du-u_cku.js → calendar-CNqq8Qyl.js} +1 -1
- package/dist/client/assets/{capability-load-error-sXUj6mV3.js → capability-load-error-75b9rk0q.js} +1 -1
- package/dist/client/assets/{card-Cj42UNuZ.js → card-YKMhk_hb.js} +1 -1
- package/dist/client/assets/{category-editor-BZ8rt9lZ.js → category-editor-fO2ANVCR.js} +1 -1
- package/dist/client/assets/{chat-context-BPy3uKbU.js → chat-context-C6ta2a8S.js} +1 -1
- package/dist/client/assets/{checkbox-D3dESoRB.js → checkbox-CiPfdHK5.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BBxezqZ4.js → cli-auth-success-CAl8Co82.js} +1 -1
- package/dist/client/assets/{collection-detail-CNOGlTyC.js → collection-detail-C6MWeKWs.js} +1 -1
- package/dist/client/assets/{collection-display-button-C5ikvV0w.js → collection-display-button-PviG3V6T.js} +1 -1
- package/dist/client/assets/{collection-search-BJI10moC.js → collection-search-Cqou-sHI.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CxWi0cGQ.js → collection-table-wrapper-BipYz5Cs.js} +1 -1
- package/dist/client/assets/{collection-tabs-BqHat4dR.js → collection-tabs-BQS5hMQO.js} +1 -1
- package/dist/client/assets/{command-BFvttDfs.js → command-BT1brb0h.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-Df0TKqzp.js → commerce-onboarding-Zo2E0tuN.js} +1 -1
- package/dist/client/assets/{companions-core-BlWhbe5J.js → companions-core-g31tJj8D.js} +1 -1
- package/dist/client/assets/{connect-DVmJjsis.js → connect-DKBy6Lyj.js} +1 -1
- package/dist/client/assets/{connection-H9uDX1-t.js → connection-CoPMmVA8.js} +1 -1
- package/dist/client/assets/{connection-card-BoOcyXrA.js → connection-card-B3WvHcvK.js} +1 -1
- package/dist/client/assets/{connection-detail-CoxEgBzC.js → connection-detail-DiV4CnT8.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Bx4nPQ82.js → connection-form-helpers-Cd6KCI-x.js} +1 -1
- package/dist/client/assets/{connections-Cnduo2Sk.js → connections-9aFVu8PG.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-Da-b1rKt.js → decopilot-sse-pool-D5OlUuNx.js} +1 -1
- package/dist/client/assets/{dialog-DOTOGQXn.js → dialog-BLphFjCS.js} +1 -1
- package/dist/client/assets/{domain-settings-Cb6N4QQM.js → domain-settings-CZp_NJLo.js} +1 -1
- package/dist/client/assets/{drawer-C7F3cWRd.js → drawer-DsviRuwh.js} +1 -1
- package/dist/client/assets/{dropdown-menu-WljPwjJm.js → dropdown-menu-veZBy1e2.js} +1 -1
- package/dist/client/assets/{empty-state-LW2nTRFn.js → empty-state-BGzbaquM.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DTWYsTXl.js → extract-connection-data-B9TMW5OB.js} +1 -1
- package/dist/client/assets/{file-explorer-Czs9Tv16.js → file-explorer-BD9-j5Sj.js} +1 -1
- package/dist/client/assets/{form-BmJCuc_G.js → form-Bkl90cEN.js} +1 -1
- package/dist/client/assets/{general-Co0Dwfu4.js → general-C4xoRBRQ.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BQ9MUAwh.js → github-repo-picker-D-ff3G6T.js} +1 -1
- package/dist/client/assets/{hooks-CLECGsuo.js → hooks-BVVnjKv0.js} +1 -1
- package/dist/client/assets/{index-BTccz16O.js → index-BCNsoV1P.js} +1 -1
- package/dist/client/assets/{index-Czxkr_gt.js → index-BCcUTWxr.js} +1 -1
- package/dist/client/assets/{index-tzcuDE5K.js → index-BvZKxFs_.js} +1 -1
- package/dist/client/assets/{index-NPig_MUt.js → index-CKX4JlMg.js} +5 -5
- package/dist/client/assets/{index-Cvu4RyU9.js → index-CSaLEoVR.js} +3 -3
- package/dist/client/assets/{index-CEyDFsze.js → index-Cj5KPR-9.js} +1 -1
- package/dist/client/assets/{index-C4FbpJPs.js → index-ClYhB9Lh.js} +1 -1
- package/dist/client/assets/{index-Dpi5W1fE.js → index-D6320hv5.js} +1 -1
- package/dist/client/assets/{index-C8SXOZsQ.js → index-L4L3_Dyl.js} +1 -1
- package/dist/client/assets/{index-BNAJA2AE.js → index-Leqj52UD.js} +1 -1
- package/dist/client/assets/{index-ClldkStb.js → index-YY-7Zjts.js} +1 -1
- package/dist/client/assets/{index-BLoJTTYl.js → index-ae29Vqhx.js} +3 -3
- package/dist/client/assets/{index-redirect-BGHGe3b1.js → index-redirect-l3_POX63.js} +1 -1
- package/dist/client/assets/{input-DZGEXgzv.js → input-BBVX_6cn.js} +1 -1
- package/dist/client/assets/{integration-icon-CEvXANMx.js → integration-icon-shdif4Xa.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BR0-1g82.js → invite-member-dialog-BHl80IfE.js} +1 -1
- package/dist/client/assets/{label-S8cQ0Exp.js → label-yePKVfna.js} +1 -1
- package/dist/client/assets/{layout-MR2W6oql.js → layout-C-cTOfty.js} +1 -1
- package/dist/client/assets/{login-D03v7g6w.js → login-CTaMn8zS.js} +1 -1
- package/dist/client/assets/{mcp-oauth-bPeVlVPZ.js → mcp-oauth-BP4cXSso.js} +1 -1
- package/dist/client/assets/{members-DYlNErov.js → members-FmWdXZ-t.js} +1 -1
- package/dist/client/assets/{monaco-editor-DBddUUoq.js → monaco-editor-BLRSqr-o.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-6gQrL3hU.js → monitoring-stats-row-B10Od33v.js} +1 -1
- package/dist/client/assets/{multi-select--BFWUbv1.js → multi-select-BskTm5w6.js} +1 -1
- package/dist/client/assets/{oauth-callback-GYuPK3Yh.js → oauth-callback-DjBiF8Ht.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DcjCPY4I.js → oauth-callback-ai-provider-BHYMnCqz.js} +1 -1
- package/dist/client/assets/{onboarding-C_KHBSmA.js → onboarding-BpRsC2oe.js} +1 -1
- package/dist/client/assets/{org-layout-LmRBN-0c.js → org-layout-C9r2pBLC.js} +1 -1
- package/dist/client/assets/{organization-choice-Bq9nQMUx.js → organization-choice-CROqzCOl.js} +1 -1
- package/dist/client/assets/{orgs-BIPAHD5q.js → orgs-CGcdaPr2.js} +1 -1
- package/dist/client/assets/{page-seo-form-CKrKowKL.js → page-seo-form-jiDBKOgh.js} +1 -1
- package/dist/client/assets/{popover-CjVj_wOo.js → popover-jn3JmlYB.js} +1 -1
- package/dist/client/assets/{post-editor-BfcakWE2.js → post-editor-dsiZ5HI8.js} +1 -1
- package/dist/client/assets/{primitives-vqAoNtYO.js → primitives-B_UQAB15.js} +1 -1
- package/dist/client/assets/{profile-CxwGqoIl.js → profile-C9XlQsFU.js} +1 -1
- package/dist/client/assets/project-app-view-DKefvtvP.js +1 -0
- package/dist/client/assets/record-editor-CSR76Oh-.js +1 -0
- package/dist/client/assets/{redirect-editor-CFCcg62k.js → redirect-editor-C_k6I0u1.js} +1 -1
- package/dist/client/assets/registry-DLNeLiwj.js +2 -0
- package/dist/client/assets/{registry-layout-B2Mq-MEw.js → registry-layout-Csvx2Hte.js} +1 -1
- package/dist/client/assets/{reports-CzSEg25p.js → reports-DG0-jD7f.js} +1 -1
- package/dist/client/assets/{require-capability-Ch_i9MUx.js → require-capability-B6_ZXQu1.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Dhb-IyLY.js → required-auth-layout-BYIar65W.js} +1 -1
- package/dist/client/assets/{reset-password-C0z7uXQu.js → reset-password-DPBfdncv.js} +1 -1
- package/dist/client/assets/{roles-Bvzq2BnJ.js → roles-DpfsSeKe.js} +1 -1
- package/dist/client/assets/{search-input--9p4kx8X.js → search-input-B8ayfzGl.js} +1 -1
- package/dist/client/assets/{secrets-Bg-rMdrX.js → secrets-Cus1bsx5.js} +1 -1
- package/dist/client/assets/{sections-editor-BqXEuUbH.js → sections-editor-hiAa1leh.js} +1 -1
- package/dist/client/assets/{select-model-Rm8e3i9g.js → select-model-BQulWoif.js} +1 -1
- package/dist/client/assets/{select-B0lo91wi.js → select-ppm3orjA.js} +1 -1
- package/dist/client/assets/{self-tool-result-BDMMeN1e.js → self-tool-result-Hk_A-xD2.js} +1 -1
- package/dist/client/assets/{seo-editor-DipwpF-d.js → seo-editor-BoH0xEoC.js} +1 -1
- package/dist/client/assets/{settings-layout-CA_2Z5w7.js → settings-layout-6CUTyHHR.js} +1 -1
- package/dist/client/assets/{settings-section-nKCe9ELF.js → settings-section-aLJ5x4Bb.js} +1 -1
- package/dist/client/assets/{shell-controls-Eg2AkZT3.js → shell-controls-l5NvObmP.js} +1 -1
- package/dist/client/assets/{shell-layout-R-tVQWxS.js → shell-layout-CEOcii9H.js} +1 -1
- package/dist/client/assets/{sidebar-DwssglGA.js → sidebar-DsIxwGGa.js} +1 -1
- package/dist/client/assets/{skeleton-CGtQBM1r.js → skeleton-DcNYWNQH.js} +1 -1
- package/dist/client/assets/{spinner-Co_UYVI5.js → spinner-P-UzksZ6.js} +1 -1
- package/dist/client/assets/{sso-BNYaFbZK.js → sso-57ZIkHgl.js} +1 -1
- package/dist/client/assets/{store-CLUTIMf8.js → store-DqCA5bGA.js} +1 -1
- package/dist/client/assets/store-registry-BuaudJKu.js +2 -0
- package/dist/client/assets/{studio-tools-QZAsl8sN.js → studio-tools-CPEnz302.js} +1 -1
- package/dist/client/assets/{switch-BgHcCYyD.js → switch-B41oZNI6.js} +1 -1
- package/dist/client/assets/{tab-id-CwozFwfi.js → tab-id-DiBFBWZk.js} +1 -1
- package/dist/client/assets/{table-hSXgAArl.js → table-3B5Yrdcv.js} +1 -1
- package/dist/client/assets/{tabs-DV_hrUZc.js → tabs-4pYk9rE2.js} +1 -1
- package/dist/client/assets/{textarea-CLXXVDxG.js → textarea-CMb31KVu.js} +1 -1
- package/dist/client/assets/{toggle-group-BJOCIBLH.js → toggle-group-K9ttLQUK.js} +1 -1
- package/dist/client/assets/{toolbar-6QPic2k_.js → toolbar-wcxvhT2F.js} +1 -1
- package/dist/client/assets/{tooltip-C1X_Sh0t.js → tooltip-CqlOk4LY.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CY0n-NJx.js → use-ai-providers-CKfFdt6Z.js} +1 -1
- package/dist/client/assets/{use-automations-CBx-mhfE.js → use-automations-DGYCEL-p.js} +1 -1
- package/dist/client/assets/{use-autosave-D0UZlhoU.js → use-autosave-CD1MSVzb.js} +1 -1
- package/dist/client/assets/{use-capability-yfVxXW4U.js → use-capability-enalroLv.js} +1 -1
- package/dist/client/assets/{use-clock-tick-C4RROoEU.js → use-clock-tick-BhsVH4Id.js} +1 -1
- package/dist/client/assets/{use-connection-C-89K6Fu.js → use-connection-BRAoZVdi.js} +1 -1
- package/dist/client/assets/{use-copy-xpbAEjPw.js → use-copy-Dh4bkm3m.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-D_yWyam7.js → use-create-virtual-mcp-CBaTgwti.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DL09BHQn.js → use-debounced-autosave-DMe13H2L.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DEU9FY-9.js → use-debounced-value-5vPsvbpQ.js} +1 -1
- package/dist/client/assets/{use-deco-credits-u9Wzzs2f.js → use-deco-credits-DI3NoupK.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Bp3t3i2a.js → use-decopilot-events-BLNanHeO.js} +1 -1
- package/dist/client/assets/{use-delete-connection-7Z6o0Lx1.js → use-delete-connection-BwAvabH1.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-hzGF-Ckw.js → use-deployment-admin-DnPUgVY_.js} +1 -1
- package/dist/client/assets/{use-file-configs-DcC2ZiSo.js → use-file-configs-QHdxrCoX.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Dcths7GY.js → use-infinite-scroll-1wtdiowu.js} +1 -1
- package/dist/client/assets/{use-join-requests-BSsas45Y.js → use-join-requests-k-YSGjKb.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CS5h587h.js → use-mcp-client-BYngXBT6.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DIYXCAIA.js → use-mcp-tools-CfcvFTzj.js} +1 -1
- package/dist/client/assets/{use-members-DxfSI2Jx.js → use-members-D1WQa-CT.js} +1 -1
- package/dist/client/assets/{use-mobile-BaglBH3A.js → use-mobile-CI8oD3ri.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-C-d85JYQ.js → use-navigate-to-agent-BfKWRDbc.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-cK0HLSu7.js → use-org-auth-client-BANmmzen.js} +1 -1
- package/dist/client/assets/{use-org-sso-CNnypjgO.js → use-org-sso-Bni0gYjT.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CatKb2no.js → use-organization-roles-D572695_.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DgQSnPZR.js → use-organization-settings-CymoXkDm.js} +1 -1
- package/dist/client/assets/{use-registry-connections-Cp-VoHEt.js → use-registry-connections-DCkEBfu9.js} +1 -1
- package/dist/client/assets/{use-secrets-ufY8LNwD.js → use-secrets-D6mGxhoE.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CudOZapr.js → use-status-sounds-DrE83CIk.js} +1 -1
- package/dist/client/assets/{use-tags-D7xTkrG0.js → use-tags-xIbpVn4M.js} +1 -1
- package/dist/client/assets/{use-view-mode-CI2I5cEk.js → use-view-mode-CcbBJ0u6.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DPt7VpPC.js → use-virtual-mcp-Cfb_3CLM.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CJOrBf8a.js +1 -0
- package/dist/client/assets/{useQueries-BceWXdKI.js → useQueries-DYepcVkA.js} +1 -1
- package/dist/client/assets/{useRouterState-CuQj0227.js → useRouterState-HQACt5GE.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-2KEX_w1G.js +1 -0
- package/dist/client/assets/{users-Cg3Zd0Xw.js → users-fAMwRIn_.js} +1 -1
- package/dist/client/assets/{variant-calendar-DcgCi0-J.js → variant-calendar-FLzztAI6.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CsNoqGjP.js → view-mode-toggle-BMFBwFEH.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/project-app-view-SO-CKdWn.js +0 -1
- package/dist/client/assets/record-editor-BWFTogJj.js +0 -1
- package/dist/client/assets/registry-B2O8cdDq.js +0 -2
- package/dist/client/assets/store-registry-BvyMbAOv.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BHcbv9d9.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BDZ-We-4.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1037,7 +1037,7 @@ Keep both indexes concise \u2014 a curated list of durable facts and one-line po
|
|
|
1037
1037
|
- \`org/public/<set>/\` \u2014 curated read-only skill sets, mounted here. Your skills are listed in the <available-skills> catalog; load one with the \`skill\` tool before applying it.
|
|
1038
1038
|
- \`org/upload/\` \u2014 files the user attached to this conversation are already here; read them directly (no copy step needed).
|
|
1039
1039
|
- \`org/output/\` \u2014 write final deliverables here; they are shared back to the organization under this run's folder.
|
|
1040
|
-
</organization-filesystem>`}var dU=B(()=>{oD();ty0()});function oy0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function Qu8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>Gu8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function Ku8($){return $.replace(Ju8,"").replace(Wu8,"\uFFFD")}function Ii1($){if(Qu8($,Ri1)>Ri1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Ku8(X):X)}class ry0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:Ii1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?Ii1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%Yu8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:oy0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var Ri1=50000000,Gu8=1e5,Yu8=25,Ju8,Wu8;var qi1=B(()=>{W5();Ju8=/\u0000/g,Wu8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Ef}from"kysely";function rD($){return typeof $==="string"?$:$.toISOString()}function Mi1($){return $.replace(/[\\%_]/g,"\\$&")}class ay0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class zf{db;constructor($){this.db=$}messageParts(){return new ry0(this.db)}async create($){let Z=$.id??c8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=lU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Ef`coalesce(${Ef.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Ef`coalesce(${Ef.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${Mi1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${Mi1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:rD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Ef`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Ef`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?rD($.run_started_at):null,last_progress_at:$.last_progress_at?rD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:rD($.created_at),updated_at:rD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:rD($.created_at),updated_at:rD($.updated_at)}}}var sy0=B(()=>{DX();dU();qi1()});import{sql as ey0}from"kysely";function x40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function y40($){return`msg_async_stub_${$}`}async function $g0($,Z){await $.deleteFrom("thread_messages").where("id","=",y40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",y40(Z)).execute()}function Nu8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function Zg0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:x40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Nu8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:x40($.created_at)??"",updatedAt:x40($.updated_at)??"",completedAt:x40($.completed_at)}}class Xg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class id{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return Zg0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return Zg0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?Zg0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=y40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:ey0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:ey0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(ey0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>y40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var Gg0=()=>{};function g40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:s6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var Yg0=B(()=>{JW();PX()});class Qg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as Hu8}from"kysely";function ki1($){return $ instanceof Date?$.toISOString():String($)}class Jg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:ki1($.created_at),updatedBy:$.updated_by,updatedAt:ki1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new mU($.id)}async create($){let Z=c8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(h40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new wQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(h40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(h40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(h40).executeTakeFirst();if(!G)throw new wQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Hu8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new wQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var h40,wQ,mU;var nd=B(()=>{DX();h40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];wQ=class wQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};mU=class mU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Fu8}from"kysely";function Si1($){return $ instanceof Date?$.toISOString():String($)}class Wg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:Si1($.created_at),updatedBy:$.updated_by,updatedAt:Si1($.updated_at)}}async create($){let Z=c8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(u40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new jf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(u40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new jf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(u40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(u40).executeTakeFirst();if(!X)throw new jf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new jf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Fu8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new jf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var u40,jf;var Vi1=B(()=>{DX();u40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];jf=class jf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function c40($){return Kg0.test($)}var Kg0;var l40=B(()=>{Kg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function Ci1($){return $ instanceof Date?$.toISOString():String($)}function Ng0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:Ci1($.created_at),updatedBy:$.updated_by,updatedAt:Ci1($.updated_at)}}class Fg0{db;constructor($){this.db=$}async claimSite($){if(!c40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Ng0(X);let G=await this.getBySlug($.slug);if(!G)throw new Hg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Hg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Ng0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Ng0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Hg0;var _i1=B(()=>{l40();Hg0=class Hg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function vN($){return $.createdBy==="system"}function Ou8($){return $?.status==="active"||$?.status==="past_due"}function vi1($,Z){if(Ou8($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function bi1(){let $=d0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}async function fi1($,Z,X=bi1()){if(!X.enforced||!vN(Z))return;let G=await $.storage.organizationBilling.taskClaim(Z.id);if(G&&G.runCount>=X.maxRunsPerTask)throw new OQ("runs_exhausted");if(G&&G.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),Q=vi1(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,Q.periodKey)>=Q.limit)throw new OQ(Q.exhaustedReason)}async function xi1($,Z,X=bi1()){if(!X.enforced||!vN(Z))return;let G=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=vi1(G,X),Q=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(Q==="exhausted")throw new OQ(Y.exhaustedReason);if(Q==="runs_exhausted")throw new OQ("runs_exhausted")}async function yi1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function d40($,Z,X){await $.releaseTaskClaim(Z,X).catch((G)=>console.error("[task-quota] refund failed (stays charged)",G))}var Uu8="[SUBSCRIPTION_REQUIRED]",wu8,OQ;var iU=B(()=>{V$();wu8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};OQ=class OQ extends Error{reason;constructor($){super(`${Uu8} ${wu8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});function gi1($,Z){return $?.startsWith(`${pd[Z]}:`)??!1}function Ug0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Bu8($,Z){let X=Ug0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Pf($,Z,X){if(Z.length===0)return!1;let G=Bu8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var e6="super-agent",nU,pd,pU,hi1="task-board.item.updated",ui1="task-board.item.deleted";var BQ=B(()=>{nU=["qa","code_review"],pd={qa:"QA Agent",code_review:"Code Reviewer"},pU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function wg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function Du8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Bg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Og0.has(X.status))}function Lu8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class tU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=c8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Y}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Q=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Y??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Q)}async update($,Z,X,G){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Q=this.itemFromDbRow(Y);return await this.attachRefs([Q],Z),Q}async delete($,Z,X){await this.inTransaction(async(G)=>{let Y=await G.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(Y&&vN({createdBy:Y.created_by})){await G.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute();return}await G.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await G.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await G.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute()})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((G)=>G.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let G=await X.executeTakeFirst();return Number(G.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||!Bg0(Y))continue;X.push(await this.update(G,Z,{status:"in_review"},Y.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((Q)=>console.error("[task-board] in_review activity write failed",Q))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",e6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Q=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:Du8(J.lastMessagePayload),hasPreview:Lu8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Q.get(J.taskId);if(K)K.push(W);else Q.set(J.taskId,[W])}for(let J of Z)J.threads=Q.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Q)=>Q.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let Q of G){let J={id:Q.id,name:Q.name,color:Q.color??null,createdBy:Q.createdBy,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt},W=Y.get(Q.taskId);if(W)W.push(J);else Y.set(Q.taskId,[J])}for(let Q of Z)Q.tags=Y.get(Q.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:c8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:c8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((G)=>wg0(G))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let G=await this.db.insertInto("task_board_comments").values({id:c8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return wg0(G)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?wg0(X):null}async deleteComment($,Z,X){let G=await this.commentInOrg($,Z);if(!G)return!1;if(G.authorId!==X&&G.authorId!==e6)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Og0;var Af=B(()=>{iU();DX();BQ();Og0=new Set(["completed","failed","expired"])});class Dg0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Y=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Y,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}class Lg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async upsert($){let Z=await this.vault.encrypt($.accessToken),X=$.expiresAt??null,G=new Date;return await this.db.insertInto("claude_subscriptions").values({user_id:$.userId,encrypted_access_token:Z,expires_at:X,created_at:G}).onConflict((Y)=>Y.column("user_id").doUpdateSet({encrypted_access_token:Z,expires_at:X,created_at:G})).execute(),{linkedAt:G.toISOString(),expiresAt:X?.toISOString()??null}}async find($){let Z=await this.db.selectFrom("claude_subscriptions").select(["created_at","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;return{linkedAt:new Date(Z.created_at).toISOString(),expiresAt:Z.expires_at?new Date(Z.expires_at).toISOString():null}}async findLiveToken($){let Z=await this.db.selectFrom("claude_subscriptions").select(["encrypted_access_token","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;if(Z.expires_at&&new Date(Z.expires_at).getTime()<=Date.now())return null;return this.vault.decrypt(Z.encrypted_access_token)}async delete($){await this.db.deleteFrom("claude_subscriptions").where("user_id","=",$).execute()}}function jW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function m40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(m40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||m40(X)));return!1}function Eg0($){return Array.isArray($)&&$.every(m40)}function td($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||m40(X)))}var Bn1="vercel.ai.error",Eu8,ci1,li1,Y1,Dn1="AI_APICallError",Ln1,zu8,di1,mi1,a8,En1="AI_EmptyResponseBodyError",zn1,ju8,ii1,ni1,i40,jn1="AI_InvalidArgumentError",Pn1,Pu8,pi1,ti1,oU,An1="AI_InvalidPromptError",Tn1,Au8,oi1,ri1,DQ,Rn1="AI_InvalidResponseDataError",In1,Tu8,ai1,si1,Tf,qn1="AI_JSONParseError",Mn1,Ru8,ei1,$n1,bN,kn1="AI_LoadAPIKeyError",Sn1,Iu8,Zn1,Xn1,aD,Vn1="AI_LoadSettingError",Cn1,qu8,Gn1,Yn1,_n1,vn1="AI_NoContentGeneratedError",bn1,Mu8,Qn1,Jn1,fn1,xn1="AI_NoSuchModelError",yn1,ku8,Wn1,Kn1,R5,gn1="AI_TooManyEmbeddingValuesForCallError",hn1,Su8,Nn1,Hn1,Rf,un1="AI_TypeValidationError",cn1,Vu8,Fn1,Un1,$5,ln1="AI_UnsupportedFunctionalityError",dn1,Cu8,wn1,On1,T4;var o1=B(()=>{Eu8=Symbol.for(Bn1),Y1=class $ extends(li1=Error,ci1=Eu8,li1){constructor({name:Z,message:X,cause:G}){super(X);this[ci1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,Bn1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Ln1=`vercel.ai.error.${Dn1}`,zu8=Symbol.for(Ln1),a8=class extends(mi1=Y1,di1=zu8,mi1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Y,responseBody:Q,cause:J,isRetryable:W=G!=null&&(G===408||G===409||G===429||G>=500),data:K}){super({name:Dn1,message:$,cause:J});this[di1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Y,this.responseBody=Q,this.isRetryable=W,this.data=K}static isInstance($){return Y1.hasMarker($,Ln1)}},zn1=`vercel.ai.error.${En1}`,ju8=Symbol.for(zn1),i40=class extends(ni1=Y1,ii1=ju8,ni1){constructor({message:$="Empty response body"}={}){super({name:En1,message:$});this[ii1]=!0}static isInstance($){return Y1.hasMarker($,zn1)}};Pn1=`vercel.ai.error.${jn1}`,Pu8=Symbol.for(Pn1),oU=class extends(ti1=Y1,pi1=Pu8,ti1){constructor({message:$,cause:Z,argument:X}){super({name:jn1,message:$,cause:Z});this[pi1]=!0,this.argument=X}static isInstance($){return Y1.hasMarker($,Pn1)}},Tn1=`vercel.ai.error.${An1}`,Au8=Symbol.for(Tn1),DQ=class extends(ri1=Y1,oi1=Au8,ri1){constructor({prompt:$,message:Z,cause:X}){super({name:An1,message:`Invalid prompt: ${Z}`,cause:X});this[oi1]=!0,this.prompt=$}static isInstance($){return Y1.hasMarker($,Tn1)}},In1=`vercel.ai.error.${Rn1}`,Tu8=Symbol.for(In1),Tf=class extends(si1=Y1,ai1=Tu8,si1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Rn1,message:Z});this[ai1]=!0,this.data=$}static isInstance($){return Y1.hasMarker($,In1)}},Mn1=`vercel.ai.error.${qn1}`,Ru8=Symbol.for(Mn1),bN=class extends($n1=Y1,ei1=Ru8,$n1){constructor({text:$,cause:Z}){super({name:qn1,message:`JSON parsing failed: Text: ${$}.
|
|
1040
|
+
</organization-filesystem>`}var dU=B(()=>{oD();ty0()});function oy0($){let Z=new Map;for(let G of $){let Y=Z.get(G.message_id);if(Y)Y.push(G);else Z.set(G.message_id,[G])}let X=[];for(let[G,Y]of Z){let Q=[...Y].sort((W,K)=>W.seq-K.seq),J=Q[0];X.push({id:G,role:J.role,parts:Q.filter((W)=>W.kind!=="finish").map((W)=>W.payload&&typeof W.payload==="object"&&!Array.isArray(W.payload)?{...W.payload,created_at:W.created_at}:W.payload),created_at:J.created_at,status:Q.some((W)=>W.kind==="finish")?"complete":"in_progress",metadata:Q.find((W)=>W.kind==="finish")?.metadata??null})}return X.sort((G,Y)=>G.created_at<Y.created_at?-1:G.created_at>Y.created_at?1:0),X}function Qu8($,Z){let X=0,G=0,Y=[$];while(Y.length>0){if(X>Z||++G>Gu8)return 1/0;let Q=Y.pop();if(typeof Q==="string")X+=Q.length;else if(Array.isArray(Q))for(let J of Q)Y.push(J);else if(Q!==null&&typeof Q==="object")for(let J of Object.values(Q))Y.push(J)}return X}function Ku8($){return $.replace(Ju8,"").replace(Wu8,"\uFFFD")}function Ii1($){if(Qu8($,Ri1)>Ri1)return JSON.stringify({truncated:!0,reason:"payload exceeds max stored size"});return JSON.stringify($,(Z,X)=>typeof X==="string"?Ku8(X):X)}class ry0{db;constructor($){this.db=$}async serializeParts($){let Z=new Set,X=[],G=new Map;for(let Y=0;Y<$.length;Y++){let Q=$[Y];if(Z.has(Q.id))continue;if(Z.add(Q.id),G.set(Q.id,Q),X.push({id:Q.id,seq:Q.seq,org_id:Q.org_id,thread_id:Q.thread_id,run_id:Q.run_id,message_id:Q.message_id,role:Q.role,kind:Q.kind,payload:Ii1(Q.payload),payload_ref:Q.payload_ref??null,metadata:Q.metadata!=null?Ii1(Q.metadata):null,created_at:Q.created_at}),(Y+1)%Yu8===0)await a$(0)}return{rows:X,partsById:G}}async appendParts($){if($.length===0)return[];let{rows:Z,partsById:X}=await this.serializeParts($);return(await this.db.insertInto("thread_message_parts").values(Z).onConflict((Y)=>Y.column("id").doNothing()).returning("id").execute()).map((Y)=>X.get(Y.id)).filter((Y)=>Y!==void 0)}async replaceMessageParts($,Z,X){let{rows:G}=await this.serializeParts(X);return await this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("thread_message_parts").select((K)=>K.fn.min("created_at").as("created_at")).where("thread_id","=",$).where("message_id","=",Z).executeTakeFirst(),J=Q?.created_at!=null?new Date(Q.created_at).getTime():null,W=J!=null&&Number.isFinite(J)?G.map((K)=>({...K,created_at:new Date(J+K.seq).toISOString()})):G;if(await Y.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute(),W.length>0)await Y.insertInto("thread_message_parts").values(W).onConflict((K)=>K.column("id").doUpdateSet((N)=>({seq:N.ref("excluded.seq"),role:N.ref("excluded.role"),kind:N.ref("excluded.kind"),payload:N.ref("excluded.payload"),payload_ref:N.ref("excluded.payload_ref"),metadata:N.ref("excluded.metadata"),created_at:N.ref("excluded.created_at")}))).execute()}),X}async deleteMessageParts($,Z){await this.db.deleteFrom("thread_message_parts").where("thread_id","=",$).where("message_id","=",Z).execute()}async maxCreatedAtMsForRun($){let Z=await this.db.selectFrom("thread_message_parts").select((G)=>G.fn.max("created_at").as("max")).where("run_id","=",$).executeTakeFirst();if(!Z?.max)return null;let X=new Date(Z.max).getTime();return Number.isFinite(X)?X:null}async maxCreatedAtMsForMessage($,Z){let X=await this.db.selectFrom("thread_message_parts").select((Y)=>Y.fn.max("created_at").as("max")).where("run_id","=",$).where("message_id","=",Z).executeTakeFirst();if(!X?.max)return null;let G=new Date(X.max).getTime();return Number.isFinite(G)?G:null}async loadWindow($,Z){let X=await this.db.selectFrom("thread_message_parts").select(["message_id"]).where("thread_id","=",$).where("kind","=","finish").orderBy("created_at","desc").orderBy("id","desc").limit(Z.limit).offset(Z.offset??0).execute(),G=await this.db.selectFrom("thread_message_parts").select((K)=>K.fn.count("id").as("count")).where("thread_id","=",$).where("kind","=","finish").executeTakeFirst(),Y=Number(G?.count??0),Q=Z.includeInFlight&&(Z.offset??0)===0?await this.db.selectFrom("thread_message_parts as p").select("p.message_id").distinct().where("p.thread_id","=",$).where((K)=>K.not(K.exists(K.selectFrom("thread_message_parts as f").select("f.id").whereRef("f.message_id","=","p.message_id").where("f.thread_id","=",$).where("f.kind","=","finish")))).execute():[],J=[...X.map((K)=>K.message_id),...Q.map((K)=>K.message_id)];if(J.length===0)return{messages:[],total:Y};let W=await this.db.selectFrom("thread_message_parts").selectAll().where("thread_id","=",$).where("message_id","in",J).orderBy("seq","asc").execute();return{messages:oy0(W),total:Y}}async backfillFromMessages($,Z){let X=[],G=0;for(let Y of $)X.push({id:`${Z.runId}:${Y.id}:content`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"text",payload:Y.parts,payload_ref:null,metadata:Y.metadata??null,created_at:Y.created_at}),X.push({id:`${Z.runId}:${Y.id}:finish`,seq:G++,org_id:Z.orgId,thread_id:Z.threadId,run_id:Z.runId,message_id:Y.id,role:Y.role,kind:"finish",payload:{},payload_ref:null,metadata:null,created_at:Y.created_at});await this.appendParts(X)}}var Ri1=50000000,Gu8=1e5,Yu8=25,Ju8,Wu8;var qi1=B(()=>{W5();Ju8=/\u0000/g,Wu8=/[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/g});import{sql as Ef}from"kysely";function rD($){return typeof $==="string"?$:$.toISOString()}function Mi1($){return $.replace(/[\\%_]/g,"\\$&")}class ay0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}create($){let Z=this.requireOrg();return this.inner.create({...$,organization_id:Z})}get($){return this.inner.get($,this.requireOrg())}update($,Z){return this.inner.update($,this.requireOrg(),Z)}pinRuntimeIfUnset($,Z){return this.inner.pinRuntimeIfUnset($,this.requireOrg(),Z)}completeRunIfNotCompleted($){return this.inner.completeRunIfNotCompleted($,this.requireOrg())}markRunFailed($,Z,X){return this.inner.markRunFailed($,this.requireOrg(),Z,X)}requiresActionIfInProgress($){return this.inner.requiresActionIfInProgress($,this.requireOrg())}forceFailIfInProgress($,Z){return this.inner.forceFailIfInProgress($,this.requireOrg(),Z)}delete($){return this.inner.delete($,this.requireOrg())}list($,Z){return this.inner.list(this.requireOrg(),$,Z)}listByTriggerIds($,Z){return this.inner.listByTriggerIds(this.requireOrg(),$,Z)}findLastUsedByVirtualMcpIds($){return this.inner.findLastUsedByVirtualMcpIds(this.requireOrg(),$)}bumpProgress($){return this.inner.bumpProgress($,this.requireOrg())}getProgress($){return this.inner.getProgress($,this.requireOrg())}listMessages($,Z){return this.inner.listMessages($,this.requireOrg(),Z)}listWithLastMessage($){return this.inner.listWithLastMessage(this.requireOrg(),$)}messageParts(){return this.inner.messageParts()}getRunFence($){return this.inner.getRunFence($)}setRunFence($,Z){return this.inner.setRunFence($,Z)}setCancelRequested($,Z){return this.inner.setCancelRequested($,Z)}getCancelRequestedAt($){return this.inner.getCancelRequestedAt($)}clearCancelRequested($){return this.inner.clearCancelRequested($)}bumpAckedSeq($,Z,X){return this.inner.bumpAckedSeq($,this.requireOrg(),Z,X)}getAckedSeq($){return this.inner.getAckedSeq($,this.requireOrg())}}class zf{db;constructor($){this.db=$}messageParts(){return new ry0(this.db)}async create($){let Z=$.id??c8("thrd"),X=new Date().toISOString();if(!$.organization_id)throw Error("organization_id is required");if(!$.created_by)throw Error("created_by is required");if(!$.title)$.title=lU;let G={id:Z,organization_id:$.organization_id,title:$.title,description:$.description??null,status:$.status??"completed",trigger_id:$.trigger_id??null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,created_at:X,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??null,...$.message_storage_version!==void 0?{message_storage_version:$.message_storage_version}:{},...$.metadata!==void 0?{metadata:JSON.stringify($.metadata)}:{}},Y=await this.db.insertInto("threads").values(G).onConflict((J)=>J.column("id").doNothing()).returningAll().executeTakeFirst();if(Y)return{...this.threadFromDbRow(Y),isNew:!0};let Q=await this.db.selectFrom("threads").selectAll().where("id","=",Z).where("organization_id","=",$.organization_id).executeTakeFirstOrThrow();return{...this.threadFromDbRow(Q),isNew:!1}}async get($,Z){let X=await this.db.selectFrom("threads").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return X?this.threadFromDbRow(X):null}async update($,Z,X){let Y={updated_at:new Date().toISOString()};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.updated_by!==void 0)Y.updated_by=X.updated_by;if(X.hidden!==void 0)Y.hidden=X.hidden;if(X.status!==void 0)Y.status=X.status;if(X.context_start_message_id!==void 0)Y.context_start_message_id=X.context_start_message_id;if(X.run_owner_pod!==void 0)Y.run_owner_pod=X.run_owner_pod;if(X.run_config!==void 0)Y.run_config=X.run_config?JSON.stringify(X.run_config):null;if(X.run_started_at!==void 0)Y.run_started_at=X.run_started_at;if(X.last_progress_at!==void 0)Y.last_progress_at=X.last_progress_at;if(X.failure_reason!==void 0)Y.failure_reason=X.failure_reason;if(X.failure_kind!==void 0)Y.failure_kind=X.failure_kind;if(X.metadata!==void 0)Y.metadata=JSON.stringify(X.metadata);if(X.branch!==void 0)Y.branch=X.branch;if(X.virtual_mcp_id!==void 0)Y.virtual_mcp_id=X.virtual_mcp_id;if(X.sandbox_provider_kind!==void 0)Y.sandbox_provider_kind=X.sandbox_provider_kind;if(X.harness_id!==void 0)Y.harness_id=X.harness_id;if(X.message_storage_version!==void 0)Y.message_storage_version=X.message_storage_version;await this.db.updateTable("threads").set(Y).where("id","=",$).where("organization_id","=",Z).execute();let Q=await this.get($,Z);if(!Q)throw Error("Thread not found after update");return Q}async pinRuntimeIfUnset($,Z,X){let G=await this.db.updateTable("threads").set({harness_id:X.harnessId,sandbox_provider_kind:Ef`coalesce(${Ef.ref("sandbox_provider_kind")}, ${X.sandboxProviderKind})`,branch:Ef`coalesce(${Ef.ref("branch")}, ${X.branch})`,updated_at:new Date().toISOString(),...X.messageStorageVersion!==void 0?{message_storage_version:X.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).where((Y)=>X.sandboxProviderKind===null?Y("sandbox_provider_kind","is",null):Y.or([Y("sandbox_provider_kind","is",null),Y("sandbox_provider_kind","=",X.sandboxProviderKind)])).returningAll().executeTakeFirst();if(G)return{thread:this.threadFromDbRow(G),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async completeRunIfNotCompleted($,Z){let G=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async markRunFailed($,Z,X,G){let Q=(await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:G,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Q?this.threadFromDbRow(Q):null}async requiresActionIfInProgress($,Z){let G=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return G?this.threadFromDbRow(G):null}async forceFailIfInProgress($,Z,X){let G=new Date().toISOString(),Y=this.db.updateTable("threads").set({status:"failed",updated_at:G}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(X!=null)Y=Y.where("run_fence_token","=",X);return((await Y.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,X){let G=X?.includeArchived===!0,Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",G).orderBy("updated_at","desc");if(Z)Y=Y.where("created_by","=",Z);let Q=X?.virtualMcpId??X?.agentId;if(Q)Y=Y.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)Y=Y.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)Y=Y.where("trigger_id","is",null);if(X?.startDate)Y=Y.where("updated_at",">=",X.startDate);if(X?.endDate)Y=Y.where("updated_at","<=",X.endDate);if(X?.search)Y=Y.where("title","ilike",`%${Mi1(X.search)}%`);if(X?.status)Y=Y.where("status","=",X.status);let J=this.db.selectFrom("threads").select((N)=>N.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",G);if(Z)J=J.where("created_by","=",Z);if(Q)J=J.where("virtual_mcp_id","=",Q);if(X?.hasTrigger===!0)J=J.where("trigger_id","is not",null);else if(X?.hasTrigger===!1)J=J.where("trigger_id","is",null);if(X?.startDate)J=J.where("updated_at",">=",X.startDate);if(X?.endDate)J=J.where("updated_at","<=",X.endDate);if(X?.search)J=J.where("title","ilike",`%${Mi1(X.search)}%`);if(X?.status)J=J.where("status","=",X.status);if(X?.limit)Y=Y.limit(X.limit);if(X?.offset)Y=Y.offset(X.offset);let[W,K]=await Promise.all([Y.execute(),J.executeTakeFirst()]);return{threads:W.map((N)=>this.threadFromDbRow(N)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,X){if(Z.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),Y=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(X?.limit)G=G.limit(X.limit);if(X?.offset)G=G.offset(X.offset);let[Q,J]=await Promise.all([G.execute(),Y.executeTakeFirst()]);return{threads:Q.map((W)=>this.threadFromDbRow(W)),total:Number(J?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let X=new Map;if(Z.length===0)return X;let G=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let Y of G)X.set(Y.virtual_mcp_id,{last_used_at:rD(Y.created_at),last_used_by:Y.created_by});return X}async listWithLastMessage($,Z){let X=this.db.selectFrom("threads as t").innerJoinLateral((Y)=>Y.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(Y)=>Y.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)X=X.where("t.created_by","=",Z.createdBy);return(await X.execute()).map((Y)=>({thread:this.threadFromDbRow(Y),lastMessage:this.messageFromDbRow({id:Y.lm_id,thread_id:Y.lm_thread_id,metadata:Y.lm_metadata,parts:Y.lm_parts,role:Y.lm_role,created_at:Y.lm_created_at,updated_at:Y.lm_updated_at})}))}async listMessages($,Z,X){if(!await this.get($,Z))return{messages:[],total:0};let Y=X?.sort??"asc",Q=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",Y).orderBy("id",Y),J=this.db.selectFrom("thread_messages").select((N)=>N.fn.count("id").as("count")).where("thread_id","=",$);if(X?.limit)Q=Q.limit(X.limit);if(X?.offset)Q=Q.offset(X.offset);let[W,K]=await Promise.all([Q.execute(),J.executeTakeFirst()]);return{messages:W.map((N)=>this.messageFromDbRow(N)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:Ef`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let X=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=(Y)=>{if(Y==null)return null;let Q=(Y instanceof Date?Y:new Date(Y)).getTime();return Number.isNaN(Q)?null:Q};return{lastProgressAt:G(X.last_progress_at),runStartedAt:G(X.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set(Z===null?{run_fence_token:null,run_acked_seq:null}:{run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:Ef`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let X=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(X==null)return null;return X instanceof Date?X:new Date(X)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,X,G){await this.db.updateTable("threads").set({run_acked_seq:G}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("run_acked_seq","is",null),Y("run_acked_seq","<",G)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(X){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,X)}else Z=$.metadata;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?rD($.run_started_at):null,last_progress_at:$.last_progress_at?rD($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,sandbox_provider_kind:$.sandbox_provider_kind??null,harness_id:$.harness_id??null,metadata:Z,created_at:rD($.created_at),updated_at:rD($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1,link_transport:$.link_transport??null}}messageFromDbRow($){let Z,X;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,G),Z=void 0}try{X=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(G){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,G),X=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:X,role:$.role,created_at:rD($.created_at),updated_at:rD($.updated_at)}}}var sy0=B(()=>{DX();dU();qi1()});import{sql as ey0}from"kysely";function x40($){if($==null)return null;return typeof $==="string"?$:$.toISOString()}function y40($){return`msg_async_stub_${$}`}async function $g0($,Z){await $.deleteFrom("thread_messages").where("id","=",y40(Z)).execute(),await $.deleteFrom("thread_message_parts").where("message_id","=",y40(Z)).execute()}function Nu8($){if($==null)return null;if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return null}}function Zg0($){return{id:$.id,interactionId:$.interaction_id??null,toolCallId:$.tool_call_id,organizationId:$.organization_id,threadId:$.thread_id,messageId:$.message_id??null,provider:$.provider,modelId:$.model_id,query:$.query,status:$.status,attempts:$.attempts??0,lastPolledAt:x40($.last_polled_at),lastError:$.last_error??null,inputTokens:$.input_tokens??null,outputTokens:$.output_tokens??null,citations:Nu8($.citations),resultUri:$.result_uri??null,resultPreview:$.result_preview??null,resultContent:$.result_content??null,createdAt:x40($.created_at)??"",updatedAt:x40($.updated_at)??"",completedAt:x40($.completed_at)}}class Xg0{inner;organizationId;constructor($,Z){this.inner=$;this.organizationId=Z}requireOrg(){if(!this.organizationId)throw Error("OrgScopedAsyncResearchJobStorage: requires an authenticated organization");return this.organizationId}setOrganizationId($){this.organizationId=$}upsertPending($){return this.inner.upsertPending({organizationId:this.requireOrg(),...$})}findByToolCall($){return this.inner.findByToolCall(this.requireOrg(),$)}markPolling($,Z,X){return this.inner.markPolling(this.requireOrg(),$,Z,X)}recordPoll($,Z){return this.inner.recordPoll(this.requireOrg(),$,Z)}markCompleted($,Z){return this.inner.markCompleted(this.requireOrg(),$,Z)}markFailed($,Z){return this.inner.markFailed(this.requireOrg(),$,Z)}markCancelled($,Z){return this.inner.markCancelled(this.requireOrg(),$,Z)}}class id{db;constructor($){this.db=$}async upsertPending($){let Z=new Date().toISOString(),X=await this.db.insertInto("async_research_jobs").values({organization_id:$.organizationId,thread_id:$.threadId,tool_call_id:$.toolCallId,message_id:$.messageId??null,provider:$.provider,model_id:$.modelId,query:$.query,status:"pending",attempts:0,updated_at:Z}).onConflict((Y)=>Y.columns(["organization_id","tool_call_id"]).doNothing()).returningAll().executeTakeFirst();if(X)return Zg0(X);let G=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$.organizationId).where("tool_call_id","=",$.toolCallId).executeTakeFirstOrThrow();return Zg0(G)}async findByToolCall($,Z){let X=await this.db.selectFrom("async_research_jobs").selectAll().where("organization_id","=",$).where("tool_call_id","=",Z).executeTakeFirst();return X?Zg0(X):null}async markPolling($,Z,X,G){let Y=new Date().toISOString();await this.db.transaction().execute(async(Q)=>{if(await Q.updateTable("async_research_jobs").set({status:"polling",interaction_id:X,last_polled_at:Y,updated_at:Y}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),(await Q.selectFrom("threads").select("message_storage_version").where("id","=",G.threadId).where("organization_id","=",$).executeTakeFirst())?.message_storage_version!==2)return;let W=y40(Z);await Q.insertInto("thread_message_parts").values([{id:`${G.threadId}:${W}:0`,seq:0,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"tool_call",payload:JSON.stringify({type:`tool-${G.toolName}`,toolCallId:Z,state:"input-available",input:{query:G.query}}),payload_ref:null,metadata:null,created_at:Y},{id:`${G.threadId}:${W}:finish`,seq:1,org_id:$,thread_id:G.threadId,run_id:G.threadId,message_id:W,role:"assistant",kind:"finish",payload:JSON.stringify({}),payload_ref:null,metadata:null,created_at:Y}]).onConflict((K)=>K.column("id").doNothing()).execute()})}async recordPoll($,Z,X){let G=new Date().toISOString();await this.db.updateTable("async_research_jobs").set({attempts:ey0`attempts + 1`,last_polled_at:G,...X!==void 0?{last_error:X}:{},updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute()}async markCompleted($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"completed",input_tokens:X.inputTokens,output_tokens:X.outputTokens,citations:JSON.stringify(X.citations),result_uri:X.resultUri,result_preview:X.resultPreview,result_content:X.resultContent,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async markFailed($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"failed",last_error:X,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async markCancelled($,Z,X){let G=new Date().toISOString();await this.db.transaction().execute(async(Y)=>{await Y.updateTable("async_research_jobs").set({status:"cancelled",last_error:X??null,completed_at:G,updated_at:G}).where("organization_id","=",$).where("tool_call_id","=",Z).execute(),await $g0(Y,Z)})}async sweepAbandoned($){let Z=new Date(Date.now()-$).toISOString(),X=new Date().toISOString();return await this.db.transaction().execute(async(G)=>{let Y=await G.updateTable("async_research_jobs").set({status:"abandoned",completed_at:X,updated_at:X,last_error:ey0`COALESCE(last_error, '') || ' [abandoned by sweeper]'`}).where("status","in",["pending","polling"]).where(ey0`COALESCE(last_polled_at, created_at) < ${Z}::timestamptz`).returning(["tool_call_id"]).execute();if(Y.length===0)return 0;let Q=Y.map((J)=>y40(J.tool_call_id));return await G.deleteFrom("thread_messages").where("id","in",Q).execute(),await G.deleteFrom("thread_message_parts").where("message_id","in",Q).execute(),Y.length})}}var Gg0=()=>{};function g40(){let $=new Map;function Z(G,Y){let Q=$.get(Y);if(Q)return Q;let J=new P9({name:`outbound-client-${Y}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}},jsonSchemaValidator:s6});J.onclose=()=>{$.delete(Y)};let W=J.connect(G).then(()=>J).catch((K)=>{throw $.delete(Y),K});return $.set(Y,W),W}return Object.assign(Z,{[Symbol.asyncDispose]:async()=>{let G=[];for(let[Y,Q]of $)G.push(Q.then((J)=>J.close()).catch(()=>{}));await Promise.all(G),$.clear()}})}var Yg0=B(()=>{JW();PX()});class Qg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("subsidized_gateway_keys").select("encrypted_key").where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return await this.vault.decrypt(Z.encrypted_key)}async put($,Z){let X=await this.vault.encrypt(Z);await this.db.insertInto("subsidized_gateway_keys").values({organization_id:$,encrypted_key:X}).onConflict((G)=>G.column("organization_id").doUpdateSet({encrypted_key:X})).execute()}}import{sql as Hu8}from"kysely";function ki1($){return $ instanceof Date?$.toISOString():String($)}class Jg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,scope:$.scope,userId:$.user_id,name:$.name,description:$.description,createdBy:$.created_by,createdAt:ki1($.created_at),updatedBy:$.updated_by,updatedAt:ki1($.updated_at)}}assertVisible($,Z){if($.scope==="user"&&$.user_id!==Z)throw new mU($.id)}async create($){let Z=c8("sec"),X=await this.vault.encrypt($.value),G=new Date,Y=await this.db.insertInto("secrets").values({id:Z,organization_id:$.organizationId,scope:$.scope.kind,user_id:$.scope.kind==="user"?$.scope.userId:null,name:$.name,encrypted_value:X,description:$.description??null,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(h40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){let Z=await this.db.selectFrom("secrets").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id","scope","user_id"]).executeTakeFirst();if(!Z)throw new wQ($.id);this.assertVisible(Z,$.callerUserId);let X={updated_by:$.updatedBy,updated_at:new Date};if($.value!==void 0)X.encrypted_value=await this.vault.encrypt($.value);if($.description!==void 0)X.description=$.description;let G=await this.db.updateTable("secrets").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(h40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(["id","scope","user_id"]).executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X),await this.db.deleteFrom("secrets").where("id","=",$).where("organization_id","=",Z).execute()}async list($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).select(h40);if($.scope?.kind==="user")Z=Z.where("scope","=","user").where("user_id","=",$.scope.userId);else if($.scope?.kind==="organization")Z=Z.where("scope","=","organization");else Z=Z.where((G)=>G.or([G("scope","=","organization"),G.and([G("scope","=","user"),G("user_id","=",$.callerUserId)])]));return(await Z.orderBy("created_at","desc").execute()).map((G)=>this.rowToInfo(G))}async findById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).select(h40).executeTakeFirst();if(!G)throw new wQ($);return this.assertVisible(G,X),this.rowToInfo(G)}async resolveById($,Z,X){let G=await this.db.selectFrom("secrets").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!G)throw new wQ($);this.assertVisible(G,X);let Y=await this.vault.decrypt(G.encrypted_value);return{info:this.rowToInfo(G),value:Y}}async resolveByName($){let Z=this.db.selectFrom("secrets").where("organization_id","=",$.organizationId).where("scope","=",$.scope.kind).where(Hu8`lower(name) = lower(${$.name})`).selectAll();if($.scope.kind==="user")Z=Z.where("user_id","=",$.scope.userId);let X=await Z.executeTakeFirst();if(!X)throw new wQ(`${$.scope.kind}:${$.name}`);let G=await this.vault.decrypt(X.encrypted_value);return{info:this.rowToInfo(X),value:G}}}var h40,wQ,mU;var nd=B(()=>{DX();h40=["id","organization_id","scope","user_id","name","description","created_by","created_at","updated_by","updated_at"];wQ=class wQ extends Error{constructor($){super(`Secret ${$} not found`);this.name="SecretNotFoundError"}};mU=class mU extends Error{constructor($){super(`Access denied for secret ${$}`);this.name="SecretAccessDeniedError"}}});import{sql as Fu8}from"kysely";function Si1($){return $ instanceof Date?$.toISOString():String($)}class Wg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}rowToInfo($){return{id:$.id,organizationId:$.organization_id,name:$.name,description:$.description,bucket:$.bucket,region:$.region,endpoint:$.endpoint,forcePathStyle:$.force_path_style,prefix:$.prefix,publicUrlBase:$.public_url_base,credentialType:$.credential_type??"static",refreshUrl:$.refresh_url,siteSlug:$.site_slug,createdBy:$.created_by,createdAt:Si1($.created_at),updatedBy:$.updated_by,updatedAt:Si1($.updated_at)}}async create($){let Z=c8("fcfg"),X=await this.vault.encrypt(JSON.stringify($.credentials)),G=new Date,Y=await this.db.insertInto("org_file_configs").values({id:Z,organization_id:$.organizationId,name:$.name,description:$.description??null,bucket:$.bucket,region:$.region,endpoint:$.endpoint??null,force_path_style:$.forcePathStyle??!1,prefix:$.prefix??null,public_url_base:$.publicUrlBase??null,credential_type:$.credentials.type,refresh_url:$.refreshUrl??null,site_slug:$.siteSlug??null,encrypted_credentials:X,created_by:$.createdBy,created_at:G,updated_by:$.createdBy,updated_at:G}).returning(u40).executeTakeFirstOrThrow();return this.rowToInfo(Y)}async update($){if(!await this.db.selectFrom("org_file_configs").where("id","=",$.id).where("organization_id","=",$.organizationId).select(["id"]).executeTakeFirst())throw new jf($.id);let X={updated_by:$.updatedBy,updated_at:new Date};if($.name!==void 0)X.name=$.name;if($.description!==void 0)X.description=$.description;if($.bucket!==void 0)X.bucket=$.bucket;if($.region!==void 0)X.region=$.region;if($.endpoint!==void 0)X.endpoint=$.endpoint;if($.forcePathStyle!==void 0)X.force_path_style=$.forcePathStyle;if($.prefix!==void 0)X.prefix=$.prefix;if($.publicUrlBase!==void 0)X.public_url_base=$.publicUrlBase;if($.refreshUrl!==void 0)X.refresh_url=$.refreshUrl;if($.siteSlug!==void 0)X.site_slug=$.siteSlug;if($.credentials!==void 0)X.credential_type=$.credentials.type,X.encrypted_credentials=await this.vault.encrypt(JSON.stringify($.credentials));let G=await this.db.updateTable("org_file_configs").set(X).where("id","=",$.id).where("organization_id","=",$.organizationId).returning(u40).executeTakeFirstOrThrow();return this.rowToInfo(G)}async delete($,Z){if(!await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(["id"]).executeTakeFirst())throw new jf($);await this.db.deleteFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).execute()}async list($){return(await this.db.selectFrom("org_file_configs").where("organization_id","=",$).select(u40).orderBy("created_at","desc").execute()).map((X)=>this.rowToInfo(X))}async findById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).select(u40).executeTakeFirst();if(!X)throw new jf($);return this.rowToInfo(X)}async resolveById($,Z){let X=await this.db.selectFrom("org_file_configs").where("id","=",$).where("organization_id","=",Z).selectAll().executeTakeFirst();if(!X)throw new jf($);return{info:this.rowToInfo(X),credentials:await this.decodeCredentials(X)}}async resolveByName($){let Z=await this.db.selectFrom("org_file_configs").where("organization_id","=",$.organizationId).where(Fu8`lower(name) = lower(${$.name})`).selectAll().executeTakeFirst();if(!Z)throw new jf($.name);return{info:this.rowToInfo(Z),credentials:await this.decodeCredentials(Z)}}async decodeCredentials($){if($.credential_type==="managed")return{type:"managed"};let Z=await this.vault.decrypt($.encrypted_credentials),X=JSON.parse(Z);if(($.credential_type??"static")==="sts-session")return{type:"sts-session",apiKey:String(X.apiKey)};return{type:"static",accessKeyId:String(X.accessKeyId),secretAccessKey:String(X.secretAccessKey)}}}var u40,jf;var Vi1=B(()=>{DX();u40=["id","organization_id","name","description","bucket","region","endpoint","force_path_style","prefix","public_url_base","credential_type","refresh_url","site_slug","created_by","created_at","updated_by","updated_at"];jf=class jf extends Error{constructor($){super(`File config ${$} not found`);this.name="OrgFileConfigNotFoundError"}}});function c40($){return Kg0.test($)}var Kg0;var l40=B(()=>{Kg0=/^[a-z0-9][a-z0-9-]{0,59}$/});function Ci1($){return $ instanceof Date?$.toISOString():String($)}function Ng0($){return{slug:$.slug,organizationId:$.organization_id,source:$.source,createdBy:$.created_by,createdAt:Ci1($.created_at),updatedBy:$.updated_by,updatedAt:Ci1($.updated_at)}}class Fg0{db;constructor($){this.db=$}async claimSite($){if(!c40($.slug))throw Error(`Invalid site slug "${$.slug}" \u2014 must be 1-60 chars of lowercase letters, digits, or hyphens, starting with a letter or digit`);let Z=new Date,X=await this.db.insertInto("org_sites").values({slug:$.slug,organization_id:$.organizationId,source:$.source??"deco-import",created_by:$.by,created_at:Z,updated_by:$.by,updated_at:Z}).onConflict((Q)=>Q.column("slug").doNothing()).returningAll().executeTakeFirst();if(X)return Ng0(X);let G=await this.getBySlug($.slug);if(!G)throw new Hg0($.slug,"unknown");if(G.organizationId!==$.organizationId)throw new Hg0($.slug,G.organizationId);let Y=await this.db.updateTable("org_sites").set({source:$.source??G.source,updated_by:$.by,updated_at:Z}).where("slug","=",$.slug).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Ng0(Y)}async getBySlug($){let Z=await this.db.selectFrom("org_sites").selectAll().where("slug","=",$).executeTakeFirst();return Z?Ng0(Z):null}async isOwnedBy($,Z){return!!await this.db.selectFrom("org_sites").select("slug").where("slug","=",$).where("organization_id","=",Z).executeTakeFirst()}}var Hg0;var _i1=B(()=>{l40();Hg0=class Hg0 extends Error{slug;ownerOrganizationId;constructor($,Z){super(`Site slug "${$}" is already owned by another organization`);this.slug=$;this.ownerOrganizationId=Z;this.name="OrgSiteConflictError"}}});function vN($){return $.createdBy==="system"}function Ou8($){return $?.status==="active"||$?.status==="past_due"}function vi1($,Z){if(Ou8($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function bi1(){let $=d0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}async function fi1($,Z,X=bi1()){if(!X.enforced||!vN(Z))return;let G=await $.storage.organizationBilling.taskClaim(Z.id);if(G&&G.runCount>=X.maxRunsPerTask)throw new OQ("runs_exhausted");if(G&&G.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),Q=vi1(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,Q.periodKey)>=Q.limit)throw new OQ(Q.exhaustedReason)}async function xi1($,Z,X=bi1()){if(!X.enforced||!vN(Z))return;let G=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=vi1(G,X),Q=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(Q==="exhausted")throw new OQ(Y.exhaustedReason);if(Q==="runs_exhausted")throw new OQ("runs_exhausted")}async function yi1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function d40($,Z,X){await $.releaseTaskClaim(Z,X).catch((G)=>console.error("[task-quota] refund failed (stays charged)",G))}var Uu8="[SUBSCRIPTION_REQUIRED]",wu8,OQ;var iU=B(()=>{V$();wu8={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};OQ=class OQ extends Error{reason;constructor($){super(`${Uu8} ${wu8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});function gi1($,Z){return $?.startsWith(`${pd[Z]}:`)??!1}function Ug0($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Bu8($,Z){let X=Ug0($),G=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let Q=Y.data??{};if(Q.reviewer!=="qa"&&Q.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&Q.verified!==!0)continue;G.set(Q.reviewer,"approved")}else G.set(Q.reviewer,"changes_requested")}return G}function Pf($,Z,X){if(Z.length===0)return!1;let G=Bu8($,X);return Z.every((Y)=>G.get(Y)==="approved")}var e6="super-agent",nU,pd,pU,hi1="task-board.item.updated",ui1="task-board.item.deleted";var BQ=B(()=>{nU=["qa","code_review"],pd={qa:"QA Agent",code_review:"Code Reviewer"},pU={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function wg0($){let Z=(X)=>X instanceof Date?X.toISOString():X;return{id:$.id,taskBoardItemId:$.task_board_item_id,parentId:$.parent_id,authorId:$.author_id,body:$.body,resolved:$.resolved,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}function Du8($){if($&&typeof $==="object"&&!Array.isArray($)){let Z=$.text;if(typeof Z==="string"&&Z.trim())return Z.trim()}return null}function Bg0($){if($.status!=="in_progress")return!1;let Z=$.threads.filter((X)=>X.hasMessages);if(Z.length===0)return!1;return Z.every((X)=>X.status!==null&&Og0.has(X.status))}function Lu8($){let Z=typeof $==="string"?(()=>{try{return JSON.parse($)}catch{return null}})():$;if(!Z||typeof Z!=="object")return!1;let X=Z.githubRepo?.url;return typeof X==="string"&&X.length>0}class tU{db;constructor($){this.db=$}inTransaction($){return this.db.isTransaction?$(this.db):this.db.transaction().execute($)}async list($){let X=(await this.db.selectFrom("task_board_items").selectAll().where("organization_id","=",$).where("dismissed_at","is",null).orderBy("sort_order","asc").execute()).map((G)=>this.itemFromDbRow(G));return await this.attachRefs(X,$),X}async getById($,Z){let X=await this.db.selectFrom("task_board_items").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!X)return null;let G=this.itemFromDbRow(X);return await this.attachRefs([G],Z),G}async create($){let Z=c8("board"),X=new Date().toISOString(),G=$.status??"triage",{minOrder:Y}=await this.db.selectFrom("task_board_items").select((J)=>J.fn.min("sort_order").as("minOrder")).where("organization_id","=",$.organizationId).where("status","=",G).executeTakeFirstOrThrow(),Q=await this.db.insertInto("task_board_items").values({id:Z,organization_id:$.organizationId,title:$.title,description:$.description??null,status:G,priority:$.priority??"medium",assignee_id:$.assigneeId??null,assigned_by:$.assignedBy??null,due_date:$.dueDate??null,external_key:$.externalKey??null,sort_order:(Y??0)-1,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow();return this.itemFromDbRow(Q)}async update($,Z,X,G){let Y=await this.db.updateTable("task_board_items").set({...X.title!==void 0?{title:X.title}:{},...X.description!==void 0?{description:X.description}:{},...X.status!==void 0?{status:X.status}:{},...X.priority!==void 0?{priority:X.priority}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},updated_by:G,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),Q=this.itemFromDbRow(Y);return await this.attachRefs([Q],Z),Q}async delete($,Z,X){return this.inTransaction(async(G)=>{let Y=await G.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Y)return!1;if(vN({createdBy:Y.created_by}))return await G.updateTable("task_board_items").set({dismissed_at:new Date().toISOString(),updated_by:X}).where("id","=",$).where("organization_id","=",Z).where("dismissed_at","is",null).execute(),!0;return await G.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await G.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await G.deleteFrom("task_board_items").where("id","=",$).where("organization_id","=",Z).execute(),!0})}async dismissedFindingKeys($,Z){if(Z.length===0)return new Set;let X=await this.db.selectFrom("task_board_items").select(["external_key"]).where("organization_id","=",$).where("external_key","in",Z).where("dismissed_at","is not",null).execute();return new Set(X.flatMap((G)=>G.external_key??[]))}async listDismissedFindings($){return(await this.db.selectFrom("task_board_items").select(["external_key","updated_by","dismissed_at"]).where("organization_id","=",$).where("dismissed_at","is not",null).orderBy("dismissed_at","desc").execute()).flatMap((X)=>X.external_key&&X.dismissed_at?[{externalKey:X.external_key,dismissedBy:X.updated_by,dismissedAt:X.dismissed_at instanceof Date?X.dismissed_at.toISOString():X.dismissed_at}]:[])}async restoreDismissedFindings($,Z){if(Z&&Z.length===0)return 0;let X=this.db.updateTable("task_board_items").set({dismissed_at:null}).where("organization_id","=",$).where("dismissed_at","is not",null);if(Z)X=X.where("external_key","in",Z);let G=await X.executeTakeFirst();return Number(G.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(G)=>{if(await G.deleteFrom("task_board_item_tags").where("task_board_item_id","=",$).$if(Z.length>0,(Y)=>Y.where("id","not in",Z)).execute(),Z.length>0)await G.insertInto("task_board_item_tags").values(Z.map((Y)=>({task_board_item_id:$,id:Y,created_by:X,created_at:new Date().toISOString()}))).onConflict((Y)=>Y.doNothing()).execute()})}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((G)=>G.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async linkedTaskIds($,Z){return(await this.db.selectFrom("task_board_item_threads").select("task_board_item_id as taskId").where("thread_id","=",$).where("organization_id","=",Z).execute()).map((G)=>G.taskId)}async linkPr($){await this.db.insertInto("task_board_item_prs").values({task_board_item_id:$.taskBoardItemId,organization_id:$.organizationId,url:$.url,pr_number:$.prNumber,repo_owner:$.repoOwner,repo_name:$.repoName,connection_id:$.connectionId??null}).onConflict((Z)=>Z.columns(["task_board_item_id","url"]).doNothing()).execute()}async listPrs($,Z){return(await this.db.selectFrom("task_board_item_prs").select(["url","pr_number as prNumber","repo_owner as repoOwner","repo_name as repoName","connection_id as connectionId","created_at as createdAt"]).where("task_board_item_id","=",$).where("organization_id","=",Z).orderBy("created_at","desc").execute()).map((G)=>({url:G.url,number:G.prNumber,repoOwner:G.repoOwner,repoName:G.repoName,connectionId:G.connectionId??null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||!Bg0(Y))continue;X.push(await this.update(G,Z,{status:"in_review"},Y.updatedBy)),await this.recordActivity({taskBoardItemId:G,action:"status_changed",actorId:null,data:{from:Y.status,to:"in_review"}}).catch((Q)=>console.error("[task-board] in_review activity write failed",Q))}return X}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let G of await this.linkedTaskIds($,Z)){let Y=await this.getById(G,Z);if(!Y||Y.status!=="in_review")continue;X.push(await this.update(G,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}claimReviewChangesBounce($,Z,X){return this.claimInReviewSuperAgentSlot($,Z,X)}async claimInReviewSuperAgentSlot($,Z,X){let G=await this.db.updateTable("task_board_items").set({status:"in_progress",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_review").where("assignee_id","=",e6).returningAll().executeTakeFirst();if(!G)return null;let Y=this.itemFromDbRow(G);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction(async(X)=>{await this.attachThreads(X,$,Z),await this.attachTags(X,$)})}async attachThreads($,Z,X){let G=Z.map((J)=>J.id),Y=await $.selectFrom("task_board_item_threads as link").innerJoin("threads as t","t.id","link.thread_id").leftJoinLateral((J)=>J.selectFrom("thread_message_parts as p").select("p.payload as payload").whereRef("p.thread_id","=","link.thread_id").where("p.role","=","assistant").where("p.kind","=","text").orderBy("p.created_at","desc").limit(1).as("lastmsg"),(J)=>J.onTrue()).select((J)=>["link.task_board_item_id as taskId","link.thread_id as threadId","link.created_at as createdAt","t.status as status","t.title as title","t.virtual_mcp_id as virtualMcpId","t.metadata as metadata","lastmsg.payload as lastMessagePayload",J.or([J.exists(J.selectFrom("thread_message_parts as mp").select("mp.id").whereRef("mp.thread_id","=","link.thread_id")),J.exists(J.selectFrom("thread_messages as tm").select("tm.id").whereRef("tm.thread_id","=","link.thread_id"))]).as("hasMessages")]).where("link.organization_id","=",X).where("link.task_board_item_id","in",G).orderBy("link.created_at","desc").execute(),Q=new Map;for(let J of Y){let W={threadId:J.threadId,virtualMcpId:J.virtualMcpId??null,status:J.status??null,title:J.title??null,lastMessage:Du8(J.lastMessagePayload),hasPreview:Lu8(J.metadata),hasMessages:!!J.hasMessages,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt},K=Q.get(J.taskId);if(K)K.push(W);else Q.set(J.taskId,[W])}for(let J of Z)J.threads=Q.get(J.id)??[]}async attachTags($,Z){let X=Z.map((Q)=>Q.id),G=await $.selectFrom("task_board_item_tags as link").innerJoin("organization_tags as tag","tag.id","link.id").select(["link.task_board_item_id as taskId","link.created_by as createdBy","link.created_at as createdAt","tag.id as id","tag.name as name","tag.color as color"]).where("link.task_board_item_id","in",X).orderBy("tag.name","asc").execute(),Y=new Map;for(let Q of G){let J={id:Q.id,name:Q.name,color:Q.color??null,createdBy:Q.createdBy,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt},W=Y.get(Q.taskId);if(W)W.push(J);else Y.set(Q.taskId,[J])}for(let Q of Z)Q.tags=Y.get(Q.id)??[]}async recordActivity($){await this.db.insertInto("task_board_activity").values({id:c8("act"),task_board_item_id:$.taskBoardItemId,action:$.action,actor_id:$.actorId,data:$.data?JSON.stringify($.data):null,occurred_at:new Date().toISOString()}).execute()}async claimReviewer($,Z,X){let G=`rtok_${crypto.randomUUID()}`,Y=await this.db.insertInto("task_board_review_claims").values({task_board_item_id:$,reviewer:Z,cycle_at:X,token:G}).onConflict((J)=>J.columns(["task_board_item_id","reviewer","cycle_at"]).doNothing()).returning("token").executeTakeFirst();if(Y)return{claimed:!0,token:Y.token};return{claimed:!1,token:(await this.db.selectFrom("task_board_review_claims").select("token").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).executeTakeFirst())?.token??G}}async releaseReviewerClaim($,Z,X){await this.db.deleteFrom("task_board_review_claims").where("task_board_item_id","=",$).where("reviewer","=",Z).where("cycle_at","=",X).execute()}async resolveReviewClaimByToken($,Z){let X=await this.db.selectFrom("task_board_review_claims").select(["reviewer","cycle_at"]).where("task_board_item_id","=",$).where("token","=",Z).executeTakeFirst();return X?{reviewer:X.reviewer,cycleAt:X.cycle_at}:null}async recordActivities($){if($.length===0)return;let Z=new Date().toISOString();await this.db.insertInto("task_board_activity").values($.map((X)=>({id:c8("act"),task_board_item_id:X.taskBoardItemId,action:X.action,actor_id:X.actorId,data:X.data?JSON.stringify(X.data):null,occurred_at:Z}))).execute()}async listActivity($,Z){return(await this.db.selectFrom("task_board_activity as a").innerJoin("task_board_items as item","item.id","a.task_board_item_id").selectAll("a").where("item.organization_id","=",Z).where("a.task_board_item_id","=",$).orderBy("a.occurred_at","asc").execute()).map((G)=>({id:G.id,taskBoardItemId:G.task_board_item_id,action:G.action,actorId:G.actor_id,data:typeof G.data==="string"?JSON.parse(G.data):G.data??{},occurredAt:G.occurred_at instanceof Date?G.occurred_at.toISOString():G.occurred_at}))}async listComments($,Z){return(await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").selectAll("c").where("item.organization_id","=",Z).where("c.task_board_item_id","=",$).orderBy("c.created_at","asc").execute()).map((G)=>wg0(G))}async createComment($){if(!await this.db.selectFrom("task_board_items").select("id").where("id","=",$.taskBoardItemId).where("organization_id","=",$.organizationId).executeTakeFirst())return null;let X=null;if($.parentId){let Y=await this.db.selectFrom("task_board_comments").select(["id","parent_id"]).where("id","=",$.parentId).where("task_board_item_id","=",$.taskBoardItemId).executeTakeFirst();if(!Y)return null;X=Y.parent_id??Y.id}let G=await this.db.insertInto("task_board_comments").values({id:c8("cmt"),task_board_item_id:$.taskBoardItemId,parent_id:X,author_id:$.authorId,body:$.body}).returningAll().executeTakeFirstOrThrow();return wg0(G)}async updateComment($){let Z=await this.commentInOrg($.id,$.organizationId);if(!Z)return null;if($.body!==void 0&&Z.authorId!==$.callerId)return null;if($.resolved!==void 0&&Z.parentId!==null)return null;let X=await this.db.updateTable("task_board_comments").set({...$.body===void 0?{}:{body:$.body},...$.resolved===void 0?{}:{resolved:$.resolved},updated_at:new Date().toISOString()}).where("id","=",$.id).returningAll().executeTakeFirst();return X?wg0(X):null}async deleteComment($,Z,X){let G=await this.commentInOrg($,Z);if(!G)return!1;if(G.authorId!==X&&G.authorId!==e6)return!1;return await this.db.deleteFrom("task_board_comments").where("id","=",$).execute(),!0}async commentInOrg($,Z){let X=await this.db.selectFrom("task_board_comments as c").innerJoin("task_board_items as item","item.id","c.task_board_item_id").select(["c.id","c.author_id","c.parent_id"]).where("c.id","=",$).where("item.organization_id","=",Z).executeTakeFirst();return X?{authorId:X.author_id,parentId:X.parent_id}:null}itemFromDbRow($){return{id:$.id,organizationId:$.organization_id,title:$.title,description:$.description,status:$.status,priority:$.priority,assigneeId:$.assignee_id,assignedBy:$.assigned_by,dueDate:$.due_date instanceof Date?$.due_date.toISOString():$.due_date,sortOrder:$.sort_order,threads:[],tags:[],createdBy:$.created_by,createdAt:$.created_at instanceof Date?$.created_at.toISOString():$.created_at,updatedBy:$.updated_by,updatedAt:$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at}}}var Og0;var Af=B(()=>{iU();DX();BQ();Og0=new Set(["completed","failed","expired"])});class Dg0{db;constructor($){this.db=$}async create($,Z,X){let G=crypto.randomUUID(),Y=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:Z,user_id:X,code_verifier:$,expires_at:Y,created_at:new Date}).execute(),G}async consume($,Z,X){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",$).where("organization_id","=",Z).where("user_id","=",X).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}class Lg0{db;vault;constructor($,Z){this.db=$;this.vault=Z}async upsert($){let Z=await this.vault.encrypt($.accessToken),X=$.expiresAt??null,G=new Date;return await this.db.insertInto("claude_subscriptions").values({user_id:$.userId,encrypted_access_token:Z,expires_at:X,created_at:G}).onConflict((Y)=>Y.column("user_id").doUpdateSet({encrypted_access_token:Z,expires_at:X,created_at:G})).execute(),{linkedAt:G.toISOString(),expiresAt:X?.toISOString()??null}}async find($){let Z=await this.db.selectFrom("claude_subscriptions").select(["created_at","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;return{linkedAt:new Date(Z.created_at).toISOString(),expiresAt:Z.expires_at?new Date(Z.expires_at).toISOString():null}}async findLiveToken($){let Z=await this.db.selectFrom("claude_subscriptions").select(["encrypted_access_token","expires_at"]).where("user_id","=",$).executeTakeFirst();if(!Z)return null;if(Z.expires_at&&new Date(Z.expires_at).getTime()<=Date.now())return null;return this.vault.decrypt(Z.encrypted_access_token)}async delete($){await this.db.deleteFrom("claude_subscriptions").where("user_id","=",$).execute()}}function jW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function m40($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(m40);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||m40(X)));return!1}function Eg0($){return Array.isArray($)&&$.every(m40)}function td($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||m40(X)))}var Bn1="vercel.ai.error",Eu8,ci1,li1,Y1,Dn1="AI_APICallError",Ln1,zu8,di1,mi1,a8,En1="AI_EmptyResponseBodyError",zn1,ju8,ii1,ni1,i40,jn1="AI_InvalidArgumentError",Pn1,Pu8,pi1,ti1,oU,An1="AI_InvalidPromptError",Tn1,Au8,oi1,ri1,DQ,Rn1="AI_InvalidResponseDataError",In1,Tu8,ai1,si1,Tf,qn1="AI_JSONParseError",Mn1,Ru8,ei1,$n1,bN,kn1="AI_LoadAPIKeyError",Sn1,Iu8,Zn1,Xn1,aD,Vn1="AI_LoadSettingError",Cn1,qu8,Gn1,Yn1,_n1,vn1="AI_NoContentGeneratedError",bn1,Mu8,Qn1,Jn1,fn1,xn1="AI_NoSuchModelError",yn1,ku8,Wn1,Kn1,R5,gn1="AI_TooManyEmbeddingValuesForCallError",hn1,Su8,Nn1,Hn1,Rf,un1="AI_TypeValidationError",cn1,Vu8,Fn1,Un1,$5,ln1="AI_UnsupportedFunctionalityError",dn1,Cu8,wn1,On1,T4;var o1=B(()=>{Eu8=Symbol.for(Bn1),Y1=class $ extends(li1=Error,ci1=Eu8,li1){constructor({name:Z,message:X,cause:G}){super(X);this[ci1]=!0,this.name=Z,this.cause=G}static isInstance(Z){return $.hasMarker(Z,Bn1)}static hasMarker(Z,X){let G=Symbol.for(X);return Z!=null&&typeof Z==="object"&&G in Z&&typeof Z[G]==="boolean"&&Z[G]===!0}},Ln1=`vercel.ai.error.${Dn1}`,zu8=Symbol.for(Ln1),a8=class extends(mi1=Y1,di1=zu8,mi1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:G,responseHeaders:Y,responseBody:Q,cause:J,isRetryable:W=G!=null&&(G===408||G===409||G===429||G>=500),data:K}){super({name:Dn1,message:$,cause:J});this[di1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=G,this.responseHeaders=Y,this.responseBody=Q,this.isRetryable=W,this.data=K}static isInstance($){return Y1.hasMarker($,Ln1)}},zn1=`vercel.ai.error.${En1}`,ju8=Symbol.for(zn1),i40=class extends(ni1=Y1,ii1=ju8,ni1){constructor({message:$="Empty response body"}={}){super({name:En1,message:$});this[ii1]=!0}static isInstance($){return Y1.hasMarker($,zn1)}};Pn1=`vercel.ai.error.${jn1}`,Pu8=Symbol.for(Pn1),oU=class extends(ti1=Y1,pi1=Pu8,ti1){constructor({message:$,cause:Z,argument:X}){super({name:jn1,message:$,cause:Z});this[pi1]=!0,this.argument=X}static isInstance($){return Y1.hasMarker($,Pn1)}},Tn1=`vercel.ai.error.${An1}`,Au8=Symbol.for(Tn1),DQ=class extends(ri1=Y1,oi1=Au8,ri1){constructor({prompt:$,message:Z,cause:X}){super({name:An1,message:`Invalid prompt: ${Z}`,cause:X});this[oi1]=!0,this.prompt=$}static isInstance($){return Y1.hasMarker($,Tn1)}},In1=`vercel.ai.error.${Rn1}`,Tu8=Symbol.for(In1),Tf=class extends(si1=Y1,ai1=Tu8,si1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Rn1,message:Z});this[ai1]=!0,this.data=$}static isInstance($){return Y1.hasMarker($,In1)}},Mn1=`vercel.ai.error.${qn1}`,Ru8=Symbol.for(Mn1),bN=class extends($n1=Y1,ei1=Ru8,$n1){constructor({text:$,cause:Z}){super({name:qn1,message:`JSON parsing failed: Text: ${$}.
|
|
1041
1041
|
Error message: ${jW(Z)}`,cause:Z});this[ei1]=!0,this.text=$}static isInstance($){return Y1.hasMarker($,Mn1)}},Sn1=`vercel.ai.error.${kn1}`,Iu8=Symbol.for(Sn1),aD=class extends(Xn1=Y1,Zn1=Iu8,Xn1){constructor({message:$}){super({name:kn1,message:$});this[Zn1]=!0}static isInstance($){return Y1.hasMarker($,Sn1)}},Cn1=`vercel.ai.error.${Vn1}`,qu8=Symbol.for(Cn1),_n1=class extends(Yn1=Y1,Gn1=qu8,Yn1){constructor({message:$}){super({name:Vn1,message:$});this[Gn1]=!0}static isInstance($){return Y1.hasMarker($,Cn1)}},bn1=`vercel.ai.error.${vn1}`,Mu8=Symbol.for(bn1),fn1=class extends(Jn1=Y1,Qn1=Mu8,Jn1){constructor({message:$="No content generated."}={}){super({name:vn1,message:$});this[Qn1]=!0}static isInstance($){return Y1.hasMarker($,bn1)}},yn1=`vercel.ai.error.${xn1}`,ku8=Symbol.for(yn1),R5=class extends(Kn1=Y1,Wn1=ku8,Kn1){constructor({errorName:$=xn1,modelId:Z,modelType:X,message:G=`No such ${X}: ${Z}`}){super({name:$,message:G});this[Wn1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return Y1.hasMarker($,yn1)}},hn1=`vercel.ai.error.${gn1}`,Su8=Symbol.for(hn1),Rf=class extends(Hn1=Y1,Nn1=Su8,Hn1){constructor($){super({name:gn1,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[Nn1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return Y1.hasMarker($,hn1)}},cn1=`vercel.ai.error.${un1}`,Vu8=Symbol.for(cn1),$5=class $ extends(Un1=Y1,Fn1=Vu8,Un1){constructor({value:Z,cause:X,context:G}){let Y="Type validation failed";if(G==null?void 0:G.field)Y+=` for ${G.field}`;if((G==null?void 0:G.entityName)||(G==null?void 0:G.entityId)){Y+=" (";let Q=[];if(G.entityName)Q.push(G.entityName);if(G.entityId)Q.push(`id: "${G.entityId}"`);Y+=Q.join(", "),Y+=")"}super({name:un1,message:`${Y}: Value: ${JSON.stringify(Z)}.
|
|
1042
1042
|
Error message: ${jW(X)}`,cause:X});this[Fn1]=!0,this.value=Z,this.context=G}static isInstance(Z){return Y1.hasMarker(Z,cn1)}static wrap({value:Z,cause:X,context:G}){var Y,Q,J;if($.isInstance(X)&&X.value===Z&&((Y=X.context)==null?void 0:Y.field)===(G==null?void 0:G.field)&&((Q=X.context)==null?void 0:Q.entityName)===(G==null?void 0:G.entityName)&&((J=X.context)==null?void 0:J.entityId)===(G==null?void 0:G.entityId))return X;return new $({value:Z,cause:X,context:G})}},dn1=`vercel.ai.error.${ln1}`,Cu8=Symbol.for(dn1),T4=class extends(On1=Y1,wn1=Cu8,On1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:ln1,message:Z});this[wn1]=!0,this.functionality=$}static isInstance($){return Y1.hasMarker($,dn1)}}});import*as o40 from"zod/v4";import{ZodFirstPartyTypeKind as J4}from"zod/v3";import{ZodFirstPartyTypeKind as ou8}from"zod/v3";import{ZodFirstPartyTypeKind as n40}from"zod/v3";function m$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function p40({tools:$=[],providerToolNames:Z,resolveProviderToolName:X}){var G;let Y={},Q={};for(let J of $)if(J.type==="provider"){let W=(G=X==null?void 0:X(J))!=null?G:(J.id in Z)?Z[J.id]:void 0;if(W==null)continue;Y[J.name]=W,Q[W]=J.name}return{toProviderToolName:(J)=>{var W;return(W=Y[J])!=null?W:J},toCustomToolName:(J)=>{var W;return(W=Q[J])!=null?W:J}}}async function WG($,Z){if($==null)return Promise.resolve();let X=Z==null?void 0:Z.abortSignal;return new Promise((G,Y)=>{if(X==null?void 0:X.aborted){Y(mn1());return}let Q=setTimeout(()=>{J(),G()},$),J=()=>{clearTimeout(Q),X==null||X.removeEventListener("abort",W)},W=()=>{J(),Y(mn1())};X==null||X.addEventListener("abort",W)})}function mn1(){return new DOMException("Delay was aborted","AbortError")}function If($){return Object.fromEntries([...$.headers])}function Q9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=vu8(Z);return Uint8Array.from(X,(G)=>G.codePointAt(0))}function NG($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return _u8(Z)}function n9($){return $ instanceof Uint8Array?NG($):$}function rn1($,Z={}){let{useArrayBrackets:X=!0}=Z,G=new FormData;for(let[Y,Q]of Object.entries($)){if(Q==null)continue;if(Array.isArray(Q)){if(Q.length===1){G.append(Y,Q[0]);continue}let J=X?`${Y}[]`:Y;for(let W of Q)G.append(J,W);continue}G.append(Y,Q)}return G}async function od($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function fu8($=globalThis){return $.window!=null}function xu8($){let Z;try{Z=new URL($)}catch(G){throw new i9({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new i9({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new i9({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new i9({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let G=X.slice(1,-1);if(gu8(G))throw new i9({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(en1(X)){if($p1(X))throw new i9({url:$,message:`URL with IP address ${X} is not allowed`});return}}function en1($){let Z=$.split(".");if(Z.length!==4)return!1;return Z.every((X)=>{let G=Number(X);return Number.isInteger(G)&&G>=0&&G<=255&&String(G)===X})}function $p1($){let Z=$.split(".").map(Number),[X,G,Y]=Z;if(X===0)return!0;if(X===10)return!0;if(X===100&&G>=64&&G<=127)return!0;if(X===127)return!0;if(X===169&&G===254)return!0;if(X===172&&G>=16&&G<=31)return!0;if(X===192&&G===0&&Y===0)return!0;if(X===192&&G===168)return!0;if(X===198&&(G===18||G===19))return!0;if(X>=240)return!0;return!1}function yu8($){let Z=$.toLowerCase(),X=Z.indexOf("%");if(X!==-1)Z=Z.slice(0,X);let G=Z.split("::");if(G.length>2)return null;let Y=(J)=>{if(J==="")return[];let W=[],K=J.split(":");for(let N=0;N<K.length;N++){let H=K[N];if(H.includes(".")){if(N!==K.length-1||!en1(H))return null;let[F,U,w,O]=H.split(".").map(Number);W.push(F<<8|U,w<<8|O);continue}if(!/^[0-9a-f]{1,4}$/.test(H))return null;W.push(parseInt(H,16))}return W},Q=Y(G[0]);if(Q===null)return null;if(G.length===2){let J=Y(G[1]);if(J===null)return null;let W=8-Q.length-J.length;if(W<0)return null;return[...Q,...Array(W).fill(0),...J]}return Q.length===8?Q:null}function gu8($){let Z=yu8($);if(Z===null)return!0;let X=(Y)=>Z.slice(0,Y).every((Q)=>Q===0);if(X(7)&&(Z[7]===0||Z[7]===1))return!0;if((Z[0]&65024)===64512)return!0;if((Z[0]&65472)===65152)return!0;if((Z[0]&65472)===65216)return!0;if((Z[0]&65280)===65280)return!0;if(X(6)||X(5)&&Z[5]===65535||X(4)&&Z[4]===65535&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===0&&Z[3]===0&&Z[4]===0&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===1){let Y=Z[6]>>8&255,Q=Z[6]&255,J=Z[7]>>8&255,W=Z[7]&255;return $p1(`${Y}.${Q}.${J}.${W}`)}return!1}async function Tg0({url:$,headers:Z,abortSignal:X,maxRedirects:G=hu8}){let Y={signal:X};if(Z!==void 0)Y.headers=Z;let Q=$;for(let J=0;J<=G;J++){xu8(Q);let W=await fetch(Q,{...Y,redirect:"manual"});if(W.type==="opaqueredirect"){if(!fu8())throw new i9({url:$,message:`Redirect from ${Q} could not be validated and was blocked`});return await fetch(Q,{...Y,redirect:"follow"})}let K=W.headers.get("location");if(W.status>=300&&W.status<400&&K){await od(W),Q=new URL(K,Q).toString();continue}return W}throw new i9({url:$,message:`Too many redirects (max ${G})`})}async function Rg0({response:$,url:Z,maxBytes:X=t40}){let G=$.headers.get("content-length");if(G!=null){let H=parseInt(G,10);if(!isNaN(H)&&H>X)throw await od($),new i9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${H}).`})}let Y=$.body;if(Y==null)return new Uint8Array(0);let Q=Y.getReader(),J=[],W=0;try{while(!0){let{done:H,value:F}=await Q.read();if(H)break;if(W+=F.length,W>X)throw new i9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(F)}}finally{try{await Q.cancel()}finally{Q.releaseLock()}}let K=new Uint8Array(W),N=0;for(let H of J)K.set(H,N),N+=H.length;return K}async function Ig0($,Z){var X,G;try{let Y=await Tg0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Y.ok)throw await od(Y),new i9({url:$,statusCode:Y.status,statusText:Y.statusText});let Q=await Rg0({response:Y,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:t40}),J=(G=Y.headers.get("content-type"))!=null?G:void 0;return new Blob([Q],J?{type:J}:void 0)}catch(Y){if(i9.isInstance(Y))throw Y;throw new i9({url:$,cause:Y})}}function qf($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function JG($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function lu8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&cu8.includes(Z))return!0;return!1}function Zp1({error:$,url:Z,requestBodyValues:X}){if(JG($))return $;if($ instanceof TypeError&&uu8.includes($.message.toLowerCase())){let G=$.cause;if(G!=null)return new a8({message:`Cannot connect to API: ${G.message}`,cause:G,url:Z,requestBodyValues:X,isRetryable:!0})}if(lu8($))return new a8({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function rU($=globalThis){var Z,X,G;if($.window)return"runtime/browser";if((Z=$.navigator)==null?void 0:Z.userAgent)return`runtime/${$.navigator.userAgent.toLowerCase()}`;if((G=(X=$.process)==null?void 0:X.versions)==null?void 0:G.node)return`runtime/node.js/${$.process.version.substring(0)}`;if($.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function aU($){if($==null)return{};let Z={};if($ instanceof Headers)$.forEach((X,G)=>{Z[G.toLowerCase()]=X});else{if(!Array.isArray($))$=Object.entries($);for(let[X,G]of $)if(G!=null)Z[X.toLowerCase()]=G}return Z}function u4($,...Z){let X=new Headers(aU($)),G=X.get("user-agent")||"";return X.set("user-agent",[G,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function eD($){return $!=null}function Gp1($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function Yp1({mediaType:$,url:Z,supportedUrls:X}){return Z=Z.toLowerCase(),$=$.toLowerCase(),Object.entries(X).map(([G,Y])=>{let Q=G.toLowerCase();return Q==="*"||Q==="*/*"?{mediaTypePrefix:"",regexes:Y}:{mediaTypePrefix:Q.replace(/\*/,""),regexes:Y}}).filter(({mediaTypePrefix:G})=>$.startsWith(G)).flatMap(({regexes:G})=>G).some((G)=>G.test(Z))}function Mf({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:G}){if(typeof $==="string")return $;if($!=null)throw new aD({message:`${G} API key must be a string.`});if(typeof process>"u")throw new aD({message:`${G} API key is missing. Pass it using the '${X}' parameter. Environment variables are not supported in this environment.`});if($=process.env[Z],$==null)throw new aD({message:`${G} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new aD({message:`${G} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function PW({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function Qp1($){var Z;let[X,G=""]=$.toLowerCase().split("/");return(Z={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[G])!=null?Z:G}function pn1($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(mu8.test($)===!1&&iu8.test($)===!1)return Z;return nu8(Z)}function nu8($){let Z=[$];while(Z.length){let X=Z;Z=[];for(let G of X){if(Object.prototype.hasOwnProperty.call(G,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(G,"constructor")&&G.constructor!==null&&typeof G.constructor==="object"&&Object.prototype.hasOwnProperty.call(G.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let Y in G){let Q=G[Y];if(Q&&typeof Q==="object")Z.push(Q)}}}return $}function qg0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return pn1($)}try{return pn1($)}finally{Error.stackTraceLimit=Z}}function Mg0($){if($.type==="object"||Array.isArray($.type)&&$.type.includes("object")){$.additionalProperties=!1;let{properties:X}=$;if(X!=null)for(let G of Object.keys(X))X[G]=sD(X[G])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(sD):sD($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(sD);if($.allOf!=null)$.allOf=$.allOf.map(sD);if($.oneOf!=null)$.oneOf=$.oneOf.map(sD);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=sD(Z[X]);return $}function sD($){if(typeof $==="boolean")return $;return Mg0($)}function UY(){return{}}function ru8($,Z){var X,G,Y;let Q={type:"array"};if(((X=$.type)==null?void 0:X._def)&&((Y=(G=$.type)==null?void 0:G._def)==null?void 0:Y.typeName)!==ou8.ZodAny)Q.items=W6($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)Q.minItems=$.minLength.value;if($.maxLength)Q.maxItems=$.maxLength.value;if($.exactLength)Q.minItems=$.exactLength.value,Q.maxItems=$.exactLength.value;return Q}function au8($){let Z={type:"integer",format:"int64"};if(!$.checks)return Z;for(let X of $.checks)switch(X.kind){case"min":if(X.inclusive)Z.minimum=X.value;else Z.exclusiveMinimum=X.value;break;case"max":if(X.inclusive)Z.maximum=X.value;else Z.exclusiveMaximum=X.value;break;case"multipleOf":Z.multipleOf=X.value;break}return Z}function su8(){return{type:"boolean"}}function Jp1($,Z){return W6($.type._def,Z)}function Wp1($,Z,X){let G=X!=null?X:Z.dateStrategy;if(Array.isArray(G))return{anyOf:G.map((Y,Q)=>Wp1($,Z,Y))};switch(G){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return $c8($)}}function Zc8($,Z){return{...W6($.innerType._def,Z),default:$.defaultValue()}}function Xc8($,Z){return Z.effectStrategy==="input"?W6($.schema._def,Z):UY()}function Gc8($){return{type:"string",enum:Array.from($.values)}}function Qc8($,Z){let X=[W6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),W6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Y)=>!!Y),G=[];return X.forEach((Y)=>{if(Yc8(Y))G.push(...Y.allOf);else{let Q=Y;if("additionalProperties"in Y&&Y.additionalProperties===!1){let{additionalProperties:J,...W}=Y;Q=W}G.push(Q)}}),G.length?{allOf:G}:void 0}function Jc8($){let Z=typeof $.value;if(Z!=="bigint"&&Z!=="number"&&Z!=="boolean"&&Z!=="string")return{type:Array.isArray($.value)?"array":"object"};return{type:Z==="bigint"?"integer":Z,const:$.value}}function Kp1($,Z){let X={type:"string"};if($.checks)for(let G of $.checks)switch(G.kind){case"min":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value;break;case"max":X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"email":switch(Z.emailStrategy){case"format:email":lJ(X,"email",G.message,Z);break;case"format:idn-email":lJ(X,"idn-email",G.message,Z);break;case"pattern:zod":IX(X,cJ.email,G.message,Z);break}break;case"url":lJ(X,"uri",G.message,Z);break;case"uuid":lJ(X,"uuid",G.message,Z);break;case"regex":IX(X,G.regex,G.message,Z);break;case"cuid":IX(X,cJ.cuid,G.message,Z);break;case"cuid2":IX(X,cJ.cuid2,G.message,Z);break;case"startsWith":IX(X,RegExp(`^${jg0(G.value,Z)}`),G.message,Z);break;case"endsWith":IX(X,RegExp(`${jg0(G.value,Z)}$`),G.message,Z);break;case"datetime":lJ(X,"date-time",G.message,Z);break;case"date":lJ(X,"date",G.message,Z);break;case"time":lJ(X,"time",G.message,Z);break;case"duration":lJ(X,"duration",G.message,Z);break;case"length":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,G.value):G.value,X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,G.value):G.value;break;case"includes":{IX(X,RegExp(jg0(G.value,Z)),G.message,Z);break}case"ip":{if(G.version!=="v6")lJ(X,"ipv4",G.message,Z);if(G.version!=="v4")lJ(X,"ipv6",G.message,Z);break}case"base64url":IX(X,cJ.base64url,G.message,Z);break;case"jwt":IX(X,cJ.jwt,G.message,Z);break;case"cidr":{if(G.version!=="v6")IX(X,cJ.ipv4Cidr,G.message,Z);if(G.version!=="v4")IX(X,cJ.ipv6Cidr,G.message,Z);break}case"emoji":IX(X,cJ.emoji(),G.message,Z);break;case"ulid":{IX(X,cJ.ulid,G.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{lJ(X,"binary",G.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{IX(X,cJ.base64,G.message,Z);break}}break}case"nanoid":IX(X,cJ.nanoid,G.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function jg0($,Z){return Z.patternStrategy==="escape"?Kc8($):$}function Kc8($){let Z="";for(let X=0;X<$.length;X++){if(!Wc8.has($[X]))Z+="\\";Z+=$[X]}return Z}function lJ($,Z,X,G){var Y;if($.format||((Y=$.anyOf)==null?void 0:Y.some((Q)=>Q.format))){if(!$.anyOf)$.anyOf=[];if($.format)$.anyOf.push({format:$.format}),delete $.format;$.anyOf.push({format:Z,...X&&G.errorMessages&&{errorMessage:{format:X}}})}else $.format=Z}function IX($,Z,X,G){var Y;if($.pattern||((Y=$.allOf)==null?void 0:Y.some((Q)=>Q.pattern))){if(!$.allOf)$.allOf=[];if($.pattern)$.allOf.push({pattern:$.pattern}),delete $.pattern;$.allOf.push({pattern:on1(Z,G),...X&&G.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=on1(Z,G)}function on1($,Z){var X;if(!Z.applyRegexFlags||!$.flags)return $.source;let G={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=G.i?$.source.toLowerCase():$.source,Q="",J=!1,W=!1,K=!1;for(let N=0;N<Y.length;N++){if(J){Q+=Y[N],J=!1;continue}if(G.i){if(W){if(Y[N].match(/[a-z]/)){if(K)Q+=Y[N],Q+=`${Y[N-2]}-${Y[N]}`.toUpperCase(),K=!1;else if(Y[N+1]==="-"&&((X=Y[N+2])==null?void 0:X.match(/[a-z]/)))Q+=Y[N],K=!0;else Q+=`${Y[N]}${Y[N].toUpperCase()}`;continue}}else if(Y[N].match(/[a-z]/)){Q+=`[${Y[N]}${Y[N].toUpperCase()}]`;continue}}if(G.m){if(Y[N]==="^"){Q+=`(^|(?<=[\r
|
|
1043
1043
|
]))`;continue}else if(Y[N]==="$"){Q+=`($|(?=[\r
|
|
@@ -1553,7 +1553,7 @@ ${$.description}
|
|
|
1553
1553
|
`):Z?.feedback?[Z.pr?`A reviewer requested changes on the existing pull request #${Z.pr.number} (${Z.pr.url}):`:"A reviewer requested changes on your previous work:",Z.feedback,Z.pr?`Load the repo, then CHECK OUT that PR's branch (e.g. \`gh pr checkout ${Z.pr.number}\`) before editing, address the feedback, commit, and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch.`:"Address this feedback.",""].join(`
|
|
1554
1554
|
`):"","How to work:","- First decide whether this task requires changing code in a repository. Some tasks (research, answering a question, planning) don't. If it doesn't, just do the work directly \u2014 don't load a repo or open a PR.","- If it DOES need code changes: use the `load_repo` tool to load the relevant repository, then make the change, commit on a new branch, push, and open a pull request. Only then does a PR apply.","- Prefer the GitHub tool to open the PR. If it errors or targets the wrong repo, fall back to `git push` + the GitHub REST API (the auth token is embedded in the `origin` URL).","- If a dev server is running it hot-reloads your changes \u2014 don't restart it, hunt for its port, or run a full typecheck/build just to verify a small edit.","- Change only what the task needs. Don't trace the definition of a pre-existing symbol that's incidental to your change \u2014 note it in one line and move on. Prefer one or two broad searches over many narrow retries.","- Only if you hit a genuine blocker a human must clear (see above) may you call `user_ask` \u2014 otherwise keep going and finish the task.","",`(task id: ${$.id})`].join(`
|
|
1555
1555
|
`)}async function Op($,Z,X){await xi1($,Z);try{let G=await rK$($,Z.organizationId);if(G){let Y="repo"in G?G.repo:null;await wp($,Z,{title:`Super Agent: ${Z.title}`,prompt:aK$(Z,Y,{...X,..."choices"in G?{repoChoices:G.choices}:{}}),temperature:0.5,harnessId:"claude-code",...Y?{repo:Y}:{}});return}await wp($,Z,{title:`Super Agent: ${Z.title}`,prompt:mN4(Z,X),temperature:0.5})}catch(G){throw await d40($.storage.organizationBilling,Z.organizationId,Z.id),G}}var Wy=B(()=>{BQ();iU();Gt0();sK$()});import{z as KO0}from"zod";async function CG($,Z){try{await $.storage.taskBoard.recordActivity(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}async function eK$($,Z){if(Z.length===0)return;try{await $.storage.taskBoard.recordActivities(Z)}catch(X){console.error("[task-board] activity log write failed",X)}}var Yt0;var DH=B(()=>{b0();aW();Yt0=d({name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history (timeline, oldest first).",annotations:{title:"List Task Activity",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:KO0.object({taskBoardItemId:KO0.string()}),outputSchema:KO0.object({activity:KO0.array(NQ$)}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{activity:await Z.storage.taskBoard.listActivity($.taskBoardItemId,X)}}})});import{z as QO}from"zod";var Qt0;var $N$=B(()=>{b0();aW();Dn0();Wy();DH();xX();Qt0=d({name:"TASK_BOARD_ITEM_CREATE",description:"Create a new task board item for the organization.",annotations:{title:"Create Task Board Item",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:QO.object({title:QO.string().min(1),description:QO.string().nullable().optional(),status:HH.optional(),priority:PV.optional(),assigneeId:QO.string().nullable().optional(),dueDate:QO.string().datetime().nullable().optional(),tagIds:QO.array(QO.string()).optional()}),outputSchema:QO.object({item:mx}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await $w0(Z,X,$.assigneeId);let G=$.assigneeId===e6;if($.tagIds?.length){let Q=await Z.storage.tags.listOrgTags(X),J=new Set(Q.map((W)=>W.id));for(let W of $.tagIds)if(!J.has(W))throw Error(`Tag not found: ${W}`)}let Y=await Z.storage.taskBoard.create({organizationId:X,title:$.title,description:$.description??null,status:G?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId??null,assignedBy:$.assigneeId?N1(Z):null,dueDate:$.dueDate??null,by:N1(Z)});if($.tagIds?.length)await Z.storage.taskBoard.setItemTags(Y.id,$.tagIds,N1(Z)),Y=await Z.storage.taskBoard.getById(Y.id,X);return await CG(Z,{taskBoardItemId:Y.id,action:"created",actorId:N1(Z)}),r5(X,Y),await Jy(Z,Y),{item:Y}}})});function iN4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&hw0($))return"nudge";return"none"}async function pN4($,Z,X){let G=Z.organizationId,Y=await p7($,"smart"),Q=X.virtualMcpId??mB(G),J={id:`stall-nudge-${Z.id}-${X.threadId}`,role:"user",parts:[{type:"text",text:nN4}]};await new o7({storage:$.storage.threads.messageParts(),orgId:G,threadId:X.threadId,runId:X.threadId}).emitRequestMessage(J),await OH({threadId:X.threadId,source:"background-tool",request:{messages:[J],models:{credentialId:Y.credentialId,thinking:{id:Y.modelId,title:Y.modelMeta.title}},agent:{id:Q},temperature:0.5,toolApprovalLevel:"auto",mode:"default",organizationId:G,userId:Z.assignedBy??Z.createdBy,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",taskId:X.threadId,runMetadata:Zw0(Z)}},{workflowID:`stall-nudge:${Z.id}:${X.threadId}`})}async function tN4($,Z){let X=await $.storage.threads.get(Z);if(!X)return"none";return iN4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id,sandboxProviderKind:X.sandbox_provider_kind})}async function ZN$($,Z){let X=$.organization?.id;if(!X)return;for(let G of Z){if(!Bg0(G))continue;let Y=G.threads.find((Q)=>Q.hasMessages);if(!Y)continue;try{let Q=await tN4($,Y.threadId);if(Q==="none")continue;if(Q==="advance")await Yp($.storage.taskBoard,Y.threadId,X,$.storage.organizationBilling);else await pN4($,G,Y)}catch(Q){console.error(`[task-board] stall recovery failed for ${G.id}`,Q)}}}var nN4;var XN$=B(()=>{an();$O();ow();_V();Af();O8();xX();nN4=["This task is still In Progress on the board and your last run ended without finishing it.","","Look at what you already did, then either:","- finish the remaining work (and open the PR, if it needed code changes),","- or, if it's actually done, say so in one line \u2014 the board moves the card for you,","- or, if you're blocked on something only a human knows, call the `user_ask` tool.","","Don't start over and don't redo work you already committed or pushed."].join(`
|
|
1556
|
-
`)});import{z as Jt0}from"zod";var Wt0;var GN$=B(()=>{b0();aW();XN$();Wt0=d({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization.",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Jt0.object({}),outputSchema:Jt0.object({items:Jt0.array(mx)}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.list(X);return ZN$(Z,G),{items:G}}})});import{z as L3}from"zod";function rN4($,Z){let X=[];for(let{field:Q,action:J}of oN4){if(Z[Q]===$[Q])continue;X.push({action:J,data:{from:$[Q],to:Z[Q]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let G=new Set($.tags.map((Q)=>Q.id));if(Z.tags.length!==$.tags.length||Z.tags.some((Q)=>!G.has(Q.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}var oN4,Kt0;var YN$=B(()=>{b0();aW();Dn0();Wy();DH();xX();iU();oN4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];Kt0=d({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:L3.object({id:L3.string(),title:L3.string().min(1).optional(),description:L3.string().nullable().optional(),status:HH.optional(),priority:PV.optional(),assigneeId:L3.string().nullable().optional(),dueDate:L3.string().datetime().nullable().optional(),sortOrder:L3.number().optional(),tagIds:L3.array(L3.string()).optional(),linkThreadId:L3.string().optional()}),outputSchema:L3.object({item:mx}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await $w0(Z,X,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,X)}let G=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.dueDate!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,Y=G?await Z.storage.taskBoard.getById($.id,X):null;if(G&&!Y)throw Error(`Task board item not found: ${$.id}`);let Q=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),J=Q&&$.assigneeId===e6;if(Y&&vN(Y)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(J)await fi1(Z,Y)}if($.tagIds!==void 0){let K=await Z.storage.tags.listOrgTags(X),N=new Set(K.map((H)=>H.id));for(let H of $.tagIds)if(!N.has(H))throw Error(`Tag not found: ${H}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,N1(Z))}let W;if(G)W=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:J?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:Q?$.assigneeId?N1(Z):null:void 0,dueDate:$.dueDate,sortOrder:$.sortOrder},N1(Z));else{let K=await Z.storage.taskBoard.getById($.id,X);if(!K)throw Error(`Task board item not found: ${$.id}`);W=K}if(Y){let K=N1(Z),N=rN4(Y,W);if(N.length>0)await eK$(Z,N.map((H)=>({taskBoardItemId:W.id,actorId:K,...H})))}if(G||$.linkThreadId)r5(X,W);if(J)await Jy(Z,W);return{item:W}}})});import{z as NO0}from"zod";var Nt0;var QN$=B(()=>{b0();xX();Nt0=d({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:NO0.object({id:NO0.string()}),outputSchema:NO0.object({success:NO0.boolean()}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");
|
|
1556
|
+
`)});import{z as Jt0}from"zod";var Wt0;var GN$=B(()=>{b0();aW();XN$();Wt0=d({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization.",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Jt0.object({}),outputSchema:Jt0.object({items:Jt0.array(mx)}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.list(X);return ZN$(Z,G),{items:G}}})});import{z as L3}from"zod";function rN4($,Z){let X=[];for(let{field:Q,action:J}of oN4){if(Z[Q]===$[Q])continue;X.push({action:J,data:{from:$[Q],to:Z[Q]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let G=new Set($.tags.map((Q)=>Q.id));if(Z.tags.length!==$.tags.length||Z.tags.some((Q)=>!G.has(Q.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}var oN4,Kt0;var YN$=B(()=>{b0();aW();Dn0();Wy();DH();xX();iU();oN4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"}];Kt0=d({name:"TASK_BOARD_ITEM_UPDATE",description:"Update a task board item's fields (title, description, status, priority, assignee), and/or link a chat thread to it.",annotations:{title:"Update Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:L3.object({id:L3.string(),title:L3.string().min(1).optional(),description:L3.string().nullable().optional(),status:HH.optional(),priority:PV.optional(),assigneeId:L3.string().nullable().optional(),dueDate:L3.string().datetime().nullable().optional(),sortOrder:L3.number().optional(),tagIds:L3.array(L3.string()).optional(),linkThreadId:L3.string().optional()}),outputSchema:L3.object({item:mx}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if($.assigneeId)await $w0(Z,X,$.assigneeId);if($.linkThreadId){if(!await Z.storage.taskBoard.getById($.id,X))throw Error(`Task board item not found: ${$.id}`);if(!await Z.storage.threads.get($.linkThreadId))throw Error(`Thread not found: ${$.linkThreadId}`);await Z.storage.taskBoard.linkThread($.id,$.linkThreadId,X)}let G=$.title!==void 0||$.description!==void 0||$.status!==void 0||$.priority!==void 0||$.assigneeId!==void 0||$.dueDate!==void 0||$.sortOrder!==void 0||$.tagIds!==void 0,Y=G?await Z.storage.taskBoard.getById($.id,X):null;if(G&&!Y)throw Error(`Task board item not found: ${$.id}`);let Q=$.assigneeId!==void 0&&$.assigneeId!==(Y?.assigneeId??null),J=Q&&$.assigneeId===e6;if(Y&&vN(Y)){if($.title!==void 0||$.description!==void 0||$.priority!==void 0)throw Error("This task was generated from your report and can't be edited \u2014 create your own task instead.");if(J)await fi1(Z,Y)}if($.tagIds!==void 0){let K=await Z.storage.tags.listOrgTags(X),N=new Set(K.map((H)=>H.id));for(let H of $.tagIds)if(!N.has(H))throw Error(`Tag not found: ${H}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,N1(Z))}let W;if(G)W=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:J?"todo":$.status,priority:$.priority,assigneeId:$.assigneeId,assignedBy:Q?$.assigneeId?N1(Z):null:void 0,dueDate:$.dueDate,sortOrder:$.sortOrder},N1(Z));else{let K=await Z.storage.taskBoard.getById($.id,X);if(!K)throw Error(`Task board item not found: ${$.id}`);W=K}if(Y){let K=N1(Z),N=rN4(Y,W);if(N.length>0)await eK$(Z,N.map((H)=>({taskBoardItemId:W.id,actorId:K,...H})))}if(G||$.linkThreadId)r5(X,W);if(J)await Jy(Z,W);return{item:W}}})});import{z as NO0}from"zod";var Nt0;var QN$=B(()=>{b0();xX();Nt0=d({name:"TASK_BOARD_ITEM_DELETE",description:"Delete a task board item. A reports-pushed task also dismisses its finding, so the next diagnostic import won't re-create the card.",annotations:{title:"Delete Task Board Item",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:NO0.object({id:NO0.string()}),outputSchema:NO0.object({success:NO0.boolean()}),handler:async($,Z)=>{Y0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.taskBoard.delete($.id,X,N1(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return P3$(X,$.id),{success:!0}}})});async function Ht0($){let{contextFactory:Z,taskBoard:X,threadId:G,orgId:Y}=$;try{for(let Q of await X.linkedTaskIds(G,Y)){let J=await X.getById(Q,Y);if(!J||J.status!=="in_review"||J.assigneeId!==e6)continue;if(!J.threads.find((H)=>H.threadId===G)?.title?.startsWith("Super Agent:"))continue;if((await X.listPrs(Q,Y)).length===0)continue;let N=await Z(Y,J.assignedBy??J.createdBy);if(!N)continue;await Ft0(N,J)}}catch(Q){console.error("[task-board] reviewer trigger on run finish failed",Q)}}async function Ft0($,Z){let G=(await $.storage.organizationSettings.get(Z.organizationId))?.flags??{},Y=nU.filter((W)=>G[pU[W]]===!0);if(Y.length===0)return;let Q=await $H4($,Z),J=new Date(Q);await Promise.all(Y.map(async(W)=>{if(eN4(Z,W,Q))return;let K,N;try{({claimed:K,token:N}=await $.storage.taskBoard.claimReviewer(Z.id,W,J))}catch(H){console.error(`[task-board] ${W} reviewer claim failed`,H);return}if(!K)return;await ZH4($,Z,W,N).catch(async(H)=>{console.error(`[task-board] ${W} reviewer enqueue failed`,H),await $.storage.taskBoard.releaseReviewerClaim(Z.id,W,J).catch((F)=>console.error(`[task-board] ${W} reviewer claim release failed`,F))})}))}function eN4($,Z,X){return $.threads.some((G)=>{if(!gi1(G.title,Z))return!1;if(G.status!==null&&!aN4.has(G.status))return!0;return new Date(G.createdAt).getTime()>=X})}async function $H4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);return Ug0(X)}async function ZH4($,Z,X,G){let Y=Z.organizationId,Q=[sN4[X],"","You are running AUTONOMOUSLY \u2014 no human is watching this run. Making the "+'approve / request-changes call IS your job; you are the decision-maker, not an assistant asking a human to decide. NEVER use `user_ask` to ask whether to approve, or to confirm an obvious call ("Approve the PR?"). Reserve `user_ask` for a genuine, unresolvable blocker only a human can clear (e.g. a missing credential, or a requirement so ambiguous you '+"truly cannot judge the outcome) \u2014 that should be rare. When in doubt "+"between asking and deciding, DECIDE.","",`Task title: ${Z.title}`,Z.description?`
|
|
1557
1557
|
Task description:
|
|
1558
1558
|
${Z.description}
|
|
1559
1559
|
`:"","How to work:","- Call `TASK_BOARD_ITEM_PRS_GET` with the task id below to find the pull request under review, then load its repository to inspect / exercise the change.","- Do NOT push commits or change the code yourself. You are reviewing, not implementing.",`- End the run by calling \`TASK_BOARD_REVIEW_DECISION\` exactly once with the task id, reviewer "${X}", the reviewToken below, and your decision:`," - `approve` when it's good to ship. Include a short summary of what you verified."," - `request_changes` when something is wrong or missing. Include specific, actionable notes \u2014 the task goes back to the Super Agent with your notes.","- The reviewToken proves you are this reviewer \u2014 pass it through EXACTLY as given. Without it your approval won't count toward an automatic merge.","",`(task id: ${Z.id})`,`(reviewToken: ${G})`].join(`
|
|
@@ -2721,7 +2721,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2721
2721
|
|
|
2722
2722
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2723
2723
|
|
|
2724
|
-
Respond with the structured verdict and a short reason.`,lV$;var mV$=B(()=>{S4();ow();c$1();S06=l$1.object({requiresReview:l$1.boolean().describe("true if the changes should go through pull-request review"),reason:l$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});lV$={requiresReview:!1,reason:""}});function v06($){if(!$||$.includes(".."))return!1;return _06.test($)}function iV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!v06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function nV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var _06;var pV$=B(()=>{_06=/^[\w./@-]+$/});function d$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function tV$($,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 oV$($,Z,X,G){if(!G.connectionId)throw new Sg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Sg(u7);await Tx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Sg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await Cw(G.connectionId,G.owner,G.name,$.db,$.vault),K=fE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await tw(N,b06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var b06=10485760,Sg;var rV$=B(()=>{Ow();b$1();tn();zn();Sg=class Sg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function x06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!f06.test(Z))throw Error(`Invalid branch name: ${$}`)}function MC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(g06)])}function kC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function m$1($,Z){let G=(xE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return xE0.set($,Y),Y.finally(()=>{if(xE0.get($)===Y)xE0.delete($)}),G}async function SZ($,Z,X){let G=kC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?u06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function u06($){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 yE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function c06($){return eV$.includes($)}var f06,aV$=524288,y06=65536,g06=1e4,sV$=2000,h06,xE0,bY,eV$,$C$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",h06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!c06(X))return Z.json({error:`step must be one of: ${eV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=nU0(G.virtualMcpMetadata);try{await pU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return lH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return xV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(sV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(sV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return m$1(G,async()=>{try{await f$1(J,X,G);let W=tV$(Y,Q);if(W)await oV$(J,X,G,W)}catch(W){if(W instanceof Sg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return m$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return m$1(G,async()=>{try{await f$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:aV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=g$1(K)&&H?[K,N]:await Promise.all([yE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),yE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await cV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:aV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=g$1(K)&&H?[K,N]:await Promise.all([yE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),yE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await dV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=d$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:y06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=iV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=nV$(Y,J.resolveType),K=d$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var ZC$=B(()=>{u8();EC();kg();_V$();ZH();bV$();w3();iw();fV$();yV$();Fn0();pn();c$1();mV$();pV$();rV$();f06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;h06=CV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{x06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=On({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await NH(X,J,G),H=vV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});xE0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};eV$=["clone","install","start"]});var XC$=($)=>{let Z=new D1;if(Z.use("*",LC),Z.route("/",sL0()),Z.route("/",DM$()),Z.route("/",EV$()),Z.route("/",DV$()),Z.route("/",_E0()),Z.route("/tools",IV$()),Z.route("/",AV$()),Z.route("/",sS$({kvStorage:$.kvStorage})),Z.route("/",rS$()),Z.route("/fs",NV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",$C$()),Z.route("/",wV$()),Z.route("/deco-sites",$E0()),Z.route("/sso",iL0()),Z.route("/",vE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",KM$()),$.mountDevAssets)Z.route("/dev-assets",ZE0({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("/",Zs1()),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",FV$()),Z.route("/mcp",qO0()),Z.route("/mcp/self",CE0()),Z.route("/mcp",SO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var GC$=B(()=>{u8();Z11();NM$();J11();XE0();ct();e01();aS$();eS$();HV$();Ti();m01();VO0();M$1();UV$();OV$();LV$();zV$();TV$();S$1();qV$();V$1();MO0();ZC$()});function d06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function m06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(l06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var l06=1e4,i06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},YC$=()=>{let $=new D1;return $.use("*",i06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await m06(G,Y);return Z.json({apps:d06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var QC$=B(()=>{u8();V$()});import{z as I1}from"zod";function AK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Z16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function X16($,Z,X){try{return JSON.parse($)}catch{throw new KC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function G16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((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:X16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function Y16($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function Q16($){if(!$)return;return{openai:{response_format:$}}}function J16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function JC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function WC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var n06=256,p06,t06,o06,r06,a06,s06,e06,$16,KC$,NC$,HC$;var FC$=B(()=>{S4();u8();kg();PH();p06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),t06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),o06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(t06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),r06=I1.object({type:I1.literal("text")}),a06=I1.object({type:I1.literal("json_object")}),s06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),e06=I1.union([r06,a06,s06]),$16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(o06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(p06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:e06.optional(),user:I1.string().optional()});KC$=class KC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};NC$=new D1;NC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AK("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(AK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=$16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=Z16(Q.model);if(!J)return $.json(AK("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((z)=>dB(z.providerId));if(!E)return $.json(AK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=G16(Q.messages),U=Q.tools?Y16(Q.tools):void 0,w=Q16(Q.response_format),O=J16(),D=Math.floor(Date.now()/1000);if(Q.stream)return lH($,async(L)=>{let E=JC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Sw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of z.fullStream){if(!j&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=n06)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:WC$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=JC$(H,F,U,Q,w,$.req.raw.signal),E=await Mw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:WC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(AK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AK(Y.message,"server_error"),500)}});HC$=NC$});var wC$;var UC$=B(()=>{wC$={name:"decocms",version:"4.179.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function N16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??K16}}var OC$,K16="https://ph.studio.decocms.com",BC$;var DC$=B(()=>{u8();jC0();RV();OZ();V$();h01();UC$();OC$=new D1;OC$.get("/",($)=>{let Z={version:wC$.version,theme:JM1(),...tB().logo&&{logo:tB().logo},...sW()&&{internalUrl:K21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Tq$(),posthog:N16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!sW()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});BC$=OC$});function Vg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function i$1($){return(Vg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function EC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Vg($))}&sz=${Z}`}function LC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function zC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?LC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):LC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var SC,H16,F16,U16,w16,jC$;var PC$=B(()=>{SC=h0.enum(["good","bad","neutral"]),H16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:SC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),F16=h0.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},h0.array(H16)),U16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},w16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:SC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:SC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:SC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:SC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(F16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:SC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:SC.optional()})).min(1)})]),jC$=h0.object({...U16,template:w16})});function gE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=jC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var n$1=B(()=>{PC$()});import{join as AC$}from"path";async function B16($){try{let Z=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(O16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=gE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||i$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function D16($,Z){let X=Vg($),G=Z?.brand?.trim()||i$1(X),Y=EC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=zC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
|
|
2724
|
+
Respond with the structured verdict and a short reason.`,lV$;var mV$=B(()=>{S4();ow();c$1();S06=l$1.object({requiresReview:l$1.boolean().describe("true if the changes should go through pull-request review"),reason:l$1.string().describe("One short sentence explaining the decision (max ~120 chars)")});lV$={requiresReview:!1,reason:""}});function v06($){if(!$||$.includes(".."))return!1;return _06.test($)}function iV$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!v06(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function nV$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var _06;var pV$=B(()=>{_06=/^[\w./@-]+$/});function d$1($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function tV$($,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 oV$($,Z,X,G){if(!G.connectionId)throw new Sg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Sg(u7);await Tx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new Sg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await Cw(G.connectionId,G.owner,G.name,$.db,$.vault),K=fE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await tw(N,b06).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var b06=10485760,Sg;var rV$=B(()=>{Ow();b$1();tn();zn();Sg=class Sg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function x06($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!f06.test(Z))throw Error(`Invalid branch name: ${$}`)}function MC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(g06)])}function kC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function m$1($,Z){let G=(xE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return xE0.set($,Y),Y.finally(()=>{if(xE0.get($)===Y)xE0.delete($)}),G}async function SZ($,Z,X){let G=kC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...bY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?u06(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...bY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function u06($){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 yE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function c06($){return eV$.includes($)}var f06,aV$=524288,y06=65536,g06=1e4,sV$=2000,h06,xE0,bY,eV$,$C$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",h06),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:MC(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!c06(X))return Z.json({error:`step must be one of: ${eV$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=e(Z.var.studioContext),Q=nU0(G.virtualMcpMetadata);try{await pU0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return lH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return xV$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(sV$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(sV$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return m$1(G,async()=>{try{await f$1(J,X,G);let W=tV$(Y,Q);if(W)await oV$(J,X,G,W)}catch(W){if(W instanceof Sg)return Z.json({error:W.message},403,bY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,bY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return m$1(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return m$1(G,async()=>{try{await f$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,bY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:aV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=g$1(K)&&H?[K,N]:await Promise.all([yE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),yE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await cV$(J,F,U);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:aV$,onError:(Z)=>Z.json({error:"Payload too large"},413,bY)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=g$1(K)&&H?[K,N]:await Promise.all([yE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),yE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await dV$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,bY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,bY);return Z.json({error:K},502,bY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=d$1(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:y06,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=kC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=iV$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=nV$(Y,J.resolveType),K=d$1(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var ZC$=B(()=>{u8();EC();kg();_V$();ZH();bV$();w3();iw();fV$();yV$();Fn0();pn();c$1();mV$();pV$();rV$();f06=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;h06=CV$(async($,Z)=>{let X=$.var.studioContext;try{Y0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=N1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=e(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{x06(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=On({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await NH(X,J,G),H=vV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await bX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});xE0=new Map;bY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};eV$=["clone","install","start"]});var XC$=($)=>{let Z=new D1;if(Z.use("*",LC),Z.route("/",sL0()),Z.route("/",DM$()),Z.route("/",EV$()),Z.route("/",DV$()),Z.route("/",_E0()),Z.route("/tools",IV$()),Z.route("/",AV$()),Z.route("/",sS$({kvStorage:$.kvStorage})),Z.route("/",rS$()),Z.route("/fs",NV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",$C$()),Z.route("/",wV$()),Z.route("/deco-sites",$E0()),Z.route("/sso",iL0()),Z.route("/",vE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",KM$()),$.mountDevAssets)Z.route("/dev-assets",ZE0({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("/",Zs1()),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",FV$()),Z.route("/mcp",qO0()),Z.route("/mcp/self",CE0()),Z.route("/mcp",SO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var GC$=B(()=>{u8();Z11();NM$();J11();XE0();ct();e01();aS$();eS$();HV$();Ti();m01();VO0();M$1();UV$();OV$();LV$();zV$();TV$();S$1();qV$();V$1();MO0();ZC$()});function d06($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function m06($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(l06)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var l06=1e4,i06=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},YC$=()=>{let $=new D1;return $.use("*",i06),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await m06(G,Y);return Z.json({apps:d06(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var QC$=B(()=>{u8();V$()});import{z as I1}from"zod";function AK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function Z16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function X16($,Z,X){try{return JSON.parse($)}catch{throw new KC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function G16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((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:X16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function Y16($){let Z=$.map((X)=>{let G=X.function.parameters?OY(X.function.parameters):OY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function Q16($){if(!$)return;return{openai:{response_format:$}}}function J16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function JC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function WC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var n06=256,p06,t06,o06,r06,a06,s06,e06,$16,KC$,NC$,HC$;var FC$=B(()=>{S4();u8();kg();PH();p06=I1.object({type:I1.literal("function"),function:I1.object({name:I1.string(),description:I1.string().optional(),parameters:I1.record(I1.string(),I1.unknown()).optional()})}),t06=I1.object({id:I1.string(),type:I1.literal("function"),function:I1.object({name:I1.string(),arguments:I1.string()})}),o06=I1.discriminatedUnion("role",[I1.object({role:I1.literal("system"),content:I1.string(),name:I1.string().optional()}),I1.object({role:I1.literal("user"),content:I1.union([I1.string(),I1.array(I1.union([I1.object({type:I1.literal("text"),text:I1.string()}),I1.object({type:I1.literal("image_url"),image_url:I1.object({url:I1.string(),detail:I1.string().optional()})})]))]),name:I1.string().optional()}),I1.object({role:I1.literal("assistant"),content:I1.string().nullable().optional(),name:I1.string().optional(),tool_calls:I1.array(t06).optional()}),I1.object({role:I1.literal("tool"),content:I1.string(),tool_call_id:I1.string()})]),r06=I1.object({type:I1.literal("text")}),a06=I1.object({type:I1.literal("json_object")}),s06=I1.object({type:I1.literal("json_schema"),json_schema:I1.object({name:I1.string(),description:I1.string().optional(),schema:I1.record(I1.string(),I1.unknown()),strict:I1.boolean().optional()})}),e06=I1.union([r06,a06,s06]),$16=I1.object({model:I1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:I1.array(o06),stream:I1.boolean().optional().default(!1),temperature:I1.number().min(0).max(2).optional(),max_tokens:I1.number().positive().optional(),top_p:I1.number().min(0).max(1).optional(),frequency_penalty:I1.number().min(-2).max(2).optional(),presence_penalty:I1.number().min(-2).max(2).optional(),stop:I1.union([I1.string(),I1.array(I1.string())]).optional(),tools:I1.array(p06).optional(),tool_choice:I1.union([I1.literal("auto"),I1.literal("none"),I1.literal("required"),I1.object({type:I1.literal("function"),function:I1.object({name:I1.string()})})]).optional(),response_format:e06.optional(),user:I1.string().optional()});KC$=class KC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};NC$=new D1;NC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(AK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(AK("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(AK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=$16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(AK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=Z16(Q.model);if(!J)return $.json(AK("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((z)=>dB(z.providerId));if(!E)return $.json(AK("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 N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(AK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=G16(Q.messages),U=Q.tools?Y16(Q.tools):void 0,w=Q16(Q.response_format),O=J16(),D=Math.floor(Date.now()/1000);if(Q.stream)return lH($,async(L)=>{let E=JC$(H,F,U,Q,w,$.req.raw.signal);try{let z=Sw(E),j=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of z.fullStream){if(!j&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=n06)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:WC$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=JC$(H,F,U,Q,w,$.req.raw.signal),E=await Mw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:WC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(AK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(AK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(AK(Y.message,"server_error"),500)}});HC$=NC$});var wC$;var UC$=B(()=>{wC$={name:"decocms",version:"4.179.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function N16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??K16}}var OC$,K16="https://ph.studio.decocms.com",BC$;var DC$=B(()=>{u8();jC0();RV();OZ();V$();h01();UC$();OC$=new D1;OC$.get("/",($)=>{let Z={version:wC$.version,theme:JM1(),...tB().logo&&{logo:tB().logo},...sW()&&{internalUrl:K21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:Tq$(),posthog:N16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!sW()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});BC$=OC$});function Vg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function i$1($){return(Vg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function EC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Vg($))}&sz=${Z}`}function LC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function zC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?LC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):LC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as h0}from"zod";var SC,H16,F16,U16,w16,jC$;var PC$=B(()=>{SC=h0.enum(["good","bad","neutral"]),H16=h0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},h0.object({kind:h0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:h0.coerce.string().optional(),tone:SC.optional(),muted:h0.boolean().optional(),delta:h0.coerce.string().optional(),deltaDir:h0.enum(["up","down","neutral"]).optional(),points:h0.array(h0.coerce.number()).optional(),label:h0.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 $})),F16=h0.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},h0.array(H16)),U16={key:h0.coerce.string(),title:h0.coerce.string(),eyebrow:h0.coerce.string().optional(),headline:h0.coerce.string(),annotation:h0.coerce.string().optional(),methodology:h0.coerce.string().optional(),sources:h0.array(h0.object({name:h0.coerce.string(),logoUrl:h0.coerce.string()})).optional()},w16=h0.discriminatedUnion("template",[h0.object({template:h0.literal("cover"),score:h0.object({value:h0.coerce.number(),max:h0.coerce.number().optional(),grade:h0.coerce.string().optional(),label:h0.coerce.string().optional()}).optional(),brandImage:h0.coerce.string().optional(),screenshot:h0.coerce.string().optional(),mobileScreenshot:h0.coerce.string().optional()}),h0.object({template:h0.literal("cta"),ctaUrl:h0.coerce.string().optional(),ctaLabel:h0.coerce.string().optional(),bullets:h0.array(h0.coerce.string()).optional()}),h0.object({template:h0.literal("series"),points:h0.array(h0.coerce.number()).min(2),xLabels:h0.array(h0.coerce.string()).min(1),unit:h0.coerce.string().optional(),callout:h0.object({index:h0.coerce.number(),value:h0.coerce.string(),tone:SC.optional()})}),h0.object({template:h0.literal("threshold"),value:h0.coerce.string().default(""),metricLabel:h0.coerce.string().optional(),ratio:h0.coerce.number(),thresholdRatio:h0.coerce.number().optional(),thresholdLabel:h0.coerce.string().default(""),tone:SC.optional()}),h0.object({template:h0.literal("stats"),stats:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),tone:SC.optional()})).min(1)}),h0.object({template:h0.literal("bars"),items:h0.array(h0.object({value:h0.coerce.string(),label:h0.coerce.string(),ratio:h0.coerce.number(),tone:SC.optional()})).min(1)}),h0.object({template:h0.literal("gauges"),gauges:h0.array(h0.object({label:h0.coerce.string(),value:h0.coerce.string(),status:h0.enum(["good","warn","bad"]).catch("warn"),caption:h0.coerce.string().optional(),ratio:h0.coerce.number().optional()})).min(1)}),h0.object({template:h0.literal("checklist"),checks:h0.array(h0.object({label:h0.coerce.string(),status:h0.enum(["pass","fail","warn"]).catch("fail"),value:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("table"),columns:h0.array(h0.object({label:h0.coerce.string(),align:h0.enum(["left","right"]).optional()})).min(1),rows:h0.array(F16).min(1),highlightRow:h0.coerce.number().optional()}),h0.object({template:h0.literal("products"),products:h0.array(h0.object({name:h0.coerce.string(),price:h0.coerce.string().optional(),image:h0.coerce.string().optional(),url:h0.coerce.string().optional()})).min(1)}),h0.object({template:h0.literal("list"),entries:h0.array(h0.object({label:h0.coerce.string(),severity:h0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:h0.coerce.number().optional()}),h0.object({template:h0.literal("keywords"),volumeLabel:h0.coerce.string().optional(),keywords:h0.array(h0.object({term:h0.coerce.string(),volume:h0.coerce.string(),position:h0.coerce.number().catch(0)})).min(1)}),h0.object({template:h0.literal("competitor"),metricLabel:h0.coerce.string().optional(),competitors:h0.array(h0.object({name:h0.coerce.string(),value:h0.coerce.string(),tone:SC.optional(),isYou:h0.boolean().optional()})).min(1)}),h0.object({template:h0.literal("scorecard"),rivalLabel:h0.coerce.string().optional(),dimensions:h0.array(h0.object({label:h0.coerce.string(),you:h0.coerce.string(),rival:h0.coerce.string().optional(),rivalName:h0.coerce.string().optional(),tone:SC.optional()})).min(1)})]),jC$=h0.object({...U16,template:w16})});function gE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=jC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var n$1=B(()=>{PC$()});import{join as AC$}from"path";async function B16($){try{let Z=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(O16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=gE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||i$1($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function fY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function D16($,Z){let X=Vg($),G=Z?.brand?.trim()||i$1(X),Y=EC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=zC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${fY(W)}</title>`,`<meta name="description" content="${fY(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="${fY(W)}" />`,`<meta property="og:description" content="${fY(K)}" />`,`<meta property="og:url" content="${fY(J)}" />`,`<meta property="og:image" content="${fY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${fY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${fY(W)}" />`,`<meta name="twitter:description" content="${fY(K)}" />`,`<meta name="twitter:image" content="${fY(N)}" />`,`<meta name="twitter:image:alt" content="${fY(H)}" />`,`<link rel="canonical" href="${fY(J)}" />`,`<link rel="icon" href="${fY(Y)}" sizes="any" />`].join(`
|
|
2725
2725
|
`)}function L16($,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}
|
|
2726
2726
|
</head>`)}function TC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=Vg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(AC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(E16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?AC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await B16(Vg(G)),K=D16(G,W);return X.html(L16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var O16=2500,E16=1e4;var RC$=B(()=>{u8();n$1();PD();V$()});function Oo($,Z){return fetch(`${HW({})}${$}`,Z)}async function z16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Oo(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=gE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var j16,V3,hE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},IC$;var qC$=B(()=>{u8();IQ();PD();n$1();j16=new Set(["complete","errored","terminated","unknown"]),V3=new D1;V3.use("*",async($,Z)=>{let X=await L8.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});V3.use("/run",hE0);V3.use("/status",hE0);V3.use("/link-token/*",hE0);V3.use("/suggest",hE0);V3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await z16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});V3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Oo("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${jD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});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)}});V3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Oo(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${jD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:j16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});V3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Oo(`/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)}});V3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Oo(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});IC$=V3});import{createHmac as P16,timingSafeEqual as A16}from"crypto";function MC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>T16)return!1;let W=P16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&A16(K,H)})}function kC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:TK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function R16($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function TK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function uE0($){return typeof $==="number"?new Date($*1000):null}function o$1($){return TK($)??TK(tQ($)?.id)}function I16($){return o$1($.subscription)??TK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function q16($){let Z=uE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function p$1($,Z){let X=uE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function t$1($,Z){let X=uE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function M16($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=TK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(TK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(TK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=TK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(TK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=o$1(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(p$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:o$1(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:t$1(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=TK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&p$1(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":R16(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:q16(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:t$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=I16(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(p$1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:uE0(X.period_end),lastStripeEventAt:t$1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function SC$($){let Z=new VN(p8().db),X=await M16(Z,$);if(X.handled&&X.topUp)await vH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await l0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof Y3&&(G.status===400||G.status===404)))throw G}return X}var T16=300;var VC$=B(()=>{GQ();oi();Io0()});var k16=1048576,r$1;var CC$=B(()=>{u8();EC();V$();VC$();r$1=new D1;r$1.post("/webhook",F7({maxSize:k16,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!MC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=kC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await SC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function _C$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var vC$,S16,V16,bC$;var fC$=B(()=>{u8();PJ();ox();Ov();vC$=new D1,S16=["range","if-none-match","if-modified-since"],V16=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];vC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Ng($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Gp(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&jJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return _C$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of S16){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of V16){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),_C$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});bC$=vC$});var Bo=C((VC)=>{var C16=VC&&VC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),_16=VC&&VC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))C16(Z,$,X)};Object.defineProperty(VC,"__esModule",{value:!0});_16(pG(),VC)});var gC$=C((xC$)=>{Object.defineProperty(xC$,"__esModule",{value:!0});xC$.version=void 0;xC$.version="3.4.0"});var cC$=C((RK)=>{var v16=RK&&RK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(RK,"__esModule",{value:!0});RK.NodeTransport=RK.VERSION=void 0;RK.nodeResolveHost=h16;var g6=Bo(),b16=j0("net"),a$1=j0("tls"),f16=j0("path"),hC$=j0("fs"),x16=v16(j0("dns")),y16=gC$();RK.VERSION=y16.version;var g16="nats.js";class uC${socket;version;lang;yields=[];signal=(0,g6.deferred)();closedNotification=(0,g6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=g16,this.version=RK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,g6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw g6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new g6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new g6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,g6.deferred)(),X,G=(0,b16.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,g6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=g6.DataBuffer.concat(...this.yields),Y=(0,g6.extractProtocolMessage)(G);if(Y!=="")try{let Q=g6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}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,g6.deferred)();try{if($=(0,f16.resolve)($),!(0,hC$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,hC$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);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,g6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,g6.deferred)();try{let Y=(0,a$1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new g6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,g6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,g6.deferred)();try{let G=(0,a$1.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new g6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,g6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,g6.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 a$1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,g6.render)($)}`);let Z=(0,g6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,g6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,g6.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}}RK.NodeTransport=uC$;function h16($){let Z=(0,g6.deferred)();return x16.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var nC$=C((iC$)=>{Object.defineProperty(iC$,"__esModule",{value:!0});iC$.connect=u16;var lC$=cC$(),dC$=Bo(),mC$=Bo();function u16($={}){if((0,mC$.hasWsProtocol)($))return Promise.reject(mC$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,dC$.setTransportFactory)({factory:()=>{return new lC$.NodeTransport},dnsResolveFn:lC$.nodeResolveHost}),dC$.NatsConnectionImpl.connect($)}});var pC$=C((dH)=>{var l16=dH&&dH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=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($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),d16=dH&&dH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))l16(Z,$,X)};Object.defineProperty(dH,"__esModule",{value:!0});dH.connect=void 0;var m16=nC$();Object.defineProperty(dH,"connect",{enumerable:!0,get:function(){return m16.connect}});d16(Bo(),dH)});function aC$($){let Z=$?.connectFn??t16,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:p16,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=cG(n16,i16,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?tC$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=rC$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function t16($){return oC$.connect($)}var tC$,oC$,rC$,i16=100,n16=3000,p16=3000;var sC$=B(()=>{W5();tC$=S(Gh(),1),oC$=S(pC$(),1),rC$=S(aO(),1)});function s$1($,Z){return`${$}.${Z}`}class e$1{cache;constructor($){this.cache=Qg({ttlMs:$?.ttlMs??o16,maxSize:$?.maxSize??r16})}async get($,Z){return this.cache.get(s$1($,Z))??null}async set($,Z,X){this.cache.set(s$1($,Z),X)}async invalidate($,Z){this.cache.delete(s$1($,Z))}teardown(){this.cache.clear()}}var o16=600000,r16=5000;var eC$=()=>{};function cE0($,Z){return`${$}:${Z}`}function $81($){let Z=Qg({ttlMs:$?.ttlMs??a16,maxSize:$?.maxSize??s16}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish($_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(cE0(K,N))},set(K,N,H){Z.set(cE0(K,N),H)},invalidate(K,N){Z.delete(cE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe($_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(cE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var $_$="studio.ai-provider-keys.invalidate",a16=30000,s16=5000;var Z_$=()=>{};class Z81{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=X_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of X_$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var X_$;var G_$=B(()=>{X_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Y_$=($)=>{let Z;return()=>Z??=$()},X81,G81;var Q_$=B(()=>{K5();X81=Y_$(()=>J8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),G81=Y_$(()=>J8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Q$6(){return{name:BH,subjects:[`${aw0}.>`],storage:C3.StorageType.File,max_age:Z$6,max_bytes:G$6,max_msgs_per_subject:Y$6,discard:C3.DiscardPolicy.Old,retention:C3.RetentionPolicy.Limits,duplicate_window:X$6,num_replicas:1}}class K_${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 J_$($){let Z=W_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function N$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,$$6().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 H$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class Y81{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=Q$6(),X=await lG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await C3.jetstreamManager($);try{await G.streams.info(BH),await G.streams.update(BH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(BH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:H$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){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 Q=N$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=OK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=yp0(N,{runId:Z}),U=performance.now()-H;if(X81().record(U),G81().add(1,{"org.id":G??"unknown"}),K$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?J_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),W$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=yp0(Z,{runId:$,dedup:X});if(X81().record(performance.now()-Y),G81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:J_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=wK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?C3.DeliverPolicy.New:C3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=GO($),W;try{W=await(await G.consumers.get(BH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=XO0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(sw0()).pipeThrough(ew0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(BH,{filter:GO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var C3,W_$,e16=($)=>{let Z;return()=>Z??=$()},$$6,Z$6=86400000000000,X$6=120000000000,G$6=4294967296,Y$6=500000,J$6,W$6,K$6;var N_$=B(()=>{W5();gp0();GO0();$O0();K5();Q_$();C3=S(aO(),1),W_$=S(Gh(),1),$$6=e16(()=>J8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));J$6=process.env.STREAM_ENCODE_TRACE==="1",W$6=process.env.DECOPILOT_STREAM_TRACE==="1";K$6=J$6?new K_$:null});function lE0($,Z,X,G){if(!G)return!1;return $.emit(Z,a3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var H_$=B(()=>{O8()});class Q81{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as F$6,rm as dE0}from"fs/promises";import{join as mE0}from"path";async function iE0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-U$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await CC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await F_$($,Y,Z);else if(!Y.startsWith(".")){let Q=mE0($,Y),J=await CC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await F_$(Q,K,Z)}if((await CC(Q)).length===0)await dE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function F_$($,Z,X){let G=0,Y=mE0($,Z),Q=await CC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=mE0(Y,W),N=await CC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=mE0(K,F);await dE0(w,{recursive:!0,force:!0}),G++}}if((await CC(K)).length===0)await dE0(K,{recursive:!0,force:!0})}if((await CC(Y)).length===0)await dE0(Y,{recursive:!0,force:!0});return G}async function CC($){try{return(await F$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var U$6=30;var J81=()=>{};import{DBOS as W81,SchedulerMode as w$6}from"@dbos-inc/dbos-sdk";async function B$6(){let $=[aQ(),_C(),kK()],Z=0;for(let X of $)try{Z+=await iE0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function D$6($,Z){await W81.runStep(()=>B$6(),{name:"monitoringRetention"})}function w_$(){if(U_$)return;U_$=!0;let $=W81.registerWorkflow(D$6,{name:"monitoringRetentionWorkflow"});W81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:O$6,mode:w$6.ExactlyOncePerIntervalWhenActive})}var O$6="23 4 * * *",U_$=!1;var O_$=B(()=>{dG();J81()});function B_$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await ww.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await Hc0($.db,Z,G.role);return Y.boundAuth=Nc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new pD(X,void 0,Y.boundAuth,G.role,"self"),G50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var D_$=B(()=>{tD();ji()});function L$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function z$6(){for(let $ of E$6)$()}function L_$($){let Z=[...K81.logs,$];K81={...K81,logs:Z.length>500?Z.slice(-500):Z},z$6()}function N81(){return j$6}var K81,E$6,j$6=!1;var H81=B(()=>{K81=L$6(),E$6=new Set});import{EventEmitter as P$6}from"events";var F81;var E_$=B(()=>{H81();F81=new P$6;F81.on("request",($)=>{L_$($)})});function z_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Cg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Cg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${p6.tool}${w}${p6.dim}(${L})${p6.reset}`}else if(U.method)Q=`${p6.dim}${Cg(U.method)}${p6.reset}`}}catch{}}let W=Cg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${p6.mcp}${Cg(H.slice(0,12))}\u2026${p6.reset}`}else if(Y==="/mcp")W=`${p6.mcp}/mcp${p6.reset}`;else if(Y==="/mcp/registry")W=`${p6.mcp}/mcp/registry${p6.reset}`;let K=T$6(G),N=J?"\u25C0":"\u2190";if(!N81())console.log(`${p6.dim}${N}${p6.reset} ${K}${G}${p6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=A$6(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!N81())console.log(`${p6.dim}${O}${p6.reset} ${K}${G}${p6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${p6.reset} ${p6.duration}${w}${p6.reset}`);F81.emit("request",{method:G,path:Cg(Y),status:F,duration:H,timestamp:new Date})}}}var p6,A$6=($)=>{if($>=500)return p6.serverError;if($>=400)return p6.clientError;if($>=300)return p6.redirect;return p6.ok},T$6=($)=>{return p6[$]||p6.reset},Cg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var j_$=B(()=>{H81();E_$();p6={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 R_$}from"crypto";import{mkdir as R$6,readdir as I$6,rm as P_$,stat as I_$}from"fs/promises";import{join as w81,relative as q$6}from"path";import{z as L$}from"zod";function M_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return w81(M$6,Z)}function k_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function U81($,Z){let X=M_$($),G=k_$(Z);return w81(X,G)}function k$6($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return R_$("sha256",Y).update(Q).digest("hex")}function T_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=k$6(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${k_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function S_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${R_$("md5","etag").update(G).digest("hex")}"`}async function V_$($,Z,X,G,Y){try{let Q=await I$6($,{withFileTypes:!0});for(let J of Q){let W=w81($,J.name),N=q$6(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await V_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await I_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:S_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function C_$($,Z){let G=e($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=M_$(G);await R$6(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await V_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=U81(G,Q.key),W=await I_$(J);return{contentType:K11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:S_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??A_$;return{url:T_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??A_$;return{url:T_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=U81(G,Q.key);try{return await P_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=U81(G,K);try{await P_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function O81($,Z,X){let G=C_$(Z,X),Y=new WW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:s6});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new yX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function __$($,Z,X,G){let Q=C_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.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 M$6="./data/assets",A_$=3600,q_$,v_$;var b_$=B(()=>{V$();Hy();u8();Xl();xV();PX();XE0();q_$=new D1;q_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return O81($.req.raw,Z,G)});v_$=q_$});var f_$={};N4(f_$,{mountDevRoutes:()=>S$6});function S$6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return O81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await __$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",v_$);let X=new D1;X.use("*",k3({mountPath:"/api/dev-assets"})),X.route("/",ZE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var x_$=B(()=>{u8();$11();XE0();b_$()});import{sql as V$6}from"kysely";import{randomUUID as y_$}from"crypto";import{z as C$6}from"zod";async function v$6($){let Z=new Date().toISOString(),X=y_$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),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","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:y_$(),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 V$6`SELECT
|
|
2727
2727
|
pg_notify('studio_events', ${X}),
|