@runeya/runeya 2.0.92 → 2.0.94

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 (247) hide show
  1. package/agent/index.js +205 -170
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-3KSS7BHP.js +7 -0
  4. package/{chunk-PDRWT47K.js → chunk-4PQXBTV6.js} +74 -30
  5. package/chunk-4PQXBTV6.js.map +1 -0
  6. package/index.js +2 -2
  7. package/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/{src-K5L5HTKP.js → src-GGPKDQGD.js} +1002 -936
  10. package/src-GGPKDQGD.js.map +1 -0
  11. package/web/assets/AgentScalarChatInterface.vue-CR0iWJNr.js +13 -0
  12. package/web/assets/AgentTerminalPage-DZj9UulV.js +1 -0
  13. package/web/assets/AiChatPage-D4h76hus.js +1 -0
  14. package/web/assets/AppLayout-DusPXiZn.js +1 -0
  15. package/web/assets/{AppLayout-DiMqQfDk.css → AppLayout-Sk3Qnkr-.css} +1 -1
  16. package/web/assets/AuditPage-BBEa6MYr.js +1 -0
  17. package/web/assets/CloudAccountPage-DKgXvPS1.js +1 -0
  18. package/web/assets/CloudAccountPage-DopITrxL.js +1 -0
  19. package/web/assets/CloudMessagingPage-BNIbysEO.js +2 -0
  20. package/web/assets/DashboardPage-CTGAGY7X.js +1 -0
  21. package/web/assets/DirectoryPickerDialog-BKI9vxkG.js +1 -0
  22. package/web/assets/{EditorIcon-c_3UtFYp.js → EditorIcon-CdvuLNAP.js} +2 -2
  23. package/web/assets/EnvironmentForm-BiWvLVax.js +108 -0
  24. package/web/assets/EnvironmentFormPage-RReX9Ijr.js +1 -0
  25. package/web/assets/EnvironmentListPage-BW5PlOxl.js +1 -0
  26. package/web/assets/KanbanBoardPage-BFYgHGl0.js +4 -0
  27. package/web/assets/KanbanListPage-BAcgRh8Z.js +1 -0
  28. package/web/assets/LaunchProjectPage-CpiyvCBv.js +1 -0
  29. package/web/assets/LaunchServicesPage-ChEXnYIi.js +1 -0
  30. package/web/assets/LogViewer-iTxXl8YQ.js +3 -0
  31. package/web/assets/OrgKeyPrompt-KRyXRMw7.js +1 -0
  32. package/web/assets/{ProcessControls-BXu0aujq.js → ProcessControls-DynA7Ock.js} +1 -1
  33. package/web/assets/ProcessDetailPage-BpgGTkXx.js +1 -0
  34. package/web/assets/{ProcessMetrics-D-40_Bx4.js → ProcessMetrics-_FGC-0hm.js} +2 -2
  35. package/web/assets/ProjectDetailPage-B49_-83N.js +1 -0
  36. package/web/assets/ProjectListPage-CFoEPT2F.js +1 -0
  37. package/web/assets/RandomJobTestPage-CALSR3WS.js +2 -0
  38. package/web/assets/ScenarioEditorPage-DxyzCjhy.js +14 -0
  39. package/web/assets/SendToChatDialog-CeFdMciG.js +1 -0
  40. package/web/assets/ServiceControlsBar-CI1_piqu.js +1 -0
  41. package/web/assets/ServiceDetailPage-CVT68kTt.js +2 -0
  42. package/web/assets/ServiceFormPage-nLRxtrOu.js +1 -0
  43. package/web/assets/{SettingsPage-BKcxRTQg.css → SettingsPage-CX1EAjNK.css} +1 -1
  44. package/web/assets/SettingsPage-DDYegVxd.js +2063 -0
  45. package/web/assets/UnlockPage-D9_ZbMR_.js +1 -0
  46. package/web/assets/VariablesTable-ClL6KuSo.js +1 -0
  47. package/web/assets/VaultMigrationPage-rc5OA9Xt.js +1 -0
  48. package/web/assets/VersionBadge-K5UQnfc6.js +1 -0
  49. package/web/assets/WikiPage-VeQCqO9Z.js +1 -0
  50. package/web/assets/WikiView-XCwSa_R7.js +1 -0
  51. package/web/assets/add-scalar-classes-CvhyJKCs.js +387 -0
  52. package/web/assets/auth-errors-Cmx-4mn3.js +1 -0
  53. package/web/assets/{autocomplete-CdduMsds.js → autocomplete-tNXsUW-e.js} +3 -3
  54. package/web/assets/{basic-shape-diamond.svg-J1CPrYKJ.js → basic-shape-diamond.svg-BgNul67K.js} +1 -1
  55. package/web/assets/{basic-shape-hexagon.svg-D9pZpKRd.js → basic-shape-hexagon.svg-CILNnZwG.js} +1 -1
  56. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-GoFZOez-.js → basic-shape-primary-circle-ellipse-round.svg-OXklrBAn.js} +1 -1
  57. package/web/assets/{basic-shape-primary-square-rectangle.svg-5sAWcFH7.js → basic-shape-primary-square-rectangle.svg-DYF4zyUj.js} +1 -1
  58. package/web/assets/{basic-shape-shield.svg-BBhZF-nU.js → basic-shape-shield.svg-CQbzQswT.js} +1 -1
  59. package/web/assets/{browser-CGF8J-d2.js → browser-CDtVZzm0.js} +1 -1
  60. package/web/assets/{browser-D9PR5ryM.js → browser-CdTGBSDI.js} +1 -1
  61. package/web/assets/{card-wcB3LVu3.js → card-BfEdnBhU.js} +2 -2
  62. package/web/assets/{checkbox-BGl4zewJ.js → checkbox-CTopTVtp.js} +3 -3
  63. package/web/assets/{chip-BeU7R8v5.js → chip-Cw38kJ50.js} +2 -2
  64. package/web/assets/{client-mw7vk2NS.js → client-Bjn9AL4v.js} +2 -2
  65. package/web/assets/cloud-chat.store-BPoTzBeD.js +1 -0
  66. package/web/assets/cloud-session-D0ue5Z97.js +1 -0
  67. package/web/assets/column-BtLe8qbf.js +907 -0
  68. package/web/assets/{computer-device-desktop-monitor.svg-DvELTXaq.js → computer-device-desktop-monitor.svg-ByBKx1CQ.js} +1 -1
  69. package/web/assets/{computer-device-desktop.svg-Cy5MNLjy.js → computer-device-desktop.svg-BPvzT4sF.js} +1 -1
  70. package/web/assets/{computer-device-laptop.svg-CeTHd2Gz.js → computer-device-laptop.svg-saGCSB2c.js} +1 -1
  71. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-U357QLLy.js → computer-device-mobile-phone-android-samsung-back.svg-Bo-eisU4.js} +1 -1
  72. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BxWQ3WQu.js → computer-device-mobile-phone-android-samsung.svg-Bavaieis.js} +1 -1
  73. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-JTaGwsMH.js → computer-device-mobile-phone-iphone-x-back.svg-BQK9BRXi.js} +1 -1
  74. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CG2NhvNR.js → computer-device-mobile-phone-iphone-x.svg-C24hCDuI.js} +1 -1
  75. package/web/assets/{computer-device-mobile-tablet-touch.svg-0RIIeEQE.js → computer-device-mobile-tablet-touch.svg-CUHV3zSo.js} +1 -1
  76. package/web/assets/{computer-device-mobile-tablet.svg-BpEHWNNy.js → computer-device-mobile-tablet.svg-C8SRYMmI.js} +1 -1
  77. package/web/assets/{computer-device-network-ethernet-cat6.svg-ekymSTiB.js → computer-device-network-ethernet-cat6.svg-Ds4kUid3.js} +1 -1
  78. package/web/assets/{computer-device-network-lan-www.svg-DQ7DjA-N.js → computer-device-network-lan-www.svg-BwIieS6h.js} +1 -1
  79. package/web/assets/{computer-device-network-wifi-connection.svg-Chlu-E0n.js → computer-device-network-wifi-connection.svg-Q7Mxb3eP.js} +1 -1
  80. package/web/assets/{computer-device-network-wifi-router.svg-sXuKxg3H.js → computer-device-network-wifi-router.svg-B0PMuY1x.js} +1 -1
  81. package/web/assets/{cssMode-CmAJhlK2.js → cssMode-8lAGHoa8.js} +1 -1
  82. package/web/assets/{divider-CIEeFsQF.js → divider-DRKb8XBY.js} +2 -2
  83. package/web/assets/{docx-preview-BzWsyqjd.js → docx-preview-K0JOmyAw.js} +1 -1
  84. package/web/assets/{ecology-science-erlenmeyer-flask.svg-DBWUyVvG.js → ecology-science-erlenmeyer-flask.svg-D5wbPwU2.js} +1 -1
  85. package/web/assets/{fieldset-DbVZGmxF.js → fieldset-jU8x6yyO.js} +2 -2
  86. package/web/assets/{freemarker2-CpZwjOiK.js → freemarker2-BmTZDOK9.js} +1 -1
  87. package/web/assets/{handlebars-BF01Ro6D.js → handlebars-DM-mBhq3.js} +1 -1
  88. package/web/assets/{html-y42MG6La.js → html-BohxI4Ke.js} +1 -1
  89. package/web/assets/{htmlMode-BiFUKM7B.js → htmlMode-vqRVK3v5.js} +1 -1
  90. package/web/assets/{image-flash-lightning.svg-D8MQjxej.js → image-flash-lightning.svg-s-LoyOp-.js} +1 -1
  91. package/web/assets/{image-picture-flower.svg-DhtjWeFt.js → image-picture-flower.svg-CofKZT5Q.js} +1 -1
  92. package/web/assets/{index-K4MHcRkt.js → index-DHr5P6pq.js} +293 -293
  93. package/web/assets/index-Da38OOd8.css +1 -0
  94. package/web/assets/{interface-alert-exclamation-diamond.svg-BnuBbqzl.js → interface-alert-exclamation-diamond.svg-C4C4i4oQ.js} +1 -1
  95. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-CLIWOLdf.js → interface-alert-exclamation-triangle-warning.svg-C-ogsTXk.js} +1 -1
  96. package/web/assets/{interface-alert-information-circle.svg--CM4LBgr.js → interface-alert-information-circle.svg-BFpBDkj5.js} +1 -1
  97. package/web/assets/{interface-award-crown.svg-CwUcjE17.js → interface-award-crown.svg-DfHdQ8rJ.js} +1 -1
  98. package/web/assets/{interface-bookmark.svg-C-WYwhpR.js → interface-bookmark-tag.svg-DkfXcRMe.js} +1 -1
  99. package/web/assets/{interface-bookmark-tag.svg-BYkbHYcm.js → interface-bookmark.svg-qCQ3v5rM.js} +1 -1
  100. package/web/assets/{interface-calendar-date-one.svg-BEV_BtWR.js → interface-calendar-date-one.svg-D2ssTK7X.js} +1 -1
  101. package/web/assets/{interface-content-book-open-pages.svg-DklVPzGE.js → interface-content-book-open-pages.svg-CH1BmaVm.js} +1 -1
  102. package/web/assets/{interface-content-book-page.svg-DtEixblx.js → interface-content-book-page.svg-BU6m1d9-.js} +1 -1
  103. package/web/assets/{interface-content-file.svg-CbdR0tUT.js → interface-content-file.svg-DbsUtWTI.js} +1 -1
  104. package/web/assets/{interface-content-folder.svg-Bb6W8S8_.js → interface-content-folder.svg-8IvlkKzB.js} +1 -1
  105. package/web/assets/interface-content-folder.svg-nRYFY3NY.js +1 -0
  106. package/web/assets/{interface-copy-clipboard.svg-cy8mE1ku.js → interface-copy-clipboard.svg-D8ev9OtX.js} +1 -1
  107. package/web/assets/{interface-edit-attachment.svg-ujlWFwop.js → interface-edit-attachment.svg-dl-nfI3P.js} +1 -1
  108. package/web/assets/{interface-edit-binocular.svg-DdndLqEe.js → interface-edit-binocular.svg-Box_OuXH.js} +1 -1
  109. package/web/assets/{interface-edit-magic-wand.svg-D3PbWjw6.js → interface-edit-magic-wand.svg-DIhMw--x.js} +1 -1
  110. package/web/assets/{interface-edit-tool-paint-roller.svg-DEJvhvns.js → interface-edit-tool-paint-roller.svg-COUefijc.js} +1 -1
  111. package/web/assets/{interface-edit-tool-pencil.svg-CSwy7Tpt.js → interface-edit-tool-pencil.svg-BNmSspcl.js} +1 -1
  112. package/web/assets/{interface-favorite-award.svg-Ct3aGvri.js → interface-favorite-award.svg-Cy-XeB8N.js} +1 -1
  113. package/web/assets/{interface-favorite-flag.svg-Dt2tGcDG.js → interface-favorite-flag.svg-BVBisei8.js} +1 -1
  114. package/web/assets/{interface-favorite-heart.svg-BCAdec7C.js → interface-favorite-heart.svg-BkVO2jBo.js} +1 -1
  115. package/web/assets/{interface-favorite-star.svg-Dcen2Unz.js → interface-favorite-star.svg-Bxe8dqRi.js} +1 -1
  116. package/web/assets/{interface-favorite-stars-sparkles.svg-BptG3dBN.js → interface-favorite-stars-sparkles.svg-MkrYfhIz.js} +1 -1
  117. package/web/assets/{interface-hierarchy-flowchart.svg-CG8rKwV2.js → interface-hierarchy-flowchart.svg-De7TQhr3.js} +1 -1
  118. package/web/assets/{interface-home-house.svg-EjYsHgjY.js → interface-home-house.svg-D_qOil1N.js} +1 -1
  119. package/web/assets/{interface-hyperlink.svg-R0Inwsnr.js → interface-hyperlink.svg-5S7ugTcP.js} +1 -1
  120. package/web/assets/{interface-lighting-brightness.svg-82wRZ7U5.js → interface-lighting-brightness.svg-vJA95mbx.js} +1 -1
  121. package/web/assets/{interface-lock-closed.svg-CKCtxTSF.js → interface-lock-closed.svg-DVL32yBG.js} +1 -1
  122. package/web/assets/{interface-lock-open-unlock.svg-25bZt-jb.js → interface-lock-open-unlock.svg-C7DBYFPn.js} +1 -1
  123. package/web/assets/{interface-login-key.svg-C1nVpqWu.js → interface-login-key.svg-CEq51fI1.js} +1 -1
  124. package/web/assets/{interface-search.svg-Db9i4fOU.js → interface-search.svg-CkP-JMXm.js} +1 -1
  125. package/web/assets/{interface-setting-cog.svg-C2juGx3i.js → interface-setting-cog.svg-CgR9wxJN.js} +1 -1
  126. package/web/assets/{interface-share-megaphone-bullhorn.svg-DWKTYrRq.js → interface-share-megaphone-bullhorn.svg-C_VIGsI0.js} +1 -1
  127. package/web/assets/{interface-share-rocket.svg-D9L6uhiQ.js → interface-share-rocket.svg-aseIyfXq.js} +1 -1
  128. package/web/assets/{interface-share-satellite.svg-Dt-PZyoP.js → interface-share-satellite.svg-CzkX6PJ2.js} +1 -1
  129. package/web/assets/{interface-share-space-ship.svg-DbJpVjTn.js → interface-share-space-ship.svg-Df1jdZi5.js} +1 -1
  130. package/web/assets/{interface-share.svg-9Bxtnx5d.js → interface-share.svg-CioS2p8V.js} +1 -1
  131. package/web/assets/{interface-signal-square.svg-CYGdCItu.js → interface-signal-square.svg-VUtTXd8G.js} +1 -1
  132. package/web/assets/{interface-time-clock-circle.svg-0lffJ7tQ.js → interface-time-clock-circle.svg-DWh2OWyC.js} +1 -1
  133. package/web/assets/{interface-time-hour-glass.svg-BtZTqD1b.js → interface-time-hour-glass.svg-BCqCfi9r.js} +1 -1
  134. package/web/assets/{interface-users-multiple.svg-B7F73V4j.js → interface-users-multiple.svg-Edac3LOs.js} +1 -1
  135. package/web/assets/{interface-weather-moon.svg-Co0IUTf8.js → interface-weather-moon.svg-BrK0lmKX.js} +1 -1
  136. package/web/assets/{javascript-iLWmo9Qr.js → javascript-ByDc_p54.js} +1 -1
  137. package/web/assets/{jsonMode-D3SRxnAF.js → jsonMode-Cm2EOOd4.js} +1 -1
  138. package/web/assets/{liquid-D5C_hJy7.js → liquid-z9Tc1tTM.js} +1 -1
  139. package/web/assets/{lspLanguageFeatures-DeXbFx7Z.js → lspLanguageFeatures-D6O0oAJj.js} +1 -1
  140. package/web/assets/{mail-chat-bubble-square.svg-Cnn1sRtD.js → mail-chat-bubble-square.svg-obHuGV3I.js} +1 -1
  141. package/web/assets/{mail-send-email-paper-airplane.svg-CqK1oWPg.js → mail-send-email-paper-airplane.svg-I-JVbCkD.js} +1 -1
  142. package/web/assets/{mail-send-envelope.svg-DIvASWH1.js → mail-send-envelope.svg-CcYcXCe5.js} +1 -1
  143. package/web/assets/{mdx-wnkKJwKX.js → mdx-B8bePw34.js} +1 -1
  144. package/web/assets/{minus-BGc58rrM.js → minus-k3R4JOtO.js} +2 -2
  145. package/web/assets/modal-CVWJd9ZI.js +5 -0
  146. package/web/assets/modal-Ccn3uciU.js +1 -0
  147. package/web/assets/{money-cashier-receipt.svg-CzJyKfSy.js → money-cashier-receipt.svg-BIKxMBIH.js} +1 -1
  148. package/web/assets/{money-currency-dollar-pay.svg-CwjHgCC1.js → money-currency-dollar-pay.svg-B-HfkTCE.js} +1 -1
  149. package/web/assets/{money-graph-arrow-increase.svg-C2VxjTpX.js → money-graph-arrow-increase.svg-CnXoTtSD.js} +1 -1
  150. package/web/assets/{money-graph-bar-chart-increase.svg-CI6bcxy-.js → money-graph-bar-chart-increase.svg-Dt7ly9Tz.js} +1 -1
  151. package/web/assets/multiselect-BsCXwmy0.js +251 -0
  152. package/web/assets/{nature-ecology-leaf.svg-DlkkijsA.js → nature-ecology-leaf.svg-TjKZfobq.js} +1 -1
  153. package/web/assets/{password-CknBOa6c.js → password-dyrMCyHO.js} +4 -4
  154. package/web/assets/{phone-telephone.svg-DB57c0uQ.js → phone-telephone.svg-CCMqAIP_.js} +1 -1
  155. package/web/assets/{plus-vTZ3EI82.js → plus-Dg2E4ggP.js} +6 -6
  156. package/web/assets/process.store-CHdSS5Et.js +1 -0
  157. package/web/assets/{programming-bug.svg-Bpzz6qqz.js → programming-bug.svg-yyshFuq4.js} +1 -1
  158. package/web/assets/{programming-cloud.svg-Bu_Znc8m.js → programming-cloud.svg-DPyoJVZM.js} +1 -1
  159. package/web/assets/{programming-computer-database-server.svg-BzyehrHn.js → programming-computer-database-server.svg-D7pShcvh.js} +1 -1
  160. package/web/assets/{programming-computer-database.svg-jGG7yJ-F.js → programming-computer-database.svg-CErKDQrw.js} +1 -1
  161. package/web/assets/{programming-module-four-layout.svg-BUt4Ml7K.js → programming-module-four-layout.svg-B26pG3Bb.js} +1 -1
  162. package/web/assets/{programming-module-three.svg-DTbRPYAb.js → programming-module-three.svg-CnoN59HX.js} +1 -1
  163. package/web/assets/{programming-module.svg-z4xhH8Dl.js → programming-module.svg-C02rn1I7.js} +1 -1
  164. package/web/assets/{programming-script-code.svg-CnJWv1-9.js → programming-script-code.svg-D0sPjoPV.js} +1 -1
  165. package/web/assets/{python-rG_OzRqj.js → python-1623Ut7s.js} +1 -1
  166. package/web/assets/{razor-D3sCDiqd.js → razor-CyTiWHYX.js} +1 -1
  167. package/web/assets/router-DWhykW-F.js +1 -0
  168. package/web/assets/settings-scope-9i3_Io9Z.js +1 -0
  169. package/web/assets/{settings.store-Ci_N5bWL.js → settings.store-BPAoJA_7.js} +1 -1
  170. package/web/assets/{shopping-cart.svg-BKfZC1qE.js → shopping-cart.svg-Cusya5ZE.js} +1 -1
  171. package/web/assets/{shopping-gift-present.svg-t023rdyN.js → shopping-gift-present.svg-DuhD1jDX.js} +1 -1
  172. package/web/assets/{shopping-shipping-box-parcel-package.svg-BwzwfQ_c.js → shopping-shipping-box-parcel-package.svg-mUJnCOxq.js} +1 -1
  173. package/web/assets/src-BiD62eGr.js +1 -0
  174. package/web/assets/src-CGoYw9sv.css +1 -0
  175. package/web/assets/{src-DPqmktmn.js → src-HsHwQ5rW.js} +14 -14
  176. package/web/assets/{tabpanel-B40ITuTH.js → tabpanel-D-R0gqbm.js} +3 -3
  177. package/web/assets/{tag-new-circle.svg-BIfD1F_x.js → tag-new-circle.svg-DFYYOM3s.js} +1 -1
  178. package/web/assets/{toggleswitch-Dt_ptl6t.js → toggleswitch-Bv2Y60nl.js} +2 -2
  179. package/web/assets/{travel-map-earth-globe.svg-CXUdwwcu.js → travel-map-earth-globe.svg-D1KtAG5P.js} +1 -1
  180. package/web/assets/trpc-4Nls70HO.js +1 -0
  181. package/web/assets/{tsMode-tZ7zzelW.js → tsMode-DarxEDX3.js} +1 -1
  182. package/web/assets/{typescript-FIjOqkFs.js → typescript-Bp83QY3R.js} +1 -1
  183. package/web/assets/useAiChatDrawer-BYR24v6F.js +1 -0
  184. package/web/assets/useCloudOrg-B1BakNYp.js +572 -0
  185. package/web/assets/{useCloudOrg-CZ_ZOAVy.css → useCloudOrg-CkiFdVCe.css} +1 -1
  186. package/web/assets/useProjectCatalog-ClgttEEn.js +1 -0
  187. package/web/assets/{xml-CdxscNq-.js → xml-CieK61bI.js} +1 -1
  188. package/web/assets/{yaml-D6DcoEmu.js → yaml-Dd4h-bcV.js} +1 -1
  189. package/web/index.html +2 -2
  190. package/agent-manager-U454MXAX.js +0 -7
  191. package/chunk-PDRWT47K.js.map +0 -1
  192. package/src-K5L5HTKP.js.map +0 -1
  193. package/web/assets/AgentScalarChatInterface.vue-BaIR1ZwL.js +0 -13
  194. package/web/assets/AgentTerminalPage-Chql5o8h.js +0 -1
  195. package/web/assets/AiChatPage-DijdhDBJ.js +0 -1
  196. package/web/assets/AppLayout-DRQiJFAe.js +0 -1
  197. package/web/assets/AuditPage-DBrGkmq6.js +0 -1
  198. package/web/assets/CloudAccountPage-Bz5yu3CN.js +0 -1
  199. package/web/assets/CloudAccountPage-CtaTO5Dr.js +0 -1
  200. package/web/assets/CloudMessagingPage-D1uKwcxg.js +0 -2
  201. package/web/assets/DashboardPage-BBFsMFk3.js +0 -1
  202. package/web/assets/DirectoryPickerDialog-DMUrjQdd.js +0 -1
  203. package/web/assets/EnvironmentForm-D7Cq-8MZ.js +0 -108
  204. package/web/assets/EnvironmentFormPage-Dgcm1IXC.js +0 -1
  205. package/web/assets/EnvironmentListPage-kQY6ZGA3.js +0 -1
  206. package/web/assets/KanbanBoardPage-B5xNcvmj.js +0 -4
  207. package/web/assets/KanbanListPage-D-hG5Ag0.js +0 -1
  208. package/web/assets/LaunchProjectPage-BPbq8Mqg.js +0 -1
  209. package/web/assets/LaunchServicesPage-CKt_9IHU.js +0 -1
  210. package/web/assets/LogViewer-BCvltLuS.js +0 -3
  211. package/web/assets/OrgKeyPrompt-_pg1asnX.js +0 -1
  212. package/web/assets/ProcessDetailPage-ClzLOqgt.js +0 -1
  213. package/web/assets/ProjectDetailPage-XVg6xk7_.js +0 -1
  214. package/web/assets/ProjectListPage-BW4wrm6E.js +0 -1
  215. package/web/assets/RandomJobTestPage-DZ75Nh-v.js +0 -2
  216. package/web/assets/ScenarioEditorPage-uH-7yybT.js +0 -14
  217. package/web/assets/SendToChatDialog-nfy9y-Ji.js +0 -1
  218. package/web/assets/ServiceControlsBar-hNxsBv7d.js +0 -1
  219. package/web/assets/ServiceDetailPage-DxSGMGDF.js +0 -2
  220. package/web/assets/ServiceFormPage-QkfjrWmq.js +0 -1
  221. package/web/assets/SettingsPage-DJLCo3L_.js +0 -2063
  222. package/web/assets/UnlockPage-BhHpc9pz.js +0 -1
  223. package/web/assets/VariablesTable-N_1OjM81.js +0 -1
  224. package/web/assets/VaultMigrationPage-DVrzZhP0.js +0 -1
  225. package/web/assets/VersionBadge-C8SWxB0u.js +0 -1
  226. package/web/assets/WikiPage-rOxWNgKc.js +0 -1
  227. package/web/assets/WikiView-Bh4Rc1_F.js +0 -1
  228. package/web/assets/add-scalar-classes-DreMq9eS.js +0 -387
  229. package/web/assets/auth-errors-BOBaCbd9.js +0 -1
  230. package/web/assets/cloud-chat.store-DteZIY7A.js +0 -1
  231. package/web/assets/cloud-session-PX6MlRl9.js +0 -1
  232. package/web/assets/column-D_CDh4mf.js +0 -907
  233. package/web/assets/index-Cz0azMVO.css +0 -1
  234. package/web/assets/interface-content-folder.svg-BiARWOa_.js +0 -1
  235. package/web/assets/modal-CVEyxr-0.js +0 -5
  236. package/web/assets/modal-DmCFgP0y.js +0 -1
  237. package/web/assets/multiselect-DYHLYL35.js +0 -251
  238. package/web/assets/process.store-CeybR5VK.js +0 -1
  239. package/web/assets/router-Dx2pV4zI.js +0 -1
  240. package/web/assets/settings-scope-DVqLTAzI.js +0 -1
  241. package/web/assets/src-3tEmDkie.js +0 -1
  242. package/web/assets/src-DIxcn8ra.css +0 -1
  243. package/web/assets/trpc-BkrN7NiU.js +0 -1
  244. package/web/assets/useAiChatDrawer-DFAtVCez.js +0 -1
  245. package/web/assets/useCloudOrg-DnZamx1M.js +0 -572
  246. package/web/assets/useProjectCatalog-B4PXCnXu.js +0 -1
  247. /package/{agent-manager-U454MXAX.js.map → agent-manager-3KSS7BHP.js.map} +0 -0
