@runeya/runeya 2.0.71 → 2.0.73

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 (261) hide show
  1. package/agent/index.js +208 -160
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-LBV3CVHB.js +7 -0
  4. package/{chunk-Z3KAXI7V.js → chunk-OTJQEK4D.js} +240 -29
  5. package/chunk-OTJQEK4D.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-MY5W5AYS.js} +828 -633
  10. package/src-MY5W5AYS.js.map +1 -0
  11. package/web/assets/AgentScalarChatInterface.vue-369U2Skl.js +13 -0
  12. package/web/assets/AgentTerminalPage-RHehuR0e.js +1 -0
  13. package/web/assets/AiChatPage-BbgFeCu5.js +1 -0
  14. package/web/assets/AppLayout-CvEbrCSS.js +1 -0
  15. package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
  16. package/web/assets/AuditPage-BRBcRwff.js +1 -0
  17. package/web/assets/CloudAccountPage-C9Y4zQYc.js +1 -0
  18. package/web/assets/CloudAccountPage-DmDrYdSX.js +1 -0
  19. package/web/assets/CloudMessagingPage-j2dztUz1.js +2 -0
  20. package/web/assets/DashboardPage-DbgOaKaI.js +1 -0
  21. package/web/assets/DirectoryPickerDialog-B5a7tO0P.js +1 -0
  22. package/web/assets/{EditorIcon-JRryeySJ.js → EditorIcon-C32poOg-.js} +2 -2
  23. package/web/assets/EnvironmentForm-CjnghPBi.js +108 -0
  24. package/web/assets/EnvironmentFormPage-VkOp77jY.js +1 -0
  25. package/web/assets/EnvironmentListPage-GkrefCj6.js +1 -0
  26. package/web/assets/KanbanBoardPage-CCl8dmwn.css +1 -0
  27. package/web/assets/KanbanBoardPage-CkrXazSk.js +4 -0
  28. package/web/assets/KanbanListPage-CtC0GWl8.js +1 -0
  29. package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
  30. package/web/assets/LaunchProjectPage-Zx3L-5pP.js +1 -0
  31. package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
  32. package/web/assets/LaunchServicesPage-Du56bNpD.js +1 -0
  33. package/web/assets/LogViewer-CusYWOVz.js +3 -0
  34. package/web/assets/OrgKeyPrompt-BhsICoTI.js +1 -0
  35. package/web/assets/{ProcessControls-BPQXGKib.js → ProcessControls-CNrbnTpl.js} +1 -1
  36. package/web/assets/ProcessDetailPage-h8RXTZkW.js +1 -0
  37. package/web/assets/{ProcessMetrics-D7L708Em.js → ProcessMetrics-B6Zf110f.js} +2 -2
  38. package/web/assets/ProjectDetailPage-B_fowFne.js +1 -0
  39. package/web/assets/ProjectListPage-DA9HaZW1.js +1 -0
  40. package/web/assets/RandomJobTestPage-BlKmN8WR.js +2 -0
  41. package/web/assets/ScenarioEditorPage-DxmF9C9y.js +14 -0
  42. package/web/assets/SendToChatDialog-CKDis_oY.js +1 -0
  43. package/web/assets/ServiceControlsBar-DqWOWB8l.js +1 -0
  44. package/web/assets/ServiceDetailPage-D4w7i_m0.js +2 -0
  45. package/web/assets/ServiceFormPage-D9EeSeKX.js +1 -0
  46. package/web/assets/SettingsPage-1zz5wMpp.js +2063 -0
  47. package/web/assets/{SettingsPage-CScovMi5.css → SettingsPage-ClUsbLPy.css} +1 -1
  48. package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
  49. package/web/assets/UnlockPage-C4b4tv9Z.js +1 -0
  50. package/web/assets/VariablesTable-BQW0OS3C.js +1 -0
  51. package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
  52. package/web/assets/VaultMigrationPage-B24yEz24.js +1 -0
  53. package/web/assets/VersionBadge-AuIQKahq.js +1 -0
  54. package/web/assets/WikiPage-YnXchmy7.js +1 -0
  55. package/web/assets/WikiView-B4FOcZxi.js +1 -0
  56. package/web/assets/add-scalar-classes-Bb4tLm0z.js +387 -0
  57. package/web/assets/auth-errors-CtC8HAvD.js +1 -0
  58. package/web/assets/autocomplete-LUb8fDRi.js +308 -0
  59. package/web/assets/{basic-shape-diamond.svg-C8K6YjGj.js → basic-shape-diamond.svg-CCzIrujg.js} +1 -1
  60. package/web/assets/{basic-shape-hexagon.svg-C9PeXR6S.js → basic-shape-hexagon.svg-DdSh-N2z.js} +1 -1
  61. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CfBLN6Yj.js → basic-shape-primary-circle-ellipse-round.svg-DsMpzYdr.js} +1 -1
  62. package/web/assets/{basic-shape-primary-square-rectangle.svg-D2QPBP5_.js → basic-shape-primary-square-rectangle.svg-S5aiKynO.js} +1 -1
  63. package/web/assets/{basic-shape-shield.svg-ClsEFdja.js → basic-shape-shield.svg-06mLN5Kq.js} +1 -1
  64. package/web/assets/{browser-D7ZckEFz.js → browser-B6kPJYkH.js} +1 -1
  65. package/web/assets/{browser-CF5_9QqR.js → browser-CvGRE98D.js} +1 -1
  66. package/web/assets/card-DQ-7UOQt.js +32 -0
  67. package/web/assets/{checkbox-CfwNXlF_.js → checkbox-CIizqAL5.js} +3 -3
  68. package/web/assets/{chip-3tOoBrD7.js → chip-CKY-cFPm.js} +2 -2
  69. package/web/assets/client-Cem5gxc3.js +24 -0
  70. package/web/assets/cloud-chat.store-JxTqY8hH.js +1 -0
  71. package/web/assets/cloud-session-BsgS9t9u.js +1 -0
  72. package/web/assets/column-C1iIQeFS.js +907 -0
  73. package/web/assets/{computer-device-desktop-monitor.svg-9f4DSNLj.js → computer-device-desktop-monitor.svg-pZKLXVEO.js} +1 -1
  74. package/web/assets/{computer-device-desktop.svg-BYoXiEOE.js → computer-device-desktop.svg-CPuJoG2N.js} +1 -1
  75. package/web/assets/{computer-device-laptop.svg-DR1sEMdL.js → computer-device-laptop.svg-B2lqbpvX.js} +1 -1
  76. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-B-AOaBuq.js → computer-device-mobile-phone-android-samsung-back.svg-C91mPbw_.js} +1 -1
  77. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Dw4z_H5H.js → computer-device-mobile-phone-android-samsung.svg-CgjjMhRB.js} +1 -1
  78. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BtqMb2Wo.js → computer-device-mobile-phone-iphone-x-back.svg-DdpW-odT.js} +1 -1
  79. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-eYEM_VXA.js → computer-device-mobile-phone-iphone-x.svg-B_qWFdEx.js} +1 -1
  80. package/web/assets/{computer-device-mobile-tablet-touch.svg-jLD41nvm.js → computer-device-mobile-tablet-touch.svg-BzehkLNH.js} +1 -1
  81. package/web/assets/{computer-device-mobile-tablet.svg-D_7_M1GK.js → computer-device-mobile-tablet.svg-rkDIg0TG.js} +1 -1
  82. package/web/assets/{computer-device-network-ethernet-cat6.svg-B_527QGY.js → computer-device-network-ethernet-cat6.svg-B-d_wrR_.js} +1 -1
  83. package/web/assets/{computer-device-network-lan-www.svg-ClZIaUOH.js → computer-device-network-lan-www.svg-TIELALfm.js} +1 -1
  84. package/web/assets/{computer-device-network-wifi-connection.svg-DC4OCJY0.js → computer-device-network-wifi-connection.svg-DbXW3PhA.js} +1 -1
  85. package/web/assets/{computer-device-network-wifi-router.svg-BWPpobCc.js → computer-device-network-wifi-router.svg-D_35yOXc.js} +1 -1
  86. package/web/assets/{cssMode-CXUrkdrQ.js → cssMode-B7e_eNPV.js} +1 -1
  87. package/web/assets/{divider-BrO5nkpd.js → divider-BHKktSGp.js} +2 -2
  88. package/web/assets/{docx-preview-tE714WSD.js → docx-preview-DlxCg_6l.js} +1 -1
  89. package/web/assets/{ecology-science-erlenmeyer-flask.svg-o8D0ASmr.js → ecology-science-erlenmeyer-flask.svg-Dl6fsl4J.js} +1 -1
  90. package/web/assets/{fieldset-LX5cdTvN.js → fieldset-De5JS2HC.js} +2 -2
  91. package/web/assets/{freemarker2-DJ82s0fP.js → freemarker2-BZ1pmGPV.js} +1 -1
  92. package/web/assets/{handlebars-BXFlY2Lu.js → handlebars-DQnFd9h7.js} +1 -1
  93. package/web/assets/{html-CqDVypOC.js → html-C0efjIn9.js} +1 -1
  94. package/web/assets/{htmlMode-DrHxdTQP.js → htmlMode-ChFMbKcf.js} +1 -1
  95. package/web/assets/{image-flash-lightning.svg-BDPMOynq.js → image-flash-lightning.svg-B7e5E2Qw.js} +1 -1
  96. package/web/assets/{image-picture-flower.svg-D-AJaery.js → image-picture-flower.svg-Cw1CZ_Iv.js} +1 -1
  97. package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
  98. package/web/assets/{index-a6DAapTb.js → index-nY5cynKj.js} +238 -238
  99. package/web/assets/{interface-alert-exclamation-diamond.svg-CV7M0IVQ.js → interface-alert-exclamation-diamond.svg-BSUXkUin.js} +1 -1
  100. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B8NapiB7.js → interface-alert-exclamation-triangle-warning.svg-BYqq_OZy.js} +1 -1
  101. package/web/assets/{interface-alert-information-circle.svg-eQIFULjG.js → interface-alert-information-circle.svg-BhCupwNF.js} +1 -1
  102. package/web/assets/{interface-award-crown.svg-D-4fclUD.js → interface-award-crown.svg-BSbmsgu7.js} +1 -1
  103. package/web/assets/{interface-bookmark.svg-XdbYDqqk.js → interface-bookmark-tag.svg-C9Tj2VKg.js} +1 -1
  104. package/web/assets/{interface-bookmark-tag.svg-Jy6EOdau.js → interface-bookmark.svg-DImT79em.js} +1 -1
  105. package/web/assets/{interface-calendar-date-one.svg-BIoXVZrz.js → interface-calendar-date-one.svg-emGvRYfy.js} +1 -1
  106. package/web/assets/{interface-content-book-open-pages.svg-DHwJbBvQ.js → interface-content-book-open-pages.svg-DZvD8n9A.js} +1 -1
  107. package/web/assets/{interface-content-book-page.svg-47msUBN_.js → interface-content-book-page.svg--RPY0ONx.js} +1 -1
  108. package/web/assets/{interface-content-file.svg-DXw9W8QM.js → interface-content-file.svg-BhkPpAIG.js} +1 -1
  109. package/web/assets/interface-content-folder.svg-DNkHJfTi.js +1 -0
  110. package/web/assets/{interface-content-folder.svg-BmK_IJv8.js → interface-content-folder.svg-_Qz96t7R.js} +1 -1
  111. package/web/assets/{interface-copy-clipboard.svg-CQ1rQN0L.js → interface-copy-clipboard.svg-DBVvMdKB.js} +1 -1
  112. package/web/assets/{interface-edit-attachment.svg-C3aTaTh_.js → interface-edit-attachment.svg-Bq9IjtmQ.js} +1 -1
  113. package/web/assets/{interface-edit-binocular.svg-B2Ue_tgs.js → interface-edit-binocular.svg-BFUljAkg.js} +1 -1
  114. package/web/assets/{interface-edit-magic-wand.svg-DDKse-Wy.js → interface-edit-magic-wand.svg-DSWYEf6V.js} +1 -1
  115. package/web/assets/{interface-edit-tool-paint-roller.svg-C2ABby1f.js → interface-edit-tool-paint-roller.svg-iMYCD-Af.js} +1 -1
  116. package/web/assets/{interface-edit-tool-pencil.svg-CNjYbknQ.js → interface-edit-tool-pencil.svg-D7jUKckt.js} +1 -1
  117. package/web/assets/{interface-favorite-award.svg-DWqSHfIa.js → interface-favorite-award.svg-CLCdfKlW.js} +1 -1
  118. package/web/assets/{interface-favorite-flag.svg-CNUsr98g.js → interface-favorite-flag.svg-CMNediEx.js} +1 -1
  119. package/web/assets/{interface-favorite-heart.svg-3Eb366FO.js → interface-favorite-heart.svg-9AfGidiX.js} +1 -1
  120. package/web/assets/{interface-favorite-star.svg-CVJ3aq1n.js → interface-favorite-star.svg-DD76FDcq.js} +1 -1
  121. package/web/assets/{interface-favorite-stars-sparkles.svg-BfXhPBbs.js → interface-favorite-stars-sparkles.svg-DZmc8XpZ.js} +1 -1
  122. package/web/assets/{interface-hierarchy-flowchart.svg-DzsqKrYq.js → interface-hierarchy-flowchart.svg-DbdQ6BrN.js} +1 -1
  123. package/web/assets/{interface-home-house.svg-BnXbuyZn.js → interface-home-house.svg-BIWYFqhm.js} +1 -1
  124. package/web/assets/{interface-hyperlink.svg-BsmSmyP5.js → interface-hyperlink.svg-CknF1YxB.js} +1 -1
  125. package/web/assets/{interface-lighting-brightness.svg-BywVQRo9.js → interface-lighting-brightness.svg-B3Svsmp0.js} +1 -1
  126. package/web/assets/{interface-lock-closed.svg-BLPORc_h.js → interface-lock-closed.svg-CTmwhMsF.js} +1 -1
  127. package/web/assets/{interface-lock-open-unlock.svg-CaYlbVmU.js → interface-lock-open-unlock.svg-BSC0HJE5.js} +1 -1
  128. package/web/assets/{interface-login-key.svg-D5F_9MJ0.js → interface-login-key.svg-CmPadurO.js} +1 -1
  129. package/web/assets/{interface-search.svg-CF1D8GIV.js → interface-search.svg-BbWqGsiC.js} +1 -1
  130. package/web/assets/{interface-setting-cog.svg-D4AOKG2g.js → interface-setting-cog.svg-D336jNxR.js} +1 -1
  131. package/web/assets/{interface-share-megaphone-bullhorn.svg-BIfr2_va.js → interface-share-megaphone-bullhorn.svg-BEPIq-yB.js} +1 -1
  132. package/web/assets/{interface-share-rocket.svg-NDd3dv1t.js → interface-share-rocket.svg-bi0Fp7B7.js} +1 -1
  133. package/web/assets/{interface-share-satellite.svg-CVDJbmT-.js → interface-share-satellite.svg-DZ-FBSOP.js} +1 -1
  134. package/web/assets/{interface-share-space-ship.svg-D0ZLJNO2.js → interface-share-space-ship.svg-CL8kfexn.js} +1 -1
  135. package/web/assets/{interface-share.svg-WpwbpOes.js → interface-share.svg-B4NzC8MW.js} +1 -1
  136. package/web/assets/{interface-signal-square.svg-DnfzUw_B.js → interface-signal-square.svg-Do9HNC1g.js} +1 -1
  137. package/web/assets/{interface-time-clock-circle.svg-BhxciNvX.js → interface-time-clock-circle.svg-BiwVEBFE.js} +1 -1
  138. package/web/assets/{interface-time-hour-glass.svg-DBzSaSHQ.js → interface-time-hour-glass.svg-Bj4400VR.js} +1 -1
  139. package/web/assets/{interface-users-multiple.svg-BULh1giq.js → interface-users-multiple.svg-wf0xHt7S.js} +1 -1
  140. package/web/assets/{interface-weather-moon.svg-D377V2os.js → interface-weather-moon.svg-CHq44y1K.js} +1 -1
  141. package/web/assets/{javascript-BTXoJ3Qy.js → javascript-C5gAX9Ho.js} +1 -1
  142. package/web/assets/{jsonMode-D4a3Khim.js → jsonMode-Cah11eZC.js} +2 -2
  143. package/web/assets/{liquid-DfO0R4Mk.js → liquid-CS5lfWiD.js} +1 -1
  144. package/web/assets/{lspLanguageFeatures-BvPWuQFt.js → lspLanguageFeatures-DrQCZerv.js} +3 -3
  145. package/web/assets/{mail-chat-bubble-square.svg-SK3IJ6QN.js → mail-chat-bubble-square.svg-Bn4lLCAH.js} +1 -1
  146. package/web/assets/{mail-send-email-paper-airplane.svg-CJFA7B2E.js → mail-send-email-paper-airplane.svg-0dbuhy9s.js} +1 -1
  147. package/web/assets/{mail-send-envelope.svg-eO_-QNyE.js → mail-send-envelope.svg-D7MrBGJp.js} +1 -1
  148. package/web/assets/{mdx-G_vwFSSe.js → mdx-B4jzso3k.js} +1 -1
  149. package/web/assets/{message-CxPw04rG.js → message-DnHiYCym.js} +2 -2
  150. package/web/assets/{minus-Dp5ez1-1.js → minus-BbLiFqfk.js} +2 -2
  151. package/web/assets/modal-BVB2xBJ_.js +1 -0
  152. package/web/assets/modal-dKcYqKht.js +5 -0
  153. package/web/assets/{money-cashier-receipt.svg-EutWthy8.js → money-cashier-receipt.svg-C3G7AK7q.js} +1 -1
  154. package/web/assets/{money-currency-dollar-pay.svg-MnLj-orw.js → money-currency-dollar-pay.svg-DCj0-yon.js} +1 -1
  155. package/web/assets/{money-graph-arrow-increase.svg-CVCZ3TyJ.js → money-graph-arrow-increase.svg-DxdQlcuf.js} +1 -1
  156. package/web/assets/{money-graph-bar-chart-increase.svg-DiUmCuhj.js → money-graph-bar-chart-increase.svg-Cm-WIBNr.js} +1 -1
  157. package/web/assets/multiselect-C8IBJ6lu.js +251 -0
  158. package/web/assets/{nature-ecology-leaf.svg-ByaLs72Y.js → nature-ecology-leaf.svg-BDz3LTpd.js} +1 -1
  159. package/web/assets/{password-CxtOqagM.js → password-DEuFV3TX.js} +4 -4
  160. package/web/assets/{phone-telephone.svg-BKz6Jkwn.js → phone-telephone.svg-DRL7_jEB.js} +1 -1
  161. package/web/assets/{plus-BPT_7GGk.js → plus-CdxO2Yq9.js} +6 -6
  162. package/web/assets/process.store-CauAk_PY.js +1 -0
  163. package/web/assets/{programming-bug.svg-BwSc8f0s.js → programming-bug.svg-BDftmfZl.js} +1 -1
  164. package/web/assets/{programming-cloud.svg-CEIulNEp.js → programming-cloud.svg-i-GCH3f4.js} +1 -1
  165. package/web/assets/{programming-computer-database-server.svg-Bc_F3NH0.js → programming-computer-database-server.svg-CC2MM4RA.js} +1 -1
  166. package/web/assets/{programming-computer-database.svg-AYLkzJJE.js → programming-computer-database.svg-CwD3IE7b.js} +1 -1
  167. package/web/assets/{programming-module-four-layout.svg-DLpzPxNB.js → programming-module-four-layout.svg-L5WQW7eZ.js} +1 -1
  168. package/web/assets/{programming-module-three.svg-CcuZn8dz.js → programming-module-three.svg-BqKxUh2a.js} +1 -1
  169. package/web/assets/{programming-module.svg-BjbGpQeu.js → programming-module.svg-B5HGxk_5.js} +1 -1
  170. package/web/assets/{programming-script-code.svg-poyfodgC.js → programming-script-code.svg-C6b1t67U.js} +1 -1
  171. package/web/assets/{python-DpMMlrWM.js → python-PWdcATjU.js} +1 -1
  172. package/web/assets/{razor-Ba_mg6U5.js → razor-D2OFUF9W.js} +1 -1
  173. package/web/assets/router-WC51nlcm.js +1 -0
  174. package/web/assets/settings-scope-CIL2r-x6.js +1 -0
  175. package/web/assets/settings.store-Cx63DJSu.js +1 -0
  176. package/web/assets/{shopping-cart.svg-BX2KYVCw.js → shopping-cart.svg-C4eUOPuW.js} +1 -1
  177. package/web/assets/{shopping-gift-present.svg-BOl2vYLg.js → shopping-gift-present.svg-DWR1Ue0b.js} +1 -1
  178. package/web/assets/{shopping-shipping-box-parcel-package.svg-gxfbOgnM.js → shopping-shipping-box-parcel-package.svg-vIUMJCzM.js} +1 -1
  179. package/web/assets/src-CG6NRFnq.js +1 -0
  180. package/web/assets/{src-D0LXRijj.js → src-D3B9QT3f.js} +34 -34
  181. package/web/assets/tabpanel-Dt8wxAUn.js +150 -0
  182. package/web/assets/{tag-new-circle.svg-CTRMBJyc.js → tag-new-circle.svg-CrLYLp-g.js} +1 -1
  183. package/web/assets/{toggleswitch-DcDrXRKn.js → toggleswitch-DXNKoD3W.js} +2 -2
  184. package/web/assets/{travel-map-earth-globe.svg-BPp4IapC.js → travel-map-earth-globe.svg-CbJkEfGx.js} +1 -1
  185. package/web/assets/trpc-BTkvhuSo.js +1 -0
  186. package/web/assets/{tsMode-HfLOT-e5.js → tsMode-BWnOhIDG.js} +6 -6
  187. package/web/assets/{typescript-DJAEsDnw.js → typescript-Ca6d0Xpt.js} +1 -1
  188. package/web/assets/useAiChatDrawer-DbiVGX1A.js +1 -0
  189. package/web/assets/useCloudOrg-CYZgY69j.css +1 -0
  190. package/web/assets/useCloudOrg-JI0t8ZfS.js +97 -0
  191. package/web/assets/{useProjectCatalog-C95cDPIr.js → useProjectCatalog-T9HoUKsV.js} +1 -1
  192. package/web/assets/{xml-1frg7aol.js → xml-DJnU4yP8.js} +1 -1
  193. package/web/assets/{yaml-DXzDcMOS.js → yaml-DJC6BhFp.js} +1 -1
  194. package/web/index.html +2 -2
  195. package/agent-manager-UUSQK6S2.js +0 -7
  196. package/chunk-Z3KAXI7V.js.map +0 -1
  197. package/src-Q3PSCMS7.js.map +0 -1
  198. package/web/assets/AgentScalarChatInterface.vue-Cin_Rbay.js +0 -13
  199. package/web/assets/AgentTerminalPage-YgCQj_Mj.js +0 -1
  200. package/web/assets/AiChatPage-cIE_ZdF6.js +0 -1
  201. package/web/assets/AppLayout-dYfSESzv.js +0 -1
  202. package/web/assets/AuditPage-Bw3-G8ZM.js +0 -1
  203. package/web/assets/CloudAccountPage-CA4dMsIm.js +0 -1
  204. package/web/assets/CloudAccountPage-DjljrEI_.js +0 -1
  205. package/web/assets/CloudMessagingPage-CbfH2vPo.js +0 -2
  206. package/web/assets/DashboardPage-Cn3bUyhR.js +0 -1
  207. package/web/assets/DirectoryPickerDialog-BmsAi5gR.js +0 -1
  208. package/web/assets/EnvironmentForm-BfF9IFRB.js +0 -108
  209. package/web/assets/EnvironmentFormPage-CebWv3I_.js +0 -1
  210. package/web/assets/EnvironmentListPage-DDJGOHvR.js +0 -1
  211. package/web/assets/KanbanBoardPage-BMXyvHOl.js +0 -4
  212. package/web/assets/KanbanBoardPage-JjjS4BfO.css +0 -1
  213. package/web/assets/KanbanListPage-YMm_7vzg.js +0 -1
  214. package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
  215. package/web/assets/LaunchProjectPage-Da21oFjw.js +0 -1
  216. package/web/assets/LaunchServicesPage-8YJT1stQ.js +0 -1
  217. package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
  218. package/web/assets/LogViewer-BYNRWqlP.js +0 -3
  219. package/web/assets/OrgKeyPrompt-De8D0zzy.js +0 -1
  220. package/web/assets/ProcessDetailPage-CVwMbU6x.js +0 -1
  221. package/web/assets/ProjectDetailPage-BjBN3hnN.js +0 -1
  222. package/web/assets/ProjectListPage-BRXKT6op.js +0 -1
  223. package/web/assets/RandomJobTestPage-dhDNam5v.js +0 -2
  224. package/web/assets/ScenarioEditorPage-yOp4ZF14.js +0 -14
  225. package/web/assets/SendToChatDialog-o4y1Q-OD.js +0 -1
  226. package/web/assets/ServiceControlsBar-BH1ZEFkK.js +0 -1
  227. package/web/assets/ServiceDetailPage-CFb0blqq.js +0 -2
  228. package/web/assets/ServiceFormPage-DzFQ_M1-.js +0 -1
  229. package/web/assets/SettingsPage-Bcs3tnUy.js +0 -2063
  230. package/web/assets/UnlockPage-BAxKs_K9.js +0 -1
  231. package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
  232. package/web/assets/VariablesTable-CSuAPeF-.js +0 -1
  233. package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
  234. package/web/assets/VaultMigrationPage-BJX9kunL.js +0 -1
  235. package/web/assets/VersionBadge-B9Wvyvf6.js +0 -1
  236. package/web/assets/WikiPage-CBZFOPL_.js +0 -1
  237. package/web/assets/WikiView-DxPrGyFy.js +0 -1
  238. package/web/assets/add-scalar-classes-vtTXFTZ6.js +0 -387
  239. package/web/assets/auth-errors-DpUvxKid.js +0 -1
  240. package/web/assets/autocomplete-BakcEoGP.js +0 -308
  241. package/web/assets/card-DcpoBJHQ.js +0 -32
  242. package/web/assets/client-CKBKBNVm.js +0 -24
  243. package/web/assets/cloud-chat.store-Ci1DBP5j.js +0 -1
  244. package/web/assets/cloud-session-CzYQ65k8.js +0 -1
  245. package/web/assets/column-CVuKYYbZ.js +0 -907
  246. package/web/assets/interface-content-folder.svg-BikaY449.js +0 -1
  247. package/web/assets/modal-CGT4d1lM.js +0 -5
  248. package/web/assets/modal-D_N6NaGL.js +0 -1
  249. package/web/assets/multiselect-C6uayHqj.js +0 -251
  250. package/web/assets/process.store-CMxuFjFg.js +0 -1
  251. package/web/assets/router-QZ5Z8Lh7.js +0 -1
  252. package/web/assets/settings-scope-D7umae8c.js +0 -1
  253. package/web/assets/settings.store-Dte8TdJb.js +0 -1
  254. package/web/assets/src-DWvNj-EG.js +0 -1
  255. package/web/assets/tabpanel-Bkt-f7d6.js +0 -150
  256. package/web/assets/trpc-Dtgb4BMw.js +0 -1
  257. package/web/assets/useAiChatDrawer-fzyQ-fyM.js +0 -1
  258. package/web/assets/useCloudOrg-BdpqnN19.css +0 -1
  259. package/web/assets/useCloudOrg-Bg7-icbW.js +0 -97
  260. /package/{agent-manager-UUSQK6S2.js.map → agent-manager-LBV3CVHB.js.map} +0 -0
  261. /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,54 @@ 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([
1727
+ "kanban:read",
1728
+ "kanban:write",
1729
+ "kanban:comment",
1730
+ "kanban:delete"
1731
+ ]);
1732
+ var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
1733
+ var CloudApiKeySchema = z20.object({
1734
+ id: z20.string().max(128),
1735
+ organizationId: z20.string().max(128),
1736
+ name: z20.string().min(1).max(200),
1737
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1738
+ /**
1739
+ * Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
1740
+ * l'organisation ».
1741
+ *
1742
+ * `null` et `[]` ne sont pas la même chose : la liste vide n'ouvre rien, et
1743
+ * c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
1744
+ * nommait plus que lui.
1745
+ */
1746
+ boards: z20.array(z20.string().max(64)).max(200).nullable(),
1747
+ createdAt: z20.string().max(64),
1748
+ /** Dernier usage constaté, pour reconnaître une clé oubliée. */
1749
+ lastUsedAt: z20.string().max(64).nullable(),
1750
+ /** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
1751
+ createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
1752
+ /** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
1753
+ keyPreview: z20.string().max(8)
1754
+ });
1755
+ var CreatedCloudApiKeySchema = z20.object({
1756
+ key: CloudApiKeySchema,
1757
+ secret: CloudApiKeySecretSchema
1758
+ });
1759
+ var CreateCloudApiKeyInput = z20.object({
1760
+ organizationId: z20.string().min(1).max(128),
1761
+ name: z20.string().min(1).max(200),
1762
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1763
+ boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
1764
+ });
1765
+ var UpdateCloudApiKeyInput = z20.object({
1766
+ id: z20.string().min(1).max(128),
1767
+ name: z20.string().min(1).max(200).optional(),
1768
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
1769
+ boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1770
+ });
1771
+
1724
1772
  // ../../packages/shared/src/utils/crypto.ts
1725
1773
  import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
1726
1774
 
@@ -2897,7 +2945,7 @@ import { execa as execa3 } from "execa";
2897
2945
  import { homedir as homedir4 } from "os";
2898
2946
 
2899
2947
  // src/trpc/routers/config.ts
2900
- import { z as z20 } from "zod";
2948
+ import { z as z21 } from "zod";
2901
2949
 
2902
2950
  // src/services/traefik-manager.ts
2903
2951
  import { spawn, execFile as execFile2 } from "child_process";
@@ -3274,13 +3322,13 @@ function resolvePassthroughEnv() {
3274
3322
  return result;
3275
3323
  }
3276
3324
  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)
3325
+ setPassthroughEnv: protectedProcedure.input(z21.object({
3326
+ names: z21.array(
3327
+ z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3280
3328
  ).max(100),
3281
- values: z20.record(
3282
- z20.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3283
- z20.string().max(32768)
3329
+ values: z21.record(
3330
+ z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3331
+ z21.string().max(32768)
3284
3332
  ).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
3285
3333
  })).mutation(({ input }) => {
3286
3334
  passthroughEnvNames = input.names;
@@ -3317,7 +3365,7 @@ var configRouter = router({
3317
3365
  getTraefikFileTree: protectedProcedure.query(async () => {
3318
3366
  return traefikManager.getFileTree();
3319
3367
  }),
3320
- getTraefikLogs: protectedProcedure.input(z20.object({ lines: z20.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3368
+ getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3321
3369
  const logs = await traefikManager.getLogs(input.lines);
3322
3370
  return { logs };
3323
3371
  })
@@ -3509,17 +3557,17 @@ var healthChecker = new HealthChecker();
3509
3557
  import killPort from "kill-port";
3510
3558
 
3511
3559
  // 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(),
3560
+ import { z as z22 } from "zod";
3561
+ var EnvSchema = z22.object({
3562
+ RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
3563
+ RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
3564
+ PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3565
+ AGENT_ID: z22.string().optional(),
3518
3566
  // 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)
3567
+ LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3568
+ METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
3569
+ GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
3570
+ HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3523
3571
  });
3524
3572
  var env = EnvSchema.parse(process.env);
3525
3573
 
@@ -4294,7 +4342,7 @@ var processRouter = router({
4294
4342
  return processManager.listStatuses();
4295
4343
  }),
4296
4344
  /** Get a single process */
4297
- get: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(({ input }) => {
4345
+ get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4298
4346
  const status = processManager.getStatus(input.id);
4299
4347
  if (!status) {
4300
4348
  throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
@@ -4307,78 +4355,78 @@ var processRouter = router({
4307
4355
  return { id };
4308
4356
  }),
4309
4357
  /** Undeploy: stop + remove */
4310
- undeploy: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4358
+ undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4311
4359
  await processManager.undeploy(input.id);
4312
4360
  return { success: true };
4313
4361
  }),
4314
4362
  /** Update the service config for a deployed process */
4315
- updateConfig: protectedProcedure.input(z22.object({ serviceId: z22.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4363
+ updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4316
4364
  processManager.updateConfig(input.serviceId, input.config);
4317
4365
  return { success: true };
4318
4366
  }),
4319
4367
  /** Start a deployed process */
4320
- start: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4368
+ start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4321
4369
  console.log(`[agent] start service=${input.id}`);
4322
4370
  await processManager.start(input.id);
4323
4371
  return processManager.getStatus(input.id);
4324
4372
  }),
4325
4373
  /** Stop a running process */
4326
- stop: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4374
+ stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4327
4375
  console.log(`[agent] stop service=${input.id}`);
4328
4376
  await processManager.stop(input.id);
4329
4377
  return processManager.getStatus(input.id);
4330
4378
  }),
