@runeya/runeya 2.0.70 → 2.0.72

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 (332) hide show
  1. package/agent/index.js +260 -164
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-YDLSYZE3.js +7 -0
  4. package/{chunk-YSJ6OJGN.js → chunk-HPYBAUAH.js} +409 -18
  5. package/chunk-HPYBAUAH.js.map +1 -0
  6. package/index.js +3 -2
  7. package/index.js.map +1 -1
  8. package/package.json +1 -1
  9. package/{src-6WVQ2FQV.js → src-53OQNM27.js} +735 -633
  10. package/src-53OQNM27.js.map +1 -0
  11. package/web/assets/AgentScalarChatInterface.vue-DdIfThmp.js +13 -0
  12. package/web/assets/AgentTerminalPage-BD2w4XRc.css +1 -0
  13. package/web/assets/AgentTerminalPage-v9fFc2Kd.js +1 -0
  14. package/web/assets/AiChatPage-BvrKlLxc.js +1 -0
  15. package/web/assets/AppLayout-CLzy-QOZ.js +1 -0
  16. package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
  17. package/web/assets/AuditPage-DgJIcr0c.js +1 -0
  18. package/web/assets/CloudAccountPage-CoJV3YCA.js +1 -0
  19. package/web/assets/CloudAccountPage-DGtKCmXL.js +1 -0
  20. package/web/assets/CloudMessagingPage-Bql34zJU.js +2 -0
  21. package/web/assets/DashboardPage-BSvJxrcT.js +1 -0
  22. package/web/assets/DirectoryPickerDialog-BfLLfUQy.js +1 -0
  23. package/web/assets/{EditorIcon-DUDLTmUd.js → EditorIcon-BbilRWLq.js} +2 -2
  24. package/web/assets/EnvironmentForm-BIHXK18r.js +108 -0
  25. package/web/assets/EnvironmentFormPage-oLAwLJ1b.js +1 -0
  26. package/web/assets/EnvironmentListPage-tJfB0q_E.js +1 -0
  27. package/web/assets/KanbanBoardPage-DpyYe6jx.js +4 -0
  28. package/web/assets/KanbanListPage-DjXWjWgU.js +1 -0
  29. package/web/assets/LaunchProjectPage-Bqgsa2z1.js +1 -0
  30. package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
  31. package/web/assets/LaunchServicesPage-BCNDSuuN.js +1 -0
  32. package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
  33. package/web/assets/LogViewer-gTNzyao0.js +3 -0
  34. package/web/assets/OrgKeyPrompt-BdNV_cve.js +1 -0
  35. package/web/assets/{ProcessControls-DMxvJmDe.js → ProcessControls-BzMrd-2c.js} +1 -1
  36. package/web/assets/ProcessDetailPage-Rg5zyPYJ.js +1 -0
  37. package/web/assets/{ProcessMetrics-DK4Dgdb0.js → ProcessMetrics-hZWAa3gi.js} +2 -2
  38. package/web/assets/ProjectDetailPage-NbxG6AIr.js +1 -0
  39. package/web/assets/ProjectListPage-COMYMVbr.js +1 -0
  40. package/web/assets/RandomJobTestPage-DTK2RLln.js +2 -0
  41. package/web/assets/ScenarioEditorPage-DIx_Nzbh.js +14 -0
  42. package/web/assets/SendToChatDialog-BAalryU3.js +1 -0
  43. package/web/assets/ServiceControlsBar-CgR8yFZb.js +1 -0
  44. package/web/assets/ServiceDetailPage-Cvqftndf.js +2 -0
  45. package/web/assets/ServiceFormPage-CGgCwNM3.js +1 -0
  46. package/web/assets/{SettingsPage-uCS5lY2z.css → SettingsPage-ClUsbLPy.css} +1 -1
  47. package/web/assets/SettingsPage-Dx5xoAS7.js +2063 -0
  48. package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
  49. package/web/assets/UnlockPage-Dlp8kXD-.js +1 -0
  50. package/web/assets/VariablesTable-Dr1C6hg4.js +1 -0
  51. package/web/assets/VaultMigrationPage-1zZCTKgS.js +1 -0
  52. package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
  53. package/web/assets/VersionBadge-BiLjqi8I.js +1 -0
  54. package/web/assets/WikiPage-B51w0xOX.js +1 -0
  55. package/web/assets/WikiView-CGQrkGH4.js +1 -0
  56. package/web/assets/add-scalar-classes-ChVyhgpT.js +387 -0
  57. package/web/assets/auth-errors-BdfA61wA.js +1 -0
  58. package/web/assets/autocomplete-wqj_ORBH.js +308 -0
  59. package/web/assets/{basic-shape-diamond.svg-CacrbinE.js → basic-shape-diamond.svg-CWwnQ30s.js} +1 -1
  60. package/web/assets/{basic-shape-hexagon.svg-GGJ54oyX.js → basic-shape-hexagon.svg-C9JMDUIK.js} +1 -1
  61. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CuWfwdJM.js → basic-shape-primary-circle-ellipse-round.svg-Do0Ewbp-.js} +1 -1
  62. package/web/assets/{basic-shape-primary-square-rectangle.svg-C2Bewjip.js → basic-shape-primary-square-rectangle.svg-CRq767cD.js} +1 -1
  63. package/web/assets/{basic-shape-shield.svg-DNtg0KuJ.js → basic-shape-shield.svg-BuxJBs70.js} +1 -1
  64. package/web/assets/{browser-XO2fm4BX.js → browser-BEEW2obM.js} +1 -1
  65. package/web/assets/{browser-5NN8ieli.js → browser-BhZAIVa8.js} +1 -1
  66. package/web/assets/browser-DNbnH79q.js +6 -0
  67. package/web/assets/card-C1iS2wAN.js +32 -0
  68. package/web/assets/{checkbox-iq9mU5eP.js → checkbox-CCU9xze9.js} +3 -3
  69. package/web/assets/{chip-BsccUnHb.js → chip-DsJBorBp.js} +2 -2
  70. package/web/assets/client-BFK39Zab.js +24 -0
  71. package/web/assets/cloud-chat.store-D39vo5xT.js +1 -0
  72. package/web/assets/cloud-session-B7G8xhKC.js +1 -0
  73. package/web/assets/column-CPU5Jg0n.js +907 -0
  74. package/web/assets/{computer-device-desktop-monitor.svg-DSwpF_ss.js → computer-device-desktop-monitor.svg-XWEWhL0y.js} +1 -1
  75. package/web/assets/{computer-device-desktop.svg-Caj_PZBV.js → computer-device-desktop.svg-COkZClBv.js} +1 -1
  76. package/web/assets/{computer-device-laptop.svg-Bv3ienI_.js → computer-device-laptop.svg-C4EfJUqO.js} +1 -1
  77. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-IWlhEKx_.js → computer-device-mobile-phone-android-samsung-back.svg-Bb2_2tyI.js} +1 -1
  78. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CglQAFq2.js → computer-device-mobile-phone-android-samsung.svg-CEUhXP7K.js} +1 -1
  79. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CgjNnTTw.js → computer-device-mobile-phone-iphone-x-back.svg-B3rxizbE.js} +1 -1
  80. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CotZ-4M5.js → computer-device-mobile-phone-iphone-x.svg-BSKpZFCN.js} +1 -1
  81. package/web/assets/{computer-device-mobile-tablet-touch.svg-B2cemd61.js → computer-device-mobile-tablet-touch.svg-CZvb3YX2.js} +1 -1
  82. package/web/assets/{computer-device-mobile-tablet.svg-8nPVs4u_.js → computer-device-mobile-tablet.svg-BM4_YZYi.js} +1 -1
  83. package/web/assets/{computer-device-network-ethernet-cat6.svg-Bl56Qw4v.js → computer-device-network-ethernet-cat6.svg-CK0v-Rjf.js} +1 -1
  84. package/web/assets/{computer-device-network-lan-www.svg-C_x6Rf8N.js → computer-device-network-lan-www.svg-DvhO71Lq.js} +1 -1
  85. package/web/assets/{computer-device-network-wifi-connection.svg-oz6dsDQB.js → computer-device-network-wifi-connection.svg--olUYsgv.js} +1 -1
  86. package/web/assets/{computer-device-network-wifi-router.svg-BciHU6Nj.js → computer-device-network-wifi-router.svg-D5HKSWTi.js} +1 -1
  87. package/web/assets/{cssMode-DSX5tYcm.js → cssMode-CTjKNOiX.js} +1 -1
  88. package/web/assets/{divider-DnPOdDs3.js → divider-VFAPax5_.js} +2 -2
  89. package/web/assets/docx-preview-gNYLz3FX.js +21 -0
  90. package/web/assets/{ecology-science-erlenmeyer-flask.svg-BzQP6y9L.js → ecology-science-erlenmeyer-flask.svg-THkDG-tj.js} +1 -1
  91. package/web/assets/{fieldset-D9lkV70l.js → fieldset-DZGy449H.js} +2 -2
  92. package/web/assets/{freemarker2-D9yXX9Vw.js → freemarker2-CNSvFpVF.js} +1 -1
  93. package/web/assets/{handlebars-BmcjEksL.js → handlebars-BeRu48NI.js} +1 -1
  94. package/web/assets/{html-BQF9vZLL.js → html-DrTiGPjE.js} +1 -1
  95. package/web/assets/{htmlMode-DxSRpgHE.js → htmlMode-DpbDpbjK.js} +1 -1
  96. package/web/assets/{image-flash-lightning.svg-DQX09uxo.js → image-flash-lightning.svg-DrkyfdIV.js} +1 -1
  97. package/web/assets/{image-picture-flower.svg-CUBdrnoc.js → image-picture-flower.svg-BqFj1xcR.js} +1 -1
  98. package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
  99. package/web/assets/{index-enuBsJBa.js → index-y5bguEQB.js} +299 -299
  100. package/web/assets/{interface-alert-exclamation-diamond.svg-DXQdQSvN.js → interface-alert-exclamation-diamond.svg-B40BfW6d.js} +1 -1
  101. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BoCeNIlU.js → interface-alert-exclamation-triangle-warning.svg-DeIlksL4.js} +1 -1
  102. package/web/assets/{interface-alert-information-circle.svg-BCA57JL2.js → interface-alert-information-circle.svg-SwVdV-Z6.js} +1 -1
  103. package/web/assets/{interface-award-crown.svg-B1hTlsb0.js → interface-award-crown.svg-DZHf0EHC.js} +1 -1
  104. package/web/assets/{interface-bookmark.svg-zf3cIGKM.js → interface-bookmark-tag.svg-CiaV2Cjo.js} +1 -1
  105. package/web/assets/{interface-bookmark-tag.svg-AosfQ0Ip.js → interface-bookmark.svg-DBEqa-8W.js} +1 -1
  106. package/web/assets/{interface-calendar-date-one.svg-D58WqPie.js → interface-calendar-date-one.svg-C_afKyyz.js} +1 -1
  107. package/web/assets/{interface-content-book-open-pages.svg-B74HWMlw.js → interface-content-book-open-pages.svg-D5d9ilSu.js} +1 -1
  108. package/web/assets/{interface-content-book-page.svg-C2QWk62-.js → interface-content-book-page.svg-B6hlaLP5.js} +1 -1
  109. package/web/assets/{interface-content-file.svg-xKu0qAOQ.js → interface-content-file.svg-COWMwejF.js} +1 -1
  110. package/web/assets/interface-content-folder.svg-BCIUgpD4.js +1 -0
  111. package/web/assets/{interface-content-folder.svg-ZkrY9WkQ.js → interface-content-folder.svg-K7DTqQH-.js} +1 -1
  112. package/web/assets/{interface-copy-clipboard.svg-BEkNG3vO.js → interface-copy-clipboard.svg-BFQ6eajI.js} +1 -1
  113. package/web/assets/{interface-edit-attachment.svg-5ztQ3WTq.js → interface-edit-attachment.svg-B-LsB4cM.js} +1 -1
  114. package/web/assets/{interface-edit-binocular.svg-CC9U1Gnc.js → interface-edit-binocular.svg-CnVjKyrn.js} +1 -1
  115. package/web/assets/{interface-edit-magic-wand.svg-CPl6ZoE9.js → interface-edit-magic-wand.svg-CUY6vVJT.js} +1 -1
  116. package/web/assets/{interface-edit-tool-paint-roller.svg-B85t7jG2.js → interface-edit-tool-paint-roller.svg-B1tSdIxN.js} +1 -1
  117. package/web/assets/{interface-edit-tool-pencil.svg-BSTdqWUg.js → interface-edit-tool-pencil.svg-BHFULT75.js} +1 -1
  118. package/web/assets/{interface-favorite-award.svg-DbPr_WKt.js → interface-favorite-award.svg-CcOLoF8I.js} +1 -1
  119. package/web/assets/{interface-favorite-flag.svg-CgKYXc7k.js → interface-favorite-flag.svg-CAW6LmLW.js} +1 -1
  120. package/web/assets/{interface-favorite-heart.svg-DfnXyJMg.js → interface-favorite-heart.svg-BEz4zlNs.js} +1 -1
  121. package/web/assets/{interface-favorite-star.svg-0sT7jJMK.js → interface-favorite-star.svg-DKFuvYge.js} +1 -1
  122. package/web/assets/{interface-favorite-stars-sparkles.svg-BcM2EXgn.js → interface-favorite-stars-sparkles.svg-BfzccoPz.js} +1 -1
  123. package/web/assets/{interface-hierarchy-flowchart.svg-BM62WcKt.js → interface-hierarchy-flowchart.svg-BT8QX161.js} +1 -1
  124. package/web/assets/{interface-home-house.svg-KqP7iMC4.js → interface-home-house.svg-B264pTPi.js} +1 -1
  125. package/web/assets/{interface-hyperlink.svg-DBKFbihR.js → interface-hyperlink.svg-DhUgNKkr.js} +1 -1
  126. package/web/assets/{interface-lighting-brightness.svg-DTkCS7PY.js → interface-lighting-brightness.svg-CPKb40uB.js} +1 -1
  127. package/web/assets/{interface-lock-closed.svg-Div5xlvI.js → interface-lock-closed.svg-CvXhgCtt.js} +1 -1
  128. package/web/assets/{interface-lock-open-unlock.svg-Du5L_iMV.js → interface-lock-open-unlock.svg-B0PMKRhP.js} +1 -1
  129. package/web/assets/{interface-login-key.svg-28TYVVzH.js → interface-login-key.svg-DJUm3vhg.js} +1 -1
  130. package/web/assets/{interface-search.svg-BS_owhIG.js → interface-search.svg-ByW98ez_.js} +1 -1
  131. package/web/assets/{interface-setting-cog.svg-afYc0TQv.js → interface-setting-cog.svg-DYOmJ9It.js} +1 -1
  132. package/web/assets/{interface-share-megaphone-bullhorn.svg-BnW8HhjG.js → interface-share-megaphone-bullhorn.svg-YOCUHa3i.js} +1 -1
  133. package/web/assets/{interface-share-rocket.svg-DvX_9178.js → interface-share-rocket.svg-C5kj5dSu.js} +1 -1
  134. package/web/assets/{interface-share-satellite.svg-B4nQqv6w.js → interface-share-satellite.svg-C0svPxG6.js} +1 -1
  135. package/web/assets/{interface-share-space-ship.svg-Ciol-6JO.js → interface-share-space-ship.svg-8Nw02n1Q.js} +1 -1
  136. package/web/assets/{interface-share.svg-COm1OVr8.js → interface-share.svg-eDW294tn.js} +1 -1
  137. package/web/assets/{interface-signal-square.svg-DXuF6sqG.js → interface-signal-square.svg-CxB5mcJQ.js} +1 -1
  138. package/web/assets/{interface-time-clock-circle.svg-CWLe4mcs.js → interface-time-clock-circle.svg-CEnlQi79.js} +1 -1
  139. package/web/assets/{interface-time-hour-glass.svg-DXz9wBiv.js → interface-time-hour-glass.svg-qL3_s19Q.js} +1 -1
  140. package/web/assets/{interface-users-multiple.svg-CXOw1J5l.js → interface-users-multiple.svg-Cz2iA33z.js} +1 -1
  141. package/web/assets/{interface-weather-moon.svg-B9H9xib3.js → interface-weather-moon.svg-BoT9GUK_.js} +1 -1
  142. package/web/assets/{javascript-BY1URXQK.js → javascript-DWdA0-HW.js} +1 -1
  143. package/web/assets/{jsonMode-CxipJdzJ.js → jsonMode-DxGrVlm0.js} +2 -2
  144. package/web/assets/{liquid-BbqI_ezD.js → liquid-COqLk0mR.js} +1 -1
  145. package/web/assets/{lspLanguageFeatures-BrbDxmfl.js → lspLanguageFeatures--0hj1ZV4.js} +3 -3
  146. package/web/assets/{mail-chat-bubble-square.svg-CAlBGAlW.js → mail-chat-bubble-square.svg-eiKzTBOv.js} +1 -1
  147. package/web/assets/{mail-send-email-paper-airplane.svg-BoNc-FEY.js → mail-send-email-paper-airplane.svg-CCI77Gk8.js} +1 -1
  148. package/web/assets/{mail-send-envelope.svg-CnMOSib5.js → mail-send-envelope.svg-ChM5k_N7.js} +1 -1
  149. package/web/assets/{mdx-C4PcQ_oe.js → mdx-CwXNREAO.js} +1 -1
  150. package/web/assets/{message-BWsbEnoG.js → message-CSxReshg.js} +2 -2
  151. package/web/assets/{minus-BpDIA3FO.js → minus-Cg0lH8Mn.js} +2 -2
  152. package/web/assets/modal-D3dkRJqD.js +1 -0
  153. package/web/assets/modal-ix4Amfqv.js +5 -0
  154. package/web/assets/{money-cashier-receipt.svg-DZQ9mrBZ.js → money-cashier-receipt.svg-WMIW7vxg.js} +1 -1
  155. package/web/assets/{money-currency-dollar-pay.svg-BCaw-GeJ.js → money-currency-dollar-pay.svg-qTcGSVX2.js} +1 -1
  156. package/web/assets/{money-graph-arrow-increase.svg-DZXh-i2p.js → money-graph-arrow-increase.svg-B-TQKOW-.js} +1 -1
  157. package/web/assets/{money-graph-bar-chart-increase.svg-j_1tUlGM.js → money-graph-bar-chart-increase.svg-CWCIjQcI.js} +1 -1
  158. package/web/assets/multiselect-C7U34xql.js +251 -0
  159. package/web/assets/{nature-ecology-leaf.svg-bajA57tM.js → nature-ecology-leaf.svg-CL26IBv2.js} +1 -1
  160. package/web/assets/{password-W9W3PSE2.js → password-ZOY0bqV1.js} +4 -4
  161. package/web/assets/{phone-telephone.svg-DD5MGHqV.js → phone-telephone.svg-BhzxDLVX.js} +1 -1
  162. package/web/assets/{plus-RuIcofM_.js → plus-DsBv8bgd.js} +6 -6
  163. package/web/assets/process.store-DPp7dk63.js +1 -0
  164. package/web/assets/{programming-bug.svg-CjtqBc8Z.js → programming-bug.svg-CBNm3E3F.js} +1 -1
  165. package/web/assets/{programming-cloud.svg-BXQ_h3dK.js → programming-cloud.svg-BrVRbl9B.js} +1 -1
  166. package/web/assets/{programming-computer-database-server.svg-D6TzOHsK.js → programming-computer-database-server.svg-LQp6n-du.js} +1 -1
  167. package/web/assets/{programming-computer-database.svg-Dmdh0lIx.js → programming-computer-database.svg-CSbhcIMU.js} +1 -1
  168. package/web/assets/{programming-module-four-layout.svg-CtGhpLhO.js → programming-module-four-layout.svg-DYEAcL2j.js} +1 -1
  169. package/web/assets/{programming-module-three.svg-hz_w8W7I.js → programming-module-three.svg-CCQXCU-e.js} +1 -1
  170. package/web/assets/{programming-module.svg-oDT_fQLn.js → programming-module.svg-Chrmf7k4.js} +1 -1
  171. package/web/assets/{programming-script-code.svg-CxHHTsaU.js → programming-script-code.svg-DPhhp3IW.js} +1 -1
  172. package/web/assets/{python-DH-AyaLR.js → python-B7ePhfsS.js} +1 -1
  173. package/web/assets/{razor-BUpT1gRX.js → razor-ChpzroOv.js} +1 -1
  174. package/web/assets/router-Df972Ysi.js +1 -0
  175. package/web/assets/settings-scope-CC3oHq2H.js +1 -0
  176. package/web/assets/settings.store-B31_cRNl.js +1 -0
  177. package/web/assets/{shopping-cart.svg-D1eK38-E.js → shopping-cart.svg-bmefzlOu.js} +1 -1
  178. package/web/assets/{shopping-gift-present.svg-CxSfFNAS.js → shopping-gift-present.svg-aUOleva0.js} +1 -1
  179. package/web/assets/{shopping-shipping-box-parcel-package.svg-M5Njo2qJ.js → shopping-shipping-box-parcel-package.svg-BLsRP4dg.js} +1 -1
  180. package/web/assets/{src-CEK4EPEJ.js → src-BPSr9dU2.js} +34 -34
  181. package/web/assets/src-Dt37H-VN.js +1 -0
  182. package/web/assets/tabpanel-DZQ_g__B.js +150 -0
  183. package/web/assets/{tag-new-circle.svg-v_Go3fcT.js → tag-new-circle.svg-kTMMMv-0.js} +1 -1
  184. package/web/assets/{toggleswitch-C4A0_850.js → toggleswitch-BWXDXl37.js} +2 -2
  185. package/web/assets/{travel-map-earth-globe.svg-Db2uRb3M.js → travel-map-earth-globe.svg-BdQmz8_b.js} +1 -1
  186. package/web/assets/trpc-aSS7b3jh.js +1 -0
  187. package/web/assets/{tsMode-CXB5XugS.js → tsMode-arHIUQbZ.js} +6 -6
  188. package/web/assets/{typescript-CHJkC9r6.js → typescript-Ds9kgbPd.js} +1 -1
  189. package/web/assets/useAiChatDrawer-C1xrMtLl.js +1 -0
  190. package/web/assets/useCloudOrg-BdpqnN19.css +1 -0
  191. package/web/assets/useCloudOrg-BexK510D.js +97 -0
  192. package/web/assets/{useProjectCatalog-DDm0I6sX.js → useProjectCatalog-BbSaTBSS.js} +1 -1
  193. package/web/assets/{xml-DB4EKWC9.js → xml-CO56TgpZ.js} +1 -1
  194. package/web/assets/{yaml-CqvLyuow.js → yaml-DueFV2-x.js} +1 -1
  195. package/web/index.html +2 -2
  196. package/agent-manager-74WZPMVQ.js +0 -7
  197. package/chunk-YSJ6OJGN.js.map +0 -1
  198. package/src-6WVQ2FQV.js.map +0 -1
  199. package/web/assets/AgentScalarChatInterface.vue-vU3z8Etw.js +0 -13
  200. package/web/assets/AgentTerminalPage-A8GIX6dZ.css +0 -1
  201. package/web/assets/AgentTerminalPage-DE3GUoXn.js +0 -1
  202. package/web/assets/AiChatPage-BIJczUeS.js +0 -1
  203. package/web/assets/AppLayout-CvkK_Pp3.js +0 -1
  204. package/web/assets/AuditPage-BZuVgUf1.js +0 -1
  205. package/web/assets/CloudAccountPage-B__2SGAw.js +0 -1
  206. package/web/assets/CloudAccountPage-MSWkg9Ke.js +0 -1
  207. package/web/assets/CloudMessagingPage-C5pD6Qsd.js +0 -2
  208. package/web/assets/DashboardPage-66q5K841.js +0 -1
  209. package/web/assets/DirectoryPickerDialog-wZYtGEZ9.js +0 -1
  210. package/web/assets/EnvironmentForm-C0Q1pRdW.js +0 -108
  211. package/web/assets/EnvironmentFormPage-LO-mwupn.js +0 -1
  212. package/web/assets/EnvironmentListPage-CvknyN3O.js +0 -1
  213. package/web/assets/KanbanBoardPage-DUsAyowy.js +0 -4
  214. package/web/assets/KanbanListPage-9RBCauSd.js +0 -1
  215. package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
  216. package/web/assets/LaunchProjectPage-obaNCuEY.js +0 -1
  217. package/web/assets/LaunchServicesPage-CiWzQIyC.js +0 -1
  218. package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
  219. package/web/assets/LogViewer-BiSD_TNt.js +0 -3
  220. package/web/assets/OrgKeyPrompt-zhMl_nTd.js +0 -1
  221. package/web/assets/ProcessDetailPage-CsCqQh2V.js +0 -1
  222. package/web/assets/ProjectDetailPage-B0vJySvH.js +0 -1
  223. package/web/assets/ProjectListPage-srxBmrbO.js +0 -1
  224. package/web/assets/RandomJobTestPage-jGfX-6W9.js +0 -2
  225. package/web/assets/ScenarioEditorPage-CxLy6gs7.js +0 -14
  226. package/web/assets/SendToChatDialog-AHkuFQjt.js +0 -1
  227. package/web/assets/ServiceControlsBar-C8P9_qWK.js +0 -1
  228. package/web/assets/ServiceDetailPage-DTBpQegV.js +0 -2
  229. package/web/assets/ServiceFormPage-CsPSMWdD.js +0 -1
  230. package/web/assets/SettingsPage-CmtRn6VJ.js +0 -2063
  231. package/web/assets/UnlockPage-Bkp_hR-F.js +0 -1
  232. package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
  233. package/web/assets/VariablesTable-jo61MhbL.js +0 -1
  234. package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
  235. package/web/assets/VaultMigrationPage-D-Dxg5xH.js +0 -1
  236. package/web/assets/VersionBadge-CwNZLgqN.js +0 -1
  237. package/web/assets/WikiPage-DZLKTPi3.js +0 -1
  238. package/web/assets/WikiView-BpJECJ2Y.js +0 -1
  239. package/web/assets/add-scalar-classes-CqLAxAGv.js +0 -387
  240. package/web/assets/auth-errors-BOjTx5eo.js +0 -1
  241. package/web/assets/autocomplete-CrMQ2sCk.js +0 -308
  242. package/web/assets/card-CjcU4SfX.js +0 -32
  243. package/web/assets/client-B9UJRQa-.js +0 -24
  244. package/web/assets/cloud-chat.store-Dw2lzuBY.js +0 -1
  245. package/web/assets/cloud-session-DIhbWyP5.js +0 -1
  246. package/web/assets/column-BGKYk6b6.js +0 -907
  247. package/web/assets/interface-content-folder.svg-DjEfXjEF.js +0 -1
  248. package/web/assets/modal-DZYAJM4x.js +0 -5
  249. package/web/assets/modal-Fe2dzlxp.js +0 -1
  250. package/web/assets/multiselect-CmjxW2sW.js +0 -251
  251. package/web/assets/process.store-COWqXNUm.js +0 -1
  252. package/web/assets/router-BIJ4goD-.js +0 -1
  253. package/web/assets/settings-scope-DGzA7Be-.js +0 -1
  254. package/web/assets/settings.store-Dj2nbYYG.js +0 -1
  255. package/web/assets/src-BTWvqafq.js +0 -1
  256. package/web/assets/tabpanel-CWwOXePg.js +0 -150
  257. package/web/assets/trpc-DfyQNjZd.js +0 -1
  258. package/web/assets/useAiChatDrawer-Cuhlc2BI.js +0 -1
  259. package/web/assets/useCloudOrg-DYOv1Oak.js +0 -93
  260. package/web/assets/useCloudOrg-Dc6yRgro.css +0 -1
  261. /package/{agent-manager-74WZPMVQ.js.map → agent-manager-YDLSYZE3.js.map} +0 -0
  262. /package/web/assets/{abap-Q7FyqTce.js → abap-BvxTqXT2.js} +0 -0
  263. /package/web/assets/{apex-DBNDq2a_.js → apex-CIPCCkBr.js} +0 -0
  264. /package/web/assets/{azcli-BHW8ozYN.js → azcli-Rs0NIwkA.js} +0 -0
  265. /package/web/assets/{bat-BL-_3Nfo.js → bat-BxAhM6gR.js} +0 -0
  266. /package/web/assets/{bicep-DR2vgumW.js → bicep-oV_ehPcG.js} +0 -0
  267. /package/web/assets/{cameligo-BCjoEAZU.js → cameligo-CJLaUyQs.js} +0 -0
  268. /package/web/assets/{clojure-zw1Irdul.js → clojure-CjvMureh.js} +0 -0
  269. /package/web/assets/{coffee-BdEjkiiW.js → coffee-motWC5XQ.js} +0 -0
  270. /package/web/assets/{cpp-DKUlBIAG.js → cpp-DiWIfYNM.js} +0 -0
  271. /package/web/assets/{csharp-BsNC4zVq.js → csharp-GBlGBeai.js} +0 -0
  272. /package/web/assets/{csp-X4Chv5_9.js → csp-tSyK5eO1.js} +0 -0
  273. /package/web/assets/{css-Dh0Dlycs.js → css-BkFK9HG_.js} +0 -0
  274. /package/web/assets/{cypher-BL_DRjGX.js → cypher-Bcp8PXr2.js} +0 -0
  275. /package/web/assets/{dart-DaM4j487.js → dart-uz9Rxe0M.js} +0 -0
  276. /package/web/assets/{dockerfile-Df5WJXAt.js → dockerfile-iJizx3Zp.js} +0 -0
  277. /package/web/assets/{ecl-BjUo3uTs.js → ecl-BalaS36Z.js} +0 -0
  278. /package/web/assets/{elixir-DrLHYSxt.js → elixir-D6CLrLGy.js} +0 -0
  279. /package/web/assets/{flow9-DKiuX7rg.js → flow9-CFt3-vVY.js} +0 -0
  280. /package/web/assets/{fsharp-CAN78557.js → fsharp-DGa7raxa.js} +0 -0
  281. /package/web/assets/{go-DGjr9vA5.js → go-wlqInk4z.js} +0 -0
  282. /package/web/assets/{graphql-CcoU3Cj2.js → graphql-CP1guigM.js} +0 -0
  283. /package/web/assets/{hcl-udfyCcTm.js → hcl-CK0UkKD0.js} +0 -0
  284. /package/web/assets/{ini-BVbXatjh.js → ini-Ch56nrUj.js} +0 -0
  285. /package/web/assets/{java-Drpmh61g.js → java-C9_WIayl.js} +0 -0
  286. /package/web/assets/{julia-asFGk-ZV.js → julia-Can2_mhR.js} +0 -0
  287. /package/web/assets/{kotlin-HmkKz1TT.js → kotlin-DUvGf_BX.js} +0 -0
  288. /package/web/assets/{less-C5i2m2Dn.js → less-DoTbG-rc.js} +0 -0
  289. /package/web/assets/{lexon-B3Xh2kL6.js → lexon-BFMO2_kL.js} +0 -0
  290. /package/web/assets/{lua-DnOtgOOu.js → lua-CC-QtBo7.js} +0 -0
  291. /package/web/assets/{m3-Brj4HNKq.js → m3-C51MyH5Q.js} +0 -0
  292. /package/web/assets/{markdown-C3-4Ntpz.js → markdown-CDwLHhgZ.js} +0 -0
  293. /package/web/assets/{mips-vFQKPHzn.js → mips-YuxZtPGU.js} +0 -0
  294. /package/web/assets/{msdax-D5MYLS2R.js → msdax-CJjWhmte.js} +0 -0
  295. /package/web/assets/{mysql-CRQHhUON.js → mysql-B1riwLaD.js} +0 -0
  296. /package/web/assets/{objective-c-8cZEp0HR.js → objective-c-drXT-gmc.js} +0 -0
  297. /package/web/assets/{pascal-BPn_2jro.js → pascal-KUYgrN-Z.js} +0 -0
  298. /package/web/assets/{pascaligo-L7QnU_8B.js → pascaligo-DQmQJP-r.js} +0 -0
  299. /package/web/assets/{perl-B9zSPnp3.js → perl-09XLBmCS.js} +0 -0
  300. /package/web/assets/{pgsql-DiRJukCJ.js → pgsql-BFj9IFFu.js} +0 -0
  301. /package/web/assets/{php-Dv4g8Lhr.js → php-UnC5BqwY.js} +0 -0
  302. /package/web/assets/{pla-CKAoz6vp.js → pla-BFuYrPHG.js} +0 -0
  303. /package/web/assets/{postiats-B_PYgUTS.js → postiats-n4ft3jnO.js} +0 -0
  304. /package/web/assets/{powerquery-CAagSyo-.js → powerquery-D-s-oFSc.js} +0 -0
  305. /package/web/assets/{powershell-Cj9BzLhS.js → powershell-CTboTf93.js} +0 -0
  306. /package/web/assets/{protobuf-DTRY4FFo.js → protobuf-Dt62GuJP.js} +0 -0
  307. /package/web/assets/{pug-qADGmCS8.js → pug-CEFWkUzw.js} +0 -0
  308. /package/web/assets/{qsharp-xkZT0ZOm.js → qsharp-B0DUmgPZ.js} +0 -0
  309. /package/web/assets/{r-C7wfNC2Z.js → r-BVnF0c4T.js} +0 -0
  310. /package/web/assets/{redis-BoccK80D.js → redis-DLl3KQXi.js} +0 -0
  311. /package/web/assets/{redshift-EL8PjTts.js → redshift-cif1I7h1.js} +0 -0
  312. /package/web/assets/{restructuredtext-CA6rgR7C.js → restructuredtext-PNfql36m.js} +0 -0
  313. /package/web/assets/{ruby-BymrInur.js → ruby-j3jxDjUN.js} +0 -0
  314. /package/web/assets/{rust-BTbPL-fg.js → rust-BaIO-mAt.js} +0 -0
  315. /package/web/assets/{sb-BTkOICcb.js → sb-D8XNVNUQ.js} +0 -0
  316. /package/web/assets/{scala-CzaUHeQF.js → scala-DiK9Ps90.js} +0 -0
  317. /package/web/assets/{scheme-DZe2DRuY.js → scheme-DPKqXHmF.js} +0 -0
  318. /package/web/assets/{scss-D5oFt9cg.js → scss-DpMwfP2H.js} +0 -0
  319. /package/web/assets/{shell-DCkIF5jZ.js → shell-Dw9mKVg2.js} +0 -0
  320. /package/web/assets/{solidity-CfOO4gXi.js → solidity-DTxo-7fe.js} +0 -0
  321. /package/web/assets/{sophia-0-sROOHR.js → sophia-BjA3Q87y.js} +0 -0
  322. /package/web/assets/{sparql-Dzzr9hol.js → sparql-q1EpMUqb.js} +0 -0
  323. /package/web/assets/{sql-DbXHiHh_.js → sql-CjcQ4wIr.js} +0 -0
  324. /package/web/assets/{st-DEaYV8xH.js → st-AuOpxVl7.js} +0 -0
  325. /package/web/assets/{swift-BQItveav.js → swift-BUWnv6f7.js} +0 -0
  326. /package/web/assets/{systemverilog-nE6YfGlx.js → systemverilog-FhXn-3OZ.js} +0 -0
  327. /package/web/assets/{tcl-Do7Q0SM0.js → tcl-B0lqcTtS.js} +0 -0
  328. /package/web/assets/{twig-B2CLZN2j.js → twig-B0OeGPVa.js} +0 -0
  329. /package/web/assets/{typespec-r9R1AgVi.js → typespec-Bmh6VX11.js} +0 -0
  330. /package/web/assets/{uuid-CXjA27vZ.js → uuid-FpfcaBnR.js} +0 -0
  331. /package/web/assets/{vb-DGnD02qr.js → vb-bmgX6veu.js} +0 -0
  332. /package/web/assets/{wgsl-C2fD4koY.js → wgsl-FflLnFqI.js} +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 z22 } from "zod";
