@runeya/runeya 2.0.71 → 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 (257) hide show
  1. package/agent/index.js +203 -160
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-YDLSYZE3.js +7 -0
  4. package/{chunk-Z3KAXI7V.js → chunk-HPYBAUAH.js} +235 -29
  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-Q3PSCMS7.js → src-53OQNM27.js} +850 -677
  10. package/src-53OQNM27.js.map +1 -0
  11. package/web/assets/AgentScalarChatInterface.vue-DdIfThmp.js +13 -0
  12. package/web/assets/AgentTerminalPage-v9fFc2Kd.js +1 -0
  13. package/web/assets/AiChatPage-BvrKlLxc.js +1 -0
  14. package/web/assets/AppLayout-CLzy-QOZ.js +1 -0
  15. package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
  16. package/web/assets/AuditPage-DgJIcr0c.js +1 -0
  17. package/web/assets/CloudAccountPage-CoJV3YCA.js +1 -0
  18. package/web/assets/CloudAccountPage-DGtKCmXL.js +1 -0
  19. package/web/assets/CloudMessagingPage-Bql34zJU.js +2 -0
  20. package/web/assets/DashboardPage-BSvJxrcT.js +1 -0
  21. package/web/assets/DirectoryPickerDialog-BfLLfUQy.js +1 -0
  22. package/web/assets/{EditorIcon-JRryeySJ.js → EditorIcon-BbilRWLq.js} +2 -2
  23. package/web/assets/EnvironmentForm-BIHXK18r.js +108 -0
  24. package/web/assets/EnvironmentFormPage-oLAwLJ1b.js +1 -0
  25. package/web/assets/EnvironmentListPage-tJfB0q_E.js +1 -0
  26. package/web/assets/KanbanBoardPage-DpyYe6jx.js +4 -0
  27. package/web/assets/KanbanListPage-DjXWjWgU.js +1 -0
  28. package/web/assets/LaunchProjectPage-Bqgsa2z1.js +1 -0
  29. package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
  30. package/web/assets/LaunchServicesPage-BCNDSuuN.js +1 -0
  31. package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
  32. package/web/assets/LogViewer-gTNzyao0.js +3 -0
  33. package/web/assets/OrgKeyPrompt-BdNV_cve.js +1 -0
  34. package/web/assets/{ProcessControls-BPQXGKib.js → ProcessControls-BzMrd-2c.js} +1 -1
  35. package/web/assets/ProcessDetailPage-Rg5zyPYJ.js +1 -0
  36. package/web/assets/{ProcessMetrics-D7L708Em.js → ProcessMetrics-hZWAa3gi.js} +2 -2
  37. package/web/assets/ProjectDetailPage-NbxG6AIr.js +1 -0
  38. package/web/assets/ProjectListPage-COMYMVbr.js +1 -0
  39. package/web/assets/RandomJobTestPage-DTK2RLln.js +2 -0
  40. package/web/assets/ScenarioEditorPage-DIx_Nzbh.js +14 -0
  41. package/web/assets/SendToChatDialog-BAalryU3.js +1 -0
  42. package/web/assets/ServiceControlsBar-CgR8yFZb.js +1 -0
  43. package/web/assets/ServiceDetailPage-Cvqftndf.js +2 -0
  44. package/web/assets/ServiceFormPage-CGgCwNM3.js +1 -0
  45. package/web/assets/{SettingsPage-CScovMi5.css → SettingsPage-ClUsbLPy.css} +1 -1
  46. package/web/assets/SettingsPage-Dx5xoAS7.js +2063 -0
  47. package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
  48. package/web/assets/UnlockPage-Dlp8kXD-.js +1 -0
  49. package/web/assets/VariablesTable-Dr1C6hg4.js +1 -0
  50. package/web/assets/VaultMigrationPage-1zZCTKgS.js +1 -0
  51. package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
  52. package/web/assets/VersionBadge-BiLjqi8I.js +1 -0
  53. package/web/assets/WikiPage-B51w0xOX.js +1 -0
  54. package/web/assets/WikiView-CGQrkGH4.js +1 -0
  55. package/web/assets/add-scalar-classes-ChVyhgpT.js +387 -0
  56. package/web/assets/auth-errors-BdfA61wA.js +1 -0
  57. package/web/assets/autocomplete-wqj_ORBH.js +308 -0
  58. package/web/assets/{basic-shape-diamond.svg-C8K6YjGj.js → basic-shape-diamond.svg-CWwnQ30s.js} +1 -1
  59. package/web/assets/{basic-shape-hexagon.svg-C9PeXR6S.js → basic-shape-hexagon.svg-C9JMDUIK.js} +1 -1
  60. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CfBLN6Yj.js → basic-shape-primary-circle-ellipse-round.svg-Do0Ewbp-.js} +1 -1
  61. package/web/assets/{basic-shape-primary-square-rectangle.svg-D2QPBP5_.js → basic-shape-primary-square-rectangle.svg-CRq767cD.js} +1 -1
  62. package/web/assets/{basic-shape-shield.svg-ClsEFdja.js → basic-shape-shield.svg-BuxJBs70.js} +1 -1
  63. package/web/assets/{browser-CF5_9QqR.js → browser-BEEW2obM.js} +1 -1
  64. package/web/assets/{browser-D7ZckEFz.js → browser-BhZAIVa8.js} +1 -1
  65. package/web/assets/card-C1iS2wAN.js +32 -0
  66. package/web/assets/{checkbox-CfwNXlF_.js → checkbox-CCU9xze9.js} +3 -3
  67. package/web/assets/{chip-3tOoBrD7.js → chip-DsJBorBp.js} +2 -2
  68. package/web/assets/client-BFK39Zab.js +24 -0
  69. package/web/assets/cloud-chat.store-D39vo5xT.js +1 -0
  70. package/web/assets/cloud-session-B7G8xhKC.js +1 -0
  71. package/web/assets/column-CPU5Jg0n.js +907 -0
  72. package/web/assets/{computer-device-desktop-monitor.svg-9f4DSNLj.js → computer-device-desktop-monitor.svg-XWEWhL0y.js} +1 -1
  73. package/web/assets/{computer-device-desktop.svg-BYoXiEOE.js → computer-device-desktop.svg-COkZClBv.js} +1 -1
  74. package/web/assets/{computer-device-laptop.svg-DR1sEMdL.js → computer-device-laptop.svg-C4EfJUqO.js} +1 -1
  75. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-B-AOaBuq.js → computer-device-mobile-phone-android-samsung-back.svg-Bb2_2tyI.js} +1 -1
  76. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Dw4z_H5H.js → computer-device-mobile-phone-android-samsung.svg-CEUhXP7K.js} +1 -1
  77. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BtqMb2Wo.js → computer-device-mobile-phone-iphone-x-back.svg-B3rxizbE.js} +1 -1
  78. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-eYEM_VXA.js → computer-device-mobile-phone-iphone-x.svg-BSKpZFCN.js} +1 -1
  79. package/web/assets/{computer-device-mobile-tablet-touch.svg-jLD41nvm.js → computer-device-mobile-tablet-touch.svg-CZvb3YX2.js} +1 -1
  80. package/web/assets/{computer-device-mobile-tablet.svg-D_7_M1GK.js → computer-device-mobile-tablet.svg-BM4_YZYi.js} +1 -1
  81. package/web/assets/{computer-device-network-ethernet-cat6.svg-B_527QGY.js → computer-device-network-ethernet-cat6.svg-CK0v-Rjf.js} +1 -1
  82. package/web/assets/{computer-device-network-lan-www.svg-ClZIaUOH.js → computer-device-network-lan-www.svg-DvhO71Lq.js} +1 -1
  83. package/web/assets/{computer-device-network-wifi-connection.svg-DC4OCJY0.js → computer-device-network-wifi-connection.svg--olUYsgv.js} +1 -1
  84. package/web/assets/{computer-device-network-wifi-router.svg-BWPpobCc.js → computer-device-network-wifi-router.svg-D5HKSWTi.js} +1 -1
  85. package/web/assets/{cssMode-CXUrkdrQ.js → cssMode-CTjKNOiX.js} +1 -1
  86. package/web/assets/{divider-BrO5nkpd.js → divider-VFAPax5_.js} +2 -2
  87. package/web/assets/{docx-preview-tE714WSD.js → docx-preview-gNYLz3FX.js} +1 -1
  88. package/web/assets/{ecology-science-erlenmeyer-flask.svg-o8D0ASmr.js → ecology-science-erlenmeyer-flask.svg-THkDG-tj.js} +1 -1
  89. package/web/assets/{fieldset-LX5cdTvN.js → fieldset-DZGy449H.js} +2 -2
  90. package/web/assets/{freemarker2-DJ82s0fP.js → freemarker2-CNSvFpVF.js} +1 -1
  91. package/web/assets/{handlebars-BXFlY2Lu.js → handlebars-BeRu48NI.js} +1 -1
  92. package/web/assets/{html-CqDVypOC.js → html-DrTiGPjE.js} +1 -1
  93. package/web/assets/{htmlMode-DrHxdTQP.js → htmlMode-DpbDpbjK.js} +1 -1
  94. package/web/assets/{image-flash-lightning.svg-BDPMOynq.js → image-flash-lightning.svg-DrkyfdIV.js} +1 -1
  95. package/web/assets/{image-picture-flower.svg-D-AJaery.js → image-picture-flower.svg-BqFj1xcR.js} +1 -1
  96. package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
  97. package/web/assets/{index-a6DAapTb.js → index-y5bguEQB.js} +238 -238
  98. package/web/assets/{interface-alert-exclamation-diamond.svg-CV7M0IVQ.js → interface-alert-exclamation-diamond.svg-B40BfW6d.js} +1 -1
  99. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B8NapiB7.js → interface-alert-exclamation-triangle-warning.svg-DeIlksL4.js} +1 -1
  100. package/web/assets/{interface-alert-information-circle.svg-eQIFULjG.js → interface-alert-information-circle.svg-SwVdV-Z6.js} +1 -1
  101. package/web/assets/{interface-award-crown.svg-D-4fclUD.js → interface-award-crown.svg-DZHf0EHC.js} +1 -1
  102. package/web/assets/{interface-bookmark.svg-XdbYDqqk.js → interface-bookmark-tag.svg-CiaV2Cjo.js} +1 -1
  103. package/web/assets/{interface-bookmark-tag.svg-Jy6EOdau.js → interface-bookmark.svg-DBEqa-8W.js} +1 -1
  104. package/web/assets/{interface-calendar-date-one.svg-BIoXVZrz.js → interface-calendar-date-one.svg-C_afKyyz.js} +1 -1
  105. package/web/assets/{interface-content-book-open-pages.svg-DHwJbBvQ.js → interface-content-book-open-pages.svg-D5d9ilSu.js} +1 -1
  106. package/web/assets/{interface-content-book-page.svg-47msUBN_.js → interface-content-book-page.svg-B6hlaLP5.js} +1 -1
  107. package/web/assets/{interface-content-file.svg-DXw9W8QM.js → interface-content-file.svg-COWMwejF.js} +1 -1
  108. package/web/assets/interface-content-folder.svg-BCIUgpD4.js +1 -0
  109. package/web/assets/{interface-content-folder.svg-BmK_IJv8.js → interface-content-folder.svg-K7DTqQH-.js} +1 -1
  110. package/web/assets/{interface-copy-clipboard.svg-CQ1rQN0L.js → interface-copy-clipboard.svg-BFQ6eajI.js} +1 -1
  111. package/web/assets/{interface-edit-attachment.svg-C3aTaTh_.js → interface-edit-attachment.svg-B-LsB4cM.js} +1 -1
  112. package/web/assets/{interface-edit-binocular.svg-B2Ue_tgs.js → interface-edit-binocular.svg-CnVjKyrn.js} +1 -1
  113. package/web/assets/{interface-edit-magic-wand.svg-DDKse-Wy.js → interface-edit-magic-wand.svg-CUY6vVJT.js} +1 -1
  114. package/web/assets/{interface-edit-tool-paint-roller.svg-C2ABby1f.js → interface-edit-tool-paint-roller.svg-B1tSdIxN.js} +1 -1
  115. package/web/assets/{interface-edit-tool-pencil.svg-CNjYbknQ.js → interface-edit-tool-pencil.svg-BHFULT75.js} +1 -1
  116. package/web/assets/{interface-favorite-award.svg-DWqSHfIa.js → interface-favorite-award.svg-CcOLoF8I.js} +1 -1
  117. package/web/assets/{interface-favorite-flag.svg-CNUsr98g.js → interface-favorite-flag.svg-CAW6LmLW.js} +1 -1
  118. package/web/assets/{interface-favorite-heart.svg-3Eb366FO.js → interface-favorite-heart.svg-BEz4zlNs.js} +1 -1
  119. package/web/assets/{interface-favorite-star.svg-CVJ3aq1n.js → interface-favorite-star.svg-DKFuvYge.js} +1 -1
  120. package/web/assets/{interface-favorite-stars-sparkles.svg-BfXhPBbs.js → interface-favorite-stars-sparkles.svg-BfzccoPz.js} +1 -1
  121. package/web/assets/{interface-hierarchy-flowchart.svg-DzsqKrYq.js → interface-hierarchy-flowchart.svg-BT8QX161.js} +1 -1
  122. package/web/assets/{interface-home-house.svg-BnXbuyZn.js → interface-home-house.svg-B264pTPi.js} +1 -1
  123. package/web/assets/{interface-hyperlink.svg-BsmSmyP5.js → interface-hyperlink.svg-DhUgNKkr.js} +1 -1
  124. package/web/assets/{interface-lighting-brightness.svg-BywVQRo9.js → interface-lighting-brightness.svg-CPKb40uB.js} +1 -1
  125. package/web/assets/{interface-lock-closed.svg-BLPORc_h.js → interface-lock-closed.svg-CvXhgCtt.js} +1 -1
  126. package/web/assets/{interface-lock-open-unlock.svg-CaYlbVmU.js → interface-lock-open-unlock.svg-B0PMKRhP.js} +1 -1
  127. package/web/assets/{interface-login-key.svg-D5F_9MJ0.js → interface-login-key.svg-DJUm3vhg.js} +1 -1
  128. package/web/assets/{interface-search.svg-CF1D8GIV.js → interface-search.svg-ByW98ez_.js} +1 -1
  129. package/web/assets/{interface-setting-cog.svg-D4AOKG2g.js → interface-setting-cog.svg-DYOmJ9It.js} +1 -1
  130. package/web/assets/{interface-share-megaphone-bullhorn.svg-BIfr2_va.js → interface-share-megaphone-bullhorn.svg-YOCUHa3i.js} +1 -1
  131. package/web/assets/{interface-share-rocket.svg-NDd3dv1t.js → interface-share-rocket.svg-C5kj5dSu.js} +1 -1
  132. package/web/assets/{interface-share-satellite.svg-CVDJbmT-.js → interface-share-satellite.svg-C0svPxG6.js} +1 -1
  133. package/web/assets/{interface-share-space-ship.svg-D0ZLJNO2.js → interface-share-space-ship.svg-8Nw02n1Q.js} +1 -1
  134. package/web/assets/{interface-share.svg-WpwbpOes.js → interface-share.svg-eDW294tn.js} +1 -1
  135. package/web/assets/{interface-signal-square.svg-DnfzUw_B.js → interface-signal-square.svg-CxB5mcJQ.js} +1 -1
  136. package/web/assets/{interface-time-clock-circle.svg-BhxciNvX.js → interface-time-clock-circle.svg-CEnlQi79.js} +1 -1
  137. package/web/assets/{interface-time-hour-glass.svg-DBzSaSHQ.js → interface-time-hour-glass.svg-qL3_s19Q.js} +1 -1
  138. package/web/assets/{interface-users-multiple.svg-BULh1giq.js → interface-users-multiple.svg-Cz2iA33z.js} +1 -1
  139. package/web/assets/{interface-weather-moon.svg-D377V2os.js → interface-weather-moon.svg-BoT9GUK_.js} +1 -1
  140. package/web/assets/{javascript-BTXoJ3Qy.js → javascript-DWdA0-HW.js} +1 -1
  141. package/web/assets/{jsonMode-D4a3Khim.js → jsonMode-DxGrVlm0.js} +2 -2
  142. package/web/assets/{liquid-DfO0R4Mk.js → liquid-COqLk0mR.js} +1 -1
  143. package/web/assets/{lspLanguageFeatures-BvPWuQFt.js → lspLanguageFeatures--0hj1ZV4.js} +3 -3
  144. package/web/assets/{mail-chat-bubble-square.svg-SK3IJ6QN.js → mail-chat-bubble-square.svg-eiKzTBOv.js} +1 -1
  145. package/web/assets/{mail-send-email-paper-airplane.svg-CJFA7B2E.js → mail-send-email-paper-airplane.svg-CCI77Gk8.js} +1 -1
  146. package/web/assets/{mail-send-envelope.svg-eO_-QNyE.js → mail-send-envelope.svg-ChM5k_N7.js} +1 -1
  147. package/web/assets/{mdx-G_vwFSSe.js → mdx-CwXNREAO.js} +1 -1
  148. package/web/assets/{message-CxPw04rG.js → message-CSxReshg.js} +2 -2
  149. package/web/assets/{minus-Dp5ez1-1.js → minus-Cg0lH8Mn.js} +2 -2
  150. package/web/assets/modal-D3dkRJqD.js +1 -0
  151. package/web/assets/modal-ix4Amfqv.js +5 -0
  152. package/web/assets/{money-cashier-receipt.svg-EutWthy8.js → money-cashier-receipt.svg-WMIW7vxg.js} +1 -1
  153. package/web/assets/{money-currency-dollar-pay.svg-MnLj-orw.js → money-currency-dollar-pay.svg-qTcGSVX2.js} +1 -1
  154. package/web/assets/{money-graph-arrow-increase.svg-CVCZ3TyJ.js → money-graph-arrow-increase.svg-B-TQKOW-.js} +1 -1
  155. package/web/assets/{money-graph-bar-chart-increase.svg-DiUmCuhj.js → money-graph-bar-chart-increase.svg-CWCIjQcI.js} +1 -1
  156. package/web/assets/multiselect-C7U34xql.js +251 -0
  157. package/web/assets/{nature-ecology-leaf.svg-ByaLs72Y.js → nature-ecology-leaf.svg-CL26IBv2.js} +1 -1
  158. package/web/assets/{password-CxtOqagM.js → password-ZOY0bqV1.js} +4 -4
  159. package/web/assets/{phone-telephone.svg-BKz6Jkwn.js → phone-telephone.svg-BhzxDLVX.js} +1 -1
  160. package/web/assets/{plus-BPT_7GGk.js → plus-DsBv8bgd.js} +6 -6
  161. package/web/assets/process.store-DPp7dk63.js +1 -0
  162. package/web/assets/{programming-bug.svg-BwSc8f0s.js → programming-bug.svg-CBNm3E3F.js} +1 -1
  163. package/web/assets/{programming-cloud.svg-CEIulNEp.js → programming-cloud.svg-BrVRbl9B.js} +1 -1
  164. package/web/assets/{programming-computer-database-server.svg-Bc_F3NH0.js → programming-computer-database-server.svg-LQp6n-du.js} +1 -1
  165. package/web/assets/{programming-computer-database.svg-AYLkzJJE.js → programming-computer-database.svg-CSbhcIMU.js} +1 -1
  166. package/web/assets/{programming-module-four-layout.svg-DLpzPxNB.js → programming-module-four-layout.svg-DYEAcL2j.js} +1 -1
  167. package/web/assets/{programming-module-three.svg-CcuZn8dz.js → programming-module-three.svg-CCQXCU-e.js} +1 -1
  168. package/web/assets/{programming-module.svg-BjbGpQeu.js → programming-module.svg-Chrmf7k4.js} +1 -1
  169. package/web/assets/{programming-script-code.svg-poyfodgC.js → programming-script-code.svg-DPhhp3IW.js} +1 -1
  170. package/web/assets/{python-DpMMlrWM.js → python-B7ePhfsS.js} +1 -1
  171. package/web/assets/{razor-Ba_mg6U5.js → razor-ChpzroOv.js} +1 -1
  172. package/web/assets/router-Df972Ysi.js +1 -0
  173. package/web/assets/settings-scope-CC3oHq2H.js +1 -0
  174. package/web/assets/settings.store-B31_cRNl.js +1 -0
  175. package/web/assets/{shopping-cart.svg-BX2KYVCw.js → shopping-cart.svg-bmefzlOu.js} +1 -1
  176. package/web/assets/{shopping-gift-present.svg-BOl2vYLg.js → shopping-gift-present.svg-aUOleva0.js} +1 -1
  177. package/web/assets/{shopping-shipping-box-parcel-package.svg-gxfbOgnM.js → shopping-shipping-box-parcel-package.svg-BLsRP4dg.js} +1 -1
  178. package/web/assets/{src-D0LXRijj.js → src-BPSr9dU2.js} +34 -34
  179. package/web/assets/src-Dt37H-VN.js +1 -0
  180. package/web/assets/tabpanel-DZQ_g__B.js +150 -0
  181. package/web/assets/{tag-new-circle.svg-CTRMBJyc.js → tag-new-circle.svg-kTMMMv-0.js} +1 -1
  182. package/web/assets/{toggleswitch-DcDrXRKn.js → toggleswitch-BWXDXl37.js} +2 -2
  183. package/web/assets/{travel-map-earth-globe.svg-BPp4IapC.js → travel-map-earth-globe.svg-BdQmz8_b.js} +1 -1
  184. package/web/assets/trpc-aSS7b3jh.js +1 -0
  185. package/web/assets/{tsMode-HfLOT-e5.js → tsMode-arHIUQbZ.js} +6 -6
  186. package/web/assets/{typescript-DJAEsDnw.js → typescript-Ds9kgbPd.js} +1 -1
  187. package/web/assets/useAiChatDrawer-C1xrMtLl.js +1 -0
  188. package/web/assets/useCloudOrg-BexK510D.js +97 -0
  189. package/web/assets/{useProjectCatalog-C95cDPIr.js → useProjectCatalog-BbSaTBSS.js} +1 -1
  190. package/web/assets/{xml-1frg7aol.js → xml-CO56TgpZ.js} +1 -1
  191. package/web/assets/{yaml-DXzDcMOS.js → yaml-DueFV2-x.js} +1 -1
  192. package/web/index.html +2 -2
  193. package/agent-manager-UUSQK6S2.js +0 -7
  194. package/chunk-Z3KAXI7V.js.map +0 -1
  195. package/src-Q3PSCMS7.js.map +0 -1
  196. package/web/assets/AgentScalarChatInterface.vue-Cin_Rbay.js +0 -13
  197. package/web/assets/AgentTerminalPage-YgCQj_Mj.js +0 -1
  198. package/web/assets/AiChatPage-cIE_ZdF6.js +0 -1
  199. package/web/assets/AppLayout-dYfSESzv.js +0 -1
  200. package/web/assets/AuditPage-Bw3-G8ZM.js +0 -1
  201. package/web/assets/CloudAccountPage-CA4dMsIm.js +0 -1
  202. package/web/assets/CloudAccountPage-DjljrEI_.js +0 -1
  203. package/web/assets/CloudMessagingPage-CbfH2vPo.js +0 -2
  204. package/web/assets/DashboardPage-Cn3bUyhR.js +0 -1
  205. package/web/assets/DirectoryPickerDialog-BmsAi5gR.js +0 -1
  206. package/web/assets/EnvironmentForm-BfF9IFRB.js +0 -108
  207. package/web/assets/EnvironmentFormPage-CebWv3I_.js +0 -1
  208. package/web/assets/EnvironmentListPage-DDJGOHvR.js +0 -1
  209. package/web/assets/KanbanBoardPage-BMXyvHOl.js +0 -4
  210. package/web/assets/KanbanListPage-YMm_7vzg.js +0 -1
  211. package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
  212. package/web/assets/LaunchProjectPage-Da21oFjw.js +0 -1
  213. package/web/assets/LaunchServicesPage-8YJT1stQ.js +0 -1
  214. package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
  215. package/web/assets/LogViewer-BYNRWqlP.js +0 -3
  216. package/web/assets/OrgKeyPrompt-De8D0zzy.js +0 -1
  217. package/web/assets/ProcessDetailPage-CVwMbU6x.js +0 -1
  218. package/web/assets/ProjectDetailPage-BjBN3hnN.js +0 -1
  219. package/web/assets/ProjectListPage-BRXKT6op.js +0 -1
  220. package/web/assets/RandomJobTestPage-dhDNam5v.js +0 -2
  221. package/web/assets/ScenarioEditorPage-yOp4ZF14.js +0 -14
  222. package/web/assets/SendToChatDialog-o4y1Q-OD.js +0 -1
  223. package/web/assets/ServiceControlsBar-BH1ZEFkK.js +0 -1
  224. package/web/assets/ServiceDetailPage-CFb0blqq.js +0 -2
  225. package/web/assets/ServiceFormPage-DzFQ_M1-.js +0 -1
  226. package/web/assets/SettingsPage-Bcs3tnUy.js +0 -2063
  227. package/web/assets/UnlockPage-BAxKs_K9.js +0 -1
  228. package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
  229. package/web/assets/VariablesTable-CSuAPeF-.js +0 -1
  230. package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
  231. package/web/assets/VaultMigrationPage-BJX9kunL.js +0 -1
  232. package/web/assets/VersionBadge-B9Wvyvf6.js +0 -1
  233. package/web/assets/WikiPage-CBZFOPL_.js +0 -1
  234. package/web/assets/WikiView-DxPrGyFy.js +0 -1
  235. package/web/assets/add-scalar-classes-vtTXFTZ6.js +0 -387
  236. package/web/assets/auth-errors-DpUvxKid.js +0 -1
  237. package/web/assets/autocomplete-BakcEoGP.js +0 -308
  238. package/web/assets/card-DcpoBJHQ.js +0 -32
  239. package/web/assets/client-CKBKBNVm.js +0 -24
  240. package/web/assets/cloud-chat.store-Ci1DBP5j.js +0 -1
  241. package/web/assets/cloud-session-CzYQ65k8.js +0 -1
  242. package/web/assets/column-CVuKYYbZ.js +0 -907
  243. package/web/assets/interface-content-folder.svg-BikaY449.js +0 -1
  244. package/web/assets/modal-CGT4d1lM.js +0 -5
  245. package/web/assets/modal-D_N6NaGL.js +0 -1
  246. package/web/assets/multiselect-C6uayHqj.js +0 -251
  247. package/web/assets/process.store-CMxuFjFg.js +0 -1
  248. package/web/assets/router-QZ5Z8Lh7.js +0 -1
  249. package/web/assets/settings-scope-D7umae8c.js +0 -1
  250. package/web/assets/settings.store-Dte8TdJb.js +0 -1
  251. package/web/assets/src-DWvNj-EG.js +0 -1
  252. package/web/assets/tabpanel-Bkt-f7d6.js +0 -150
  253. package/web/assets/trpc-Dtgb4BMw.js +0 -1
  254. package/web/assets/useAiChatDrawer-fzyQ-fyM.js +0 -1
  255. package/web/assets/useCloudOrg-Bg7-icbW.js +0 -97
  256. /package/{agent-manager-UUSQK6S2.js.map → agent-manager-YDLSYZE3.js.map} +0 -0
  257. /package/web/assets/{uuid-CXjA27vZ.js → uuid-FpfcaBnR.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
@@ -4636,11 +4679,11 @@ var terminalManager = new TerminalManager();
4636
4679
  // src/trpc/routers/terminal.ts
4637
4680
  var terminalRouter = router({
4638
4681
  /** Spawn a new PTY shell session, returns a sessionId */
4639
- create: protectedProcedure.input(z23.object({
4640
- cwd: z23.string().max(512).optional(),
4641
- cols: z23.number().int().min(1).max(512).optional(),
4642
- rows: z23.number().int().min(1).max(256).optional(),
4643
- title: z23.string().max(128).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()
4644
4687
  })).mutation(({ input }) => {
4645
4688
  const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
4646
4689
  return { sessionId };
@@ -4648,34 +4691,34 @@ var terminalRouter = router({
4648
4691
  /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
4649
4692
  list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
4650
4693
  /** Renommer un onglet */
4651
- rename: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128), title: z23.string().max(128) })).mutation(({ input }) => {
4694
+ rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
4652
4695
  terminalManager.rename(input.sessionId, input.title);
4653
4696
  return { ok: true };
4654
4697
  }),
4655
4698
  /** Write data (keystrokes) to a PTY session */
4656
- 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 }) => {
4657
4700
  terminalManager.write(input.sessionId, input.data);
4658
4701
  return { ok: true };
4659
4702
  }),
