@runeya/runeya 2.0.137 → 2.0.139

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 (402) hide show
  1. package/agent/index.js +36 -10
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-NAGIMH2T.js +11 -0
  4. package/chat-Q2UMYXQL.js +21 -0
  5. package/{chunk-ZFELQG4B.js → chunk-EV3TBM7E.js} +78 -5
  6. package/chunk-EV3TBM7E.js.map +1 -0
  7. package/{chunk-FJLMXLMK.js → chunk-GLIU3J47.js} +354 -128
  8. package/chunk-GLIU3J47.js.map +1 -0
  9. package/{chunk-BDQOBEZ3.js → chunk-GOMF7NWS.js} +2 -2
  10. package/{desktop-launcher-3COY6F6H.js → chunk-GWQV5KKU.js} +193 -13
  11. package/chunk-GWQV5KKU.js.map +1 -0
  12. package/{chunk-5EMEJNVU.js → chunk-LE6XQ3OV.js} +13 -1
  13. package/chunk-LE6XQ3OV.js.map +1 -0
  14. package/{chunk-J4GLFY7G.js → chunk-MSICJEZD.js} +5 -5
  15. package/{chunk-NURPXHLB.js → chunk-OZBSOSAS.js} +26 -12
  16. package/chunk-OZBSOSAS.js.map +1 -0
  17. package/{chunk-P65BO7WZ.js → chunk-WNCXZ6E7.js} +165 -125
  18. package/chunk-WNCXZ6E7.js.map +1 -0
  19. package/{chunk-I7JHF5FE.js → chunk-XHGJHYDC.js} +4 -4
  20. package/chunk-YSYLL57J.js +87 -0
  21. package/chunk-YSYLL57J.js.map +1 -0
  22. package/{companion-Q67RAO3N.js → companion-MGX62L4T.js} +9 -7
  23. package/desktop-installer-page-OJTOKP7V.js +598 -0
  24. package/desktop-installer-page-OJTOKP7V.js.map +1 -0
  25. package/desktop-launcher-HKXP4LRI.js +43 -0
  26. package/desktop-wizard-XIDDAG7L.js +15 -0
  27. package/index.js +30 -21
  28. package/index.js.map +1 -1
  29. package/mcp-server/index.js +49 -1
  30. package/mcp-server/index.js.map +1 -1
  31. package/{node-4UUJN2WG.js → node-RN4URNZ5.js} +4 -4
  32. package/package.json +1 -1
  33. package/settings-manager-BBNCDDQJ.js +10 -0
  34. package/settings-manager-BBNCDDQJ.js.map +1 -0
  35. package/{src-7O3GCEIB.js → src-KWLVQD36.js} +193 -92
  36. package/src-KWLVQD36.js.map +1 -0
  37. package/{vault-resolver-57Q2DVOR.js → vault-resolver-B5P2OUI5.js} +20 -2
  38. package/vault-resolver-B5P2OUI5.js.map +1 -0
  39. package/web/assets/AgentScalarChatInterface.vue-CqGVVIo8.js +13 -0
  40. package/web/assets/AgentTerminalPage-mVD1jsWC.js +1 -0
  41. package/web/assets/AiChatPage-J-JAXhoT.js +1 -0
  42. package/web/assets/AppLayout-6eKmu_TP.css +1 -0
  43. package/web/assets/AppLayout-CsUnvWA0.js +1 -0
  44. package/web/assets/AuditPage-gzMJbY4c.js +1 -0
  45. package/web/assets/CloudAccountPage-CIUmdyoI.js +1 -0
  46. package/web/assets/CloudAccountPage-Cm1ibhZY.js +1 -0
  47. package/web/assets/CloudAccountPage-eoNciq1Q.css +1 -0
  48. package/web/assets/CloudMessagingPage-EV4MwYrk.js +2 -0
  49. package/web/assets/DashboardPage-CrMccWRA.js +1 -0
  50. package/web/assets/DirectoryPickerDialog-Cnr4SkLc.js +1 -0
  51. package/web/assets/DirectoryPickerDialog-D1lQ83i5.css +1 -0
  52. package/web/assets/{EditorIcon-DXYoMZnL.js → EditorIcon-Dlr9ami0.js} +2 -2
  53. package/web/assets/{EnvironmentForm-D3pZuxVn.js → EnvironmentForm-NiG4dzT9.js} +2 -2
  54. package/web/assets/EnvironmentFormPage-TJzOWwS7.js +1 -0
  55. package/web/assets/EnvironmentListPage-oR335kl1.js +1 -0
  56. package/web/assets/KanbanBoardPage-Cta-iCIL.css +1 -0
  57. package/web/assets/KanbanBoardPage-Dol6K6rI.js +4 -0
  58. package/web/assets/KanbanListPage-C2yhMB2L.js +1 -0
  59. package/web/assets/{KanbanListPage-DxJFx6A6.css → KanbanListPage-CEJ9Vluh.css} +1 -1
  60. package/web/assets/LaunchProjectPage-BGIRMKdM.js +1 -0
  61. package/web/assets/LaunchProjectPage-CU2iF25_.css +1 -0
  62. package/web/assets/LaunchServicesPage-9aAno4Gc.css +1 -0
  63. package/web/assets/LaunchServicesPage-DqIG8ZDk.js +1 -0
  64. package/web/assets/LaunchShell-C7RrqA4k.js +1 -0
  65. package/web/assets/LaunchShell-CGtjrl6_.css +1 -0
  66. package/web/assets/LogViewer-BWtCyqa4.js +3 -0
  67. package/web/assets/OrgKeyPrompt-B343sYVi.css +1 -0
  68. package/web/assets/OrgKeyPrompt-IjlZPHOI.js +1 -0
  69. package/web/assets/OrgLogo-B0TayK5W.js +1 -0
  70. package/web/assets/ProcessControls-Bw28Duzs.js +1 -0
  71. package/web/assets/ProcessDetailPage-CVYQJ4aI.js +1 -0
  72. package/web/assets/{ProcessMetrics-CdQc_8Z0.js → ProcessMetrics-D0HzDnGO.js} +3 -3
  73. package/web/assets/ProjectCreateDialog-CLFPf8ds.js +1 -0
  74. package/web/assets/ProjectCreateDialog-UEIYMerY.css +1 -0
  75. package/web/assets/ProjectLocationGate-D68jdBcV.js +1 -0
  76. package/web/assets/ProjectPublishDialog-CDpS6xcQ.css +1 -0
  77. package/web/assets/ProjectPublishDialog-Cvvjeuyq.js +1 -0
  78. package/web/assets/RandomJobTestPage-CuUJfwwb.js +2 -0
  79. package/web/assets/ScenarioEditorPage-Ckq6XNl2.js +14 -0
  80. package/web/assets/SendToChatDialog-4a4_2amD.js +1 -0
  81. package/web/assets/ServiceControlsBar-OC7cDCM7.js +1 -0
  82. package/web/assets/ServiceDetailPage-BMlS1q4i.js +2 -0
  83. package/web/assets/ServiceFormPage-CozmJNy1.js +1 -0
  84. package/web/assets/{SettingsPage-DA7lVKfg.css → SettingsPage-CF548HPl.css} +1 -1
  85. package/web/assets/SettingsPage-CkJQwWCW.js +2063 -0
  86. package/web/assets/UnlockPage-94m6Ap-H.js +1 -0
  87. package/web/assets/VaultMigrationPage-Bj6KgIUi.js +1 -0
  88. package/web/assets/VersionBadge-DjTAz-tn.js +1 -0
  89. package/web/assets/WikiPage-n_vxXevo.js +1 -0
  90. package/web/assets/WikiView-lxEITfCa.js +1 -0
  91. package/web/assets/add-scalar-classes-lFkCrmFv.js +387 -0
  92. package/web/assets/{autocomplete-DobAPPYJ.js → autocomplete-bClqtFV-.js} +3 -3
  93. package/web/assets/{basic-shape-diamond.svg-FbeAPLc-.js → basic-shape-diamond.svg-DFdUK3gN.js} +1 -1
  94. package/web/assets/{basic-shape-hexagon.svg-CtwcdpTe.js → basic-shape-hexagon.svg-BKiT9xxU.js} +1 -1
  95. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DsSs3S2_.js → basic-shape-primary-circle-ellipse-round.svg-tmXcRxRQ.js} +1 -1
  96. package/web/assets/{basic-shape-primary-square-rectangle.svg-CNe1RNx8.js → basic-shape-primary-square-rectangle.svg-C9duFSNc.js} +1 -1
  97. package/web/assets/{basic-shape-shield.svg-DwZMLfah.js → basic-shape-shield.svg-CLzO94DF.js} +1 -1
  98. package/web/assets/{browser-Dz1gvldT.js → browser-BEDlGGfe.js} +1 -1
  99. package/web/assets/{browser-DsZ9HxVm.js → browser-CivlztYP.js} +1 -1
  100. package/web/assets/card-wcTFC8yG.js +32 -0
  101. package/web/assets/{checkbox-DPknldTJ.js → checkbox-TtO_mmrY.js} +2 -2
  102. package/web/assets/{chevronup-D2Lr2GiV.js → chevronup-Cd93cHVj.js} +4 -4
  103. package/web/assets/{chip-Caiakd-N.js → chip-omKmLLWH.js} +2 -2
  104. package/web/assets/client-BKIls6aD.js +24 -0
  105. package/web/assets/cloud-chat.store-Bskr_EXO.js +1 -0
  106. package/web/assets/cloud-client-rcfqjfUK.js +1 -0
  107. package/web/assets/cloud-session-CycNU7YV.js +1 -0
  108. package/web/assets/cloud-session-DiaAeCJI.js +2 -0
  109. package/web/assets/column-DgtEciO-.js +763 -0
  110. package/web/assets/composables-Ce8WccBy.js +1 -0
  111. package/web/assets/{computer-device-desktop-monitor.svg-CwiGN14T.js → computer-device-desktop-monitor.svg-D3YaocxY.js} +1 -1
  112. package/web/assets/{computer-device-desktop.svg-BC2VdXDZ.js → computer-device-desktop.svg-lnn_cyCx.js} +1 -1
  113. package/web/assets/{computer-device-laptop.svg-BOp8AKN6.js → computer-device-laptop.svg-9f5_Ipnq.js} +1 -1
  114. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CmbpPX1u.js → computer-device-mobile-phone-android-samsung-back.svg-DxHwZI5u.js} +1 -1
  115. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-_WGKWVtZ.js → computer-device-mobile-phone-android-samsung.svg-CnYqoXt4.js} +1 -1
  116. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-DmLh97KG.js → computer-device-mobile-phone-iphone-x-back.svg-D8JfsF_0.js} +1 -1
  117. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-C7-5mdyV.js → computer-device-mobile-phone-iphone-x.svg-CUbRWc7v.js} +1 -1
  118. package/web/assets/{computer-device-mobile-tablet-touch.svg-DiUaSnhU.js → computer-device-mobile-tablet-touch.svg-CBX2kbI1.js} +1 -1
  119. package/web/assets/{computer-device-mobile-tablet.svg-B6nfbYm_.js → computer-device-mobile-tablet.svg-CIn05KEg.js} +1 -1
  120. package/web/assets/{computer-device-network-ethernet-cat6.svg-DwtVKy79.js → computer-device-network-ethernet-cat6.svg-Dj0GRqXd.js} +1 -1
  121. package/web/assets/{computer-device-network-lan-www.svg-vQKfG3Xz.js → computer-device-network-lan-www.svg-D-G7js6t.js} +1 -1
  122. package/web/assets/{computer-device-network-wifi-connection.svg-DhHaOUge.js → computer-device-network-wifi-connection.svg-JnvMwBMA.js} +1 -1
  123. package/web/assets/{computer-device-network-wifi-router.svg-1dQS4k4J.js → computer-device-network-wifi-router.svg--XxSrk_J.js} +1 -1
  124. package/web/assets/{cssMode-CdQL22W5.js → cssMode-C3gHbz_w.js} +1 -1
  125. package/web/assets/{divider-DhYR4BAO.js → divider-eMI33mv1.js} +2 -2
  126. package/web/assets/{docx-preview-D-jP_CCs.js → docx-preview-CTkzTOcl.js} +1 -1
  127. package/web/assets/{ecology-science-erlenmeyer-flask.svg-D76wQVA2.js → ecology-science-erlenmeyer-flask.svg-DrHKX7bH.js} +1 -1
  128. package/web/assets/{fieldset-BtOjs_Hh.js → fieldset-CiIJH8Xe.js} +2 -2
  129. package/web/assets/{freemarker2-BADW9vhy.js → freemarker2-DWxB7Wcd.js} +1 -1
  130. package/web/assets/{handlebars-CwWQD_C8.js → handlebars-CWUdFsNH.js} +1 -1
  131. package/web/assets/{html-y87CEbe3.js → html-DhvF7iHg.js} +1 -1
  132. package/web/assets/{htmlMode-CVagtvVh.js → htmlMode-CIuDa6YW.js} +1 -1
  133. package/web/assets/{image-flash-lightning.svg-OvpKi3a3.js → image-flash-lightning.svg-qFK_1eYx.js} +1 -1
  134. package/web/assets/{image-picture-flower.svg-DLOePozT.js → image-picture-flower.svg-qAmkHnOu.js} +1 -1
  135. package/web/assets/{index-CcIrffU_.js → index-CzSAFmCu.js} +363 -363
  136. package/web/assets/index-D0IPNhsg.css +1 -0
  137. package/web/assets/{interface-alert-exclamation-diamond.svg-4Vk7SoQ1.js → interface-alert-exclamation-diamond.svg-Dugh0ymo.js} +1 -1
  138. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BLAvc4am.js → interface-alert-exclamation-triangle-warning.svg-8neoRFVP.js} +1 -1
  139. package/web/assets/{interface-alert-information-circle.svg-CaAXpDAI.js → interface-alert-information-circle.svg-DM9S7DBv.js} +1 -1
  140. package/web/assets/{interface-award-crown.svg-CW7XG0wx.js → interface-award-crown.svg--68HCcUG.js} +1 -1
  141. package/web/assets/{interface-bookmark.svg-BpLEuOv2.js → interface-bookmark-tag.svg-BESGrlZw.js} +1 -1
  142. package/web/assets/{interface-bookmark-tag.svg-DPWVVeZU.js → interface-bookmark.svg-CVadIwuA.js} +1 -1
  143. package/web/assets/{interface-calendar-date-one.svg-DbBgvI4W.js → interface-calendar-date-one.svg-D9XP9Dv_.js} +1 -1
  144. package/web/assets/{interface-content-book-open-pages.svg-BbsuvPZM.js → interface-content-book-open-pages.svg-DMI3yFmk.js} +1 -1
  145. package/web/assets/{interface-content-book-page.svg-DbRPz1j8.js → interface-content-book-page.svg-BPxSHq3g.js} +1 -1
  146. package/web/assets/{interface-content-file.svg-OJPKABxS.js → interface-content-file.svg-D0Mbjb8x.js} +1 -1
  147. package/web/assets/interface-content-folder.svg-D3wbwhAD.js +1 -0
  148. package/web/assets/{interface-content-folder.svg-3D_5OE_-.js → interface-content-folder.svg-EUO1l7Mn.js} +1 -1
  149. package/web/assets/{interface-copy-clipboard.svg-DqthVh9J.js → interface-copy-clipboard.svg-DI-wp72J.js} +1 -1
  150. package/web/assets/{interface-edit-attachment.svg-BAPCnZ0B.js → interface-edit-attachment.svg-CrWbaWn_.js} +1 -1
  151. package/web/assets/{interface-edit-binocular.svg-BoV39ouF.js → interface-edit-binocular.svg-BzUDq1Il.js} +1 -1
  152. package/web/assets/{interface-edit-magic-wand.svg-Cz36nKVn.js → interface-edit-magic-wand.svg-DaAdEL5x.js} +1 -1
  153. package/web/assets/{interface-edit-tool-paint-roller.svg-DZUQotD5.js → interface-edit-tool-paint-roller.svg-C972BXSM.js} +1 -1
  154. package/web/assets/{interface-edit-tool-pencil.svg-DBf1Y9Tj.js → interface-edit-tool-pencil.svg-47QCYH9f.js} +1 -1
  155. package/web/assets/{interface-favorite-award.svg-B93sRjxf.js → interface-favorite-award.svg-DROP-rzN.js} +1 -1
  156. package/web/assets/{interface-favorite-flag.svg-DKHuT11J.js → interface-favorite-flag.svg-B1gpMdkg.js} +1 -1
  157. package/web/assets/{interface-favorite-heart.svg-Bw5FZQ7d.js → interface-favorite-heart.svg-Dc0MMGJl.js} +1 -1
  158. package/web/assets/{interface-favorite-star.svg-CgLbct_b.js → interface-favorite-star.svg-D6A5KWft.js} +1 -1
  159. package/web/assets/{interface-favorite-stars-sparkles.svg-B7cYS4ef.js → interface-favorite-stars-sparkles.svg-CpEr4y41.js} +1 -1
  160. package/web/assets/{interface-hierarchy-flowchart.svg-zwuaRdWq.js → interface-hierarchy-flowchart.svg-DjvgRFcZ.js} +1 -1
  161. package/web/assets/{interface-home-house.svg-B85yMFCe.js → interface-home-house.svg-BMmVKlSc.js} +1 -1
  162. package/web/assets/{interface-hyperlink.svg-US6b-Svn.js → interface-hyperlink.svg-BewFXeyZ.js} +1 -1
  163. package/web/assets/{interface-lighting-brightness.svg-mZWkhb7f.js → interface-lighting-brightness.svg-B74_Fwt9.js} +1 -1
  164. package/web/assets/{interface-lock-closed.svg-9oHuNwuY.js → interface-lock-closed.svg-B_kTyHSd.js} +1 -1
  165. package/web/assets/{interface-lock-open-unlock.svg-DBetdJny.js → interface-lock-open-unlock.svg-BpmOnQWL.js} +1 -1
  166. package/web/assets/{interface-login-key.svg-BZnZTYd1.js → interface-login-key.svg-CjYpI4bh.js} +1 -1
  167. package/web/assets/{interface-search.svg-CMXAOoam.js → interface-search.svg-FJmFWdB4.js} +1 -1
  168. package/web/assets/{interface-setting-cog.svg-CKckatt7.js → interface-setting-cog.svg-CfzSne-G.js} +1 -1
  169. package/web/assets/{interface-share-megaphone-bullhorn.svg-DH7kVqN-.js → interface-share-megaphone-bullhorn.svg-CIIzDsMB.js} +1 -1
  170. package/web/assets/{interface-share-rocket.svg-BNXcMugi.js → interface-share-rocket.svg-DqTBI7lO.js} +1 -1
  171. package/web/assets/{interface-share-satellite.svg-Bb8t607w.js → interface-share-satellite.svg-nJfwIxpE.js} +1 -1
  172. package/web/assets/{interface-share-space-ship.svg-Dk4rbLtF.js → interface-share-space-ship.svg-hSmFC9Bt.js} +1 -1
  173. package/web/assets/{interface-share.svg-CtX8dq5i.js → interface-share.svg-DW5W5LS6.js} +1 -1
  174. package/web/assets/{interface-signal-square.svg-DmUIlYTd.js → interface-signal-square.svg-CxjWE1n9.js} +1 -1
  175. package/web/assets/{interface-time-clock-circle.svg-D2ZNaXT3.js → interface-time-clock-circle.svg-OliTsm3U.js} +1 -1
  176. package/web/assets/{interface-time-hour-glass.svg-Ddo-8hHe.js → interface-time-hour-glass.svg-Cq5G77ft.js} +1 -1
  177. package/web/assets/{interface-users-multiple.svg-Jh7S0sT4.js → interface-users-multiple.svg-BZxMlLou.js} +1 -1
  178. package/web/assets/{interface-weather-moon.svg-DbdQFgL2.js → interface-weather-moon.svg-lFXrwEyz.js} +1 -1
  179. package/web/assets/{javascript-BVGFyXBk.js → javascript-BVZ1omk1.js} +1 -1
  180. package/web/assets/{jsonMode-vnFlxYl9.js → jsonMode-CiBARvaV.js} +2 -2
  181. package/web/assets/{liquid-DieKMEvN.js → liquid-CUYREU3G.js} +1 -1
  182. package/web/assets/{lspLanguageFeatures-DoeI-8Y7.js → lspLanguageFeatures-BCfkeNgB.js} +3 -3
  183. package/web/assets/{mail-chat-bubble-square.svg-CApdU2ea.js → mail-chat-bubble-square.svg-DbOh-u2f.js} +1 -1
  184. package/web/assets/{mail-send-email-paper-airplane.svg-jjZ0KB32.js → mail-send-email-paper-airplane.svg-Ci3654Ap.js} +1 -1
  185. package/web/assets/{mail-send-envelope.svg-B6Tsoh-8.js → mail-send-envelope.svg-BUCSUoVb.js} +1 -1
  186. package/web/assets/{mdx-BCkszXid.js → mdx-GNBOgT3C.js} +1 -1
  187. package/web/assets/{minus-DfLQX3s2.js → minus-qBqqwoxz.js} +2 -2
  188. package/web/assets/modal-CsKPvO45.js +5 -0
  189. package/web/assets/modal-E9FRG--u.js +1 -0
  190. package/web/assets/{money-cashier-receipt.svg-DM-I8Snr.js → money-cashier-receipt.svg-qOZhZZs2.js} +1 -1
  191. package/web/assets/{money-currency-dollar-pay.svg-CkDRewrV.js → money-currency-dollar-pay.svg-WYlopKIm.js} +1 -1
  192. package/web/assets/{money-graph-arrow-increase.svg-BT4KLHWz.js → money-graph-arrow-increase.svg-DAcyYWIw.js} +1 -1
  193. package/web/assets/{money-graph-bar-chart-increase.svg-EvyIJ3Uu.js → money-graph-bar-chart-increase.svg-Bcjxz1Kd.js} +1 -1
  194. package/web/assets/multiselect-DiGSzibm.js +251 -0
  195. package/web/assets/{nature-ecology-leaf.svg-uZBwXdg9.js → nature-ecology-leaf.svg-d0AKmyxH.js} +1 -1
  196. package/web/assets/{password-D1R5w1qL.js → password-BwMjgK0Q.js} +4 -4
  197. package/web/assets/{phone-telephone.svg-BSvOskIB.js → phone-telephone.svg-BzKK2wbN.js} +1 -1
  198. package/web/assets/{plus-CNGSRnxy.js → plus-D6Rlmwbp.js} +6 -6
  199. package/web/assets/process.store-I5VZVT0x.js +1 -0
  200. package/web/assets/{programming-bug.svg-CLnGs4K-.js → programming-bug.svg-BtSROvd5.js} +1 -1
  201. package/web/assets/{programming-cloud.svg-CxBovXBR.js → programming-cloud.svg-YDPFJdYt.js} +1 -1
  202. package/web/assets/{programming-computer-database-server.svg-C1JmOyio.js → programming-computer-database-server.svg-C_7cgE9Q.js} +1 -1
  203. package/web/assets/{programming-computer-database.svg-BRjyOzP4.js → programming-computer-database.svg-CLw76mik.js} +1 -1
  204. package/web/assets/{programming-module-four-layout.svg-Blwzw6Qz.js → programming-module-four-layout.svg-BsoC5ySI.js} +1 -1
  205. package/web/assets/{programming-module-three.svg-6bkrmWsU.js → programming-module-three.svg-CThoMoAk.js} +1 -1
  206. package/web/assets/{programming-module.svg-CBS9xKxX.js → programming-module.svg-BQ1YjjAj.js} +1 -1
  207. package/web/assets/{programming-script-code.svg-BVhyoAD3.js → programming-script-code.svg-BKT_wilO.js} +1 -1
  208. package/web/assets/project-launch.store-CBnJKGQe.js +1 -0
  209. package/web/assets/project.store-JIcOcKSg.js +1 -0
  210. package/web/assets/{python-CiPYtj_d.js → python-BXwGt-Ip.js} +1 -1
  211. package/web/assets/{radiobutton--KWBHcDP.js → radiobutton-D20sH1UN.js} +3 -3
  212. package/web/assets/{razor-CSoWGP30.js → razor-RXambmP2.js} +1 -1
  213. package/web/assets/router-BXj_oCbf.js +1 -0
  214. package/web/assets/{selectbutton-C0NL5n4w.js → selectbutton-rLcf19Xf.js} +4 -4
  215. package/web/assets/settings-scope-Cy_9OGE1.js +1 -0
  216. package/web/assets/settings.store-DrKeFdgW.js +1 -0
  217. package/web/assets/{shopping-cart.svg-C-8NG_Po.js → shopping-cart.svg-EjTn3XQF.js} +1 -1
  218. package/web/assets/{shopping-gift-present.svg-Bp6q5VzJ.js → shopping-gift-present.svg-AQNlzazh.js} +1 -1
  219. package/web/assets/{shopping-shipping-box-parcel-package.svg-DeWaEIwm.js → shopping-shipping-box-parcel-package.svg-VB9n6UNi.js} +1 -1
  220. package/web/assets/src-ByEHJyfr.js +1 -0
  221. package/web/assets/{src-BHR3l7pa.js → src-CUwD1xPP.js} +35 -35
  222. package/web/assets/src-C_auNJtg.css +1 -0
  223. package/web/assets/{tag-new-circle.svg-CTljXsqE.js → tag-new-circle.svg-BllOd5JW.js} +1 -1
  224. package/web/assets/theme-DuAHBQRP.js +1 -0
  225. package/web/assets/{toggleswitch-d41l5g27.js → toggleswitch-C-88_GnB.js} +2 -2
  226. package/web/assets/{travel-map-earth-globe.svg-BUkcntCp.js → travel-map-earth-globe.svg-ChLDmmU9.js} +1 -1
  227. package/web/assets/trpc-BoKwANhj.js +1 -0
  228. package/web/assets/{tsMode-B2c-rCAa.js → tsMode-CIN3QIw8.js} +6 -6
  229. package/web/assets/{typescript-CmW4u_GQ.js → typescript-wXu_7Eym.js} +1 -1
  230. package/web/assets/useAiChatDrawer-Bs1Gxhn2.js +1 -0
  231. package/web/assets/{useCloudOrg-E4l-99WA.js → useCloudOrg-0AZ58M3V.js} +1 -1
  232. package/web/assets/useEnvVarAutocomplete-BXC_JUF7.js +102 -0
  233. package/web/assets/{useEnvVarAutocomplete-DsxEF6Ya.css → useEnvVarAutocomplete-dxAmKsn7.css} +1 -1
  234. package/web/assets/useProjectCloudOrg-UIfVePy9.js +1 -0
  235. package/web/assets/useServiceUrlHost-BXbIxPaT.js +1 -0
  236. package/web/assets/{xml-BxMqu3hT.js → xml-FTYGqn2R.js} +1 -1
  237. package/web/assets/{yaml-Djx7E3R1.js → yaml-DQEEK2dU.js} +1 -1
  238. package/web/index.html +2 -2
  239. package/agent-manager-FUU72VGH.js +0 -11
  240. package/chat-C26CBAZX.js +0 -21
  241. package/chunk-5EMEJNVU.js.map +0 -1
  242. package/chunk-FJLMXLMK.js.map +0 -1
  243. package/chunk-NURPXHLB.js.map +0 -1
  244. package/chunk-P65BO7WZ.js.map +0 -1
  245. package/chunk-ZFELQG4B.js.map +0 -1
  246. package/desktop-launcher-3COY6F6H.js.map +0 -1
  247. package/desktop-wizard-4CYANX2O.js +0 -209
  248. package/desktop-wizard-4CYANX2O.js.map +0 -1
  249. package/settings-manager-J4QBIU3T.js +0 -10
  250. package/src-7O3GCEIB.js.map +0 -1
  251. package/web/assets/AgentScalarChatInterface.vue-BGGkpyp3.js +0 -13
  252. package/web/assets/AgentTerminalPage-B8gLray2.js +0 -1
  253. package/web/assets/AiChatPage-BKITsyMx.js +0 -1
  254. package/web/assets/AppLayout-B72S4nTi.css +0 -1
  255. package/web/assets/AppLayout-BYw7v2sp.js +0 -1
  256. package/web/assets/AuditPage-nHTwzyia.js +0 -1
  257. package/web/assets/CloudAccountPage-DYOvfMjD.css +0 -1
  258. package/web/assets/CloudAccountPage-DuaZz2j4.js +0 -1
  259. package/web/assets/CloudAccountPage-XHxI-ixD.js +0 -1
  260. package/web/assets/CloudMessagingPage-B2N5K-Xs.js +0 -2
  261. package/web/assets/DashboardPage-VoWJeWh_.js +0 -1
  262. package/web/assets/DirectoryPickerDialog-B5SuJOhv.js +0 -1
  263. package/web/assets/DirectoryPickerDialog-Ctp1lYoS.css +0 -1
  264. package/web/assets/EnvironmentFormPage-BIXbPTN5.js +0 -1
  265. package/web/assets/EnvironmentListPage-CHa-Ni3w.js +0 -1
  266. package/web/assets/KanbanBoardPage-B46zbE2H.css +0 -1
  267. package/web/assets/KanbanBoardPage-BFTNpm8P.js +0 -4
  268. package/web/assets/KanbanListPage-CYuIrKXH.js +0 -1
  269. package/web/assets/LaunchProjectPage-9hhGBdOh.css +0 -1
  270. package/web/assets/LaunchProjectPage-jy-R3Fiw.js +0 -1
  271. package/web/assets/LaunchServicesPage-BMtm_8yP.css +0 -1
  272. package/web/assets/LaunchServicesPage-DX7nyo36.js +0 -1
  273. package/web/assets/LaunchShell-BHfseuPM.js +0 -1
  274. package/web/assets/LaunchShell-HenrOlHV.css +0 -1
  275. package/web/assets/LogViewer-C-pHXudR.js +0 -3
  276. package/web/assets/OrgKeyPrompt-CrHXZdKL.css +0 -1
  277. package/web/assets/OrgKeyPrompt-OPnK5oPm.js +0 -1
  278. package/web/assets/OrgLogo-Cxa49Tl3.js +0 -1
  279. package/web/assets/ProcessControls-DXDyR6XX.js +0 -1
  280. package/web/assets/ProcessDetailPage-DNKTwgPW.js +0 -1
  281. package/web/assets/RandomJobTestPage-BE8HkgSb.js +0 -2
  282. package/web/assets/ScenarioEditorPage-Coo6ExzZ.js +0 -14
  283. package/web/assets/SendToChatDialog-ClXerpCU.js +0 -1
  284. package/web/assets/ServiceControlsBar-C7HrPjQI.js +0 -1
  285. package/web/assets/ServiceDetailPage-Cxuy0Yix.js +0 -2
  286. package/web/assets/ServiceFormPage-CCOu1h8v.js +0 -1
  287. package/web/assets/SettingsPage-Dt1ViDQe.js +0 -2063
  288. package/web/assets/UnlockPage-C5iEOAKH.js +0 -1
  289. package/web/assets/VaultMigrationPage-CwRWvFY7.js +0 -1
  290. package/web/assets/VersionBadge-Bqb72GXf.js +0 -1
  291. package/web/assets/WikiPage-Bl1jDKKp.js +0 -1
  292. package/web/assets/WikiView-58u6vU3q.js +0 -1
  293. package/web/assets/add-scalar-classes-CT5KQbzH.js +0 -387
  294. package/web/assets/card-46tM5yU0.js +0 -32
  295. package/web/assets/client-KL5c1Dog.js +0 -24
  296. package/web/assets/cloud-chat.store-Belo5SKd.js +0 -1
  297. package/web/assets/cloud-client-Cqa2Udt8.js +0 -1
  298. package/web/assets/cloud-session-56bUtkSL.js +0 -2
  299. package/web/assets/cloud-session-Dqm0C6H5.js +0 -1
  300. package/web/assets/column-DQ53_qc6.js +0 -763
  301. package/web/assets/composables-CHyZa9ag.js +0 -1
  302. package/web/assets/index-CKOtBNaZ.css +0 -1
  303. package/web/assets/interface-content-folder.svg-8mYqkDao.js +0 -1
  304. package/web/assets/modal-CCco27Sn.js +0 -5
  305. package/web/assets/modal-D4J85_wC.js +0 -1
  306. package/web/assets/multiselect-BmjidXlj.js +0 -251
  307. package/web/assets/process.store-p1LqnpY2.js +0 -1
  308. package/web/assets/project-launch.store-BBYtCcv8.js +0 -1
  309. package/web/assets/project.store-D_2v7amt.js +0 -1
  310. package/web/assets/router-CRKT3825.js +0 -1
  311. package/web/assets/settings-scope-DblmUa3N.js +0 -1
  312. package/web/assets/settings.store-DKTQyerJ.js +0 -1
  313. package/web/assets/src-BN5gTC76.css +0 -1
  314. package/web/assets/src-BRLkogf3.js +0 -1
  315. package/web/assets/theme-BZzt_Sgl.js +0 -1
  316. package/web/assets/trpc-Db0Atu8A.js +0 -1
  317. package/web/assets/useAiChatDrawer-0QJJVXul.js +0 -1
  318. package/web/assets/useEnvVarAutocomplete-BDqUWoGr.js +0 -102
  319. package/web/assets/useProjectCatalog-Cxt-hL1H.js +0 -1
  320. package/web/assets/useProjectCloudOrg-CwLTQLIO.js +0 -1
  321. package/web/assets/useServiceUrlHost-VIA3uP5-.js +0 -1
  322. /package/{agent-manager-FUU72VGH.js.map → agent-manager-NAGIMH2T.js.map} +0 -0
  323. /package/{chat-C26CBAZX.js.map → chat-Q2UMYXQL.js.map} +0 -0
  324. /package/{chunk-BDQOBEZ3.js.map → chunk-GOMF7NWS.js.map} +0 -0
  325. /package/{chunk-J4GLFY7G.js.map → chunk-MSICJEZD.js.map} +0 -0
  326. /package/{chunk-I7JHF5FE.js.map → chunk-XHGJHYDC.js.map} +0 -0
  327. /package/{companion-Q67RAO3N.js.map → companion-MGX62L4T.js.map} +0 -0
  328. /package/{node-4UUJN2WG.js.map → desktop-launcher-HKXP4LRI.js.map} +0 -0
  329. /package/{settings-manager-J4QBIU3T.js.map → desktop-wizard-XIDDAG7L.js.map} +0 -0
  330. /package/{vault-resolver-57Q2DVOR.js.map → node-RN4URNZ5.js.map} +0 -0
  331. /package/web/assets/{abap-BwLGULgU.js → abap-CRsXUZTC.js} +0 -0
  332. /package/web/assets/{apex-BmwhxS2n.js → apex-CN6ZSzwM.js} +0 -0
  333. /package/web/assets/{azcli-7RvE_Zal.js → azcli-ULFzG1xV.js} +0 -0
  334. /package/web/assets/{bat-DRPmS6Na.js → bat-BVH8lwB4.js} +0 -0
  335. /package/web/assets/{bicep-BwfkS7ZV.js → bicep-B8jMqZ8i.js} +0 -0
  336. /package/web/assets/{browser-D3d3061H.js → browser-xa0YgePN.js} +0 -0
  337. /package/web/assets/{cameligo-BJ_mdC8E.js → cameligo-DuuRwBiE.js} +0 -0
  338. /package/web/assets/{clojure-CQKq7DWt.js → clojure-DUpiEmPZ.js} +0 -0
  339. /package/web/assets/{coffee-DJRj2iwd.js → coffee-BO4ou798.js} +0 -0
  340. /package/web/assets/{cpp-BC1yJTUW.js → cpp-CHOtY2DW.js} +0 -0
  341. /package/web/assets/{csharp-D6U2fAAT.js → csharp-D3t5O1XD.js} +0 -0
  342. /package/web/assets/{csp-B2Ue_UmV.js → csp-CJpJWgPE.js} +0 -0
  343. /package/web/assets/{css-CEzlcbMY.js → css-CAeYpQS5.js} +0 -0
  344. /package/web/assets/{cypher-D5Sg38Yj.js → cypher-D9-TC6ep.js} +0 -0
  345. /package/web/assets/{dart-BhjKRv6v.js → dart-CYoMdUUD.js} +0 -0
  346. /package/web/assets/{dockerfile-BnivEbtE.js → dockerfile-B2ffS5e2.js} +0 -0
  347. /package/web/assets/{ecl-TS1StLK1.js → ecl-BL_MLv5o.js} +0 -0
  348. /package/web/assets/{elixir-BX9ta6DO.js → elixir-DTTK5HpM.js} +0 -0
  349. /package/web/assets/{flow9-CoOB42ee.js → flow9-CnqIliGA.js} +0 -0
  350. /package/web/assets/{fsharp-DmQslDFn.js → fsharp-BtsygJkw.js} +0 -0
  351. /package/web/assets/{go-BbEGGooY.js → go-DksUoC0w.js} +0 -0
  352. /package/web/assets/{graphql-E24y5sn9.js → graphql-DCtJGb0Q.js} +0 -0
  353. /package/web/assets/{hcl-pBZphP8G.js → hcl-Vm6MaTNZ.js} +0 -0
  354. /package/web/assets/{ini-BSbRgr25.js → ini-DdyyiZLB.js} +0 -0
  355. /package/web/assets/{java-D8KvzsMp.js → java-D9tw0Sq3.js} +0 -0
  356. /package/web/assets/{julia-BDRytf15.js → julia-DsaDhMSi.js} +0 -0
  357. /package/web/assets/{kotlin-CNcQo-uP.js → kotlin-eMyqSg05.js} +0 -0
  358. /package/web/assets/{less-0HRV-2Rz.js → less-BTExquT2.js} +0 -0
  359. /package/web/assets/{lexon-DdJG3_pW.js → lexon-Btiu1CPR.js} +0 -0
  360. /package/web/assets/{lua-Blq8Mukj.js → lua-uIHSqSt_.js} +0 -0
  361. /package/web/assets/{m3-CXbmzr9W.js → m3-DtY-QwwW.js} +0 -0
  362. /package/web/assets/{markdown-DFIISzT8.js → markdown-DalwAnMR.js} +0 -0
  363. /package/web/assets/{mips-C2XSYglv.js → mips-BocGRfi2.js} +0 -0
  364. /package/web/assets/{msdax-D3Jl6oAY.js → msdax-CQFbyz50.js} +0 -0
  365. /package/web/assets/{mysql-mCqxt_Co.js → mysql-BM8uo0J8.js} +0 -0
  366. /package/web/assets/{objective-c-CUKLr4E9.js → objective-c-H3c5-SZb.js} +0 -0
  367. /package/web/assets/{pascal-BpqDI6Ur.js → pascal-BgiV8eY7.js} +0 -0
  368. /package/web/assets/{pascaligo-BVchPyL4.js → pascaligo-DT9ZcxD2.js} +0 -0
  369. /package/web/assets/{perl-Dgc9v23P.js → perl-B0U4-W-w.js} +0 -0
  370. /package/web/assets/{pgsql-Dk9IX1G_.js → pgsql-B6kZRXs9.js} +0 -0
  371. /package/web/assets/{php-XeFLn3yL.js → php-DG9vCwQM.js} +0 -0
  372. /package/web/assets/{pla-DQMfrdXZ.js → pla-B4Y4wk5I.js} +0 -0
  373. /package/web/assets/{postiats-DiKrdL3K.js → postiats-C_eWfeAP.js} +0 -0
  374. /package/web/assets/{powerquery-Cj9Q91Zv.js → powerquery-DfX2HFDF.js} +0 -0
  375. /package/web/assets/{powershell-DxLElnzU.js → powershell-Bxsmga8Z.js} +0 -0
  376. /package/web/assets/{protobuf-7vT2HdZD.js → protobuf-BjgmCR9H.js} +0 -0
  377. /package/web/assets/{pug-oi96TUbQ.js → pug-ryXuxA3i.js} +0 -0
  378. /package/web/assets/{qsharp-DNr9IwS2.js → qsharp-91Kv1jwy.js} +0 -0
  379. /package/web/assets/{r-C-REi_Zk.js → r-j6OkO-Lp.js} +0 -0
  380. /package/web/assets/{redis-BvOCrLoN.js → redis-B2Usw_gW.js} +0 -0
  381. /package/web/assets/{redshift-jNEw-REz.js → redshift-Bl5n-UlH.js} +0 -0
  382. /package/web/assets/{restructuredtext-B9ET-x7N.js → restructuredtext-IIWeXmeu.js} +0 -0
  383. /package/web/assets/{ruby-BIEBiJDZ.js → ruby-DQH1R4pC.js} +0 -0
  384. /package/web/assets/{rust-BnoIVewm.js → rust-BJi0001n.js} +0 -0
  385. /package/web/assets/{sb-Bwvy9clh.js → sb-C34JQX0H.js} +0 -0
  386. /package/web/assets/{scala-DPv5zS47.js → scala-BqHjuqsC.js} +0 -0
  387. /package/web/assets/{scheme-BQqNVxf_.js → scheme-DIfjDH23.js} +0 -0
  388. /package/web/assets/{scss-Ck1AFDEz.js → scss-MxgEDdb7.js} +0 -0
  389. /package/web/assets/{shell-C4IYs9Z7.js → shell-D_SMEq6l.js} +0 -0
  390. /package/web/assets/{solidity-D3bS77xq.js → solidity-CyBHDO6p.js} +0 -0
  391. /package/web/assets/{sophia-BSTVfueD.js → sophia-8_L-7Xrk.js} +0 -0
  392. /package/web/assets/{sparql-BGcXD7s2.js → sparql-CXxyP-1c.js} +0 -0
  393. /package/web/assets/{sql-CIsSgyam.js → sql-DNd4NFJw.js} +0 -0
  394. /package/web/assets/{st-dV1d_AXx.js → st-DPFJcK-4.js} +0 -0
  395. /package/web/assets/{swift-CK8gXWQn.js → swift-DE_LJ5Ub.js} +0 -0
  396. /package/web/assets/{systemverilog-B9tHBIJU.js → systemverilog-IgPgwLQ7.js} +0 -0
  397. /package/web/assets/{tcl-BgRT60RV.js → tcl-Cr-fmmH0.js} +0 -0
  398. /package/web/assets/{twig-CGkLO4Nl.js → twig-Dd_ODPfV.js} +0 -0
  399. /package/web/assets/{typespec-DMP9WuzC.js → typespec-CeK8X8vB.js} +0 -0
  400. /package/web/assets/{uuid-H0yY5A03.js → uuid-6HQMUkhT.js} +0 -0
  401. /package/web/assets/{vb-DfSbhl3d.js → vb-CyLVxxH6.js} +0 -0
  402. /package/web/assets/{wgsl-CaJmoLY5.js → wgsl-CmRFGM3r.js} +0 -0