package/agent/index.js CHANGED
@@ -60,7 +60,7 @@ var authMiddleware = t.middleware(({ ctx, next }) => {
60
60
  var protectedProcedure = t.procedure.use(authMiddleware);
61
61
 
62
62
  // src/trpc/routers/process.ts
63
- import { z as z23 } from "zod";
63
+ import { z as z24 } from "zod";
64
64
  import { TRPCError as TRPCError2 } from "@trpc/server";
65
65
 
66
66
  // src/services/process-manager.ts
@@ -1148,6 +1148,37 @@ var UpdateCloudApiKeyInput = z20.object({
1148
1148
  boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1149
1149
  });
1150
1150
 
1151
+ // ../../packages/shared/src/schemas/changelog.schema.ts
1152
+ import { z as z21 } from "zod";
1153
+ var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
1154
+ var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
1155
+ var ChangelogTextSchema = z21.object({
1156
+ fr: z21.string().min(1).max(500),
1157
+ en: z21.string().min(1).max(500)
1158
+ });
1159
+ var ChangelogChangeSchema = z21.object({
1160
+ kind: ChangelogChangeKindSchema,
1161
+ text: ChangelogTextSchema
1162
+ });
1163
+ var ChangelogDraftSchema = ChangelogChangeSchema.extend({
1164
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1165
+ title: ChangelogTextSchema.optional()
1166
+ });
1167
+ var ChangelogReleaseSchema = z21.object({
1168
+ surface: ChangelogSurfaceSchema,
1169
+ /** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
1170
+ version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1171
+ /** Date de publication, `YYYY-MM-DD`. */
1172
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1173
+ /** Facultatif : une version peut s'annoncer par son seul numéro. */
1174
+ title: ChangelogTextSchema.optional(),
1175
+ /** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
1176
+ changes: z21.array(ChangelogChangeSchema).min(1).max(50)
1177
+ });
1178
+ var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
1179
+ changeCount: z21.number().int().nonnegative()
1180
+ });
1181
+
1151
1182
  // ../../packages/shared/src/utils/crypto.ts
1152
1183
  import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
1153
1184
 
@@ -2957,7 +2988,7 @@ async function getDockerStats(containerName) {
2957
2988
  execFile(
2958
2989
  "docker",
2959
2990
  ["stats", "--no-stream", "--format", "{{json .}}", containerName],
2960
- { timeout: 5e3 },
2991
+ { timeout: 5e3, windowsHide: true },
2961
2992
  (err, stdout) => {
2962
2993
  if (err || !stdout.trim()) {
2963
2994
  resolve2(null);
@@ -3086,7 +3117,7 @@ import { execa as execa3 } from "execa";
3086
3117
  import { homedir as homedir4 } from "os";
3087
3118
 
3088
3119
  // src/trpc/routers/config.ts
3089
- import { z as z21 } from "zod";
3120
+ import { z as z22 } from "zod";
3090
3121
 
3091
3122
  // src/services/traefik-manager.ts
3092
3123
  import { spawn, execFile as execFile2 } from "child_process";
@@ -3283,6 +3314,7 @@ var TraefikManager = class {
3283
3314
  "traefik:v3"
3284
3315
  ];
3285
3316
  this.process = spawn("docker", args, {
3317
+ windowsHide: true,
3286
3318
  shell: false,
3287
3319
  detached: false,
3288
3320
  stdio: ["ignore", "pipe", "pipe"]
@@ -3320,7 +3352,7 @@ var TraefikManager = class {
3320
3352
  this.debounceTimer = null;
3321
3353
  }
3322
3354
  await new Promise((resolve2) => {
3323
- execFile2("docker", ["rm", "-f", "runeya-traefik"], { timeout: 1e4 }, () => resolve2());
3355
+ execFile2("docker", ["rm", "-f", "runeya-traefik"], { timeout: 1e4, windowsHide: true }, () => resolve2());
3324
3356
  });
3325
3357
  await new Promise((resolve2) => setTimeout(resolve2, 500));
3326
3358
  }
@@ -3362,7 +3394,7 @@ var TraefikManager = class {
3362
3394
  }
3363
3395
  async getLogs(lines = 100) {
3364
3396
  return new Promise((resolve2) => {
3365
- execFile2("docker", ["logs", "--tail", String(lines), "runeya-traefik"], { timeout: 1e4 }, (err, stdout, stderr) => {
3397
+ execFile2("docker", ["logs", "--tail", String(lines), "runeya-traefik"], { timeout: 1e4, windowsHide: true }, (err, stdout, stderr) => {
3366
3398
  if (err) {
3367
3399
  resolve2("");
3368
3400
  return;
@@ -3413,7 +3445,7 @@ var TraefikManager = class {
3413
3445
  let dockerAvailable = false;
3414
3446
  try {
3415
3447
  await new Promise((resolve2, reject) => {
3416
- execFile2("docker", ["info", "--format", "{{.ServerVersion}}"], { timeout: 5e3 }, (err) => {
3448
+ execFile2("docker", ["info", "--format", "{{.ServerVersion}}"], { timeout: 5e3, windowsHide: true }, (err) => {
3417
3449
  if (err) reject(err instanceof Error ? err : new Error("docker info failed"));
3418
3450
  else resolve2();
3419
3451
  });
@@ -3433,7 +3465,7 @@ var TraefikManager = class {
3433
3465
  if (dockerAvailable) {
3434
3466
  try {
3435
3467
  const output = await new Promise((resolve2, reject) => {
3436
- execFile2("docker", ["inspect", "--format", "{{.State.Running}}", "runeya-traefik"], { timeout: 5e3 }, (err, stdout) => {
3468
+ execFile2("docker", ["inspect", "--format", "{{.State.Running}}", "runeya-traefik"], { timeout: 5e3, windowsHide: true }, (err, stdout) => {
3437
3469
  if (err) reject(err instanceof Error ? err : new Error("docker inspect failed"));
3438
3470
  else resolve2(stdout.trim());
3439
3471
  });
@@ -3463,13 +3495,13 @@ function resolvePassthroughEnv() {
3463
3495
  return result;
3464
3496
  }
3465
3497
  var configRouter = router({
3466
- setPassthroughEnv: protectedProcedure.input(z21.object({
3467
- names: z21.array(
3468
- z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3498
+ setPassthroughEnv: protectedProcedure.input(z22.object({
3499
+ names: z22.array(
3500
+ z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3469
3501
  ).max(100),
3470
- values: z21.record(
3471
- z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3472
- z21.string().max(32768)
3502
+ values: z22.record(
3503
+ z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3504
+ z22.string().max(32768)
3473
3505
  ).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
3474
3506
  })).mutation(({ input }) => {
3475
3507
  passthroughEnvNames = input.names;
@@ -3506,7 +3538,7 @@ var configRouter = router({
3506
3538
  getTraefikFileTree: protectedProcedure.query(async () => {
3507
3539
  return traefikManager.getFileTree();
3508
3540
  }),
3509
- getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3541
+ getTraefikLogs: protectedProcedure.input(z22.object({ lines: z22.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3510
3542
  const logs = await traefikManager.getLogs(input.lines);
3511
3543
  return { logs };
3512
3544
  })
@@ -3698,17 +3730,17 @@ var healthChecker = new HealthChecker();
3698
3730
  import killPort from "kill-port";
3699
3731
 
3700
3732
  // src/config/env.ts
3701
- import { z as z22 } from "zod";
3702
- var EnvSchema = z22.object({
3703
- RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
3704
- RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
3705
- PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3706
- AGENT_ID: z22.string().optional(),
3733
+ import { z as z23 } from "zod";
3734
+ var EnvSchema = z23.object({
3735
+ RUNEYA_AGENT_PORT: z23.coerce.number().int().min(1).max(65535).default(4001),
3736
+ RUNEYA_AGENT_HOST: z23.string().default("127.0.0.1"),
3737
+ PASSPHRASE_OVERRIDE: z23.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3738
+ AGENT_ID: z23.string().optional(),
3707
3739
  // Set by spawner or manually for remote agents
3708
- LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3709
- METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
3710
- GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
3711
- HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3740
+ LOG_BUFFER_SIZE: z23.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3741
+ METRICS_INTERVAL: z23.coerce.number().int().positive().default(METRICS_INTERVAL),
3742
+ GRACE_PERIOD: z23.coerce.number().int().positive().default(GRACE_PERIOD),
3743
+ HEALTH_WS_INTERVAL: z23.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3712
3744
  });
3713
3745
  var env = EnvSchema.parse(process.env);
3714
3746
 
@@ -4493,7 +4525,7 @@ var processRouter = router({
4493
4525
  return processManager.listStatuses();
4494
4526
  }),
4495
4527
  /** Get a single process */
4496
- get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4528
+ get: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4497
4529
  const status = processManager.getStatus(input.id);
4498
4530
  if (!status) {
4499
4531
  throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
@@ -4506,78 +4538,78 @@ var processRouter = router({
4506
4538
  return { id };
4507
4539
  }),
4508
4540
  /** Undeploy: stop + remove */
4509
- undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4541
+ undeploy: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4510
4542
  await processManager.undeploy(input.id);
4511
4543
  return { success: true };
4512
4544
  }),
4513
4545
  /** Update the service config for a deployed process */
4514
- updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4546
+ updateConfig: protectedProcedure.input(z24.object({ serviceId: z24.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4515
4547
  processManager.updateConfig(input.serviceId, input.config);
4516
4548
  return { success: true };
4517
4549
  }),
4518
4550
  /** Start a deployed process */
4519
- start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4551
+ start: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4520
4552
  console.log(`[agent] start service=${input.id}`);
4521
4553
  await processManager.start(input.id);
4522
4554
  return processManager.getStatus(input.id);
4523
4555
  }),
4524
4556
  /** Stop a running process */
4525
- stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4557
+ stop: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4526
4558
  console.log(`[agent] stop service=${input.id}`);
4527
4559
  await processManager.stop(input.id);
4528
4560
  return processManager.getStatus(input.id);
4529
4561
  }),