4660
4703
  /** Resize a PTY session */
4661
- resize: protectedProcedure.input(z23.object({
4662
- sessionId: z23.string().max(128),
4663
- cols: z23.number().int().min(1).max(512),
4664
- 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)
4665
4708
  })).mutation(({ input }) => {
4666
4709
  terminalManager.resize(input.sessionId, input.cols, input.rows);
4667
4710
  return { ok: true };
4668
4711
  }),
4669
4712
  /** Destroy a PTY session */
4670
- 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 }) => {
4671
4714
  terminalManager.destroy(input.sessionId);
4672
4715
  return { ok: true };
4673
4716
  }),
4674
4717
  /** Stream PTY output for a session (async generator subscription) */
4675
- onData: protectedProcedure.input(z23.object({
4676
- sessionId: z23.string().max(128),
4718
+ onData: protectedProcedure.input(z24.object({
4719
+ sessionId: z24.string().max(128),
4677
4720
  /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
4678
- replay: z23.boolean().optional()
4721
+ replay: z24.boolean().optional()
4679
4722
  })).subscription(async function* ({ input }) {
4680
4723
  const emitter = terminalManager.getEmitter(input.sessionId);
4681
4724
  if (!emitter) {
@@ -4720,7 +4763,7 @@ var terminalRouter = router({
4720
4763
  });
4721
4764
 
4722
4765
  // src/trpc/routers/git.ts
4723
- import { z as z24 } from "zod";
4766
+ import { z as z25 } from "zod";
4724
4767
  import { TRPCError as TRPCError4 } from "@trpc/server";
4725
4768
  import { execFile as execFile4, spawn as spawn3 } from "child_process";
4726
4769
  import { promisify as promisify2 } from "util";
@@ -4730,12 +4773,12 @@ import { join as join4, resolve as resolvePath } from "path";
4730
4773
  var execFileAsync2 = promisify2(execFile4);
4731
4774
  var GIT_TIMEOUT = 15e3;
4732
4775
  var DIFF_MAX_BYTES = 512 * 1024;
4733
- var CWD_SCHEMA = z24.string().min(1).max(4096);
4734
- 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("../"), {
4735
4778
  message: "Path must be relative and not traverse up"
4736
4779
  });
4737
- var REMOTE_SCHEMA = z24.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
4738
- 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._\-/]+$/);
4739
4782
  function gitSafeEnv() {
4740
4783
  const env2 = {
4741
4784
  GIT_TERMINAL_PROMPT: "0",
@@ -4853,10 +4896,10 @@ async function getGitStatus(cwd) {
4853
4896
  }
4854
4897
  var gitRouter = router({
4855
4898
  /** Check if a working directory exists and optionally verify its git remote */
4856
- checkCwd: protectedProcedure.input(z24.object({
4899
+ checkCwd: protectedProcedure.input(z25.object({
4857
4900
  cwd: CWD_SCHEMA,
4858
- remote: z24.string().max(2048).optional(),
4859
- checkReachability: z24.boolean().optional()
4901
+ remote: z25.string().max(2048).optional(),
4902
+ checkReachability: z25.boolean().optional()
4860
4903
  })).query(async ({ input }) => {
4861
4904
  const resolvedCwd = expandEnvVar(input.cwd);
4862
4905
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -4877,8 +4920,8 @@ var gitRouter = router({
4877
4920
  return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
4878
4921
  }),
4879
4922
  /** Clone a git repository into a target directory */
4880
- clone: protectedProcedure.input(z24.object({
4881
- remote: z24.string().min(1).max(2048),
4923
+ clone: protectedProcedure.input(z25.object({
4924
+ remote: z25.string().min(1).max(2048),
4882
4925
  cwd: CWD_SCHEMA
4883
4926
  })).mutation(async ({ input }) => {
4884
4927
  const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
@@ -4899,13 +4942,13 @@ var gitRouter = router({
4899
4942
  return { success: true };
4900
4943
  }),
4901
4944
  /** Get full git status */
4902
- status: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4945
+ status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4903
4946
  const cwd = assertCwdExists(input.cwd);
4904
4947
  await assertGitRepo(cwd);
4905
4948
  return getGitStatus(cwd);
4906
4949
  }),
4907
4950
  /** Watch .git/ for changes and stream updated status */
4908
- 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 }) {
4909
4952
  const cwd = assertCwdExists(input.cwd);
4910
4953
  await assertGitRepo(cwd);
4911
4954
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -4956,7 +4999,7 @@ var gitRouter = router({
4956
4999
  }
4957
5000
  }),
4958
5001
  /** Get commit log */
4959
- 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 }) => {
4960
5003
  const cwd = assertCwdExists(input.cwd);
4961
5004
  await assertGitRepo(cwd);
4962
5005
  const format = "%H%h%an%ae%ai%s";
@@ -4967,7 +5010,7 @@ var gitRouter = router({
4967
5010
  });
4968
5011
  }),
4969
5012
  /** List local and remote branches */
4970
- branches: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5013
+ branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4971
5014
  const cwd = assertCwdExists(input.cwd);
4972
5015
  await assertGitRepo(cwd);
4973
5016
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -4979,7 +5022,7 @@ var gitRouter = router({
4979
5022
  return { current, branches };
4980
5023
  }),
4981
5024
  /** Checkout a branch */
4982
- 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 }) => {
4983
5026
  const cwd = assertCwdExists(input.cwd);
4984
5027
  await assertGitRepo(cwd);
4985
5028
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -4987,42 +5030,42 @@ var gitRouter = router({
4987
5030
  return { ok: true };
4988
5031
  }),
4989
5032
  /** Stage files */
4990
- 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 }) => {
4991
5034
  const cwd = assertCwdExists(input.cwd);
4992
5035
  await assertGitRepo(cwd);
4993
5036
  await git(["add", "--", ...input.paths], cwd);
4994
5037
  return { ok: true };
4995
5038
  }),
4996
5039
  /** Stage all files */
4997
- stageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5040
+ stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
4998
5041
  const cwd = assertCwdExists(input.cwd);
4999
5042
  await assertGitRepo(cwd);
5000
5043
  await git(["add", "-A"], cwd);
5001
5044
  return { ok: true };
5002
5045
  }),
5003
5046
  /** Unstage files */
5004
- 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 }) => {
5005
5048
  const cwd = assertCwdExists(input.cwd);
5006
5049
  await assertGitRepo(cwd);
5007
5050
  await git(["restore", "--staged", "--", ...input.paths], cwd);
5008
5051
  return { ok: true };
5009
5052
  }),
5010
5053
  /** Unstage all files */
5011
- unstageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5054
+ unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5012
5055
  const cwd = assertCwdExists(input.cwd);
5013
5056
  await assertGitRepo(cwd);
5014
5057
  await git(["reset", "--"], cwd);
5015
5058
  return { ok: true };
5016
5059
  }),