63
+ import { z as z23 } from "zod";
64
64
  import { TRPCError as TRPCError2 } from "@trpc/server";
65
65
 
66
66
  // src/services/process-manager.ts
@@ -1721,6 +1721,49 @@ var KanbanCardRefSchema = z19.object({
1721
1721
  commentCount: z19.number().int().nonnegative().default(0)
1722
1722
  });
1723
1723
 
1724
+ // ../../packages/shared/src/schemas/cloud-api-key.schema.ts
1725
+ import { z as z20 } from "zod";
1726
+ var CloudApiScopeSchema = z20.enum(["kanban:read", "kanban:write", "kanban:comment"]);
1727
+ var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
1728
+ var CloudApiKeySchema = z20.object({
1729
+ id: z20.string().max(128),
1730
+ organizationId: z20.string().max(128),
1731
+ name: z20.string().min(1).max(200),
1732
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1733
+ /**
1734
+ * Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
1735
+ * l'organisation ».
1736
+ *
1737
+ * `null` et `[]` ne sont pas la même chose : la liste vide n'ouvre rien, et
1738
+ * c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
1739
+ * nommait plus que lui.
1740
+ */
1741
+ boards: z20.array(z20.string().max(64)).max(200).nullable(),
1742
+ createdAt: z20.string().max(64),
1743
+ /** Dernier usage constaté, pour reconnaître une clé oubliée. */
1744
+ lastUsedAt: z20.string().max(64).nullable(),
1745
+ /** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
1746
+ createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
1747
+ /** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
1748
+ keyPreview: z20.string().max(8)
1749
+ });
1750
+ var CreatedCloudApiKeySchema = z20.object({
1751
+ key: CloudApiKeySchema,
1752
+ secret: CloudApiKeySecretSchema
1753
+ });
1754
+ var CreateCloudApiKeyInput = z20.object({
1755
+ organizationId: z20.string().min(1).max(128),
1756
+ name: z20.string().min(1).max(200),
1757
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1758
+ boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
1759
+ });
1760
+ var UpdateCloudApiKeyInput = z20.object({
1761
+ id: z20.string().min(1).max(128),
1762
+ name: z20.string().min(1).max(200).optional(),
1763
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
1764
+ boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1765
+ });
1766
+
1724
1767
  // ../../packages/shared/src/utils/crypto.ts
1725
1768
  import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
1726
1769
 
@@ -2897,7 +2940,7 @@ import { execa as execa3 } from "execa";
2897
2940
  import { homedir as homedir4 } from "os";
2898
2941
 
2899
2942
  // src/trpc/routers/config.ts
2900
- import { z as z20 } from "zod";
2943
+ import { z as z21 } from "zod";
2901
2944
 
2902
2945
  // src/services/traefik-manager.ts
2903
2946
  import { spawn, execFile as execFile2 } from "child_process";
@@ -3274,13 +3317,13 @@ function resolvePassthroughEnv() {
3274
3317
  return result;
3275
3318
  }
3276
3319
  var configRouter = router({
3277
- setPassthroughEnv: protectedProcedure.input(z20.object({
3278
- names: z20.array(
3279
- z20.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3320
+ setPassthroughEnv: protectedProcedure.input(z21.object({
3321
+ names: z21.array(
3322
+ z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3280
3323
  ).max(100),
3281
- values: z20.record(
3282
- z20.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3283
- z20.string().max(32768)
3324
+ values: z21.record(
3325
+ z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3326
+ z21.string().max(32768)
3284
3327
  ).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
3285
3328
  })).mutation(({ input }) => {
3286
3329
  passthroughEnvNames = input.names;
@@ -3317,7 +3360,7 @@ var configRouter = router({
3317
3360
  getTraefikFileTree: protectedProcedure.query(async () => {
3318
3361
  return traefikManager.getFileTree();
3319
3362
  }),
3320
- getTraefikLogs: protectedProcedure.input(z20.object({ lines: z20.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3363
+ getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3321
3364
  const logs = await traefikManager.getLogs(input.lines);
3322
3365
  return { logs };
3323
3366
  })
@@ -3509,17 +3552,17 @@ var healthChecker = new HealthChecker();
3509
3552
  import killPort from "kill-port";
3510
3553
 
3511
3554
  // src/config/env.ts
3512
- import { z as z21 } from "zod";
3513
- var EnvSchema = z21.object({
3514
- RUNEYA_AGENT_PORT: z21.coerce.number().int().min(1).max(65535).default(4001),
3515
- RUNEYA_AGENT_HOST: z21.string().default("127.0.0.1"),
3516
- PASSPHRASE_OVERRIDE: z21.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3517
- AGENT_ID: z21.string().optional(),
3555
+ import { z as z22 } from "zod";
3556
+ var EnvSchema = z22.object({
3557
+ RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
3558
+ RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
3559
+ PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3560
+ AGENT_ID: z22.string().optional(),
3518
3561
  // Set by spawner or manually for remote agents
3519
- LOG_BUFFER_SIZE: z21.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3520
- METRICS_INTERVAL: z21.coerce.number().int().positive().default(METRICS_INTERVAL),
3521
- GRACE_PERIOD: z21.coerce.number().int().positive().default(GRACE_PERIOD),
3522
- HEALTH_WS_INTERVAL: z21.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3562
+ LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3563
+ METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
3564
+ GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
3565
+ HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3523
3566
  });
3524
3567
  var env = EnvSchema.parse(process.env);
3525
3568
 
@@ -4294,7 +4337,7 @@ var processRouter = router({
4294
4337
  return processManager.listStatuses();
4295
4338
  }),
4296
4339
  /** Get a single process */
4297
- get: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(({ input }) => {
4340
+ get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4298
4341
  const status = processManager.getStatus(input.id);
4299
4342
  if (!status) {
4300
4343
  throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
@@ -4307,78 +4350,78 @@ var processRouter = router({
4307
4350
  return { id };
4308
4351
  }),
4309
4352
  /** Undeploy: stop + remove */
4310
- undeploy: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4353
+ undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4311
4354
  await processManager.undeploy(input.id);
4312
4355
  return { success: true };
4313
4356
  }),
4314
4357
  /** Update the service config for a deployed process */
4315
- updateConfig: protectedProcedure.input(z22.object({ serviceId: z22.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4358
+ updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4316
4359
  processManager.updateConfig(input.serviceId, input.config);
4317
4360
  return { success: true };
4318
4361
  }),
4319
4362
  /** Start a deployed process */
4320
- start: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4363
+ start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4321
4364
  console.log(`[agent] start service=${input.id}`);
4322
4365
  await processManager.start(input.id);
4323
4366
  return processManager.getStatus(input.id);
4324
4367
  }),
4325
4368
  /** Stop a running process */
4326
- stop: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4369
+ stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4327
4370
  console.log(`[agent] stop service=${input.id}`);
4328
4371
  await processManager.stop(input.id);
4329
4372
  return processManager.getStatus(input.id);
4330
4373
  }),