4530
4562
  /** Restart a process */
4531
- restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4563
+ restart: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4532
4564
  console.log(`[agent] restart service=${input.id}`);
4533
4565
  await processManager.restart(input.id);
4534
4566
  return processManager.getStatus(input.id);
4535
4567
  }),
4536
4568
  /** Get buffered logs for a process */
4537
- logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4569
+ logs: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4538
4570
  const logs = processManager.getLogs(input.id);
4539
4571
  return logs;
4540
4572
  }),
4541
4573
  /** Clear buffered logs for a process */
4542
- clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
4574
+ clearLogBuffer: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(({ input }) => {
4543
4575
  processManager.clearLogBuffer(input.id);
4544
4576
  return { success: true };
4545
4577
  }),
4546
4578
  /** Execute a shortcut command and stream output into the process log */
4547
- executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4579
+ executeShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4548
4580
  const result = await processManager.executeShortcut(input.id, input.shortcut);
4549
4581
  return result;
4550
4582
  }),
4551
4583
  /** Cancel a running shortcut command */
4552
- cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
4584
+ cancelShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcutId: z24.string().max(128) })).mutation(({ input }) => {
4553
4585
  processManager.cancelShortcut(input.id, input.shortcutId);
4554
4586
  return { success: true };
4555
4587
  }),
