@runeya/runeya 2.0.59 → 2.0.61

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 (201) hide show
  1. package/agent-manager-5SQNJICJ.js +7 -0
  2. package/{chunk-F7HMKPFB.js → chunk-OOQ74RCO.js} +10 -3
  3. package/chunk-OOQ74RCO.js.map +1 -0
  4. package/index.js +1 -1
  5. package/package.json +1 -1
  6. package/{src-7YQHXQ6L.js → src-RY3O6RUF.js} +192 -129
  7. package/src-RY3O6RUF.js.map +1 -0
  8. package/web/assets/{AgentScalarChatInterface.vue-EIqnE2D0.js → AgentScalarChatInterface.vue-DQumL7el.js} +1 -1
  9. package/web/assets/{AgentTerminalPage-5kH1RTj6.js → AgentTerminalPage-BzF8DziD.js} +1 -1
  10. package/web/assets/AiChatPage-BzW9ep-7.js +1 -0
  11. package/web/assets/AppLayout-C1jD3u72.js +1 -0
  12. package/web/assets/{AppLayout-Dj8YOvMQ.css → AppLayout-Dz5LUtqY.css} +1 -1
  13. package/web/assets/{AuditPage-BrqreO8a.js → AuditPage-CdKUdCrY.js} +1 -1
  14. package/web/assets/CloudAccountPage-D4FMLg68.js +1 -0
  15. package/web/assets/{CloudAccountPage-DS3ZfENB.js → CloudAccountPage-D9-3gnWd.js} +1 -1
  16. package/web/assets/{CloudMessagingPage-D8gBnkFY.js → CloudMessagingPage-BMFjWcay.js} +1 -1
  17. package/web/assets/{DashboardPage-BiskmF6R.js → DashboardPage-R_KW403-.js} +1 -1
  18. package/web/assets/{DirectoryPickerDialog-CtKWj2hx.js → DirectoryPickerDialog-DD9rl5Zq.js} +1 -1
  19. package/web/assets/{EnvironmentForm-DZXx9r78.js → EnvironmentForm-CysMKBBb.js} +1 -1
  20. package/web/assets/{EnvironmentFormPage-Dl7pdkEM.js → EnvironmentFormPage-OQL8hE5C.js} +1 -1
  21. package/web/assets/{EnvironmentListPage-B0WX_Hq7.js → EnvironmentListPage-Dzi7eW62.js} +1 -1
  22. package/web/assets/{KanbanBoardPage-CBJs26gZ.js → KanbanBoardPage-C-MhV5O3.js} +3 -3
  23. package/web/assets/{KanbanListPage-Cz-tlLWA.js → KanbanListPage-VDcvWrY7.js} +1 -1
  24. package/web/assets/{LaunchProjectPage-8SDkFiLE.js → LaunchProjectPage-_3YC0ovt.js} +1 -1
  25. package/web/assets/{LaunchServicesPage-B-ncX3rd.js → LaunchServicesPage-CQw7EUCM.js} +1 -1
  26. package/web/assets/{LogViewer-BJNqKt3I.js → LogViewer-Dn0icfNO.js} +1 -1
  27. package/web/assets/OrgKeyPrompt-B_ifgEZ5.css +1 -0
  28. package/web/assets/{EditorIcon-B58cXgvK.js → OrgKeyPrompt-BxEMKrE8.js} +15 -15
  29. package/web/assets/{ProcessControls-NA6_my0q.js → ProcessControls-DsZzES_m.js} +1 -1
  30. package/web/assets/{ProcessDetailPage-6galJRdd.js → ProcessDetailPage-Cixw0kzN.js} +1 -1
  31. package/web/assets/{ProcessMetrics-CUDjJ4s_.js → ProcessMetrics-DyKiOejb.js} +1 -1
  32. package/web/assets/{ProjectDetailPage-DKHoFXjW.js → ProjectDetailPage-B4t6wO1u.js} +1 -1
  33. package/web/assets/{ProjectListPage-C1xSP6Bq.js → ProjectListPage-OnRkCttg.js} +1 -1
  34. package/web/assets/{RandomJobTestPage-BAuT49yE.js → RandomJobTestPage-CHFjewln.js} +1 -1
  35. package/web/assets/{ScenarioEditorPage-CROCV83A.js → ScenarioEditorPage-CgfWcb_c.js} +1 -1
  36. package/web/assets/{SendToChatDialog-BfaLVfzw.js → SendToChatDialog-CH1WQCmJ.js} +1 -1
  37. package/web/assets/{ServiceControlsBar-DE0In-jH.js → ServiceControlsBar-xjfBazSf.js} +1 -1
  38. package/web/assets/{ServiceDetailPage-0iIv9RqU.js → ServiceDetailPage-DEatx8sw.js} +1 -1
  39. package/web/assets/{ServiceFormPage-D-tLX8jE.js → ServiceFormPage-DJrENgxg.js} +1 -1
  40. package/web/assets/SettingsPage-CdH2m7bE.js +2063 -0
  41. package/web/assets/{SettingsPage-ySsQCeYE.css → SettingsPage-uCS5lY2z.css} +1 -1
  42. package/web/assets/{UnlockPage-flNU5Iky.js → UnlockPage-B0RbZa3X.js} +1 -1
  43. package/web/assets/{VariablesTable-BnCSYLD4.js → VariablesTable-CKlqTB72.js} +1 -1
  44. package/web/assets/{VaultMigrationPage-BSv9anTA.js → VaultMigrationPage-DoHQ8K9r.js} +1 -1
  45. package/web/assets/{VersionBadge-zyKx_N_w.js → VersionBadge-DsAFH0Ue.js} +1 -1
  46. package/web/assets/WikiPage-7Te7bHiz.js +1 -0
  47. package/web/assets/{WikiView-BZZ5mybT.js → WikiView-r_GcdKCd.js} +1 -1
  48. package/web/assets/{add-scalar-classes-DZb8OCPH.js → add-scalar-classes-D6dHpiNp.js} +3 -3
  49. package/web/assets/auth-errors-BfORQzSz.js +1 -0
  50. package/web/assets/{autocomplete-DGLJp6Xx.js → autocomplete-BP9XlSM5.js} +1 -1
  51. package/web/assets/{basic-shape-diamond.svg-D7lBpWcu.js → basic-shape-diamond.svg-BgQofi36.js} +1 -1
  52. package/web/assets/{basic-shape-hexagon.svg-BIDPqohs.js → basic-shape-hexagon.svg-Cbs6DpQe.js} +1 -1
  53. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-iWUF3CNK.js → basic-shape-primary-circle-ellipse-round.svg-TNnxm2sV.js} +1 -1
  54. package/web/assets/{basic-shape-primary-square-rectangle.svg-BQy8tY9i.js → basic-shape-primary-square-rectangle.svg-BH-cXFR6.js} +1 -1
  55. package/web/assets/{basic-shape-shield.svg-Dcov5U2N.js → basic-shape-shield.svg-BcEalXk7.js} +1 -1
  56. package/web/assets/{browser-DrMkXWE3.js → browser-BSczRAHl.js} +1 -1
  57. package/web/assets/{browser-Dc4T6GL2.js → browser-iWU5tRyk.js} +1 -1
  58. package/web/assets/{card-DADdd2-i.js → card-B3SDMIrv.js} +1 -1
  59. package/web/assets/{checkbox-By0TwAz_.js → checkbox-C34UH9mT.js} +1 -1
  60. package/web/assets/{chip-W5HkUiZA.js → chip-BQPkeUK8.js} +1 -1
  61. package/web/assets/{client-Be8SiY8s.js → client-CEpwc1wT.js} +1 -1
  62. package/web/assets/{cloud-chat.store-GKWq9kin.js → cloud-chat.store-DXxnceOw.js} +1 -1
  63. package/web/assets/{cloud-session-CJ4n3dbT.js → cloud-session-CUvvULlO.js} +1 -1
  64. package/web/assets/{column-P4Yoqttz.js → column-B28pW0m1.js} +1 -1
  65. package/web/assets/{computer-device-desktop-monitor.svg-BjBC4Q_B.js → computer-device-desktop-monitor.svg-Dv1BZJxY.js} +1 -1
  66. package/web/assets/{computer-device-desktop.svg-C7H8X0sb.js → computer-device-desktop.svg-Ckwu3csA.js} +1 -1
  67. package/web/assets/{computer-device-laptop.svg-GDU5987h.js → computer-device-laptop.svg-BSzceNKl.js} +1 -1
  68. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BcWod8vA.js → computer-device-mobile-phone-android-samsung-back.svg-CrX8oxCE.js} +1 -1
  69. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Cj58lY5g.js → computer-device-mobile-phone-android-samsung.svg-fVwo88Wc.js} +1 -1
  70. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CtJM7Ul_.js → computer-device-mobile-phone-iphone-x-back.svg-B-fvFqUl.js} +1 -1
  71. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BiSi4riW.js → computer-device-mobile-phone-iphone-x.svg-BiE6kuqM.js} +1 -1
  72. package/web/assets/{computer-device-mobile-tablet-touch.svg-BAMVDwHH.js → computer-device-mobile-tablet-touch.svg-Dbf98OTo.js} +1 -1
  73. package/web/assets/{computer-device-mobile-tablet.svg-quWU62em.js → computer-device-mobile-tablet.svg-DjfJDeuV.js} +1 -1
  74. package/web/assets/{computer-device-network-ethernet-cat6.svg-eoCbNWkF.js → computer-device-network-ethernet-cat6.svg-2ilhWSZb.js} +1 -1
  75. package/web/assets/{computer-device-network-lan-www.svg-AR5jmH9w.js → computer-device-network-lan-www.svg-L2zqA0qi.js} +1 -1
  76. package/web/assets/{computer-device-network-wifi-connection.svg-C3-i1o4I.js → computer-device-network-wifi-connection.svg-Dz1G8X1v.js} +1 -1
  77. package/web/assets/{computer-device-network-wifi-router.svg-D8_62H2U.js → computer-device-network-wifi-router.svg-ByaJ9Vd4.js} +1 -1
  78. package/web/assets/{cssMode-CfDickSl.js → cssMode-5xCwdwYr.js} +1 -1
  79. package/web/assets/{divider-DOwWKUnp.js → divider-OrP__TqB.js} +1 -1
  80. package/web/assets/{ecology-science-erlenmeyer-flask.svg-bmj1315r.js → ecology-science-erlenmeyer-flask.svg-z19ZFScG.js} +1 -1
  81. package/web/assets/{fieldset-CM6GY5DX.js → fieldset-D2DdnZJH.js} +1 -1
  82. package/web/assets/{freemarker2-B_0Gh4L-.js → freemarker2-C0ZqWFaJ.js} +1 -1
  83. package/web/assets/{handlebars-D7Oha3sz.js → handlebars-BVe8_lVF.js} +1 -1
  84. package/web/assets/{html-BDq-ql3l.js → html-C4O3aMfr.js} +1 -1
  85. package/web/assets/{htmlMode-DVuzX8LQ.js → htmlMode-CBb2rFbg.js} +1 -1
  86. package/web/assets/{image-flash-lightning.svg-pdHiRywD.js → image-flash-lightning.svg-BkbxYhT7.js} +1 -1
  87. package/web/assets/{image-picture-flower.svg-BJarIt4k.js → image-picture-flower.svg-S9ZTdXKD.js} +1 -1
  88. package/web/assets/{index-Dk3h9927.js → index-DXG0UWd7.js} +5 -5
  89. package/web/assets/{interface-alert-exclamation-diamond.svg-CZUf0TtR.js → interface-alert-exclamation-diamond.svg-slOqXVGS.js} +1 -1
  90. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B1qbmOvN.js → interface-alert-exclamation-triangle-warning.svg-IBqAKxii.js} +1 -1
  91. package/web/assets/{interface-alert-information-circle.svg-DAH6I2Rk.js → interface-alert-information-circle.svg-CAuUmEYS.js} +1 -1
  92. package/web/assets/{interface-award-crown.svg-Co-un_0E.js → interface-award-crown.svg-DpSkbQWy.js} +1 -1
  93. package/web/assets/{interface-bookmark.svg-BoAQ5WAA.js → interface-bookmark-tag.svg-Z8XyZfV3.js} +1 -1
  94. package/web/assets/{interface-bookmark-tag.svg-DCeSL4gX.js → interface-bookmark.svg-73odYUkg.js} +1 -1
  95. package/web/assets/{interface-calendar-date-one.svg-KM5TH_vj.js → interface-calendar-date-one.svg-Chbvhktw.js} +1 -1
  96. package/web/assets/{interface-content-book-open-pages.svg-2t-0H_Nl.js → interface-content-book-open-pages.svg-DtbXnLmc.js} +1 -1
  97. package/web/assets/{interface-content-book-page.svg-Dx9U_5uo.js → interface-content-book-page.svg-Cp0yvdE3.js} +1 -1
  98. package/web/assets/{interface-content-file.svg-CW_9AGDl.js → interface-content-file.svg-B8qEoW3J.js} +1 -1
  99. package/web/assets/interface-content-folder.svg-D-7Uh3Nj.js +1 -0
  100. package/web/assets/{interface-content-folder.svg-DgU2KM8d.js → interface-content-folder.svg-RtFW9_dY.js} +1 -1
  101. package/web/assets/{interface-copy-clipboard.svg-BXCY1wtO.js → interface-copy-clipboard.svg-DNVQlJtH.js} +1 -1
  102. package/web/assets/{interface-edit-attachment.svg-lJsBgdnd.js → interface-edit-attachment.svg-ByJXy13r.js} +1 -1
  103. package/web/assets/{interface-edit-binocular.svg-N_us2_d_.js → interface-edit-binocular.svg-BzqoQhEm.js} +1 -1
  104. package/web/assets/{interface-edit-magic-wand.svg-GlHpAoND.js → interface-edit-magic-wand.svg-B2jJjUCa.js} +1 -1
  105. package/web/assets/{interface-edit-tool-paint-roller.svg-B3s6tHLT.js → interface-edit-tool-paint-roller.svg-CsmEn_3J.js} +1 -1
  106. package/web/assets/{interface-edit-tool-pencil.svg-BhJltLPD.js → interface-edit-tool-pencil.svg-EoIfNl6X.js} +1 -1
  107. package/web/assets/{interface-favorite-award.svg-CAC4qrCL.js → interface-favorite-award.svg-DK7nXxHO.js} +1 -1
  108. package/web/assets/{interface-favorite-flag.svg-5dLI18uT.js → interface-favorite-flag.svg-CUxrgPTZ.js} +1 -1
  109. package/web/assets/{interface-favorite-heart.svg-DAWMqUS8.js → interface-favorite-heart.svg-DJLIEXPA.js} +1 -1
  110. package/web/assets/{interface-favorite-star.svg-C9DICFBb.js → interface-favorite-star.svg-BTMuuwpH.js} +1 -1
  111. package/web/assets/{interface-favorite-stars-sparkles.svg-zD5-a95u.js → interface-favorite-stars-sparkles.svg-DzXLAVN_.js} +1 -1
  112. package/web/assets/{interface-hierarchy-flowchart.svg-BzAAQM0v.js → interface-hierarchy-flowchart.svg-Blcn6Alf.js} +1 -1
  113. package/web/assets/{interface-home-house.svg-CB_mzszz.js → interface-home-house.svg-C9qdQODR.js} +1 -1
  114. package/web/assets/{interface-hyperlink.svg-BUMVlOAE.js → interface-hyperlink.svg-Dpxu8Mi-.js} +1 -1
  115. package/web/assets/{interface-lighting-brightness.svg-wPXo2pZW.js → interface-lighting-brightness.svg-CzG8cyLV.js} +1 -1
  116. package/web/assets/{interface-lock-closed.svg-Qj4fLj5D.js → interface-lock-closed.svg-CIo6OHa5.js} +1 -1
  117. package/web/assets/{interface-lock-open-unlock.svg-PaaFsUiU.js → interface-lock-open-unlock.svg-BKlPnOqW.js} +1 -1
  118. package/web/assets/{interface-login-key.svg-By-IZ7EH.js → interface-login-key.svg-BGXa5pEM.js} +1 -1
  119. package/web/assets/{interface-search.svg-D1s5Gsyk.js → interface-search.svg-BbKjr02A.js} +1 -1
  120. package/web/assets/{interface-setting-cog.svg-BIjZVOwf.js → interface-setting-cog.svg-Bt3FCaKU.js} +1 -1
  121. package/web/assets/{interface-share-megaphone-bullhorn.svg-1oPoDdIL.js → interface-share-megaphone-bullhorn.svg-DGEK_3ut.js} +1 -1
  122. package/web/assets/{interface-share-rocket.svg-B07UdOH6.js → interface-share-rocket.svg-Cacv74v_.js} +1 -1
  123. package/web/assets/{interface-share-satellite.svg-AxSAr1JP.js → interface-share-satellite.svg-BxY5GCYl.js} +1 -1
  124. package/web/assets/{interface-share-space-ship.svg-ghRJYkXG.js → interface-share-space-ship.svg-eD9oPxtU.js} +1 -1
  125. package/web/assets/{interface-share.svg-jVvV5wf9.js → interface-share.svg-Vw77iGOE.js} +1 -1
  126. package/web/assets/{interface-signal-square.svg-BB8KvxNI.js → interface-signal-square.svg-MBnH4qfE.js} +1 -1
  127. package/web/assets/{interface-time-clock-circle.svg-Bt_vXLib.js → interface-time-clock-circle.svg-DMBUb3Je.js} +1 -1
  128. package/web/assets/{interface-time-hour-glass.svg-CqsWXDx3.js → interface-time-hour-glass.svg-DWWA8acs.js} +1 -1
  129. package/web/assets/{interface-users-multiple.svg-DfZzhCkI.js → interface-users-multiple.svg-BV1Uryss.js} +1 -1
  130. package/web/assets/{interface-weather-moon.svg-B5X37fBl.js → interface-weather-moon.svg-CmeBs_AF.js} +1 -1
  131. package/web/assets/{javascript-DWxMn_QC.js → javascript-loLv5ccj.js} +1 -1
  132. package/web/assets/{jsonMode-BWOZzM3d.js → jsonMode-Ccfv_oEC.js} +1 -1
  133. package/web/assets/{liquid-B0VtIwJX.js → liquid-CZM5JLhR.js} +1 -1
  134. package/web/assets/{lspLanguageFeatures-DXFZNqLk.js → lspLanguageFeatures-8aPIDaYP.js} +1 -1
  135. package/web/assets/{mail-chat-bubble-square.svg-DVi8sPM-.js → mail-chat-bubble-square.svg-CjB8OHYm.js} +1 -1
  136. package/web/assets/{mail-send-email-paper-airplane.svg-Dlk35rWL.js → mail-send-email-paper-airplane.svg-DCXvRWfq.js} +1 -1
  137. package/web/assets/{mail-send-envelope.svg-DpEE06QS.js → mail-send-envelope.svg-DViXfBW4.js} +1 -1
  138. package/web/assets/{mdx-XjdLNHo4.js → mdx-DD66jse7.js} +1 -1
  139. package/web/assets/{message-TASaHoOx.js → message-W1PyOQ2F.js} +1 -1
  140. package/web/assets/{minus-BO9HwuhK.js → minus-DQ8gbTH4.js} +1 -1
  141. package/web/assets/{modal-Dadfdblm.js → modal-BKCymPJF.js} +1 -1
  142. package/web/assets/modal-h4FcaVWO.js +1 -0
  143. package/web/assets/{money-cashier-receipt.svg-D3T1gdZO.js → money-cashier-receipt.svg-fS3WhKxU.js} +1 -1
  144. package/web/assets/{money-currency-dollar-pay.svg-RhoFWz8z.js → money-currency-dollar-pay.svg-B-GlcpqK.js} +1 -1
  145. package/web/assets/{money-graph-arrow-increase.svg-BENn1K5R.js → money-graph-arrow-increase.svg-Gse-yru4.js} +1 -1
  146. package/web/assets/{money-graph-bar-chart-increase.svg-COGPwero.js → money-graph-bar-chart-increase.svg-1VA_oFdg.js} +1 -1
  147. package/web/assets/{multiselect-QI9V-o7t.js → multiselect-IRSCnT5b.js} +1 -1
  148. package/web/assets/{nature-ecology-leaf.svg-CyQJuX9P.js → nature-ecology-leaf.svg-DkQ6sg3p.js} +1 -1
  149. package/web/assets/{password-68lVUSdj.js → password-fS1Zrv0S.js} +1 -1
  150. package/web/assets/{phone-telephone.svg-Cp49xUlu.js → phone-telephone.svg-CCcT_kGH.js} +1 -1
  151. package/web/assets/{plus-CtAUJUu2.js → plus-CV7Y3O7a.js} +1 -1
  152. package/web/assets/process.store-BwyNcvM-.js +1 -0
  153. package/web/assets/{programming-bug.svg-DJCw-G7S.js → programming-bug.svg-BE5fk7c1.js} +1 -1
  154. package/web/assets/{programming-cloud.svg-Dawch6nl.js → programming-cloud.svg-SHfXron-.js} +1 -1
  155. package/web/assets/{programming-computer-database-server.svg-wM3gh9nl.js → programming-computer-database-server.svg-CppInGi7.js} +1 -1
  156. package/web/assets/{programming-computer-database.svg-B-CBQ4FN.js → programming-computer-database.svg-CiWXlyk7.js} +1 -1
  157. package/web/assets/{programming-module-four-layout.svg-B8K3IYUP.js → programming-module-four-layout.svg-CCYXwyRe.js} +1 -1
  158. package/web/assets/{programming-module-three.svg-BVHpxetj.js → programming-module-three.svg-tMvh2U39.js} +1 -1
  159. package/web/assets/{programming-module.svg-CXID9wrd.js → programming-module.svg-DHNPcHmg.js} +1 -1
  160. package/web/assets/{programming-script-code.svg-lSz-9Xfp.js → programming-script-code.svg-W2dFQC3x.js} +1 -1
  161. package/web/assets/{python-DL0o4ZFa.js → python-B33HGCYv.js} +1 -1
  162. package/web/assets/{razor-1T_DtFYV.js → razor-DyfLMTvL.js} +1 -1
  163. package/web/assets/router-C327JbK8.js +1 -0
  164. package/web/assets/settings-scope-BfLU4Vh1.js +1 -0
  165. package/web/assets/{settings.store-xvHd8xGI.js → settings.store-DGPxpcXI.js} +1 -1
  166. package/web/assets/{shopping-cart.svg-TZA8HEQB.js → shopping-cart.svg-CUlE9ljA.js} +1 -1
  167. package/web/assets/{shopping-gift-present.svg-CRGiXfBk.js → shopping-gift-present.svg-C8u4Spqt.js} +1 -1
  168. package/web/assets/{shopping-shipping-box-parcel-package.svg-BuEMZoGf.js → shopping-shipping-box-parcel-package.svg-Bco5k-Nn.js} +1 -1
  169. package/web/assets/{src-Dy-bHT95.js → src-CAYTBWKf.js} +1 -1
  170. package/web/assets/{src-Be-L2-AH.js → src-CoFNXAUF.js} +1 -1
  171. package/web/assets/{tabpanel-BP3edJSv.js → tabpanel-D_dp6bvn.js} +1 -1
  172. package/web/assets/{tag-new-circle.svg-CsOt9-U5.js → tag-new-circle.svg-DZbLZE7D.js} +1 -1
  173. package/web/assets/{toggleswitch-B49OhBFD.js → toggleswitch-Clnqsa0l.js} +1 -1
  174. package/web/assets/{travel-map-earth-globe.svg-BTR5ahca.js → travel-map-earth-globe.svg-CNPF8kpi.js} +1 -1
  175. package/web/assets/trpc-vHs3bLVN.js +1 -0
  176. package/web/assets/{tsMode-BUrbWgsu.js → tsMode-CdyXgNAL.js} +1 -1
  177. package/web/assets/{typescript-tKGzqX3Z.js → typescript-BKtVeeAK.js} +1 -1
  178. package/web/assets/useAiChatDrawer-BXQhtMZ9.js +1 -0
  179. package/web/assets/{useCloudOrg-0VY86rgI.js → useCloudOrg-Bb7wM-wB.js} +1 -1
  180. package/web/assets/{useProjectCatalog-C2BH8Bnr.js → useProjectCatalog-DMSIWolF.js} +1 -1
  181. package/web/assets/{xml-4CdtJV3Y.js → xml-Ci4zJYqg.js} +1 -1
  182. package/web/assets/{yaml-Cj7LK0oJ.js → yaml-DmvRZHVF.js} +1 -1
  183. package/web/index.html +1 -1
  184. package/agent-manager-4EKOSJBR.js +0 -7
  185. package/chunk-F7HMKPFB.js.map +0 -1
  186. package/src-7YQHXQ6L.js.map +0 -1
  187. package/web/assets/AiChatPage-DvPM0b-g.js +0 -1
  188. package/web/assets/AppLayout-CxU9x6en.js +0 -1
  189. package/web/assets/CloudAccountPage-CzUpIjdc.js +0 -1
  190. package/web/assets/EditorIcon-zS3bHXe1.css +0 -1
  191. package/web/assets/SettingsPage-ClNw9uEA.js +0 -2063
  192. package/web/assets/WikiPage-C9Bruew6.js +0 -1
  193. package/web/assets/auth-errors-CU6pB2jP.js +0 -1
  194. package/web/assets/interface-content-folder.svg-C9_1n23c.js +0 -1
  195. package/web/assets/modal-B0K9qtIb.js +0 -1
  196. package/web/assets/process.store-DkO9CCEs.js +0 -1
  197. package/web/assets/router-BKOiPGCa.js +0 -1
  198. package/web/assets/settings-scope-DrVQNSTC.js +0 -1
  199. package/web/assets/trpc-hOuUVUMw.js +0 -1
  200. package/web/assets/useAiChatDrawer-CZS0RLp8.js +0 -1
  201. /package/{agent-manager-4EKOSJBR.js.map → agent-manager-5SQNJICJ.js.map} +0 -0
