@runeya/runeya 2.0.119 → 2.0.121

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 (281) hide show
  1. package/agent/index.js +17 -2
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-4HBMLHXU.js +10 -0
  4. package/{chat-PXMMZIAY.js → chat-VL6BIVO5.js} +7 -6
  5. package/{chunk-GIHR3BGT.js → chunk-3N55WR7F.js} +32 -3
  6. package/chunk-3N55WR7F.js.map +1 -0
  7. package/{chunk-2WXQIUVC.js → chunk-CNTL6NVU.js} +50 -44
  8. package/chunk-CNTL6NVU.js.map +1 -0
  9. package/{chunk-22RJM654.js → chunk-HJUFIZ7H.js} +41 -13
  10. package/chunk-HJUFIZ7H.js.map +1 -0
  11. package/{chunk-NYKFDU76.js → chunk-OVV52N5F.js} +91 -17
  12. package/chunk-OVV52N5F.js.map +1 -0
  13. package/{chunk-H6VIS4OY.js → chunk-T2BV5WZE.js} +18 -3
  14. package/chunk-T2BV5WZE.js.map +1 -0
  15. package/chunk-YZU5FNXR.js +43 -0
  16. package/chunk-YZU5FNXR.js.map +1 -0
  17. package/{companion-4RQ3AMOL.js → companion-AUMA6RGX.js} +5 -4
  18. package/{desktop-launcher-ADGRYF4S.js → desktop-launcher-EGGVXXKV.js} +2 -2
  19. package/index.js +4 -4
  20. package/package.json +1 -1
  21. package/settings-manager-ROWQ5GC2.js +10 -0
  22. package/{src-NRKK27F3.js → src-JIS3X4OU.js} +157 -213
  23. package/src-JIS3X4OU.js.map +1 -0
  24. package/web/assets/AgentScalarChatInterface.vue-DrcrJYKe.js +13 -0
  25. package/web/assets/AgentTerminalPage-BonnuSSS.js +1 -0
  26. package/web/assets/AiChatPage-DzTc9-iH.js +1 -0
  27. package/web/assets/AppLayout-DRTTSl7g.js +1 -0
  28. package/web/assets/{AppLayout-kIdcdJ2n.css → AppLayout-vWoE_P8T.css} +1 -1
  29. package/web/assets/AuditPage-CBWGaY0D.js +1 -0
  30. package/web/assets/CloudAccountPage-DTrPLz-p.js +1 -0
  31. package/web/assets/CloudAccountPage-DYOvfMjD.css +1 -0
  32. package/web/assets/CloudAccountPage-DvbOBtHJ.js +1 -0
  33. package/web/assets/CloudMessagingPage-BB-_RdEk.js +2 -0
  34. package/web/assets/DashboardPage-MdYRjTwv.js +164 -0
  35. package/web/assets/DirectoryPickerDialog-DROtNZ9T.js +1 -0
  36. package/web/assets/{EditorIcon-Co787SMb.js → EditorIcon-LCl9V_-a.js} +2 -2
  37. package/web/assets/{EnvironmentForm-B9EQlz9_.js → EnvironmentForm-BUadxutb.js} +2 -2
  38. package/web/assets/EnvironmentFormPage-Do3NwXL5.js +1 -0
  39. package/web/assets/EnvironmentListPage-DiG8nF1p.js +1 -0
  40. package/web/assets/KanbanBoardPage-_QCZ2A2f.js +4 -0
  41. package/web/assets/KanbanListPage-Dl-FpuPX.css +1 -0
  42. package/web/assets/KanbanListPage-nyfKMn50.js +1 -0
  43. package/web/assets/LaunchProjectPage-VHAUZ-cq.js +1 -0
  44. package/web/assets/LaunchServicesPage-CRv2zJxH.js +1 -0
  45. package/web/assets/LogViewer-DcoQF_33.js +3 -0
  46. package/web/assets/OrgKeyPrompt-X9hHtpi9.js +1 -0
  47. package/web/assets/{ProcessControls-Bl71hMFi.js → ProcessControls-PKQWukd7.js} +1 -1
  48. package/web/assets/ProcessDetailPage-DhFoi4DT.js +1 -0
  49. package/web/assets/{ProcessMetrics-eRNYH_T3.js → ProcessMetrics-CMewzyxA.js} +2 -2
  50. package/web/assets/RandomJobTestPage-CErdKP1K.js +2 -0
  51. package/web/assets/ScenarioEditorPage-CpRlfU3g.js +14 -0
  52. package/web/assets/SendToChatDialog-DIp62wvw.js +1 -0
  53. package/web/assets/ServiceControlsBar-Bk4M-tKR.js +1 -0
  54. package/web/assets/ServiceDetailPage-BxAZTqFu.js +2 -0
  55. package/web/assets/ServiceFormPage-Dr_e9QMM.js +1 -0
  56. package/web/assets/SettingsPage-Dx1eYZKP.js +2063 -0
  57. package/web/assets/UnlockPage-CgynzFN3.js +1 -0
  58. package/web/assets/UnlockPage-DU3hoV78.css +1 -0
  59. package/web/assets/VaultMigrationPage-Cw--n60U.js +1 -0
  60. package/web/assets/VersionBadge-Ct-qYNDF.js +1 -0
  61. package/web/assets/WikiPage-D7N7nA2O.js +1 -0
  62. package/web/assets/WikiView-Izg2SvGt.js +1 -0
  63. package/web/assets/add-scalar-classes-BP_OZa5m.js +387 -0
  64. package/web/assets/{autocomplete-CRDXI2af.js → autocomplete-DMfvn4sK.js} +3 -3
  65. package/web/assets/{basic-shape-diamond.svg-DrxPStJk.js → basic-shape-diamond.svg-B5H1r2bp.js} +1 -1
  66. package/web/assets/{basic-shape-hexagon.svg-CvQGeMns.js → basic-shape-hexagon.svg-CYAjKF0z.js} +1 -1
  67. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-fUTtI4Zn.js → basic-shape-primary-circle-ellipse-round.svg-CgleCAf-.js} +1 -1
  68. package/web/assets/{basic-shape-primary-square-rectangle.svg-AxYjsCMg.js → basic-shape-primary-square-rectangle.svg-1Oa48Hhs.js} +1 -1
  69. package/web/assets/{basic-shape-shield.svg-DejoQ-qp.js → basic-shape-shield.svg-F6dZwVUJ.js} +1 -1
  70. package/web/assets/{browser-AcVcyRyj.js → browser-CmPAWcJ7.js} +1 -1
  71. package/web/assets/{browser-CgHmtA33.js → browser-D3KJ0m2n.js} +1 -1
  72. package/web/assets/card-Ciw7uU90.js +32 -0
  73. package/web/assets/{checkbox-BNsS_laY.js → checkbox-BCCx0Nu6.js} +3 -3
  74. package/web/assets/{chip-CLhx1BN5.js → chip-JRh6DXig.js} +2 -2
  75. package/web/assets/client-BIlYBe0s.js +24 -0
  76. package/web/assets/cloud-chat.store-BUYi4kYT.js +1 -0
  77. package/web/assets/cloud-client-CujRC6FF.js +1 -0
  78. package/web/assets/cloud-session-CSIV9Uvx.js +1 -0
  79. package/web/assets/{cloud-session-DVRHDddo.js → cloud-session-CZWto5y3.js} +2 -2
  80. package/web/assets/column-DSBHw97f.js +763 -0
  81. package/web/assets/{computer-device-desktop-monitor.svg-BNF_S7yY.js → computer-device-desktop-monitor.svg-D7wu2cQ4.js} +1 -1
  82. package/web/assets/{computer-device-desktop.svg-Ulf27hxx.js → computer-device-desktop.svg-BtVwjOEG.js} +1 -1
  83. package/web/assets/{computer-device-laptop.svg-I-skOtmX.js → computer-device-laptop.svg-f3tFeUHj.js} +1 -1
  84. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-_uk-aAy4.js → computer-device-mobile-phone-android-samsung-back.svg-CmJcGkrL.js} +1 -1
  85. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-oHv8Jcw4.js → computer-device-mobile-phone-android-samsung.svg-C2ke6Sbg.js} +1 -1
  86. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-nYNHlByZ.js → computer-device-mobile-phone-iphone-x-back.svg-DxMqUXKE.js} +1 -1
  87. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BNV8yMsz.js → computer-device-mobile-phone-iphone-x.svg-DkbKlrh8.js} +1 -1
  88. package/web/assets/{computer-device-mobile-tablet-touch.svg-D6eYCphm.js → computer-device-mobile-tablet-touch.svg-DP0uXMda.js} +1 -1
  89. package/web/assets/{computer-device-mobile-tablet.svg-BrVxasnX.js → computer-device-mobile-tablet.svg-C064ZFQm.js} +1 -1
  90. package/web/assets/{computer-device-network-ethernet-cat6.svg-kBDyvmFe.js → computer-device-network-ethernet-cat6.svg-Dwzl7zBN.js} +1 -1
  91. package/web/assets/{computer-device-network-lan-www.svg-DxCA3g5k.js → computer-device-network-lan-www.svg-BgErom5w.js} +1 -1
  92. package/web/assets/{computer-device-network-wifi-connection.svg-PIA_jdq6.js → computer-device-network-wifi-connection.svg-ByqNsV6y.js} +1 -1
  93. package/web/assets/{computer-device-network-wifi-router.svg-BmIHCgnZ.js → computer-device-network-wifi-router.svg-AySGITbi.js} +1 -1
  94. package/web/assets/{cssMode-DACHwZVM.js → cssMode-BqrZ4SB-.js} +1 -1
  95. package/web/assets/{divider-CTmL86NV.js → divider-BswZTb8q.js} +2 -2
  96. package/web/assets/{docx-preview-8mHccyHq.js → docx-preview-t_oOha_C.js} +1 -1
  97. package/web/assets/{ecology-science-erlenmeyer-flask.svg-CPPf1sQr.js → ecology-science-erlenmeyer-flask.svg-Keg4ZY0z.js} +1 -1
  98. package/web/assets/{fieldset-BU42Vd0z.js → fieldset-DaWy9FsL.js} +2 -2
  99. package/web/assets/{freemarker2-DqgOX6Fn.js → freemarker2-Br0kiufp.js} +1 -1
  100. package/web/assets/{handlebars-TTBBMGWH.js → handlebars-BrATzKUL.js} +1 -1
  101. package/web/assets/{html-DGf_odQm.js → html-LWTJcTM2.js} +1 -1
  102. package/web/assets/{htmlMode-D-LSVgqS.js → htmlMode-A23pWfMP.js} +1 -1
  103. package/web/assets/{image-flash-lightning.svg-uW6nZ9pC.js → image-flash-lightning.svg-uQfoT6Ex.js} +1 -1
  104. package/web/assets/{image-picture-flower.svg-oWXTRzBB.js → image-picture-flower.svg-XxD1bCHC.js} +1 -1
  105. package/web/assets/{index-BS0htmo7.js → index-e5dmzMc-.js} +362 -362
  106. package/web/assets/{index-qjiWPMcS.css → index-rUoTy8xc.css} +1 -1
  107. package/web/assets/{interface-alert-exclamation-diamond.svg-svwX9rGg.js → interface-alert-exclamation-diamond.svg-gQAlkILu.js} +1 -1
  108. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-1SqtE207.js → interface-alert-exclamation-triangle-warning.svg-Ga2rsl6o.js} +1 -1
  109. package/web/assets/{interface-alert-information-circle.svg-DAQzRiWG.js → interface-alert-information-circle.svg-BS0N2R1M.js} +1 -1
  110. package/web/assets/{interface-award-crown.svg-BLlwNnLN.js → interface-award-crown.svg-CtLbK4Gl.js} +1 -1
  111. package/web/assets/{interface-bookmark.svg-B0PZfyfo.js → interface-bookmark-tag.svg-Dfd6eXAX.js} +1 -1
  112. package/web/assets/{interface-bookmark-tag.svg-DKcxOCPe.js → interface-bookmark.svg-Clt6TTov.js} +1 -1
  113. package/web/assets/{interface-calendar-date-one.svg-GFId7gEg.js → interface-calendar-date-one.svg-BmFNLrzR.js} +1 -1
  114. package/web/assets/{interface-content-book-open-pages.svg-C9mxvbj7.js → interface-content-book-open-pages.svg-u8kJbc3N.js} +1 -1
  115. package/web/assets/{interface-content-book-page.svg-DTVIL4CZ.js → interface-content-book-page.svg-Csk8d0R8.js} +1 -1
  116. package/web/assets/{interface-content-file.svg-9Hhcuha8.js → interface-content-file.svg-DIoD1UhJ.js} +1 -1
  117. package/web/assets/interface-content-folder.svg-BPZbNQNK.js +1 -0
  118. package/web/assets/{interface-content-folder.svg-BRjBwjv5.js → interface-content-folder.svg-ipO7hYM2.js} +1 -1
  119. package/web/assets/{interface-copy-clipboard.svg-DHujfKOA.js → interface-copy-clipboard.svg-BaK2fHKS.js} +1 -1
  120. package/web/assets/{interface-edit-attachment.svg-BNtrRzRD.js → interface-edit-attachment.svg-CrpyP6c6.js} +1 -1
  121. package/web/assets/{interface-edit-binocular.svg-C7m9_XJl.js → interface-edit-binocular.svg-Cw-YeqUQ.js} +1 -1
  122. package/web/assets/{interface-edit-magic-wand.svg-MVh7T2FU.js → interface-edit-magic-wand.svg-BPa49t_4.js} +1 -1
  123. package/web/assets/{interface-edit-tool-paint-roller.svg-CG3Q3Sfa.js → interface-edit-tool-paint-roller.svg-Cfag7vxY.js} +1 -1
  124. package/web/assets/{interface-edit-tool-pencil.svg-Cjm_wnC_.js → interface-edit-tool-pencil.svg-BNAmX0d_.js} +1 -1
  125. package/web/assets/{interface-favorite-award.svg-CFCGPZr8.js → interface-favorite-award.svg-CIMvocAv.js} +1 -1
  126. package/web/assets/{interface-favorite-flag.svg-BaANsqND.js → interface-favorite-flag.svg-8C3GXK06.js} +1 -1
  127. package/web/assets/{interface-favorite-heart.svg-B2YfjK1B.js → interface-favorite-heart.svg-CEU_IALn.js} +1 -1
  128. package/web/assets/{interface-favorite-star.svg-DdIZAOnM.js → interface-favorite-star.svg-Bs0RUtgk.js} +1 -1
  129. package/web/assets/{interface-favorite-stars-sparkles.svg-DErOt3d0.js → interface-favorite-stars-sparkles.svg-CZYZ5qkH.js} +1 -1
  130. package/web/assets/{interface-hierarchy-flowchart.svg-CegEwz_L.js → interface-hierarchy-flowchart.svg-DOgEXHV2.js} +1 -1
  131. package/web/assets/{interface-home-house.svg-DEnpyywi.js → interface-home-house.svg-lDERGk8q.js} +1 -1
  132. package/web/assets/{interface-hyperlink.svg-APXQWsOQ.js → interface-hyperlink.svg-CAZrs64U.js} +1 -1
  133. package/web/assets/{interface-lighting-brightness.svg-Bt8UdEVE.js → interface-lighting-brightness.svg-CVANBB7i.js} +1 -1
  134. package/web/assets/{interface-lock-closed.svg-DUhKy22h.js → interface-lock-closed.svg-qDLyceL-.js} +1 -1
  135. package/web/assets/{interface-lock-open-unlock.svg-D80GZ0WK.js → interface-lock-open-unlock.svg-Bc-cq6eU.js} +1 -1
  136. package/web/assets/{interface-login-key.svg-BUZuQC4z.js → interface-login-key.svg-D6wZBYEi.js} +1 -1
  137. package/web/assets/{interface-search.svg-C1SGbWh4.js → interface-search.svg-BVM6kkvA.js} +1 -1
  138. package/web/assets/{interface-setting-cog.svg-BhT06xOL.js → interface-setting-cog.svg-uJYqlmKx.js} +1 -1
  139. package/web/assets/{interface-share-megaphone-bullhorn.svg-DNA0-4pd.js → interface-share-megaphone-bullhorn.svg-CgBVBu7Z.js} +1 -1
  140. package/web/assets/{interface-share-rocket.svg-DyZYsdtW.js → interface-share-rocket.svg-C1iCXMlX.js} +1 -1
  141. package/web/assets/{interface-share-satellite.svg-BnHfHXGT.js → interface-share-satellite.svg-uH-Cvq9d.js} +1 -1
  142. package/web/assets/{interface-share-space-ship.svg-q8JaUlaM.js → interface-share-space-ship.svg-81lauyV5.js} +1 -1
  143. package/web/assets/{interface-share.svg-dfMV_q01.js → interface-share.svg-DO85t-F0.js} +1 -1
  144. package/web/assets/{interface-signal-square.svg-BZAXvGUW.js → interface-signal-square.svg-CFAni6lY.js} +1 -1
  145. package/web/assets/{interface-time-clock-circle.svg-fmTRjz7L.js → interface-time-clock-circle.svg-BUQfluh7.js} +1 -1
  146. package/web/assets/{interface-time-hour-glass.svg--hxc1m2W.js → interface-time-hour-glass.svg-BAZDU-C5.js} +1 -1
  147. package/web/assets/{interface-users-multiple.svg-CnachJBj.js → interface-users-multiple.svg-Bj0AvF2-.js} +1 -1
  148. package/web/assets/{interface-weather-moon.svg-AoEOz9T0.js → interface-weather-moon.svg-Cxz-5thD.js} +1 -1
  149. package/web/assets/{javascript-DYRKHLYc.js → javascript-CuP68vN5.js} +1 -1
  150. package/web/assets/{jsonMode-CpdzwU9F.js → jsonMode-CdGjze9r.js} +1 -1
  151. package/web/assets/{liquid-D9vCKfST.js → liquid-fJJZPdJb.js} +1 -1
  152. package/web/assets/{lspLanguageFeatures-BCeM67u6.js → lspLanguageFeatures-YzzH9q9a.js} +3 -3
  153. package/web/assets/{mail-chat-bubble-square.svg-CcgRWmuD.js → mail-chat-bubble-square.svg-DY1-sN8v.js} +1 -1
  154. package/web/assets/{mail-send-email-paper-airplane.svg-C053lctJ.js → mail-send-email-paper-airplane.svg-6zVEUG2-.js} +1 -1
  155. package/web/assets/{mail-send-envelope.svg-Dij10Q_i.js → mail-send-envelope.svg-DNpA7Auy.js} +1 -1
  156. package/web/assets/{mdx-DLUKh9ow.js → mdx-CphM-wvX.js} +1 -1
  157. package/web/assets/{minus-DZytaOJc.js → minus-DD84SZSh.js} +2 -2
  158. package/web/assets/modal-CKGM8Wb3.js +5 -0
  159. package/web/assets/modal-Dd5rzDUd.js +1 -0
  160. package/web/assets/{money-cashier-receipt.svg-CZ4os1uZ.js → money-cashier-receipt.svg-ChxLUMT0.js} +1 -1
  161. package/web/assets/{money-currency-dollar-pay.svg-Denbm12e.js → money-currency-dollar-pay.svg-CcPdfv1E.js} +1 -1
  162. package/web/assets/{money-graph-arrow-increase.svg-CGE6Sbr2.js → money-graph-arrow-increase.svg-BsmXO8yM.js} +1 -1
  163. package/web/assets/{money-graph-bar-chart-increase.svg-Smi2NzVH.js → money-graph-bar-chart-increase.svg-QVk3zD8i.js} +1 -1
  164. package/web/assets/multiselect-3cR58mLz.js +251 -0
  165. package/web/assets/{nature-ecology-leaf.svg-DUos6Bhh.js → nature-ecology-leaf.svg-nzup63P6.js} +1 -1
  166. package/web/assets/{password-CBJ4yfim.js → password-CCYLOu-C.js} +4 -4
  167. package/web/assets/{phone-telephone.svg-DqjTWhHK.js → phone-telephone.svg-BLtgdZw-.js} +1 -1
  168. package/web/assets/{plus-CdM2ZQyx.js → plus-jk73RdzY.js} +5 -5
  169. package/web/assets/process.store-jsfEBwiA.js +1 -0
  170. package/web/assets/{programming-bug.svg-zpx99bTR.js → programming-bug.svg-BCN6lOn1.js} +1 -1
  171. package/web/assets/{programming-cloud.svg-Dw198CLB.js → programming-cloud.svg-DHNBRNkQ.js} +1 -1
  172. package/web/assets/{programming-computer-database-server.svg-BaanLqUL.js → programming-computer-database-server.svg-C4DheEbm.js} +1 -1
  173. package/web/assets/{programming-computer-database.svg-y5Qcgysz.js → programming-computer-database.svg-cD2w2ZZ6.js} +1 -1
  174. package/web/assets/{programming-module-four-layout.svg-DQ8HcjMz.js → programming-module-four-layout.svg-D6_P2rTG.js} +1 -1
  175. package/web/assets/{programming-module-three.svg-CbgPevqj.js → programming-module-three.svg-Dc076Z_f.js} +1 -1
  176. package/web/assets/{programming-module.svg-deAnzVVR.js → programming-module.svg-D0c9akII.js} +1 -1
  177. package/web/assets/{programming-script-code.svg-D2Qn3_1w.js → programming-script-code.svg-BrT3KZQe.js} +1 -1
  178. package/web/assets/project-launch.store-Bp7vasUu.js +1 -0
  179. package/web/assets/project.store-DuZriz9o.js +1 -0
  180. package/web/assets/{python-UJjSlB62.js → python-DMw-TRDY.js} +1 -1
  181. package/web/assets/{radiobutton-D8PPlyvM.js → radiobutton-CnoEo0qc.js} +2 -2
  182. package/web/assets/{razor-CA1xRhq3.js → razor-BTS4Lk96.js} +1 -1
  183. package/web/assets/router-BU2tqcBm.js +1 -0
  184. package/web/assets/settings-scope-Bg_X1n_Y.js +1 -0
  185. package/web/assets/{settings.store-C3_pPTwT.js → settings.store-DeGpnclr.js} +1 -1
  186. package/web/assets/{shopping-cart.svg-BKmjHX4l.js → shopping-cart.svg-pvFNKXP_.js} +1 -1
  187. package/web/assets/{shopping-gift-present.svg-HKKyiGmo.js → shopping-gift-present.svg-PYJ4_vdS.js} +1 -1
  188. package/web/assets/{shopping-shipping-box-parcel-package.svg-kTMFl43_.js → shopping-shipping-box-parcel-package.svg-KMRd9Rmg.js} +1 -1
  189. package/web/assets/src-BsadAol0.js +572 -0
  190. package/web/assets/src-DU1mBjF-.css +1 -0
  191. package/web/assets/src-NXursDRf.js +1 -0
  192. package/web/assets/{tabpanel-BCGYata1.js → tabpanel-CKudNnqo.js} +3 -3
  193. package/web/assets/{tag-new-circle.svg-D9B5tiv9.js → tag-new-circle.svg-Bf83DYRq.js} +1 -1
  194. package/web/assets/theme-D6M00FyZ.js +1 -0
  195. package/web/assets/{toggleswitch-TdY2vwYU.js → toggleswitch-Cv0supU2.js} +2 -2
  196. package/web/assets/{travel-map-earth-globe.svg-D4jsI9PN.js → travel-map-earth-globe.svg-WxnFDzEH.js} +1 -1
  197. package/web/assets/trpc-mWVODCs2.js +1 -0
  198. package/web/assets/{tsMode-D7Nw-uk2.js → tsMode-CfruLmor.js} +5 -5
  199. package/web/assets/{typescript-CO_htKpJ.js → typescript-BvsjNfHT.js} +1 -1
  200. package/web/assets/useAiChatDrawer-vNey6IKe.js +1 -0
  201. package/web/assets/useCloudOrg-B0o8vN4e.js +1 -0
  202. package/web/assets/useEnvVarAutocomplete-DJMTIim7.js +1 -0
  203. package/web/assets/useProjectCatalog-B6GXBDDA.js +1 -0
  204. package/web/assets/{useProjectCloudOrg-B13niYUp.js → useProjectCloudOrg-BwLsTiz0.js} +1 -1
  205. package/web/assets/useServiceUrlHost-CE4Qoy-J.js +1 -0
  206. package/web/assets/{xml-JzyfGwW6.js → xml-BTID20Kj.js} +1 -1
  207. package/web/assets/{yaml-C9s-8a68.js → yaml-BtOf_8je.js} +1 -1
  208. package/web/index.html +2 -2
  209. package/agent-manager-ACPQWUZ5.js +0 -9
  210. package/chunk-22RJM654.js.map +0 -1
  211. package/chunk-2WXQIUVC.js.map +0 -1
  212. package/chunk-GIHR3BGT.js.map +0 -1
  213. package/chunk-H6VIS4OY.js.map +0 -1
  214. package/chunk-NYKFDU76.js.map +0 -1
  215. package/settings-manager-2C7RY6ZC.js +0 -9
  216. package/src-NRKK27F3.js.map +0 -1
  217. package/web/assets/AgentScalarChatInterface.vue-DeDCprCi.js +0 -13
  218. package/web/assets/AgentTerminalPage-CVM-_xua.js +0 -1
  219. package/web/assets/AiChatPage-C0XGalM7.js +0 -1
  220. package/web/assets/AppLayout-DWE2gGEG.js +0 -1
  221. package/web/assets/AuditPage-CtEaUBZG.js +0 -1
  222. package/web/assets/CloudAccountPage-CfMY69pk.css +0 -1
  223. package/web/assets/CloudAccountPage-FtuRCNIq.js +0 -1
  224. package/web/assets/CloudAccountPage-snaQ5_Jz.js +0 -1
  225. package/web/assets/CloudMessagingPage-BhU4VarW.js +0 -2
  226. package/web/assets/DashboardPage-DMek59Ua.js +0 -164
  227. package/web/assets/DirectoryPickerDialog-DzhKixt4.js +0 -1
  228. package/web/assets/EnvironmentFormPage-_iZpn0PZ.js +0 -1
  229. package/web/assets/EnvironmentListPage-lviQTpL1.js +0 -1
  230. package/web/assets/KanbanBoardPage-jJKcNxVt.js +0 -4
  231. package/web/assets/KanbanListPage-C5rbZ1eL.css +0 -1
  232. package/web/assets/KanbanListPage-CjDSP-NZ.js +0 -1
  233. package/web/assets/LaunchProjectPage-CCg2nziO.js +0 -1
  234. package/web/assets/LaunchServicesPage-EhKBO0tS.js +0 -1
  235. package/web/assets/LogViewer-BOcmkQJk.js +0 -3
  236. package/web/assets/OrgKeyPrompt-FXuwB-qF.js +0 -1
  237. package/web/assets/ProcessDetailPage-BepAK0mH.js +0 -1
  238. package/web/assets/RandomJobTestPage-BzhLqqcX.js +0 -2
  239. package/web/assets/ScenarioEditorPage-RAo2HXny.js +0 -14
  240. package/web/assets/SendToChatDialog-YAcjNz8G.js +0 -1
  241. package/web/assets/ServiceControlsBar-C4CLmYs1.js +0 -1
  242. package/web/assets/ServiceDetailPage-NrtsPPS2.js +0 -2
  243. package/web/assets/ServiceFormPage-DpzK--N_.js +0 -1
  244. package/web/assets/SettingsPage-Cov2c6gi.js +0 -2063
  245. package/web/assets/UnlockPage-CZ4UXjxV.js +0 -1
  246. package/web/assets/UnlockPage-CpysPhlT.css +0 -1
  247. package/web/assets/VaultMigrationPage-D7YkLOgt.js +0 -1
  248. package/web/assets/VersionBadge-DfU2xGOy.js +0 -1
  249. package/web/assets/WikiPage-AuxO0ZRo.js +0 -1
  250. package/web/assets/WikiView-YO32SMjf.js +0 -1
  251. package/web/assets/add-scalar-classes-BSy1Q2x9.js +0 -387
  252. package/web/assets/card-DYXJ9e_6.js +0 -32
  253. package/web/assets/client-DWF3UIg2.js +0 -24
  254. package/web/assets/cloud-chat.store-BrkQ6sdy.js +0 -1
  255. package/web/assets/cloud-client-BVamD4zV.js +0 -1
  256. package/web/assets/cloud-session-BsAfbgkv.js +0 -1
  257. package/web/assets/column-CVMI7gfk.js +0 -763
  258. package/web/assets/interface-content-folder.svg-fC-vaV4V.js +0 -1
  259. package/web/assets/modal-DYL3DOz1.js +0 -1
  260. package/web/assets/modal-idM6wRD1.js +0 -5
  261. package/web/assets/multiselect-D8chjo1K.js +0 -251
  262. package/web/assets/process.store-BxdP--c-.js +0 -1
  263. package/web/assets/project-launch.store-Cjco1dyN.js +0 -1
  264. package/web/assets/project.store-pEhSKAS1.js +0 -1
  265. package/web/assets/router-B7qnUbTf.js +0 -1
  266. package/web/assets/settings-scope-QgZMDCpD.js +0 -1
  267. package/web/assets/src-CkWablLs.js +0 -1
  268. package/web/assets/src-D2BeOnZr.css +0 -1
  269. package/web/assets/src-DfWVY3Sc.js +0 -572
  270. package/web/assets/theme-Lxx3iG7K.js +0 -1
  271. package/web/assets/trpc-D86IoEhq.js +0 -1
  272. package/web/assets/useAiChatDrawer-B6JN2q-b.js +0 -1
  273. package/web/assets/useCloudOrg-wQX-0p6v.js +0 -1
  274. package/web/assets/useEnvVarAutocomplete-DfdXSaqd.js +0 -1
  275. package/web/assets/useProjectCatalog-kHRSO0K2.js +0 -1
  276. package/web/assets/useServiceUrlHost-DtUQvKz3.js +0 -1
  277. /package/{agent-manager-ACPQWUZ5.js.map → agent-manager-4HBMLHXU.js.map} +0 -0
  278. /package/{chat-PXMMZIAY.js.map → chat-VL6BIVO5.js.map} +0 -0
  279. /package/{companion-4RQ3AMOL.js.map → companion-AUMA6RGX.js.map} +0 -0
  280. /package/{desktop-launcher-ADGRYF4S.js.map → desktop-launcher-EGGVXXKV.js.map} +0 -0
  281. /package/{settings-manager-2C7RY6ZC.js.map → settings-manager-ROWQ5GC2.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ import {
2
+ agentManager
3
+ } from "./chunk-CNTL6NVU.js";
4
+ import "./chunk-YZU5FNXR.js";
5
+ import "./chunk-T2BV5WZE.js";
6
+ import "./chunk-ZFELQG4B.js";
7
+ export {
8
+ agentManager
9
+ };
10
+ //# sourceMappingURL=agent-manager-4HBMLHXU.js.map
@@ -3,13 +3,14 @@ import {
3
3
  startClaudeCodeSession,
4
4
  startCliSession,
5
5
  startCodexSession
6
- } from "./chunk-22RJM654.js";
6
+ } from "./chunk-HJUFIZ7H.js";
7
7
  import "./chunk-B7MABGQN.js";
