decocms 4.315.4 → 4.315.5
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-7Jfb87lc.js → AlertCircle-0kvlkfFx.js} +1 -1
- package/dist/client/assets/{AreaChart-C1sLAZXd.js → AreaChart-BSlj4Tpd.js} +1 -1
- package/dist/client/assets/{ArrowLeft-EM4zj0u9.js → ArrowLeft-DRFr88Cg.js} +1 -1
- package/dist/client/assets/{ArrowUp-Bs4KogVd.js → ArrowUp-BS59FoiX.js} +1 -1
- package/dist/client/assets/{Check-Cz5ybwnT.js → Check-Ch7XvbEm.js} +1 -1
- package/dist/client/assets/{CheckCircle-DJ_vu6TS.js → CheckCircle-DE8PvW7I.js} +1 -1
- package/dist/client/assets/{ChevronDown-DmG6zULp.js → ChevronDown-BWMHMaza.js} +1 -1
- package/dist/client/assets/{ChevronRight-BHI6jrPA.js → ChevronRight-DFINNoqY.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-DJZqMqwx.js → ChevronSelectorVertical-Du-nC8hE.js} +1 -1
- package/dist/client/assets/{ChevronUp-C2BOP73m.js → ChevronUp-CFmGarfC.js} +1 -1
- package/dist/client/assets/{Copy01-Mw2tcRv4.js → Copy01-DhQIiRTO.js} +1 -1
- package/dist/client/assets/{CreditCard01-COH_YH1w.js → CreditCard01-LTpxY8_-.js} +1 -1
- package/dist/client/assets/{DotsVertical-kKH_s5Wo.js → DotsVertical-ChDzuVkn.js} +1 -1
- package/dist/client/assets/{Download01-CgFk6OHc.js → Download01-BbcCtTcl.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DiRr4PKB.js → ErrorBarContext-20kGZrx4.js} +1 -1
- package/dist/client/assets/{Eye-BVBYkmdU.js → Eye-B6H3oVbc.js} +1 -1
- package/dist/client/assets/{FilterLines-BDAQS0Ze.js → FilterLines-dpj5Undx.js} +1 -1
- package/dist/client/assets/{GitBranch01-C9Th2Q_a.js → GitBranch01-ChenOD57.js} +1 -1
- package/dist/client/assets/{Globe01-d7T3SOqP.js → Globe01-Dofx5Paq.js} +1 -1
- package/dist/client/assets/{Globe04-D3Xph4ra.js → Globe04-B6_RhTRi.js} +1 -1
- package/dist/client/assets/{HardDrive-Ca55gnrD.js → HardDrive-DAZAfKoV.js} +1 -1
- package/dist/client/assets/{Image01-BLGmzVM3.js → Image01-CFLL0K9t.js} +1 -1
- package/dist/client/assets/{Key01-CC7hjvGM.js → Key01-DBLWzGQN.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Cze5qR4a.js → LinkExternal01-DDXWhhRM.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-CID2l9j7.js → LockUnlocked01-BbBP1gev.js} +1 -1
- package/dist/client/assets/{LogOut01-B5VcX9N4.js → LogOut01-DxOgJkEs.js} +1 -1
- package/dist/client/assets/{Monitor01-CoHTyl4f.js → Monitor01-DaSgoaIp.js} +1 -1
- package/dist/client/assets/{Package-D9M5sSd5.js → Package-DzhkFPnl.js} +1 -1
- package/dist/client/assets/{Palette-BQC6nVrF.js → Palette-D1LwSC1w.js} +1 -1
- package/dist/client/assets/{Play-B8M4KfmE.js → Play-Bo300jEz.js} +1 -1
- package/dist/client/assets/{Plus-B24lRZxc.js → Plus-BSszbsXb.js} +1 -1
- package/dist/client/assets/{SearchLg-Mnhu45QY.js → SearchLg-W7x8dr9H.js} +1 -1
- package/dist/client/assets/{SearchMd-KpCM7Z0Z.js → SearchMd-CnsYf856.js} +1 -1
- package/dist/client/assets/{Sector-C1SBBn0h.js → Sector-BeZP8KyS.js} +1 -1
- package/dist/client/assets/{Settings02-B7g1M_6v.js → Settings02-D5CL850_.js} +1 -1
- package/dist/client/assets/{Share07-DtJK8ufx.js → Share07-Ctiu33pn.js} +1 -1
- package/dist/client/assets/{Shield01-Cu25ad2D.js → Shield01-s-_aTJlZ.js} +1 -1
- package/dist/client/assets/{Stars01-Wjy3qIwg.js → Stars01-VIQCx_vR.js} +1 -1
- package/dist/client/assets/{Stars02-caOdWGfu.js → Stars02-BJMVV21m.js} +1 -1
- package/dist/client/assets/{Sun-BlHwI0EC.js → Sun-IKywmUoZ.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-pa81FDF-.js → SwitchHorizontal01-Cba6ppdy.js} +1 -1
- package/dist/client/assets/{Tool01-CA3QFS5I.js → Tool01-Cl4VKKgc.js} +1 -1
- package/dist/client/assets/{Tool02-Bxu0Q39Z.js → Tool02-B5iH279h.js} +1 -1
- package/dist/client/assets/{Trash01-BA1KGFrn.js → Trash01-BdA9FzsR.js} +1 -1
- package/dist/client/assets/{TrendUp01-CSktU1au.js → TrendUp01-Ca-tztd_.js} +1 -1
- package/dist/client/assets/{Upload01-CPuFr-0W.js → Upload01-Dj3w2jeB.js} +1 -1
- package/dist/client/assets/{User01-C29jlNGJ.js → User01-D9XnXgTj.js} +1 -1
- package/dist/client/assets/{UserSquare-CVIggQYG.js → UserSquare-DF5END3z.js} +1 -1
- package/dist/client/assets/{Users01-BiyOy3ja.js → Users01-CE1oNsN3.js} +1 -1
- package/dist/client/assets/{Users03-Ajuxocqu.js → Users03-DmKWxVtA.js} +1 -1
- package/dist/client/assets/{XCircle-D_dx8RWA.js → XCircle-DpxmUvSo.js} +1 -1
- package/dist/client/assets/{XClose-D5Ftz7WI.js → XClose-BMJK9f-x.js} +1 -1
- package/dist/client/assets/{YAxis-CE9_N-wO.js → YAxis-BjAlr6ta.js} +1 -1
- package/dist/client/assets/{Zap-obMYHz-w.js → Zap-C4zHukNx.js} +1 -1
- package/dist/client/assets/{ZapSquare-GKcY6TuC.js → ZapSquare-DK1cXxdW.js} +1 -1
- package/dist/client/assets/{ZoomOut-CL93SZJl.js → ZoomOut-CCO46vqk.js} +1 -1
- package/dist/client/assets/{access-gate-C1n7ySXH.js → access-gate-DSMDBRxa.js} +1 -1
- package/dist/client/assets/{agent-icon-Dcu6boRt.js → agent-icon-CkeLlYX7.js} +1 -1
- package/dist/client/assets/{agents-list-DvvdWyAU.js → agents-list-pmZPwazB.js} +1 -1
- package/dist/client/assets/{ai-providers-Bu__kYVD.js → ai-providers-NSTni3hF.js} +1 -1
- package/dist/client/assets/{alert-CJbWcmXa.js → alert-B0HjmAaP.js} +1 -1
- package/dist/client/assets/{alert-dialog-B_y9mxr6.js → alert-dialog-jXbLmp2B.js} +1 -1
- package/dist/client/assets/{analytics-tab-BJzq4raf.js → analytics-tab-pl6ZXZ8X.js} +1 -1
- package/dist/client/assets/{api-keys-BXTzQ04d.js → api-keys-B7df8xXw.js} +1 -1
- package/dist/client/assets/{app-editor-DPooFBgO.js → app-editor-DIh55X3x.js} +1 -1
- package/dist/client/assets/{auth-_eL4FNDp.js → auth-SUyXVZor.js} +1 -1
- package/dist/client/assets/{auth-catchall-DofvsW2e.js → auth-catchall-G5LPLbxi.js} +1 -1
- package/dist/client/assets/{auth-entry-CjBSzrMz.js → auth-entry-DqDFMdNn.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CyrA5MSZ.js → auth-split-layout-B_NI6s0f.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BqbqcU-f.js → authenticate-and-persist-oauth-ocLo76z1.js} +1 -1
- package/dist/client/assets/{automation-list-row-Bn1B3NZm.js → automation-list-row-Cu9d1NjX.js} +1 -1
- package/dist/client/assets/{automation-runs-iKbYnC2z.js → automation-runs-B0KgalzZ.js} +1 -1
- package/dist/client/assets/{automations-CIpBZU5u.js → automations-DQacmBs_.js} +1 -1
- package/dist/client/assets/{avatar-DJGPiSGk.js → avatar-XKNenDYs.js} +1 -1
- package/dist/client/assets/{badge-FNf4N78c.js → badge-Dz9RbCLy.js} +1 -1
- package/dist/client/assets/{block-document-RnSD0v2h.js → block-document-DQUm025G.js} +1 -1
- package/dist/client/assets/{breadcrumb-dDWXdAhp.js → breadcrumb-B4ee1MxP.js} +1 -1
- package/dist/client/assets/{buckets-BdZc6HtM.js → buckets-6ERCHYip.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BPAw_4cy.js → bulk-category-panel-C_NYtwxi.js} +1 -1
- package/dist/client/assets/{capability-load-error-B8w2D3ED.js → capability-load-error-BWcJfHPr.js} +1 -1
- package/dist/client/assets/{cards-C-Lncjt9.js → cards-D1Haz93Y.js} +1 -1
- package/dist/client/assets/{category-editor-OztyovL1.js → category-editor-DOl2TmEF.js} +1 -1
- package/dist/client/assets/{cdn-tab-BdIM4o-W.js → cdn-tab-BZiO121v.js} +1 -1
- package/dist/client/assets/{chart-Ig3GAKUQ.js → chart-BGtpxuGL.js} +1 -1
- package/dist/client/assets/{chat-context-xbYSNi_3.js → chat-context-eXX2O3YQ.js} +1 -1
- package/dist/client/assets/{checkbox-CAyO22l9.js → checkbox-B4XEZKGb.js} +1 -1
- package/dist/client/assets/{choose-editor-O-bqGSzC.js → choose-editor-BOzmT2sJ.js} +1 -1
- package/dist/client/assets/{cli-auth-success-Bo34cwhK.js → cli-auth-success-BuKVmYZf.js} +1 -1
- package/dist/client/assets/{collection-detail-DxhCae9r.js → collection-detail-BCxUMUMy.js} +1 -1
- package/dist/client/assets/{collection-display-button-DA-Zh8hj.js → collection-display-button-ei2mw0F7.js} +1 -1
- package/dist/client/assets/{collection-search-D_VwAWxj.js → collection-search-Gb8MX7j3.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DQGP2Mv5.js → collection-table-wrapper-CDKn998y.js} +1 -1
- package/dist/client/assets/{collection-tabs-CvMUP4bT.js → collection-tabs-ByiHDh-E.js} +1 -1
- package/dist/client/assets/{command-Be_clIy4.js → command-k6-sfHjz.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-1dv7bVG_.js → commerce-onboarding-UyzHr_Lz.js} +1 -1
- package/dist/client/assets/{config-DqWBELpm.js → config-juraaSPp.js} +1 -1
- package/dist/client/assets/{connect-ptIhlJlv.js → connect-BDML8E0G.js} +1 -1
- package/dist/client/assets/{connection-2_STER8f.js → connection-D40ktz0U.js} +1 -1
- package/dist/client/assets/{connection-card-J_hULuQX.js → connection-card-C9XtLvJS.js} +1 -1
- package/dist/client/assets/{connection-detail-B32fhI9D.js → connection-detail-CeNH83R_.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-B6CUn5J5.js → connection-form-helpers-lLiiA-xt.js} +1 -1
- package/dist/client/assets/{connections-Bfv2C5uj.js → connections-BkjQqVKz.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-phOh4Fuo.js → decopilot-sse-pool-5bBrcisx.js} +1 -1
- package/dist/client/assets/{dialog-B1pjsupg.js → dialog-DeLwCAN9.js} +1 -1
- package/dist/client/assets/{domain-settings-C0hGDE4n.js → domain-settings-C8Kmz1_K.js} +1 -1
- package/dist/client/assets/{drawer-DRc2rDn1.js → drawer-DW79zEFo.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CJclM21S.js → dropdown-menu-CTj_WvYk.js} +1 -1
- package/dist/client/assets/{e2e-tab-D69FwysF.js → e2e-tab-DHWKNanx.js} +1 -1
- package/dist/client/assets/{editor-C2Cn2kXB.js → editor-BaeTQ9Cx.js} +1 -1
- package/dist/client/assets/{empty-state-BRUHot0l.js → empty-state-6u7hnPWa.js} +1 -1
- package/dist/client/assets/{empty-state-B6Or8qk8.js → empty-state-CG7GQM3Q.js} +1 -1
- package/dist/client/assets/{extract-connection-data-83EFFT3M.js → extract-connection-data-C9AC5u4x.js} +1 -1
- package/dist/client/assets/{file-explorer-COPmfjri.js → file-explorer-BcAdonVr.js} +1 -1
- package/dist/client/assets/{file-type-icon-BrcAuj9x.js → file-type-icon-7fUe3Hc5.js} +1 -1
- package/dist/client/assets/{folder-icon-CdZvsRaJ.js → folder-icon-CVqxLSMV.js} +1 -1
- package/dist/client/assets/{form-DBAQC4zc.js → form-b33ETHGN.js} +1 -1
- package/dist/client/assets/{general-DkTYAYjm.js → general-DdcwBPo2.js} +1 -1
- package/dist/client/assets/{github-repo-picker-B55LyloW.js → github-repo-picker-CVloahOs.js} +1 -1
- package/dist/client/assets/{hooks-B-EEIXAf.js → hooks-Be-CFm5-.js} +1 -1
- package/dist/client/assets/{hosting-tab-WShN8RhE.js → hosting-tab-C7UuuvFe.js} +1 -1
- package/dist/client/assets/{index-DPBVnFEP.js → index-B7kVxTaJ.js} +1 -1
- package/dist/client/assets/{index-DyX4u9kr.js → index-BY4DX7zi.js} +1 -1
- package/dist/client/assets/{index-D7S86jgm.js → index-D8JufLNG.js} +1 -1
- package/dist/client/assets/{index-CwjVo5ln.js → index-DhVodCLv.js} +1 -1
- package/dist/client/assets/{index-C85mRaev.js → index-Dt97KCtB.js} +3 -3
- package/dist/client/assets/{index-C-FMwKHC.js → index-JJP8_j9N.js} +1 -1
- package/dist/client/assets/{index-CXYmjOV8.js → index-fDxngA4J.js} +1 -1
- package/dist/client/assets/{index-CW0JewdN.js → index-k8OfmDQh.js} +6 -6
- package/dist/client/assets/{index-C8MEgXrM.js → index-pryGXDLQ.js} +1 -1
- package/dist/client/assets/{index-redirect-BPDweonN.js → index-redirect-DcK3aGrA.js} +1 -1
- package/dist/client/assets/{infra-billing-DGOYyKxq.js → infra-billing-X3msywRV.js} +1 -1
- package/dist/client/assets/{input-C921jB-R.js → input-CegAOKR8.js} +1 -1
- package/dist/client/assets/{integration-icon-CVN20U0t.js → integration-icon-BzlzLNrd.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BrJaKqJA.js → invite-member-dialog-DcihDeUr.js} +1 -1
- package/dist/client/assets/{label-CSpYDeu9.js → label-enBPY1ej.js} +1 -1
- package/dist/client/assets/{layout-DNAQuYwH.js → layout-CxKGbWg7.js} +1 -1
- package/dist/client/assets/{login-0xBUANYq.js → login-DG_7yycB.js} +1 -1
- package/dist/client/assets/{markdown-DxVpUYjU.js → markdown-B1en8SpU.js} +1 -1
- package/dist/client/assets/{mcp-oauth-mZo0K9o1.js → mcp-oauth-BAjD9a60.js} +1 -1
- package/dist/client/assets/{members-DrlBPA7T.js → members-E3pbVP-T.js} +1 -1
- package/dist/client/assets/{monaco-editor--3LPxlij.js → monaco-editor-DLdPcTaL.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D18-RVfx.js → monitoring-stats-row-BZBho4cf.js} +1 -1
- package/dist/client/assets/{multi-select-V5FuVxbx.js → multi-select-fYcYHcW6.js} +1 -1
- package/dist/client/assets/{oauth-callback-DPioWlJl.js → oauth-callback-TzN6NTMM.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DOxgqN2R.js → oauth-callback-ai-provider-DmJIoG7W.js} +1 -1
- package/dist/client/assets/{onboarding-CmxIaE_d.js → onboarding-CtAOcj2-.js} +1 -1
- package/dist/client/assets/{org-layout-De-pp7RZ.js → org-layout-Bp_j0RhZ.js} +1 -1
- package/dist/client/assets/{organization-choice-DzghAjlq.js → organization-choice-V3IKTHLn.js} +1 -1
- package/dist/client/assets/{orgs-DsDyFGBw.js → orgs-BprZ89YY.js} +1 -1
- package/dist/client/assets/{page-seo-form-CnEvCtdx.js → page-seo-form-CGHCwbPx.js} +1 -1
- package/dist/client/assets/{popover-BUhZahPt.js → popover-BEuSVE6K.js} +1 -1
- package/dist/client/assets/{post-calendar-C05ySBZ-.js → post-calendar-BuoTJVcA.js} +1 -1
- package/dist/client/assets/{post-editor-BFluTi45.js → post-editor-BykO0K4S.js} +1 -1
- package/dist/client/assets/{primitives-43WR_EHn.js → primitives-CyFX3vg2.js} +1 -1
- package/dist/client/assets/{profile-DeT1EJ1n.js → profile-W4CJDEZk.js} +1 -1
- package/dist/client/assets/{project-app-view-yvQqxnyg.js → project-app-view-CaLP-fVC.js} +1 -1
- package/dist/client/assets/{prompts-Ol5f9fi3.js → prompts-BYAXW4dv.js} +1 -1
- package/dist/client/assets/record-editor-CFfQR78W.js +1 -0
- package/dist/client/assets/{redirect-editor-B1KpSKPQ.js → redirect-editor-BZPeVZfW.js} +1 -1
- package/dist/client/assets/registry-CeEvWKx-.js +2 -0
- package/dist/client/assets/{registry-layout-vr322moB.js → registry-layout-CQ2r98YY.js} +1 -1
- package/dist/client/assets/{reports-CBbTaXPQ.js → reports-BfO99pUy.js} +1 -1
- package/dist/client/assets/{require-capability-BkAaQJsB.js → require-capability-DltUqOlT.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DXj6tn89.js → required-auth-layout-dj7Sr9jK.js} +1 -1
- package/dist/client/assets/{reset-password-DURHhIQj.js → reset-password-BxsDxiir.js} +1 -1
- package/dist/client/assets/{review-settings-vBMKD5M4.js → review-settings-Q1GhK1bz.js} +1 -1
- package/dist/client/assets/{roles-kjTc_NGd.js → roles-DFHNW9N1.js} +1 -1
- package/dist/client/assets/{scroll-area-D0y4hwjA.js → scroll-area-UcdHV1M6.js} +1 -1
- package/dist/client/assets/{search-input-CFrUhhrq.js → search-input-eEuhK0-_.js} +1 -1
- package/dist/client/assets/{secrets-BjNuvY7w.js → secrets-BKpiM5PG.js} +1 -1
- package/dist/client/assets/{sections-editor-CBldR4J4.js → sections-editor-BuGtXS5e.js} +1 -1
- package/dist/client/assets/{select-CG4I2e-D.js → select-cyA58mtf.js} +1 -1
- package/dist/client/assets/{select-model-Dij62Rk7.js → select-model-ZlQSi8c6.js} +1 -1
- package/dist/client/assets/{self-tool-result-Bb2kcBne.js → self-tool-result-D5x8yEMk.js} +1 -1
- package/dist/client/assets/{seo-editor-09I6yof4.js → seo-editor-BTasfWI2.js} +1 -1
- package/dist/client/assets/{settings-layout-CjarVkLa.js → settings-layout-gT5FF-1o.js} +1 -1
- package/dist/client/assets/{shell-controls-Gj2SpLsW.js → shell-controls-eY-orWrT.js} +1 -1
- package/dist/client/assets/{shell-layout-C1CGo2l8.js → shell-layout-DdsxhB21.js} +1 -1
- package/dist/client/assets/{skill-preview-BSStPPvx.js → skill-preview-B_p0GXRI.js} +1 -1
- package/dist/client/assets/{skills-Bl1CIUba.js → skills-BV7KHt99.js} +1 -1
- package/dist/client/assets/{spinner-DALVMbY4.js → spinner-Dwy_Zqc5.js} +1 -1
- package/dist/client/assets/{sso-DNeZ7Mkv.js → sso-DWUCNQzR.js} +1 -1
- package/dist/client/assets/{store-D2YykQ-o.js → store-CFmmvGoK.js} +1 -1
- package/dist/client/assets/store-registry-3YjQgmjp.js +2 -0
- package/dist/client/assets/{super-agent-icon-Dbm8DAE2.js → super-agent-icon-CPBxj4cS.js} +1 -1
- package/dist/client/assets/{switch-C2zrqqfi.js → switch-lEhetph2.js} +1 -1
- package/dist/client/assets/{synced-repos-DOQF9pMb.js → synced-repos-BY0no6Oe.js} +1 -1
- package/dist/client/assets/{table-CgCqMjxl.js → table-DgMyThWh.js} +1 -1
- package/dist/client/assets/{tabs-Dql2cBut.js → tabs-B3inpX0e.js} +1 -1
- package/dist/client/assets/{task-board-KyWxDa5P.js → task-board-BNSf6B_V.js} +1 -1
- package/dist/client/assets/{tasks-CnffigHM.js → tasks-A3Jqf6LD.js} +1 -1
- package/dist/client/assets/{textarea-CfnnJopH.js → textarea-CMiD_PCJ.js} +1 -1
- package/dist/client/assets/{thread-route-BGWJ9_UQ.js → thread-route-C5SpE5fT.js} +1 -1
- package/dist/client/assets/{toggle-group-BGpECXHA.js → toggle-group-ByTex3TH.js} +1 -1
- package/dist/client/assets/{toolbar-BqmHbaOK.js → toolbar-DmQiprwC.js} +1 -1
- package/dist/client/assets/{track-B4d6DVsU.js → track-DRaMWWRf.js} +1 -1
- package/dist/client/assets/{types-BoigVi8v.js → types-DHkWYJ8m.js} +1 -1
- package/dist/client/assets/{use-ai-providers-Qpy-Bq2R.js → use-ai-providers-BJ5qe7Pv.js} +1 -1
- package/dist/client/assets/{use-api-keys-ClxPbAOk.js → use-api-keys-hgYmpoAV.js} +1 -1
- package/dist/client/assets/{use-automations-dsacQ6MD.js → use-automations-ClKJ7btN.js} +1 -1
- package/dist/client/assets/{use-autosave-CLeNL7gP.js → use-autosave-BrNC97Uy.js} +1 -1
- package/dist/client/assets/{use-connection-BK9JheSY.js → use-connection-BeKx2T7i.js} +1 -1
- package/dist/client/assets/{use-copy-DLEZPBoe.js → use-copy-DACyHVcs.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CR6zJrPM.js → use-create-virtual-mcp-UmX4_LCB.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DEbH8gX8.js → use-debounced-autosave-1-7xGDRl.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CiT_ysgR.js → use-debounced-value-BzAasRvN.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CXVverhx.js → use-decopilot-events-Bthd3dN4.js} +1 -1
- package/dist/client/assets/{use-delete-connection--w1qBsgP.js → use-delete-connection-BEGhsrHv.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BmHOmvXX.js → use-deployment-admin-COw9Bhp-.js} +1 -1
- package/dist/client/assets/{use-destination-route-BV_FeLjZ.js → use-destination-route-BC2bG0WM.js} +1 -1
- package/dist/client/assets/{use-file-configs-COQ1BOO9.js → use-file-configs-BXvZdWv2.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DZorp9X1.js → use-infinite-scroll-C3GNOON0.js} +1 -1
- package/dist/client/assets/{use-join-requests-ByTiyPIW.js → use-join-requests-DF5XUx4n.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CsdIlgxV.js → use-mcp-auth-status-D9dzKzXy.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DAR9aeVq.js → use-mcp-client-D7aqLPqI.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-T8f93HI-.js → use-mcp-tools-B16RGFt8.js} +1 -1
- package/dist/client/assets/{use-members-BBU0jIOq.js → use-members-H7rntGx_.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DrF0KM7M.js → use-navigate-to-agent-D0UCsG7p.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BSfHsFnJ.js → use-org-auth-client-CXEG_7CR.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DCsPsp1A.js → use-org-repo-syncs-BXobd9-k.js} +1 -1
- package/dist/client/assets/{use-org-sso-ClvPNH1c.js → use-org-sso-DgljvHre.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BXrHn0D1.js → use-organization-roles-Cf8ftdV8.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DNwts9XE.js → use-organization-settings-DLo4IX5v.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-3KZFrva-.js → use-panel-navigate-BLxyLVOQ.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DpTFIu2O.js → use-registry-connections-BLaO7y5N.js} +1 -1
- package/dist/client/assets/{use-secrets-DvcCy_qi.js → use-secrets-BoqRX8zf.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-Cp9dpuj4.js → use-section-preview-base-DL4C5n5v.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Bav4GQTG.js → use-status-sounds-CBm7LvpG.js} +1 -1
- package/dist/client/assets/{use-tags-BcqzIQy0.js → use-tags-B6zTsEab.js} +1 -1
- package/dist/client/assets/{use-view-mode-C8vXj2KI.js → use-view-mode-DGrSD9P9.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DCiMUiab.js → use-virtual-mcp-BKQVw1xM.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BJ2ttwqe.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-YvM02gxI.js +1 -0
- package/dist/client/assets/{users-CjQOs8yu.js → users-B1Qtblcf.js} +1 -1
- package/dist/client/assets/{variant-calendar-DdtKbNFN.js → variant-calendar-DBOoTWLt.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-D_VAAngm.js → view-mode-toggle-NKPL-pS9.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/record-editor-DdwK5XR9.js +0 -1
- package/dist/client/assets/registry-gVecRAJT.js +0 -2
- package/dist/client/assets/store-registry-DegGusYU.js +0 -2
- package/dist/client/assets/useInfiniteQuery-CRtjOs4e.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BC2HW6hb.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
<meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
|
|
51
51
|
<meta name="twitter:image" content="/og-image.png" />
|
|
52
52
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
53
|
-
<script type="module" crossorigin src="/assets/index-
|
|
53
|
+
<script type="module" crossorigin src="/assets/index-Dt97KCtB.js"></script>
|
|
54
54
|
<link rel="stylesheet" crossorigin href="/assets/index-DZ3ZDC5F.css">
|
|
55
55
|
</head>
|
|
56
56
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -1508,7 +1508,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var yn1=L(()=>{Fb()});f
|
|
|
1508
1508
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await fy`
|
|
1509
1509
|
DELETE FROM kysely_migration WHERE name = ${X}
|
|
1510
1510
|
`.execute($)}}async function gs1($){await O04($),await L04($);let Z=new bs1({db:$,provider:{getMigrations:()=>Promise.resolve(In0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function D04($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Om0();let G=X??U8(),J=async()=>{if(!Z&&!X)await FO(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await gs1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function w04(){let $=U8(),Z=new bs1({db:$.db,provider:{getMigrations:()=>Promise.resolve(In0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var us1=L(()=>{fs1();Lm0();FX()});async function g70($){let Z={...process.env},X=S80($,Z);console.log(hE1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Oo1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (lZ0(),cZ0)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Lm0(),Do1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (FX(),_t1)),{migrateToLatest:F}=await Promise.resolve().then(() => (us1(),hs1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{}};return gn1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var qn0=L(()=>{Fb();Lo1();P$()});var ds1={};e(ds1,{updateService:()=>Yj,subscribeCliState:()=>kn0,setTuiConsoleIntercepted:()=>h70,setServerUrl:()=>xp,setMigrationsDone:()=>vp,setDevMode:()=>j04,resetCliStateForTests:()=>E04,isTuiConsoleIntercepted:()=>u70,getCliState:()=>Vn0,addLogEntry:()=>wO});function cs1(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function ls1(){return{services:cs1(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function E04(){nQ=ls1()}function _p(){for(let $ of Mn0)$()}function Vn0(){return nQ}function kn0($){return Mn0.add($),()=>Mn0.delete($)}function Yj($){nQ={...nQ,services:nQ.services.map((Z)=>Z.name===$.name?$:Z)},_p()}function vp(){nQ={...nQ,migrationsStatus:"done"},_p()}function xp($){nQ={...nQ,serverUrl:$},_p()}function wO($){let Z=[...nQ.logs,$];nQ={...nQ,logs:Z.length>500?Z.slice(-500):Z},_p()}function j04(){nQ={...nQ,services:[...cs1(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},_p()}function h70($){ms1=$}function u70(){return ms1}var nQ,Mn0,ms1=!1;var Gj=L(()=>{nQ=ls1();Mn0=new Set});import{createServer as is1}from"net";function z04($){return new Promise((Z)=>{let X=is1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function fp($){if(await z04($))return $;let Z=await new Promise((X,Q)=>{let Y=is1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var Sn0=()=>{};var _n0={};e(_n0,{startDevServer:()=>A04,pipeToLogStore:()=>Cn0});import{join as P04}from"path";function Cn0($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
|
|
1511
|
-
`);Q=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;wO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}}catch{}if(Q.trim()){let G=Bun.stripANSI(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)wO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function A04($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await fp(Number(Y)+1):await fp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await g70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)Yj({name:D.name,status:"ready",port:D.port});vp();let F=P04(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Cn0(U.stdout),Cn0(U.stderr);xp(G),Yj({name:"Vite",status:"ready",port:Number(Y)}),Yj({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (lZ0(),cZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var vn0=L(()=>{qn0();Gj();Sn0()});var c70;var xn0=L(()=>{c70={name:"decocms",version:"4.315.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as R04,Text as ps1}from"ink";import{jsx as I04,jsxs as ns1}from"react/jsx-runtime";function ts1({version:$}){return ns1(R04,{flexDirection:"column",marginTop:1,children:[N70.map((Z,X)=>I04(ps1,{color:U70[X],children:Z},X)),ns1(ps1,{dimColor:!0,children:[" v",$]})]})}var os1=L(()=>{zp()});import{Box as Jj,Text as EO}from"ink";import{Spinner as q04}from"@inkjs/ui";import{jsx as HG,jsxs as by}from"react/jsx-runtime";function rs1({status:$}){if($==="pending")return HG(q04,{label:""});return HG(EO,{color:"green",children:"\u2713"})}function M04($){return`${$.name}: ${$.port||"...."}`}function as1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return by(Jj,{flexDirection:"column",paddingBottom:1,children:[HG(ts1,{version:c70.version}),HG(Jj,{marginBottom:1,children:HG(EO,{dimColor:!0,children:"\u2500".repeat(80)})}),HG(Jj,{children:by(EO,{dimColor:!0,children:["Home: ",X]})}),by(Jj,{gap:2,children:[$.map((Y)=>by(Jj,{gap:1,children:[HG(EO,{children:M04(Y)}),HG(rs1,{status:Y.status})]},Y.name)),by(Jj,{gap:1,children:[HG(EO,{children:"Migrations"}),HG(rs1,{status:Z})]})]}),HG(Jj,{children:Q?by(EO,{children:["Open in browser: ",HG(EO,{color:"cyan",children:Q})]}):HG(EO,{dimColor:!0,children:"Starting..."})})]})}var ss1=L(()=>{xn0();os1()});import{Box as V04,Text as bp}from"ink";import{jsx as fn0,jsxs as bn0}from"react/jsx-runtime";function k04($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function es1({logs:$}){return fn0(V04,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return fn0(bp,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return bn0(bp,{children:[bn0(bp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),fn0(bp,{color:k04(Z.status),children:Z.status}),bn0(bp,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var $e1=()=>{};var yn0={};e(yn0,{App:()=>_04});import{Box as S04}from"ink";import{useSyncExternalStore as C04}from"react";import{jsx as Ze1,jsxs as v04}from"react/jsx-runtime";function _04({home:$}){let Z=C04(kn0,Vn0);return v04(S04,{flexDirection:"column",children:[Ze1(as1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Ze1(es1,{logs:Z.logs})]})}var gn0=L(()=>{ss1();$e1();Gj()});var a3="thread-gate",PN="decopilot-hosted-harness",AN="decopilot-hosted-harness-sandboxed",AJ="automations",jO="background-tools",Kj="task-board-github-reads",zO="jira-push";var Xe1="10";function Qe1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Xe1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Ye1=()=>{};import x04 from"pg";async function Je1($,Z){let{databaseUrl:X,lockTimeoutMs:Q=f04}=$,Y=$.log??((W)=>console.log(W)),G=new x04.Client({connectionString:X});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[Ge1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=Q)throw Error(`Timed out after ${Q}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(b04)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[Ge1.toString()])}catch{}await G.end().catch(()=>{})}}var Ge1=8314027461559302n,f04=600000,b04=500;var Ke1=L(()=>{J4()});function y04(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function hn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function We1(){let $=y04();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:hn0($,"--cpu-prof-dir")??process.cwd(),name:hn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(hn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function He1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=$j();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),l70=setInterval(()=>void Z().catch(()=>{}),$),l70.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(l70)clearInterval(l70)}}var l70;var Fe1=()=>{};import*as g04 from"bun:jsc";function Ne1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{h04()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=u04()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var h04,u04;var Ue1=L(()=>{({startSamplingProfiler:h04,samplingProfilerStackTraces:u04}=g04)});function Be1(){We1();let $=[He1(),Rt1(),Ne1()];return()=>{for(let Z of $)Z()}}var Oe1=L(()=>{Gm0();Fe1();Ue1()});var Wj=x((Le1)=>{Object.defineProperty(Le1,"__esModule",{value:!0});Le1.RepublishHeaders=Le1.DirectMsgHeaders=Le1.JsHeaders=Le1.AdvisoryKind=void 0;Le1.isOrderedPushConsumerOptions=c04;Le1.isPullConsumer=l04;Le1.isPushConsumer=m04;Le1.isBoundPushConsumerOptions=d04;function c04($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function l04($){return $.isPullConsumer()}function m04($){return $.isPushConsumer()}function d04($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Le1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Le1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Le1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Le1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var FG=x((we1)=>{Object.defineProperty(we1,"__esModule",{value:!0});we1.TD=we1.TE=we1.Empty=void 0;we1.encode=e04;we1.decode=$14;we1.Empty=new Uint8Array(0);we1.TE=new TextEncoder;we1.TD=new TextDecoder;function s04(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function e04(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(we1.TE.encode($[X]));if(Z.length===0)return we1.Empty;if(Z.length===1)return Z[0];return s04(...Z)}function $14($){if(!$||$.length===0)return"";return we1.TD.decode($)}});var NG=x((ze1)=>{Object.defineProperty(ze1,"__esModule",{value:!0});ze1.errors=ze1.PermissionViolationError=ze1.NoRespondersError=ze1.TimeoutError=ze1.RequestError=ze1.ProtocolError=ze1.ConnectionError=ze1.DrainingConnectionError=ze1.ClosedConnectionError=ze1.AuthorizationError=ze1.UserAuthenticationExpiredError=ze1.InvalidOperationError=ze1.InvalidArgumentError=ze1.InvalidSubjectError=void 0;class cn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ze1.InvalidSubjectError=cn0;class m70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new m70(`${$} ${Z}`,X)}}ze1.InvalidArgumentError=m70;class ln0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ze1.InvalidOperationError=ln0;class d70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new d70($);return null}}ze1.UserAuthenticationExpiredError=d70;class i70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new i70($);return null}}ze1.AuthorizationError=i70;class mn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ze1.ClosedConnectionError=mn0;class dn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ze1.DrainingConnectionError=dn0;class in0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ze1.ConnectionError=in0;class pn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ze1.ProtocolError=pn0;class nn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof p70}}ze1.RequestError=nn0;class tn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ze1.TimeoutError=tn0;class p70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ze1.NoRespondersError=p70;class n70 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new n70($,X,Q,Y)}}ze1.PermissionViolationError=n70;ze1.errors={AuthorizationError:i70,ClosedConnectionError:mn0,ConnectionError:in0,DrainingConnectionError:dn0,InvalidArgumentError:m70,InvalidOperationError:ln0,InvalidSubjectError:cn0,NoRespondersError:p70,PermissionViolationError:n70,ProtocolError:pn0,RequestError:nn0,TimeoutError:tn0,UserAuthenticationExpiredError:d70}});var s3=x((Ie1)=>{Object.defineProperty(Ie1,"__esModule",{value:!0});Ie1.SimpleMutex=Ie1.Perf=void 0;Ie1.extend=w14;Ie1.render=E14;Ie1.timeout=j14;Ie1.delay=z14;Ie1.deadline=P14;Ie1.deferred=rn0;Ie1.debugDeferred=A14;Ie1.shuffle=T14;Ie1.collect=R14;Ie1.jitter=Re1;Ie1.backoff=I14;Ie1.nanos=q14;Ie1.millis=M14;Ie1.randomToken=S14;var D14=FG(),on0=NG();function w14($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function E14($){return D14.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function j14($,Z=!0){let X=Z?new on0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new on0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function z14($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function P14($,Z=1000){let X=rn0(),Q=setTimeout(()=>{X.reject(new on0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function rn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function A14(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function T14($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function R14($){let Z=[];for await(let X of $)Z.push(X);return Z}class Ae1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}Ie1.Perf=Ae1;class Te1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=rn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ie1.SimpleMutex=Te1;function Re1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function I14($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Re1(X>Z?$[Z]:$[X])}}}function q14($){return $*1e6}function M14($){return Math.floor($/1e6)}var V14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",TN=new Uint8Array(62);for(let $=0;$<62;$++)TN[$]=V14.charCodeAt($);var k14=218340105584896;function S14(){let $=Math.floor(Math.random()*k14),Z=$%62,X=TN[Z];$=($-Z)/62,Z=$%62;let Q=TN[Z];$=($-Z)/62,Z=$%62;let Y=TN[Z];$=($-Z)/62,Z=$%62;let G=TN[Z];$=($-Z)/62,Z=$%62;let J=TN[Z];$=($-Z)/62,Z=$%62;let K=TN[Z];$=($-Z)/62,Z=$%62;let W=TN[Z];$=($-Z)/62;let H=TN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var ve1=x((Ce1)=>{Object.defineProperty(Ce1,"__esModule",{value:!0});Ce1.nuid=Ce1.NuidImpl=void 0;var p14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",PO=62,o70=12,ke1=10,Me1=33,n14=333,Ve1=o70+ke1,sn0=new Uint8Array(PO);for(let $=0;$<PO;$++)sn0[$]=p14.charCodeAt($);var t70=4294967296,Se1=BigInt(PO)**BigInt(ke1),yp=Number(Se1/(1n<<32n)),an0=Number(Se1%(1n<<32n));function t14($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function o14($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else t14($)}class en0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Ve1),this.cbuf=new Uint8Array(o70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(yp+1)),this.seqLo=Math.floor(Math.random()*t70);while($++<8&&this.seqHi===yp&&this.seqLo>=an0);if(this.seqHi===yp&&this.seqLo>=an0)this.seqLo=0;this.inc=Math.random()*(n14-Me1)+Me1|0}setPre(){o14(this.cbuf);for(let $=0;$<o70;$++)this.buf[$]=sn0[this.cbuf[$]%PO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Ve1-1;X>=o70;X--){let Q=Math.floor($/PO),G=($-Q*PO)*t70+Z,J=Math.floor(G/PO),K=G-J*PO;this.buf[X]=sn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=t70)this.seqLo-=t70,this.seqHi+=1;if(this.seqHi>yp||this.seqHi===yp&&this.seqLo>=an0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Ce1.NuidImpl=en0;Ce1.nuid=new en0});var ye1=x((fe1)=>{Object.defineProperty(fe1,"__esModule",{value:!0});fe1.nuid=fe1.Nuid=void 0;var xe1=ve1();fe1.Nuid=xe1.NuidImpl;fe1.nuid=xe1.nuid});var a70=x((r70)=>{Object.defineProperty(r70,"__esModule",{value:!0});r70.nuid=r70.Nuid=void 0;var ge1=ye1();Object.defineProperty(r70,"Nuid",{enumerable:!0,get:function(){return ge1.Nuid}});Object.defineProperty(r70,"nuid",{enumerable:!0,get:function(){return ge1.nuid}})});var AO=x((he1)=>{Object.defineProperty(he1,"__esModule",{value:!0});he1.DEFAULT_HOST=he1.DEFAULT_PORT=he1.Match=void 0;he1.syncIterator=Z$4;he1.createInbox=X$4;var e14=a70(),$$4=NG();he1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Z$4($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function X$4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw $$4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${e14.nuid.next()}`}he1.DEFAULT_PORT=4222;he1.DEFAULT_HOST="127.0.0.1"});var gp=x((me1)=>{Object.defineProperty(me1,"__esModule",{value:!0});me1.DataBuffer=void 0;var ce1=FG();class le1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return ce1.TE.encode($)}static toAscii($){return ce1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}me1.DataBuffer=le1});var Hj=x((pe1)=>{Object.defineProperty(pe1,"__esModule",{value:!0});pe1.LF=pe1.CR=pe1.CRLF=pe1.CR_LF_LEN=pe1.CR_LF=void 0;pe1.setTransportFactory=F$4;pe1.defaultPort=N$4;pe1.getUrlParseFn=U$4;pe1.newTransport=B$4;pe1.getResolveFn=O$4;pe1.protoLen=ie1;pe1.extractProtocolMessage=L$4;var K$4=FG(),W$4=AO(),H$4=gp(),UG;function F$4($){UG=$}function N$4(){return UG!==void 0&&UG.defaultPort!==void 0?UG.defaultPort:W$4.DEFAULT_PORT}function U$4(){return UG!==void 0&&UG.urlParseFn?UG.urlParseFn:void 0}function B$4(){if(!UG||typeof UG.factory!=="function")throw Error("transport fn is not set");return UG.factory()}function O$4(){return UG!==void 0&&UG.dnsResolveFn?UG.dnsResolveFn:void 0}pe1.CR_LF=`\r
|
|
1511
|
+
`);Q=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;wO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}}catch{}if(Q.trim()){let G=Bun.stripANSI(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)wO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function A04($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await fp(Number(Y)+1):await fp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await g70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)Yj({name:D.name,status:"ready",port:D.port});vp();let F=P04(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Cn0(U.stdout),Cn0(U.stderr);xp(G),Yj({name:"Vite",status:"ready",port:Number(Y)}),Yj({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (lZ0(),cZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var vn0=L(()=>{qn0();Gj();Sn0()});var c70;var xn0=L(()=>{c70={name:"decocms",version:"4.315.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as R04,Text as ps1}from"ink";import{jsx as I04,jsxs as ns1}from"react/jsx-runtime";function ts1({version:$}){return ns1(R04,{flexDirection:"column",marginTop:1,children:[N70.map((Z,X)=>I04(ps1,{color:U70[X],children:Z},X)),ns1(ps1,{dimColor:!0,children:[" v",$]})]})}var os1=L(()=>{zp()});import{Box as Jj,Text as EO}from"ink";import{Spinner as q04}from"@inkjs/ui";import{jsx as HG,jsxs as by}from"react/jsx-runtime";function rs1({status:$}){if($==="pending")return HG(q04,{label:""});return HG(EO,{color:"green",children:"\u2713"})}function M04($){return`${$.name}: ${$.port||"...."}`}function as1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return by(Jj,{flexDirection:"column",paddingBottom:1,children:[HG(ts1,{version:c70.version}),HG(Jj,{marginBottom:1,children:HG(EO,{dimColor:!0,children:"\u2500".repeat(80)})}),HG(Jj,{children:by(EO,{dimColor:!0,children:["Home: ",X]})}),by(Jj,{gap:2,children:[$.map((Y)=>by(Jj,{gap:1,children:[HG(EO,{children:M04(Y)}),HG(rs1,{status:Y.status})]},Y.name)),by(Jj,{gap:1,children:[HG(EO,{children:"Migrations"}),HG(rs1,{status:Z})]})]}),HG(Jj,{children:Q?by(EO,{children:["Open in browser: ",HG(EO,{color:"cyan",children:Q})]}):HG(EO,{dimColor:!0,children:"Starting..."})})]})}var ss1=L(()=>{xn0();os1()});import{Box as V04,Text as bp}from"ink";import{jsx as fn0,jsxs as bn0}from"react/jsx-runtime";function k04($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function es1({logs:$}){return fn0(V04,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return fn0(bp,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return bn0(bp,{children:[bn0(bp,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),fn0(bp,{color:k04(Z.status),children:Z.status}),bn0(bp,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var $e1=()=>{};var yn0={};e(yn0,{App:()=>_04});import{Box as S04}from"ink";import{useSyncExternalStore as C04}from"react";import{jsx as Ze1,jsxs as v04}from"react/jsx-runtime";function _04({home:$}){let Z=C04(kn0,Vn0);return v04(S04,{flexDirection:"column",children:[Ze1(as1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Ze1(es1,{logs:Z.logs})]})}var gn0=L(()=>{ss1();$e1();Gj()});var a3="thread-gate",PN="decopilot-hosted-harness",AN="decopilot-hosted-harness-sandboxed",AJ="automations",jO="background-tools",Kj="task-board-github-reads",zO="jira-push";var Xe1="10";function Qe1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Xe1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var Ye1=()=>{};import x04 from"pg";async function Je1($,Z){let{databaseUrl:X,lockTimeoutMs:Q=f04}=$,Y=$.log??((W)=>console.log(W)),G=new x04.Client({connectionString:X});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[Ge1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=Q)throw Error(`Timed out after ${Q}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(b04)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[Ge1.toString()])}catch{}await G.end().catch(()=>{})}}var Ge1=8314027461559302n,f04=600000,b04=500;var Ke1=L(()=>{J4()});function y04(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function hn0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function We1(){let $=y04();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:hn0($,"--cpu-prof-dir")??process.cwd(),name:hn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(hn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function He1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=$j();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),l70=setInterval(()=>void Z().catch(()=>{}),$),l70.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(l70)clearInterval(l70)}}var l70;var Fe1=()=>{};import*as g04 from"bun:jsc";function Ne1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{h04()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=u04()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var h04,u04;var Ue1=L(()=>{({startSamplingProfiler:h04,samplingProfilerStackTraces:u04}=g04)});function Be1(){We1();let $=[He1(),Rt1(),Ne1()];return()=>{for(let Z of $)Z()}}var Oe1=L(()=>{Gm0();Fe1();Ue1()});var Wj=x((Le1)=>{Object.defineProperty(Le1,"__esModule",{value:!0});Le1.RepublishHeaders=Le1.DirectMsgHeaders=Le1.JsHeaders=Le1.AdvisoryKind=void 0;Le1.isOrderedPushConsumerOptions=c04;Le1.isPullConsumer=l04;Le1.isPushConsumer=m04;Le1.isBoundPushConsumerOptions=d04;function c04($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function l04($){return $.isPullConsumer()}function m04($){return $.isPushConsumer()}function d04($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Le1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Le1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Le1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Le1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var FG=x((we1)=>{Object.defineProperty(we1,"__esModule",{value:!0});we1.TD=we1.TE=we1.Empty=void 0;we1.encode=e04;we1.decode=$14;we1.Empty=new Uint8Array(0);we1.TE=new TextEncoder;we1.TD=new TextDecoder;function s04(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function e04(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(we1.TE.encode($[X]));if(Z.length===0)return we1.Empty;if(Z.length===1)return Z[0];return s04(...Z)}function $14($){if(!$||$.length===0)return"";return we1.TD.decode($)}});var NG=x((ze1)=>{Object.defineProperty(ze1,"__esModule",{value:!0});ze1.errors=ze1.PermissionViolationError=ze1.NoRespondersError=ze1.TimeoutError=ze1.RequestError=ze1.ProtocolError=ze1.ConnectionError=ze1.DrainingConnectionError=ze1.ClosedConnectionError=ze1.AuthorizationError=ze1.UserAuthenticationExpiredError=ze1.InvalidOperationError=ze1.InvalidArgumentError=ze1.InvalidSubjectError=void 0;class cn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}ze1.InvalidSubjectError=cn0;class m70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new m70(`${$} ${Z}`,X)}}ze1.InvalidArgumentError=m70;class ln0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}ze1.InvalidOperationError=ln0;class d70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new d70($);return null}}ze1.UserAuthenticationExpiredError=d70;class i70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new i70($);return null}}ze1.AuthorizationError=i70;class mn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}ze1.ClosedConnectionError=mn0;class dn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}ze1.DrainingConnectionError=dn0;class in0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}ze1.ConnectionError=in0;class pn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}ze1.ProtocolError=pn0;class nn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof p70}}ze1.RequestError=nn0;class tn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}ze1.TimeoutError=tn0;class p70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}ze1.NoRespondersError=p70;class n70 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new n70($,X,Q,Y)}}ze1.PermissionViolationError=n70;ze1.errors={AuthorizationError:i70,ClosedConnectionError:mn0,ConnectionError:in0,DrainingConnectionError:dn0,InvalidArgumentError:m70,InvalidOperationError:ln0,InvalidSubjectError:cn0,NoRespondersError:p70,PermissionViolationError:n70,ProtocolError:pn0,RequestError:nn0,TimeoutError:tn0,UserAuthenticationExpiredError:d70}});var s3=x((Ie1)=>{Object.defineProperty(Ie1,"__esModule",{value:!0});Ie1.SimpleMutex=Ie1.Perf=void 0;Ie1.extend=w14;Ie1.render=E14;Ie1.timeout=j14;Ie1.delay=z14;Ie1.deadline=P14;Ie1.deferred=rn0;Ie1.debugDeferred=A14;Ie1.shuffle=T14;Ie1.collect=R14;Ie1.jitter=Re1;Ie1.backoff=I14;Ie1.nanos=q14;Ie1.millis=M14;Ie1.randomToken=S14;var D14=FG(),on0=NG();function w14($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function E14($){return D14.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function j14($,Z=!0){let X=Z?new on0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new on0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function z14($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function P14($,Z=1000){let X=rn0(),Q=setTimeout(()=>{X.reject(new on0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function rn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function A14(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function T14($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function R14($){let Z=[];for await(let X of $)Z.push(X);return Z}class Ae1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}Ie1.Perf=Ae1;class Te1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=rn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ie1.SimpleMutex=Te1;function Re1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function I14($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return Re1(X>Z?$[Z]:$[X])}}}function q14($){return $*1e6}function M14($){return Math.floor($/1e6)}var V14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",TN=new Uint8Array(62);for(let $=0;$<62;$++)TN[$]=V14.charCodeAt($);var k14=218340105584896;function S14(){let $=Math.floor(Math.random()*k14),Z=$%62,X=TN[Z];$=($-Z)/62,Z=$%62;let Q=TN[Z];$=($-Z)/62,Z=$%62;let Y=TN[Z];$=($-Z)/62,Z=$%62;let G=TN[Z];$=($-Z)/62,Z=$%62;let J=TN[Z];$=($-Z)/62,Z=$%62;let K=TN[Z];$=($-Z)/62,Z=$%62;let W=TN[Z];$=($-Z)/62;let H=TN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var ve1=x((Ce1)=>{Object.defineProperty(Ce1,"__esModule",{value:!0});Ce1.nuid=Ce1.NuidImpl=void 0;var p14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",PO=62,o70=12,ke1=10,Me1=33,n14=333,Ve1=o70+ke1,sn0=new Uint8Array(PO);for(let $=0;$<PO;$++)sn0[$]=p14.charCodeAt($);var t70=4294967296,Se1=BigInt(PO)**BigInt(ke1),yp=Number(Se1/(1n<<32n)),an0=Number(Se1%(1n<<32n));function t14($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function o14($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else t14($)}class en0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(Ve1),this.cbuf=new Uint8Array(o70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(yp+1)),this.seqLo=Math.floor(Math.random()*t70);while($++<8&&this.seqHi===yp&&this.seqLo>=an0);if(this.seqHi===yp&&this.seqLo>=an0)this.seqLo=0;this.inc=Math.random()*(n14-Me1)+Me1|0}setPre(){o14(this.cbuf);for(let $=0;$<o70;$++)this.buf[$]=sn0[this.cbuf[$]%PO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=Ve1-1;X>=o70;X--){let Q=Math.floor($/PO),G=($-Q*PO)*t70+Z,J=Math.floor(G/PO),K=G-J*PO;this.buf[X]=sn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=t70)this.seqLo-=t70,this.seqHi+=1;if(this.seqHi>yp||this.seqHi===yp&&this.seqLo>=an0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Ce1.NuidImpl=en0;Ce1.nuid=new en0});var ye1=x((fe1)=>{Object.defineProperty(fe1,"__esModule",{value:!0});fe1.nuid=fe1.Nuid=void 0;var xe1=ve1();fe1.Nuid=xe1.NuidImpl;fe1.nuid=xe1.nuid});var a70=x((r70)=>{Object.defineProperty(r70,"__esModule",{value:!0});r70.nuid=r70.Nuid=void 0;var ge1=ye1();Object.defineProperty(r70,"Nuid",{enumerable:!0,get:function(){return ge1.Nuid}});Object.defineProperty(r70,"nuid",{enumerable:!0,get:function(){return ge1.nuid}})});var AO=x((he1)=>{Object.defineProperty(he1,"__esModule",{value:!0});he1.DEFAULT_HOST=he1.DEFAULT_PORT=he1.Match=void 0;he1.syncIterator=Z$4;he1.createInbox=X$4;var e14=a70(),$$4=NG();he1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Z$4($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function X$4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw $$4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${e14.nuid.next()}`}he1.DEFAULT_PORT=4222;he1.DEFAULT_HOST="127.0.0.1"});var gp=x((me1)=>{Object.defineProperty(me1,"__esModule",{value:!0});me1.DataBuffer=void 0;var ce1=FG();class le1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return ce1.TE.encode($)}static toAscii($){return ce1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}me1.DataBuffer=le1});var Hj=x((pe1)=>{Object.defineProperty(pe1,"__esModule",{value:!0});pe1.LF=pe1.CR=pe1.CRLF=pe1.CR_LF_LEN=pe1.CR_LF=void 0;pe1.setTransportFactory=F$4;pe1.defaultPort=N$4;pe1.getUrlParseFn=U$4;pe1.newTransport=B$4;pe1.getResolveFn=O$4;pe1.protoLen=ie1;pe1.extractProtocolMessage=L$4;var K$4=FG(),W$4=AO(),H$4=gp(),UG;function F$4($){UG=$}function N$4(){return UG!==void 0&&UG.defaultPort!==void 0?UG.defaultPort:W$4.DEFAULT_PORT}function U$4(){return UG!==void 0&&UG.urlParseFn?UG.urlParseFn:void 0}function B$4(){if(!UG||typeof UG.factory!=="function")throw Error("transport fn is not set");return UG.factory()}function O$4(){return UG!==void 0&&UG.dnsResolveFn?UG.dnsResolveFn:void 0}pe1.CR_LF=`\r
|
|
1512
1512
|
`;pe1.CR_LF_LEN=pe1.CR_LF.length;pe1.CRLF=H$4.DataBuffer.fromAscii(pe1.CR_LF);pe1.CR=new Uint8Array(pe1.CRLF)[0];pe1.LF=new Uint8Array(pe1.CRLF)[1];function ie1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===pe1.CR&&$[X]===pe1.LF)return X+1}return 0}function L$4($){let Z=ie1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return K$4.TD.decode(Q)}return""}});var Yt0=x(($0$)=>{Object.defineProperty($0$,"__esModule",{value:!0});$0$.ipV4=ae1;$0$.isIP=q$4;$0$.parseIP=se1;var hp=4,Fj=16,s70=48,re1=57,te1=65,R$4=70,oe1=97,I$4=102,Qt0=16777215;function ae1($,Z,X,Q){let Y=new Uint8Array(Fj);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function q$4($){return se1($)!==void 0}function se1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return ee1($);case":":return M$4($)}return}function ee1($){let Z=new Uint8Array(hp);for(let X=0;X<hp;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=V$4($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return ae1(Z[0],Z[1],Z[2],Z[3])}function M$4($){let Z=new Uint8Array(Fj),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<Fj){let{n:Y,c:G,ok:J}=k$4($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=Fj-hp)return;if(Q+hp>Fj)return;let K=ee1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=hp;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<Fj){if(X<0)return;let Y=Fj-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function V$4($){let Z=0,X=0;for(Z=0;Z<$.length&&s70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=re1;Z++)if(X=X*10+($.charCodeAt(Z)-s70),X>=Qt0)return{n:Qt0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function k$4($){let Z=0,X=0;for(X=0;X<$.length;X++){if(s70<=$.charCodeAt(X)&&$.charCodeAt(X)<=re1)Z*=16,Z+=$.charCodeAt(X)-s70;else if(oe1<=$.charCodeAt(X)&&$.charCodeAt(X)<=I$4)Z*=16,Z+=$.charCodeAt(X)-oe1+10;else if(te1<=$.charCodeAt(X)&&$.charCodeAt(X)<=R$4)Z*=16,Z+=$.charCodeAt(X)-te1+10;else break;if(Z>=Qt0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var Ft0=x((X0$)=>{Object.defineProperty(X0$,"__esModule",{value:!0});X0$.Servers=X0$.ServerImpl=void 0;X0$.isIPV4OrHostname=Z0$;X0$.hostPort=Ht0;var Gt0=Hj(),Jt0=s3(),Kt0=Yt0(),v$4=AO(),x$4=NG();function Z0$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Wt0($){return!Z0$($)}function f$4($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Ht0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=f$4($),Wt0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Wt0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):v$4.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class yy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Ht0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,Kt0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${Wt0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new yy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Jt0.shuffle)(Z);return this.resolves=Z,Z}}X0$.ServerImpl=yy;class e70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw x$4.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Gt0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=Ht0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new yy(Y))}if(this.randomize)(0,Jt0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,Kt0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,Gt0.getUrlParseFn)();$=X?X($):$;let Q=new yy($,Z);if((0,Kt0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return e70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return e70.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,Gt0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new yy(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Jt0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}X0$.Servers=e70});var $X0=x((J0$)=>{Object.defineProperty(J0$,"__esModule",{value:!0});J0$.QueuedIteratorImpl=void 0;var Nt0=s3(),Y0$=NG();class G0${inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,Nt0.deferred)(),this.yields=[],this.iterClosed=(0,Nt0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new Y0$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Y0$.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Nt0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}J0$.QueuedIteratorImpl=G0$});var Ut0=x((F0$)=>{Object.defineProperty(F0$,"__esModule",{value:!0});F0$.MuxSubscription=void 0;var h$4=AO(),W0$=NG();class H0${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,h$4.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new W0$.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new W0$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}F0$.MuxSubscription=H0$});var Bt0=x((B0$)=>{Object.defineProperty(B0$,"__esModule",{value:!0});B0$.Heartbeat=void 0;var u$4=s3();class U0${ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,u$4.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}B0$.Heartbeat=U0$});var Dt0=x((E0$)=>{Object.defineProperty(E0$,"__esModule",{value:!0});E0$.DenoBuffer=E0$.MAX_SIZE=E0$.AssertionError=void 0;E0$.assert=D0$;E0$.concat=w0$;E0$.append=l$4;E0$.readAll=m$4;E0$.writeAll=d$4;var c$4=FG();class Ot0 extends Error{constructor($){super($);this.name="AssertionError"}}E0$.AssertionError=Ot0;function D0$($,Z="Assertion failed."){if(!$)throw new Ot0(Z)}var L0$=32768;E0$.MAX_SIZE=4294967294;function ZX0($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function w0$($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function l$4($,Z){return w0$($,Uint8Array.of(Z))}class Lt0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){D0$($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=ZX0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(c$4.TE.encode($))}write($){let Z=this._grow($.byteLength);return ZX0($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)ZX0(this._buf.subarray(this._off),this._buf);else if(Q+$>E0$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,E0$.MAX_SIZE));ZX0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,E0$.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(L0$);while(!0){let Q=this.capacity-this.length<L0$,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}E0$.DenoBuffer=Lt0;function m$4($){let Z=new Lt0;return Z.readFrom($),Z.bytes()}function d$4($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var jt0=x((T0$)=>{Object.defineProperty(T0$,"__esModule",{value:!0});T0$.cc=T0$.State=T0$.Parser=T0$.Kind=void 0;T0$.describe=a$4;var wt0=Dt0(),Et0=FG();T0$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function a$4($){let Z,X="";switch($.kind){case T0$.Kind.MSG:Z="MSG";break;case T0$.Kind.OK:Z="OK";break;case T0$.Kind.ERR:Z="ERR",X=Et0.TD.decode($.data);break;case T0$.Kind.PING:Z="PING";break;case T0$.Kind.PONG:Z="PONG";break;case T0$.Kind.INFO:Z="INFO",X=Et0.TD.decode($.data)}return`${Z}: ${X}`}function z0$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var P0$=48,s$4=57,gy=67108864;class A0${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=T0$.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case T0$.State.OP_START:switch(X){case T0$.cc.M:case T0$.cc.m:this.state=T0$.State.OP_M,this.hdr=-1,this.ma=z0$();break;case T0$.cc.H:case T0$.cc.h:this.state=T0$.State.OP_H,this.hdr=0,this.ma=z0$();break;case T0$.cc.P:case T0$.cc.p:this.state=T0$.State.OP_P;break;case T0$.cc.PLUS:this.state=T0$.State.OP_PLUS;break;case T0$.cc.MINUS:this.state=T0$.State.OP_MINUS;break;case T0$.cc.I:case T0$.cc.i:this.state=T0$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_H:switch(X){case T0$.cc.M:case T0$.cc.m:this.state=T0$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_M:switch(X){case T0$.cc.S:case T0$.cc.s:this.state=T0$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MS:switch(X){case T0$.cc.G:case T0$.cc.g:this.state=T0$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MSG:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:this.state=T0$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MSG_SPC:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:continue;default:this.state=T0$.State.MSG_ARG,this.as=Z}break;case T0$.State.MSG_ARG:switch(X){case T0$.cc.CR:this.drop=1;break;case T0$.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=T0$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case T0$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:T0$.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=T0$.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:T0$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=T0$.State.MSG_END;break;case T0$.State.MSG_END:switch(X){case T0$.cc.NL:this.drop=0,this.as=Z+1,this.state=T0$.State.OP_START;break;default:continue}break;case T0$.State.OP_PLUS:switch(X){case T0$.cc.O:case T0$.cc.o:this.state=T0$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PLUS_O:switch(X){case T0$.cc.K:case T0$.cc.k:this.state=T0$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PLUS_OK:switch(X){case T0$.cc.NL:this.dispatcher.push({kind:T0$.Kind.OK}),this.drop=0,this.state=T0$.State.OP_START;break}break;case T0$.State.OP_MINUS:switch(X){case T0$.cc.E:case T0$.cc.e:this.state=T0$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MINUS_E:switch(X){case T0$.cc.R:case T0$.cc.r:this.state=T0$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MINUS_ER:switch(X){case T0$.cc.R:case T0$.cc.r:this.state=T0$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MINUS_ERR:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:this.state=T0$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_MINUS_ERR_SPC:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:continue;default:this.state=T0$.State.MINUS_ERR_ARG,this.as=Z}break;case T0$.State.MINUS_ERR_ARG:switch(X){case T0$.cc.CR:this.drop=1;break;case T0$.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:T0$.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=T0$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case T0$.State.OP_P:switch(X){case T0$.cc.I:case T0$.cc.i:this.state=T0$.State.OP_PI;break;case T0$.cc.O:case T0$.cc.o:this.state=T0$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PO:switch(X){case T0$.cc.N:case T0$.cc.n:this.state=T0$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PON:switch(X){case T0$.cc.G:case T0$.cc.g:this.state=T0$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PONG:switch(X){case T0$.cc.NL:this.dispatcher.push({kind:T0$.Kind.PONG}),this.drop=0,this.state=T0$.State.OP_START;break}break;case T0$.State.OP_PI:switch(X){case T0$.cc.N:case T0$.cc.n:this.state=T0$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PIN:switch(X){case T0$.cc.G:case T0$.cc.g:this.state=T0$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_PING:switch(X){case T0$.cc.NL:this.dispatcher.push({kind:T0$.Kind.PING}),this.drop=0,this.state=T0$.State.OP_START;break}break;case T0$.State.OP_I:switch(X){case T0$.cc.N:case T0$.cc.n:this.state=T0$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_IN:switch(X){case T0$.cc.F:case T0$.cc.f:this.state=T0$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_INF:switch(X){case T0$.cc.O:case T0$.cc.o:this.state=T0$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_INFO:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:this.state=T0$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case T0$.State.OP_INFO_SPC:switch(X){case T0$.cc.SPACE:case T0$.cc.TAB:continue;default:this.state=T0$.State.INFO_ARG,this.as=Z}break;case T0$.State.INFO_ARG:switch(X){case T0$.cc.CR:this.drop=1;break;case T0$.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:T0$.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=T0$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===T0$.State.MSG_ARG||this.state===T0$.State.MINUS_ERR_ARG||this.state===T0$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new wt0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===T0$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new wt0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new wt0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case T0$.cc.SPACE:case T0$.cc.TAB:case T0$.cc.CR:case T0$.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],gy);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],gy);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${Et0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case T0$.cc.SPACE:case T0$.cc.TAB:case T0$.cc.CR:case T0$.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],gy),this.ma.size=this.protoParseInt(Z[3],gy);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],gy),this.ma.size=this.protoParseInt(Z[4],gy);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<P0$||$[Q]>s$4)return-1;X=X*10+($[Q]-P0$)}return Z!==void 0&&X>Z?-1:X}}T0$.Parser=A0$;T0$.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};T0$.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var YX0=x((I0$)=>{Object.defineProperty(I0$,"__esModule",{value:!0});I0$.MsgHdrsImpl=void 0;I0$.canonicalMIMEHeaderKey=Pt0;I0$.headers=Z84;var R0$=FG(),e3=AO(),QX0=NG();function Pt0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw QX0.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function Z84($=0,Z=""){if($===0&&Z!=="")throw QX0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw QX0.InvalidArgumentError.format("description","is required");return new hy($,Z)}var zt0="NATS/1.0";class hy{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new hy,Q=R0$.TD.decode($).split(`\r
|
|
1513
1513
|
`),Y=Q[0];if(Y!==zt0){let G=Y.replace(zt0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=zt0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
|
|
1514
1514
|
${Z}: ${X[Q]}`;return`${$}\r
|
|
@@ -2773,7 +2773,7 @@ Guidelines:
|
|
|
2773
2773
|
select coalesce(max(key_seq), 0) + 1
|
|
2774
2774
|
from task_board_items
|
|
2775
2775
|
where organization_id = ${$.organizationId}
|
|
2776
|
-
)`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow(),G=await this.inTransaction(async(J)=>{return await mD`select pg_advisory_xact_lock(hashtext(${`task-board-key-seq:${$.organizationId}`})::bigint)`.execute(J),Y(J)});return this.itemFromDbRow(G)}async update($,Z,X,Q){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.type!==void 0?{type:X.type}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.repo!==void 0?{repo:X.repo}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sprintId!==void 0?{sprint_id:X.sprintId}:{},...X.externalUrl!==void 0?{external_url:X.externalUrl}:{},...X.boardColumnOrg!==void 0?{board_column_org:X.boardColumnOrg}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},...X.status!==void 0&&!Bt4.has(X.status)?{review_cycle_started_at:null}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async delete($,Z,X){return this.inTransaction(async(Q)=>{let Y=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Y)return!1;if(BY({createdBy:Y.created_by}))return await Q.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 Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.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((Q)=>Q.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 Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.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 Q.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 addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where((G)=>G.or([G("review_cycle_started_at","is not",null),G("status","=","in_review"),G("status","in",G.selectFrom("task_board_columns as c").select("c.key").whereRef("c.organization_id","=","task_board_items.organization_id").where("c.role","=","in_review"))])).where("dismissed_at","is",null);if(X)Q=Q.where((G)=>G.or([G("last_swept_at","is",null),G("last_swept_at","<",X)]));if(Z){let G=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",G),J.and([J("updated_at","=",G),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((G)=>({id:G.id,organizationId:G.organizationId,updatedAt:G.updated_at instanceof Date?G.updated_at.toISOString():String(G.updated_at)}))}async listItemsAwaitingArchive($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","=","done").where("i.dismissed_at","is",null).where("i.updated_at","<",$).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).orderBy("i.updated_at","asc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async listItemsAwaitingMergedTag($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","in",wt4).where("i.dismissed_at","is",null).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).where((Q)=>Q.not(Q.exists(Q.selectFrom("task_board_item_tags as t").innerJoin("organization_tags as g","g.id","t.id").select("t.id").whereRef("t.task_board_item_id","=","i.id").where(mD`lower(g.name)`,"=",$)))).orderBy("i.updated_at","desc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async claimSweep($,Z,X){let Q=await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)])).executeTakeFirst();return Number(Q.numUpdatedRows??0)>0}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoinLateral((Q)=>Q.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:m_$(X.payload)}}async scheduleRunRetry($,Z,X,Q,Y){if(Y===null)return!1;return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=",Y).where("dismissed_at","is",null).returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X,Q){if(Q.progress===null||Q.queue===null)return null;if((await this.db.updateTable("task_board_items").set({status:Q.queue,retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q.progress).where("dismissed_at","is",null).returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((K)=>K.and([K("t.updated_at","<",Z),K.or([K("t.last_progress_at","is",null),K("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((K)=>K.threadId),G=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",Y).where("status","=","in_progress").returning("id").execute(),J=new Set(G.map((K)=>K.id));return Q.filter((K)=>J.has(K.threadId))}async relabelDeliveredFailure($,Z,X){return(await this.db.updateTable("threads").set({failure_reason:X,failure_kind:"ended_after_delivery",updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","failed").where((Y)=>Y.or([Y("failure_kind","is",null),Y("failure_kind","not in",["cancelled",...Hs])])).returning("id").execute()).length>0}async supersedeFailedThreads($,Z){return(await this.db.updateTable("threads").set({failure_kind:"superseded",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("status","=","failed").where("failure_kind","is distinct from","cancelled").where((Q)=>Q("id","in",Q.selectFrom("task_board_item_threads").select("thread_id").where("task_board_item_id","=",$).where("organization_id","=",Z))).returning("id").execute()).length}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",W8).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where((Y)=>Y.or([Y("t.failure_kind","is",null),Y("t.failure_kind","not in",[...Hs])])).where("t.updated_at","<",Z).where((Y)=>Y.not(Y.exists(Y.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((Y)=>!Q.has(Y.id)&&Q.add(Y.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).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((Q)=>Q.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((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z,X){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let G=await this.getById(Y,Z);if(!G)continue;let J=(await this.listPrs(Y,Z)).length>0;if(!k71(G,J))continue;if(G.reviewCycleStartedAt)continue;if(J){let W=await this.openReviewCycleIfInProgress(Y,Z,X);if(!W)continue;Q.push(W);continue}let K=await this.advanceToReviewIfInProgress(Y,Z,G.updatedBy);if(!K)continue;Q.push(K),await this.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:"in_review"}}).catch((W)=>console.error("[task-board] in_review activity write failed",W))}return Q}async openReviewCycleIfInProgress($,Z,X){if(X.progress===null)return null;let Q=X.review,Y=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:X.progress}).where("id","=",$).where("organization_id","=",Z).where((J)=>J.or([J("status","=",X.progress),...Q===null?[]:[J.and([J("status","=",Q),J("assignee_id","=",W8)])]])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y||Y.status!=="in_review")continue;await this.closeReviewCycle(Q,Z),X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X,Q){return this.claimInReviewSuperAgentSlot($,Z,X,Q)}async claimInReviewSuperAgentSlot($,Z,X,Q){if(Q.review===null||Q.progress===null)return null;let Y=await this.db.updateTable("task_board_items").set({status:Q.progress,review_cycle_started_at:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q.review).where("assignee_id","=",W8).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async claimUnassignedForSuperAgent($,Z,X,Q,Y){if(Y===null)return null;let G=await this.db.updateTable("task_board_items").set({assignee_id:W8,assigned_by:X,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Y).where("assignee_id","is",null).returningAll().executeTakeFirst();if(!G)return null;let J=this.itemFromDbRow(G);return await this.attachRefs([J],Z),J}async unassignSuperAgent($,Z,X){let Q=await this.db.updateTable("task_board_items").set({assignee_id:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",W8).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction((X)=>Promise.all([this.attachThreads(X,$,Z),this.attachTags(X,$),this.attachJiraKeys(X,$),this.attachReviewVerdicts(X,$)]))}async attachThreads($,Z,X){let Q=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()).leftJoinLateral((J)=>J.selectFrom("thread_message_parts as up").select((K)=>[K.fn.sum(mD`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),mD`
|
|
2776
|
+
)`,created_by:$.by,created_at:X,updated_by:$.by,updated_at:X}).returningAll().executeTakeFirstOrThrow(),G=await this.inTransaction(async(J)=>{return await mD`select pg_advisory_xact_lock(hashtext(${`task-board-key-seq:${$.organizationId}`})::bigint)`.execute(J),Y(J)});return this.itemFromDbRow(G)}async update($,Z,X,Q){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.type!==void 0?{type:X.type}:{},...X.assigneeId!==void 0?{assignee_id:X.assigneeId}:{},...X.assignedBy!==void 0?{assigned_by:X.assignedBy}:{},...X.repo!==void 0?{repo:X.repo}:{},...X.dueDate!==void 0?{due_date:X.dueDate}:{},...X.sprintId!==void 0?{sprint_id:X.sprintId}:{},...X.externalUrl!==void 0?{external_url:X.externalUrl}:{},...X.boardColumnOrg!==void 0?{board_column_org:X.boardColumnOrg}:{},...X.sortOrder!==void 0?{sort_order:X.sortOrder}:{},...X.status!==void 0&&!Bt4.has(X.status)?{review_cycle_started_at:null}:{},updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returningAll().executeTakeFirstOrThrow(),G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async delete($,Z,X){return this.inTransaction(async(Q)=>{let Y=await Q.selectFrom("task_board_items").select(["created_by"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Y)return!1;if(BY({createdBy:Y.created_by}))return await Q.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 Q.deleteFrom("task_board_item_threads").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.deleteFrom("task_board_item_prs").where("task_board_item_id","=",$).where("organization_id","=",Z).execute(),await Q.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((Q)=>Q.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 Q=await X.executeTakeFirst();return Number(Q.numUpdatedRows??0n)}async setItemTags($,Z,X){await this.inTransaction(async(Q)=>{if(await Q.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 Q.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 addItemTags($,Z,X){if(Z.length===0)return;await this.db.insertInto("task_board_item_tags").values(Z.map((Q)=>({task_board_item_id:$,id:Q,created_by:X,created_at:new Date().toISOString()}))).onConflict((Q)=>Q.doNothing()).execute()}async linkThread($,Z,X){await this.db.insertInto("task_board_item_threads").values({task_board_item_id:$,thread_id:Z,organization_id:X}).onConflict((Q)=>Q.columns(["task_board_item_id","thread_id"]).doNothing()).execute()}async listItemsPendingReview($,Z,X){let Q=this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","updated_at"]).where((G)=>G.or([G("review_cycle_started_at","is not",null),G("status","=","in_review"),G("status","in",G.selectFrom("task_board_columns as c").select("c.key").whereRef("c.organization_id","=","task_board_items.organization_id").where("c.role","=","in_review"))])).where("dismissed_at","is",null);if(X)Q=Q.where((G)=>G.or([G("last_swept_at","is",null),G("last_swept_at","<",X)]));if(Z){let G=new Date(Z.updatedAt);Q=Q.where((J)=>J.or([J("updated_at",">",G),J.and([J("updated_at","=",G),J("id",">",Z.id)])]))}return(await Q.orderBy("updated_at","asc").orderBy("id","asc").limit($).execute()).map((G)=>({id:G.id,organizationId:G.organizationId,updatedAt:G.updated_at instanceof Date?G.updated_at.toISOString():String(G.updated_at)}))}async listItemsAwaitingArchive($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","=","done").where("i.dismissed_at","is",null).where("i.updated_at","<",$).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).orderBy("i.updated_at","asc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async listItemsAwaitingMergedTag($,Z){return(await this.db.selectFrom("task_board_items as i").select(["i.id","i.organization_id as organizationId"]).where("i.status","in",wt4).where("i.dismissed_at","is",null).where((Q)=>Q.exists(Q.selectFrom("task_board_item_prs as p").select("p.url").whereRef("p.task_board_item_id","=","i.id"))).where((Q)=>Q.not(Q.exists(Q.selectFrom("task_board_item_tags as t").innerJoin("organization_tags as g","g.id","t.id").select("t.id").whereRef("t.task_board_item_id","=","i.id").where(mD`lower(g.name)`,"=",$)))).orderBy("i.updated_at","desc").limit(Z).execute()).map((Q)=>({id:Q.id,organizationId:Q.organizationId}))}async claimSweep($,Z,X){let Q=await this.db.updateTable("task_board_items").set({last_swept_at:new Date}).where("id","=",$).where("organization_id","=",Z).where((Y)=>Y.or([Y("last_swept_at","is",null),Y("last_swept_at","<",X)])).executeTakeFirst();return Number(Q.numUpdatedRows??0)>0}async failedRunInfo($,Z){let X=await this.db.selectFrom("threads as t").leftJoinLateral((Q)=>Q.selectFrom("thread_message_parts as p").select("p.payload").whereRef("p.thread_id","=","t.id").where("p.kind","=","error").orderBy("p.created_at","desc").limit(1).as("err"),(Q)=>Q.onTrue()).select(["t.status","t.failure_kind as kind","err.payload as payload"]).where("t.id","=",$).where("t.organization_id","=",Z).executeTakeFirst();if(!X||X.status!=="failed")return null;return{kind:X.kind??null,errorText:m_$(X.payload)}}async scheduleRunRetry($,Z,X,Q,Y){if(Y===null)return!1;return(await this.db.updateTable("task_board_items").set({retry_at:Q,retry_attempts:X}).where("id","=",$).where("organization_id","=",Z).where("status","=",Y).where("dismissed_at","is",null).returning("id").execute()).length>0}async returnToTodoAfterFailure($,Z,X,Q){if(Q.progress===null||Q.queue===null)return null;if((await this.db.updateTable("task_board_items").set({status:Q.queue,retry_at:null,retry_attempts:0,updated_by:X,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q.progress).where("dismissed_at","is",null).returning("id").execute()).length===0)return null;return await this.getById($,Z)}async failNeverStartedLinkedThreads($,Z,X){let Q=await this.db.selectFrom("threads as t").innerJoin("task_board_item_threads as l","l.thread_id","t.id").select(["t.id as threadId","l.task_board_item_id as itemId","l.organization_id as organizationId"]).where("t.status","=","in_progress").where("t.run_started_at","is",null).where((K)=>K.and([K("t.updated_at","<",Z),K.or([K("t.last_progress_at","is",null),K("t.last_progress_at","<",Z)])])).limit($).execute();if(Q.length===0)return[];let Y=Q.map((K)=>K.threadId),G=await this.db.updateTable("threads").set({status:"failed",failure_reason:X,failure_kind:"abandoned",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","in",Y).where("status","=","in_progress").returning("id").execute(),J=new Set(G.map((K)=>K.id));return Q.filter((K)=>J.has(K.threadId))}async relabelDeliveredFailure($,Z,X){return(await this.db.updateTable("threads").set({failure_reason:X,failure_kind:"ended_after_delivery",updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","failed").where((Y)=>Y.or([Y("failure_kind","is",null),Y("failure_kind","not in",["cancelled",...Hs])])).returning("id").execute()).length>0}async supersedeFailedThreads($,Z){return(await this.db.updateTable("threads").set({failure_kind:"superseded",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("status","=","failed").where("failure_kind","is distinct from","cancelled").where((Q)=>Q("id","in",Q.selectFrom("task_board_item_threads").select("thread_id").where("task_board_item_id","=",$).where("organization_id","=",Z))).returning("id").execute()).length}async listItemsStuckAfterFailure($,Z){let X=await this.db.selectFrom("task_board_items as i").innerJoin("task_board_item_threads as l","l.task_board_item_id","i.id").innerJoin("threads as t","t.id","l.thread_id").select(["i.id as id","i.organization_id as organizationId","t.id as threadId"]).where("i.status","=","in_progress").where("i.assignee_id","=",W8).where("i.dismissed_at","is",null).where("i.retry_at","is",null).where("t.status","=","failed").where((Y)=>Y.or([Y("t.failure_kind","is",null),Y("t.failure_kind","not in",[...Hs])])).where("t.updated_at","<",Z).where((Y)=>Y.not(Y.exists(Y.selectFrom("task_board_item_threads as l2").innerJoin("threads as t2","t2.id","l2.thread_id").select("t2.id").whereRef("l2.task_board_item_id","=","i.id").where("t2.status","in",["in_progress","requires_action"])))).orderBy("t.updated_at","desc").limit($).execute(),Q=new Set;return X.filter((Y)=>!Q.has(Y.id)&&Q.add(Y.id))}async listItemsDueForRetry($,Z){return await this.db.selectFrom("task_board_items").select(["id","organization_id as organizationId","retry_attempts as attempts"]).where("retry_at","is not",null).where("retry_at","<=",Z).where("status","=","in_progress").where("dismissed_at","is",null).orderBy("retry_at","asc").limit($).execute()}async claimDueRetry($,Z,X){return(await this.db.updateTable("task_board_items").set({retry_at:null}).where("id","=",$).where("organization_id","=",Z).where("retry_at","is not",null).where("retry_at","<=",X).returning("id").execute()).length>0}async clearRunRetry($,Z){await this.db.updateTable("task_board_items").set({retry_at:null,retry_attempts:0}).where("id","=",$).where("organization_id","=",Z).execute()}async clearSweepBudget($,Z){await this.db.updateTable("task_board_items").set({last_swept_at:null}).where("id","=",$).where("organization_id","=",Z).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((Q)=>Q.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((Q)=>({url:Q.url,number:Q.prNumber,repoOwner:Q.repoOwner,repoName:Q.repoName,connectionId:Q.connectionId??null,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}async advanceLinkedTasksToReviewOnThreadFinish($,Z,X){let Q=[];for(let Y of await this.linkedTaskIds($,Z)){let G=await this.getById(Y,Z);if(!G)continue;let J=(await this.listPrs(Y,Z)).length>0;if(!k71(G,J))continue;if(G.reviewCycleStartedAt)continue;if(J){let W=await this.openReviewCycleIfInProgress(Y,Z,X);if(!W)continue;Q.push(W);continue}let K=await this.advanceToReviewIfInProgress(Y,Z,G.updatedBy);if(!K)continue;Q.push(K),await this.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:"in_review"}}).catch((W)=>console.error("[task-board] in_review activity write failed",W))}return Q}async openReviewCycleIfInProgress($,Z,X){if(X.progress===null)return null;let Q=X.review,Y=await this.db.updateTable("task_board_items").set({review_cycle_started_at:new Date,status:X.progress}).where("id","=",$).where("organization_id","=",Z).where((J)=>J.or([J("status","=",X.progress),...Q===null?[]:[J.and([J("status","=",Q),J("assignee_id","=",W8)])]])).where("review_cycle_started_at","is",null).where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async closeReviewCycle($,Z){await this.db.updateTable("task_board_items").set({review_cycle_started_at:null}).where("id","=",$).where("organization_id","=",Z).execute()}async advanceToReviewIfInProgress($,Z,X){let Q=await this.db.updateTable("task_board_items").set({status:"in_review",updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").where("dismissed_at","is",null).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async reopenLinkedTasksOnThreadRun($,Z){let X=[];for(let Q of await this.linkedTaskIds($,Z)){let Y=await this.getById(Q,Z);if(!Y||Y.status!=="in_review")continue;await this.closeReviewCycle(Q,Z),X.push(await this.update(Q,Z,{status:"in_progress"},Y.updatedBy))}return X}claimConflictResolution($,Z,X,Q){return this.claimInReviewSuperAgentSlot($,Z,X,Q)}async claimInReviewSuperAgentSlot($,Z,X,Q){if(Q.review===null||Q.progress===null)return null;let Y=await this.db.updateTable("task_board_items").set({status:Q.progress,review_cycle_started_at:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Q.review).where("assignee_id","=",W8).returningAll().executeTakeFirst();if(!Y)return null;let G=this.itemFromDbRow(Y);return await this.attachRefs([G],Z),G}async claimUnassignedForSuperAgent($,Z,X,Q,Y){if(Y===null)return null;let G=await this.db.updateTable("task_board_items").set({assignee_id:W8,assigned_by:X,updated_by:Q,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=",Y).where("assignee_id","is",null).returningAll().executeTakeFirst();if(!G)return null;let J=this.itemFromDbRow(G);return await this.attachRefs([J],Z),J}async unassignSuperAgent($,Z,X){let Q=await this.db.updateTable("task_board_items").set({assignee_id:null,assigned_by:null,updated_by:X,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("assignee_id","=",W8).returningAll().executeTakeFirst();if(!Q)return null;let Y=this.itemFromDbRow(Q);return await this.attachRefs([Y],Z),Y}async attachRefs($,Z){if($.length===0)return;await this.inTransaction((X)=>Promise.all([this.attachThreads(X,$,Z),this.attachTags(X,$),this.attachJiraKeys(X,$),this.attachReviewVerdicts(X,$)]))}async attachThreads($,Z,X){let Q=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()).leftJoinLateral((J)=>J.selectFrom("thread_message_parts as up").select((K)=>[K.fn.sum(mD`coalesce((up.metadata->'usage'->'providerMetadata'->'openrouter'->'usage'->>'cost')::numeric, 0)`).as("usd"),mD`
|
|
2777
2777
|
case
|
|
2778
2778
|
when count(distinct up.metadata->'models'->'thinking'->>'provider') = 1
|
|
2779
2779
|
then max(up.metadata->'models'->'thinking'->>'provider')
|
|
@@ -2814,7 +2814,7 @@ ${qT0(X,Z)}
|
|
|
2814
2814
|
|
|
2815
2815
|
${Y}`:Y}case"media":return"";case"mediaSingle":case"mediaGroup":return Lc(rH(X),Z).join(`
|
|
2816
2816
|
|
|
2817
|
-
`);default:return qT0(X,Z)}}function s71($,Z=new Map){if(typeof $==="string")return vv$($,Z);if(!$||typeof $!=="object")return"";return mv$($,Z)}class e71{client;names=new Map;lookupsDisabled=!1;constructor($){this.client=$}async resolve($){let Z=this.lookupsDisabled?[]:[...new Set($.filter((Q)=>!this.names.has(Q)))];for(let Q=0;Q<Z.length;Q+=gv$){let Y=Z.slice(Q,Q+gv$);for(let G of Y)this.names.set(G,null);try{for(let G of await this.client.listUsersByAccountId(Y))if(G.displayName)this.names.set(G.accountId,G.displayName)}catch(G){this.lookupsDisabled=!0,console.warn("[jira] user lookup failed, mentions render as @unknown for this run:",G instanceof Error?G.message:G);break}}let X=new Map;for(let Q of $){let Y=this.names.get(Q);if(Y)X.set(Q,Y)}return X}}var n71=15000,wo4=60000,gv$=50,Eo4="summary,status,priority,issuetype,updated,description,comment",jo4=100,t71=20,zo4=500,hv$=1000,uv$=20,Oc,Ao4;var MT0=L(()=>{J4();l71();d71();yv$();Oc=class Oc extends Error{status;constructor($,Z){super($);this.status=Z;this.name="JiraRequestError"}};Ao4=/^[a-z0-9][a-z0-9-]*\.atlassian\.net$/});function So4($,Z){if(!$.startsWith("/api/"))return null;let X;try{X=new URL($,"https://studio.invalid")}catch{return null}let Q=X.pathname.split("/"),[,Y,G,J,K,W]=Q;if(Q.length!==6||Y!=="api"||J!=="fs"||W!=="read"||K!=="outputs"||Co4(G)!==Z)return null;let H=X.searchParams.get("path");if(!H||H.includes(".."))return null;return{volume:K,path:H}}function Co4($){if($===void 0)return null;try{return decodeURIComponent($)}catch{return null}}function dv$($){let Z=$.split(".").pop()?.toLowerCase()??"";return ko4[Z]??null}function _o4($){let X=$.replace(/^\/+/,"").replace(/\//g,"_").replace(/[^A-Za-z0-9._-]/g,"-").replace(/^[-.]+/,"");return(X===""?"attachment":X).slice(-120)}function iv$($,Z){let X=[],Q=new Set;for(let Y of $){if(Q.has(Y))continue;Q.add(Y);let G=So4(Y,Z);if(!G||!dv$(G.path))continue;X.push({target:Y,ref:G,name:_o4(G.path)})}if(X.length>8)console.warn(`[jira] comment references ${X.length} images; embedding the first 8, the rest stay links`);return X.slice(0,8)}async function pv$($,Z){let X=await Z.read($.ref);if(!X)return null;if(X.byteLength>10485760)return console.warn(`[jira] ${$.ref.path} is ${X.byteLength} bytes, over the ${"10485760"} upload cap \u2014 staying a link`),null;let Y=(await Z.listAttachments().catch((K)=>{return console.warn("[jira] could not list attachments for dedup:",K),[]})).find((K)=>K.filename===$.name&&K.size===X.byteLength),G=Y?await Z.mediaIdFor(Y.id):(await Z.upload({name:$.name,bytes:X,contentType:dv$($.ref.path)??"image/png"})).mediaId,J=$.ref.path.split("/").pop()??$.name;return G?{id:G,alt:J}:null}var ko4;var nv$=L(()=>{ko4={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"}});async function VT0($,Z,X){if(Z.assigneeId)return Z;let Q=Z.organizationId,Y=await WS$($,Q,Z.status);if(!Y)return Z;let G=await $.storage.taskBoard.claimUnassignedForSuperAgent(Z.id,Q,X.assignedBy,X.actor,Z.status);if(!G)return Z;await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:null,to:W8}});try{await tD($,G,{instruction:Y.prompt??void 0})}catch(J){return console.warn(`[task-board] column rule on ${Z.status} rejected for ${Z.id}, un-delegating:`,J instanceof Error?J.message:J),await $.storage.taskBoard.
|
|
2817
|
+
`);default:return qT0(X,Z)}}function s71($,Z=new Map){if(typeof $==="string")return vv$($,Z);if(!$||typeof $!=="object")return"";return mv$($,Z)}class e71{client;names=new Map;lookupsDisabled=!1;constructor($){this.client=$}async resolve($){let Z=this.lookupsDisabled?[]:[...new Set($.filter((Q)=>!this.names.has(Q)))];for(let Q=0;Q<Z.length;Q+=gv$){let Y=Z.slice(Q,Q+gv$);for(let G of Y)this.names.set(G,null);try{for(let G of await this.client.listUsersByAccountId(Y))if(G.displayName)this.names.set(G.accountId,G.displayName)}catch(G){this.lookupsDisabled=!0,console.warn("[jira] user lookup failed, mentions render as @unknown for this run:",G instanceof Error?G.message:G);break}}let X=new Map;for(let Q of $){let Y=this.names.get(Q);if(Y)X.set(Q,Y)}return X}}var n71=15000,wo4=60000,gv$=50,Eo4="summary,status,priority,issuetype,updated,description,comment",jo4=100,t71=20,zo4=500,hv$=1000,uv$=20,Oc,Ao4;var MT0=L(()=>{J4();l71();d71();yv$();Oc=class Oc extends Error{status;constructor($,Z){super($);this.status=Z;this.name="JiraRequestError"}};Ao4=/^[a-z0-9][a-z0-9-]*\.atlassian\.net$/});function So4($,Z){if(!$.startsWith("/api/"))return null;let X;try{X=new URL($,"https://studio.invalid")}catch{return null}let Q=X.pathname.split("/"),[,Y,G,J,K,W]=Q;if(Q.length!==6||Y!=="api"||J!=="fs"||W!=="read"||K!=="outputs"||Co4(G)!==Z)return null;let H=X.searchParams.get("path");if(!H||H.includes(".."))return null;return{volume:K,path:H}}function Co4($){if($===void 0)return null;try{return decodeURIComponent($)}catch{return null}}function dv$($){let Z=$.split(".").pop()?.toLowerCase()??"";return ko4[Z]??null}function _o4($){let X=$.replace(/^\/+/,"").replace(/\//g,"_").replace(/[^A-Za-z0-9._-]/g,"-").replace(/^[-.]+/,"");return(X===""?"attachment":X).slice(-120)}function iv$($,Z){let X=[],Q=new Set;for(let Y of $){if(Q.has(Y))continue;Q.add(Y);let G=So4(Y,Z);if(!G||!dv$(G.path))continue;X.push({target:Y,ref:G,name:_o4(G.path)})}if(X.length>8)console.warn(`[jira] comment references ${X.length} images; embedding the first 8, the rest stay links`);return X.slice(0,8)}async function pv$($,Z){let X=await Z.read($.ref);if(!X)return null;if(X.byteLength>10485760)return console.warn(`[jira] ${$.ref.path} is ${X.byteLength} bytes, over the ${"10485760"} upload cap \u2014 staying a link`),null;let Y=(await Z.listAttachments().catch((K)=>{return console.warn("[jira] could not list attachments for dedup:",K),[]})).find((K)=>K.filename===$.name&&K.size===X.byteLength),G=Y?await Z.mediaIdFor(Y.id):(await Z.upload({name:$.name,bytes:X,contentType:dv$($.ref.path)??"image/png"})).mediaId,J=$.ref.path.split("/").pop()??$.name;return G?{id:G,alt:J}:null}var ko4;var nv$=L(()=>{ko4={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"}});async function VT0($,Z,X){if(Z.assigneeId)return Z;let Q=Z.organizationId,Y=await WS$($,Q,Z.status);if(!Y)return Z;let G=await $.storage.taskBoard.claimUnassignedForSuperAgent(Z.id,Q,X.assignedBy,X.actor,Z.status);if(!G)return Z;await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:null,to:W8}});try{await tD($,G,{instruction:Y.prompt??void 0})}catch(J){return console.warn(`[task-board] column rule on ${Z.status} rejected for ${Z.id}, un-delegating:`,J instanceof Error?J.message:J),await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,X.actor)??await $.storage.taskBoard.getById(Z.id,Q)??G}return G}var $X1=L(()=>{q6();m5();SU()});async function Dc($,Z){try{let{counts:X,watermark:Q,rescanPending:Y}=await po4($,Z);return await $.storage.jiraIntegrations.recordSyncResult(Z.id,{error:null,watermark:Q,rescanPending:Y}),X}catch(X){let Q=X instanceof Error?X.message:String(X);return await $.storage.jiraIntegrations.recordSyncResult(Z.id,{error:Q}).catch(()=>{}),{error:Q}}}async function fo4($,Z,X){let Y=await new kY(Z.siteUrl,Z.email,Z.apiToken).getBoardColumns(X);await $.storage.boardColumns.replaceAll(Z.organizationId,Y.map((J)=>({key:J.name,title:J.name,trackerStatuses:J.statuses})));let G=new Map;for(let J of Y)for(let K of J.statuses)if(!G.has(K))G.set(K,J.name);return G}function bo4({lastSeenJiraSprintId:$,jiraSprintId:Z}){return $!==Z}function yo4({jiraStatusChanged:$,currentStatus:Z,boardColumns:X}){if($)return!0;return Z!==null&&!X.has(Z)}function go4($,Z,X){let Q=$.lastSyncedAt?Math.ceil((X.getTime()-new Date($.lastSyncedAt).getTime())/60000):null,Y=Q===null?null:Math.max(0,Q)+vo4;return`${[`(${Z})`,"issuetype IN standardIssueTypes()",...Y!==null?[`updated >= -${Y}m`]:[]].join(" AND ")} ORDER BY updated ASC`}function ho4($,Z,X){if(X)return!1;return new Date($)>=Z}function uo4($,Z){return $>=ZX1||Z>=sv$}function tv$($){let Z=$.fields.issuetype?.hierarchyLevel;return typeof Z!=="number"||Z===0}async function co4($,Z){let X=$.fields.description,Q=await Z.resolve(Ds(X));return s71(X,Q).trim().slice(0,ev$)}function lo4($,Z){return`${$}/browse/${Z}`}function mo4($){let Z=$.fields.priority?.name?.toLowerCase();return Z&&xo4[Z]||"medium"}function ov$($,Z,X){return VT0($,X,{assignedBy:Z.createdBy,actor:aH})}async function rv$($,Z,X,Q,Y,G,J){let K=Z.organizationId,W=Q.fields.comment;if(W&&W.total===0)return;let H=W&&W.comments.length>=W.total?W.comments:await X.listComments(Q.id),F=await $.storage.jiraIntegrations.knownJiraCommentIds(K,H.map((B)=>B.id)),N=H.filter((B)=>!F.has(B.id)&&B.author?.accountId!==G);if(N.length===0)return;let U=await J.resolve(N.flatMap((B)=>Ds(B.body)));for(let B of N){let O=s71(B.body,U).slice(0,ev$),D=await $.storage.taskBoard.createComment({taskBoardItemId:Y,organizationId:K,authorId:aH,body:`**${B.author?.displayName??"Jira"} \xB7 via Jira:**
|
|
2818
2818
|
|
|
2819
2819
|
${O}`});if(!D)continue;try{await $.storage.jiraIntegrations.createCommentLink({commentId:D.id,organizationId:K,jiraCommentId:B.id})}catch(w){if(w.code==="23505"){await $.storage.taskBoard.deleteComment(D.id,K,aH);continue}throw w}}}class $x${ctx;organizationId;ids=new Map;constructor($,Z){this.ctx=$;this.organizationId=Z}async seed($){if($.length===0)return;let Z=await this.ctx.storage.sprints.upsertManyFromJira(this.organizationId,$.map(av$));for(let[X,Q]of Z)this.ids.set(X,Q)}async localIdFor($){if(!$)return null;let Z=this.ids.get($.id);if(Z)return Z;let X=await this.ctx.storage.sprints.upsertFromJira(this.organizationId,av$($));return this.ids.set($.id,X),X}}function av$($){return{jiraSprintId:$.id,name:$.name,state:$.state,startsAt:$.startsAt,endsAt:$.endsAt}}function do4($,Z){if($.size===0)return[];return Z.filter((X)=>!$.has(X.jiraIssueId))}async function io4($,Z,X,Q){let Y=Z.organizationId,G=await X.searchIssueIds(`(${Q}) AND issuetype IN standardIssueTypes()`);if(G.size===0)return console.warn(`[jira] scope for org ${Y} came back empty \u2014 skipping reconciliation rather than archiving the whole board`),0;let J=do4(G,await $.storage.jiraIntegrations.listLinkedIssuesOnBoard(Y));if(J.length===0)return 0;for(let K of J){let W=await $.storage.taskBoard.getById(K.itemId,Y);if(!W||W.status==="archived")continue;let H=await $.storage.taskBoard.update(K.itemId,Y,{status:"archived"},aH);await $.storage.taskBoard.recordActivity({taskBoardItemId:K.itemId,action:"status_changed",actorId:null,data:{from:W.status,to:"archived"}}),u$(Y,H),console.log(`[jira] ${K.jiraIssueKey} is no longer in board ${Z.boardId}'s scope \u2014 archived its card`)}return J.length}async function po4($,Z){let{organizationId:X,boardId:Q}=Z;if(!Q)throw Error("No Jira board selected");let Y=await $.storage.organizationSettings.get(Z.organizationId),G=Q7(Y?.flags,"org_board_columns"),J=await V5($,Z.organizationId),K=G?await fo4($,Z,Q):Xv$(Z.statusMapping),W=new Set((await J.columns()).map((S)=>S.key));if(K.size===0)throw Error(G?"This Jira board has no columns to mirror":"No status mapping configured");let H=Z.lastSyncedAt===null||Z.rescanPending,F=new kY(Z.siteUrl,Z.email,Z.apiToken),{accountId:N}=await F.myself(),U=new e71(F),B=new Date,O=await F.getBoardScopeJql(Q),D=go4(Z,O,B),w=new $x$($,X);await w.seed(await F.listBoardSprints(Q));let E={created:0,updated:0,unchanged:0,skipped:0,archived:0,unmappedStatuses:[]},j=new Set,z,A,P=0,I=0;while(P<ZX1&&I<sv$){I++;let S=await F.searchIssues({jql:D,nextPageToken:A});if(A=S.nextPageToken??void 0,S.issues.length===0){if(!A)break;continue}let i=await $.storage.jiraIntegrations.getLinksByIssueIds(X,S.issues.map((v)=>v.id));await U.resolve(S.issues.flatMap((v)=>[...Ds(v.fields.description),...(v.fields.comment?.comments??[]).flatMap((b)=>Ds(b.body))]));for(let v of S.issues){if(P>=ZX1)break;P++;let b=new Date(v.fields.updated);if(Number.isNaN(b.getTime()))throw Error(`Unparseable updated on ${v.key}`);let l=K.get(v.fields.status.name);if(!l||!tv$(v)){if(!l&&tv$(v))j.add(v.fields.status.name);E.skipped++,z=b;continue}let y=i.get(v.id);if(y&&ho4(y.jiraUpdatedAt,b,H)){E.unchanged++,z=b;continue}let p=v.fields.status.name,Q0=TT0(v.sprints),L0={title:v.fields.summary,description:await co4(v,U),externalUrl:lo4(Z.siteUrl,v.key),priority:mo4(v),boardColumnOrg:J.columnOwner()};if(y){let t=y.jiraStatus!==p,o=bo4({lastSeenJiraSprintId:y.jiraSprintId,jiraSprintId:Q0?.id??null}),B0=await $.storage.taskBoard.getById(y.itemId,X),s=yo4({jiraStatusChanged:t,currentStatus:B0?.status??null,boardColumns:W}),w0=await $.storage.taskBoard.update(y.itemId,X,{...L0,...s?{status:l}:{},...o?{sprintId:await w.localIdFor(Q0)}:{}},aH);if(await $.storage.jiraIntegrations.touchLink(y.itemId,{jiraStatus:p,jiraSprintId:Q0?.id??null}),B0&&s&&B0.status!==l)await $.storage.taskBoard.recordActivity({taskBoardItemId:y.itemId,action:"status_changed",actorId:null,data:{from:B0.status,to:l}});if(t&&!H)w0=await ov$($,Z,w0);await rv$($,Z,F,v,y.itemId,N,U),await $.storage.jiraIntegrations.touchLink(y.itemId,{jiraUpdatedAt:b}),u$(X,w0),E.updated++}else{let t=await $.storage.taskBoard.create({organizationId:X,...L0,status:l,sprintId:await w.localIdFor(Q0),by:aH});try{await $.storage.jiraIntegrations.createLink({itemId:t.id,organizationId:X,jiraIssueId:v.id,jiraIssueKey:v.key,jiraUpdatedAt:new Date(0),jiraStatus:p,jiraSprintId:Q0?.id??null})}catch(o){if(o.code==="23505"){await $.storage.taskBoard.delete(t.id,X,aH),E.unchanged++,z=b;continue}throw o}if(!H)t=await ov$($,Z,t);await rv$($,Z,F,v,t.id,N,U),await $.storage.jiraIntegrations.touchLink(t.id,{jiraUpdatedAt:b}),u$(X,t),E.created++}z=b}if(!A)break}E.unmappedStatuses=[...j].sort();let M=uo4(P,I);if(!M)E.archived=await io4($,Z,F,O);let q=H&&M;if(z===void 0&&P===0)return{counts:E,watermark:B,rescanPending:q};return{counts:E,watermark:z,rescanPending:q}}var aH="jira",ZX1=500,vo4=5,sv$=25,ev$=1e4,xo4;var kT0=L(()=>{f9();m5();$X1();k5();MT0();d71();xo4={highest:"urgent",high:"high",medium:"medium",low:"low",lowest:"low"}});var Xx$={};e(Xx$,{setJiraSyncRuntime:()=>JX1,registerJiraSyncWorkflow:()=>WX1,maybeEnqueueJiraStatusPush:()=>Ur4,maybeEnqueueJiraSprintPush:()=>Br4,enqueueJiraCommentPush:()=>KX1});import{DBOS as VZ,SchedulerMode as no4}from"@dbos-inc/dbos-sdk";function JX1($){Es=$}function pv(){if(!Es)throw Error("[jira] sync runtime not initialized \u2014 setJiraSyncRuntime() must run before the workflow fires");return Es}function J3(){let{db:$,encryptionKey:Z}=pv();return new mv($,new LG(Z))}function Zx$(){return new SQ(pv().db)}function oo4(){return new Os(pv().db)}async function ro4($){try{let{db:Z}=pv(),X=await J3().getById($);if(!X)return{id:$,error:"integration no longer exists"};if(!X.enabled)return{id:$};let Q=await rK(Z,X.organizationId);if(!Q)return{id:$,error:"organization no longer exists"};let Y=await Dc(Q,X);return"error"in Y?{id:$,error:Y.error}:{id:$}}catch(Z){return{id:$,error:Z instanceof Error?Z.message:String(Z)}}}async function ao4($,Z){let X=await VZ.runStep(()=>J3().listEnabledIds(),{name:"loadJiraIntegrations"});for(let Q of X){let Y=await VZ.runStep(()=>ro4(Q),{name:`syncJira:${Q}`});if(Y.error)console.warn(`[jira] sync ${Y.id} failed: ${Y.error}`)}}async function eo4($){let Z=J3();if(!(await Z.getByOrg($.organizationId))?.enabled)return null;let Q=await Z.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!Q)return null;if(await Z.hasCommentLink($.commentId))return null;return{jiraIssueId:Q.jiraIssueId}}async function $r4($){return(await pv().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst())?.slug??null}async function Zr4($,Z,X){let Q=await J3().getByOrg($);if(!Q?.enabled)return null;let G=(await rK(pv().db,$))?.orgFs;if(!G)return null;let J=new kY(Q.siteUrl,Q.email,Q.apiToken);return pv$(X,{read:(K)=>G.read(K.volume,K.path).catch((W)=>{if(W instanceof TJ)return null;throw W}),listAttachments:()=>J.listAttachments(Z),upload:(K)=>J.addAttachment(Z,K),mediaIdFor:(K)=>J.resolveMediaId(K)})}async function Xr4($,Z,X){let Q=J3(),Y=await Q.getByOrg($.organizationId);if(!Y?.enabled)return null;let G=await Q.getLinkByItemId($.taskBoardItemId,$.organizationId);if(!G)return null;if(await Q.hasCommentLink($.commentId))return null;return(await new kY(Y.siteUrl,Y.email,Y.apiToken).addComment(G.jiraIssueId,Z,{header:`${$.authorLabel} \xB7 via Studio:`,media:new Map(X)})).id}async function Qr4($,Z){try{await J3().createCommentLink({commentId:$.commentId,organizationId:$.organizationId,jiraCommentId:Z})}catch(X){if(X.code!=="23505")throw X}}async function Yr4($){let Z=$.body.slice(0,so4),X=await VZ.runStep(()=>eo4($),{name:"resolveCommentTarget",retriesAllowed:!0,maxAttempts:3});if(!X)return;let Q=[],Y=Lv$(Z);if(Y.length>0){let J=await VZ.runStep(()=>$r4($.organizationId),{name:"readOrgSlug",retriesAllowed:!0,maxAttempts:3});for(let K of iv$(Y,J??""))try{let W=await VZ.runStep(()=>Zr4($.organizationId,X.jiraIssueId,K),{name:`attachCommentImage:${K.name}`,retriesAllowed:!0,maxAttempts:3});if(W)Q.push([K.target,W])}catch(W){if(!e_$(W))throw W;console.warn(`[jira] could not attach ${K.ref.path}:`,W)}}let G=await VZ.runStep(()=>Xr4($,Z,Q),{name:"postCommentToJira",retriesAllowed:!1});if(!G)return;await VZ.runStep(()=>Qr4($,G),{name:"recordCommentLink",retriesAllowed:!0,maxAttempts:4})}async function Gr4($){let Z=J3(),X=await Z.getByOrg($.organizationId);if(!X?.enabled)return null;let Q=await Z.getLinkByItemId($.itemId,$.organizationId);if(!Q)return null;let Y=await Zx$().getById($.itemId,$.organizationId);if(!Y)return null;let G=await Kr4($.organizationId,Y.status,X.statusMapping);if(_71(G,Q.jiraStatus))return null;let K=await new kY(X.siteUrl,X.email,X.apiToken).listTransitions(Q.jiraIssueId),W=Yv$({targets:G,currentJiraStatus:Q.jiraStatus,availableTransitions:K.map((F)=>F.to.name)});if(W.kind!=="transition"){if(W.kind==="unreachable")console.warn(`[jira] ${Q.jiraIssueKey} is ${Y.status} on the board, but its workflow offers no transition to ${W.targets.join(" / ")} \u2014 `+"the card will not move on the Jira board");return null}let H=K.find((F)=>F.to.name===W.targetName);if(!H)return null;return{jiraIssueId:Q.jiraIssueId,transitionId:H.id,targetName:W.targetName}}async function Jr4($,Z){let X=J3(),Q=await X.getByOrg($.organizationId);if(!Q?.enabled)return;let Y=await X.getLinkByItemId($.itemId,$.organizationId);if(!Y||Y.jiraStatus===Z.targetName)return;let G=new kY(Q.siteUrl,Q.email,Q.apiToken);if(await G.getStatusName(Z.jiraIssueId)===Z.targetName){await X.touchLink($.itemId,{jiraStatus:Z.targetName});return}await G.transitionIssue(Z.jiraIssueId,Z.transitionId),await X.touchLink($.itemId,{jiraStatus:Z.targetName})}async function Kr4($,Z,X){let Q=await new _v(pv().db).listByOrg($);return Qv$({column:Q.find((Y)=>Y.key===Z),mapping:X,lane:Z})}async function Wr4($){let Z=J3();if(!(await Z.getByOrg($.organizationId))?.enabled)return null;let Q=await Z.getLinkByItemId($.itemId,$.organizationId);if(!Q)return null;let Y=await Zx$().getById($.itemId,$.organizationId);if(!Y)return null;let G=Y.sprintId?await oo4().jiraIdFor($.organizationId,Y.sprintId):null;if(Y.sprintId&&G===null)return console.warn(`[jira] ${Q.jiraIssueKey} is in a sprint that did not come from Jira \u2014 not pushing`),null;if(Q.jiraSprintId===G)return null;return{jiraIssueId:Q.jiraIssueId,jiraIssueKey:Q.jiraIssueKey,targetSprintId:G}}async function Hr4($,Z){let X=J3(),Q=await X.getByOrg($.organizationId);if(!Q?.enabled)return;let Y=await X.getLinkByItemId($.itemId,$.organizationId);if(!Y||Y.jiraSprintId===Z.targetSprintId)return;let G=new kY(Q.siteUrl,Q.email,Q.apiToken);if(await G.getIssueSprintId(Z.jiraIssueId)!==Z.targetSprintId)if(Z.targetSprintId===null)await G.moveIssueToBacklog(Z.jiraIssueId);else await G.addIssueToSprint(Z.targetSprintId,Z.jiraIssueId);await X.touchLink($.itemId,{jiraSprintId:Z.targetSprintId})}async function Fr4($){let Z=await VZ.runStep(()=>Wr4($),{name:"resolveSprintMove",retriesAllowed:!0,maxAttempts:3});if(!Z)return;await VZ.runStep(()=>Hr4($,Z),{name:"executeSprintMove",retriesAllowed:!0,maxAttempts:3})}async function Nr4($){let Z=await VZ.runStep(()=>Gr4($),{name:"resolveStatusTransition",retriesAllowed:!0,maxAttempts:3});if(!Z)return;await VZ.runStep(()=>Jr4($,Z),{name:"executeStatusTransition",retriesAllowed:!0,maxAttempts:3})}function Ur4($,Z){if(Z.updatedBy===aH)return;if(!YX1||!Es)return;let X=YX1;(async()=>{if(!await J3().getLinkByItemId(Z.id,$))return;await VZ.startWorkflow(X,{queueName:zO,workflowID:`jira-status:${Z.id}:${Z.status}:${Date.parse(Z.updatedAt)}`,enqueueOptions:{queuePartitionKey:$}})({organizationId:$,itemId:Z.id})})().catch((Q)=>{console.warn(`[jira] status push enqueue failed for ${Z.id}:`,Q instanceof Error?Q.message:Q)})}function Br4($,Z){if(Z.updatedBy===aH)return;if(!GX1||!Es)return;let X=GX1;(async()=>{if(!await J3().getLinkByItemId(Z.id,$))return;await VZ.startWorkflow(X,{queueName:zO,workflowID:`jira-sprint:${Z.id}:${Z.sprintId??"backlog"}:${Date.parse(Z.updatedAt)}`,enqueueOptions:{queuePartitionKey:$}})({organizationId:$,itemId:Z.id})})().catch((Q)=>{console.warn(`[jira] sprint push enqueue failed for ${Z.id}:`,Q instanceof Error?Q.message:Q)})}async function KX1($,Z){try{if(!QX1)return;if(!await $.storage.jiraIntegrations.getLinkByItemId(Z.taskBoardItemId,Z.organizationId))return;await VZ.startWorkflow(QX1,{queueName:zO,workflowID:`jira-cmt-push:${Z.commentId}`,enqueueOptions:{queuePartitionKey:Z.organizationId}})(Z)}catch(X){console.warn(`[jira] comment push enqueue failed for ${Z.commentId}:`,X instanceof Error?X.message:X)}}function WX1(){if(XX1)return;XX1=VZ.registerWorkflow(ao4,{name:"jiraSyncWorkflow"}),VZ.registerScheduled(XX1,{name:"jiraSyncWorkflow",crontab:to4,mode:no4.ExactlyOncePerIntervalWhenActive}),QX1=VZ.registerWorkflow(Yr4,{name:"jiraCommentPushWorkflow"}),YX1=VZ.registerWorkflow(Nr4,{name:"jiraStatusPushWorkflow"}),GX1=VZ.registerWorkflow(Fr4,{name:"jiraSprintPushWorkflow"})}var to4="2-59/10 * * * *",Es=null,so4=30000,XX1=null,QX1=null,YX1=null,GX1=null;var ST0=L(()=>{$v$();SO();Bc();wT0();tH();v71();Pj();MT0();nv$();l71();kT0()});function CT0($,Z,X,Q){PG({event:$,organizationId:Z,properties:{task_id:X.id,reports_task:BY(X),...Q}})}function u$($,Z){d5.emit($,{id:crypto.randomUUID(),type:fD$,source:"task-board",subject:Z.id,data:Z,time:new Date().toISOString()}),Promise.resolve().then(() => (ST0(),Xx$)).then((X)=>{X.maybeEnqueueJiraStatusPush($,Z),X.maybeEnqueueJiraSprintPush($,Z)}).catch((X)=>{console.warn("[jira] push hooks unavailable:",X)})}function Qx$($,Z){d5.emit($,{id:crypto.randomUUID(),type:bD$,source:"task-board",subject:Z,data:{id:Z},time:new Date().toISOString()})}function Or4($,Z){return $?[$]:Z}async function nv($,Z,X){let Q=$.metadata?.runMetadata?.taskBoardItemId,Y=!Q&&X?await $.storage.taskBoard.linkedTaskIds(X,Z):[];return Or4(Q,Y)}async function Yx$($,Z,X){let Q=$.organization?.id;if(!Q)return;try{for(let Y of await nv($,Q,X)){let G=await $.storage.taskBoard.getById(Y,Q),J=lv(Z),K=lv(G?.status??"");if(!G||J!==null&&K!==null&&J<=K)continue;let W=await $.storage.taskBoard.update(Y,Q,{status:Z},$.auth?.user?.id??G.updatedBy);if(await $.storage.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:G.status,to:Z}}).catch((H)=>console.error("[task-board] activity log write failed",H)),u$(Q,W),Z==="in_progress")CT0("task_run_started",Q,W,{from:G.status})}}catch(Y){console.error("[task-board] run transition failed",Y)}}async function _T0($,Z){let X=$.organization?.id;if(!X)return;try{for(let Q of await nv($,X,Z)){let Y=await $.storage.taskBoard.openReviewCycleIfInProgress(Q,X,await A9($,X));if(!Y)continue;u$(X,Y),CT0("task_run_completed",X,Y,{from:"in_progress",via:"pr_open"})}}catch(Q){console.error("[task-board] review-cycle open failed",Q)}}async function vT0($,Z,X,Q){let Y=$.organization?.id;if(!Y)return;try{let G=OT0(Z);if(!G)return;let J=await nv($,Y,Q);for(let K of J)await $.storage.taskBoard.linkPr({taskBoardItemId:K,organizationId:Y,url:G.url,prNumber:G.number,repoOwner:G.owner,repoName:G.repo,connectionId:X??null})}catch(G){console.error("[task-board] PR capture failed",G)}}async function wc($,Z,X,Q,Y){try{let G=await $.advanceLinkedTasksToReviewOnThreadFinish(Z,X,Y);for(let J of G)u$(X,J),CT0("task_run_completed",X,J,{from:"in_progress",via:"thread_finish"});for(let J of G)await $.clearRunRetry(J.id,X).catch(()=>{})}catch(G){console.error("[task-board] thread-finish transition failed",G)}await HX1($,Z,X,Y),await FX1($,Q,Z,X)}function Gx$($){return(lv($.status)??-1)>=DT0.in_review||Boolean($.reviewCycleStartedAt)}async function HX1($,Z,X,Q){try{let Y=await $.failedRunInfo(Z,X);if(!Y)return;let G=p_$(Y);for(let J of await $.linkedTaskIds(Z,X)){let K=await $.getById(J,X);if(!K)continue;if(Gx$(K))await $.relabelDeliveredFailure(Z,X,wr4).catch(()=>{});if(K.status!=="in_progress")continue;if(K.reviewCycleStartedAt)continue;if(K.threads.some((F)=>F.hasMessages&&F.status==="in_progress"))continue;let W=K.retryAttempts;if(W<G){let F=j7(Dr4,Lr4,W,2,0.5);if(!await $.scheduleRunRetry(J,X,W+1,new Date(Date.now()+F),Q.progress))continue;await $.recordActivity({taskBoardItemId:J,action:"status_changed",actorId:null,data:{from:"in_progress",to:"in_progress",retry:W+1,of:G,reason:Y.errorText??Y.kind}}).catch(()=>{});continue}let H=await $.returnToTodoAfterFailure(J,X,K.updatedBy,Q);if(!H)continue;await $.recordActivity({taskBoardItemId:J,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Y.errorText??Y.kind,retriesSpent:W}}).catch(()=>{}),u$(X,H),CT0("task_run_failed",X,K,{reason:Y.kind??"error",retries_spent:W})}}catch(Y){console.error("[task-board] failed-run reaction failed",Y)}}async function FX1($,Z,X,Q){try{for(let Y of await $.linkedTaskIds(X,Q)){let G=await $.getById(Y,Q);if(!G)continue;if(Gx$(G))continue;if(G.threads.some((K)=>K.hasMessages&&(K.status===null||!Us.has(K.status))))continue;if((await $.listPrs(Y,Q)).length>0)continue;await cD$(Z,Q,Y)}}catch(Y){console.error("[task-board] quota refund pass failed",Y)}}async function NX1($,Z){let X=await A9($,Z.organizationId);if(Z.status!==X.progress||!VY(Z,X.review))return;if(!vv(Z.organizationId,"in_review",X.review,"parking a reviewed card for a person"))return;try{let Q=await $.storage.taskBoard.update(Z.id,Z.organizationId,{status:X.review},Z.updatedBy);await $.storage.taskBoard.recordActivity({taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"in_review"}}).catch(()=>{}),u$(Z.organizationId,Q)}catch(Q){console.error(`[task-board] parking ${Z.id} for review failed`,Q)}}async function sH($,Z,X){let Q=Z.organizationId;if(Z.assigneeId!==W8)return!1;try{await NX1($,Z).catch((G)=>console.warn(`[task-board] parking ${Z.id} before hand-off failed`,G));let Y=await $.storage.taskBoard.unassignSuperAgent(Z.id,Q,Z.updatedBy);if(!Y)return!1;return await k6($,{taskBoardItemId:Z.id,action:"assignee_changed",actorId:null,data:{from:Z.assigneeId,to:null,reason:X}}),console.warn(`[task-board] ${Z.id} handed to a human: ${X}`),u$(Q,Y),!0}catch(Y){return console.error(`[task-board] handing ${Z.id} to a human failed`,Y),!1}}async function Jx$($,Z,X){if(!(X instanceof AQ))return!1;if(X.reason!=="runs_exhausted")return!1;return await sH($,Z,"per-task run limit reached \u2014 the Super Agent can no longer re-dispatch "+"itself on this task. Re-run it manually to continue."),!0}async function Kx$($,Z){let X=$.organization?.id;if(!X)return;try{let Q=await $.storage.taskBoard.reopenLinkedTasksOnThreadRun(Z,X);for(let Y of Q)u$(X,Y)}catch(Q){console.error("[task-board] thread-run reopen failed",Q)}}function Wx$($){return $.includes("create_pull_request")||$.includes("createPullRequest")}function Hx$($){if(Er4.test($))return!0;return jr4.test($)&&zr4.test($)}var Lr4=30000,Dr4=120000,wr4="Run ended after it had already delivered \u2014 the task moved on without it",Er4,jr4,zr4;var k5=L(()=>{pJ();x4();tH();m5();Uc();n_$();J4();Fs();q6();CX();oH();Er4=/\bgh\s+pr\s+create\b/,jr4=/api\.github\.com\/repos\/[^\s"']+\/pulls\b/,zr4=/(?:-X|--request)\s+POST/});function Pr4($){if($.status==="completed")return"advance";if($.status==="failed"&&$.messageStorageVersion===2&&($.harnessId==="decopilot"||$.harnessId==="claude-code"))return"nudge";return"none"}function Ar4($){return["This task is still In Progress on the board and your last run ended without finishing it.","","Look at what you already did (`git log`, `git status`, and the messages above), 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,",$==="decopilot"?"- or, if you're blocked on something only a human knows, call the `user_ask` tool.":"- or, if you're blocked on something only a human knows, say what you need and stop.","","Don't start over and don't redo work you already committed or pushed. You are on the same branch as before \u2014 push to it and update your existing pull request rather than opening a second one."].join(`
|
|
2820
2820
|
`)}async function Tr4($,Z,X){await Hc($,Z,X,{messageId:`stall-nudge-${Z.id}-${X.id}`,prompt:Ar4(X.harness_id),workflowID:`stall-nudge:${Z.id}:${X.id}`})}async function Rr4($,Z){let X=await $.storage.threads.get(Z);if(!X)return{action:"none",thread:null};return{action:Pr4({status:X.status,messageStorageVersion:X.message_storage_version,harnessId:X.harness_id}),thread:X}}function Ir4($,Z=Date.now()){if($.status!=="in_progress")return!1;if($.run_started_at)return!1;return Ws($,Z)}async function qr4($,Z){let X=[];for(let Q of Z.threads){if(Q.status!=="in_progress")continue;let Y=await $.storage.threads.get(Q.threadId);if(!Y||!Ir4(Y))continue;if(await $.storage.threads.markRunFailed(Q.threadId,UX1,"abandoned"))X.push(Q.threadId),console.warn(`[task-board] failed never-started thread ${Q.threadId} on ${Z.id}`)}return X}async function Fx$($,Z){let X=$.organization?.id;if(!X)return;for(let Q of Z){if(Q.status==="in_progress")try{if((await qr4($,Q)).length>0)continue}catch(J){console.error(`[task-board] reaping threads for ${Q.id} failed`,J)}let Y;try{Y=Q.repo!=null&&(await $.storage.taskBoard.listPrs(Q.id,X)).length>0}catch(J){console.error(`[task-board] listPrs for ${Q.id} failed`,J);continue}if(!k71(Q,Y))continue;let G=Q.threads.find((J)=>J.hasMessages);if(!G)continue;try{let{action:J,thread:K}=await Rr4($,G.threadId);if(J==="none"||!K)continue;if(J==="advance")await wc($.storage.taskBoard,G.threadId,X,$.storage.organizationBilling,await A9($,X));else await Tr4($,Q,K)}catch(J){console.error(`[task-board] stall recovery failed for ${Q.id}`,J)}}}var UX1="Run never started \u2014 no pod picked it up before the idle window elapsed";var BX1=L(()=>{m5();WT0();tH();k5()});import{z as K3}from"zod";var Mr4,tv;var OX1=L(()=>{m5();k0();HY();nK();BX1();Mr4=K3.object({key:K3.string(),title:K3.string(),position:K3.number(),role:K3.string().nullable()}),tv=c({name:"TASK_BOARD_ITEM_LIST",description:"List all task board items for the organization, plus the `owner/name` repos this organization has imported (the valid values for a task's `repo` field).",annotations:{title:"List Task Board Items",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:K3.object({}),outputSchema:K3.object({items:K3.array(Xc),repos:K3.array(K3.string()),sprints:K3.array(OS$),columns:K3.array(Mr4)}),handler:async($,Z)=>{a(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let[Q,{items:Y},G,J]=await Promise.all([Z.storage.taskBoard.list(X),Z.storage.connections.list(X,{slug:"mcp-github"}),Z.storage.sprints.listByOrg(X),V5(Z,X).then((W)=>W.columns())]),K=gL$(Y);return Fx$(Z,Q),{items:Q,repos:K,sprints:G,columns:J}}})});import{z as SY}from"zod";function Sr4($){return kr4.some((Z)=>$[Z]!==void 0)}function Cr4($,Z){let X=[];for(let{field:G,action:J}of Vr4){if(Z[G]===$[G])continue;X.push({action:J,data:{from:$[G],to:Z[G]}})}if(Z.description!==$.description)X.push({action:"description_changed"});let Q=new Set($.tags.map((G)=>G.id));if(Z.tags.length!==$.tags.length||Z.tags.some((G)=>!Q.has(G.id)))X.push({action:"tags_changed",data:{from:$.tags,to:Z.tags}});return X}function _r4($,Z){if($!==W8)return!1;if(!Z)return!1;return Z.assigneeId!==W8?!0:Z.status==="todo"}function xr4($,Z,X,Q){let Y=$!==void 0&&vr4.has($),G=Z!==void 0&&VY(Z,Q);return X&&Y&&G}function LX1($,Z){return $!==void 0&&C71($)&&!Z}var Vr4,kr4,vr4,ov;var xT0=L(()=>{m5();k0();f9();nK();oH();SZ1();SU();CX();bD();k5();$X1();Uc();pJ();Vr4=[{field:"status",action:"status_changed"},{field:"assigneeId",action:"assignee_changed"},{field:"priority",action:"priority_changed"},{field:"type",action:"type_changed"},{field:"dueDate",action:"due_date_changed"},{field:"title",action:"title_changed"},{field:"sprintId",action:"sprint_changed"}],kr4=["title","description","status","priority","type","assigneeId","repo","dueDate","sortOrder","sprintId","tagIds"];vr4=new Set(["approved","merged","post_deploy_validation","done","archived"]);ov=c({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:SY.object({id:SY.string(),title:SY.string().min(1).max(_A0).optional(),description:SY.string().max(CA0).nullable().optional(),status:PU.optional(),priority:xv.optional(),type:na.optional(),assigneeId:SY.string().nullable().optional(),repo:SY.string().max(vA0).nullable().optional(),dueDate:SY.string().datetime().nullable().optional(),sortOrder:SY.number().optional(),sprintId:SY.string().nullable().optional(),tagIds:SY.array(SY.string()).max(1000).optional(),linkThreadId:SY.string().optional(),prUrl:SY.string().nullable().optional().describe("GitHub pull request URL to link to this task, e.g. https://github.com/owner/repo/pull/123. Pass it after opening a PR for an existing card; linking one is what starts its review.")}),outputSchema:SY.object({item:Xc}),handler:async($,Z)=>{a(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.prUrl?dD($.prUrl):null;if($.prUrl&&!Q)throw Error(`Not a GitHub pull request URL: ${$.prUrl} (expected https://github.com/<owner>/<repo>/pull/<number>)`);if($.sprintId){if(!(await Z.storage.sprints.listByOrg(X)).some((U)=>U.id===$.sprintId))throw Error("sprintId is not a sprint on this board")}if($.assigneeId)await xA0(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 Y=Sr4($),G=Y?await Z.storage.taskBoard.getById($.id,X):null;if(Y&&!G)throw Error(`Task board item not found: ${$.id}`);let J=await V5(Z,X);if($.status!==void 0)await kA0(J,$.status);if($.status!==void 0&&C71($.status)){let N=await Z.storage.organizationSettings.get(X);if(LX1($.status,Q7(N?.flags,"delivery_lanes_enabled")))throw Error("Delivery lanes are not enabled for this organization \u2014 enable "+"them in Settings before moving a task to Approved, Merged, or Post-deploy Validation.")}let K=jU.getStore()!==void 0;if(xr4($.status,G??void 0,K,(await J.lanes()).review))throw Error("This task is under review \u2014 a run can't move it to Done or Archived. "+"Leave it for the reviewer; only a person, or TASK_BOARD_REVIEW_DECISION on a reviewer's own run, closes out a task under review.");let W=$.assigneeId!==void 0&&$.assigneeId!==(G?.assigneeId??null),H=_r4($.assigneeId,G);if(G&&BY(G)){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(H)await wu(Z,G,KD())}if($.tagIds!==void 0){let N=await Z.storage.tags.listOrgTags(X),U=new Set(N.map((B)=>B.id));for(let B of $.tagIds)if(!U.has(B))throw Error(`Tag not found: ${B}`);await Z.storage.taskBoard.setItemTags($.id,$.tagIds,a0(Z))}let F;if(Y)F=await Z.storage.taskBoard.update($.id,X,{title:$.title,description:$.description,status:H?"todo":$.status,...$.status!==void 0||H?{boardColumnOrg:J.columnOwner()}:{},priority:$.priority,type:$.type,assigneeId:$.assigneeId,assignedBy:W?$.assigneeId?a0(Z):null:void 0,repo:$.repo,dueDate:$.dueDate,sortOrder:$.sortOrder,sprintId:$.sprintId},a0(Z));else{let N=await Z.storage.taskBoard.getById($.id,X);if(!N)throw Error(`Task board item not found: ${$.id}`);F=N}if(Q)await Z.storage.taskBoard.linkPr({taskBoardItemId:F.id,organizationId:X,url:Q.url,prNumber:Q.number,repoOwner:Q.owner,repoName:Q.repo,connectionId:null});if(G){let N=a0(Z),U=Cr4(G,F);if(U.length>0)await t_$(Z,U.map((B)=>({taskBoardItemId:F.id,actorId:N,...B,alsoSubscribe:B.action==="assignee_changed"&&F.assigneeId!==W8?[F.assigneeId]:void 0})))}if(G&&F.description!==G.description)await Z.storage.notifications.notifyMentions({taskBoardItemId:F.id,organizationId:X,actorId:a0(Z),body:F.description??"",previousBody:G.description});if(Y||$.linkThreadId||Q)u$(X,F);if(H)return await tD(Z,F,{userInitiated:!0}),{item:F};if($.status!==void 0&&G!==null&&G.status!==F.status)F=await VT0(Z,F,{assignedBy:a0(Z),actor:a0(Z)});return{item:F}}})});import{z as fT0}from"zod";var rv;var DX1=L(()=>{k0();k5();rv=c({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:fT0.object({id:fT0.string()}),outputSchema:fT0.object({success:fT0.boolean()}),handler:async($,Z)=>{a(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,a0(Z)??"system"))throw Error(`Task board item not found: ${$.id}`);return Qx$(X,$.id),{success:!0}}})});function av($){if($.length===0)return!1;let Z=new Map;for(let X of $){let Q=`${X.repoOwner}/${X.repoName}`.toLowerCase(),Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z.values()].every(fr4)}function fr4($){return $.some((Z)=>Z.merged===!0)&&$.every((Z)=>Z.merged===!0||Z.state==="closed")}async function br4($,Z,X,Q){let Y=await $.storage.taskBoard.getById(X,Z);if(!Y||Y.status!=="done")return!1;let G=await $.storage.taskBoard.listPrs(X,Z),J=await Promise.all(G.map(async(F)=>({...F,...await Q($,Z,F)})));if(!av(J))return!1;let K=await V5($,Z),W=await K.archiveColumn();if(!W)return!1;let H=await $.storage.taskBoard.update(X,Z,Z3(K,W),Y.updatedBy);return await k6($,{taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:"done",to:W,reason:"merged_pr_auto_archive"}}),u$(Z,H),!0}async function Nx$($,Z,X,Q=yT0){let Y=0;for(let G of X)try{if(await br4($,Z,G,Q))Y+=1}catch(J){console.error(`[task-board-archive] ${G} failed`,J)}return{archived:Y}}function bT0($){let Z=new Map;for(let{id:X,organizationId:Q}of $){let Y=Z.get(Q);if(Y)Y.push(X);else Z.set(Q,[X])}return[...Z].map(([X,Q])=>({organizationId:X,itemIds:Q}))}var Ec=L(()=>{m5();CX();gG();k5()});function gT0($){return $.replace(/\/api\/[^/\s)]+\/fs\/([^/\s)]+)\/read\?path=([^)\s]+)/g,(Z,X,Q)=>{let Y,G;try{Y=decodeURIComponent(X),G=decodeURIComponent(Q)}catch{return Z}let J=(K)=>K.startsWith("/")||K.split("/").includes("..");if(J(Y)||J(G))return Z;return uH(Y,G)})}function hT0($,Z){return Z===$?null:"The image and file links in that description are real paths in this sandbox, not URLs \u2014 `Read` them. A screenshot the task points at is usually the clearest statement of what it wants."}var wX1=L(()=>{$P()});function yr4($){let Z=new Map($.map((G)=>[G.id,G])),X=new Map;for(let G of $c($)){let J=Ux$(G.owner,G.repo);X.set(J,[...X.get(J)??[],G])}if(X.size!==1)return null;let Q=[...X.values()][0],Y=Q.find((G)=>{let J=Z.get(G.connectionId);return J?vz(J):!1})??Q[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function uT0($,Z){if(!mZ0())return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"hosted sandbox unavailable \u2014 running Decopilot"),null;try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=yr4(X);if(Q)return{repo:Q};let Y=new Map;for(let J of $c(X)){let K=Ux$(J.owner,J.repo);if(!Y.has(K))Y.set(K,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let G=Y;if(G.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${G.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...G.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function Bx$($,Z,X){let Q=["You've been assigned this task. Complete it and finish with a pull request if it makes sense (like a coding task) or is explicitly requested.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description){let Y=gT0($.description);Q.push("","Description:",Y);let G=hT0($.description,Y);if(G)Q.push("",G)}if(Q.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated. ${gr}`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Start with the one the task is about. If it turns out to need a change in "+"another of them too, call `mcp__studio__TASK_ADD_REPO` again \u2014 repositories "+"accumulate, so a second call adds a checkout beside the first rather than replacing it. Each lands in its own directory and keeps its own git remote, so open one pull request per repository you changed.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
|