@@ -51,11 +51,8 @@ import {
51
51
  requireEnvAction,
52
52
  requireLoopbackOrToken,
53
53
  requireServiceAction,
54
- resolveAgentCwd,
55
- resolveConversationCwd,
56
54
  resolveEffectiveAgentId,
57
55
  resolveServiceVariables,
58
- resolveWorkspaceCwd,
59
56
  router,
60
57
  scenarioRunStore,
61
58
  scenarioStore,
@@ -65,12 +62,12 @@ import {
65
62
  soleAccountScope,
66
63
  startCliSession,
67
64
  vaultOfProject
68
- } from "./chunk-P65BO7WZ.js";
65
+ } from "./chunk-WNCXZ6E7.js";
69
66
  import {
70
67
  settingsManager
71
- } from "./chunk-I7JHF5FE.js";
68
+ } from "./chunk-XHGJHYDC.js";
72
69
  import {
73
- LocalProjectExistsError,
70
+ LocalProjectRefusedError,
74
71
  activeSessionRegistry,
75
72
  companionDefaultPrompt,
76
73
  companionSettings,
@@ -81,14 +78,16 @@ import {
81
78
  holdsRuneyaProject,
82
79
  projectPathStore,
83
80
  projectStore,
81
+ resolveAgentCwd,
82
+ resolveConversationCwd,
83
+ resolveWorkspaceCwd,
84
84
  signJwt,
85
85
  startClaudeTranscriptWatcher,
86
86
  startCodexTranscriptWatcher,
87
87
  stopClaudeTranscriptWatcher,
88
88
  stopCodexTranscriptWatcher,
89
89
  verifyJwt
90
- } from "./chunk-FJLMXLMK.js";
91
- import "./chunk-MD3VW4HQ.js";
90
+ } from "./chunk-GLIU3J47.js";
92
91
  import {
93
92
  agentManager,
94
93
  agentSpawner,
@@ -127,13 +126,14 @@ import {
127
126
  stableEncryptValue,
128
127
  traefikManager,
129
128
  unregisterInstance
130
- } from "./chunk-J4GLFY7G.js";
129
+ } from "./chunk-MSICJEZD.js";
131
130
  import {
132
131
  atomicWriteSecure,
133
132
  renameWithRetry,
134
133
  resolveConversationRunDir,
135
134
  sweepStaleTempFiles
136
- } from "./chunk-BDQOBEZ3.js";
135
+ } from "./chunk-GOMF7NWS.js";
136
+ import "./chunk-MD3VW4HQ.js";
137
137
  import {
138
138
  AGENT_LONG_FETCH_TIMEOUT,
139
139
  AGENT_STOP_FETCH_TIMEOUT,
@@ -170,9 +170,10 @@ import {
170
170
  serviceSlug,
171
171
  suggestBuiltinReferences,
172
172
  writeEntity
173
- } from "./chunk-5EMEJNVU.js";
173
+ } from "./chunk-LE6XQ3OV.js";
174
174
  import {
175
175
  allVaultRoots,
176
+ backfillOrgCloud,
176
177
  env,
177
178
  forgetOrgLogo,
178
179
  keyRoot,
@@ -180,6 +181,7 @@ import {
180
181
  legacyVaultRoot,
181
182
  listCloudVaults,
182
183
  listOrgVaults,
184
+ localVaultCollidesWithMachineRoot,
183
185
  machineFilePath,
184
186
  machineRoot,
185
187
  orgVaultRoot,
@@ -192,14 +194,15 @@ import {
192
194
  rememberOrgAccount,
193
195
  rememberOrgLogo,
194
196
  rememberOrgName,
195
- stampOrgCloud
196
- } from "./chunk-ZFELQG4B.js";
197
+ stampOrgCloud,
198
+ vaultFor
199
+ } from "./chunk-EV3TBM7E.js";
197
200
  import {
198
201
  decryptValueWith,
199
202
  encryptValueWith,
200
203
  resolveCliInvocation,
201
204
  whichCommand
202
- } from "./chunk-NURPXHLB.js";
205
+ } from "./chunk-OZBSOSAS.js";
203
206
 
