@runeya/runeya 2.0.44 → 2.0.46

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