decocms 3.4.0 → 3.4.1
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-C2xmuErv.js → AlertCircle-Bc3r3AGq.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DY3nGAjH.js → ArrowUpRight-DfEIENBd.js} +1 -1
- package/dist/client/assets/{Check-Bl0EnB2J.js → Check--VLhXi5l.js} +1 -1
- package/dist/client/assets/{CheckCircle-Bt38xVIy.js → CheckCircle-7xc6-R3M.js} +1 -1
- package/dist/client/assets/{ChevronDown-BYvseX6e.js → ChevronDown-66ErjaPf.js} +1 -1
- package/dist/client/assets/{ChevronLeft-DoUOCEbQ.js → ChevronLeft-DyW6EtsM.js} +1 -1
- package/dist/client/assets/{ChevronRight-CJPo14Wd.js → ChevronRight-C87PRbBa.js} +1 -1
- package/dist/client/assets/{ChevronUp-CoYKSGM9.js → ChevronUp-BuPeXu8C.js} +1 -1
- package/dist/client/assets/{Container-Bgm498uR.js → Container-cZo3l6OX.js} +1 -1
- package/dist/client/assets/{DotsVertical-DdI4UlQo.js → DotsVertical-CQgc8nSx.js} +1 -1
- package/dist/client/assets/{Eye-D-FtEtW8.js → Eye-DHHjYDbX.js} +1 -1
- package/dist/client/assets/{FilterLines-Bn2_q3W3.js → FilterLines-CWR_eJ7z.js} +1 -1
- package/dist/client/assets/{Globe01-5KEfDt4K.js → Globe01-B10jCcNH.js} +1 -1
- package/dist/client/assets/{HardDrive-Bq_J68ys.js → HardDrive-7KMC69UH.js} +1 -1
- package/dist/client/assets/{Key01-C484g3YO.js → Key01-CTKRB2Cd.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CnXQOO58.js → LayoutLeft-SQH1HcmI.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DSXCOuPf.js → LinkExternal01-CjT-4hM8.js} +1 -1
- package/dist/client/assets/{Monitor01-DxGBVT7-.js → Monitor01-svtG00ql.js} +1 -1
- package/dist/client/assets/{Palette-BL7llRL5.js → Palette-CA_16qMN.js} +1 -1
- package/dist/client/assets/{Play-COr2_UEr.js → Play-CrdarOgl.js} +1 -1
- package/dist/client/assets/{Plus-DyGCHsAC.js → Plus-C9icoBmX.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-DwuEW87g.js → RefreshCcw01-D1tvoH2_.js} +1 -1
- package/dist/client/assets/{SearchMd-BvLcLD4O.js → SearchMd-Di6_vvQ1.js} +1 -1
- package/dist/client/assets/{Settings02-DdSNGnuW.js → Settings02-BylJiOHK.js} +1 -1
- package/dist/client/assets/{Shield01-B-jBzvZJ.js → Shield01-CDSs18-B.js} +1 -1
- package/dist/client/assets/{Star01-BWl4O-UT.js → Star01-D1DEXGAi.js} +1 -1
- package/dist/client/assets/{Stars01-cmM0sb2I.js → Stars01-UWs0NZ30.js} +1 -1
- package/dist/client/assets/{Stars02-BDvnLwBo.js → Stars02-CXAcgX2g.js} +1 -1
- package/dist/client/assets/{Sun-BumCYr1L.js → Sun-CCiXRotp.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DL7oI9Hg.js → SwitchHorizontal01-BU3C5ze8.js} +1 -1
- package/dist/client/assets/{Tool01-Cgf_tMbK.js → Tool01-BMk00CcA.js} +1 -1
- package/dist/client/assets/{Trash01-BWWRskAa.js → Trash01-MTKniuxn.js} +1 -1
- package/dist/client/assets/{Upload01-CufDtzzB.js → Upload01-DsrMMWgf.js} +1 -1
- package/dist/client/assets/{User01-CL8jgZE5.js → User01-DShN8gQ-.js} +1 -1
- package/dist/client/assets/{Users01-DVvuBAcj.js → Users01-Bvh39Ydu.js} +1 -1
- package/dist/client/assets/{Users03-DuD0whJZ.js → Users03--pQkY_Pm.js} +1 -1
- package/dist/client/assets/{X-Dnhh57X7.js → X-D-FyhysP.js} +1 -1
- package/dist/client/assets/{XCircle-M_oWnCac.js → XCircle-Pgrh_mFJ.js} +1 -1
- package/dist/client/assets/{XClose-tPJB8Sgg.js → XClose-CXixB7oH.js} +1 -1
- package/dist/client/assets/{Zap-C7nJc6zh.js → Zap-BcF-Iz_3.js} +1 -1
- package/dist/client/assets/{ZapSquare-D8HT6_jN.js → ZapSquare-BH297b52.js} +1 -1
- package/dist/client/assets/{ZoomOut-DvI5OdTo.js → ZoomOut-qupe1GUj.js} +1 -1
- package/dist/client/assets/{access-gate-DImJJoEr.js → access-gate-b8qBeVwB.js} +1 -1
- package/dist/client/assets/{accordion-7MLP1JmO.js → accordion-bX483Ztz.js} +1 -1
- package/dist/client/assets/{add-section-modal--OZiIc-7.js → add-section-modal-wMptfoHV.js} +1 -1
- package/dist/client/assets/{agent-capabilities-BPRMoWbD.js → agent-capabilities-ADaK_qqp.js} +1 -1
- package/dist/client/assets/{agent-icon-WacEkBrp.js → agent-icon-6l7Nwe2K.js} +1 -1
- package/dist/client/assets/{agent-icons-DSxNh1vt.js → agent-icons-BDS9BBHh.js} +1 -1
- package/dist/client/assets/{agents-list-C2v-b0Uw.js → agents-list-BdFiPs3r.js} +1 -1
- package/dist/client/assets/{ai-providers-BwZCii8q.js → ai-providers-lM-GGoBl.js} +1 -1
- package/dist/client/assets/{alert-B3xreeC3.js → alert-Ta86Z4_L.js} +1 -1
- package/dist/client/assets/{alert-dialog-DXWvjPm6.js → alert-dialog-_2G9ccD7.js} +1 -1
- package/dist/client/assets/app-editor-BJ_HJXFs.js +1 -0
- package/dist/client/assets/{auth-catchall-DkH2zPkq.js → auth-catchall-BdHpJwKo.js} +1 -1
- package/dist/client/assets/{auth-split-layout-a7pkbs3d.js → auth-split-layout-DVUC3dWq.js} +1 -1
- package/dist/client/assets/{automation-list-row-Co4RY6C0.js → automation-list-row-BNHDxEG_.js} +1 -1
- package/dist/client/assets/{automation-runs-89AdbVbs.js → automation-runs-BbNb5m5Z.js} +1 -1
- package/dist/client/assets/{automations-CpHR-q7K.js → automations-ChMgB7Hm.js} +1 -1
- package/dist/client/assets/{avatar-MwlGDSa1.js → avatar-KTqg6Pir.js} +1 -1
- package/dist/client/assets/{badge-CDV4_k2B.js → badge-jK5_JNPO.js} +1 -1
- package/dist/client/assets/{brand-context-CEbbgDr_.js → brand-context-D1YLW65X.js} +1 -1
- package/dist/client/assets/{buckets-B-c_g1Bu.js → buckets-CZodJDYe.js} +1 -1
- package/dist/client/assets/{calendar-_Z1zwZng.js → calendar-DFy-BKZq.js} +1 -1
- package/dist/client/assets/{capability-load-error-U6Dy8kIL.js → capability-load-error-DUP-Lw9V.js} +1 -1
- package/dist/client/assets/{card-BrXXg9xg.js → card-Ce7y-Nqu.js} +1 -1
- package/dist/client/assets/{chat-context-DKFtpKPJ.js → chat-context-CpKbwwmM.js} +1 -1
- package/dist/client/assets/{checkbox-COoWVOED.js → checkbox-MO2_GITU.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CgA40pPN.js → cli-auth-success-XZzsr92m.js} +1 -1
- package/dist/client/assets/{collection-detail-BZkXi3bA.js → collection-detail-Bv6I7A_k.js} +1 -1
- package/dist/client/assets/{collection-display-button-BkPkMS-1.js → collection-display-button-DzXqmtbd.js} +1 -1
- package/dist/client/assets/{collection-search-HZ4Ln7Q2.js → collection-search-CPYfTi84.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-Bos1aSX0.js → collection-table-wrapper-DgzLrzuP.js} +1 -1
- package/dist/client/assets/{collection-tabs-Bt-TX4Xo.js → collection-tabs-CIsqNrxU.js} +1 -1
- package/dist/client/assets/{collections-DltZgEAo.js → collections-B-PXiD2Y.js} +1 -1
- package/dist/client/assets/{command-DScV9t-B.js → command-BHmAxNRB.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-CLGlbMya.js → connect-desktop-dialog-BQZD1I8n.js} +1 -1
- package/dist/client/assets/{connection-card-BXL7SVUL.js → connection-card-BHzG8ppu.js} +1 -1
- package/dist/client/assets/{connection-detail-ZBj-b2U9.js → connection-detail-BlmixFGl.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-ZyPV2_OX.js → connection-form-helpers-CgKn2eM9.js} +1 -1
- package/dist/client/assets/{connections-kRTrf7Rr.js → connections-D5zy3mYf.js} +1 -1
- package/dist/client/assets/{constants-7h1Iherr.js → constants-DI_u-hVk.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DENZDpL-.js → decopilot-sse-pool-DPWhf2bX.js} +1 -1
- package/dist/client/assets/{dialog-DrWcnTZj.js → dialog-Bt3zXcK6.js} +1 -1
- package/dist/client/assets/{domain-settings-ShrDeEq2.js → domain-settings-CZnFXOwr.js} +1 -1
- package/dist/client/assets/{drawer-Bfik0Ru5.js → drawer-DeHC5s3g.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CZNwXuzY.js → dropdown-menu-SwrAlbwN.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-BP4187XS.js → dynamic-plugin-layout-WDrQTfck.js} +1 -1
- package/dist/client/assets/{empty-state-DKLTVUZK.js → empty-state-BJFB-AwN.js} +1 -1
- package/dist/client/assets/{empty-state-D3IZdm2e.js → empty-state-DlCayRAK.js} +1 -1
- package/dist/client/assets/{extract-connection-data-nTPi-bUk.js → extract-connection-data-CrMYEI5i.js} +1 -1
- package/dist/client/assets/{features-BLxt6ZXO.js → features-BgkDxOlu.js} +1 -1
- package/dist/client/assets/{file-explorer-qXYPqBrE.js → file-explorer-DrueRu5k.js} +1 -1
- package/dist/client/assets/{file-type-icon-CNGWzVav.js → file-type-icon-BHF_Ovux.js} +1 -1
- package/dist/client/assets/{files-DxicSOqn.js → files-BCcd3t2S.js} +1 -1
- package/dist/client/assets/{form-DZneHGBX.js → form-8jBGaVW7.js} +1 -1
- package/dist/client/assets/{general-BNlVKTyv.js → general-BJkPBrz3.js} +1 -1
- package/dist/client/assets/{generate-id-BKVk8ACt.js → generate-id-Bfx7nOJH.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DhCzx3JE.js → github-repo-picker-F4vLHgJ-.js} +1 -1
- package/dist/client/assets/{header-tab-button-FYT24Mc0.js → header-tab-button-DCSg63Wl.js} +1 -1
- package/dist/client/assets/{hover-card-C3fFUxNZ.js → hover-card-DcJvwauT.js} +1 -1
- package/dist/client/assets/{image-field-BPpyMlFF.js → image-field-cind3dwC.js} +1 -1
- package/dist/client/assets/{index-D8CIGkco.js → index-BIANv7ur.js} +1 -1
- package/dist/client/assets/{index-BYABqu1-.js → index-Bac2tQWh.js} +1 -1
- package/dist/client/assets/{index-BGTvYbRH.js → index-BrIVZCzt.js} +1 -1
- package/dist/client/assets/{index-nja5uOPv.js → index-BzoFvbIH.js} +1 -1
- package/dist/client/assets/{index-BzQy6K9H.js → index-C0t_9xyr.js} +1 -1
- package/dist/client/assets/{index-CrU7PEoz.js → index-C1kxS2Io.js} +1 -1
- package/dist/client/assets/{index-CE8bhCJ-.js → index-C3tcbzRj.js} +1 -1
- package/dist/client/assets/{index-CHxlbuKY.js → index-C_oSBqFD.js} +3 -3
- package/dist/client/assets/{index-CO19ITRz.js → index-CfGIr4vM.js} +4 -4
- package/dist/client/assets/{index-DnL9bwru.js → index-ChzbgMa2.js} +1 -1
- package/dist/client/assets/{index-C7bMF1Zw.js → index-DEWYXjIf.js} +1 -1
- package/dist/client/assets/{index-DBPwWvUg.js → index-DML39Lt-.js} +1 -1
- package/dist/client/assets/{index-h-7ASBRq.js → index-DQj7btfC.js} +1 -1
- package/dist/client/assets/{index-1DdOMz-0.js → index-DlcvFOU2.js} +1 -1
- package/dist/client/assets/{index-fTzwyCrX.js → index-d7-A3CDs.js} +1 -1
- package/dist/client/assets/{index-redirect--DRbdQvu.js → index-redirect-KnAJlqvx.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-ClvxtPxd.js → infiniteQueryObserver-w8EJyyrI.js} +1 -1
- package/dist/client/assets/{input-BqbhwOOI.js → input-Ct22kLSY.js} +1 -1
- package/dist/client/assets/{integration-icon-DsdPiq0I.js → integration-icon-CNf7sZ5b.js} +1 -1
- package/dist/client/assets/{label-DylEtHs-.js → label-CvDTa89d.js} +1 -1
- package/dist/client/assets/{layout-BNJzmBuH.js → layout-Dkxj2bFg.js} +1 -1
- package/dist/client/assets/{login-BqdS0wu4.js → login-Dv6Rz1bY.js} +1 -1
- package/dist/client/assets/{members-N8gPc_Ma.js → members-BQXsk1m4.js} +1 -1
- package/dist/client/assets/{monaco-editor-CJckn8Zg.js → monaco-editor-DR4yoUjc.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-C5BKUj6s.js → monitoring-stats-row-Co70p3-n.js} +1 -1
- package/dist/client/assets/{oauth-callback-DpOZwh96.js → oauth-callback-CQPHoHy-.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Bey7NKbP.js → oauth-callback-ai-provider-BJeYyFlX.js} +1 -1
- package/dist/client/assets/{onboarding-DX1TA4nG.js → onboarding-CzNreyu4.js} +1 -1
- package/dist/client/assets/{org-install-Dw27kVYm.js → org-install-aZxuYxoI.js} +1 -1
- package/dist/client/assets/{org-layout-BoYrXW7O.js → org-layout-CR6iFjC9.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-BZ7QEYUH.js → org-plugin-layout-Ah6P36_M.js} +1 -1
- package/dist/client/assets/{page-seo-form-DBEtnmLl.js → page-seo-form-BzX1ts5p.js} +1 -1
- package/dist/client/assets/page-seo-sheet-v7xZnlYi.js +1 -0
- package/dist/client/assets/{pair-KHOH6ev_.js → pair--AN1yq4g.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-z6EfkGXR.js → plugin-empty-state-CIZ1bBrP.js} +1 -1
- package/dist/client/assets/{plugin-header-CvmTO3qC.js → plugin-header-CExvgCKI.js} +1 -1
- package/dist/client/assets/{plugin-layout-d2cyKIK_.js → plugin-layout-DS-orBC-.js} +1 -1
- package/dist/client/assets/{popover-CThu0-ID.js → popover-DXn7orE4.js} +1 -1
- package/dist/client/assets/{post-editor-HwjfiT82.js → post-editor-bszZQHpg.js} +1 -1
- package/dist/client/assets/{primitives-DOyYgRDx.js → primitives-CIXky-Gt.js} +1 -1
- package/dist/client/assets/{profile-DoWLwgvz.js → profile-CZWeJMEP.js} +1 -1
- package/dist/client/assets/project-app-view-DJMvDwFa.js +1 -0
- package/dist/client/assets/record-editor-C5KWfSLg.js +1 -0
- package/dist/client/assets/registry-CX2hi2E3.js +2 -0
- package/dist/client/assets/{registry-layout-B_UkD5S0.js → registry-layout-DjFUi3yC.js} +1 -1
- package/dist/client/assets/{require-capability-BvInsc8R.js → require-capability-DDbNSPG5.js} +1 -1
- package/dist/client/assets/{required-auth-layout-LJYVUIeV.js → required-auth-layout-Bpv6G5uE.js} +1 -1
- package/dist/client/assets/{reset-password-DtCxXZ93.js → reset-password-D1T0PiTj.js} +1 -1
- package/dist/client/assets/{resizable-YbTIAmC6.js → resizable-Bi3jkg9o.js} +1 -1
- package/dist/client/assets/{roles-deRJzwzx.js → roles-BBWw8puD.js} +1 -1
- package/dist/client/assets/{save-status-CznZaqbg.js → save-status-PzXq6KUK.js} +1 -1
- package/dist/client/assets/{schema-form-Bz-Y2xaP.js → schema-form-CM7pfylQ.js} +1 -1
- package/dist/client/assets/{scroll-area-iVX_9hOT.js → scroll-area-BNzrPnq5.js} +1 -1
- package/dist/client/assets/{search-input-BV9iWpXU.js → search-input-C76EA-t6.js} +1 -1
- package/dist/client/assets/{secrets-DKrtTjxD.js → secrets-DMEa7GIW.js} +1 -1
- package/dist/client/assets/{sections-editor-wlO4Df3c.js → sections-editor--GuZPQzC.js} +1 -1
- package/dist/client/assets/{select-Ci_D4qpL.js → select-D_4UU9rK.js} +1 -1
- package/dist/client/assets/{select-model-B4DZz0S9.js → select-model-cV_VUU8G.js} +1 -1
- package/dist/client/assets/{seo-editor-03fUsq4w.js → seo-editor-fhccoPNR.js} +1 -1
- package/dist/client/assets/{settings-layout-DWP_Rn9K.js → settings-layout-DH37q17x.js} +1 -1
- package/dist/client/assets/{settings-section-DKmxECct.js → settings-section-DsXtuKDY.js} +1 -1
- package/dist/client/assets/{sheet-B9dMT6Ki.js → sheet-D01YX9h0.js} +1 -1
- package/dist/client/assets/{shell-controls-CCA2MPHn.js → shell-controls-CNVI6ZJJ.js} +1 -1
- package/dist/client/assets/{shell-layout-BNtK431X.js → shell-layout-xPMsY5hC.js} +1 -1
- package/dist/client/assets/{shell-route-loading-CaBu7gGK.js → shell-route-loading-jPQ9XajT.js} +1 -1
- package/dist/client/assets/{sidebar-rRN-0AxT.js → sidebar-CJNdWlwy.js} +1 -1
- package/dist/client/assets/{skeleton-IAM_o0Ys.js → skeleton-DEf5lpEA.js} +1 -1
- package/dist/client/assets/{sortable.esm-DRxiermK.js → sortable.esm-KhkNVCRe.js} +1 -1
- package/dist/client/assets/{spinner-ZLpPHnSU.js → spinner-srK7FwNe.js} +1 -1
- package/dist/client/assets/{sso-CdsNChqa.js → sso-BLXKmxlD.js} +1 -1
- package/dist/client/assets/{store-BgRTI4Rv.js → store-DydXTg6V.js} +1 -1
- package/dist/client/assets/store-registry-BJqdtxTv.js +2 -0
- package/dist/client/assets/{switch-B1bl8sNA.js → switch-Cbu6JSI9.js} +1 -1
- package/dist/client/assets/{tab-id-C5NSex1c.js → tab-id-CbYpEVAZ.js} +1 -1
- package/dist/client/assets/{table-DB1Kd-ou.js → table-dr9K2jWM.js} +1 -1
- package/dist/client/assets/{tabs-B3X9vNsm.js → tabs-CJU0nxr6.js} +1 -1
- package/dist/client/assets/{task-status-ClueOciL.js → task-status-Dyf8qaxz.js} +1 -1
- package/dist/client/assets/{textarea-DywxeOH3.js → textarea-BquesfD_.js} +1 -1
- package/dist/client/assets/{toggle-group-7kzOZFuJ.js → toggle-group-m3q7pubc.js} +1 -1
- package/dist/client/assets/{toolbar-l4lsSaSH.js → toolbar-Bkxu3n7s.js} +1 -1
- package/dist/client/assets/{tools-list-Dm1utA0x.js → tools-list-CG_BLK1j.js} +1 -1
- package/dist/client/assets/{tooltip-BFGyTrfa.js → tooltip-Bm-whGHF.js} +1 -1
- package/dist/client/assets/{types-ksHhVabW.js → types-Bkz2p_os.js} +1 -1
- package/dist/client/assets/{use-ai-providers-JirMLy_w.js → use-ai-providers-B82V9Np8.js} +1 -1
- package/dist/client/assets/{use-automations-3R13ZeSL.js → use-automations-B5qTxkL8.js} +1 -1
- package/dist/client/assets/{use-capability-CQt0iOwa.js → use-capability-DpFGw1TU.js} +1 -1
- package/dist/client/assets/{use-collections-hMeHX3z9.js → use-collections-iUV-5kFm.js} +1 -1
- package/dist/client/assets/{use-connection-_VO3kzZS.js → use-connection-DTKE65yR.js} +1 -1
- package/dist/client/assets/{use-copy-BNAf-Qgh.js → use-copy-Dr7XRETN.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DpiN_bgM.js → use-create-virtual-mcp-DlMteKXP.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-kr27xY5y.js → use-debounced-autosave-DFapff8c.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DFb9AulP.js → use-delete-connection-CU96IyMZ.js} +1 -1
- package/dist/client/assets/{use-file-configs-DrA_HE6r.js → use-file-configs-C8ipJXZL.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DRY2R8kb.js → use-infinite-scroll-KU0QCoEE.js} +1 -1
- package/dist/client/assets/{use-list-state-CGdA9sk-.js → use-list-state-DtwRJx6R.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-BIC4osYX.js → use-mcp-prompts-aLA3FcF_.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BZZ0dcgP.js → use-mcp-tools-CK1DUQVb.js} +1 -1
- package/dist/client/assets/{use-members-DnfZ8tEp.js → use-members-C9apz-8a.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DWh1SzWc.js → use-navigate-to-agent-DRRtr51U.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CwWZc3xb.js → use-org-auth-client-CI8XyYuM.js} +1 -1
- package/dist/client/assets/{use-org-sso-BnGud85s.js → use-org-sso-CYBgAyDV.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BIe6gEN_.js → use-organization-roles-C5ABG30J.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Dy_wvkUU.js → use-organization-settings-B4ywx3QZ.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DnATENDO.js → use-registry-connections-B-c9LId-.js} +1 -1
- package/dist/client/assets/{use-secrets-C4Hg3-p8.js → use-secrets-D3irvtLI.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CCM_GgH8.js → use-status-sounds-BEbMXd3N.js} +1 -1
- package/dist/client/assets/{use-view-mode-DZhMkEJ1.js → use-view-mode-Jd_CE1Mx.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BaoT8VIh.js → use-virtual-mcp-DsdNWb58.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DrZL_IGs.js +1 -0
- package/dist/client/assets/{useRouterState-DEBHW9gr.js → useRouterState-CU2GqlKv.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CN1mQR7i.js +1 -0
- package/dist/client/assets/{user-CmhADXs_.js → user-sLZtiN2i.js} +1 -1
- package/dist/client/assets/{view-mode-toggle--g2MGXro.js → view-mode-toggle-DSmCr2tD.js} +1 -1
- package/dist/client/assets/{workflow-DuDgvcXi.js → workflow-BK9KKo6T.js} +1 -1
- package/dist/client/assets/workflow-detail-DzASvQVR.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/migrate.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/app-editor-DaKe0gcW.js +0 -1
- package/dist/client/assets/page-seo-sheet-B66TXIq6.js +0 -1
- package/dist/client/assets/project-app-view-BA3JXk-V.js +0 -1
- package/dist/client/assets/record-editor-B09SHssY.js +0 -1
- package/dist/client/assets/registry-CVaj-aEQ.js +0 -2
- package/dist/client/assets/store-registry-CxNFeZZm.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BdYHzHZ3.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-KU_h5oCb.js +0 -1
- package/dist/client/assets/workflow-detail-C8cBg_ad.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as oe,j as t,B as Ce,f as Be,b as ct,q as ze,r as dt,o as Fe,F as mt,a as pt,K as Le,e1 as Ke,dn as ut}from"./index-CHxlbuKY.js";import{u as qe,S as Ve}from"./constants-7h1Iherr.js";import{B as ft,g as Me}from"./generate-id-BKVk8ACt.js";import{C as Qe}from"./collection-display-button-BkPkMS-1.js";import{C as ht}from"./collection-search-HZ4Ln7Q2.js";import{C as gt}from"./card-BrXXg9xg.js";import{I as Ge}from"./integration-icon-DsdPiq0I.js";import{D as He,a as Je,b as Ye,c as O}from"./dropdown-menu-CZNwXuzY.js";import{s as Xe,a as Ze}from"./Eye-D-FtEtW8.js";import{i as et}from"./DotsVertical-DdI4UlQo.js";import{i as tt}from"./Tool01-Cgf_tMbK.js";import{s as st}from"./Trash01-BWWRskAa.js";import{C as xt}from"./collection-table-wrapper-Bos1aSX0.js";import{E as Ue}from"./empty-state-DKLTVUZK.js";import{n as We}from"./Stars02-BDvnLwBo.js";import{U as jt}from"./user-CmhADXs_.js";import{E as it}from"./empty-state-D3IZdm2e.js";import{u as Ct}from"./use-list-state-CGdA9sk-.js";import{g as bt}from"./connection-slug-eyAPH6o3.js";import{f as vt,g as yt,c as Nt,b as wt,d as St,e as Pt,a as _t,A as Dt}from"./alert-dialog-DXWvjPm6.js";import{a as It,b as At}from"./use-collections-hMeHX3z9.js";import{a as Tt}from"./use-connection-_VO3kzZS.js";import{s as Et}from"./Plus-DyGCHsAC.js";import{a as Ot}from"./layout-BNJzmBuH.js";import{P as je}from"./index-CrU7PEoz.js";import"./collections-DltZgEAo.js";import"./SwitchHorizontal01-DL7oI9Hg.js";import"./Check-Bl0EnB2J.js";import"./tooltip-BFGyTrfa.js";import"./view-mode-toggle--g2MGXro.js";import"./badge-CDV4_k2B.js";import"./SearchMd-BvLcLD4O.js";import"./Container-Bgm498uR.js";import"./agent-icon-WacEkBrp.js";import"./AlertCircle-C2xmuErv.js";import"./RefreshCcw01-DwuEW87g.js";import"./XCircle-M_oWnCac.js";import"./ArrowUpRight-DY3nGAjH.js";import"./ZapSquare-D8HT6_jN.js";import"./Users03-DuD0whJZ.js";import"./CheckCircle-Bt38xVIy.js";import"./ChevronDown-BYvseX6e.js";import"./ChevronLeft-DoUOCEbQ.js";import"./ChevronRight-CJPo14Wd.js";import"./ChevronUp-CoYKSGM9.js";import"./ZoomOut-DvI5OdTo.js";import"./Globe01-5KEfDt4K.js";import"./FilterLines-Bn2_q3W3.js";import"./Star01-BWl4O-UT.js";import"./Palette-BL7llRL5.js";import"./HardDrive-Bq_J68ys.js";import"./Key01-C484g3YO.js";import"./LayoutLeft-CnXQOO58.js";import"./LinkExternal01-DSXCOuPf.js";import"./Monitor01-DxGBVT7-.js";import"./Sun-BumCYr1L.js";import"./Play-COr2_UEr.js";import"./Settings02-DdSNGnuW.js";import"./Shield01-B-jBzvZJ.js";import"./Stars01-cmM0sb2I.js";import"./Upload01-CufDtzzB.js";import"./User01-CL8jgZE5.js";import"./Users01-DVvuBAcj.js";import"./XClose-tPJB8Sgg.js";import"./X-Dnhh57X7.js";import"./Zap-C7nJc6zh.js";import"./table-DB1Kd-ou.js";import"./avatar-MwlGDSa1.js";import"./use-view-mode-DZhMkEJ1.js";import"./sidebar-rRN-0AxT.js";import"./sheet-B9dMT6Ki.js";function $t(i,e){const s=i.properties||{};for(const n in s){const c=s[n];if(c&&c.type==="string"&&(c.format==="url"||c.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const l=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of l)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function kt(i){const e=oe.c(25),{item:s,schema:l,actions:n}=i;let c;e[0]!==s||e[1]!==l?(c=$t(l,s),e[0]=s,e[1]=l,e[2]=c):c=e[2];const r=c,u=s&&typeof s=="object"&&"description"in s&&typeof s.description=="string"?s.description:void 0;let d;e[3]!==n?(d=n&&Object.keys(n).length>0,e[3]=n,e[4]=d):d=e[4];const o=d;let p;e[5]!==r||e[6]!==s.title?(p=t.jsx(Ge,{icon:r,name:s.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=s.title,e[7]=p):p=e[7];let m;e[8]!==s.title?(m=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:s.title}),e[8]=s.title,e[9]=m):m=e[9];const f=u||"No description";let a;e[10]!==f?(a=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:f}),e[10]=f,e[11]=a):a=e[11];let v;e[12]!==m||e[13]!==a?(v=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[m,a]}),e[12]=m,e[13]=a,e[14]=v):v=e[14];let y;e[15]!==p||e[16]!==v?(y=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[p,v]}),e[15]=p,e[16]=v,e[17]=y):y=e[17];let b;e[18]!==n||e[19]!==o||e[20]!==s?(b=o&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Kt,onMouseDown:Lt,children:t.jsxs(He,{children:[t.jsx(Je,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Ft,children:t.jsx(et,{size:20})})}),t.jsxs(Ye,{align:"end",onClick:zt,children:[n.open&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.open?.(s)},children:[t.jsx(Xe,{size:16}),"Open"]}),n.edit&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.edit?.(s)},children:[t.jsx(tt,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.duplicate?.(s)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(O,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(s)},children:[t.jsx(st,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=o,e[20]=s,e[21]=b):b=e[21];let x;return e[22]!==y||e[23]!==b?(x=t.jsxs(gt,{className:"cursor-pointer transition-colors hover:bg-accent/50 h-full flex flex-col group relative",children:[y,b]}),e[22]=y,e[23]=b,e[24]=x):x=e[24],x}function zt(i){return i.stopPropagation()}function Ft(i){return i.stopPropagation()}function Lt(i){return i.stopPropagation()}function Kt(i){return i.stopPropagation()}const Mt=["icon","avatar","logo"],Re=["created_at","created_by","id"];function Ut(i){return Object.keys(i).find(e=>Mt.includes(e.toLowerCase()))}function ot(i,e){return Object.keys(i.properties||{}).filter(s=>["id","created_at","updated_at","created_by","updated_by"].includes(s)?!1:e?e.includes(s):!0).map(s=>({id:s,label:s.charAt(0).toUpperCase()+s.slice(1).replace(/_/g," ")}))}function Wt(i){const e=oe.c(30),{data:s,schema:l,viewMode:n,search:c,sortKey:r,sortDirection:u,onSort:d,actions:o,onItemClick:p,headerActions:m,emptyState:f,readOnly:a,columns:v,hideToolbar:y,sortableFields:b}=i,x=u===void 0?"asc":u,g=d===void 0?Vt:d;let $;e[0]!==o?($=o===void 0?{}:o,e[0]=o,e[1]=$):$=e[1];const h=$,T=p===void 0?qt:p,E=m===void 0?null:m,N=f===void 0?null:f,k=a===void 0?!1:a,j=v===void 0?void 0:v,z=y===void 0?!1:y,P=b===void 0?void 0:b;let D;e[2]!==j||e[3]!==l||e[4]!==P?(D=j?j.filter(Bt).filter(A=>!P||P.includes(A.id)).map(Rt):ot(l,P),e[2]=j,e[3]=l,e[4]=P,e[5]=D):D=e[5];const w=D;let S;e[6]!==E||e[7]!==z||e[8]!==g||e[9]!==x||e[10]!==r||e[11]!==w?(S=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:E}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Qe,{sortKey:r,sortDirection:x,onSort:g,sortOptions:w})})]})}),e[6]=E,e[7]=z,e[8]=g,e[9]=x,e[10]=r,e[11]=w,e[12]=S):S=e[12];let _;e[13]!==h||e[14]!==j||e[15]!==s||e[16]!==N||e[17]!==T||e[18]!==g||e[19]!==k||e[20]!==l||e[21]!==c||e[22]!==x||e[23]!==r||e[24]!==P||e[25]!==n?(_=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:s.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:N||t.jsx(Ue,{icon:t.jsx(We,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:s.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(kt,{item:A,schema:l,readOnly:k,actions:h})},A.id))})}):t.jsx(xt,{columns:Ht(j,l,P,h),data:s,sortKey:r,sortDirection:x,onSort:g,onRowClick:T,emptyState:N||t.jsx(Ue,{icon:t.jsx(We,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}),e[13]=h,e[14]=j,e[15]=s,e[16]=N,e[17]=T,e[18]=g,e[19]=k,e[20]=l,e[21]=c,e[22]=x,e[23]=r,e[24]=P,e[25]=n,e[26]=_):_=e[26];let I;return e[27]!==S||e[28]!==_?(I=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[S,_]}),e[27]=S,e[28]=_,e[29]=I):I=e[29],I}function Rt(i){return{id:i.id,label:typeof i.header=="string"?i.header:i.id}}function Bt(i){return i.sortable!==!1}function qt(){}function Vt(){}function Qt(i){return{id:"actions",header:"",render:e=>t.jsxs(He,{children:[t.jsx(Je,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:s=>s.stopPropagation(),children:t.jsx(et,{size:20})})}),t.jsxs(Ye,{align:"end",onClick:s=>s.stopPropagation(),children:[i.open&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.open?.(e)},children:[t.jsx(Xe,{size:16}),"Open"]}),i.edit&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.edit?.(e)},children:[t.jsx(tt,{size:16}),"Edit"]}),i.duplicate&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.duplicate?.(e)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),i.delete&&t.jsxs(O,{variant:"destructive",onClick:s=>{s.stopPropagation(),i.delete?.(e)},children:[t.jsx(st,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function nt(i){const e=i.type;return Array.isArray(e)?e.every(s=>nt({type:s})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Gt(i,e){const s=i.properties||{},l=Object.keys(s).filter(o=>{const p=s[o];return p&&nt(p)}),n=Ut(s),c=[],r=new Set;n&&l.includes(n)&&(c.push(n),r.add(n));const u=["title","description","updated_at","updated_by"];for(const o of u)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));const d=l.filter(o=>!r.has(o)&&!Re.includes(o)).sort((o,p)=>o.localeCompare(p));for(const o of d)c.push(o),r.add(o);for(const o of Re)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));return c.map(o=>{const p=s[o],m=e?e.includes(o):!["id"].includes(o);return o===n?{id:o,header:"",render:f=>{const a=f[o];return t.jsx(Ge,{icon:a,name:f.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:o==="description"?{id:o,header:"Description",render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(a)})},sortable:m,cellClassName:"max-w-[50ch]"}:o==="created_by"||o==="updated_by"?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx(jt,{id:String(a),size:"xs"}):"—"},sortable:m,cellClassName:"max-w-[250px]"}:p?.format==="date-time"||o.endsWith("_at")?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx("span",{className:"block truncate max-w-full",children:new Date(a).toLocaleDateString()}):"—"},sortable:m,cellClassName:"max-w-[200px]"}:{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(a)})},sortable:m,cellClassName:"max-w-[200px]"}})}function Ht(i,e,s,l){const n=i||Gt(e,s);return n.some(u=>u.id==="actions")?n:Object.keys(l).length>0?[...n,Qt(l)]:n}function Jt(i){const e=oe.c(119),{connectionId:s,org:l,activeCollection:n,onItemClick:c}=i,r=n.name,u=n.schema??ft,d=n.hasCreateTool,o=n.hasUpdateTool,p=n.hasDeleteTool,m=Be(),{data:f}=ct.useSession(),a=f?.user?.id||"unknown",v=Tt(s);let y;e[0]!==v||e[1]!==s?(y=v?bt(v):s,e[0]=v,e[1]=s,e[2]=y):y=e[2];const b=y,{org:x}=ze();let g;e[3]!==s||e[4]!==x.id||e[5]!==x.slug?(g={connectionId:s,orgId:x.id,orgSlug:x.slug},e[3]=s,e[4]=x.id,e[5]=x.slug,e[6]=g):g=e[6];const $=qe(g),h=It(s,r,$),T=`${s}-${r}`;let E;e[7]!==l||e[8]!==T?(E={namespace:l,resource:T,defaultSortKey:"updated_at"},e[7]=l,e[8]=T,e[9]=E):E=e[9];const{search:N,searchTerm:k,setSearch:j,viewMode:z,setViewMode:P,sortKey:D,sortDirection:w,handleSort:S}=Ct(E);let _;e[10]!==k||e[11]!==w||e[12]!==D?(_={searchTerm:k,sortKey:D,sortDirection:w},e[10]=k,e[11]=w,e[12]=D,e[13]=_):_=e[13];const I=At(s,r,$,_),A=!d&&!o&&!p;let ne;e[14]!==b||e[15]!==r||e[16]!==m||e[17]!==c||e[18]!==l?(ne=C=>{if(c){c(C);return}m({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:b,collectionName:r,itemId:C.id}})},e[14]=b,e[15]=r,e[16]=m,e[17]=c,e[18]=l,e[19]=ne):ne=e[19];const F=ne;let re;e[20]!==h.create||e[21]!==a?(re=async C=>{const xe=new Date().toISOString();await h.create.mutateAsync({...C,id:Me("conn"),title:`${C.title} (Copy)`,created_at:xe,updated_at:xe,created_by:a,updated_by:a})},e[20]=h.create,e[21]=a,e[22]=re):re=e[22];const be=re,[L,ve]=dt.useState(null);let le;e[23]===Symbol.for("react.memo_cache_sentinel")?(le=C=>{ve(C)},e[23]=le):le=e[23];const rt=le;let K;e[24]!==F||e[25]!==o?(K=o&&{edit:F},e[24]=F,e[25]=o,e[26]=K):K=e[26];let M;e[27]!==be||e[28]!==d?(M=d&&{duplicate:be},e[27]=be,e[28]=d,e[29]=M):M=e[29];let U;e[30]!==p?(U=p&&{delete:rt},e[30]=p,e[31]=U):U=e[31];let ae;e[32]!==M||e[33]!==U||e[34]!==K?(ae={...K,...M,...U},e[32]=M,e[33]=U,e[34]=K,e[35]=ae):ae=e[35];const ye=ae;let ce;e[36]!==h.delete||e[37]!==L?(ce=async()=>{L&&(await h.delete.mutateAsync(L.id),ve(null))},e[36]=h.delete,e[37]=L,e[38]=ce):ce=e[38];const Ne=ce;let de;e[39]!==h.create||e[40]!==b||e[41]!==r||e[42]!==d||e[43]!==m||e[44]!==l||e[45]!==a?(de=async()=>{if(!d){Fe.error("Create operation is not available for this collection");return}const C=new Date().toISOString(),xe={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:C,updated_at:C,created_by:a,updated_by:a};try{const ke=await h.create.mutateAsync(xe);m({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:b,collectionName:r,itemId:ke.id}})}catch(ke){console.error("Failed to create item:",ke)}},e[39]=h.create,e[40]=b,e[41]=r,e[42]=d,e[43]=m,e[44]=l,e[45]=a,e[46]=de):de=e[46];const we=de;let me;e[47]!==u?(me=ot(u),e[47]=u,e[48]=me):me=e[48];const Se=me,lt=(I?.length??0)>0,at=d&&!lt&&!N;let pe;e[49]!==h.create||e[50]!==we||e[51]!==d?(pe=d?t.jsxs(Ce,{onClick:we,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(Et,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[49]=h.create,e[50]=we,e[51]=d,e[52]=pe):pe=e[52];const ue=pe,Pe=D;let W;e[53]!==S||e[54]!==w||e[55]!==Se||e[56]!==Pe?(W=t.jsx(Ot,{children:t.jsx(Qe,{sortKey:Pe,sortDirection:w,onSort:S,sortOptions:Se})}),e[53]=S,e[54]=w,e[55]=Se,e[56]=Pe,e[57]=W):W=e[57];const _e=`Search ${r}...`;let R;e[58]!==j?(R=C=>{C.key==="Escape"&&(j(""),C.target.blur())},e[58]=j,e[59]=R):R=e[59];let B;e[60]!==N||e[61]!==j||e[62]!==_e||e[63]!==R?(B=t.jsx("div",{className:"flex-1",children:t.jsx(ht,{value:N,onChange:j,placeholder:_e,onKeyDown:R})}),e[60]=N,e[61]=j,e[62]=_e,e[63]=R,e[64]=B):B=e[64];let q;e[65]!==ue||e[66]!==d?(q=d&&t.jsx("div",{className:"pr-3",children:ue}),e[65]=ue,e[66]=d,e[67]=q):q=e[67];let V;e[68]!==B||e[69]!==q?(V=t.jsxs("div",{className:"flex items-center gap-2",children:[B,q]}),e[68]=B,e[69]=q,e[70]=V):V=e[70];let Q;e[71]!==I?(Q=I??[],e[71]=I,e[72]=Q):Q=e[72];const De=D;let G;e[73]!==F?(G=C=>F(C),e[73]=F,e[74]=G):G=e[74];const Ie="No items found",Ae=N?"Try adjusting your search terms":"This collection doesn't have any items yet.",Te=at?ue:void 0;let H;e[75]!==Ie||e[76]!==Ae||e[77]!==Te?(H=t.jsx(it,{image:null,title:Ie,description:Ae,actions:Te}),e[75]=Ie,e[76]=Ae,e[77]=Te,e[78]=H):H=e[78];let J;e[79]!==S||e[80]!==A||e[81]!==ye||e[82]!==u||e[83]!==N||e[84]!==j||e[85]!==P||e[86]!==w||e[87]!==Q||e[88]!==De||e[89]!==G||e[90]!==H||e[91]!==z?(J=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Wt,{hideToolbar:!0,data:Q,schema:u,viewMode:z,onViewModeChange:P,search:N,onSearchChange:j,sortKey:De,sortDirection:w,onSort:S,actions:ye,onItemClick:G,readOnly:A,emptyState:H})}),e[79]=S,e[80]=A,e[81]=ye,e[82]=u,e[83]=N,e[84]=j,e[85]=P,e[86]=w,e[87]=Q,e[88]=De,e[89]=G,e[90]=H,e[91]=z,e[92]=J):J=e[92];let Y;e[93]!==V||e[94]!==J?(Y=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[V,J]}),e[93]=V,e[94]=J,e[95]=Y):Y=e[95];const Ee=!!L;let fe;e[96]===Symbol.for("react.memo_cache_sentinel")?(fe=C=>{C||ve(null)},e[96]=fe):fe=e[96];let he;e[97]===Symbol.for("react.memo_cache_sentinel")?(he=t.jsx(Nt,{children:"Delete item?"}),e[97]=he):he=e[97];const Oe=L?.title;let X;e[98]!==Oe?(X=t.jsxs(wt,{children:[he,t.jsxs(St,{children:['Are you sure you want to delete "',Oe,'"? This action cannot be undone.']})]}),e[98]=Oe,e[99]=X):X=e[99];let Z;e[100]!==h.delete.isPending?(Z=t.jsx(vt,{disabled:h.delete.isPending,children:"Cancel"}),e[100]=h.delete.isPending,e[101]=Z):Z=e[101];const $e=h.delete.isPending?"Deleting...":"Delete";let ee;e[102]!==h.delete.isPending||e[103]!==Ne||e[104]!==$e?(ee=t.jsx(yt,{onClick:Ne,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:$e}),e[102]=h.delete.isPending,e[103]=Ne,e[104]=$e,e[105]=ee):ee=e[105];let te;e[106]!==Z||e[107]!==ee?(te=t.jsxs(Pt,{children:[Z,ee]}),e[106]=Z,e[107]=ee,e[108]=te):te=e[108];let se;e[109]!==X||e[110]!==te?(se=t.jsxs(_t,{children:[X,te]}),e[109]=X,e[110]=te,e[111]=se):se=e[111];let ie;e[112]!==Ee||e[113]!==se?(ie=t.jsx(Dt,{open:Ee,onOpenChange:fe,children:se}),e[112]=Ee,e[113]=se,e[114]=ie):ie=e[114];let ge;return e[115]!==W||e[116]!==Y||e[117]!==ie?(ge=t.jsxs(t.Fragment,{children:[W,Y,ie]}),e[115]=W,e[116]=Y,e[117]=ie,e[118]=ge):ge=e[118],ge}function Yt(){const i=oe.c(13),{org:e,project:s}=ze(),l=mt();let n;i[0]!==e.id||i[1]!==e.slug?(n={connectionId:Ve,orgId:e.id,orgSlug:e.slug},i[0]=e.id,i[1]=e.slug,i[2]=n):n=i[2];const c=qe(n);let r;i[3]!==c||i[4]!==s?(r=async p=>{const m=s.enabledPlugins??[];if(m.includes(p))return;const f=[...m,p],a=await c.callTool({name:"COLLECTION_VIRTUAL_MCP_UPDATE",arguments:{id:s.id,data:{metadata:{enabled_plugins:f}}}});return a.structuredContent??a},i[3]=c,i[4]=s,i[5]=r):r=i[5];let u;i[6]!==e.id||i[7]!==s||i[8]!==l?(u=()=>{l.invalidateQueries({queryKey:Le.project(e.id,s.slug)}),l.invalidateQueries({queryKey:Le.projects(e.id)})},i[6]=e.id,i[7]=s,i[8]=l,i[9]=u):u=i[9];let d;return i[10]!==r||i[11]!==u?(d={mutationFn:r,onSuccess:u,onError:Xt},i[10]=r,i[11]=u,i[12]=d):d=i[12],pt(d)}function Xt(i){Fe.error("Failed to enable plugin: "+(i instanceof Error?i.message:"Unknown error"))}function Zt(i){const e=oe.c(12),{pluginId:s,title:l,description:n,icon:c}=i,r=Yt();let u;e[0]!==r||e[1]!==s?(u=async()=>{try{await r.mutateAsync(s),Fe.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=s,e[2]=u):u=e[2];const d=u,o=c??null,p=r.isPending?"Enabling…":"Enable plugin";let m;e[3]!==r.isPending||e[4]!==d||e[5]!==p?(m=t.jsx(Ce,{onClick:d,disabled:r.isPending,children:p}),e[3]=r.isPending,e[4]=d,e[5]=p,e[6]=m):m=e[6];let f;return e[7]!==n||e[8]!==o||e[9]!==m||e[10]!==l?(f=t.jsx(it,{image:o,title:l,description:n,actions:m}),e[7]=n,e[8]=o,e[9]=m,e[10]=l,e[11]=f):f=e[11],f}const es={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function Ci(){const{project:i,org:e}=ze();if(!(i.enabledPlugins??[]).includes(Ke))return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(Zt,{pluginId:Ke,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(ut,{className:"size-8 text-muted-foreground"})})})})})});const n=Be();return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx(Jt,{connectionId:Ve,org:e.slug,activeCollection:es,onItemClick:c=>n({to:"/$org/settings/workflows/$itemId",params:{org:e.slug,itemId:c.id}})})})})}export{Ci as default};
|
|
1
|
+
import{e as oe,j as t,B as Ce,f as Be,b as ct,q as ze,r as dt,o as Fe,F as mt,a as pt,K as Le,e1 as Ke,dn as ut}from"./index-C_oSBqFD.js";import{u as qe,S as Ve}from"./constants-DI_u-hVk.js";import{B as ft,g as Me}from"./generate-id-Bfx7nOJH.js";import{C as Qe}from"./collection-display-button-DzXqmtbd.js";import{C as ht}from"./collection-search-CPYfTi84.js";import{C as gt}from"./card-Ce7y-Nqu.js";import{I as Ge}from"./integration-icon-CNf7sZ5b.js";import{D as He,a as Je,b as Ye,c as O}from"./dropdown-menu-SwrAlbwN.js";import{s as Xe,a as Ze}from"./Eye-DHHjYDbX.js";import{i as et}from"./DotsVertical-CQgc8nSx.js";import{i as tt}from"./Tool01-BMk00CcA.js";import{s as st}from"./Trash01-MTKniuxn.js";import{C as xt}from"./collection-table-wrapper-DgzLrzuP.js";import{E as Ue}from"./empty-state-BJFB-AwN.js";import{n as We}from"./Stars02-CXAcgX2g.js";import{U as jt}from"./user-sLZtiN2i.js";import{E as it}from"./empty-state-DlCayRAK.js";import{u as Ct}from"./use-list-state-DtwRJx6R.js";import{g as bt}from"./connection-slug-eyAPH6o3.js";import{f as vt,g as yt,c as Nt,b as wt,d as St,e as Pt,a as _t,A as Dt}from"./alert-dialog-_2G9ccD7.js";import{a as It,b as At}from"./use-collections-iUV-5kFm.js";import{a as Tt}from"./use-connection-DTKE65yR.js";import{s as Et}from"./Plus-C9icoBmX.js";import{a as Ot}from"./layout-Dkxj2bFg.js";import{P as je}from"./index-C1kxS2Io.js";import"./collections-B-PXiD2Y.js";import"./SwitchHorizontal01-BU3C5ze8.js";import"./Check--VLhXi5l.js";import"./tooltip-Bm-whGHF.js";import"./view-mode-toggle-DSmCr2tD.js";import"./badge-jK5_JNPO.js";import"./SearchMd-Di6_vvQ1.js";import"./Container-cZo3l6OX.js";import"./agent-icon-6l7Nwe2K.js";import"./AlertCircle-Bc3r3AGq.js";import"./RefreshCcw01-D1tvoH2_.js";import"./XCircle-Pgrh_mFJ.js";import"./ArrowUpRight-DfEIENBd.js";import"./ZapSquare-BH297b52.js";import"./Users03--pQkY_Pm.js";import"./CheckCircle-7xc6-R3M.js";import"./ChevronDown-66ErjaPf.js";import"./ChevronLeft-DyW6EtsM.js";import"./ChevronRight-C87PRbBa.js";import"./ChevronUp-BuPeXu8C.js";import"./ZoomOut-qupe1GUj.js";import"./Globe01-B10jCcNH.js";import"./FilterLines-CWR_eJ7z.js";import"./Star01-D1DEXGAi.js";import"./Palette-CA_16qMN.js";import"./HardDrive-7KMC69UH.js";import"./Key01-CTKRB2Cd.js";import"./LayoutLeft-SQH1HcmI.js";import"./LinkExternal01-CjT-4hM8.js";import"./Monitor01-svtG00ql.js";import"./Sun-CCiXRotp.js";import"./Play-CrdarOgl.js";import"./Settings02-BylJiOHK.js";import"./Shield01-CDSs18-B.js";import"./Stars01-UWs0NZ30.js";import"./Upload01-DsrMMWgf.js";import"./User01-DShN8gQ-.js";import"./Users01-Bvh39Ydu.js";import"./XClose-CXixB7oH.js";import"./X-D-FyhysP.js";import"./Zap-BcF-Iz_3.js";import"./table-dr9K2jWM.js";import"./avatar-KTqg6Pir.js";import"./use-view-mode-Jd_CE1Mx.js";import"./sidebar-CJNdWlwy.js";import"./sheet-D01YX9h0.js";function $t(i,e){const s=i.properties||{};for(const n in s){const c=s[n];if(c&&c.type==="string"&&(c.format==="url"||c.format==="uri")&&e&&typeof e=="object"&&n in e&&e[n])return e[n]}const l=["image","img","avatar","icon","logo","thumbnail","cover"];for(const n of l)if(e&&typeof e=="object"&&n in e&&typeof e[n]=="string")return e[n]}function kt(i){const e=oe.c(25),{item:s,schema:l,actions:n}=i;let c;e[0]!==s||e[1]!==l?(c=$t(l,s),e[0]=s,e[1]=l,e[2]=c):c=e[2];const r=c,u=s&&typeof s=="object"&&"description"in s&&typeof s.description=="string"?s.description:void 0;let d;e[3]!==n?(d=n&&Object.keys(n).length>0,e[3]=n,e[4]=d):d=e[4];const o=d;let p;e[5]!==r||e[6]!==s.title?(p=t.jsx(Ge,{icon:r,name:s.title,size:"md",className:"shrink-0 shadow-sm"}),e[5]=r,e[6]=s.title,e[7]=p):p=e[7];let m;e[8]!==s.title?(m=t.jsx("h3",{className:"text-base font-medium text-foreground truncate",children:s.title}),e[8]=s.title,e[9]=m):m=e[9];const f=u||"No description";let a;e[10]!==f?(a=t.jsx("p",{className:"text-base text-muted-foreground line-clamp-2",children:f}),e[10]=f,e[11]=a):a=e[11];let v;e[12]!==m||e[13]!==a?(v=t.jsxs("div",{className:"flex flex-col gap-0 flex-1",children:[m,a]}),e[12]=m,e[13]=a,e[14]=v):v=e[14];let y;e[15]!==p||e[16]!==v?(y=t.jsxs("div",{className:"flex flex-col gap-4 p-6 flex-1",children:[p,v]}),e[15]=p,e[16]=v,e[17]=y):y=e[17];let b;e[18]!==n||e[19]!==o||e[20]!==s?(b=o&&t.jsx("div",{className:"absolute top-6 right-6 sm:opacity-0 sm:group-hover:opacity-100 transition-opacity",onClick:Kt,onMouseDown:Lt,children:t.jsxs(He,{children:[t.jsx(Je,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:Ft,children:t.jsx(et,{size:20})})}),t.jsxs(Ye,{align:"end",onClick:zt,children:[n.open&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.open?.(s)},children:[t.jsx(Xe,{size:16}),"Open"]}),n.edit&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.edit?.(s)},children:[t.jsx(tt,{size:16}),"Edit"]}),n.duplicate&&t.jsxs(O,{onClick:g=>{g.stopPropagation(),n.duplicate?.(s)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),n.delete&&t.jsxs(O,{variant:"destructive",onClick:g=>{g.stopPropagation(),n.delete?.(s)},children:[t.jsx(st,{size:16}),"Delete"]})]})]})}),e[18]=n,e[19]=o,e[20]=s,e[21]=b):b=e[21];let x;return e[22]!==y||e[23]!==b?(x=t.jsxs(gt,{className:"cursor-pointer transition-colors hover:bg-accent/50 h-full flex flex-col group relative",children:[y,b]}),e[22]=y,e[23]=b,e[24]=x):x=e[24],x}function zt(i){return i.stopPropagation()}function Ft(i){return i.stopPropagation()}function Lt(i){return i.stopPropagation()}function Kt(i){return i.stopPropagation()}const Mt=["icon","avatar","logo"],Re=["created_at","created_by","id"];function Ut(i){return Object.keys(i).find(e=>Mt.includes(e.toLowerCase()))}function ot(i,e){return Object.keys(i.properties||{}).filter(s=>["id","created_at","updated_at","created_by","updated_by"].includes(s)?!1:e?e.includes(s):!0).map(s=>({id:s,label:s.charAt(0).toUpperCase()+s.slice(1).replace(/_/g," ")}))}function Wt(i){const e=oe.c(30),{data:s,schema:l,viewMode:n,search:c,sortKey:r,sortDirection:u,onSort:d,actions:o,onItemClick:p,headerActions:m,emptyState:f,readOnly:a,columns:v,hideToolbar:y,sortableFields:b}=i,x=u===void 0?"asc":u,g=d===void 0?Vt:d;let $;e[0]!==o?($=o===void 0?{}:o,e[0]=o,e[1]=$):$=e[1];const h=$,T=p===void 0?qt:p,E=m===void 0?null:m,N=f===void 0?null:f,k=a===void 0?!1:a,j=v===void 0?void 0:v,z=y===void 0?!1:y,P=b===void 0?void 0:b;let D;e[2]!==j||e[3]!==l||e[4]!==P?(D=j?j.filter(Bt).filter(A=>!P||P.includes(A.id)).map(Rt):ot(l,P),e[2]=j,e[3]=l,e[4]=P,e[5]=D):D=e[5];const w=D;let S;e[6]!==E||e[7]!==z||e[8]!==g||e[9]!==x||e[10]!==r||e[11]!==w?(S=!z&&t.jsx("div",{className:"shrink-0 w-full border-b border-border h-12",children:t.jsxs("div",{className:"flex items-center gap-3 h-12 px-4",children:[t.jsx("div",{className:"flex items-center gap-2 flex-1",children:E}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(Qe,{sortKey:r,sortDirection:x,onSort:g,sortOptions:w})})]})}),e[6]=E,e[7]=z,e[8]=g,e[9]=x,e[10]=r,e[11]=w,e[12]=S):S=e[12];let _;e[13]!==h||e[14]!==j||e[15]!==s||e[16]!==N||e[17]!==T||e[18]!==g||e[19]!==k||e[20]!==l||e[21]!==c||e[22]!==x||e[23]!==r||e[24]!==P||e[25]!==n?(_=n==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:s.length===0?t.jsx("div",{className:"flex items-center justify-center h-full",children:N||t.jsx(Ue,{icon:t.jsx(We,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:s.map(A=>t.jsx("div",{onClick:()=>T?.(A),className:"cursor-pointer h-full",children:t.jsx(kt,{item:A,schema:l,readOnly:k,actions:h})},A.id))})}):t.jsx(xt,{columns:Ht(j,l,P,h),data:s,sortKey:r,sortDirection:x,onSort:g,onRowClick:T,emptyState:N||t.jsx(Ue,{icon:t.jsx(We,{size:36,className:"text-muted-foreground"}),title:"No items found",description:c?"Try adjusting your search":"No items to display"})}),e[13]=h,e[14]=j,e[15]=s,e[16]=N,e[17]=T,e[18]=g,e[19]=k,e[20]=l,e[21]=c,e[22]=x,e[23]=r,e[24]=P,e[25]=n,e[26]=_):_=e[26];let I;return e[27]!==S||e[28]!==_?(I=t.jsxs("div",{className:"h-full flex flex-col overflow-hidden",children:[S,_]}),e[27]=S,e[28]=_,e[29]=I):I=e[29],I}function Rt(i){return{id:i.id,label:typeof i.header=="string"?i.header:i.id}}function Bt(i){return i.sortable!==!1}function qt(){}function Vt(){}function Qt(i){return{id:"actions",header:"",render:e=>t.jsxs(He,{children:[t.jsx(Je,{asChild:!0,children:t.jsx(Ce,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:s=>s.stopPropagation(),children:t.jsx(et,{size:20})})}),t.jsxs(Ye,{align:"end",onClick:s=>s.stopPropagation(),children:[i.open&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.open?.(e)},children:[t.jsx(Xe,{size:16}),"Open"]}),i.edit&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.edit?.(e)},children:[t.jsx(tt,{size:16}),"Edit"]}),i.duplicate&&t.jsxs(O,{onClick:s=>{s.stopPropagation(),i.duplicate?.(e)},children:[t.jsx(Ze,{size:16}),"Duplicate"]}),i.delete&&t.jsxs(O,{variant:"destructive",onClick:s=>{s.stopPropagation(),i.delete?.(e)},children:[t.jsx(st,{size:16}),"Delete"]})]})]}),cellClassName:"w-[60px]",sortable:!1}}function nt(i){const e=i.type;return Array.isArray(e)?e.every(s=>nt({type:s})):e==="string"||e==="number"||e==="integer"||e==="boolean"||e==="null"}function Gt(i,e){const s=i.properties||{},l=Object.keys(s).filter(o=>{const p=s[o];return p&&nt(p)}),n=Ut(s),c=[],r=new Set;n&&l.includes(n)&&(c.push(n),r.add(n));const u=["title","description","updated_at","updated_by"];for(const o of u)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));const d=l.filter(o=>!r.has(o)&&!Re.includes(o)).sort((o,p)=>o.localeCompare(p));for(const o of d)c.push(o),r.add(o);for(const o of Re)l.includes(o)&&!r.has(o)&&(c.push(o),r.add(o));return c.map(o=>{const p=s[o],m=e?e.includes(o):!["id"].includes(o);return o===n?{id:o,header:"",render:f=>{const a=f[o];return t.jsx(Ge,{icon:a,name:f.title,size:"sm",className:"shrink-0 shadow-sm"})},sortable:!1,cellClassName:"w-16 shrink-0",wrap:!0}:o==="description"?{id:o,header:"Description",render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-[50ch]",children:String(a)})},sortable:m,cellClassName:"max-w-[50ch]"}:o==="created_by"||o==="updated_by"?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx(jt,{id:String(a),size:"xs"}):"—"},sortable:m,cellClassName:"max-w-[250px]"}:p?.format==="date-time"||o.endsWith("_at")?{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a?t.jsx("span",{className:"block truncate max-w-full",children:new Date(a).toLocaleDateString()}):"—"},sortable:m,cellClassName:"max-w-[200px]"}:{id:o,header:o.charAt(0).toUpperCase()+o.slice(1).replace(/_/g," "),render:f=>{const a=f[o];return a==null?"—":t.jsx("span",{className:"block truncate max-w-full",children:String(a)})},sortable:m,cellClassName:"max-w-[200px]"}})}function Ht(i,e,s,l){const n=i||Gt(e,s);return n.some(u=>u.id==="actions")?n:Object.keys(l).length>0?[...n,Qt(l)]:n}function Jt(i){const e=oe.c(119),{connectionId:s,org:l,activeCollection:n,onItemClick:c}=i,r=n.name,u=n.schema??ft,d=n.hasCreateTool,o=n.hasUpdateTool,p=n.hasDeleteTool,m=Be(),{data:f}=ct.useSession(),a=f?.user?.id||"unknown",v=Tt(s);let y;e[0]!==v||e[1]!==s?(y=v?bt(v):s,e[0]=v,e[1]=s,e[2]=y):y=e[2];const b=y,{org:x}=ze();let g;e[3]!==s||e[4]!==x.id||e[5]!==x.slug?(g={connectionId:s,orgId:x.id,orgSlug:x.slug},e[3]=s,e[4]=x.id,e[5]=x.slug,e[6]=g):g=e[6];const $=qe(g),h=It(s,r,$),T=`${s}-${r}`;let E;e[7]!==l||e[8]!==T?(E={namespace:l,resource:T,defaultSortKey:"updated_at"},e[7]=l,e[8]=T,e[9]=E):E=e[9];const{search:N,searchTerm:k,setSearch:j,viewMode:z,setViewMode:P,sortKey:D,sortDirection:w,handleSort:S}=Ct(E);let _;e[10]!==k||e[11]!==w||e[12]!==D?(_={searchTerm:k,sortKey:D,sortDirection:w},e[10]=k,e[11]=w,e[12]=D,e[13]=_):_=e[13];const I=At(s,r,$,_),A=!d&&!o&&!p;let ne;e[14]!==b||e[15]!==r||e[16]!==m||e[17]!==c||e[18]!==l?(ne=C=>{if(c){c(C);return}m({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:b,collectionName:r,itemId:C.id}})},e[14]=b,e[15]=r,e[16]=m,e[17]=c,e[18]=l,e[19]=ne):ne=e[19];const F=ne;let re;e[20]!==h.create||e[21]!==a?(re=async C=>{const xe=new Date().toISOString();await h.create.mutateAsync({...C,id:Me("conn"),title:`${C.title} (Copy)`,created_at:xe,updated_at:xe,created_by:a,updated_by:a})},e[20]=h.create,e[21]=a,e[22]=re):re=e[22];const be=re,[L,ve]=dt.useState(null);let le;e[23]===Symbol.for("react.memo_cache_sentinel")?(le=C=>{ve(C)},e[23]=le):le=e[23];const rt=le;let K;e[24]!==F||e[25]!==o?(K=o&&{edit:F},e[24]=F,e[25]=o,e[26]=K):K=e[26];let M;e[27]!==be||e[28]!==d?(M=d&&{duplicate:be},e[27]=be,e[28]=d,e[29]=M):M=e[29];let U;e[30]!==p?(U=p&&{delete:rt},e[30]=p,e[31]=U):U=e[31];let ae;e[32]!==M||e[33]!==U||e[34]!==K?(ae={...K,...M,...U},e[32]=M,e[33]=U,e[34]=K,e[35]=ae):ae=e[35];const ye=ae;let ce;e[36]!==h.delete||e[37]!==L?(ce=async()=>{L&&(await h.delete.mutateAsync(L.id),ve(null))},e[36]=h.delete,e[37]=L,e[38]=ce):ce=e[38];const Ne=ce;let de;e[39]!==h.create||e[40]!==b||e[41]!==r||e[42]!==d||e[43]!==m||e[44]!==l||e[45]!==a?(de=async()=>{if(!d){Fe.error("Create operation is not available for this collection");return}const C=new Date().toISOString(),xe={id:Me("conn"),title:"New Item",description:"A brief description of the item",created_at:C,updated_at:C,created_by:a,updated_by:a};try{const ke=await h.create.mutateAsync(xe);m({to:"/$org/settings/connections/$appSlug/$collectionName/$itemId",params:{org:l,appSlug:b,collectionName:r,itemId:ke.id}})}catch(ke){console.error("Failed to create item:",ke)}},e[39]=h.create,e[40]=b,e[41]=r,e[42]=d,e[43]=m,e[44]=l,e[45]=a,e[46]=de):de=e[46];const we=de;let me;e[47]!==u?(me=ot(u),e[47]=u,e[48]=me):me=e[48];const Se=me,lt=(I?.length??0)>0,at=d&&!lt&&!N;let pe;e[49]!==h.create||e[50]!==we||e[51]!==d?(pe=d?t.jsxs(Ce,{onClick:we,size:"sm",disabled:h.create.isPending,className:"h-7",children:[t.jsx(Et,{className:"mr-2 h-4 w-4"}),h.create.isPending?"Creating...":"Create"]}):null,e[49]=h.create,e[50]=we,e[51]=d,e[52]=pe):pe=e[52];const ue=pe,Pe=D;let W;e[53]!==S||e[54]!==w||e[55]!==Se||e[56]!==Pe?(W=t.jsx(Ot,{children:t.jsx(Qe,{sortKey:Pe,sortDirection:w,onSort:S,sortOptions:Se})}),e[53]=S,e[54]=w,e[55]=Se,e[56]=Pe,e[57]=W):W=e[57];const _e=`Search ${r}...`;let R;e[58]!==j?(R=C=>{C.key==="Escape"&&(j(""),C.target.blur())},e[58]=j,e[59]=R):R=e[59];let B;e[60]!==N||e[61]!==j||e[62]!==_e||e[63]!==R?(B=t.jsx("div",{className:"flex-1",children:t.jsx(ht,{value:N,onChange:j,placeholder:_e,onKeyDown:R})}),e[60]=N,e[61]=j,e[62]=_e,e[63]=R,e[64]=B):B=e[64];let q;e[65]!==ue||e[66]!==d?(q=d&&t.jsx("div",{className:"pr-3",children:ue}),e[65]=ue,e[66]=d,e[67]=q):q=e[67];let V;e[68]!==B||e[69]!==q?(V=t.jsxs("div",{className:"flex items-center gap-2",children:[B,q]}),e[68]=B,e[69]=q,e[70]=V):V=e[70];let Q;e[71]!==I?(Q=I??[],e[71]=I,e[72]=Q):Q=e[72];const De=D;let G;e[73]!==F?(G=C=>F(C),e[73]=F,e[74]=G):G=e[74];const Ie="No items found",Ae=N?"Try adjusting your search terms":"This collection doesn't have any items yet.",Te=at?ue:void 0;let H;e[75]!==Ie||e[76]!==Ae||e[77]!==Te?(H=t.jsx(it,{image:null,title:Ie,description:Ae,actions:Te}),e[75]=Ie,e[76]=Ae,e[77]=Te,e[78]=H):H=e[78];let J;e[79]!==S||e[80]!==A||e[81]!==ye||e[82]!==u||e[83]!==N||e[84]!==j||e[85]!==P||e[86]!==w||e[87]!==Q||e[88]!==De||e[89]!==G||e[90]!==H||e[91]!==z?(J=t.jsx("div",{className:"flex-1 overflow-auto",children:t.jsx(Wt,{hideToolbar:!0,data:Q,schema:u,viewMode:z,onViewModeChange:P,search:N,onSearchChange:j,sortKey:De,sortDirection:w,onSort:S,actions:ye,onItemClick:G,readOnly:A,emptyState:H})}),e[79]=S,e[80]=A,e[81]=ye,e[82]=u,e[83]=N,e[84]=j,e[85]=P,e[86]=w,e[87]=Q,e[88]=De,e[89]=G,e[90]=H,e[91]=z,e[92]=J):J=e[92];let Y;e[93]!==V||e[94]!==J?(Y=t.jsxs("div",{className:"flex flex-col h-full overflow-hidden",children:[V,J]}),e[93]=V,e[94]=J,e[95]=Y):Y=e[95];const Ee=!!L;let fe;e[96]===Symbol.for("react.memo_cache_sentinel")?(fe=C=>{C||ve(null)},e[96]=fe):fe=e[96];let he;e[97]===Symbol.for("react.memo_cache_sentinel")?(he=t.jsx(Nt,{children:"Delete item?"}),e[97]=he):he=e[97];const Oe=L?.title;let X;e[98]!==Oe?(X=t.jsxs(wt,{children:[he,t.jsxs(St,{children:['Are you sure you want to delete "',Oe,'"? This action cannot be undone.']})]}),e[98]=Oe,e[99]=X):X=e[99];let Z;e[100]!==h.delete.isPending?(Z=t.jsx(vt,{disabled:h.delete.isPending,children:"Cancel"}),e[100]=h.delete.isPending,e[101]=Z):Z=e[101];const $e=h.delete.isPending?"Deleting...":"Delete";let ee;e[102]!==h.delete.isPending||e[103]!==Ne||e[104]!==$e?(ee=t.jsx(yt,{onClick:Ne,disabled:h.delete.isPending,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:$e}),e[102]=h.delete.isPending,e[103]=Ne,e[104]=$e,e[105]=ee):ee=e[105];let te;e[106]!==Z||e[107]!==ee?(te=t.jsxs(Pt,{children:[Z,ee]}),e[106]=Z,e[107]=ee,e[108]=te):te=e[108];let se;e[109]!==X||e[110]!==te?(se=t.jsxs(_t,{children:[X,te]}),e[109]=X,e[110]=te,e[111]=se):se=e[111];let ie;e[112]!==Ee||e[113]!==se?(ie=t.jsx(Dt,{open:Ee,onOpenChange:fe,children:se}),e[112]=Ee,e[113]=se,e[114]=ie):ie=e[114];let ge;return e[115]!==W||e[116]!==Y||e[117]!==ie?(ge=t.jsxs(t.Fragment,{children:[W,Y,ie]}),e[115]=W,e[116]=Y,e[117]=ie,e[118]=ge):ge=e[118],ge}function Yt(){const i=oe.c(13),{org:e,project:s}=ze(),l=mt();let n;i[0]!==e.id||i[1]!==e.slug?(n={connectionId:Ve,orgId:e.id,orgSlug:e.slug},i[0]=e.id,i[1]=e.slug,i[2]=n):n=i[2];const c=qe(n);let r;i[3]!==c||i[4]!==s?(r=async p=>{const m=s.enabledPlugins??[];if(m.includes(p))return;const f=[...m,p],a=await c.callTool({name:"COLLECTION_VIRTUAL_MCP_UPDATE",arguments:{id:s.id,data:{metadata:{enabled_plugins:f}}}});return a.structuredContent??a},i[3]=c,i[4]=s,i[5]=r):r=i[5];let u;i[6]!==e.id||i[7]!==s||i[8]!==l?(u=()=>{l.invalidateQueries({queryKey:Le.project(e.id,s.slug)}),l.invalidateQueries({queryKey:Le.projects(e.id)})},i[6]=e.id,i[7]=s,i[8]=l,i[9]=u):u=i[9];let d;return i[10]!==r||i[11]!==u?(d={mutationFn:r,onSuccess:u,onError:Xt},i[10]=r,i[11]=u,i[12]=d):d=i[12],pt(d)}function Xt(i){Fe.error("Failed to enable plugin: "+(i instanceof Error?i.message:"Unknown error"))}function Zt(i){const e=oe.c(12),{pluginId:s,title:l,description:n,icon:c}=i,r=Yt();let u;e[0]!==r||e[1]!==s?(u=async()=>{try{await r.mutateAsync(s),Fe.success("Plugin enabled!")}catch{}},e[0]=r,e[1]=s,e[2]=u):u=e[2];const d=u,o=c??null,p=r.isPending?"Enabling…":"Enable plugin";let m;e[3]!==r.isPending||e[4]!==d||e[5]!==p?(m=t.jsx(Ce,{onClick:d,disabled:r.isPending,children:p}),e[3]=r.isPending,e[4]=d,e[5]=p,e[6]=m):m=e[6];let f;return e[7]!==n||e[8]!==o||e[9]!==m||e[10]!==l?(f=t.jsx(it,{image:o,title:l,description:n,actions:m}),e[7]=n,e[8]=o,e[9]=m,e[10]=l,e[11]=f):f=e[11],f}const es={name:"WORKFLOW",displayName:"Workflow",hasCreateTool:!0,hasUpdateTool:!0,hasDeleteTool:!0};function Ci(){const{project:i,org:e}=ze();if(!(i.enabledPlugins??[]).includes(Ke))return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx("div",{className:"flex flex-col items-center justify-center h-full",children:t.jsx(Zt,{pluginId:Ke,title:"Enable Workflows",description:"Automate multi-step processes by enabling the Workflows plugin. Once enabled you can create, run, and monitor workflows.",icon:t.jsx("div",{className:"bg-muted p-4 rounded-full",children:t.jsx(ut,{className:"size-8 text-muted-foreground"})})})})})});const n=Be();return t.jsx(je,{children:t.jsx(je.Content,{children:t.jsx(Jt,{connectionId:Ve,org:e.slug,activeCollection:es,onItemClick:c=>n({to:"/$org/settings/workflows/$itemId",params:{org:e.slug,itemId:c.id}})})})})}export{Ci as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as s,g as l,j as o,l as a,E as n,r as c}from"./index-C_oSBqFD.js";import{a as f}from"./index-d7-A3CDs.js";import"./index-DQj7btfC.js";import"./constants-DI_u-hVk.js";import"./collections-B-PXiD2Y.js";import"./index-DlcvFOU2.js";import"./use-virtual-mcp-DsdNWb58.js";import"./use-collections-iUV-5kFm.js";import"./monaco-editor-DR4yoUjc.js";import"./index-BrIVZCzt.js";import"./spinner-srK7FwNe.js";import"./resizable-Bi3jkg9o.js";import"./ZoomOut-qupe1GUj.js";import"./badge-jK5_JNPO.js";import"./select-D_4UU9rK.js";import"./tooltip-Bm-whGHF.js";import"./Check--VLhXi5l.js";import"./ChevronDown-66ErjaPf.js";import"./ChevronUp-BuPeXu8C.js";import"./view-mode-toggle-DSmCr2tD.js";import"./agent-icon-6l7Nwe2K.js";import"./AlertCircle-Bc3r3AGq.js";import"./Tool01-BMk00CcA.js";import"./SwitchHorizontal01-BU3C5ze8.js";import"./RefreshCcw01-D1tvoH2_.js";import"./XCircle-Pgrh_mFJ.js";import"./ArrowUpRight-DfEIENBd.js";import"./ZapSquare-BH297b52.js";import"./Users03--pQkY_Pm.js";import"./CheckCircle-7xc6-R3M.js";import"./ChevronLeft-DyW6EtsM.js";import"./ChevronRight-C87PRbBa.js";import"./DotsVertical-CQgc8nSx.js";import"./Container-cZo3l6OX.js";import"./Eye-DHHjYDbX.js";import"./Globe01-B10jCcNH.js";import"./FilterLines-CWR_eJ7z.js";import"./Star01-D1DEXGAi.js";import"./Palette-CA_16qMN.js";import"./HardDrive-7KMC69UH.js";import"./Stars02-CXAcgX2g.js";import"./Key01-CTKRB2Cd.js";import"./LayoutLeft-SQH1HcmI.js";import"./LinkExternal01-CjT-4hM8.js";import"./Monitor01-svtG00ql.js";import"./Sun-CCiXRotp.js";import"./Play-CrdarOgl.js";import"./Plus-C9icoBmX.js";import"./SearchMd-Di6_vvQ1.js";import"./Settings02-BylJiOHK.js";import"./Shield01-CDSs18-B.js";import"./Stars01-UWs0NZ30.js";import"./Trash01-MTKniuxn.js";import"./Upload01-DsrMMWgf.js";import"./User01-DShN8gQ-.js";import"./Users01-Bvh39Ydu.js";import"./XClose-CXixB7oH.js";import"./X-D-FyhysP.js";import"./Zap-BcF-Iz_3.js";import"./layout-Dkxj2bFg.js";import"./index-C1kxS2Io.js";import"./sidebar-CJNdWlwy.js";import"./sheet-D01YX9h0.js";import"./use-connection-DTKE65yR.js";import"./use-mcp-tools-CK1DUQVb.js";import"./dialog-Bt3zXcK6.js";import"./scroll-area-BNzrPnq5.js";import"./index-DML39Lt-.js";import"./hover-card-DcJvwauT.js";import"./dropdown-menu-SwrAlbwN.js";import"./integration-icon-CNf7sZ5b.js";import"./accordion-bX483Ztz.js";import"./index-C0t_9xyr.js";import"./empty-state-BJFB-AwN.js";import"./create-sse-subscription-BS5983N4.js";import"./input-Ct22kLSY.js";function Bt(){const t=s.c(4);let r;t[0]===Symbol.for("react.memo_cache_sentinel")?(r={from:"/shell/$org/settings/workflows/$itemId"},t[0]=r):r=t[0];const{itemId:e}=l(r);let i;t[1]===Symbol.for("react.memo_cache_sentinel")?(i=o.jsx("div",{className:"flex h-full items-center justify-center",children:o.jsx(a,{size:32,className:"animate-spin text-muted-foreground"})}),t[1]=i):i=t[1];const p=decodeURIComponent(e);let m;return t[2]!==p?(m=o.jsx(n,{children:o.jsx(c.Suspense,{fallback:i,children:o.jsx(f,{itemId:p})})}),t[2]=p,t[3]=m):m=t[3],m}export{Bt as default};
|
package/dist/client/index.html
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
44
44
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
45
45
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
46
|
-
<script type="module" crossorigin src="/assets/index-
|
|
46
|
+
<script type="module" crossorigin src="/assets/index-C_oSBqFD.js"></script>
|
|
47
47
|
<link rel="stylesheet" crossorigin href="/assets/index-D5dv4kfs.css">
|
|
48
48
|
</head>
|
|
49
49
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -143,7 +143,7 @@ Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.ht
|
|
|
143
143
|
All managed services stopped.`)}async function v2l(i){let t=[],u=O_(i,"postgres");if(u!==null&&Kc(u.pid))t.push({name:"PostgreSQL",state:"running",pid:u.pid,port:u.port,owner:"managed"});else{if(u!==null)await A1(i,"postgres");t.push({name:"PostgreSQL",state:"stopped",pid:null,port:0,owner:"none"})}let l=O_(i,"nats");if(l!==null&&Kc(l.pid))t.push({name:"NATS",state:"running",pid:l.pid,port:l.port,owner:"managed"});else{if(l!==null)await A1(i,"nats");t.push({name:"NATS",state:"stopped",pid:null,port:0,owner:"none"})}let n=O_(i,"minio");if(n!==null&&Kc(n.pid))t.push({name:"MinIO",state:"running",pid:n.pid,port:n.port,owner:"managed"});else{if(n!==null)await A1(i,"minio");t.push({name:"MinIO",state:"stopped",pid:null,port:0,owner:"none"})}let f=O_(i,"link");if(f!==null&&Kc(f.pid))t.push({name:"Link",state:"running",pid:f.pid,port:f.port,owner:"managed"});else{if(f!==null)await A1(i,"link");t.push({name:"Link",state:"stopped",pid:null,port:0,owner:"none"})}return t}function r2l(i){console.log("Service State PID Port Owner"),console.log("---------- ---------- ----- ----- ----------");for(let l of i){let n=l.name.padEnd(10),f=l.state.padEnd(10),c=(l.pid?.toString()??"-").padEnd(5),$=(l.port?String(l.port):"-").padEnd(5),d=l.owner;console.log(`${n} ${f} ${c} ${$} ${d}`)}}var xAi="postgres",DAi="postgres",sQt="postgres",pQt="v2.10.24",yAi="minioadmin",OAi="minioadmin",iYt="studio-dev",H3l=9000,o6,XAi,vAi="cli.ts link",f2l=500,c2l=30000,$2l=30000;var J8=w(()=>{x1();o6=Dui()==="win32",XAi=o6?".exe":""});var cYt={};Gi(cYt,{servicesCommand:()=>w2l});function fYt(i){if(!i)return null;try{let u=new URL(i).hostname;if(u==="localhost"||u==="127.0.0.1"||u==="::1")return null;return i}catch{return null}}async function w2l(i){let{subcommand:t,home:u}=i,{ensureServices:l,stopServices:n,getStatus:f,printTable:c}=await Promise.resolve().then(() => (J8(),N8));switch(t){case"up":{await l({home:u,externalDatabaseUrl:fYt(process.env.DATABASE_URL),externalNatsUrl:fYt(process.env.NATS_URL)});break}case"down":{await n(u);break}case"status":{let $=await f(u);c($);break}default:console.error(`Unknown services subcommand: ${t}
|
|
144
144
|
Usage: deco services <up|down|status>`),process.exit(1)}}import{homedir as x2l}from"os";function DH(i){return i==="true"||i==="1"}function $Yt(i){if(!i)return null;try{let u=new URL(i).hostname;if(u==="localhost"||u==="127.0.0.1"||u==="::1")return null;return i}catch{return null}}function y2l(i){let t=i&&i.length>0?i:"user-desktop";if(t==="cluster")return"agent-sandbox";if(!D2l.has(t))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return t}function Nui(i,t){let u=i.home||t.DATA_DIR||t.DECOCMS_HOME||`${x2l()}/deco`,l=i.localMode,n=i.nodeEnv||t.NODE_ENV||"development",f=t.NATS_URL||"nats://localhost:4222";return{settings:{nodeEnv:n,port:Number(i.port)||Number(t.PORT)||3000,baseUrl:i.baseUrl||t.BASE_URL,dataDir:u,databasePgSsl:DH(t.DATABASE_PG_SSL),databasePoolMax:Number(t.DATABASE_POOL_MAX)||5,betterAuthSecret:t.BETTER_AUTH_SECRET||"",encryptionKey:t.ENCRYPTION_KEY||"",meshJwtSecret:t.MESH_JWT_SECRET,localMode:l,disableRateLimit:DH(t.DISABLE_RATE_LIMIT),studioProvisionSecretKey:t.STUDIO_PROVISION_SECRET_KEY,clickhouseUrl:t.CLICKHOUSE_URL,monitoringOtlpEndpoint:t.MONITORING_OTLP_ENDPOINT,otelServiceName:t.OTEL_SERVICE_NAME||"studio",configPath:t.CONFIG_PATH||"./config.json",aiGatewayEnabled:DH(t.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:t.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",enableDecoImport:DH(t.ENABLE_DECO_IMPORT),orgFsClusterMounts:DH(t.ORGFS_CLUSTER_MOUNTS),orgFsPublicSetsJson:t.ORGFS_PUBLIC_SETS,s3Endpoint:t.S3_ENDPOINT,s3Bucket:t.S3_BUCKET,s3Region:t.S3_REGION||"auto",s3AccessKeyId:t.S3_ACCESS_KEY_ID,s3SecretAccessKey:t.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:t.S3_FORCE_PATH_STYLE===void 0||t.S3_FORCE_PATH_STYLE===""||t.S3_FORCE_PATH_STYLE==="true"||t.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:t.MONITORING_S3_BUCKET,monitoringS3Endpoint:t.MONITORING_S3_ENDPOINT,monitoringS3Region:t.MONITORING_S3_REGION,monitoringS3AccessKeyId:t.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:t.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:t.MONITORING_S3_PREFIX,duckdbExtensionDirectory:t.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",isCli:!0,noTui:i.noTui===!0,podName:t.POD_NAME??crypto.randomUUID(),sandboxProviderKind:y2l(t.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:t.DECO_SUPABASE_URL,decoSupabaseServiceKey:t.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:t.FIRECRAWL_API_KEY},externalDatabaseUrl:$Yt(t.DATABASE_URL),externalNatsUrl:$Yt(f),skipMigrations:i.skipMigrations}}var D2l;var JAi=w(()=>{D2l=new Set(["agent-sandbox","user-desktop"])});function dYt(i){yH=Object.freeze(i)}function Qt(){if(!yH)O2l();return yH}function O2l(){if(yH)return;let i={...process.env},t=Nui({port:i.PORT||"3000",home:i.DATA_DIR||i.DECOCMS_HOME||"",localMode:i.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:i.DECO_NO_TUI==="true",vitePort:i.VITE_PORT,baseUrl:i.BASE_URL},i);yH=Object.freeze({...t.settings,databaseUrl:i.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(i.NATS_URL||"nats://localhost:4222").split(",").map((u)=>u.trim()).filter(Boolean)})}var yH=null;var U0=w(()=>{JAi()});import{context as X2l,propagation as N2l,SpanKind as J2l,SpanStatusCode as UAi}from"@opentelemetry/api";function T2l(i,t){let u=i instanceof Error?i.name:void 0;if(u==="TimeoutError")return"timeout";if(u==="AbortError")return"cancelled";if(t?.aborted)return"cancelled";return null}function F2l(i,t){if(t.startsWith("/_sandbox/")){if(i===404)return"daemon_gone";if(i===409)return"daemon_not_ready"}if(i===404&&t.includes("/sandboxclaims/"))return"claim_gone";return null}function I2l(i,t){if(i===404&&(t==="/.decofile"||t==="/live/_meta"))return"not_a_deco_site";return null}function Z2l(i){if(!(i instanceof Error))return!1;if(i.message.includes("socket connection was closed"))return!0;let t=i.code;return t==="ECONNRESET"||t==="EPIPE"}async function B2l(i,t){let u,l;if(i instanceof Request)u=new URL(i.url),l=t?.method??i.method;else if(i instanceof URL)u=i,l=t?.method??"GET";else u=new URL(i),l=t?.method??"GET";let n=`${l} ${u.host}`;return Aw.startActiveSpan(n,{kind:J2l.CLIENT,attributes:{"http.request.method":l,"url.full":u.href,"url.scheme":u.protocol.replace(":",""),"url.path":u.pathname,"url.query":u.search||void 0,"server.address":u.hostname,"server.port":u.port?Number(u.port):void 0}},async(f)=>{try{let c=new Headers(t?.headers??(i instanceof Request?i.headers:{}));N2l.inject(X2l.active(),c,{set:(E,v,r)=>E.set(v,r)});let $={...t,headers:c},d=await U2l(i,$);f.setAttribute("http.response.status_code",d.status);let _=d.status===405&&l==="GET"&&(c.get("accept")??"").includes("text/event-stream"),g=d.status>=400?F2l(d.status,u.pathname):null,h=d.status>=400?I2l(d.status,u.pathname):null;if(d.status>=400&&!_&&!g&&!h)f.setStatus({code:UAi.ERROR,message:`HTTP ${d.status}`});else{if(g)f.setAttribute("sandbox.lifecycle",g);if(h)f.setAttribute("preview.probe",h);f.setStatus({code:UAi.OK})}return d}catch(c){let $=t?.signal??(i instanceof Request?i.signal:void 0),d=T2l(c,$??void 0);if(d)f.setAttribute("abort.reason",d);else if(Z2l(c)&&u.pathname.startsWith("/_sandbox/"))f.setAttribute("sandbox.lifecycle","connection_closed");else f.recordException(c),f.setStatus({code:UAi.ERROR,message:c instanceof Error?c.message:"Fetch failed"});throw c}finally{f.end()}})}function _Yt(){globalThis.fetch=B2l}var U2l;var gYt=w(()=>{yc();U2l=globalThis.fetch});import{join as FAi}from"path";function s6(){return FAi(Qt().dataDir,"logs")}function MG(){return FAi(Qt().dataDir,"traces")}function ar(){return FAi(Qt().dataDir,"metrics")}function Gw(i,t){let u=i[t];return u!=null?String(u):""}function OH(i,t){let u=i[t];return u!=null&&u!==""?String(u):null}function hYt(i){let{attributes:t}=i,u=t[W0.IS_ERROR],l=t[W0.DURATION_MS];return{v:1,id:i.id,type:Gw(t,W0.TYPE)||XH,organization_id:Gw(t,W0.ORGANIZATION_ID),connection_id:Gw(t,W0.CONNECTION_ID),connection_title:Gw(t,W0.CONNECTION_TITLE),tool_name:Gw(t,W0.TOOL_NAME),input:Gw(t,W0.INPUT),output:Gw(t,W0.OUTPUT),is_error:u===!0||u===1||u==="true"?1:0,error_message:OH(t,W0.ERROR_MESSAGE),duration_ms:typeof l==="number"?l:Number(l)||0,timestamp:new Date(Number(i.timestampNano/1000000n)).toISOString(),user_id:OH(t,W0.USER_ID),request_id:Gw(t,W0.REQUEST_ID),user_agent:OH(t,W0.USER_AGENT),virtual_mcp_id:OH(t,W0.VIRTUAL_MCP_ID),properties:OH(t,W0.PROPERTIES)}}function Uui(i){return i[0]*1000+i[1]/1e6}function VG(i){return new Date(Uui(i)).toISOString()}var TAi="mcp.proxy.callTool",W0,XH="tool_call",qG="llm_call",Jui="decopilot";var N_=w(()=>{U0();W0={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as Tui}from"@opentelemetry/core";import{mkdir as Q2l,rename as Y2l,writeFile as P2l}from"fs/promises";import{join as Fui}from"path";class U8{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(i){this.basePath=i.basePath,this.flushThreshold=i.flushThreshold??1000,this.maxBufferBytes=i.maxBufferBytes??10485760,this.partitionKey=i.partitionKey;let t=i.flushIntervalMs??60000;if(t>0&&t<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((u)=>{console.error("[NDJSONExporter] Timer flush failed:",u)})},t),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(i){if(this.isShutdown)return Promise.resolve({code:Tui.FAILED});for(let t of i){let u=JSON.stringify(t),l=this.partitionKey?this.partitionKey(t):"";this.bufferItems.push({partition:l,json:u}),this.bufferBytes+=Buffer.byteLength(u,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:Tui.SUCCESS})).catch((t)=>{return console.error("[NDJSONExporter] Flush failed:",t),{code:Tui.FAILED}});return Promise.resolve({code:Tui.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let t=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=t,t}async doFlush(){if(this.bufferItems.length===0)return;let i=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let t=new Map;for(let n of i){let f=t.get(n.partition);if(!f)f=[],t.set(n.partition,f);f.push(n.json)}let u=await Promise.allSettled(Array.from(t.entries()).map(([n,f])=>this.writeNDJSON(f,n).then(()=>n))),l=u.find((n)=>n.status==="rejected");if(l){let n=new Set;for(let c of u)if(c.status==="fulfilled")n.add(c.value);let f=i.filter((c)=>!n.has(c.partition));this.bufferItems=f.concat(this.bufferItems),this.bufferBytes=0;for(let c of this.bufferItems)this.bufferBytes+=Buffer.byteLength(c.json,"utf8")+1;throw l.reason}}async writeNDJSON(i,t){let u=new Date,l=[String(u.getUTCFullYear()),String(u.getUTCMonth()+1).padStart(2,"0"),String(u.getUTCDate()).padStart(2,"0"),String(u.getUTCHours()).padStart(2,"0")],n=t?Fui(this.basePath,t,...l):Fui(this.basePath,...l);if(!this.knownDirs.has(n))await Q2l(n,{recursive:!0,mode:448}),this.knownDirs.add(n);let f=`${crypto.randomUUID()}.ndjson`,c=Fui(n,`.${f}.tmp`),$=Fui(n,f),d=i.join(`
|
|
145
145
|
`)+`
|
|
146
|
-
`;await P2l(c,d,{mode:384}),await Y2l(c,$)}}var Iui=()=>{};import{ExportResultCode as A2l}from"@opentelemetry/core";class IAi{inner;constructor(i){this.inner=new U8({...i,partitionKey:(t)=>t.organization_id})}export(i,t){let u=[];for(let l of i){if(!G2l.has(l.attributes[W0.TYPE]))continue;let n={};for(let[d,_]of Object.entries(l.attributes))if(typeof _==="string"||typeof _==="number"||typeof _==="boolean")n[d]=_;let f=l.spanContext?.spanId??crypto.randomUUID(),c=l.hrTime,$=BigInt(c[0])*1000000000n+BigInt(c[1]);u.push(hYt({id:f,timestampNano:$,attributes:n}))}this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:A2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var G2l;var EYt=w(()=>{N_();Iui();G2l=new Set([XH,qG])});import{ExportResultCode as W2l}from"@opentelemetry/core";import{AggregationTemporality as k2l,DataPointType as vYt}from"@opentelemetry/sdk-metrics";class ZAi{inner;constructor(i){this.inner=new U8({...i,partitionKey:(t)=>t.organization_id})}selectAggregationTemporality(i){return k2l.DELTA}export(i,t){let u=[];for(let l of i.scopeMetrics)for(let n of l.metrics){let{descriptor:f,dataPointType:c}=n;if(c===vYt.SUM)for(let $ of n.dataPoints){let d=$.attributes;u.push({v:1,name:f.name,type:"sum",unit:f.unit,timestamp:VG($.endTime),organization_id:String(d["organization.id"]??""),connection_id:String(d["connection.id"]??""),tool_name:String(d["tool.name"]??""),status:String(d.status??""),error_type:String(d["error.type"]??""),value:$.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(c===vYt.HISTOGRAM)for(let $ of n.dataPoints){let{attributes:d,value:_}=$;u.push({v:1,name:f.name,type:"histogram",unit:f.unit,timestamp:VG($.endTime),organization_id:String(d["organization.id"]??""),connection_id:String(d["connection.id"]??""),tool_name:String(d["tool.name"]??""),status:String(d.status??""),error_type:String(d["error.type"]??""),value:_.count,hist_count:_.count,hist_sum:_.sum??0,hist_min:_.min??0,hist_max:_.max??0,hist_boundaries:JSON.stringify(_.buckets.boundaries),hist_bucket_counts:JSON.stringify(_.buckets.counts)})}}this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:W2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var rYt=w(()=>{N_();Iui()});import{ExportResultCode as j2l}from"@opentelemetry/core";function S2l(i){let t=i.resource,u=t.attributes["service.name"]??"unknown";return{v:1,trace_id:i.spanContext().traceId,span_id:i.spanContext().spanId,parent_span_id:i.parentSpanContext?.spanId||null,name:i.name,kind:i.kind,status:i.status.code,status_message:i.status.message||null,start_time:VG(i.startTime),end_time:VG(i.endTime),duration_ms:Uui(i.endTime)-Uui(i.startTime),service_name:u,attributes:JSON.stringify(i.attributes),events:JSON.stringify(i.events),links:JSON.stringify(i.links),resource:JSON.stringify(t.attributes)}}class BAi{inner;constructor(i){this.inner=new U8(i)}export(i,t){let u=i.map(S2l);this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:j2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var wYt=w(()=>{N_();Iui()});function NH(i,t=65536){if(i.length<=t&&Buffer.byteLength(i,"utf8")<=t)return i;let u=t-z2l;if(u<=0)return"... [TRUNCATED]".slice(0,t);let l=0,n=0;for(let f of i){let c=f.charCodeAt(0)<=127?1:Buffer.byteLength(f,"utf8");if(l+c>u)break;l+=c,n+=f.length}return i.slice(0,n)+"... [TRUNCATED]"}var z2l;var QAi=w(()=>{z2l=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as b2l}from"@opentelemetry/api-logs";function DYt(i){xYt=i.getLogger(K2l,H2l)}function yYt(){return xYt}var K2l="studio.monitoring",H2l="1.0.0",xYt;var YAi=w(()=>{xYt=b2l});var NYt={};Gi(NYt,{shouldSkipStudioContext:()=>PAi,isServerPath:()=>q2l,isHealthPath:()=>JH,SYSTEM_PATHS:()=>J_});function JH(i){return i===J_.HEALTH||i===J_.HEALTH_LIVE||i===J_.HEALTH_READY}function OYt(i){return i===J_.HEALTH||i===J_.HEALTH_LIVE||i===J_.HEALTH_READY||i===J_.METRICS||i.startsWith(aG.WELL_KNOWN)}function XYt(i){return i.startsWith(aG.API)}function L2l(i){return i==="/mcp"||i.startsWith(aG.MCP)}function e2l(i){return i.startsWith(aG.OAUTH_PROXY)}function C2l(i){return R2l.test(i)}function M2l(i){return i.startsWith(aG.ORG)}function q2l(i){return XYt(i)||L2l(i)||e2l(i)||M2l(i)||OYt(i)}function PAi(i){return i==="/"||i.startsWith(aG.API_AUTH)||i==="/api/trigger-callback"||OYt(i)||!XYt(i)&&C2l(i)}var J_,aG,R2l;var Zui=w(()=>{J_={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics"},aG={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/"},R2l=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as AAi}from"@opentelemetry/api";var GAi=async(i,t)=>{if(JH(i.req.path))return t();let u=i.req.raw,l=new URL(u.url),n=TYt(u),f=WAi(u),c={"http.request.url":u.url,"http.request.method":u.method,"http.request.body.size":u.headers.get("content-length")??void 0,"url.scheme":l.protocol.replace(":",""),"server.address":l.host,"url.query":l.search||void 0,"url.path":l.pathname,"user_agent.original":u.headers.get("user-agent")??void 0,"request.internal":u.headers.has("traceparent"),...f?{"trace.debug.id":f}:{}};await Aw.startActiveSpan(`${u.method} ${l.pathname}`,{attributes:c},n,async($)=>{i.set("rootSpan",$);try{await t()}catch(d){$.recordException(d),$.setStatus({code:AAi.ERROR});let _=typeof d==="object"&&d&&"message"in d?String(d.message):JSON.stringify(d);throw console.error("error: ",_,c),d}finally{let d=i.res?.status??500,_=d>=500;$.setStatus({code:_?AAi.ERROR:AAi.OK}),$.setAttribute("http.response.status_code",d);let g=i.get("meshContext");if(g){if(g.auth.user?.id)$.setAttribute("studio.user.id",g.auth.user.id);if(g.auth.apiKey?.id)$.setAttribute("studio.api_key.id",g.auth.apiKey.id);if(g.organization?.id)$.setAttribute("studio.organization.id",g.organization.id)}if(f)UYt(i.res.headers,f);$.end()}})};var JYt=w(()=>{yc();Zui()});import{createContextKey as V2l,metrics as PYt,propagation as a2l,ROOT_CONTEXT as m2l,SpanStatusCode as FYt,trace as jAi}from"@opentelemetry/api";import{logs as AYt,SeverityNumber as BH}from"@opentelemetry/api-logs";import{OTLPLogExporter as IYt}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as o2l}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as s2l}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as p2l}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as kAi,LoggerProvider as ZYt}from"@opentelemetry/sdk-logs";import{detectResources as iwl,envDetector as twl,hostDetector as uwl,osDetector as lwl,processDetector as nwl,resourceFromAttributes as BYt}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as fwl}from"@opentelemetry/sdk-metrics";import{NodeSDK as cwl}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as QYt,SamplingDecision as mG}from"@opentelemetry/sdk-trace-base";class WYt{inner;ratio;constructor(i,t){this.inner=i;this.ratio=t}onEmit(i,t){if(i.severityNumber!==void 0&&i.severityNumber>=BH.ERROR||Math.random()<this.ratio)this.inner.onEmit(i,t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class kYt{inner;maxBytes;constructor(i,t){this.inner=i;this.maxBytes=t}onEmit(i,t){let u=W0.OUTPUT,l=i.attributes?.[u];if(typeof l==="string"&&l.length>this.maxBytes){let n=NH(l,this.maxBytes);this.inner.onEmit({...i,attributes:{...i.attributes,[u]:n}},t)}else this.inner.onEmit(i,t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class jYt{inner;constructor(i){this.inner=i}shouldSample(i,t,u,l,n,f){let c=i.getValue(GYt);if(!c){if(this.inner)return this.inner.shouldSample(i,t,u,l,n,f);return{decision:mG.RECORD_AND_SAMPLED}}let $=WAi(c);if($)return{decision:mG.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":$}};if(this.inner){let d=this.inner.shouldSample(i,t,u,l,n,f);if(d.decision===mG.RECORD_AND_SAMPLED){let _=crypto.randomUUID();d.attributes={...d.attributes??{},"trace.debug.id":_}}return d}return{decision:mG.NOT_RECORD}}toString(){return"DebugSampler"}}class SYt{ratio;constructor(i){this.ratio=i}shouldSample(){if(Math.random()<this.ratio)return{decision:mG.RECORD_AND_SAMPLED};return{decision:mG.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function zYt(){if(YYt)return;let i=Qt(),t=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,u=t?new s2l:void 0;UH=i.nodeEnv==="test"?null:new IAi({basePath:s6()}),TH=i.nodeEnv==="test"?null:new BAi({basePath:MG()}),FH=i.nodeEnv==="test"?null:new ZAi({basePath:ar()}),IH=FH?new fwl({exporter:FH,exportIntervalMillis:60000}):null;let l=process.env.STUDIO_ENV??"production"??"unknown",n={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))n["deployment.environment"]=l;new cwl({serviceName:i.otelServiceName,resource:BYt(n),metricReaders:[SAi,...IH?[IH]:[]],sampler:_wl,spanProcessors:[...u?[new QYt(u,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...TH?[new QYt(TH,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[]],instrumentations:[new p2l]}).start(),ef=PYt.getMeter("studio","1.0.0"),Aw=jAi.getTracer("studio","1.0.0");let c=iwl({detectors:[twl,uwl,lwl,nwl]}).merge(BYt({"service.name":i.otelServiceName,...n})),$=[];if(t){let h=l==="prod"||l==="production"?1:0.1,E=process.env.INFRA_LOG_SAMPLE_RATIO,v=h;if(E!==void 0){let r=Number(E);if(Number.isFinite(r)&&r>=0&&r<=1)v=r;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${E}" (expected 0..1); using ${h}`)}$.push(new WYt(new kAi(new IYt),v))}ZH=new ZYt({resource:c,processors:$}),AYt.setGlobalLoggerProvider(ZH),bYt=ZH.getLogger("studio","1.0.0");let d=i.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,_=[];if(d){let g=d.replace(/\/$/,""),h=g.endsWith("/v1/logs")?g:`${g}/v1/logs`;_.push(new kYt(new kAi(new IYt({url:h})),8000))}if(UH)_.push(new kAi(UH,{scheduledDelayMillis:60000,maxExportBatchSize:1000}));Bui=new ZYt({resource:c,processors:_}),DYt(Bui),_Yt(),YYt=!0}async function jg(){let t=(await Promise.allSettled([ZH?ZH.forceFlush():Promise.resolve(),(async()=>{if(Bui)await Bui.forceFlush();if(UH)await UH.forceFlush()})(),(async()=>{let u=jAi.getTracerProvider();if("forceFlush"in u)await u.forceFlush();if(TH)await TH.forceFlush()})(),(async()=>{if(IH)await IH.forceFlush();if(FH)await FH.forceFlush()})()])).find((u)=>u.status==="rejected");if(t)throw t.reason}function KAi(i,t,u){return Aw.startActiveSpan(i,{attributes:u},async(l)=>{try{let n=await t(l);return l.setStatus({code:FYt.OK}),n}catch(n){let f=n instanceof Error?n:Error(String(n??"unknown"));throw l.setStatus({code:FYt.ERROR,message:f.message}),l.recordException(f),n}finally{l.end()}})}var $wl="__d",GYt,dwl=1,WAi=(i)=>{let u=new URL(i.url).searchParams.get($wl);if(u==="")return crypto.randomUUID();if(!u)u=i.headers.get("x-trace-debug-id");return u},UYt=(i,t)=>{try{i.set("x-trace-debug-id",t)}catch{}},SAi,_wl,UH=null,TH=null,FH=null,IH=null,ZH=null,Bui=null,YYt=!1,Aw,ef,bYt,zAi=(i,t,u)=>{let l={},n=u,f=u[u.length-1];if(f!==null&&typeof f==="object"&&!Array.isArray(f)&&!(f instanceof Error)&&Object.getPrototypeOf(f)===Object.prototype)l=f,n=u.slice(0,-1);let c=n.map(($)=>{if($ instanceof Error)return`${$.name}: ${$.message}`;if(typeof $==="object")try{return JSON.stringify($)}catch{return"[Object]"}return String($)}).join(" ");bYt.emit({severityNumber:i,severityText:t,body:c,attributes:{"log.source":"console",...l}})},bAi,TYt=(i)=>{return a2l.extract(m2l,i.headers,{get:(u,l)=>u.get(l)??void 0,keys:(u)=>[...u.keys()]}).setValue(GYt,i)};var yc=w(()=>{gYt();EYt();rYt();wYt();N_();QAi();U0();YAi();JYt();GYt=V2l("Current request");SAi=new o2l({preventServerStart:!0}),_wl=new jYt(new SYt(dwl));Aw=jAi.getTracer("studio","1.0.0"),ef=PYt.getMeter("studio","1.0.0"),bYt=AYt.getLogger("studio","1.0.0"),bAi={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...i)=>{zAi(BH.ERROR,"ERROR",i),bAi.error(...i)};console.warn=(...i)=>{zAi(BH.WARN,"WARN",i),bAi.warn(...i)};console.debug=(...i)=>{zAi(BH.DEBUG,"DEBUG",i),bAi.debug(...i)}});function T8(){try{return process.memoryUsage()}catch{return null}}function HYt(){if(HAi)return;let i=performance.now()+RAi;HAi=setInterval(()=>{let t=performance.now();KYt=Math.max(0,t-i),i=t+RAi},RAi),HAi.unref?.()}function RYt(){return HYt(),KYt}function LYt(){if(HYt(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let i=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),t=Number(process.env.EVENT_LOOP_SPIKE_MS??100),u=ef.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),l=performance.now()+i;return Qui=setInterval(()=>{let n=performance.now(),f=Math.max(0,n-l);if(l=n+i,u.record(f),f>t){let c=T8();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(f),rss:c?.rss,heapUsed:c?.heapUsed,heapTotal:c?.heapTotal,external:c?.external}))}},i),Qui.unref?.(),()=>{if(Qui)clearInterval(Qui)}}var Qui,HAi,KYt=0,RAi=500;var LAi=w(()=>{yc()});var oYt={};Gi(oYt,{getDbDialect:()=>YH,getDb:()=>R0,getDatabaseUrl:()=>Ww,createDatabase:()=>mYt,closeDatabase:()=>kw});import{Kysely as gwl,PostgresDialect as MYt}from"kysely";import{Pool as qYt}from"pg";function rwl(i){let t=i.connect.bind(i);return i.connect=(u)=>{if(typeof u==="function")return t(u);let l=performance.now(),n=Yui(),f=i.idleCount===0&&i.totalCount>=n,c=i.idleCount;return t().then(($)=>{let d=performance.now()-l;if(eYt().record(d,{"db.pool.outcome":f?"contended":"available"}),d>Ewl)if(f)console.error("Slow pool acquire \u2014 pool saturated:",{waitMs:d,total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:n});else console.warn("Slow pool acquire \u2014 event-loop lag (not pool):",{waitMs:d,idleAtStart:c,total:i.totalCount,max:n});return $},($)=>{throw eYt().record(performance.now()-l,{"db.pool.outcome":"error"}),$})},i}function aYt(){try{return Qt().databasePgSsl}catch{return!1}}function Yui(){try{return Qt().databasePoolMax}catch{return 10}}function wwl(i){let t=rwl(new qYt({connectionString:i,max:Yui(),ssl:aYt(),...VYt})),u=new MYt({pool:t});return{type:"postgres",db:new gwl({dialect:u,log:vwl(t)}),pool:t}}function Ww(){return Qt().databaseUrl}function YH(i){let t=i||Ww();return new MYt({pool:new qYt({connectionString:t,max:Yui(),ssl:aYt(),...VYt})})}function mYt(i){let t=i||Ww();return wwl(t)}async function kw(i){if(await i.db.destroy(),!i.pool.ended)await i.pool.end();if(i===QH)QH=null}function R0(){if(!QH)QH=mYt(Ww());return QH}var hwl=()=>ef.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),eYt=()=>ef.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),CYt=400,Ewl=100,vwl=(i)=>(t)=>{let u={"db.statement":t.query.sql,"db.status":t.level==="error"?"error":"success"};if(t.queryDurationMillis>CYt){let l=RYt(),n=l>CYt/2;console.error(n?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:t.queryDurationMillis,eventLoopLagMs:Math.round(l),sql:t.query.sql,pool:{total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:Yui()}})}if(hwl().record(t.queryDurationMillis,u),t.level==="error")console.error("Query failed:",{durationMs:t.queryDurationMillis,error:t.error,sql:t.query.sql})},VYt,QH=null;var Nd=w(()=>{U0();yc();LAi();VYt={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});function pYt(i){let{port:t,query:u}=i,{protocol:l,path:n,hostname:f}=i;if(l&&l.slice(-1)!==":")l+=":";if(t)f+=`:${t}`;if(n&&n.charAt(0)!=="/")n=`/${n}`;let c=u?sYt.buildQueryString(u):"";if(c&&c[0]!=="?")c=`?${c}`;let $="";if(i.username!=null||i.password!=null){let _=i.username??"",g=i.password??"";$=`${_}:${g}@`}let d="";if(i.fragment)d=`#${i.fragment}`;return`${l}//${$}${f}${n}${c}${d}`}var sYt;var iPt=w(()=>{sYt=z(yo(),1)});var tPt="UNSIGNED-PAYLOAD",uPt="X-Amz-Content-Sha256";class Pui{signer;constructor(i){let t={service:i.signingName||i.service||"s3",uriEscapePath:i.uriEscapePath||!1,applyChecksum:i.applyChecksum||!1,...i};this.signer=new lPt.SignatureV4MultiRegion(t)}presign(i,{unsignableHeaders:t=new Set,hoistableHeaders:u=new Set,unhoistableHeaders:l=new Set,...n}={}){return this.prepareRequest(i,{unsignableHeaders:t,unhoistableHeaders:l,hoistableHeaders:u}),this.signer.presign(i,{expiresIn:900,unsignableHeaders:t,unhoistableHeaders:l,...n})}presignWithCredentials(i,t,{unsignableHeaders:u=new Set,hoistableHeaders:l=new Set,unhoistableHeaders:n=new Set,...f}={}){return this.prepareRequest(i,{unsignableHeaders:u,unhoistableHeaders:n,hoistableHeaders:l}),this.signer.presignWithCredentials(i,t,{expiresIn:900,unsignableHeaders:u,unhoistableHeaders:n,...f})}prepareRequest(i,{unsignableHeaders:t=new Set,unhoistableHeaders:u=new Set,hoistableHeaders:l=new Set}={}){t.add("content-type"),Object.keys(i.headers).map(($)=>$.toLowerCase()).filter(($)=>$.startsWith("x-amz-server-side-encryption")).forEach(($)=>{if(!l.has($))u.add($)}),i.headers[uPt]=tPt;let n=i.headers.host,f=i.port,c=`${i.hostname}${i.port!=null?":"+f:""}`;if(!n||n===i.hostname&&i.port!=null)i.headers.host=c}}var lPt;var eAi=w(()=>{lPt=z(EG(),1)});var nPt,fPt,Aui=async(i,t,u={})=>{let l,n;if(typeof i.config.endpointProvider==="function"){let E=(await nPt.getEndpointFromInstructions(t.input,t.constructor,i.config)).properties?.authSchemes?.[0];if(E?.name==="sigv4a")n=E?.signingRegionSet?.join(",");else n=E?.signingRegion;l=new Pui({...i.config,signingName:E?.signingName,region:async()=>n})}else l=new Pui(i.config);let f=(h,E)=>async(v)=>{let{request:r}=v;if(!fPt.HttpRequest.isInstance(r))throw Error("Request to be presigned is not an valid HTTP request.");delete r.headers["amz-sdk-invocation-id"],delete r.headers["amz-sdk-request"],delete r.headers["x-amz-user-agent"];let x,y={...u,signingRegion:u.signingRegion??E.signing_region??n,signingService:u.signingService??E.signing_service};if(E.s3ExpressIdentity)x=await l.presignWithCredentials(r,E.s3ExpressIdentity,y);else x=await l.presign(r,y);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:x}}},c="presignInterceptMiddleware",$=i.middlewareStack.clone();$.addRelativeTo(f,{name:c,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let d=t.resolveMiddleware($,i.config,{}),{output:_}=await d({input:t.input}),{presigned:g}=_;return pYt(g)};var cPt=w(()=>{iPt();eAi();nPt=z(ft(),1),fPt=z(Ef(),1)});var $Pt=w(()=>{cPt();eAi()});import{extname as xwl}from"path";function ZE(i){let t;try{t=decodeURIComponent(i)}catch{t=i}let l=t.replace(/\0/g,"").replace(/[\x00-\x1f\x7f]/g,"").replace(/\\/g,"/").split("/"),n=[];for(let f of l)if(f==="..")n.pop();else if(f!=="."&&f!=="")n.push(f);return n.join("/")}function jw(i,t){let u=ZE(t);if(!u)throw Error("Key is empty after sanitization");return`${i}/${u}`}function dPt(i,t){if(!t)return`${i}/`;let u=ZE(t);return`${i}/${u}${u.endsWith("/")?"":"/"}`}function oG(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function CAi(i,t){let u=`${i}/`;if(t.startsWith(u))return t.slice(u.length);return t}function Hc(i){let t=xwl(i).toLowerCase();return Dwl[t]??"application/octet-stream"}function Gui(i){let t=i.split(";")[0].trim();if(ywl.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var Dwl,ywl;var BE=w(()=>{Dwl={".json":"application/json",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".mjs":"application/javascript",".ts":"text/typescript",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".xml":"application/xml",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".wasm":"application/wasm",".yaml":"application/yaml",".yml":"application/yaml",".toml":"application/toml"};ywl=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});class MAi{client;bucket;constructor(i){this.bucket=i.bucket,this.client=new bc({endpoint:i.endpoint,region:i.region,credentials:{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey},forcePathStyle:i.forcePathStyle})}async getBytesOrPresign(i,t,u){let l=jw(i,t),n=await this.client.send(new m6({Bucket:this.bucket,Key:l})),f=n.ContentLength??0,c=n.ContentType??Hc(t);if(f>u.presignWhenLargerThan){let g=await Aui(this.client,new Vr({Bucket:this.bucket,Key:l}),{expiresIn:u.presignExpiresIn??3600});return{error:"FILE_TOO_LARGE",size:f,maxInlineSize:u.presignWhenLargerThan,presignedUrl:g,contentType:c}}let d=await(await this.client.send(new Vr({Bucket:this.bucket,Key:l}))).Body.transformToByteArray(),_=Gui(c);return{content:_?new TextDecoder().decode(d):Buffer.from(d).toString("base64"),contentType:c,encoding:_?"utf-8":"base64",size:f,lastModified:n.LastModified,etag:n.ETag}}async getBytes(i,t){let u=jw(i,t);return(await this.client.send(new Vr({Bucket:this.bucket,Key:u}))).Body.transformToByteArray()}async put(i,t,u,l){let n=jw(i,t),f=l?.contentType??Hc(t);return{etag:(await this.client.send(new IE({Bucket:this.bucket,Key:n,Body:typeof u==="string"?Buffer.from(u,"utf-8"):u,ContentType:f}))).ETag,key:t}}async list(i,t){let u=dPt(i,t?.prefix),l=await this.client.send(new Wg({Bucket:this.bucket,Prefix:u,MaxKeys:t?.maxKeys??1000,ContinuationToken:t?.continuationToken,Delimiter:t?.delimiter})),n=l.CommonPrefixes?.map((f)=>CAi(i,f.Prefix??"")).filter(Boolean);return{objects:(l.Contents??[]).map((f)=>({key:CAi(i,f.Key??""),size:f.Size??0,lastModified:f.LastModified,etag:f.ETag})),isTruncated:l.IsTruncated??!1,nextContinuationToken:l.NextContinuationToken,commonPrefixes:n&&n.length>0?n:void 0}}async delete(i,t){let u=jw(i,t);await this.client.send(new zG({Bucket:this.bucket,Key:u}))}async head(i,t){let u=jw(i,t),l=await this.client.send(new m6({Bucket:this.bucket,Key:u}));return{contentType:l.ContentType??Hc(t),size:l.ContentLength??0,lastModified:l.LastModified,etag:l.ETag}}async presignedGetUrl(i,t,u=3600,l){let n=jw(i,t);return Aui(this.client,new Vr({Bucket:this.bucket,Key:n}),{expiresIn:u})}async presignedPutUrl(i,t,u=3600,l){let n=jw(i,t);return Aui(this.client,new IE({Bucket:this.bucket,Key:n,ContentType:l}),{expiresIn:u})}}var _Pt=w(()=>{CG();$Pt();BE()});function Owl(){let i=Qt();return!!(i.s3Endpoint&&i.s3Bucket&&i.s3AccessKeyId&&i.s3SecretAccessKey)}function U_(){if(PH!==void 0)return PH;if(!Owl())return PH=null,null;let i=Qt();return PH=new MAi({endpoint:i.s3Endpoint,bucket:i.s3Bucket,region:i.s3Region,accessKeyId:i.s3AccessKeyId,secretAccessKey:i.s3SecretAccessKey,forcePathStyle:i.s3ForcePathStyle}),PH}var PH;var F8=w(()=>{U0();_Pt()});function p6(i,t){return{getBytesOrPresign:(u,l)=>i.getBytesOrPresign(t,u,l),getBytes:(u)=>i.getBytes(t,u),put:(u,l,n)=>i.put(t,u,l,n),list:(u)=>i.list(t,u),delete:(u)=>i.delete(t,u),head:(u)=>i.head(t,u),presignedGetUrl:(u,l,n)=>i.presignedGetUrl(t,u,l,n),presignedPutUrl:(u,l,n)=>i.presignedPutUrl(t,u,l,n)}}import{createHash as Xwl}from"crypto";function Wui(i){let t=i;while(t?.[AH])t=t[AH];return t}function jui(i){let{objectStorage:t,baseUrl:u,orgSlug:l,prefix:n="connection-icons",maxBytes:f=Jwl,dryRun:c=!1}=i;return async($)=>{if(typeof $!=="string")return $;let d=$.match(Nwl);if(!d)return $;if(!t||!l)return $;let[,_,g]=d,h=_.toLowerCase(),E=Twl[h];if(!E)return $;if(Math.floor(g.length*3/4)>f)return console.warn(`[asset-hoister] asset exceeds ${f} bytes, keeping inline`),$;let v=Buffer.from(g,"base64"),r=Xwl("sha256").update(v).digest("hex"),x=`${n}/${r}.${E}`;if(c)return oG(u,l,x);try{return await t.put(x,v,{contentType:h}),oG(u,l,x)}catch(y){return console.error("[asset-hoister] upload failed, keeping inline asset:",y),$}}}async function sG(i,t,u=0){if(u>Uwl)return i;if(typeof i==="string")return await t(i)??i;if(Array.isArray(i)){let l=await Promise.all(i.map((n)=>sG(n,t,u+1)));return l.some((n,f)=>n!==i[f])?l:i}if(i!==null&&typeof i==="object"){let l=Object.entries(i),n=await Promise.all(l.map(([,$])=>sG($,t,u+1))),f=!1,c={};return l.forEach(([$,d],_)=>{if(c[$]=n[_],n[_]!==d)f=!0}),f?c:i}return i}function Sui(i,t){return sG(i,t)}async function kui(i,t){let u={...i};if(typeof u.icon==="string")u.icon=await t(u.icon);if(u.metadata!==null&&typeof u.metadata==="object")u.metadata=await sG(u.metadata,t);return u}function Fwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="create")return async(c)=>u.create(await kui(c,t));if(l==="update")return async(c,$)=>u.update(c,await kui($,t));let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}function Iwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="create")return async(c,$,d,_)=>u.create(c,$,await kui(d,t),_);if(l==="update")return async(c,$,d)=>u.update(c,$,await kui(d,t));let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}async function Zwl(i,t){let u=await sG(i.parts,t),l=await sG(i.metadata,t);if(u===i.parts&&l===i.metadata)return i;return{...i,parts:u,metadata:l}}function Bwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="saveMessages")return async(c)=>{let $=await Promise.all(c.map((d)=>Zwl(d,t)));return u.saveMessages($)};let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}function Qwl(i,t){return Bwl(Wui(i),jui({...t,prefix:"thread-assets"}))}function VAi(i,t){let u=jui(t);if(qAi(i.connections))i.connections=Fwl(Wui(i.connections),u);if(qAi(i.virtualMcps))i.virtualMcps=Iwl(Wui(i.virtualMcps),u);if(qAi(i.threads))i.threads=Qwl(Wui(i.threads),t)}function qAi(i){return i!==null&&typeof i==="object"}var Nwl,Jwl=5242880,Uwl=64,AH,Twl;var aAi=w(()=>{BE();Nwl=/^data:((?:image|audio|video)\/[^;,]+)(?:;[^,]+)?;base64,(.+)$/is,AH=Symbol("assetHoistingTarget"),Twl={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/x-icon":"ico","image/vnd.microsoft.icon":"ico","audio/mpeg":"mp3","audio/mp4":"m4a","audio/wav":"wav","audio/x-wav":"wav","audio/ogg":"ogg","audio/webm":"weba","audio/aac":"aac","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogv","video/quicktime":"mov"}});function o4(){let i=Qt();if(i.baseUrl)return i.baseUrl;return`http://localhost:${i.port??3000}`}function zui(){return`http://localhost:${Qt().port??3000}`}function QE(){return process.env.MESH_PUBLIC_URL??o4()}var T_=w(()=>{U0()});var gPt={};Gi(gPt,{backfillThreadAssetsCommand:()=>Ywl});import{sql as mAi}from"kysely";async function Ywl(i){let{dryRun:t,batch:u}=i,l=i.baseUrl??o4(),n=U_();if(!n)return console.error("[backfill-assets] Object storage (S3) is not configured \u2014 cannot hoist "+"inline media. Set S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY and retry."),1;if(/^https?:\/\/localhost(:|\/|$)/.test(l))console.warn(`[backfill-assets] base URL resolves to "${l}" \u2014 set BASE_URL `+"(or pass --base-url) to the public origin, or stored media URLs will be wrong.");let f=R0(),{db:c}=f,$;if(i.org){let r=await c.selectFrom("organization").select(["id","slug"]).where((x)=>x.or([x("id","=",i.org),x("slug","=",i.org)])).executeTakeFirst();if(!r)return console.error(`[backfill-assets] org "${i.org}" not found (slug or id).`),await kw(f).catch(()=>{}),1;$=r.id,console.log(`[backfill-assets] scoped to org ${r.slug??r.id} (${r.id})`)}console.log(`[backfill-assets] starting${t?" (dry-run)":""} \u2014 target=${i.target} baseUrl=${l} batch=${u}${i.limit?` limit=${i.limit}`:""}`);let d=new Map,_=(r,x,y)=>{let O=`${y}\x00${r}`,X=d.get(O);if(X)return X;let N=jui({objectStorage:p6(n,r),baseUrl:l,orgSlug:x??void 0,prefix:y,dryRun:t});return d.set(O,N),N},g=async(r,x,y,O)=>{let X="";for(;;){let N=i.limit?i.limit-y.scanned:1/0;if(N<=0)break;let U=await r(X,Math.min(u,N));if(U.length===0)break;for(let J of U)X=J.id,y.scanned++,await x(J);console.log(`[backfill-assets] ${O}: scanned=${y.scanned} ${t?"would-change":"changed"}=${y.changed} errors=${y.errors} cursor=${X}`)}},h={scanned:0,changed:0,errors:0},E={scanned:0,changed:0,errors:0};try{if(i.target==="all"||i.target==="threads")await g((r,x)=>c.selectFrom("thread_messages as tm").innerJoin("threads as t","t.id","tm.thread_id").innerJoin("organization as o","o.id","t.organization_id").select(["tm.id as id",mAi`tm.parts`.as("parts"),mAi`tm.metadata`.as("metadata"),"t.organization_id as orgId","o.slug as orgSlug"]).where("tm.id",">",r).$if(!!$,(y)=>y.where("t.organization_id","=",$)).orderBy("tm.id","asc").limit(x).execute(),async(r)=>{try{if(!bui(r.parts)&&!bui(r.metadata))return;let x=_(r.orgId,r.orgSlug,"thread-assets"),y=JSON.parse(r.parts),O=await Sui(y,x),X=O!==y,N=r.metadata!==null?JSON.parse(r.metadata):null,U=await Sui(N,x),J=U!==N;if(!X&&!J)return;if(h.changed++,t)return;await c.updateTable("thread_messages").set({parts:X?JSON.stringify(O):r.parts,metadata:J?JSON.stringify(U):r.metadata}).where("id","=",r.id).execute()}catch(x){h.errors++,console.error(`[backfill-assets] thread_message ${r.id} failed, skipping:`,x)}},h,"threads");if(i.target==="all"||i.target==="connections")await g((r,x)=>c.selectFrom("connections as c").innerJoin("organization as o","o.id","c.organization_id").select(["c.id as id","c.icon as icon",mAi`c.metadata`.as("metadata"),"c.organization_id as orgId","o.slug as orgSlug"]).where("c.id",">",r).$if(!!$,(y)=>y.where("c.organization_id","=",$)).orderBy("c.id","asc").limit(x).execute(),async(r)=>{try{if(!bui(r.icon)&&!bui(r.metadata))return;let x=_(r.orgId,r.orgSlug,"connection-icons"),y=r.icon!==null?await x(r.icon):r.icon,O=y!==r.icon,X=r.metadata!==null?JSON.parse(r.metadata):null,N=await Sui(X,x),U=N!==X;if(!O&&!U)return;if(E.changed++,t)return;await c.updateTable("connections").set({icon:O?y??null:r.icon,metadata:U?JSON.stringify(N):r.metadata}).where("id","=",r.id).execute()}catch(x){E.errors++,console.error(`[backfill-assets] connection ${r.id} failed, skipping:`,x)}},E,"connections")}finally{await kw(f).catch(()=>{})}let v=t?"would-change":"changed";return console.log("[backfill-assets] done \u2014 "+`threads(scanned=${h.scanned} ${v}=${h.changed} errors=${h.errors}) connections(scanned=${E.scanned} ${v}=${E.changed} errors=${E.errors})`),h.errors+E.errors>0?1:0}var bui=(i)=>i!==null&&(i.includes("data:image/")||i.includes("data:audio/")||i.includes("data:video/"));var hPt=w(()=>{Nd();F8();aAi();T_()});async function EPt(i){let t,u,l=new Promise((c,$)=>{t=c,u=$});l.catch(()=>{});let n=!1,f=Bun.serve({port:i.port??0,hostname:"127.0.0.1",fetch(c){if(n)return new Response("",{status:204});let $=new URL(c.url),d=$.searchParams.get("code");if($.searchParams.get("state")!==i.expectedState)return n=!0,u(Error("OAuth state mismatch")),new Response("State mismatch \u2014 close this tab.",{status:400});if(!d)return n=!0,u(Error("OAuth callback missing code")),new Response("Missing code \u2014 close this tab.",{status:400});return n=!0,t({code:d}),new Response(null,{status:302,headers:{location:i.successRedirectUrl}})}});return{url:`http://127.0.0.1:${f.port}`,waitForCallback:()=>l,close:()=>f.stop(!0)}}import{createHash as Pwl,randomBytes as Awl}from"crypto";function rPt(){let i=vPt(Awl(32)),t=vPt(Pwl("sha256").update(i).digest());return{verifier:i,challenge:t}}function vPt(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var wPt=()=>{};import{chmod as Gwl,mkdir as Wwl,readdir as kwl,readFile as jwl,rename as Swl,rm as xPt,writeFile as zwl}from"fs/promises";import{dirname as bwl,join as sAi}from"path";function Kui(i,t){if(!t)return sAi(i,"session.json");return sAi(i,`session.${Kwl(t)}.json`)}function Kwl(i){let t=i;try{t=new URL(i).host}catch{}return t.replace(/[^a-zA-Z0-9.-]/g,"_")||"default"}async function oAi(i){try{let t=await jwl(i,"utf8"),u=JSON.parse(t);if(!Hwl(u))return null;return u}catch{return null}}async function DPt(i){try{return(await kwl(i)).filter((u)=>/^session(\..+)?\.json$/.test(u)).map((u)=>sAi(i,u))}catch{return[]}}async function Hui(i,t){let u=await oAi(Kui(i,t));if(u)return u;if(t)return oAi(Kui(i));for(let l of await DPt(i)){let n=await oAi(l);if(n)return n}return null}async function pG(i,t){let u=Kui(i,t.target);await Wwl(bwl(u),{recursive:!0});let l=`${u}.tmp`;await zwl(l,JSON.stringify(t,null,2),{mode:384}),await Gwl(l,384),await Swl(l,u)}async function yPt(i,t){if(t){await xPt(Kui(i,t),{force:!0});return}for(let u of await DPt(i))await xPt(u,{force:!0})}function Hwl(i){if(!i||typeof i!=="object")return!1;let t=i;if(typeof t.target!=="string"||typeof t.clientId!=="string"||typeof t.accessToken!=="string"||typeof t.createdAt!=="string")return!1;if(!t.user||typeof t.user!=="object")return!1;if(typeof t.user.sub!=="string")return!1;return!0}var GH=()=>{};var OPt={};Gi(OPt,{performInteractiveLogin:()=>Rui,loginCommand:()=>Mwl});import{spawn as Rwl}from"child_process";import{randomUUID as Lwl}from"crypto";async function Rui(i={}){let t=(i.target??ewl).replace(/\/$/,""),u=i.fetch??fetch,l=i.openBrowser??mwl,n=Lwl(),f=rPt(),c=await EPt({expectedState:n,successRedirectUrl:`${t}/cli/auth-success`});try{let $=`${c.url}/`,d=await qwl(u,t,$),_=new URLSearchParams({client_id:d,redirect_uri:$,response_type:"code",state:n,scope:Cwl,code_challenge:f.challenge,code_challenge_method:"S256"}),g=`${t}/login?${_.toString()}`;console.log(`Opening ${g} in your browser...`),await l(g);let{code:h}=await c.waitForCallback(),E=await Vwl(u,t,d,h,$,f.verifier);if(!E.id_token)throw Error("Token endpoint returned no id_token");let v=awl(E.id_token);return{target:t,clientId:d,user:{sub:v.sub,email:v.email,name:v.name},accessToken:E.access_token,refreshToken:E.refresh_token,expiresAt:E.expires_in?Math.floor(Date.now()/1000)+E.expires_in:void 0,createdAt:new Date().toISOString()}}finally{c.close()}}async function Mwl(i){try{let t=await Rui({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await pG(i.dataDir,t),console.log(`Logged in as ${t.user.email??t.user.sub}.`),0}catch(t){return console.error(`Login failed: ${t instanceof Error?t.message:String(t)}`),1}}async function qwl(i,t,u){let l=await i(`${t}/api/auth/mcp/register`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:"decocms-cli",redirect_uris:[u],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",application_type:"native"})});if(!l.ok)throw Error(`Client registration failed: HTTP ${l.status} ${await l.text().catch(()=>"")}`);let n=await l.json();if(typeof n?.client_id!=="string")throw Error("Client registration returned no client_id");return n.client_id}async function Vwl(i,t,u,l,n,f){let c=new URLSearchParams({grant_type:"authorization_code",code:l,redirect_uri:n,client_id:u,code_verifier:f}),$=await i(`${t}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:c.toString()});if(!$.ok)throw Error(`Token exchange failed: HTTP ${$.status} ${await $.text().catch(()=>"")}`);let d=await $.json();if(typeof d?.access_token!=="string")throw Error("Token endpoint returned no access_token");return d}function awl(i){let t=i.split(".");if(t.length!==3||!t[1])throw Error("id_token is not a valid JWT");let u=JSON.parse(Buffer.from(t[1],"base64url").toString("utf8"));if(typeof u.sub!=="string")throw Error("id_token has no sub claim");return{sub:u.sub,email:typeof u.email==="string"?u.email:void 0,name:typeof u.name==="string"?u.name:void 0}}async function mwl(i){let t,u;switch(process.platform){case"darwin":t="open",u=[i];break;case"win32":t="cmd",u=["/c","start","",i];break;default:t="xdg-open",u=[i];break}await new Promise((l)=>{let n=Rwl(t,u,{stdio:"ignore",detached:!0});n.on("error",()=>{console.log(`Could not open browser automatically. Please open this URL manually:
|
|
146
|
+
`;await P2l(c,d,{mode:384}),await Y2l(c,$)}}var Iui=()=>{};import{ExportResultCode as A2l}from"@opentelemetry/core";class IAi{inner;constructor(i){this.inner=new U8({...i,partitionKey:(t)=>t.organization_id})}export(i,t){let u=[];for(let l of i){if(!G2l.has(l.attributes[W0.TYPE]))continue;let n={};for(let[d,_]of Object.entries(l.attributes))if(typeof _==="string"||typeof _==="number"||typeof _==="boolean")n[d]=_;let f=l.spanContext?.spanId??crypto.randomUUID(),c=l.hrTime,$=BigInt(c[0])*1000000000n+BigInt(c[1]);u.push(hYt({id:f,timestampNano:$,attributes:n}))}this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:A2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var G2l;var EYt=w(()=>{N_();Iui();G2l=new Set([XH,qG])});import{ExportResultCode as W2l}from"@opentelemetry/core";import{AggregationTemporality as k2l,DataPointType as vYt}from"@opentelemetry/sdk-metrics";class ZAi{inner;constructor(i){this.inner=new U8({...i,partitionKey:(t)=>t.organization_id})}selectAggregationTemporality(i){return k2l.DELTA}export(i,t){let u=[];for(let l of i.scopeMetrics)for(let n of l.metrics){let{descriptor:f,dataPointType:c}=n;if(c===vYt.SUM)for(let $ of n.dataPoints){let d=$.attributes;u.push({v:1,name:f.name,type:"sum",unit:f.unit,timestamp:VG($.endTime),organization_id:String(d["organization.id"]??""),connection_id:String(d["connection.id"]??""),tool_name:String(d["tool.name"]??""),status:String(d.status??""),error_type:String(d["error.type"]??""),value:$.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(c===vYt.HISTOGRAM)for(let $ of n.dataPoints){let{attributes:d,value:_}=$;u.push({v:1,name:f.name,type:"histogram",unit:f.unit,timestamp:VG($.endTime),organization_id:String(d["organization.id"]??""),connection_id:String(d["connection.id"]??""),tool_name:String(d["tool.name"]??""),status:String(d.status??""),error_type:String(d["error.type"]??""),value:_.count,hist_count:_.count,hist_sum:_.sum??0,hist_min:_.min??0,hist_max:_.max??0,hist_boundaries:JSON.stringify(_.buckets.boundaries),hist_bucket_counts:JSON.stringify(_.buckets.counts)})}}this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:W2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var rYt=w(()=>{N_();Iui()});import{ExportResultCode as j2l}from"@opentelemetry/core";function S2l(i){let t=i.resource,u=t.attributes["service.name"]??"unknown";return{v:1,trace_id:i.spanContext().traceId,span_id:i.spanContext().spanId,parent_span_id:i.parentSpanContext?.spanId||null,name:i.name,kind:i.kind,status:i.status.code,status_message:i.status.message||null,start_time:VG(i.startTime),end_time:VG(i.endTime),duration_ms:Uui(i.endTime)-Uui(i.startTime),service_name:u,attributes:JSON.stringify(i.attributes),events:JSON.stringify(i.events),links:JSON.stringify(i.links),resource:JSON.stringify(t.attributes)}}class BAi{inner;constructor(i){this.inner=new U8(i)}export(i,t){let u=i.map(S2l);this.inner.exportRows(u).then((l)=>t(l)).catch(()=>t({code:j2l.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var wYt=w(()=>{N_();Iui()});function NH(i,t=65536){if(i.length<=t&&Buffer.byteLength(i,"utf8")<=t)return i;let u=t-z2l;if(u<=0)return"... [TRUNCATED]".slice(0,t);let l=0,n=0;for(let f of i){let c=f.charCodeAt(0)<=127?1:Buffer.byteLength(f,"utf8");if(l+c>u)break;l+=c,n+=f.length}return i.slice(0,n)+"... [TRUNCATED]"}var z2l;var QAi=w(()=>{z2l=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as b2l}from"@opentelemetry/api-logs";function DYt(i){xYt=i.getLogger(K2l,H2l)}function yYt(){return xYt}var K2l="studio.monitoring",H2l="1.0.0",xYt;var YAi=w(()=>{xYt=b2l});var NYt={};Gi(NYt,{shouldSkipStudioContext:()=>PAi,isServerPath:()=>q2l,isHealthPath:()=>JH,SYSTEM_PATHS:()=>J_});function JH(i){return i===J_.HEALTH||i===J_.HEALTH_LIVE||i===J_.HEALTH_READY}function OYt(i){return i===J_.HEALTH||i===J_.HEALTH_LIVE||i===J_.HEALTH_READY||i===J_.METRICS||i.startsWith(aG.WELL_KNOWN)}function XYt(i){return i.startsWith(aG.API)}function L2l(i){return i==="/mcp"||i.startsWith(aG.MCP)}function e2l(i){return i.startsWith(aG.OAUTH_PROXY)}function C2l(i){return R2l.test(i)}function M2l(i){return i.startsWith(aG.ORG)}function q2l(i){return XYt(i)||L2l(i)||e2l(i)||M2l(i)||OYt(i)}function PAi(i){return i==="/"||i.startsWith(aG.API_AUTH)||i==="/api/trigger-callback"||OYt(i)||!XYt(i)&&C2l(i)}var J_,aG,R2l;var Zui=w(()=>{J_={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics"},aG={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/"},R2l=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as AAi}from"@opentelemetry/api";var GAi=async(i,t)=>{if(JH(i.req.path))return t();let u=i.req.raw,l=new URL(u.url),n=TYt(u),f=WAi(u),c={"http.request.url":u.url,"http.request.method":u.method,"http.request.body.size":u.headers.get("content-length")??void 0,"url.scheme":l.protocol.replace(":",""),"server.address":l.host,"url.query":l.search||void 0,"url.path":l.pathname,"user_agent.original":u.headers.get("user-agent")??void 0,"request.internal":u.headers.has("traceparent"),...f?{"trace.debug.id":f}:{}};await Aw.startActiveSpan(`${u.method} ${l.pathname}`,{attributes:c},n,async($)=>{i.set("rootSpan",$);try{await t()}catch(d){$.recordException(d),$.setStatus({code:AAi.ERROR});let _=typeof d==="object"&&d&&"message"in d?String(d.message):JSON.stringify(d);throw console.error("error: ",_,c),d}finally{let d=i.res?.status??500,_=d>=500;$.setStatus({code:_?AAi.ERROR:AAi.OK}),$.setAttribute("http.response.status_code",d);let g=i.get("meshContext");if(g){if(g.auth.user?.id)$.setAttribute("studio.user.id",g.auth.user.id);if(g.auth.apiKey?.id)$.setAttribute("studio.api_key.id",g.auth.apiKey.id);if(g.organization?.id)$.setAttribute("studio.organization.id",g.organization.id)}if(f)UYt(i.res.headers,f);$.end()}})};var JYt=w(()=>{yc();Zui()});import{createContextKey as V2l,metrics as PYt,propagation as a2l,ROOT_CONTEXT as m2l,SpanStatusCode as FYt,trace as jAi}from"@opentelemetry/api";import{logs as AYt,SeverityNumber as BH}from"@opentelemetry/api-logs";import{OTLPLogExporter as IYt}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as o2l}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as s2l}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as p2l}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as kAi,LoggerProvider as ZYt}from"@opentelemetry/sdk-logs";import{detectResources as iwl,envDetector as twl,hostDetector as uwl,osDetector as lwl,processDetector as nwl,resourceFromAttributes as BYt}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as fwl}from"@opentelemetry/sdk-metrics";import{NodeSDK as cwl}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as QYt,SamplingDecision as mG}from"@opentelemetry/sdk-trace-base";class WYt{inner;ratio;constructor(i,t){this.inner=i;this.ratio=t}onEmit(i,t){if(i.severityNumber!==void 0&&i.severityNumber>=BH.ERROR||Math.random()<this.ratio)this.inner.onEmit(i,t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class kYt{inner;maxBytes;constructor(i,t){this.inner=i;this.maxBytes=t}onEmit(i,t){let u=W0.OUTPUT,l=i.attributes?.[u];if(typeof l==="string"&&l.length>this.maxBytes){let n=NH(l,this.maxBytes);this.inner.onEmit({...i,attributes:{...i.attributes,[u]:n}},t)}else this.inner.onEmit(i,t)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class jYt{inner;constructor(i){this.inner=i}shouldSample(i,t,u,l,n,f){let c=i.getValue(GYt);if(!c){if(this.inner)return this.inner.shouldSample(i,t,u,l,n,f);return{decision:mG.RECORD_AND_SAMPLED}}let $=WAi(c);if($)return{decision:mG.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":$}};if(this.inner){let d=this.inner.shouldSample(i,t,u,l,n,f);if(d.decision===mG.RECORD_AND_SAMPLED){let _=crypto.randomUUID();d.attributes={...d.attributes??{},"trace.debug.id":_}}return d}return{decision:mG.NOT_RECORD}}toString(){return"DebugSampler"}}class SYt{ratio;constructor(i){this.ratio=i}shouldSample(){if(Math.random()<this.ratio)return{decision:mG.RECORD_AND_SAMPLED};return{decision:mG.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function zYt(){if(YYt)return;let i=Qt(),t=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,u=t?new s2l:void 0;UH=i.nodeEnv==="test"?null:new IAi({basePath:s6()}),TH=i.nodeEnv==="test"?null:new BAi({basePath:MG()}),FH=i.nodeEnv==="test"?null:new ZAi({basePath:ar()}),IH=FH?new fwl({exporter:FH,exportIntervalMillis:60000}):null;let l=process.env.STUDIO_ENV??"production"??"unknown",n={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))n["deployment.environment"]=l;new cwl({serviceName:i.otelServiceName,resource:BYt(n),metricReaders:[SAi,...IH?[IH]:[]],sampler:_wl,spanProcessors:[...u?[new QYt(u,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...TH?[new QYt(TH,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[]],instrumentations:[new p2l]}).start(),ef=PYt.getMeter("studio","1.0.0"),Aw=jAi.getTracer("studio","1.0.0");let c=iwl({detectors:[twl,uwl,lwl,nwl]}).merge(BYt({"service.name":i.otelServiceName,...n})),$=[];if(t){let h=l==="prod"||l==="production"?1:0.1,E=process.env.INFRA_LOG_SAMPLE_RATIO,v=h;if(E!==void 0){let r=Number(E);if(Number.isFinite(r)&&r>=0&&r<=1)v=r;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${E}" (expected 0..1); using ${h}`)}$.push(new WYt(new kAi(new IYt),v))}ZH=new ZYt({resource:c,processors:$}),AYt.setGlobalLoggerProvider(ZH),bYt=ZH.getLogger("studio","1.0.0");let d=i.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,_=[];if(d){let g=d.replace(/\/$/,""),h=g.endsWith("/v1/logs")?g:`${g}/v1/logs`;_.push(new kYt(new kAi(new IYt({url:h})),8000))}if(UH)_.push(new kAi(UH,{scheduledDelayMillis:60000,maxExportBatchSize:1000}));Bui=new ZYt({resource:c,processors:_}),DYt(Bui),_Yt(),YYt=!0}async function jg(){let t=(await Promise.allSettled([ZH?ZH.forceFlush():Promise.resolve(),(async()=>{if(Bui)await Bui.forceFlush();if(UH)await UH.forceFlush()})(),(async()=>{let u=jAi.getTracerProvider();if("forceFlush"in u)await u.forceFlush();if(TH)await TH.forceFlush()})(),(async()=>{if(IH)await IH.forceFlush();if(FH)await FH.forceFlush()})()])).find((u)=>u.status==="rejected");if(t)throw t.reason}function KAi(i,t,u){return Aw.startActiveSpan(i,{attributes:u},async(l)=>{try{let n=await t(l);return l.setStatus({code:FYt.OK}),n}catch(n){let f=n instanceof Error?n:Error(String(n??"unknown"));throw l.setStatus({code:FYt.ERROR,message:f.message}),l.recordException(f),n}finally{l.end()}})}var $wl="__d",GYt,dwl=1,WAi=(i)=>{let u=new URL(i.url).searchParams.get($wl);if(u==="")return crypto.randomUUID();if(!u)u=i.headers.get("x-trace-debug-id");return u},UYt=(i,t)=>{try{i.set("x-trace-debug-id",t)}catch{}},SAi,_wl,UH=null,TH=null,FH=null,IH=null,ZH=null,Bui=null,YYt=!1,Aw,ef,bYt,zAi=(i,t,u)=>{let l={},n=u,f=u[u.length-1];if(f!==null&&typeof f==="object"&&!Array.isArray(f)&&!(f instanceof Error)&&Object.getPrototypeOf(f)===Object.prototype)l=f,n=u.slice(0,-1);let c=n.map(($)=>{if($ instanceof Error)return`${$.name}: ${$.message}`;if(typeof $==="object")try{return JSON.stringify($)}catch{return"[Object]"}return String($)}).join(" ");bYt.emit({severityNumber:i,severityText:t,body:c,attributes:{"log.source":"console",...l}})},bAi,TYt=(i)=>{return a2l.extract(m2l,i.headers,{get:(u,l)=>u.get(l)??void 0,keys:(u)=>[...u.keys()]}).setValue(GYt,i)};var yc=w(()=>{gYt();EYt();rYt();wYt();N_();QAi();U0();YAi();JYt();GYt=V2l("Current request");SAi=new o2l({preventServerStart:!0}),_wl=new jYt(new SYt(dwl));Aw=jAi.getTracer("studio","1.0.0"),ef=PYt.getMeter("studio","1.0.0"),bYt=AYt.getLogger("studio","1.0.0"),bAi={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...i)=>{zAi(BH.ERROR,"ERROR",i),bAi.error(...i)};console.warn=(...i)=>{zAi(BH.WARN,"WARN",i),bAi.warn(...i)};console.debug=(...i)=>{zAi(BH.DEBUG,"DEBUG",i),bAi.debug(...i)}});function T8(){try{return process.memoryUsage()}catch{return null}}function HYt(){if(HAi)return;let i=performance.now()+RAi;HAi=setInterval(()=>{let t=performance.now();KYt=Math.max(0,t-i),i=t+RAi},RAi),HAi.unref?.()}function RYt(){return HYt(),KYt}function LYt(){if(HYt(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let i=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),t=Number(process.env.EVENT_LOOP_SPIKE_MS??100),u=ef.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),l=performance.now()+i;return Qui=setInterval(()=>{let n=performance.now(),f=Math.max(0,n-l);if(l=n+i,u.record(f),f>t){let c=T8();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(f),rss:c?.rss,heapUsed:c?.heapUsed,heapTotal:c?.heapTotal,external:c?.external}))}},i),Qui.unref?.(),()=>{if(Qui)clearInterval(Qui)}}var Qui,HAi,KYt=0,RAi=500;var LAi=w(()=>{yc()});var oYt={};Gi(oYt,{getDbDialect:()=>YH,getDb:()=>R0,getDatabaseUrl:()=>Ww,createDatabase:()=>mYt,closeDatabase:()=>kw});import{Kysely as gwl,PostgresDialect as MYt}from"kysely";import{Pool as qYt}from"pg";function rwl(i){let t=i.connect.bind(i);return i.connect=(u)=>{if(typeof u==="function")return t(u);let l=performance.now(),n=Yui(),f=i.idleCount===0&&i.totalCount>=n,c=i.idleCount;return t().then(($)=>{let d=performance.now()-l;if(eYt().record(d,{"db.pool.outcome":f?"contended":"available"}),d>Ewl)if(f)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:d,total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:n});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:d,idleAtStart:c,total:i.totalCount,max:n});return $},($)=>{throw eYt().record(performance.now()-l,{"db.pool.outcome":"error"}),$})},i}function aYt(){try{return Qt().databasePgSsl}catch{return!1}}function Yui(){try{return Qt().databasePoolMax}catch{return 10}}function wwl(i){let t=rwl(new qYt({connectionString:i,max:Yui(),ssl:aYt(),...VYt})),u=new MYt({pool:t});return{type:"postgres",db:new gwl({dialect:u,log:vwl(t)}),pool:t}}function Ww(){return Qt().databaseUrl}function YH(i){let t=i||Ww();return new MYt({pool:new qYt({connectionString:t,max:Yui(),ssl:aYt(),...VYt})})}function mYt(i){let t=i||Ww();return wwl(t)}async function kw(i){if(await i.db.destroy(),!i.pool.ended)await i.pool.end();if(i===QH)QH=null}function R0(){if(!QH)QH=mYt(Ww());return QH}var hwl=()=>ef.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),eYt=()=>ef.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),CYt=400,Ewl=100,vwl=(i)=>(t)=>{let u={"db.statement":t.query.sql,"db.status":t.level==="error"?"error":"success"};if(t.queryDurationMillis>CYt){let l=RYt(),n=l>CYt/2;console.error(n?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:t.queryDurationMillis,eventLoopLagMs:Math.round(l),sql:t.query.sql,pool:{total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:Yui()}})}if(hwl().record(t.queryDurationMillis,u),t.level==="error")console.error("Query failed:",{durationMs:t.queryDurationMillis,error:t.error,sql:t.query.sql})},VYt,QH=null;var Nd=w(()=>{U0();yc();LAi();VYt={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});function pYt(i){let{port:t,query:u}=i,{protocol:l,path:n,hostname:f}=i;if(l&&l.slice(-1)!==":")l+=":";if(t)f+=`:${t}`;if(n&&n.charAt(0)!=="/")n=`/${n}`;let c=u?sYt.buildQueryString(u):"";if(c&&c[0]!=="?")c=`?${c}`;let $="";if(i.username!=null||i.password!=null){let _=i.username??"",g=i.password??"";$=`${_}:${g}@`}let d="";if(i.fragment)d=`#${i.fragment}`;return`${l}//${$}${f}${n}${c}${d}`}var sYt;var iPt=w(()=>{sYt=z(yo(),1)});var tPt="UNSIGNED-PAYLOAD",uPt="X-Amz-Content-Sha256";class Pui{signer;constructor(i){let t={service:i.signingName||i.service||"s3",uriEscapePath:i.uriEscapePath||!1,applyChecksum:i.applyChecksum||!1,...i};this.signer=new lPt.SignatureV4MultiRegion(t)}presign(i,{unsignableHeaders:t=new Set,hoistableHeaders:u=new Set,unhoistableHeaders:l=new Set,...n}={}){return this.prepareRequest(i,{unsignableHeaders:t,unhoistableHeaders:l,hoistableHeaders:u}),this.signer.presign(i,{expiresIn:900,unsignableHeaders:t,unhoistableHeaders:l,...n})}presignWithCredentials(i,t,{unsignableHeaders:u=new Set,hoistableHeaders:l=new Set,unhoistableHeaders:n=new Set,...f}={}){return this.prepareRequest(i,{unsignableHeaders:u,unhoistableHeaders:n,hoistableHeaders:l}),this.signer.presignWithCredentials(i,t,{expiresIn:900,unsignableHeaders:u,unhoistableHeaders:n,...f})}prepareRequest(i,{unsignableHeaders:t=new Set,unhoistableHeaders:u=new Set,hoistableHeaders:l=new Set}={}){t.add("content-type"),Object.keys(i.headers).map(($)=>$.toLowerCase()).filter(($)=>$.startsWith("x-amz-server-side-encryption")).forEach(($)=>{if(!l.has($))u.add($)}),i.headers[uPt]=tPt;let n=i.headers.host,f=i.port,c=`${i.hostname}${i.port!=null?":"+f:""}`;if(!n||n===i.hostname&&i.port!=null)i.headers.host=c}}var lPt;var eAi=w(()=>{lPt=z(EG(),1)});var nPt,fPt,Aui=async(i,t,u={})=>{let l,n;if(typeof i.config.endpointProvider==="function"){let E=(await nPt.getEndpointFromInstructions(t.input,t.constructor,i.config)).properties?.authSchemes?.[0];if(E?.name==="sigv4a")n=E?.signingRegionSet?.join(",");else n=E?.signingRegion;l=new Pui({...i.config,signingName:E?.signingName,region:async()=>n})}else l=new Pui(i.config);let f=(h,E)=>async(v)=>{let{request:r}=v;if(!fPt.HttpRequest.isInstance(r))throw Error("Request to be presigned is not an valid HTTP request.");delete r.headers["amz-sdk-invocation-id"],delete r.headers["amz-sdk-request"],delete r.headers["x-amz-user-agent"];let x,y={...u,signingRegion:u.signingRegion??E.signing_region??n,signingService:u.signingService??E.signing_service};if(E.s3ExpressIdentity)x=await l.presignWithCredentials(r,E.s3ExpressIdentity,y);else x=await l.presign(r,y);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:x}}},c="presignInterceptMiddleware",$=i.middlewareStack.clone();$.addRelativeTo(f,{name:c,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let d=t.resolveMiddleware($,i.config,{}),{output:_}=await d({input:t.input}),{presigned:g}=_;return pYt(g)};var cPt=w(()=>{iPt();eAi();nPt=z(ft(),1),fPt=z(Ef(),1)});var $Pt=w(()=>{cPt();eAi()});import{extname as xwl}from"path";function ZE(i){let t;try{t=decodeURIComponent(i)}catch{t=i}let l=t.replace(/\0/g,"").replace(/[\x00-\x1f\x7f]/g,"").replace(/\\/g,"/").split("/"),n=[];for(let f of l)if(f==="..")n.pop();else if(f!=="."&&f!=="")n.push(f);return n.join("/")}function jw(i,t){let u=ZE(t);if(!u)throw Error("Key is empty after sanitization");return`${i}/${u}`}function dPt(i,t){if(!t)return`${i}/`;let u=ZE(t);return`${i}/${u}${u.endsWith("/")?"":"/"}`}function oG(i,t,u){let l=u.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(t)}/files/${l}`}function CAi(i,t){let u=`${i}/`;if(t.startsWith(u))return t.slice(u.length);return t}function Hc(i){let t=xwl(i).toLowerCase();return Dwl[t]??"application/octet-stream"}function Gui(i){let t=i.split(";")[0].trim();if(ywl.has(t))return!0;if(t.startsWith("text/"))return!0;return!1}var Dwl,ywl;var BE=w(()=>{Dwl={".json":"application/json",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".mjs":"application/javascript",".ts":"text/typescript",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".xml":"application/xml",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".wasm":"application/wasm",".yaml":"application/yaml",".yml":"application/yaml",".toml":"application/toml"};ywl=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});class MAi{client;bucket;constructor(i){this.bucket=i.bucket,this.client=new bc({endpoint:i.endpoint,region:i.region,credentials:{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey},forcePathStyle:i.forcePathStyle})}async getBytesOrPresign(i,t,u){let l=jw(i,t),n=await this.client.send(new m6({Bucket:this.bucket,Key:l})),f=n.ContentLength??0,c=n.ContentType??Hc(t);if(f>u.presignWhenLargerThan){let g=await Aui(this.client,new Vr({Bucket:this.bucket,Key:l}),{expiresIn:u.presignExpiresIn??3600});return{error:"FILE_TOO_LARGE",size:f,maxInlineSize:u.presignWhenLargerThan,presignedUrl:g,contentType:c}}let d=await(await this.client.send(new Vr({Bucket:this.bucket,Key:l}))).Body.transformToByteArray(),_=Gui(c);return{content:_?new TextDecoder().decode(d):Buffer.from(d).toString("base64"),contentType:c,encoding:_?"utf-8":"base64",size:f,lastModified:n.LastModified,etag:n.ETag}}async getBytes(i,t){let u=jw(i,t);return(await this.client.send(new Vr({Bucket:this.bucket,Key:u}))).Body.transformToByteArray()}async put(i,t,u,l){let n=jw(i,t),f=l?.contentType??Hc(t);return{etag:(await this.client.send(new IE({Bucket:this.bucket,Key:n,Body:typeof u==="string"?Buffer.from(u,"utf-8"):u,ContentType:f}))).ETag,key:t}}async list(i,t){let u=dPt(i,t?.prefix),l=await this.client.send(new Wg({Bucket:this.bucket,Prefix:u,MaxKeys:t?.maxKeys??1000,ContinuationToken:t?.continuationToken,Delimiter:t?.delimiter})),n=l.CommonPrefixes?.map((f)=>CAi(i,f.Prefix??"")).filter(Boolean);return{objects:(l.Contents??[]).map((f)=>({key:CAi(i,f.Key??""),size:f.Size??0,lastModified:f.LastModified,etag:f.ETag})),isTruncated:l.IsTruncated??!1,nextContinuationToken:l.NextContinuationToken,commonPrefixes:n&&n.length>0?n:void 0}}async delete(i,t){let u=jw(i,t);await this.client.send(new zG({Bucket:this.bucket,Key:u}))}async head(i,t){let u=jw(i,t),l=await this.client.send(new m6({Bucket:this.bucket,Key:u}));return{contentType:l.ContentType??Hc(t),size:l.ContentLength??0,lastModified:l.LastModified,etag:l.ETag}}async presignedGetUrl(i,t,u=3600,l){let n=jw(i,t);return Aui(this.client,new Vr({Bucket:this.bucket,Key:n}),{expiresIn:u})}async presignedPutUrl(i,t,u=3600,l){let n=jw(i,t);return Aui(this.client,new IE({Bucket:this.bucket,Key:n,ContentType:l}),{expiresIn:u})}}var _Pt=w(()=>{CG();$Pt();BE()});function Owl(){let i=Qt();return!!(i.s3Endpoint&&i.s3Bucket&&i.s3AccessKeyId&&i.s3SecretAccessKey)}function U_(){if(PH!==void 0)return PH;if(!Owl())return PH=null,null;let i=Qt();return PH=new MAi({endpoint:i.s3Endpoint,bucket:i.s3Bucket,region:i.s3Region,accessKeyId:i.s3AccessKeyId,secretAccessKey:i.s3SecretAccessKey,forcePathStyle:i.s3ForcePathStyle}),PH}var PH;var F8=w(()=>{U0();_Pt()});function p6(i,t){return{getBytesOrPresign:(u,l)=>i.getBytesOrPresign(t,u,l),getBytes:(u)=>i.getBytes(t,u),put:(u,l,n)=>i.put(t,u,l,n),list:(u)=>i.list(t,u),delete:(u)=>i.delete(t,u),head:(u)=>i.head(t,u),presignedGetUrl:(u,l,n)=>i.presignedGetUrl(t,u,l,n),presignedPutUrl:(u,l,n)=>i.presignedPutUrl(t,u,l,n)}}import{createHash as Xwl}from"crypto";function Wui(i){let t=i;while(t?.[AH])t=t[AH];return t}function jui(i){let{objectStorage:t,baseUrl:u,orgSlug:l,prefix:n="connection-icons",maxBytes:f=Jwl,dryRun:c=!1}=i;return async($)=>{if(typeof $!=="string")return $;let d=$.match(Nwl);if(!d)return $;if(!t||!l)return $;let[,_,g]=d,h=_.toLowerCase(),E=Twl[h];if(!E)return $;if(Math.floor(g.length*3/4)>f)return console.warn(`[asset-hoister] asset exceeds ${f} bytes, keeping inline`),$;let v=Buffer.from(g,"base64"),r=Xwl("sha256").update(v).digest("hex"),x=`${n}/${r}.${E}`;if(c)return oG(u,l,x);try{return await t.put(x,v,{contentType:h}),oG(u,l,x)}catch(y){return console.error("[asset-hoister] upload failed, keeping inline asset:",y),$}}}async function sG(i,t,u=0){if(u>Uwl)return i;if(typeof i==="string")return await t(i)??i;if(Array.isArray(i)){let l=await Promise.all(i.map((n)=>sG(n,t,u+1)));return l.some((n,f)=>n!==i[f])?l:i}if(i!==null&&typeof i==="object"){let l=Object.entries(i),n=await Promise.all(l.map(([,$])=>sG($,t,u+1))),f=!1,c={};return l.forEach(([$,d],_)=>{if(c[$]=n[_],n[_]!==d)f=!0}),f?c:i}return i}function Sui(i,t){return sG(i,t)}async function kui(i,t){let u={...i};if(typeof u.icon==="string")u.icon=await t(u.icon);if(u.metadata!==null&&typeof u.metadata==="object")u.metadata=await sG(u.metadata,t);return u}function Fwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="create")return async(c)=>u.create(await kui(c,t));if(l==="update")return async(c,$)=>u.update(c,await kui($,t));let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}function Iwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="create")return async(c,$,d,_)=>u.create(c,$,await kui(d,t),_);if(l==="update")return async(c,$,d)=>u.update(c,$,await kui(d,t));let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}async function Zwl(i,t){let u=await sG(i.parts,t),l=await sG(i.metadata,t);if(u===i.parts&&l===i.metadata)return i;return{...i,parts:u,metadata:l}}function Bwl(i,t){return new Proxy(i,{get(u,l,n){if(l===AH)return u;if(l==="saveMessages")return async(c)=>{let $=await Promise.all(c.map((d)=>Zwl(d,t)));return u.saveMessages($)};let f=Reflect.get(u,l,n);return typeof f==="function"?f.bind(u):f}})}function Qwl(i,t){return Bwl(Wui(i),jui({...t,prefix:"thread-assets"}))}function VAi(i,t){let u=jui(t);if(qAi(i.connections))i.connections=Fwl(Wui(i.connections),u);if(qAi(i.virtualMcps))i.virtualMcps=Iwl(Wui(i.virtualMcps),u);if(qAi(i.threads))i.threads=Qwl(Wui(i.threads),t)}function qAi(i){return i!==null&&typeof i==="object"}var Nwl,Jwl=5242880,Uwl=64,AH,Twl;var aAi=w(()=>{BE();Nwl=/^data:((?:image|audio|video)\/[^;,]+)(?:;[^,]+)?;base64,(.+)$/is,AH=Symbol("assetHoistingTarget"),Twl={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/x-icon":"ico","image/vnd.microsoft.icon":"ico","audio/mpeg":"mp3","audio/mp4":"m4a","audio/wav":"wav","audio/x-wav":"wav","audio/ogg":"ogg","audio/webm":"weba","audio/aac":"aac","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogv","video/quicktime":"mov"}});function o4(){let i=Qt();if(i.baseUrl)return i.baseUrl;return`http://localhost:${i.port??3000}`}function zui(){return`http://localhost:${Qt().port??3000}`}function QE(){return process.env.MESH_PUBLIC_URL??o4()}var T_=w(()=>{U0()});var gPt={};Gi(gPt,{backfillThreadAssetsCommand:()=>Ywl});import{sql as mAi}from"kysely";async function Ywl(i){let{dryRun:t,batch:u}=i,l=i.baseUrl??o4(),n=U_();if(!n)return console.error("[backfill-assets] Object storage (S3) is not configured \u2014 cannot hoist "+"inline media. Set S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY and retry."),1;if(/^https?:\/\/localhost(:|\/|$)/.test(l))console.warn(`[backfill-assets] base URL resolves to "${l}" \u2014 set BASE_URL `+"(or pass --base-url) to the public origin, or stored media URLs will be wrong.");let f=R0(),{db:c}=f,$;if(i.org){let r=await c.selectFrom("organization").select(["id","slug"]).where((x)=>x.or([x("id","=",i.org),x("slug","=",i.org)])).executeTakeFirst();if(!r)return console.error(`[backfill-assets] org "${i.org}" not found (slug or id).`),await kw(f).catch(()=>{}),1;$=r.id,console.log(`[backfill-assets] scoped to org ${r.slug??r.id} (${r.id})`)}console.log(`[backfill-assets] starting${t?" (dry-run)":""} \u2014 target=${i.target} baseUrl=${l} batch=${u}${i.limit?` limit=${i.limit}`:""}`);let d=new Map,_=(r,x,y)=>{let O=`${y}\x00${r}`,X=d.get(O);if(X)return X;let N=jui({objectStorage:p6(n,r),baseUrl:l,orgSlug:x??void 0,prefix:y,dryRun:t});return d.set(O,N),N},g=async(r,x,y,O)=>{let X="";for(;;){let N=i.limit?i.limit-y.scanned:1/0;if(N<=0)break;let U=await r(X,Math.min(u,N));if(U.length===0)break;for(let J of U)X=J.id,y.scanned++,await x(J);console.log(`[backfill-assets] ${O}: scanned=${y.scanned} ${t?"would-change":"changed"}=${y.changed} errors=${y.errors} cursor=${X}`)}},h={scanned:0,changed:0,errors:0},E={scanned:0,changed:0,errors:0};try{if(i.target==="all"||i.target==="threads")await g((r,x)=>c.selectFrom("thread_messages as tm").innerJoin("threads as t","t.id","tm.thread_id").innerJoin("organization as o","o.id","t.organization_id").select(["tm.id as id",mAi`tm.parts`.as("parts"),mAi`tm.metadata`.as("metadata"),"t.organization_id as orgId","o.slug as orgSlug"]).where("tm.id",">",r).$if(!!$,(y)=>y.where("t.organization_id","=",$)).orderBy("tm.id","asc").limit(x).execute(),async(r)=>{try{if(!bui(r.parts)&&!bui(r.metadata))return;let x=_(r.orgId,r.orgSlug,"thread-assets"),y=JSON.parse(r.parts),O=await Sui(y,x),X=O!==y,N=r.metadata!==null?JSON.parse(r.metadata):null,U=await Sui(N,x),J=U!==N;if(!X&&!J)return;if(h.changed++,t)return;await c.updateTable("thread_messages").set({parts:X?JSON.stringify(O):r.parts,metadata:J?JSON.stringify(U):r.metadata}).where("id","=",r.id).execute()}catch(x){h.errors++,console.error(`[backfill-assets] thread_message ${r.id} failed, skipping:`,x)}},h,"threads");if(i.target==="all"||i.target==="connections")await g((r,x)=>c.selectFrom("connections as c").innerJoin("organization as o","o.id","c.organization_id").select(["c.id as id","c.icon as icon",mAi`c.metadata`.as("metadata"),"c.organization_id as orgId","o.slug as orgSlug"]).where("c.id",">",r).$if(!!$,(y)=>y.where("c.organization_id","=",$)).orderBy("c.id","asc").limit(x).execute(),async(r)=>{try{if(!bui(r.icon)&&!bui(r.metadata))return;let x=_(r.orgId,r.orgSlug,"connection-icons"),y=r.icon!==null?await x(r.icon):r.icon,O=y!==r.icon,X=r.metadata!==null?JSON.parse(r.metadata):null,N=await Sui(X,x),U=N!==X;if(!O&&!U)return;if(E.changed++,t)return;await c.updateTable("connections").set({icon:O?y??null:r.icon,metadata:U?JSON.stringify(N):r.metadata}).where("id","=",r.id).execute()}catch(x){E.errors++,console.error(`[backfill-assets] connection ${r.id} failed, skipping:`,x)}},E,"connections")}finally{await kw(f).catch(()=>{})}let v=t?"would-change":"changed";return console.log("[backfill-assets] done \u2014 "+`threads(scanned=${h.scanned} ${v}=${h.changed} errors=${h.errors}) connections(scanned=${E.scanned} ${v}=${E.changed} errors=${E.errors})`),h.errors+E.errors>0?1:0}var bui=(i)=>i!==null&&(i.includes("data:image/")||i.includes("data:audio/")||i.includes("data:video/"));var hPt=w(()=>{Nd();F8();aAi();T_()});async function EPt(i){let t,u,l=new Promise((c,$)=>{t=c,u=$});l.catch(()=>{});let n=!1,f=Bun.serve({port:i.port??0,hostname:"127.0.0.1",fetch(c){if(n)return new Response("",{status:204});let $=new URL(c.url),d=$.searchParams.get("code");if($.searchParams.get("state")!==i.expectedState)return n=!0,u(Error("OAuth state mismatch")),new Response("State mismatch \u2014 close this tab.",{status:400});if(!d)return n=!0,u(Error("OAuth callback missing code")),new Response("Missing code \u2014 close this tab.",{status:400});return n=!0,t({code:d}),new Response(null,{status:302,headers:{location:i.successRedirectUrl}})}});return{url:`http://127.0.0.1:${f.port}`,waitForCallback:()=>l,close:()=>f.stop(!0)}}import{createHash as Pwl,randomBytes as Awl}from"crypto";function rPt(){let i=vPt(Awl(32)),t=vPt(Pwl("sha256").update(i).digest());return{verifier:i,challenge:t}}function vPt(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var wPt=()=>{};import{chmod as Gwl,mkdir as Wwl,readdir as kwl,readFile as jwl,rename as Swl,rm as xPt,writeFile as zwl}from"fs/promises";import{dirname as bwl,join as sAi}from"path";function Kui(i,t){if(!t)return sAi(i,"session.json");return sAi(i,`session.${Kwl(t)}.json`)}function Kwl(i){let t=i;try{t=new URL(i).host}catch{}return t.replace(/[^a-zA-Z0-9.-]/g,"_")||"default"}async function oAi(i){try{let t=await jwl(i,"utf8"),u=JSON.parse(t);if(!Hwl(u))return null;return u}catch{return null}}async function DPt(i){try{return(await kwl(i)).filter((u)=>/^session(\..+)?\.json$/.test(u)).map((u)=>sAi(i,u))}catch{return[]}}async function Hui(i,t){let u=await oAi(Kui(i,t));if(u)return u;if(t)return oAi(Kui(i));for(let l of await DPt(i)){let n=await oAi(l);if(n)return n}return null}async function pG(i,t){let u=Kui(i,t.target);await Wwl(bwl(u),{recursive:!0});let l=`${u}.tmp`;await zwl(l,JSON.stringify(t,null,2),{mode:384}),await Gwl(l,384),await Swl(l,u)}async function yPt(i,t){if(t){await xPt(Kui(i,t),{force:!0});return}for(let u of await DPt(i))await xPt(u,{force:!0})}function Hwl(i){if(!i||typeof i!=="object")return!1;let t=i;if(typeof t.target!=="string"||typeof t.clientId!=="string"||typeof t.accessToken!=="string"||typeof t.createdAt!=="string")return!1;if(!t.user||typeof t.user!=="object")return!1;if(typeof t.user.sub!=="string")return!1;return!0}var GH=()=>{};var OPt={};Gi(OPt,{performInteractiveLogin:()=>Rui,loginCommand:()=>Mwl});import{spawn as Rwl}from"child_process";import{randomUUID as Lwl}from"crypto";async function Rui(i={}){let t=(i.target??ewl).replace(/\/$/,""),u=i.fetch??fetch,l=i.openBrowser??mwl,n=Lwl(),f=rPt(),c=await EPt({expectedState:n,successRedirectUrl:`${t}/cli/auth-success`});try{let $=`${c.url}/`,d=await qwl(u,t,$),_=new URLSearchParams({client_id:d,redirect_uri:$,response_type:"code",state:n,scope:Cwl,code_challenge:f.challenge,code_challenge_method:"S256"}),g=`${t}/login?${_.toString()}`;console.log(`Opening ${g} in your browser...`),await l(g);let{code:h}=await c.waitForCallback(),E=await Vwl(u,t,d,h,$,f.verifier);if(!E.id_token)throw Error("Token endpoint returned no id_token");let v=awl(E.id_token);return{target:t,clientId:d,user:{sub:v.sub,email:v.email,name:v.name},accessToken:E.access_token,refreshToken:E.refresh_token,expiresAt:E.expires_in?Math.floor(Date.now()/1000)+E.expires_in:void 0,createdAt:new Date().toISOString()}}finally{c.close()}}async function Mwl(i){try{let t=await Rui({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await pG(i.dataDir,t),console.log(`Logged in as ${t.user.email??t.user.sub}.`),0}catch(t){return console.error(`Login failed: ${t instanceof Error?t.message:String(t)}`),1}}async function qwl(i,t,u){let l=await i(`${t}/api/auth/mcp/register`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:"decocms-cli",redirect_uris:[u],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",application_type:"native"})});if(!l.ok)throw Error(`Client registration failed: HTTP ${l.status} ${await l.text().catch(()=>"")}`);let n=await l.json();if(typeof n?.client_id!=="string")throw Error("Client registration returned no client_id");return n.client_id}async function Vwl(i,t,u,l,n,f){let c=new URLSearchParams({grant_type:"authorization_code",code:l,redirect_uri:n,client_id:u,code_verifier:f}),$=await i(`${t}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:c.toString()});if(!$.ok)throw Error(`Token exchange failed: HTTP ${$.status} ${await $.text().catch(()=>"")}`);let d=await $.json();if(typeof d?.access_token!=="string")throw Error("Token endpoint returned no access_token");return d}function awl(i){let t=i.split(".");if(t.length!==3||!t[1])throw Error("id_token is not a valid JWT");let u=JSON.parse(Buffer.from(t[1],"base64url").toString("utf8"));if(typeof u.sub!=="string")throw Error("id_token has no sub claim");return{sub:u.sub,email:typeof u.email==="string"?u.email:void 0,name:typeof u.name==="string"?u.name:void 0}}async function mwl(i){let t,u;switch(process.platform){case"darwin":t="open",u=[i];break;case"win32":t="cmd",u=["/c","start","",i];break;default:t="xdg-open",u=[i];break}await new Promise((l)=>{let n=Rwl(t,u,{stdio:"ignore",detached:!0});n.on("error",()=>{console.log(`Could not open browser automatically. Please open this URL manually:
|
|
147
147
|
${i}`),l()}),n.on("spawn",()=>{n.unref(),l()})})}var ewl="https://studio.decocms.com",Cwl="openid profile email offline_access";var pAi=w(()=>{wPt();GH()});async function XPt(i,t=fetch,u=Date.now){if(!i.refreshToken)throw new Sg("invalid_grant","Session has no refresh token");let l=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId}),n;try{n=await t(`${i.target}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:l.toString()})}catch(c){throw new Sg("transient",c instanceof Error?c.message:String(c))}if(!n.ok){let c=await n.text().catch(()=>"");if(n.status>=400&&n.status<500)throw new Sg("invalid_grant",`HTTP ${n.status} ${c}`);throw new Sg("transient",`HTTP ${n.status} ${c}`)}let f=await n.json();if(typeof f.access_token!=="string")throw new Sg("transient","Token endpoint returned no access_token");return{...i,accessToken:f.access_token,refreshToken:f.refresh_token??i.refreshToken,expiresAt:f.expires_in?Math.floor(u()/1000)+f.expires_in:i.expiresAt}}var Sg;var Lui=w(()=>{Sg=class Sg extends Error{kind;constructor(i,t){super(t);this.name="RefreshFailedError",this.kind=i}}});async function Sw(i){let t=await Hui(i.dataDir,i.target);if(!t)return null;let u=i.now??Date.now;if(!swl(t,u()))return t;try{let l=await XPt(t,i.fetch,u);return await pG(i.dataDir,l),l}catch(l){if(l instanceof Sg&&l.kind==="invalid_grant")return null;throw l}}function swl(i,t){if(i.expiresAt===void 0)return!1;let u=Math.floor(t/1000);return i.expiresAt-owl<u}var owl=60;var WH=w(()=>{Lui();GH()});var NPt={};Gi(NPt,{whoamiCommand:()=>pwl});async function pwl(i){let t;try{t=await Sw({dataDir:i.dataDir,fetch:i.fetch,now:i.now})}catch(u){if(u instanceof Sg&&u.kind==="transient")return console.error(`Could not refresh session: ${u.message}. Run \`decocms auth login\` to authenticate.`),1;throw u}if(!t)return console.error("Not logged in. Run `decocms auth login` to authenticate."),1;return console.log(`Target: ${t.target}`),console.log(`User: ${t.user.email??t.user.sub}`),0}var JPt=w(()=>{WH();Lui()});var UPt={};Gi(UPt,{logoutCommand:()=>ixl});async function ixl(i){if(!await Hui(i.dataDir))return console.log("Already logged out."),0;return await yPt(i.dataDir),console.log("Logged out."),0}var TPt=w(()=>{GH()});async function eui(i){let t=i.isInteractive??Boolean(process.stdout.isTTY),u;try{u=await Sw({dataDir:i.dataDir,target:i.target,fetch:i.fetch,now:i.now})}catch(n){if(n instanceof Sg&&n.kind==="transient")throw Error(`Could not refresh session: ${n.message}. Run \`decocms auth login\` to sign in again.`);throw n}if(u&&i.target&&t&&!txl(u.target,i.target))u=null;if(u)return u;if(!t)throw Error("No session found. Run `decocms auth login` first, then re-run the command.");console.log(`Not logged in \u2014 opening browser to sign in to ${i.intent}.`);let l=await Rui({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await pG(i.dataDir,l),console.log(`Logged in as ${l.user.email??l.user.sub}.`),l}function txl(i,t){try{return new URL(i).host===new URL(t).host}catch{return i===t}}var iGi=w(()=>{pAi();WH();Lui();GH()});function ih(i){let t=i?.userName?.trim();if(!t||FPt.test(t))return null;let u=i?.userEmail?.trim();if(!u||FPt.test(u))return{userName:t};if(!uxl.test(u))return{userName:t};return{userName:t,userEmail:u}}var FPt,uxl;var Cui=w(()=>{FPt=/[\r\n<>]/,uxl=/^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/});var kH=w(()=>{x1();Cui()});async function qui(i){try{let t=await fetch(`${i}/health`,{signal:AbortSignal.timeout(lxl)});if(!t.ok)return null;let u=await t.json();if(typeof u==="object"&&u!==null&&typeof u.bootId==="string"&&typeof u.ready==="boolean"&&u.setup&&typeof u.setup.running==="boolean"&&typeof u.setup.done==="boolean")return u;return null}catch{return null}}async function Vui(i){for(let t=0;t<IPt;t++){if(await qui(i)!==null)return;let u=(Math.random()*2-1)*nxl;await ll(ZPt+u)}throw Error(`sandbox daemon at ${i} did not respond on /health within ${IPt*ZPt/1000}s`)}async function I8(i,t,u,l,n){return fxl(i,t,"POST",u,l,n)}async function fxl(i,t,u,l,n,f){let c={...l};if(n&&n.rotateToken!==void 0)c.auth=n;let $=await fetch(`${i}/_sandbox/config`,{method:u,headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(c),signal:AbortSignal.timeout(f?.timeoutMs??BPt)}),d=await $.text();if(!$.ok)throw new Mui($.status,d);return JSON.parse(d)}async function QPt(i,t,u){let l=await fetch(`${i}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:u,signal:AbortSignal.timeout(BPt)}),n=await l.text();if(!l.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${l.status}: ${n}`);return JSON.parse(n)}async function jH(i,t,u,l){let n=new Headers(l.headers);for(let $ of cxl)n.delete($);n.set("authorization",`Bearer ${t}`);let f=l.method!=="GET"&&l.method!=="HEAD",c=`${i}${u.startsWith("/")?u:`/${u}`}`;return fetch(c,{method:l.method,headers:n,body:f?l.body:void 0,redirect:"manual",signal:l.signal,duplex:f?"half":void 0})}var Mui,lxl=500,BPt=30000,IPt=25,ZPt=200,nxl=50,cxl;var tGi=w(()=>{kH();Mui=class Mui extends Error{status;constructor(i,t){super(`sandbox daemon /_sandbox/config returned ${i}: ${t}`);this.status=i;this.name="ConfigRequestError"}};cxl=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});var PPt=`var __create = Object.create;
|
|
148
148
|
var __getProtoOf = Object.getPrototypeOf;
|
|
149
149
|
var __defProp = Object.defineProperty;
|
|
@@ -104779,7 +104779,7 @@ ${c.stack}`;f.reject(d)}else f.resolve(_)}});return $.requestSubject=i,this.prot
|
|
|
104779
104779
|
`);if(g===-1)return;let h=$.subarray(0,g).toString("utf8"),E=$.subarray(g+4),v=h.split(`\r
|
|
104780
104780
|
`,1)[0]??"";if(!/^HTTP\/1\.[01] 101(?:\s|$)/.test(v)){e8(i,1011,t.upstreamErrorReason);try{c.end()}catch{}return}d=!0,i.data.upstream=c;let r=pXl((x,y)=>{try{if(x===1)i.send(y.toString("utf8"));else if(x===2)i.send(y);else if(x===8){let{code:O,reason:X}=sXl(y);e8(i,O,X);try{c.end()}catch{}}}catch{}});if(c.removeAllListeners("data"),E.length>0)r(E);c.on("data",(x)=>r(x));for(let x of i.data.pending)try{c.write(fki(x,!0))}catch{}i.data.pending.length=0})}function oXl(i,t){let u=[`GET ${i} HTTP/1.1`];for(let[l,n]of Object.entries(t))u.push(`${l}: ${n}`);return u.push("",""),u.join(`\r
|
|
104781
104781
|
`)}function e8(i,t,u){try{if(t!==void 0)i.close(t,u??"");else i.close()}catch{}}function fki(i,t,u){let l,n;if(typeof i==="string")l=Buffer.from(i,"utf8"),n=1;else if(i instanceof ArrayBuffer)l=Buffer.from(i),n=2;else if(Buffer.isBuffer(i))l=i,n=2;else l=Buffer.from(i),n=2;let f=u??n,c=l.length,$=[];$.push(128|f&15);let d=t?128:0;if(c<126)$.push(d|c);else if(c<65536)$.push(d|126,c>>8&255,c&255);else $.push(d|127,0,0,0,0),$.push(c>>>24&255,c>>>16&255,c>>>8&255,c&255);if(t){let _=$St(4),g=Buffer.alloc(c);for(let h=0;h<c;h++)g[h]=l[h]^_[h&3];return Buffer.concat([Buffer.from($),_,g])}return Buffer.concat([Buffer.from($),l])}function sXl(i){if(i.length<2)return{code:1000,reason:""};return{code:i.readUInt16BE(0),reason:i.subarray(2).toString("utf8")}}function pXl(i){let t=Buffer.alloc(0);return(u)=>{t=t.length===0?u:Buffer.concat([t,u]);while(!0){if(t.length<2)return;let l=t[0],n=t[1],f=l&15,c=(n&128)!==0,$=n&127,d=2;if($===126){if(t.length<d+2)return;$=t[d]<<8|t[d+1],d+=2}else if($===127){if(t.length<d+8)return;$=t[d+4]*16777216+(t[d+5]<<16|t[d+6]<<8|t[d+7]),d+=8}let _=null;if(c){if(t.length<d+4)return;_=t.subarray(d,d+4),d+=4}if(t.length<d+$)return;let g=t.subarray(d,d+$);if(_){let h=Buffer.alloc($);for(let E=0;E<$;E++)h[E]=g[E]^_[E&3];g=h}t=t.subarray(d+$),i(f,g)}}}var aXl=256;var hSt=w(()=>{cSt()});function ESt(i){if(typeof i!=="string"||i.length===0)return null;let t=i.lastIndexOf(":");if(i.startsWith("["))return null;let l=(t>=0?i.slice(0,t):i).replace(/\.$/,"").toLowerCase(),n=".localhost";if(!l.endsWith(n))return null;let f=l.slice(0,-n.length);if(f.length===0)return null;if(f.includes("."))return null;return f}async function vSt(i){let t=gSt({maxPendingFrames:i.maxPendingWsFrames??i9l,backlogOverflowReason:"ingress backlog overflow"}),u=Bun.serve({port:i.port,hostname:"127.0.0.1",idleTimeout:0,async fetch(l,n){let f=l.headers.get("host"),c=ESt(f);if(!c)return new Response("not found",{status:404});let $=i.lookupSandboxPort(c);if(!$){if(l.headers.get("upgrade")==="websocket")return new Response("unknown handle",{status:404});return new Response(t9l,{status:503,headers:{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Retry-After":"1"}})}if(l.headers.get("upgrade")==="websocket"){let h=new URL(l.url);if(!n.upgrade(l,{data:_St({port:$,pathQuery:`${h.pathname}${h.search}`,protocols:dSt(l.headers)})}))return new Response("ws upgrade failed",{status:400});return}let d=new URL(l.url),_=`http://127.0.0.1:${$}${d.pathname}${d.search}`,g=new Headers(l.headers);return g.set("host",`127.0.0.1:${$}`),fetch(_,{method:l.method,headers:g,body:l.body,redirect:"manual"})},websocket:{open:t.open,message:t.message,close:t.close}});return{port:u.port??0,async stop(){u.stop(!0)}}}var i9l=256,t9l='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the local sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>';var rSt=w(()=>{hSt()});async function cki(i=$9l){let t=["decopilot-sandbox","body-offload"],[u,l]=await Promise.all([i.detectClaudeCode().catch(()=>!1),i.detectCodex().catch(()=>!1)]);if(u)t.push("claude-code");if(l)t.push("codex");return t}function l9l(i){return u9l.filter((t)=>!i.includes(t))}function n9l(i,t){let u=t.filter((l)=>!i.includes(l));return i.push(...u),u}function wSt(i,t={}){let u=t.detect??(()=>cki()),l=setInterval(()=>{if(l9l(i).length===0)return;u().then((n)=>{let f=n9l(i,n);if(f.length>0)t.onChange?.(f)}).catch(()=>{})},t.intervalMs??60000);return l.unref?.(),()=>clearInterval(l)}async function f9l(){try{let{query:i}=await import("@anthropic-ai/claude-agent-sdk"),t=i({prompt:"",options:{maxTurns:1}}),u=await t.accountInfo();return t.return(void 0),Boolean(u.email)}catch{return!1}}async function c9l(){try{let i=Bun.spawn(["codex","--version"],{stdout:"ignore",stderr:"ignore"}),t=setTimeout(()=>i.kill(),1e4),u=await i.exited;return clearTimeout(t),u===0}catch{return!1}}var u9l,$9l;var xSt=w(()=>{u9l=["claude-code","codex"];$9l={detectClaudeCode:f9l,detectCodex:c9l}});import{randomBytes as d9l}from"crypto";import{mkdir as _9l,readFile as g9l,writeFile as h9l}from"fs/promises";import{dirname as E9l,join as v9l}from"path";function r9l(i){return v9l(i,"machine-id")}async function DSt(i){let t=r9l(i);try{let n=(await g9l(t,"utf8")).trim();if(n)return n}catch{}let u=d9l(16).toString("hex");return await _9l(E9l(t),{recursive:!0}),await h9l(t,u),u}var ySt=()=>{};import{randomBytes as w9l}from"crypto";import{mkdir as x9l}from"fs/promises";import{createServer as D9l}from"net";import{join as y9l}from"path";function OSt(i,t){return Error(`sandbox failed to start: ${i}`,{cause:t})}function O9l(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function X9l(i){if(i instanceof Error){let t=i.cause;if(t instanceof Error&&t.message)return t.message;return i.message}return String(i)}function XSt(i){let t=i.maxSandboxes??20,u=new Map,l=i.pickPort??N9l,n=i.fetchImpl??fetch,f=i.resolvePreviewUrl??((E,v)=>`http://127.0.0.1:${v}`),c=(E)=>{try{i.onEvent?.(E)}catch{}},$=async(E)=>{let v=new AbortController,r=setTimeout(()=>v.abort(),1500);try{let x=await n(`${E}/health`,{signal:v.signal});if(!x.ok)console.warn(`[user-desktop] probe ${E}/health \u2192 ${x.status} (treating as dead)`);return x.ok}catch(x){return console.warn(`[user-desktop] probe ${E}/health failed: ${x instanceof Error?x.message:String(x)} (treating as dead)`),!1}finally{clearTimeout(r)}},d=(E)=>{console.warn(`[user-desktop] evicting dead daemon handle=${E.handle} port=${E.port}`);try{E.process.kill("SIGTERM")}catch{}if(u.get(E.handle)===E)u.delete(E.handle),c({handle:E.handle,phase:"evicted"})},_=new Map;function g(){if(u.size<t)return;let E=[...u.values()].filter((r)=>r.activeDispatchCount===0).sort((r,x)=>r.lastUsedAt-x.lastUsedAt);if(E.length===0){console.warn(`[user-desktop] at cap ${u.size}/${t} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let v=E[0];console.log(`[user-desktop] evicting LRU victim handle=${v.handle} port=${v.port} (cap ${t} reached, size=${u.size})`);try{v.process.kill("SIGTERM")}catch{}u.delete(v.handle),c({handle:v.handle,phase:"evicted"})}let h=async(E)=>{c({handle:E.handle,phase:"spawning"}),g();let v=y9l(i.dataDir,"sandboxes",E.handle);await x9l(v,{recursive:!0}),console.log(`[user-desktop] ensure handle=${E.handle} repo=${E.repo?.cloneUrl??"(none)"} branch=${E.repo?.branch??"(none)"} runtime=${E.workload?.runtime??"(autodetect)"} pm=${E.workload?.packageManager??"(autodetect)"}`);let r=w9l(24).toString("hex"),[x,y]=await Promise.all([l(),l()]);console.log(`[user-desktop] spawn handle=${E.handle} port=${x} devPort=${y} workdir=${v}`);let O=await Promise.resolve(i.spawnDaemon({workdir:v,handle:E.handle,port:x,daemonToken:r,offloadAllowedHosts:E.offloadAllowedHosts??[],offloadAllowSameHostDev:E.offloadAllowSameHostDev??!1,orgFsConfigJson:E.orgFsConfigJson}));try{try{await i.waitForHealth(x)}catch(J){throw OSt("the sandbox didn't come online in time",J)}console.log(`[user-desktop] healthy handle=${E.handle} port=${x} \u2014 posting config`);try{await i.postConfig(x,y,{repo:E.repo,workload:E.workload,operator:E.operator},r)}catch(J){throw OSt(O9l(J)?"configuration timed out":"the sandbox rejected its configuration",J)}}catch(J){console.error(`[user-desktop] sandbox bring-up failed handle=${E.handle} port=${x} (killing daemon):`,J);try{O.kill("SIGKILL")}catch{}throw c({handle:E.handle,phase:"failed",error:X9l(J)}),J}let X=`http://127.0.0.1:${x}`,N=f(E.handle,x);console.log(`[user-desktop] ready handle=${E.handle} port=${x} sandboxApiUrl=${X} previewUrl=${N}`);let U={handle:E.handle,port:x,process:O,sandboxApiUrl:X,previewUrl:N,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:r};if(u.set(E.handle,U),c({handle:E.handle,phase:"ready",port:x,previewUrl:N}),O.exited)O.exited.then(()=>{if(u.get(E.handle)===U)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${E.handle} port=${x} \u2014 removing from cache`),u.delete(E.handle),c({handle:E.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${E.handle} port=${x} (already replaced/removed)`)});return{sandboxApiUrl:X,previewUrl:N,port:x}};return{async ensureSandbox(E){let v=u.get(E.handle);if(v){if(await $(v.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${E.handle} port=${v.port} (alive)`),v.lastUsedAt=Date.now(),{sandboxApiUrl:v.sandboxApiUrl,previewUrl:v.previewUrl,port:v.port};console.warn(`[user-desktop] cache stale handle=${E.handle} port=${v.port} \u2014 respawning`),d(v)}let r=_.get(E.handle);if(r)return console.log(`[user-desktop] joining in-flight ensure handle=${E.handle}`),r;let x=h(E).finally(()=>{_.delete(E.handle)});return _.set(E.handle,x),x},proxyPort(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now();return v?.port??null},getDaemonToken(E){return u.get(E)?.daemonToken??null},hasHandle(E){return u.has(E)||_.has(E)},recordHit(E){let v=u.get(E);if(v)v.lastUsedAt=Date.now()},acquireDispatch(E){let v=u.get(E);if(!v)return()=>{};v.activeDispatchCount+=1;let r=!1;return()=>{if(r)return;r=!0;let x=u.get(E);if(x)x.activeDispatchCount=Math.max(0,x.activeDispatchCount-1)}},listSandboxes(){return[...u.values()]},async deleteSandbox(E){let v=u.get(E);if(!v){console.log(`[user-desktop] delete handle=${E} (not found, no-op)`);return}console.log(`[user-desktop] delete handle=${E} port=${v.port}`);try{v.process.kill("SIGTERM")}catch{}u.delete(E),c({handle:E,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${u.size} sandbox(es)`);for(let E of u.values())try{E.process.kill("SIGTERM")}catch{}u.clear()}}}function N9l(){return new Promise((i,t)=>{let u=D9l();u.unref(),u.on("error",t),u.listen(0,"127.0.0.1",()=>{let l=u.address();if(l&&typeof l==="object"){let n=l.port;u.close(()=>i(n))}else u.close(()=>t(Error("could not allocate port")))})})}var NSt=()=>{};import{randomUUID as J9l}from"crypto";import{hostname as U9l}from"os";async function JSt(i){let t=U9l()||void 0;i.monitor?.onMachine?.(t??"this machine");let u=SPt(i.dataDir,{outFd:i.logFd,hotReload:i.hotReload}),l=0,n=XSt({dataDir:i.dataDir,resolvePreviewUrl:(N,U)=>l>0?`http://${N}.localhost:${l}`:`http://127.0.0.1:${U}`,spawnDaemon:async(N)=>{let U={DAEMON_BOOT_ID:J9l(),APP_ROOT:N.workdir,PROXY_PORT:String(N.port),DAEMON_TOKEN:N.daemonToken,OFFLOAD_ALLOWED_HOSTS:N.offloadAllowedHosts.join(","),...N.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(N.orgFsConfigJson){let F=await HPt(i.dataDir);if(F)U.ORGFS_CONFIG=N.orgFsConfigJson,U.ORGFS_RCLONE_PATH=F}let J=await u({workdir:N.workdir,env:U,daemonPort:N.port});return{port:N.port,kill:(F)=>J.kill(F),exited:J.exited.then(()=>{return})}},postConfig:async(N,U,J,F)=>{let Q={port:U};if(J.workload)Q.runtime=J.workload.runtime,Q.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let B={application:Q},P=ih(J.operator??null);if(P)B.operator=P;if(J.repo)B.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await I8(`http://127.0.0.1:${N}`,F,B)},waitForHealth:async(N)=>{await Vui(`http://127.0.0.1:${N}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),f=await vSt({port:i.port,lookupSandboxPort:(N)=>n.proxyPort(N)});l=f.port,console.log(`Local ingress listening on http://127.0.0.1:${f.port} (use http://<handle>.localhost:${f.port}/)`),i.monitor?.onIngress?.(f.port);let c=LPt({provider:n}),$=async()=>{let N=await Sw({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!N)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return N.accessToken};console.log(`[link-daemon] transport=pull cluster=${i.clusterBaseUrl}`);let d=await DSt(i.dataDir),_=process.env.npm_package_version??"0.0.0",g=await cki(),h=wSt(g,{onChange:(N)=>{console.log(`[link-daemon] capabilities detected: +${N.join(",")} (now: ${g.join(",")})`)}}),E=uki({path:`${i.dataDir}/link/outbox.sqlite`}),v=()=>{},r=await tSt({clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:n,outbox:E,controlHandler:c,capabilities:g,machineId:d,cliVersion:_,previewPort:f.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl} (pull transport)`)},onShutdown:()=>v()}),x,y=new Promise((N)=>{x=N}),O=!1,X=async()=>{if(O)return;O=!0,console.log(`
|
|
104782
|
-
Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!O)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:y,stop:X}}var USt=w(()=>{tGi();kH();zPt();RPt();ePt();uSt();lki();rSt();xSt();ySt();WH();NSt()});function $ki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var c0i;var dki=w(()=>{c0i={name:"decocms",version:"3.4.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.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","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cR={};Gi(cR,{printBanner:()=>I9l,bannerLines:()=>TSt,BANNER_LINES:()=>$0i,BANNER_GRADIENT:()=>d0i});function F9l(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function TSt(i){let t=$0i.map((u,l)=>{let[n,f,c]=F9l(d0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function I9l(i){console.log("");for(let t of TSt(i))console.log(t);console.log("")}var $0i,d0i;var NW=w(()=>{$0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],d0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Z9l,Text as FSt}from"ink";import{jsx as B9l,jsxs as ISt}from"react/jsx-runtime";function _0i({version:i}){return ISt(Z9l,{flexDirection:"column",marginTop:1,children:[$0i.map((t,u)=>B9l(FSt,{color:d0i[u],children:t},u)),ISt(FSt,{dimColor:!0,children:[" v",i]})]})}var _ki=w(()=>{NW()});var BSt={};Gi(BSt,{subscribeLinkState:()=>Eki,setMachine:()=>A9l,setLogPath:()=>W9l,setIngress:()=>P9l,setDaemonError:()=>G9l,setClusterUrl:()=>Y9l,setCluster:()=>Q9l,pushSandboxEvent:()=>k9l,getLinkState:()=>hki,applySandboxEvent:()=>ZSt});function ZSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function C8(){for(let i of gki)i()}function hki(){return t$}function Eki(i){return gki.add(i),()=>gki.delete(i)}function Q9l(i){t$={...t$,cluster:i},C8()}function Y9l(i){t$={...t$,clusterUrl:i},C8()}function P9l(i,t){t$={...t$,ingressPort:i,ingressUrl:t},C8()}function A9l(i){t$={...t$,machine:i},C8()}function G9l(i){t$={...t$,daemonError:i},C8()}function W9l(i){t$={...t$,logPath:i},C8()}function k9l(i){t$={...t$,sandboxes:ZSt(t$.sandboxes,i)},C8()}var t$,gki;var vki=w(()=>{t$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},gki=new Set});var QSt={};Gi(QSt,{LinkApp:()=>z9l});import{Box as u$,Text as l$}from"ink";import{useSyncExternalStore as j9l}from"react";import{jsx as c1,jsxs as LE}from"react/jsx-runtime";function S9l(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function z9l(){let i=j9l(Eki,hki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(u$,{flexDirection:"column",children:[c1(_0i,{version:c0i.version}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:"\u2500".repeat(80)})}),c1(u$,{children:i.cluster==="linked"?LE(l$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(l$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(l$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),c1(u$,{children:i.ingressUrl?LE(l$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):c1(l$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?c1(l$,{dimColor:!0,children:"No previews running yet."}):LE(u$,{flexDirection:"column",children:[LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=S9l(u);return LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{wrap:"truncate-end",children:u.handle})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{color:l.color,wrap:"truncate-end",children:l.text})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?c1(u$,{marginTop:1,children:LE(l$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?c1(u$,{marginTop:1,children:LE(l$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var g0i;var YSt=w(()=>{dki();_ki();vki();g0i={project:18,status:14}});var ASt={};Gi(ASt,{runLinkCommand:()=>M9l});import{closeSync as b9l,mkdirSync as K9l,openSync as H9l,writeSync as R9l}from"fs";import{homedir as L9l}from"os";import{join as PSt}from"path";function e9l(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{R9l(t,`${$ki(n)}
|
|
104782
|
+
Shutting down\u2026`),h();try{await r.close()}catch{}try{await f.stop()}catch{}try{await n.shutdown()}catch{}try{E.close()}catch{}x(0)};return process.on("SIGINT",()=>void X()),process.on("SIGTERM",()=>void X()),v=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms link` to reconnect."),X()},r.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!O)console.error("Cluster connection closed permanently; exiting."),X()}),{stopped:y,stop:X}}var USt=w(()=>{tGi();kH();zPt();RPt();ePt();uSt();lki();rSt();xSt();ySt();WH();NSt()});function $ki(i){return i.map((t)=>typeof t==="string"?t:String(t)).join(" ")}var c0i;var dki=w(()=>{c0i={name:"decocms",version:"3.4.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.2.141","@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.80","@ai-sdk/google":"^3.0.80","@ai-sdk/openai":"^3.0.65","@anthropic-ai/sdk":"^0.96.0","@aws-sdk/client-s3":"^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.17.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.0","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12",nats:"^2.29.3","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.193","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.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","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/core":"^6.1.2","@rjsf/shadcn":"^6.1.2","@rjsf/utils":"^6.1.2","@rjsf/validator-ajv8":"^6.1.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-mention":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.191","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6","mesh-plugin-workflows":"workspace:*",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0",zustand:"^5.0.9"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var cR={};Gi(cR,{printBanner:()=>I9l,bannerLines:()=>TSt,BANNER_LINES:()=>$0i,BANNER_GRADIENT:()=>d0i});function F9l(i){let t=Number.parseInt(i.slice(1),16);return[t>>16&255,t>>8&255,t&255]}function TSt(i){let t=$0i.map((u,l)=>{let[n,f,c]=F9l(d0i[l]);return`\x1B[38;2;${n};${f};${c}m${u}\x1B[39m`});if(i!==void 0)t.push(`\x1B[2m v${i}\x1B[22m`);return t}function I9l(i){console.log("");for(let t of TSt(i))console.log(t);console.log("")}var $0i,d0i;var NW=w(()=>{$0i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],d0i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Z9l,Text as FSt}from"ink";import{jsx as B9l,jsxs as ISt}from"react/jsx-runtime";function _0i({version:i}){return ISt(Z9l,{flexDirection:"column",marginTop:1,children:[$0i.map((t,u)=>B9l(FSt,{color:d0i[u],children:t},u)),ISt(FSt,{dimColor:!0,children:[" v",i]})]})}var _ki=w(()=>{NW()});var BSt={};Gi(BSt,{subscribeLinkState:()=>Eki,setMachine:()=>A9l,setLogPath:()=>W9l,setIngress:()=>P9l,setDaemonError:()=>G9l,setClusterUrl:()=>Y9l,setCluster:()=>Q9l,pushSandboxEvent:()=>k9l,getLinkState:()=>hki,applySandboxEvent:()=>ZSt});function ZSt(i,t){let u=new Map(i);if(t.phase==="evicted"||t.phase==="deleted")return u.delete(t.handle),u;let l=u.get(t.handle);return u.set(t.handle,{handle:t.handle,port:t.port??l?.port??null,previewUrl:t.previewUrl??l?.previewUrl??null,status:t.phase,error:t.phase==="failed"?t.error??"failed":null}),u}function C8(){for(let i of gki)i()}function hki(){return t$}function Eki(i){return gki.add(i),()=>gki.delete(i)}function Q9l(i){t$={...t$,cluster:i},C8()}function Y9l(i){t$={...t$,clusterUrl:i},C8()}function P9l(i,t){t$={...t$,ingressPort:i,ingressUrl:t},C8()}function A9l(i){t$={...t$,machine:i},C8()}function G9l(i){t$={...t$,daemonError:i},C8()}function W9l(i){t$={...t$,logPath:i},C8()}function k9l(i){t$={...t$,sandboxes:ZSt(t$.sandboxes,i)},C8()}var t$,gki;var vki=w(()=>{t$={cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:20,sandboxes:new Map,daemonError:null,logPath:null},gki=new Set});var QSt={};Gi(QSt,{LinkApp:()=>z9l});import{Box as u$,Text as l$}from"ink";import{useSyncExternalStore as j9l}from"react";import{jsx as c1,jsxs as LE}from"react/jsx-runtime";function S9l(i){if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function z9l(){let i=j9l(Eki,hki),t=[...i.sandboxes.values()].sort((u,l)=>u.handle.localeCompare(l.handle));return LE(u$,{flexDirection:"column",children:[c1(_0i,{version:c0i.version}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:"\u2500".repeat(80)})}),c1(u$,{children:i.cluster==="linked"?LE(l$,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?LE(l$,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):LE(l$,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),c1(u$,{children:i.ingressUrl?LE(l$,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):c1(l$,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),c1(u$,{marginBottom:1,children:c1(l$,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${t.length} of ${i.cap} previews`})}),t.length===0?c1(l$,{dimColor:!0,children:"No previews running yet."}):LE(u$,{flexDirection:"column",children:[LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),t.map((u)=>{let l=S9l(u);return LE(u$,{children:[c1(u$,{width:g0i.project,flexShrink:0,marginRight:1,children:c1(l$,{wrap:"truncate-end",children:u.handle})}),c1(u$,{width:g0i.status,flexShrink:0,marginRight:1,children:c1(l$,{color:l.color,wrap:"truncate-end",children:l.text})}),c1(u$,{flexGrow:1,children:c1(l$,{dimColor:!0,wrap:"truncate-end",children:u.previewUrl??"\u2014"})})]},u.handle)})]}),i.daemonError?c1(u$,{marginTop:1,children:LE(l$,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?c1(u$,{marginTop:1,children:LE(l$,{dimColor:!0,children:["Logs: ",i.logPath]})}):null]})}var g0i;var YSt=w(()=>{dki();_ki();vki();g0i={project:18,status:14}});var ASt={};Gi(ASt,{runLinkCommand:()=>M9l});import{closeSync as b9l,mkdirSync as K9l,openSync as H9l,writeSync as R9l}from"fs";import{homedir as L9l}from"os";import{join as PSt}from"path";function e9l(i,t){let u={log:console.log,warn:console.warn,error:console.error},l=(n)=>{if(t===void 0)return;try{R9l(t,`${$ki(n)}
|
|
104783
104783
|
`)}catch{}};return console.log=(...n)=>l(n),console.warn=(...n)=>l(n),console.error=(...n)=>{l(n),i($ki(n))},()=>{console.log=u.log,console.warn=u.warn,console.error=u.error}}async function C9l(i,t){let u;try{u=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${t}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(u.status===401||u.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function M9l(i={}){let t=i.port??5174,u=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??PSt(L9l(),"deco"),l=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",n,f;try{let c=await eui({dataDir:u,intent:"Link",target:l});if(process.env.DECOCMS_LINK_MANAGED!=="1")await C9l(l,c.accessToken);let $;if(i.tui){let{render:_}=await import("ink"),{createElement:g}=await import("react"),{LinkApp:h}=await Promise.resolve().then(() => (YSt(),QSt)),{pushSandboxEvent:E,setCluster:v,setClusterUrl:r,setDaemonError:x,setIngress:y,setLogPath:O,setMachine:X}=await Promise.resolve().then(() => (vki(),BSt));K9l(u,{recursive:!0});let N=PSt(u,"link.log");f=H9l(N,"a"),O(N),r(l),v("connecting"),$={onEvent:(U)=>E(U),onIngress:(U)=>y(U,`http://127.0.0.1:${U}`),onCluster:(U)=>v(U),onMachine:(U)=>X(U)},n=e9l(x,f),_(g(h),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:_}=await Promise.resolve().then(() => (NW(),cR));_(i.version??"0.0.0")}return await(await JSt({port:t,clusterBaseUrl:l,dataDir:u,session:c,monitor:$,logFd:f,hotReload:i.hotReload})).stopped}catch(c){return n?.(),console.error(c instanceof Error?c.message:String(c)),1}finally{if(n?.(),f!==void 0)try{b9l(f)}catch{}}}var GSt=w(()=>{iGi();USt()});var Oki={};Gi(Oki,{resolveDevLinkClusterUrl:()=>m9l,populateDevLinkToxiProxy:()=>bSt,isDevLinkToxiProxyEnabled:()=>a9l,ensureDevLinkToxiProxy:()=>tNl,buildDevLinkToxiProxyConfig:()=>SSt,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>kSt,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>jSt});function a9l(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function rki(i,t){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${t} must be an integer port in 1..65535`);return i}function SSt(i){let t=new URL(i.serverUrl);if(t.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let u=rki(i.apiPort,"apiPort"),l=rki(i.listenPort,"listenPort");if(t.port.length===0)throw Error("serverUrl must include an explicit valid port");let n=rki(Number.parseInt(t.port,10),"upstreamPort"),f=`http://127.0.0.1:${n}`,c=`http://127.0.0.1:${l}`;return{serviceName:kSt,proxyName:jSt,apiUrl:`http://127.0.0.1:${u}`,listen:`0.0.0.0:${l}`,upstream:`host.docker.internal:${n}`,publicTargetUrl:f,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${f}`}}function m9l(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function wki(i,t,u){if(i.ok)return;let l=await i.text();throw Error(`ToxiProxy ${t} failed for ${u}: status=${i.status} statusText=${i.statusText} body=${l}`)}function yki(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function zSt(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return zSt(i.cause)}async function xki(i,t,u,l){try{return await i(u,l)}catch(n){throw Error(`ToxiProxy ${t} failed for ${u}: ${yki(n)}`,{cause:n})}}async function bSt(i,t=fetch){let u=`${i.apiUrl}/reset`,l=await xki(t,"reset",u,{method:"POST"});await wki(l,"reset",u);let n=`${i.apiUrl}/populate`,f=await xki(t,"populate",n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await wki(f,"populate",n)}async function o9l(i,t){let u=`${i.apiUrl}/version`;try{await Tr(async()=>{let l=await xki(t,"readiness check",u,{method:"GET",signal:AbortSignal.timeout(V9l)});await wki(l,"readiness check",u)},{maxAttempts:q9l,minTimeout:WSt,maxTimeout:WSt,multiplier:1,jitter:0,isRetriable:(l)=>!zSt(l)})}catch(l){let n=l instanceof K6?l.cause:l;throw Error(`ToxiProxy API did not become ready at ${u}: ${yki(n)}`,{cause:n})}}async function s9l(i){if(i===null)return"";return await new Response(i).text()}async function Dki(i,t={}){let u=["docker",...i].join(" "),l=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${u}): ${yki($)}`,{cause:$})}})(),[n,f]=await Promise.all([l.exited,s9l(l.stderr)]);if(n===0||t.ignoreFailure===!0)return;let c=f.trim().length>0?`: ${f.trim()}`:"";throw Error(`Docker command failed (${u}) with exit ${n}${c}`)}async function p9l(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Dki(["rm","-f",u],{ignoreFailure:!0}),await Dki(["run","--rm","-d","--name",u,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${t}:${t}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function iNl(i,t){let u=`deco-dev-link-toxiproxy-${i}`;await Dki(["rm","-f",u],{ignoreFailure:!0})}async function tNl(i){let t=SSt(i),u=i.startDaemon??p9l,l=i.stopDaemon??(i.startDaemon===void 0?iNl:void 0);await u(i.apiPort,i.listenPort);let n=i.fetchImpl??fetch;try{await o9l(t,n),await bSt(t,n)}catch(f){if(l!==void 0)try{await l(i.apiPort,i.listenPort)}catch{}throw f}return{config:t,stop:async()=>{if(l!==void 0)await l(i.apiPort,i.listenPort)}}}var kSt="ToxiProxy",jSt="dev_link_studio",q9l=20,WSt=100,V9l=100;var Xki=w(()=>{x1()});var KSt={};Gi(KSt,{migrateBetterAuth:()=>Nki});import{getMigrations as uNl}from"better-auth/db";import{sso as lNl}from"@better-auth/sso";import{organization as nNl}from"@decocms/better-auth/plugins";import{admin as fNl,apiKey as cNl,jwt as $Nl,magicLink as dNl,mcp as _Nl,openAPI as gNl}from"better-auth/plugins";import{emailOTP as hNl}from"better-auth/plugins/email-otp";async function Nki(i){let u={database:YH(i||Ww()),plugins:[nNl({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),fNl(),cNl(),$Nl(),gNl(),_Nl({loginPage:"/login"}),lNl(),dNl({sendMagicLink:async()=>{}}),hNl({sendVerificationOTP:async()=>{}})]},{toBeAdded:l,toBeCreated:n,runMigrations:f}=await uNl(u);if(!l.length&&!n.length)return"up to date";return await f(),`${n.length+l.length} table(s) migrated`}var Jki=w(()=>{Nd()});var Uki={};Gi(Uki,{up:()=>ENl,down:()=>vNl});import{sql as eE}from"kysely";async function ENl(i){await i.schema.createTable("connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(t)=>t.notNull()).addColumn("connectionUrl","text",(t)=>t.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(t)=>t.primaryKey()).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(t)=>t.notNull()).addColumn("hashedKey","text",(t)=>t.notNull().unique()).addColumn("permissions","text",(t)=>t.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(t)=>t.notNull()).addColumn("redirectUris","text",(t)=>t.notNull()).addColumn("grantTypes","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(t)=>t.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(t)=>t.notNull()).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(t)=>t.primaryKey()).addColumn("clientId","text",(t)=>t.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(t)=>t.primaryKey()).addColumn("connectionId","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(t)=>t.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(t)=>t.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(eE`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function vNl(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var HSt=()=>{};var Tki={};Gi(Tki,{up:()=>rNl,down:()=>wNl});import{sql as RSt}from"kysely";async function rNl(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull().defaultTo(RSt`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(t)=>t.notNull().defaultTo(RSt`CURRENT_TIMESTAMP`)).execute()}async function wNl(i){await i.schema.dropTable("organization_settings").execute()}var LSt=()=>{};var Fki={};Gi(Fki,{up:()=>xNl,down:()=>DNl});async function xNl(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function DNl(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var Iki={};Gi(Iki,{up:()=>yNl,down:()=>ONl});async function yNl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function ONl(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(t)=>t.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(t)=>t.notNull()).addColumn("updatedAt","text",(t)=>t.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((t)=>t.selectFrom("organization_settings").select(["organizationId",t.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var Zki={};Gi(Zki,{up:()=>XNl,down:()=>NNl});async function XNl(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function NNl(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Bki={};Gi(Bki,{up:()=>UNl,down:()=>TNl});import{sql as JNl}from"kysely";async function UNl(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",JNl`text`).execute()}async function TNl(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var eSt=()=>{};var Qki={};Gi(Qki,{up:()=>FNl,down:()=>INl});async function FNl(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(t)=>t.notNull()).addColumn("tool_name","text",(t)=>t.notNull()).addColumn("input","text",(t)=>t.notNull()).addColumn("output","text",(t)=>t.notNull()).addColumn("is_error","integer",(t)=>t.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(t)=>t.notNull()).addColumn("timestamp","text",(t)=>t.notNull()).addColumn("user_id","text").addColumn("request_id","text",(t)=>t.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function INl(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var Yki={};Gi(Yki,{up:()=>ZNl,down:()=>BNl});import{sql as $R}from"kysely";async function ZNl(i){await i.schema.createTable("events").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(t)=>t.notNull()).addColumn("source","text",(t)=>t.notNull()).addColumn("specversion","text",(t)=>t.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(t)=>t.notNull()).addColumn("datacontenttype","text",(t)=>t.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(t)=>t.notNull()).addColumn("filter","text").addColumn("enabled","integer",(t)=>t.notNull().defaultTo(1)).addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(t)=>t.primaryKey()).addColumn("event_id","text",(t)=>t.notNull()).addColumn("subscription_id","text",(t)=>t.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(t)=>t.notNull().defaultTo("pending")).addColumn("attempts","integer",(t)=>t.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo($R`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function BNl(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var CSt=()=>{};var Pki={};Gi(Pki,{up:()=>YNl,down:()=>PNl});import{sql as QNl}from"kysely";async function YNl(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function PNl(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(t)=>t.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(t)=>t.references("user.id").onDelete("set null")).addColumn("connectionId","text",(t)=>t.references("connections.id").onDelete("set null")).addColumn("toolName","text",(t)=>t.notNull()).addColumn("allowed","integer",(t)=>t.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(t)=>t.notNull().defaultTo(QNl`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var MSt=()=>{};var Aki={};Gi(Aki,{up:()=>ANl,down:()=>GNl});import{sql as h0i}from"kysely";async function ANl(i){await i.schema.createTable("gateways").addColumn("id","text",(t)=>t.primaryKey()).addColumn("organization_id","text",(t)=>t.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(t)=>t.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(t)=>t.notNull().defaultTo("active")).addColumn("is_default","integer",(t)=>t.notNull().defaultTo(0)).addColumn("created_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(t)=>t.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(t)=>t.primaryKey()).addColumn("gateway_id","text",(t)=>t.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(t)=>t.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(t)=>t.notNull().defaultTo(h0i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await h0i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function GNl(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var qSt=()=>{};var Gki={};Gi(Gki,{up:()=>WNl,down:()=>kNl});async function WNl(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function kNl(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Wki={};Gi(Wki,{up:()=>jNl,down:()=>SNl});import{sql as E0i}from"kysely";async function jNl(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(t)=>t.notNull().defaultTo("inclusion")).execute(),await E0i`
|
|
104784
104784
|
UPDATE gateways
|
|
104785
104785
|
SET tool_selection_mode = CASE
|