4331
4374
  /** Restart a process */
4332
- restart: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4375
+ restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4333
4376
  console.log(`[agent] restart service=${input.id}`);
4334
4377
  await processManager.restart(input.id);
4335
4378
  return processManager.getStatus(input.id);
4336
4379
  }),
4337
4380
  /** Get buffered logs for a process */
4338
- logs: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(({ input }) => {
4381
+ logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4339
4382
  const logs = processManager.getLogs(input.id);
4340
4383
  return logs;
4341
4384
  }),
4342
4385
  /** Clear buffered logs for a process */
4343
- clearLogBuffer: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(({ input }) => {
4386
+ clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
4344
4387
  processManager.clearLogBuffer(input.id);
4345
4388
  return { success: true };
4346
4389
  }),
4347
4390
  /** Execute a shortcut command and stream output into the process log */
4348
- executeShortcut: protectedProcedure.input(z22.object({ id: z22.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4391
+ executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4349
4392
  const result = await processManager.executeShortcut(input.id, input.shortcut);
4350
4393
  return result;
4351
4394
  }),
4352
4395
  /** Cancel a running shortcut command */
4353
- cancelShortcut: protectedProcedure.input(z22.object({ id: z22.string().max(128), shortcutId: z22.string().max(128) })).mutation(({ input }) => {
4396
+ cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
4354
4397
  processManager.cancelShortcut(input.id, input.shortcutId);
4355
4398
  return { success: true };
4356
4399
  }),
4357
4400
  /** Cancel a running ad-hoc command */
4358
- cancelAdHocCommand: protectedProcedure.input(z22.object({ id: z22.string().max(128), commandId: z22.string().max(128).optional() })).mutation(({ input }) => {
4401
+ cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
4359
4402
  processManager.cancelAdHocCommand(input.id, input.commandId);
4360
4403
  return { success: true };
4361
4404
  }),
4362
4405
  /** Execute an ad-hoc command and stream output into the process log */
4363
- executeAdHocCommand: protectedProcedure.input(z22.object({
4364
- id: z22.string().max(128),
4365
- command: z22.string().min(1).max(4096),
4366
- cwd: z22.string().max(4096).optional(),
4367
- commandId: z22.string().max(128).optional()
4406
+ executeAdHocCommand: protectedProcedure.input(z23.object({
4407
+ id: z23.string().max(128),
4408
+ command: z23.string().min(1).max(4096),
4409
+ cwd: z23.string().max(4096).optional(),
4410
+ commandId: z23.string().max(128).optional()
4368
4411
  })).mutation(async ({ input }) => {
4369
4412
  const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
4370
4413
  return result;
4371
4414
  }),
4372
4415
  /** List active log source types for a process */
4373
- logSources: protectedProcedure.input(z22.object({ processId: z22.string().max(128) })).query(({ input }) => {
4416
+ logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
4374
4417
  return processManager.getLogSourceTypes(input.processId);
4375
4418
  }),
4376
4419
  /** Get current metrics for a process */
4377
- metrics: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(async ({ input }) => {
4420
+ metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
4378
4421
  return processManager.getMetrics(input.id);
4379
4422
  }),
4380
4423
  /** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
4381
- onLog: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4424
+ onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4382
4425
  const queue = [];
4383
4426
  let resolve2 = null;
4384
4427
  const handler = (batch) => {
@@ -4407,7 +4450,7 @@ var processRouter = router({
4407
4450
  }
4408
4451
  }),
4409
4452
  /** Subscribe to real-time status changes */
4410
- onStatus: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4453
+ onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4411
4454
  console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
4412
4455
  const queue = [];
4413
4456
  let resolve2 = null;
@@ -4439,7 +4482,7 @@ var processRouter = router({
4439
4482
  }
4440
4483
  }),
4441
4484
  /** Subscribe to real-time health status changes */
4442
- onHealth: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4485
+ onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4443
4486
  const queue = [];
4444
4487
  let resolve2 = null;
4445
4488
  const handler = (healthData) => {
@@ -4469,7 +4512,7 @@ var processRouter = router({
4469
4512
  }
4470
4513
  }),
4471
4514
  /** Subscribe to real-time metrics */
4472
- onMetrics: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4515
+ onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4473
4516
  const queue = [];
4474
4517
  let resolve2 = null;
4475
4518
  const handler = (metrics) => {
@@ -4543,7 +4586,7 @@ var healthRouter = router({
4543
4586
  });
4544
4587
 
4545
4588
  // src/trpc/routers/terminal.ts
4546
- import { z as z23 } from "zod";
4589
+ import { z as z24 } from "zod";
4547
4590
  import { TRPCError as TRPCError3 } from "@trpc/server";
4548
4591
 
4549
4592
  // src/services/terminal-manager.ts
@@ -4551,32 +4594,64 @@ import { EventEmitter as EventEmitter8 } from "events";
4551
4594
  import os from "os";
4552
4595
  import { randomUUID as randomUUID4 } from "crypto";
4553
4596
  import * as pty from "@lydell/node-pty";
4597
+ var SCROLLBACK_LIMIT = 256 * 1024;
4554
4598
  var TerminalManager = class {
4555
4599
  sessions = /* @__PURE__ */ new Map();
4556
- create(cwd, cols, rows) {
4600
+ create(cwd, cols, rows, title) {
4557
4601
  const sessionId = randomUUID4();
4558
4602
  const shell = process.env.SHELL ?? (os.platform() === "win32" ? "powershell.exe" : "/bin/bash");
4603
+ const resolvedCwd = cwd ?? process.cwd();
4604
+ const resolvedCols = cols ?? 80;
4605
+ const resolvedRows = rows ?? 24;
4559
4606
  const term = pty.spawn(shell, [], {
4560
4607
  name: "xterm-256color",
4561
- cols: cols ?? 80,
4562
- rows: rows ?? 24,
4563
- cwd: cwd ?? process.cwd(),
4608
+ cols: resolvedCols,
4609
+ rows: resolvedRows,
4610
+ cwd: resolvedCwd,
4564
4611
  env: process.env
4565
4612
  });
4566
4613
  const emitter = new EventEmitter8();
4567
- term.onData((data) => emitter.emit("data", data));
4614
+ emitter.setMaxListeners(50);
4615
+ const session = {
4616
+ pty: term,
4617
+ emitter,
4618
+ scrollback: "",
4619
+ info: {
4620
+ sessionId,
4621
+ title: title ?? "Terminal",
4622
+ cwd: resolvedCwd,
4623
+ cols: resolvedCols,
4624
+ rows: resolvedRows,
4625
+ createdAt: Date.now()
4626
+ }
4627
+ };
4628
+ term.onData((data) => {
4629
+ session.scrollback += data;
4630
+ if (session.scrollback.length > SCROLLBACK_LIMIT) {
4631
+ session.scrollback = session.scrollback.slice(-SCROLLBACK_LIMIT);
4632
+ }
4633
+ emitter.emit("data", data);
4634
+ });
4568
4635
  term.onExit(() => {
4569
4636
  emitter.emit("exit");
4570
4637
  this.sessions.delete(sessionId);
4571
4638
  });
4572
- this.sessions.set(sessionId, { pty: term, emitter });
4639
+ this.sessions.set(sessionId, session);
4573
4640
  return sessionId;
4574
4641
  }
4575
4642
  write(sessionId, data) {
4576
4643
  this.sessions.get(sessionId)?.pty.write(data);
4577
4644
  }
4578
4645
  resize(sessionId, cols, rows) {
4579
- this.sessions.get(sessionId)?.pty.resize(cols, rows);
4646
+ const session = this.sessions.get(sessionId);
4647
+ if (!session) return;
4648
+ session.pty.resize(cols, rows);
4649
+ session.info.cols = cols;
4650
+ session.info.rows = rows;
4651
+ }
4652
+ rename(sessionId, title) {
4653
+ const session = this.sessions.get(sessionId);
4654
+ if (session) session.info.title = title;
4580
4655
  }
4581
4656
  destroy(sessionId) {
4582
4657
  const session = this.sessions.get(sessionId);
@@ -4588,6 +4663,13 @@ var TerminalManager = class {
4588
4663
  this.sessions.delete(sessionId);
4589
4664
  }
4590
4665
  }
4666
+ /** Les sessions encore vivantes : de quoi retrouver ses onglets après un aller-retour. */
4667
+ list() {
4668
+ return [...this.sessions.values()].map((s) => s.info).sort((a, b) => a.createdAt - b.createdAt);
4669
+ }
4670
+ getScrollback(sessionId) {
4671
+ return this.sessions.get(sessionId)?.scrollback ?? "";
4672
+ }
4591
4673
  getEmitter(sessionId) {
4592
4674
  return this.sessions.get(sessionId)?.emitter ?? null;
4593
4675
  }
@@ -4597,35 +4679,47 @@ var terminalManager = new TerminalManager();
4597
4679
  // src/trpc/routers/terminal.ts
4598
4680
  var terminalRouter = router({
4599
4681
  /** Spawn a new PTY shell session, returns a sessionId */
4600
- create: protectedProcedure.input(z23.object({
4601
- cwd: z23.string().max(512).optional(),
4602
- cols: z23.number().int().min(1).max(512).optional(),
4603
- rows: z23.number().int().min(1).max(256).optional()
4682
+ create: protectedProcedure.input(z24.object({
4683
+ cwd: z24.string().max(512).optional(),
4684
+ cols: z24.number().int().min(1).max(512).optional(),
4685
+ rows: z24.number().int().min(1).max(256).optional(),
4686
+ title: z24.string().max(128).optional()
4604
4687
  })).mutation(({ input }) => {
4605
- const sessionId = terminalManager.create(input.cwd, input.cols, input.rows);
4688
+ const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
4606
4689
  return { sessionId };
4607
4690
  }),
4691
+ /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
4692
+ list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
4693
+ /** Renommer un onglet */
4694
+ rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
4695
+ terminalManager.rename(input.sessionId, input.title);
4696
+ return { ok: true };
4697
+ }),
4608
4698
  /** Write data (keystrokes) to a PTY session */
4609
- write: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128), data: z23.string().max(65536) })).mutation(({ input }) => {
4699
+ write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
4610
4700
  terminalManager.write(input.sessionId, input.data);
4611
4701
  return { ok: true };
4612
4702
  }),
4613
4703
  /** Resize a PTY session */
4614
- resize: protectedProcedure.input(z23.object({
4615
- sessionId: z23.string().max(128),
4616
- cols: z23.number().int().min(1).max(512),
4617
- rows: z23.number().int().min(1).max(256)
4704
+ resize: protectedProcedure.input(z24.object({
4705
+ sessionId: z24.string().max(128),
4706
+ cols: z24.number().int().min(1).max(512),
4707
+ rows: z24.number().int().min(1).max(256)
4618
4708
  })).mutation(({ input }) => {
4619
4709
  terminalManager.resize(input.sessionId, input.cols, input.rows);
4620
4710
  return { ok: true };
4621
4711
  }),
4622
4712
  /** Destroy a PTY session */
4623
- destroy: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128) })).mutation(({ input }) => {
4713
+ destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
4624
4714
  terminalManager.destroy(input.sessionId);
4625
4715
  return { ok: true };
4626
4716
  }),
4627
4717
  /** Stream PTY output for a session (async generator subscription) */
4628
- onData: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128) })).subscription(async function* ({ input }) {
4718
+ onData: protectedProcedure.input(z24.object({
4719
+ sessionId: z24.string().max(128),
4720
+ /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
4721
+ replay: z24.boolean().optional()
4722
+ })).subscription(async function* ({ input }) {
4629
4723
  const emitter = terminalManager.getEmitter(input.sessionId);
4630
4724
  if (!emitter) {
4631
4725
  throw new TRPCError3({ code: "NOT_FOUND", message: `Terminal session ${input.sessionId} not found` });
@@ -4649,6 +4743,8 @@ var terminalRouter = router({
4649
4743
  };
4650
4744
  emitter.on("data", onData);
4651
4745
  emitter.on("exit", onExit);
4746
+ const scrollback = input.replay ? terminalManager.getScrollback(input.sessionId) : "";
4747
+ if (scrollback) yield scrollback;
4652
4748
  try {
4653
4749
  while (!done || queue.length > 0) {
4654
4750
  if (queue.length > 0) {
@@ -4667,7 +4763,7 @@ var terminalRouter = router({
4667
4763
  });
4668
4764
 
4669
4765
  // src/trpc/routers/git.ts
4670
- import { z as z24 } from "zod";
4766
+ import { z as z25 } from "zod";
4671
4767
  import { TRPCError as TRPCError4 } from "@trpc/server";
4672
4768
  import { execFile as execFile4, spawn as spawn3 } from "child_process";
4673
4769
  import { promisify as promisify2 } from "util";
@@ -4677,12 +4773,12 @@ import { join as join4, resolve as resolvePath } from "path";
4677
4773
  var execFileAsync2 = promisify2(execFile4);
4678
4774
  var GIT_TIMEOUT = 15e3;
4679
4775
  var DIFF_MAX_BYTES = 512 * 1024;
4680
- var CWD_SCHEMA = z24.string().min(1).max(4096);
4681
- var SAFE_PATH_SCHEMA = z24.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
4776
+ var CWD_SCHEMA = z25.string().min(1).max(4096);
4777
+ var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
4682
4778
  message: "Path must be relative and not traverse up"
4683
4779
  });
4684
- var REMOTE_SCHEMA = z24.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
4685
- var BRANCH_SCHEMA = z24.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
4780
+ var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
4781
+ var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
4686
4782
  function gitSafeEnv() {
4687
4783
  const env2 = {
4688
4784
  GIT_TERMINAL_PROMPT: "0",
@@ -4800,10 +4896,10 @@ async function getGitStatus(cwd) {
4800
4896
  }
4801
4897
  var gitRouter = router({
4802
4898
  /** Check if a working directory exists and optionally verify its git remote */
4803
- checkCwd: protectedProcedure.input(z24.object({
4899
+ checkCwd: protectedProcedure.input(z25.object({
4804
4900
  cwd: CWD_SCHEMA,
4805
- remote: z24.string().max(2048).optional(),
4806
- checkReachability: z24.boolean().optional()
4901
+ remote: z25.string().max(2048).optional(),
4902
+ checkReachability: z25.boolean().optional()
4807
4903
  })).query(async ({ input }) => {
4808
4904
  const resolvedCwd = expandEnvVar(input.cwd);
4809
4905
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -4824,8 +4920,8 @@ var gitRouter = router({
4824
4920
  return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
4825
4921
  }),
4826
4922
  /** Clone a git repository into a target directory */
4827
- clone: protectedProcedure.input(z24.object({
4828
- remote: z24.string().min(1).max(2048),
4923
+ clone: protectedProcedure.input(z25.object({
4924
+ remote: z25.string().min(1).max(2048),
4829
4925
  cwd: CWD_SCHEMA
4830
4926
  })).mutation(async ({ input }) => {
4831
4927
  const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
@@ -4846,13 +4942,13 @@ var gitRouter = router({
4846
4942
  return { success: true };
4847
4943
  }),
4848
4944
  /** Get full git status */
4849
- status: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4945
+ status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4850
4946
  const cwd = assertCwdExists(input.cwd);
4851
4947
  await assertGitRepo(cwd);
4852
4948
  return getGitStatus(cwd);
4853
4949
  }),
4854
4950
  /** Watch .git/ for changes and stream updated status */
4855
- onStatusChange: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
4951
+ onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
4856
4952
  const cwd = assertCwdExists(input.cwd);
4857
4953
  await assertGitRepo(cwd);
4858
4954
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -4903,7 +4999,7 @@ var gitRouter = router({
4903
4999
  }
4904
5000
  }),
4905
5001
  /** Get commit log */
4906
- log: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, limit: z24.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5002
+ log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
4907
5003
  const cwd = assertCwdExists(input.cwd);
4908
5004
  await assertGitRepo(cwd);
4909
5005
  const format = "%H%h%an%ae%ai%s";
@@ -4914,7 +5010,7 @@ var gitRouter = router({
4914
5010
  });
4915
5011
  }),
4916
5012
  /** List local and remote branches */
4917
- branches: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5013
+ branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4918
5014
  const cwd = assertCwdExists(input.cwd);
4919
5015
  await assertGitRepo(cwd);
4920
5016
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -4926,7 +5022,7 @@ var gitRouter = router({
4926
5022
  return { current, branches };
4927
5023
  }),
4928
5024
  /** Checkout a branch */
4929
- checkout: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z24.boolean().default(false) })).mutation(async ({ input }) => {
5025
+ checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
4930
5026
  const cwd = assertCwdExists(input.cwd);
4931
5027
  await assertGitRepo(cwd);
4932
5028
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -4934,42 +5030,42 @@ var gitRouter = router({
4934
5030
  return { ok: true };
4935
5031
  }),
4936
5032
  /** Stage files */
4937
- stage: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, paths: z24.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5033
+ stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
4938
5034
  const cwd = assertCwdExists(input.cwd);
4939
5035
  await assertGitRepo(cwd);
4940
5036
  await git(["add", "--", ...input.paths], cwd);
4941
5037
  return { ok: true };
4942
5038
  }),
4943
5039
  /** Stage all files */
4944
- stageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5040
+ stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
4945
5041
  const cwd = assertCwdExists(input.cwd);
4946
5042
  await assertGitRepo(cwd);
4947
5043
  await git(["add", "-A"], cwd);
4948
5044
  return { ok: true };
4949
5045
  }),
4950
5046
  /** Unstage files */
4951
- unstage: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, paths: z24.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5047
+ unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
4952
5048
  const cwd = assertCwdExists(input.cwd);
4953
5049
  await assertGitRepo(cwd);
4954
5050
  await git(["restore", "--staged", "--", ...input.paths], cwd);
4955
5051
  return { ok: true };
4956
5052
  }),
4957
5053
  /** Unstage all files */
4958
- unstageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5054
+ unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
4959
5055
  const cwd = assertCwdExists(input.cwd);
4960
5056
  await assertGitRepo(cwd);
4961
5057
  await git(["reset", "--"], cwd);
4962
5058
  return { ok: true };
4963
5059
  }),
4964
5060
  /** Commit staged changes */
4965
- commit: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, message: z24.string().min(1).max(4096) })).mutation(async ({ input }) => {
5061
+ commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
4966
5062
  const cwd = assertCwdExists(input.cwd);
4967
5063
  await assertGitRepo(cwd);
4968
5064
  const output = await git(["commit", "-m", input.message], cwd);
4969
5065
  return { ok: true, output: output.trim() };
4970
5066
  }),
4971
5067
  /** Push to remote */
4972
- push: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z24.boolean().default(false) })).mutation(async ({ input }) => {
5068
+ push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
4973
5069
  const cwd = assertCwdExists(input.cwd);
4974
5070
  await assertGitRepo(cwd);
4975
5071
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -4978,25 +5074,25 @@ var gitRouter = router({
4978
5074
  return { ok: true, output: output.trim() };
4979
5075
  }),
4980
5076
  /** Pull from remote */
4981
- pull: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5077
+ pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
4982
5078
  const cwd = assertCwdExists(input.cwd);
4983
5079
  await assertGitRepo(cwd);
4984
5080
  const output = await git(["pull", input.remote], cwd);
4985
5081
  return { ok: true, output: output.trim() };
4986
5082
  }),
4987
5083
  /** Fetch from remote */
4988
- fetch: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5084
+ fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
4989
5085
  const cwd = assertCwdExists(input.cwd);
4990
5086
  await assertGitRepo(cwd);
4991
5087
  const output = await git(["fetch", input.remote], cwd);
4992
5088
  return { ok: true, output: output.trim() };
4993
5089
  }),