4331
4379
  /** Restart a process */
4332
- restart: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(async ({ input }) => {
4380
+ restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4333
4381
  console.log(`[agent] restart service=${input.id}`);
4334
4382
  await processManager.restart(input.id);
4335
4383
  return processManager.getStatus(input.id);
4336
4384
  }),
4337
4385
  /** Get buffered logs for a process */
4338
- logs: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(({ input }) => {
4386
+ logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4339
4387
  const logs = processManager.getLogs(input.id);
4340
4388
  return logs;
4341
4389
  }),
4342
4390
  /** Clear buffered logs for a process */
4343
- clearLogBuffer: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).mutation(({ input }) => {
4391
+ clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
4344
4392
  processManager.clearLogBuffer(input.id);
4345
4393
  return { success: true };
4346
4394
  }),
4347
4395
  /** 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 }) => {
4396
+ executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4349
4397
  const result = await processManager.executeShortcut(input.id, input.shortcut);
4350
4398
  return result;
4351
4399
  }),
4352
4400
  /** Cancel a running shortcut command */
4353
- cancelShortcut: protectedProcedure.input(z22.object({ id: z22.string().max(128), shortcutId: z22.string().max(128) })).mutation(({ input }) => {
4401
+ cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
4354
4402
  processManager.cancelShortcut(input.id, input.shortcutId);
4355
4403
  return { success: true };
4356
4404
  }),