package/index.js CHANGED
@@ -270,7 +270,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
270
270
  });
271
271
  }
272
272
  async function main() {
273
- const { createLocalServer, pullEnv, PullEnvError, registerInstance } = await import("./src-7YQHXQ6L.js");
273
+ const { createLocalServer, pullEnv, PullEnvError, registerInstance } = await import("./src-RY3O6RUF.js");
274
274
  if (isPullEnv) {
275
275
  if (!serviceArg) {
276
276
  console.error("Error: --service (-s) is required with --pull-env");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runeya/runeya",
3
- "version": "2.0.59",
3
+ "version": "2.0.61",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -95,8 +95,9 @@ import {
95
95
  traefikManager,
96
96
  vaultFor,
97
97
  vaultIdOfRoot,
98
+ wasRead,
98
99
  writeEntity
99
- } from "./chunk-F7HMKPFB.js";
100
+ } from "./chunk-OOQ74RCO.js";
100
101
 
101
102
  // ../server/src/create-server.ts
102
103
  import express from "express";
@@ -179,7 +180,7 @@ var ApiKeyStore = class {
179
180
  }
180
181
  async persistFile(isPublic, owner) {
181
182
  const path = await this.filePath(isPublic, owner);
182
- if (this.unreadable.get(owner)?.size && await hasChangedSinceRead(path)) {
183
+ if (this.unreadable.get(owner)?.size && wasRead(path) && await hasChangedSinceRead(path)) {
183
184
  console.warn(
184
185
  `[api-key-store] ${path} a chang\xE9 depuis sa lecture \u2014 \xE9criture ignor\xE9e pour ne pas \xE9craser une r\xE9paration faite en dehors du serveur.`
185
186
  );
@@ -539,8 +540,8 @@ import { TRPCError as TRPCError2 } from "@trpc/server";
539
540
  // ../server/src/services/project-store.ts
540
541
  import { randomUUID as randomUUID2 } from "crypto";
541
542
  import { EventEmitter } from "events";
542
- import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, rm } from "fs/promises";
543
- import { join as join3 } from "path";
543
+ import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3, rm } from "fs/promises";
544
+ import { join as join4 } from "path";
544
545
 
545
546
  // ../server/src/utils/ensure-data-gitignore.ts
546
547
  import { writeFile as writeFile2 } from "fs/promises";
@@ -585,8 +586,108 @@ async function ensureDataGitignore(dataDir) {
585
586
  await writeFile2(gitignorePath, GITIGNORE_CONTENT, "utf-8");
586
587
  }
587
588
 
589
+ // ../server/src/services/project-path-store.ts
590
+ import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, stat } from "fs/promises";
591
+ import { isAbsolute, join as join3, resolve } from "path";
592
+ var FILENAME = "project-paths.json";
593
+ var ProjectPathStore = class {
594
+ paths = null;
595
+ async load() {
596
+ if (this.paths) return this.paths;
597
+ try {
598
+ const raw = await readFile2(machineFilePath(FILENAME), "utf-8");
599
+ const parsed = JSON.parse(raw);
600
+ this.paths = isPathMap(parsed) ? parsed : {};
601
+ } catch {
602
+ this.paths = {};
603
+ }
604
+ return this.paths;
605
+ }
606
+ async persist() {
607
+ await mkdir2(machineRoot(), { recursive: true });
608
+ const filePath = machineFilePath(FILENAME);
609
+ const tmpPath = `${filePath}.tmp`;
610
+ await writeFile3(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
611
+ await rename2(tmpPath, filePath);
612
+ await chmod2(filePath, 384);
613
+ }
614
+ /** The directory chosen for this project, or null while it has none. */
615
+ async get(ref) {
616
+ const paths = await this.load();
617
+ return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
618
+ }
619
+ async all() {
620
+ return { ...await this.load() };
621
+ }
622
+ /**
623
+ * The project already placed in this directory, if any other one is.
624
+ *
625
+ * Answers with the key as stored — the couple, or the bare id for an entry an
626
+ * older version wrote — which is enough to say "taken" and to name it.
627
+ */
628
+ async projectAt(path, exclude) {
629
+ const target = resolve(path);
630
+ const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
631
+ for (const [key, dir] of Object.entries(await this.load())) {
632
+ if (!excluded.includes(key) && resolve(dir) === target) return key;
633
+ }
634
+ return null;
635
+ }
636
+ async set(ref, path) {
637
+ if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
638
+ const paths = await this.load();
639
+ delete paths[ref.id];
640
+ paths[projectKey(ref)] = resolve(path);
641
+ await this.persist();
642
+ }
643
+ /**
644
+ * Faire suivre le répertoire quand un projet change d'organisation.
645
+ *
646
+ * La clé est le couple `(organisation, projet)` : publier un projet local le
647
+ * fait passer de `local:<id>` à `<org>:<id>`, et l'entrée d'avant cesse alors
648
+ * de répondre — `get` ne retombe que sur l'identifiant nu, forme héritée, pas
649
+ * sur `local:<id>`. Le projet se retrouvait donc sans emplacement connu juste
650
+ * après avoir été publié, alors que ses sources n'avaient pas bougé d'un
651
+ * octet.
652
+ */
653
+ async relocate(from, to) {
654
+ const paths = await this.load();
655
+ const previous = paths[projectKey(from)] ?? paths[from.id];
656
+ if (!previous) return;
657
+ delete paths[projectKey(from)];
658
+ delete paths[from.id];
659
+ paths[projectKey(to)] = previous;
660
+ await this.persist();
661
+ }
662
+ async clear(ref) {
663
+ const paths = await this.load();
664
+ const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
665
+ if (keys.length === 0) return;
666
+ for (const key of keys) delete paths[key];
667
+ await this.persist();
668
+ }
669
+ /** Test seam: forget what was read from disk. */
670
+ reset() {
671
+ this.paths = null;
672
+ }
673
+ };
674
+ function isPathMap(value) {
675
+ return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
676
+ }
677
+ async function holdsRuneyaProject(path) {
678
+ for (const candidate of ["project.json", "projects.json"]) {
679
+ try {
680
+ await stat(join3(path, ".runeya", candidate));
681
+ return true;
682
+ } catch {
683
+ }
684
+ }
685
+ return false;
686
+ }
687
+ var projectPathStore = new ProjectPathStore();
688
+
588
689
  // ../server/src/services/project-store.ts
589
- var FILENAME = "project.json";
690
+ var FILENAME2 = "project.json";
590
691
  var LEGACY_FILENAME = "projects.json";
591
692
  function toDiskForm(project) {
592
693
  const { activeEnvironmentId: _runtimeOnly, ...rest } = project;
@@ -596,14 +697,14 @@ async function readLocalProject() {
596
697
  const root = localVaultRoot();
597
698
  let current = null;
598
699
  try {
599
- const raw = await readFile2(join3(root, FILENAME), "utf-8");
700
+ const raw = await readFile3(join4(root, FILENAME2), "utf-8");
600
701
  const parsed = ProjectSchema.safeParse(JSON.parse(raw));
601
702
  if (parsed.success) current = parsed.data;
602
703
  } catch {
603
704
  }
604
705
  let legacy;
605
706
  try {
606
- legacy = JSON.parse(await readFile2(join3(root, LEGACY_FILENAME), "utf-8"));
707
+ legacy = JSON.parse(await readFile3(join4(root, LEGACY_FILENAME), "utf-8"));
607
708
  } catch {
608
709
  return { local: current, strayCloud: [] };
609
710
  }
@@ -613,7 +714,7 @@ async function readLocalProject() {
613
714
  if (locals.length > 1) {
614
715
  const names = locals.map((p) => `"${p.name}" (${p.id})`).join(", ");
615
716
  throw new Error(
616
- `${join3(root, LEGACY_FILENAME)} holds ${locals.length} local projects: ${names}. A directory now holds a single local project \u2014 move the others to their own directory, or into an organization, then start again.`
717
+ `${join4(root, LEGACY_FILENAME)} holds ${locals.length} local projects: ${names}. A directory now holds a single local project \u2014 move the others to their own directory, or into an organization, then start again.`
617
718
  );
618
719
  }
619
720
  return { local: locals[0] ?? null, strayCloud };
@@ -622,7 +723,7 @@ async function readCloudProjects() {
622
723
  const found = [];
623
724
  for (const { orgId, projectId, root } of await listCloudVaults()) {
624
725
  try {
625
- const raw = await readFile2(join3(root, FILENAME), "utf-8");
726
+ const raw = await readFile3(join4(root, FILENAME2), "utf-8");
626
727
  const parsed = ProjectSchema.safeParse({ ...JSON.parse(raw), id: projectId, orgId });
627
728
  if (parsed.success) found.push({ project: parsed.data, root });
628
729
  } catch {
@@ -652,13 +753,13 @@ var ProjectStore = class {
652
753
  /** Emits `'saved'` after every persisted mutation, for the cloud sync bridge. */
653
754
  events = new EventEmitter();
654
755
  getFilePath(root = localVaultRoot()) {
655
- return join3(root, FILENAME);
756
+ return join4(root, FILENAME2);
656
757
  }
657
758
  async writeAtomic(filePath, data) {
658
759
  const tmpPath = filePath + ".tmp";
659
- await writeFile3(tmpPath, data, "utf-8");
660
- await rename2(tmpPath, filePath);
661
- await chmod2(filePath, 384);
760
+ await writeFile4(tmpPath, data, "utf-8");
761
+ await rename3(tmpPath, filePath);
762
+ await chmod3(filePath, 384);
662
763
  }
663
764
  /** Adopt a project read from disk, remembering which vault it came from. */
664
765
  async absorb(p, root) {
@@ -733,10 +834,10 @@ var ProjectStore = class {
733
834
  await rm(this.getFilePath(), { force: true }).catch(() => {
734
835
  });
735
836
  }
736
- await rename2(join3(localVaultRoot(), LEGACY_FILENAME), join3(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
837
+ await rename3(join4(localVaultRoot(), LEGACY_FILENAME), join4(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
737
838
  });
738
839
  for (const { project, root } of cloud) {
739
- await mkdir2(root, { recursive: true });
840
+ await mkdir3(root, { recursive: true });
740
841
  await this.writeAtomic(this.getFilePath(root), JSON.stringify(toDiskForm(project), null, 2));
741
842
  setProjectVault(project, root);
742
843
  }
@@ -864,6 +965,7 @@ var ProjectStore = class {
864
965
  this.projects.delete(key);
865
966
  await this.save();
866
967
  await this.discardVault(project);
968
+ await projectPathStore.clear(project);
867
969
  return true;
868
970
  }
869
971
  /**
@@ -897,6 +999,7 @@ var ProjectStore = class {
897
999
  forgetProject(project);
898
1000
  await serviceStore.forgetLocally(project.serviceIds ?? []);
899
1001
  await environmentStore.forgetByProject(project.id);
1002
+ await projectPathStore.clear(project);
900
1003
  }
901
1004
  /** All projects linked to a given organization (for the sync bridge). */
902
1005
  async listByOrg(orgId) {
@@ -1025,9 +1128,9 @@ var projectStore = new ProjectStore();
1025
1128
  registerProjectLoader(() => projectStore.list().then(() => void 0));
1026
1129
 
1027
1130
  // ../server/src/services/environment-overrides-store.ts
1028
- import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3 } from "fs/promises";
1029
- import { dirname as dirname2, join as join4 } from "path";
1030
- var FILENAME2 = "environment-overrides.json";
1131
+ import { readFile as readFile4, writeFile as writeFile5, rename as rename4, mkdir as mkdir4, chmod as chmod4 } from "fs/promises";
1132
+ import { dirname as dirname2, join as join5 } from "path";
1133
+ var FILENAME3 = "environment-overrides.json";
1031
1134
  var EnvironmentOverridesStore = class {
1032
1135
  data = {};
1033
1136
  loaded = false;
@@ -1059,11 +1162,11 @@ var EnvironmentOverridesStore = class {
1059
1162
  async rootFor(variableId) {
1060
1163
  const root = await environmentStore.rootOfVariable(variableId);
1061
1164
  if (root) return root;
1062
- return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME2));
1165
+ return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME3));
1063
1166
  }
1064
1167
  /** Where earlier versions kept them: read once, rewritten to their vaults. */
1065
1168
  getLegacyFilePath() {
1066
- return legacyMachineFilePath(FILENAME2);
1169
+ return legacyMachineFilePath(FILENAME3);
1067
1170
  }
1068
1171
  /**
1069
1172
  * Read every vault, then the places older versions used.
@@ -1079,13 +1182,13 @@ var EnvironmentOverridesStore = class {
1079
1182
  const roots = await allVaultRoots();
1080
1183
  const sources = [
1081
1184
  this.getLegacyFilePath(),
1082
- await keyedFilePath(FILENAME2),
1083
- ...roots.map((root) => join4(root, FILENAME2))
1185
+ await keyedFilePath(FILENAME3),
1186
+ ...roots.map((root) => join5(root, FILENAME3))
1084
1187
  ];
1085
1188
  for (const path of sources) {
1086
1189
  let parsed;
1087
1190
  try {
1088
- parsed = JSON.parse(await readFile3(path, "utf-8"));
1191
+ parsed = JSON.parse(await readFile4(path, "utf-8"));
1089
1192
  } catch {
1090
1193
  continue;
1091
1194
  }
@@ -1136,12 +1239,12 @@ var EnvironmentOverridesStore = class {
1136
1239
  this.diskEncryptedSlots,
1137
1240
  extractEncryptedVariableSlots(encrypted)
1138
1241
  );
1139
- await mkdir3(root, { recursive: true });
1140
- const path = join4(root, FILENAME2);
1242
+ await mkdir4(root, { recursive: true });
1243
+ const path = join5(root, FILENAME3);
1141
1244
  const tmpPath = path + ".tmp";
1142
- await writeFile4(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
1143
- await rename3(tmpPath, path);
1144
- await chmod3(path, 384);
1245
+ await writeFile5(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
1246
+ await rename4(tmpPath, path);
1247
+ await chmod4(path, 384);
1145
1248
  }
1146
1249
  }
1147
1250
  /**
@@ -1573,7 +1676,7 @@ var EnvironmentResolver = class {
1573
1676
  var environmentResolver = new EnvironmentResolver();
1574
1677
 
1575
1678
  // ../server/src/services/audit-service.ts
1576
- import { appendFile, readFile as readFile4, stat, rename as rename4, unlink, readdir, mkdir as mkdir4 } from "fs/promises";
1679
+ import { appendFile, readFile as readFile5, stat as stat2, rename as rename5, unlink, readdir, mkdir as mkdir5 } from "fs/promises";
1577
1680
  var AUDIT_FILENAME = "audit.log";
1578
1681
  var MAX_FILE_SIZE = 10 * 1024 * 1024;
1579
1682
  var MAX_AGE_DAYS = 30;
@@ -1593,7 +1696,7 @@ var AuditService = class {
1593
1696
  const line = JSON.stringify(record) + "\n";
1594
1697
  const filepath = this.getFilePath();
1595
1698
  try {
1596
- await mkdir4(machineRoot(), { recursive: true });
1699
+ await mkdir5(machineRoot(), { recursive: true });
1597
1700
  await appendFile(filepath, line, "utf-8");
1598
1701
  await this.rotateIfNeeded();
1599
1702
  } catch (err) {
@@ -1606,7 +1709,7 @@ var AuditService = class {
1606
1709
  const filepath = this.getFilePath();
1607
1710
  let lines;
1608
1711
  try {
1609
- const content = await readFile4(filepath, "utf-8");
1712
+ const content = await readFile5(filepath, "utf-8");
1610
1713
  lines = content.trim().split("\n").filter(Boolean);
1611
1714
  } catch {
1612
1715
  return { entries: [], total: 0 };
@@ -1637,9 +1740,9 @@ var AuditService = class {
1637
1740
  async rotateIfNeeded() {
1638
1741
  const filepath = this.getFilePath();
1639
1742
  try {
1640
- const stats = await stat(filepath);
1743
+ const stats = await stat2(filepath);
1641
1744
  if (stats.size > MAX_FILE_SIZE) {
1642
- await rename4(filepath, this.getRotatedPath());
1745
+ await rename5(filepath, this.getRotatedPath());
1643
1746
  }
1644
1747
  } catch {
1645
1748
  }
@@ -1664,87 +1767,6 @@ var AuditService = class {
1664
1767
  };
1665
1768
  var auditService = new AuditService();
1666
1769
 
1667
- // ../server/src/services/project-path-store.ts
1668
- import { readFile as readFile5, writeFile as writeFile5, rename as rename5, mkdir as mkdir5, chmod as chmod4, stat as stat2 } from "fs/promises";
1669
- import { isAbsolute, join as join5, resolve } from "path";
1670
- var FILENAME3 = "project-paths.json";
1671
- var ProjectPathStore = class {
1672
- paths = null;
1673
- async load() {
1674
- if (this.paths) return this.paths;
1675
- try {
1676
- const raw = await readFile5(machineFilePath(FILENAME3), "utf-8");
1677
- const parsed = JSON.parse(raw);
1678
- this.paths = isPathMap(parsed) ? parsed : {};
1679
- } catch {
1680
- this.paths = {};
1681
- }
1682
- return this.paths;
1683
- }
1684
- async persist() {
1685
- await mkdir5(machineRoot(), { recursive: true });
1686
- const filePath = machineFilePath(FILENAME3);
1687
- const tmpPath = `${filePath}.tmp`;
1688
- await writeFile5(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
1689
- await rename5(tmpPath, filePath);
1690
- await chmod4(filePath, 384);
1691
- }
1692
- /** The directory chosen for this project, or null while it has none. */
1693
- async get(ref) {
1694
- const paths = await this.load();
1695
- return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
1696
- }
1697
- async all() {
1698
- return { ...await this.load() };
1699
- }
1700
- /**
1701
- * The project already placed in this directory, if any other one is.
1702
- *
1703
- * Answers with the key as stored — the couple, or the bare id for an entry an
1704
- * older version wrote — which is enough to say "taken" and to name it.
1705
- */
1706
- async projectAt(path, exclude) {
1707
- const target = resolve(path);
1708
- const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
1709
- for (const [key, dir] of Object.entries(await this.load())) {
1710
- if (!excluded.includes(key) && resolve(dir) === target) return key;
1711
- }
1712
- return null;
1713
- }
1714
- async set(ref, path) {
1715
- if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
1716
- const paths = await this.load();
1717
- delete paths[ref.id];
1718
- paths[projectKey(ref)] = resolve(path);
1719
- await this.persist();
1720
- }
1721
- async clear(ref) {
1722
- const paths = await this.load();
1723
- const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
1724
- if (keys.length === 0) return;
1725
- for (const key of keys) delete paths[key];
1726
- await this.persist();
1727
- }
1728
- /** Test seam: forget what was read from disk. */
1729
- reset() {
1730
- this.paths = null;
1731
- }
1732
- };
1733
- function isPathMap(value) {
1734
- return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
1735
- }
1736
- async function holdsRuneyaProject(path) {
1737
- for (const candidate of ["project.json", "projects.json"]) {
1738
- try {
1739
- await stat2(join5(path, ".runeya", candidate));
1740
- return true;
1741
- } catch {
1742
- }
1743
- }
1744
- return false;
1745
- }
1746
- var projectPathStore = new ProjectPathStore();
1747
-
1748
1770
  // ../server/src/services/org-keys.ts
1749
1771
  import { mkdir as mkdir6 } from "fs/promises";
1750
1772
 
@@ -1969,9 +1991,7 @@ async function installOrgKey(orgId, key, masterPassword) {
1969
1991
  }
1970
1992
  var OrgVaultUnreadableError = class extends Error {
1971
1993
  constructor(orgId) {
1972
- super(
1973
- "Cette organisation est chiffr\xE9e par une cl\xE9 que cette machine n'a pas. Demandez la cl\xE9 \xE0 un membre et adoptez-la avant d'ouvrir ses projets."
1974
- );
1994
+ super("ORG_VAULT_UNREADABLE");
1975
1995
  this.orgId = orgId;
1976
1996
  this.name = "OrgVaultUnreadableError";
1977
1997
  }
@@ -3670,7 +3690,8 @@ ${new Error("trace").stack}`
3670
3690
  }
3671
3691
  const stale = /* @__PURE__ */ new Set();
3672
3692
  for (const root of byRoot.keys()) {
3673
- if (await hasChangedSinceRead(join9(root, FILENAME5))) stale.add(root);
3693
+ const path = join9(root, FILENAME5);
3694
+ if (wasRead(path) && await hasChangedSinceRead(path)) stale.add(root);
3674
3695
  }
3675
3696
  for (const [root, data] of byRoot) {
3676
3697
  const filePath = join9(root, FILENAME5);
@@ -3936,6 +3957,33 @@ var setupRouter = router({
3936
3957
  }))
3937
3958
  };
3938
3959
  }),
3960
+ /**
3961
+ * Éprouver une clé contre le canari du coffre, sans passer par le cloud.
3962
+ *
3963
+ * `cloudSync.checkOrgKey` interroge le canari publié par l'organisation :
3964
+ * il prouve « cette clé est celle de l'organisation », mais il exige que le
3965
+ * cloud réponde et que l'organisation y existe encore. Un poste hors ligne —
3966
+ * ou qui reprend un coffre dont l'organisation a disparu côté cloud — n'avait
3967
+ * alors plus aucun moyen de vérifier une clé avant de l'adopter.
3968
+ *
3969
+ * Le coffre porte pourtant son propre canari, écrit en même temps que sa clé.
3970
+ * Attention à ce qu'il dit : il éprouve la clé COURANTE du coffre, donc il ne
3971
+ * répond « oui » que pour celle déjà en place — c'est-à-dire exactement le
3972
+ * cas où l'adoption n'a rien à faire, et qu'elle refuse. Le confondre avec
3973
+ * une validation de la clé à adopter rendait le parcours impossible : vert
3974
+ * quand le geste est inutile, rouge sinon.
3975
+ */
3976
+ checkOrgKeyLocal: protectedProcedure.input(z7.object({
3977
+ orgId: z7.string().min(1).max(128),
3978
+ keyHex: z7.string().length(64).regex(/^[0-9a-f]+$/i, "Invalid hex format")
3979
+ })).query(async ({ input }) => {
3980
+ const canary = await readVerifyFile(orgVaultRoot(input.orgId));
3981
+ if (!canary) return { isCurrentKey: false, hasCanary: false };
3982
+ return {
3983
+ isCurrentKey: matchesCanary(canary, Buffer.from(input.keyHex, "hex")),
3984
+ hasCanary: true
3985
+ };
3986
+ }),
3939
3987
  /**
3940
3988
  * Submit and validate encryption key.
3941
3989
  * Attempts to decrypt existing data to validate the key.
@@ -7744,7 +7792,7 @@ function tailTranscript(opts) {
7744
7792
 
7745
7793
  // ../server/src/services/ai-runners/claude-pty-runner.ts
7746
7794
  async function getAgentManager() {
7747
- const { agentManager: agentManager2 } = await import("./agent-manager-4EKOSJBR.js");
7795
+ const { agentManager: agentManager2 } = await import("./agent-manager-5SQNJICJ.js");
7748
7796
  return agentManager2;
7749
7797
  }
7750
7798
  function buildPtyArgs(params, sessionId, opts) {
@@ -8397,7 +8445,7 @@ async function shutdownCodexAppServer() {
8397
8445
  }
8398
8446
  }
8399
8447
  async function getAgentManager2() {
8400
- const { agentManager: agentManager2 } = await import("./agent-manager-4EKOSJBR.js");
8448
+ const { agentManager: agentManager2 } = await import("./agent-manager-5SQNJICJ.js");
8401
8449
  return agentManager2;
8402
8450
  }
8403
8451
  function parseRuneyaCurlCommand(command) {
@@ -13565,18 +13613,27 @@ async function orgsToSync() {
13565
13613
 
13566
13614
  // ../server/src/services/org-canary.ts
13567
13615
  var CanaryUnavailableError = class extends Error {
13568
- code = "CANARY_UNAVAILABLE";
13569
- constructor(message) {
13570
- super(message);
13616
+ /** `detail` reste pour les journaux ; le message est le code, pour l'interface. */
13617
+ constructor(detail) {
13618
+ super("CANARY_UNAVAILABLE");
13619
+ this.detail = detail;
13571
13620
  this.name = "CanaryUnavailableError";
13572
13621
  }
13622
+ code = "CANARY_UNAVAILABLE";
13573
13623
  };
13574
13624
  var OrgKeyMismatchError = class extends Error {
13575
13625
  code = "ORG_KEY_MISMATCH";
13626
+ /**
13627
+ * Le message EST le code, comme partout ailleurs sur ces routes.
13628
+ *
13629
+ * Une phrase écrite ici traverse le serveur telle quelle et s'affiche dans
13630
+ * l'interface sans passer par la traduction : une interface en français
13631
+ * annonçait donc l'échec en anglais, et le texte ne pouvait renvoyer nulle
13632
+ * part puisque le serveur ignore où se trouve l'écran qui répare. Le client
13633
+ * traduit `serverErrors.ORG_KEY_MISMATCH` et nomme le chemin.
13634
+ */
13576
13635
  constructor() {
13577
- super(
13578
- "This organization uses a different encryption key. Ask a member for the key already in use, then set it up on this machine before syncing."
13579
- );
13636
+ super("ORG_KEY_MISMATCH");
13580
13637
  this.name = "OrgKeyMismatchError";
13581
13638
  }
13582
13639
  };
@@ -14370,8 +14427,10 @@ var CloudSyncBridge = class {
14370
14427
  }
14371
14428
  console.warn(
14372
14429
  "[cloud-sync] org %s: could not check the organization key (%s) \u2014 syncing anyway.",
14430
+ // Le message porte désormais le code, destiné à l'interface ; le détail
14431
+ // lisible reste sur l'erreur, et c'est lui qui a sa place dans un log.
14373
14432
  link.orgId,
14374
- err.message
14433
+ err.detail ?? err.message
14375
14434
  );
14376
14435
  }
14377
14436
  this.keyMismatch.delete(link.orgId);
@@ -14489,7 +14548,7 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
14489
14548
  throw new Error("La cl\xE9 actuelle de cette organisation n'est pas charg\xE9e.");
14490
14549
  }
14491
14550
  if (newKey.equals(currentKey)) {
14492
- throw new Error("Cette cl\xE9 est d\xE9j\xE0 celle de l'organisation.");
14551
+ throw new Error("ORG_KEY_ALREADY_CURRENT");
14493
14552
  }
14494
14553
  const machineRootDir = await keyRoot();
14495
14554
  await readEncryptedKey(machineRootDir, masterPassword);
@@ -14648,6 +14707,10 @@ var cloudSyncRouter = router({
14648
14707
  await cloudSyncBridge.connect({ orgId: input.orgId, cloudUrl: input.cloudUrl });
14649
14708
  }
14650
14709
  await projectStore.moveToOrg(input.projectId, input.orgId);
14710
+ await projectPathStore.relocate(
14711
+ { id: input.projectId, orgId: null },
14712
+ { id: input.projectId, orgId: input.orgId }
14713
+ );
14651
14714
  await conversationStore.relocateAll();
14652
14715
  try {
14653
14716
  await cloudSyncBridge.followProject(input.orgId, input.projectId);
@@ -17222,4 +17285,4 @@ export {
17222
17285
  pullEnv,
17223
17286
  registerInstance
17224
17287
  };
17225
- //# sourceMappingURL=src-7YQHXQ6L.js.map
17288
+ //# sourceMappingURL=src-RY3O6RUF.js.map