5017
5060
  /** Commit staged changes */
5018
- 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 }) => {
5019
5062
  const cwd = assertCwdExists(input.cwd);
5020
5063
  await assertGitRepo(cwd);
5021
5064
  const output = await git(["commit", "-m", input.message], cwd);
5022
5065
  return { ok: true, output: output.trim() };
5023
5066
  }),
5024
5067
  /** Push to remote */
5025
- 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 }) => {
5026
5069
  const cwd = assertCwdExists(input.cwd);
5027
5070
  await assertGitRepo(cwd);
5028
5071
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5031,25 +5074,25 @@ var gitRouter = router({
5031
5074
  return { ok: true, output: output.trim() };
5032
5075
  }),
5033
5076
  /** Pull from remote */
5034
- 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 }) => {
5035
5078
  const cwd = assertCwdExists(input.cwd);
5036
5079
  await assertGitRepo(cwd);
5037
5080
  const output = await git(["pull", input.remote], cwd);
5038
5081
  return { ok: true, output: output.trim() };
5039
5082
  }),
5040
5083
  /** Fetch from remote */
5041
- 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 }) => {
5042
5085
  const cwd = assertCwdExists(input.cwd);
5043
5086
  await assertGitRepo(cwd);
5044
5087
  const output = await git(["fetch", input.remote], cwd);
5045
5088
  return { ok: true, output: output.trim() };
5046
5089
  }),
