@runeya/runeya 2.0.52 → 2.0.53

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.
Files changed (313) hide show
  1. package/agent-manager-RGDHYM64.js +7 -0
  2. package/{chunk-IHUELGIB.js → chunk-EL75GG7O.js} +125 -44
  3. package/chunk-EL75GG7O.js.map +1 -0
  4. package/index.js +1 -1
  5. package/package.json +1 -1
  6. package/{src-MHKSKRBK.js → src-4GK5OK3K.js} +6105 -5818
  7. package/src-4GK5OK3K.js.map +1 -0
  8. package/web/assets/AgentScalarChatInterface.vue-Cz4cGFw_.js +13 -0
  9. package/web/assets/AgentTerminalPage-ChRcIGvk.js +1 -0
  10. package/web/assets/AiChatPage-jeAEz3pL.js +1 -0
  11. package/web/assets/AppLayout-C8-7N9YJ.js +1 -0
  12. package/web/assets/AuditPage-DfJlEoaI.js +1 -0
  13. package/web/assets/CloudAccountPage--6fr9upU.js +1 -0
  14. package/web/assets/CloudAccountPage-CI6Vvfrv.js +1 -0
  15. package/web/assets/CloudAccountPage-CVAMkCOF.css +1 -0
  16. package/web/assets/CloudMessagingPage-CWz2XG-O.js +2 -0
  17. package/web/assets/DashboardPage-Bkla6ZI9.js +1 -0
  18. package/web/assets/{EditorIcon-DGhMRlEH.js → EditorIcon-BYTcFJnr.js} +2 -2
  19. package/web/assets/EnvironmentForm-Tody7LuY.js +108 -0
  20. package/web/assets/EnvironmentFormPage-r_Hn2SiC.js +1 -0
  21. package/web/assets/EnvironmentListPage-BPQL4Fdp.js +1 -0
  22. package/web/assets/EnvironmentSelector-CsXJXDJE.js +1 -0
  23. package/web/assets/KanbanBoardPage-C2Cj_u1W.js +4 -0
  24. package/web/assets/KanbanBoardPage-ZIYuV1kG.css +1 -0
  25. package/web/assets/KanbanListPage-DG04Ci-t.js +1 -0
  26. package/web/assets/LaunchProjectPage-ZU10tRlq.js +1 -0
  27. package/web/assets/LaunchServicesPage-rLishQca.js +1 -0
  28. package/web/assets/LogViewer-DkR3A0v0.js +3 -0
  29. package/web/assets/{ProcessControls-CQ8xwnrF.js → ProcessControls-Dkf-zJF8.js} +1 -1
  30. package/web/assets/ProcessDetailPage-vDdHOtno.js +1 -0
  31. package/web/assets/{ProcessMetrics-Clh3v2iV.js → ProcessMetrics-BxwLdytO.js} +2 -2
  32. package/web/assets/ProjectDetailPage-Bu2gDzDU.js +1 -0
  33. package/web/assets/ProjectListPage-zlXxla_K.js +1 -0
  34. package/web/assets/RandomJobTestPage-DkxLX-Uy.js +2 -0
  35. package/web/assets/ScenarioEditorPage-Dlgug19y.js +14 -0
  36. package/web/assets/SendToChatDialog-BbMjL5KU.js +1 -0
  37. package/web/assets/ServiceControlsBar-D9mA1wIv.js +1 -0
  38. package/web/assets/ServiceDetailPage-CPtHs7te.js +2 -0
  39. package/web/assets/ServiceFormPage-D6zoG4d2.js +1 -0
  40. package/web/assets/SettingsPage-BL1cbj_d.js +2062 -0
  41. package/web/assets/{SettingsPage-jkWxbWkZ.css → SettingsPage-BY3dG-wn.css} +1 -1
  42. package/web/assets/UnlockPage-tTNE4QTc.js +1 -0
  43. package/web/assets/VariablesTable-C8UT5LGj.js +1 -0
  44. package/web/assets/VaultMigrationPage-ee6mGXkE.js +1 -0
  45. package/web/assets/VersionBadge-XGdKeJYP.js +1 -0
  46. package/web/assets/WikiPage-DBxWCk1C.js +1 -0
  47. package/web/assets/WikiView-CtMG-Mpi.js +1 -0
  48. package/web/assets/{add-scalar-classes-BSEzJner.js → add-scalar-classes-CjP6yoH9.js} +26 -26
  49. package/web/assets/auth-errors-C7Lmr_5E.js +1 -0
  50. package/web/assets/autocomplete-DLtfuYAg.js +422 -0
  51. package/web/assets/{basic-shape-diamond.svg-YpT_2yGM.js → basic-shape-diamond.svg-Dwn3EJf7.js} +1 -1
  52. package/web/assets/{basic-shape-hexagon.svg-ZHh7P2mz.js → basic-shape-hexagon.svg-kpOvfzAi.js} +1 -1
  53. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-yEGfULrq.js → basic-shape-primary-circle-ellipse-round.svg-CZpeeE8h.js} +1 -1
  54. package/web/assets/{basic-shape-primary-square-rectangle.svg-CV_MBv8E.js → basic-shape-primary-square-rectangle.svg-lIzT-3bQ.js} +1 -1
  55. package/web/assets/{basic-shape-shield.svg-CLVN0WJX.js → basic-shape-shield.svg-DB-n6Wmn.js} +1 -1
  56. package/web/assets/{browser-D4w7UetE.js → browser-Dm_lNzZ-.js} +1 -1
  57. package/web/assets/{browser-C_GxJ_3e.js → browser-wjfUiObI.js} +1 -1
  58. package/web/assets/card-C3zlSqpG.js +32 -0
  59. package/web/assets/{checkbox-DeY_k6xP.js → checkbox-lVXx5U1s.js} +3 -3
  60. package/web/assets/{chip-DrQIKVKn.js → chip-Cc40pDDT.js} +2 -2
  61. package/web/assets/client-CN9LxBfq.js +24 -0
  62. package/web/assets/cloud-chat.store-CKtcP8mx.js +1 -0
  63. package/web/assets/{cloud-session-BuGqIC29.js → cloud-session-luM5H14C.js} +1 -1
  64. package/web/assets/column-DlQNKY_S.js +907 -0
  65. package/web/assets/{computer-device-desktop-monitor.svg-FAeSFvzj.js → computer-device-desktop-monitor.svg-B8fVLOqV.js} +1 -1
  66. package/web/assets/{computer-device-desktop.svg-DA-GQ3hr.js → computer-device-desktop.svg-CKeybOQk.js} +1 -1
  67. package/web/assets/{computer-device-laptop.svg-D2eE8iPZ.js → computer-device-laptop.svg-C5xV7_Nt.js} +1 -1
  68. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-B6zevToY.js → computer-device-mobile-phone-android-samsung-back.svg-5CRKvrQx.js} +1 -1
  69. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BmxrNEhr.js → computer-device-mobile-phone-android-samsung.svg-Da4aZrXd.js} +1 -1
  70. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CojBzdim.js → computer-device-mobile-phone-iphone-x-back.svg-D9phyiQZ.js} +1 -1
  71. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-1BUZ4i95.js → computer-device-mobile-phone-iphone-x.svg-V7yMTZCu.js} +1 -1
  72. package/web/assets/{computer-device-mobile-tablet-touch.svg-CSfNBal6.js → computer-device-mobile-tablet-touch.svg-CGMdXdex.js} +1 -1
  73. package/web/assets/{computer-device-mobile-tablet.svg-twjoIYnU.js → computer-device-mobile-tablet.svg-66hlusLK.js} +1 -1
  74. package/web/assets/{computer-device-network-ethernet-cat6.svg-DeLJr_Bg.js → computer-device-network-ethernet-cat6.svg-BhuzmqfI.js} +1 -1
  75. package/web/assets/{computer-device-network-lan-www.svg-D4tLpabf.js → computer-device-network-lan-www.svg-BXLNIvQ6.js} +1 -1
  76. package/web/assets/{computer-device-network-wifi-connection.svg-DkinP8JJ.js → computer-device-network-wifi-connection.svg-CaVzq_6z.js} +1 -1
  77. package/web/assets/{computer-device-network-wifi-router.svg-CbTYcPoV.js → computer-device-network-wifi-router.svg-DasSXsmT.js} +1 -1
  78. package/web/assets/{cssMode-B-5qMS9W.js → cssMode-CokQPPhF.js} +1 -1
  79. package/web/assets/{divider-CMl36DmL.js → divider-3st3S0cz.js} +2 -2
  80. package/web/assets/{ecology-science-erlenmeyer-flask.svg-h7u0Vs9p.js → ecology-science-erlenmeyer-flask.svg-0xfq6Yyi.js} +1 -1
  81. package/web/assets/{fieldset-C1yXTDn4.js → fieldset-CvZZBOcz.js} +2 -2
  82. package/web/assets/{freemarker2-CjLTuk8k.js → freemarker2-1YMoAedE.js} +1 -1
  83. package/web/assets/{handlebars-DGqtsUFa.js → handlebars-wAW8puhT.js} +1 -1
  84. package/web/assets/{html-i8MbH284.js → html-DdFlw76f.js} +1 -1
  85. package/web/assets/{htmlMode-ClDqI0EC.js → htmlMode-Cy1vm8Ag.js} +1 -1
  86. package/web/assets/{image-flash-lightning.svg-B8iwzLyv.js → image-flash-lightning.svg-COFAE0wR.js} +1 -1
  87. package/web/assets/{image-picture-flower.svg-Dk0wJr-9.js → image-picture-flower.svg-ezqcE4KS.js} +1 -1
  88. package/web/assets/{index-D7XqcLhE.css → index-CICxLkjp.css} +1 -1
  89. package/web/assets/{index-Dp6bkX9T.js → index-Ccntdgfe.js} +290 -290
  90. package/web/assets/{interface-alert-exclamation-diamond.svg-BsbY85gZ.js → interface-alert-exclamation-diamond.svg-CHGW-cLp.js} +1 -1
  91. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-DP1wSCt3.js → interface-alert-exclamation-triangle-warning.svg-DvPTCqs0.js} +1 -1
  92. package/web/assets/{interface-alert-information-circle.svg-Xh0RC3va.js → interface-alert-information-circle.svg-jX4BkfAJ.js} +1 -1
  93. package/web/assets/{interface-award-crown.svg-BYXc7LVx.js → interface-award-crown.svg-DtuQ-cID.js} +1 -1
  94. package/web/assets/{interface-bookmark.svg-DDQ_ylEK.js → interface-bookmark-tag.svg-CAFVyAoV.js} +1 -1
  95. package/web/assets/{interface-bookmark-tag.svg-ket4A6Lr.js → interface-bookmark.svg-BneowIGx.js} +1 -1
  96. package/web/assets/{interface-calendar-date-one.svg-TCIcZLUR.js → interface-calendar-date-one.svg-CfpOGCx4.js} +1 -1
  97. package/web/assets/{interface-content-book-open-pages.svg-HpGg1i7p.js → interface-content-book-open-pages.svg-Cl1dxQ4s.js} +1 -1
  98. package/web/assets/{interface-content-book-page.svg-DanHo22R.js → interface-content-book-page.svg-CEhybPQh.js} +1 -1
  99. package/web/assets/{interface-content-file.svg-D_7M3Gzg.js → interface-content-file.svg-HK08zzYO.js} +1 -1
  100. package/web/assets/interface-content-folder.svg-BD3Sy4hk.js +1 -0
  101. package/web/assets/{interface-content-folder.svg-B56JOABU.js → interface-content-folder.svg-DuncK7Kw.js} +1 -1
  102. package/web/assets/{interface-copy-clipboard.svg-D6pxFSYk.js → interface-copy-clipboard.svg-CHxj1VUB.js} +1 -1
  103. package/web/assets/{interface-edit-attachment.svg-CgbZkf8y.js → interface-edit-attachment.svg-DQ-TGp2N.js} +1 -1
  104. package/web/assets/{interface-edit-binocular.svg-DlKyYNaD.js → interface-edit-binocular.svg-CIUJcI__.js} +1 -1
  105. package/web/assets/{interface-edit-magic-wand.svg-3Z3vgwMa.js → interface-edit-magic-wand.svg-Bn7wsTVd.js} +1 -1
  106. package/web/assets/{interface-edit-tool-paint-roller.svg-B0HQxlm0.js → interface-edit-tool-paint-roller.svg-BLR1HoWs.js} +1 -1
  107. package/web/assets/{interface-edit-tool-pencil.svg-DTBA5aOW.js → interface-edit-tool-pencil.svg-DM3xZUtj.js} +1 -1
  108. package/web/assets/{interface-favorite-award.svg-D2sdh8hY.js → interface-favorite-award.svg-Bc8_APGD.js} +1 -1
  109. package/web/assets/{interface-favorite-flag.svg-BwolDorS.js → interface-favorite-flag.svg-BBV01eyw.js} +1 -1
  110. package/web/assets/{interface-favorite-heart.svg-C0xoK2eX.js → interface-favorite-heart.svg-DpFl3KSk.js} +1 -1
  111. package/web/assets/{interface-favorite-star.svg-B3u5n7c2.js → interface-favorite-star.svg-CaFUQ9jK.js} +1 -1
  112. package/web/assets/{interface-favorite-stars-sparkles.svg-BQ6_nHMc.js → interface-favorite-stars-sparkles.svg-19cy1b4g.js} +1 -1
  113. package/web/assets/{interface-hierarchy-flowchart.svg-DpR1KgBm.js → interface-hierarchy-flowchart.svg-Btiu5TuK.js} +1 -1
  114. package/web/assets/{interface-home-house.svg-Cxdi_eZT.js → interface-home-house.svg-Bp4aVUgs.js} +1 -1
  115. package/web/assets/{interface-hyperlink.svg-D3Az4MB1.js → interface-hyperlink.svg-Df34T3Eu.js} +1 -1
  116. package/web/assets/{interface-lighting-brightness.svg-CFCx0wxJ.js → interface-lighting-brightness.svg-CBJnLIw7.js} +1 -1
  117. package/web/assets/{interface-lock-closed.svg-4nQ3nAjd.js → interface-lock-closed.svg-C082mEtr.js} +1 -1
  118. package/web/assets/{interface-lock-open-unlock.svg-DEZb7XRS.js → interface-lock-open-unlock.svg-ktQ_lN_X.js} +1 -1
  119. package/web/assets/{interface-login-key.svg-BzhBvtOH.js → interface-login-key.svg-1JZV_q3n.js} +1 -1
  120. package/web/assets/{interface-search.svg-BTVjJsdx.js → interface-search.svg-BWOepCe2.js} +1 -1
  121. package/web/assets/{interface-setting-cog.svg-BfeZ86e-.js → interface-setting-cog.svg-Ck7-QPf8.js} +1 -1
  122. package/web/assets/{interface-share-megaphone-bullhorn.svg-BuX4jZss.js → interface-share-megaphone-bullhorn.svg-B4XWLcvf.js} +1 -1
  123. package/web/assets/{interface-share-rocket.svg-QkrdvPm3.js → interface-share-rocket.svg-jsXjbfvo.js} +1 -1
  124. package/web/assets/{interface-share-satellite.svg-Cdu9Ssss.js → interface-share-satellite.svg-DYc-pAdI.js} +1 -1
  125. package/web/assets/{interface-share-space-ship.svg-DL0JpObS.js → interface-share-space-ship.svg-azKKMF8L.js} +1 -1
  126. package/web/assets/{interface-share.svg-BIBmVu-Z.js → interface-share.svg-k0lPxn1t.js} +1 -1
  127. package/web/assets/{interface-signal-square.svg-DBiXDixA.js → interface-signal-square.svg-eCO4ev15.js} +1 -1
  128. package/web/assets/{interface-time-clock-circle.svg-Dw8ufcru.js → interface-time-clock-circle.svg-C0Sm0_j9.js} +1 -1
  129. package/web/assets/{interface-time-hour-glass.svg-DW-VGZ9S.js → interface-time-hour-glass.svg-hfRVIC1r.js} +1 -1
  130. package/web/assets/{interface-users-multiple.svg-BINNDDOm.js → interface-users-multiple.svg-Dm9UimfL.js} +1 -1
  131. package/web/assets/{interface-weather-moon.svg-7AwWEmfi.js → interface-weather-moon.svg-BhxFHPbN.js} +1 -1
  132. package/web/assets/{javascript-BmwETCoN.js → javascript-_AR6wrF0.js} +1 -1
  133. package/web/assets/{jsonMode-jhfq8N1j.js → jsonMode-CYWBTJpV.js} +2 -2
  134. package/web/assets/{liquid-CXHFHq2a.js → liquid-Doe_Qoxn.js} +1 -1
  135. package/web/assets/{lspLanguageFeatures-DNlDiaf8.js → lspLanguageFeatures-TK5k9ahW.js} +2 -2
  136. package/web/assets/{mail-chat-bubble-square.svg-Cbw9XSWq.js → mail-chat-bubble-square.svg-CitsmxJ_.js} +1 -1
  137. package/web/assets/{mail-send-email-paper-airplane.svg-BsOn0WRk.js → mail-send-email-paper-airplane.svg-CYDMogt4.js} +1 -1
  138. package/web/assets/{mail-send-envelope.svg-FiCVjNhS.js → mail-send-envelope.svg-s-A4ytfv.js} +1 -1
  139. package/web/assets/{mdx-BXQ_HHCT.js → mdx-CSf3fjQb.js} +1 -1
  140. package/web/assets/{message-BhAEg6uM.js → message-5nViABpL.js} +2 -2
  141. package/web/assets/{minus-DCjXtDL7.js → minus-mDLJQeXY.js} +2 -2
  142. package/web/assets/modal-DcxJxueq.js +5 -0
  143. package/web/assets/modal-n2wMDd7F.js +1 -0
  144. package/web/assets/{money-cashier-receipt.svg-BPAwldjt.js → money-cashier-receipt.svg-B3w4dcvy.js} +1 -1
  145. package/web/assets/{money-currency-dollar-pay.svg-D_nR6kZg.js → money-currency-dollar-pay.svg-By5pgatC.js} +1 -1
  146. package/web/assets/{money-graph-arrow-increase.svg-CoZwsioR.js → money-graph-arrow-increase.svg-JJK_oYl6.js} +1 -1
  147. package/web/assets/{money-graph-bar-chart-increase.svg-DTaCKAmM.js → money-graph-bar-chart-increase.svg-BMvEIVpy.js} +1 -1
  148. package/web/assets/multiselect-CqGmdE3J.js +251 -0
  149. package/web/assets/{nature-ecology-leaf.svg-AXZXO7rv.js → nature-ecology-leaf.svg-CGCHa8bD.js} +1 -1
  150. package/web/assets/{password-DO4Z8eXp.js → password-CSX8oB5M.js} +4 -4
  151. package/web/assets/{phone-telephone.svg-DsO2IQVY.js → phone-telephone.svg-CA8_wOQH.js} +1 -1
  152. package/web/assets/{plus-yPEoWB54.js → plus-CGTKvVZ7.js} +6 -6
  153. package/web/assets/process.store-CTLjlYjT.js +1 -0
  154. package/web/assets/{programming-bug.svg-DKOd0mcH.js → programming-bug.svg-Cizii8p1.js} +1 -1
  155. package/web/assets/{programming-cloud.svg-D9jQ_h92.js → programming-cloud.svg-pnwxJHaK.js} +1 -1
  156. package/web/assets/{programming-computer-database-server.svg-DKTyeoSb.js → programming-computer-database-server.svg-CNt3Jbql.js} +1 -1
  157. package/web/assets/{programming-computer-database.svg-BDqL3cIA.js → programming-computer-database.svg-ESSkZX3t.js} +1 -1
  158. package/web/assets/{programming-module-four-layout.svg-C3VK_bT8.js → programming-module-four-layout.svg-BGbJvE0O.js} +1 -1
  159. package/web/assets/{programming-module-three.svg-Bq1FzDKb.js → programming-module-three.svg-D3gOTAlw.js} +1 -1
  160. package/web/assets/{programming-module.svg-Qm6lzSnJ.js → programming-module.svg-CSHFfsFS.js} +1 -1
  161. package/web/assets/{programming-script-code.svg-C8X07wUI.js → programming-script-code.svg-DjFoDv0c.js} +1 -1
  162. package/web/assets/{python-By6Mp1Ix.js → python-MEGp0q_z.js} +1 -1
  163. package/web/assets/{razor-CEUV3zJp.js → razor-CEazjH4x.js} +1 -1
  164. package/web/assets/router-BmJL8z_u.js +1 -0
  165. package/web/assets/settings-scope-BGuX4AI9.js +1 -0
  166. package/web/assets/settings.store-a49Jijfe.js +1 -0
  167. package/web/assets/{shopping-cart.svg-BRL8Ll51.js → shopping-cart.svg-Cu7M1oni.js} +1 -1
  168. package/web/assets/{shopping-gift-present.svg-CXQFba5I.js → shopping-gift-present.svg-Cdnu9uAQ.js} +1 -1
  169. package/web/assets/{shopping-shipping-box-parcel-package.svg-Bn2p6-mI.js → shopping-shipping-box-parcel-package.svg-C6BL6pCC.js} +1 -1
  170. package/web/assets/{src-Fna7vk35.js → src-BKhMPhsU.js} +13 -13
  171. package/web/assets/src-DQvVUJe0.js +1 -0
  172. package/web/assets/{tabpanel-DWqdAA9H.js → tabpanel-B9VkBnSU.js} +3 -3
  173. package/web/assets/{tag-new-circle.svg-1MfDK7Ga.js → tag-new-circle.svg-BpXDXKC4.js} +1 -1
  174. package/web/assets/{travel-map-earth-globe.svg-825O-f6n.js → travel-map-earth-globe.svg-B_t8kO2f.js} +1 -1
  175. package/web/assets/trpc-B-qv_zm2.js +1 -0
  176. package/web/assets/{tsMode-DijbMMhR.js → tsMode-lBRYpyez.js} +6 -6
  177. package/web/assets/{typescript-46ax_ZH8.js → typescript-DGOxNj9C.js} +1 -1
  178. package/web/assets/useAiChatDrawer-xv2HAiHA.js +1 -0
  179. package/web/assets/useCloudOrg-_Z_zfd63.js +1 -0
  180. package/web/assets/useProjectCatalog-CNbze2zg.js +1 -0
  181. package/web/assets/{xml-DflJhDfp.js → xml-Cqgx2kWf.js} +1 -1
  182. package/web/assets/{yaml-BS1mDEyU.js → yaml-CIs4cY7e.js} +1 -1
  183. package/web/index.html +2 -2
  184. package/agent-manager-FD2NGRIW.js +0 -7
  185. package/chunk-IHUELGIB.js.map +0 -1
  186. package/src-MHKSKRBK.js.map +0 -1
  187. package/web/assets/AgentScalarChatInterface.vue-JTgBbqsP.js +0 -13
  188. package/web/assets/AgentTerminalPage-fXxKDSBp.js +0 -1
  189. package/web/assets/AiChatPage-Bp7ILsub.js +0 -1
  190. package/web/assets/AppLayout-BKe5kedw.js +0 -1
  191. package/web/assets/AuditPage-Ddclku7y.js +0 -1
  192. package/web/assets/CloudAccountPage-CJvovJKI.js +0 -1
  193. package/web/assets/CloudAccountPage-CbfN4BNY.js +0 -1
  194. package/web/assets/CloudAccountPage-CkavjE7H.css +0 -1
  195. package/web/assets/CloudMessagingPage-DL7yhkIr.js +0 -2
  196. package/web/assets/DashboardPage-C5_XFyV4.js +0 -1
  197. package/web/assets/EnvironmentForm-Cukn9qzo.js +0 -108
  198. package/web/assets/EnvironmentFormPage-BpfgeFpg.js +0 -1
  199. package/web/assets/EnvironmentListPage-Li3GLLyj.js +0 -1
  200. package/web/assets/EnvironmentSelector-BWHfZMtZ.js +0 -1
  201. package/web/assets/KanbanBoardPage-1w2I89mN.js +0 -4
  202. package/web/assets/KanbanBoardPage-BvMPl2FW.css +0 -1
  203. package/web/assets/KanbanListPage-DK1fKIHQ.js +0 -1
  204. package/web/assets/LaunchProjectPage-D_cvL12d.js +0 -1
  205. package/web/assets/LaunchServicesPage-CXjCCXsD.js +0 -1
  206. package/web/assets/LogViewer-UxzuKlYv.js +0 -3
  207. package/web/assets/ProcessDetailPage-Cs2iFdad.js +0 -1
  208. package/web/assets/ProjectDetailPage-yy_WuImd.js +0 -1
  209. package/web/assets/ProjectListPage-BLc6N4m9.js +0 -1
  210. package/web/assets/RandomJobTestPage--f9IHi8X.js +0 -2
  211. package/web/assets/ScenarioEditorPage-CGGi9d-0.js +0 -14
  212. package/web/assets/SendToChatDialog-Do2v5Six.js +0 -1
  213. package/web/assets/ServiceControlsBar-BssqBAbh.js +0 -1
  214. package/web/assets/ServiceDetailPage-BX5JWwRn.js +0 -2
  215. package/web/assets/ServiceFormPage-B_rj0cRE.js +0 -1
  216. package/web/assets/SettingsPage-B992G0HP.js +0 -2062
  217. package/web/assets/UnlockPage-hsk1oePv.js +0 -1
  218. package/web/assets/VariablesTable-BcufD-wK.js +0 -1
  219. package/web/assets/VaultMigrationPage-g7BEHG1W.js +0 -1
  220. package/web/assets/VersionBadge-al4x1GFB.js +0 -1
  221. package/web/assets/WikiPage-7B9dOrIk.js +0 -1
  222. package/web/assets/WikiView-DmKiYIq5.js +0 -1
  223. package/web/assets/auth-errors-6e5dqdyJ.js +0 -1
  224. package/web/assets/autocomplete-BKoTlKQ4.js +0 -422
  225. package/web/assets/card-BuAageiY.js +0 -32
  226. package/web/assets/client-DE0Y5Nrj.js +0 -24
  227. package/web/assets/cloud-chat.store-fBYK5Cgw.js +0 -1
  228. package/web/assets/column-DEHgjs7t.js +0 -907
  229. package/web/assets/interface-content-folder.svg-bcqnWOK0.js +0 -1
  230. package/web/assets/modal-D55b155P.js +0 -5
  231. package/web/assets/modal-cjFJ-Pqb.js +0 -1
  232. package/web/assets/multiselect-By28VIxd.js +0 -251
  233. package/web/assets/process.store-Ddlv2x7t.js +0 -1
  234. package/web/assets/router-CwxQMOvD.js +0 -1
  235. package/web/assets/settings.store-CdbxGLwM.js +0 -1
  236. package/web/assets/src-ZKiShuw1.js +0 -1
  237. package/web/assets/trpc-C9TOnzsl.js +0 -1
  238. package/web/assets/useAiChatDrawer-Fipk1tL5.js +0 -1
  239. package/web/assets/useCloudOrg-B3j8giwe.js +0 -1
  240. package/web/assets/useProjectCatalog-BW2ZvrJl.js +0 -1
  241. /package/{agent-manager-FD2NGRIW.js.map → agent-manager-RGDHYM64.js.map} +0 -0
  242. /package/web/assets/{abap-DMmvWZUy.js → abap-DT2sAUGb.js} +0 -0
  243. /package/web/assets/{apex-D89PiTzU.js → apex-BqR8ejP0.js} +0 -0
  244. /package/web/assets/{azcli-ChnjTTA5.js → azcli-DK_jNPxf.js} +0 -0
  245. /package/web/assets/{bat-uLzQ_FhK.js → bat-BLmcleEN.js} +0 -0
  246. /package/web/assets/{bicep-CMOK7Q1v.js → bicep-DkR6Nnyy.js} +0 -0
  247. /package/web/assets/{cameligo-D1AyojFH.js → cameligo-DfT1QA_V.js} +0 -0
  248. /package/web/assets/{clojure-D9JoUgXn.js → clojure-BbsGZ_q_.js} +0 -0
  249. /package/web/assets/{coffee-D-5sSToL.js → coffee-CZQPrkXM.js} +0 -0
  250. /package/web/assets/{cpp-BqT_t_y9.js → cpp-CZLFjmrQ.js} +0 -0
  251. /package/web/assets/{csharp-CuToYI91.js → csharp-CljM85nx.js} +0 -0
  252. /package/web/assets/{csp-CffcxvlO.js → csp-B7ItwhrE.js} +0 -0
  253. /package/web/assets/{css-CUD0biQW.js → css-CIuVviKc.js} +0 -0
  254. /package/web/assets/{cypher-ByyWL_9U.js → cypher-Lk1MiloH.js} +0 -0
  255. /package/web/assets/{dart-B__ipcUn.js → dart-B83vLjrb.js} +0 -0
  256. /package/web/assets/{dockerfile-DS-_8bWw.js → dockerfile--LImnfYW.js} +0 -0
  257. /package/web/assets/{ecl-DWsNCBUj.js → ecl-C1mPHzto.js} +0 -0
  258. /package/web/assets/{elixir-OfjEy-3g.js → elixir-F7VkySYx.js} +0 -0
  259. /package/web/assets/{flow9-BPX22hxS.js → flow9-CyDLjcIP.js} +0 -0
  260. /package/web/assets/{fsharp-CVJcfIUn.js → fsharp-BtAy52j8.js} +0 -0
  261. /package/web/assets/{go-CfRHZ3yg.js → go-nAky3Nvu.js} +0 -0
  262. /package/web/assets/{graphql-BZaO3ttK.js → graphql-BFHB5AhE.js} +0 -0
  263. /package/web/assets/{hcl-BF9-qUku.js → hcl-DiNGWUmy.js} +0 -0
  264. /package/web/assets/{ini-BUvw6xhr.js → ini-D1Fg5XrG.js} +0 -0
  265. /package/web/assets/{java-BZ5BNd2x.js → java-C-10mSK7.js} +0 -0
  266. /package/web/assets/{julia-DN38cgYT.js → julia-Bqx3lIQk.js} +0 -0
  267. /package/web/assets/{kotlin-CjEJKT8q.js → kotlin-BBx7H7X0.js} +0 -0
  268. /package/web/assets/{less-DMEH_Nwq.js → less-BFHUOKEO.js} +0 -0
  269. /package/web/assets/{lexon-CKQUX8Ov.js → lexon-CZNaGS2_.js} +0 -0
  270. /package/web/assets/{lua-CuWjKLJ0.js → lua-iuAeZ15y.js} +0 -0
  271. /package/web/assets/{m3-CEp1bVrM.js → m3-Dotjo0U8.js} +0 -0
  272. /package/web/assets/{markdown-DxtQ_puq.js → markdown-B_31SQ_4.js} +0 -0
  273. /package/web/assets/{mips-Dx7qydpO.js → mips-Dp4rVQ6A.js} +0 -0
  274. /package/web/assets/{msdax-DpNCaSiO.js → msdax-DGvgi_My.js} +0 -0
  275. /package/web/assets/{mysql-C3xsBDPP.js → mysql-jqX2Izgu.js} +0 -0
  276. /package/web/assets/{objective-c-BbaVHCX1.js → objective-c-KWePe42v.js} +0 -0
  277. /package/web/assets/{pascal-sDju2faq.js → pascal-k9Augcc6.js} +0 -0
  278. /package/web/assets/{pascaligo-ChCdOH6b.js → pascaligo-CijZuMoC.js} +0 -0
  279. /package/web/assets/{perl-BCgLFj01.js → perl-CtKbbdqv.js} +0 -0
  280. /package/web/assets/{pgsql-DtKby69f.js → pgsql-IYBGBY8p.js} +0 -0
  281. /package/web/assets/{php-NYvR17Qb.js → php-CZgzKas5.js} +0 -0
  282. /package/web/assets/{pla-gSg-RBG0.js → pla-DxEUZCU5.js} +0 -0
  283. /package/web/assets/{postiats-BQxHyDfy.js → postiats-Cf9oispl.js} +0 -0
  284. /package/web/assets/{powerquery-DzDmbVZN.js → powerquery-Cyri2j7y.js} +0 -0
  285. /package/web/assets/{powershell-yy4Q5BEQ.js → powershell-CezsOW84.js} +0 -0
  286. /package/web/assets/{protobuf-B_hIk9q0.js → protobuf-BVSVLozM.js} +0 -0
  287. /package/web/assets/{pug-CdeEb1ft.js → pug-tdDHxxGI.js} +0 -0
  288. /package/web/assets/{qsharp-CiSquEgT.js → qsharp-BbxYBU73.js} +0 -0
  289. /package/web/assets/{r-D1Ocz1x4.js → r-CMiogh24.js} +0 -0
  290. /package/web/assets/{redis-D42Y12yz.js → redis-Be7YRs2n.js} +0 -0
  291. /package/web/assets/{redshift-CS62MYfG.js → redshift-BMtedC4Y.js} +0 -0
  292. /package/web/assets/{restructuredtext-CKFSMEXw.js → restructuredtext-BeqA_Nw7.js} +0 -0
  293. /package/web/assets/{ruby-C4gTaeU3.js → ruby-DQh1qjXf.js} +0 -0
  294. /package/web/assets/{rust-C_f2AiHQ.js → rust-Dtb7SJq9.js} +0 -0
  295. /package/web/assets/{sb-CdNdpP1r.js → sb-YjmuT7ii.js} +0 -0
  296. /package/web/assets/{scala-N4EWaFTL.js → scala-3ZhdCU1r.js} +0 -0
  297. /package/web/assets/{scheme-CttIARxx.js → scheme-Ck6PwJVN.js} +0 -0
  298. /package/web/assets/{scss-v0wtbxaE.js → scss-CdSZkceb.js} +0 -0
  299. /package/web/assets/{shell-BJdEWXbc.js → shell-D951-SzL.js} +0 -0
  300. /package/web/assets/{solidity-DKDa59zZ.js → solidity-BtE4jdUZ.js} +0 -0
  301. /package/web/assets/{sophia--Kw-vDpr.js → sophia-CPgh17t9.js} +0 -0
  302. /package/web/assets/{sparql-BI8jS9Pc.js → sparql-D5V7fRaF.js} +0 -0
  303. /package/web/assets/{sql-Dz6z--6O.js → sql-CIe64i2G.js} +0 -0
  304. /package/web/assets/{st-CT8D05gv.js → st-BUZL4NkZ.js} +0 -0
  305. /package/web/assets/{swift-Ayb3KzWx.js → swift-BGpAy-yZ.js} +0 -0
  306. /package/web/assets/{systemverilog-BtWJM9O5.js → systemverilog-CYBqw_20.js} +0 -0
  307. /package/web/assets/{tcl-BJvUWpbV.js → tcl-CqmcDc3_.js} +0 -0
  308. /package/web/assets/{twig-c3YaBCU6.js → twig-BWVIPIPE.js} +0 -0
  309. /package/web/assets/{typespec-gFCWLBoZ.js → typespec-mTM8EdlQ.js} +0 -0
  310. /package/web/assets/{uuid-B_qWVd9j.js → uuid-aTVnbu2y.js} +0 -0
  311. /package/web/assets/{vb-CVtfWXV2.js → vb-xvgQ7mYU.js} +0 -0
  312. /package/web/assets/{w3c-keyname-CEC6uTIQ.js → w3c-keyname-CjzYiphr.js} +0 -0
  313. /package/web/assets/{wgsl-C_huaGQy.js → wgsl-C8m-CvBD.js} +0 -0