8
- import "./chunk-NYKFDU76.js";
8
+ import "./chunk-OVV52N5F.js";
9
9
  import "./chunk-MD3VW4HQ.js";
10
- import "./chunk-2WXQIUVC.js";
11
- import "./chunk-GIHR3BGT.js";
12
- import "./chunk-H6VIS4OY.js";
10
+ import "./chunk-CNTL6NVU.js";
11
+ import "./chunk-3N55WR7F.js";
12
+ import "./chunk-YZU5FNXR.js";
13
+ import "./chunk-T2BV5WZE.js";
13
14
  import "./chunk-ZFELQG4B.js";
14
15
  export {
15
16
  chatRouter,
@@ -17,4 +18,4 @@ export {
17
18
  startCliSession,
18
19
  startCodexSession
19
20
  };
20
- //# sourceMappingURL=chat-PXMMZIAY.js.map
21
+ //# sourceMappingURL=chat-VL6BIVO5.js.map
@@ -1,8 +1,13 @@
1
+ import {
2
+ hasChangedSinceRead,
3
+ rememberFile,
4
+ wasRead
5
+ } from "./chunk-YZU5FNXR.js";
1
6
  import {
2
7
  SchemaVersionSchema,
3
8
  SettingsPrivateSchema,
4
9
  SettingsSchema
5
- } from "./chunk-H6VIS4OY.js";
10
+ } from "./chunk-T2BV5WZE.js";
6
11
  import {
7
12
  env,
8
13
  legacyMachineFilePath,
@@ -44,6 +49,25 @@ var SettingsManager = class {
44
49
  await writeFile(tmpPath, JSON.stringify(data, null, 2), "utf-8");
45
50
  await rename(tmpPath, filePath);
46
51
  await chmod(filePath, 384);
52
+ await rememberFile(filePath);
53
+ }
54
+ /**
55
+ * Le cache de ce coffre fait-il encore foi ?
56
+ *
57
+ * Plusieurs Runeya partagent la racine machine — l'application installée et
58
+ * celle qu'on développe, couramment — et écrivent donc le même fichier. Un
59
+ * cache peuplé une fois et jamais revu rend l'état du démarrage pour
60
+ * toujours, et la sauvegarde suivante le réinstalle sur le disque : ce que
61
+ * l'autre instance avait écrit entre-temps disparaît. Les réglages sont
62
+ * l'endroit où cela coûte le plus cher, parce qu'un coffre n'a qu'un fichier
63
+ * pour toute l'organisation — un projet, lui, a le sien.
64
+ *
65
+ * Un fichier jamais lu n'est pas périmé : c'est un coffre neuf, dont les
66
+ * défauts viennent d'être écrits.
67
+ */
68
+ async isStale(filename, vault) {
69
+ const path = join(this.rootOf(vault), filename);
70
+ return wasRead(path) && await hasChangedSinceRead(path);
47
71
  }
48
72
  /**
49
73
  * Lire le fichier de CE coffre, et rien d'autre.
@@ -55,8 +79,11 @@ var SettingsManager = class {
55
79
  * `migrateSettingsIntoVaults`, pas relu indéfiniment.
56
80
  */
57
81
  async readJson(filename, vault) {
82
+ const path = join(this.rootOf(vault), filename);
58
83
  try {
59
- return JSON.parse(await readFile(join(this.rootOf(vault), filename), "utf-8"));
84
+ const parsed = JSON.parse(await readFile(path, "utf-8"));
85
+ await rememberFile(path);
86
+ return parsed;
60
87
  } catch {
61
88
  return null;
62
89
  }
@@ -79,6 +106,7 @@ var SettingsManager = class {
79
106
  async getSettings(vault) {
80
107
  const key = this.cacheKey(vault);
81
108
  let current = this.settings.get(key);
109
+ if (current && await this.isStale(SETTINGS_FILE, vault)) current = void 0;
82
110
  if (!current) {
83
111
  const raw = await this.readJson(SETTINGS_FILE, vault);
84
112
  const parsed = raw ? SettingsSchema.safeParse(raw) : null;
@@ -99,6 +127,7 @@ var SettingsManager = class {
99
127
  async getPrivateSettings(vault) {
100
128
  const key = this.cacheKey(vault);
101
129
  let current = this.settingsPrivate.get(key);
130
+ if (current && await this.isStale(SETTINGS_PRIVATE_FILE, vault)) current = void 0;
102
131
  if (!current) {
103
132
  const raw = await this.readJson(SETTINGS_PRIVATE_FILE, vault);
104
133
  const parsed = raw ? SettingsPrivateSchema.safeParse(raw) : null;
@@ -151,4 +180,4 @@ var settingsManager = new SettingsManager();
151
180
  export {
152
181
  settingsManager
153
182
  };
154
- //# sourceMappingURL=chunk-GIHR3BGT.js.map
183
+ //# sourceMappingURL=chunk-3N55WR7F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../server/src/services/settings-manager.ts"],"sourcesContent":["import { readFile, writeFile, rename, mkdir, chmod } from 'node:fs/promises';\nimport { env } from '../config/env.js';\nimport { join } from 'node:path';\nimport { machineFilePath, legacyMachineFilePath, machineRoot, orgVaultRoot } from './vault-resolver.js';\nimport { SettingsSchema, SchemaVersionSchema, SettingsPrivateSchema } from '@runeya/packages-shared';\nimport type { Settings, SchemaVersion, SettingsPrivate } from '@runeya/packages-shared';\nimport { rememberFile, hasChangedSinceRead, wasRead } from './disk-freshness.js';\n\nconst SETTINGS_FILE = 'settings.json';\nconst SETTINGS_PRIVATE_FILE = 'settings.private.json';\nconst SCHEMA_VERSION_FILE = 'schema-version.json';\nconst CURRENT_SCHEMA_VERSION = 4;\n\n/**\n * Les réglages vivent dans le coffre de ce qu'ils configurent.\n *\n * Ils étaient au niveau machine — un fichier pour tout le poste — alors qu'ils\n * décrivent des choses qui appartiennent à des organisations différentes : les\n * fournisseurs d'IA qui paient le travail d'une équipe, les scénarios qui\n * décrivent ses services. Un réglage global obligeait donc à partager la clé\n * machine pour partager un secret d'organisation.\n *\n * `vault` désigne le coffre : l'identifiant d'une organisation, ou l'absence\n * pour le répertoire de lancement — celui d'un projet local, qui n'appartient à\n * personne d'autre. Rien ne reste au niveau machine sinon la session cloud,\n * irréductible puisque c'est elle qui donne accès aux organisations.\n */\nclass SettingsManager {\n private settings = new Map<string, Settings>();\n private settingsPrivate = new Map<string, SettingsPrivate>();\n private schemaVersion: SchemaVersion | null = null;\n\n /**\n * Le coffre visé, sous forme de racine sur le disque.\n *\n * Sans organisation, la racine machine — pas le répertoire de lancement. Ce\n * n'est pas un reste de l'ancien monde : y écrire forcerait un `.runeya` à\n * exister chez quelqu'un qui ne travaille que sur des projets cloud, ce que\n * les coffres ont justement supprimé (et ce qu'un test garde).\n */\n private rootOf(vault?: string): string {\n return vault ? orgVaultRoot(vault) : machineRoot();\n }\n\n private cacheKey(vault?: string): string {\n return vault ?? '';\n }\n\n private async atomicWrite(filename: string, data: unknown, vault?: string): Promise<void> {\n const root = this.rootOf(vault);\n await mkdir(root, { recursive: true });\n const filePath = join(root, filename);\n const tmpPath = filePath + '.tmp';\n await writeFile(tmpPath, JSON.stringify(data, null, 2), 'utf-8');\n await rename(tmpPath, filePath);\n await chmod(filePath, 0o600);\n // Notre propre écriture devient la référence : sans elle, la lecture\n // suivante prendrait ce fichier pour l'œuvre d'une autre instance et\n // relirait pour rien.\n await rememberFile(filePath);\n }\n\n /**\n * Le cache de ce coffre fait-il encore foi ?\n *\n * Plusieurs Runeya partagent la racine machine — l'application installée et\n * celle qu'on développe, couramment — et écrivent donc le même fichier. Un\n * cache peuplé une fois et jamais revu rend l'état du démarrage pour\n * toujours, et la sauvegarde suivante le réinstalle sur le disque : ce que\n * l'autre instance avait écrit entre-temps disparaît. Les réglages sont\n * l'endroit où cela coûte le plus cher, parce qu'un coffre n'a qu'un fichier\n * pour toute l'organisation — un projet, lui, a le sien.\n *\n * Un fichier jamais lu n'est pas périmé : c'est un coffre neuf, dont les\n * défauts viennent d'être écrits.\n */\n private async isStale(filename: string, vault?: string): Promise<boolean> {\n const path = join(this.rootOf(vault), filename);\n return wasRead(path) && await hasChangedSinceRead(path);\n }\n\n /**\n * Lire le fichier de CE coffre, et rien d'autre.\n *\n * Pas de repli sur un autre emplacement : un réglage lu ailleurs que là où il\n * est écrit fait deux vérités pour un même fait, et l'accord entre les deux\n * devient une chose de plus à tenir. Ce que les versions précédentes ont\n * écrit ailleurs est déplacé une fois pour toutes par\n * `migrateSettingsIntoVaults`, pas relu indéfiniment.\n */\n private async readJson<T>(filename: string, vault?: string): Promise<T | null> {\n const path = join(this.rootOf(vault), filename);\n try {\n const parsed = JSON.parse(await readFile(path, 'utf-8')) as T;\n // Repère pris après coup : c'est cette lecture-là que le cache reflète.\n await rememberFile(path);\n return parsed;\n } catch {\n return null;\n }\n }\n\n /** Vide les caches — après un déplacement de fichiers sous nos pieds. */\n forget(): void {\n this.settings.clear();\n this.settingsPrivate.clear();\n }\n\n /** Un fichier qui appartient au poste, pas à un coffre. */\n private async readMachineJson<T>(filename: string): Promise<T | null> {\n for (const path of [machineFilePath(filename), legacyMachineFilePath(filename)]) {\n try {\n return JSON.parse(await readFile(path, 'utf-8')) as T;\n } catch {\n // Try the next location.\n }\n }\n return null;\n }\n\n async getSettings(vault?: string): Promise<Settings> {\n const key = this.cacheKey(vault);\n let current = this.settings.get(key);\n if (current && await this.isStale(SETTINGS_FILE, vault)) current = undefined;\n if (!current) {\n const raw = await this.readJson<unknown>(SETTINGS_FILE, vault);\n const parsed = raw ? SettingsSchema.safeParse(raw) : null;\n if (parsed?.success) {\n current = parsed.data;\n this.settings.set(key, current);\n } else {\n current = SettingsSchema.parse({ mode: env.MODE, cloudUrl: env.CLOUD_URL ?? null });\n await this.saveSettings(current, vault);\n }\n }\n return current;\n }\n\n async saveSettings(settings: Settings, vault?: string): Promise<void> {\n this.settings.set(this.cacheKey(vault), settings);\n await this.atomicWrite(SETTINGS_FILE, settings, vault);\n }\n\n async getPrivateSettings(vault?: string): Promise<SettingsPrivate> {\n const key = this.cacheKey(vault);\n let current = this.settingsPrivate.get(key);\n if (current && await this.isStale(SETTINGS_PRIVATE_FILE, vault)) current = undefined;\n if (!current) {\n const raw = await this.readJson<unknown>(SETTINGS_PRIVATE_FILE, vault);\n const parsed = raw ? SettingsPrivateSchema.safeParse(raw) : null;\n if (parsed?.success) {\n current = parsed.data;\n this.settingsPrivate.set(key, current);\n } else {\n current = SettingsPrivateSchema.parse({});\n await this.savePrivateSettings(current, vault);\n }\n }\n return current;\n }\n\n async savePrivateSettings(settings: SettingsPrivate, vault?: string): Promise<void> {\n this.settingsPrivate.set(this.cacheKey(vault), settings);\n await this.atomicWrite(SETTINGS_PRIVATE_FILE, settings, vault);\n }\n\n /**\n * La version de schéma reste au niveau machine, et ce n'est pas un oubli :\n * elle ne configure rien, elle date les migrations des données de ce poste.\n */\n async getSchemaVersion(): Promise<SchemaVersion> {\n if (!this.schemaVersion) {\n const raw = await this.readMachineJson<unknown>(SCHEMA_VERSION_FILE);\n const parsed = raw ? SchemaVersionSchema.safeParse(raw) : null;\n if (parsed?.success) {\n this.schemaVersion = parsed.data;\n } else {\n this.schemaVersion = { version: CURRENT_SCHEMA_VERSION, migratedAt: new Date() };\n await this.saveSchemaVersion(this.schemaVersion);\n }\n }\n return this.schemaVersion;\n }\n\n async saveSchemaVersion(sv: SchemaVersion): Promise<void> {\n this.schemaVersion = sv;\n await mkdir(machineRoot(), { recursive: true });\n const filePath = machineFilePath(SCHEMA_VERSION_FILE);\n const tmpPath = filePath + '.tmp';\n await writeFile(tmpPath, JSON.stringify(sv, null, 2), 'utf-8');\n await rename(tmpPath, filePath);\n await chmod(filePath, 0o600);\n }\n\n getCurrentSchemaVersion(): number {\n return CURRENT_SCHEMA_VERSION;\n }\n}\n\nexport const settingsManager = new SettingsManager();\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAS,UAAU,WAAW,QAAQ,OAAO,aAAa;AAE1D,SAAS,YAAY;AAMrB,IAAM,gBAAgB;AACtB,IAAM,wBAAwB;AAC9B,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAgB/B,IAAM,kBAAN,MAAsB;AAAA,EACZ,WAAW,oBAAI,IAAsB;AAAA,EACrC,kBAAkB,oBAAI,IAA6B;AAAA,EACnD,gBAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtC,OAAO,OAAwB;AACrC,WAAO,QAAQ,aAAa,KAAK,IAAI,YAAY;AAAA,EACnD;AAAA,EAEQ,SAAS,OAAwB;AACvC,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAc,YAAY,UAAkB,MAAe,OAA+B;AACxF,UAAM,OAAO,KAAK,OAAO,KAAK;AAC9B,UAAM,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AACrC,UAAM,WAAW,KAAK,MAAM,QAAQ;AACpC,UAAM,UAAU,WAAW;AAC3B,UAAM,UAAU,SAAS,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,OAAO;AAC/D,UAAM,OAAO,SAAS,QAAQ;AAC9B,UAAM,MAAM,UAAU,GAAK;AAI3B,UAAM,aAAa,QAAQ;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAc,QAAQ,UAAkB,OAAkC;AACxE,UAAM,OAAO,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ;AAC9C,WAAO,QAAQ,IAAI,KAAK,MAAM,oBAAoB,IAAI;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAc,SAAY,UAAkB,OAAmC;AAC7E,UAAM,OAAO,KAAK,KAAK,OAAO,KAAK,GAAG,QAAQ;AAC9C,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO,CAAC;AAEvD,YAAM,aAAa,IAAI;AACvB,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,SAAe;AACb,SAAK,SAAS,MAAM;AACpB,SAAK,gBAAgB,MAAM;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAc,gBAAmB,UAAqC;AACpE,eAAW,QAAQ,CAAC,gBAAgB,QAAQ,GAAG,sBAAsB,QAAQ,CAAC,GAAG;AAC/E,UAAI;AACF,eAAO,KAAK,MAAM,MAAM,SAAS,MAAM,OAAO,CAAC;AAAA,MACjD,QAAQ;AAAA,MAER;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,OAAmC;AACnD,UAAM,MAAM,KAAK,SAAS,KAAK;AAC/B,QAAI,UAAU,KAAK,SAAS,IAAI,GAAG;AACnC,QAAI,WAAW,MAAM,KAAK,QAAQ,eAAe,KAAK,EAAG,WAAU;AACnE,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,MAAM,KAAK,SAAkB,eAAe,KAAK;AAC7D,YAAM,SAAS,MAAM,eAAe,UAAU,GAAG,IAAI;AACrD,UAAI,QAAQ,SAAS;AACnB,kBAAU,OAAO;AACjB,aAAK,SAAS,IAAI,KAAK,OAAO;AAAA,MAChC,OAAO;AACL,kBAAU,eAAe,MAAM,EAAE,MAAM,IAAI,MAAM,UAAU,IAAI,aAAa,KAAK,CAAC;AAClF,cAAM,KAAK,aAAa,SAAS,KAAK;AAAA,MACxC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,UAAoB,OAA+B;AACpE,SAAK,SAAS,IAAI,KAAK,SAAS,KAAK,GAAG,QAAQ;AAChD,UAAM,KAAK,YAAY,eAAe,UAAU,KAAK;AAAA,EACvD;AAAA,EAEA,MAAM,mBAAmB,OAA0C;AACjE,UAAM,MAAM,KAAK,SAAS,KAAK;AAC/B,QAAI,UAAU,KAAK,gBAAgB,IAAI,GAAG;AAC1C,QAAI,WAAW,MAAM,KAAK,QAAQ,uBAAuB,KAAK,EAAG,WAAU;AAC3E,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,MAAM,KAAK,SAAkB,uBAAuB,KAAK;AACrE,YAAM,SAAS,MAAM,sBAAsB,UAAU,GAAG,IAAI;AAC5D,UAAI,QAAQ,SAAS;AACnB,kBAAU,OAAO;AACjB,aAAK,gBAAgB,IAAI,KAAK,OAAO;AAAA,MACvC,OAAO;AACL,kBAAU,sBAAsB,MAAM,CAAC,CAAC;AACxC,cAAM,KAAK,oBAAoB,SAAS,KAAK;AAAA,MAC/C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,oBAAoB,UAA2B,OAA+B;AAClF,SAAK,gBAAgB,IAAI,KAAK,SAAS,KAAK,GAAG,QAAQ;AACvD,UAAM,KAAK,YAAY,uBAAuB,UAAU,KAAK;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,mBAA2C;AAC/C,QAAI,CAAC,KAAK,eAAe;AACvB,YAAM,MAAM,MAAM,KAAK,gBAAyB,mBAAmB;AACnE,YAAM,SAAS,MAAM,oBAAoB,UAAU,GAAG,IAAI;AAC1D,UAAI,QAAQ,SAAS;AACnB,aAAK,gBAAgB,OAAO;AAAA,MAC9B,OAAO;AACL,aAAK,gBAAgB,EAAE,SAAS,wBAAwB,YAAY,oBAAI,KAAK,EAAE;AAC/E,cAAM,KAAK,kBAAkB,KAAK,aAAa;AAAA,MACjD;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,kBAAkB,IAAkC;AACxD,SAAK,gBAAgB;AACrB,UAAM,MAAM,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AAC9C,UAAM,WAAW,gBAAgB,mBAAmB;AACpD,UAAM,UAAU,WAAW;AAC3B,UAAM,UAAU,SAAS,KAAK,UAAU,IAAI,MAAM,CAAC,GAAG,OAAO;AAC7D,UAAM,OAAO,SAAS,QAAQ;AAC9B,UAAM,MAAM,UAAU,GAAK;AAAA,EAC7B;AAAA,EAEA,0BAAkC;AAChC,WAAO;AAAA,EACT;AACF;AAEO,IAAM,kBAAkB,IAAI,gBAAgB;","names":[]}
@@ -1,3 +1,9 @@
1
+ import {
2
+ fingerprintFiles,
3
+ hasChangedSinceRead,
4
+ rememberFile,
5
+ wasRead
6
+ } from "./chunk-YZU5FNXR.js";
1
7
  import {
2
8
  AGENT_FETCH_TIMEOUT,
3
9
  AGENT_HEALTH_POLL_INTERVAL,
@@ -8,7 +14,7 @@ import {
8
14
  TraefikConfigSchema,
9
15
  WS_RECONNECT_MAX,
10
16
  WS_RECONNECT_MIN
11
- } from "./chunk-H6VIS4OY.js";
17
+ } from "./chunk-T2BV5WZE.js";
12
18
  import {
13
19
  allVaultRoots,
14
20
  env,
@@ -500,31 +506,6 @@ import { randomUUID as randomUUID2 } from "crypto";
500
506
  import { readFile as readFile2, writeFile as writeFile2, rename as rename2, mkdir as mkdir2, chmod as chmod2, rm } from "fs/promises";
501
507
  import { join as join2 } from "path";
502
508
 
503
- // ../server/src/services/disk-freshness.ts
504
- import { stat } from "fs/promises";
505
- var seen = /* @__PURE__ */ new Map();
506
- async function rememberFile(path) {
507
- try {
508
- const s = await stat(path);
509
- seen.set(path, { mtimeMs: s.mtimeMs, size: s.size });
510
- } catch {
511
- seen.delete(path);
512
- }
513
- }
514
- async function hasChangedSinceRead(path) {
515
- const known = seen.get(path);
516
- if (!known) return true;
517
- try {
518
- const s = await stat(path);
519
- return s.mtimeMs !== known.mtimeMs || s.size !== known.size;
520
- } catch {
521
- return true;
522
- }
523
- }
524
- function wasRead(path) {
525
- return seen.has(path);
526
- }
527
-
528
509
  // ../server/src/services/crypto-helpers.ts
529
510
  import { randomBytes as randomBytes2, createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2 } from "crypto";
530
511
  var ALGORITHM2 = "aes-256-gcm";
@@ -657,6 +638,15 @@ var EnvironmentStore = class {
657
638
  * fichier et de laisser le prochain chargement faire foi.
658
639
  */
659
640
  staleRoots = /* @__PURE__ */ new Set();
641
+ /**
642
+ * L'état du disque au dernier chargement — voir `ProjectStore.fingerprint`.
643
+ *
644
+ * `staleRoots` dit « ne réécris pas ce fichier, il a bougé » ; celui-ci dit
645
+ * « relis-le ». Les deux vont ensemble : refuser d'écrire protège le travail
646
+ * de l'autre instance, mais tant que la mémoire n'est pas reprise, l'écriture
647
+ * refusée l'est pour toujours et la modification de l'utilisateur se perd.
648
+ */
649
+ fingerprint = "";
660
650
  listeners = /* @__PURE__ */ new Set();
661
651
  /** Notified after every persisted mutation, for the cloud sync bridge. */
662
652
  onChange(fn) {
@@ -835,6 +825,10 @@ var EnvironmentStore = class {
835
825
  }
836
826
  return { ...environment, variables: decryptedVars };
837
827
  }
828
+ /** Ce que le disque porte : un fichier d'environnements par coffre. */
829
+ async diskFingerprint() {
830
+ return fingerprintFiles((await allVaultRoots()).map((root) => this.getFilePath(root)));
831
+ }
838
832
  /**
839
833
  * Read every vault — the launch directory and each materialized cloud project.
840
834
  *
@@ -843,14 +837,21 @@ var EnvironmentStore = class {
843
837
  * store reads environments while absorbing a project, which would deadlock).
844
838
  */
845
839
  async load() {
846
- if (this.loaded) return;
840
+ const fingerprint = await this.diskFingerprint();
841
+ if (this.loaded && fingerprint === this.fingerprint) return;
847
842
  this.loaded = true;
843
+ this.fingerprint = fingerprint;
848
844
  await ensureProjectsLoaded();
849
845
  if (!getEncryptionKey()) {
850
846
  this.loaded = false;
851
847
  return;
852
848
  }
853
- for (const root of await allVaultRoots()) {
849
+ const roots = await allVaultRoots();
850
+ this.environments.clear();
851
+ this.diskEncryptedSlots.clear();
852
+ this.roots.clear();
853
+ this.unreadableSecrets.clear();
854
+ for (const root of roots) {
854
855
  try {
855
856
  const raw = await readFile2(this.getFilePath(root), "utf-8");
856
857
  await rememberFile(this.getFilePath(root));
@@ -927,6 +928,7 @@ var EnvironmentStore = class {
927
928
  await chmod2(filePath, 384);
928
929
  await rememberFile(filePath);
929
930
  }
931
+ this.fingerprint = await this.diskFingerprint();
930
932
  this.notify();
931
933
  }
932
934
  /**
@@ -1265,6 +1267,12 @@ function prepareForDisk(service, previous, vault) {
1265
1267
  var ServiceStore = class {
1266
1268
  services = /* @__PURE__ */ new Map();
1267
1269
  loaded = false;
1270
+ /**
1271
+ * L'état du disque au dernier chargement — voir `ProjectStore.fingerprint` :
1272
+ * plusieurs Runeya partagent la racine machine, et un store chargé une fois
1273
+ * pour toutes ne verrait jamais les services créés par l'autre.
1274
+ */
1275
+ fingerprint = "";
1268
1276
  listeners = /* @__PURE__ */ new Set();
1269
1277
  /**
1270
1278
  * Last on-disk (encrypted) form per service id, so `prepareForDisk` can reuse
@@ -1324,6 +1332,10 @@ var ServiceStore = class {
1324
1332
  rootFor(serviceId) {
1325
1333
  return rootOfService(serviceId, this.roots.get(serviceId) ?? null) ?? localVaultRoot();
1326
1334
  }
1335
+ /** Ce que le disque porte : un fichier de services par coffre. */
1336
+ async diskFingerprint() {
1337
+ return fingerprintFiles((await allVaultRoots()).map((root) => this.getFilePath(root)));
1338
+ }
1327
1339
  /**
1328
1340
  * Read every vault: the launch directory and each materialized cloud project.
1329
1341
  *
@@ -1331,11 +1343,17 @@ var ServiceStore = class {
1331
1343
  * without waiting on projects.
1332
1344
  */
1333
1345
  async load() {
1334
- if (this.loaded) return;
1335
1346
  if (!getEncryptionKey()) return;
1347
+ const fingerprint = await this.diskFingerprint();
1348
+ if (this.loaded && fingerprint === this.fingerprint) return;
1336
1349
  this.loaded = true;
1350
+ this.fingerprint = fingerprint;
1337
1351
  await ensureProjectsLoaded();
1338
- for (const root of await allVaultRoots()) {
1352
+ const roots = await allVaultRoots();
1353
+ this.services.clear();
1354
+ this.diskForm.clear();
1355
+ this.roots.clear();
1356
+ for (const root of roots) {
1339
1357
  try {
1340
1358
  const raw = await readFile3(this.getFilePath(root), "utf-8");
1341
1359
  const data = JSON.parse(raw);
@@ -1398,6 +1416,7 @@ var ServiceStore = class {
1398
1416
  await rename3(tmpPath, filePath);
1399
1417
  await chmod3(filePath, 384);
1400
1418
  }
1419
+ this.fingerprint = await this.diskFingerprint();
1401
1420
  }
1402
1421
  /**
1403
1422
  * Drop services from memory, without touching the disk.
@@ -1745,15 +1764,6 @@ async function probe(port) {
1745
1764
  return { ok: false, uptimeMs: null, version: null };
1746
1765
  }
1747
1766
  }
1748
- async function describeInstance(pid) {
1749
- try {
1750
- const parsed = InstanceFileSchema.safeParse(JSON.parse(await readFile4(fileFor(pid), "utf8")));
1751
- if (!parsed.success) return null;
1752
- return { pid, port: parsed.data.port, cwd: parsed.data.cwd };
1753
- } catch {
1754
- return null;
1755
- }
1756
- }
1757
1767
  async function listInstances() {
1758
1768
  let files;
1759
1769
  try {
@@ -3001,9 +3011,6 @@ export {
3001
3011
  decryptVariableSlots,
3002
3012
  extractEncryptedVariableSlots,
3003
3013
  isEncryptedValue,
3004
- rememberFile,
3005
- hasChangedSinceRead,
3006
- wasRead,
3007
3014
  projectKey,
3008
3015
  AmbiguousProjectError,
3009
3016
  registerProjectLoader,
@@ -3020,7 +3027,6 @@ export {
3020
3027
  agentStore,
3021
3028
  registerInstance,
3022
3029
  unregisterInstance,
3023
- describeInstance,
3024
3030
  listInstances,
3025
3031
  killInstance,
3026
3032
  restartInstance,
@@ -3029,4 +3035,4 @@ export {
3029
3035
  traefikManager,
3030
3036
  agentManager
3031
3037
  };
3032
- //# sourceMappingURL=chunk-2WXQIUVC.js.map
3038
+ //# sourceMappingURL=chunk-CNTL6NVU.js.map