4357
4405
  /** 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 }) => {
4406
+ cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
4359
4407
  processManager.cancelAdHocCommand(input.id, input.commandId);
4360
4408
  return { success: true };
4361
4409
  }),
4362
4410
  /** 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()
4411
+ executeAdHocCommand: protectedProcedure.input(z23.object({
4412
+ id: z23.string().max(128),
4413
+ command: z23.string().min(1).max(4096),
4414
+ cwd: z23.string().max(4096).optional(),
4415
+ commandId: z23.string().max(128).optional()
4368
4416
  })).mutation(async ({ input }) => {
4369
4417
  const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
4370
4418
  return result;
4371
4419
  }),
4372
4420
  /** List active log source types for a process */
4373
- logSources: protectedProcedure.input(z22.object({ processId: z22.string().max(128) })).query(({ input }) => {
4421
+ logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
4374
4422
  return processManager.getLogSourceTypes(input.processId);
4375
4423
  }),
4376
4424
  /** Get current metrics for a process */
4377
- metrics: protectedProcedure.input(z22.object({ id: z22.string().max(128) })).query(async ({ input }) => {
4425
+ metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
4378
4426
  return processManager.getMetrics(input.id);
4379
4427
  }),
4380
4428
  /** 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 }) {
4429
+ onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4382
4430
  const queue = [];
4383
4431
  let resolve2 = null;
4384
4432
  const handler = (batch) => {
@@ -4407,7 +4455,7 @@ var processRouter = router({
4407
4455
  }
4408
4456
  }),
4409
4457
  /** Subscribe to real-time status changes */