5047
5090
  /** Get diff for a file or the whole index */
5048
- diff: protectedProcedure.input(z24.object({
5091
+ diff: protectedProcedure.input(z25.object({
5049
5092
  cwd: CWD_SCHEMA,
5050
- path: z24.string().max(4096).optional(),
5051
- staged: z24.boolean().default(false),
5052
- untracked: z24.boolean().default(false)
5093
+ path: z25.string().max(4096).optional(),
5094
+ staged: z25.boolean().default(false),
5095
+ untracked: z25.boolean().default(false)
5053
5096
  })).query(async ({ input }) => {
5054
5097
  const cwd = assertCwdExists(input.cwd);
5055
5098
  await assertGitRepo(cwd);
@@ -5097,21 +5140,21 @@ var gitRouter = router({
5097
5140
  };
5098
5141
  }),
5099
5142
  /** Discard changes to working tree files */
5100
- 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 }) => {
5101
5144
  const cwd = assertCwdExists(input.cwd);
5102
5145
  await assertGitRepo(cwd);
5103
5146
  await git(["restore", "--", ...input.paths], cwd);
5104
5147
  return { ok: true };
5105
5148
  }),
5106
5149
  /** Get staged diff (used by server for AI commit message generation) */
5107
- stagedDiff: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5150
+ stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5108
5151
  const cwd = assertCwdExists(input.cwd);
5109
5152
  await assertGitRepo(cwd);
5110
5153
  const diff = await git(["diff", "--staged"], cwd, true);
5111
5154
  return { diff: diff.slice(0, 3e4) };
5112
5155
  }),