4994
5090
  /** Get diff for a file or the whole index */
4995
- diff: protectedProcedure.input(z24.object({
5091
+ diff: protectedProcedure.input(z25.object({
4996
5092
  cwd: CWD_SCHEMA,
4997
- path: z24.string().max(4096).optional(),
4998
- staged: z24.boolean().default(false),
4999
- untracked: z24.boolean().default(false)
5093
+ path: z25.string().max(4096).optional(),
5094
+ staged: z25.boolean().default(false),
5095
+ untracked: z25.boolean().default(false)
5000
5096
  })).query(async ({ input }) => {
5001
5097
  const cwd = assertCwdExists(input.cwd);
5002
5098
  await assertGitRepo(cwd);
@@ -5044,21 +5140,21 @@ var gitRouter = router({
5044
5140
  };
5045
5141
  }),
5046
5142
  /** Discard changes to working tree files */
5047
- discard: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, paths: z24.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5143
+ discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5048
5144
  const cwd = assertCwdExists(input.cwd);
5049
5145
  await assertGitRepo(cwd);
5050
5146
  await git(["restore", "--", ...input.paths], cwd);
5051
5147
  return { ok: true };
5052
5148
  }),
5053
5149
  /** Get staged diff (used by server for AI commit message generation) */
5054
- stagedDiff: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5150
+ stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5055
5151
  const cwd = assertCwdExists(input.cwd);
5056
5152
  await assertGitRepo(cwd);
5057
5153
  const diff = await git(["diff", "--staged"], cwd, true);
5058
5154
  return { diff: diff.slice(0, 3e4) };
5059
5155
  }),
