@runeya/runeya 2.0.44 → 2.0.46
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 +5 -5
- package/agent/index.js.map +1 -1
- package/agent-manager-JJYZDLNB.js +7 -0
- package/{chunk-NJJMESIY.js → chunk-5PRQBES2.js} +288 -72
- package/chunk-5PRQBES2.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-7CJJBMY3.js → src-5QPLS5TQ.js} +1254 -483
- package/src-5QPLS5TQ.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-Z3BLbola.js +13 -0
- 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-BBifPBJu.css → AppLayout-D1bdzemo.css} +1 -1
- package/web/assets/AuditPage-zfim5OLa.js +1 -0
- package/web/assets/CloudAccountPage-BD-L27Wl.js +1 -0
- 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-ByzcpJV7.js +1 -0
- package/web/assets/{EditorIcon-CNesALrK.js → EditorIcon-jk0Nz8Mr.js} +2 -2
- package/web/assets/{EnvironmentForm-vcLpp9mR.js → EnvironmentForm-BH4EMxM6.js} +2 -2
- package/web/assets/EnvironmentFormPage-Bwjr8SsV.js +1 -0
- package/web/assets/EnvironmentListPage-BgqHe-4p.js +1 -0
- package/web/assets/EnvironmentListPage-BwgJscFQ.css +1 -0
- package/web/assets/EnvironmentSelector-CBh21uuY.js +1 -0
- package/web/assets/KanbanBoardPage-Dg0Od24D.js +4 -0
- package/web/assets/KanbanListPage-C6bsD-gJ.js +1 -0
- 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-BhaSYgvw.js +3 -0
- package/web/assets/ProcessControls-lDF1qNIM.js +1 -0
- package/web/assets/ProcessDetailPage-DwaApuHs.js +1 -0
- package/web/assets/{ProcessMetrics-dy3TGmKO.js → ProcessMetrics-rGmADRtS.js} +2 -2
- 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-CndKGKYR.js +2 -0
- package/web/assets/ScenarioEditorPage-DU7tb4M-.js +14 -0
- package/web/assets/SendToChatDialog-CCRCitBB.js +1 -0
- package/web/assets/ServiceControlsBar-BjyMYoiN.js +1 -0
- 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-BZM3WWqc.js +2062 -0
- package/web/assets/UnlockPage-BcZ2vL57.js +1 -0
- package/web/assets/UnlockPage-DE_HJy8h.css +1 -0
- package/web/assets/VariablesTable-0Gz2ffiL.js +1 -0
- package/web/assets/VaultMigrationPage-BGJ2PP-7.css +1 -0
- package/web/assets/VaultMigrationPage-BxTBDL19.js +1 -0
- package/web/assets/VersionBadge-DvsaGqvh.js +1 -0
- package/web/assets/WikiPage-DkEQXkzp.js +1 -0
- package/web/assets/WikiView-e81ejcA8.js +1 -0
- package/web/assets/add-scalar-classes-Bh8ghfnQ.js +387 -0
- package/web/assets/auth-errors-C1B7h06f.js +1 -0
- package/web/assets/{autocomplete-egYkKgXN.js → autocomplete-CDWkaHAi.js} +4 -4
- package/web/assets/{basic-shape-diamond.svg-B4ql31Pl.js → basic-shape-diamond.svg-7zqPzGW0.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-Dse435xU.js → basic-shape-hexagon.svg-DQwxqMd2.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-Ca80MM2U.js → basic-shape-primary-circle-ellipse-round.svg-Bqm796vK.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-BzMOacCe.js → basic-shape-primary-square-rectangle.svg-D7eyO04i.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-CDpbzQoc.js → basic-shape-shield.svg-Bnc_pFVA.js} +1 -1
- package/web/assets/{browser-CASFdUlr.js → browser-DeXg6zUY.js} +1 -1
- package/web/assets/{browser-B6yA2X2D.js → browser-LxxhMX-Z.js} +1 -1
- package/web/assets/card-RaXQSIfv.js +32 -0
- package/web/assets/{checkbox-DX42-aCG.js → checkbox-DnpUXs7B.js} +3 -3
- package/web/assets/{chip-CDVNzEoh.js → chip-0f0r_-zR.js} +2 -2
- package/web/assets/{client-wwEU7lJc.js → client-CTzGkOjO.js} +2 -2
- package/web/assets/cloud-chat.store-D2oJ_DFn.js +1 -0
- package/web/assets/cloud-session-BLn7b3ke.js +1 -0
- package/web/assets/column-DqAehgUU.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-QvdUlZtb.js → computer-device-desktop-monitor.svg-k2x9Oiiu.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-C9Sr1yFe.js → computer-device-desktop.svg-CyFljvrh.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-CQbvy4qG.js → computer-device-laptop.svg-ZKpV0gtW.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-DRwNxxcl.js → computer-device-mobile-phone-android-samsung-back.svg-BkRkRpCh.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-DZiXwi21.js → computer-device-mobile-phone-android-samsung.svg-gpUXFo9R.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-D1eMrnSS.js → computer-device-mobile-phone-iphone-x-back.svg-CJwr0WJ3.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-MiK72cdg.js → computer-device-mobile-phone-iphone-x.svg-BsPF_njN.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-DkPhnoi4.js → computer-device-mobile-tablet-touch.svg-DON7qRSP.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-CDuR2wiu.js → computer-device-mobile-tablet.svg-BPnT3MvS.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-BUBM3jji.js → computer-device-network-ethernet-cat6.svg-Bpjv_2ub.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-28lu85cP.js → computer-device-network-lan-www.svg-BhXBIyrf.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-BGEvw9iY.js → computer-device-network-wifi-connection.svg-DUaA1GcU.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-D8xYZAWK.js → computer-device-network-wifi-router.svg-k_DqQho1.js} +1 -1
- package/web/assets/{cssMode-Dvq-MecZ.js → cssMode-CfVTS8OM.js} +1 -1
- package/web/assets/{divider-B5VXYGmb.js → divider-C1huit3M.js} +2 -2
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-Ct1P3ToA.js → ecology-science-erlenmeyer-flask.svg-D7pbgLTT.js} +1 -1
- package/web/assets/{fieldset-CIscNGD5.js → fieldset-BVRjgmg4.js} +2 -2
- package/web/assets/{freemarker2-CqFs1Djg.js → freemarker2-DsY_gjrP.js} +1 -1
- package/web/assets/{handlebars-i2b7C1iO.js → handlebars-mh1HrGq7.js} +1 -1
- package/web/assets/{html-BBmJW8Cg.js → html-BsaAhzOa.js} +1 -1
- package/web/assets/{htmlMode-DPAh_Y5y.js → htmlMode-pIhI3cAi.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-BSAfy_cZ.js → image-flash-lightning.svg-DDbhd-eu.js} +1 -1
- package/web/assets/{image-picture-flower.svg-4AEEapQs.js → image-picture-flower.svg-Bbx1pu02.js} +1 -1
- package/web/assets/{index-BqCmf99K.css → index-D7XqcLhE.css} +1 -1
- package/web/assets/{index-Br0Stb0u.js → index-Do0zA8cN.js} +291 -291
- package/web/assets/{interface-alert-exclamation-diamond.svg-DclDPUml.js → interface-alert-exclamation-diamond.svg-DUJeN1hs.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-AQlrdI6-.js → interface-alert-exclamation-triangle-warning.svg-5y99yZSY.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-C70b_ORM.js → interface-alert-information-circle.svg-DPGP01ZU.js} +1 -1
- package/web/assets/{interface-award-crown.svg-D-uMX_D5.js → interface-award-crown.svg-GDQ8ZRUh.js} +1 -1
- package/web/assets/{interface-bookmark.svg-DdNPAQF4.js → interface-bookmark-tag.svg-D1NUMLB5.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-BBO8UdsI.js → interface-bookmark.svg-CTZlXD4R.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-C5m8QsAn.js → interface-calendar-date-one.svg-DXo4raY8.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-D9gk_nRv.js → interface-content-book-open-pages.svg-DTsCVw_D.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-z_oQ-Kg8.js → interface-content-book-page.svg-w9azHLUe.js} +1 -1
- package/web/assets/{interface-content-file.svg-CLt_X895.js → interface-content-file.svg-69CCnbNb.js} +1 -1
- package/web/assets/{interface-content-folder.svg-BW_H9jDi.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-D89FD0hT.js → interface-copy-clipboard.svg-B0AfVljN.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-CSax0FWg.js → interface-edit-attachment.svg-mFLLqqcw.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-C1t3PxkA.js → interface-edit-binocular.svg-CHzgny3z.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-P-HVaqcv.js → interface-edit-magic-wand.svg-BbJg9LMT.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-BCd-B5Li.js → interface-edit-tool-paint-roller.svg-YKE28Xpc.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-Dy_8C148.js → interface-edit-tool-pencil.svg-Cy12MfEi.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-BOUSPQD8.js → interface-favorite-award.svg-COiLJu4w.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-yj88TNA3.js → interface-favorite-flag.svg-C0NtaPD_.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CZCH_6x9.js → interface-favorite-heart.svg-CcKJOjOh.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CTyJilUu.js → interface-favorite-star.svg-C3vRaRtM.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BOBjnmtV.js → interface-favorite-stars-sparkles.svg-DN9WOkFs.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-B0S-kTTJ.js → interface-hierarchy-flowchart.svg-CffgUWNS.js} +1 -1
- package/web/assets/{interface-home-house.svg-Dku5UxpT.js → interface-home-house.svg-B9c4N9Fi.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-CJwD4AsW.js → interface-hyperlink.svg-B8dXB276.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-DwLV7f-n.js → interface-lighting-brightness.svg-BjFVAOW3.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-9XB_WC1w.js → interface-lock-closed.svg-DwNcKmwu.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-DppiuvYV.js → interface-lock-open-unlock.svg-BXZeKlHt.js} +1 -1
- package/web/assets/{interface-login-key.svg-C4pLwiam.js → interface-login-key.svg-CQnZGVMJ.js} +1 -1
- package/web/assets/{interface-search.svg-BfLZwjYy.js → interface-search.svg-CXre9Ja4.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-Cv8hVyGq.js → interface-setting-cog.svg-CGK2QxqV.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BVlc-dhY.js → interface-share-megaphone-bullhorn.svg-BcdTvuin.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-ChHMNOi9.js → interface-share-rocket.svg-DIvKBIQX.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-Bh7sMl8A.js → interface-share-satellite.svg-DNbqAorz.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-CcQ-3-tc.js → interface-share-space-ship.svg-Biobo33q.js} +1 -1
- package/web/assets/{interface-share.svg-CCg2aMOy.js → interface-share.svg-DWjt5rBb.js} +1 -1
- package/web/assets/{interface-signal-square.svg-CU31YeuE.js → interface-signal-square.svg--hmv5CmE.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-BUUuMbzp.js → interface-time-clock-circle.svg-C1GnMIQD.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-W7cfslag.js → interface-time-hour-glass.svg-BCRsHIbm.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-DjyQMEmj.js → interface-users-multiple.svg-CUpeUldF.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-C2sv5n1P.js → interface-weather-moon.svg-QXMY6B27.js} +1 -1
- package/web/assets/{javascript-D-ps7-Fj.js → javascript-DKeyayKI.js} +1 -1
- package/web/assets/{jsonMode-C8spHQzS.js → jsonMode-I9zemAn2.js} +1 -1
- package/web/assets/{liquid-DqSbumgt.js → liquid-xEdzGxP1.js} +1 -1
- package/web/assets/{lspLanguageFeatures-CY8c9PkF.js → lspLanguageFeatures-DOVjCuiu.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-C3X6jNwQ.js → mail-chat-bubble-square.svg-CR8byO78.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-DAIGQOyP.js → mail-send-email-paper-airplane.svg-B0cIMUKH.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CA0S-i50.js → mail-send-envelope.svg-El4e7bXy.js} +1 -1
- package/web/assets/{mdx-DvZHY6Gn.js → mdx-AWoH37r-.js} +1 -1
- package/web/assets/{message-Cj-E8qHk.js → message-CATQqbP_.js} +2 -2
- package/web/assets/{minus-Bk1xGw-l.js → minus-Sd1wO9DO.js} +2 -2
- package/web/assets/modal-BbDElcmR.js +1 -0
- package/web/assets/modal-ZXFHQ6vP.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-TBP6hXoT.js → money-cashier-receipt.svg-BIEGQvlX.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-DYwjJWCD.js → money-currency-dollar-pay.svg-BgCHAYq5.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BR1Gr97f.js → money-graph-arrow-increase.svg-q6aDu3og.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-BNAoJq2R.js → money-graph-bar-chart-increase.svg-mRvG_dWg.js} +1 -1
- package/web/assets/multiselect-BK7hJt7W.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-CHJE8I4R.js → nature-ecology-leaf.svg-DdhvC8mq.js} +1 -1
- package/web/assets/{password-tS13MOUm.js → password-Dnf9oU5a.js} +4 -4
- package/web/assets/{phone-telephone.svg-CJQLiuXQ.js → phone-telephone.svg-CjbyxKZA.js} +1 -1
- package/web/assets/{plus-CB_mX6Lf.js → plus-jYeRYaw9.js} +6 -6
- package/web/assets/process.store-C5LXrPXo.js +1 -0
- package/web/assets/{programming-bug.svg-BXjb-M36.js → programming-bug.svg-DvDCWw4P.js} +1 -1
- package/web/assets/{programming-cloud.svg-gt7FIwaa.js → programming-cloud.svg-2prWAqB7.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-BtO4lpAh.js → programming-computer-database-server.svg-CT7k5d_p.js} +1 -1
- package/web/assets/{programming-computer-database.svg-DQ-dZqw4.js → programming-computer-database.svg-Dm7fpvII.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-laiWKIf7.js → programming-module-four-layout.svg-DBv6QvEO.js} +1 -1
- package/web/assets/{programming-module-three.svg--oNt7CzW.js → programming-module-three.svg-BnP96bPJ.js} +1 -1
- package/web/assets/{programming-module.svg-C9Ai98wU.js → programming-module.svg-Bdr4ZdZO.js} +1 -1
- package/web/assets/{programming-script-code.svg-DhbU3qfH.js → programming-script-code.svg-DIcr6sF-.js} +1 -1
- package/web/assets/{python-BQIuDGub.js → python-C554d-pk.js} +1 -1
- package/web/assets/{razor-C_wqRSVy.js → razor-BvOiTjBp.js} +1 -1
- package/web/assets/router-CCEIu6U5.js +1 -0
- package/web/assets/settings.store-DISlY-48.js +1 -0
- package/web/assets/{shopping-cart.svg-D-mwPXiz.js → shopping-cart.svg-DoCVSOin.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-CplnpU1q.js → shopping-gift-present.svg-CgNqOSQr.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-D0k-fVoU.js → shopping-shipping-box-parcel-package.svg-YkVPEp7J.js} +1 -1
- package/web/assets/src-Cvt5pswj.js +1 -0
- package/web/assets/{src-D0-roPyX.js → src-DKVQlKvZ.js} +33 -33
- package/web/assets/{tabpanel-BXlQXZ2Q.js → tabpanel-DFoLVdFR.js} +3 -3
- package/web/assets/{tag-new-circle.svg-msSLdpvt.js → tag-new-circle.svg-BeUe12X2.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-BfNt3fj_.js → travel-map-earth-globe.svg-B1I1Ed-v.js} +1 -1
- package/web/assets/trpc-CVPkysoa.js +1 -0
- package/web/assets/{tsMode-B-iW-fA7.js → tsMode-BPD-0Vep.js} +1 -1
- package/web/assets/{typescript-X0FI4nNI.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-BGZfBXt_.js → xml-B0CfAsFk.js} +1 -1
- package/web/assets/{yaml-Bu_QXl8g.js → yaml-B3zRI6AS.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-2I47P7CA.js +0 -7
- package/chunk-NJJMESIY.js.map +0 -1
- package/src-7CJJBMY3.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-DJWCM29h.js +0 -13
- package/web/assets/AgentTerminalPage-CQxk6jVs.css +0 -1
- package/web/assets/AgentTerminalPage-DStCvPsn.js +0 -1
- package/web/assets/AiChatPage-B74k4w7z.js +0 -1
- package/web/assets/AppLayout-Crr8vrnA.js +0 -1
- package/web/assets/AuditPage-ya7Q_-y8.js +0 -1
- package/web/assets/CloudAccountPage--zPhBcyX.js +0 -1
- package/web/assets/CloudAccountPage-BsXQlx4x.js +0 -1
- package/web/assets/CloudMessagingPage-DbhpPX4q.css +0 -1
- package/web/assets/CloudMessagingPage-sXT8SLY4.js +0 -2
- package/web/assets/DashboardPage-y4tWdya9.js +0 -1
- package/web/assets/EnvironmentFormPage-BSeIsEH-.js +0 -1
- package/web/assets/EnvironmentListPage-BDqcug66.css +0 -1
- package/web/assets/EnvironmentListPage-DtSTzbmv.js +0 -1
- package/web/assets/EnvironmentSelector-Dbe1Ilq8.js +0 -1
- package/web/assets/KanbanBoardPage-PkAwHbvp.js +0 -4
- package/web/assets/KanbanListPage-BphN58qM.js +0 -1
- package/web/assets/LaunchProjectPage-ClVBkFsC.js +0 -1
- package/web/assets/LaunchProjectPage-CxXC2U3O.css +0 -1
- package/web/assets/LaunchServicesPage-BAvD32G1.css +0 -1
- package/web/assets/LaunchServicesPage-C4C8l5wP.js +0 -1
- package/web/assets/LogViewer-DeWk02W9.js +0 -3
- package/web/assets/ProcessControls-uUzThwLe.js +0 -1
- package/web/assets/ProcessDetailPage-Dj9-KZqI.js +0 -1
- package/web/assets/ProjectDetailPage-B42imx75.css +0 -1
- package/web/assets/ProjectDetailPage-Prcd6a6y.js +0 -1
- package/web/assets/ProjectListPage-BGU6SKAr.css +0 -1
- package/web/assets/ProjectListPage-C3-QvMAf.js +0 -1
- package/web/assets/RandomJobTestPage-B5USJ2CQ.js +0 -2
- package/web/assets/ScenarioEditorPage-D0XY_WOp.js +0 -14
- package/web/assets/SendToChatDialog-BSa5s8PE.js +0 -1
- package/web/assets/ServiceControlsBar-CRVx5mMr.js +0 -1
- package/web/assets/ServiceDetailPage-DzxAxNdH.js +0 -2
- package/web/assets/ServiceFormPage-D31sr_k0.css +0 -1
- package/web/assets/ServiceFormPage-_3cU1hqt.js +0 -1
- package/web/assets/SettingsPage-B0mpjswp.js +0 -2062
- package/web/assets/UnlockPage-DAvZd_hY.js +0 -1
- package/web/assets/UnlockPage-cWvMhfyi.css +0 -1
- package/web/assets/VariablesTable-CoeTpHQw.js +0 -1
- package/web/assets/VersionBadge-D_oFrbj6.js +0 -1
- package/web/assets/WikiPage-HEXd9iFN.js +0 -1
- package/web/assets/WikiView-D_gNl0pw.js +0 -1
- package/web/assets/add-scalar-classes-B5XCUsCH.js +0 -387
- package/web/assets/auth-errors-C44F3O24.js +0 -1
- package/web/assets/card-DLRYSKgj.js +0 -32
- package/web/assets/cloud-chat.store-2Mksi6iL.js +0 -1
- package/web/assets/cloud-session-C0DzgONu.js +0 -1
- package/web/assets/column-TZbNKWtE.js +0 -907
- package/web/assets/interface-content-folder.svg-BJQbuSNW.js +0 -1
- package/web/assets/modal-Bi7DAFyz.js +0 -1
- package/web/assets/modal-BtlOliEo.js +0 -5
- package/web/assets/multiselect-DI4UWQQc.js +0 -251
- package/web/assets/process.store-DCXMZqHz.js +0 -1
- package/web/assets/router-B5tVgvg3.js +0 -1
- package/web/assets/settings.store-p3x3oG-N.js +0 -1
- package/web/assets/src-B_ytlQOt.js +0 -1
- package/web/assets/trpc--zmPP0fK.js +0 -1
- package/web/assets/useAiChatDrawer-CmZm2O_C.js +0 -1
- package/web/assets/useCloudOrg-BsMHgwHL.js +0 -1
- /package/{agent-manager-2I47P7CA.js.map → agent-manager-JJYZDLNB.js.map} +0 -0
- /package/web/assets/{abap-B8xnHZJW.js → abap-DMmvWZUy.js} +0 -0
- /package/web/assets/{apex-B69W3sGq.js → apex-D89PiTzU.js} +0 -0
- /package/web/assets/{azcli-Eaai8vgm.js → azcli-ChnjTTA5.js} +0 -0
- /package/web/assets/{bat-CCyh2P9V.js → bat-uLzQ_FhK.js} +0 -0
- /package/web/assets/{bicep-CyAc2Run.js → bicep-CMOK7Q1v.js} +0 -0
- /package/web/assets/{cameligo-CJVuMDnv.js → cameligo-D1AyojFH.js} +0 -0
- /package/web/assets/{clojure-DCWtDuXT.js → clojure-D9JoUgXn.js} +0 -0
- /package/web/assets/{coffee-93zwCqZu.js → coffee-D-5sSToL.js} +0 -0
- /package/web/assets/{cpp-t1qXcBbB.js → cpp-BqT_t_y9.js} +0 -0
- /package/web/assets/{csharp-Bu0-wvSx.js → csharp-CuToYI91.js} +0 -0
- /package/web/assets/{csp-AaiYnRi_.js → csp-CffcxvlO.js} +0 -0
- /package/web/assets/{css-BS-T3bCT.js → css-CUD0biQW.js} +0 -0
- /package/web/assets/{cypher-QYdwWDet.js → cypher-ByyWL_9U.js} +0 -0
- /package/web/assets/{dart-DRQfRz5u.js → dart-B__ipcUn.js} +0 -0
- /package/web/assets/{dockerfile-Cf422HaY.js → dockerfile-DS-_8bWw.js} +0 -0
- /package/web/assets/{ecl-DKmCxEZC.js → ecl-DWsNCBUj.js} +0 -0
- /package/web/assets/{elixir-DXxuFQwb.js → elixir-OfjEy-3g.js} +0 -0
- /package/web/assets/{flow9-BhnEDmps.js → flow9-BPX22hxS.js} +0 -0
- /package/web/assets/{fsharp-BcdMpySh.js → fsharp-CVJcfIUn.js} +0 -0
- /package/web/assets/{go-CUNzU43j.js → go-CfRHZ3yg.js} +0 -0
- /package/web/assets/{graphql-0GEdoWdT.js → graphql-BZaO3ttK.js} +0 -0
- /package/web/assets/{hcl-7aT0BoBu.js → hcl-BF9-qUku.js} +0 -0
- /package/web/assets/{ini-C2uC_Kkd.js → ini-BUvw6xhr.js} +0 -0
- /package/web/assets/{java-BGh_orDD.js → java-BZ5BNd2x.js} +0 -0
- /package/web/assets/{julia-BMkYL7l7.js → julia-DN38cgYT.js} +0 -0
- /package/web/assets/{kotlin-CaStfl8T.js → kotlin-CjEJKT8q.js} +0 -0
- /package/web/assets/{less-CpP708lq.js → less-DMEH_Nwq.js} +0 -0
- /package/web/assets/{lexon-n74w-VMa.js → lexon-CKQUX8Ov.js} +0 -0
- /package/web/assets/{lua-DV3MQq-H.js → lua-CuWjKLJ0.js} +0 -0
- /package/web/assets/{m3-Cclze1bC.js → m3-CEp1bVrM.js} +0 -0
- /package/web/assets/{markdown-C8b0Ckdo.js → markdown-DxtQ_puq.js} +0 -0
- /package/web/assets/{mips-pWj6zxei.js → mips-Dx7qydpO.js} +0 -0
- /package/web/assets/{msdax-DvyywuD0.js → msdax-DpNCaSiO.js} +0 -0
- /package/web/assets/{mysql-CZlMFPhf.js → mysql-C3xsBDPP.js} +0 -0
- /package/web/assets/{objective-c-Dfzs1cqa.js → objective-c-BbaVHCX1.js} +0 -0
- /package/web/assets/{pascal-DnvBS6YC.js → pascal-sDju2faq.js} +0 -0
- /package/web/assets/{pascaligo-BqQrNWHm.js → pascaligo-ChCdOH6b.js} +0 -0
- /package/web/assets/{perl-PmXI7PaC.js → perl-BCgLFj01.js} +0 -0
- /package/web/assets/{pgsql-BSIv6vTg.js → pgsql-DtKby69f.js} +0 -0
- /package/web/assets/{php-DFl1Flu9.js → php-NYvR17Qb.js} +0 -0
- /package/web/assets/{pla-D85akHEG.js → pla-gSg-RBG0.js} +0 -0
- /package/web/assets/{postiats-BENv2q_G.js → postiats-BQxHyDfy.js} +0 -0
- /package/web/assets/{powerquery-BFkjDbIZ.js → powerquery-DzDmbVZN.js} +0 -0
- /package/web/assets/{powershell-YrWnOFV5.js → powershell-yy4Q5BEQ.js} +0 -0
- /package/web/assets/{protobuf-Defuvypk.js → protobuf-B_hIk9q0.js} +0 -0
- /package/web/assets/{pug-U5vTkfZW.js → pug-CdeEb1ft.js} +0 -0
- /package/web/assets/{qsharp-CYAWcALE.js → qsharp-CiSquEgT.js} +0 -0
- /package/web/assets/{r-DfDvKIQI.js → r-D1Ocz1x4.js} +0 -0
- /package/web/assets/{redis-CfxXb5P7.js → redis-D42Y12yz.js} +0 -0
- /package/web/assets/{redshift-C79hPgxo.js → redshift-CS62MYfG.js} +0 -0
- /package/web/assets/{restructuredtext-8wPbRyeC.js → restructuredtext-CKFSMEXw.js} +0 -0
- /package/web/assets/{ruby-QxUAWasq.js → ruby-C4gTaeU3.js} +0 -0
- /package/web/assets/{rust-HuSf37VN.js → rust-C_f2AiHQ.js} +0 -0
- /package/web/assets/{sb-Sv7lt4AB.js → sb-CdNdpP1r.js} +0 -0
- /package/web/assets/{scala-DKemzKKU.js → scala-N4EWaFTL.js} +0 -0
- /package/web/assets/{scheme-BzHyg2h9.js → scheme-CttIARxx.js} +0 -0
- /package/web/assets/{scss-rEyGzHl_.js → scss-v0wtbxaE.js} +0 -0
- /package/web/assets/{shell-B0M_8Ipp.js → shell-BJdEWXbc.js} +0 -0
- /package/web/assets/{solidity-DBlqOy8H.js → solidity-DKDa59zZ.js} +0 -0
- /package/web/assets/{sophia-CvF25coV.js → sophia--Kw-vDpr.js} +0 -0
- /package/web/assets/{sparql-Bh-bEONh.js → sparql-BI8jS9Pc.js} +0 -0
- /package/web/assets/{sql-b2efFD_k.js → sql-Dz6z--6O.js} +0 -0
- /package/web/assets/{st-CZYKif4r.js → st-CT8D05gv.js} +0 -0
- /package/web/assets/{swift--G_pPFZi.js → swift-Ayb3KzWx.js} +0 -0
- /package/web/assets/{systemverilog-lKrXkwoz.js → systemverilog-BtWJM9O5.js} +0 -0
- /package/web/assets/{tcl-BBD-NhPH.js → tcl-BJvUWpbV.js} +0 -0
- /package/web/assets/{twig-Cp-9q602.js → twig-c3YaBCU6.js} +0 -0
- /package/web/assets/{typespec-CFPGsTQu.js → typespec-gFCWLBoZ.js} +0 -0
- /package/web/assets/{uuid-2Kb5PDpq.js → uuid-B3B8HIK9.js} +0 -0
- /package/web/assets/{vb-CF5A6m2D.js → vb-CVtfWXV2.js} +0 -0
- /package/web/assets/{w3c-keyname-B2B-WOb1.js → w3c-keyname-nn0G3QC2.js} +0 -0
- /package/web/assets/{wgsl-DwzoWMFM.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 = [];
|
|
@@ -125,20 +162,28 @@ async function ensureLocalVault() {
|
|
|
125
162
|
}
|
|
126
163
|
var KEY_FILES = [".encryption.key.enc", ".runeya-verify"];
|
|
127
164
|
var keyRootPromise = null;
|
|
165
|
+
async function holdsKey(root) {
|
|
166
|
+
for (const filename of KEY_FILES) {
|
|
167
|
+
try {
|
|
168
|
+
await access(join(root, filename));
|
|
169
|
+
return true;
|
|
170
|
+
} catch {
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
128
175
|
function keyRoot() {
|
|
129
176
|
keyRootPromise ??= (async () => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
try {
|
|
133
|
-
await access(join(local, filename));
|
|
134
|
-
return local;
|
|
135
|
-
} catch {
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return machineRoot();
|
|
177
|
+
if (await holdsKey(machineRoot())) return machineRoot();
|
|
178
|
+
return await holdsKey(localVaultRoot()) ? localVaultRoot() : machineRoot();
|
|
139
179
|
})();
|
|
140
180
|
return keyRootPromise;
|
|
141
181
|
}
|
|
182
|
+
async function legacyVaultRoot() {
|
|
183
|
+
const local = localVaultRoot();
|
|
184
|
+
if (await keyRoot() === local) return null;
|
|
185
|
+
return await holdsKey(local) ? local : null;
|
|
186
|
+
}
|
|
142
187
|
|
|
143
188
|
// ../server/src/utils/encryption-key.ts
|
|
144
189
|
import { createHash } from "crypto";
|
|
@@ -261,9 +306,9 @@ var AgentStore = class {
|
|
|
261
306
|
*/
|
|
262
307
|
async readFromDisk() {
|
|
263
308
|
try {
|
|
264
|
-
return await
|
|
309
|
+
return await readFile2(await this.getFilePath(), "utf-8");
|
|
265
310
|
} catch {
|
|
266
|
-
return
|
|
311
|
+
return readFile2(this.getLegacyFilePath(), "utf-8");
|
|
267
312
|
}
|
|
268
313
|
}
|
|
269
314
|
async ensureDir() {
|
|
@@ -296,7 +341,7 @@ var AgentStore = class {
|
|
|
296
341
|
passthroughEnv: this.passthroughEnv,
|
|
297
342
|
traefikConfigs: this.traefikConfigs
|
|
298
343
|
};
|
|
299
|
-
await
|
|
344
|
+
await writeFile2(tmpPath, JSON.stringify(fileData, null, 2), "utf-8");
|
|
300
345
|
await rename(tmpPath, filePath);
|
|
301
346
|
await chmod(filePath, 384);
|
|
302
347
|
}
|
|
@@ -397,47 +442,146 @@ var agentStore = new AgentStore();
|
|
|
397
442
|
|
|
398
443
|
// ../server/src/services/service-store.ts
|
|
399
444
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
400
|
-
import { readFile as
|
|
445
|
+
import { readFile as readFile4, writeFile as writeFile4, rename as rename3, mkdir as mkdir4, chmod as chmod3 } from "fs/promises";
|
|
401
446
|
import { join as join3 } from "path";
|
|
402
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
|
+
|
|
403
465
|
// ../server/src/services/vault-registry.ts
|
|
404
466
|
var loadProjects = null;
|
|
405
467
|
var projectRoots = /* @__PURE__ */ new Map();
|
|
468
|
+
var projectRefs = /* @__PURE__ */ new Map();
|
|
406
469
|
var serviceOwners = /* @__PURE__ */ new Map();
|
|
407
470
|
function registerProjectLoader(load) {
|
|
408
471
|
loadProjects = load;
|
|
409
472
|
}
|
|
410
|
-
function
|
|
411
|
-
|
|
473
|
+
async function ensureProjectsLoaded() {
|
|
474
|
+
await loadProjects?.();
|
|
412
475
|
}
|
|
413
|
-
function
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
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);
|
|
417
488
|
}
|
|
418
489
|
}
|
|
419
|
-
function setProjectServices(
|
|
420
|
-
|
|
421
|
-
|
|
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);
|
|
422
502
|
}
|
|
423
|
-
for (const serviceId of serviceIds) serviceOwners.set(serviceId, projectId);
|
|
424
503
|
}
|
|
425
|
-
function
|
|
426
|
-
return projectRoots.get(
|
|
504
|
+
function rootOfProjectRef(ref) {
|
|
505
|
+
return projectRoots.get(projectKey(ref)) ?? localVaultRoot();
|
|
427
506
|
}
|
|
428
|
-
function
|
|
429
|
-
const
|
|
430
|
-
|
|
507
|
+
function refsOfProjectId(projectId) {
|
|
508
|
+
const matches = [];
|
|
509
|
+
for (const ref of projectRefs.values()) {
|
|
510
|
+
if (ref.id === projectId) matches.push(ref);
|
|
511
|
+
}
|
|
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();
|
|
523
|
+
}
|
|
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 };
|
|
532
|
+
}
|
|
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);
|
|
431
554
|
}
|
|
432
555
|
|
|
433
556
|
// ../server/src/services/environment-store.ts
|
|
434
557
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
435
|
-
import { readFile as
|
|
558
|
+
import { readFile as readFile3, writeFile as writeFile3, rename as rename2, mkdir as mkdir3, chmod as chmod2 } from "fs/promises";
|
|
436
559
|
import { join as join2 } from "path";
|
|
437
560
|
|
|
438
561
|
// ../server/src/services/crypto-helpers.ts
|
|
439
562
|
import { randomBytes as randomBytes2, createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2 } from "crypto";
|
|
440
563
|
var ALGORITHM2 = "aes-256-gcm";
|
|
564
|
+
function encryptValueWith(key, plaintext) {
|
|
565
|
+
const iv = randomBytes2(16);
|
|
566
|
+
const cipher = createCipheriv2(ALGORITHM2, key, iv);
|
|
567
|
+
let enc = cipher.update(plaintext, "utf-8", "hex");
|
|
568
|
+
enc += cipher.final("hex");
|
|
569
|
+
const authTag = cipher.getAuthTag().toString("hex");
|
|
570
|
+
return `${iv.toString("hex")}:${authTag}:${enc}`;
|
|
571
|
+
}
|
|
572
|
+
function decryptValueWith(key, encrypted) {
|
|
573
|
+
const parts = encrypted.split(":");
|
|
574
|
+
if (parts.length !== 3) throw new Error("Invalid encrypted value format \u2014 expected iv:authTag:ciphertext");
|
|
575
|
+
const [ivHex, authTagHex, ciphertext] = parts;
|
|
576
|
+
if (!/^[0-9a-f]+$/i.test(ivHex) || !/^[0-9a-f]+$/i.test(authTagHex) || ciphertext !== "" && !/^[0-9a-f]+$/i.test(ciphertext)) {
|
|
577
|
+
throw new Error("Invalid hex in encrypted value \u2014 possible data corruption");
|
|
578
|
+
}
|
|
579
|
+
const decipher = createDecipheriv2(ALGORITHM2, key, Buffer.from(ivHex, "hex"), { authTagLength: 16 });
|
|
580
|
+
decipher.setAuthTag(Buffer.from(authTagHex, "hex"));
|
|
581
|
+
let dec = decipher.update(ciphertext, "hex", "utf-8");
|
|
582
|
+
dec += decipher.final("utf-8");
|
|
583
|
+
return dec;
|
|
584
|
+
}
|
|
441
585
|
function encryptValue(plaintext) {
|
|
442
586
|
const maybeKey = getEncryptionKey();
|
|
443
587
|
if (!maybeKey) {
|
|
@@ -1794,15 +1938,44 @@ var EnvironmentStore = class {
|
|
|
1794
1938
|
/**
|
|
1795
1939
|
* The vault an environment must be written to: its project's.
|
|
1796
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
|
+
*
|
|
1797
1945
|
* Falls back to where it was last read, then to the local vault — an
|
|
1798
1946
|
* environment whose project is unknown belongs to the launch directory, which
|
|
1799
1947
|
* is where it lived before vaults existed.
|
|
1800
1948
|
*/
|
|
1801
1949
|
rootFor(environment) {
|
|
1802
|
-
const known = this.roots.get(environment.id);
|
|
1803
|
-
const projectRoot = environment.projectId ?
|
|
1950
|
+
const known = this.roots.get(environment.id) ?? null;
|
|
1951
|
+
const projectRoot = environment.projectId ? rootOfProjectAmong(environment.projectId, known) : null;
|
|
1804
1952
|
return projectRoot ?? known ?? localVaultRoot();
|
|
1805
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
|
+
}
|
|
1806
1979
|
extractEncryptedCache(environment) {
|
|
1807
1980
|
const envSlots = extractEncryptedVariableSlots(
|
|
1808
1981
|
environment.variables
|
|
@@ -1840,14 +2013,20 @@ var EnvironmentStore = class {
|
|
|
1840
2013
|
async load() {
|
|
1841
2014
|
if (this.loaded) return;
|
|
1842
2015
|
this.loaded = true;
|
|
2016
|
+
await ensureProjectsLoaded();
|
|
1843
2017
|
if (!getEncryptionKey()) {
|
|
1844
2018
|
this.loaded = false;
|
|
1845
2019
|
return;
|
|
1846
2020
|
}
|
|
1847
2021
|
for (const root of await allVaultRoots()) {
|
|
1848
2022
|
try {
|
|
1849
|
-
const raw = await
|
|
2023
|
+
const raw = await readFile3(this.getFilePath(root), "utf-8");
|
|
1850
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
|
+
}
|
|
1851
2030
|
for (const e of data) {
|
|
1852
2031
|
this.diskEncryptedSlots.set(e.id, this.extractEncryptedCache(e));
|
|
1853
2032
|
const decrypted = this.decryptEnvironment(e);
|
|
@@ -1866,13 +2045,16 @@ var EnvironmentStore = class {
|
|
|
1866
2045
|
*/
|
|
1867
2046
|
async save() {
|
|
1868
2047
|
const byRoot = /* @__PURE__ */ new Map();
|
|
1869
|
-
for (const root of this.roots.values())
|
|
2048
|
+
for (const root of this.roots.values()) {
|
|
2049
|
+
if (!isVaultConflicted(root)) byRoot.set(root, []);
|
|
2050
|
+
}
|
|
1870
2051
|
byRoot.set(localVaultRoot(), byRoot.get(localVaultRoot()) ?? []);
|
|
1871
2052
|
for (const environment of this.environments.values()) {
|
|
1872
2053
|
const root = this.rootFor(environment);
|
|
1873
2054
|
const prepared = this.encryptEnvironment(environment);
|
|
1874
2055
|
this.diskEncryptedSlots.set(prepared.id, this.extractEncryptedCache(prepared));
|
|
1875
2056
|
this.roots.set(environment.id, root);
|
|
2057
|
+
if (isVaultConflicted(root)) continue;
|
|
1876
2058
|
const bucket = byRoot.get(root);
|
|
1877
2059
|
if (bucket) bucket.push(prepared);
|
|
1878
2060
|
else byRoot.set(root, [prepared]);
|
|
@@ -1881,7 +2063,7 @@ var EnvironmentStore = class {
|
|
|
1881
2063
|
await mkdir3(root, { recursive: true });
|
|
1882
2064
|
const filePath = this.getFilePath(root);
|
|
1883
2065
|
const tmpPath = filePath + ".tmp";
|
|
1884
|
-
await
|
|
2066
|
+
await writeFile3(tmpPath, JSON.stringify(environments, null, 2), "utf-8");
|
|
1885
2067
|
await rename2(tmpPath, filePath);
|
|
1886
2068
|
await chmod2(filePath, 384);
|
|
1887
2069
|
}
|
|
@@ -1906,15 +2088,6 @@ var EnvironmentStore = class {
|
|
|
1906
2088
|
* which project it belongs to — so this is what lets them be stored with
|
|
1907
2089
|
* their project rather than in one machine-wide pile.
|
|
1908
2090
|
*/
|
|
1909
|
-
async projectIdOfVariable(variableId) {
|
|
1910
|
-
await this.load();
|
|
1911
|
-
for (const environment of this.environments.values()) {
|
|
1912
|
-
if (environment.variables && variableId in environment.variables) {
|
|
1913
|
-
return environment.projectId;
|
|
1914
|
-
}
|
|
1915
|
-
}
|
|
1916
|
-
return null;
|
|
1917
|
-
}
|
|
1918
2091
|
/**
|
|
1919
2092
|
* Drop a project's environments from memory, without touching the disk.
|
|
1920
2093
|
*
|
|
@@ -1932,15 +2105,37 @@ var EnvironmentStore = class {
|
|
|
1932
2105
|
}
|
|
1933
2106
|
this.notify();
|
|
1934
2107
|
}
|
|
1935
|
-
|
|
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) {
|
|
1936
2117
|
await this.load();
|
|
1937
|
-
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);
|
|
1938
2126
|
}
|
|
1939
2127
|
async get(id) {
|
|
1940
2128
|
await this.load();
|
|
1941
2129
|
return this.environments.get(id) ?? null;
|
|
1942
2130
|
}
|
|
1943
|
-
|
|
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) {
|
|
1944
2139
|
await this.load();
|
|
1945
2140
|
const parsed = CreateEnvironmentSchema.parse(input);
|
|
1946
2141
|
const environment = {
|
|
@@ -1967,6 +2162,9 @@ var EnvironmentStore = class {
|
|
|
1967
2162
|
}
|
|
1968
2163
|
}
|
|
1969
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
|
+
}
|
|
1970
2168
|
await this.save();
|
|
1971
2169
|
return environment;
|
|
1972
2170
|
}
|
|
@@ -2022,18 +2220,18 @@ var EnvironmentStore = class {
|
|
|
2022
2220
|
await this.save();
|
|
2023
2221
|
return true;
|
|
2024
2222
|
}
|
|
2025
|
-
async getByProjectId(projectId) {
|
|
2223
|
+
async getByProjectId(projectId, orgId) {
|
|
2026
2224
|
await this.load();
|
|
2027
|
-
return
|
|
2225
|
+
return this.ofProject(projectId, orgId);
|
|
2028
2226
|
}
|
|
2029
2227
|
async listAllGlobal() {
|
|
2030
2228
|
await this.load();
|
|
2031
2229
|
return Array.from(this.environments.values()).filter((e) => e.scope === "global");
|
|
2032
2230
|
}
|
|
2033
2231
|
// --- Scope-based Query Methods ---
|
|
2034
|
-
async listByScope(projectId, scope) {
|
|
2232
|
+
async listByScope(projectId, scope, orgId) {
|
|
2035
2233
|
await this.load();
|
|
2036
|
-
return
|
|
2234
|
+
return this.ofProject(projectId, orgId).filter((e) => e.scope === scope);
|
|
2037
2235
|
}
|
|
2038
2236
|
async findServiceEnvironment(serviceId, globalEnvId) {
|
|
2039
2237
|
await this.load();
|
|
@@ -2221,7 +2419,7 @@ var ServiceStore = class {
|
|
|
2221
2419
|
* finally to the local vault.
|
|
2222
2420
|
*/
|
|
2223
2421
|
rootFor(serviceId) {
|
|
2224
|
-
return rootOfService(serviceId
|
|
2422
|
+
return rootOfService(serviceId, this.roots.get(serviceId) ?? null) ?? localVaultRoot();
|
|
2225
2423
|
}
|
|
2226
2424
|
/**
|
|
2227
2425
|
* Read every vault: the launch directory and each materialized cloud project.
|
|
@@ -2233,10 +2431,16 @@ var ServiceStore = class {
|
|
|
2233
2431
|
if (this.loaded) return;
|
|
2234
2432
|
if (!getEncryptionKey()) return;
|
|
2235
2433
|
this.loaded = true;
|
|
2434
|
+
await ensureProjectsLoaded();
|
|
2236
2435
|
for (const root of await allVaultRoots()) {
|
|
2237
2436
|
try {
|
|
2238
|
-
const raw = await
|
|
2437
|
+
const raw = await readFile4(this.getFilePath(root), "utf-8");
|
|
2239
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
|
+
}
|
|
2240
2444
|
for (const s of data) {
|
|
2241
2445
|
if (s.commands) {
|
|
2242
2446
|
for (const cmd of s.commands) {
|
|
@@ -2262,13 +2466,16 @@ var ServiceStore = class {
|
|
|
2262
2466
|
*/
|
|
2263
2467
|
async save() {
|
|
2264
2468
|
const byRoot = /* @__PURE__ */ new Map();
|
|
2265
|
-
for (const root of this.roots.values())
|
|
2469
|
+
for (const root of this.roots.values()) {
|
|
2470
|
+
if (!isVaultConflicted(root)) byRoot.set(root, []);
|
|
2471
|
+
}
|
|
2266
2472
|
byRoot.set(localVaultRoot(), byRoot.get(localVaultRoot()) ?? []);
|
|
2267
2473
|
for (const service of this.services.values()) {
|
|
2268
2474
|
const root = this.rootFor(service.id);
|
|
2269
2475
|
const prepared = prepareForDisk(service, this.diskForm.get(service.id));
|
|
2270
2476
|
this.diskForm.set(prepared.id, prepared);
|
|
2271
2477
|
this.roots.set(service.id, root);
|
|
2478
|
+
if (isVaultConflicted(root)) continue;
|
|
2272
2479
|
const bucket = byRoot.get(root);
|
|
2273
2480
|
if (bucket) bucket.push(prepared);
|
|
2274
2481
|
else byRoot.set(root, [prepared]);
|
|
@@ -2277,7 +2484,7 @@ var ServiceStore = class {
|
|
|
2277
2484
|
await mkdir4(root, { recursive: true });
|
|
2278
2485
|
const filePath = this.getFilePath(root);
|
|
2279
2486
|
const tmpPath = filePath + ".tmp";
|
|
2280
|
-
await
|
|
2487
|
+
await writeFile4(tmpPath, JSON.stringify(services, null, 2), "utf-8");
|
|
2281
2488
|
await rename3(tmpPath, filePath);
|
|
2282
2489
|
await chmod3(filePath, 384);
|
|
2283
2490
|
}
|
|
@@ -2551,14 +2758,14 @@ var AgentSpawner = class {
|
|
|
2551
2758
|
console.log(`[agent-spawner] Local agent registered as ${LOCAL_AGENT_ID}`);
|
|
2552
2759
|
}
|
|
2553
2760
|
waitForPassphrase() {
|
|
2554
|
-
return new Promise((
|
|
2761
|
+
return new Promise((resolve) => {
|
|
2555
2762
|
if (!this.agentProcess?.stdout) {
|
|
2556
|
-
|
|
2763
|
+
resolve(null);
|
|
2557
2764
|
return;
|
|
2558
2765
|
}
|
|
2559
2766
|
const rl = createInterface({ input: this.agentProcess.stdout });
|
|
2560
2767
|
const timeout = setTimeout(() => {
|
|
2561
|
-
|
|
2768
|
+
resolve(null);
|
|
2562
2769
|
}, PASSPHRASE_TIMEOUT);
|
|
2563
2770
|
let initialPassphraseFound = false;
|
|
2564
2771
|
rl.on("line", (line) => {
|
|
@@ -2568,7 +2775,7 @@ var AgentSpawner = class {
|
|
|
2568
2775
|
if (!initialPassphraseFound) {
|
|
2569
2776
|
initialPassphraseFound = true;
|
|
2570
2777
|
clearTimeout(timeout);
|
|
2571
|
-
|
|
2778
|
+
resolve(newPassphrase);
|
|
2572
2779
|
} else {
|
|
2573
2780
|
console.log("[agent-spawner] \u{1F504} Agent reloaded, updating passphrase...");
|
|
2574
2781
|
this.updateAgentPassphrase(newPassphrase).catch((err) => {
|
|
@@ -2588,14 +2795,14 @@ var AgentSpawner = class {
|
|
|
2588
2795
|
this.agentProcess?.on("error", (err) => {
|
|
2589
2796
|
console.error("[agent-spawner] Failed to spawn agent:", err);
|
|
2590
2797
|
clearTimeout(timeout);
|
|
2591
|
-
if (!initialPassphraseFound)
|
|
2798
|
+
if (!initialPassphraseFound) resolve(null);
|
|
2592
2799
|
});
|
|
2593
2800
|
this.agentProcess?.on("exit", (code) => {
|
|
2594
2801
|
if (code !== null && code !== 0) {
|
|
2595
2802
|
console.error(`[agent-spawner] Agent exited with code ${code}`);
|
|
2596
2803
|
}
|
|
2597
2804
|
clearTimeout(timeout);
|
|
2598
|
-
if (!initialPassphraseFound)
|
|
2805
|
+
if (!initialPassphraseFound) resolve(null);
|
|
2599
2806
|
});
|
|
2600
2807
|
});
|
|
2601
2808
|
}
|
|
@@ -2607,9 +2814,9 @@ var AgentSpawner = class {
|
|
|
2607
2814
|
if (this.agentProcess) {
|
|
2608
2815
|
console.log("[agent-spawner] Stopping local agent...");
|
|
2609
2816
|
this.agentProcess.kill("SIGKILL");
|
|
2610
|
-
await new Promise((
|
|
2611
|
-
this.agentProcess?.on("exit", () =>
|
|
2612
|
-
setTimeout(
|
|
2817
|
+
await new Promise((resolve) => {
|
|
2818
|
+
this.agentProcess?.on("exit", () => resolve());
|
|
2819
|
+
setTimeout(resolve, 2e3);
|
|
2613
2820
|
});
|
|
2614
2821
|
this.agentProcess = null;
|
|
2615
2822
|
}
|
|
@@ -3065,7 +3272,7 @@ var AgentManager = class extends EventEmitter2 {
|
|
|
3065
3272
|
if (isReRegistration) {
|
|
3066
3273
|
console.log(`[agent-manager] Re-registering agent ${config.name} (${config.id})`);
|
|
3067
3274
|
this.disconnectAgent(config.id);
|
|
3068
|
-
await new Promise((
|
|
3275
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
3069
3276
|
}
|
|
3070
3277
|
this.connectAgent(config);
|
|
3071
3278
|
console.log(`[agent-manager] Agent ${config.name} (${config.id}) connection established`);
|
|
@@ -3082,7 +3289,7 @@ var AgentManager = class extends EventEmitter2 {
|
|
|
3082
3289
|
if (isReRegistration) {
|
|
3083
3290
|
console.log(`[agent-manager] Re-registering local agent ${config.name} (${config.id})`);
|
|
3084
3291
|
this.disconnectAgent(config.id);
|
|
3085
|
-
await new Promise((
|
|
3292
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
3086
3293
|
}
|
|
3087
3294
|
const storedPassthrough = agentStore.getPassthroughEnv(config.id);
|
|
3088
3295
|
const configWithPassthrough = { ...config, passthroughEnv: storedPassthrough };
|
|
@@ -3409,6 +3616,8 @@ export {
|
|
|
3409
3616
|
orgVaultRoot,
|
|
3410
3617
|
projectVaultRoot,
|
|
3411
3618
|
vaultFor,
|
|
3619
|
+
stampOrgCloud,
|
|
3620
|
+
readOrgClouds,
|
|
3412
3621
|
listCloudVaults,
|
|
3413
3622
|
allVaultRoots,
|
|
3414
3623
|
machineFilePath,
|
|
@@ -3416,6 +3625,7 @@ export {
|
|
|
3416
3625
|
legacyMachineFilePath,
|
|
3417
3626
|
ensureLocalVault,
|
|
3418
3627
|
keyRoot,
|
|
3628
|
+
legacyVaultRoot,
|
|
3419
3629
|
ProjectSchema,
|
|
3420
3630
|
ScenarioGroupSchema,
|
|
3421
3631
|
ScenarioNodeSchema,
|
|
@@ -3449,6 +3659,8 @@ export {
|
|
|
3449
3659
|
getCollection,
|
|
3450
3660
|
readEntity,
|
|
3451
3661
|
writeEntity,
|
|
3662
|
+
encryptValueWith,
|
|
3663
|
+
decryptValueWith,
|
|
3452
3664
|
encryptValue,
|
|
3453
3665
|
decryptValue,
|
|
3454
3666
|
stableEncryptValue,
|
|
@@ -3456,11 +3668,15 @@ export {
|
|
|
3456
3668
|
decryptVariableSlots,
|
|
3457
3669
|
extractEncryptedVariableSlots,
|
|
3458
3670
|
isEncryptedValue,
|
|
3671
|
+
projectKey,
|
|
3672
|
+
AmbiguousProjectError,
|
|
3459
3673
|
registerProjectLoader,
|
|
3674
|
+
ensureProjectsLoaded,
|
|
3460
3675
|
setProjectVault,
|
|
3461
3676
|
forgetProject,
|
|
3462
3677
|
setProjectServices,
|
|
3463
|
-
|
|
3678
|
+
rootOfProjectAmong,
|
|
3679
|
+
refOfProjectAmong,
|
|
3464
3680
|
environmentStore,
|
|
3465
3681
|
serviceStore,
|
|
3466
3682
|
agentStore,
|
|
@@ -3468,4 +3684,4 @@ export {
|
|
|
3468
3684
|
traefikManager,
|
|
3469
3685
|
agentManager
|
|
3470
3686
|
};
|
|
3471
|
-
//# sourceMappingURL=chunk-
|
|
3687
|
+
//# sourceMappingURL=chunk-5PRQBES2.js.map
|