4556
4588
  /** Cancel a running ad-hoc command */
4557
- cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
4589
+ cancelAdHocCommand: protectedProcedure.input(z24.object({ id: z24.string().max(128), commandId: z24.string().max(128).optional() })).mutation(({ input }) => {
4558
4590
  processManager.cancelAdHocCommand(input.id, input.commandId);
4559
4591
  return { success: true };
4560
4592
  }),
4561
4593
  /** Execute an ad-hoc command and stream output into the process log */
4562
- executeAdHocCommand: protectedProcedure.input(z23.object({
4563
- id: z23.string().max(128),
4564
- command: z23.string().min(1).max(4096),
4565
- cwd: z23.string().max(4096).optional(),
4566
- commandId: z23.string().max(128).optional()
4594
+ executeAdHocCommand: protectedProcedure.input(z24.object({
4595
+ id: z24.string().max(128),
4596
+ command: z24.string().min(1).max(4096),
4597
+ cwd: z24.string().max(4096).optional(),
4598
+ commandId: z24.string().max(128).optional()
4567
4599
  })).mutation(async ({ input }) => {
4568
4600
  const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
4569
4601
  return result;
4570
4602
  }),
4571
4603
  /** List active log source types for a process */
4572
- logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
4604
+ logSources: protectedProcedure.input(z24.object({ processId: z24.string().max(128) })).query(({ input }) => {
4573
4605
  return processManager.getLogSourceTypes(input.processId);
4574
4606
  }),
4575
4607
  /** Get current metrics for a process */
4576
- metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
4608
+ metrics: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(async ({ input }) => {
4577
4609
  return processManager.getMetrics(input.id);
4578
4610
  }),
4579
4611
  /** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
4580
- onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4612
+ onLog: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4581
4613
  const queue = [];
4582
4614
  let resolve2 = null;
4583
4615
  const handler = (batch) => {
@@ -4606,7 +4638,7 @@ var processRouter = router({
4606
4638
  }
4607
4639
  }),
4608
4640
  /** Subscribe to real-time status changes */
4609
- onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4641
+ onStatus: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4610
4642
  console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
4611
4643
  const queue = [];
4612
4644
  let resolve2 = null;
@@ -4638,7 +4670,7 @@ var processRouter = router({
4638
4670
  }
4639
4671
  }),
4640
4672
  /** Subscribe to real-time health status changes */
4641
- onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4673
+ onHealth: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4642
4674
  const queue = [];
4643
4675
  let resolve2 = null;
4644
4676
  const handler = (healthData) => {
@@ -4668,7 +4700,7 @@ var processRouter = router({
4668
4700
  }
4669
4701
  }),
4670
4702
  /** Subscribe to real-time metrics */
4671
- onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4703
+ onMetrics: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4672
4704
  const queue = [];
4673
4705
  let resolve2 = null;
4674
4706
  const handler = (metrics) => {
@@ -4741,15 +4773,15 @@ var healthRouter = router({
4741
4773
  /** Check which AI CLIs are available on this agent */
4742
4774
  checkCli: protectedProcedure.query(async () => {
4743
4775
  const [claudeOk, codexOk] = await Promise.all([
4744
- execFileAsync("claude", ["--version"], { timeout: 5e3, shell: false }).then(() => true).catch(() => false),
4745
- execFileAsync("codex", ["--version"], { timeout: 5e3, shell: false }).then(() => true).catch(() => false)
4776
+ execFileAsync("claude", ["--version"], { timeout: 5e3, shell: false, windowsHide: true }).then(() => true).catch(() => false),
4777
+ execFileAsync("codex", ["--version"], { timeout: 5e3, shell: false, windowsHide: true }).then(() => true).catch(() => false)
4746
4778
  ]);
4747
4779
  return { claudeAvailable: claudeOk, codexAvailable: codexOk };
4748
4780
  })
4749
4781
  });
4750
4782
 
4751
4783
  // src/trpc/routers/terminal.ts
4752
- import { z as z24 } from "zod";
4784
+ import { z as z25 } from "zod";
4753
4785
  import { TRPCError as TRPCError3 } from "@trpc/server";
4754
4786
 
4755
4787
  // src/services/terminal-manager.ts
@@ -4842,11 +4874,11 @@ var terminalManager = new TerminalManager();
4842
4874
  // src/trpc/routers/terminal.ts
4843
4875
  var terminalRouter = router({
4844
4876
  /** Spawn a new PTY shell session, returns a sessionId */
4845
- create: protectedProcedure.input(z24.object({
4846
- cwd: z24.string().max(512).optional(),
4847
- cols: z24.number().int().min(1).max(512).optional(),
4848
- rows: z24.number().int().min(1).max(256).optional(),
4849
- title: z24.string().max(128).optional()
4877
+ create: protectedProcedure.input(z25.object({
4878
+ cwd: z25.string().max(512).optional(),
4879
+ cols: z25.number().int().min(1).max(512).optional(),
4880
+ rows: z25.number().int().min(1).max(256).optional(),
4881
+ title: z25.string().max(128).optional()
4850
4882
  })).mutation(({ input }) => {
4851
4883
  const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
4852
4884
  return { sessionId };
@@ -4854,34 +4886,34 @@ var terminalRouter = router({
4854
4886
  /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
4855
4887
  list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
4856
4888
  /** Renommer un onglet */
4857
- rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
4889
+ rename: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), title: z25.string().max(128) })).mutation(({ input }) => {
4858
4890
  terminalManager.rename(input.sessionId, input.title);
4859
4891
  return { ok: true };
4860
4892
  }),
4861
4893
  /** Write data (keystrokes) to a PTY session */
4862
- write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
4894
+ write: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), data: z25.string().max(65536) })).mutation(({ input }) => {
4863
4895
  terminalManager.write(input.sessionId, input.data);
4864
4896
  return { ok: true };
4865
4897
  }),
4866
4898
  /** Resize a PTY session */
4867
- resize: protectedProcedure.input(z24.object({
4868
- sessionId: z24.string().max(128),
4869
- cols: z24.number().int().min(1).max(512),
4870
- rows: z24.number().int().min(1).max(256)
4899
+ resize: protectedProcedure.input(z25.object({
4900
+ sessionId: z25.string().max(128),
4901
+ cols: z25.number().int().min(1).max(512),
4902
+ rows: z25.number().int().min(1).max(256)
4871
4903
  })).mutation(({ input }) => {
4872
4904
  terminalManager.resize(input.sessionId, input.cols, input.rows);
4873
4905
  return { ok: true };
4874
4906
  }),
4875
4907
  /** Destroy a PTY session */
4876
- destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
4908
+ destroy: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).mutation(({ input }) => {
4877
4909
  terminalManager.destroy(input.sessionId);
4878
4910
  return { ok: true };
4879
4911
  }),
4880
4912
  /** Stream PTY output for a session (async generator subscription) */
4881
- onData: protectedProcedure.input(z24.object({
4882
- sessionId: z24.string().max(128),
4913
+ onData: protectedProcedure.input(z25.object({
4914
+ sessionId: z25.string().max(128),
4883
4915
  /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
4884
- replay: z24.boolean().optional()
4916
+ replay: z25.boolean().optional()
4885
4917
  })).subscription(async function* ({ input }) {
4886
4918
  const emitter = terminalManager.getEmitter(input.sessionId);
4887
4919
  if (!emitter) {
@@ -4926,7 +4958,7 @@ var terminalRouter = router({
4926
4958
  });
4927
4959
 
4928
4960
  // src/trpc/routers/git.ts
4929
- import { z as z25 } from "zod";
4961
+ import { z as z26 } from "zod";
4930
4962
  import { TRPCError as TRPCError4 } from "@trpc/server";
4931
4963
  import { execFile as execFile5, spawn as spawn3 } from "child_process";
4932
4964
  import { promisify as promisify3 } from "util";
@@ -4966,6 +4998,7 @@ async function resolveSshHost(host) {
4966
4998
  if (!/^[a-zA-Z0-9._-]+$/.test(host)) return host;
4967
4999
  try {
4968
5000
  const { stdout } = await execFileAsync2("ssh", ["-G", host], {
5001
+ windowsHide: true,
4969
5002
  timeout: 3e3,
4970
5003
  env: { PATH: process.env["PATH"] ?? "", HOME: process.env["HOME"] ?? "" }
4971
5004
  });
@@ -4993,12 +5026,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
4993
5026
  var execFileAsync3 = promisify3(execFile5);
4994
5027
  var GIT_TIMEOUT = 15e3;
4995
5028
  var DIFF_MAX_BYTES = 512 * 1024;
4996
- var CWD_SCHEMA = z25.string().min(1).max(4096);
4997
- var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
5029
+ var CWD_SCHEMA = z26.string().min(1).max(4096);
5030
+ var SAFE_PATH_SCHEMA = z26.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
4998
5031
  message: "Path must be relative and not traverse up"
4999
5032
  });
5000
- var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5001
- var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5033
+ var REMOTE_SCHEMA = z26.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5034
+ var BRANCH_SCHEMA = z26.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5002
5035
  function gitSafeEnv() {
5003
5036
  const env2 = {
5004
5037
  GIT_TERMINAL_PROMPT: "0",
@@ -5032,7 +5065,7 @@ async function git(args, cwd, readOnly = false) {
5032
5065
  const env2 = gitSafeEnv();
5033
5066
  if (readOnly) env2["GIT_OPTIONAL_LOCKS"] = "0";
5034
5067
  try {
5035
- const result = execFileAsync3("git", args, { cwd, signal: ac.signal, env: env2 });
5068
+ const result = execFileAsync3("git", args, { cwd, signal: ac.signal, env: env2, windowsHide: true });
5036
5069
  if (result.child) {
5037
5070
  activeGitProcesses.add(result.child);
5038
5071
  result.child.on("close", () => activeGitProcesses.delete(result.child));
@@ -5116,10 +5149,10 @@ async function getGitStatus(cwd) {
5116
5149
  }
5117
5150
  var gitRouter = router({
5118
5151
  /** Check if a working directory exists and optionally verify its git remote */
5119
- checkCwd: protectedProcedure.input(z25.object({
5152
+ checkCwd: protectedProcedure.input(z26.object({
5120
5153
  cwd: CWD_SCHEMA,
5121
- remote: z25.string().max(2048).optional(),
5122
- checkReachability: z25.boolean().optional()
5154
+ remote: z26.string().max(2048).optional(),
5155
+ checkReachability: z26.boolean().optional()
5123
5156
  })).query(async ({ input }) => {
5124
5157
  const resolvedCwd = expandEnvVar(input.cwd);
5125
5158
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -5141,8 +5174,8 @@ var gitRouter = router({
5141
5174
  return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
5142
5175
  }),
5143
5176
  /** Clone a git repository into a target directory */
5144
- clone: protectedProcedure.input(z25.object({
5145
- remote: z25.string().min(1).max(2048),
5177
+ clone: protectedProcedure.input(z26.object({
5178
+ remote: z26.string().min(1).max(2048),
5146
5179
  cwd: CWD_SCHEMA
5147
5180
  })).mutation(async ({ input }) => {
5148
5181
  const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
@@ -5163,13 +5196,13 @@ var gitRouter = router({
5163
5196
  return { success: true };
5164
5197
  }),
5165
5198
  /** Get full git status */
5166
- status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5199
+ status: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5167
5200
  const cwd = assertCwdExists(input.cwd);
5168
5201
  await assertGitRepo(cwd);
5169
5202
  return getGitStatus(cwd);
5170
5203
  }),
5171
5204
  /** Watch .git/ for changes and stream updated status */
5172
- onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5205
+ onStatusChange: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5173
5206
  const cwd = assertCwdExists(input.cwd);
5174
5207
  await assertGitRepo(cwd);
5175
5208
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -5220,7 +5253,7 @@ var gitRouter = router({
5220
5253
  }
5221
5254
  }),
5222
5255
  /** Get commit log */
5223
- log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5256
+ log: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, limit: z26.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5224
5257
  const cwd = assertCwdExists(input.cwd);
5225
5258
  await assertGitRepo(cwd);
5226
5259
  const format = "%H%h%an%ae%ai%s";
@@ -5231,7 +5264,7 @@ var gitRouter = router({
5231
5264
  });
5232
5265
  }),
5233
5266
  /** List local and remote branches */
5234
- branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5267
+ branches: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5235
5268
  const cwd = assertCwdExists(input.cwd);
5236
5269
  await assertGitRepo(cwd);
5237
5270
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5243,7 +5276,7 @@ var gitRouter = router({
5243
5276
  return { current, branches };
5244
5277
  }),
5245
5278
  /** Checkout a branch */
5246
- checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
5279
+ checkout: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z26.boolean().default(false) })).mutation(async ({ input }) => {
5247
5280
  const cwd = assertCwdExists(input.cwd);
5248
5281
  await assertGitRepo(cwd);
5249
5282
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -5251,42 +5284,42 @@ var gitRouter = router({
5251
5284
  return { ok: true };
5252
5285
  }),
5253
5286
  /** Stage files */
5254
- stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5287
+ stage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5255
5288
  const cwd = assertCwdExists(input.cwd);
5256
5289
  await assertGitRepo(cwd);
5257
5290
  await git(["add", "--", ...input.paths], cwd);
5258
5291
  return { ok: true };
5259
5292
  }),
5260
5293
  /** Stage all files */
5261
- stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5294
+ stageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5262
5295
  const cwd = assertCwdExists(input.cwd);
5263
5296
  await assertGitRepo(cwd);
5264
5297
  await git(["add", "-A"], cwd);
5265
5298
  return { ok: true };
5266
5299
  }),
5267
5300
  /** Unstage files */
5268
- unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5301
+ unstage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5269
5302
  const cwd = assertCwdExists(input.cwd);
5270
5303
  await assertGitRepo(cwd);
5271
5304
  await git(["restore", "--staged", "--", ...input.paths], cwd);
5272
5305
  return { ok: true };
5273
5306
  }),
5274
5307
  /** Unstage all files */
5275
- unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5308
+ unstageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5276
5309
  const cwd = assertCwdExists(input.cwd);
5277
5310
  await assertGitRepo(cwd);
5278
5311
  await git(["reset", "--"], cwd);
5279
5312
  return { ok: true };
5280
5313
  }),
5281
5314
  /** Commit staged changes */
5282
- commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
5315
+ commit: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, message: z26.string().min(1).max(4096) })).mutation(async ({ input }) => {
5283
5316
  const cwd = assertCwdExists(input.cwd);
5284
5317
  await assertGitRepo(cwd);
5285
5318
  const output = await git(["commit", "-m", input.message], cwd);
5286
5319
  return { ok: true, output: output.trim() };
5287
5320
  }),
5288
5321
  /** Push to remote */
5289
- push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
5322
+ push: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z26.boolean().default(false) })).mutation(async ({ input }) => {
5290
5323
  const cwd = assertCwdExists(input.cwd);
5291
5324
  await assertGitRepo(cwd);
5292
5325
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5295,25 +5328,25 @@ var gitRouter = router({
5295
5328
  return { ok: true, output: output.trim() };
5296
5329
  }),
5297
5330
  /** Pull from remote */
5298
- pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5331
+ pull: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5299
5332
  const cwd = assertCwdExists(input.cwd);
5300
5333
  await assertGitRepo(cwd);
5301
5334
  const output = await git(["pull", input.remote], cwd);
5302
5335
  return { ok: true, output: output.trim() };
5303
5336
  }),
5304
5337
  /** Fetch from remote */
5305
- fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5338
+ fetch: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5306
5339
  const cwd = assertCwdExists(input.cwd);
5307
5340
  await assertGitRepo(cwd);
5308
5341
  const output = await git(["fetch", input.remote], cwd);
5309
5342
  return { ok: true, output: output.trim() };
5310
5343
  }),
5311
5344
  /** Get diff for a file or the whole index */
5312
- diff: protectedProcedure.input(z25.object({
5345
+ diff: protectedProcedure.input(z26.object({
5313
5346
  cwd: CWD_SCHEMA,
5314
- path: z25.string().max(4096).optional(),
5315
- staged: z25.boolean().default(false),
5316
- untracked: z25.boolean().default(false)
5347
+ path: z26.string().max(4096).optional(),
5348
+ staged: z26.boolean().default(false),
5349
+ untracked: z26.boolean().default(false)
5317
5350
  })).query(async ({ input }) => {
5318
5351
  const cwd = assertCwdExists(input.cwd);
5319
5352
  await assertGitRepo(cwd);
@@ -5361,21 +5394,21 @@ var gitRouter = router({
5361
5394
  };
5362
5395
  }),
5363
5396
  /** Discard changes to working tree files */
5364
- discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5397
+ discard: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5365
5398
  const cwd = assertCwdExists(input.cwd);
5366
5399
  await assertGitRepo(cwd);
5367
5400
  await git(["restore", "--", ...input.paths], cwd);
5368
5401
  return { ok: true };
5369
5402
  }),
5370
5403
  /** Get staged diff (used by server for AI commit message generation) */
5371
- stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5404
+ stagedDiff: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5372
5405
  const cwd = assertCwdExists(input.cwd);
5373
5406
  await assertGitRepo(cwd);
5374
5407
  const diff = await git(["diff", "--staged"], cwd, true);
5375
5408
  return { diff: diff.slice(0, 3e4) };
5376
5409
  }),
5377
5410
  /** Merge a branch into the current branch */
5378
- merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
5411
+ merge: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z26.boolean().default(false) })).mutation(async ({ input }) => {
5379
5412
  const cwd = assertCwdExists(input.cwd);
5380
5413
  await assertGitRepo(cwd);
5381
5414
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5383,14 +5416,14 @@ var gitRouter = router({
5383
5416
  return { ok: true, output: output.trim() };
5384
5417
  }),
5385
5418
  /** Rebase current branch onto another branch */
5386
- rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5419
+ rebase: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5387
5420
  const cwd = assertCwdExists(input.cwd);
5388
5421
  await assertGitRepo(cwd);
5389
5422
  const output = await git(["rebase", input.branch], cwd);
5390
5423
  return { ok: true, output: output.trim() };
5391
5424
  }),
5392
5425
  /** List remotes */
5393
- remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5426
+ remotes: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5394
5427
  const cwd = assertCwdExists(input.cwd);
5395
5428
  await assertGitRepo(cwd);
5396
5429
  const output = await git(["remote", "-v"], cwd, true);
@@ -5408,7 +5441,7 @@ var gitRouter = router({
5408
5441
  return remotes;
5409
5442
  }),
5410
5443
  /** List stash entries */
5411
- stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5444
+ stashList: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5412
5445
  const cwd = assertCwdExists(input.cwd);
5413
5446
  await assertGitRepo(cwd);
5414
5447
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5421,10 +5454,10 @@ var gitRouter = router({
5421
5454
  return entries;
5422
5455
  }),
5423
5456
  /** Stash current changes */
5424
- stashPush: protectedProcedure.input(z25.object({
5457
+ stashPush: protectedProcedure.input(z26.object({
5425
5458
  cwd: CWD_SCHEMA,
5426
- message: z25.string().max(4096).optional(),
5427
- includeUntracked: z25.boolean().default(true)
5459
+ message: z26.string().max(4096).optional(),
5460
+ includeUntracked: z26.boolean().default(true)
5428
5461
  })).mutation(async ({ input }) => {
5429
5462
  const cwd = assertCwdExists(input.cwd);
5430
5463
  await assertGitRepo(cwd);
@@ -5435,21 +5468,21 @@ var gitRouter = router({
5435
5468
  return { ok: true, output: output.trim() };
5436
5469
  }),
5437
5470
  /** Apply a stash entry and remove it from the list */
5438
- stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5471
+ stashPop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5439
5472
  const cwd = assertCwdExists(input.cwd);
5440
5473
  await assertGitRepo(cwd);
5441
5474
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5442
5475
  return { ok: true, output: output.trim() };
5443
5476
  }),
5444
5477
  /** Apply a stash entry without removing it from the list */
5445
- stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5478
+ stashApply: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5446
5479
  const cwd = assertCwdExists(input.cwd);
5447
5480
  await assertGitRepo(cwd);
5448
5481
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5449
5482
  return { ok: true, output: output.trim() };
5450
5483
  }),
5451
5484
  /** Drop a stash entry */
5452
- stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5485
+ stashDrop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5453
5486
  const cwd = assertCwdExists(input.cwd);
5454
5487
  await assertGitRepo(cwd);
5455
5488
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5458,7 +5491,7 @@ var gitRouter = router({
5458
5491
  });
5459
5492
  function runGitRaw(args, timeoutMs, extraEnv) {
5460
5493
  return new Promise((res) => {
5461
- const child = spawn3("git", args, { shell: false, stdio: "pipe", env: { ...process.env, ...extraEnv } });
5494
+ const child = spawn3("git", args, { shell: false, stdio: "pipe", env: { ...process.env, ...extraEnv }, windowsHide: true });
5462
5495
  let out = "";
5463
5496
  child.stdout?.on("data", (d) => {
5464
5497
  out += d.toString();
@@ -5482,7 +5515,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5482
5515
  }
5483
5516
 
5484
5517
  // src/trpc/routers/ai.ts
5485
- import { z as z26 } from "zod";
5518
+ import { z as z27 } from "zod";
5486
5519
  import { TRPCError as TRPCError5 } from "@trpc/server";
5487
5520
 
5488
5521
  // src/services/ai-spawn-manager.ts
@@ -5629,6 +5662,7 @@ var AiSpawnManager = class {
5629
5662
  const { env: env2, args } = resolveSpawnEnvAndArgs(opts);
5630
5663
  const invocation = resolveCliInvocation(opts.cli, args);
5631
5664
  const proc = spawn4(invocation.command, invocation.args, {
5665
+ windowsHide: true,
5632
5666
  stdio: ["pipe", "pipe", "pipe"],
5633
5667
  shell: false,
5634
5668
  env: env2,
@@ -5949,6 +5983,7 @@ var CodexAppServerManager = class extends EventEmitter10 {
5949
5983
  async doConnect() {
5950
5984
  const env2 = { ...process.env, ...this.extraEnv };
5951
5985
  this.proc = spawn6("codex", [...resolveMcpArgs(env2), "app-server"], {
5986
+ windowsHide: true,
5952
5987
  stdio: ["pipe", "pipe", "pipe"],
5953
5988
  env: env2
5954
5989
  });
@@ -6122,7 +6157,7 @@ function runCmd(cmd, args, stdin, timeoutMs = 5e3) {
6122
6157
  resolve2({ code, stderr });
6123
6158
  };
6124
6159
  try {
6125
- const child = spawn7(cmd, args, { stdio: ["pipe", "ignore", "pipe"] });
6160
+ const child = spawn7(cmd, args, { stdio: ["pipe", "ignore", "pipe"], windowsHide: true });
6126
6161
  let stderr = "";
6127
6162
  child.stderr.on("data", (c) => {
6128
6163
  stderr += c.toString();
@@ -6197,23 +6232,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
6197
6232
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
6198
6233
  var aiRouter = router({
6199
6234
  /** Spawn an AI CLI process. Returns a spawnId for streaming. */
6200
- spawn: protectedProcedure.input(z26.object({
6201
- cli: z26.string().max(64),
6202
- args: z26.array(z26.string().max(5e5)),
6203
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6204
- cwd: z26.string().max(4096).optional(),
6205
- stdinData: z26.string().max(1e7).optional(),
6206
- enableMcp: z26.boolean().optional(),
6207
- mcpApiBaseUrl: z26.string().max(512).optional(),
6208
- mcpApiToken: z26.string().max(8192).optional()
6235
+ spawn: protectedProcedure.input(z27.object({
6236
+ cli: z27.string().max(64),
6237
+ args: z27.array(z27.string().max(5e5)),
6238
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6239
+ cwd: z27.string().max(4096).optional(),
6240
+ stdinData: z27.string().max(1e7).optional(),
6241
+ enableMcp: z27.boolean().optional(),
6242
+ mcpApiBaseUrl: z27.string().max(512).optional(),
6243
+ mcpApiToken: z27.string().max(8192).optional()
6209
6244
  })).mutation(({ input }) => {
6210
6245
  const spawnId = aiSpawnManager.spawn(input);
6211
6246
  return { spawnId };
6212
6247
  }),
6213
6248
  /** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
6214
- stream: protectedProcedure.input(z26.object({
6215
- spawnId: z26.string().max(128),
6216
- fromOffset: z26.number().int().min(0).default(0)
6249
+ stream: protectedProcedure.input(z27.object({
6250
+ spawnId: z27.string().max(128),
6251
+ fromOffset: z27.number().int().min(0).default(0)
6217
6252
  })).subscription(async function* ({ input }) {
6218
6253
  try {
6219
6254
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -6227,39 +6262,39 @@ var aiRouter = router({
6227
6262
  }
6228
6263
  }),
6229
6264
  /** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
6230
- spawnPty: protectedProcedure.input(z26.object({
6231
- cli: z26.string().max(64),
6232
- args: z26.array(z26.string().max(5e5)),
6233
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6234
- cwd: z26.string().max(4096).optional(),
6235
- cols: z26.number().int().min(1).max(1e3).optional(),
6236
- rows: z26.number().int().min(1).max(1e3).optional(),
6237
- sessionId: z26.string().max(128).optional(),
6238
- enableMcp: z26.boolean().optional(),
6239
- mcpApiBaseUrl: z26.string().max(512).optional(),
6240
- mcpApiToken: z26.string().max(8192).optional()
6265
+ spawnPty: protectedProcedure.input(z27.object({
6266
+ cli: z27.string().max(64),
6267
+ args: z27.array(z27.string().max(5e5)),
6268
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6269
+ cwd: z27.string().max(4096).optional(),
6270
+ cols: z27.number().int().min(1).max(1e3).optional(),
6271
+ rows: z27.number().int().min(1).max(1e3).optional(),
6272
+ sessionId: z27.string().max(128).optional(),
6273
+ enableMcp: z27.boolean().optional(),
6274
+ mcpApiBaseUrl: z27.string().max(512).optional(),
6275
+ mcpApiToken: z27.string().max(8192).optional()
6241
6276
  })).mutation(({ input }) => {
6242
6277
  const spawnId = aiSpawnManager.spawnPty(input);
6243
6278
  return { spawnId };
6244
6279
  }),
6245
6280
  /** Find a running PTY spawn by its logical sessionId (for re-attach). */
6246
- findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
6281
+ findPtyBySession: protectedProcedure.input(z27.object({ sessionId: z27.string().max(128) })).query(({ input }) => {
6247
6282
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
6248
6283
  }),
6249
6284
  /** Write input to a PTY spawn (user keystrokes). */
6250
- writePty: protectedProcedure.input(z26.object({
6251
- spawnId: z26.string().max(128),
6252
- data: z26.string().max(1e6)
6285
+ writePty: protectedProcedure.input(z27.object({
6286
+ spawnId: z27.string().max(128),
6287
+ data: z27.string().max(1e6)
6253
6288
  })).mutation(({ input }) => {
6254
6289
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
6255
6290
  return { ok };
6256
6291
  }),
6257
6292
  /** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
6258
- writeContextFiles: protectedProcedure.input(z26.object({
6259
- sessionId: z26.string().min(1).max(128),
6260
- files: z26.array(z26.object({
6261
- name: z26.string().min(1).max(256),
6262
- content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
6293
+ writeContextFiles: protectedProcedure.input(z27.object({
6294
+ sessionId: z27.string().min(1).max(128),
6295
+ files: z27.array(z27.object({
6296
+ name: z27.string().min(1).max(256),
6297
+ content: z27.string().max(MAX_CONTEXT_FILE_BYTES)
6263
6298
  })).min(1).max(MAX_CONTEXT_FILES)
6264
6299
  }).refine(
6265
6300
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -6274,25 +6309,25 @@ var aiRouter = router({
6274
6309
  * which clipboard method (if any) succeeded — caller decides whether to send
6275
6310
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
6276
6311
  */
6277
- pasteImage: protectedProcedure.input(z26.object({
6278
- sessionId: z26.string().max(128).optional(),
6279
- mimeType: z26.string().max(64),
6280
- base64: z26.string().max(15e6)
6312
+ pasteImage: protectedProcedure.input(z27.object({
6313
+ sessionId: z27.string().max(128).optional(),
6314
+ mimeType: z27.string().max(64),
6315
+ base64: z27.string().max(15e6)
6281
6316
  })).mutation(async ({ input }) => {
6282
6317
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
6283
6318
  return res;
6284
6319
  }),
6285
6320
  /** Resize a PTY spawn. */
6286
- resizePty: protectedProcedure.input(z26.object({
6287
- spawnId: z26.string().max(128),
6288
- cols: z26.number().int().min(1).max(1e3),
6289
- rows: z26.number().int().min(1).max(1e3)
6321
+ resizePty: protectedProcedure.input(z27.object({
6322
+ spawnId: z27.string().max(128),
6323
+ cols: z27.number().int().min(1).max(1e3),
6324
+ rows: z27.number().int().min(1).max(1e3)
6290
6325
  })).mutation(({ input }) => {
6291
6326
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
6292
6327
  return { ok };
6293
6328
  }),
6294
6329
  /** Kill a running AI spawn. */
6295
- kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6330
+ kill: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6296
6331
  const killed = aiSpawnManager.kill(input.spawnId);
6297
6332
  return { ok: killed };
6298
6333
  }),
@@ -6301,23 +6336,23 @@ var aiRouter = router({
6301
6336
  return aiSpawnManager.list();
6302
6337
  }),
6303
6338
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
6304
- ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6339
+ ack: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6305
6340
  const acked = aiSpawnManager.ack(input.spawnId);
6306
6341
  return { ok: acked };
6307
6342
  }),
6308
6343
  /** Forward a JSON-RPC request to the local codex app-server. */
6309
- codexRequest: protectedProcedure.input(z26.object({
6310
- method: z26.string().max(256),
6311
- params: z26.record(z26.string(), z26.unknown()).default({}),
6312
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
6344
+ codexRequest: protectedProcedure.input(z27.object({
6345
+ method: z27.string().max(256),
6346
+ params: z27.record(z27.string(), z27.unknown()).default({}),
6347
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional()
6313
6348
  })).mutation(async ({ input }) => {
6314
6349
  await codexAppServerManager.ensureConnected(input.env);
6315
6350
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
6316
6351
  return { result };
6317
6352
  }),
6318
6353
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6319
- codexNotifications: protectedProcedure.input(z26.object({
6320
- threadId: z26.string().max(256).optional()
6354
+ codexNotifications: protectedProcedure.input(z27.object({
6355
+ threadId: z27.string().max(256).optional()
6321
6356
  }).default({})).subscription(async function* ({ input, signal }) {
6322
6357
  await codexAppServerManager.ensureConnected();
6323
6358
  const queue = [];
@@ -6354,13 +6389,13 @@ var aiRouter = router({
6354
6389
  });
6355
6390
 
6356
6391
  // src/trpc/routers/wiki.ts
6357
- import { z as z27 } from "zod";
6392
+ import { z as z28 } from "zod";
6358
6393
  import { TRPCError as TRPCError6 } from "@trpc/server";
6359
6394
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6360
6395
  import { dirname as dirname2 } from "path";
6361
6396
  import { resolve as resolvePath3, join as join5, relative, sep } from "path";
6362
- var CWD_SCHEMA2 = z27.string().min(1).max(4096);
6363
- var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6397
+ var CWD_SCHEMA2 = z28.string().min(1).max(4096);
6398
+ var REL_PATH_SCHEMA = z28.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6364
6399
  message: "Path must be a relative path without traversal"
6365
6400
  });
6366
6401
  var MAX_FILES = 500;
@@ -6380,9 +6415,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6380
6415
  "target",
6381
6416
  "out"
6382
6417
  ]);
6383
- var RepoEntrySchema = z27.lazy(() => z27.union([
6384
- z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
6385
- z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
6418
+ var RepoEntrySchema = z28.lazy(() => z28.union([
6419
+ z28.object({ type: z28.literal("file"), name: z28.string(), path: z28.string() }),
6420
+ z28.object({ type: z28.literal("dir"), name: z28.string(), path: z28.string(), children: z28.array(RepoEntrySchema) })
6386
6421
  ]));
6387
6422
  async function walkMarkdown(root, dir, depth, counter) {
6388
6423
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6452,13 +6487,13 @@ async function resolveRoot(cwd) {
6452
6487
  }
6453
6488
  }
6454
6489
  var wikiRouter = router({
6455
- listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6490
+ listRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6456
6491
  const root = await resolveRoot(input.cwd);
6457
6492
  const counter = { n: 0 };
6458
6493
  const entries = await walkMarkdown(root, root, 0, counter);
6459
6494
  return { root, entries, truncated: counter.n >= MAX_FILES };
6460
6495
  }),
6461
- readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6496
+ readRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6462
6497
  if (!/\.(md|markdown)$/i.test(input.path)) {
6463
6498
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6464
6499
  }
@@ -6484,10 +6519,10 @@ var wikiRouter = router({
6484
6519
  const content = await readFile2(realTarget, "utf-8");
6485
6520
  return { path: input.path, content };
6486
6521
  }),
6487
- writeMarkdown: protectedProcedure.input(z27.object({
6522
+ writeMarkdown: protectedProcedure.input(z28.object({
6488
6523
  cwd: CWD_SCHEMA2,
6489
6524
  path: REL_PATH_SCHEMA,
6490
- content: z27.string().max(5e6)
6525
+ content: z28.string().max(5e6)
6491
6526
  })).mutation(async ({ input }) => {
6492
6527
  if (!/\.(md|markdown)$/i.test(input.path)) {
6493
6528
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6498,7 +6533,7 @@ var wikiRouter = router({
6498
6533
  await writeFile6(target, input.content, "utf-8");
6499
6534
  return { path: input.path, ok: true };
6500
6535
  }),
6501
- createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6536
+ createFile: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6502
6537
  if (!/\.(md|markdown)$/i.test(input.path)) {
6503
6538
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6504
6539
  }
@@ -6514,13 +6549,13 @@ var wikiRouter = router({
6514
6549
  await writeFile6(target, "", "utf-8");
6515
6550
  return { path: input.path, ok: true };
6516
6551
  }),
6517
- createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6552
+ createDir: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6518
6553
  const root = await resolveRoot(input.cwd);
6519
6554
  const target = await resolveSafePath(root, input.path, false);
6520
6555
  await mkdir6(target, { recursive: true });
6521
6556
  return { path: input.path, ok: true };
6522
6557
  }),
6523
- renamePath: protectedProcedure.input(z27.object({
6558
+ renamePath: protectedProcedure.input(z28.object({
6524
6559
  cwd: CWD_SCHEMA2,
6525
6560
  fromPath: REL_PATH_SCHEMA,
6526
6561
  toPath: REL_PATH_SCHEMA
@@ -6538,14 +6573,14 @@ var wikiRouter = router({
6538
6573
  await rename2(from, to);
6539
6574
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6540
6575
  }),
6541
- ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6576
+ ensureRoot: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6542
6577
  const expanded = expandEnvVar(input.cwd);
6543
6578
  const abs = resolvePath3(expanded);
6544
6579
  await mkdir6(abs, { recursive: true });
6545
6580
  const root = await realpath(abs);
6546
6581
  return { root, ok: true };
6547
6582
  }),
6548
- deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6583
+ deletePath: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6549
6584
  const root = await resolveRoot(input.cwd);
6550
6585
  const target = await resolveSafePath(root, input.path, true);
6551
6586
  if (target === root) {