@runeya/runeya 2.0.45 → 2.0.47
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/agent/index.js +4 -4
- package/agent/index.js.map +1 -1
- package/agent-manager-JJYZDLNB.js +7 -0
- package/{chunk-B6C5AXMK.js → chunk-5PRQBES2.js} +247 -63
- package/chunk-5PRQBES2.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-ZKQETCHR.js → src-IFPDFIDZ.js} +1100 -491
- package/src-IFPDFIDZ.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-IDhv2vYG.js → AgentScalarChatInterface.vue-Z3BLbola.js} +1 -1
- package/web/assets/AgentTerminalPage-BlQ3k7VX.css +1 -0
- package/web/assets/AgentTerminalPage-Dg4kOMbK.js +1 -0
- package/web/assets/AiChatPage-0igbt0Ie.js +1 -0
- package/web/assets/AppLayout-BQpUnN2N.js +1 -0
- package/web/assets/{AppLayout-Bqs7ug1K.css → AppLayout-D1bdzemo.css} +1 -1
- package/web/assets/{AuditPage-D__LOvkN.js → AuditPage-zfim5OLa.js} +1 -1
- package/web/assets/{CloudAccountPage-ll1uAGyN.js → CloudAccountPage-BD-L27Wl.js} +1 -1
- package/web/assets/CloudAccountPage-CHZG-vv-.js +1 -0
- package/web/assets/CloudMessagingPage-BnaGxzNK.js +2 -0
- package/web/assets/CloudMessagingPage-x4bDmgyb.css +1 -0
- package/web/assets/{DashboardPage-XFl45skz.js → DashboardPage-ByzcpJV7.js} +1 -1
- package/web/assets/{EditorIcon-DHxnxi15.js → EditorIcon-jk0Nz8Mr.js} +1 -1
- package/web/assets/{EnvironmentForm-D_JXws5q.js → EnvironmentForm-BH4EMxM6.js} +1 -1
- package/web/assets/{EnvironmentFormPage-7YhkQZnF.js → EnvironmentFormPage-Bwjr8SsV.js} +1 -1
- package/web/assets/EnvironmentListPage-BgqHe-4p.js +1 -0
- package/web/assets/EnvironmentListPage-BwgJscFQ.css +1 -0
- package/web/assets/{EnvironmentSelector-zX2RSq7p.js → EnvironmentSelector-CBh21uuY.js} +1 -1
- package/web/assets/{KanbanBoardPage-CYiVnEsW.js → KanbanBoardPage-Dg0Od24D.js} +3 -3
- package/web/assets/{KanbanListPage-DA8VLR_A.js → KanbanListPage-C6bsD-gJ.js} +1 -1
- package/web/assets/LaunchProjectPage-BZe2kaRt.js +1 -0
- package/web/assets/LaunchProjectPage-Bqm88kwd.css +1 -0
- package/web/assets/LaunchServicesPage-B4xd4APa.js +1 -0
- package/web/assets/LaunchServicesPage-pWREsZTD.css +1 -0
- package/web/assets/{LogViewer-DfbwNIUv.js → LogViewer-BhaSYgvw.js} +1 -1
- package/web/assets/{ProcessControls-CZV4iizX.js → ProcessControls-lDF1qNIM.js} +1 -1
- package/web/assets/{ProcessDetailPage-CeatPGNs.js → ProcessDetailPage-DwaApuHs.js} +1 -1
- package/web/assets/{ProcessMetrics-C5U4PvOh.js → ProcessMetrics-rGmADRtS.js} +1 -1
- package/web/assets/ProjectDetailPage-BoIcnBMH.js +1 -0
- package/web/assets/ProjectDetailPage-hcU-rKhJ.css +1 -0
- package/web/assets/ProjectListPage-C3JtBL-6.js +1 -0
- package/web/assets/ProjectListPage-DYs6X7r2.css +1 -0
- package/web/assets/{RandomJobTestPage-ycTTIaQd.js → RandomJobTestPage-CndKGKYR.js} +1 -1
- package/web/assets/{ScenarioEditorPage-C1EV-XSW.js → ScenarioEditorPage-DU7tb4M-.js} +1 -1
- package/web/assets/{SendToChatDialog-28Mlo-hb.js → SendToChatDialog-CCRCitBB.js} +1 -1
- package/web/assets/{ServiceControlsBar-CdWFcbXZ.js → ServiceControlsBar-BjyMYoiN.js} +1 -1
- package/web/assets/{ServiceDetailPage-BvoD3SB6.css → ServiceDetailPage-BRg1byDZ.css} +1 -1
- package/web/assets/ServiceDetailPage-JqpmujmY.js +2 -0
- package/web/assets/ServiceFormPage-B8jcMT3b.css +1 -0
- package/web/assets/ServiceFormPage-DgNwiYzM.js +1 -0
- package/web/assets/{SettingsPage-B1jaxJGj.js → SettingsPage-BZM3WWqc.js} +4 -4
- package/web/assets/{UnlockPage-ktTtBOr2.js → UnlockPage-BcZ2vL57.js} +1 -1
- package/web/assets/{VariablesTable-B9Nhdk1_.js → VariablesTable-0Gz2ffiL.js} +1 -1
- package/web/assets/{VaultMigrationPage-Dy48s3x-.js → VaultMigrationPage-BxTBDL19.js} +1 -1
- package/web/assets/{VersionBadge-BdlVr8Tg.js → VersionBadge-DvsaGqvh.js} +1 -1
- package/web/assets/WikiPage-DkEQXkzp.js +1 -0
- package/web/assets/{WikiView-CJDAiZr5.js → WikiView-e81ejcA8.js} +1 -1
- package/web/assets/{add-scalar-classes-pA8osZfz.js → add-scalar-classes-Bh8ghfnQ.js} +3 -3
- package/web/assets/auth-errors-C1B7h06f.js +1 -0
- package/web/assets/{autocomplete-N91is6wh.js → autocomplete-CDWkaHAi.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-BllfU_oB.js → basic-shape-diamond.svg-7zqPzGW0.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-DW5bh6IP.js → basic-shape-hexagon.svg-DQwxqMd2.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-9uuUiv5o.js → basic-shape-primary-circle-ellipse-round.svg-Bqm796vK.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-B64Eo9nB.js → basic-shape-primary-square-rectangle.svg-D7eyO04i.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-DOPLFilS.js → basic-shape-shield.svg-Bnc_pFVA.js} +1 -1
- package/web/assets/{browser-SZtn0i0X.js → browser-DeXg6zUY.js} +1 -1
- package/web/assets/{browser-DueDd93t.js → browser-LxxhMX-Z.js} +1 -1
- package/web/assets/{card-COABLB3K.js → card-RaXQSIfv.js} +1 -1
- package/web/assets/{checkbox-B_GT2gG5.js → checkbox-DnpUXs7B.js} +1 -1
- package/web/assets/{chip--NXSwDoR.js → chip-0f0r_-zR.js} +1 -1
- package/web/assets/{client-BhFbvoQd.js → client-CTzGkOjO.js} +1 -1
- package/web/assets/cloud-chat.store-D2oJ_DFn.js +1 -0
- package/web/assets/{cloud-session-BSsRB6P3.js → cloud-session-BLn7b3ke.js} +1 -1
- package/web/assets/{column-BtS8Diqq.js → column-DqAehgUU.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-BzjC7P3F.js → computer-device-desktop-monitor.svg-k2x9Oiiu.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-BecVq71S.js → computer-device-desktop.svg-CyFljvrh.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-Dme_bl6m.js → computer-device-laptop.svg-ZKpV0gtW.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-DCxv5fub.js → computer-device-mobile-phone-android-samsung-back.svg-BkRkRpCh.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg--sSW4sfn.js → computer-device-mobile-phone-android-samsung.svg-gpUXFo9R.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-h5Po-TDX.js → computer-device-mobile-phone-iphone-x-back.svg-CJwr0WJ3.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-C2Uy1WjT.js → computer-device-mobile-phone-iphone-x.svg-BsPF_njN.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-CaeEG4WK.js → computer-device-mobile-tablet-touch.svg-DON7qRSP.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-BpXku7YF.js → computer-device-mobile-tablet.svg-BPnT3MvS.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-aNAbOQCS.js → computer-device-network-ethernet-cat6.svg-Bpjv_2ub.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-ClT8Xavc.js → computer-device-network-lan-www.svg-BhXBIyrf.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-BBVSSCLm.js → computer-device-network-wifi-connection.svg-DUaA1GcU.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-DHEuRciK.js → computer-device-network-wifi-router.svg-k_DqQho1.js} +1 -1
- package/web/assets/{cssMode-X03N01aE.js → cssMode-CfVTS8OM.js} +1 -1
- package/web/assets/{divider-B8p6MBJX.js → divider-C1huit3M.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-2iSCfC0H.js → ecology-science-erlenmeyer-flask.svg-D7pbgLTT.js} +1 -1
- package/web/assets/{fieldset-B9fGvXQ_.js → fieldset-BVRjgmg4.js} +1 -1
- package/web/assets/{freemarker2-BR_8OWIK.js → freemarker2-DsY_gjrP.js} +1 -1
- package/web/assets/{handlebars-B3tZa--p.js → handlebars-mh1HrGq7.js} +1 -1
- package/web/assets/{html-BZBK1HMw.js → html-BsaAhzOa.js} +1 -1
- package/web/assets/{htmlMode-BVt6cDn5.js → htmlMode-pIhI3cAi.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-CGclepmP.js → image-flash-lightning.svg-DDbhd-eu.js} +1 -1
- package/web/assets/{image-picture-flower.svg-Cl3xtcRn.js → image-picture-flower.svg-Bbx1pu02.js} +1 -1
- package/web/assets/{index-BqCmf99K.css → index-D7XqcLhE.css} +1 -1
- package/web/assets/{index-BPW4FgHw.js → index-Do0zA8cN.js} +215 -215
- package/web/assets/{interface-alert-exclamation-diamond.svg-CmooSrfz.js → interface-alert-exclamation-diamond.svg-DUJeN1hs.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-CkbjudIG.js → interface-alert-exclamation-triangle-warning.svg-5y99yZSY.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BVOJniJB.js → interface-alert-information-circle.svg-DPGP01ZU.js} +1 -1
- package/web/assets/{interface-award-crown.svg-BtCDhizx.js → interface-award-crown.svg-GDQ8ZRUh.js} +1 -1
- package/web/assets/{interface-bookmark.svg-CI3C_CEm.js → interface-bookmark-tag.svg-D1NUMLB5.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DpZpJCxG.js → interface-bookmark.svg-CTZlXD4R.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-DeSRwc9I.js → interface-calendar-date-one.svg-DXo4raY8.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-CsYHQiGg.js → interface-content-book-open-pages.svg-DTsCVw_D.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-DusdhNh8.js → interface-content-book-page.svg-w9azHLUe.js} +1 -1
- package/web/assets/{interface-content-file.svg-BZpRl2vg.js → interface-content-file.svg-69CCnbNb.js} +1 -1
- package/web/assets/{interface-content-folder.svg-BHyjskUa.js → interface-content-folder.svg-85PnJNaK.js} +1 -1
- package/web/assets/interface-content-folder.svg-Db3hJMdF.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-CU8KQ56k.js → interface-copy-clipboard.svg-B0AfVljN.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-sLGtjIVg.js → interface-edit-attachment.svg-mFLLqqcw.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-Kr0btLKm.js → interface-edit-binocular.svg-CHzgny3z.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-DuZj2AYt.js → interface-edit-magic-wand.svg-BbJg9LMT.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-Da6-5RAS.js → interface-edit-tool-paint-roller.svg-YKE28Xpc.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BoPw8ms_.js → interface-edit-tool-pencil.svg-Cy12MfEi.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-C3ITWbq3.js → interface-favorite-award.svg-COiLJu4w.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-GCr6RXH0.js → interface-favorite-flag.svg-C0NtaPD_.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-BY9dqVB0.js → interface-favorite-heart.svg-CcKJOjOh.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-uA4scusZ.js → interface-favorite-star.svg-C3vRaRtM.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BdSCoHYl.js → interface-favorite-stars-sparkles.svg-DN9WOkFs.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-CxNFchvq.js → interface-hierarchy-flowchart.svg-CffgUWNS.js} +1 -1
- package/web/assets/{interface-home-house.svg-DkrKouBb.js → interface-home-house.svg-B9c4N9Fi.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-I-GxkQJY.js → interface-hyperlink.svg-B8dXB276.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-BJR3bOQ-.js → interface-lighting-brightness.svg-BjFVAOW3.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-C0b_bVUd.js → interface-lock-closed.svg-DwNcKmwu.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-BtmiNLaj.js → interface-lock-open-unlock.svg-BXZeKlHt.js} +1 -1
- package/web/assets/{interface-login-key.svg-DmYxn7RL.js → interface-login-key.svg-CQnZGVMJ.js} +1 -1
- package/web/assets/{interface-search.svg-C1pVTe7C.js → interface-search.svg-CXre9Ja4.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-C42e2OTW.js → interface-setting-cog.svg-CGK2QxqV.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-o9tOlEh2.js → interface-share-megaphone-bullhorn.svg-BcdTvuin.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-Da9sYj_t.js → interface-share-rocket.svg-DIvKBIQX.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-B20KpyfR.js → interface-share-satellite.svg-DNbqAorz.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-B16T8uJ6.js → interface-share-space-ship.svg-Biobo33q.js} +1 -1
- package/web/assets/{interface-share.svg-Bwk_5ajK.js → interface-share.svg-DWjt5rBb.js} +1 -1
- package/web/assets/{interface-signal-square.svg-CAVSymjP.js → interface-signal-square.svg--hmv5CmE.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-fjss8ru1.js → interface-time-clock-circle.svg-C1GnMIQD.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-DaTX8FMo.js → interface-time-hour-glass.svg-BCRsHIbm.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-D-EFFOw7.js → interface-users-multiple.svg-CUpeUldF.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-CrrnEbU7.js → interface-weather-moon.svg-QXMY6B27.js} +1 -1
- package/web/assets/{javascript-C6MNjbYD.js → javascript-DKeyayKI.js} +1 -1
- package/web/assets/{jsonMode-CA2Tf-2T.js → jsonMode-I9zemAn2.js} +1 -1
- package/web/assets/{liquid-DBKs6KRv.js → liquid-xEdzGxP1.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BPpii0dk.js → lspLanguageFeatures-DOVjCuiu.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-lR62-873.js → mail-chat-bubble-square.svg-CR8byO78.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-Bkg6W9qr.js → mail-send-email-paper-airplane.svg-B0cIMUKH.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CbNm7aaE.js → mail-send-envelope.svg-El4e7bXy.js} +1 -1
- package/web/assets/{mdx-nUeiRsUz.js → mdx-AWoH37r-.js} +1 -1
- package/web/assets/{message-D6qRK6Jo.js → message-CATQqbP_.js} +1 -1
- package/web/assets/{minus-DoeouXPt.js → minus-Sd1wO9DO.js} +1 -1
- package/web/assets/modal-BbDElcmR.js +1 -0
- package/web/assets/{modal-kvCAAvat.js → modal-ZXFHQ6vP.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-DV9XlLpx.js → money-cashier-receipt.svg-BIEGQvlX.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-_jLRI9-z.js → money-currency-dollar-pay.svg-BgCHAYq5.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-Tnvl7X21.js → money-graph-arrow-increase.svg-q6aDu3og.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-uo4bmQha.js → money-graph-bar-chart-increase.svg-mRvG_dWg.js} +1 -1
- package/web/assets/{multiselect-BJUl25Yx.js → multiselect-BK7hJt7W.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-CFuPp8bO.js → nature-ecology-leaf.svg-DdhvC8mq.js} +1 -1
- package/web/assets/{password-Cmgp-gwd.js → password-Dnf9oU5a.js} +1 -1
- package/web/assets/{phone-telephone.svg-CPKz1YHt.js → phone-telephone.svg-CjbyxKZA.js} +1 -1
- package/web/assets/{plus-s_OJLoyY.js → plus-jYeRYaw9.js} +1 -1
- package/web/assets/process.store-C5LXrPXo.js +1 -0
- package/web/assets/{programming-bug.svg-fxsVnaeH.js → programming-bug.svg-DvDCWw4P.js} +1 -1
- package/web/assets/{programming-cloud.svg-BnU51aLl.js → programming-cloud.svg-2prWAqB7.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-BZgDGKJW.js → programming-computer-database-server.svg-CT7k5d_p.js} +1 -1
- package/web/assets/{programming-computer-database.svg-B5S5rAvT.js → programming-computer-database.svg-Dm7fpvII.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-QRzEO0n6.js → programming-module-four-layout.svg-DBv6QvEO.js} +1 -1
- package/web/assets/{programming-module-three.svg-CM_P7Vlm.js → programming-module-three.svg-BnP96bPJ.js} +1 -1
- package/web/assets/{programming-module.svg-3GTFIIEX.js → programming-module.svg-Bdr4ZdZO.js} +1 -1
- package/web/assets/{programming-script-code.svg-KtOz6fyB.js → programming-script-code.svg-DIcr6sF-.js} +1 -1
- package/web/assets/{python-Dm07kugX.js → python-C554d-pk.js} +1 -1
- package/web/assets/{razor-bhq-c8Pc.js → razor-BvOiTjBp.js} +1 -1
- package/web/assets/router-CCEIu6U5.js +1 -0
- package/web/assets/{settings.store-DkR2x1Gd.js → settings.store-DISlY-48.js} +1 -1
- package/web/assets/{shopping-cart.svg-z5f-zUgD.js → shopping-cart.svg-DoCVSOin.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-BuM8QoB9.js → shopping-gift-present.svg-CgNqOSQr.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-CWw8lTQj.js → shopping-shipping-box-parcel-package.svg-YkVPEp7J.js} +1 -1
- package/web/assets/{src-BNgzvl34.js → src-Cvt5pswj.js} +1 -1
- package/web/assets/{src-G9u1k3Z0.js → src-DKVQlKvZ.js} +1 -1
- package/web/assets/{tabpanel-C_MAwvD8.js → tabpanel-DFoLVdFR.js} +1 -1
- package/web/assets/{tag-new-circle.svg-C2PwVxge.js → tag-new-circle.svg-BeUe12X2.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-Cva7Lt5l.js → travel-map-earth-globe.svg-B1I1Ed-v.js} +1 -1
- package/web/assets/trpc-CVPkysoa.js +1 -0
- package/web/assets/{tsMode-CiozJEFc.js → tsMode-BPD-0Vep.js} +1 -1
- package/web/assets/{typescript-DjFjYcp9.js → typescript-Q2uKnndS.js} +1 -1
- package/web/assets/useAiChatDrawer-B70XYuU8.js +1 -0
- package/web/assets/useCloudOrg-CZ68epfW.js +1 -0
- package/web/assets/useProjectCatalog-Kh_sHbSD.js +1 -0
- package/web/assets/{xml-_A4d3R4e.js → xml-B0CfAsFk.js} +1 -1
- package/web/assets/{yaml-B2BOTmvS.js → yaml-B3zRI6AS.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-RQEJLSSF.js +0 -7
- package/chunk-B6C5AXMK.js.map +0 -1
- package/src-ZKQETCHR.js.map +0 -1
- package/web/assets/AgentTerminalPage-BNUuSKXa.js +0 -1
- package/web/assets/AgentTerminalPage-CQxk6jVs.css +0 -1
- package/web/assets/AiChatPage-i_HxoGlU.js +0 -1
- package/web/assets/AppLayout-BtVQtKnv.js +0 -1
- package/web/assets/CloudAccountPage-CEf5yWA2.js +0 -1
- package/web/assets/CloudMessagingPage-B63PMN88.js +0 -2
- package/web/assets/CloudMessagingPage-DbhpPX4q.css +0 -1
- package/web/assets/EnvironmentListPage-BDqcug66.css +0 -1
- package/web/assets/EnvironmentListPage-DyNlU_ys.js +0 -1
- package/web/assets/LaunchProjectPage-B7ch8hBp.js +0 -1
- package/web/assets/LaunchProjectPage-CxXC2U3O.css +0 -1
- package/web/assets/LaunchServicesPage-BAvD32G1.css +0 -1
- package/web/assets/LaunchServicesPage-BxbnthGj.js +0 -1
- package/web/assets/ProjectDetailPage-B42imx75.css +0 -1
- package/web/assets/ProjectDetailPage-BaZIvewr.js +0 -1
- package/web/assets/ProjectListPage-BGU6SKAr.css +0 -1
- package/web/assets/ProjectListPage-BreaFS_h.js +0 -1
- package/web/assets/ServiceDetailPage-DAq3ofhT.js +0 -2
- package/web/assets/ServiceFormPage-BER91b-6.js +0 -1
- package/web/assets/ServiceFormPage-D31sr_k0.css +0 -1
- package/web/assets/WikiPage-CMqO84ak.js +0 -1
- package/web/assets/auth-errors-B3tAiztt.js +0 -1
- package/web/assets/cloud-chat.store-DEKUnKhm.js +0 -1
- package/web/assets/interface-content-folder.svg-CE1AjWC2.js +0 -1
- package/web/assets/modal-OTFsRnDn.js +0 -1
- package/web/assets/process.store-dKQhHReg.js +0 -1
- package/web/assets/router-BamtimoJ.js +0 -1
- package/web/assets/trpc-BdB_KPws.js +0 -1
- package/web/assets/useAiChatDrawer-DpUd_4Sa.js +0 -1
- package/web/assets/useCloudOrg-DcDNmhwp.js +0 -1
- /package/{agent-manager-RQEJLSSF.js.map → agent-manager-JJYZDLNB.js.map} +0 -0
- /package/web/assets/{abap-lJFTLuI6.js → abap-DMmvWZUy.js} +0 -0
- /package/web/assets/{apex-Bp0KWav8.js → apex-D89PiTzU.js} +0 -0
- /package/web/assets/{azcli-DBOe7Uvy.js → azcli-ChnjTTA5.js} +0 -0
- /package/web/assets/{bat-Dk_NT_by.js → bat-uLzQ_FhK.js} +0 -0
- /package/web/assets/{bicep-B07Mrlc7.js → bicep-CMOK7Q1v.js} +0 -0
- /package/web/assets/{cameligo-DL5eNXGn.js → cameligo-D1AyojFH.js} +0 -0
- /package/web/assets/{clojure-BzV2Yqu_.js → clojure-D9JoUgXn.js} +0 -0
- /package/web/assets/{coffee-Bjlj5hmf.js → coffee-D-5sSToL.js} +0 -0
- /package/web/assets/{cpp-C9oth5qz.js → cpp-BqT_t_y9.js} +0 -0
- /package/web/assets/{csharp-HyGd049S.js → csharp-CuToYI91.js} +0 -0
- /package/web/assets/{csp-DjCDOBuX.js → csp-CffcxvlO.js} +0 -0
- /package/web/assets/{css-DIL8RTJ3.js → css-CUD0biQW.js} +0 -0
- /package/web/assets/{cypher-DX1zPXL5.js → cypher-ByyWL_9U.js} +0 -0
- /package/web/assets/{dart-BBQZd_ZZ.js → dart-B__ipcUn.js} +0 -0
- /package/web/assets/{dockerfile-Cj0CaWYx.js → dockerfile-DS-_8bWw.js} +0 -0
- /package/web/assets/{ecl-BjmWCTJg.js → ecl-DWsNCBUj.js} +0 -0
- /package/web/assets/{elixir-3uWoEjXX.js → elixir-OfjEy-3g.js} +0 -0
- /package/web/assets/{flow9-D4r739e9.js → flow9-BPX22hxS.js} +0 -0
- /package/web/assets/{fsharp-B3ycAx5T.js → fsharp-CVJcfIUn.js} +0 -0
- /package/web/assets/{go-DFHBjfCl.js → go-CfRHZ3yg.js} +0 -0
- /package/web/assets/{graphql-DBjIbM_e.js → graphql-BZaO3ttK.js} +0 -0
- /package/web/assets/{hcl-Buu_1Hsp.js → hcl-BF9-qUku.js} +0 -0
- /package/web/assets/{ini-CgzZhgz_.js → ini-BUvw6xhr.js} +0 -0
- /package/web/assets/{java-BczDO0q5.js → java-BZ5BNd2x.js} +0 -0
- /package/web/assets/{julia-B142kn-7.js → julia-DN38cgYT.js} +0 -0
- /package/web/assets/{kotlin-42XMP7p1.js → kotlin-CjEJKT8q.js} +0 -0
- /package/web/assets/{less-BCIsKRqU.js → less-DMEH_Nwq.js} +0 -0
- /package/web/assets/{lexon-DTDOH1dQ.js → lexon-CKQUX8Ov.js} +0 -0
- /package/web/assets/{lua-BrH-CeNs.js → lua-CuWjKLJ0.js} +0 -0
- /package/web/assets/{m3-D-eUeHOI.js → m3-CEp1bVrM.js} +0 -0
- /package/web/assets/{markdown-DwpSjZTn.js → markdown-DxtQ_puq.js} +0 -0
- /package/web/assets/{mips-DoGTrjVk.js → mips-Dx7qydpO.js} +0 -0
- /package/web/assets/{msdax-CQ8McnjQ.js → msdax-DpNCaSiO.js} +0 -0
- /package/web/assets/{mysql-Cj3do0ZO.js → mysql-C3xsBDPP.js} +0 -0
- /package/web/assets/{objective-c-BZbR8TG8.js → objective-c-BbaVHCX1.js} +0 -0
- /package/web/assets/{pascal-23PRDHRq.js → pascal-sDju2faq.js} +0 -0
- /package/web/assets/{pascaligo-CxasKTLJ.js → pascaligo-ChCdOH6b.js} +0 -0
- /package/web/assets/{perl-Dhxz2Lhx.js → perl-BCgLFj01.js} +0 -0
- /package/web/assets/{pgsql-BIbUy7yD.js → pgsql-DtKby69f.js} +0 -0
- /package/web/assets/{php-B5qS9qgM.js → php-NYvR17Qb.js} +0 -0
- /package/web/assets/{pla-Bolz9fha.js → pla-gSg-RBG0.js} +0 -0
- /package/web/assets/{postiats-Ba6dE5lj.js → postiats-BQxHyDfy.js} +0 -0
- /package/web/assets/{powerquery-2jW3ONgo.js → powerquery-DzDmbVZN.js} +0 -0
- /package/web/assets/{powershell-CMfBIiJp.js → powershell-yy4Q5BEQ.js} +0 -0
- /package/web/assets/{protobuf-BpaquOUj.js → protobuf-B_hIk9q0.js} +0 -0
- /package/web/assets/{pug-cBG82Ydz.js → pug-CdeEb1ft.js} +0 -0
- /package/web/assets/{qsharp-DtqL8Lmt.js → qsharp-CiSquEgT.js} +0 -0
- /package/web/assets/{r-CKLew4sj.js → r-D1Ocz1x4.js} +0 -0
- /package/web/assets/{redis-BdDxRU-N.js → redis-D42Y12yz.js} +0 -0
- /package/web/assets/{redshift-X4a4MlqW.js → redshift-CS62MYfG.js} +0 -0
- /package/web/assets/{restructuredtext-LA4Fv05h.js → restructuredtext-CKFSMEXw.js} +0 -0
- /package/web/assets/{ruby-CibE_WVM.js → ruby-C4gTaeU3.js} +0 -0
- /package/web/assets/{rust-BK6RsiL0.js → rust-C_f2AiHQ.js} +0 -0
- /package/web/assets/{sb-BnCCt0Qj.js → sb-CdNdpP1r.js} +0 -0
- /package/web/assets/{scala-oaBDrVqj.js → scala-N4EWaFTL.js} +0 -0
- /package/web/assets/{scheme-C-wkLC01.js → scheme-CttIARxx.js} +0 -0
- /package/web/assets/{scss-BceVGOJY.js → scss-v0wtbxaE.js} +0 -0
- /package/web/assets/{shell-CxhBAFA5.js → shell-BJdEWXbc.js} +0 -0
- /package/web/assets/{solidity-D9sXgTfx.js → solidity-DKDa59zZ.js} +0 -0
- /package/web/assets/{sophia-C4VBhIEM.js → sophia--Kw-vDpr.js} +0 -0
- /package/web/assets/{sparql-DbsK2s9y.js → sparql-BI8jS9Pc.js} +0 -0
- /package/web/assets/{sql-CuGfE0wH.js → sql-Dz6z--6O.js} +0 -0
- /package/web/assets/{st-rB6Bqb2h.js → st-CT8D05gv.js} +0 -0
- /package/web/assets/{swift-BtHGe_4T.js → swift-Ayb3KzWx.js} +0 -0
- /package/web/assets/{systemverilog-CgKnzwU4.js → systemverilog-BtWJM9O5.js} +0 -0
- /package/web/assets/{tcl-DyqQWf87.js → tcl-BJvUWpbV.js} +0 -0
- /package/web/assets/{twig-C980XO5P.js → twig-c3YaBCU6.js} +0 -0
- /package/web/assets/{typespec-CVmA80px.js → typespec-gFCWLBoZ.js} +0 -0
- /package/web/assets/{uuid-2Kb5PDpq.js → uuid-B3B8HIK9.js} +0 -0
- /package/web/assets/{vb-rdNQv5VQ.js → vb-CVtfWXV2.js} +0 -0
- /package/web/assets/{w3c-keyname-B2B-WOb1.js → w3c-keyname-nn0G3QC2.js} +0 -0
- /package/web/assets/{wgsl-64oVbimL.js → wgsl-C_huaGQy.js} +0 -0
|
@@ -5,16 +5,17 @@ import { z as z21 } from "zod";
|
|
|
5
5
|
|
|
6
6
|
// ../server/src/services/agent-store.ts
|
|
7
7
|
import { randomUUID, randomBytes, createCipheriv, createDecipheriv } from "crypto";
|
|
8
|
-
import { readFile, writeFile, rename, mkdir as mkdir2, chmod } from "fs/promises";
|
|
8
|
+
import { readFile as readFile2, writeFile as writeFile2, rename, mkdir as mkdir2, chmod } from "fs/promises";
|
|
9
9
|
import { dirname } from "path";
|
|
10
10
|
|
|
11
11
|
// ../server/src/services/vault-resolver.ts
|
|
12
|
-
import { join,
|
|
12
|
+
import { join, sep } from "path";
|
|
13
13
|
import { homedir } from "os";
|
|
14
|
-
import { readdir, mkdir, access } from "fs/promises";
|
|
14
|
+
import { readdir, mkdir, access, readFile, writeFile } from "fs/promises";
|
|
15
15
|
|
|
16
16
|
// ../server/src/config/env.ts
|
|
17
17
|
import { z } from "zod";
|
|
18
|
+
import { resolve as resolvePath } from "path";
|
|
18
19
|
var serverPort = z.coerce.number().int().min(1).max(65535).default(4e3).parse(process.env.RUNEYA_HTTP_PORT);
|
|
19
20
|
var defaultAgentPort = process.env.RUNEYA_AGENT_PORT ? z.coerce.number().int().min(1).max(65535).parse(process.env.RUNEYA_AGENT_PORT) : serverPort + 1;
|
|
20
21
|
var EnvSchema = z.object({
|
|
@@ -48,7 +49,15 @@ var EnvSchema = z.object({
|
|
|
48
49
|
PORT: data.RUNEYA_HTTP_PORT,
|
|
49
50
|
HOST: data.RUNEYA_HOST,
|
|
50
51
|
MODE: data.RUNEYA_MODE,
|
|
51
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Absolute from the start, resolved once against the launch directory.
|
|
54
|
+
*
|
|
55
|
+
* It defaults to a relative `.runeya`, and every caller used to re-resolve it
|
|
56
|
+
* against whatever the process's cwd happened to be. A vault that moves when
|
|
57
|
+
* the process changes directory is a vault that can be silently written to the
|
|
58
|
+
* wrong place — so the answer is fixed here, at boot, and never recomputed.
|
|
59
|
+
*/
|
|
60
|
+
DATA_DIR: resolvePath(data.RUNEYA_DATA_DIR),
|
|
52
61
|
HOME_DIR: data.RUNEYA_HOME,
|
|
53
62
|
CLOUD_URL: data.RUNEYA_CLOUD_URL,
|
|
54
63
|
CLOUD_APP_URL: data.RUNEYA_CLOUD_APP_URL,
|
|
@@ -70,7 +79,7 @@ function machineRoot() {
|
|
|
70
79
|
return join(override && override.length > 0 ? override : homedir(), ".runeya");
|
|
71
80
|
}
|
|
72
81
|
function localVaultRoot() {
|
|
73
|
-
return
|
|
82
|
+
return env.DATA_DIR;
|
|
74
83
|
}
|
|
75
84
|
function orgVaultRoot(orgId) {
|
|
76
85
|
assertSafeId("organization", orgId);
|
|
@@ -84,6 +93,34 @@ function vaultFor(target) {
|
|
|
84
93
|
if (!target.orgId) return { root: localVaultRoot() };
|
|
85
94
|
return { root: projectVaultRoot(target.orgId, target.id) };
|
|
86
95
|
}
|
|
96
|
+
var ORG_CLOUD_FILE = "cloud.json";
|
|
97
|
+
async function stampOrgCloud(orgId, cloudUrl) {
|
|
98
|
+
const root = orgVaultRoot(orgId);
|
|
99
|
+
try {
|
|
100
|
+
await mkdir(root, { recursive: true });
|
|
101
|
+
await writeFile(join(root, ORG_CLOUD_FILE), JSON.stringify({ cloudUrl }, null, 2), "utf-8");
|
|
102
|
+
} catch {
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function readOrgClouds() {
|
|
106
|
+
const orgsDir = join(machineRoot(), "orgs");
|
|
107
|
+
const out = {};
|
|
108
|
+
let orgIds;
|
|
109
|
+
try {
|
|
110
|
+
orgIds = (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
|
|
111
|
+
} catch {
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
for (const orgId of orgIds) {
|
|
115
|
+
try {
|
|
116
|
+
const raw = await readFile(join(orgsDir, orgId, ORG_CLOUD_FILE), "utf-8");
|
|
117
|
+
const url = JSON.parse(raw).cloudUrl;
|
|
118
|
+
if (typeof url === "string" && url) out[orgId] = url;
|
|
119
|
+
} catch {
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
87
124
|
async function listCloudVaults() {
|
|
88
125
|
const orgsDir = join(machineRoot(), "orgs");
|
|
89
126
|
const found = [];
|
|
@@ -269,9 +306,9 @@ var AgentStore = class {
|
|
|
269
306
|
*/
|
|
270
307
|
async readFromDisk() {
|
|
271
308
|
try {
|
|
272
|
-
return await
|
|
309
|
+
return await readFile2(await this.getFilePath(), "utf-8");
|
|
273
310
|
} catch {
|
|
274
|
-
return
|
|
311
|
+
return readFile2(this.getLegacyFilePath(), "utf-8");
|
|
275
312
|
}
|
|
276
313
|
}
|
|
277
314
|
async ensureDir() {
|
|
@@ -304,7 +341,7 @@ var AgentStore = class {
|
|
|
304
341
|
passthroughEnv: this.passthroughEnv,
|
|
305
342
|
traefikConfigs: this.traefikConfigs
|
|
306
343
|
};
|
|
307
|
-
await
|
|
344
|
+
await writeFile2(tmpPath, JSON.stringify(fileData, null, 2), "utf-8");
|
|
308
345
|
await rename(tmpPath, filePath);
|
|
309
346
|
await chmod(filePath, 384);
|
|
310
347
|
}
|
|
@@ -405,42 +442,120 @@ var agentStore = new AgentStore();
|
|
|
405
442
|
|
|
406
443
|
// ../server/src/services/service-store.ts
|
|
407
444
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
408
|
-
import { readFile as
|
|
445
|
+
import { readFile as readFile4, writeFile as writeFile4, rename as rename3, mkdir as mkdir4, chmod as chmod3 } from "fs/promises";
|
|
409
446
|
import { join as join3 } from "path";
|
|
410
447
|
|
|
448
|
+
// ../server/src/services/project-key.ts
|
|
449
|
+
function projectKey(ref) {
|
|
450
|
+
return `${ref.orgId ?? "local"}:${ref.id}`;
|
|
451
|
+
}
|
|
452
|
+
var AmbiguousProjectError = class extends Error {
|
|
453
|
+
constructor(projectId, orgIds) {
|
|
454
|
+
const where = orgIds.map((o) => o ?? "local").join(", ");
|
|
455
|
+
super(
|
|
456
|
+
`Project id ${projectId} exists in several organizations (${where}). Name the organization alongside the project id.`
|
|
457
|
+
);
|
|
458
|
+
this.projectId = projectId;
|
|
459
|
+
this.orgIds = orgIds;
|
|
460
|
+
this.name = "AmbiguousProjectError";
|
|
461
|
+
}
|
|
462
|
+
code = "AMBIGUOUS_PROJECT_ID";
|
|
463
|
+
};
|
|
464
|
+
|
|
411
465
|
// ../server/src/services/vault-registry.ts
|
|
412
466
|
var loadProjects = null;
|
|
413
467
|
var projectRoots = /* @__PURE__ */ new Map();
|
|
468
|
+
var projectRefs = /* @__PURE__ */ new Map();
|
|
414
469
|
var serviceOwners = /* @__PURE__ */ new Map();
|
|
415
470
|
function registerProjectLoader(load) {
|
|
416
471
|
loadProjects = load;
|
|
417
472
|
}
|
|
418
|
-
function
|
|
419
|
-
|
|
473
|
+
async function ensureProjectsLoaded() {
|
|
474
|
+
await loadProjects?.();
|
|
475
|
+
}
|
|
476
|
+
function setProjectVault(ref, root) {
|
|
477
|
+
const key = projectKey(ref);
|
|
478
|
+
projectRoots.set(key, root);
|
|
479
|
+
projectRefs.set(key, { id: ref.id, orgId: ref.orgId ?? null });
|
|
480
|
+
}
|
|
481
|
+
function forgetProject(ref) {
|
|
482
|
+
const key = projectKey(ref);
|
|
483
|
+
projectRoots.delete(key);
|
|
484
|
+
projectRefs.delete(key);
|
|
485
|
+
for (const [serviceId, owners] of serviceOwners) {
|
|
486
|
+
owners.delete(key);
|
|
487
|
+
if (owners.size === 0) serviceOwners.delete(serviceId);
|
|
488
|
+
}
|
|
420
489
|
}
|
|
421
|
-
function
|
|
422
|
-
|
|
423
|
-
for (const [serviceId,
|
|
424
|
-
if (
|
|
490
|
+
function setProjectServices(ref, serviceIds) {
|
|
491
|
+
const key = projectKey(ref);
|
|
492
|
+
for (const [serviceId, owners] of serviceOwners) {
|
|
493
|
+
if (!serviceIds.includes(serviceId)) {
|
|
494
|
+
owners.delete(key);
|
|
495
|
+
if (owners.size === 0) serviceOwners.delete(serviceId);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
for (const serviceId of serviceIds) {
|
|
499
|
+
const owners = serviceOwners.get(serviceId) ?? /* @__PURE__ */ new Set();
|
|
500
|
+
owners.add(key);
|
|
501
|
+
serviceOwners.set(serviceId, owners);
|
|
425
502
|
}
|
|
426
503
|
}
|
|
427
|
-
function
|
|
428
|
-
|
|
429
|
-
|
|
504
|
+
function rootOfProjectRef(ref) {
|
|
505
|
+
return projectRoots.get(projectKey(ref)) ?? localVaultRoot();
|
|
506
|
+
}
|
|
507
|
+
function refsOfProjectId(projectId) {
|
|
508
|
+
const matches = [];
|
|
509
|
+
for (const ref of projectRefs.values()) {
|
|
510
|
+
if (ref.id === projectId) matches.push(ref);
|
|
430
511
|
}
|
|
431
|
-
|
|
512
|
+
return matches;
|
|
513
|
+
}
|
|
514
|
+
function rootOfProjectAmong(projectId, hint) {
|
|
515
|
+
const matches = refsOfProjectId(projectId);
|
|
516
|
+
if (matches.length > 1) {
|
|
517
|
+
const known = matches.map((ref2) => rootOfProjectRef(ref2));
|
|
518
|
+
if (hint && known.includes(hint)) return hint;
|
|
519
|
+
throw new AmbiguousProjectError(projectId, matches.map((r) => r.orgId ?? null));
|
|
520
|
+
}
|
|
521
|
+
const [ref] = matches;
|
|
522
|
+
return ref ? rootOfProjectRef(ref) : hint ?? localVaultRoot();
|
|
432
523
|
}
|
|
433
|
-
function
|
|
434
|
-
|
|
524
|
+
function refOfProjectAmong(projectId, hint) {
|
|
525
|
+
const matches = refsOfProjectId(projectId);
|
|
526
|
+
if (matches.length > 1) {
|
|
527
|
+
const found = hint ? matches.find((ref) => rootOfProjectRef(ref) === hint) : void 0;
|
|
528
|
+
if (found) return found;
|
|
529
|
+
throw new AmbiguousProjectError(projectId, matches.map((r) => r.orgId ?? null));
|
|
530
|
+
}
|
|
531
|
+
return matches[0] ?? { id: projectId, orgId: null };
|
|
435
532
|
}
|
|
436
|
-
function rootOfService(serviceId) {
|
|
437
|
-
const
|
|
438
|
-
|
|
533
|
+
function rootOfService(serviceId, hint = null) {
|
|
534
|
+
const owners = serviceOwners.get(serviceId);
|
|
535
|
+
if (!owners || owners.size === 0) return hint ?? localVaultRoot();
|
|
536
|
+
const roots = Array.from(owners, (key) => projectRoots.get(key)).filter((r) => !!r);
|
|
537
|
+
if (hint && roots.includes(hint)) return hint;
|
|
538
|
+
return roots[0] ?? hint ?? localVaultRoot();
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// ../server/src/services/vault-conflicts.ts
|
|
542
|
+
var conflicted = /* @__PURE__ */ new Map();
|
|
543
|
+
function markVaultConflict(root, detail) {
|
|
544
|
+
if (conflicted.has(root)) return;
|
|
545
|
+
conflicted.set(root, detail);
|
|
546
|
+
console.error(
|
|
547
|
+
"[vaults] %s partage des identifiants avec un autre coffre (%s) \u2014 son contenu est ignor\xE9 et laiss\xE9 intact. Cessez de suivre l'un des deux projets.",
|
|
548
|
+
root,
|
|
549
|
+
detail
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
function isVaultConflicted(root) {
|
|
553
|
+
return conflicted.has(root);
|
|
439
554
|
}
|
|
440
555
|
|
|
441
556
|
// ../server/src/services/environment-store.ts
|
|
442
557
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
443
|
-
import { readFile as
|
|
558
|
+
import { readFile as readFile3, writeFile as writeFile3, rename as rename2, mkdir as mkdir3, chmod as chmod2 } from "fs/promises";
|
|
444
559
|
import { join as join2 } from "path";
|
|
445
560
|
|
|
446
561
|
// ../server/src/services/crypto-helpers.ts
|
|
@@ -1823,15 +1938,44 @@ var EnvironmentStore = class {
|
|
|
1823
1938
|
/**
|
|
1824
1939
|
* The vault an environment must be written to: its project's.
|
|
1825
1940
|
*
|
|
1941
|
+
* An environment names its project by id alone, and that id can answer for a
|
|
1942
|
+
* project in each organization. The vault it was read from names the couple —
|
|
1943
|
+
* so it is handed over as the tie-breaker rather than left as a mere fallback.
|
|
1944
|
+
*
|
|
1826
1945
|
* Falls back to where it was last read, then to the local vault — an
|
|
1827
1946
|
* environment whose project is unknown belongs to the launch directory, which
|
|
1828
1947
|
* is where it lived before vaults existed.
|
|
1829
1948
|
*/
|
|
1830
1949
|
rootFor(environment) {
|
|
1831
|
-
const known = this.roots.get(environment.id);
|
|
1832
|
-
const projectRoot = environment.projectId ?
|
|
1950
|
+
const known = this.roots.get(environment.id) ?? null;
|
|
1951
|
+
const projectRoot = environment.projectId ? rootOfProjectAmong(environment.projectId, known) : null;
|
|
1833
1952
|
return projectRoot ?? known ?? localVaultRoot();
|
|
1834
1953
|
}
|
|
1954
|
+
/**
|
|
1955
|
+
* Le projet d'un environnement, organisation comprise.
|
|
1956
|
+
*
|
|
1957
|
+
* L'environnement ne nomme que l'id ; le coffre d'où il vient fournit
|
|
1958
|
+
* l'organisation, et c'est ce couple qu'il faut pour agir sur son projet.
|
|
1959
|
+
*/
|
|
1960
|
+
projectRefOf(environment) {
|
|
1961
|
+
if (!environment.projectId) return null;
|
|
1962
|
+
return refOfProjectAmong(environment.projectId, this.roots.get(environment.id) ?? null);
|
|
1963
|
+
}
|
|
1964
|
+
/**
|
|
1965
|
+
* The vault holding the environment that defines a variable.
|
|
1966
|
+
*
|
|
1967
|
+
* Overrides answer a variable, not a project: this is what lets them find the
|
|
1968
|
+
* same vault without re-resolving an id that may be ambiguous.
|
|
1969
|
+
*/
|
|
1970
|
+
async rootOfVariable(variableId) {
|
|
1971
|
+
await this.load();
|
|
1972
|
+
for (const environment of this.environments.values()) {
|
|
1973
|
+
if (environment.variables && variableId in environment.variables) {
|
|
1974
|
+
return this.rootFor(environment);
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
return null;
|
|
1978
|
+
}
|
|
1835
1979
|
extractEncryptedCache(environment) {
|
|
1836
1980
|
const envSlots = extractEncryptedVariableSlots(
|
|
1837
1981
|
environment.variables
|
|
@@ -1869,14 +2013,20 @@ var EnvironmentStore = class {
|
|
|
1869
2013
|
async load() {
|
|
1870
2014
|
if (this.loaded) return;
|
|
1871
2015
|
this.loaded = true;
|
|
2016
|
+
await ensureProjectsLoaded();
|
|
1872
2017
|
if (!getEncryptionKey()) {
|
|
1873
2018
|
this.loaded = false;
|
|
1874
2019
|
return;
|
|
1875
2020
|
}
|
|
1876
2021
|
for (const root of await allVaultRoots()) {
|
|
1877
2022
|
try {
|
|
1878
|
-
const raw = await
|
|
2023
|
+
const raw = await readFile3(this.getFilePath(root), "utf-8");
|
|
1879
2024
|
const data = JSON.parse(raw);
|
|
2025
|
+
const clash = data.find((e) => this.environments.has(e.id) && this.roots.get(e.id) !== root);
|
|
2026
|
+
if (clash) {
|
|
2027
|
+
markVaultConflict(root, `environnement ${clash.id}`);
|
|
2028
|
+
continue;
|
|
2029
|
+
}
|
|
1880
2030
|
for (const e of data) {
|
|
1881
2031
|
this.diskEncryptedSlots.set(e.id, this.extractEncryptedCache(e));
|
|
1882
2032
|
const decrypted = this.decryptEnvironment(e);
|
|
@@ -1895,13 +2045,16 @@ var EnvironmentStore = class {
|
|
|
1895
2045
|
*/
|
|
1896
2046
|
async save() {
|
|
1897
2047
|
const byRoot = /* @__PURE__ */ new Map();
|
|
1898
|
-
for (const root of this.roots.values())
|
|
2048
|
+
for (const root of this.roots.values()) {
|
|
2049
|
+
if (!isVaultConflicted(root)) byRoot.set(root, []);
|
|
2050
|
+
}
|
|
1899
2051
|
byRoot.set(localVaultRoot(), byRoot.get(localVaultRoot()) ?? []);
|
|
1900
2052
|
for (const environment of this.environments.values()) {
|
|
1901
2053
|
const root = this.rootFor(environment);
|
|
1902
2054
|
const prepared = this.encryptEnvironment(environment);
|
|
1903
2055
|
this.diskEncryptedSlots.set(prepared.id, this.extractEncryptedCache(prepared));
|
|
1904
2056
|
this.roots.set(environment.id, root);
|
|
2057
|
+
if (isVaultConflicted(root)) continue;
|
|
1905
2058
|
const bucket = byRoot.get(root);
|
|
1906
2059
|
if (bucket) bucket.push(prepared);
|
|
1907
2060
|
else byRoot.set(root, [prepared]);
|
|
@@ -1910,7 +2063,7 @@ var EnvironmentStore = class {
|
|
|
1910
2063
|
await mkdir3(root, { recursive: true });
|
|
1911
2064
|
const filePath = this.getFilePath(root);
|
|
1912
2065
|
const tmpPath = filePath + ".tmp";
|
|
1913
|
-
await
|
|
2066
|
+
await writeFile3(tmpPath, JSON.stringify(environments, null, 2), "utf-8");
|
|
1914
2067
|
await rename2(tmpPath, filePath);
|
|
1915
2068
|
await chmod2(filePath, 384);
|
|
1916
2069
|
}
|
|
@@ -1935,15 +2088,6 @@ var EnvironmentStore = class {
|
|
|
1935
2088
|
* which project it belongs to — so this is what lets them be stored with
|
|
1936
2089
|
* their project rather than in one machine-wide pile.
|
|
1937
2090
|
*/
|
|
1938
|
-
async projectIdOfVariable(variableId) {
|
|
1939
|
-
await this.load();
|
|
1940
|
-
for (const environment of this.environments.values()) {
|
|
1941
|
-
if (environment.variables && variableId in environment.variables) {
|
|
1942
|
-
return environment.projectId;
|
|
1943
|
-
}
|
|
1944
|
-
}
|
|
1945
|
-
return null;
|
|
1946
|
-
}
|
|
1947
2091
|
/**
|
|
1948
2092
|
* Drop a project's environments from memory, without touching the disk.
|
|
1949
2093
|
*
|
|
@@ -1961,15 +2105,37 @@ var EnvironmentStore = class {
|
|
|
1961
2105
|
}
|
|
1962
2106
|
this.notify();
|
|
1963
2107
|
}
|
|
1964
|
-
|
|
2108
|
+
/**
|
|
2109
|
+
* Les environnements d'un projet.
|
|
2110
|
+
*
|
|
2111
|
+
* `orgId` restreint au projet de cette organisation : deux projets homonymes
|
|
2112
|
+
* ont chacun les siens, et filtrer sur le seul `projectId` mélangeait les deux
|
|
2113
|
+
* listes à l'écran. Omis, le filtre reste sur l'id — ce que fait un appelant
|
|
2114
|
+
* qui n'a pas d'organisation à donner.
|
|
2115
|
+
*/
|
|
2116
|
+
async list(projectId, orgId) {
|
|
1965
2117
|
await this.load();
|
|
1966
|
-
return
|
|
2118
|
+
return this.ofProject(projectId, orgId);
|
|
2119
|
+
}
|
|
2120
|
+
/** Le filtre commun : l'id, puis le coffre quand l'organisation est connue. */
|
|
2121
|
+
ofProject(projectId, orgId) {
|
|
2122
|
+
const byId = Array.from(this.environments.values()).filter((e) => e.projectId === projectId);
|
|
2123
|
+
if (orgId === void 0) return byId;
|
|
2124
|
+
const root = vaultFor({ id: projectId, orgId }).root;
|
|
2125
|
+
return byId.filter((e) => this.rootFor(e) === root);
|
|
1967
2126
|
}
|
|
1968
2127
|
async get(id) {
|
|
1969
2128
|
await this.load();
|
|
1970
2129
|
return this.environments.get(id) ?? null;
|
|
1971
2130
|
}
|
|
1972
|
-
|
|
2131
|
+
/**
|
|
2132
|
+
* `orgId` ne fait pas partie de l'environnement : il dit dans quel coffre le
|
|
2133
|
+
* poser. Un environnement neuf n'a pas encore de provenance, et son
|
|
2134
|
+
* `projectId` seul peut répondre pour un projet de chaque organisation — sans
|
|
2135
|
+
* cette précision, la création échouerait sur l'ambiguïté au lieu de viser le
|
|
2136
|
+
* bon coffre.
|
|
2137
|
+
*/
|
|
2138
|
+
async create(input, orgId) {
|
|
1973
2139
|
await this.load();
|
|
1974
2140
|
const parsed = CreateEnvironmentSchema.parse(input);
|
|
1975
2141
|
const environment = {
|
|
@@ -1996,6 +2162,9 @@ var EnvironmentStore = class {
|
|
|
1996
2162
|
}
|
|
1997
2163
|
}
|
|
1998
2164
|
this.environments.set(environment.id, environment);
|
|
2165
|
+
if (environment.projectId && orgId !== void 0) {
|
|
2166
|
+
this.roots.set(environment.id, vaultFor({ id: environment.projectId, orgId }).root);
|
|
2167
|
+
}
|
|
1999
2168
|
await this.save();
|
|
2000
2169
|
return environment;
|
|
2001
2170
|
}
|
|
@@ -2051,18 +2220,18 @@ var EnvironmentStore = class {
|
|
|
2051
2220
|
await this.save();
|
|
2052
2221
|
return true;
|
|
2053
2222
|
}
|
|
2054
|
-
async getByProjectId(projectId) {
|
|
2223
|
+
async getByProjectId(projectId, orgId) {
|
|
2055
2224
|
await this.load();
|
|
2056
|
-
return
|
|
2225
|
+
return this.ofProject(projectId, orgId);
|
|
2057
2226
|
}
|
|
2058
2227
|
async listAllGlobal() {
|
|
2059
2228
|
await this.load();
|
|
2060
2229
|
return Array.from(this.environments.values()).filter((e) => e.scope === "global");
|
|
2061
2230
|
}
|
|
2062
2231
|
// --- Scope-based Query Methods ---
|
|
2063
|
-
async listByScope(projectId, scope) {
|
|
2232
|
+
async listByScope(projectId, scope, orgId) {
|
|
2064
2233
|
await this.load();
|
|
2065
|
-
return
|
|
2234
|
+
return this.ofProject(projectId, orgId).filter((e) => e.scope === scope);
|
|
2066
2235
|
}
|
|
2067
2236
|
async findServiceEnvironment(serviceId, globalEnvId) {
|
|
2068
2237
|
await this.load();
|
|
@@ -2250,7 +2419,7 @@ var ServiceStore = class {
|
|
|
2250
2419
|
* finally to the local vault.
|
|
2251
2420
|
*/
|
|
2252
2421
|
rootFor(serviceId) {
|
|
2253
|
-
return rootOfService(serviceId
|
|
2422
|
+
return rootOfService(serviceId, this.roots.get(serviceId) ?? null) ?? localVaultRoot();
|
|
2254
2423
|
}
|
|
2255
2424
|
/**
|
|
2256
2425
|
* Read every vault: the launch directory and each materialized cloud project.
|
|
@@ -2262,10 +2431,16 @@ var ServiceStore = class {
|
|
|
2262
2431
|
if (this.loaded) return;
|
|
2263
2432
|
if (!getEncryptionKey()) return;
|
|
2264
2433
|
this.loaded = true;
|
|
2434
|
+
await ensureProjectsLoaded();
|
|
2265
2435
|
for (const root of await allVaultRoots()) {
|
|
2266
2436
|
try {
|
|
2267
|
-
const raw = await
|
|
2437
|
+
const raw = await readFile4(this.getFilePath(root), "utf-8");
|
|
2268
2438
|
const data = JSON.parse(raw);
|
|
2439
|
+
const clash = data.find((s) => this.services.has(s.id) && this.roots.get(s.id) !== root);
|
|
2440
|
+
if (clash) {
|
|
2441
|
+
markVaultConflict(root, `service ${clash.id}`);
|
|
2442
|
+
continue;
|
|
2443
|
+
}
|
|
2269
2444
|
for (const s of data) {
|
|
2270
2445
|
if (s.commands) {
|
|
2271
2446
|
for (const cmd of s.commands) {
|
|
@@ -2291,13 +2466,16 @@ var ServiceStore = class {
|
|
|
2291
2466
|
*/
|
|
2292
2467
|
async save() {
|
|
2293
2468
|
const byRoot = /* @__PURE__ */ new Map();
|
|
2294
|
-
for (const root of this.roots.values())
|
|
2469
|
+
for (const root of this.roots.values()) {
|
|
2470
|
+
if (!isVaultConflicted(root)) byRoot.set(root, []);
|
|
2471
|
+
}
|
|
2295
2472
|
byRoot.set(localVaultRoot(), byRoot.get(localVaultRoot()) ?? []);
|
|
2296
2473
|
for (const service of this.services.values()) {
|
|
2297
2474
|
const root = this.rootFor(service.id);
|
|
2298
2475
|
const prepared = prepareForDisk(service, this.diskForm.get(service.id));
|
|
2299
2476
|
this.diskForm.set(prepared.id, prepared);
|
|
2300
2477
|
this.roots.set(service.id, root);
|
|
2478
|
+
if (isVaultConflicted(root)) continue;
|
|
2301
2479
|
const bucket = byRoot.get(root);
|
|
2302
2480
|
if (bucket) bucket.push(prepared);
|
|
2303
2481
|
else byRoot.set(root, [prepared]);
|
|
@@ -2306,7 +2484,7 @@ var ServiceStore = class {
|
|
|
2306
2484
|
await mkdir4(root, { recursive: true });
|
|
2307
2485
|
const filePath = this.getFilePath(root);
|
|
2308
2486
|
const tmpPath = filePath + ".tmp";
|
|
2309
|
-
await
|
|
2487
|
+
await writeFile4(tmpPath, JSON.stringify(services, null, 2), "utf-8");
|
|
2310
2488
|
await rename3(tmpPath, filePath);
|
|
2311
2489
|
await chmod3(filePath, 384);
|
|
2312
2490
|
}
|
|
@@ -2580,14 +2758,14 @@ var AgentSpawner = class {
|
|
|
2580
2758
|
console.log(`[agent-spawner] Local agent registered as ${LOCAL_AGENT_ID}`);
|
|
2581
2759
|
}
|
|
2582
2760
|
waitForPassphrase() {
|
|
2583
|
-
return new Promise((
|
|
2761
|
+
return new Promise((resolve) => {
|
|
2584
2762
|
if (!this.agentProcess?.stdout) {
|
|
2585
|
-
|
|
2763
|
+
resolve(null);
|
|
2586
2764
|
return;
|
|
2587
2765
|
}
|
|
2588
2766
|
const rl = createInterface({ input: this.agentProcess.stdout });
|
|
2589
2767
|
const timeout = setTimeout(() => {
|
|
2590
|
-
|
|
2768
|
+
resolve(null);
|
|
2591
2769
|
}, PASSPHRASE_TIMEOUT);
|
|
2592
2770
|
let initialPassphraseFound = false;
|
|
2593
2771
|
rl.on("line", (line) => {
|
|
@@ -2597,7 +2775,7 @@ var AgentSpawner = class {
|
|
|
2597
2775
|
if (!initialPassphraseFound) {
|
|
2598
2776
|
initialPassphraseFound = true;
|
|
2599
2777
|
clearTimeout(timeout);
|
|
2600
|
-
|
|
2778
|
+
resolve(newPassphrase);
|
|
2601
2779
|
} else {
|
|
2602
2780
|
console.log("[agent-spawner] \u{1F504} Agent reloaded, updating passphrase...");
|
|
2603
2781
|
this.updateAgentPassphrase(newPassphrase).catch((err) => {
|
|
@@ -2617,14 +2795,14 @@ var AgentSpawner = class {
|
|
|
2617
2795
|
this.agentProcess?.on("error", (err) => {
|
|
2618
2796
|
console.error("[agent-spawner] Failed to spawn agent:", err);
|
|
2619
2797
|
clearTimeout(timeout);
|
|
2620
|
-
if (!initialPassphraseFound)
|
|
2798
|
+
if (!initialPassphraseFound) resolve(null);
|
|
2621
2799
|
});
|
|
2622
2800
|
this.agentProcess?.on("exit", (code) => {
|
|
2623
2801
|
if (code !== null && code !== 0) {
|
|
2624
2802
|
console.error(`[agent-spawner] Agent exited with code ${code}`);
|
|
2625
2803
|
}
|
|
2626
2804
|
clearTimeout(timeout);
|
|
2627
|
-
if (!initialPassphraseFound)
|
|
2805
|
+
if (!initialPassphraseFound) resolve(null);
|
|
2628
2806
|
});
|
|
2629
2807
|
});
|
|
2630
2808
|
}
|
|
@@ -2636,9 +2814,9 @@ var AgentSpawner = class {
|
|
|
2636
2814
|
if (this.agentProcess) {
|
|
2637
2815
|
console.log("[agent-spawner] Stopping local agent...");
|
|
2638
2816
|
this.agentProcess.kill("SIGKILL");
|
|
2639
|
-
await new Promise((
|
|
2640
|
-
this.agentProcess?.on("exit", () =>
|
|
2641
|
-
setTimeout(
|
|
2817
|
+
await new Promise((resolve) => {
|
|
2818
|
+
this.agentProcess?.on("exit", () => resolve());
|
|
2819
|
+
setTimeout(resolve, 2e3);
|
|
2642
2820
|
});
|
|
2643
2821
|
this.agentProcess = null;
|
|
2644
2822
|
}
|
|
@@ -3094,7 +3272,7 @@ var AgentManager = class extends EventEmitter2 {
|
|
|
3094
3272
|
if (isReRegistration) {
|
|
3095
3273
|
console.log(`[agent-manager] Re-registering agent ${config.name} (${config.id})`);
|
|
3096
3274
|
this.disconnectAgent(config.id);
|
|
3097
|
-
await new Promise((
|
|
3275
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
3098
3276
|
}
|
|
3099
3277
|
this.connectAgent(config);
|
|
3100
3278
|
console.log(`[agent-manager] Agent ${config.name} (${config.id}) connection established`);
|
|
@@ -3111,7 +3289,7 @@ var AgentManager = class extends EventEmitter2 {
|
|
|
3111
3289
|
if (isReRegistration) {
|
|
3112
3290
|
console.log(`[agent-manager] Re-registering local agent ${config.name} (${config.id})`);
|
|
3113
3291
|
this.disconnectAgent(config.id);
|
|
3114
|
-
await new Promise((
|
|
3292
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
3115
3293
|
}
|
|
3116
3294
|
const storedPassthrough = agentStore.getPassthroughEnv(config.id);
|
|
3117
3295
|
const configWithPassthrough = { ...config, passthroughEnv: storedPassthrough };
|
|
@@ -3438,6 +3616,8 @@ export {
|
|
|
3438
3616
|
orgVaultRoot,
|
|
3439
3617
|
projectVaultRoot,
|
|
3440
3618
|
vaultFor,
|
|
3619
|
+
stampOrgCloud,
|
|
3620
|
+
readOrgClouds,
|
|
3441
3621
|
listCloudVaults,
|
|
3442
3622
|
allVaultRoots,
|
|
3443
3623
|
machineFilePath,
|
|
@@ -3488,11 +3668,15 @@ export {
|
|
|
3488
3668
|
decryptVariableSlots,
|
|
3489
3669
|
extractEncryptedVariableSlots,
|
|
3490
3670
|
isEncryptedValue,
|
|
3671
|
+
projectKey,
|
|
3672
|
+
AmbiguousProjectError,
|
|
3491
3673
|
registerProjectLoader,
|
|
3674
|
+
ensureProjectsLoaded,
|
|
3492
3675
|
setProjectVault,
|
|
3493
3676
|
forgetProject,
|
|
3494
3677
|
setProjectServices,
|
|
3495
|
-
|
|
3678
|
+
rootOfProjectAmong,
|
|
3679
|
+
refOfProjectAmong,
|
|
3496
3680
|
environmentStore,
|
|
3497
3681
|
serviceStore,
|
|
3498
3682
|
agentStore,
|
|
@@ -3500,4 +3684,4 @@ export {
|
|
|
3500
3684
|
traefikManager,
|
|
3501
3685
|
agentManager
|
|
3502
3686
|
};
|
|
3503
|
-
//# sourceMappingURL=chunk-
|
|
3687
|
+
//# sourceMappingURL=chunk-5PRQBES2.js.map
|