@runeya/runeya 2.0.120 → 2.0.122

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 (280) hide show
  1. package/agent/index.js +17 -2
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-BSPEFZKZ.js +10 -0
  4. package/{chat-PXMMZIAY.js → chat-SE5GIT4B.js} +7 -6
  5. package/{chunk-22RJM654.js → chunk-BVBK2WII.js} +155 -157
  6. package/chunk-BVBK2WII.js.map +1 -0
  7. package/chunk-GL7WA5K3.js +92 -0
  8. package/chunk-GL7WA5K3.js.map +1 -0
  9. package/{chunk-GIHR3BGT.js → chunk-NIU3CN5A.js} +37 -17
  10. package/chunk-NIU3CN5A.js.map +1 -0
  11. package/{chunk-H6VIS4OY.js → chunk-T2BV5WZE.js} +18 -3
  12. package/chunk-T2BV5WZE.js.map +1 -0
  13. package/{chunk-NYKFDU76.js → chunk-VNLIA5PV.js} +137 -59
  14. package/chunk-VNLIA5PV.js.map +1 -0
  15. package/{chunk-2WXQIUVC.js → chunk-XTLQOYLT.js} +147 -81
  16. package/chunk-XTLQOYLT.js.map +1 -0
  17. package/{companion-4RQ3AMOL.js → companion-HEJHC3UR.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-4GAINSJO.js +10 -0
  22. package/{src-NRKK27F3.js → src-YUVA6WCM.js} +259 -172
  23. package/src-YUVA6WCM.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-CdapdMgo.js → EditorIcon-LCl9V_-a.js} +2 -2
  37. package/web/assets/{EnvironmentForm-Dgrt5I5N.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-DRyD5bQg.js → ProcessControls-PKQWukd7.js} +1 -1
  48. package/web/assets/ProcessDetailPage-DhFoi4DT.js +1 -0
  49. package/web/assets/{ProcessMetrics-D5SgFgFU.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-ByrzVX5h.js → autocomplete-DMfvn4sK.js} +3 -3
  65. package/web/assets/{basic-shape-diamond.svg-h2koobo1.js → basic-shape-diamond.svg-B5H1r2bp.js} +1 -1
  66. package/web/assets/{basic-shape-hexagon.svg--IMj5O6H.js → basic-shape-hexagon.svg-CYAjKF0z.js} +1 -1
  67. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-B0JqtIPK.js → basic-shape-primary-circle-ellipse-round.svg-CgleCAf-.js} +1 -1
  68. package/web/assets/{basic-shape-primary-square-rectangle.svg-nMUFcz3q.js → basic-shape-primary-square-rectangle.svg-1Oa48Hhs.js} +1 -1
  69. package/web/assets/{basic-shape-shield.svg-B01_o2Y1.js → basic-shape-shield.svg-F6dZwVUJ.js} +1 -1
  70. package/web/assets/{browser-OPkfGEHD.js → browser-CmPAWcJ7.js} +1 -1
  71. package/web/assets/{browser-DcLBGCAS.js → browser-D3KJ0m2n.js} +1 -1
  72. package/web/assets/card-Ciw7uU90.js +32 -0
  73. package/web/assets/{checkbox-DGCPu95-.js → checkbox-BCCx0Nu6.js} +3 -3
  74. package/web/assets/{chip-Chk5tAnb.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-CnTOFA6T.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-CfTbcAFd.js → computer-device-desktop-monitor.svg-D7wu2cQ4.js} +1 -1
  82. package/web/assets/{computer-device-desktop.svg-Cl-xv361.js → computer-device-desktop.svg-BtVwjOEG.js} +1 -1
  83. package/web/assets/{computer-device-laptop.svg-ukRjIyMq.js → computer-device-laptop.svg-f3tFeUHj.js} +1 -1
  84. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CoDvI0SU.js → computer-device-mobile-phone-android-samsung-back.svg-CmJcGkrL.js} +1 -1
  85. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BQWjk4Zt.js → computer-device-mobile-phone-android-samsung.svg-C2ke6Sbg.js} +1 -1
  86. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-DAoSG317.js → computer-device-mobile-phone-iphone-x-back.svg-DxMqUXKE.js} +1 -1
  87. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BPjvW-EA.js → computer-device-mobile-phone-iphone-x.svg-DkbKlrh8.js} +1 -1
  88. package/web/assets/{computer-device-mobile-tablet-touch.svg-BYEFFDGJ.js → computer-device-mobile-tablet-touch.svg-DP0uXMda.js} +1 -1
  89. package/web/assets/{computer-device-mobile-tablet.svg-DNLPmtgI.js → computer-device-mobile-tablet.svg-C064ZFQm.js} +1 -1
  90. package/web/assets/{computer-device-network-ethernet-cat6.svg-BLWV1j_N.js → computer-device-network-ethernet-cat6.svg-Dwzl7zBN.js} +1 -1
  91. package/web/assets/{computer-device-network-lan-www.svg-BOoU0zpo.js → computer-device-network-lan-www.svg-BgErom5w.js} +1 -1
  92. package/web/assets/{computer-device-network-wifi-connection.svg-DGwn0IjA.js → computer-device-network-wifi-connection.svg-ByqNsV6y.js} +1 -1
  93. package/web/assets/{computer-device-network-wifi-router.svg-C5g_K48A.js → computer-device-network-wifi-router.svg-AySGITbi.js} +1 -1
  94. package/web/assets/{cssMode-Cx5qrxXy.js → cssMode-BqrZ4SB-.js} +1 -1
  95. package/web/assets/{divider-BrS14lDG.js → divider-BswZTb8q.js} +2 -2
  96. package/web/assets/{docx-preview-DAPpQjxw.js → docx-preview-t_oOha_C.js} +1 -1
  97. package/web/assets/{ecology-science-erlenmeyer-flask.svg-DomVqm74.js → ecology-science-erlenmeyer-flask.svg-Keg4ZY0z.js} +1 -1
  98. package/web/assets/{fieldset-C0CmkHzJ.js → fieldset-DaWy9FsL.js} +2 -2
  99. package/web/assets/{freemarker2-183f16_T.js → freemarker2-Br0kiufp.js} +1 -1
  100. package/web/assets/{handlebars-Ck2u5MRS.js → handlebars-BrATzKUL.js} +1 -1
  101. package/web/assets/{html-RFHCet7g.js → html-LWTJcTM2.js} +1 -1
  102. package/web/assets/{htmlMode-MLvTePcj.js → htmlMode-A23pWfMP.js} +1 -1
  103. package/web/assets/{image-flash-lightning.svg-C_9EqK2Z.js → image-flash-lightning.svg-uQfoT6Ex.js} +1 -1
  104. package/web/assets/{image-picture-flower.svg-Cw0p4SDa.js → image-picture-flower.svg-XxD1bCHC.js} +1 -1
  105. package/web/assets/{index-De7vzwYE.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-D_7jQp52.js → interface-alert-exclamation-diamond.svg-gQAlkILu.js} +1 -1
  108. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-slrQHD7Z.js → interface-alert-exclamation-triangle-warning.svg-Ga2rsl6o.js} +1 -1
  109. package/web/assets/{interface-alert-information-circle.svg-D6HZsCxj.js → interface-alert-information-circle.svg-BS0N2R1M.js} +1 -1
  110. package/web/assets/{interface-award-crown.svg-C8KlpCo8.js → interface-award-crown.svg-CtLbK4Gl.js} +1 -1
  111. package/web/assets/{interface-bookmark.svg-CcHEFyZI.js → interface-bookmark-tag.svg-Dfd6eXAX.js} +1 -1
  112. package/web/assets/{interface-bookmark-tag.svg-4m7iWpFd.js → interface-bookmark.svg-Clt6TTov.js} +1 -1
  113. package/web/assets/{interface-calendar-date-one.svg-B-NpBZQW.js → interface-calendar-date-one.svg-BmFNLrzR.js} +1 -1
  114. package/web/assets/{interface-content-book-open-pages.svg-D6JSr0DE.js → interface-content-book-open-pages.svg-u8kJbc3N.js} +1 -1
  115. package/web/assets/{interface-content-book-page.svg-4JwHKP99.js → interface-content-book-page.svg-Csk8d0R8.js} +1 -1
  116. package/web/assets/{interface-content-file.svg-dDsVtuW0.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-VlaIOWsg.js → interface-content-folder.svg-ipO7hYM2.js} +1 -1
  119. package/web/assets/{interface-copy-clipboard.svg-C8NaVJTP.js → interface-copy-clipboard.svg-BaK2fHKS.js} +1 -1
  120. package/web/assets/{interface-edit-attachment.svg-DLv3r8Ta.js → interface-edit-attachment.svg-CrpyP6c6.js} +1 -1
  121. package/web/assets/{interface-edit-binocular.svg-Dn_isC0z.js → interface-edit-binocular.svg-Cw-YeqUQ.js} +1 -1
  122. package/web/assets/{interface-edit-magic-wand.svg-D7nDtfWR.js → interface-edit-magic-wand.svg-BPa49t_4.js} +1 -1
  123. package/web/assets/{interface-edit-tool-paint-roller.svg-pvqfHBhq.js → interface-edit-tool-paint-roller.svg-Cfag7vxY.js} +1 -1
  124. package/web/assets/{interface-edit-tool-pencil.svg-65sH97q4.js → interface-edit-tool-pencil.svg-BNAmX0d_.js} +1 -1
  125. package/web/assets/{interface-favorite-award.svg-ByKr9sn6.js → interface-favorite-award.svg-CIMvocAv.js} +1 -1
  126. package/web/assets/{interface-favorite-flag.svg-Dw-AP2Bq.js → interface-favorite-flag.svg-8C3GXK06.js} +1 -1
  127. package/web/assets/{interface-favorite-heart.svg-B_rIv8ZF.js → interface-favorite-heart.svg-CEU_IALn.js} +1 -1
  128. package/web/assets/{interface-favorite-star.svg-DdSC1aGg.js → interface-favorite-star.svg-Bs0RUtgk.js} +1 -1
  129. package/web/assets/{interface-favorite-stars-sparkles.svg-B2P_fEQm.js → interface-favorite-stars-sparkles.svg-CZYZ5qkH.js} +1 -1
  130. package/web/assets/{interface-hierarchy-flowchart.svg-Dn7xVcha.js → interface-hierarchy-flowchart.svg-DOgEXHV2.js} +1 -1
  131. package/web/assets/{interface-home-house.svg-CPV7dtoL.js → interface-home-house.svg-lDERGk8q.js} +1 -1
  132. package/web/assets/{interface-hyperlink.svg-BxEpW0yS.js → interface-hyperlink.svg-CAZrs64U.js} +1 -1
  133. package/web/assets/{interface-lighting-brightness.svg-CHwx5muE.js → interface-lighting-brightness.svg-CVANBB7i.js} +1 -1
  134. package/web/assets/{interface-lock-closed.svg-Ct9YyvGT.js → interface-lock-closed.svg-qDLyceL-.js} +1 -1
  135. package/web/assets/{interface-lock-open-unlock.svg-DuuZ9seB.js → interface-lock-open-unlock.svg-Bc-cq6eU.js} +1 -1
  136. package/web/assets/{interface-login-key.svg-DwQq_1hs.js → interface-login-key.svg-D6wZBYEi.js} +1 -1
  137. package/web/assets/{interface-search.svg-Cd9FPHXP.js → interface-search.svg-BVM6kkvA.js} +1 -1
  138. package/web/assets/{interface-setting-cog.svg-C2oUvcZk.js → interface-setting-cog.svg-uJYqlmKx.js} +1 -1
  139. package/web/assets/{interface-share-megaphone-bullhorn.svg-D_sqPbcr.js → interface-share-megaphone-bullhorn.svg-CgBVBu7Z.js} +1 -1
  140. package/web/assets/{interface-share-rocket.svg-DHw9o1DN.js → interface-share-rocket.svg-C1iCXMlX.js} +1 -1
  141. package/web/assets/{interface-share-satellite.svg-CYuWbhdH.js → interface-share-satellite.svg-uH-Cvq9d.js} +1 -1
  142. package/web/assets/{interface-share-space-ship.svg-CsQbvDGw.js → interface-share-space-ship.svg-81lauyV5.js} +1 -1
  143. package/web/assets/{interface-share.svg-CxR58P36.js → interface-share.svg-DO85t-F0.js} +1 -1
  144. package/web/assets/{interface-signal-square.svg-BFCAMIlM.js → interface-signal-square.svg-CFAni6lY.js} +1 -1
  145. package/web/assets/{interface-time-clock-circle.svg-BMtmcI_Z.js → interface-time-clock-circle.svg-BUQfluh7.js} +1 -1
  146. package/web/assets/{interface-time-hour-glass.svg-F_74mbfe.js → interface-time-hour-glass.svg-BAZDU-C5.js} +1 -1
  147. package/web/assets/{interface-users-multiple.svg-GqG3hBlb.js → interface-users-multiple.svg-Bj0AvF2-.js} +1 -1
  148. package/web/assets/{interface-weather-moon.svg-By26aJ-s.js → interface-weather-moon.svg-Cxz-5thD.js} +1 -1
  149. package/web/assets/{javascript-DWG-shUz.js → javascript-CuP68vN5.js} +1 -1
  150. package/web/assets/{jsonMode-c7o5Rqeq.js → jsonMode-CdGjze9r.js} +1 -1
  151. package/web/assets/{liquid-DqJ-7gUQ.js → liquid-fJJZPdJb.js} +1 -1
  152. package/web/assets/{lspLanguageFeatures-C_r6rVue.js → lspLanguageFeatures-YzzH9q9a.js} +3 -3
  153. package/web/assets/{mail-chat-bubble-square.svg-1OECQtwZ.js → mail-chat-bubble-square.svg-DY1-sN8v.js} +1 -1
  154. package/web/assets/{mail-send-email-paper-airplane.svg-DGa9kXqg.js → mail-send-email-paper-airplane.svg-6zVEUG2-.js} +1 -1
  155. package/web/assets/{mail-send-envelope.svg-DOnW83Qn.js → mail-send-envelope.svg-DNpA7Auy.js} +1 -1
  156. package/web/assets/{mdx-BmXiyjsf.js → mdx-CphM-wvX.js} +1 -1
  157. package/web/assets/{minus-Bva6o6mu.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-C9S8E9Gs.js → money-cashier-receipt.svg-ChxLUMT0.js} +1 -1
  161. package/web/assets/{money-currency-dollar-pay.svg-CXNYqgJd.js → money-currency-dollar-pay.svg-CcPdfv1E.js} +1 -1
  162. package/web/assets/{money-graph-arrow-increase.svg-DVTCnF_9.js → money-graph-arrow-increase.svg-BsmXO8yM.js} +1 -1
  163. package/web/assets/{money-graph-bar-chart-increase.svg-CIlyGCUY.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-xc6FzauK.js → nature-ecology-leaf.svg-nzup63P6.js} +1 -1
  166. package/web/assets/{password-B_HLITFe.js → password-CCYLOu-C.js} +4 -4
  167. package/web/assets/{phone-telephone.svg-D6y6im-g.js → phone-telephone.svg-BLtgdZw-.js} +1 -1
  168. package/web/assets/{plus-DJr2QEgS.js → plus-jk73RdzY.js} +5 -5
  169. package/web/assets/process.store-jsfEBwiA.js +1 -0
  170. package/web/assets/{programming-bug.svg-jKhqPvQ0.js → programming-bug.svg-BCN6lOn1.js} +1 -1
  171. package/web/assets/{programming-cloud.svg-C1_us4-8.js → programming-cloud.svg-DHNBRNkQ.js} +1 -1
  172. package/web/assets/{programming-computer-database-server.svg-C_8mq7k2.js → programming-computer-database-server.svg-C4DheEbm.js} +1 -1
  173. package/web/assets/{programming-computer-database.svg-Cc445gb5.js → programming-computer-database.svg-cD2w2ZZ6.js} +1 -1
  174. package/web/assets/{programming-module-four-layout.svg-B5fbcAO3.js → programming-module-four-layout.svg-D6_P2rTG.js} +1 -1
  175. package/web/assets/{programming-module-three.svg-J7fncT0c.js → programming-module-three.svg-Dc076Z_f.js} +1 -1
  176. package/web/assets/{programming-module.svg-BVjzZRgZ.js → programming-module.svg-D0c9akII.js} +1 -1
  177. package/web/assets/{programming-script-code.svg-By609kb5.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-jVn8dPRY.js → python-DMw-TRDY.js} +1 -1
  181. package/web/assets/{radiobutton-erK19fCL.js → radiobutton-CnoEo0qc.js} +2 -2
  182. package/web/assets/{razor-BJoJ2H1P.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-CcYfFedF.js → settings.store-DeGpnclr.js} +1 -1
  186. package/web/assets/{shopping-cart.svg-a8Rjk8rK.js → shopping-cart.svg-pvFNKXP_.js} +1 -1
  187. package/web/assets/{shopping-gift-present.svg-BIN9jnEb.js → shopping-gift-present.svg-PYJ4_vdS.js} +1 -1
  188. package/web/assets/{shopping-shipping-box-parcel-package.svg-05MVPg3v.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-DCcw9sU3.css → src-DU1mBjF-.css} +1 -1
  191. package/web/assets/src-NXursDRf.js +1 -0
  192. package/web/assets/{tabpanel-BIAV4aKH.js → tabpanel-CKudNnqo.js} +3 -3
  193. package/web/assets/{tag-new-circle.svg-ehKpryNe.js → tag-new-circle.svg-Bf83DYRq.js} +1 -1
  194. package/web/assets/theme-D6M00FyZ.js +1 -0
  195. package/web/assets/{toggleswitch-qhHjeH7s.js → toggleswitch-Cv0supU2.js} +2 -2
  196. package/web/assets/{travel-map-earth-globe.svg-D0Dk72so.js → travel-map-earth-globe.svg-WxnFDzEH.js} +1 -1
  197. package/web/assets/trpc-mWVODCs2.js +1 -0
  198. package/web/assets/{tsMode-B-s4JVyR.js → tsMode-CfruLmor.js} +5 -5
  199. package/web/assets/{typescript-CToySho3.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-DOTcwa9I.js → useProjectCloudOrg-BwLsTiz0.js} +1 -1
  205. package/web/assets/useServiceUrlHost-CE4Qoy-J.js +1 -0
  206. package/web/assets/{xml-BMt9wg3H.js → xml-BTID20Kj.js} +1 -1
  207. package/web/assets/{yaml-RmzWffCM.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-Lgml1vhh.js +0 -13
  218. package/web/assets/AgentTerminalPage-CwxbyQxm.js +0 -1
  219. package/web/assets/AiChatPage-CknE-NOo.js +0 -1
  220. package/web/assets/AppLayout-DT6bb__K.js +0 -1
  221. package/web/assets/AuditPage-DzK5Tp3Z.js +0 -1
  222. package/web/assets/CloudAccountPage-BDQpVEAX.js +0 -1
  223. package/web/assets/CloudAccountPage-CWdxZvAC.js +0 -1
  224. package/web/assets/CloudAccountPage-CfMY69pk.css +0 -1
  225. package/web/assets/CloudMessagingPage-BX0QPzkR.js +0 -2
  226. package/web/assets/DashboardPage-BNBzT2zb.js +0 -164
  227. package/web/assets/DirectoryPickerDialog-ZT-tL_4A.js +0 -1
  228. package/web/assets/EnvironmentFormPage-B7uerFJ0.js +0 -1
  229. package/web/assets/EnvironmentListPage-tTe_1yh-.js +0 -1
  230. package/web/assets/KanbanBoardPage-DTZVqxd6.js +0 -4
  231. package/web/assets/KanbanListPage-C5rbZ1eL.css +0 -1
  232. package/web/assets/KanbanListPage-D82HSRy7.js +0 -1
  233. package/web/assets/LaunchProjectPage-DgaslasQ.js +0 -1
  234. package/web/assets/LaunchServicesPage-I2HCqujc.js +0 -1
  235. package/web/assets/LogViewer-CYuoSJAN.js +0 -3
  236. package/web/assets/OrgKeyPrompt-Asz6FlrN.js +0 -1
  237. package/web/assets/ProcessDetailPage-DHmTCgj8.js +0 -1
  238. package/web/assets/RandomJobTestPage-COLLiJzt.js +0 -2
  239. package/web/assets/ScenarioEditorPage-rDIB08Ap.js +0 -14
  240. package/web/assets/SendToChatDialog-BvUmZhUU.js +0 -1
  241. package/web/assets/ServiceControlsBar-DGTsbA5Q.js +0 -1
  242. package/web/assets/ServiceDetailPage-Ddko3DNN.js +0 -2
  243. package/web/assets/ServiceFormPage-oVVmtWjt.js +0 -1
  244. package/web/assets/SettingsPage-BcQruhk1.js +0 -2063
  245. package/web/assets/UnlockPage-CpysPhlT.css +0 -1
  246. package/web/assets/UnlockPage-OH7UV01L.js +0 -1
  247. package/web/assets/VaultMigrationPage-B4a0WihW.js +0 -1
  248. package/web/assets/VersionBadge-URtOAd5L.js +0 -1
  249. package/web/assets/WikiPage-BotpKBAY.js +0 -1
  250. package/web/assets/WikiView-DQCs79lu.js +0 -1
  251. package/web/assets/add-scalar-classes-CnAomA8D.js +0 -387
  252. package/web/assets/card-C3Xots9M.js +0 -32
  253. package/web/assets/client-CbBJUuyt.js +0 -24
  254. package/web/assets/cloud-chat.store-COR3nnYR.js +0 -1
  255. package/web/assets/cloud-client-DZFY1sze.js +0 -1
  256. package/web/assets/cloud-session-CCJUvzk1.js +0 -1
  257. package/web/assets/column-ROcesBUs.js +0 -763
  258. package/web/assets/interface-content-folder.svg-CagI3wg0.js +0 -1
  259. package/web/assets/modal-AUS2ksVq.js +0 -5
  260. package/web/assets/modal-BR3MAJDn.js +0 -1
  261. package/web/assets/multiselect-aPow7kzy.js +0 -251
  262. package/web/assets/process.store-CVrBwiRB.js +0 -1
  263. package/web/assets/project-launch.store-DCuERm8z.js +0 -1
  264. package/web/assets/project.store-D0oo8kyl.js +0 -1
  265. package/web/assets/router-0UcfydXq.js +0 -1
  266. package/web/assets/settings-scope-DdLe151G.js +0 -1
  267. package/web/assets/src-BiwZaAz3.js +0 -1
  268. package/web/assets/src-OmBj_GBQ.js +0 -572
  269. package/web/assets/theme-DiK_jXoN.js +0 -1
  270. package/web/assets/trpc-DOYpfRgV.js +0 -1
  271. package/web/assets/useAiChatDrawer-BSlDU8P0.js +0 -1
  272. package/web/assets/useCloudOrg-_EGQ6eUY.js +0 -1
  273. package/web/assets/useEnvVarAutocomplete-B4h_6ylX.js +0 -1
  274. package/web/assets/useProjectCatalog-B3GacZkf.js +0 -1
  275. package/web/assets/useServiceUrlHost-B-38dOxY.js +0 -1
  276. /package/{agent-manager-ACPQWUZ5.js.map → agent-manager-BSPEFZKZ.js.map} +0 -0
  277. /package/{chat-PXMMZIAY.js.map → chat-SE5GIT4B.js.map} +0 -0
  278. /package/{companion-4RQ3AMOL.js.map → companion-HEJHC3UR.js.map} +0 -0
  279. /package/{desktop-launcher-ADGRYF4S.js.map → desktop-launcher-EGGVXXKV.js.map} +0 -0
  280. /package/{settings-manager-2C7RY6ZC.js.map → settings-manager-4GAINSJO.js.map} +0 -0
@@ -17,7 +17,6 @@ import {
17
17
  apiKeyStore,
18
18
  appVersion,
19
19
  applyPersistedLanMode,
20
- atomicWriteSecure,
21
20
  auditService,
22
21
  canEnvAction,
23
22
  chatRouter,
@@ -51,7 +50,6 @@ import {
51
50
  requireServiceAction,
52
51
  resolveAgentCwd,
53
52
  resolveConversationCwd,
54
- resolveConversationRunDir,
55
53
  resolveEffectiveAgentId,
56
54
  resolveServiceVariables,
57
55
  resolveWorkspaceCwd,
@@ -64,7 +62,7 @@ import {
64
62
  soleAccountScope,
65
63
  startCliSession,
66
64
  vaultOfProject
67
- } from "./chunk-22RJM654.js";
65
+ } from "./chunk-BVBK2WII.js";
68
66
  import {
69
67
  resolveCliInvocation,
70
68
  whichCommand
@@ -87,7 +85,7 @@ import {
87
85
  stopClaudeTranscriptWatcher,
88
86
  stopCodexTranscriptWatcher,
89
87
  verifyJwt
90
- } from "./chunk-NYKFDU76.js";
88
+ } from "./chunk-VNLIA5PV.js";
91
89
  import "./chunk-MD3VW4HQ.js";
92
90
  import {
93
91
  agentManager,
@@ -98,7 +96,6 @@ import {
98
96
  clearVaultLock,
99
97
  decryptValue,
100
98
  decryptValueWith,
101
- describeInstance,
102
99
  encryptValue,
103
100
  encryptValueWith,
104
101
  ensureEncryptionKey,
@@ -126,10 +123,14 @@ import {
126
123
  stableEncryptValue,
127
124
  traefikManager,
128
125
  unregisterInstance
129
- } from "./chunk-2WXQIUVC.js";
126
+ } from "./chunk-XTLQOYLT.js";
130
127
  import {
131
128
  settingsManager
132
- } from "./chunk-GIHR3BGT.js";
129
+ } from "./chunk-NIU3CN5A.js";
130
+ import {
131
+ atomicWriteSecure,
132
+ resolveConversationRunDir
133
+ } from "./chunk-GL7WA5K3.js";
133
134
  import {
134
135
  AGENT_LONG_FETCH_TIMEOUT,
135
136
  AGENT_STOP_FETCH_TIMEOUT,
@@ -163,7 +164,7 @@ import {
163
164
  readEntity,
164
165
  serviceSlug,
165
166
  writeEntity
166
- } from "./chunk-H6VIS4OY.js";
167
+ } from "./chunk-T2BV5WZE.js";
167
168
  import {
168
169
  env,
169
170
  forgetOrgLogo,
@@ -1167,6 +1168,63 @@ var projectRouter = router({
1167
1168
  await projectPathStore.set(project, input.path);
1168
1169
  await auditService.log({ userId: "local", action: "update", entityType: "project", entityId: input.id, metadata: { localPath: input.path } });
1169
1170
  return { path: input.path };
1171
+ }),
1172
+ /**
1173
+ * Ce qui a changé dans les stores, à mesure que ça change.
1174
+ *
1175
+ * Un projet, un service ou un environnement n'arrive pas toujours de
1176
+ * l'utilisateur assis devant : il descend du cloud quand un collègue le
1177
+ * pousse, ou d'une autre Runeya de cette machine. Les stores étaient déjà
1178
+ * prévenus — la synchronisation s'appuie sur les mêmes signaux — mais rien ne
1179
+ * portait l'information jusqu'à l'écran, qui gardait donc ce qu'il avait
1180
+ * chargé à l'ouverture de la vue.
1181
+ *
1182
+ * Ce flux annonce les collections touchées, pas leur contenu. Chacune a déjà
1183
+ * sa route, avec ses règles — un service ne sort jamais d'ici sans être
1184
+ * expurgé de ses secrets — et les redire ici en ferait une seconde version à
1185
+ * tenir d'accord avec la première.
1186
+ *
1187
+ * Les réveils sont groupés : une synchronisation qui descend un projet touche
1188
+ * ses trois collections coup sur coup, et trois annonces feraient trois
1189
+ * rechargements là où un seul suffit.
1190
+ */
1191
+ onDataChanged: protectedProcedure.subscription(async function* ({ signal }) {
1192
+ const touched = /* @__PURE__ */ new Set();
1193
+ let wake = null;
1194
+ const mark = (collection) => () => {
1195
+ touched.add(collection);
1196
+ if (wake) {
1197
+ wake();
1198
+ wake = null;
1199
+ }
1200
+ };
1201
+ const onProjects = mark("projects");
1202
+ projectStore.events.on("saved", onProjects);
1203
+ const offs = [serviceStore.onChange(mark("services")), environmentStore.onChange(mark("environments"))];
1204
+ const onAbort = () => {
1205
+ if (wake) {
1206
+ wake();
1207
+ wake = null;
1208
+ }
1209
+ };
1210
+ signal?.addEventListener("abort", onAbort);
1211
+ try {
1212
+ while (!signal?.aborted) {
1213
+ if (touched.size > 0) {
1214
+ const collections = Array.from(touched);
1215
+ touched.clear();
1216
+ yield { collections };
1217
+ } else {
1218
+ await new Promise((resolve4) => {
1219
+ wake = resolve4;
1220
+ });
1221
+ }
1222
+ }
1223
+ } finally {
1224
+ projectStore.events.off("saved", onProjects);
1225
+ for (const off of offs) off();
1226
+ signal?.removeEventListener("abort", onAbort);
1227
+ }
1170
1228
  })
1171
1229
  });
1172
1230
 
@@ -6522,85 +6580,61 @@ async function reconcileOrgCanary(orgId) {
6522
6580
  }
6523
6581
 
6524
6582
  // ../server/src/services/cloud-sync-bridge.ts
6583
+ import { randomUUID as randomUUID6 } from "crypto";
6584
+ import { mkdir as mkdir7, rm as rm3 } from "fs/promises";
6585
+ import * as Y2 from "yjs";
6586
+
6587
+ // ../server/src/services/sync-doc-cache.ts
6588
+ import { readFileSync, renameSync, rmSync, writeFileSync, mkdirSync } from "fs";
6589
+ import { readFile as readFile4 } from "fs/promises";
6590
+ import { dirname as dirname4, join as join10 } from "path";
6525
6591
  import { randomUUID as randomUUID5 } from "crypto";
6526
- import { mkdir as mkdir8, rm as rm3 } from "fs/promises";
6527
6592
  import * as Y from "yjs";
6528
-
6529
- // ../server/src/services/org-lock.ts
6530
- import { open, readFile as readFile4, unlink, mkdir as mkdir7 } from "fs/promises";
6531
- import { readFileSync, unlinkSync } from "fs";
6532
- import { join as join10 } from "path";
6533
- var held = /* @__PURE__ */ new Set();
6534
- function lockPath(orgId) {
6535
- return join10(orgVaultRoot(orgId), "org.lock");
6536
- }
6537
- function isRunning(pid) {
6538
- if (!Number.isInteger(pid) || pid <= 0) return false;
6539
- try {
6540
- process.kill(pid, 0);
6541
- return true;
6542
- } catch (err) {
6543
- return err.code === "EPERM";
6544
- }
6593
+ var FILE = "sync-doc.bin";
6594
+ function cachePath(orgId) {
6595
+ return join10(orgVaultRoot(orgId), FILE);
6545
6596
  }
6546
- async function readLock(path) {
6597
+ async function readSyncDoc(orgId) {
6547
6598
  try {
6548
- const parsed = JSON.parse(await readFile4(path, "utf-8"));
6549
- return typeof parsed?.pid === "number" ? parsed : null;
6599
+ return new Uint8Array(await readFile4(cachePath(orgId)));
6550
6600
  } catch {
6551
6601
  return null;
6552
6602
  }
6553
6603
  }
6554
- async function acquireOrgLock(orgId) {
6555
- const path = lockPath(orgId);
6556
- await mkdir7(orgVaultRoot(orgId), { recursive: true });
6557
- for (let attempt = 0; attempt < 2; attempt++) {
6558
- try {
6559
- const handle = await open(path, "wx");
6560
- try {
6561
- const contents = { pid: process.pid, startedAt: (/* @__PURE__ */ new Date()).toISOString() };
6562
- await handle.writeFile(JSON.stringify(contents), "utf-8");
6563
- } finally {
6564
- await handle.close();
6565
- }
6566
- held.add(orgId);
6567
- return { acquired: true };
6568
- } catch (err) {
6569
- if (err.code !== "EEXIST") throw err;
6570
- }
6571
- const holder2 = await readLock(path);
6572
- if (holder2 && holder2.pid !== process.pid && isRunning(holder2.pid)) {
6573
- return { acquired: false, heldBy: holder2.pid };
6574
- }
6575
- await unlink(path).catch(() => {
6576
- });
6604
+ function mergeWith(existing, state) {
6605
+ if (!existing) return state;
6606
+ try {
6607
+ return Y.mergeUpdates([existing, state]);
6608
+ } catch {
6609
+ return state;
6577
6610
  }
6578
- const holder = await readLock(path);
6579
- return holder ? { acquired: false, heldBy: holder.pid } : { acquired: true };
6580
6611
  }
6581
- async function releaseOrgLock(orgId) {
6582
- held.delete(orgId);
6583
- const path = lockPath(orgId);
6584
- const holder = await readLock(path);
6585
- if (holder && holder.pid !== process.pid) return;
6586
- await unlink(path).catch(() => {
6587
- });
6612
+ async function writeSyncDoc(orgId, state) {
6613
+ await atomicWriteSecure(cachePath(orgId), mergeWith(await readSyncDoc(orgId), state));
6588
6614
  }
6589
- function releaseAllOrgLocksSync() {
6590
- for (const orgId of held) {
6591
- const path = lockPath(orgId);
6592
- try {
6593
- const holder = JSON.parse(readFileSync(path, "utf-8"));
6594
- if (holder.pid === process.pid) unlinkSync(path);
6595
- } catch {
6596
- }
6615
+ function writeSyncDocSync(orgId, state) {
6616
+ const path = cachePath(orgId);
6617
+ let existing = null;
6618
+ try {
6619
+ existing = new Uint8Array(readFileSync(path));
6620
+ } catch {
6621
+ }
6622
+ mkdirSync(dirname4(path), { recursive: true });
6623
+ const tmp = `${path}.${process.pid}.${randomUUID5()}.tmp`;
6624
+ try {
6625
+ writeFileSync(tmp, mergeWith(existing, state), { mode: 384 });
6626
+ renameSync(tmp, path);
6627
+ } catch (err) {
6628
+ rmSync(tmp, { force: true });
6629
+ throw err;
6597
6630
  }
6598
- held.clear();
6599
6631
  }
6600
6632
 
6601
6633
  // ../server/src/services/cloud-sync-bridge.ts
6602
6634
  var LOCAL_ORIGIN = "local-bridge";
6603
6635
  var REMOTE_ORIGIN = "remote";
6636
+ var CACHE_ORIGIN = "cache";
6637
+ var PERSIST_DEBOUNCE_MS = 1e3;
6604
6638
  var RECONNECT_DELAY_MS = 3e3;
6605
6639
  var UNAUTHENTICATED_RETRY_MS = 5 * 6e4;
6606
6640
  var OUTDATED_RETRY_MS = 30 * 6e4;
@@ -6633,12 +6667,12 @@ var ProjectHeldElsewhereError = class extends Error {
6633
6667
  code = "PROJECT_HELD_ELSEWHERE";
6634
6668
  };
6635
6669
  var OrgSyncConnection = class {
6636
- doc = new Y.Doc();
6670
+ doc = new Y2.Doc();
6637
6671
  projects = getCollection(this.doc, "projects");
6638
6672
  services = getCollection(this.doc, "services");
6639
6673
  environments = getCollection(this.doc, "environments");
6640
6674
  logParsers = getCollection(this.doc, PARSERS);
6641
- conn = randomUUID5();
6675
+ conn = randomUUID6();
6642
6676
  link;
6643
6677
  stopped = false;
6644
6678
  initializing = true;
@@ -6674,6 +6708,31 @@ var OrgSyncConnection = class {
6674
6708
  * creating a project sees it appear on their teammates' machines.
6675
6709
  */
6676
6710
  initialDocApplied = false;
6711
+ /**
6712
+ * Whether local state has been written into the doc.
6713
+ *
6714
+ * Never before the doc holds the known history — reloaded from disk, or
6715
+ * received from the cloud. Written into an empty doc, local state is
6716
+ * concurrent with every past write and loses to some of them at random: an
6717
+ * offline edit reverted, a service on disk erased by an older deletion.
6718
+ */
6719
+ seeded = false;
6720
+ /** Store applications started by remote events and not finished yet. */
6721
+ applying = /* @__PURE__ */ new Set();
6722
+ /**
6723
+ * When each entity was last changed by a remote update (`collection:id` → tick).
6724
+ *
6725
+ * Reconciliation reads the stores, waits, then writes what it read. A remote
6726
+ * change landing in between makes that read stale, and writing it would erase
6727
+ * the value that just arrived — for every member. Entities touched since the
6728
+ * read began are left alone: their application brings the disk up to date,
6729
+ * and the reconciliation it triggers starts from there.
6730
+ */
6731
+ remoteTouch = /* @__PURE__ */ new Map();
6732
+ remoteClock = 0;
6733
+ persistTimer = null;
6734
+ /** The cache write under way, so stopping can wait for it to land. */
6735
+ persisting = Promise.resolve();
6677
6736
  unsubscribes = [];
6678
6737
  onSaved = () => void this.reconcileLocalToDoc();
6679
6738
  constructor(link) {
@@ -6703,29 +6762,79 @@ var OrgSyncConnection = class {
6703
6762
  if (txn.origin !== REMOTE_ORIGIN) return;
6704
6763
  const isInitial = !this.initialDocApplied;
6705
6764
  if (name === "projects") this.initialDocApplied = true;
6706
- void this.applyDocEventsToStore(name, events, isInitial);
6765
+ this.track(this.applyDocEventsToStore(name, events, isInitial));
6707
6766
  });
6708
6767
  }
6709
6768
  this.logParsers.observeDeep((events, txn) => {
6710
6769
  if (txn.origin !== REMOTE_ORIGIN) return;
6711
- void this.applyParserEventsToStore(events);
6770
+ this.track(this.applyParserEventsToStore(events));
6712
6771
  });
6713
6772
  projectStore.events.on("saved", this.onSaved);
6714
6773
  this.unsubscribes.push(serviceStore.onChange(this.onSaved));
6715
6774
  this.unsubscribes.push(environmentStore.onChange(this.onSaved));
6716
6775
  this.unsubscribes.push(logParserStore.onLocalChange(this.onSaved));
6776
+ const cached = await readSyncDoc(this.link.orgId);
6777
+ if (cached) {
6778
+ try {
6779
+ Y2.applyUpdate(this.doc, cached, CACHE_ORIGIN);
6780
+ this.initialDocApplied = true;
6781
+ } catch (err) {
6782
+ console.error("[cloud-sync] unreadable sync cache for org %s, ignored:", this.link.orgId, err.message);
6783
+ }
6784
+ }
6785
+ this.doc.on("update", () => this.schedulePersist());
6786
+ if (cached && this.initialDocApplied) await this.seed();
6787
+ void this.streamLoop();
6788
+ }
6789
+ /** Write local state on top of the known history, then owe it to the cloud. */
6790
+ async seed() {
6791
+ this.seeded = true;
6717
6792
  await this.reconcileLocalToDoc();
6718
6793
  this.initializing = false;
6719
6794
  this.needsPush = true;
6720
- void this.streamLoop();
6721
6795
  }
6796
+ track(work) {
6797
+ this.applying.add(work);
6798
+ void work.finally(() => this.applying.delete(work));
6799
+ }
6800
+ async settleApplying() {
6801
+ while (this.applying.size > 0) await Promise.allSettled(this.applying);
6802
+ }
6803
+ schedulePersist() {
6804
+ if (this.stopped || this.persistTimer) return;
6805
+ this.persistTimer = setTimeout(() => {
6806
+ this.persistTimer = null;
6807
+ this.persisting = this.persisting.then(() => this.persist());
6808
+ }, PERSIST_DEBOUNCE_MS);
6809
+ }
6810
+ async persist() {
6811
+ if (this.stopped) return;
6812
+ try {
6813
+ await writeSyncDoc(this.link.orgId, Y2.encodeStateAsUpdate(this.doc));
6814
+ } catch (err) {
6815
+ console.error("[cloud-sync] could not save sync cache for org %s:", this.link.orgId, err.message);
6816
+ }
6817
+ }
6818
+ /** Resolves once any cache write already under way has landed. */
6722
6819
  stop() {
6723
6820
  this.stopped = true;
6724
6821
  this.state = "stopped";
6725
6822
  projectStore.events.off("saved", this.onSaved);
6726
6823
  for (const off of this.unsubscribes.splice(0)) off();
6727
6824
  this.abort?.abort();
6825
+ if (this.persistTimer) {
6826
+ clearTimeout(this.persistTimer);
6827
+ this.persistTimer = null;
6828
+ }
6829
+ if (this.seeded) {
6830
+ try {
6831
+ writeSyncDocSync(this.link.orgId, Y2.encodeStateAsUpdate(this.doc));
6832
+ } catch (err) {
6833
+ console.error("[cloud-sync] could not save sync cache for org %s:", this.link.orgId, err.message);
6834
+ }
6835
+ }
6728
6836
  this.doc.destroy();
6837
+ return this.persisting;
6729
6838
  }
6730
6839
  // ---- Transport -------------------------------------------------------
6731
6840
  /**
@@ -6803,7 +6912,7 @@ var OrgSyncConnection = class {
6803
6912
  if (!svRes.ok) return;
6804
6913
  const { sv } = await svRes.json();
6805
6914
  const cloudSv = new Uint8Array(Buffer.from(sv, "base64"));
6806
- const diff = Y.encodeStateAsUpdate(this.doc, cloudSv);
6915
+ const diff = Y2.encodeStateAsUpdate(this.doc, cloudSv);
6807
6916
  await this.pushUpdate(diff);
6808
6917
  } catch (err) {
6809
6918
  if (err instanceof SyncAuthError || err instanceof SyncOutdatedError) throw err;
@@ -6865,7 +6974,7 @@ var OrgSyncConnection = class {
6865
6974
  }
6866
6975
  async streamOnce() {
6867
6976
  this.abort = new AbortController();
6868
- const since = Buffer.from(Y.encodeStateVector(this.doc)).toString("base64");
6977
+ const since = Buffer.from(Y2.encodeStateVector(this.doc)).toString("base64");
6869
6978
  const res = await fetch(this.url(`/stream?conn=${this.conn}&since=${encodeURIComponent(since)}`), {
6870
6979
  headers: { Authorization: await this.authHeader(), [APP_VERSION_HEADER]: appVersion },
6871
6980
  signal: this.abort.signal
@@ -6889,8 +6998,17 @@ var OrgSyncConnection = class {
6889
6998
  try {
6890
6999
  const payload = JSON.parse(line.slice(6));
6891
7000
  const update = new Uint8Array(Buffer.from(payload.update, "base64"));
6892
- Y.applyUpdate(this.doc, update, REMOTE_ORIGIN);
7001
+ Y2.applyUpdate(this.doc, update, REMOTE_ORIGIN);
6893
7002
  } catch {
7003
+ continue;
7004
+ }
7005
+ if (!this.seeded) {
7006
+ this.initialDocApplied = true;
7007
+ await this.settleApplying();
7008
+ if (this.stopped) return;
7009
+ await this.seed();
7010
+ await this.initialPush();
7011
+ this.needsPush = false;
6894
7012
  }
6895
7013
  }
6896
7014
  }
@@ -6971,7 +7089,7 @@ var OrgSyncConnection = class {
6971
7089
  }
6972
7090
  const isLocal = existing?.orgId === this.link.orgId;
6973
7091
  if (!inDoc && !isLocal) return false;
6974
- await mkdir8(projectVaultRoot(this.link.orgId, projectId), { recursive: true });
7092
+ await mkdir7(projectVaultRoot(this.link.orgId, projectId), { recursive: true });
6975
7093
  this.tracked.add(projectId);
6976
7094
  if (inDoc) await this.pullFromDoc([projectId]);
6977
7095
  else await this.reconcileLocalToDoc();
@@ -7012,6 +7130,7 @@ var OrgSyncConnection = class {
7012
7130
  } finally {
7013
7131
  this.pulling = false;
7014
7132
  }
7133
+ await serviceStore.relocateAll();
7015
7134
  await this.reconcileLocalToDoc();
7016
7135
  }
7017
7136
  // ---- Local ↔ Doc reconciliation --------------------------------------
@@ -7034,6 +7153,7 @@ var OrgSyncConnection = class {
7034
7153
  if (typeof topKey === "string") affected.add(topKey);
7035
7154
  }
7036
7155
  }
7156
+ for (const id of [...deleted, ...affected]) this.remoteTouch.set(`${name}:${id}`, ++this.remoteClock);
7037
7157
  for (const id of deleted) {
7038
7158
  if (!this.isTrackedForDeletion(name, id)) continue;
7039
7159
  await this.deleteLocally(name, id);
@@ -7186,7 +7306,9 @@ var OrgSyncConnection = class {
7186
7306
  * propagate — otherwise a service could never be removed.
7187
7307
  */
7188
7308
  async reconcileLocalToDoc() {
7189
- if (this.stopped || this.pulling) return;
7309
+ if (this.stopped || this.pulling || !this.seeded) return;
7310
+ const readAt = this.remoteClock;
7311
+ const touchedSinceRead = (name, id) => (this.remoteTouch.get(`${name}:${id}`) ?? 0) > readAt;
7190
7312
  const projects = (await projectStore.listDiskFormByOrg(this.link.orgId)).filter((p) => !this.refusalFor(p.id));
7191
7313
  const projectIds = projects.map((p) => p.id);
7192
7314
  const serviceIds = [...new Set(projects.flatMap((p) => p.serviceIds ?? []))];
@@ -7204,10 +7326,12 @@ var OrgSyncConnection = class {
7204
7326
  const collection = this.collection(name);
7205
7327
  const entities = local[name];
7206
7328
  const ids = new Set(entities.map((e) => e.id));
7207
- for (const entity of entities) writeEntity(collection, entity.id, entity);
7329
+ for (const entity of entities) {
7330
+ if (!touchedSinceRead(name, entity.id)) writeEntity(collection, entity.id, entity);
7331
+ }
7208
7332
  if (name === "projects") continue;
7209
7333
  for (const id of Array.from(collection.keys())) {
7210
- if (ids.has(id)) continue;
7334
+ if (ids.has(id) || touchedSinceRead(name, id)) continue;
7211
7335
  if (this.belongsToOwnedProject(name, id, ownedProjectIds)) collection.delete(id);
7212
7336
  }
7213
7337
  }
@@ -7243,21 +7367,12 @@ var OrgSyncConnection = class {
7243
7367
  };
7244
7368
  var CloudSyncBridge = class {
7245
7369
  connections = /* @__PURE__ */ new Map();
7246
- /**
7247
- * Orgs another instance holds the lock on — reported, not retried blindly.
7248
- *
7249
- * Le pid du détenteur, et non un simple drapeau : « un autre Runeya de cette
7250
- * machine » ne dit pas lequel fermer, et l'utilisateur en a souvent trois.
7251
- * Le port se déduit du pid par le registre d'instances, au moment de rendre
7252
- * l'état — jamais mémorisé ici, où il vieillirait.
7253
- */
7254
- locked = /* @__PURE__ */ new Map();
7255
7370
  /**
7256
7371
  * Orgs whose key this machine does not have.
7257
7372
  *
7258
- * Held here for the same reason as `locked`: the connection is never opened,
7259
- * so there is nothing to ask for its state and an org that cannot sync
7260
- * until a human supplies a key must not read as merely "stopped".
7373
+ * Tenues à part : la connexion n'est jamais ouverte, donc il n'y a rien à qui
7374
+ * demander son état et une organisation qui ne peut pas synchroniser tant
7375
+ * qu'un humain n'a pas fourni de clé ne doit pas se lire « arrêtée ».
7261
7376
  */
7262
7377
  keyMismatch = /* @__PURE__ */ new Set();
7263
7378
  started = false;
@@ -7341,22 +7456,14 @@ var CloudSyncBridge = class {
7341
7456
  const live = Array.from(this.connections.entries()).map(([orgId, conn]) => ({
7342
7457
  orgId,
7343
7458
  state: conn.getState(),
7344
- lastIncompatibleVersion: conn.getLastIncompatibleVersion(),
7345
- heldByPid: null
7346
- }));
7347
- const locked = Array.from(this.locked).filter(([orgId]) => !this.connections.has(orgId)).map(([orgId, pid]) => ({
7348
- orgId,
7349
- state: "locked",
7350
- lastIncompatibleVersion: null,
7351
- heldByPid: pid
7459
+ lastIncompatibleVersion: conn.getLastIncompatibleVersion()
7352
7460
  }));
7353
7461
  const mismatched = Array.from(this.keyMismatch).filter((orgId) => !this.connections.has(orgId)).map((orgId) => ({
7354
7462
  orgId,
7355
7463
  state: "key-mismatch",
7356
- lastIncompatibleVersion: null,
7357
- heldByPid: null
7464
+ lastIncompatibleVersion: null
7358
7465
  }));
7359
- return [...live, ...locked, ...mismatched];
7466
+ return [...live, ...mismatched];
7360
7467
  }
7361
7468
  /**
7362
7469
  * Follow one project of an org on this machine, pulling it now.
@@ -7402,20 +7509,6 @@ var CloudSyncBridge = class {
7402
7509
  );
7403
7510
  }
7404
7511
  this.keyMismatch.delete(link.orgId);
7405
- const lock = await acquireOrgLock(link.orgId).catch((err) => {
7406
- console.error("[cloud-sync] could not take the lock for org %s:", link.orgId, err.message);
7407
- return { acquired: false, heldBy: 0 };
7408
- });
7409
- if (!lock.acquired) {
7410
- console.error(
7411
- "[cloud-sync] org %s is already being synced by another Runeya (pid %d) \u2014 not syncing it here",
7412
- link.orgId,
7413
- lock.heldBy
7414
- );
7415
- this.locked.set(link.orgId, lock.heldBy);
7416
- return;
7417
- }
7418
- this.locked.delete(link.orgId);
7419
7512
  const conn = new OrgSyncConnection(link);
7420
7513
  this.connections.set(link.orgId, conn);
7421
7514
  try {
@@ -7427,23 +7520,23 @@ var CloudSyncBridge = class {
7427
7520
  disconnect(orgId) {
7428
7521
  const existing = this.connections.get(orgId);
7429
7522
  if (existing) {
7430
- existing.stop();
7523
+ void existing.stop();
7431
7524
  this.connections.delete(orgId);
7432
- void releaseOrgLock(orgId);
7433
7525
  }
7434
7526
  }
7527
+ /** Stops at once; the promise only says when pending cache writes have landed. */
7435
7528
  stopAll() {
7436
- for (const conn of this.connections.values()) conn.stop();
7529
+ const stopping = [...this.connections.values()].map((conn) => conn.stop());
7437
7530
  this.connections.clear();
7438
- this.locked.clear();
7439
7531
  this.keyMismatch.clear();
7440
- releaseAllOrgLocksSync();
7532
+ return Promise.all(stopping).then(() => {
7533
+ });
7441
7534
  }
7442
7535
  };
7443
7536
  var cloudSyncBridge = new CloudSyncBridge();
7444
7537
 
7445
7538
  // ../server/src/services/key-adoption.ts
7446
- import { readdir as readdir3, readFile as readFile5, writeFile as writeFile6, mkdir as mkdir9, copyFile, rename as rename4, stat as stat5 } from "fs/promises";
7539
+ import { readdir as readdir3, readFile as readFile5, writeFile as writeFile6, mkdir as mkdir8, copyFile, rename as rename4, stat as stat5 } from "fs/promises";
7447
7540
  import { join as join11 } from "path";
7448
7541
  import { createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2, randomBytes as randomBytes2 } from "crypto";
7449
7542
  var ALGORITHM = "aes-256-gcm";
@@ -7542,7 +7635,7 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
7542
7635
  const backups = [];
7543
7636
  for (const vaultRoot of touchedRoots) {
7544
7637
  const backupDir = join11(vaultRoot, `backup-key-${stamp}`);
7545
- await mkdir9(backupDir, { recursive: true });
7638
+ await mkdir8(backupDir, { recursive: true });
7546
7639
  for (const name of await jsonFilesIn(vaultRoot)) {
7547
7640
  await copyFile(join11(vaultRoot, name), join11(backupDir, name));
7548
7641
  }
@@ -7612,10 +7705,6 @@ async function assertOrgKey(orgId) {
7612
7705
  function syncState(orgId) {
7613
7706
  return cloudSyncBridge.states().find((s) => s.orgId === orgId)?.state ?? "stopped";
7614
7707
  }
7615
- async function syncLockHolder(orgId) {
7616
- const pid = cloudSyncBridge.states().find((s) => s.orgId === orgId)?.heldByPid;
7617
- return pid ? describeInstance(pid) : null;
7618
- }
7619
7708
  var cloudSyncRouter = router({
7620
7709
  /**
7621
7710
  * Follow one more project of an org, and pull it now.
@@ -7650,7 +7739,7 @@ var cloudSyncRouter = router({
7650
7739
  }
7651
7740
  try {
7652
7741
  const pulled = await cloudSyncBridge.followProject(input.orgId, input.projectId);
7653
- return { pulled, state: syncState(input.orgId), heldBy: await syncLockHolder(input.orgId) };
7742
+ return { pulled, state: syncState(input.orgId) };
7654
7743
  } catch (err) {
7655
7744
  if (err instanceof ProjectHeldElsewhereError) {
7656
7745
  throw new TRPCError19({ code: "CONFLICT", message: err.code, cause: err });
@@ -7987,9 +8076,8 @@ var cloudSyncRouter = router({
7987
8076
  list: protectedProcedure.query(async () => {
7988
8077
  const links = await orgsToSync();
7989
8078
  const states = new Map(cloudSyncBridge.states().map((s) => [s.orgId, s]));
7990
- return Promise.all(links.map(async (l) => {
8079
+ return links.map((l) => {
7991
8080
  const found = states.get(l.orgId);
7992
- const heldBy = found?.heldByPid ? await describeInstance(found.heldByPid) : null;
7993
8081
  return {
7994
8082
  orgId: l.orgId,
7995
8083
  cloudUrl: l.cloudUrl,
@@ -7997,10 +8085,9 @@ var cloudSyncRouter = router({
7997
8085
  // Renseigné seulement quand le cloud a refusé cette app comme trop
7998
8086
  // ancienne : c'est lui qui publie le plancher, on ne le devine pas. La
7999
8087
  // borne est exclusive — il faut strictement plus récent que ce numéro.
8000
- lastIncompatibleVersion: found?.lastIncompatibleVersion ?? null,
8001
- heldBy
8088
+ lastIncompatibleVersion: found?.lastIncompatibleVersion ?? null
8002
8089
  };
8003
- }));
8090
+ });
8004
8091
  }),
8005
8092
  /**
8006
8093
  * The cloud instance behind every org vault on this machine.
@@ -8019,7 +8106,7 @@ var cloudSyncRouter = router({
8019
8106
  // ../server/src/trpc/routers/filesystem.ts
8020
8107
  import { readdir as readdir4, stat as stat6 } from "fs/promises";
8021
8108
  import { homedir as homedir3 } from "os";
8022
- import { isAbsolute, join as join12, resolve as resolve2, dirname as dirname4, basename } from "path";
8109
+ import { isAbsolute, join as join12, resolve as resolve2, dirname as dirname5, basename } from "path";
8023
8110
  import { z as z24 } from "zod";
8024
8111
  var MAX_ENTRIES2 = 500;
8025
8112
  var PATH_SCHEMA = z24.string().min(1).max(4096);
@@ -8067,7 +8154,7 @@ var filesystemRouter = router({
8067
8154
  return {
8068
8155
  path: dir,
8069
8156
  // Null at the filesystem root, which is what stops "up" from looping.
8070
- parent: dirname4(dir) === dir ? null : dirname4(dir),
8157
+ parent: dirname5(dir) === dir ? null : dirname5(dir),
8071
8158
  name: basename(dir) || dir,
8072
8159
  entries: entries2,
8073
8160
  truncated,
@@ -8322,7 +8409,7 @@ async function ensureFilePermissions() {
8322
8409
  }
8323
8410
 
8324
8411
  // ../server/src/services/vault-migration.ts
8325
- import { readdir as readdir5, readFile as readFile6, writeFile as writeFile7, mkdir as mkdir10, copyFile as copyFile2, unlink as unlink2, rename as rename5, stat as stat8 } from "fs/promises";
8412
+ import { readdir as readdir5, readFile as readFile6, writeFile as writeFile7, mkdir as mkdir9, copyFile as copyFile2, unlink, rename as rename5, stat as stat8 } from "fs/promises";
8326
8413
  import { join as join13 } from "path";
8327
8414
  var KEY_FILES = [".encryption.key.enc", ".runeya-verify"];
8328
8415
  var MACHINE_FILES = [
@@ -8354,7 +8441,7 @@ async function openLegacyVault(legacyRoot, masterPassword) {
8354
8441
  async function migrateLegacyVault(legacyRoot, machineRootDir, legacyKey, machineKey, now) {
8355
8442
  const stamp = now.toISOString().replace(/[:.]/g, "-").substring(0, 19);
8356
8443
  const backupDir = join13(legacyRoot, `backup-${stamp}`);
8357
- await mkdir10(backupDir, { recursive: true });
8444
+ await mkdir9(backupDir, { recursive: true });
8358
8445
  const jsonFiles = await vaultJsonFiles(legacyRoot);
8359
8446
  for (const name of [...jsonFiles, ...KEY_FILES]) {
8360
8447
  if (await exists2(join13(legacyRoot, name))) {
@@ -8388,7 +8475,7 @@ async function migrateLegacyVault(legacyRoot, machineRootDir, legacyKey, machine
8388
8475
  );
8389
8476
  }
8390
8477
  }
8391
- await mkdir10(machineRootDir, { recursive: true });
8478
+ await mkdir9(machineRootDir, { recursive: true });
8392
8479
  const moved = [];
8393
8480
  const skipped = [];
8394
8481
  for (const name of MACHINE_FILES) {
@@ -8400,18 +8487,18 @@ async function migrateLegacyVault(legacyRoot, machineRootDir, legacyKey, machine
8400
8487
  continue;
8401
8488
  }
8402
8489
  await copyFile2(from, to);
8403
- await unlink2(from);
8490
+ await unlink(from);
8404
8491
  moved.push(name);
8405
8492
  }
8406
8493
  for (const name of KEY_FILES) {
8407
8494
  const path = join13(legacyRoot, name);
8408
- if (await exists2(path)) await unlink2(path);
8495
+ if (await exists2(path)) await unlink(path);
8409
8496
  }
8410
8497
  return { backupDir, rekeyed, moved, skipped };
8411
8498
  }
8412
8499
 
8413
8500
  // ../server/src/services/settings-migration.ts
8414
- import { readFile as readFile7, writeFile as writeFile8, rename as rename6, unlink as unlink3, mkdir as mkdir11, chmod as chmod4, stat as stat9 } from "fs/promises";
8501
+ import { readFile as readFile7, writeFile as writeFile8, rename as rename6, unlink as unlink2, mkdir as mkdir10, chmod as chmod4, stat as stat9 } from "fs/promises";
8415
8502
  import { join as join14 } from "path";
8416
8503
  var SETTINGS_FILE = "settings.json";
8417
8504
  var SETTINGS_PRIVATE_FILE = "settings.private.json";
@@ -8425,14 +8512,14 @@ async function legacySource(filename) {
8425
8512
  return null;
8426
8513
  }
8427
8514
  async function moveInto(root, filename, from) {
8428
- await mkdir11(root, { recursive: true });
8515
+ await mkdir10(root, { recursive: true });
8429
8516
  const to = join14(root, filename);
8430
8517
  const contents = await readFile7(from, "utf-8");
8431
8518
  const tmp = to + ".tmp";
8432
8519
  await writeFile8(tmp, contents, "utf-8");
8433
8520
  await rename6(tmp, to);
8434
8521
  await chmod4(to, 384);
8435
- await unlink3(from);
8522
+ await unlink2(from);
8436
8523
  }
8437
8524
  async function migrateSettingsIntoVaults() {
8438
8525
  const report = { movedTo: null, files: [], ambiguous: [] };
@@ -8465,16 +8552,16 @@ async function migrateSettingsIntoVaults() {
8465
8552
  // ../server/src/migrations/migrate-from-legacy.ts
8466
8553
  import { createRequire } from "module";
8467
8554
  import { randomBytes as randomBytes3, createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3 } from "crypto";
8468
- import { randomUUID as randomUUID6 } from "crypto";
8555
+ import { randomUUID as randomUUID7 } from "crypto";
8469
8556
  import {
8470
8557
  readFile as readFile8,
8471
8558
  writeFile as writeFile9,
8472
8559
  rename as rename7,
8473
- mkdir as mkdir12,
8560
+ mkdir as mkdir11,
8474
8561
  access as access2,
8475
8562
  readdir as readdir6
8476
8563
  } from "fs/promises";
8477
- import { join as join15, dirname as dirname5 } from "path";
8564
+ import { join as join15, dirname as dirname6 } from "path";
8478
8565
  var _require = createRequire(import.meta.url);
8479
8566
  var PARSER_ID_MAP = {
8480
8567
  "stack-monitor-parser-jsons": "native:json",
@@ -8626,7 +8713,7 @@ async function runLegacyMigration(dataDir) {
8626
8713
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-").substring(0, 19);
8627
8714
  const legacyTmp = `${legacyRoot}-tmp`;
8628
8715
  await rename7(legacyRoot, legacyTmp);
8629
- await mkdir12(dataDir, { recursive: true });
8716
+ await mkdir11(dataDir, { recursive: true });
8630
8717
  const legacyOld = join15(dataDir, `backup-${timestamp}`);
8631
8718
  await rename7(legacyTmp, legacyOld);
8632
8719
  console.log(`[legacy-migration] Legacy data backed up to ${legacyOld}`);
@@ -8683,11 +8770,11 @@ async function runLegacyMigration(dataDir) {
8683
8770
  const data = await readEncrypted(join15(parsersDir, file));
8684
8771
  if (data?.id) legacyParsers.push(data);
8685
8772
  }
8686
- const projectMonoId = randomUUID6();
8773
+ const projectMonoId = randomUUID7();
8687
8774
  const envIdMap = {};
8688
8775
  const labelToKey = {};
8689
8776
  for (const [name, legacyEnv] of Object.entries(legacyEnvs)) {
8690
- envIdMap[name] = randomUUID6();
8777
+ envIdMap[name] = randomUUID7();
8691
8778
  if (legacyEnv?.label) labelToKey[legacyEnv.label] = name;
8692
8779
  }
8693
8780
  const runeEnvs = [];
@@ -8712,7 +8799,7 @@ async function runLegacyMigration(dataDir) {
8712
8799
  if (hasInvalidInterpolation(value)) continue;
8713
8800
  const cleaned = cleanVarKey(key);
8714
8801
  if (inheritedVars[cleaned] === value) continue;
8715
- const varId = randomUUID6();
8802
+ const varId = randomUUID7();
8716
8803
  variables[varId] = makeVariable(cleaned, value);
8717
8804
  varIdLookup.set(`${envIdMap[name]}:${cleaned}`, varId);
8718
8805
  }
@@ -8733,7 +8820,7 @@ async function runLegacyMigration(dataDir) {
8733
8820
  const serviceIdMap = {};
8734
8821
  const runeServices = [];
8735
8822
  for (const [name, legacy] of Object.entries(legacyServices)) {
8736
- const id = randomUUID6();
8823
+ const id = randomUUID7();
8737
8824
  serviceIdMap[name] = id;
8738
8825
  const rootPath = legacy.rootPath || "";
8739
8826
  const rootPathCwd = rootPath && rootPath !== "." ? rootPath : "";
@@ -8742,7 +8829,7 @@ async function runLegacyMigration(dataDir) {
8742
8829
  const parts = [cmd.spawnCmd, ...cmd.spawnArgs || []].filter(Boolean);
8743
8830
  if (!parts.length) continue;
8744
8831
  commands.push({
8745
- id: cmd.id || randomUUID6(),
8832
+ id: cmd.id || randomUUID7(),
8746
8833
  label: "Launch",
8747
8834
  command: parts.join(" "),
8748
8835
  cwd: cmd.spawnOptions?.cwd || "",
@@ -8803,7 +8890,7 @@ async function runLegacyMigration(dataDir) {
8803
8890
  const legacyBootstrapCmds = container.bootstrap?.commands || [];
8804
8891
  if (legacyBootstrapCmds.length > 0) {
8805
8892
  dockerConfig.bootstrapCommands = legacyBootstrapCmds.filter((bs) => bs.cmd || bs.entrypoint).map((bs, idx) => ({
8806
- id: bs.id || randomUUID6(),
8893
+ id: bs.id || randomUUID7(),
8807
8894
  label: bs.label || `Bootstrap ${idx + 1}`,
8808
8895
  command: bs.cmd || "",
8809
8896
  ...bs.entrypoint ? { entrypoint: bs.entrypoint } : {},
@@ -8851,7 +8938,7 @@ async function runLegacyMigration(dataDir) {
8851
8938
  cwd: serviceCwd,
8852
8939
  runner: dockerConfig ? "docker" : "native",
8853
8940
  shortcuts: (legacy.shortcuts || []).filter((s) => s.spawnCmd || s.label).map((s) => ({
8854
- id: s.id || randomUUID6(),
8941
+ id: s.id || randomUUID7(),
8855
8942
  label: s.label || s.spawnCmd || "",
8856
8943
  command: [s.spawnCmd, ...s.spawnArgs || []].filter(Boolean).join(" "),
8857
8944
  ...s.spawnOptions?.cwd ? { cwd: s.spawnOptions.cwd } : {}
@@ -8891,7 +8978,7 @@ async function runLegacyMigration(dataDir) {
8891
8978
  );
8892
8979
  if (!svcScopedEnv) {
8893
8980
  svcScopedEnv = {
8894
- id: randomUUID6(),
8981
+ id: randomUUID7(),
8895
8982
  projectId: projectMonoId,
8896
8983
  name: `${service?.name || name} (${globalEnv.name})`,
8897
8984
  scope: "service",
@@ -8915,7 +9002,7 @@ async function runLegacyMigration(dataDir) {
8915
9002
  const varPost = typeof varData === "object" ? String(varData.suffix ?? "") : "";
8916
9003
  if (!varKey || existingKeys.has(cleanVarKey(varKey))) continue;
8917
9004
  const cleaned = cleanVarKey(varKey);
8918
- const varId = randomUUID6();
9005
+ const varId = randomUUID7();
8919
9006
  svcScopedEnv.variables[varId] = makeVariable(cleaned, varValue, varPre, varPost);
8920
9007
  existingKeys.add(cleaned);
8921
9008
  }
@@ -8935,7 +9022,7 @@ async function runLegacyMigration(dataDir) {
8935
9022
  );
8936
9023
  if (!svcScopedEnv) {
8937
9024
  svcScopedEnv = {
8938
- id: randomUUID6(),
9025
+ id: randomUUID7(),
8939
9026
  projectId: projectMonoId,
8940
9027
  name: `${service?.name || serviceName} (${globalEnv.name})`,
8941
9028
  scope: "service",
@@ -8956,7 +9043,7 @@ async function runLegacyMigration(dataDir) {
8956
9043
  const baseEntry = Object.entries(svcScopedEnv.variables).find(([, v]) => v.key === cleaned);
8957
9044
  let varId = baseEntry?.[0];
8958
9045
  if (!varId) {
8959
- varId = randomUUID6();
9046
+ varId = randomUUID7();
8960
9047
  svcScopedEnv.variables[varId] = {
8961
9048
  key: cleaned,
8962
9049
  value: { value: "", pre: "", post: "", isSecret: false, shareWithAi: false, injectIntoAi: false, required: false, overrideOnly: false, description: "" }
@@ -8986,13 +9073,13 @@ async function runLegacyMigration(dataDir) {
8986
9073
  flatOverrides[varId] = makeVariable(cleaned, value);
8987
9074
  }
8988
9075
  } else {
8989
- flatOverrides[randomUUID6()] = makeVariable(cleaned, value);
9076
+ flatOverrides[randomUUID7()] = makeVariable(cleaned, value);
8990
9077
  }
8991
9078
  } else {
8992
9079
  const cleaned = cleanVarKey(key);
8993
9080
  const existingVarId = Object.entries(env2.variables).find(([, v]) => v.key === cleaned)?.[0];
8994
9081
  if (!existingVarId) {
8995
- const varId = randomUUID6();
9082
+ const varId = randomUUID7();
8996
9083
  env2.variables[varId] = makeVariable(cleaned, value);
8997
9084
  varIdLookup.set(`${envId}:${cleaned}`, varId);
8998
9085
  }
@@ -9083,7 +9170,7 @@ async function runOverrideOnlyMigration(dataDir) {
9083
9170
  const { resolve: resolve4 } = await import("path");
9084
9171
  const abDataDir = resolve4(dataDir);
9085
9172
  const candidateDirs = [
9086
- join15(dirname5(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9173
+ join15(dirname6(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9087
9174
  join15(abDataDir, "dbs", "overrides")
9088
9175
  ];
9089
9176
  let overridesDir = null;
@@ -9176,7 +9263,7 @@ async function runOverrideOnlyMigration(dataDir) {
9176
9263
  if (isSameAsBase(value, baseVar)) continue;
9177
9264
  flatOverrides[varId] = makeVariable(cleaned, value);
9178
9265
  } else {
9179
- flatOverrides[randomUUID6()] = makeVariable(cleaned, value);
9266
+ flatOverrides[randomUUID7()] = makeVariable(cleaned, value);
9180
9267
  }
9181
9268
  }
9182
9269
  }
@@ -9213,7 +9300,7 @@ async function runOverrideOnlyMigration(dataDir) {
9213
9300
  );
9214
9301
  if (!svcScopedEnv) {
9215
9302
  svcScopedEnv = {
9216
- id: randomUUID6(),
9303
+ id: randomUUID7(),
9217
9304
  projectId: globalEnv["projectId"],
9218
9305
  name: `${service?.["name"] || serviceName} (${globalEnv["name"]})`,
9219
9306
  scope: "service",
@@ -9235,7 +9322,7 @@ async function runOverrideOnlyMigration(dataDir) {
9235
9322
  const baseEntry = Object.entries(svcScopedEnv["variables"]).find(([, v]) => v.key === cleaned);
9236
9323
  let varId = baseEntry?.[0];
9237
9324
  if (!varId) {
9238
- varId = randomUUID6();
9325
+ varId = randomUUID7();
9239
9326
  svcScopedEnv["variables"][varId] = {
9240
9327
  key: cleaned,
9241
9328
  value: { value: "", pre: "", post: "", isSecret: false, shareWithAi: false, injectIntoAi: false, required: false, overrideOnly: false, description: "" }
@@ -10425,7 +10512,7 @@ async function createLocalServer() {
10425
10512
  stopClaudeTranscriptWatcher();
10426
10513
  stopCodexTranscriptWatcher();
10427
10514
  imageCleanupService.stop();
10428
- cloudSyncBridge.stopAll();
10515
+ void cloudSyncBridge.stopAll();
10429
10516
  await Promise.all([
10430
10517
  unregisterInstance(),
10431
10518
  agentSpawner.shutdown(),
@@ -10442,7 +10529,7 @@ async function createLocalServer() {
10442
10529
  ]);
10443
10530
  console.log("[server] Shutdown complete");
10444
10531
  };
10445
- const { initCompanion } = await import("./companion-4RQ3AMOL.js");
10532
+ const { initCompanion } = await import("./companion-HEJHC3UR.js");
10446
10533
  initCompanion();
10447
10534
  return { app, server, wss, shutdown };
10448
10535
  }
@@ -10572,7 +10659,7 @@ function onTrayServicesChanged(listener) {
10572
10659
  }
10573
10660
 
10574
10661
  // ../server/src/services/tray-icon.ts
10575
- import { mkdir as mkdir13, writeFile as writeFile10, rename as rename8 } from "fs/promises";
10662
+ import { mkdir as mkdir12, writeFile as writeFile10, rename as rename8 } from "fs/promises";
10576
10663
  import { join as join17 } from "path";
10577
10664
 
10578
10665
  // ../server/src/services/png-to-ico.ts
@@ -10761,7 +10848,7 @@ async function renderThemedIcon(platform) {
10761
10848
  }
10762
10849
  async function writeTrayIcon(stem, png, platform) {
10763
10850
  const dir = trayIconDir();
10764
- await mkdir13(dir, { recursive: true });
10851
+ await mkdir12(dir, { recursive: true });
10765
10852
  const path = join17(dir, stem);
10766
10853
  if (platform === "win32") {
10767
10854
  const ico = pngToIco(png);
@@ -10889,4 +10976,4 @@ export {
10889
10976
  startProcess,
10890
10977
  stopProcess
10891
10978
  };
10892
- //# sourceMappingURL=src-NRKK27F3.js.map
10979
+ //# sourceMappingURL=src-YUVA6WCM.js.map