@runeya/runeya 2.0.58 → 2.0.60

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 (199) hide show
  1. package/agent-manager-NJMLCIVW.js +7 -0
  2. package/{chunk-NLVDO4EC.js → chunk-WI4NXXWA.js} +5 -2
  3. package/chunk-WI4NXXWA.js.map +1 -0
  4. package/index.js +1 -1
  5. package/package.json +1 -1
  6. package/{src-V3J62F6F.js → src-FYMPMNWX.js} +210 -127
  7. package/src-FYMPMNWX.js.map +1 -0
  8. package/web/assets/{AgentScalarChatInterface.vue-EIqnE2D0.js → AgentScalarChatInterface.vue-B4N4hGIa.js} +1 -1
  9. package/web/assets/{AgentTerminalPage-5kH1RTj6.js → AgentTerminalPage-COgNEO3l.js} +1 -1
  10. package/web/assets/AiChatPage-CBccEBhl.js +1 -0
  11. package/web/assets/{AppLayout-Dj8YOvMQ.css → AppLayout-B1bXTOmv.css} +1 -1
  12. package/web/assets/AppLayout-Bk_jDJzn.js +1 -0
  13. package/web/assets/{AuditPage-BrqreO8a.js → AuditPage-CojdnXun.js} +1 -1
  14. package/web/assets/{CloudAccountPage-DS3ZfENB.js → CloudAccountPage-CaCXJAIU.js} +1 -1
  15. package/web/assets/CloudAccountPage-CcIXW0EN.js +1 -0
  16. package/web/assets/{CloudMessagingPage-D8gBnkFY.js → CloudMessagingPage-BWNVhfSj.js} +1 -1
  17. package/web/assets/{DashboardPage-BiskmF6R.js → DashboardPage-DXCofSRh.js} +1 -1
  18. package/web/assets/{DirectoryPickerDialog-CtKWj2hx.js → DirectoryPickerDialog-BzGhidJF.js} +1 -1
  19. package/web/assets/{EditorIcon-B58cXgvK.js → EditorIcon-BXHgGffi.js} +1 -1
  20. package/web/assets/{EnvironmentForm-DZXx9r78.js → EnvironmentForm-DFxDqfnF.js} +1 -1
  21. package/web/assets/{EnvironmentFormPage-Dl7pdkEM.js → EnvironmentFormPage-CY11biI5.js} +1 -1
  22. package/web/assets/{EnvironmentListPage-B0WX_Hq7.js → EnvironmentListPage-b9CjFQXW.js} +1 -1
  23. package/web/assets/{KanbanBoardPage-CBJs26gZ.js → KanbanBoardPage-BXrTGXwO.js} +3 -3
  24. package/web/assets/{KanbanListPage-Cz-tlLWA.js → KanbanListPage-BnvCBJ1m.js} +1 -1
  25. package/web/assets/{LaunchProjectPage-8SDkFiLE.js → LaunchProjectPage-DHjlOFU3.js} +1 -1
  26. package/web/assets/{LaunchServicesPage-B-ncX3rd.js → LaunchServicesPage-XjPg8Pys.js} +1 -1
  27. package/web/assets/{LogViewer-BJNqKt3I.js → LogViewer-BcPdl4iU.js} +1 -1
  28. package/web/assets/{ProcessControls-NA6_my0q.js → ProcessControls-DorabWJQ.js} +1 -1
  29. package/web/assets/{ProcessDetailPage-6galJRdd.js → ProcessDetailPage-Ch8Jf9rM.js} +1 -1
  30. package/web/assets/{ProcessMetrics-CUDjJ4s_.js → ProcessMetrics-COGHKb4a.js} +1 -1
  31. package/web/assets/{ProjectDetailPage-DKHoFXjW.js → ProjectDetailPage-BmU8DBNe.js} +1 -1
  32. package/web/assets/{ProjectListPage-C1xSP6Bq.js → ProjectListPage-JD1ekolM.js} +1 -1
  33. package/web/assets/{RandomJobTestPage-BAuT49yE.js → RandomJobTestPage-Cc-DhTsH.js} +1 -1
  34. package/web/assets/{ScenarioEditorPage-CROCV83A.js → ScenarioEditorPage-Bny2HqiP.js} +1 -1
  35. package/web/assets/{SendToChatDialog-BfaLVfzw.js → SendToChatDialog-B4CWWMCy.js} +1 -1
  36. package/web/assets/{ServiceControlsBar-DE0In-jH.js → ServiceControlsBar-D6mfDvfN.js} +1 -1
  37. package/web/assets/{ServiceDetailPage-0iIv9RqU.js → ServiceDetailPage-D2WqU25G.js} +1 -1
  38. package/web/assets/{ServiceFormPage-D-tLX8jE.js → ServiceFormPage-BcA2kArc.js} +1 -1
  39. package/web/assets/{SettingsPage-ySsQCeYE.css → SettingsPage-AOrh0K7b.css} +1 -1
  40. package/web/assets/SettingsPage-oAjjAaeD.js +2063 -0
  41. package/web/assets/{UnlockPage-flNU5Iky.js → UnlockPage-CRYhFCMk.js} +1 -1
  42. package/web/assets/{VariablesTable-BnCSYLD4.js → VariablesTable-DyWAE6Na.js} +1 -1
  43. package/web/assets/{VaultMigrationPage-BSv9anTA.js → VaultMigrationPage-Dsu3akRc.js} +1 -1
  44. package/web/assets/{VersionBadge-zyKx_N_w.js → VersionBadge-CVTn4GGc.js} +1 -1
  45. package/web/assets/WikiPage-DGMyydUW.js +1 -0
  46. package/web/assets/{WikiView-BZZ5mybT.js → WikiView-BArE3tFo.js} +1 -1
  47. package/web/assets/{add-scalar-classes-DZb8OCPH.js → add-scalar-classes-jKlPbn1S.js} +3 -3
  48. package/web/assets/auth-errors-BfeIh95U.js +1 -0
  49. package/web/assets/{autocomplete-DGLJp6Xx.js → autocomplete-CI8vAiwp.js} +1 -1
  50. package/web/assets/{basic-shape-diamond.svg-D7lBpWcu.js → basic-shape-diamond.svg-Cp5z3Mbu.js} +1 -1
  51. package/web/assets/{basic-shape-hexagon.svg-BIDPqohs.js → basic-shape-hexagon.svg-RBwhM6k0.js} +1 -1
  52. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-iWUF3CNK.js → basic-shape-primary-circle-ellipse-round.svg-itOztFgT.js} +1 -1
  53. package/web/assets/{basic-shape-primary-square-rectangle.svg-BQy8tY9i.js → basic-shape-primary-square-rectangle.svg-CwfKFMzE.js} +1 -1
  54. package/web/assets/{basic-shape-shield.svg-Dcov5U2N.js → basic-shape-shield.svg-BdZgtv30.js} +1 -1
  55. package/web/assets/{browser-DrMkXWE3.js → browser-BXJrZHue.js} +1 -1
  56. package/web/assets/{browser-Dc4T6GL2.js → browser-D7pIWkfx.js} +1 -1
  57. package/web/assets/{card-DADdd2-i.js → card-DR0T843h.js} +1 -1
  58. package/web/assets/{checkbox-By0TwAz_.js → checkbox-DDIPahTi.js} +1 -1
  59. package/web/assets/{chip-W5HkUiZA.js → chip-DM8SNVy0.js} +1 -1
  60. package/web/assets/{client-Be8SiY8s.js → client-BAdezrlT.js} +1 -1
  61. package/web/assets/{cloud-chat.store-GKWq9kin.js → cloud-chat.store-Xf5_YRwv.js} +1 -1
  62. package/web/assets/{cloud-session-CJ4n3dbT.js → cloud-session-B1zFsfcb.js} +1 -1
  63. package/web/assets/{column-P4Yoqttz.js → column-Bo2upVbJ.js} +1 -1
  64. package/web/assets/{computer-device-desktop-monitor.svg-BjBC4Q_B.js → computer-device-desktop-monitor.svg-DOS9l00c.js} +1 -1
  65. package/web/assets/{computer-device-desktop.svg-C7H8X0sb.js → computer-device-desktop.svg-C-ttSSSz.js} +1 -1
  66. package/web/assets/{computer-device-laptop.svg-GDU5987h.js → computer-device-laptop.svg-DDFbbX6c.js} +1 -1
  67. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BcWod8vA.js → computer-device-mobile-phone-android-samsung-back.svg-BZ-Gdh6W.js} +1 -1
  68. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Cj58lY5g.js → computer-device-mobile-phone-android-samsung.svg-COcp4u1j.js} +1 -1
  69. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CtJM7Ul_.js → computer-device-mobile-phone-iphone-x-back.svg-CDmKBZ0s.js} +1 -1
  70. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BiSi4riW.js → computer-device-mobile-phone-iphone-x.svg-QBXd3bAz.js} +1 -1
  71. package/web/assets/{computer-device-mobile-tablet-touch.svg-BAMVDwHH.js → computer-device-mobile-tablet-touch.svg-CiqMqHgJ.js} +1 -1
  72. package/web/assets/{computer-device-mobile-tablet.svg-quWU62em.js → computer-device-mobile-tablet.svg-DXWdkli1.js} +1 -1
  73. package/web/assets/{computer-device-network-ethernet-cat6.svg-eoCbNWkF.js → computer-device-network-ethernet-cat6.svg-pd7Pp62E.js} +1 -1
  74. package/web/assets/{computer-device-network-lan-www.svg-AR5jmH9w.js → computer-device-network-lan-www.svg-hwQtK4mS.js} +1 -1
  75. package/web/assets/{computer-device-network-wifi-connection.svg-C3-i1o4I.js → computer-device-network-wifi-connection.svg-BKKSNm-Y.js} +1 -1
  76. package/web/assets/{computer-device-network-wifi-router.svg-D8_62H2U.js → computer-device-network-wifi-router.svg-BJ7429Gw.js} +1 -1
  77. package/web/assets/{cssMode-CfDickSl.js → cssMode-DvqPjG-s.js} +1 -1
  78. package/web/assets/{divider-DOwWKUnp.js → divider-DmUVUD7N.js} +1 -1
  79. package/web/assets/{ecology-science-erlenmeyer-flask.svg-bmj1315r.js → ecology-science-erlenmeyer-flask.svg-CkvWyk06.js} +1 -1
  80. package/web/assets/{fieldset-CM6GY5DX.js → fieldset-RNy_epe7.js} +1 -1
  81. package/web/assets/{freemarker2-B_0Gh4L-.js → freemarker2-B_05mUOO.js} +1 -1
  82. package/web/assets/{handlebars-D7Oha3sz.js → handlebars-mwqq4hMg.js} +1 -1
  83. package/web/assets/{html-BDq-ql3l.js → html-DenFU_p3.js} +1 -1
  84. package/web/assets/{htmlMode-DVuzX8LQ.js → htmlMode-Dd5pT6tW.js} +1 -1
  85. package/web/assets/{image-flash-lightning.svg-pdHiRywD.js → image-flash-lightning.svg-FRUbJgX5.js} +1 -1
  86. package/web/assets/{image-picture-flower.svg-BJarIt4k.js → image-picture-flower.svg-BBS3ExSo.js} +1 -1
  87. package/web/assets/{index-Dk3h9927.js → index-FACKwVg6.js} +5 -5
  88. package/web/assets/{interface-alert-exclamation-diamond.svg-CZUf0TtR.js → interface-alert-exclamation-diamond.svg-CBN8Pmeh.js} +1 -1
  89. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B1qbmOvN.js → interface-alert-exclamation-triangle-warning.svg-siL3-gmT.js} +1 -1
  90. package/web/assets/{interface-alert-information-circle.svg-DAH6I2Rk.js → interface-alert-information-circle.svg-CynXrOR8.js} +1 -1
  91. package/web/assets/{interface-award-crown.svg-Co-un_0E.js → interface-award-crown.svg-BakRoInk.js} +1 -1
  92. package/web/assets/{interface-bookmark.svg-BoAQ5WAA.js → interface-bookmark-tag.svg-BJnfvdzr.js} +1 -1
  93. package/web/assets/{interface-bookmark-tag.svg-DCeSL4gX.js → interface-bookmark.svg-BnQK5mgu.js} +1 -1
  94. package/web/assets/{interface-calendar-date-one.svg-KM5TH_vj.js → interface-calendar-date-one.svg-fO1_AoDh.js} +1 -1
  95. package/web/assets/{interface-content-book-open-pages.svg-2t-0H_Nl.js → interface-content-book-open-pages.svg-DqRdJvqM.js} +1 -1
  96. package/web/assets/{interface-content-book-page.svg-Dx9U_5uo.js → interface-content-book-page.svg-Byeli3di.js} +1 -1
  97. package/web/assets/{interface-content-file.svg-CW_9AGDl.js → interface-content-file.svg-ViG_2r3n.js} +1 -1
  98. package/web/assets/interface-content-folder.svg-VCUetvJn.js +1 -0
  99. package/web/assets/{interface-content-folder.svg-DgU2KM8d.js → interface-content-folder.svg-tRv9Gs6q.js} +1 -1
  100. package/web/assets/{interface-copy-clipboard.svg-BXCY1wtO.js → interface-copy-clipboard.svg-BF2p1SyS.js} +1 -1
  101. package/web/assets/{interface-edit-attachment.svg-lJsBgdnd.js → interface-edit-attachment.svg-CcxMnh8E.js} +1 -1
  102. package/web/assets/{interface-edit-binocular.svg-N_us2_d_.js → interface-edit-binocular.svg-CIzctb_f.js} +1 -1
  103. package/web/assets/{interface-edit-magic-wand.svg-GlHpAoND.js → interface-edit-magic-wand.svg-LoGhgGEZ.js} +1 -1
  104. package/web/assets/{interface-edit-tool-paint-roller.svg-B3s6tHLT.js → interface-edit-tool-paint-roller.svg-C6oZCjMJ.js} +1 -1
  105. package/web/assets/{interface-edit-tool-pencil.svg-BhJltLPD.js → interface-edit-tool-pencil.svg-D3lpq_xl.js} +1 -1
  106. package/web/assets/{interface-favorite-award.svg-CAC4qrCL.js → interface-favorite-award.svg-CrXhhhyj.js} +1 -1
  107. package/web/assets/{interface-favorite-flag.svg-5dLI18uT.js → interface-favorite-flag.svg-ccF9TDui.js} +1 -1
  108. package/web/assets/{interface-favorite-heart.svg-DAWMqUS8.js → interface-favorite-heart.svg-gu7br9DK.js} +1 -1
  109. package/web/assets/{interface-favorite-star.svg-C9DICFBb.js → interface-favorite-star.svg-B7E60ZEr.js} +1 -1
  110. package/web/assets/{interface-favorite-stars-sparkles.svg-zD5-a95u.js → interface-favorite-stars-sparkles.svg-DOEwwXiW.js} +1 -1
  111. package/web/assets/{interface-hierarchy-flowchart.svg-BzAAQM0v.js → interface-hierarchy-flowchart.svg-tLEmCbmQ.js} +1 -1
  112. package/web/assets/{interface-home-house.svg-CB_mzszz.js → interface-home-house.svg-Cf1KxixQ.js} +1 -1
  113. package/web/assets/{interface-hyperlink.svg-BUMVlOAE.js → interface-hyperlink.svg-DAT8qW_c.js} +1 -1
  114. package/web/assets/{interface-lighting-brightness.svg-wPXo2pZW.js → interface-lighting-brightness.svg-BX6x0ddS.js} +1 -1
  115. package/web/assets/{interface-lock-closed.svg-Qj4fLj5D.js → interface-lock-closed.svg-DrFxkZYe.js} +1 -1
  116. package/web/assets/{interface-lock-open-unlock.svg-PaaFsUiU.js → interface-lock-open-unlock.svg-Dr0jcfmK.js} +1 -1
  117. package/web/assets/{interface-login-key.svg-By-IZ7EH.js → interface-login-key.svg-CeXnvMKQ.js} +1 -1
  118. package/web/assets/{interface-search.svg-D1s5Gsyk.js → interface-search.svg-CBYRLqmj.js} +1 -1
  119. package/web/assets/{interface-setting-cog.svg-BIjZVOwf.js → interface-setting-cog.svg-pIrK77it.js} +1 -1
  120. package/web/assets/{interface-share-megaphone-bullhorn.svg-1oPoDdIL.js → interface-share-megaphone-bullhorn.svg-CXENaufm.js} +1 -1
  121. package/web/assets/{interface-share-rocket.svg-B07UdOH6.js → interface-share-rocket.svg-BUEDGolV.js} +1 -1
  122. package/web/assets/{interface-share-satellite.svg-AxSAr1JP.js → interface-share-satellite.svg-CDbsJhFP.js} +1 -1
  123. package/web/assets/{interface-share-space-ship.svg-ghRJYkXG.js → interface-share-space-ship.svg-Byg2lwxp.js} +1 -1
  124. package/web/assets/{interface-share.svg-jVvV5wf9.js → interface-share.svg-DS5PCA34.js} +1 -1
  125. package/web/assets/{interface-signal-square.svg-BB8KvxNI.js → interface-signal-square.svg-pcqPb4nM.js} +1 -1
  126. package/web/assets/{interface-time-clock-circle.svg-Bt_vXLib.js → interface-time-clock-circle.svg-Cy9A8GRt.js} +1 -1
  127. package/web/assets/{interface-time-hour-glass.svg-CqsWXDx3.js → interface-time-hour-glass.svg-GWa1W0Xp.js} +1 -1
  128. package/web/assets/{interface-users-multiple.svg-DfZzhCkI.js → interface-users-multiple.svg-CBEbE-7A.js} +1 -1
  129. package/web/assets/{interface-weather-moon.svg-B5X37fBl.js → interface-weather-moon.svg-DeinSoJT.js} +1 -1
  130. package/web/assets/{javascript-DWxMn_QC.js → javascript-H6N3mcld.js} +1 -1
  131. package/web/assets/{jsonMode-BWOZzM3d.js → jsonMode-CtZxIxon.js} +1 -1
  132. package/web/assets/{liquid-B0VtIwJX.js → liquid-DvIoyIx6.js} +1 -1
  133. package/web/assets/{lspLanguageFeatures-DXFZNqLk.js → lspLanguageFeatures-BEUuqX73.js} +1 -1
  134. package/web/assets/{mail-chat-bubble-square.svg-DVi8sPM-.js → mail-chat-bubble-square.svg-cxMRc1aj.js} +1 -1
  135. package/web/assets/{mail-send-email-paper-airplane.svg-Dlk35rWL.js → mail-send-email-paper-airplane.svg-Dg_l-5Iw.js} +1 -1
  136. package/web/assets/{mail-send-envelope.svg-DpEE06QS.js → mail-send-envelope.svg-C1zNJdsK.js} +1 -1
  137. package/web/assets/{mdx-XjdLNHo4.js → mdx-BmQyOder.js} +1 -1
  138. package/web/assets/{message-TASaHoOx.js → message-B83bhy06.js} +1 -1
  139. package/web/assets/{minus-BO9HwuhK.js → minus-CBo2o8C-.js} +1 -1
  140. package/web/assets/modal-CaMkh9Za.js +1 -0
  141. package/web/assets/{modal-Dadfdblm.js → modal-tQ8Gy3Qc.js} +1 -1
  142. package/web/assets/{money-cashier-receipt.svg-D3T1gdZO.js → money-cashier-receipt.svg-HRh_0Aog.js} +1 -1
  143. package/web/assets/{money-currency-dollar-pay.svg-RhoFWz8z.js → money-currency-dollar-pay.svg-Gaqcc4gO.js} +1 -1
  144. package/web/assets/{money-graph-arrow-increase.svg-BENn1K5R.js → money-graph-arrow-increase.svg-DlfNGxjc.js} +1 -1
  145. package/web/assets/{money-graph-bar-chart-increase.svg-COGPwero.js → money-graph-bar-chart-increase.svg-lCsn857J.js} +1 -1
  146. package/web/assets/{multiselect-QI9V-o7t.js → multiselect-BWxLa59l.js} +1 -1
  147. package/web/assets/{nature-ecology-leaf.svg-CyQJuX9P.js → nature-ecology-leaf.svg-CqS_HbDW.js} +1 -1
  148. package/web/assets/{password-68lVUSdj.js → password-cPgUvkOA.js} +1 -1
  149. package/web/assets/{phone-telephone.svg-Cp49xUlu.js → phone-telephone.svg-BQJVa8xN.js} +1 -1
  150. package/web/assets/{plus-CtAUJUu2.js → plus-CbJTMelx.js} +1 -1
  151. package/web/assets/process.store-BIdF5bYJ.js +1 -0
  152. package/web/assets/{programming-bug.svg-DJCw-G7S.js → programming-bug.svg-DHSOyTDX.js} +1 -1
  153. package/web/assets/{programming-cloud.svg-Dawch6nl.js → programming-cloud.svg-BN2VfYj9.js} +1 -1
  154. package/web/assets/{programming-computer-database-server.svg-wM3gh9nl.js → programming-computer-database-server.svg-DgLqhsmV.js} +1 -1
  155. package/web/assets/{programming-computer-database.svg-B-CBQ4FN.js → programming-computer-database.svg-Rv3dMbvo.js} +1 -1
  156. package/web/assets/{programming-module-four-layout.svg-B8K3IYUP.js → programming-module-four-layout.svg-BL9bWIfn.js} +1 -1
  157. package/web/assets/{programming-module-three.svg-BVHpxetj.js → programming-module-three.svg-Iu-KnX2V.js} +1 -1
  158. package/web/assets/{programming-module.svg-CXID9wrd.js → programming-module.svg-BcCF6qxu.js} +1 -1
  159. package/web/assets/{programming-script-code.svg-lSz-9Xfp.js → programming-script-code.svg-XJSdxMcg.js} +1 -1
  160. package/web/assets/{python-DL0o4ZFa.js → python-cAYLyvNp.js} +1 -1
  161. package/web/assets/{razor-1T_DtFYV.js → razor-BHgxVMOQ.js} +1 -1
  162. package/web/assets/router-CK12uURM.js +1 -0
  163. package/web/assets/settings-scope-f9Gi_Zg9.js +1 -0
  164. package/web/assets/{settings.store-xvHd8xGI.js → settings.store-CSquriN7.js} +1 -1
  165. package/web/assets/{shopping-cart.svg-TZA8HEQB.js → shopping-cart.svg-BueYQs5x.js} +1 -1
  166. package/web/assets/{shopping-gift-present.svg-CRGiXfBk.js → shopping-gift-present.svg-TrpUap-y.js} +1 -1
  167. package/web/assets/{shopping-shipping-box-parcel-package.svg-BuEMZoGf.js → shopping-shipping-box-parcel-package.svg-DAccGtLa.js} +1 -1
  168. package/web/assets/{src-Be-L2-AH.js → src-DYi4G92i.js} +1 -1
  169. package/web/assets/{src-Dy-bHT95.js → src-DyMz5bgz.js} +1 -1
  170. package/web/assets/{tabpanel-BP3edJSv.js → tabpanel-MnA7nEtj.js} +1 -1
  171. package/web/assets/{tag-new-circle.svg-CsOt9-U5.js → tag-new-circle.svg-D9oUh7ff.js} +1 -1
  172. package/web/assets/{toggleswitch-B49OhBFD.js → toggleswitch-loQuxYj9.js} +1 -1
  173. package/web/assets/{travel-map-earth-globe.svg-BTR5ahca.js → travel-map-earth-globe.svg-DqCfEOX7.js} +1 -1
  174. package/web/assets/trpc-BlNlu2jq.js +1 -0
  175. package/web/assets/{tsMode-BUrbWgsu.js → tsMode-CP_fyAf1.js} +1 -1
  176. package/web/assets/{typescript-tKGzqX3Z.js → typescript-dDBinZo_.js} +1 -1
  177. package/web/assets/useAiChatDrawer-eoSxh6yR.js +1 -0
  178. package/web/assets/{useCloudOrg-0VY86rgI.js → useCloudOrg-CP0cj8Kq.js} +1 -1
  179. package/web/assets/{useProjectCatalog-C2BH8Bnr.js → useProjectCatalog-a-o-oRlg.js} +1 -1
  180. package/web/assets/{xml-4CdtJV3Y.js → xml-DlpU-b_9.js} +1 -1
  181. package/web/assets/{yaml-Cj7LK0oJ.js → yaml-CKngaf3N.js} +1 -1
  182. package/web/index.html +1 -1
  183. package/agent-manager-EDFP4VXP.js +0 -7
  184. package/chunk-NLVDO4EC.js.map +0 -1
  185. package/src-V3J62F6F.js.map +0 -1
  186. package/web/assets/AiChatPage-DvPM0b-g.js +0 -1
  187. package/web/assets/AppLayout-CxU9x6en.js +0 -1
  188. package/web/assets/CloudAccountPage-CzUpIjdc.js +0 -1
  189. package/web/assets/SettingsPage-ClNw9uEA.js +0 -2063
  190. package/web/assets/WikiPage-C9Bruew6.js +0 -1
  191. package/web/assets/auth-errors-CU6pB2jP.js +0 -1
  192. package/web/assets/interface-content-folder.svg-C9_1n23c.js +0 -1
  193. package/web/assets/modal-B0K9qtIb.js +0 -1
  194. package/web/assets/process.store-DkO9CCEs.js +0 -1
  195. package/web/assets/router-BKOiPGCa.js +0 -1
  196. package/web/assets/settings-scope-DrVQNSTC.js +0 -1
  197. package/web/assets/trpc-hOuUVUMw.js +0 -1
  198. package/web/assets/useAiChatDrawer-CZS0RLp8.js +0 -1
  199. /package/{agent-manager-EDFP4VXP.js.map → agent-manager-NJMLCIVW.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-V3J62F6F.js");
273
+ const { createLocalServer, pullEnv, PullEnvError, registerInstance } = await import("./src-FYMPMNWX.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.58",
3
+ "version": "2.0.60",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -70,6 +70,7 @@ import {
70
70
  machineRoot,
71
71
  markVaultLocked,
72
72
  nativeParsers,
73
+ orgIdOfRoot,
73
74
  orgVaultRoot,
74
75
  projectKey,
75
76
  projectVaultRoot,
@@ -95,7 +96,7 @@ import {
95
96
  vaultFor,
96
97
  vaultIdOfRoot,
97
98
  writeEntity
98
- } from "./chunk-NLVDO4EC.js";
99
+ } from "./chunk-WI4NXXWA.js";
99
100
 
100
101
  // ../server/src/create-server.ts
101
102
  import express from "express";
@@ -231,6 +232,7 @@ var ApiKeyStore = class {
231
232
  async load() {
232
233
  if (this.loaded) return;
233
234
  this.loaded = true;
235
+ this.unreadable.clear();
234
236
  const owners = [null, ...await listOrgVaults()];
235
237
  for (const owner of owners) {
236
238
  await this.loadFile(await this.filePath(true, owner), owner);
@@ -537,8 +539,8 @@ import { TRPCError as TRPCError2 } from "@trpc/server";
537
539
  // ../server/src/services/project-store.ts
538
540
  import { randomUUID as randomUUID2 } from "crypto";
539
541
  import { EventEmitter } from "events";
540
- import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, rm } from "fs/promises";
541
- import { join as join3 } from "path";
542
+ import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3, rm } from "fs/promises";
543
+ import { join as join4 } from "path";
542
544
 
543
545
  // ../server/src/utils/ensure-data-gitignore.ts
544
546
  import { writeFile as writeFile2 } from "fs/promises";
@@ -583,8 +585,108 @@ async function ensureDataGitignore(dataDir) {
583
585
  await writeFile2(gitignorePath, GITIGNORE_CONTENT, "utf-8");
584
586
  }
585
587
 
588
+ // ../server/src/services/project-path-store.ts
589
+ import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, stat } from "fs/promises";
590
+ import { isAbsolute, join as join3, resolve } from "path";
591
+ var FILENAME = "project-paths.json";
592
+ var ProjectPathStore = class {
593
+ paths = null;
594
+ async load() {
595
+ if (this.paths) return this.paths;
596
+ try {
597
+ const raw = await readFile2(machineFilePath(FILENAME), "utf-8");
598
+ const parsed = JSON.parse(raw);
599
+ this.paths = isPathMap(parsed) ? parsed : {};
600
+ } catch {
601
+ this.paths = {};
602
+ }
603
+ return this.paths;
604
+ }
605
+ async persist() {
606
+ await mkdir2(machineRoot(), { recursive: true });
607
+ const filePath = machineFilePath(FILENAME);
608
+ const tmpPath = `${filePath}.tmp`;
609
+ await writeFile3(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
610
+ await rename2(tmpPath, filePath);
611
+ await chmod2(filePath, 384);
612
+ }
613
+ /** The directory chosen for this project, or null while it has none. */
614
+ async get(ref) {
615
+ const paths = await this.load();
616
+ return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
617
+ }
618
+ async all() {
619
+ return { ...await this.load() };
620
+ }
621
+ /**
622
+ * The project already placed in this directory, if any other one is.
623
+ *
624
+ * Answers with the key as stored — the couple, or the bare id for an entry an
625
+ * older version wrote — which is enough to say "taken" and to name it.
626
+ */
627
+ async projectAt(path, exclude) {
628
+ const target = resolve(path);
629
+ const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
630
+ for (const [key, dir] of Object.entries(await this.load())) {
631
+ if (!excluded.includes(key) && resolve(dir) === target) return key;
632
+ }
633
+ return null;
634
+ }
635
+ async set(ref, path) {
636
+ if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
637
+ const paths = await this.load();
638
+ delete paths[ref.id];
639
+ paths[projectKey(ref)] = resolve(path);
640
+ await this.persist();
641
+ }
642
+ /**
643
+ * Faire suivre le répertoire quand un projet change d'organisation.
644
+ *
645
+ * La clé est le couple `(organisation, projet)` : publier un projet local le
646
+ * fait passer de `local:<id>` à `<org>:<id>`, et l'entrée d'avant cesse alors
647
+ * de répondre — `get` ne retombe que sur l'identifiant nu, forme héritée, pas
648
+ * sur `local:<id>`. Le projet se retrouvait donc sans emplacement connu juste
649
+ * après avoir été publié, alors que ses sources n'avaient pas bougé d'un
650
+ * octet.
651
+ */
652
+ async relocate(from, to) {
653
+ const paths = await this.load();
654
+ const previous = paths[projectKey(from)] ?? paths[from.id];
655
+ if (!previous) return;
656
+ delete paths[projectKey(from)];
657
+ delete paths[from.id];
658
+ paths[projectKey(to)] = previous;
659
+ await this.persist();
660
+ }
661
+ async clear(ref) {
662
+ const paths = await this.load();
663
+ const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
664
+ if (keys.length === 0) return;
665
+ for (const key of keys) delete paths[key];
666
+ await this.persist();
667
+ }
668
+ /** Test seam: forget what was read from disk. */
669
+ reset() {
670
+ this.paths = null;
671
+ }
672
+ };
673
+ function isPathMap(value) {
674
+ return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
675
+ }
676
+ async function holdsRuneyaProject(path) {
677
+ for (const candidate of ["project.json", "projects.json"]) {
678
+ try {
679
+ await stat(join3(path, ".runeya", candidate));
680
+ return true;
681
+ } catch {
682
+ }
683
+ }
684
+ return false;
685
+ }
686
+ var projectPathStore = new ProjectPathStore();
687
+
586
688
  // ../server/src/services/project-store.ts
587
- var FILENAME = "project.json";
689
+ var FILENAME2 = "project.json";
588
690
  var LEGACY_FILENAME = "projects.json";
589
691
  function toDiskForm(project) {
590
692
  const { activeEnvironmentId: _runtimeOnly, ...rest } = project;
@@ -594,14 +696,14 @@ async function readLocalProject() {
594
696
  const root = localVaultRoot();
595
697
  let current = null;
596
698
  try {
597
- const raw = await readFile2(join3(root, FILENAME), "utf-8");
699
+ const raw = await readFile3(join4(root, FILENAME2), "utf-8");
598
700
  const parsed = ProjectSchema.safeParse(JSON.parse(raw));
599
701
  if (parsed.success) current = parsed.data;
600
702
  } catch {
601
703
  }
602
704
  let legacy;
603
705
  try {
604
- legacy = JSON.parse(await readFile2(join3(root, LEGACY_FILENAME), "utf-8"));
706
+ legacy = JSON.parse(await readFile3(join4(root, LEGACY_FILENAME), "utf-8"));
605
707
  } catch {
606
708
  return { local: current, strayCloud: [] };
607
709
  }
@@ -611,7 +713,7 @@ async function readLocalProject() {
611
713
  if (locals.length > 1) {
612
714
  const names = locals.map((p) => `"${p.name}" (${p.id})`).join(", ");
613
715
  throw new Error(
614
- `${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.`
716
+ `${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.`
615
717
  );
616
718
  }
617
719
  return { local: locals[0] ?? null, strayCloud };
@@ -620,7 +722,7 @@ async function readCloudProjects() {
620
722
  const found = [];
621
723
  for (const { orgId, projectId, root } of await listCloudVaults()) {
622
724
  try {
623
- const raw = await readFile2(join3(root, FILENAME), "utf-8");
725
+ const raw = await readFile3(join4(root, FILENAME2), "utf-8");
624
726
  const parsed = ProjectSchema.safeParse({ ...JSON.parse(raw), id: projectId, orgId });
625
727
  if (parsed.success) found.push({ project: parsed.data, root });
626
728
  } catch {
@@ -650,13 +752,13 @@ var ProjectStore = class {
650
752
  /** Emits `'saved'` after every persisted mutation, for the cloud sync bridge. */
651
753
  events = new EventEmitter();
652
754
  getFilePath(root = localVaultRoot()) {
653
- return join3(root, FILENAME);
755
+ return join4(root, FILENAME2);
654
756
  }
655
757
  async writeAtomic(filePath, data) {
656
758
  const tmpPath = filePath + ".tmp";
657
- await writeFile3(tmpPath, data, "utf-8");
658
- await rename2(tmpPath, filePath);
659
- await chmod2(filePath, 384);
759
+ await writeFile4(tmpPath, data, "utf-8");
760
+ await rename3(tmpPath, filePath);
761
+ await chmod3(filePath, 384);
660
762
  }
661
763
  /** Adopt a project read from disk, remembering which vault it came from. */
662
764
  async absorb(p, root) {
@@ -731,10 +833,10 @@ var ProjectStore = class {
731
833
  await rm(this.getFilePath(), { force: true }).catch(() => {
732
834
  });
733
835
  }
734
- await rename2(join3(localVaultRoot(), LEGACY_FILENAME), join3(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
836
+ await rename3(join4(localVaultRoot(), LEGACY_FILENAME), join4(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
735
837
  });
736
838
  for (const { project, root } of cloud) {
737
- await mkdir2(root, { recursive: true });
839
+ await mkdir3(root, { recursive: true });
738
840
  await this.writeAtomic(this.getFilePath(root), JSON.stringify(toDiskForm(project), null, 2));
739
841
  setProjectVault(project, root);
740
842
  }
@@ -862,6 +964,7 @@ var ProjectStore = class {
862
964
  this.projects.delete(key);
863
965
  await this.save();
864
966
  await this.discardVault(project);
967
+ await projectPathStore.clear(project);
865
968
  return true;
866
969
  }
867
970
  /**
@@ -895,6 +998,7 @@ var ProjectStore = class {
895
998
  forgetProject(project);
896
999
  await serviceStore.forgetLocally(project.serviceIds ?? []);
897
1000
  await environmentStore.forgetByProject(project.id);
1001
+ await projectPathStore.clear(project);
898
1002
  }
899
1003
  /** All projects linked to a given organization (for the sync bridge). */
900
1004
  async listByOrg(orgId) {
@@ -1023,9 +1127,9 @@ var projectStore = new ProjectStore();
1023
1127
  registerProjectLoader(() => projectStore.list().then(() => void 0));
1024
1128
 
1025
1129
  // ../server/src/services/environment-overrides-store.ts
1026
- import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3 } from "fs/promises";
1027
- import { dirname as dirname2, join as join4 } from "path";
1028
- var FILENAME2 = "environment-overrides.json";
1130
+ import { readFile as readFile4, writeFile as writeFile5, rename as rename4, mkdir as mkdir4, chmod as chmod4 } from "fs/promises";
1131
+ import { dirname as dirname2, join as join5 } from "path";
1132
+ var FILENAME3 = "environment-overrides.json";
1029
1133
  var EnvironmentOverridesStore = class {
1030
1134
  data = {};
1031
1135
  loaded = false;
@@ -1057,11 +1161,11 @@ var EnvironmentOverridesStore = class {
1057
1161
  async rootFor(variableId) {
1058
1162
  const root = await environmentStore.rootOfVariable(variableId);
1059
1163
  if (root) return root;
1060
- return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME2));
1164
+ return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME3));
1061
1165
  }
1062
1166
  /** Where earlier versions kept them: read once, rewritten to their vaults. */
1063
1167
  getLegacyFilePath() {
1064
- return legacyMachineFilePath(FILENAME2);
1168
+ return legacyMachineFilePath(FILENAME3);
1065
1169
  }
1066
1170
  /**
1067
1171
  * Read every vault, then the places older versions used.
@@ -1077,13 +1181,13 @@ var EnvironmentOverridesStore = class {
1077
1181
  const roots = await allVaultRoots();
1078
1182
  const sources = [
1079
1183
  this.getLegacyFilePath(),
1080
- await keyedFilePath(FILENAME2),
1081
- ...roots.map((root) => join4(root, FILENAME2))
1184
+ await keyedFilePath(FILENAME3),
1185
+ ...roots.map((root) => join5(root, FILENAME3))
1082
1186
  ];
1083
1187
  for (const path of sources) {
1084
1188
  let parsed;
1085
1189
  try {
1086
- parsed = JSON.parse(await readFile3(path, "utf-8"));
1190
+ parsed = JSON.parse(await readFile4(path, "utf-8"));
1087
1191
  } catch {
1088
1192
  continue;
1089
1193
  }
@@ -1134,12 +1238,12 @@ var EnvironmentOverridesStore = class {
1134
1238
  this.diskEncryptedSlots,
1135
1239
  extractEncryptedVariableSlots(encrypted)
1136
1240
  );
1137
- await mkdir3(root, { recursive: true });
1138
- const path = join4(root, FILENAME2);
1241
+ await mkdir4(root, { recursive: true });
1242
+ const path = join5(root, FILENAME3);
1139
1243
  const tmpPath = path + ".tmp";
1140
- await writeFile4(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
1141
- await rename3(tmpPath, path);
1142
- await chmod3(path, 384);
1244
+ await writeFile5(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
1245
+ await rename4(tmpPath, path);
1246
+ await chmod4(path, 384);
1143
1247
  }
1144
1248
  }
1145
1249
  /**
@@ -1571,7 +1675,7 @@ var EnvironmentResolver = class {
1571
1675
  var environmentResolver = new EnvironmentResolver();
1572
1676
 
1573
1677
  // ../server/src/services/audit-service.ts
1574
- import { appendFile, readFile as readFile4, stat, rename as rename4, unlink, readdir, mkdir as mkdir4 } from "fs/promises";
1678
+ import { appendFile, readFile as readFile5, stat as stat2, rename as rename5, unlink, readdir, mkdir as mkdir5 } from "fs/promises";
1575
1679
  var AUDIT_FILENAME = "audit.log";
1576
1680
  var MAX_FILE_SIZE = 10 * 1024 * 1024;
1577
1681
  var MAX_AGE_DAYS = 30;
@@ -1591,7 +1695,7 @@ var AuditService = class {
1591
1695
  const line = JSON.stringify(record) + "\n";
1592
1696
  const filepath = this.getFilePath();
1593
1697
  try {
1594
- await mkdir4(machineRoot(), { recursive: true });
1698
+ await mkdir5(machineRoot(), { recursive: true });
1595
1699
  await appendFile(filepath, line, "utf-8");
1596
1700
  await this.rotateIfNeeded();
1597
1701
  } catch (err) {
@@ -1604,7 +1708,7 @@ var AuditService = class {
1604
1708
  const filepath = this.getFilePath();
1605
1709
  let lines;
1606
1710
  try {
1607
- const content = await readFile4(filepath, "utf-8");
1711
+ const content = await readFile5(filepath, "utf-8");
1608
1712
  lines = content.trim().split("\n").filter(Boolean);
1609
1713
  } catch {
1610
1714
  return { entries: [], total: 0 };
@@ -1635,9 +1739,9 @@ var AuditService = class {
1635
1739
  async rotateIfNeeded() {
1636
1740
  const filepath = this.getFilePath();
1637
1741
  try {
1638
- const stats = await stat(filepath);
1742
+ const stats = await stat2(filepath);
1639
1743
  if (stats.size > MAX_FILE_SIZE) {
1640
- await rename4(filepath, this.getRotatedPath());
1744
+ await rename5(filepath, this.getRotatedPath());
1641
1745
  }
1642
1746
  } catch {
1643
1747
  }
@@ -1662,87 +1766,6 @@ var AuditService = class {
1662
1766
  };
1663
1767
  var auditService = new AuditService();
1664
1768
 
1665
- // ../server/src/services/project-path-store.ts
1666
- import { readFile as readFile5, writeFile as writeFile5, rename as rename5, mkdir as mkdir5, chmod as chmod4, stat as stat2 } from "fs/promises";
1667
- import { isAbsolute, join as join5, resolve } from "path";
1668
- var FILENAME3 = "project-paths.json";
1669
- var ProjectPathStore = class {
1670
- paths = null;
1671
- async load() {
1672
- if (this.paths) return this.paths;
1673
- try {
1674
- const raw = await readFile5(machineFilePath(FILENAME3), "utf-8");
1675
- const parsed = JSON.parse(raw);
1676
- this.paths = isPathMap(parsed) ? parsed : {};
1677
- } catch {
1678
- this.paths = {};
1679
- }
1680
- return this.paths;
1681
- }
1682
- async persist() {
1683
- await mkdir5(machineRoot(), { recursive: true });
1684
- const filePath = machineFilePath(FILENAME3);
1685
- const tmpPath = `${filePath}.tmp`;
1686
- await writeFile5(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
1687
- await rename5(tmpPath, filePath);
1688
- await chmod4(filePath, 384);
1689
- }
1690
- /** The directory chosen for this project, or null while it has none. */
1691
- async get(ref) {
1692
- const paths = await this.load();
1693
- return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
1694
- }
1695
- async all() {
1696
- return { ...await this.load() };
1697
- }
1698
- /**
1699
- * The project already placed in this directory, if any other one is.
1700
- *
1701
- * Answers with the key as stored — the couple, or the bare id for an entry an
1702
- * older version wrote — which is enough to say "taken" and to name it.
1703
- */
1704
- async projectAt(path, exclude) {
1705
- const target = resolve(path);
1706
- const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
1707
- for (const [key, dir] of Object.entries(await this.load())) {
1708
- if (!excluded.includes(key) && resolve(dir) === target) return key;
1709
- }
1710
- return null;
1711
- }
1712
- async set(ref, path) {
1713
- if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
1714
- const paths = await this.load();
1715
- delete paths[ref.id];
1716
- paths[projectKey(ref)] = resolve(path);
1717
- await this.persist();
1718
- }
1719
- async clear(ref) {
1720
- const paths = await this.load();
1721
- const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
1722
- if (keys.length === 0) return;
1723
- for (const key of keys) delete paths[key];
1724
- await this.persist();
1725
- }
1726
- /** Test seam: forget what was read from disk. */
1727
- reset() {
1728
- this.paths = null;
1729
- }
1730
- };
1731
- function isPathMap(value) {
1732
- return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
1733
- }
1734
- async function holdsRuneyaProject(path) {
1735
- for (const candidate of ["project.json", "projects.json"]) {
1736
- try {
1737
- await stat2(join5(path, ".runeya", candidate));
1738
- return true;
1739
- } catch {
1740
- }
1741
- }
1742
- return false;
1743
- }
1744
- var projectPathStore = new ProjectPathStore();
1745
-
1746
1769
  // ../server/src/services/org-keys.ts
1747
1770
  import { mkdir as mkdir6 } from "fs/promises";
1748
1771
 
@@ -1967,9 +1990,7 @@ async function installOrgKey(orgId, key, masterPassword) {
1967
1990
  }
1968
1991
  var OrgVaultUnreadableError = class extends Error {
1969
1992
  constructor(orgId) {
1970
- super(
1971
- "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."
1972
- );
1993
+ super("ORG_VAULT_UNREADABLE");
1973
1994
  this.orgId = orgId;
1974
1995
  this.name = "OrgVaultUnreadableError";
1975
1996
  }
@@ -3503,6 +3524,30 @@ var ConversationStore = class {
3503
3524
  const json = decryptValue(encrypted, vault);
3504
3525
  return JSON.parse(json);
3505
3526
  }
3527
+ /**
3528
+ * Refuser d'écrire dans le coffre d'une organisation sans nommer sa clé.
3529
+ *
3530
+ * `getEncryptionKey(undefined)` rend la clé machine, et c'est le bon défaut
3531
+ * pour le coffre local. Appliqué à un fichier rangé sous `orgs/<org>/`, il
3532
+ * produit un chiffré que ce coffre n'emploie pas — lisible par personne à la
3533
+ * relecture, et impossible à distinguer d'une corruption.
3534
+ *
3535
+ * Le cas a été observé plusieurs fois sans qu'on parvienne à nommer le
3536
+ * chemin fautif : les garde-fous en place traitent le coffre fermé, le
3537
+ * coffre mal résolu et la copie périmée, aucun ne couvrait « coffre non
3538
+ * précisé ». Ces écritures-là n'ont jamais fonctionné — elles échouaient en
3539
+ * silence, ce qui est pire. On les saute désormais en le disant, avec la
3540
+ * pile d'appels qui manquait pour remonter au chemin fautif.
3541
+ */
3542
+ isVaultNamed(root, vault) {
3543
+ const orgId = orgIdOfRoot(root);
3544
+ if (!orgId || vault) return true;
3545
+ console.error(
3546
+ `[conversation-store] \xC9criture ignor\xE9e dans le coffre de l'organisation ${orgId} (${root}) : aucune cl\xE9 d'organisation nomm\xE9e, le contenu serait chiffr\xE9 par la cl\xE9 machine et illisible \xE0 la relecture.
3547
+ ${new Error("trace").stack}`
3548
+ );
3549
+ return false;
3550
+ }
3506
3551
  toDisk(conv, vault) {
3507
3552
  return {
3508
3553
  id: conv.id,
@@ -3558,6 +3603,7 @@ var ConversationStore = class {
3558
3603
  return;
3559
3604
  }
3560
3605
  this.loaded = true;
3606
+ this.unreadable.clear();
3561
3607
  await ensureProjectsLoaded();
3562
3608
  const vaults = await allVaultRoots();
3563
3609
  const legacyPaths = [this.getLegacyFilePath(), await keyedFilePath(FILENAME5)];
@@ -3633,7 +3679,9 @@ var ConversationStore = class {
3633
3679
  const root = await this.rootFor(conv);
3634
3680
  this.roots.set(conv.id, root);
3635
3681
  const bucket = byRoot.get(root) ?? [];
3636
- bucket.push(this.toDisk(conv, vaultIdOfRoot(root)));
3682
+ const vault = vaultIdOfRoot(root);
3683
+ if (!this.isVaultNamed(root, vault)) continue;
3684
+ bucket.push(this.toDisk(conv, vault));
3637
3685
  byRoot.set(root, bucket);
3638
3686
  }
3639
3687
  for (const [root, items] of this.unreadable) {
@@ -3907,6 +3955,26 @@ var setupRouter = router({
3907
3955
  }))
3908
3956
  };
3909
3957
  }),
3958
+ /**
3959
+ * Éprouver une clé contre le canari du coffre, sans passer par le cloud.
3960
+ *
3961
+ * `cloudSync.checkOrgKey` interroge le canari publié par l'organisation :
3962
+ * il prouve « cette clé est celle de l'organisation », mais il exige que le
3963
+ * cloud réponde et que l'organisation y existe encore. Un poste hors ligne —
3964
+ * ou qui reprend un coffre dont l'organisation a disparu côté cloud — n'avait
3965
+ * alors plus aucun moyen de vérifier une clé avant de l'adopter.
3966
+ *
3967
+ * Le coffre porte pourtant son propre canari, écrit en même temps que sa clé.
3968
+ * Il répond à la question qui compte ici : cette clé ouvre-t-elle CE coffre ?
3969
+ */
3970
+ checkOrgKeyLocal: protectedProcedure.input(z7.object({
3971
+ orgId: z7.string().min(1).max(128),
3972
+ keyHex: z7.string().length(64).regex(/^[0-9a-f]+$/i, "Invalid hex format")
3973
+ })).query(async ({ input }) => {
3974
+ const canary = await readVerifyFile(orgVaultRoot(input.orgId));
3975
+ if (!canary) return { matches: false, hasCanary: false };
3976
+ return { matches: matchesCanary(canary, Buffer.from(input.keyHex, "hex")), hasCanary: true };
3977
+ }),
3910
3978
  /**
3911
3979
  * Submit and validate encryption key.
3912
3980
  * Attempts to decrypt existing data to validate the key.
@@ -7715,7 +7783,7 @@ function tailTranscript(opts) {
7715
7783
 
7716
7784
  // ../server/src/services/ai-runners/claude-pty-runner.ts
7717
7785
  async function getAgentManager() {
7718
- const { agentManager: agentManager2 } = await import("./agent-manager-EDFP4VXP.js");
7786
+ const { agentManager: agentManager2 } = await import("./agent-manager-NJMLCIVW.js");
7719
7787
  return agentManager2;
7720
7788
  }
7721
7789
  function buildPtyArgs(params, sessionId, opts) {
@@ -8368,7 +8436,7 @@ async function shutdownCodexAppServer() {
8368
8436
  }
8369
8437
  }
8370
8438
  async function getAgentManager2() {
8371
- const { agentManager: agentManager2 } = await import("./agent-manager-EDFP4VXP.js");
8439
+ const { agentManager: agentManager2 } = await import("./agent-manager-NJMLCIVW.js");
8372
8440
  return agentManager2;
8373
8441
  }
8374
8442
  function parseRuneyaCurlCommand(command) {
@@ -13536,18 +13604,27 @@ async function orgsToSync() {
13536
13604
 
13537
13605
  // ../server/src/services/org-canary.ts
13538
13606
  var CanaryUnavailableError = class extends Error {
13539
- code = "CANARY_UNAVAILABLE";
13540
- constructor(message) {
13541
- super(message);
13607
+ /** `detail` reste pour les journaux ; le message est le code, pour l'interface. */
13608
+ constructor(detail) {
13609
+ super("CANARY_UNAVAILABLE");
13610
+ this.detail = detail;
13542
13611
  this.name = "CanaryUnavailableError";
13543
13612
  }
13613
+ code = "CANARY_UNAVAILABLE";
13544
13614
  };
13545
13615
  var OrgKeyMismatchError = class extends Error {
13546
13616
  code = "ORG_KEY_MISMATCH";
13617
+ /**
13618
+ * Le message EST le code, comme partout ailleurs sur ces routes.
13619
+ *
13620
+ * Une phrase écrite ici traverse le serveur telle quelle et s'affiche dans
13621
+ * l'interface sans passer par la traduction : une interface en français
13622
+ * annonçait donc l'échec en anglais, et le texte ne pouvait renvoyer nulle
13623
+ * part puisque le serveur ignore où se trouve l'écran qui répare. Le client
13624
+ * traduit `serverErrors.ORG_KEY_MISMATCH` et nomme le chemin.
13625
+ */
13547
13626
  constructor() {
13548
- super(
13549
- "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."
13550
- );
13627
+ super("ORG_KEY_MISMATCH");
13551
13628
  this.name = "OrgKeyMismatchError";
13552
13629
  }
13553
13630
  };
@@ -14341,8 +14418,10 @@ var CloudSyncBridge = class {
14341
14418
  }
14342
14419
  console.warn(
14343
14420
  "[cloud-sync] org %s: could not check the organization key (%s) \u2014 syncing anyway.",
14421
+ // Le message porte désormais le code, destiné à l'interface ; le détail
14422
+ // lisible reste sur l'erreur, et c'est lui qui a sa place dans un log.
14344
14423
  link.orgId,
14345
- err.message
14424
+ err.detail ?? err.message
14346
14425
  );
14347
14426
  }
14348
14427
  this.keyMismatch.delete(link.orgId);
@@ -14619,6 +14698,10 @@ var cloudSyncRouter = router({
14619
14698
  await cloudSyncBridge.connect({ orgId: input.orgId, cloudUrl: input.cloudUrl });
14620
14699
  }
14621
14700
  await projectStore.moveToOrg(input.projectId, input.orgId);
14701
+ await projectPathStore.relocate(
14702
+ { id: input.projectId, orgId: null },
14703
+ { id: input.projectId, orgId: input.orgId }
14704
+ );
14622
14705
  await conversationStore.relocateAll();
14623
14706
  try {
14624
14707
  await cloudSyncBridge.followProject(input.orgId, input.projectId);
@@ -17193,4 +17276,4 @@ export {
17193
17276
  pullEnv,
17194
17277
  registerInstance
17195
17278
  };
17196
- //# sourceMappingURL=src-V3J62F6F.js.map
17279
+ //# sourceMappingURL=src-FYMPMNWX.js.map