4410
- onStatus: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4458
+ onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4411
4459
  console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
4412
4460
  const queue = [];
4413
4461
  let resolve2 = null;
@@ -4439,7 +4487,7 @@ var processRouter = router({
4439
4487
  }
4440
4488
  }),
4441
4489
  /** Subscribe to real-time health status changes */
4442
- onHealth: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4490
+ onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4443
4491
  const queue = [];
4444
4492
  let resolve2 = null;
4445
4493
  const handler = (healthData) => {
@@ -4469,7 +4517,7 @@ var processRouter = router({
4469
4517
  }
4470
4518
  }),
4471
4519
  /** Subscribe to real-time metrics */
4472
- onMetrics: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4520
+ onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4473
4521
  const queue = [];
4474
4522
  let resolve2 = null;
4475
4523
  const handler = (metrics) => {
@@ -4543,7 +4591,7 @@ var healthRouter = router({
4543
4591
  });
4544
4592
 
4545
4593
  // src/trpc/routers/terminal.ts
4546
- import { z as z23 } from "zod";
4594
+ import { z as z24 } from "zod";
4547
4595
  import { TRPCError as TRPCError3 } from "@trpc/server";
4548
4596
 
4549
4597
  // src/services/terminal-manager.ts
@@ -4636,11 +4684,11 @@ var terminalManager = new TerminalManager();
4636
4684
  // src/trpc/routers/terminal.ts
4637
4685
  var terminalRouter = router({
4638
4686
  /** 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()
4687
+ create: protectedProcedure.input(z24.object({
4688
+ cwd: z24.string().max(512).optional(),
4689
+ cols: z24.number().int().min(1).max(512).optional(),
4690
+ rows: z24.number().int().min(1).max(256).optional(),
4691
+ title: z24.string().max(128).optional()
4644
4692
  })).mutation(({ input }) => {
4645
4693
  const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
4646
4694
  return { sessionId };
@@ -4648,34 +4696,34 @@ var terminalRouter = router({
4648
4696
  /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
4649
4697
  list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
4650
4698
  /** Renommer un onglet */
4651
- rename: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128), title: z23.string().max(128) })).mutation(({ input }) => {
4699
+ rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
4652
4700
  terminalManager.rename(input.sessionId, input.title);
4653
4701
  return { ok: true };
4654
4702
  }),
