@runeya/runeya 2.0.45 → 2.0.46

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