5113
5156
  /** Merge a branch into the current branch */
5114
- 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 }) => {
5115
5158
  const cwd = assertCwdExists(input.cwd);
5116
5159
  await assertGitRepo(cwd);
5117
5160
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5119,14 +5162,14 @@ var gitRouter = router({
5119
5162
  return { ok: true, output: output.trim() };
5120
5163
  }),
5121
5164
  /** Rebase current branch onto another branch */
5122
- 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 }) => {
5123
5166
  const cwd = assertCwdExists(input.cwd);
5124
5167
  await assertGitRepo(cwd);
5125
5168
  const output = await git(["rebase", input.branch], cwd);
5126
5169
  return { ok: true, output: output.trim() };
5127
5170
  }),
5128
5171
  /** List remotes */
5129
- remotes: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5172
+ remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5130
5173
  const cwd = assertCwdExists(input.cwd);
5131
5174
  await assertGitRepo(cwd);
5132
5175
  const output = await git(["remote", "-v"], cwd, true);
@@ -5144,7 +5187,7 @@ var gitRouter = router({
5144
5187
  return remotes;
5145
5188
  }),
5146
5189
  /** List stash entries */
5147
- stashList: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5190
+ stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5148
5191
  const cwd = assertCwdExists(input.cwd);
5149
5192
  await assertGitRepo(cwd);
