@runeya/runeya 2.0.122 → 2.0.124

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 (224) hide show
  1. package/{agent-manager-BSPEFZKZ.js → agent-manager-FZFFWISA.js} +3 -3
  2. package/{chat-SE5GIT4B.js → chat-JIJQ7IJS.js} +6 -6
  3. package/{chunk-XTLQOYLT.js → chunk-4PN7QBNM.js} +58 -6
  4. package/chunk-4PN7QBNM.js.map +1 -0
  5. package/{chunk-BVBK2WII.js → chunk-GKK3ACWB.js} +16 -11
  6. package/chunk-GKK3ACWB.js.map +1 -0
  7. package/{chunk-VNLIA5PV.js → chunk-H22YLVQE.js} +11 -6
  8. package/chunk-H22YLVQE.js.map +1 -0
  9. package/{chunk-GL7WA5K3.js → chunk-HK5QNU6P.js} +28 -3
  10. package/chunk-HK5QNU6P.js.map +1 -0
  11. package/{chunk-NIU3CN5A.js → chunk-N3ZI35SC.js} +2 -2
  12. package/{companion-HEJHC3UR.js → companion-OZODV5BR.js} +4 -4
  13. package/index.js +3 -3
  14. package/package.json +1 -1
  15. package/{settings-manager-4GAINSJO.js → settings-manager-MAVD4GAS.js} +3 -3
  16. package/{src-YUVA6WCM.js → src-SGSG2RSF.js} +98 -18
  17. package/src-SGSG2RSF.js.map +1 -0
  18. package/web/assets/{AgentScalarChatInterface.vue-DrcrJYKe.js → AgentScalarChatInterface.vue-Bv7WQetq.js} +1 -1
  19. package/web/assets/{AgentTerminalPage-BonnuSSS.js → AgentTerminalPage-CMA5oI2T.js} +1 -1
  20. package/web/assets/AiChatPage-C0Ho1rG3.js +1 -0
  21. package/web/assets/{AppLayout-DRTTSl7g.js → AppLayout-DBKRAp0R.js} +1 -1
  22. package/web/assets/{AuditPage-CBWGaY0D.js → AuditPage-fZVhSJlE.js} +1 -1
  23. package/web/assets/CloudAccountPage-2LiTQCKr.js +1 -0
  24. package/web/assets/{CloudAccountPage-DvbOBtHJ.js → CloudAccountPage-CunPTy1b.js} +1 -1
  25. package/web/assets/{CloudMessagingPage-BB-_RdEk.js → CloudMessagingPage-DWciFn32.js} +1 -1
  26. package/web/assets/{DashboardPage-MdYRjTwv.js → DashboardPage-3psdQljM.js} +1 -1
  27. package/web/assets/{DirectoryPickerDialog-DROtNZ9T.js → DirectoryPickerDialog-DiiAUQKg.js} +1 -1
  28. package/web/assets/{EditorIcon-LCl9V_-a.js → EditorIcon-BZyy2C12.js} +1 -1
  29. package/web/assets/{EnvironmentForm-BUadxutb.js → EnvironmentForm-MRC8U5op.js} +1 -1
  30. package/web/assets/{EnvironmentFormPage-Do3NwXL5.js → EnvironmentFormPage-gd8fGS8P.js} +1 -1
  31. package/web/assets/{EnvironmentListPage-DiG8nF1p.js → EnvironmentListPage-DgbclvZs.js} +1 -1
  32. package/web/assets/{KanbanBoardPage-_QCZ2A2f.js → KanbanBoardPage-BBT0gqjT.js} +3 -3
  33. package/web/assets/{KanbanListPage-nyfKMn50.js → KanbanListPage-CidIQgAq.js} +1 -1
  34. package/web/assets/{LaunchProjectPage-VHAUZ-cq.js → LaunchProjectPage-DBtkrI-A.js} +1 -1
  35. package/web/assets/{LaunchServicesPage-CRv2zJxH.js → LaunchServicesPage-DdmfVxYL.js} +1 -1
  36. package/web/assets/{LogViewer-DcoQF_33.js → LogViewer-CvDPgFjq.js} +1 -1
  37. package/web/assets/{OrgKeyPrompt-X9hHtpi9.js → OrgKeyPrompt-D3RmJEtb.js} +1 -1
  38. package/web/assets/{ProcessControls-PKQWukd7.js → ProcessControls-neMxqIY_.js} +1 -1
  39. package/web/assets/{ProcessDetailPage-DhFoi4DT.js → ProcessDetailPage-Dj0L8Jz0.js} +1 -1
  40. package/web/assets/{ProcessMetrics-CMewzyxA.js → ProcessMetrics-Bb7yNIVd.js} +1 -1
  41. package/web/assets/{RandomJobTestPage-CErdKP1K.js → RandomJobTestPage-ohHAOaio.js} +1 -1
  42. package/web/assets/{ScenarioEditorPage-CpRlfU3g.js → ScenarioEditorPage-BIcmG3wo.js} +1 -1
  43. package/web/assets/{SendToChatDialog-DIp62wvw.js → SendToChatDialog-oi4KFAVq.js} +1 -1
  44. package/web/assets/{ServiceControlsBar-Bk4M-tKR.js → ServiceControlsBar-GgoPszoH.js} +1 -1
  45. package/web/assets/{ServiceDetailPage-BxAZTqFu.js → ServiceDetailPage-CIDlO0iu.js} +1 -1
  46. package/web/assets/ServiceFormPage-Q_M2GgKE.css +1 -0
  47. package/web/assets/ServiceFormPage-p3AUhHLN.js +1 -0
  48. package/web/assets/{SettingsPage-Dx1eYZKP.js → SettingsPage-B_heumvd.js} +4 -4
  49. package/web/assets/{UnlockPage-CgynzFN3.js → UnlockPage-nz_1VQWy.js} +1 -1
  50. package/web/assets/{VaultMigrationPage-Cw--n60U.js → VaultMigrationPage-B_nZC8Cc.js} +1 -1
  51. package/web/assets/{VersionBadge-Ct-qYNDF.js → VersionBadge-DJJK7bgD.js} +1 -1
  52. package/web/assets/WikiPage-DiCUjWEu.js +1 -0
  53. package/web/assets/{WikiView-Izg2SvGt.js → WikiView-vYMnLt41.js} +1 -1
  54. package/web/assets/{add-scalar-classes-BP_OZa5m.js → add-scalar-classes-_7NDhIUO.js} +3 -3
  55. package/web/assets/{autocomplete-DMfvn4sK.js → autocomplete-BTMTTAk9.js} +1 -1
  56. package/web/assets/{basic-shape-diamond.svg-B5H1r2bp.js → basic-shape-diamond.svg-CZQG7mdB.js} +1 -1
  57. package/web/assets/{basic-shape-hexagon.svg-CYAjKF0z.js → basic-shape-hexagon.svg-BnLoXUmj.js} +1 -1
  58. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CgleCAf-.js → basic-shape-primary-circle-ellipse-round.svg-DDU6pRYe.js} +1 -1
  59. package/web/assets/{basic-shape-primary-square-rectangle.svg-1Oa48Hhs.js → basic-shape-primary-square-rectangle.svg-Dq_Zdck2.js} +1 -1
  60. package/web/assets/{basic-shape-shield.svg-F6dZwVUJ.js → basic-shape-shield.svg-DbFCxPmO.js} +1 -1
  61. package/web/assets/{browser-D3KJ0m2n.js → browser-CTYk99RA.js} +1 -1
  62. package/web/assets/{browser-CmPAWcJ7.js → browser-DowFjZcI.js} +1 -1
  63. package/web/assets/{card-Ciw7uU90.js → card-R4Q2Qr9t.js} +1 -1
  64. package/web/assets/{checkbox-BCCx0Nu6.js → checkbox-CfoV-T17.js} +1 -1
  65. package/web/assets/{chip-JRh6DXig.js → chip-V3vhLdcF.js} +1 -1
  66. package/web/assets/{client-BIlYBe0s.js → client-DHQNUKOx.js} +1 -1
  67. package/web/assets/{cloud-chat.store-BUYi4kYT.js → cloud-chat.store-CaSRn8Mg.js} +1 -1
  68. package/web/assets/cloud-client-CzGojtBl.js +1 -0
  69. package/web/assets/{cloud-session-CZWto5y3.js → cloud-session-D71P4F3g.js} +2 -2
  70. package/web/assets/cloud-session-DlLnrwVQ.js +1 -0
  71. package/web/assets/{column-DSBHw97f.js → column-CjJa3tsz.js} +1 -1
  72. package/web/assets/{computer-device-desktop-monitor.svg-D7wu2cQ4.js → computer-device-desktop-monitor.svg-CRLfD7-U.js} +1 -1
  73. package/web/assets/{computer-device-desktop.svg-BtVwjOEG.js → computer-device-desktop.svg-CGKq4iih.js} +1 -1
  74. package/web/assets/{computer-device-laptop.svg-f3tFeUHj.js → computer-device-laptop.svg-bmeM_RDO.js} +1 -1
  75. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CmJcGkrL.js → computer-device-mobile-phone-android-samsung-back.svg-CFwMSjoP.js} +1 -1
  76. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-C2ke6Sbg.js → computer-device-mobile-phone-android-samsung.svg-iIOhGZVY.js} +1 -1
  77. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-DxMqUXKE.js → computer-device-mobile-phone-iphone-x-back.svg-CLqnsMnT.js} +1 -1
  78. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-DkbKlrh8.js → computer-device-mobile-phone-iphone-x.svg-XECS9ZDX.js} +1 -1
  79. package/web/assets/{computer-device-mobile-tablet-touch.svg-DP0uXMda.js → computer-device-mobile-tablet-touch.svg-CUR9IhGB.js} +1 -1
  80. package/web/assets/{computer-device-mobile-tablet.svg-C064ZFQm.js → computer-device-mobile-tablet.svg-BJGisjBt.js} +1 -1
  81. package/web/assets/{computer-device-network-ethernet-cat6.svg-Dwzl7zBN.js → computer-device-network-ethernet-cat6.svg-DzgiswAZ.js} +1 -1
  82. package/web/assets/{computer-device-network-lan-www.svg-BgErom5w.js → computer-device-network-lan-www.svg-Dr1frFpv.js} +1 -1
  83. package/web/assets/{computer-device-network-wifi-connection.svg-ByqNsV6y.js → computer-device-network-wifi-connection.svg-DSj6qxT1.js} +1 -1
  84. package/web/assets/{computer-device-network-wifi-router.svg-AySGITbi.js → computer-device-network-wifi-router.svg-8lGzw_-s.js} +1 -1
  85. package/web/assets/{cssMode-BqrZ4SB-.js → cssMode-sBjZEJAf.js} +1 -1
  86. package/web/assets/{divider-BswZTb8q.js → divider-p4BForJk.js} +1 -1
  87. package/web/assets/{docx-preview-t_oOha_C.js → docx-preview-D-bfEEBT.js} +1 -1
  88. package/web/assets/{ecology-science-erlenmeyer-flask.svg-Keg4ZY0z.js → ecology-science-erlenmeyer-flask.svg-DhxVJRJ1.js} +1 -1
  89. package/web/assets/{fieldset-DaWy9FsL.js → fieldset-CCZ1tJUm.js} +1 -1
  90. package/web/assets/{freemarker2-Br0kiufp.js → freemarker2-C8iPD1fo.js} +1 -1
  91. package/web/assets/{handlebars-BrATzKUL.js → handlebars-BbBZAhwL.js} +1 -1
  92. package/web/assets/{html-LWTJcTM2.js → html-BQ_SV3Jd.js} +1 -1
  93. package/web/assets/{htmlMode-A23pWfMP.js → htmlMode-DReHoZFB.js} +1 -1
  94. package/web/assets/{image-flash-lightning.svg-uQfoT6Ex.js → image-flash-lightning.svg-DbKHX2c2.js} +1 -1
  95. package/web/assets/{image-picture-flower.svg-XxD1bCHC.js → image-picture-flower.svg-CEpqP8le.js} +1 -1
  96. package/web/assets/{index-e5dmzMc-.js → index-PMr5ScNs.js} +4 -4
  97. package/web/assets/{interface-alert-exclamation-diamond.svg-gQAlkILu.js → interface-alert-exclamation-diamond.svg-CoNNtahD.js} +1 -1
  98. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Ga2rsl6o.js → interface-alert-exclamation-triangle-warning.svg-BHa7AW0u.js} +1 -1
  99. package/web/assets/{interface-alert-information-circle.svg-BS0N2R1M.js → interface-alert-information-circle.svg-CpRzO-l8.js} +1 -1
  100. package/web/assets/{interface-award-crown.svg-CtLbK4Gl.js → interface-award-crown.svg-BFOXAZFu.js} +1 -1
  101. package/web/assets/{interface-bookmark.svg-Clt6TTov.js → interface-bookmark-tag.svg-DpZGlSV4.js} +1 -1
  102. package/web/assets/{interface-bookmark-tag.svg-Dfd6eXAX.js → interface-bookmark.svg-DulnuoPg.js} +1 -1
  103. package/web/assets/{interface-calendar-date-one.svg-BmFNLrzR.js → interface-calendar-date-one.svg-CWQHbXWQ.js} +1 -1
  104. package/web/assets/{interface-content-book-open-pages.svg-u8kJbc3N.js → interface-content-book-open-pages.svg-BH97UDUJ.js} +1 -1
  105. package/web/assets/{interface-content-book-page.svg-Csk8d0R8.js → interface-content-book-page.svg-DmnJkpeN.js} +1 -1
  106. package/web/assets/{interface-content-file.svg-DIoD1UhJ.js → interface-content-file.svg-DkouOQzj.js} +1 -1
  107. package/web/assets/interface-content-folder.svg-BLBb2W1v.js +1 -0
  108. package/web/assets/{interface-content-folder.svg-ipO7hYM2.js → interface-content-folder.svg-DK2esxIw.js} +1 -1
  109. package/web/assets/{interface-copy-clipboard.svg-BaK2fHKS.js → interface-copy-clipboard.svg-DuwyZprv.js} +1 -1
  110. package/web/assets/{interface-edit-attachment.svg-CrpyP6c6.js → interface-edit-attachment.svg-C4lXPh7a.js} +1 -1
  111. package/web/assets/{interface-edit-binocular.svg-Cw-YeqUQ.js → interface-edit-binocular.svg-CuA4f4ED.js} +1 -1
  112. package/web/assets/{interface-edit-magic-wand.svg-BPa49t_4.js → interface-edit-magic-wand.svg-D-Cc4zpI.js} +1 -1
  113. package/web/assets/{interface-edit-tool-paint-roller.svg-Cfag7vxY.js → interface-edit-tool-paint-roller.svg-MtAeMQ6k.js} +1 -1
  114. package/web/assets/{interface-edit-tool-pencil.svg-BNAmX0d_.js → interface-edit-tool-pencil.svg-ZAP8C3Sw.js} +1 -1
  115. package/web/assets/{interface-favorite-award.svg-CIMvocAv.js → interface-favorite-award.svg-DRZh5var.js} +1 -1
  116. package/web/assets/{interface-favorite-flag.svg-8C3GXK06.js → interface-favorite-flag.svg-Dy0qBZak.js} +1 -1
  117. package/web/assets/{interface-favorite-heart.svg-CEU_IALn.js → interface-favorite-heart.svg-Cjxi5AEp.js} +1 -1
  118. package/web/assets/{interface-favorite-star.svg-Bs0RUtgk.js → interface-favorite-star.svg-B1OPbNTd.js} +1 -1
  119. package/web/assets/{interface-favorite-stars-sparkles.svg-CZYZ5qkH.js → interface-favorite-stars-sparkles.svg-CvnZTUkf.js} +1 -1
  120. package/web/assets/{interface-hierarchy-flowchart.svg-DOgEXHV2.js → interface-hierarchy-flowchart.svg-GGCH0pvQ.js} +1 -1
  121. package/web/assets/{interface-home-house.svg-lDERGk8q.js → interface-home-house.svg-DB_dC7eo.js} +1 -1
  122. package/web/assets/{interface-hyperlink.svg-CAZrs64U.js → interface-hyperlink.svg-LlMqAHmb.js} +1 -1
  123. package/web/assets/{interface-lighting-brightness.svg-CVANBB7i.js → interface-lighting-brightness.svg-DutEgNfQ.js} +1 -1
  124. package/web/assets/{interface-lock-closed.svg-qDLyceL-.js → interface-lock-closed.svg-DteyBWrL.js} +1 -1
  125. package/web/assets/{interface-lock-open-unlock.svg-Bc-cq6eU.js → interface-lock-open-unlock.svg-D2g-W1Mn.js} +1 -1
  126. package/web/assets/{interface-login-key.svg-D6wZBYEi.js → interface-login-key.svg-Dk1JjhYH.js} +1 -1
  127. package/web/assets/{interface-search.svg-BVM6kkvA.js → interface-search.svg-CDHAdhLc.js} +1 -1
  128. package/web/assets/{interface-setting-cog.svg-uJYqlmKx.js → interface-setting-cog.svg-BXKxgm-B.js} +1 -1
  129. package/web/assets/{interface-share-megaphone-bullhorn.svg-CgBVBu7Z.js → interface-share-megaphone-bullhorn.svg-Fq3c3_sE.js} +1 -1
  130. package/web/assets/{interface-share-rocket.svg-C1iCXMlX.js → interface-share-rocket.svg-BBIuiQ8_.js} +1 -1
  131. package/web/assets/{interface-share-satellite.svg-uH-Cvq9d.js → interface-share-satellite.svg-LZRzoY-Y.js} +1 -1
  132. package/web/assets/{interface-share-space-ship.svg-81lauyV5.js → interface-share-space-ship.svg-C6EewxDh.js} +1 -1
  133. package/web/assets/{interface-share.svg-DO85t-F0.js → interface-share.svg-Bj60UW_t.js} +1 -1
  134. package/web/assets/{interface-signal-square.svg-CFAni6lY.js → interface-signal-square.svg-wJGg3ZJ7.js} +1 -1
  135. package/web/assets/{interface-time-clock-circle.svg-BUQfluh7.js → interface-time-clock-circle.svg-C2Ki_bgh.js} +1 -1
  136. package/web/assets/{interface-time-hour-glass.svg-BAZDU-C5.js → interface-time-hour-glass.svg-BeaTe2YW.js} +1 -1
  137. package/web/assets/{interface-users-multiple.svg-Bj0AvF2-.js → interface-users-multiple.svg-ZNPhOLEJ.js} +1 -1
  138. package/web/assets/{interface-weather-moon.svg-Cxz-5thD.js → interface-weather-moon.svg-CzOxK1E2.js} +1 -1
  139. package/web/assets/{javascript-CuP68vN5.js → javascript-CV2jmATe.js} +1 -1
  140. package/web/assets/{jsonMode-CdGjze9r.js → jsonMode-BpNATOZn.js} +1 -1
  141. package/web/assets/{liquid-fJJZPdJb.js → liquid-Bkbhlfu6.js} +1 -1
  142. package/web/assets/{lspLanguageFeatures-YzzH9q9a.js → lspLanguageFeatures-BIiCr6WR.js} +1 -1
  143. package/web/assets/{mail-chat-bubble-square.svg-DY1-sN8v.js → mail-chat-bubble-square.svg-B-R9ItyG.js} +1 -1
  144. package/web/assets/{mail-send-email-paper-airplane.svg-6zVEUG2-.js → mail-send-email-paper-airplane.svg-F4sC3JuQ.js} +1 -1
  145. package/web/assets/{mail-send-envelope.svg-DNpA7Auy.js → mail-send-envelope.svg-BaE9bGol.js} +1 -1
  146. package/web/assets/{mdx-CphM-wvX.js → mdx-CsTzsRLc.js} +1 -1
  147. package/web/assets/{minus-DD84SZSh.js → minus-CsIPqtIl.js} +1 -1
  148. package/web/assets/modal-B_0-h4nC.js +1 -0
  149. package/web/assets/{modal-CKGM8Wb3.js → modal-KwmdNF_4.js} +1 -1
  150. package/web/assets/{money-cashier-receipt.svg-ChxLUMT0.js → money-cashier-receipt.svg-C8rqn3qa.js} +1 -1
  151. package/web/assets/{money-currency-dollar-pay.svg-CcPdfv1E.js → money-currency-dollar-pay.svg-BW5dnMxx.js} +1 -1
  152. package/web/assets/{money-graph-arrow-increase.svg-BsmXO8yM.js → money-graph-arrow-increase.svg-fHNc8kor.js} +1 -1
  153. package/web/assets/{money-graph-bar-chart-increase.svg-QVk3zD8i.js → money-graph-bar-chart-increase.svg-65H_xZ15.js} +1 -1
  154. package/web/assets/{multiselect-3cR58mLz.js → multiselect-Z0owdrkn.js} +1 -1
  155. package/web/assets/{nature-ecology-leaf.svg-nzup63P6.js → nature-ecology-leaf.svg-BIZVZEYz.js} +1 -1
  156. package/web/assets/{password-CCYLOu-C.js → password-Be5EVCzq.js} +1 -1
  157. package/web/assets/{phone-telephone.svg-BLtgdZw-.js → phone-telephone.svg-B1dHjXge.js} +1 -1
  158. package/web/assets/{plus-jk73RdzY.js → plus-BY4yX4ZS.js} +1 -1
  159. package/web/assets/process.store-B-PvNJQb.js +1 -0
  160. package/web/assets/{programming-bug.svg-BCN6lOn1.js → programming-bug.svg-DJHBIgCF.js} +1 -1
  161. package/web/assets/{programming-cloud.svg-DHNBRNkQ.js → programming-cloud.svg-26MWe8cC.js} +1 -1
  162. package/web/assets/{programming-computer-database-server.svg-C4DheEbm.js → programming-computer-database-server.svg-Dy7gdMab.js} +1 -1
  163. package/web/assets/{programming-computer-database.svg-cD2w2ZZ6.js → programming-computer-database.svg-3HsFit56.js} +1 -1
  164. package/web/assets/{programming-module-four-layout.svg-D6_P2rTG.js → programming-module-four-layout.svg-CLumiwsC.js} +1 -1
  165. package/web/assets/{programming-module-three.svg-Dc076Z_f.js → programming-module-three.svg-3DvVSvY_.js} +1 -1
  166. package/web/assets/{programming-module.svg-D0c9akII.js → programming-module.svg-CgtgW8TW.js} +1 -1
  167. package/web/assets/{programming-script-code.svg-BrT3KZQe.js → programming-script-code.svg-DdeXzy2-.js} +1 -1
  168. package/web/assets/project-launch.store-DtFeb4vv.js +1 -0
  169. package/web/assets/project.store-DcaBpnnB.js +1 -0
  170. package/web/assets/{python-DMw-TRDY.js → python-YqWM3LFr.js} +1 -1
  171. package/web/assets/{radiobutton-CnoEo0qc.js → radiobutton-Pm1c37Fw.js} +1 -1
  172. package/web/assets/{razor-BTS4Lk96.js → razor-BtNiyC__.js} +1 -1
  173. package/web/assets/router-DnVYXVMw.js +1 -0
  174. package/web/assets/settings-scope-DR8NUZr5.js +1 -0
  175. package/web/assets/{settings.store-DeGpnclr.js → settings.store-CniuNQ3t.js} +1 -1
  176. package/web/assets/{shopping-cart.svg-pvFNKXP_.js → shopping-cart.svg-ejbEU5yG.js} +1 -1
  177. package/web/assets/{shopping-gift-present.svg-PYJ4_vdS.js → shopping-gift-present.svg-RLuyvmga.js} +1 -1
  178. package/web/assets/{shopping-shipping-box-parcel-package.svg-KMRd9Rmg.js → shopping-shipping-box-parcel-package.svg-0GduEUbl.js} +1 -1
  179. package/web/assets/{src-NXursDRf.js → src-BS3JGGS_.js} +1 -1
  180. package/web/assets/{src-BsadAol0.js → src-BzZzroPd.js} +3 -3
  181. package/web/assets/{tabpanel-CKudNnqo.js → tabpanel-CssLXh-h.js} +1 -1
  182. package/web/assets/{tag-new-circle.svg-Bf83DYRq.js → tag-new-circle.svg-CEdgH15R.js} +1 -1
  183. package/web/assets/theme-C7HVmgEO.js +1 -0
  184. package/web/assets/{toggleswitch-Cv0supU2.js → toggleswitch-CEiGEBl3.js} +1 -1
  185. package/web/assets/{travel-map-earth-globe.svg-WxnFDzEH.js → travel-map-earth-globe.svg-Dmwx1Lus.js} +1 -1
  186. package/web/assets/trpc-C6zILEMh.js +1 -0
  187. package/web/assets/{tsMode-CfruLmor.js → tsMode-DpPT4F6s.js} +1 -1
  188. package/web/assets/{typescript-BvsjNfHT.js → typescript-DoO0syM1.js} +1 -1
  189. package/web/assets/useAiChatDrawer-CnrYG1GW.js +1 -0
  190. package/web/assets/{useCloudOrg-B0o8vN4e.js → useCloudOrg-DWmP9gqs.js} +1 -1
  191. package/web/assets/{useEnvVarAutocomplete-DJMTIim7.js → useEnvVarAutocomplete-Dkx7Cn9l.js} +1 -1
  192. package/web/assets/{useProjectCatalog-B6GXBDDA.js → useProjectCatalog-Cu3VZu2F.js} +1 -1
  193. package/web/assets/{useProjectCloudOrg-BwLsTiz0.js → useProjectCloudOrg-CG7seJKu.js} +1 -1
  194. package/web/assets/{useServiceUrlHost-CE4Qoy-J.js → useServiceUrlHost-ADKWqhx0.js} +1 -1
  195. package/web/assets/{xml-BTID20Kj.js → xml-FoCdWVvH.js} +1 -1
  196. package/web/assets/{yaml-BtOf_8je.js → yaml-CgRsanOy.js} +1 -1
  197. package/web/index.html +1 -1
  198. package/chunk-BVBK2WII.js.map +0 -1
  199. package/chunk-GL7WA5K3.js.map +0 -1
  200. package/chunk-VNLIA5PV.js.map +0 -1
  201. package/chunk-XTLQOYLT.js.map +0 -1
  202. package/src-YUVA6WCM.js.map +0 -1
  203. package/web/assets/AiChatPage-DzTc9-iH.js +0 -1
  204. package/web/assets/CloudAccountPage-DTrPLz-p.js +0 -1
  205. package/web/assets/ServiceFormPage-B8jcMT3b.css +0 -1
  206. package/web/assets/ServiceFormPage-Dr_e9QMM.js +0 -1
  207. package/web/assets/WikiPage-D7N7nA2O.js +0 -1
  208. package/web/assets/cloud-client-CujRC6FF.js +0 -1
  209. package/web/assets/cloud-session-CSIV9Uvx.js +0 -1
  210. package/web/assets/interface-content-folder.svg-BPZbNQNK.js +0 -1
  211. package/web/assets/modal-Dd5rzDUd.js +0 -1
  212. package/web/assets/process.store-jsfEBwiA.js +0 -1
  213. package/web/assets/project-launch.store-Bp7vasUu.js +0 -1
  214. package/web/assets/project.store-DuZriz9o.js +0 -1
  215. package/web/assets/router-BU2tqcBm.js +0 -1
  216. package/web/assets/settings-scope-Bg_X1n_Y.js +0 -1
  217. package/web/assets/theme-D6M00FyZ.js +0 -1
  218. package/web/assets/trpc-mWVODCs2.js +0 -1
  219. package/web/assets/useAiChatDrawer-vNey6IKe.js +0 -1
  220. /package/{agent-manager-BSPEFZKZ.js.map → agent-manager-FZFFWISA.js.map} +0 -0
  221. /package/{chat-SE5GIT4B.js.map → chat-JIJQ7IJS.js.map} +0 -0
  222. /package/{chunk-NIU3CN5A.js.map → chunk-N3ZI35SC.js.map} +0 -0
  223. /package/{companion-HEJHC3UR.js.map → companion-OZODV5BR.js.map} +0 -0
  224. /package/{settings-manager-4GAINSJO.js.map → settings-manager-MAVD4GAS.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../server/src/services/disk-freshness.ts","../../server/src/services/run-store-utils.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\n\n/**\n * Le fichier a-t-il changé depuis qu'on l'a lu ?\n *\n * Les stores gardent de côté ce qu'ils n'ont pas su déchiffrer, pour le\n * réécrire tel quel plutôt que de l'effacer. Cette copie est la bonne réponse\n * tant que personne d'autre ne touche au fichier — et la mauvaise dès que\n * quelqu'un le répare par-dessous : la copie, elle, ne se périme jamais, et la\n * sauvegarde suivante réinstalle l'état d'avant la réparation.\n *\n * C'est arrivé deux fois de suite sur le même coffre : une conversion de clé\n * menée sur le disque, défaite quelques minutes plus tard par un store qui\n * tenait encore l'ancien chiffré en mémoire.\n *\n * D'où ce repère : l'empreinte du fichier au moment de la lecture. Si elle a\n * bougé, la copie mémoire ne fait plus foi et doit être abandonnée.\n */\n\ninterface Fingerprint {\n mtimeMs: number;\n size: number;\n /**\n * L'inode du chemin, qui change à chaque `rename` par-dessus.\n *\n * La date et la taille laissent passer le motif d'écriture de tout le dépôt :\n * les stores réécrivent le fichier entier, donc une modification rend souvent\n * le même nombre d'octets, et deux instances qui réagissent au même événement\n * écrivent dans la même milliseconde. Le fichier temporaire renommé\n * par-dessus, lui, installe toujours un autre inode.\n *\n * Là où le système n'en expose pas (il rend alors 0), le repère retombe sur\n * la date et la taille — ce qu'il valait avant.\n */\n ino: number;\n}\n\nconst seen = new Map<string, Fingerprint>();\n\n/** Retenir l'état d'un fichier au moment où on vient de le lire. */\nexport async function rememberFile(path: string): Promise<void> {\n try {\n const s = await stat(path);\n seen.set(path, { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino });\n } catch {\n // Pas encore de fichier : rien à retenir, et rien à réémettre non plus.\n seen.delete(path);\n }\n}\n\n/**\n * Vrai si le fichier a changé — ou si l'on ne sait pas.\n *\n * L'ignorance compte comme un changement : réécrire une copie dont on ne peut\n * plus prouver qu'elle correspond au disque est précisément le geste à éviter.\n */\nexport async function hasChangedSinceRead(path: string): Promise<boolean> {\n const known = seen.get(path);\n if (!known) return true;\n try {\n const s = await stat(path);\n return s.mtimeMs !== known.mtimeMs || s.size !== known.size || s.ino !== known.ino;\n } catch {\n return true;\n }\n}\n\n/**\n * A-t-on lu ce fichier ?\n *\n * `hasChangedSinceRead` tient l'ignorance pour un changement : c'est juste\n * quand il s'agit de décider si une copie mémoire fait encore foi. Ça ne l'est\n * pas pour décider d'écrire — un fichier jamais lu est le cas d'un coffre neuf,\n * et le traiter comme « modifié sous nos pieds » revenait à ne jamais écrire la\n * première fois. Les appelants qui protègent une écriture demandent donc les\n * deux : connu, et inchangé.\n */\nexport function wasRead(path: string): boolean {\n return seen.has(path);\n}\n\n/** Oublier un fichier — après un rechargement complet, par exemple. */\nexport function forgetFile(path: string): void {\n seen.delete(path);\n}\n\n/**\n * L'empreinte d'un ensemble de fichiers : lesquels, et dans quel état.\n *\n * Le repère ci-dessus répond pour un fichier qu'on a lu soi-même ; celui-ci\n * répond pour un store dont le contenu vient de plusieurs fichiers à la fois —\n * un par coffre — et dont la question est « le disque a-t-il bougé depuis mon\n * dernier chargement ? ». Comparer deux empreintes coûte quelques `stat` ;\n * recharger coûte autant de lectures, d'analyses et de déchiffrements.\n *\n * L'absence d'un fichier en fait partie : un coffre disparu change l'empreinte\n * autant qu'un coffre modifié.\n */\nexport async function fingerprintFiles(paths: string[]): Promise<string> {\n const stamps = await Promise.all(paths.map(async (path) => {\n try {\n const s = await stat(path);\n // L'inode en fait partie pour la raison décrite sur `Fingerprint` : un\n // fichier renommé par-dessus la cible peut n'avoir bougé ni en taille ni\n // en date, et reste pourtant un autre contenu.\n return `${path}:${s.mtimeMs}:${s.size}:${s.ino}`;\n } catch {\n return `${path}:-`;\n }\n }));\n return stamps.sort().join('|');\n}\n","import { randomUUID } from 'node:crypto';\nimport { chmod, mkdir, readdir, rename, rm, stat, writeFile, readFile } from 'node:fs/promises';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { machineRoot } from './vault-resolver.js';\n\nconst SAFE_PATH_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;\n\nexport function resolveConversationRunDir(rootDirName: string, conversationId: string): string {\n if (!SAFE_PATH_SEGMENT_RE.test(conversationId)) {\n throw new Error('Invalid conversationId');\n }\n // Machine-wide, like the conversations these runs belong to: using the launch\n // directory would put a `.runeya` in a repository just for asking the AI a\n // question about a cloud project.\n const base = resolve(machineRoot(), rootDirName);\n const dir = resolve(base, conversationId);\n if (!dir.startsWith(base + sep)) {\n throw new Error('Invalid conversationId');\n }\n return dir;\n}\n\nexport async function atomicWriteSecure(filePath: string, content: string | Uint8Array): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n // Un nom par écriture : deux Runeya d'un même poste écrivent les mêmes\n // fichiers, et un `.tmp` commun se fait renommer sous le nez de l'autre.\n const tmpPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n await writeFile(tmpPath, content, typeof content === 'string' ? 'utf-8' : undefined);\n await rename(tmpPath, filePath);\n } catch (err) {\n // Un nom unique ne se réécrit jamais : laissé là, chaque échec en ajouterait un.\n await rm(tmpPath, { force: true }).catch(() => {});\n throw err;\n }\n await chmod(filePath, 0o600);\n}\n\n/** Le nom qu'`atomicWriteSecure` donne à ses fichiers temporaires : `<fichier>.<pid>.<uuid>.tmp`. */\nconst OWN_TEMP_RE = /\\.\\d+\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.tmp$/;\nconst STALE_TEMP_MS = 3600_000;\n\n/**\n * Retirer les fichiers temporaires qu'un arrêt brutal a laissés.\n *\n * Un nom par écriture ne se réécrit jamais : chaque arrêt en pleine écriture en\n * laissait un pour toujours. Seuls les nôtres sont concernés, et seulement\n * passé une heure — un plus récent peut appartenir à une écriture en cours,\n * celle d'une autre Runeya du même poste.\n */\nexport async function sweepStaleTempFiles(dirs: string[]): Promise<number> {\n let removed = 0;\n const limit = Date.now() - STALE_TEMP_MS;\n for (const dir of dirs) {\n let names: string[];\n try {\n names = await readdir(dir);\n } catch {\n continue;\n }\n for (const name of names.filter((n) => OWN_TEMP_RE.test(n))) {\n const path = join(dir, name);\n try {\n if ((await stat(path)).mtimeMs > limit) continue;\n await rm(path, { force: true });\n removed += 1;\n } catch {\n // Disparu entre-temps : rien à retirer.\n }\n }\n }\n return removed;\n}\n\nexport async function atomicWriteJsonSecure(filePath: string, data: unknown, pretty = false): Promise<void> {\n await atomicWriteSecure(filePath, JSON.stringify(data, null, pretty ? 2 : 0));\n}\n\nexport async function readJsonFileSafe<T>(filePath: string): Promise<T | null> {\n try {\n const raw = await readFile(filePath, 'utf-8');\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["stat","stat"]}
@@ -3,7 +3,7 @@ import {
3
3
  hasChangedSinceRead,
4
4
  rememberFile,
5
5
  wasRead
6
- } from "./chunk-GL7WA5K3.js";
6
+ } from "./chunk-HK5QNU6P.js";
7
7
  import {
8
8
  SchemaVersionSchema,
9
9
  SettingsPrivateSchema,
@@ -171,4 +171,4 @@ var settingsManager = new SettingsManager();
171
171
  export {
172
172
  settingsManager
173
173
  };
174
- //# sourceMappingURL=chunk-NIU3CN5A.js.map
174
+ //# sourceMappingURL=chunk-N3ZI35SC.js.map
@@ -26,10 +26,10 @@ import {
26
26
  reviewWindow,
27
27
  runCompanionNow,
28
28
  takeRelaunchSlot
29
- } from "./chunk-VNLIA5PV.js";
29
+ } from "./chunk-H22YLVQE.js";
30
30
  import "./chunk-MD3VW4HQ.js";
31
- import "./chunk-XTLQOYLT.js";
32
- import "./chunk-GL7WA5K3.js";
31
+ import "./chunk-4PN7QBNM.js";
32
+ import "./chunk-HK5QNU6P.js";
33
33
  import "./chunk-T2BV5WZE.js";
34
34
  import "./chunk-ZFELQG4B.js";
35
35
  export {
@@ -61,4 +61,4 @@ export {
61
61
  runCompanionNow,
62
62
  takeRelaunchSlot
63
63
  };
64
- //# sourceMappingURL=companion-HEJHC3UR.js.map
64
+ //# sourceMappingURL=companion-OZODV5BR.js.map
package/index.js CHANGED
@@ -135,7 +135,7 @@ if (subCommand === "install-desktop" || subCommand === "uninstall-desktop") {
135
135
  }
136
136
  }
137
137
  if (subCommand === "instances") {
138
- const { listInstances, killInstance, restartInstance } = await import("./src-YUVA6WCM.js");
138
+ const { listInstances, killInstance, restartInstance } = await import("./src-SGSG2RSF.js");
139
139
  const { runInstancesCommand } = await import("./instances-command-KZ5UGXOR.js");
140
140
  process.exit(await runInstancesCommand(args.slice(1), {
141
141
  listInstances,
@@ -299,7 +299,7 @@ async function main() {
299
299
  ensureNodeBinOnPath();
300
300
  await ensureUserBinsOnPath();
301
301
  if (!isPullEnv) stampConsole();
302
- const { createLocalServer, pullEnv, PullEnvError, registerInstance, registerCliLocation } = await import("./src-YUVA6WCM.js");
302
+ const { createLocalServer, pullEnv, PullEnvError, registerInstance, registerCliLocation } = await import("./src-SGSG2RSF.js");
303
303
  registerCliLocation({ execPath: process.execPath, cliEntry: fileURLToPath(import.meta.url) });
304
304
  if (isPullEnv) {
305
305
  if (!serviceArg) {
@@ -408,7 +408,7 @@ async function main() {
408
408
  networkInfo,
409
409
  setLanMode,
410
410
  resolveTrayIcon
411
- } = await import("./src-YUVA6WCM.js");
411
+ } = await import("./src-SGSG2RSF.js");
412
412
  tray = await startInstanceTray({
413
413
  info: { cwd: process.cwd(), port, version, url: appUrl },
414
414
  assetsDir: join(__dirname, "assets"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runeya/runeya",
3
- "version": "2.0.122",
3
+ "version": "2.0.124",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  settingsManager
3
- } from "./chunk-NIU3CN5A.js";
4
- import "./chunk-GL7WA5K3.js";
3
+ } from "./chunk-N3ZI35SC.js";
4
+ import "./chunk-HK5QNU6P.js";
5
5
  import "./chunk-T2BV5WZE.js";
6
6
  import "./chunk-ZFELQG4B.js";
7
7
  export {
8
8
  settingsManager
9
9
  };
10
- //# sourceMappingURL=settings-manager-4GAINSJO.js.map
10
+ //# sourceMappingURL=settings-manager-MAVD4GAS.js.map
@@ -62,7 +62,7 @@ import {
62
62
  soleAccountScope,
63
63
  startCliSession,
64
64
  vaultOfProject
65
- } from "./chunk-BVBK2WII.js";
65
+ } from "./chunk-GKK3ACWB.js";
66
66
  import {
67
67
  resolveCliInvocation,
68
68
  whichCommand
@@ -85,13 +85,15 @@ import {
85
85
  stopClaudeTranscriptWatcher,
86
86
  stopCodexTranscriptWatcher,
87
87
  verifyJwt
88
- } from "./chunk-VNLIA5PV.js";
88
+ } from "./chunk-H22YLVQE.js";
89
89
  import "./chunk-MD3VW4HQ.js";
90
90
  import {
91
91
  agentManager,
92
92
  agentSpawner,
93
93
  agentStore,
94
+ clearDetached,
94
95
  clearEncryptionKey,
96
+ clearLocalRemoval,
95
97
  clearPendingLegacyKey,
96
98
  clearVaultLock,
97
99
  decryptValue,
@@ -105,7 +107,9 @@ import {
105
107
  hasEncryptionKey,
106
108
  hasPendingLegacyKey,
107
109
  isCiMode,
110
+ isDetached,
108
111
  isEncryptedValue,
112
+ isLocallyRemoved,
109
113
  isVaultLocked,
110
114
  killInstance,
111
115
  listInstances,
@@ -123,14 +127,15 @@ import {
123
127
  stableEncryptValue,
124
128
  traefikManager,
125
129
  unregisterInstance
126
- } from "./chunk-XTLQOYLT.js";
130
+ } from "./chunk-4PN7QBNM.js";
127
131
  import {
128
132
  settingsManager
129
- } from "./chunk-NIU3CN5A.js";
133
+ } from "./chunk-N3ZI35SC.js";
130
134
  import {
131
135
  atomicWriteSecure,
132
- resolveConversationRunDir
133
- } from "./chunk-GL7WA5K3.js";
136
+ resolveConversationRunDir,
137
+ sweepStaleTempFiles
138
+ } from "./chunk-HK5QNU6P.js";
134
139
  import {
135
140
  AGENT_LONG_FETCH_TIMEOUT,
136
141
  AGENT_STOP_FETCH_TIMEOUT,
@@ -166,6 +171,7 @@ import {
166
171
  writeEntity
167
172
  } from "./chunk-T2BV5WZE.js";
168
173
  import {
174
+ allVaultRoots,
169
175
  env,
170
176
  forgetOrgLogo,
171
177
  keyRoot,
@@ -6634,6 +6640,7 @@ function writeSyncDocSync(orgId, state) {
6634
6640
  var LOCAL_ORIGIN = "local-bridge";
6635
6641
  var REMOTE_ORIGIN = "remote";
6636
6642
  var CACHE_ORIGIN = "cache";
6643
+ var RESTORED_PROJECTS = "projectRestores";
6637
6644
  var PERSIST_DEBOUNCE_MS = 1e3;
6638
6645
  var RECONNECT_DELAY_MS = 3e3;
6639
6646
  var UNAUTHENTICATED_RETRY_MS = 5 * 6e4;
@@ -6717,6 +6724,14 @@ var OrgSyncConnection = class {
6717
6724
  * offline edit reverted, a service on disk erased by an older deletion.
6718
6725
  */
6719
6726
  seeded = false;
6727
+ markOpened;
6728
+ /**
6729
+ * Réglée quand le document tient l'état d'ouverture du cloud — ou quand il ne
6730
+ * l'aura pas : session refusée, app trop ancienne, connexion arrêtée.
6731
+ */
6732
+ opened = new Promise((resolve4) => {
6733
+ this.markOpened = resolve4;
6734
+ });
6720
6735
  /** Store applications started by remote events and not finished yet. */
6721
6736
  applying = /* @__PURE__ */ new Set();
6722
6737
  /**
@@ -6774,16 +6789,17 @@ var OrgSyncConnection = class {
6774
6789
  this.unsubscribes.push(environmentStore.onChange(this.onSaved));
6775
6790
  this.unsubscribes.push(logParserStore.onLocalChange(this.onSaved));
6776
6791
  const cached = await readSyncDoc(this.link.orgId);
6792
+ let cacheLoaded = false;
6777
6793
  if (cached) {
6778
6794
  try {
6779
6795
  Y2.applyUpdate(this.doc, cached, CACHE_ORIGIN);
6780
- this.initialDocApplied = true;
6796
+ cacheLoaded = true;
6781
6797
  } catch (err) {
6782
6798
  console.error("[cloud-sync] unreadable sync cache for org %s, ignored:", this.link.orgId, err.message);
6783
6799
  }
6784
6800
  }
6785
6801
  this.doc.on("update", () => this.schedulePersist());
6786
- if (cached && this.initialDocApplied) await this.seed();
6802
+ if (cacheLoaded) await this.seed();
6787
6803
  void this.streamLoop();
6788
6804
  }
6789
6805
  /** Write local state on top of the known history, then owe it to the cloud. */
@@ -6818,6 +6834,7 @@ var OrgSyncConnection = class {
6818
6834
  /** Resolves once any cache write already under way has landed. */
6819
6835
  stop() {
6820
6836
  this.stopped = true;
6837
+ this.markOpened();
6821
6838
  this.state = "stopped";
6822
6839
  projectStore.events.off("saved", this.onSaved);
6823
6840
  for (const off of this.unsubscribes.splice(0)) off();
@@ -6871,6 +6888,7 @@ var OrgSyncConnection = class {
6871
6888
  }
6872
6889
  /** Remember the floor and stop pretending sync will resume on its own. */
6873
6890
  markOutdated(err) {
6891
+ this.markOpened();
6874
6892
  const alreadyReported = this.state === "outdated";
6875
6893
  this.state = "outdated";
6876
6894
  this.lastIncompatibleVersion = err.lastIncompatibleVersion;
@@ -6883,6 +6901,7 @@ var OrgSyncConnection = class {
6883
6901
  * every slow retry: the point of retrying is to recover quietly.
6884
6902
  */
6885
6903
  markUnauthenticated(err) {
6904
+ this.markOpened();
6886
6905
  const alreadyReported = this.state === "unauthenticated";
6887
6906
  this.state = "unauthenticated";
6888
6907
  this.needsPush = true;
@@ -7002,8 +7021,9 @@ var OrgSyncConnection = class {
7002
7021
  } catch {
7003
7022
  continue;
7004
7023
  }
7024
+ this.initialDocApplied = true;
7025
+ this.markOpened();
7005
7026
  if (!this.seeded) {
7006
- this.initialDocApplied = true;
7007
7027
  await this.settleApplying();
7008
7028
  if (this.stopped) return;
7009
7029
  await this.seed();
@@ -7034,13 +7054,16 @@ var OrgSyncConnection = class {
7034
7054
  const projectId = fields["projectId"];
7035
7055
  return typeof projectId === "string" && this.tracked.has(projectId);
7036
7056
  }
7057
+ return this.trackedProjectOf(id) !== null;
7058
+ }
7059
+ /** The tracked project whose `serviceIds` list this service, per the doc. */
7060
+ trackedProjectOf(serviceId) {
7037
7061
  const projects = this.collection("projects");
7038
7062
  for (const projectId of this.tracked) {
7039
- const project = readEntity(projects, projectId);
7040
- const serviceIds = project?.["serviceIds"];
7041
- if (Array.isArray(serviceIds) && serviceIds.includes(id)) return true;
7063
+ const serviceIds = readEntity(projects, projectId)?.["serviceIds"];
7064
+ if (Array.isArray(serviceIds) && serviceIds.includes(serviceId)) return projectId;
7042
7065
  }
7043
- return false;
7066
+ return null;
7044
7067
  }
7045
7068
  /** Re-read which projects of this org have a vault on this machine. */
7046
7069
  async refreshTracked() {
@@ -7131,6 +7154,7 @@ var OrgSyncConnection = class {
7131
7154
  this.pulling = false;
7132
7155
  }
7133
7156
  await serviceStore.relocateAll();
7157
+ await environmentStore.relocateAll();
7134
7158
  await this.reconcileLocalToDoc();
7135
7159
  }
7136
7160
  // ---- Local ↔ Doc reconciliation --------------------------------------
@@ -7161,6 +7185,7 @@ var OrgSyncConnection = class {
7161
7185
  if (name === "projects" && !isInitial) {
7162
7186
  for (const id of added) {
7163
7187
  if (deleted.has(id) || this.tracked.has(id)) continue;
7188
+ if (this.doc.getMap(RESTORED_PROJECTS).has(id)) continue;
7164
7189
  try {
7165
7190
  await this.followProject(id);
7166
7191
  } catch (err) {
@@ -7231,7 +7256,7 @@ var OrgSyncConnection = class {
7231
7256
  }
7232
7257
  async upsertLocally(name, id, fields) {
7233
7258
  if (name === "services") {
7234
- await serviceStore.applyRemoteUpsert(id, fields, this.link.orgId);
7259
+ await serviceStore.applyRemoteUpsert(id, fields, this.link.orgId, this.trackedProjectOf(id) ?? void 0);
7235
7260
  return;
7236
7261
  }
7237
7262
  if (name === "environments") {
@@ -7327,23 +7352,52 @@ var OrgSyncConnection = class {
7327
7352
  const entities = local[name];
7328
7353
  const ids = new Set(entities.map((e) => e.id));
7329
7354
  for (const entity of entities) {
7330
- if (!touchedSinceRead(name, entity.id)) writeEntity(collection, entity.id, entity);
7355
+ if (touchedSinceRead(name, entity.id)) continue;
7356
+ writeEntity(
7357
+ collection,
7358
+ entity.id,
7359
+ name === "projects" ? this.keepUnknownLinks(entity) : entity
7360
+ );
7331
7361
  }
7332
7362
  if (name === "projects") continue;
7333
7363
  for (const id of Array.from(collection.keys())) {
7334
7364
  if (ids.has(id) || touchedSinceRead(name, id)) continue;
7365
+ if (!isLocallyRemoved(name, id)) continue;
7335
7366
  if (this.belongsToOwnedProject(name, id, ownedProjectIds)) collection.delete(id);
7367
+ clearLocalRemoval(name, id);
7336
7368
  }
7337
7369
  }
7338
7370
  const parserIds = new Set(parsers.map((p) => p.id));
7339
7371
  for (const parser of parsers) writeEntity(this.logParsers, parser.id, parser);
7340
7372
  if (this.applyingParsers === 0) {
7341
7373
  for (const id of Array.from(this.logParsers.keys())) {
7342
- if (!parserIds.has(id)) this.logParsers.delete(id);
7374
+ if (parserIds.has(id) || !isLocallyRemoved("logParsers", id)) continue;
7375
+ this.logParsers.delete(id);
7376
+ clearLocalRemoval("logParsers", id);
7343
7377
  }
7344
7378
  }
7345
7379
  }, LOCAL_ORIGIN);
7346
7380
  }
7381
+ /**
7382
+ * Le projet local tel qu'il doit partir : ses listes gardent les ids que le
7383
+ * document connaît et pas cette machine, sauf ceux qu'elle a détachés.
7384
+ *
7385
+ * Un projet local en retard (coffre relu tard, autre version) repoussait
7386
+ * sinon d'anciens `serviceIds` : le service récent sortait du projet pour
7387
+ * toute l'organisation, et sa suppression suivait.
7388
+ */
7389
+ keepUnknownLinks(project) {
7390
+ const inDoc = readEntity(this.collection("projects"), project.id);
7391
+ const merged = { ...project };
7392
+ for (const field of ["serviceIds", "environmentIds"]) {
7393
+ const local = project[field] ?? [];
7394
+ const remote = inDoc?.[field];
7395
+ const extra = Array.isArray(remote) ? remote.filter((id) => typeof id === "string" && !local.includes(id) && !isDetached(project.id, field, id)) : [];
7396
+ merged[field] = [...local, ...extra];
7397
+ clearDetached(project.id, field);
7398
+ }
7399
+ return merged;
7400
+ }
7347
7401
  /**
7348
7402
  * Whether a doc entity belongs to a project this machine holds — i.e. whether
7349
7403
  * its absence locally is a real removal rather than a project we never pulled.
@@ -7524,6 +7578,25 @@ var CloudSyncBridge = class {
7524
7578
  this.connections.delete(orgId);
7525
7579
  }
7526
7580
  }
7581
+ /**
7582
+ * Attendre que le document d'une organisation tienne l'état du cloud.
7583
+ *
7584
+ * Suivre un projet juste après avoir ouvert la connexion ne trouvait rien : la
7585
+ * trame d'ouverture n'était pas arrivée, et l'app concluait à un échec. Rend la
7586
+ * main au plus tard après `timeoutMs` — l'appelant lit alors l'état.
7587
+ */
7588
+ async whenOpened(orgId, timeoutMs) {
7589
+ const conn = this.connections.get(orgId);
7590
+ if (!conn) return;
7591
+ let timer;
7592
+ await Promise.race([
7593
+ conn.opened,
7594
+ new Promise((resolve4) => {
7595
+ timer = setTimeout(resolve4, timeoutMs);
7596
+ })
7597
+ ]);
7598
+ clearTimeout(timer);
7599
+ }
7527
7600
  /** Stops at once; the promise only says when pending cache writes have landed. */
7528
7601
  stopAll() {
7529
7602
  const stopping = [...this.connections.values()].map((conn) => conn.stop());
@@ -7679,6 +7752,7 @@ async function accountScope(orgId) {
7679
7752
  const accountId = await accountForOrg(orgId);
7680
7753
  return accountId ? { accountId } : {};
7681
7754
  }
7755
+ var OPENING_TIMEOUT_MS = 1e4;
7682
7756
  async function assertOrgReadable(orgId) {
7683
7757
  try {
7684
7758
  await assertOrgVaultReadable(orgId);
@@ -7737,6 +7811,7 @@ var cloudSyncRouter = router({
7737
7811
  } else if (input.accountId) {
7738
7812
  await stampOrgCloud(input.orgId, input.cloudUrl, void 0, input.accountId);
7739
7813
  }
7814
+ await cloudSyncBridge.whenOpened(input.orgId, OPENING_TIMEOUT_MS);
7740
7815
  try {
7741
7816
  const pulled = await cloudSyncBridge.followProject(input.orgId, input.projectId);
7742
7817
  return { pulled, state: syncState(input.orgId) };
@@ -9897,6 +9972,11 @@ async function createLocalServer() {
9897
9972
  await serviceStore.list().catch((err) => {
9898
9973
  console.warn("[server] Failed to preload services:", err);
9899
9974
  });
9975
+ void (async () => {
9976
+ const orgRoots = (await listOrgVaults()).map((orgId) => orgVaultRoot(orgId));
9977
+ const removed = await sweepStaleTempFiles([machineRoot(), ...orgRoots, ...await allVaultRoots()]);
9978
+ if (removed > 0) console.log(`[server] ${removed} fichier(s) temporaire(s) orphelin(s) retir\xE9(s)`);
9979
+ })().catch((err) => console.warn("[server] Temp file sweep failed:", err));
9900
9980
  cloudSyncBridge.start().catch((err) => {
9901
9981
  console.warn("[server] Failed to start cloud sync bridge:", err);
9902
9982
  });
@@ -10529,7 +10609,7 @@ async function createLocalServer() {
10529
10609
  ]);
10530
10610
  console.log("[server] Shutdown complete");
10531
10611
  };
10532
- const { initCompanion } = await import("./companion-HEJHC3UR.js");
10612
+ const { initCompanion } = await import("./companion-OZODV5BR.js");
10533
10613
  initCompanion();
10534
10614
  return { app, server, wss, shutdown };
10535
10615
  }
@@ -10976,4 +11056,4 @@ export {
10976
11056
  startProcess,
10977
11057
  stopProcess
10978
11058
  };
10979
- //# sourceMappingURL=src-YUVA6WCM.js.map
11059
+ //# sourceMappingURL=src-SGSG2RSF.js.map