4655
4703
  /** 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 }) => {
4704
+ write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
4657
4705
  terminalManager.write(input.sessionId, input.data);
4658
4706
  return { ok: true };
4659
4707
  }),
4660
4708
  /** 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)
4709
+ resize: protectedProcedure.input(z24.object({
4710
+ sessionId: z24.string().max(128),
4711
+ cols: z24.number().int().min(1).max(512),
4712
+ rows: z24.number().int().min(1).max(256)
4665
4713
  })).mutation(({ input }) => {
4666
4714
  terminalManager.resize(input.sessionId, input.cols, input.rows);
4667
4715
  return { ok: true };
4668
4716
  }),
4669
4717
  /** Destroy a PTY session */
4670
- destroy: protectedProcedure.input(z23.object({ sessionId: z23.string().max(128) })).mutation(({ input }) => {
4718
+ destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
4671
4719
  terminalManager.destroy(input.sessionId);
4672
4720
  return { ok: true };
4673
4721
  }),
4674
4722
  /** Stream PTY output for a session (async generator subscription) */
4675
- onData: protectedProcedure.input(z23.object({
4676
- sessionId: z23.string().max(128),
4723
+ onData: protectedProcedure.input(z24.object({
4724
+ sessionId: z24.string().max(128),
4677
4725
  /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
4678
- replay: z23.boolean().optional()
4726
+ replay: z24.boolean().optional()
4679
4727
  })).subscription(async function* ({ input }) {
4680
4728
  const emitter = terminalManager.getEmitter(input.sessionId);
4681
4729
  if (!emitter) {
@@ -4720,7 +4768,7 @@ var terminalRouter = router({
4720
4768
  });
4721
4769
 
4722
4770
  // src/trpc/routers/git.ts
4723
- import { z as z24 } from "zod";
4771
+ import { z as z25 } from "zod";
4724
4772
  import { TRPCError as TRPCError4 } from "@trpc/server";
4725
4773
  import { execFile as execFile4, spawn as spawn3 } from "child_process";
4726
4774
  import { promisify as promisify2 } from "util";
@@ -4730,12 +4778,12 @@ import { join as join4, resolve as resolvePath } from "path";
4730
4778
  var execFileAsync2 = promisify2(execFile4);
4731
4779
  var GIT_TIMEOUT = 15e3;
4732
4780
  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("../"), {
4781
+ var CWD_SCHEMA = z25.string().min(1).max(4096);
4782
+ var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
4735
4783
  message: "Path must be relative and not traverse up"
4736
4784
  });
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._\-/]+$/);
4785
+ var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
4786
+ var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
4739
4787
  function gitSafeEnv() {
4740
4788
  const env2 = {
4741
4789
  GIT_TERMINAL_PROMPT: "0",
@@ -4853,10 +4901,10 @@ async function getGitStatus(cwd) {
4853
4901
  }
4854
4902
  var gitRouter = router({
4855
4903
  /** Check if a working directory exists and optionally verify its git remote */
4856
- checkCwd: protectedProcedure.input(z24.object({
4904
+ checkCwd: protectedProcedure.input(z25.object({
4857
4905
  cwd: CWD_SCHEMA,
4858
- remote: z24.string().max(2048).optional(),
4859
- checkReachability: z24.boolean().optional()
4906
+ remote: z25.string().max(2048).optional(),
4907
+ checkReachability: z25.boolean().optional()
4860
4908
  })).query(async ({ input }) => {
4861
4909
  const resolvedCwd = expandEnvVar(input.cwd);
4862
4910
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -4877,8 +4925,8 @@ var gitRouter = router({
4877
4925
  return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
4878
4926
  }),
4879
4927
  /** Clone a git repository into a target directory */
4880
- clone: protectedProcedure.input(z24.object({
4881
- remote: z24.string().min(1).max(2048),
4928
+ clone: protectedProcedure.input(z25.object({
4929
+ remote: z25.string().min(1).max(2048),
4882
4930
  cwd: CWD_SCHEMA
4883
4931
  })).mutation(async ({ input }) => {
4884
4932
  const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
@@ -4899,13 +4947,13 @@ var gitRouter = router({
4899
4947
  return { success: true };
4900
4948
  }),
4901
4949
  /** Get full git status */
4902
- status: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4950
+ status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4903
4951
  const cwd = assertCwdExists(input.cwd);
4904
4952
  await assertGitRepo(cwd);
4905
4953
  return getGitStatus(cwd);
4906
4954
  }),
4907
4955
  /** Watch .git/ for changes and stream updated status */
4908
- onStatusChange: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
4956
+ onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
4909
4957
  const cwd = assertCwdExists(input.cwd);
4910
4958
  await assertGitRepo(cwd);
4911
4959
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -4956,7 +5004,7 @@ var gitRouter = router({
4956
5004
  }
4957
5005
  }),
4958
5006
  /** 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 }) => {
5007
+ log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
4960
5008
  const cwd = assertCwdExists(input.cwd);
4961
5009
  await assertGitRepo(cwd);
4962
5010
  const format = "%H%h%an%ae%ai%s";
@@ -4967,7 +5015,7 @@ var gitRouter = router({
4967
5015
  });
4968
5016
  }),
4969
5017
  /** List local and remote branches */
4970
- branches: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5018
+ branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
4971
5019
  const cwd = assertCwdExists(input.cwd);
4972
5020
  await assertGitRepo(cwd);
4973
5021
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -4979,7 +5027,7 @@ var gitRouter = router({
4979
5027
  return { current, branches };
4980
5028
  }),
4981
5029
  /** Checkout a branch */
4982
- checkout: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z24.boolean().default(false) })).mutation(async ({ input }) => {
5030
+ checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
4983
5031
  const cwd = assertCwdExists(input.cwd);
4984
5032
  await assertGitRepo(cwd);
4985
5033
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -4987,42 +5035,42 @@ var gitRouter = router({
4987
5035
  return { ok: true };
4988
5036
  }),
4989
5037
  /** Stage files */
4990
- stage: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, paths: z24.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5038
+ stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
4991
5039
  const cwd = assertCwdExists(input.cwd);
4992
5040
  await assertGitRepo(cwd);
4993
5041
  await git(["add", "--", ...input.paths], cwd);
4994
5042
  return { ok: true };
4995
5043
  }),
4996
5044
  /** Stage all files */
4997
- stageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5045
+ stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
4998
5046
  const cwd = assertCwdExists(input.cwd);
4999
5047
  await assertGitRepo(cwd);
5000
5048
  await git(["add", "-A"], cwd);
5001
5049
  return { ok: true };
5002
5050
  }),
5003
5051
  /** Unstage files */
5004
- unstage: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, paths: z24.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5052
+ unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5005
5053
  const cwd = assertCwdExists(input.cwd);
5006
5054
  await assertGitRepo(cwd);
5007
5055
  await git(["restore", "--staged", "--", ...input.paths], cwd);
5008
5056
  return { ok: true };
5009
5057
  }),
5010
5058
  /** Unstage all files */
5011
- unstageAll: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5059
+ unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5012
5060
  const cwd = assertCwdExists(input.cwd);
5013
5061
  await assertGitRepo(cwd);
5014
5062
  await git(["reset", "--"], cwd);
5015
5063
  return { ok: true };
5016
5064
  }),
5017
5065
  /** Commit staged changes */
5018
- commit: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, message: z24.string().min(1).max(4096) })).mutation(async ({ input }) => {
5066
+ commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
5019
5067
  const cwd = assertCwdExists(input.cwd);
5020
5068
  await assertGitRepo(cwd);
5021
5069
  const output = await git(["commit", "-m", input.message], cwd);
5022
5070
  return { ok: true, output: output.trim() };
5023
5071
  }),
5024
5072
  /** 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 }) => {
5073
+ push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
5026
5074
  const cwd = assertCwdExists(input.cwd);
5027
5075
  await assertGitRepo(cwd);
5028
5076
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5031,25 +5079,25 @@ var gitRouter = router({
5031
5079
  return { ok: true, output: output.trim() };
5032
5080
  }),
5033
5081
  /** Pull from remote */
5034
- pull: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5082
+ pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5035
5083
  const cwd = assertCwdExists(input.cwd);
5036
5084
  await assertGitRepo(cwd);
5037
5085
  const output = await git(["pull", input.remote], cwd);
5038
5086
  return { ok: true, output: output.trim() };
5039
5087
  }),