5150
5193
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5157,10 +5200,10 @@ var gitRouter = router({
5157
5200
  return entries;
5158
5201
  }),
5159
5202
  /** Stash current changes */
5160
- stashPush: protectedProcedure.input(z24.object({
5203
+ stashPush: protectedProcedure.input(z25.object({
5161
5204
  cwd: CWD_SCHEMA,
5162
- message: z24.string().max(4096).optional(),
5163
- includeUntracked: z24.boolean().default(true)
5205
+ message: z25.string().max(4096).optional(),
5206
+ includeUntracked: z25.boolean().default(true)
5164
5207
  })).mutation(async ({ input }) => {
5165
5208
  const cwd = assertCwdExists(input.cwd);
5166
5209
  await assertGitRepo(cwd);
@@ -5171,21 +5214,21 @@ var gitRouter = router({
5171
5214
  return { ok: true, output: output.trim() };
5172
5215
  }),
5173
5216
  /** Apply a stash entry and remove it from the list */
5174
- 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 }) => {
5175
5218
  const cwd = assertCwdExists(input.cwd);
5176
5219
  await assertGitRepo(cwd);
5177
5220
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5178
5221
  return { ok: true, output: output.trim() };
5179
5222
  }),
5180
5223
  /** Apply a stash entry without removing it from the list */
5181
- 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 }) => {
5182
5225
  const cwd = assertCwdExists(input.cwd);
5183
5226
  await assertGitRepo(cwd);
5184
5227
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5185
5228
  return { ok: true, output: output.trim() };
5186
5229
  }),