204
207
  // ../server/src/create-server.ts
205
208
  import express from "express";
@@ -520,6 +523,7 @@ var changelogRouter = router({
520
523
 
521
524
  // ../server/src/trpc/routers/project.ts
522
525
  import { z as z4 } from "zod";
526
+ import { dirname as dirname2, isAbsolute } from "path";
523
527
  import { TRPCError as TRPCError2 } from "@trpc/server";
524
528
 
525
529
  // ../server/src/services/current-project.ts
@@ -887,19 +891,22 @@ var projectRouter = router({
887
891
  name: z4.string().min(1).max(200),
888
892
  description: z4.string().max(1e4).optional(),
889
893
  orgId: z4.string().max(128).nullable().optional(),
890
- serviceIds: z4.array(z4.string().max(128)).max(1e4).optional()
894
+ serviceIds: z4.array(z4.string().max(128)).max(1e4).optional(),
895
+ /** Le dossier d'un projet local. Omis : le dossier de lancement. */
896
+ localPath: z4.string().min(1).max(4096).refine(isAbsolute, "Chemin absolu attendu").optional()
891
897
  })
892
898
  ).mutation(async ({ input }) => {
899
+ const { localPath, ...fields } = input;
893
900
  let project;
894
901
  try {
895
902
  project = await projectStore.create({
896
- ...input,
897
- description: input.description ?? "",
898
- serviceIds: input.serviceIds ?? [],
903
+ ...fields,
904
+ description: fields.description ?? "",
905
+ serviceIds: fields.serviceIds ?? [],
899
906
  environmentIds: []
900
- });
907
+ }, fields.orgId ? void 0 : localPath);
901
908
  } catch (err) {
902
- if (err instanceof LocalProjectExistsError) {
909
+ if (err instanceof LocalProjectRefusedError) {
903
910
  throw new TRPCError2({ code: "CONFLICT", message: err.code, cause: err });
904
911
  }
905
912
  throw new TRPCError2({ code: "CONFLICT", message: err.message });
@@ -1125,8 +1132,16 @@ var projectRouter = router({
1125
1132
  dangling: graph.dangling.filter((d) => allowed.has(d.from))
1126
1133
  };
1127
1134
  }),
1135
+ /**
1136
+ * Le dossier de chaque projet sur cette machine, par clé `org:projet`
1137
+ * (`local:<id>` pour un projet local, dont le dossier contient son `.runeya`).
1138
+ */
1128
1139
  localPaths: protectedProcedure.query(async () => {
1129
- return projectPathStore.all();
1140
+ const paths = await projectPathStore.all();
1141
+ for (const project of await projectStore.list()) {
1142
+ if (!project.orgId) paths[`local:${project.id}`] = dirname2(vaultFor(project).root);
1143
+ }
1144
+ return paths;
1130
1145
  }),
1131
1146
  getLocalPath: protectedProcedure.input(z4.object({
1132
1147
  id: z4.string().min(1).max(128),
@@ -1141,6 +1156,19 @@ var projectRouter = router({
1141
1156
  * project was already placed in: two projects sharing a directory is what
1142
1157
  * makes services run against the wrong code.
1143
1158
  */
1159
+ /** Ajouter à la liste le projet local déjà présent dans un dossier. */
1160
+ importLocal: protectedProcedure.input(z4.object({ path: z4.string().min(1).max(4096).refine(isAbsolute, "Chemin absolu attendu") })).mutation(async ({ input }) => {
1161
+ try {
1162
+ const project = await projectStore.importLocal(input.path);
1163
+ await auditService.log({ userId: "local", action: "update", entityType: "project", entityId: project.id, metadata: { importedFrom: input.path } });
1164
+ return project;
1165
+ } catch (err) {
1166
+ if (err instanceof LocalProjectRefusedError) {
1167
+ throw new TRPCError2({ code: "CONFLICT", message: err.code, cause: err });
1168
+ }
1169
+ throw err;
1170
+ }
1171
+ }),
1144
1172
  setLocalPath: protectedProcedure.input(z4.object({
1145
1173
  id: z4.string().min(1).max(128),
1146
1174
  orgId: z4.string().max(128).nullable().optional(),
@@ -1884,10 +1912,12 @@ var setupRouter = router({
1884
1912
  keyHex: z8.string().length(64).regex(/^[0-9a-f]+$/i, "Invalid hex format")
1885
1913
  })).query(async ({ input }) => {
1886
1914
  const canary = await readVerifyFile(orgVaultRoot(input.orgId));
1887
- if (!canary) return { isCurrentKey: false, hasCanary: false };
1915
+ const locked = isVaultLocked(input.orgId);
1916
+ if (!canary) return { isCurrentKey: false, hasCanary: false, locked };
1888
1917
  return {
1889
1918
  isCurrentKey: matchesCanary(canary, Buffer.from(input.keyHex, "hex")),
1890
- hasCanary: true
1919
+ hasCanary: true,
1920
+ locked
1891
1921
  };
1892
1922
  }),
1893
1923
  /**
@@ -2451,7 +2481,12 @@ var settingsRouter = router({
2451
2481
  dataDir: env.DATA_DIR,
2452
2482
  // Where cloud projects live: their vaults belong to the machine, not to
2453
2483
  // whichever directory the server happened to be started in.
2454
- machineDir: machineRoot()
2484
+ machineDir: machineRoot(),
2485
+ // Un projet local peut-il naître ici ? Là où le coffre local se confond
2486
+ // avec la racine machine, non : ses fichiers se mêleraient à ceux de la
2487
+ // machine. Répondu ici pour que l'interface n'offre pas un emplacement que
2488
+ // la création refuserait — la règle reste écrite une seule fois.
2489
+ canCreateLocalProject: !localVaultCollidesWithMachineRoot()
2455
2490
  })),
2456
2491
  /**
2457
2492
  * Où le serveur écoute, et s'il est joignable depuis le réseau local.
@@ -3308,7 +3343,7 @@ var editorRouter = router({
3308
3343
  import { z as z13 } from "zod";
3309
3344
  import { TRPCError as TRPCError9 } from "@trpc/server";
3310
3345
  import { mkdir as mkdir3, writeFile as writeFile3 } from "fs/promises";
3311
- import { join as join5, dirname as dirname2 } from "path";
3346
+ import { join as join5, dirname as dirname3 } from "path";
3312
3347
  var ALLOWED_SKILL_PATHS = /* @__PURE__ */ new Set([
3313
3348
  ".claude/skills/runeya/SKILL.md",
3314
3349
  ".cursor/rules/runeya.mdc",
@@ -3356,7 +3391,7 @@ var apiKeysRouter = router({
3356
3391
  throw new TRPCError9({ code: "BAD_REQUEST", message: "Chemin non autoris\xE9" });
3357
3392
  }
3358
3393
  const abs = join5(await resolveWorkspaceCwd({}), input.relativePath);
3359
- await mkdir3(dirname2(abs), { recursive: true });
3394
+ await mkdir3(dirname3(abs), { recursive: true });
3360
3395
  await writeFile3(abs, input.content, { encoding: "utf-8", mode: 420 });
3361
3396
  return { path: input.relativePath };
3362
3397
  })
@@ -6016,6 +6051,11 @@ function safeLocalName(id, name) {
6016
6051
  const ext = /\.([A-Za-z0-9]{1,12})$/.exec(name)?.[1];
6017
6052
  return ext ? `${base}.${ext.toLowerCase()}` : base;
6018
6053
  }
6054
+ async function attachmentScope(input) {
6055
+ if (input.orgId) return accountForOrgScope(input.orgId);
6056
+ if (input.boardId) return kanbanStore.accountForBoard(input.boardId);
6057
+ return soleAccountScope();
6058
+ }
6019
6059
  var kanbanRouter = router({
6020
6060
  /**
6021
6061
  * The organization's boards, without their cards — a board carries its whole
@@ -6190,6 +6230,28 @@ var kanbanRouter = router({
6190
6230
  }
6191
6231
  return { ok: true };
6192
6232
  }),
6233
+ /**
6234
+ * Les références : la même carte posée sur un autre tableau, sans copie.
6235
+ * `boardId` est le tableau où on la pose (ou d'où on la retire) ; la carte
6236
+ * reste sur son tableau d'origine.
6237
+ */
6238
+ getCardPlacements: protectedProcedure.input(z19.object({ boardId: z19.string().max(128), cardId: z19.string().max(128) })).query(async ({ input }) => ({ placements: await kanbanStore.cardPlacements(input.boardId, input.cardId) })),
6239
+ placeCard: protectedProcedure.input(z19.object({ boardId: z19.string().max(128), cardId: z19.string().max(128), column: z19.string().min(1).max(200) })).mutation(async ({ input }) => {
6240
+ const res = await kanbanStore.placeCard(input.boardId, input.cardId, input.column);
6241
+ if (!res.ok) {
6242
+ throw new TRPCError16({
6243
+ code: "BAD_REQUEST",
6244
+ message: res.reason ?? "The cloud refused the placement (unknown card or column, archived card, or already on this board)."
6245
+ });
6246
+ }
6247
+ return { ok: true };
6248
+ }),
6249
+ unplaceCard: protectedProcedure.input(z19.object({ boardId: z19.string().max(128), cardId: z19.string().max(128) })).mutation(async ({ input }) => {
6250
+ if (!await kanbanStore.unplaceCard(input.boardId, input.cardId)) {
6251
+ throw new TRPCError16({ code: "NOT_FOUND", message: "This card is not placed on this board." });
6252
+ }
6253
+ return { ok: true };
6254
+ }),
6193
6255
  moveCard: protectedProcedure.input(z19.object({
6194
6256
  boardId: z19.string().max(128),
6195
6257
  cardId: z19.string().max(128),
@@ -6285,10 +6347,14 @@ var kanbanRouter = router({
6285
6347
  downloadAttachment: protectedProcedure.input(z19.object({
6286
6348
  attachmentId: z19.string().max(128),
6287
6349
  // La pièce jointe appartient à une organisation : la nommer dit sous quel
6288
- // compte la demander. C'est le SEUL appel qui tolère de ne pas l'avoir —
6289
- // un agent n'a qu'un identifiant de fichier — et il échoue alors en le
6290
- // disant dès que ce poste a plusieurs comptes.
6291
- orgId: z19.string().max(128).optional()
6350
+ // compte la demander.
6351
+ orgId: z19.string().max(128).optional(),
6352
+ // À défaut, le tableau d'où vient la carte suffit : il désigne un compte
6353
+ // comme le fait n'importe quel autre appel du kanban. Sans lui, la route
6354
+ // retombait sur le compte unique du poste et refusait de servir dès qu'il
6355
+ // y en avait plusieurs — alors que l'agent, qui n'a qu'un identifiant de
6356
+ // fichier, n'avait aucun moyen de nommer l'organisation.
6357
+ boardId: z19.string().max(128).optional()
6292
6358
  })).mutation(async ({ input }) => {
6293
6359
  const id = input.attachmentId;
6294
6360
  if (!ATTACHMENT_ID_REGEX.test(id)) {
@@ -6296,7 +6362,7 @@ var kanbanRouter = router({
6296
6362
  }
6297
6363
  const res = await cloudFetch2(`/api/kanban/file/${id}`, {
6298
6364
  timeoutMs: 12e4,
6299
- accountId: input.orgId ? await accountForOrgScope(input.orgId) : await soleAccountScope()
6365
+ accountId: await attachmentScope(input)
6300
6366
  });
6301
6367
  if (res.status === 404) {
6302
6368
  throw new TRPCError16({ code: "NOT_FOUND", message: `Attachment ${id} not found` });
@@ -6487,7 +6553,7 @@ var utilityRouter = router({
6487
6553
  import { z as z22 } from "zod";
6488
6554
  import { TRPCError as TRPCError18 } from "@trpc/server";
6489
6555
  import { readFile as readFile3, readdir as readdir2, stat as stat4, realpath, writeFile as writeFile5, mkdir as mkdir6, rename, rm as rm2 } from "fs/promises";
6490
- import { resolve as resolvePath, join as join8, relative, sep, dirname as dirname3 } from "path";
6556
+ import { resolve as resolvePath, join as join8, relative, sep, dirname as dirname4 } from "path";
6491
6557
  var SCOPE_SCHEMA = z22.union([
6492
6558
  z22.literal("global"),
6493
6559
  z22.string().regex(/^service:[A-Za-z0-9_-]{1,128}$/, "Invalid service scope")
@@ -6525,7 +6591,7 @@ async function resolveScope(scope) {
6525
6591
  }
6526
6592
  const dataDirAbs = resolvePath(env.DATA_DIR);
6527
6593
  await mkdir6(dataDirAbs, { recursive: true });
6528
- const base = dirname3(await realpath(dataDirAbs));
6594
+ const base = dirname4(await realpath(dataDirAbs));
6529
6595
  const target = resolvePath(base, sub);
6530
6596
  if (target !== base && !(target + sep).startsWith(base + sep)) {
6531
6597
  throw new TRPCError18({ code: "FORBIDDEN", message: "Hors du dossier de donn\xE9es du serveur" });
@@ -6591,7 +6657,7 @@ async function resolveSafeLocal(root, relPath, requireExist) {
6591
6657
  }
6592
6658
  return real;
6593
6659
  }
6594
- const parent = dirname3(target);
6660
+ const parent = dirname4(target);
6595
6661
  let realParent;
6596
6662
  try {
6597
6663
  realParent = await realpath(parent);
@@ -6637,7 +6703,7 @@ var wikiRouter = router({
6637
6703
  return agentManager.agentMutation(target.agentId, "wiki.writeMarkdown", { cwd: target.cwd, path: input.path, content: input.content });
6638
6704
  }
6639
6705
  const file = await resolveSafeLocal(target.root, input.path, false);
6640
- await mkdir6(dirname3(file), { recursive: true });
6706
+ await mkdir6(dirname4(file), { recursive: true });
6641
6707
  await writeFile5(file, input.content, "utf-8");
6642
6708
  return { path: input.path, ok: true };
6643
6709
  }),
@@ -6656,7 +6722,7 @@ var wikiRouter = router({
6656
6722
  } catch (err) {
6657
6723
  if (err instanceof TRPCError18) throw err;
6658
6724
  }
6659
- await mkdir6(dirname3(file), { recursive: true });
6725
+ await mkdir6(dirname4(file), { recursive: true });
6660
6726
  await writeFile5(file, "", "utf-8");
6661
6727
  return { path: input.path, ok: true };
6662
6728
  }),
@@ -6682,7 +6748,7 @@ var wikiRouter = router({
6682
6748
  } catch (err) {
6683
6749
  if (err instanceof TRPCError18) throw err;
6684
6750
  }
6685
- await mkdir6(dirname3(to), { recursive: true });
6751
+ await mkdir6(dirname4(to), { recursive: true });
6686
6752
  await rename(from, to);
6687
6753
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6688
6754
  }),
@@ -6749,10 +6815,10 @@ async function orgsToSync() {
6749
6815
  for (const vault of await listCloudVaults()) {
6750
6816
  if (targets.has(vault.orgId)) continue;
6751
6817
  const stamped = stamps[vault.orgId]?.replace(/\/+$/, "");
6752
- if (stamped ? !known.has(stamped) : fallback === null) continue;
6753
- const cloudUrl = stamped ?? fallback;
6754
- if (!cloudUrl) continue;
6755
6818
  const accountId = stampedAccounts[vault.orgId] ?? (accounts.length === 1 ? accounts[0].id : void 0);
6819
+ const accountCloud = accountId ? accounts.find((a) => a.id === accountId)?.cloudUrl.replace(/\/+$/, "") : void 0;
6820
+ const cloudUrl = stamped ?? accountCloud ?? fallback;
6821
+ if (!cloudUrl || !known.has(cloudUrl)) continue;
6756
6822
  if (await isMaterialized(vault.root)) {
6757
6823
  targets.set(vault.orgId, { orgId: vault.orgId, cloudUrl, ...accountId ? { accountId } : {} });
6758
6824
  }
@@ -6814,7 +6880,7 @@ import * as Y2 from "yjs";
6814
6880
  // ../server/src/services/sync-doc-cache.ts
6815
6881
  import { readFileSync, renameSync, rmSync, writeFileSync, mkdirSync } from "fs";
6816
6882
  import { readFile as readFile4 } from "fs/promises";
6817
- import { dirname as dirname4, join as join10 } from "path";
6883
+ import { dirname as dirname5, join as join10 } from "path";
6818
6884
  import { randomUUID as randomUUID6 } from "crypto";
6819
6885
  import * as Y from "yjs";
6820
6886
  var FILE = "sync-doc.bin";
@@ -6846,7 +6912,7 @@ function writeSyncDocSync(orgId, state) {
6846
6912
  existing = new Uint8Array(readFileSync(path));
6847
6913
  } catch {
6848
6914
  }
6849
- mkdirSync(dirname4(path), { recursive: true });
6915
+ mkdirSync(dirname5(path), { recursive: true });
6850
6916
  const tmp = `${path}.${process.pid}.${randomUUID6()}.tmp`;
6851
6917
  try {
6852
6918
  writeFileSync(tmp, mergeWith(existing, state), { mode: 384 });
@@ -7897,10 +7963,27 @@ async function jsonFilesIn(root) {
7897
7963
  async function exists(path) {
7898
7964
  return stat5(path).then(() => true, () => false);
7899
7965
  }
7966
+ async function adoptIntoLockedVault(orgId, newKey, masterPassword) {
7967
+ const canary = await readVerifyFile(orgVaultRoot(orgId));
7968
+ if (canary && !matchesCanary(canary, newKey)) {
7969
+ throw new Error("ORG_KEY_DOES_NOT_OPEN_VAULT");
7970
+ }
7971
+ await readEncryptedKey(await keyRoot(), masterPassword);
7972
+ await installOrgKey(orgId, newKey, masterPassword);
7973
+ clearVaultLock(orgId);
7974
+ environmentStore.resetCache();
7975
+ serviceStore.resetCache();
7976
+ conversationStore.resetCache();
7977
+ apiKeyStore.resetCache();
7978
+ return { converted: [], backups: [] };
7979
+ }
7900
7980
  async function adoptOrgKey(orgId, newKey, masterPassword, now) {
7901
7981
  const currentKey = getEncryptionKey(orgId);
7902
7982
  if (!currentKey) {
7903
- throw new Error("La cl\xE9 actuelle de cette organisation n'est pas charg\xE9e.");
7983
+ if (!isVaultLocked(orgId)) {
7984
+ throw new Error("La cl\xE9 actuelle de cette organisation n'est pas charg\xE9e.");
7985
+ }
7986
+ return adoptIntoLockedVault(orgId, newKey, masterPassword);
7904
7987
  }
7905
7988
  if (newKey.equals(currentKey)) {
7906
7989
  throw new Error("ORG_KEY_ALREADY_CURRENT");
@@ -7953,6 +8036,17 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
7953
8036
  apiKeyStore.resetCache();
7954
8037
  return { converted: pending.map(({ path, values }) => ({ file: path, values })), backups };
7955
8038
  }
8039
+ async function resetOrgKeyToFresh(orgId, masterPassword, now) {
8040
+ const freshKey = randomBytes2(32);
8041
+ if (isVaultLocked(orgId) || !getEncryptionKey(orgId)) {
8042
+ await readEncryptedKey(await keyRoot(), masterPassword);
8043
+ await installOrgKey(orgId, freshKey, masterPassword);
8044
+ clearVaultLock(orgId);
8045
+ return { converted: [], backups: [], keyHex: freshKey.toString("hex") };
8046
+ }
8047
+ const report = await adoptOrgKey(orgId, freshKey, masterPassword, now);
8048
+ return { ...report, keyHex: freshKey.toString("hex") };
8049
+ }
7956
8050
 
7957
8051
  // ../server/src/trpc/routers/cloud-sync.ts
7958
8052
  async function cloudMessage(res) {
@@ -8150,9 +8244,10 @@ var cloudSyncRouter = router({
8150
8244
  /**
8151
8245
  * Faire adopter à cette machine la clé d'une organisation.
8152
8246
  *
8153
- * Le pendant de `resetOrgKey` : là où celle-ci fait plier l'organisation à la
8154
- * clé d'ici, celle-là fait plier cette machine à la sienne — et c'est la
8155
- * seule des deux qui rend lisible ce qui avait déjà été chiffré sous elle.
8247
+ * Le pendant de `resetOrgKey` : là où celle-ci repart sous une clé neuve, en
8248
+ * abandonnant ce qui avait été chiffré sous l'ancienne, celle-là fait plier
8249
+ * cette machine à la clé existante — et c'est la seule des deux qui rend
8250
+ * lisible ce qui avait déjà été chiffré sous elle.
8156
8251
  *
8157
8252
  * Bornée au coffre de l'organisation et à ceux de ses projets : les autres
8158
8253
  * organisations et la machine gardent leur clé.
@@ -8181,15 +8276,25 @@ var cloudSyncRouter = router({
8181
8276
  * d'un ancien coffre — laisse l'organisation insynchronisable pour toujours.
8182
8277
  * Cette route est la sortie de secours, réservée au propriétaire côté cloud.
8183
8278
  *
8184
- * Elle ne re-chiffre rien : ce qui a déjà été synchronisé sous l'ancienne clé
8185
- * reste illisible. L'interface le dit avant de la déclencher.
8279
+ * L'organisation repart sous une clé TIRÉE POUR ELLE, et non sous celle de
8280
+ * cette machine : cette dernière vaut pour toutes les organisations d'ici qui
8281
+ * n'ont pas adopté la leur, et il faut ensuite transmettre la clé publiée aux
8282
+ * autres membres. Le coffre local est re-chiffré au passage, ce qui exige le
8283
+ * master password — comme l'adoption, dont c'est le même geste à l'envers.
8284
+ *
8285
+ * Ce qui a déjà été synchronisé sous l'ancienne clé de référence reste
8286
+ * illisible : aucune clé d'ici ne l'ouvre. L'interface le dit avant.
8186
8287
  */
8187
- resetOrgKey: protectedProcedure.input(z23.object({ orgId: z23.string().min(1).max(128) })).mutation(async ({ input }) => {
8188
- const canary = await readVerifyFile(orgVaultRoot(input.orgId)) ?? await readVerifyFile(await keyRoot());
8288
+ resetOrgKey: protectedProcedure.input(z23.object({
8289
+ orgId: z23.string().min(1).max(128),
8290
+ masterPassword: z23.string().min(1).max(1024)
8291
+ })).mutation(async ({ input }) => {
8292
+ const { keyHex } = await resetOrgKeyToFresh(input.orgId, input.masterPassword, /* @__PURE__ */ new Date());
8293
+ const canary = await readVerifyFile(orgVaultRoot(input.orgId));
8189
8294
  if (!canary) {
8190
8295
  throw new TRPCError19({
8191
8296
  code: "PRECONDITION_FAILED",
8192
- message: "Cette machine n'a pas encore de cl\xE9 de chiffrement."
8297
+ message: "Le coffre de cette organisation n'a pas re\xE7u sa cl\xE9."
8193
8298
  });
8194
8299
  }
8195
8300
  const res = await cloudFetch2("/api/auth/organization/canary/reset", {
@@ -8206,7 +8311,7 @@ var cloudSyncRouter = router({
8206
8311
  }
8207
8312
  const cloudUrl = (await orgsToSync()).find((l) => l.orgId === input.orgId)?.cloudUrl ?? getCloudApiUrl();
8208
8313
  await cloudSyncBridge.connect({ orgId: input.orgId, cloudUrl, ...await accountScope(input.orgId) });
8209
- return { state: syncState(input.orgId) };
8314
+ return { state: syncState(input.orgId), keyHex };
8210
8315
  }),
8211
8316
  /**
8212
8317
  * Stop materializing one project of an org on this machine.
@@ -8302,12 +8407,22 @@ var cloudSyncRouter = router({
8302
8407
  candidates.set(orgId, [...candidates.get(orgId) ?? [], accountId]);
8303
8408
  }
8304
8409
  const current2 = await readOrgAccounts();
8410
+ const stamped = await readOrgClouds();
8411
+ const cloudOf = new Map(
8412
+ (await cloudSessionStore.list()).map((a) => [a.id, a.cloudUrl.replace(/\/+$/, "")])
8413
+ );
8305
8414
  let remembered = 0;
8306
8415
  for (const [orgId, accountIds] of candidates) {
8307
8416
  const kept = current2[orgId];
8308
- if (kept && accountIds.includes(kept)) continue;
8309
- await rememberOrgAccount(orgId, accountIds[0]);
8310
- remembered++;
8417
+ const owner = kept && accountIds.includes(kept) ? kept : accountIds[0];
8418
+ if (owner !== kept) {
8419
+ await rememberOrgAccount(orgId, owner);
8420
+ remembered++;
8421
+ }
8422
+ if (!stamped[orgId]) {
8423
+ const cloudUrl = cloudOf.get(owner);
8424
+ if (cloudUrl) await backfillOrgCloud(orgId, cloudUrl);
8425
+ }
8311
8426
  }
8312
8427
  return { remembered };
8313
8428
  }),
@@ -8402,14 +8517,14 @@ var cloudSyncRouter = router({
8402
8517
  // ../server/src/trpc/routers/filesystem.ts
8403
8518
  import { readdir as readdir4, stat as stat6 } from "fs/promises";
8404
8519
  import { homedir as homedir3 } from "os";
8405
- import { isAbsolute, join as join12, resolve as resolve2, dirname as dirname5, basename } from "path";
8520
+ import { isAbsolute as isAbsolute2, join as join12, resolve as resolve2, dirname as dirname6, basename } from "path";
8406
8521
  import { z as z24 } from "zod";
8407
8522
  var MAX_ENTRIES2 = 500;
8408
8523
  var PATH_SCHEMA = z24.string().min(1).max(4096);
8409
8524
  function safeResolve(input) {
8410
8525
  if (input.includes("\0")) throw new Error("Chemin invalide");
8411
8526
  const expanded = input.startsWith("~") ? join12(homedir3(), input.slice(1)) : input;
8412
- if (!isAbsolute(expanded)) throw new Error("Le chemin doit \xEAtre absolu");
8527
+ if (!isAbsolute2(expanded)) throw new Error("Le chemin doit \xEAtre absolu");
8413
8528
  return resolve2(expanded);
8414
8529
  }
8415
8530
  var filesystemRouter = router({
@@ -8450,13 +8565,24 @@ var filesystemRouter = router({
8450
8565
  return {
8451
8566
  path: dir,
8452
8567
  // Null at the filesystem root, which is what stops "up" from looping.
8453
- parent: dirname5(dir) === dir ? null : dirname5(dir),
8568
+ parent: dirname6(dir) === dir ? null : dirname6(dir),
8454
8569
  name: basename(dir) || dir,
8455
8570
  entries: entries2,
8456
8571
  truncated,
8457
8572
  hasRuneyaProject: await holdsRuneyaProject(dir)
8458
8573
  };
8459
8574
  }),
8575
+ /**
8576
+ * Ce qu'un dossier permet pour un projet local : le créer, importer celui
8577
+ * qui s'y trouve, ou rien (déjà dans la liste, lié à un projet d'organisation,
8578
+ * racine machine).
8579
+ */
8580
+ checkLocalProjectTarget: protectedProcedure.input(z24.object({ path: PATH_SCHEMA })).query(async ({ input }) => {
8581
+ const dir = safeResolve(input.path);
8582
+ const info = await stat6(dir).catch(() => null);
8583
+ if (!info?.isDirectory()) return { path: dir, status: "missing", projectName: null };
8584
+ return { path: dir, ...await projectStore.inspectLocalDir(dir) };
8585
+ }),
8460
8586
  /**
8461
8587
  * Whether a directory can receive this project.
8462
8588
  *
@@ -8486,12 +8612,12 @@ var filesystemRouter = router({
8486
8612
 
8487
8613
  // ../server/src/trpc/routers/desktop.ts
8488
8614
  import { z as z25 } from "zod";
8489
- import { isAbsolute as isAbsolute3 } from "path";
8615
+ import { isAbsolute as isAbsolute4 } from "path";
8490
8616
  import { TRPCError as TRPCError20 } from "@trpc/server";
8491
8617
 
8492
8618
  // ../server/src/services/desktop-launcher.ts
8493
8619
  import { execFile as execFile4 } from "child_process";
8494
- import { isAbsolute as isAbsolute2 } from "path";
8620
+ import { isAbsolute as isAbsolute3 } from "path";
8495
8621
  import { promisify as promisify3 } from "util";
8496
8622
  var exec = promisify3(execFile4);
8497
8623
  var INSTALL_TIMEOUT_MS2 = 3e4;
@@ -8512,7 +8638,7 @@ function suggestLauncher() {
8512
8638
  }
8513
8639
  async function installLauncher(input) {
8514
8640
  if (!cli) throw new Error("launcher-unavailable");
8515
- if (input.workingDir !== null && !isAbsolute2(input.workingDir)) {
8641
+ if (input.workingDir !== null && !isAbsolute3(input.workingDir)) {
8516
8642
  throw new Error("launcher-working-dir-not-absolute");
8517
8643
  }
8518
8644
  const args = [
@@ -8584,7 +8710,7 @@ var desktopRouter = router({
8584
8710
  * absolu, refusé autrement : le dossier devient un argument positionnel
8585
8711
  * du CLI, où une valeur commençant par un tiret passerait pour un drapeau.
8586
8712
  */
8587
- workingDir: z25.string().max(4096).refine(isAbsolute3, {
8713
+ workingDir: z25.string().max(4096).refine(isAbsolute4, {
8588
8714
  message: "Le dossier de travail doit \xEAtre un chemin absolu."
8589
8715
  }).nullable(),
8590
8716
  port: z25.number().int().min(1).max(65535),
@@ -8857,7 +8983,7 @@ import {
8857
8983
  access as access2,
8858
8984
  readdir as readdir6
8859
8985
  } from "fs/promises";
8860
- import { join as join15, dirname as dirname6 } from "path";
8986
+ import { join as join15, dirname as dirname7 } from "path";
8861
8987
  var _require = createRequire(import.meta.url);
8862
8988
  var PARSER_ID_MAP = {
8863
8989
  "stack-monitor-parser-jsons": "native:json",
@@ -9466,7 +9592,7 @@ async function runOverrideOnlyMigration(dataDir) {
9466
9592
  const { resolve: resolve4 } = await import("path");
9467
9593
  const abDataDir = resolve4(dataDir);
9468
9594
  const candidateDirs = [
9469
- join15(dirname6(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9595
+ join15(dirname7(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9470
9596
  join15(abDataDir, "dbs", "overrides")
9471
9597
  ];
9472
9598
  let overridesDir = null;
@@ -10157,31 +10283,6 @@ async function createLocalServer() {
10157
10283
  );
10158
10284
  }
10159
10285
  await runOverrideOnlyMigration(env.DATA_DIR);
10160
- if (env.MODE === "local-simple") {
10161
- const projects = await projectStore.list();
10162
- if (projects.length === 0) {
10163
- const project = await projectStore.create({
10164
- name: "My Local Project",
10165
- description: "Auto-generated default project for local development"
10166
- });
10167
- const localEnv = await environmentStore.create({
10168
- projectId: project.id,
10169
- name: "Local",
10170
- description: "Default local environment (immutable)",
10171
- variables: {},
10172
- parentIds: [],
10173
- color: "#22c55e",
10174
- immutable: true
10175
- }, project.orgId);
10176
- await projectStore.update({
10177
- id: project.id,
10178
- orgId: project.orgId,
10179
- environmentIds: [localEnv.id],
10180
- activeEnvironmentId: localEnv.id
10181
- });
10182
- console.log("[server] Created default project with Local environment");
10183
- }
10184
- }
10185
10286
  await agentManager.init();
10186
10287
  agentSpawner.spawnLocalAgent().catch((err) => {
10187
10288
  console.warn("[server] Failed to spawn the local agent:", err);
@@ -10830,7 +10931,7 @@ async function createLocalServer() {
10830
10931
  ]);
10831
10932
  console.log("[server] Shutdown complete");
10832
10933
  };
10833
- const { initCompanion } = await import("./companion-Q67RAO3N.js");
10934
+ const { initCompanion } = await import("./companion-MGX62L4T.js");
10834
10935
  initCompanion();
10835
10936
  return { app, server, wss, shutdown };
10836
10937
  }
@@ -11220,7 +11321,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
11220
11321
  });
11221
11322
  }
11222
11323
  async function main() {
11223
- const { ensureNodeBinOnPath, ensureUserBinsOnPath } = await import("./node-4UUJN2WG.js");
11324
+ const { ensureNodeBinOnPath, ensureUserBinsOnPath } = await import("./node-RN4URNZ5.js");
11224
11325
  ensureNodeBinOnPath();
11225
11326
  await ensureUserBinsOnPath();
11226
11327
  console.log("Hello World 2");
@@ -11277,4 +11378,4 @@ export {
11277
11378
  startProcess,
11278
11379
  stopProcess
11279
11380
  };
11280
- //# sourceMappingURL=src-7O3GCEIB.js.map
11381
+ //# sourceMappingURL=src-KWLVQD36.js.map