5040
5088
  /** Fetch from remote */
5041
- fetch: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5089
+ fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5042
5090
  const cwd = assertCwdExists(input.cwd);
5043
5091
  await assertGitRepo(cwd);
5044
5092
  const output = await git(["fetch", input.remote], cwd);
5045
5093
  return { ok: true, output: output.trim() };
5046
5094
  }),
5047
5095
  /** Get diff for a file or the whole index */
5048
- diff: protectedProcedure.input(z24.object({
5096
+ diff: protectedProcedure.input(z25.object({
5049
5097
  cwd: CWD_SCHEMA,
5050
- path: z24.string().max(4096).optional(),
5051
- staged: z24.boolean().default(false),
5052
- untracked: z24.boolean().default(false)
5098
+ path: z25.string().max(4096).optional(),
5099
+ staged: z25.boolean().default(false),
5100
+ untracked: z25.boolean().default(false)
5053
5101
  })).query(async ({ input }) => {
5054
5102
  const cwd = assertCwdExists(input.cwd);
5055
5103
  await assertGitRepo(cwd);
@@ -5097,21 +5145,21 @@ var gitRouter = router({
5097
5145
  };
5098
5146
  }),
5099
5147
  /** 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 }) => {
5148
+ discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5101
5149
  const cwd = assertCwdExists(input.cwd);
5102
5150
  await assertGitRepo(cwd);
5103
5151
  await git(["restore", "--", ...input.paths], cwd);
5104
5152
  return { ok: true };
5105
5153
  }),
5106
5154
  /** Get staged diff (used by server for AI commit message generation) */
5107
- stagedDiff: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5155
+ stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5108
5156
  const cwd = assertCwdExists(input.cwd);
5109
5157
  await assertGitRepo(cwd);
5110
5158
  const diff = await git(["diff", "--staged"], cwd, true);
5111
5159
  return { diff: diff.slice(0, 3e4) };
5112
5160
  }),
5113
5161
  /** 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 }) => {
5162
+ merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
5115
5163
  const cwd = assertCwdExists(input.cwd);
5116
5164
  await assertGitRepo(cwd);
5117
5165
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5119,14 +5167,14 @@ var gitRouter = router({
5119
5167
  return { ok: true, output: output.trim() };
5120
5168
  }),
5121
5169
  /** Rebase current branch onto another branch */
5122
- rebase: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5170
+ rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5123
5171
  const cwd = assertCwdExists(input.cwd);
5124
5172
  await assertGitRepo(cwd);
5125
5173
  const output = await git(["rebase", input.branch], cwd);
5126
5174
  return { ok: true, output: output.trim() };
5127
5175
  }),