5187
5230
  /** Drop a stash entry */
5188
- 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 }) => {
5189
5232
  const cwd = assertCwdExists(input.cwd);
5190
5233
  await assertGitRepo(cwd);
5191
5234
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5218,7 +5261,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5218
5261
  }
5219
5262
 
5220
5263
  // src/trpc/routers/ai.ts
5221
- import { z as z25 } from "zod";
5264
+ import { z as z26 } from "zod";
5222
5265
  import { TRPCError as TRPCError5 } from "@trpc/server";
5223
5266
 
5224
5267
  // src/services/ai-spawn-manager.ts
@@ -5933,23 +5976,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
5933
5976
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
5934
5977
  var aiRouter = router({
5935
5978
  /** Spawn an AI CLI process. Returns a spawnId for streaming. */
5936
- spawn: protectedProcedure.input(z25.object({
5937
- cli: z25.string().max(64),
5938
- args: z25.array(z25.string().max(5e5)),
5939
- env: z25.record(z25.string().max(256), z25.string().max(5e5)).optional(),
5940
- cwd: z25.string().max(4096).optional(),
5941
- stdinData: z25.string().max(1e7).optional(),
5942
- enableMcp: z25.boolean().optional(),
5943
- mcpApiBaseUrl: z25.string().max(512).optional(),
5944
- 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()
5945
5988
  })).mutation(({ input }) => {
5946
5989
  const spawnId = aiSpawnManager.spawn(input);
5947
5990
  return { spawnId };
5948
5991
  }),
5949
5992
  /** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
5950
- stream: protectedProcedure.input(z25.object({
5951
- spawnId: z25.string().max(128),
5952
- 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)
5953
5996
  })).subscription(async function* ({ input }) {
5954
5997
  try {
5955
5998
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -5963,39 +6006,39 @@ var aiRouter = router({
5963
6006
  }
5964
6007
  }),
5965
6008
  /** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
5966
- spawnPty: protectedProcedure.input(z25.object({
5967
- cli: z25.string().max(64),
5968
- args: z25.array(z25.string().max(5e5)),
5969
- env: z25.record(z25.string().max(256), z25.string().max(5e5)).optional(),
5970
- cwd: z25.string().max(4096).optional(),
5971
- cols: z25.number().int().min(1).max(1e3).optional(),
5972
- rows: z25.number().int().min(1).max(1e3).optional(),
5973
- sessionId: z25.string().max(128).optional(),
5974
- enableMcp: z25.boolean().optional(),
5975
- mcpApiBaseUrl: z25.string().max(512).optional(),
5976
- 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()
5977
6020
  })).mutation(({ input }) => {
5978
6021
  const spawnId = aiSpawnManager.spawnPty(input);
5979
6022
  return { spawnId };
5980
6023
  }),
5981
6024
  /** Find a running PTY spawn by its logical sessionId (for re-attach). */
5982
- 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 }) => {
5983
6026
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
5984
6027
  }),
5985
6028
  /** Write input to a PTY spawn (user keystrokes). */
5986
- writePty: protectedProcedure.input(z25.object({
5987
- spawnId: z25.string().max(128),
5988
- data: z25.string().max(1e6)
6029
+ writePty: protectedProcedure.input(z26.object({
6030
+ spawnId: z26.string().max(128),
6031
+ data: z26.string().max(1e6)
5989
6032
  })).mutation(({ input }) => {
5990
6033
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
5991
6034
  return { ok };
5992
6035
  }),
5993
6036
  /** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
5994
- writeContextFiles: protectedProcedure.input(z25.object({
5995
- sessionId: z25.string().min(1).max(128),
5996
- files: z25.array(z25.object({
5997
- name: z25.string().min(1).max(256),
5998
- 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)
5999
6042
  })).min(1).max(MAX_CONTEXT_FILES)
6000
6043
  }).refine(
6001
6044
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -6010,25 +6053,25 @@ var aiRouter = router({
6010
6053
  * which clipboard method (if any) succeeded — caller decides whether to send
6011
6054
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
6012
6055
  */
6013
- pasteImage: protectedProcedure.input(z25.object({
6014
- sessionId: z25.string().max(128).optional(),
6015
- mimeType: z25.string().max(64),
6016
- 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)
6017
6060
  })).mutation(async ({ input }) => {
6018
6061
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
6019
6062
  return res;
6020
6063
  }),
6021
6064
  /** Resize a PTY spawn. */
6022
- resizePty: protectedProcedure.input(z25.object({
6023
- spawnId: z25.string().max(128),
6024
- cols: z25.number().int().min(1).max(1e3),
6025
- 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)
6026
6069
  })).mutation(({ input }) => {
6027
6070
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
6028
6071
  return { ok };
6029
6072
  }),
6030
6073
  /** Kill a running AI spawn. */
6031
- 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 }) => {
6032
6075
  const killed = aiSpawnManager.kill(input.spawnId);
6033
6076
  return { ok: killed };
6034
6077
  }),
