@runeya/runeya 2.0.125 → 2.0.127
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.map +1 -1
- package/agent-manager-FN6M6CLD.js +10 -0
- package/{chat-JIJQ7IJS.js → chat-VCHK77CW.js} +7 -7
- package/{chunk-HK5QNU6P.js → chunk-BDQOBEZ3.js} +18 -2
- package/chunk-BDQOBEZ3.js.map +1 -0
- package/{chunk-GKK3ACWB.js → chunk-LHVTBWM7.js} +599 -267
- package/chunk-LHVTBWM7.js.map +1 -0
- package/{chunk-N3ZI35SC.js → chunk-QPII36FL.js} +3 -3
- package/{chunk-T2BV5WZE.js → chunk-TTPL2M74.js} +87 -1
- package/chunk-TTPL2M74.js.map +1 -0
- package/{chunk-H22YLVQE.js → chunk-UKLNK5YA.js} +44 -20
- package/chunk-UKLNK5YA.js.map +1 -0
- package/{chunk-4PN7QBNM.js → chunk-WQWRTPPJ.js} +10 -5
- package/chunk-WQWRTPPJ.js.map +1 -0
- package/{companion-OZODV5BR.js → companion-YB3SDDTU.js} +7 -5
- package/{desktop-launcher-EGGVXXKV.js → desktop-launcher-J2BCSSGZ.js} +2 -2
- package/index.js +4 -4
- package/mcp-server/index.js +1469 -20
- package/mcp-server/index.js.map +1 -1
- package/package.json +1 -1
- package/settings-manager-4EDX7NIB.js +10 -0
- package/{src-SGSG2RSF.js → src-J3RBNMRJ.js} +268 -76
- package/src-J3RBNMRJ.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-86061Tlh.js +13 -0
- package/web/assets/AgentTerminalPage-DxGLu5uT.js +1 -0
- package/web/assets/AiChatPage-DmQKv6pr.js +1 -0
- package/web/assets/{AppLayout-vWoE_P8T.css → AppLayout-Do2CLgOr.css} +1 -1
- package/web/assets/AppLayout-DtK_nr-e.js +1 -0
- package/web/assets/AuditPage-CX5VJGlF.js +1 -0
- package/web/assets/CloudAccountPage-B_sjXlfl.js +1 -0
- package/web/assets/CloudAccountPage-ocHdrVEm.js +1 -0
- package/web/assets/CloudMessagingPage-BTfGWio6.js +2 -0
- package/web/assets/DashboardPage-7sATlyhd.js +164 -0
- package/web/assets/DashboardPage-DWA-1xgl.css +1 -0
- package/web/assets/DirectoryPickerDialog-DAJGNiRV.js +1 -0
- package/web/assets/{EditorIcon-BZyy2C12.js → EditorIcon-lzF8hPtZ.js} +2 -2
- package/web/assets/EnvironmentForm-DVWdFsE1.js +108 -0
- package/web/assets/EnvironmentFormPage-DoKBTKCU.js +1 -0
- package/web/assets/EnvironmentListPage-C9wGFZWU.js +1 -0
- package/web/assets/KanbanBoardPage-CoiDga7h.js +4 -0
- package/web/assets/KanbanListPage-xWYUu1P0.js +1 -0
- package/web/assets/LaunchProjectPage-DVXgnUYk.js +1 -0
- package/web/assets/LaunchServicesPage-CPN3Z3m5.css +1 -0
- package/web/assets/LaunchServicesPage-DM6keva3.js +1 -0
- package/web/assets/LogViewer-CMtuP1rB.js +3 -0
- package/web/assets/OrgKeyPrompt-BqVugrV1.js +1 -0
- package/web/assets/{ProcessControls-neMxqIY_.js → ProcessControls-DkaiMo0H.js} +1 -1
- package/web/assets/ProcessDetailPage-DJacy1ZE.js +1 -0
- package/web/assets/{ProcessMetrics-Bb7yNIVd.js → ProcessMetrics-D2lP9cEF.js} +2 -2
- package/web/assets/RandomJobTestPage-BOsChnPH.js +2 -0
- package/web/assets/ScenarioEditorPage-8XSWtwA5.js +14 -0
- package/web/assets/SendToChatDialog-DqPVoUgN.js +1 -0
- package/web/assets/ServiceControlsBar-QwLQLGFP.js +1 -0
- package/web/assets/ServiceControlsBar-lhuSKZqO.css +1 -0
- package/web/assets/ServiceDetailPage-DUw-ZZyD.js +2 -0
- package/web/assets/{ServiceDetailPage-BcFOlsU9.css → ServiceDetailPage-cQNK1uWq.css} +1 -1
- package/web/assets/ServiceFormPage-OYBr0pY4.js +1 -0
- package/web/assets/SettingsPage-BFoWbWhq.js +2063 -0
- package/web/assets/UnlockPage-DgLCLMkg.js +1 -0
- package/web/assets/VaultMigrationPage-C93bZgWb.js +1 -0
- package/web/assets/VersionBadge-2JJyjyFh.js +1 -0
- package/web/assets/WikiPage-DBinkJlt.js +1 -0
- package/web/assets/WikiView-DMyRUz16.js +1 -0
- package/web/assets/add-scalar-classes-C1s53GSo.js +387 -0
- package/web/assets/{autocomplete-BTMTTAk9.js → autocomplete-qVwP27uM.js} +3 -3
- package/web/assets/{basic-shape-diamond.svg-CZQG7mdB.js → basic-shape-diamond.svg-BwZ1Enqo.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-BnLoXUmj.js → basic-shape-hexagon.svg-Cyko19l-.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DDU6pRYe.js → basic-shape-primary-circle-ellipse-round.svg-CWaxr-XS.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-Dq_Zdck2.js → basic-shape-primary-square-rectangle.svg-BueTJIhO.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-DbFCxPmO.js → basic-shape-shield.svg-DiYXMUMt.js} +1 -1
- package/web/assets/{browser-CTYk99RA.js → browser-72mztbYe.js} +1 -1
- package/web/assets/{browser-DowFjZcI.js → browser-B8wHMk1o.js} +1 -1
- package/web/assets/{card-R4Q2Qr9t.js → card-CRMlmWrt.js} +2 -2
- package/web/assets/{checkbox-CfoV-T17.js → checkbox-BiDvmfqK.js} +3 -3
- package/web/assets/{chip-V3vhLdcF.js → chip-Cb6eK00K.js} +2 -2
- package/web/assets/client-3Q_o9QCm.js +24 -0
- package/web/assets/cloud-chat.store-DIxQd2ew.js +1 -0
- package/web/assets/cloud-client-Idzdbhu6.js +1 -0
- package/web/assets/cloud-session-CIGp7324.js +2 -0
- package/web/assets/cloud-session-Cj_Q0hKS.js +1 -0
- package/web/assets/column-4DnT4nYp.js +763 -0
- package/web/assets/{computer-device-desktop-monitor.svg-CRLfD7-U.js → computer-device-desktop-monitor.svg-DkL4R6oe.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CGKq4iih.js → computer-device-desktop.svg-DXRQ2Wl4.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-bmeM_RDO.js → computer-device-laptop.svg-BwdMHvul.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CFwMSjoP.js → computer-device-mobile-phone-android-samsung-back.svg-CzfVICvS.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-iIOhGZVY.js → computer-device-mobile-phone-android-samsung.svg-5mcZzPvQ.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CLqnsMnT.js → computer-device-mobile-phone-iphone-x-back.svg-CovJE-GH.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-XECS9ZDX.js → computer-device-mobile-phone-iphone-x.svg-PgDuCiQq.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-CUR9IhGB.js → computer-device-mobile-tablet-touch.svg-1xFu6tBt.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-BJGisjBt.js → computer-device-mobile-tablet.svg-lvKpoZnh.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-DzgiswAZ.js → computer-device-network-ethernet-cat6.svg-BJ6jNe-4.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-Dr1frFpv.js → computer-device-network-lan-www.svg-D2V9EO5w.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-DSj6qxT1.js → computer-device-network-wifi-connection.svg-DhFLYNK0.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-8lGzw_-s.js → computer-device-network-wifi-router.svg-BGWV2N2B.js} +1 -1
- package/web/assets/{cssMode-sBjZEJAf.js → cssMode-Q_UQl6r1.js} +1 -1
- package/web/assets/{divider-p4BForJk.js → divider-D2zmU0b9.js} +2 -2
- package/web/assets/{docx-preview-D-bfEEBT.js → docx-preview-CAEo0pZg.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-DhxVJRJ1.js → ecology-science-erlenmeyer-flask.svg-D4Cb7DOj.js} +1 -1
- package/web/assets/{fieldset-CCZ1tJUm.js → fieldset-CvPPXvgb.js} +2 -2
- package/web/assets/{freemarker2-C8iPD1fo.js → freemarker2-CCRi9jHA.js} +1 -1
- package/web/assets/{handlebars-BbBZAhwL.js → handlebars-4FU6Ze_N.js} +1 -1
- package/web/assets/{html-BQ_SV3Jd.js → html-1I40tTPC.js} +1 -1
- package/web/assets/{htmlMode-DReHoZFB.js → htmlMode-DQrNrxvx.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-DbKHX2c2.js → image-flash-lightning.svg-Bh48o-tL.js} +1 -1
- package/web/assets/{image-picture-flower.svg-CEpqP8le.js → image-picture-flower.svg-CE0C3oid.js} +1 -1
- package/web/assets/{index-PMr5ScNs.js → index-SrQFBx_K.js} +36 -36
- package/web/assets/{interface-alert-exclamation-diamond.svg-CoNNtahD.js → interface-alert-exclamation-diamond.svg-Dzt9JrNZ.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BHa7AW0u.js → interface-alert-exclamation-triangle-warning.svg-CET5JCIK.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-CpRzO-l8.js → interface-alert-information-circle.svg-GX_R0hCS.js} +1 -1
- package/web/assets/{interface-award-crown.svg-BFOXAZFu.js → interface-award-crown.svg-BUS_3snr.js} +1 -1
- package/web/assets/{interface-bookmark.svg-DulnuoPg.js → interface-bookmark-tag.svg-GOtO3ous.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DpZGlSV4.js → interface-bookmark.svg-B1HfpZ9v.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-CWQHbXWQ.js → interface-calendar-date-one.svg-W8G2NQFL.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-BH97UDUJ.js → interface-content-book-open-pages.svg-0dUMuEJV.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-DmnJkpeN.js → interface-content-book-page.svg-BZ9dLtQQ.js} +1 -1
- package/web/assets/{interface-content-file.svg-DkouOQzj.js → interface-content-file.svg-C5JU1QaC.js} +1 -1
- package/web/assets/interface-content-folder.svg-BZAP22kT.js +1 -0
- package/web/assets/{interface-content-folder.svg-DK2esxIw.js → interface-content-folder.svg-DeWnODx9.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-DuwyZprv.js → interface-copy-clipboard.svg-DneOONZN.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-C4lXPh7a.js → interface-edit-attachment.svg-BUDutqFa.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-CuA4f4ED.js → interface-edit-binocular.svg-DQ_sVWUa.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-D-Cc4zpI.js → interface-edit-magic-wand.svg-BqDEUbja.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-MtAeMQ6k.js → interface-edit-tool-paint-roller.svg-CcbJr-sE.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-ZAP8C3Sw.js → interface-edit-tool-pencil.svg-Dlmq9sMb.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DRZh5var.js → interface-favorite-award.svg-CfRf16yB.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-Dy0qBZak.js → interface-favorite-flag.svg-BeXa9l_o.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-Cjxi5AEp.js → interface-favorite-heart.svg-DWDXtfc-.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-B1OPbNTd.js → interface-favorite-star.svg-D0my2O2z.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-CvnZTUkf.js → interface-favorite-stars-sparkles.svg-DwnkpORM.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-GGCH0pvQ.js → interface-hierarchy-flowchart.svg-BS1qAEvQ.js} +1 -1
- package/web/assets/{interface-home-house.svg-DB_dC7eo.js → interface-home-house.svg-ByCGOgtp.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-LlMqAHmb.js → interface-hyperlink.svg-D0RP2diO.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-DutEgNfQ.js → interface-lighting-brightness.svg-B7Wir9fI.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-DteyBWrL.js → interface-lock-closed.svg-D93wzWGY.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-D2g-W1Mn.js → interface-lock-open-unlock.svg-CEbreK15.js} +1 -1
- package/web/assets/{interface-login-key.svg-Dk1JjhYH.js → interface-login-key.svg-a_CUiiRx.js} +1 -1
- package/web/assets/{interface-search.svg-CDHAdhLc.js → interface-search.svg-CP6bN80a.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BXKxgm-B.js → interface-setting-cog.svg-C1yqB1H3.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-Fq3c3_sE.js → interface-share-megaphone-bullhorn.svg-BpEzN7dc.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-BBIuiQ8_.js → interface-share-rocket.svg-CZTpH2do.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-LZRzoY-Y.js → interface-share-satellite.svg-CDpvXyTq.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-C6EewxDh.js → interface-share-space-ship.svg-QXv4WQWa.js} +1 -1
- package/web/assets/{interface-share.svg-Bj60UW_t.js → interface-share.svg-DO9f8_w3.js} +1 -1
- package/web/assets/{interface-signal-square.svg-wJGg3ZJ7.js → interface-signal-square.svg-Dpbb94dT.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-C2Ki_bgh.js → interface-time-clock-circle.svg-BOM8J4p-.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-BeaTe2YW.js → interface-time-hour-glass.svg-B4wmuGrS.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-ZNPhOLEJ.js → interface-users-multiple.svg-CX6Z1IAw.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-CzOxK1E2.js → interface-weather-moon.svg-VjaROepI.js} +1 -1
- package/web/assets/{javascript-CV2jmATe.js → javascript-dnJjMqJl.js} +1 -1
- package/web/assets/{jsonMode-BpNATOZn.js → jsonMode-DIklAZzl.js} +2 -2
- package/web/assets/{liquid-Bkbhlfu6.js → liquid-DM3-T0fg.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BIiCr6WR.js → lspLanguageFeatures-DtduOI48.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-B-R9ItyG.js → mail-chat-bubble-square.svg-BtQmLgyl.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-F4sC3JuQ.js → mail-send-email-paper-airplane.svg-DBzfHbzK.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-BaE9bGol.js → mail-send-envelope.svg-ByoaJJai.js} +1 -1
- package/web/assets/{mdx-CsTzsRLc.js → mdx-COmjqkAf.js} +1 -1
- package/web/assets/{minus-CsIPqtIl.js → minus-CLTSMcUf.js} +2 -2
- package/web/assets/modal-BaVGcm8s.js +1 -0
- package/web/assets/modal-Cl434j6P.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-C8rqn3qa.js → money-cashier-receipt.svg-D3I5UkrO.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-BW5dnMxx.js → money-currency-dollar-pay.svg-BEt_zoFT.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-fHNc8kor.js → money-graph-arrow-increase.svg-BFgo8Syp.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-65H_xZ15.js → money-graph-bar-chart-increase.svg-BPBRyqtM.js} +1 -1
- package/web/assets/{multiselect-Z0owdrkn.js → multiselect-Bd1n3-4t.js} +3 -3
- package/web/assets/{nature-ecology-leaf.svg-BIZVZEYz.js → nature-ecology-leaf.svg-DCIaflet.js} +1 -1
- package/web/assets/{password-Be5EVCzq.js → password-kxqyN9bC.js} +4 -4
- package/web/assets/{phone-telephone.svg-B1dHjXge.js → phone-telephone.svg-_P3X_Fym.js} +1 -1
- package/web/assets/{plus-BY4yX4ZS.js → plus-Cs39ICwL.js} +6 -6
- package/web/assets/process.store-m5afcW9w.js +1 -0
- package/web/assets/{programming-bug.svg-DJHBIgCF.js → programming-bug.svg-BGbIcZnS.js} +1 -1
- package/web/assets/{programming-cloud.svg-26MWe8cC.js → programming-cloud.svg-8TyU38aV.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-Dy7gdMab.js → programming-computer-database-server.svg-DBxTrFCn.js} +1 -1
- package/web/assets/{programming-computer-database.svg-3HsFit56.js → programming-computer-database.svg-Bi3RBUmB.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CLumiwsC.js → programming-module-four-layout.svg-BicMHalL.js} +1 -1
- package/web/assets/{programming-module-three.svg-3DvVSvY_.js → programming-module-three.svg-D13tfKhT.js} +1 -1
- package/web/assets/{programming-module.svg-CgtgW8TW.js → programming-module.svg-HJDv8jeZ.js} +1 -1
- package/web/assets/{programming-script-code.svg-DdeXzy2-.js → programming-script-code.svg-oXFzvCKr.js} +1 -1
- package/web/assets/project-launch.store-Cgu622KX.js +1 -0
- package/web/assets/project.store-CM-kT9-z.js +1 -0
- package/web/assets/{python-YqWM3LFr.js → python-ejRXAr81.js} +1 -1
- package/web/assets/{radiobutton-Pm1c37Fw.js → radiobutton-BWBirQno.js} +2 -2
- package/web/assets/{razor-BtNiyC__.js → razor-CbzUoARP.js} +1 -1
- package/web/assets/router-o5ycRaEE.js +1 -0
- package/web/assets/settings-scope-CSLK3J2k.js +1 -0
- package/web/assets/settings.store-DDQmm1ig.js +1 -0
- package/web/assets/{shopping-cart.svg-ejbEU5yG.js → shopping-cart.svg-DL2Mf0BX.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-RLuyvmga.js → shopping-gift-present.svg-keqzudV3.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-0GduEUbl.js → shopping-shipping-box-parcel-package.svg-BZ0Ri9AV.js} +1 -1
- package/web/assets/src-C1fYy9Ht.js +572 -0
- package/web/assets/src-DnhPQBBB.js +1 -0
- package/web/assets/{tabpanel-CssLXh-h.js → tabpanel-Bdw_XASI.js} +3 -3
- package/web/assets/{tag-new-circle.svg-CEdgH15R.js → tag-new-circle.svg-7tUBDDe7.js} +1 -1
- package/web/assets/theme-COzp71lh.js +1 -0
- package/web/assets/{toggleswitch-CEiGEBl3.js → toggleswitch-BhJmSx1t.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-Dmwx1Lus.js → travel-map-earth-globe.svg-CfJb5_3k.js} +1 -1
- package/web/assets/trpc-Bn_6G8HK.js +1 -0
- package/web/assets/{tsMode-DpPT4F6s.js → tsMode-D5Gulgwd.js} +5 -5
- package/web/assets/{typescript-DoO0syM1.js → typescript-B73-3GtI.js} +1 -1
- package/web/assets/useAiChatDrawer-QOflawaX.js +1 -0
- package/web/assets/useCloudOrg-BZNmQ2Ek.js +1 -0
- package/web/assets/useEnvVarAutocomplete-DAxcV0jl.js +1 -0
- package/web/assets/useProjectCatalog-8u5wFtf-.js +1 -0
- package/web/assets/{useProjectCloudOrg-CG7seJKu.js → useProjectCloudOrg-Bkja4sed.js} +1 -1
- package/web/assets/useServiceUrlHost-biHEzQVv.js +1 -0
- package/web/assets/{xml-FoCdWVvH.js → xml-Mkua9fdo.js} +1 -1
- package/web/assets/{yaml-CgRsanOy.js → yaml-BP9pkdmT.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-FZFFWISA.js +0 -10
- package/chunk-4PN7QBNM.js.map +0 -1
- package/chunk-GKK3ACWB.js.map +0 -1
- package/chunk-H22YLVQE.js.map +0 -1
- package/chunk-HK5QNU6P.js.map +0 -1
- package/chunk-T2BV5WZE.js.map +0 -1
- package/settings-manager-MAVD4GAS.js +0 -10
- package/src-SGSG2RSF.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-Bv7WQetq.js +0 -13
- package/web/assets/AgentTerminalPage-CMA5oI2T.js +0 -1
- package/web/assets/AiChatPage-C0Ho1rG3.js +0 -1
- package/web/assets/AppLayout-DBKRAp0R.js +0 -1
- package/web/assets/AuditPage-fZVhSJlE.js +0 -1
- package/web/assets/CloudAccountPage-2LiTQCKr.js +0 -1
- package/web/assets/CloudAccountPage-CunPTy1b.js +0 -1
- package/web/assets/CloudMessagingPage-DWciFn32.js +0 -2
- package/web/assets/DashboardPage-3psdQljM.js +0 -164
- package/web/assets/DashboardPage-DFaiJ4c-.css +0 -1
- package/web/assets/DirectoryPickerDialog-DiiAUQKg.js +0 -1
- package/web/assets/EnvironmentForm-MRC8U5op.js +0 -108
- package/web/assets/EnvironmentFormPage-gd8fGS8P.js +0 -1
- package/web/assets/EnvironmentListPage-DgbclvZs.js +0 -1
- package/web/assets/KanbanBoardPage-BBT0gqjT.js +0 -4
- package/web/assets/KanbanListPage-CidIQgAq.js +0 -1
- package/web/assets/LaunchProjectPage-DBtkrI-A.js +0 -1
- package/web/assets/LaunchServicesPage-DdmfVxYL.js +0 -1
- package/web/assets/LaunchServicesPage-zR9FoF4q.css +0 -1
- package/web/assets/LogViewer-CvDPgFjq.js +0 -3
- package/web/assets/OrgKeyPrompt-D3RmJEtb.js +0 -1
- package/web/assets/ProcessDetailPage-Dj0L8Jz0.js +0 -1
- package/web/assets/RandomJobTestPage-ohHAOaio.js +0 -2
- package/web/assets/ScenarioEditorPage-BIcmG3wo.js +0 -14
- package/web/assets/SendToChatDialog-oi4KFAVq.js +0 -1
- package/web/assets/ServiceControlsBar-BtnWYJmp.css +0 -1
- package/web/assets/ServiceControlsBar-GgoPszoH.js +0 -1
- package/web/assets/ServiceDetailPage-CIDlO0iu.js +0 -2
- package/web/assets/ServiceFormPage-p3AUhHLN.js +0 -1
- package/web/assets/SettingsPage-B_heumvd.js +0 -2063
- package/web/assets/UnlockPage-nz_1VQWy.js +0 -1
- package/web/assets/VaultMigrationPage-B_nZC8Cc.js +0 -1
- package/web/assets/VersionBadge-DJJK7bgD.js +0 -1
- package/web/assets/WikiPage-DiCUjWEu.js +0 -1
- package/web/assets/WikiView-vYMnLt41.js +0 -1
- package/web/assets/add-scalar-classes-_7NDhIUO.js +0 -387
- package/web/assets/client-DHQNUKOx.js +0 -24
- package/web/assets/cloud-chat.store-CaSRn8Mg.js +0 -1
- package/web/assets/cloud-client-CzGojtBl.js +0 -1
- package/web/assets/cloud-session-D71P4F3g.js +0 -2
- package/web/assets/cloud-session-DlLnrwVQ.js +0 -1
- package/web/assets/column-CjJa3tsz.js +0 -763
- package/web/assets/interface-content-folder.svg-BLBb2W1v.js +0 -1
- package/web/assets/modal-B_0-h4nC.js +0 -1
- package/web/assets/modal-KwmdNF_4.js +0 -5
- package/web/assets/process.store-B-PvNJQb.js +0 -1
- package/web/assets/project-launch.store-DtFeb4vv.js +0 -1
- package/web/assets/project.store-DcaBpnnB.js +0 -1
- package/web/assets/router-DnVYXVMw.js +0 -1
- package/web/assets/settings-scope-DR8NUZr5.js +0 -1
- package/web/assets/settings.store-CniuNQ3t.js +0 -1
- package/web/assets/src-BS3JGGS_.js +0 -1
- package/web/assets/src-BzZzroPd.js +0 -572
- package/web/assets/theme-C7HVmgEO.js +0 -1
- package/web/assets/trpc-C6zILEMh.js +0 -1
- package/web/assets/useAiChatDrawer-CnrYG1GW.js +0 -1
- package/web/assets/useCloudOrg-DWmP9gqs.js +0 -1
- package/web/assets/useEnvVarAutocomplete-Dkx7Cn9l.js +0 -1
- package/web/assets/useProjectCatalog-Cu3VZu2F.js +0 -1
- package/web/assets/useServiceUrlHost-ADKWqhx0.js +0 -1
- /package/{agent-manager-FZFFWISA.js.map → agent-manager-FN6M6CLD.js.map} +0 -0
- /package/{chat-JIJQ7IJS.js.map → chat-VCHK77CW.js.map} +0 -0
- /package/{chunk-N3ZI35SC.js.map → chunk-QPII36FL.js.map} +0 -0
- /package/{companion-OZODV5BR.js.map → companion-YB3SDDTU.js.map} +0 -0
- /package/{desktop-launcher-EGGVXXKV.js.map → desktop-launcher-J2BCSSGZ.js.map} +0 -0
- /package/{settings-manager-MAVD4GAS.js.map → settings-manager-4EDX7NIB.js.map} +0 -0
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
apiKeyStore,
|
|
18
18
|
appVersion,
|
|
19
19
|
applyPersistedLanMode,
|
|
20
|
+
attachServiceToProject,
|
|
20
21
|
auditService,
|
|
22
|
+
buildServerBuiltins,
|
|
21
23
|
canEnvAction,
|
|
22
24
|
chatRouter,
|
|
23
25
|
cloudAuthRouter,
|
|
@@ -29,6 +31,7 @@ import {
|
|
|
29
31
|
environmentResolver,
|
|
30
32
|
executeKanbanBoardCommands,
|
|
31
33
|
executeKanbanCommands,
|
|
34
|
+
filterEnvForAi,
|
|
32
35
|
generateLlmsTxt,
|
|
33
36
|
getActiveProvider,
|
|
34
37
|
getAllowedServiceIds,
|
|
@@ -62,7 +65,7 @@ import {
|
|
|
62
65
|
soleAccountScope,
|
|
63
66
|
startCliSession,
|
|
64
67
|
vaultOfProject
|
|
65
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-LHVTBWM7.js";
|
|
66
69
|
import {
|
|
67
70
|
resolveCliInvocation,
|
|
68
71
|
whichCommand
|
|
@@ -85,7 +88,7 @@ import {
|
|
|
85
88
|
stopClaudeTranscriptWatcher,
|
|
86
89
|
stopCodexTranscriptWatcher,
|
|
87
90
|
verifyJwt
|
|
88
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-UKLNK5YA.js";
|
|
89
92
|
import "./chunk-MD3VW4HQ.js";
|
|
90
93
|
import {
|
|
91
94
|
agentManager,
|
|
@@ -127,15 +130,16 @@ import {
|
|
|
127
130
|
stableEncryptValue,
|
|
128
131
|
traefikManager,
|
|
129
132
|
unregisterInstance
|
|
130
|
-
} from "./chunk-
|
|
133
|
+
} from "./chunk-WQWRTPPJ.js";
|
|
131
134
|
import {
|
|
132
135
|
settingsManager
|
|
133
|
-
} from "./chunk-
|
|
136
|
+
} from "./chunk-QPII36FL.js";
|
|
134
137
|
import {
|
|
135
138
|
atomicWriteSecure,
|
|
139
|
+
renameWithRetry,
|
|
136
140
|
resolveConversationRunDir,
|
|
137
141
|
sweepStaleTempFiles
|
|
138
|
-
} from "./chunk-
|
|
142
|
+
} from "./chunk-BDQOBEZ3.js";
|
|
139
143
|
import {
|
|
140
144
|
AGENT_LONG_FETCH_TIMEOUT,
|
|
141
145
|
AGENT_STOP_FETCH_TIMEOUT,
|
|
@@ -160,16 +164,19 @@ import {
|
|
|
160
164
|
UpdateEnvironmentSchema,
|
|
161
165
|
VariableOverrideSchema,
|
|
162
166
|
VariableSchema,
|
|
167
|
+
VariableSlotSchema,
|
|
163
168
|
ambiguousServiceSlugs,
|
|
164
169
|
crossServiceSlugsIn,
|
|
165
170
|
deriveLauncherIdentity,
|
|
171
|
+
findUnresolvedReferences,
|
|
166
172
|
getCollection,
|
|
167
173
|
nativeParsers,
|
|
168
174
|
primaryServiceLink,
|
|
169
175
|
readEntity,
|
|
170
176
|
serviceSlug,
|
|
177
|
+
suggestBuiltinReferences,
|
|
171
178
|
writeEntity
|
|
172
|
-
} from "./chunk-
|
|
179
|
+
} from "./chunk-TTPL2M74.js";
|
|
173
180
|
import {
|
|
174
181
|
allVaultRoots,
|
|
175
182
|
env,
|
|
@@ -541,7 +548,7 @@ import { mkdir } from "fs/promises";
|
|
|
541
548
|
|
|
542
549
|
// ../server/src/services/master-password.ts
|
|
543
550
|
import { randomBytes, createCipheriv, createDecipheriv } from "crypto";
|
|
544
|
-
import { readFile, writeFile, chmod, stat
|
|
551
|
+
import { readFile, writeFile, chmod, stat } from "fs/promises";
|
|
545
552
|
import { join as join2 } from "path";
|
|
546
553
|
import { Entry } from "@napi-rs/keyring";
|
|
547
554
|
import { hashRaw as argon2HashRaw } from "@node-rs/argon2";
|
|
@@ -587,7 +594,7 @@ async function writePepperToFile(dataDir, pepper) {
|
|
|
587
594
|
const tmpPath = filePath + ".tmp";
|
|
588
595
|
await writeFile(tmpPath, pepper.toString("hex"), "utf-8");
|
|
589
596
|
await chmod(tmpPath, 384);
|
|
590
|
-
await
|
|
597
|
+
await renameWithRetry(tmpPath, filePath);
|
|
591
598
|
}
|
|
592
599
|
function tryKeyringGet() {
|
|
593
600
|
try {
|
|
@@ -638,7 +645,7 @@ async function writeEncryptedKey(dataDir, masterPassword, encryptionKey, pepperD
|
|
|
638
645
|
const tmpPath = filePath + ".tmp";
|
|
639
646
|
await writeFile(tmpPath, encoded, "utf-8");
|
|
640
647
|
await chmod(tmpPath, 384);
|
|
641
|
-
await
|
|
648
|
+
await renameWithRetry(tmpPath, filePath);
|
|
642
649
|
}
|
|
643
650
|
async function readEncryptedKey(dataDir, masterPassword, pepperDir = dataDir) {
|
|
644
651
|
const filePath = join2(dataDir, ENCRYPTED_KEY_FILENAME);
|
|
@@ -664,7 +671,7 @@ async function writeVerifyFile(dataDir, encryptionKey) {
|
|
|
664
671
|
const filePath = join2(dataDir, VERIFY_FILENAME);
|
|
665
672
|
const tmpPath = filePath + ".tmp";
|
|
666
673
|
await writeFile(tmpPath, payload.toString("base64"), "utf-8");
|
|
667
|
-
await
|
|
674
|
+
await renameWithRetry(tmpPath, filePath);
|
|
668
675
|
}
|
|
669
676
|
async function verifyEncryptionKey(dataDir, encryptionKey) {
|
|
670
677
|
const filePath = join2(dataDir, VERIFY_FILENAME);
|
|
@@ -943,27 +950,10 @@ var projectRouter = router({
|
|
|
943
950
|
orgId: z4.string().max(128).nullable().optional(),
|
|
944
951
|
serviceId: z4.string().max(128)
|
|
945
952
|
})).mutation(async ({ input }) => {
|
|
946
|
-
const
|
|
947
|
-
const project = await projectStore.addService(target, input.serviceId);
|
|
953
|
+
const project = await attachServiceToProject({ id: input.projectId, orgId: input.orgId }, input.serviceId);
|
|
948
954
|
if (!project) {
|
|
949
955
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Project ${input.projectId} not found` });
|
|
950
956
|
}
|
|
951
|
-
const service = await serviceStore.get(input.serviceId);
|
|
952
|
-
if (service) {
|
|
953
|
-
const globalEnvs = await environmentStore.listByScope(input.projectId, "global", input.orgId);
|
|
954
|
-
for (const globalEnv of globalEnvs) {
|
|
955
|
-
const svcEnv = await environmentStore.create({
|
|
956
|
-
projectId: input.projectId,
|
|
957
|
-
name: `${service.name} (${globalEnv.name})`,
|
|
958
|
-
scope: "service",
|
|
959
|
-
reference: input.serviceId,
|
|
960
|
-
activateOn: globalEnv.id,
|
|
961
|
-
parentIds: [globalEnv.id],
|
|
962
|
-
variables: {}
|
|
963
|
-
}, input.orgId);
|
|
964
|
-
await projectStore.addEnvironment(target, svcEnv.id);
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
957
|
await auditService.log({
|
|
968
958
|
userId: "local",
|
|
969
959
|
action: "update",
|
|
@@ -1926,8 +1916,86 @@ var setupRouter = router({
|
|
|
1926
1916
|
});
|
|
1927
1917
|
|
|
1928
1918
|
// ../server/src/trpc/routers/environment.ts
|
|
1919
|
+
import { randomUUID } from "crypto";
|
|
1929
1920
|
import { z as z9 } from "zod";
|
|
1930
1921
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
1922
|
+
|
|
1923
|
+
// ../server/src/services/ai-variable-write.ts
|
|
1924
|
+
var AiVariableWriteError = class extends Error {
|
|
1925
|
+
};
|
|
1926
|
+
function planAiVariableWrite(existing, input) {
|
|
1927
|
+
if (!existing) {
|
|
1928
|
+
return {
|
|
1929
|
+
key: input.key,
|
|
1930
|
+
value: VariableSlotSchema.parse({
|
|
1931
|
+
value: input.value ?? "",
|
|
1932
|
+
...input.pre !== void 0 ? { pre: input.pre } : {},
|
|
1933
|
+
...input.post !== void 0 ? { post: input.post } : {},
|
|
1934
|
+
isSecret: input.isSecret ?? false,
|
|
1935
|
+
...input.description !== void 0 ? { description: input.description } : {}
|
|
1936
|
+
})
|
|
1937
|
+
};
|
|
1938
|
+
}
|
|
1939
|
+
const slot = existing.value;
|
|
1940
|
+
if (slot.isSecret && input.isSecret === false) {
|
|
1941
|
+
throw new AiVariableWriteError(`${input.key} is a secret: an AI cannot make it public. Ask the user to change it in Runeya.`);
|
|
1942
|
+
}
|
|
1943
|
+
if (slot.overrideOnly && input.value !== void 0) {
|
|
1944
|
+
throw new AiVariableWriteError(`${input.key} is override-only: it has no shared value, each machine sets its own. Ask the user to fill it in Runeya.`);
|
|
1945
|
+
}
|
|
1946
|
+
return {
|
|
1947
|
+
key: existing.key,
|
|
1948
|
+
value: {
|
|
1949
|
+
...slot,
|
|
1950
|
+
...input.value !== void 0 ? { value: input.value } : {},
|
|
1951
|
+
...input.pre !== void 0 ? { pre: input.pre } : {},
|
|
1952
|
+
...input.post !== void 0 ? { post: input.post } : {},
|
|
1953
|
+
...input.isSecret ? { isSecret: true } : {},
|
|
1954
|
+
...input.description !== void 0 ? { description: input.description } : {}
|
|
1955
|
+
}
|
|
1956
|
+
};
|
|
1957
|
+
}
|
|
1958
|
+
|
|
1959
|
+
// ../server/src/services/ai-environments.ts
|
|
1960
|
+
function describeEnvironmentsForAi(environments, context) {
|
|
1961
|
+
return environments.map((env2) => {
|
|
1962
|
+
const scope = env2.scope ?? "global";
|
|
1963
|
+
return {
|
|
1964
|
+
id: env2.id,
|
|
1965
|
+
name: env2.name,
|
|
1966
|
+
scope,
|
|
1967
|
+
active: env2.id === context.activeEnvironmentId,
|
|
1968
|
+
parentIds: env2.parentIds ?? [],
|
|
1969
|
+
...scope === "service" && env2.reference ? { serviceId: env2.reference } : {},
|
|
1970
|
+
...scope === "service" && env2.reference && context.serviceNames[env2.reference] ? { serviceName: context.serviceNames[env2.reference] } : {},
|
|
1971
|
+
...env2.activateOn ? { activateOn: env2.activateOn } : {},
|
|
1972
|
+
...scope === "service" && env2.activateOn ? { isolated: !(env2.parentIds ?? []).includes(env2.activateOn) } : {},
|
|
1973
|
+
variables: Object.values(env2.variables ?? {}).map((v) => ({
|
|
1974
|
+
key: v.key,
|
|
1975
|
+
secret: v.value.isSecret,
|
|
1976
|
+
required: v.value.required,
|
|
1977
|
+
overrideOnly: v.value.overrideOnly,
|
|
1978
|
+
...v.value.description ? { description: v.value.description } : {}
|
|
1979
|
+
}))
|
|
1980
|
+
};
|
|
1981
|
+
});
|
|
1982
|
+
}
|
|
1983
|
+
|
|
1984
|
+
// ../server/src/trpc/routers/environment.ts
|
|
1985
|
+
async function builtinsForEnvironment(environment) {
|
|
1986
|
+
const project = await projectStore.get(environmentStore.projectRefOf(environment) ?? environment.projectId);
|
|
1987
|
+
if (!project) return {};
|
|
1988
|
+
const services = (await Promise.all(project.serviceIds.map((id) => serviceStore.get(id)))).filter((service) => service !== null);
|
|
1989
|
+
const own = environment.scope === "service" ? services.find((service) => service.id === environment.reference) : void 0;
|
|
1990
|
+
const subject = own ?? services[0];
|
|
1991
|
+
if (!subject) return {};
|
|
1992
|
+
const values = buildServerBuiltins({
|
|
1993
|
+
service: subject,
|
|
1994
|
+
siblings: services.filter((service) => service.id !== subject.id),
|
|
1995
|
+
host: env.HOST
|
|
1996
|
+
});
|
|
1997
|
+
return own ? values : Object.fromEntries(Object.entries(values).filter(([name]) => name.startsWith("services.")));
|
|
1998
|
+
}
|
|
1931
1999
|
var environmentRouter = router({
|
|
1932
2000
|
list: protectedProcedure.input(z9.object({
|
|
1933
2001
|
projectId: z9.string().max(128),
|
|
@@ -2138,6 +2206,130 @@ var environmentRouter = router({
|
|
|
2138
2206
|
if (!result) throw new TRPCError6({ code: "INTERNAL_SERVER_ERROR", message: "Failed to update variable" });
|
|
2139
2207
|
return result;
|
|
2140
2208
|
}),
|
|
2209
|
+
/**
|
|
2210
|
+
* Les environnements d'un projet pour une IA : où ranger une variable, qui
|
|
2211
|
+
* hérite de qui, lequel est actif — sans aucune valeur (`describeEnvironmentsForAi`).
|
|
2212
|
+
* Une clé d'API n'y voit que les environnements qu'elle peut lire.
|
|
2213
|
+
*/
|
|
2214
|
+
listForAi: protectedProcedure.input(z9.object({
|
|
2215
|
+
projectId: z9.string().max(128),
|
|
2216
|
+
orgId: z9.string().max(128).nullable().optional()
|
|
2217
|
+
})).query(async ({ input, ctx }) => {
|
|
2218
|
+
const project = await projectStore.get({
|
|
2219
|
+
id: input.projectId,
|
|
2220
|
+
...input.orgId !== void 0 ? { orgId: input.orgId } : {}
|
|
2221
|
+
});
|
|
2222
|
+
if (!project) throw new TRPCError6({ code: "NOT_FOUND", message: `Project ${input.projectId} not found` });
|
|
2223
|
+
const environments = (await environmentStore.list(input.projectId, input.orgId)).filter((env2) => canEnvAction(ctx, env2.id, "env:read"));
|
|
2224
|
+
const serviceNames = {};
|
|
2225
|
+
for (const serviceId of project.serviceIds) {
|
|
2226
|
+
const service = await serviceStore.get(serviceId);
|
|
2227
|
+
if (service) serviceNames[serviceId] = service.name;
|
|
2228
|
+
}
|
|
2229
|
+
return describeEnvironmentsForAi(environments, { activeEnvironmentId: project.activeEnvironmentId, serviceNames });
|
|
2230
|
+
}),
|
|
2231
|
+
/**
|
|
2232
|
+
* Ce que produit un environnement seul, parents et surcharges du poste
|
|
2233
|
+
* compris, tel qu'une IA peut le lire : secrets non partagés masqués par le
|
|
2234
|
+
* même filtre que `service.getEnv`. Les variables intégrées ne sont pas
|
|
2235
|
+
* remplies — elles dépendent du service qui les reçoit — mais une référence
|
|
2236
|
+
* qui ne correspond à rien est nommée.
|
|
2237
|
+
*/
|
|
2238
|
+
resolveForAi: protectedProcedure.input(z9.object({ environmentId: z9.string().max(128) })).query(async ({ input, ctx }) => {
|
|
2239
|
+
requireEnvAction(ctx, input.environmentId, "env:read");
|
|
2240
|
+
const env2 = await environmentStore.get(input.environmentId);
|
|
2241
|
+
if (!env2) throw new TRPCError6({ code: "NOT_FOUND", message: `Environment ${input.environmentId} not found` });
|
|
2242
|
+
const [resolved, shared] = await Promise.all([
|
|
2243
|
+
environmentResolver.resolveEnvironment(input.environmentId),
|
|
2244
|
+
environmentResolver.resolveAiSharedKeys(input.environmentId)
|
|
2245
|
+
]);
|
|
2246
|
+
const filtered = filterEnvForAi(resolved, shared);
|
|
2247
|
+
return {
|
|
2248
|
+
environmentId: env2.id,
|
|
2249
|
+
name: env2.name,
|
|
2250
|
+
scope: env2.scope ?? "global",
|
|
2251
|
+
...filtered,
|
|
2252
|
+
unresolvedReferences: findUnresolvedReferences(resolved.env, { serverResolved: false, skipKeys: filtered.hiddenKeys })
|
|
2253
|
+
};
|
|
2254
|
+
}),
|
|
2255
|
+
/**
|
|
2256
|
+
* Écrire une variable pour le compte d'une IA, désignée par son nom.
|
|
2257
|
+
*
|
|
2258
|
+
* La route des outils IA (`set_environment_variable`) : les règles de
|
|
2259
|
+
* `planAiVariableWrite` y tiennent quel que soit l'appelant — une IA ne rend
|
|
2260
|
+
* pas un secret public et ne le partage jamais avec les IA. La réponse ne
|
|
2261
|
+
* porte aucune valeur : ce qui vient d'être écrit peut être un secret.
|
|
2262
|
+
*/
|
|
2263
|
+
setVariableBlind: protectedProcedure.input(z9.object({
|
|
2264
|
+
environmentId: z9.string().max(128),
|
|
2265
|
+
key: z9.string().min(1).max(256),
|
|
2266
|
+
value: z9.string().max(8192).optional(),
|
|
2267
|
+
pre: z9.string().max(8192).optional(),
|
|
2268
|
+
post: z9.string().max(8192).optional(),
|
|
2269
|
+
isSecret: z9.boolean().optional(),
|
|
2270
|
+
description: z9.string().max(2e3).optional()
|
|
2271
|
+
})).mutation(async ({ input, ctx }) => {
|
|
2272
|
+
requireEnvAction(ctx, input.environmentId, "env:write");
|
|
2273
|
+
const env2 = await environmentStore.get(input.environmentId);
|
|
2274
|
+
if (!env2) throw new TRPCError6({ code: "NOT_FOUND", message: `Environment ${input.environmentId} not found` });
|
|
2275
|
+
const found = Object.entries(env2.variables).find(([, v]) => v.key === input.key);
|
|
2276
|
+
const variableId = found?.[0] ?? randomUUID();
|
|
2277
|
+
let variable;
|
|
2278
|
+
try {
|
|
2279
|
+
variable = planAiVariableWrite(found?.[1], input);
|
|
2280
|
+
} catch (err) {
|
|
2281
|
+
if (err instanceof AiVariableWriteError) throw new TRPCError6({ code: "FORBIDDEN", message: err.message });
|
|
2282
|
+
throw err;
|
|
2283
|
+
}
|
|
2284
|
+
const result = await environmentStore.upsertVariable(input.environmentId, variableId, variable);
|
|
2285
|
+
if (!result) throw new TRPCError6({ code: "INTERNAL_SERVER_ERROR", message: "Failed to write variable" });
|
|
2286
|
+
const written = `${variable.value.pre}${variable.value.value}${variable.value.post}`;
|
|
2287
|
+
let suggestions = [];
|
|
2288
|
+
if (!variable.value.isSecret) {
|
|
2289
|
+
try {
|
|
2290
|
+
suggestions = suggestBuiltinReferences(written, await builtinsForEnvironment(env2));
|
|
2291
|
+
} catch (err) {
|
|
2292
|
+
console.warn("[environment-router] Built-in suggestions unavailable for", input.environmentId + ":", err.message);
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
return {
|
|
2296
|
+
environmentId: input.environmentId,
|
|
2297
|
+
variableId,
|
|
2298
|
+
key: variable.key,
|
|
2299
|
+
isSecret: variable.value.isSecret,
|
|
2300
|
+
created: !found,
|
|
2301
|
+
...suggestions.length > 0 ? { suggestions } : {}
|
|
2302
|
+
};
|
|
2303
|
+
}),
|
|
2304
|
+
/**
|
|
2305
|
+
* L'interrupteur « Hérite / Isolé » d'un environnement de service, pour une
|
|
2306
|
+
* IA : le même geste que l'interface (`ServiceConfigEnv.vue`, `toggleInheritance`)
|
|
2307
|
+
* — ses parents vidés, ou remis à l'environnement global qui l'active. Par
|
|
2308
|
+
* une route dédiée parce que `update` rend l'environnement entier, valeurs
|
|
2309
|
+
* comprises.
|
|
2310
|
+
*/
|
|
2311
|
+
setInheritanceBlind: protectedProcedure.input(z9.object({ environmentId: z9.string().max(128), inherit: z9.boolean() })).mutation(async ({ input, ctx }) => {
|
|
2312
|
+
requireEnvAction(ctx, input.environmentId, "env:write");
|
|
2313
|
+
const env2 = await environmentStore.get(input.environmentId);
|
|
2314
|
+
if (!env2) throw new TRPCError6({ code: "NOT_FOUND", message: `Environment ${input.environmentId} not found` });
|
|
2315
|
+
if (env2.scope !== "service" || !env2.activateOn) {
|
|
2316
|
+
throw new TRPCError6({ code: "BAD_REQUEST", message: `Environment ${input.environmentId} is not a service environment: only those inherit from, or are isolated from, the global environment that activates them` });
|
|
2317
|
+
}
|
|
2318
|
+
const updated = await environmentStore.update({ id: env2.id, parentIds: input.inherit ? [env2.activateOn] : [] });
|
|
2319
|
+
if (!updated) throw new TRPCError6({ code: "INTERNAL_SERVER_ERROR", message: "Failed to update inheritance" });
|
|
2320
|
+
return { environmentId: env2.id, isolated: !input.inherit };
|
|
2321
|
+
}),
|
|
2322
|
+
/** Retirer une variable par son nom, pour le compte d'une IA : la réponse ne porte aucune valeur. */
|
|
2323
|
+
removeVariableBlind: protectedProcedure.input(z9.object({ environmentId: z9.string().max(128), key: z9.string().min(1).max(256) })).mutation(async ({ input, ctx }) => {
|
|
2324
|
+
requireEnvAction(ctx, input.environmentId, "env:write");
|
|
2325
|
+
const env2 = await environmentStore.get(input.environmentId);
|
|
2326
|
+
if (!env2) throw new TRPCError6({ code: "NOT_FOUND", message: `Environment ${input.environmentId} not found` });
|
|
2327
|
+
const found = Object.entries(env2.variables).find(([, v]) => v.key === input.key);
|
|
2328
|
+
if (!found) throw new TRPCError6({ code: "NOT_FOUND", message: `Variable ${input.key} not found in environment ${input.environmentId}` });
|
|
2329
|
+
const result = await environmentStore.removeVariable(input.environmentId, found[0]);
|
|
2330
|
+
if (!result) throw new TRPCError6({ code: "INTERNAL_SERVER_ERROR", message: "Failed to remove variable" });
|
|
2331
|
+
return { environmentId: input.environmentId, key: input.key, removed: true };
|
|
2332
|
+
}),
|
|
2141
2333
|
/**
|
|
2142
2334
|
* List everywhere a variable key is used inside a project: environments that
|
|
2143
2335
|
* define it, and variables that reference it through {{environment.KEY}}.
|
|
@@ -2900,7 +3092,7 @@ import { resolve, join as join4 } from "path";
|
|
|
2900
3092
|
import { homedir as homedir2 } from "os";
|
|
2901
3093
|
|
|
2902
3094
|
// ../server/src/services/user-config-manager.ts
|
|
2903
|
-
import { readFile as readFile2, writeFile as writeFile2,
|
|
3095
|
+
import { readFile as readFile2, writeFile as writeFile2, mkdir as mkdir2, chmod as chmod2 } from "fs/promises";
|
|
2904
3096
|
import { join as join3 } from "path";
|
|
2905
3097
|
import { homedir } from "os";
|
|
2906
3098
|
import { z as z11 } from "zod";
|
|
@@ -2931,7 +3123,7 @@ var UserConfigManager = class {
|
|
|
2931
3123
|
const filePath = join3(CONFIG_DIR, CONFIG_FILE);
|
|
2932
3124
|
const tmpPath = filePath + ".tmp";
|
|
2933
3125
|
await writeFile2(tmpPath, JSON.stringify(data, null, 2), "utf-8");
|
|
2934
|
-
await
|
|
3126
|
+
await renameWithRetry(tmpPath, filePath);
|
|
2935
3127
|
await chmod2(filePath, 384);
|
|
2936
3128
|
}
|
|
2937
3129
|
async getConfig() {
|
|
@@ -3422,7 +3614,7 @@ Rules:
|
|
|
3422
3614
|
});
|
|
3423
3615
|
|
|
3424
3616
|
// ../server/src/trpc/routers/scenario.ts
|
|
3425
|
-
import { randomUUID as
|
|
3617
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
3426
3618
|
import { TRPCError as TRPCError13 } from "@trpc/server";
|
|
3427
3619
|
import { z as z15 } from "zod";
|
|
3428
3620
|
|
|
@@ -3539,7 +3731,7 @@ async function* streamWithActiveProvider(opts) {
|
|
|
3539
3731
|
|
|
3540
3732
|
// ../server/src/services/scenario-runner.ts
|
|
3541
3733
|
import { mkdir as mkdir4 } from "fs/promises";
|
|
3542
|
-
import { randomUUID } from "crypto";
|
|
3734
|
+
import { randomUUID as randomUUID2 } from "crypto";
|
|
3543
3735
|
import { join as join6 } from "path";
|
|
3544
3736
|
|
|
3545
3737
|
// ../server/src/services/scenario-presets.ts
|
|
@@ -3881,7 +4073,7 @@ function applyHireDirectivesFromOutput(manager, scenario, output) {
|
|
|
3881
4073
|
}
|
|
3882
4074
|
const hired = [];
|
|
3883
4075
|
for (const payload of hireDirectives) {
|
|
3884
|
-
const id = `hire-${
|
|
4076
|
+
const id = `hire-${randomUUID2().slice(0, 8)}`;
|
|
3885
4077
|
const position = computeHirePosition(manager, scenario.nodes);
|
|
3886
4078
|
ensureGroupCanContainNode(scenario, manager.groupId ?? null, position);
|
|
3887
4079
|
const node = {
|
|
@@ -5049,7 +5241,7 @@ var scenarioRouter = router({
|
|
|
5049
5241
|
})).mutation(({ input }) => {
|
|
5050
5242
|
const now = Date.now();
|
|
5051
5243
|
return createOrBadRequest(async () => scenarioStore.create({
|
|
5052
|
-
id:
|
|
5244
|
+
id: randomUUID3(),
|
|
5053
5245
|
name: input.name,
|
|
5054
5246
|
icon: input.icon,
|
|
5055
5247
|
description: input.description,
|
|
@@ -5201,7 +5393,7 @@ var scenarioRouter = router({
|
|
|
5201
5393
|
});
|
|
5202
5394
|
|
|
5203
5395
|
// ../server/src/trpc/routers/debug.ts
|
|
5204
|
-
import { randomUUID as
|
|
5396
|
+
import { randomUUID as randomUUID4 } from "crypto";
|
|
5205
5397
|
import { TRPCError as TRPCError14 } from "@trpc/server";
|
|
5206
5398
|
import { z as z16 } from "zod";
|
|
5207
5399
|
var MAX_BUFFER2 = 300;
|
|
@@ -5264,7 +5456,7 @@ var debugRouter = router({
|
|
|
5264
5456
|
intervalMs: z16.number().int().min(100).max(5e3).optional(),
|
|
5265
5457
|
maxTicks: z16.number().int().min(1).max(1e4).optional()
|
|
5266
5458
|
}).optional()).mutation(({ input }) => {
|
|
5267
|
-
const jobId =
|
|
5459
|
+
const jobId = randomUUID4();
|
|
5268
5460
|
const intervalMs = input?.intervalMs ?? 400;
|
|
5269
5461
|
const maxTicks = input?.maxTicks ?? 500;
|
|
5270
5462
|
const job = {
|
|
@@ -5484,7 +5676,7 @@ var diagnosticsRouter = router({
|
|
|
5484
5676
|
import { z as z18 } from "zod";
|
|
5485
5677
|
|
|
5486
5678
|
// ../server/src/services/kanban-queue.ts
|
|
5487
|
-
import { randomUUID as
|
|
5679
|
+
import { randomUUID as randomUUID5 } from "crypto";
|
|
5488
5680
|
import { EventEmitter as EventEmitter2 } from "events";
|
|
5489
5681
|
var KanbanQueueService = class extends EventEmitter2 {
|
|
5490
5682
|
items = [];
|
|
@@ -5512,7 +5704,7 @@ var KanbanQueueService = class extends EventEmitter2 {
|
|
|
5512
5704
|
return { id: alreadyRunning.id, addedAt: alreadyRunning.startedAt, ...item };
|
|
5513
5705
|
}
|
|
5514
5706
|
const queueItem = {
|
|
5515
|
-
id:
|
|
5707
|
+
id: randomUUID5(),
|
|
5516
5708
|
...item,
|
|
5517
5709
|
addedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
5518
5710
|
};
|
|
@@ -6265,7 +6457,7 @@ var utilityRouter = router({
|
|
|
6265
6457
|
// ../server/src/trpc/routers/wiki.ts
|
|
6266
6458
|
import { z as z22 } from "zod";
|
|
6267
6459
|
import { TRPCError as TRPCError18 } from "@trpc/server";
|
|
6268
|
-
import { readFile as readFile3, readdir as readdir2, stat as stat4, realpath, writeFile as writeFile5, mkdir as mkdir6, rename
|
|
6460
|
+
import { readFile as readFile3, readdir as readdir2, stat as stat4, realpath, writeFile as writeFile5, mkdir as mkdir6, rename, rm as rm2 } from "fs/promises";
|
|
6269
6461
|
import { resolve as resolvePath, join as join8, relative, sep, dirname as dirname3 } from "path";
|
|
6270
6462
|
var SCOPE_SCHEMA = z22.union([
|
|
6271
6463
|
z22.literal("global"),
|
|
@@ -6462,7 +6654,7 @@ var wikiRouter = router({
|
|
|
6462
6654
|
if (err instanceof TRPCError18) throw err;
|
|
6463
6655
|
}
|
|
6464
6656
|
await mkdir6(dirname3(to), { recursive: true });
|
|
6465
|
-
await
|
|
6657
|
+
await rename(from, to);
|
|
6466
6658
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6467
6659
|
}),
|
|
6468
6660
|
ensureRoot: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA })).mutation(async ({ input }) => {
|
|
@@ -6586,7 +6778,7 @@ async function reconcileOrgCanary(orgId) {
|
|
|
6586
6778
|
}
|
|
6587
6779
|
|
|
6588
6780
|
// ../server/src/services/cloud-sync-bridge.ts
|
|
6589
|
-
import { randomUUID as
|
|
6781
|
+
import { randomUUID as randomUUID7 } from "crypto";
|
|
6590
6782
|
import { mkdir as mkdir7, rm as rm3 } from "fs/promises";
|
|
6591
6783
|
import * as Y2 from "yjs";
|
|
6592
6784
|
|
|
@@ -6594,7 +6786,7 @@ import * as Y2 from "yjs";
|
|
|
6594
6786
|
import { readFileSync, renameSync, rmSync, writeFileSync, mkdirSync } from "fs";
|
|
6595
6787
|
import { readFile as readFile4 } from "fs/promises";
|
|
6596
6788
|
import { dirname as dirname4, join as join10 } from "path";
|
|
6597
|
-
import { randomUUID as
|
|
6789
|
+
import { randomUUID as randomUUID6 } from "crypto";
|
|
6598
6790
|
import * as Y from "yjs";
|
|
6599
6791
|
var FILE = "sync-doc.bin";
|
|
6600
6792
|
function cachePath(orgId) {
|
|
@@ -6626,7 +6818,7 @@ function writeSyncDocSync(orgId, state) {
|
|
|
6626
6818
|
} catch {
|
|
6627
6819
|
}
|
|
6628
6820
|
mkdirSync(dirname4(path), { recursive: true });
|
|
6629
|
-
const tmp = `${path}.${process.pid}.${
|
|
6821
|
+
const tmp = `${path}.${process.pid}.${randomUUID6()}.tmp`;
|
|
6630
6822
|
try {
|
|
6631
6823
|
writeFileSync(tmp, mergeWith(existing, state), { mode: 384 });
|
|
6632
6824
|
renameSync(tmp, path);
|
|
@@ -6679,7 +6871,7 @@ var OrgSyncConnection = class {
|
|
|
6679
6871
|
services = getCollection(this.doc, "services");
|
|
6680
6872
|
environments = getCollection(this.doc, "environments");
|
|
6681
6873
|
logParsers = getCollection(this.doc, PARSERS);
|
|
6682
|
-
conn =
|
|
6874
|
+
conn = randomUUID7();
|
|
6683
6875
|
link;
|
|
6684
6876
|
stopped = false;
|
|
6685
6877
|
initializing = true;
|
|
@@ -7609,7 +7801,7 @@ var CloudSyncBridge = class {
|
|
|
7609
7801
|
var cloudSyncBridge = new CloudSyncBridge();
|
|
7610
7802
|
|
|
7611
7803
|
// ../server/src/services/key-adoption.ts
|
|
7612
|
-
import { readdir as readdir3, readFile as readFile5, writeFile as writeFile6, mkdir as mkdir8, copyFile, rename as
|
|
7804
|
+
import { readdir as readdir3, readFile as readFile5, writeFile as writeFile6, mkdir as mkdir8, copyFile, rename as rename2, stat as stat5 } from "fs/promises";
|
|
7613
7805
|
import { join as join11 } from "path";
|
|
7614
7806
|
import { createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2, randomBytes as randomBytes2 } from "crypto";
|
|
7615
7807
|
var ALGORITHM = "aes-256-gcm";
|
|
@@ -7722,7 +7914,7 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
|
|
|
7722
7914
|
for (const item of pending) {
|
|
7723
7915
|
const tmp = item.path + ".tmp";
|
|
7724
7916
|
await writeFile6(tmp, item.content, "utf-8");
|
|
7725
|
-
await
|
|
7917
|
+
await rename2(tmp, item.path);
|
|
7726
7918
|
}
|
|
7727
7919
|
await installOrgKey(orgId, newKey, masterPassword);
|
|
7728
7920
|
clearVaultLock(orgId);
|
|
@@ -8484,7 +8676,7 @@ async function ensureFilePermissions() {
|
|
|
8484
8676
|
}
|
|
8485
8677
|
|
|
8486
8678
|
// ../server/src/services/vault-migration.ts
|
|
8487
|
-
import { readdir as readdir5, readFile as readFile6, writeFile as writeFile7, mkdir as mkdir9, copyFile as copyFile2, unlink, rename as
|
|
8679
|
+
import { readdir as readdir5, readFile as readFile6, writeFile as writeFile7, mkdir as mkdir9, copyFile as copyFile2, unlink, rename as rename3, stat as stat8 } from "fs/promises";
|
|
8488
8680
|
import { join as join13 } from "path";
|
|
8489
8681
|
var KEY_FILES = [".encryption.key.enc", ".runeya-verify"];
|
|
8490
8682
|
var MACHINE_FILES = [
|
|
@@ -8537,7 +8729,7 @@ async function migrateLegacyVault(legacyRoot, machineRootDir, legacyKey, machine
|
|
|
8537
8729
|
if (counter.n === 0) continue;
|
|
8538
8730
|
const tmp = join13(legacyRoot, `${name}.tmp`);
|
|
8539
8731
|
await writeFile7(tmp, JSON.stringify(converted, null, 2), "utf-8");
|
|
8540
|
-
await
|
|
8732
|
+
await rename3(tmp, join13(legacyRoot, name));
|
|
8541
8733
|
rekeyed.push({ file: name, values: counter.n });
|
|
8542
8734
|
}
|
|
8543
8735
|
for (const { file, values } of rekeyed) {
|
|
@@ -8573,7 +8765,7 @@ async function migrateLegacyVault(legacyRoot, machineRootDir, legacyKey, machine
|
|
|
8573
8765
|
}
|
|
8574
8766
|
|
|
8575
8767
|
// ../server/src/services/settings-migration.ts
|
|
8576
|
-
import { readFile as readFile7, writeFile as writeFile8, rename as
|
|
8768
|
+
import { readFile as readFile7, writeFile as writeFile8, rename as rename4, unlink as unlink2, mkdir as mkdir10, chmod as chmod4, stat as stat9 } from "fs/promises";
|
|
8577
8769
|
import { join as join14 } from "path";
|
|
8578
8770
|
var SETTINGS_FILE = "settings.json";
|
|
8579
8771
|
var SETTINGS_PRIVATE_FILE = "settings.private.json";
|
|
@@ -8592,7 +8784,7 @@ async function moveInto(root, filename, from) {
|
|
|
8592
8784
|
const contents = await readFile7(from, "utf-8");
|
|
8593
8785
|
const tmp = to + ".tmp";
|
|
8594
8786
|
await writeFile8(tmp, contents, "utf-8");
|
|
8595
|
-
await
|
|
8787
|
+
await rename4(tmp, to);
|
|
8596
8788
|
await chmod4(to, 384);
|
|
8597
8789
|
await unlink2(from);
|
|
8598
8790
|
}
|
|
@@ -8627,11 +8819,11 @@ async function migrateSettingsIntoVaults() {
|
|
|
8627
8819
|
// ../server/src/migrations/migrate-from-legacy.ts
|
|
8628
8820
|
import { createRequire } from "module";
|
|
8629
8821
|
import { randomBytes as randomBytes3, createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3 } from "crypto";
|
|
8630
|
-
import { randomUUID as
|
|
8822
|
+
import { randomUUID as randomUUID8 } from "crypto";
|
|
8631
8823
|
import {
|
|
8632
8824
|
readFile as readFile8,
|
|
8633
8825
|
writeFile as writeFile9,
|
|
8634
|
-
rename as
|
|
8826
|
+
rename as rename5,
|
|
8635
8827
|
mkdir as mkdir11,
|
|
8636
8828
|
access as access2,
|
|
8637
8829
|
readdir as readdir6
|
|
@@ -8774,7 +8966,7 @@ async function decryptLegacyFile(filePath, key, sodium) {
|
|
|
8774
8966
|
async function atomicWrite(path, data) {
|
|
8775
8967
|
const tmp = path + ".tmp";
|
|
8776
8968
|
await writeFile9(tmp, JSON.stringify(data, null, 2), "utf-8");
|
|
8777
|
-
await
|
|
8969
|
+
await rename5(tmp, path);
|
|
8778
8970
|
}
|
|
8779
8971
|
async function runLegacyMigration(dataDir) {
|
|
8780
8972
|
const legacyRoot = env.DATA_DIR;
|
|
@@ -8787,10 +8979,10 @@ async function runLegacyMigration(dataDir) {
|
|
|
8787
8979
|
console.log("[legacy-migration] Legacy Runeya data detected, starting migration\u2026");
|
|
8788
8980
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").substring(0, 19);
|
|
8789
8981
|
const legacyTmp = `${legacyRoot}-tmp`;
|
|
8790
|
-
await
|
|
8982
|
+
await rename5(legacyRoot, legacyTmp);
|
|
8791
8983
|
await mkdir11(dataDir, { recursive: true });
|
|
8792
8984
|
const legacyOld = join15(dataDir, `backup-${timestamp}`);
|
|
8793
|
-
await
|
|
8985
|
+
await rename5(legacyTmp, legacyOld);
|
|
8794
8986
|
console.log(`[legacy-migration] Legacy data backed up to ${legacyOld}`);
|
|
8795
8987
|
const keyJson = JSON.parse(await readFile8(join15(legacyOld, "dbs", "encryption-key.json"), "utf-8"));
|
|
8796
8988
|
const sodium = await getSodium();
|
|
@@ -8845,11 +9037,11 @@ async function runLegacyMigration(dataDir) {
|
|
|
8845
9037
|
const data = await readEncrypted(join15(parsersDir, file));
|
|
8846
9038
|
if (data?.id) legacyParsers.push(data);
|
|
8847
9039
|
}
|
|
8848
|
-
const projectMonoId =
|
|
9040
|
+
const projectMonoId = randomUUID8();
|
|
8849
9041
|
const envIdMap = {};
|
|
8850
9042
|
const labelToKey = {};
|
|
8851
9043
|
for (const [name, legacyEnv] of Object.entries(legacyEnvs)) {
|
|
8852
|
-
envIdMap[name] =
|
|
9044
|
+
envIdMap[name] = randomUUID8();
|
|
8853
9045
|
if (legacyEnv?.label) labelToKey[legacyEnv.label] = name;
|
|
8854
9046
|
}
|
|
8855
9047
|
const runeEnvs = [];
|
|
@@ -8874,7 +9066,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
8874
9066
|
if (hasInvalidInterpolation(value)) continue;
|
|
8875
9067
|
const cleaned = cleanVarKey(key);
|
|
8876
9068
|
if (inheritedVars[cleaned] === value) continue;
|
|
8877
|
-
const varId =
|
|
9069
|
+
const varId = randomUUID8();
|
|
8878
9070
|
variables[varId] = makeVariable(cleaned, value);
|
|
8879
9071
|
varIdLookup.set(`${envIdMap[name]}:${cleaned}`, varId);
|
|
8880
9072
|
}
|
|
@@ -8895,7 +9087,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
8895
9087
|
const serviceIdMap = {};
|
|
8896
9088
|
const runeServices = [];
|
|
8897
9089
|
for (const [name, legacy] of Object.entries(legacyServices)) {
|
|
8898
|
-
const id =
|
|
9090
|
+
const id = randomUUID8();
|
|
8899
9091
|
serviceIdMap[name] = id;
|
|
8900
9092
|
const rootPath = legacy.rootPath || "";
|
|
8901
9093
|
const rootPathCwd = rootPath && rootPath !== "." ? rootPath : "";
|
|
@@ -8904,7 +9096,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
8904
9096
|
const parts = [cmd.spawnCmd, ...cmd.spawnArgs || []].filter(Boolean);
|
|
8905
9097
|
if (!parts.length) continue;
|
|
8906
9098
|
commands.push({
|
|
8907
|
-
id: cmd.id ||
|
|
9099
|
+
id: cmd.id || randomUUID8(),
|
|
8908
9100
|
label: "Launch",
|
|
8909
9101
|
command: parts.join(" "),
|
|
8910
9102
|
cwd: cmd.spawnOptions?.cwd || "",
|
|
@@ -8965,7 +9157,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
8965
9157
|
const legacyBootstrapCmds = container.bootstrap?.commands || [];
|
|
8966
9158
|
if (legacyBootstrapCmds.length > 0) {
|
|
8967
9159
|
dockerConfig.bootstrapCommands = legacyBootstrapCmds.filter((bs) => bs.cmd || bs.entrypoint).map((bs, idx) => ({
|
|
8968
|
-
id: bs.id ||
|
|
9160
|
+
id: bs.id || randomUUID8(),
|
|
8969
9161
|
label: bs.label || `Bootstrap ${idx + 1}`,
|
|
8970
9162
|
command: bs.cmd || "",
|
|
8971
9163
|
...bs.entrypoint ? { entrypoint: bs.entrypoint } : {},
|
|
@@ -9013,7 +9205,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
9013
9205
|
cwd: serviceCwd,
|
|
9014
9206
|
runner: dockerConfig ? "docker" : "native",
|
|
9015
9207
|
shortcuts: (legacy.shortcuts || []).filter((s) => s.spawnCmd || s.label).map((s) => ({
|
|
9016
|
-
id: s.id ||
|
|
9208
|
+
id: s.id || randomUUID8(),
|
|
9017
9209
|
label: s.label || s.spawnCmd || "",
|
|
9018
9210
|
command: [s.spawnCmd, ...s.spawnArgs || []].filter(Boolean).join(" "),
|
|
9019
9211
|
...s.spawnOptions?.cwd ? { cwd: s.spawnOptions.cwd } : {}
|
|
@@ -9053,7 +9245,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
9053
9245
|
);
|
|
9054
9246
|
if (!svcScopedEnv) {
|
|
9055
9247
|
svcScopedEnv = {
|
|
9056
|
-
id:
|
|
9248
|
+
id: randomUUID8(),
|
|
9057
9249
|
projectId: projectMonoId,
|
|
9058
9250
|
name: `${service?.name || name} (${globalEnv.name})`,
|
|
9059
9251
|
scope: "service",
|
|
@@ -9077,7 +9269,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
9077
9269
|
const varPost = typeof varData === "object" ? String(varData.suffix ?? "") : "";
|
|
9078
9270
|
if (!varKey || existingKeys.has(cleanVarKey(varKey))) continue;
|
|
9079
9271
|
const cleaned = cleanVarKey(varKey);
|
|
9080
|
-
const varId =
|
|
9272
|
+
const varId = randomUUID8();
|
|
9081
9273
|
svcScopedEnv.variables[varId] = makeVariable(cleaned, varValue, varPre, varPost);
|
|
9082
9274
|
existingKeys.add(cleaned);
|
|
9083
9275
|
}
|
|
@@ -9097,7 +9289,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
9097
9289
|
);
|
|
9098
9290
|
if (!svcScopedEnv) {
|
|
9099
9291
|
svcScopedEnv = {
|
|
9100
|
-
id:
|
|
9292
|
+
id: randomUUID8(),
|
|
9101
9293
|
projectId: projectMonoId,
|
|
9102
9294
|
name: `${service?.name || serviceName} (${globalEnv.name})`,
|
|
9103
9295
|
scope: "service",
|
|
@@ -9118,7 +9310,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
9118
9310
|
const baseEntry = Object.entries(svcScopedEnv.variables).find(([, v]) => v.key === cleaned);
|
|
9119
9311
|
let varId = baseEntry?.[0];
|
|
9120
9312
|
if (!varId) {
|
|
9121
|
-
varId =
|
|
9313
|
+
varId = randomUUID8();
|
|
9122
9314
|
svcScopedEnv.variables[varId] = {
|
|
9123
9315
|
key: cleaned,
|
|
9124
9316
|
value: { value: "", pre: "", post: "", isSecret: false, shareWithAi: false, injectIntoAi: false, required: false, overrideOnly: false, description: "" }
|
|
@@ -9148,13 +9340,13 @@ async function runLegacyMigration(dataDir) {
|
|
|
9148
9340
|
flatOverrides[varId] = makeVariable(cleaned, value);
|
|
9149
9341
|
}
|
|
9150
9342
|
} else {
|
|
9151
|
-
flatOverrides[
|
|
9343
|
+
flatOverrides[randomUUID8()] = makeVariable(cleaned, value);
|
|
9152
9344
|
}
|
|
9153
9345
|
} else {
|
|
9154
9346
|
const cleaned = cleanVarKey(key);
|
|
9155
9347
|
const existingVarId = Object.entries(env2.variables).find(([, v]) => v.key === cleaned)?.[0];
|
|
9156
9348
|
if (!existingVarId) {
|
|
9157
|
-
const varId =
|
|
9349
|
+
const varId = randomUUID8();
|
|
9158
9350
|
env2.variables[varId] = makeVariable(cleaned, value);
|
|
9159
9351
|
varIdLookup.set(`${envId}:${cleaned}`, varId);
|
|
9160
9352
|
}
|
|
@@ -9338,7 +9530,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
9338
9530
|
if (isSameAsBase(value, baseVar)) continue;
|
|
9339
9531
|
flatOverrides[varId] = makeVariable(cleaned, value);
|
|
9340
9532
|
} else {
|
|
9341
|
-
flatOverrides[
|
|
9533
|
+
flatOverrides[randomUUID8()] = makeVariable(cleaned, value);
|
|
9342
9534
|
}
|
|
9343
9535
|
}
|
|
9344
9536
|
}
|
|
@@ -9375,7 +9567,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
9375
9567
|
);
|
|
9376
9568
|
if (!svcScopedEnv) {
|
|
9377
9569
|
svcScopedEnv = {
|
|
9378
|
-
id:
|
|
9570
|
+
id: randomUUID8(),
|
|
9379
9571
|
projectId: globalEnv["projectId"],
|
|
9380
9572
|
name: `${service?.["name"] || serviceName} (${globalEnv["name"]})`,
|
|
9381
9573
|
scope: "service",
|
|
@@ -9397,7 +9589,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
9397
9589
|
const baseEntry = Object.entries(svcScopedEnv["variables"]).find(([, v]) => v.key === cleaned);
|
|
9398
9590
|
let varId = baseEntry?.[0];
|
|
9399
9591
|
if (!varId) {
|
|
9400
|
-
varId =
|
|
9592
|
+
varId = randomUUID8();
|
|
9401
9593
|
svcScopedEnv["variables"][varId] = {
|
|
9402
9594
|
key: cleaned,
|
|
9403
9595
|
value: { value: "", pre: "", post: "", isSecret: false, shareWithAi: false, injectIntoAi: false, required: false, overrideOnly: false, description: "" }
|
|
@@ -9417,7 +9609,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
9417
9609
|
}
|
|
9418
9610
|
const migratedDir = overridesDir.replace(/overrides$/, "overrides-migrated");
|
|
9419
9611
|
try {
|
|
9420
|
-
await
|
|
9612
|
+
await rename5(overridesDir, migratedDir);
|
|
9421
9613
|
console.log(`[override-migration] Moved overrides/ \u2192 overrides-migrated/`);
|
|
9422
9614
|
} catch (err) {
|
|
9423
9615
|
console.warn(`[override-migration] Could not rename overrides dir: ${err.message}`);
|
|
@@ -10609,7 +10801,7 @@ async function createLocalServer() {
|
|
|
10609
10801
|
]);
|
|
10610
10802
|
console.log("[server] Shutdown complete");
|
|
10611
10803
|
};
|
|
10612
|
-
const { initCompanion } = await import("./companion-
|
|
10804
|
+
const { initCompanion } = await import("./companion-YB3SDDTU.js");
|
|
10613
10805
|
initCompanion();
|
|
10614
10806
|
return { app, server, wss, shutdown };
|
|
10615
10807
|
}
|
|
@@ -10739,7 +10931,7 @@ function onTrayServicesChanged(listener) {
|
|
|
10739
10931
|
}
|
|
10740
10932
|
|
|
10741
10933
|
// ../server/src/services/tray-icon.ts
|
|
10742
|
-
import { mkdir as mkdir12, writeFile as writeFile10, rename as
|
|
10934
|
+
import { mkdir as mkdir12, writeFile as writeFile10, rename as rename6 } from "fs/promises";
|
|
10743
10935
|
import { join as join17 } from "path";
|
|
10744
10936
|
|
|
10745
10937
|
// ../server/src/services/png-to-ico.ts
|
|
@@ -10939,7 +11131,7 @@ async function writeTrayIcon(stem, png, platform) {
|
|
|
10939
11131
|
async function writeAtomic(path, bytes) {
|
|
10940
11132
|
const tmp = `${path}.${process.pid}.tmp`;
|
|
10941
11133
|
await writeFile10(tmp, bytes);
|
|
10942
|
-
await
|
|
11134
|
+
await rename6(tmp, path);
|
|
10943
11135
|
return path;
|
|
10944
11136
|
}
|
|
10945
11137
|
async function resolveOrgLogo(orgId, platform) {
|
|
@@ -11056,4 +11248,4 @@ export {
|
|
|
11056
11248
|
startProcess,
|
|
11057
11249
|
stopProcess
|
|
11058
11250
|
};
|
|
11059
|
-
//# sourceMappingURL=src-
|
|
11251
|
+
//# sourceMappingURL=src-J3RBNMRJ.js.map
|