5128
5176
  /** List remotes */
5129
- remotes: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5177
+ remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5130
5178
  const cwd = assertCwdExists(input.cwd);
5131
5179
  await assertGitRepo(cwd);
5132
5180
  const output = await git(["remote", "-v"], cwd, true);
@@ -5144,7 +5192,7 @@ var gitRouter = router({
5144
5192
  return remotes;
5145
5193
  }),
5146
5194
  /** List stash entries */
5147
- stashList: protectedProcedure.input(z24.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5195
+ stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5148
5196
  const cwd = assertCwdExists(input.cwd);
5149
5197
  await assertGitRepo(cwd);
5150
5198
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5157,10 +5205,10 @@ var gitRouter = router({
5157
5205
  return entries;
5158
5206
  }),
5159
5207
  /** Stash current changes */
5160
- stashPush: protectedProcedure.input(z24.object({
5208
+ stashPush: protectedProcedure.input(z25.object({
5161
5209
  cwd: CWD_SCHEMA,
5162
- message: z24.string().max(4096).optional(),
5163
- includeUntracked: z24.boolean().default(true)
5210
+ message: z25.string().max(4096).optional(),
5211
+ includeUntracked: z25.boolean().default(true)
5164
5212
  })).mutation(async ({ input }) => {
5165
5213
  const cwd = assertCwdExists(input.cwd);
5166
5214
  await assertGitRepo(cwd);
@@ -5171,21 +5219,21 @@ var gitRouter = router({
5171
5219
  return { ok: true, output: output.trim() };
5172
5220
  }),
5173
5221
  /** 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 }) => {
5222
+ stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5175
5223
  const cwd = assertCwdExists(input.cwd);
5176
5224
  await assertGitRepo(cwd);
5177
5225
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5178
5226
  return { ok: true, output: output.trim() };
5179
5227
  }),
5180
5228
  /** 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 }) => {
5229
+ stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5182
5230
  const cwd = assertCwdExists(input.cwd);
5183
5231
  await assertGitRepo(cwd);
5184
5232
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5185
5233
  return { ok: true, output: output.trim() };
5186
5234
  }),
5187
5235
  /** 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 }) => {
5236
+ stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5189
5237
  const cwd = assertCwdExists(input.cwd);
5190
5238
  await assertGitRepo(cwd);
5191
5239
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5218,7 +5266,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5218
5266
  }
5219
5267
 
5220
5268
  // src/trpc/routers/ai.ts
5221
- import { z as z25 } from "zod";
5269
+ import { z as z26 } from "zod";
5222
5270
  import { TRPCError as TRPCError5 } from "@trpc/server";
5223
5271
 
5224
5272
  // src/services/ai-spawn-manager.ts
@@ -5933,23 +5981,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
5933
5981
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
5934
5982
  var aiRouter = router({
5935
5983
  /** 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()
5984
+ spawn: protectedProcedure.input(z26.object({
5985
+ cli: z26.string().max(64),
5986
+ args: z26.array(z26.string().max(5e5)),
5987
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
5988
+ cwd: z26.string().max(4096).optional(),
5989
+ stdinData: z26.string().max(1e7).optional(),
5990
+ enableMcp: z26.boolean().optional(),
5991
+ mcpApiBaseUrl: z26.string().max(512).optional(),
5992
+ mcpApiToken: z26.string().max(8192).optional()
5945
5993
  })).mutation(({ input }) => {
5946
5994
  const spawnId = aiSpawnManager.spawn(input);
5947
5995
  return { spawnId };
5948
5996
  }),
5949
5997
  /** 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)
5998
+ stream: protectedProcedure.input(z26.object({
5999
+ spawnId: z26.string().max(128),
6000
+ fromOffset: z26.number().int().min(0).default(0)
5953
6001
  })).subscription(async function* ({ input }) {
5954
6002
  try {
5955
6003
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -5963,39 +6011,39 @@ var aiRouter = router({
5963
6011
  }
5964
6012
  }),
5965
6013
  /** 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()
6014
+ spawnPty: protectedProcedure.input(z26.object({
6015
+ cli: z26.string().max(64),
6016
+ args: z26.array(z26.string().max(5e5)),
6017
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6018
+ cwd: z26.string().max(4096).optional(),
6019
+ cols: z26.number().int().min(1).max(1e3).optional(),
6020
+ rows: z26.number().int().min(1).max(1e3).optional(),
6021
+ sessionId: z26.string().max(128).optional(),
6022
+ enableMcp: z26.boolean().optional(),
6023
+ mcpApiBaseUrl: z26.string().max(512).optional(),
6024
+ mcpApiToken: z26.string().max(8192).optional()
5977
6025
  })).mutation(({ input }) => {
5978
6026
  const spawnId = aiSpawnManager.spawnPty(input);
5979
6027
  return { spawnId };
5980
6028
  }),
5981
6029
  /** 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 }) => {
6030
+ findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
5983
6031
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
5984
6032
  }),
5985
6033
  /** 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)
6034
+ writePty: protectedProcedure.input(z26.object({
6035
+ spawnId: z26.string().max(128),
6036
+ data: z26.string().max(1e6)
5989
6037
  })).mutation(({ input }) => {
5990
6038
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
5991
6039
  return { ok };
5992
6040
  }),
5993
6041
  /** 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)
6042
+ writeContextFiles: protectedProcedure.input(z26.object({
6043
+ sessionId: z26.string().min(1).max(128),
6044
+ files: z26.array(z26.object({
6045
+ name: z26.string().min(1).max(256),
6046
+ content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
5999
6047
  })).min(1).max(MAX_CONTEXT_FILES)
6000
6048
  }).refine(
6001
6049
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -6010,25 +6058,25 @@ var aiRouter = router({
6010
6058
  * which clipboard method (if any) succeeded — caller decides whether to send
6011
6059
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
6012
6060
  */
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)
6061
+ pasteImage: protectedProcedure.input(z26.object({
6062
+ sessionId: z26.string().max(128).optional(),
6063
+ mimeType: z26.string().max(64),
6064
+ base64: z26.string().max(15e6)
6017
6065
  })).mutation(async ({ input }) => {
6018
6066
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
6019
6067
  return res;
6020
6068
  }),
6021
6069
  /** 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)
6070
+ resizePty: protectedProcedure.input(z26.object({
6071
+ spawnId: z26.string().max(128),
6072
+ cols: z26.number().int().min(1).max(1e3),
6073
+ rows: z26.number().int().min(1).max(1e3)
6026
6074
  })).mutation(({ input }) => {
6027
6075
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
6028
6076
  return { ok };
6029
6077
  }),
6030
6078
  /** Kill a running AI spawn. */
6031
- kill: protectedProcedure.input(z25.object({ spawnId: z25.string().max(128) })).mutation(({ input }) => {
6079
+ kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6032
6080
  const killed = aiSpawnManager.kill(input.spawnId);
6033
6081
  return { ok: killed };
6034
6082
  }),
@@ -6037,23 +6085,23 @@ var aiRouter = router({
6037
6085
  return aiSpawnManager.list();
6038
6086
  }),
6039
6087
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
6040
- ack: protectedProcedure.input(z25.object({ spawnId: z25.string().max(128) })).mutation(({ input }) => {
6088
+ ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6041
6089
  const acked = aiSpawnManager.ack(input.spawnId);
6042
6090
  return { ok: acked };
6043
6091
  }),
6044
6092
  /** 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()
6093
+ codexRequest: protectedProcedure.input(z26.object({
6094
+ method: z26.string().max(256),
6095
+ params: z26.record(z26.string(), z26.unknown()).default({}),
6096
+ env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
6049
6097
  })).mutation(async ({ input }) => {
6050
6098
  await codexAppServerManager.ensureConnected(input.env);
6051
6099
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
6052
6100
  return { result };
6053
6101
  }),
6054
6102
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6055
- codexNotifications: protectedProcedure.input(z25.object({
6056
- threadId: z25.string().max(256).optional()
6103
+ codexNotifications: protectedProcedure.input(z26.object({
6104
+ threadId: z26.string().max(256).optional()
6057
6105
  }).default({})).subscription(async function* ({ input, signal }) {
6058
6106
  await codexAppServerManager.ensureConnected();
6059
6107
  const queue = [];
@@ -6090,13 +6138,13 @@ var aiRouter = router({
6090
6138
  });
6091
6139
 
6092
6140
  // src/trpc/routers/wiki.ts
6093
- import { z as z26 } from "zod";
6141
+ import { z as z27 } from "zod";
6094
6142
  import { TRPCError as TRPCError6 } from "@trpc/server";
6095
6143
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6096
6144
  import { dirname as dirname2 } from "path";
6097
6145
  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("/"), {
6146
+ var CWD_SCHEMA2 = z27.string().min(1).max(4096);
6147
+ var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6100
6148
  message: "Path must be a relative path without traversal"
6101
6149
  });
6102
6150
  var MAX_FILES = 500;
@@ -6116,9 +6164,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6116
6164
  "target",
6117
6165
  "out"
6118
6166
  ]);
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) })
6167
+ var RepoEntrySchema = z27.lazy(() => z27.union([
6168
+ z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
6169
+ z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
6122
6170
  ]));
6123
6171
  async function walkMarkdown(root, dir, depth, counter) {
6124
6172
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6188,13 +6236,13 @@ async function resolveRoot(cwd) {
6188
6236
  }
6189
6237
  }
6190
6238
  var wikiRouter = router({
6191
- listRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6239
+ listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6192
6240
  const root = await resolveRoot(input.cwd);
6193
6241
  const counter = { n: 0 };
6194
6242
  const entries = await walkMarkdown(root, root, 0, counter);
6195
6243
  return { root, entries, truncated: counter.n >= MAX_FILES };
6196
6244
  }),
6197
- readRepoMarkdown: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6245
+ readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6198
6246
  if (!/\.(md|markdown)$/i.test(input.path)) {
6199
6247
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6200
6248
  }
@@ -6220,10 +6268,10 @@ var wikiRouter = router({
6220
6268
  const content = await readFile2(realTarget, "utf-8");
6221
6269
  return { path: input.path, content };
6222
6270
  }),
6223
- writeMarkdown: protectedProcedure.input(z26.object({
6271
+ writeMarkdown: protectedProcedure.input(z27.object({
6224
6272
  cwd: CWD_SCHEMA2,
6225
6273
  path: REL_PATH_SCHEMA,
6226
- content: z26.string().max(5e6)
6274
+ content: z27.string().max(5e6)
6227
6275
  })).mutation(async ({ input }) => {
6228
6276
  if (!/\.(md|markdown)$/i.test(input.path)) {
6229
6277
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6234,7 +6282,7 @@ var wikiRouter = router({
6234
6282
  await writeFile6(target, input.content, "utf-8");
6235
6283
  return { path: input.path, ok: true };
6236
6284
  }),
6237
- createFile: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6285
+ createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6238
6286
  if (!/\.(md|markdown)$/i.test(input.path)) {
6239
6287
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6240
6288
  }
@@ -6250,13 +6298,13 @@ var wikiRouter = router({
6250
6298
  await writeFile6(target, "", "utf-8");
6251
6299
  return { path: input.path, ok: true };
6252
6300
  }),
6253
- createDir: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6301
+ createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6254
6302
  const root = await resolveRoot(input.cwd);
6255
6303
  const target = await resolveSafePath(root, input.path, false);
6256
6304
  await mkdir6(target, { recursive: true });
6257
6305
  return { path: input.path, ok: true };
6258
6306
  }),
6259
- renamePath: protectedProcedure.input(z26.object({
6307
+ renamePath: protectedProcedure.input(z27.object({
6260
6308
  cwd: CWD_SCHEMA2,
6261
6309
  fromPath: REL_PATH_SCHEMA,
6262
6310
  toPath: REL_PATH_SCHEMA
@@ -6274,14 +6322,14 @@ var wikiRouter = router({
6274
6322
  await rename2(from, to);
6275
6323
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6276
6324
  }),
6277
- ensureRoot: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6325
+ ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6278
6326
  const expanded = expandEnvVar(input.cwd);
6279
6327
  const abs = resolvePath3(expanded);
6280
6328
  await mkdir6(abs, { recursive: true });
6281
6329
  const root = await realpath(abs);
6282
6330
  return { root, ok: true };
6283
6331
  }),
6284
- deletePath: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6332
+ deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6285
6333
  const root = await resolveRoot(input.cwd);
6286
6334
  const target = await resolveSafePath(root, input.path, true);
6287
6335
  if (target === root) {