@@ -6037,23 +6080,23 @@ var aiRouter = router({
6037
6080
  return aiSpawnManager.list();
6038
6081
  }),
6039
6082
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
6040
- 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 }) => {
6041
6084
  const acked = aiSpawnManager.ack(input.spawnId);
6042
6085
  return { ok: acked };
6043
6086
  }),
6044
6087
  /** Forward a JSON-RPC request to the local codex app-server. */
6045
- codexRequest: protectedProcedure.input(z25.object({
6046
- method: z25.string().max(256),
6047
- params: z25.record(z25.string(), z25.unknown()).default({}),
6048
- 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()
6049
6092
  })).mutation(async ({ input }) => {
6050
6093
  await codexAppServerManager.ensureConnected(input.env);
6051
6094
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
6052
6095
  return { result };
6053
6096
  }),
6054
6097
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6055
- codexNotifications: protectedProcedure.input(z25.object({
6056
- threadId: z25.string().max(256).optional()
6098
+ codexNotifications: protectedProcedure.input(z26.object({
6099
+ threadId: z26.string().max(256).optional()
6057
6100
  }).default({})).subscription(async function* ({ input, signal }) {
6058
6101
  await codexAppServerManager.ensureConnected();
6059
6102
  const queue = [];
@@ -6090,13 +6133,13 @@ var aiRouter = router({
6090
6133
  });
6091
6134
 
6092
6135
  // src/trpc/routers/wiki.ts
6093
- import { z as z26 } from "zod";
6136
+ import { z as z27 } from "zod";
6094
6137
  import { TRPCError as TRPCError6 } from "@trpc/server";
6095
6138
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6096
6139
  import { dirname as dirname2 } from "path";
6097
6140
  import { resolve as resolvePath3, join as join5, relative, sep } from "path";
6098
- var CWD_SCHEMA2 = z26.string().min(1).max(4096);
6099
- 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("/"), {
6100
6143
  message: "Path must be a relative path without traversal"
6101
6144
  });
6102
6145
  var MAX_FILES = 500;
@@ -6116,9 +6159,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6116
6159
  "target",
6117
6160
  "out"
6118
6161
  ]);
6119
- var RepoEntrySchema = z26.lazy(() => z26.union([
6120
- z26.object({ type: z26.literal("file"), name: z26.string(), path: z26.string() }),
6121
- 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) })
6122
6165
  ]));
6123
6166
  async function walkMarkdown(root, dir, depth, counter) {
6124
6167
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6188,13 +6231,13 @@ async function resolveRoot(cwd) {
6188
6231
  }
6189
6232
  }
6190
6233
  var wikiRouter = router({
6191
- listRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6234
+ listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6192
6235
  const root = await resolveRoot(input.cwd);
6193
6236
  const counter = { n: 0 };
6194
6237
  const entries = await walkMarkdown(root, root, 0, counter);
6195
6238
  return { root, entries, truncated: counter.n >= MAX_FILES };
6196
6239
  }),
6197
- 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 }) => {
6198
6241
  if (!/\.(md|markdown)$/i.test(input.path)) {
6199
6242
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6200
6243
  }
@@ -6220,10 +6263,10 @@ var wikiRouter = router({
6220
6263
  const content = await readFile2(realTarget, "utf-8");
6221
6264
  return { path: input.path, content };
6222
6265
  }),
6223
- writeMarkdown: protectedProcedure.input(z26.object({
6266
+ writeMarkdown: protectedProcedure.input(z27.object({
6224
6267
  cwd: CWD_SCHEMA2,
6225
6268
  path: REL_PATH_SCHEMA,
6226
- content: z26.string().max(5e6)
6269
+ content: z27.string().max(5e6)
6227
6270
  })).mutation(async ({ input }) => {
6228
6271
  if (!/\.(md|markdown)$/i.test(input.path)) {
6229
6272
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6234,7 +6277,7 @@ var wikiRouter = router({
6234
6277
  await writeFile6(target, input.content, "utf-8");
6235
6278
  return { path: input.path, ok: true };
6236
6279
  }),
6237
- 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 }) => {
6238
6281
  if (!/\.(md|markdown)$/i.test(input.path)) {
6239
6282
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6240
6283
  }
@@ -6250,13 +6293,13 @@ var wikiRouter = router({
6250
6293
  await writeFile6(target, "", "utf-8");
6251
6294
  return { path: input.path, ok: true };
6252
6295
  }),
6253
- 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 }) => {
6254
6297
  const root = await resolveRoot(input.cwd);
6255
6298
  const target = await resolveSafePath(root, input.path, false);
6256
6299
  await mkdir6(target, { recursive: true });
6257
6300
  return { path: input.path, ok: true };
6258
6301
  }),
6259
- renamePath: protectedProcedure.input(z26.object({
6302
+ renamePath: protectedProcedure.input(z27.object({
6260
6303
  cwd: CWD_SCHEMA2,
6261
6304
  fromPath: REL_PATH_SCHEMA,
6262
6305
  toPath: REL_PATH_SCHEMA
@@ -6274,14 +6317,14 @@ var wikiRouter = router({
6274
6317
  await rename2(from, to);
6275
6318
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6276
6319
  }),
6277
- ensureRoot: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6320
+ ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6278
6321
  const expanded = expandEnvVar(input.cwd);
6279
6322
  const abs = resolvePath3(expanded);
6280
6323
  await mkdir6(abs, { recursive: true });
6281
6324
  const root = await realpath(abs);
6282
6325
  return { root, ok: true };
6283
6326
  }),
6284
- 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 }) => {
6285
6328
  const root = await resolveRoot(input.cwd);
6286
6329
  const target = await resolveSafePath(root, input.path, true);
6287
6330
  if (target === root) {