decocms 4.147.0 → 4.148.0
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-2Dxo9Jp4.js → AlertCircle-prFf-HAX.js} +1 -1
- package/dist/client/assets/{AreaChart-CeWRPxoe.js → AreaChart-CIYFgvLQ.js} +1 -1
- package/dist/client/assets/{ArrowUp-B372eLRL.js → ArrowUp-D4OlfjCc.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-D802qwXa.js → ArrowUpRight-r26q6I39.js} +1 -1
- package/dist/client/assets/{Check-C2jMVaeP.js → Check-nahPrn_g.js} +1 -1
- package/dist/client/assets/{CheckCircle-CAN_wkas.js → CheckCircle-rfFj3mw6.js} +1 -1
- package/dist/client/assets/{ChevronDown-B5V_4H8o.js → ChevronDown-Dwhqmid_.js} +1 -1
- package/dist/client/assets/{ChevronRight-DbBKG8o-.js → ChevronRight-BvMOZXfz.js} +1 -1
- package/dist/client/assets/{ChevronUp-wl1r60kg.js → ChevronUp-Bcn1yz7Y.js} +1 -1
- package/dist/client/assets/{Copy01-DZVLvpLt.js → Copy01-zZwi30U0.js} +1 -1
- package/dist/client/assets/{DotsVertical-zoeuWG_B.js → DotsVertical-K0_g-N6u.js} +1 -1
- package/dist/client/assets/{Eye-p7gVtcBP.js → Eye-C3BeqH0m.js} +1 -1
- package/dist/client/assets/{FilterLines-DjZtxUHW.js → FilterLines-BKyA8Gmq.js} +1 -1
- package/dist/client/assets/{HardDrive-C7lbD7tM.js → HardDrive-LewsJqXl.js} +1 -1
- package/dist/client/assets/{Key01-DBOxgjeS.js → Key01-BsGhLTyq.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CVH4xfOW.js → LayoutLeft-CFl4ocrU.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DDyZLcZQ.js → LinkExternal01-C_mjDJcz.js} +1 -1
- package/dist/client/assets/{LogOut01-C6LzoNzY.js → LogOut01-DYarz7Xc.js} +1 -1
- package/dist/client/assets/{Monitor01-CEb-YULy.js → Monitor01-DcosHG13.js} +1 -1
- package/dist/client/assets/{Palette-wtVoPoiz.js → Palette-CYcg1kOm.js} +1 -1
- package/dist/client/assets/{Play-C3hWiv-e.js → Play-B4w0_M-p.js} +1 -1
- package/dist/client/assets/{Plus-twvBvKo0.js → Plus-BHuwS8Yk.js} +1 -1
- package/dist/client/assets/{SearchLg-KmYTVejr.js → SearchLg-CVrVx1Hz.js} +1 -1
- package/dist/client/assets/{SearchMd-rlLrkvov.js → SearchMd-IkP83MGf.js} +1 -1
- package/dist/client/assets/{Settings02-DTexHau_.js → Settings02-DYW1mX49.js} +1 -1
- package/dist/client/assets/{Shield01-BTEsJ7WP.js → Shield01-C60_XP9Q.js} +1 -1
- package/dist/client/assets/{Star01-D4viPiJS.js → Star01-DAfku3o8.js} +1 -1
- package/dist/client/assets/{Stars01-DVCi9msB.js → Stars01-B4vGCFFK.js} +1 -1
- package/dist/client/assets/{Stars02-BjRWIB5s.js → Stars02-DhZ5El8x.js} +1 -1
- package/dist/client/assets/{Sun-DukWKLhx.js → Sun-CRL2Dazq.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-7ZAWs0i3.js → SwitchHorizontal01-BvL6ECSz.js} +1 -1
- package/dist/client/assets/{Tool01-sslyST3d.js → Tool01-CZZIRPSR.js} +1 -1
- package/dist/client/assets/{Tool02-CcCmqYgT.js → Tool02-CxsMcXPT.js} +1 -1
- package/dist/client/assets/{Trash01-DLKfyXZh.js → Trash01-DyI62_iL.js} +1 -1
- package/dist/client/assets/{TrendUp01-CaIwgyNu.js → TrendUp01-B48ffVN1.js} +1 -1
- package/dist/client/assets/{Upload01-Ow-YBNzJ.js → Upload01--Y1XksK-.js} +1 -1
- package/dist/client/assets/{User01-bQzld3qt.js → User01-PauPleWX.js} +1 -1
- package/dist/client/assets/{Users01-BUxDCVEu.js → Users01-BGcxQkcX.js} +1 -1
- package/dist/client/assets/{Users03-EvTDMkNg.js → Users03-CSrm4V7N.js} +1 -1
- package/dist/client/assets/{X-DggNryax.js → X-hsgbPDpq.js} +1 -1
- package/dist/client/assets/{XCircle-DBOmOGaZ.js → XCircle-_9tDw1o6.js} +1 -1
- package/dist/client/assets/{XClose-DToI7Nqc.js → XClose-Cqc7ZFJt.js} +1 -1
- package/dist/client/assets/{Zap-DqDSY9Io.js → Zap-CwLDADiG.js} +1 -1
- package/dist/client/assets/{ZapSquare-gRQk1Abv.js → ZapSquare-Bpz3dcM4.js} +1 -1
- package/dist/client/assets/{access-gate-CWCiToTH.js → access-gate-CHtUSEUX.js} +1 -1
- package/dist/client/assets/{add-section-modal-CeJ1-JyO.js → add-section-modal-D0USIk0i.js} +1 -1
- package/dist/client/assets/{agent-icon-ogpT0fwN.js → agent-icon-2-jJJRsQ.js} +1 -1
- package/dist/client/assets/{agents-list-ec9myJyq.js → agents-list-Od7tZwWl.js} +1 -1
- package/dist/client/assets/{ai-providers-ClqJWEZC.js → ai-providers-Oh3KiPAG.js} +1 -1
- package/dist/client/assets/{alert-DTidhd77.js → alert-BOfj8_0b.js} +1 -1
- package/dist/client/assets/{alert-dialog-z-Dw9ujH.js → alert-dialog-DH-0e1cN.js} +1 -1
- package/dist/client/assets/{app-editor-CDMhGuWj.js → app-editor-ClJ_g_FZ.js} +1 -1
- package/dist/client/assets/{auth-Bpedj-YK.js → auth-DXcmzYfn.js} +1 -1
- package/dist/client/assets/{auth-catchall-BcwsUwHl.js → auth-catchall-BMKZlokb.js} +1 -1
- package/dist/client/assets/{auth-entry-nl-PnT-G.js → auth-entry-GagWrV3A.js} +1 -1
- package/dist/client/assets/{auth-split-layout-C7JK5n39.js → auth-split-layout-dEkj6lWS.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DdjdUYso.js → authenticate-and-persist-oauth-CKGBWeo0.js} +1 -1
- package/dist/client/assets/{automation-list-row-ag0oaYTw.js → automation-list-row-Doaus0VB.js} +1 -1
- package/dist/client/assets/{automation-runs-3G8hXCfY.js → automation-runs-BeTsfzHw.js} +1 -1
- package/dist/client/assets/{automations-C9RVMgr8.js → automations-7C3rigLT.js} +1 -1
- package/dist/client/assets/{avatar-5FmDg7zM.js → avatar-CWqNGAWm.js} +1 -1
- package/dist/client/assets/{badge-DoEcc1aI.js → badge-BU_GpRr8.js} +1 -1
- package/dist/client/assets/{block-document-B0AQfP1Y.js → block-document-BqnTNru8.js} +1 -1
- package/dist/client/assets/{brand-context-Hbwd_4uR.js → brand-context-DaY9-8MG.js} +1 -1
- package/dist/client/assets/{buckets-koai8Thu.js → buckets--aF01C9I.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-CHT0UPC1.js → bulk-category-panel-IZ8hArhU.js} +1 -1
- package/dist/client/assets/{calendar-CBe1ZNyc.js → calendar-C44iUjeT.js} +1 -1
- package/dist/client/assets/{capability-load-error-Bt5S5c9O.js → capability-load-error-Bq9xdFHM.js} +1 -1
- package/dist/client/assets/{card-Cfa6Qex1.js → card-DhKftmLa.js} +1 -1
- package/dist/client/assets/{category-editor-wwha4Tr6.js → category-editor-DA2NT2vY.js} +1 -1
- package/dist/client/assets/{chat-context-BPzudfpo.js → chat-context-lQCixDlW.js} +1 -1
- package/dist/client/assets/{checkbox-BuwxPguw.js → checkbox-B1nLyHMp.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DoPTvZOx.js → cli-auth-success-BbrIeLYm.js} +1 -1
- package/dist/client/assets/{collection-detail-xsCsj9wR.js → collection-detail-BKTUfV2g.js} +1 -1
- package/dist/client/assets/{collection-display-button-CyO5TDnk.js → collection-display-button-BHkLjkiG.js} +1 -1
- package/dist/client/assets/{collection-search-RMfBhC2C.js → collection-search-DQBn_WPS.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DpHKsYFT.js → collection-table-wrapper-XKifB31b.js} +1 -1
- package/dist/client/assets/{collection-tabs-BSlr9piZ.js → collection-tabs-hozvx6Ho.js} +1 -1
- package/dist/client/assets/{command-CUPOFlBp.js → command-DJQrIIpQ.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-C4waheWV.js → commerce-onboarding-Cd_YxA12.js} +1 -1
- package/dist/client/assets/{companions-core-CtglsN_S.js → companions-core-C1jl2uKc.js} +1 -1
- package/dist/client/assets/{connect-Sdg2KnBi.js → connect-Bu2qDfU7.js} +1 -1
- package/dist/client/assets/{connection-DLXOy2XB.js → connection-Dknas7wt.js} +1 -1
- package/dist/client/assets/{connection-card-Do6ibR1U.js → connection-card-CZnHiUbH.js} +1 -1
- package/dist/client/assets/{connection-detail-CH8cUbTD.js → connection-detail-BfdEWfJc.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BfZISReW.js → connection-form-helpers-wXqqOz4Y.js} +1 -1
- package/dist/client/assets/{connections-Cxzr_fbS.js → connections-DyfObEJB.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DlAzrZLY.js → decopilot-sse-pool-OIu0_L6x.js} +1 -1
- package/dist/client/assets/{dialog-DVdklNAE.js → dialog-CFJExuhc.js} +1 -1
- package/dist/client/assets/{domain-settings-Dgy45_Ok.js → domain-settings-BZwc_ftn.js} +1 -1
- package/dist/client/assets/{drawer-CwXxYVif.js → drawer-CduxBHK6.js} +1 -1
- package/dist/client/assets/{dropdown-menu-bU2H-ZfQ.js → dropdown-menu-DZWhr_Tz.js} +1 -1
- package/dist/client/assets/{empty-state-C-3qb1Uu.js → empty-state-Dvs53SNF.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BWhbeE-G.js → extract-connection-data-yYpcXysa.js} +1 -1
- package/dist/client/assets/{file-explorer-BPuHSeRK.js → file-explorer-CWWru7vT.js} +1 -1
- package/dist/client/assets/{form-BwtPLhrX.js → form-D0vRB-7K.js} +1 -1
- package/dist/client/assets/{general-BYxFhpaD.js → general-DpATbZPN.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BpYKcrhF.js → github-repo-picker-B_LrgL4x.js} +1 -1
- package/dist/client/assets/{hooks-J8rGPFF8.js → hooks-Bpc8gc-c.js} +1 -1
- package/dist/client/assets/{index-ehieywuX.js → index-B5XBP5rN.js} +5 -5
- package/dist/client/assets/{index-B7lrqyL7.js → index-BFPxaZUp.js} +1 -1
- package/dist/client/assets/{index-gZior8MX.js → index-B_5mEQTo.js} +1 -1
- package/dist/client/assets/{index-CLN4w7mU.js → index-CDGI2YeW.js} +1 -1
- package/dist/client/assets/{index-CRRQs3pu.js → index-CDVDDq-f.js} +3 -3
- package/dist/client/assets/{index-wG5kjH0l.js → index-CTtLf48d.js} +1 -1
- package/dist/client/assets/{index-CEHLfvMx.js → index-CcWXa1Ub.js} +1 -1
- package/dist/client/assets/{index-VU9uaddL.js → index-CiCjGSX0.js} +3 -3
- package/dist/client/assets/{index-BQ8Czkdj.js → index-DGBBsTtG.js} +1 -1
- package/dist/client/assets/{index-Dm65Bk5S.js → index-Pt4lG2Yp.js} +1 -1
- package/dist/client/assets/{index-DVue46g1.js → index-VH3dcW-d.js} +1 -1
- package/dist/client/assets/{index-redirect-CdBxKhWC.js → index-redirect-SrvT1SnC.js} +1 -1
- package/dist/client/assets/{input-BhLtvwyU.js → input-BPZ-HKZz.js} +1 -1
- package/dist/client/assets/{integration-icon-usmHU4kF.js → integration-icon-DWxNTrlG.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-Ckv9Myia.js → invite-member-dialog-CKpzA6Lt.js} +1 -1
- package/dist/client/assets/{label-B25IW2ay.js → label-pRSCuTCI.js} +1 -1
- package/dist/client/assets/{layout-CzIgWLWr.js → layout-_cLfwiEw.js} +1 -1
- package/dist/client/assets/{login-D-HpbIMP.js → login-CcXd7nTn.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CiZPfBq7.js → mcp-oauth-D8jkuULq.js} +1 -1
- package/dist/client/assets/{members-BfGAmibS.js → members-Dndoax11.js} +1 -1
- package/dist/client/assets/{monaco-editor-DgEE9u8w.js → monaco-editor-DolO4ZQB.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-QlaQMMcJ.js → monitoring-stats-row-BiIpp8OO.js} +1 -1
- package/dist/client/assets/{multi-select-DxpuCUQm.js → multi-select-Cyq9VC9u.js} +1 -1
- package/dist/client/assets/{oauth-callback-BHyB_ej7.js → oauth-callback-DVOQd7Su.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-m9yxWFWB.js → oauth-callback-ai-provider-CzWiWBwQ.js} +1 -1
- package/dist/client/assets/{onboarding-C47NYssi.js → onboarding-BFld4QgV.js} +1 -1
- package/dist/client/assets/{org-install-B-vcLlYS.js → org-install-DhSRkkZ6.js} +1 -1
- package/dist/client/assets/{org-layout-nbN1a7Yl.js → org-layout-4OBazLTh.js} +1 -1
- package/dist/client/assets/{organization-choice-BRAHlJxA.js → organization-choice-DZbAlxVr.js} +1 -1
- package/dist/client/assets/{orgs-CtePRYJc.js → orgs-DdfZdh22.js} +1 -1
- package/dist/client/assets/{page-seo-form-DhizkrtP.js → page-seo-form-D7-mOy3U.js} +1 -1
- package/dist/client/assets/{popover-CikAxVnJ.js → popover-CySuxgWc.js} +1 -1
- package/dist/client/assets/{post-editor-BZYKJtKx.js → post-editor-BH2gOe2G.js} +1 -1
- package/dist/client/assets/{primitives-CVTXxKjI.js → primitives-ZzkVXcmZ.js} +1 -1
- package/dist/client/assets/{profile-DDciXnU8.js → profile-CJfMezy3.js} +1 -1
- package/dist/client/assets/project-app-view-C9oiFRlP.js +1 -0
- package/dist/client/assets/record-editor-DrSroVmo.js +1 -0
- package/dist/client/assets/{redirect-editor-DFqLzo80.js → redirect-editor-BgknQGS7.js} +1 -1
- package/dist/client/assets/registry-BHrPYRoz.js +2 -0
- package/dist/client/assets/{registry-layout-DNooTVVs.js → registry-layout-C4k0Z_HX.js} +1 -1
- package/dist/client/assets/{reports-qG8QeIS4.js → reports-CK46EfUg.js} +1 -1
- package/dist/client/assets/{require-capability-BS0SiTq8.js → require-capability-_BYO4O0r.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Cy_WRaQ5.js → required-auth-layout-Y_iPc623.js} +1 -1
- package/dist/client/assets/{reset-password-CbcNEWD7.js → reset-password-B_eCL_De.js} +1 -1
- package/dist/client/assets/{roles-DHKo73Yh.js → roles-DmQH_hn1.js} +1 -1
- package/dist/client/assets/{search-input-CSdyJzrs.js → search-input-DDzdnOfZ.js} +1 -1
- package/dist/client/assets/{secrets-C8RVoqcC.js → secrets-BFHIO3xT.js} +1 -1
- package/dist/client/assets/{sections-editor-Bci7cl0U.js → sections-editor-B4farBau.js} +1 -1
- package/dist/client/assets/{select-BVkSBqst.js → select-D-4YvNXx.js} +1 -1
- package/dist/client/assets/{select-model-DgbjHm8v.js → select-model-DiI22Jwv.js} +1 -1
- package/dist/client/assets/{self-tool-result-CF2HPjvE.js → self-tool-result-B-B340Op.js} +1 -1
- package/dist/client/assets/{seo-editor-BZIIwUJB.js → seo-editor-B_yGYAv_.js} +1 -1
- package/dist/client/assets/{settings-layout-CKHRZfSb.js → settings-layout-iYqucjkv.js} +1 -1
- package/dist/client/assets/{settings-section-CE3NSzeg.js → settings-section-BsUBVFJ8.js} +1 -1
- package/dist/client/assets/{shell-controls-CPSNcZz_.js → shell-controls-i6my0sRk.js} +1 -1
- package/dist/client/assets/{shell-layout-qGgLrw6a.js → shell-layout-DG4Th7Sa.js} +1 -1
- package/dist/client/assets/{sidebar-C2EJhhvO.js → sidebar-DjZ8_Bgz.js} +1 -1
- package/dist/client/assets/{skeleton-BWVGyUEt.js → skeleton-bTWwGB8J.js} +1 -1
- package/dist/client/assets/{sso-CAYCwQnn.js → sso-Cd42UgLn.js} +1 -1
- package/dist/client/assets/{store-CuzQiFiL.js → store-CK-ZmUB0.js} +1 -1
- package/dist/client/assets/store-registry-Ds68I-x4.js +2 -0
- package/dist/client/assets/{studio-tools-DBFaX7ST.js → studio-tools-D0fMLm7V.js} +1 -1
- package/dist/client/assets/{switch-CNRWi3FZ.js → switch-DuM464dX.js} +1 -1
- package/dist/client/assets/{tab-id-BqojNeZR.js → tab-id-DeKLgh7X.js} +1 -1
- package/dist/client/assets/{table-CdJn6WvV.js → table-D3dfbLpK.js} +1 -1
- package/dist/client/assets/{tabs-NsSjOhwR.js → tabs-dj1iCBTk.js} +1 -1
- package/dist/client/assets/{textarea-CiNKDnWv.js → textarea-CRxF7POO.js} +1 -1
- package/dist/client/assets/{toggle-group-D_BPSBzt.js → toggle-group-B4VY0SSQ.js} +1 -1
- package/dist/client/assets/{toolbar-BRqOCr64.js → toolbar-D8A674is.js} +1 -1
- package/dist/client/assets/{tooltip-C3B4U3Wy.js → tooltip-BGYjjWAN.js} +1 -1
- package/dist/client/assets/{use-ai-providers-Csc5nim3.js → use-ai-providers-CgjH1FHV.js} +1 -1
- package/dist/client/assets/{use-automations-B9hqF4wB.js → use-automations-CMDkpVsT.js} +1 -1
- package/dist/client/assets/{use-autosave-Cyx57fpY.js → use-autosave-B0s9D84g.js} +1 -1
- package/dist/client/assets/{use-capability-DRx71rlV.js → use-capability--G-xF_Og.js} +1 -1
- package/dist/client/assets/{use-clock-tick-aHpzHC9y.js → use-clock-tick-CM0hg93X.js} +1 -1
- package/dist/client/assets/{use-connection-DyHBRgFa.js → use-connection-DpYJhBKh.js} +1 -1
- package/dist/client/assets/{use-copy-D-F0c9mf.js → use-copy-BQ7oQGyC.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DLdvWiU9.js → use-create-virtual-mcp-BQtZRamd.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-C_YycABY.js → use-debounced-autosave-CfB2vsCS.js} +1 -1
- package/dist/client/assets/{use-debounced-value-B8uEa1pc.js → use-debounced-value-DcEC-O2W.js} +1 -1
- package/dist/client/assets/{use-deco-credits-OJRLasP4.js → use-deco-credits-BZq2OPer.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CZkll74C.js → use-decopilot-events-BawQIo1j.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DkRmsRGW.js → use-delete-connection-Cp2vIorn.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-B9ieKt3o.js → use-deployment-admin-CUUIYs55.js} +1 -1
- package/dist/client/assets/{use-file-configs-CQy14lQY.js → use-file-configs-DhFeY0x8.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Di2AwkTk.js → use-infinite-scroll-BIlUj38g.js} +1 -1
- package/dist/client/assets/{use-join-requests-BXkB9jis.js → use-join-requests-1_1qNku7.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-B7k8gEXo.js → use-mcp-auth-status-CXemEgap.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B2NT7Yn8.js → use-mcp-client-hJ7mIAn7.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DTp1Iuhl.js → use-mcp-tools-CnwAWgJR.js} +1 -1
- package/dist/client/assets/{use-members-W-L-efpC.js → use-members-Ua0LPsxz.js} +1 -1
- package/dist/client/assets/{use-mobile-DjIISmPe.js → use-mobile-xN7Y8sSl.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-C51Rlzqu.js → use-navigate-to-agent-9O4Y23Kg.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-89JHqrqV.js → use-org-auth-client-016602L4.js} +1 -1
- package/dist/client/assets/{use-org-sso-DjMWSiHs.js → use-org-sso-aOIIMPbt.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BgC8nykh.js → use-organization-roles-DlRrXoTd.js} +1 -1
- package/dist/client/assets/{use-organization-settings-B8UaSk9b.js → use-organization-settings-qBaZDtoo.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BFTijxiT.js → use-registry-connections-oX3jJfwb.js} +1 -1
- package/dist/client/assets/{use-secrets-Db_sK9jg.js → use-secrets-CgA8v1MJ.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CN0VR5j3.js → use-status-sounds-BBSWRBro.js} +1 -1
- package/dist/client/assets/{use-tags-CoubQDew.js → use-tags-BkvBfhtl.js} +1 -1
- package/dist/client/assets/{use-view-mode-D83KuKyT.js → use-view-mode-DOmgvnBn.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-cIVDeGtC.js → use-virtual-mcp-BW2aFPMp.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Zg7SxnJM.js +1 -0
- package/dist/client/assets/{useQueries-8o3cmVmk.js → useQueries-DuUKkXFV.js} +1 -1
- package/dist/client/assets/{useRouterState-BTNAcN5V.js → useRouterState-D8iwaf8J.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-D1hLYraw.js +1 -0
- package/dist/client/assets/{users-C0Tl9kDJ.js → users-BpDpX9YJ.js} +1 -1
- package/dist/client/assets/{variant-calendar-BTs0kt_F.js → variant-calendar-Bq3bHPWO.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CmoxDY4e.js → view-mode-toggle-B0u8nK2q.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/client/install.sh +69 -0
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/project-app-view-aaDjfuhs.js +0 -1
- package/dist/client/assets/record-editor-DA1E65mv.js +0 -1
- package/dist/client/assets/registry-D1l-18XW.js +0 -2
- package/dist/client/assets/store-registry-DtkX06Hy.js +0 -2
- package/dist/client/assets/useInfiniteQuery-2Uj65vAx.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-C1ZnfWbf.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
61
61
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
62
62
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
63
|
-
<script type="module" crossorigin src="/assets/index-
|
|
63
|
+
<script type="module" crossorigin src="/assets/index-CDVDDq-f.js"></script>
|
|
64
64
|
<link rel="stylesheet" crossorigin href="/assets/index-DolLSrq-.css">
|
|
65
65
|
</head>
|
|
66
66
|
<body>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# deco studio installer for macOS (Apple Silicon).
|
|
3
|
+
#
|
|
4
|
+
# curl -fsSL https://studio.decocms.com/install.sh | sh
|
|
5
|
+
#
|
|
6
|
+
# What this does, in order (no sudo anywhere):
|
|
7
|
+
# 1. adds the decocms/studio Homebrew tap (this repo doubles as the tap)
|
|
8
|
+
# 2. marks the tap trusted (Homebrew >= 6 otherwise prompts on install)
|
|
9
|
+
# 3. installs or upgrades the deco-studio cask
|
|
10
|
+
# 4. while builds are unsigned: clears macOS's quarantine flag so the app
|
|
11
|
+
# can launch (macOS reports unsigned downloads as "damaged"). This step
|
|
12
|
+
# is skipped automatically once releases are signed and notarized.
|
|
13
|
+
#
|
|
14
|
+
# Source: https://github.com/decocms/studio (apps/web/public/install.sh)
|
|
15
|
+
set -eu
|
|
16
|
+
|
|
17
|
+
APP="/Applications/deco.app"
|
|
18
|
+
CASK="deco-studio"
|
|
19
|
+
TAP="decocms/studio"
|
|
20
|
+
TAP_URL="https://github.com/decocms/studio"
|
|
21
|
+
RELEASES="https://github.com/decocms/studio/releases"
|
|
22
|
+
|
|
23
|
+
say() { printf '\033[1m[deco studio]\033[0m %s\n' "$1"; }
|
|
24
|
+
fail() {
|
|
25
|
+
printf '\033[1;31m[deco studio]\033[0m %s\n' "$1" >&2
|
|
26
|
+
exit 1
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[ "$(uname -s)" = "Darwin" ] ||
|
|
30
|
+
fail "this installer is macOS-only. Downloads: $RELEASES"
|
|
31
|
+
|
|
32
|
+
[ "$(uname -m)" = "arm64" ] ||
|
|
33
|
+
fail "only Apple Silicon builds exist so far. Watch $RELEASES for Intel."
|
|
34
|
+
|
|
35
|
+
command -v brew > /dev/null 2>&1 ||
|
|
36
|
+
fail "Homebrew is required (https://brew.sh) — or grab the DMG: $RELEASES"
|
|
37
|
+
|
|
38
|
+
say "adding the $TAP tap"
|
|
39
|
+
brew tap "$TAP" "$TAP_URL"
|
|
40
|
+
|
|
41
|
+
# Homebrew >= 6 gates third-party taps behind a trust prompt; trusting here
|
|
42
|
+
# keeps the install below non-interactive. Older Homebrew has no such command.
|
|
43
|
+
if brew trust --help > /dev/null 2>&1; then
|
|
44
|
+
say "trusting the $TAP tap"
|
|
45
|
+
brew trust "$TAP"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
if brew list --cask "$CASK" > /dev/null 2>&1; then
|
|
49
|
+
say "upgrading $CASK"
|
|
50
|
+
brew upgrade --cask "$CASK" ||
|
|
51
|
+
say "already up to date"
|
|
52
|
+
else
|
|
53
|
+
say "installing $CASK"
|
|
54
|
+
brew install --cask "$CASK"
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
[ -d "$APP" ] || fail "expected $APP after install; check brew output above"
|
|
58
|
+
|
|
59
|
+
# Unsigned builds arrive quarantined and macOS refuses to open them
|
|
60
|
+
# ("damaged"). Only strip the flag while Gatekeeper actually rejects the
|
|
61
|
+
# app — once releases are signed + notarized this becomes a no-op.
|
|
62
|
+
if ! spctl --assess --type execute "$APP" > /dev/null 2>&1; then
|
|
63
|
+
say "builds are not yet notarized; clearing the quarantine flag"
|
|
64
|
+
xattr -dr com.apple.quarantine "$APP"
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
say "launching"
|
|
68
|
+
open "$APP"
|
|
69
|
+
say "done — deco.app is installed. Upgrade later with: brew upgrade --cask $CASK"
|
package/dist/server/cli.js
CHANGED
|
@@ -83446,7 +83446,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
|
|
|
83446
83446
|
`);function v(d){if(t===void 0)return!0;let D=yq(d),_=D&&yq(t)?bau(t):t,N=D?bau(d):Cau(d),Z=Ert(_,N);return Z===""||!Z.startsWith("..")&&!frt(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(l6i)},reconcile(){let d=Date.now();for(let D of l.all().map(l6i)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!yq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(l6i)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!yq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!K_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=K_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=qau(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}urt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=l6i(D),N=0,Z=null;if(yq(_.sandboxPath)&&K_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=K_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
|
|
83447
83447
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")Z=qau(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Kbi=()=>{};function hrt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function rau(i,u){if(process.platform==="win32")return;for(let t of hrt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var mau=()=>{};import{existsSync as vrt,readdirSync as drt}from"fs";import{rm as Drt}from"fs/promises";import{join as eau}from"path";async function aau(i,u={}){let t=u.detach??_rt,f=u.exists??vrt,l=u.readdir??((w)=>drt(w)),E=u.rm??((w)=>Drt(w,{recursive:!0,force:!0})),c=eau(i,"org");if(f(c))for(let w of l(c))t(eau(c,w));await E(i)}var _rt=(i)=>rau(i,process.platform==="darwin");var oau=O(()=>{mau()});import{join as Nrt}from"path";function sau(i){let u=i.purge??aau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await F1(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??Nrt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof H6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var pau=O(()=>{Z4();oau()});import{randomBytes as Ort}from"crypto";import{mkdir as Zrt}from"fs/promises";import{createServer as Brt}from"net";import{join as Frt}from"path";function iou(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function uou(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function tou(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function grt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function Urt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:grt(i.repo?.cloneUrl)}}function fou(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??Trt,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>Frt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=Urt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,U;try{await Zrt(B,{recursive:!0}),console.log(`[user-desktop] ensure handle=${N.handle} repo=${N.repo?.cloneUrl??"(none)"} branch=${N.repo?.branch??"(none)"} runtime=${N.workload?.runtime??"(autodetect)"} pm=${N.workload?.packageManager??"(autodetect)"}`),U=Ort(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:U,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw iou("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},U)}catch(j){throw iou(uou(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((uou(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:tou(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:tou(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${T} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:T,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:U,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function Trt(){return new Promise((i,u)=>{let t=Brt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var lou=()=>{};import{randomUUID as Art}from"crypto";import{hostname as yrt}from"os";async function Eou(i){let u=yrt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=HMu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=c6i({path:E6i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=fou({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:Art(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let S=await bMu(i.dataDir);if(S)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=S}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(S)=>K.kill(S),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,S)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:r},ui=gh(K.operator??null);if(ui)Q.operator=ui;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await T_(`http://127.0.0.1:${j}`,S,Q)},waitForHealth:async(j)=>{await lli(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await Xau({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=MMu({provider:w}),v=async()=>{let j=await U_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)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 j.accessToken},d=await nau(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Jbi(),N=Hau(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=Uni({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let U=await Fau(g);console.log("[link-daemon] active transport=tunnel");let T,A=new Promise((j)=>{T=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
|
|
83448
83448
|
Shutting down\u2026`),N();try{await U.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),T(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},U.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=sau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var cou=O(()=>{_ni();rM();zMu();CMu();qMu();Tni();gau();Jau();zau();Rau();VM();Kbi();pau();lou()});function Ybi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as Prt}from"net";async function Irt(i){for(let u of Grt)if(await Wbi(i,u))return u;return null}async function wou(i,{intervalMs:u=1000,sleepFn:t=P0}={}){for(;;){let f=await Irt(i);if(f)return f;await t(u)}}function Wbi(i,u){return new Promise((t)=>{let f=Prt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var Grt;var Lbi=O(()=>{Z4();Grt=["localhost","127.0.0.1","0.0.0.0"]});function $ou(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function xrt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function hou(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${xrt(i,u)}`].join(`
|
|
83449
|
-
`)}var Sbi;var vou=O(()=>{Sbi=class Sbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var GS;var w6i=O(()=>{GS={name:"decocms",version:"4.147.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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Pq={};yi(Pq,{printBanner:()=>Xrt,bannerLines:()=>dou,BANNER_LINES:()=>$6i,BANNER_GRADIENT:()=>h6i});function jrt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function dou(i){let u=$6i.map((t,f)=>{let[l,E,c]=jrt(h6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Xrt(i){console.log("");for(let u of dou(i))console.log(u);console.log("")}var $6i,h6i;var IS=O(()=>{$6i=[" \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 "],h6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Jrt,Text as Dou}from"ink";import{jsx as Krt,jsxs as _ou}from"react/jsx-runtime";function v6i({version:i}){return _ou(Jrt,{flexDirection:"column",marginTop:1,children:[$6i.map((u,t)=>Krt(Dou,{color:h6i[t],children:u},t)),_ou(Dou,{dimColor:!0,children:[" v",i]})]})}var Qbi=O(()=>{IS()});function Nou(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function xS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Oou(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Zou(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Rbi={};yi(Rbi,{subscribeLinkState:()=>Hbi,setSelectedHandle:()=>zbi,setRemoving:()=>_6i,setPersistedSandboxes:()=>brt,setPendingConfirm:()=>Iq,setMachine:()=>Hrt,setLogPath:()=>nrt,setLinkActions:()=>Rrt,setIngress:()=>Qrt,setDaemonError:()=>zrt,setClusterUrl:()=>Srt,setCluster:()=>Lrt,setActionError:()=>D6i,resetLinkStateForTests:()=>Mrt,removeSandboxRow:()=>nbi,pushSandboxEvent:()=>Crt,getLinkState:()=>Gq,applySandboxEvent:()=>Bou});function Wrt(i){return i==="spawning"||i==="ready"||i==="failed"}function Bou(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Fou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Yrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of d6i)i()}function Gq(){return Ef}function Hbi(i){return d6i.add(i),()=>d6i.delete(i)}function Lrt(i){Ef={...Ef,cluster:i},b3()}function Srt(i){Ef={...Ef,clusterUrl:i},b3()}function Qrt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},b3()}function Hrt(i){Ef={...Ef,machine:i},b3()}function zrt(i){Ef={...Ef,daemonError:i},b3()}function nrt(i){Ef={...Ef,logPath:i},b3()}function zbi(i){Ef={...Ef,selectedHandle:i},b3()}function Iq(i){Ef={...Ef,pendingConfirm:i},b3()}function D6i(i){Ef={...Ef,actionError:i},b3()}function _6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},b3()}function Rrt(i){Ef={...Ef,actions:i},b3()}function nbi(i){let u=xS(Ef.sandboxes),t=Zou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function brt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(Wrt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},b3()}function Crt(i){Ef={...Ef,sandboxes:Bou(Ef.sandboxes,i)},b3()}function Mrt(){Ef=Fou(),d6i.clear()}var Yrt=20,Ef,d6i;var xq=O(()=>{Ef=Fou(),d6i=new Set});import{spawn as qrt}from"child_process";function Vrt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function gou(i,u=process.platform){let t=Vrt(u);try{qrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Uou=()=>{};function Tou(i,u={}){let t=u.openUrl??gou,f=Gq(),l=xS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":zbi(Oou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);D6i(null),Iq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Iq(null),w===null||!c)return;_6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)nbi(w.handle);else _6i(w.handle,!1),D6i($.error)});return}case"confirmNo":Iq(null);return;case"quit":if(c)c.quit();return}}var Aou=O(()=>{xq();Uou()});function you(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Pou={};yi(Pou,{LinkApp:()=>art});import{Box as C1,Text as vl,useInput as rrt}from"ink";import{useSyncExternalStore as mrt}from"react";import{jsx as Xf,jsxs as Xh}from"react/jsx-runtime";function ert(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function art(){let i=mrt(Hbi,Gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=xS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return rrt((l,E)=>{let c=you(l,E,i.pendingConfirm!==null);if(c!==null)Tou(c)}),Xh(C1,{flexDirection:"column",children:[Xf(v6i,{version:GS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=ert(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Nou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var kS;var Gou=O(()=>{w6i();Qbi();Aou();xq();kS={project:18,branch:22,status:14}});var Iou={};yi(Iou,{runLinkCommand:()=>lmt});import{closeSync as ort,mkdirSync as srt,openSync as prt,writeSync as imt}from"fs";import{homedir as umt}from"os";import{join as bbi}from"path";function tmt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{imt(u,`${Ybi(l)}
|
|
83449
|
+
`)}var Sbi;var vou=O(()=>{Sbi=class Sbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var GS;var w6i=O(()=>{GS={name:"decocms",version:"4.148.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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Pq={};yi(Pq,{printBanner:()=>Xrt,bannerLines:()=>dou,BANNER_LINES:()=>$6i,BANNER_GRADIENT:()=>h6i});function jrt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function dou(i){let u=$6i.map((t,f)=>{let[l,E,c]=jrt(h6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Xrt(i){console.log("");for(let u of dou(i))console.log(u);console.log("")}var $6i,h6i;var IS=O(()=>{$6i=[" \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 "],h6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Jrt,Text as Dou}from"ink";import{jsx as Krt,jsxs as _ou}from"react/jsx-runtime";function v6i({version:i}){return _ou(Jrt,{flexDirection:"column",marginTop:1,children:[$6i.map((u,t)=>Krt(Dou,{color:h6i[t],children:u},t)),_ou(Dou,{dimColor:!0,children:[" v",i]})]})}var Qbi=O(()=>{IS()});function Nou(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function xS(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Oou(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Zou(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var Rbi={};yi(Rbi,{subscribeLinkState:()=>Hbi,setSelectedHandle:()=>zbi,setRemoving:()=>_6i,setPersistedSandboxes:()=>brt,setPendingConfirm:()=>Iq,setMachine:()=>Hrt,setLogPath:()=>nrt,setLinkActions:()=>Rrt,setIngress:()=>Qrt,setDaemonError:()=>zrt,setClusterUrl:()=>Srt,setCluster:()=>Lrt,setActionError:()=>D6i,resetLinkStateForTests:()=>Mrt,removeSandboxRow:()=>nbi,pushSandboxEvent:()=>Crt,getLinkState:()=>Gq,applySandboxEvent:()=>Bou});function Wrt(i){return i==="spawning"||i==="ready"||i==="failed"}function Bou(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Fou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Yrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of d6i)i()}function Gq(){return Ef}function Hbi(i){return d6i.add(i),()=>d6i.delete(i)}function Lrt(i){Ef={...Ef,cluster:i},b3()}function Srt(i){Ef={...Ef,clusterUrl:i},b3()}function Qrt(i,u){Ef={...Ef,ingressPort:i,ingressUrl:u},b3()}function Hrt(i){Ef={...Ef,machine:i},b3()}function zrt(i){Ef={...Ef,daemonError:i},b3()}function nrt(i){Ef={...Ef,logPath:i},b3()}function zbi(i){Ef={...Ef,selectedHandle:i},b3()}function Iq(i){Ef={...Ef,pendingConfirm:i},b3()}function D6i(i){Ef={...Ef,actionError:i},b3()}function _6i(i,u){if(Ef.removingHandles.has(i)===u)return;let t=new Set(Ef.removingHandles);if(u)t.add(i);else t.delete(i);Ef={...Ef,removingHandles:t},b3()}function Rrt(i){Ef={...Ef,actions:i},b3()}function nbi(i){let u=xS(Ef.sandboxes),t=Zou(u,i,Ef.selectedHandle),f=new Map(Ef.sandboxes);f.delete(i);let l=new Set(Ef.removingHandles);l.delete(i),Ef={...Ef,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function brt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of Ef.sandboxes)if(Wrt(f.status))u.set(t,f);Ef={...Ef,sandboxes:u},b3()}function Crt(i){Ef={...Ef,sandboxes:Bou(Ef.sandboxes,i)},b3()}function Mrt(){Ef=Fou(),d6i.clear()}var Yrt=20,Ef,d6i;var xq=O(()=>{Ef=Fou(),d6i=new Set});import{spawn as qrt}from"child_process";function Vrt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function gou(i,u=process.platform){let t=Vrt(u);try{qrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Uou=()=>{};function Tou(i,u={}){let t=u.openUrl??gou,f=Gq(),l=xS(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":zbi(Oou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);D6i(null),Iq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Iq(null),w===null||!c)return;_6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)nbi(w.handle);else _6i(w.handle,!1),D6i($.error)});return}case"confirmNo":Iq(null);return;case"quit":if(c)c.quit();return}}var Aou=O(()=>{xq();Uou()});function you(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var Pou={};yi(Pou,{LinkApp:()=>art});import{Box as C1,Text as vl,useInput as rrt}from"ink";import{useSyncExternalStore as mrt}from"react";import{jsx as Xf,jsxs as Xh}from"react/jsx-runtime";function ert(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function art(){let i=mrt(Hbi,Gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=xS(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return rrt((l,E)=>{let c=you(l,E,i.pendingConfirm!==null);if(c!==null)Tou(c)}),Xh(C1,{flexDirection:"column",children:[Xf(v6i,{version:GS.version}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),Xf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Xf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Xf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Xf(C1,{marginBottom:1,children:Xf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Xf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=ert(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[Xf(C1,{width:2,flexShrink:0,children:Xf(vl,{color:"cyan",children:c?"\u203A":" "})}),Xf(C1,{width:kS.project,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),Xf(C1,{width:kS.branch,flexShrink:0,marginRight:1,children:Xf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),Xf(C1,{width:kS.status,flexShrink:0,marginRight:1,children:Xf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),Xf(C1,{flexGrow:1,children:Xf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Xf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Xf(C1,{marginTop:1,children:Xf(vl,{color:"yellow",children:Nou(i.pendingConfirm)})}):null,i.actionError?Xf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,Xf(C1,{marginTop:1,children:Xf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var kS;var Gou=O(()=>{w6i();Qbi();Aou();xq();kS={project:18,branch:22,status:14}});var Iou={};yi(Iou,{runLinkCommand:()=>lmt});import{closeSync as ort,mkdirSync as srt,openSync as prt,writeSync as imt}from"fs";import{homedir as umt}from"os";import{join as bbi}from"path";function tmt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{imt(u,`${Ybi(l)}
|
|
83450
83450
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(Ybi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function fmt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.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 lmt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??bbi(umt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await Wbi(u,"127.0.0.1"))throw new Sbi(u);let $=bbi(t,"sandboxes");c=c6i({path:E6i(t),managedSandboxRoot:$});let h=await ili({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await fmt(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (Gou(),Pou)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:U,setDaemonError:T,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (xq(),Rbi));srt(t,{recursive:!0});let j=bbi(t,"link.log");E=prt(j,"w"),G(j),I(v),U(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=tmt(T,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (IS(),Pq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await Eou({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (xq(),Rbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error($ou($)?hou(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{ort(E)}catch{}w()}}var xou=O(()=>{Dni();cou();Lbi();vou();Kbi()});var mbi={};yi(mbi,{resolveDevLinkClusterUrl:()=>$mt,populateDevLinkToxiProxy:()=>You,isDevLinkToxiProxyEnabled:()=>wmt,ensureDevLinkToxiProxy:()=>_mt,buildDevLinkToxiProxyConfig:()=>Jou,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>jou,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Xou});function wmt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Cbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Jou(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=Cbi(i.apiPort,"apiPort"),f=Cbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Cbi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:jou,proxyName:Xou,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function $mt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Mbi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function rbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Kou(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Kou(i.cause)}async function qbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${rbi(l)}`,{cause:l})}}async function You(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await qbi(u,"reset",t,{method:"POST"});await Mbi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await qbi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await Mbi(E,"populate",l)}async function hmt(i,u){let t=`${i.apiUrl}/version`;try{await F1(async()=>{let f=await qbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(cmt)});await Mbi(f,"readiness check",t)},{maxAttempts:Emt,minTimeout:kou,maxTimeout:kou,multiplier:1,jitter:0,isRetriable:(f)=>!Kou(f)})}catch(f){let l=f instanceof H6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${rbi(l)}`,{cause:l})}}async function vmt(i){if(i===null)return"";return await new Response(i).text()}async function Vbi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(w){throw Error(`Docker command failed to start (${t}): ${rbi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,vmt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function dmt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Vbi(["rm","-f",t],{ignoreFailure:!0}),await Vbi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function Dmt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Vbi(["rm","-f",t],{ignoreFailure:!0})}async function _mt(i){let u=Jou(i),t=i.startDaemon??dmt,f=i.stopDaemon??(i.startDaemon===void 0?Dmt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await hmt(u,l),await You(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var jou="ToxiProxy",Xou="dev_link_studio",Emt=20,kou=100,cmt=100;var ebi=O(()=>{Z4()});var Wou={};yi(Wou,{migrateBetterAuth:()=>abi});import{getMigrations as Nmt}from"better-auth/db";import{sso as Omt}from"@better-auth/sso";import{organization as Zmt}from"@decocms/better-auth/plugins";import{admin as Bmt,apiKey as Fmt,jwt as gmt,magicLink as Umt,mcp as Tmt,openAPI as Amt}from"better-auth/plugins";import{emailOTP as ymt}from"better-auth/plugins/email-otp";async function abi(i){let t={database:nM(i||Z_()),plugins:[Zmt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),Bmt(),Fmt(),gmt(),Amt(),Tmt({loginPage:"/login"}),Omt(),Umt({sendMagicLink:async()=>{}}),ymt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await Nmt(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var obi=O(()=>{b6()});var sbi={};yi(sbi,{up:()=>Pmt,down:()=>Gmt});import{sql as Fd}from"kysely";async function Pmt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Fd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Fd`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 Gmt(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 Lou=()=>{};var pbi={};yi(pbi,{up:()=>Imt,down:()=>xmt});import{sql as Sou}from"kysely";async function Imt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Sou`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Sou`CURRENT_TIMESTAMP`)).execute()}async function xmt(i){await i.schema.dropTable("organization_settings").execute()}var Qou=()=>{};var iCi={};yi(iCi,{up:()=>kmt,down:()=>jmt});async function kmt(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 jmt(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 uCi={};yi(uCi,{up:()=>Xmt,down:()=>Jmt});async function Xmt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.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 Jmt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.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 tCi={};yi(tCi,{up:()=>Kmt,down:()=>Ymt});async function Kmt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Ymt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var fCi={};yi(fCi,{up:()=>Lmt,down:()=>Smt});import{sql as Wmt}from"kysely";async function Lmt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",Wmt`text`).execute()}async function Smt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Hou=()=>{};var lCi={};yi(lCi,{up:()=>Qmt,down:()=>Hmt});async function Qmt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.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 Hmt(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 ECi={};yi(ECi,{up:()=>zmt,down:()=>nmt});import{sql as kq}from"kysely";async function zmt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(kq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(kq`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 nmt(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 zou=()=>{};var cCi={};yi(cCi,{up:()=>bmt,down:()=>Cmt});import{sql as Rmt}from"kysely";async function bmt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Cmt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(Rmt`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 nou=()=>{};var wCi={};yi(wCi,{up:()=>Mmt,down:()=>qmt});import{sql as N6i}from"kysely";async function Mmt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(N6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(N6i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(N6i`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 N6i`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 qmt(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 Rou=()=>{};var $Ci={};yi($Ci,{up:()=>Vmt,down:()=>rmt});async function Vmt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function rmt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var hCi={};yi(hCi,{up:()=>mmt,down:()=>emt});import{sql as O6i}from"kysely";async function mmt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await O6i`
|
|
83451
83451
|
UPDATE gateways
|
|
83452
83452
|
SET tool_selection_mode = CASE
|