5060
5156
  /** Merge a branch into the current branch */
5061
- merge: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z24.boolean().default(false) })).mutation(async ({ input }) => {
5157
+ merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
5062
5158
  const cwd = assertCwdExists(input.cwd);
5063
5159
  await assertGitRepo(cwd);
5064
5160
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5066,14 +5162,14 @@ var gitRouter = router({
5066
5162
  return { ok: true, output: output.trim() };
5067
5163
  }),
5068
5164
  /** Rebase current branch onto another branch */
5069
- rebase: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5165
+ rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5070
5166
  const cwd = assertCwdExists(input.cwd);
5071
5167
  await assertGitRepo(cwd);
5072
5168
  const output = await git(["rebase", input.branch], cwd);
5073
5169
  return { ok: true, output: output.trim() };
5074
5170
  }),
5075
5171
  /** List remotes */
5076
- remotes: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5172
+ remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5077
5173
  const cwd = assertCwdExists(input.cwd);
5078
5174
  await assertGitRepo(cwd);
5079
5175
  const output = await git(["remote", "-v"], cwd, true);
@@ -5091,7 +5187,7 @@ var gitRouter = router({
5091
5187
  return remotes;
5092
5188
  }),
5093
5189
  /** List stash entries */
5094
- stashList: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5190
+ stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5095
5191
  const cwd = assertCwdExists(input.cwd);