@@ -0,0 +1,7 @@
1
+ import {
2
+ agentManager
3
+ } from "./chunk-EL75GG7O.js";
4
+ export {
5
+ agentManager
6
+ };
7
+ //# sourceMappingURL=agent-manager-RGDHYM64.js.map
@@ -89,6 +89,15 @@ function projectVaultRoot(orgId, projectId) {
89
89
  assertSafeId("project", projectId);
90
90
  return join(orgVaultRoot(orgId), "projects", projectId);
91
91
  }
92
+ function orgIdOfRoot(root) {
93
+ const marker = join(machineRoot(), "orgs") + sep;
94
+ if (!root.startsWith(marker)) return null;
95
+ const [orgId] = root.slice(marker.length).split(sep);
96
+ return orgId && SAFE_ID.test(orgId) ? orgId : null;
97
+ }
98
+ function vaultIdOfRoot(root) {
99
+ return orgIdOfRoot(root) ?? void 0;
100
+ }
92
101
  function vaultFor(target) {
93
102
  if (!target.orgId) return { root: localVaultRoot() };
94
103
  return { root: projectVaultRoot(target.orgId, target.id) };
@@ -195,6 +204,7 @@ import { createHash } from "crypto";
195
204
  var KEY_SIZE_BYTES = 32;
196
205
  var DEFAULT_VAULT = "\0default";
197
206
  var keyring = /* @__PURE__ */ new Map();
207
+ var lockedVaults = /* @__PURE__ */ new Set();
198
208
  var _ciMode = false;
199
209
  var _pendingLegacyKey = null;
200
210
  function isCiMode() {
@@ -231,16 +241,31 @@ function hasPendingLegacyKey() {
231
241
  function setEncryptionKeyInMemory(key, vault = DEFAULT_VAULT) {
232
242
  if (key.length !== KEY_SIZE_BYTES) throw new Error("Taille de cl\xE9 invalide");
233
243
  keyring.set(vault, key);
244
+ lockedVaults.delete(vault);
234
245
  }
235
246
  function clearEncryptionKey(vault) {
236
- if (vault === void 0) keyring.clear();
237
- else keyring.delete(vault);
247
+ if (vault === void 0) {
248
+ keyring.clear();
249
+ lockedVaults.clear();
250
+ } else {
251
+ keyring.delete(vault);
252
+ }
238
253
  }
239
254
  function hasEncryptionKey(vault = DEFAULT_VAULT) {
240
255
  return keyring.has(vault);
241
256
  }
242
257
  function getEncryptionKey(vault = DEFAULT_VAULT) {
243
- return keyring.get(vault) ?? null;
258
+ const own = keyring.get(vault);
259
+ if (own) return own;
260
+ if (vault === DEFAULT_VAULT || lockedVaults.has(vault)) return null;
261
+ return keyring.get(DEFAULT_VAULT) ?? null;
262
+ }
263
+ function markVaultLocked(vault) {
264
+ lockedVaults.add(vault);
265
+ keyring.delete(vault);
266
+ }
267
+ function clearVaultLock(vault) {
268
+ lockedVaults.delete(vault);
244
269
  }
245
270
  function deriveStableSecret(purpose, vault = DEFAULT_VAULT) {
246
271
  const key = getEncryptionKey(vault);
@@ -258,8 +283,8 @@ async function setEncryptionKey(keyHex) {
258
283
  // ../server/src/services/agent-store.ts
259
284
  var FILENAME = "agents.json";
260
285
  var ALGORITHM = "aes-256-gcm";
261
- function encrypt(plaintext) {
262
- const maybeKey = getEncryptionKey();
286
+ function encrypt(plaintext, vault) {
287
+ const maybeKey = getEncryptionKey(vault);
263
288
  if (!maybeKey) {
264
289
  throw new Error("Encryption key not loaded \u2014 please provide the key via setup UI");
265
290
  }
@@ -271,11 +296,11 @@ function encrypt(plaintext) {
271
296
  const authTag = cipher.getAuthTag().toString("hex");
272
297
  return { encrypted: enc, iv: iv.toString("hex"), authTag };
273
298
  }
274
- function decrypt(encrypted, ivHex, authTagHex) {
299
+ function decrypt(encrypted, ivHex, authTagHex, vault) {
275
300
  if (!/^[0-9a-f]+$/i.test(encrypted) || !/^[0-9a-f]+$/i.test(ivHex) || !/^[0-9a-f]+$/i.test(authTagHex)) {
276
301
  throw new Error("Invalid hex string in encrypted agent data");
277
302
  }
278
- const maybeKey = getEncryptionKey();
303
+ const maybeKey = getEncryptionKey(vault);
279
304
  if (!maybeKey) {
280
305
  throw new Error("Encryption key not loaded \u2014 please provide the key via setup UI");
281
306
  }
@@ -310,6 +335,10 @@ var AgentStore = class {
310
335
  * blanc. Pour une organisation, c'est son coffre — la clé, elle, répond
311
336
  * toujours pour toute la machine.
312
337
  */
338
+ /** L'identifiant de clé d'un agent : son organisation, ou la machine. */
339
+ vaultOf(id) {
340
+ return this.owners.get(id) ?? void 0;
341
+ }
313
342
  filePathFor(owner) {
314
343
  if (owner === null) return keyedFilePath(FILENAME);
315
344
  return Promise.resolve(join2(orgVaultRoot(owner), FILENAME));
@@ -407,7 +436,9 @@ var AgentStore = class {
407
436
  id: stored.id,
408
437
  name: stored.name,
409
438
  url: stored.url,
410
- passphrase: decrypt(stored.encrypted, stored.iv, stored.authTag),
439
+ // La passphrase est chiffrée par la clé du coffre où l'agent est rangé :
440
+ // celle de son organisation, ou celle de la machine.
441
+ passphrase: decrypt(stored.encrypted, stored.iv, stored.authTag, this.vaultOf(stored.id)),
411
442
  passthroughEnv: this.passthroughEnv[stored.id] ?? []
412
443
  };
413
444
  }
@@ -430,7 +461,8 @@ var AgentStore = class {
430
461
  async register(name, url, passphrase, owner = null) {
431
462
  await this.load();
432
463
  const existing = Array.from(this.agents.values()).find((a) => a.url === url);
433
- const { encrypted, iv, authTag } = encrypt(passphrase);
464
+ const vault = existing ? this.vaultOf(existing.id) : owner ?? void 0;
465
+ const { encrypted, iv, authTag } = encrypt(passphrase, vault);
434
466
  if (existing) {
435
467
  existing.name = name;
436
468
  existing.encrypted = encrypted;
@@ -480,7 +512,7 @@ var AgentStore = class {
480
512
  if (fields.name !== void 0) stored.name = fields.name;
481
513
  if (fields.url !== void 0) stored.url = fields.url;
482
514
  if (fields.passphrase !== void 0) {
483
- const { encrypted, iv, authTag } = encrypt(fields.passphrase);
515
+ const { encrypted, iv, authTag } = encrypt(fields.passphrase, this.vaultOf(id));
484
516
  stored.encrypted = encrypted;
485
517
  stored.iv = iv;
486
518
  stored.authTag = authTag;
@@ -642,8 +674,8 @@ function decryptValueWith(key, encrypted) {
642
674
  dec += decipher.final("utf-8");
643
675
  return dec;
644
676
  }
645
- function encryptValue(plaintext) {
646
- const maybeKey = getEncryptionKey();
677
+ function encryptValue(plaintext, vault) {
678
+ const maybeKey = getEncryptionKey(vault);
647
679
  if (!maybeKey) {
648
680
  throw new Error("Encryption key not loaded \u2014 please provide the key via setup UI");
649
681
  }
@@ -655,14 +687,14 @@ function encryptValue(plaintext) {
655
687
  const authTag = cipher.getAuthTag().toString("hex");
656
688
  return `${iv.toString("hex")}:${authTag}:${enc}`;
657
689
  }
658
- function decryptValue(encrypted) {
690
+ function decryptValue(encrypted, vault) {
659
691
  const parts = encrypted.split(":");
660
692
  if (parts.length !== 3) throw new Error("Invalid encrypted value format \u2014 expected iv:authTag:ciphertext");
661
693
  const [ivHex, authTagHex, ciphertext] = parts;
662
694
  if (!/^[0-9a-f]+$/i.test(ivHex) || !/^[0-9a-f]+$/i.test(authTagHex) || ciphertext !== "" && !/^[0-9a-f]+$/i.test(ciphertext)) {
663
695
  throw new Error("Invalid hex in encrypted value \u2014 possible data corruption");
664
696
  }
665
- const maybeKey = getEncryptionKey();
697
+ const maybeKey = getEncryptionKey(vault);
666
698
  if (!maybeKey) {
667
699
  throw new Error("Encryption key not loaded \u2014 please provide the key via setup UI");
668
700
  }
@@ -674,34 +706,34 @@ function decryptValue(encrypted) {
674
706
  dec += decipher.final("utf-8");
675
707
  return dec;
676
708
  }
677
- function stableEncryptValue(plaintext, existingEncrypted) {
709
+ function stableEncryptValue(plaintext, existingEncrypted, vault) {
678
710
  if (existingEncrypted) {
679
711
  try {
680
- if (decryptValue(existingEncrypted) === plaintext) return existingEncrypted;
712
+ if (decryptValue(existingEncrypted, vault) === plaintext) return existingEncrypted;
681
713
  } catch {
682
714
  }
683
715
  }
684
- return encryptValue(plaintext);
716
+ return encryptValue(plaintext, vault);
685
717
  }
686
- function encryptVariableSlots(variables, existingEncrypted) {
718
+ function encryptVariableSlots(variables, existingEncrypted, vault) {
687
719
  const result = {};
688
720
  for (const [key, variable] of Object.entries(variables)) {
689
721
  const slot = variable.value;
690
722
  if (slot.isSecret && slot.value) {
691
- result[key] = { ...variable, value: { ...slot, value: stableEncryptValue(slot.value, existingEncrypted?.[key]) } };
723
+ result[key] = { ...variable, value: { ...slot, value: stableEncryptValue(slot.value, existingEncrypted?.[key], vault) } };
692
724
  } else {
693
725
  result[key] = { ...variable, value: { ...slot } };
694
726
  }
695
727
  }
696
728
  return result;
697
729
  }
698
- function decryptVariableSlots(variables, contextLabel, onFailure) {
730
+ function decryptVariableSlots(variables, contextLabel, onFailure, vault) {
699
731
  const result = {};
700
732
  for (const [key, variable] of Object.entries(variables)) {
701
733
  const slot = variable.value;
702
734
  if (slot.isSecret && slot.value) {
703
735
  try {
704
- result[key] = { ...variable, value: { ...slot, value: decryptValue(slot.value) } };
736
+ result[key] = { ...variable, value: { ...slot, value: decryptValue(slot.value, vault) } };
705
737
  } catch (err) {
706
738
  console.error(`[crypto-helpers] Failed to decrypt variable "${key}" for ${contextLabel}: ${err.message} \u2014 la valeur chiffr\xE9e est conserv\xE9e telle quelle sur le disque`);
707
739
  onFailure?.(key);
@@ -2010,6 +2042,8 @@ var EnvironmentStore = class {
2010
2042
  * belongs even before its project has been loaded.
2011
2043
  */
2012
2044
  roots = /* @__PURE__ */ new Map();
2045
+ /** L'organisation d'où vient un environnement reçu du cloud — voir `vaultOf`. */
2046
+ remoteOrgs = /* @__PURE__ */ new Map();
2013
2047
  getFilePath(root) {
2014
2048
  return join3(root, FILENAME2);
2015
2049
  }
@@ -2024,6 +2058,17 @@ var EnvironmentStore = class {
2024
2058
  * environment whose project is unknown belongs to the launch directory, which
2025
2059
  * is where it lived before vaults existed.
2026
2060
  */
2061
+ /**
2062
+ * La clé sous laquelle chiffrer cet environnement.
2063
+ *
2064
+ * La provenance l'emporte sur le coffre tant que le projet n'est pas local :
2065
+ * un environnement reçu du cloud arrive avant lui, et `rootFor` désignerait
2066
+ * alors le répertoire de lancement — donc la clé de la machine plutôt que
2067
+ * celle de l'organisation qui a chiffré ces secrets.
2068
+ */
2069
+ vaultOf(environment) {
2070
+ return this.remoteOrgs.get(environment.id) ?? vaultIdOfRoot(this.rootFor(environment));
2071
+ }
2027
2072
  rootFor(environment) {
2028
2073
  const known = this.roots.get(environment.id) ?? null;
2029
2074
  const projectRoot = environment.projectId ? rootOfProjectAmong(environment.projectId, known) : null;
@@ -2060,13 +2105,22 @@ var EnvironmentStore = class {
2060
2105
  );
2061
2106
  return { envSlots };
2062
2107
  }
2063
- encryptEnvironment(environment) {
2108
+ /**
2109
+ * `vault` est fourni quand l'appelant sait à qui appartient l'environnement
2110
+ * mieux que le disque : à l'arrivée d'une entité distante, son projet n'est
2111
+ * pas encore local, et le coffre déduit serait celui du répertoire de
2112
+ * lancement — donc la mauvaise clé.
2113
+ */
2114
+ encryptEnvironment(environment, vault) {
2064
2115
  const cache = this.diskEncryptedSlots.get(environment.id);
2065
2116
  let encryptedVars = environment.variables;
2066
2117
  if (environment.variables && Object.keys(environment.variables).length > 0) {
2067
2118
  encryptedVars = encryptVariableSlots(
2068
2119
  environment.variables,
2069
- cache?.envSlots
2120
+ cache?.envSlots,
2121
+ // La clé est celle du coffre où l'environnement sera écrit : les
2122
+ // secrets d'une organisation sont chiffrés par la sienne.
2123
+ vault ?? this.vaultOf(environment)
2070
2124
  );
2071
2125
  }
2072
2126
  return { ...environment, variables: this.keepUnreadableSecrets(environment.id, encryptedVars) };
@@ -2100,14 +2154,15 @@ var EnvironmentStore = class {
2100
2154
  }
2101
2155
  return result;
2102
2156
  }
2103
- decryptEnvironment(environment) {
2157
+ decryptEnvironment(environment, vault) {
2104
2158
  let decryptedVars = environment.variables;
2105
2159
  if (environment.variables && Object.keys(environment.variables).length > 0) {
2106
2160
  const failed = /* @__PURE__ */ new Set();
2107
2161
  decryptedVars = decryptVariableSlots(
2108
2162
  environment.variables,
2109
2163
  `environment ${environment.id}`,
2110
- (variableId) => failed.add(variableId)
2164
+ (variableId) => failed.add(variableId),
2165
+ vault ?? this.vaultOf(environment)
2111
2166
  );
2112
2167
  if (failed.size > 0) this.unreadableSecrets.set(environment.id, failed);
2113
2168
  else this.unreadableSecrets.delete(environment.id);
@@ -2220,6 +2275,7 @@ var EnvironmentStore = class {
2220
2275
  this.diskEncryptedSlots.delete(id);
2221
2276
  this.unreadableSecrets.delete(id);
2222
2277
  this.roots.delete(id);
2278
+ this.remoteOrgs.delete(id);
2223
2279
  }
2224
2280
  this.notify();
2225
2281
  }
@@ -2432,8 +2488,9 @@ var EnvironmentStore = class {
2432
2488
  * Validated rather than trusted, and diff-guarded against the on-disk form so
2433
2489
  * re-applying an identical environment neither saves nor notifies (loop-safe).
2434
2490
  */
2435
- async applyRemoteUpsert(id, fields) {
2491
+ async applyRemoteUpsert(id, fields, vault) {
2436
2492
  await this.load();
2493
+ if (vault) this.remoteOrgs.set(id, vault);
2437
2494
  const parsed = EnvironmentSchema.safeParse({ ...fields, id });
2438
2495
  if (!parsed.success) {
2439
2496
  console.error("[environment-store] Rejected remote environment %s:", id, parsed.error.message);
@@ -2441,11 +2498,11 @@ var EnvironmentStore = class {
2441
2498
  }
2442
2499
  const incoming = parsed.data;
2443
2500
  const existing = this.environments.get(id);
2444
- if (existing && JSON.stringify(this.encryptEnvironment(existing)) === JSON.stringify(incoming)) {
2501
+ if (existing && JSON.stringify(this.encryptEnvironment(existing, vault)) === JSON.stringify(incoming)) {
2445
2502
  return { created: false };
2446
2503
  }
2447
2504
  this.diskEncryptedSlots.set(id, this.extractEncryptedCache(incoming));
2448
- this.environments.set(id, this.decryptEnvironment(incoming));
2505
+ this.environments.set(id, this.decryptEnvironment(incoming, vault));
2449
2506
  await this.save();
2450
2507
  return { created: !existing };
2451
2508
  }
@@ -2456,6 +2513,7 @@ var EnvironmentStore = class {
2456
2513
  this.environments.delete(id);
2457
2514
  this.diskEncryptedSlots.delete(id);
2458
2515
  this.unreadableSecrets.delete(id);
2516
+ this.remoteOrgs.delete(id);
2459
2517
  await this.save();
2460
2518
  return true;
2461
2519
  }
@@ -2464,25 +2522,27 @@ var environmentStore = new EnvironmentStore();
2464
2522
 
2465
2523
  // ../server/src/services/service-store.ts
2466
2524
  var FILENAME3 = "services.json";
2467
- function encryptLogSources(logSources, previous) {
2525
+ function encryptLogSources(logSources, previous, vault) {
2468
2526
  return logSources.map((src, i) => {
2469
2527
  const prev = previous?.[i];
2470
2528
  if (src.type === "mongo") {
2529
+ if (isEncryptedValue(src.connectionString)) return src;
2471
2530
  const was = prev?.type === "mongo" ? prev.connectionString : void 0;
2472
- return { ...src, connectionString: stableEncryptValue(src.connectionString, was) };
2531
+ return { ...src, connectionString: stableEncryptValue(src.connectionString, was, vault) };
2473
2532
  }
2474
2533
  if (src.type === "mysql" && src.password) {
2534
+ if (isEncryptedValue(src.password)) return src;
2475
2535
  const was = prev?.type === "mysql" ? prev.password : void 0;
2476
- return { ...src, password: stableEncryptValue(src.password, was) };
2536
+ return { ...src, password: stableEncryptValue(src.password, was, vault) };
2477
2537
  }
2478
2538
  return src;
2479
2539
  });
2480
2540
  }
2481
- function decryptLogSources(logSources) {
2541
+ function decryptLogSources(logSources, vault) {
2482
2542
  return logSources.map((src) => {
2483
2543
  if (src.type === "mongo" && isEncryptedValue(src.connectionString)) {
2484
2544
  try {
2485
- return { ...src, connectionString: decryptValue(src.connectionString) };
2545
+ return { ...src, connectionString: decryptValue(src.connectionString, vault) };
2486
2546
  } catch {
2487
2547
  console.error("[service-store] Failed to decrypt mongo connectionString");
2488
2548
  return src;
@@ -2490,7 +2550,7 @@ function decryptLogSources(logSources) {
2490
2550
  }
2491
2551
  if (src.type === "mysql" && src.password && isEncryptedValue(src.password)) {
2492
2552
  try {
2493
- return { ...src, password: decryptValue(src.password) };
2553
+ return { ...src, password: decryptValue(src.password, vault) };
2494
2554
  } catch {
2495
2555
  console.error("[service-store] Failed to decrypt mysql password");
2496
2556
  return src;
@@ -2499,14 +2559,14 @@ function decryptLogSources(logSources) {
2499
2559
  return src;
2500
2560
  });
2501
2561
  }
2502
- function prepareForDisk(service, previous) {
2562
+ function prepareForDisk(service, previous, vault) {
2503
2563
  return {
2504
2564
  ...service,
2505
2565
  env: {},
2506
2566
  envSecrets: [],
2507
2567
  resolvedLogParsers: void 0,
2508
2568
  resolvedCwd: void 0,
2509
- logSources: encryptLogSources(service.logSources ?? [], previous?.logSources)
2569
+ logSources: encryptLogSources(service.logSources ?? [], previous?.logSources, vault)
2510
2570
  };
2511
2571
  }
2512
2572
  var ServiceStore = class {
@@ -2527,6 +2587,16 @@ var ServiceStore = class {
2527
2587
  }
2528
2588
  /** Which vault each service was read from, used until its project is known. */
2529
2589
  roots = /* @__PURE__ */ new Map();
2590
+ /**
2591
+ * L'organisation d'où vient un service reçu du cloud.
2592
+ *
2593
+ * Le coffre ne peut pas encore répondre : les contenus arrivent avant leur
2594
+ * projet, donc `rootFor` désignerait le répertoire de lancement et
2595
+ * chiffrerait les secrets de l'organisation avec la clé de la machine. Cette
2596
+ * provenance tient le temps que le projet devienne local — après quoi elle
2597
+ * dit la même chose que le coffre.
2598
+ */
2599
+ remoteOrgs = /* @__PURE__ */ new Map();
2530
2600
  getFilePath(root) {
2531
2601
  return join4(root, FILENAME3);
2532
2602
  }
@@ -2537,6 +2607,10 @@ var ServiceStore = class {
2537
2607
  * so the registry answers, falling back to where the service was read and
2538
2608
  * finally to the local vault.
2539
2609
  */
2610
+ /** La clé sous laquelle chiffrer ce service : son organisation, ou son coffre. */
2611
+ vaultOf(serviceId) {
2612
+ return this.remoteOrgs.get(serviceId) ?? vaultIdOfRoot(this.rootFor(serviceId));
2613
+ }
2540
2614
  rootFor(serviceId) {
2541
2615
  return rootOfService(serviceId, this.roots.get(serviceId) ?? null) ?? localVaultRoot();
2542
2616
  }
@@ -2569,7 +2643,7 @@ var ServiceStore = class {
2569
2643
  this.diskForm.set(s.id, s);
2570
2644
  this.services.set(s.id, {
2571
2645
  ...s,
2572
- logSources: decryptLogSources(s.logSources ?? [])
2646
+ logSources: decryptLogSources(s.logSources ?? [], vaultIdOfRoot(root))
2573
2647
  });
2574
2648
  this.roots.set(s.id, root);
2575
2649
  }
@@ -2592,7 +2666,7 @@ var ServiceStore = class {
2592
2666
  byRoot.set(localVaultRoot(), byRoot.get(localVaultRoot()) ?? []);
2593
2667
  for (const service of this.services.values()) {
2594
2668
  const root = this.rootFor(service.id);
2595
- const prepared = prepareForDisk(service, this.diskForm.get(service.id));
2669
+ const prepared = prepareForDisk(service, this.diskForm.get(service.id), this.vaultOf(service.id));
2596
2670
  this.diskForm.set(prepared.id, prepared);
2597
2671
  this.roots.set(service.id, root);
2598
2672
  if (isVaultConflicted(root)) continue;
@@ -2627,6 +2701,7 @@ var ServiceStore = class {
2627
2701
  this.services.delete(id);
2628
2702
  this.diskForm.delete(id);
2629
2703
  this.roots.delete(id);
2704
+ this.remoteOrgs.delete(id);
2630
2705
  }
2631
2706
  this.notify();
2632
2707
  }
@@ -2675,7 +2750,7 @@ var ServiceStore = class {
2675
2750
  async getSanitized(id) {
2676
2751
  await this.load();
2677
2752
  const service = this.services.get(id);
2678
- return service ? prepareForDisk(service, this.diskForm.get(id)) : null;
2753
+ return service ? prepareForDisk(service, this.diskForm.get(id), this.vaultOf(id)) : null;
2679
2754
  }
2680
2755
  async create(input) {
2681
2756
  await this.load();
@@ -2763,7 +2838,7 @@ var ServiceStore = class {
2763
2838
  const out = [];
2764
2839
  for (const id of ids) {
2765
2840
  const service = this.services.get(id);
2766
- if (service) out.push(prepareForDisk(service, this.diskForm.get(id)));
2841
+ if (service) out.push(prepareForDisk(service, this.diskForm.get(id), this.vaultOf(id)));
2767
2842
  }
2768
2843
  return out;
2769
2844
  }
@@ -2775,8 +2850,9 @@ var ServiceStore = class {
2775
2850
  * `services.json`. Diff-guarded against the on-disk form so re-applying an
2776
2851
  * identical service neither saves nor notifies (loop-safe).
2777
2852
  */
2778
- async applyRemoteUpsert(id, fields) {
2853
+ async applyRemoteUpsert(id, fields, vault) {
2779
2854
  await this.load();
2855
+ if (vault) this.remoteOrgs.set(id, vault);
2780
2856
  const parsed = ServiceConfigSchema.safeParse({ ...fields, id });
2781
2857
  if (!parsed.success) {
2782
2858
  console.error("[service-store] Rejected remote service %s:", id, parsed.error.message);
@@ -2785,7 +2861,7 @@ var ServiceStore = class {
2785
2861
  const incoming = parsed.data;
2786
2862
  const existing = this.services.get(id);
2787
2863
  if (existing) {
2788
- const currentDisk = prepareForDisk(existing, this.diskForm.get(id));
2864
+ const currentDisk = prepareForDisk(existing, this.diskForm.get(id), vault ?? this.vaultOf(id));
2789
2865
  if (JSON.stringify(currentDisk) === JSON.stringify(incoming)) return { created: false };
2790
2866
  }
2791
2867
  this.diskForm.set(id, incoming);
@@ -2793,7 +2869,7 @@ var ServiceStore = class {
2793
2869
  ...incoming,
2794
2870
  // The doc carries the on-disk form, where credentials are ciphertext;
2795
2871
  // in memory they are expected in the clear, as `load()` keeps them.
2796
- logSources: decryptLogSources(incoming.logSources ?? [])
2872
+ logSources: decryptLogSources(incoming.logSources ?? [], vault ?? this.vaultOf(id))
2797
2873
  });
2798
2874
  await this.save();
2799
2875
  this.notify();
@@ -3810,12 +3886,15 @@ export {
3810
3886
  clearEncryptionKey,
3811
3887
  hasEncryptionKey,
3812
3888
  getEncryptionKey,
3889
+ markVaultLocked,
3890
+ clearVaultLock,
3813
3891
  ensureEncryptionKey,
3814
3892
  setEncryptionKey,
3815
3893
  machineRoot,
3816
3894
  localVaultRoot,
3817
3895
  orgVaultRoot,
3818
3896
  projectVaultRoot,
3897
+ vaultIdOfRoot,
3819
3898
  vaultFor,
3820
3899
  stampOrgCloud,
3821
3900
  readOrgClouds,
@@ -3877,6 +3956,8 @@ export {
3877
3956
  setProjectVault,
3878
3957
  forgetProject,
3879
3958
  setProjectServices,
3959
+ rootOfProjectRef,
3960
+ refsOfProjectId,
3880
3961
  rootOfProjectAmong,
3881
3962
  refOfProjectAmong,
3882
3963
  environmentStore,
@@ -3886,4 +3967,4 @@ export {
3886
3967
  traefikManager,
3887
3968
  agentManager
3888
3969
  };
3889
- //# sourceMappingURL=chunk-IHUELGIB.js.map
3970
+ //# sourceMappingURL=chunk-EL75GG7O.js.map