5096
5192
  await assertGitRepo(cwd);
5097
5193
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5104,10 +5200,10 @@ var gitRouter = router({
5104
5200
  return entries;
5105
5201
  }),
5106
5202
  /** Stash current changes */
5107
- stashPush: protectedProcedure.input(z24.object({
5203
+ stashPush: protectedProcedure.input(z25.object({
5108
5204
  cwd: CWD_SCHEMA,
5109
- message: z24.string().max(4096).optional(),
5110
- includeUntracked: z24.boolean().default(true)
5205
+ message: z25.string().max(4096).optional(),
5206
+ includeUntracked: z25.boolean().default(true)
5111
5207
  })).mutation(async ({ input }) => {
5112
5208
  const cwd = assertCwdExists(input.cwd);
5113
5209
  await assertGitRepo(cwd);
@@ -5118,21 +5214,21 @@ var gitRouter = router({
5118
5214
  return { ok: true, output: output.trim() };
5119
5215
  }),
5120
5216
  /** Apply a stash entry and remove it from the list */
5121
- stashPop: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, index: z24.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5217
+ stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5122
5218
  const cwd = assertCwdExists(input.cwd);
5123
5219
  await assertGitRepo(cwd);
5124
5220
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5125
5221
  return { ok: true, output: output.trim() };
5126
5222
  }),
5127
5223
  /** Apply a stash entry without removing it from the list */
5128
- stashApply: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, index: z24.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5224
+ stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5129
5225
  const cwd = assertCwdExists(input.cwd);
5130
5226
  await assertGitRepo(cwd);
5131
5227
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5132
5228
  return { ok: true, output: output.trim() };
5133
5229
  }),
5134
5230
  /** Drop a stash entry */
5135
- stashDrop: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, index: z24.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5231
+ stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5136
5232
  const cwd = assertCwdExists(input.cwd);
5137
5233
  await assertGitRepo(cwd);
5138
5234
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5165,7 +5261,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5165
5261
  }
5166
5262
 
5167
5263
  // src/trpc/routers/ai.ts
5168
- import { z as z25 } from "zod";
5264
+ import { z as z26 } from "zod";
5169
5265
  import { TRPCError as TRPCError5 } from "@trpc/server";
5170
5266
 
5171
5267
  // src/services/ai-spawn-manager.ts
@@ -5880,23 +5976,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
5880
5976
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
5881
5977
  var aiRouter = router({
5882
5978
  /** Spawn an AI CLI process. Returns a spawnId for streaming. */
5883
- spawn: protectedProcedure.input(z25.object({
5884
- cli: z25.string().max(64),
5885
- args: z25.array(z25.string().max(5e5)),
5886
- env: z25.record(z25.string().max(256), z25.string().max(5e5)).optional(),
5887
- cwd: z25.string().max(4096).optional(),
5888
- stdinData: z25.string().max(1e7).optional(),
5889
- enableMcp: z25.boolean().optional(),
5890
- mcpApiBaseUrl: z25.string().max(512).optional(),
5891
- mcpApiToken: z25.string().max(8192).optional()
5979
+ spawn: protectedProcedure.input(z26.object({
5980
+ cli: z26.string().max(64),
5981
+ args: z26.array(z26.string().max(5e5)),
5982
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
5983
+ cwd: z26.string().max(4096).optional(),
5984
+ stdinData: z26.string().max(1e7).optional(),
5985
+ enableMcp: z26.boolean().optional(),
5986
+ mcpApiBaseUrl: z26.string().max(512).optional(),
5987
+ mcpApiToken: z26.string().max(8192).optional()
5892
5988
  })).mutation(({ input }) => {
5893
5989
  const spawnId = aiSpawnManager.spawn(input);
5894
5990
  return { spawnId };
5895
5991
  }),
5896
5992
  /** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
5897
- stream: protectedProcedure.input(z25.object({
5898
- spawnId: z25.string().max(128),
5899
- fromOffset: z25.number().int().min(0).default(0)
5993
+ stream: protectedProcedure.input(z26.object({
5994
+ spawnId: z26.string().max(128),
5995
+ fromOffset: z26.number().int().min(0).default(0)
5900
5996
  })).subscription(async function* ({ input }) {
5901
5997
  try {
5902
5998
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -5910,39 +6006,39 @@ var aiRouter = router({
5910
6006
  }
5911
6007
  }),
5912
6008
  /** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
5913
- spawnPty: protectedProcedure.input(z25.object({
5914
- cli: z25.string().max(64),
5915
- args: z25.array(z25.string().max(5e5)),
5916
- env: z25.record(z25.string().max(256), z25.string().max(5e5)).optional(),
5917
- cwd: z25.string().max(4096).optional(),
5918
- cols: z25.number().int().min(1).max(1e3).optional(),
5919
- rows: z25.number().int().min(1).max(1e3).optional(),
5920
- sessionId: z25.string().max(128).optional(),
5921
- enableMcp: z25.boolean().optional(),
5922
- mcpApiBaseUrl: z25.string().max(512).optional(),
5923
- mcpApiToken: z25.string().max(8192).optional()
6009
+ spawnPty: protectedProcedure.input(z26.object({
6010
+ cli: z26.string().max(64),
6011
+ args: z26.array(z26.string().max(5e5)),
6012
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6013
+ cwd: z26.string().max(4096).optional(),
6014
+ cols: z26.number().int().min(1).max(1e3).optional(),
6015
+ rows: z26.number().int().min(1).max(1e3).optional(),
6016
+ sessionId: z26.string().max(128).optional(),
6017
+ enableMcp: z26.boolean().optional(),
6018
+ mcpApiBaseUrl: z26.string().max(512).optional(),
6019
+ mcpApiToken: z26.string().max(8192).optional()
5924
6020
  })).mutation(({ input }) => {
5925
6021
  const spawnId = aiSpawnManager.spawnPty(input);
5926
6022
  return { spawnId };
5927
6023
  }),
5928
6024
  /** Find a running PTY spawn by its logical sessionId (for re-attach). */
5929
- findPtyBySession: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).query(({ input }) => {
6025
+ findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
5930
6026
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
5931
6027
  }),
5932
6028
  /** Write input to a PTY spawn (user keystrokes). */
5933
- writePty: protectedProcedure.input(z25.object({
5934
- spawnId: z25.string().max(128),
5935
- data: z25.string().max(1e6)
6029
+ writePty: protectedProcedure.input(z26.object({
6030
+ spawnId: z26.string().max(128),
6031
+ data: z26.string().max(1e6)
5936
6032
  })).mutation(({ input }) => {
5937
6033
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
5938
6034
  return { ok };
5939
6035
  }),
5940
6036
  /** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
5941
- writeContextFiles: protectedProcedure.input(z25.object({
5942
- sessionId: z25.string().min(1).max(128),
5943
- files: z25.array(z25.object({
5944
- name: z25.string().min(1).max(256),
5945
- content: z25.string().max(MAX_CONTEXT_FILE_BYTES)
6037
+ writeContextFiles: protectedProcedure.input(z26.object({
6038
+ sessionId: z26.string().min(1).max(128),
6039
+ files: z26.array(z26.object({
6040
+ name: z26.string().min(1).max(256),
6041
+ content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
5946
6042
  })).min(1).max(MAX_CONTEXT_FILES)
5947
6043
  }).refine(
5948
6044
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -5957,25 +6053,25 @@ var aiRouter = router({
5957
6053
  * which clipboard method (if any) succeeded — caller decides whether to send
5958
6054
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
5959
6055
  */
5960
- pasteImage: protectedProcedure.input(z25.object({
5961
- sessionId: z25.string().max(128).optional(),
5962
- mimeType: z25.string().max(64),
5963
- base64: z25.string().max(15e6)
6056
+ pasteImage: protectedProcedure.input(z26.object({
6057
+ sessionId: z26.string().max(128).optional(),
6058
+ mimeType: z26.string().max(64),
6059
+ base64: z26.string().max(15e6)
5964
6060
  })).mutation(async ({ input }) => {
5965
6061
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
5966
6062
  return res;
5967
6063
  }),
5968
6064
  /** Resize a PTY spawn. */
5969
- resizePty: protectedProcedure.input(z25.object({
5970
- spawnId: z25.string().max(128),
5971
- cols: z25.number().int().min(1).max(1e3),
5972
- rows: z25.number().int().min(1).max(1e3)
6065
+ resizePty: protectedProcedure.input(z26.object({
6066
+ spawnId: z26.string().max(128),
6067
+ cols: z26.number().int().min(1).max(1e3),
6068
+ rows: z26.number().int().min(1).max(1e3)
5973
6069
  })).mutation(({ input }) => {
5974
6070
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
5975
6071
  return { ok };
5976
6072
  }),
5977
6073
  /** Kill a running AI spawn. */
5978
- kill: protectedProcedure.input(z25.object({ spawnId: z25.string().max(128) })).mutation(({ input }) => {
6074
+ kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
5979
6075
  const killed = aiSpawnManager.kill(input.spawnId);
5980
6076
  return { ok: killed };
5981
6077
  }),
@@ -5984,23 +6080,23 @@ var aiRouter = router({
5984
6080
  return aiSpawnManager.list();
5985
6081
  }),
5986
6082
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
5987
- ack: protectedProcedure.input(z25.object({ spawnId: z25.string().max(128) })).mutation(({ input }) => {
6083
+ ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
5988
6084
  const acked = aiSpawnManager.ack(input.spawnId);
5989
6085
  return { ok: acked };
5990
6086
  }),
5991
6087
  /** Forward a JSON-RPC request to the local codex app-server. */
5992
- codexRequest: protectedProcedure.input(z25.object({
5993
- method: z25.string().max(256),
5994
- params: z25.record(z25.string(), z25.unknown()).default({}),
5995
- env: z25.record(z25.string().max(256), z25.string().max(5e5)).optional()
6088
+ codexRequest: protectedProcedure.input(z26.object({
6089
+ method: z26.string().max(256),
6090
+ params: z26.record(z26.string(), z26.unknown()).default({}),
6091
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
5996
6092
  })).mutation(async ({ input }) => {
5997
6093
  await codexAppServerManager.ensureConnected(input.env);
5998
6094
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
5999
6095
  return { result };
6000
6096
  }),
6001
6097
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6002
- codexNotifications: protectedProcedure.input(z25.object({
6003
- threadId: z25.string().max(256).optional()
6098
+ codexNotifications: protectedProcedure.input(z26.object({
6099
+ threadId: z26.string().max(256).optional()
6004
6100
  }).default({})).subscription(async function* ({ input, signal }) {
6005
6101
  await codexAppServerManager.ensureConnected();
6006
6102
  const queue = [];
@@ -6037,13 +6133,13 @@ var aiRouter = router({
6037
6133
  });
6038
6134
 
6039
6135
  // src/trpc/routers/wiki.ts
6040
- import { z as z26 } from "zod";
6136
+ import { z as z27 } from "zod";
6041
6137
  import { TRPCError as TRPCError6 } from "@trpc/server";
6042
6138
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6043
6139
  import { dirname as dirname2 } from "path";
6044
6140
  import { resolve as resolvePath3, join as join5, relative, sep } from "path";
6045
- var CWD_SCHEMA2 = z26.string().min(1).max(4096);
6046
- var REL_PATH_SCHEMA = z26.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6141
+ var CWD_SCHEMA2 = z27.string().min(1).max(4096);
6142
+ var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6047
6143
  message: "Path must be a relative path without traversal"
6048
6144
  });
6049
6145
  var MAX_FILES = 500;
@@ -6063,9 +6159,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6063
6159
  "target",
6064
6160
  "out"
6065
6161
  ]);
6066
- var RepoEntrySchema = z26.lazy(() => z26.union([
6067
- z26.object({ type: z26.literal("file"), name: z26.string(), path: z26.string() }),
6068
- z26.object({ type: z26.literal("dir"), name: z26.string(), path: z26.string(), children: z26.array(RepoEntrySchema) })
6162
+ var RepoEntrySchema = z27.lazy(() => z27.union([
6163
+ z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
6164
+ z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
6069
6165
  ]));
6070
6166
  async function walkMarkdown(root, dir, depth, counter) {
6071
6167
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6135,13 +6231,13 @@ async function resolveRoot(cwd) {
6135
6231
  }
6136
6232
  }
6137
6233
  var wikiRouter = router({
6138
- listRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6234
+ listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6139
6235
  const root = await resolveRoot(input.cwd);
6140
6236
  const counter = { n: 0 };
6141
6237
  const entries = await walkMarkdown(root, root, 0, counter);
6142
6238
  return { root, entries, truncated: counter.n >= MAX_FILES };
6143
6239
  }),
6144
- readRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6240
+ readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6145
6241
  if (!/\.(md|markdown)$/i.test(input.path)) {
6146
6242
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6147
6243
  }
@@ -6167,10 +6263,10 @@ var wikiRouter = router({
6167
6263
  const content = await readFile2(realTarget, "utf-8");
6168
6264
  return { path: input.path, content };
6169
6265
  }),
6170
- writeMarkdown: protectedProcedure.input(z26.object({
6266
+ writeMarkdown: protectedProcedure.input(z27.object({
6171
6267
  cwd: CWD_SCHEMA2,
6172
6268
  path: REL_PATH_SCHEMA,
6173
- content: z26.string().max(5e6)
6269
+ content: z27.string().max(5e6)
6174
6270
  })).mutation(async ({ input }) => {
6175
6271
  if (!/\.(md|markdown)$/i.test(input.path)) {
6176
6272
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6181,7 +6277,7 @@ var wikiRouter = router({
6181
6277
  await writeFile6(target, input.content, "utf-8");
6182
6278
  return { path: input.path, ok: true };
6183
6279
  }),
6184
- createFile: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6280
+ createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6185
6281
  if (!/\.(md|markdown)$/i.test(input.path)) {
6186
6282
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6187
6283
  }
@@ -6197,13 +6293,13 @@ var wikiRouter = router({
6197
6293
  await writeFile6(target, "", "utf-8");
6198
6294
  return { path: input.path, ok: true };
6199
6295
  }),
6200
- createDir: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6296
+ createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6201
6297
  const root = await resolveRoot(input.cwd);
6202
6298
  const target = await resolveSafePath(root, input.path, false);
6203
6299
  await mkdir6(target, { recursive: true });
6204
6300
  return { path: input.path, ok: true };
6205
6301
  }),
6206
- renamePath: protectedProcedure.input(z26.object({
6302
+ renamePath: protectedProcedure.input(z27.object({
6207
6303
  cwd: CWD_SCHEMA2,
6208
6304
  fromPath: REL_PATH_SCHEMA,
6209
6305
  toPath: REL_PATH_SCHEMA
@@ -6221,14 +6317,14 @@ var wikiRouter = router({
6221
6317
  await rename2(from, to);
6222
6318
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6223
6319
  }),
6224
- ensureRoot: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6320
+ ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6225
6321
  const expanded = expandEnvVar(input.cwd);
6226
6322
  const abs = resolvePath3(expanded);
6227
6323
  await mkdir6(abs, { recursive: true });
6228
6324
  const root = await realpath(abs);
6229
6325
  return { root, ok: true };
6230
6326
  }),
6231
- deletePath: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6327
+ deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6232
6328
  const root = await resolveRoot(input.cwd);
6233
6329
  const target = await resolveSafePath(root, input.path, true);
6234
6330
  if (target === root) {