@runeya/runeya 2.0.93 → 2.0.95

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 (267) hide show
  1. package/agent/index.js +213 -161
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-QQPKKLKY.js +8 -0
  4. package/chat-LPMGV2VS.js +18 -0
  5. package/chat-LPMGV2VS.js.map +1 -0
  6. package/chunk-3MJLS5UY.js +1944 -0
  7. package/chunk-3MJLS5UY.js.map +1 -0
  8. package/chunk-72LQC3YC.js +152 -0
  9. package/chunk-72LQC3YC.js.map +1 -0
  10. package/{chunk-6Y24763Y.js → chunk-HX3ZIWHM.js} +83 -1926
  11. package/chunk-HX3ZIWHM.js.map +1 -0
  12. package/chunk-MD3VW4HQ.js +160 -0
  13. package/chunk-MD3VW4HQ.js.map +1 -0
  14. package/chunk-R23UUB5R.js +7285 -0
  15. package/chunk-R23UUB5R.js.map +1 -0
  16. package/chunk-WAC56HS4.js +1842 -0
  17. package/chunk-WAC56HS4.js.map +1 -0
  18. package/codex-thread-db-LE5FYDDA.js +27 -0
  19. package/codex-thread-db-LE5FYDDA.js.map +1 -0
  20. package/companion-VPYVGTRU.js +42 -0
  21. package/companion-VPYVGTRU.js.map +1 -0
  22. package/index.js +1 -1
  23. package/package.json +1 -1
  24. package/settings-manager-6FKHBLIV.js +8 -0
  25. package/settings-manager-6FKHBLIV.js.map +1 -0
  26. package/src-NEPDGULO.js +10087 -0
  27. package/src-NEPDGULO.js.map +1 -0
  28. package/web/assets/AgentScalarChatInterface.vue-DCnwgzWk.js +13 -0
  29. package/web/assets/AgentTerminalPage-D6iEzvyz.js +1 -0
  30. package/web/assets/AiChatPage-DDr9XEv8.js +1 -0
  31. package/web/assets/AppLayout-B2mreJVA.js +1 -0
  32. package/web/assets/{AppLayout-DiMqQfDk.css → AppLayout-nrP0jOZ1.css} +1 -1
  33. package/web/assets/AuditPage-CSPHdf0m.js +1 -0
  34. package/web/assets/CloudAccountPage-BAkTRH4E.js +1 -0
  35. package/web/assets/CloudAccountPage-C35O8Pcb.js +1 -0
  36. package/web/assets/CloudMessagingPage-5KYELXQI.js +2 -0
  37. package/web/assets/DashboardPage-Dl9Sg1av.js +1 -0
  38. package/web/assets/DirectoryPickerDialog-DLL3-GoW.js +1 -0
  39. package/web/assets/{EditorIcon-Bi1br5gY.js → EditorIcon-CzgSjXLk.js} +2 -2
  40. package/web/assets/EnvironmentForm-DmdDIJHv.js +108 -0
  41. package/web/assets/EnvironmentFormPage-CV7Uq6Ah.js +1 -0
  42. package/web/assets/EnvironmentListPage-Cfo9RA_g.js +1 -0
  43. package/web/assets/KanbanBoardPage-DL1WwMBP.js +4 -0
  44. package/web/assets/KanbanListPage-CSAnUfp3.js +1 -0
  45. package/web/assets/LaunchProjectPage-vNUoulGP.js +1 -0
  46. package/web/assets/LaunchServicesPage-CkWZxZ-v.js +1 -0
  47. package/web/assets/LogViewer-CW-bBjZF.js +3 -0
  48. package/web/assets/OrgKeyPrompt-CHoMbQhn.js +1 -0
  49. package/web/assets/ProcessControls-WS6BjS5H.js +1 -0
  50. package/web/assets/ProcessDetailPage-DEvZSNER.js +1 -0
  51. package/web/assets/{ProcessMetrics-DgnpYxXh.js → ProcessMetrics-DmhwoKrE.js} +2 -2
  52. package/web/assets/ProjectDetailPage-DanRrWb4.js +1 -0
  53. package/web/assets/ProjectListPage--l9HsQ9u.js +1 -0
  54. package/web/assets/RandomJobTestPage-BMatxc2G.js +2 -0
  55. package/web/assets/ScenarioEditorPage-D_rJyudb.js +14 -0
  56. package/web/assets/SendToChatDialog-D-pDvIjD.js +1 -0
  57. package/web/assets/ServiceControlsBar-BSU25sZZ.js +1 -0
  58. package/web/assets/ServiceDetailPage-B1oRlnId.js +2 -0
  59. package/web/assets/ServiceFormPage-D-DmI0fF.js +1 -0
  60. package/web/assets/SettingsPage-Bi72zdhb.js +2063 -0
  61. package/web/assets/{SettingsPage-BKcxRTQg.css → SettingsPage-D6-jpORY.css} +1 -1
  62. package/web/assets/UnlockPage-BtunlGnX.js +1 -0
  63. package/web/assets/VariablesTable-D3HpHlKY.js +1 -0
  64. package/web/assets/VaultMigrationPage-DrrFR1I-.js +1 -0
  65. package/web/assets/VersionBadge-DqcS34oJ.js +1 -0
  66. package/web/assets/WikiPage-BH8A-IB_.js +1 -0
  67. package/web/assets/WikiView-BasNZv2A.js +1 -0
  68. package/web/assets/add-scalar-classes-_PYrgVvq.js +387 -0
  69. package/web/assets/auth-errors-CwswzwYV.js +1 -0
  70. package/web/assets/{autocomplete-CFCpVybl.js → autocomplete-B-t_B26t.js} +3 -3
  71. package/web/assets/{basic-shape-diamond.svg-1nuR3NBd.js → basic-shape-diamond.svg-BFWFQIZl.js} +1 -1
  72. package/web/assets/{basic-shape-hexagon.svg-Be-pZrVb.js → basic-shape-hexagon.svg-CXsvZPky.js} +1 -1
  73. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-9-zHtg8B.js → basic-shape-primary-circle-ellipse-round.svg-BVg6oDS7.js} +1 -1
  74. package/web/assets/{basic-shape-primary-square-rectangle.svg-CRTdnGnv.js → basic-shape-primary-square-rectangle.svg-jiLWQSQV.js} +1 -1
  75. package/web/assets/{basic-shape-shield.svg-D9JPqU4l.js → basic-shape-shield.svg-CEybfnew.js} +1 -1
  76. package/web/assets/{browser-BdPlaU7e.js → browser-BfO6Jws3.js} +1 -1
  77. package/web/assets/{browser-B6dstq4l.js → browser-C7Qh0u0N.js} +1 -1
  78. package/web/assets/card-CWgnvlKH.js +32 -0
  79. package/web/assets/{checkbox-C_jx73WS.js → checkbox-CKzrAJQv.js} +3 -3
  80. package/web/assets/{chip-CQdqiw0W.js → chip-Bu5HllmO.js} +2 -2
  81. package/web/assets/{client-B_gN8XJ7.js → client-CM-a2QU7.js} +2 -2
  82. package/web/assets/cloud-chat.store-Cjbzzy1s.js +1 -0
  83. package/web/assets/cloud-session-Bs6siQ-Y.js +1 -0
  84. package/web/assets/column-pXrOxKc1.js +907 -0
  85. package/web/assets/{computer-device-desktop-monitor.svg-CGh6MdTp.js → computer-device-desktop-monitor.svg-DO-9EDqA.js} +1 -1
  86. package/web/assets/{computer-device-desktop.svg-CSnagCeX.js → computer-device-desktop.svg-U_EIk7jo.js} +1 -1
  87. package/web/assets/{computer-device-laptop.svg-BI_ZVURQ.js → computer-device-laptop.svg-nvbz6sjk.js} +1 -1
  88. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-DM3ubsFX.js → computer-device-mobile-phone-android-samsung-back.svg-Cs34LunN.js} +1 -1
  89. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CzDW3wBE.js → computer-device-mobile-phone-android-samsung.svg-CDJgG-4L.js} +1 -1
  90. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B41GuLoA.js → computer-device-mobile-phone-iphone-x-back.svg-Du0pDh9L.js} +1 -1
  91. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-Cd1cIH5V.js → computer-device-mobile-phone-iphone-x.svg-CUgXFf2r.js} +1 -1
  92. package/web/assets/{computer-device-mobile-tablet-touch.svg-rLuvpYQb.js → computer-device-mobile-tablet-touch.svg-CKdx-iUf.js} +1 -1
  93. package/web/assets/{computer-device-mobile-tablet.svg-DjBMAEhJ.js → computer-device-mobile-tablet.svg-BTvPzs5h.js} +1 -1
  94. package/web/assets/{computer-device-network-ethernet-cat6.svg-BeYjyXJh.js → computer-device-network-ethernet-cat6.svg-Cway8Bfw.js} +1 -1
  95. package/web/assets/{computer-device-network-lan-www.svg-DIR2TMun.js → computer-device-network-lan-www.svg-iuTZVSKE.js} +1 -1
  96. package/web/assets/{computer-device-network-wifi-connection.svg-DhI5VT5g.js → computer-device-network-wifi-connection.svg-DEemVGZq.js} +1 -1
  97. package/web/assets/{computer-device-network-wifi-router.svg-BO0V5pTE.js → computer-device-network-wifi-router.svg-BH2ASeRD.js} +1 -1
  98. package/web/assets/{cssMode-CdzA9M1t.js → cssMode-BHBdzmoS.js} +1 -1
  99. package/web/assets/{divider-Cijz8TDb.js → divider-kwmULX2U.js} +2 -2
  100. package/web/assets/{docx-preview-B8bBf__c.js → docx-preview-CxXKUxi7.js} +1 -1
  101. package/web/assets/{ecology-science-erlenmeyer-flask.svg-BuQW5h4a.js → ecology-science-erlenmeyer-flask.svg-9yLzulSu.js} +1 -1
  102. package/web/assets/{fieldset-DnZ-YI4V.js → fieldset-DE0sJS29.js} +2 -2
  103. package/web/assets/{freemarker2-Bp9032QT.js → freemarker2-CpcoAmNk.js} +1 -1
  104. package/web/assets/{handlebars-CdVx92lU.js → handlebars-D6DR-MoZ.js} +1 -1
  105. package/web/assets/{html-CkCZL9gx.js → html-Dx3QwrZR.js} +1 -1
  106. package/web/assets/{htmlMode-CW62-ie1.js → htmlMode-KSJ_gFzK.js} +1 -1
  107. package/web/assets/{image-flash-lightning.svg-DeCuJWFT.js → image-flash-lightning.svg-O9m-H64P.js} +1 -1
  108. package/web/assets/{image-picture-flower.svg-2ZzZbPy5.js → image-picture-flower.svg--rWVVuqu.js} +1 -1
  109. package/web/assets/index-B4UWj2Kz.css +1 -0
  110. package/web/assets/{index-DXGQcaBP.js → index-pLefgbhx.js} +284 -284
  111. package/web/assets/{interface-alert-exclamation-diamond.svg-D9th7CAp.js → interface-alert-exclamation-diamond.svg-CVeV0ecY.js} +1 -1
  112. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Dq9CWWQ3.js → interface-alert-exclamation-triangle-warning.svg-MIboYRzH.js} +1 -1
  113. package/web/assets/{interface-alert-information-circle.svg-FaG159xA.js → interface-alert-information-circle.svg-BlkHMxfH.js} +1 -1
  114. package/web/assets/{interface-award-crown.svg-B_-NjgUX.js → interface-award-crown.svg-C_Z3sLuP.js} +1 -1
  115. package/web/assets/{interface-bookmark.svg--yRnhMMQ.js → interface-bookmark-tag.svg-ClOZOhfV.js} +1 -1
  116. package/web/assets/{interface-bookmark-tag.svg-CKjw2WEc.js → interface-bookmark.svg-CVpTNe3u.js} +1 -1
  117. package/web/assets/{interface-calendar-date-one.svg-BCrvSyS9.js → interface-calendar-date-one.svg-BvG92AQi.js} +1 -1
  118. package/web/assets/{interface-content-book-open-pages.svg-BGIlAwyt.js → interface-content-book-open-pages.svg-aXXXkj7d.js} +1 -1
  119. package/web/assets/{interface-content-book-page.svg-DeLfK2OR.js → interface-content-book-page.svg-BE0nQJw_.js} +1 -1
  120. package/web/assets/{interface-content-file.svg-DUdYkC8Y.js → interface-content-file.svg-DYonyE7J.js} +1 -1
  121. package/web/assets/{interface-content-folder.svg-Ccx-IYD-.js → interface-content-folder.svg-DKc7vKrm.js} +1 -1
  122. package/web/assets/interface-content-folder.svg-FcNZvOjy.js +1 -0
  123. package/web/assets/{interface-copy-clipboard.svg-DIR-oOPG.js → interface-copy-clipboard.svg-sAixmHqz.js} +1 -1
  124. package/web/assets/{interface-edit-attachment.svg-B9CSuzCn.js → interface-edit-attachment.svg-DsSzCN6U.js} +1 -1
  125. package/web/assets/{interface-edit-binocular.svg-6WTqf985.js → interface-edit-binocular.svg-Bheco9Gv.js} +1 -1
  126. package/web/assets/{interface-edit-magic-wand.svg-BiB-GwoX.js → interface-edit-magic-wand.svg-C73TY2iI.js} +1 -1
  127. package/web/assets/{interface-edit-tool-paint-roller.svg-Dh0uneh4.js → interface-edit-tool-paint-roller.svg-D2OSqY3g.js} +1 -1
  128. package/web/assets/{interface-edit-tool-pencil.svg-C9HQOHce.js → interface-edit-tool-pencil.svg-CdY316cw.js} +1 -1
  129. package/web/assets/{interface-favorite-award.svg-Cj_1Qy9M.js → interface-favorite-award.svg-DfA-EhHI.js} +1 -1
  130. package/web/assets/{interface-favorite-flag.svg-BniwQaep.js → interface-favorite-flag.svg-BnmSaveE.js} +1 -1
  131. package/web/assets/{interface-favorite-heart.svg-CYJO0Ggb.js → interface-favorite-heart.svg-28i7lMzG.js} +1 -1
  132. package/web/assets/{interface-favorite-star.svg-CeFb37gO.js → interface-favorite-star.svg-u8xOEB4S.js} +1 -1
  133. package/web/assets/{interface-favorite-stars-sparkles.svg-CGeIzi4_.js → interface-favorite-stars-sparkles.svg-D5UHf8ar.js} +1 -1
  134. package/web/assets/{interface-hierarchy-flowchart.svg-Bd0q_y82.js → interface-hierarchy-flowchart.svg-BmjWTh4K.js} +1 -1
  135. package/web/assets/{interface-home-house.svg-BqSaaLzz.js → interface-home-house.svg-DJ5Ae65N.js} +1 -1
  136. package/web/assets/{interface-hyperlink.svg-DTtVOw8L.js → interface-hyperlink.svg-HdHKY_g6.js} +1 -1
  137. package/web/assets/{interface-lighting-brightness.svg-CVNVwF9w.js → interface-lighting-brightness.svg-BDELfqMb.js} +1 -1
  138. package/web/assets/{interface-lock-closed.svg-CKiXr8tU.js → interface-lock-closed.svg-BcDwDHkS.js} +1 -1
  139. package/web/assets/{interface-lock-open-unlock.svg-DU7sOeAE.js → interface-lock-open-unlock.svg-DNESCRC1.js} +1 -1
  140. package/web/assets/{interface-login-key.svg-tuWEt_tn.js → interface-login-key.svg-BOEot3yk.js} +1 -1
  141. package/web/assets/{interface-search.svg-CMDkllvr.js → interface-search.svg-CFsy7ant.js} +1 -1
  142. package/web/assets/{interface-setting-cog.svg-BRM5rRrt.js → interface-setting-cog.svg-B7Zk0iyr.js} +1 -1
  143. package/web/assets/{interface-share-megaphone-bullhorn.svg-BgC_SP2r.js → interface-share-megaphone-bullhorn.svg-DvG0IjMM.js} +1 -1
  144. package/web/assets/{interface-share-rocket.svg-C-XkIKh-.js → interface-share-rocket.svg-gvaeTB8G.js} +1 -1
  145. package/web/assets/{interface-share-satellite.svg-BKE0N18S.js → interface-share-satellite.svg-B5pXJ0kU.js} +1 -1
  146. package/web/assets/{interface-share-space-ship.svg-B8QuVt2r.js → interface-share-space-ship.svg-B0k0J-VQ.js} +1 -1
  147. package/web/assets/{interface-share.svg-bp3wJyGc.js → interface-share.svg-ZDsCvjRe.js} +1 -1
  148. package/web/assets/{interface-signal-square.svg-D8XH70Ue.js → interface-signal-square.svg-DBkJ1ire.js} +1 -1
  149. package/web/assets/{interface-time-clock-circle.svg-2DN-SbMe.js → interface-time-clock-circle.svg-BheUirew.js} +1 -1
  150. package/web/assets/{interface-time-hour-glass.svg-l0_r1j5d.js → interface-time-hour-glass.svg-iORrebF8.js} +1 -1
  151. package/web/assets/{interface-users-multiple.svg-RRlj9uIH.js → interface-users-multiple.svg-DMqedSUQ.js} +1 -1
  152. package/web/assets/{interface-weather-moon.svg-BmdUGPZe.js → interface-weather-moon.svg-DyPBHRw4.js} +1 -1
  153. package/web/assets/{javascript-edU55dwl.js → javascript-B1Y6a5s6.js} +1 -1
  154. package/web/assets/{jsonMode-CdE3cdJ3.js → jsonMode-Vj2pUgcF.js} +2 -2
  155. package/web/assets/{liquid-DCimUdoJ.js → liquid-lb0ImGEW.js} +1 -1
  156. package/web/assets/{lspLanguageFeatures-BKbLLFFb.js → lspLanguageFeatures-sh8ggL5N.js} +3 -3
  157. package/web/assets/{mail-chat-bubble-square.svg-VF1duUdO.js → mail-chat-bubble-square.svg-D_Lx6uBc.js} +1 -1
  158. package/web/assets/{mail-send-email-paper-airplane.svg-CdSpwALk.js → mail-send-email-paper-airplane.svg-B6FGKBZu.js} +1 -1
  159. package/web/assets/{mail-send-envelope.svg-DZVjejiO.js → mail-send-envelope.svg-Dtm4h_xw.js} +1 -1
  160. package/web/assets/{mdx-Hv_NSA7I.js → mdx-BbFPcqiD.js} +1 -1
  161. package/web/assets/{minus-CQh_GdvM.js → minus-Bxw18Xk6.js} +2 -2
  162. package/web/assets/modal-D-InjkVP.js +1 -0
  163. package/web/assets/modal-DLY8nKW-.js +5 -0
  164. package/web/assets/{money-cashier-receipt.svg-CWHgfD-x.js → money-cashier-receipt.svg-VpEb8Ewv.js} +1 -1
  165. package/web/assets/{money-currency-dollar-pay.svg-XPcb5aF0.js → money-currency-dollar-pay.svg-vo8FP9z4.js} +1 -1
  166. package/web/assets/{money-graph-arrow-increase.svg-DhPujH9x.js → money-graph-arrow-increase.svg-CNcLQGOf.js} +1 -1
  167. package/web/assets/{money-graph-bar-chart-increase.svg-BPOlqEDC.js → money-graph-bar-chart-increase.svg-BHAccBVA.js} +1 -1
  168. package/web/assets/multiselect-Crs0miOE.js +251 -0
  169. package/web/assets/{nature-ecology-leaf.svg-DZNsVAVa.js → nature-ecology-leaf.svg-0y4pBUlD.js} +1 -1
  170. package/web/assets/{password-DlR3LzLg.js → password-TyT4zuky.js} +4 -4
  171. package/web/assets/{phone-telephone.svg-B7vr6N8Z.js → phone-telephone.svg-BdWhV2vz.js} +1 -1
  172. package/web/assets/{plus-BDDTopKC.js → plus-4Z2iFfO2.js} +6 -6
  173. package/web/assets/process.store-DsGpeQnV.js +1 -0
  174. package/web/assets/{programming-bug.svg-DzlGVlKX.js → programming-bug.svg-DXDJVNeQ.js} +1 -1
  175. package/web/assets/{programming-cloud.svg-QHMLI7Md.js → programming-cloud.svg-qWtq6fXG.js} +1 -1
  176. package/web/assets/{programming-computer-database-server.svg-CjsFgYWn.js → programming-computer-database-server.svg-DnlJHfH5.js} +1 -1
  177. package/web/assets/{programming-computer-database.svg-vah-tira.js → programming-computer-database.svg-Bl73TDXc.js} +1 -1
  178. package/web/assets/{programming-module-four-layout.svg-Cpk_lyys.js → programming-module-four-layout.svg-CGkj0OdH.js} +1 -1
  179. package/web/assets/{programming-module-three.svg-DPfLaBLh.js → programming-module-three.svg-Bsk_vaHc.js} +1 -1
  180. package/web/assets/{programming-module.svg-X3KTc78b.js → programming-module.svg-D0Yng9wS.js} +1 -1
  181. package/web/assets/{programming-script-code.svg-Btq5sYVs.js → programming-script-code.svg-DTHMCNnF.js} +1 -1
  182. package/web/assets/{python-7W62NPSS.js → python-HImlMuYG.js} +1 -1
  183. package/web/assets/{razor-B-cp1S_J.js → razor-CTFKddzv.js} +1 -1
  184. package/web/assets/router-DTzqrUba.js +1 -0
  185. package/web/assets/settings-scope-CdxhnRbI.js +1 -0
  186. package/web/assets/{settings.store-DvVMtpRN.js → settings.store-CZ9jrl3S.js} +1 -1
  187. package/web/assets/{shopping-cart.svg-CrAdOGHj.js → shopping-cart.svg-Cx50mrFm.js} +1 -1
  188. package/web/assets/{shopping-gift-present.svg-D6lzCq46.js → shopping-gift-present.svg-DGOO6qNg.js} +1 -1
  189. package/web/assets/{shopping-shipping-box-parcel-package.svg-CvE0Deq6.js → shopping-shipping-box-parcel-package.svg-C96i4g3q.js} +1 -1
  190. package/web/assets/src-CGoYw9sv.css +1 -0
  191. package/web/assets/src-DRjytMUo.js +1 -0
  192. package/web/assets/{src-KOvSDAsA.js → src-DzMKqnGu.js} +13 -13
  193. package/web/assets/{tabpanel-DnsLaWEk.js → tabpanel-BW8I76pY.js} +3 -3
  194. package/web/assets/{tag-new-circle.svg-K7X6DVeY.js → tag-new-circle.svg-CV5DN0Db.js} +1 -1
  195. package/web/assets/{toggleswitch-BIl5_ynN.js → toggleswitch-D4Evlg2b.js} +2 -2
  196. package/web/assets/{travel-map-earth-globe.svg-CGHyssIY.js → travel-map-earth-globe.svg-CWvuO_Hb.js} +1 -1
  197. package/web/assets/trpc-BbC62Ymt.js +1 -0
  198. package/web/assets/{tsMode-Ch-xMRFe.js → tsMode-BqKPHyIc.js} +6 -6
  199. package/web/assets/{typescript-DaR3W1ZS.js → typescript-Bme6ns4u.js} +1 -1
  200. package/web/assets/useAiChatDrawer-BG8t5Thc.js +1 -0
  201. package/web/assets/{useCloudOrg-CZ_ZOAVy.css → useCloudOrg-CkiFdVCe.css} +1 -1
  202. package/web/assets/useCloudOrg-D2LTbk-G.js +572 -0
  203. package/web/assets/useProjectCatalog-nlAZuu5X.js +1 -0
  204. package/web/assets/{xml-DGHPJrA4.js → xml-zsImRVNc.js} +1 -1
  205. package/web/assets/{yaml-Bt6S3avV.js → yaml-VubzWJpP.js} +1 -1
  206. package/web/index.html +2 -2
  207. package/agent-manager-WEFGEFRT.js +0 -7
  208. package/chunk-6Y24763Y.js.map +0 -1
  209. package/src-QDQ5AT4C.js +0 -18369
  210. package/src-QDQ5AT4C.js.map +0 -1
  211. package/web/assets/AgentScalarChatInterface.vue-BlRhaFfk.js +0 -13
  212. package/web/assets/AgentTerminalPage-Bgz6cN1-.js +0 -1
  213. package/web/assets/AiChatPage-B2ZLntQV.js +0 -1
  214. package/web/assets/AppLayout-CwaLgkBP.js +0 -1
  215. package/web/assets/AuditPage-qw3Fsus7.js +0 -1
  216. package/web/assets/CloudAccountPage-BLOaK1nf.js +0 -1
  217. package/web/assets/CloudAccountPage-DTs4O-ua.js +0 -1
  218. package/web/assets/CloudMessagingPage-Cz1EQr91.js +0 -2
  219. package/web/assets/DashboardPage-B5HHqw9m.js +0 -1
  220. package/web/assets/DirectoryPickerDialog-DjpBVTYW.js +0 -1
  221. package/web/assets/EnvironmentForm-C9NbiSRH.js +0 -108
  222. package/web/assets/EnvironmentFormPage-DWbL-D3Z.js +0 -1
  223. package/web/assets/EnvironmentListPage-rdeHc34g.js +0 -1
  224. package/web/assets/KanbanBoardPage-CbHeyK8M.js +0 -4
  225. package/web/assets/KanbanListPage-xIqiBmTe.js +0 -1
  226. package/web/assets/LaunchProjectPage-D04ok35N.js +0 -1
  227. package/web/assets/LaunchServicesPage-Bkhxe7Ko.js +0 -1
  228. package/web/assets/LogViewer-BHlGDB4l.js +0 -3
  229. package/web/assets/OrgKeyPrompt-CnIY4K5s.js +0 -1
  230. package/web/assets/ProcessControls-BOkCKqGc.js +0 -1
  231. package/web/assets/ProcessDetailPage-BQCvKU0O.js +0 -1
  232. package/web/assets/ProjectDetailPage-Cjf4eBYS.js +0 -1
  233. package/web/assets/ProjectListPage-DQH1VC3U.js +0 -1
  234. package/web/assets/RandomJobTestPage-BMc4Qb-3.js +0 -2
  235. package/web/assets/ScenarioEditorPage-ClH3vxG9.js +0 -14
  236. package/web/assets/SendToChatDialog-5TxDHf96.js +0 -1
  237. package/web/assets/ServiceControlsBar-D0nrwVz7.js +0 -1
  238. package/web/assets/ServiceDetailPage-DLTZ2bjR.js +0 -2
  239. package/web/assets/ServiceFormPage-BoUHidR5.js +0 -1
  240. package/web/assets/SettingsPage-B6jM9W4h.js +0 -2063
  241. package/web/assets/UnlockPage-boIYvNg3.js +0 -1
  242. package/web/assets/VariablesTable-Eyqi7OJN.js +0 -1
  243. package/web/assets/VaultMigrationPage-CqKla89B.js +0 -1
  244. package/web/assets/VersionBadge-CnU3z5Rl.js +0 -1
  245. package/web/assets/WikiPage-Cbdxhr9G.js +0 -1
  246. package/web/assets/WikiView-BeWVPGaR.js +0 -1
  247. package/web/assets/add-scalar-classes-CG8bn7uZ.js +0 -387
  248. package/web/assets/auth-errors-CZibvB1j.js +0 -1
  249. package/web/assets/card-D8XCM024.js +0 -32
  250. package/web/assets/cloud-chat.store-BB8XNnvp.js +0 -1
  251. package/web/assets/cloud-session-f2IzlmYY.js +0 -1
  252. package/web/assets/column-BaNiShA4.js +0 -907
  253. package/web/assets/index-Cz0azMVO.css +0 -1
  254. package/web/assets/interface-content-folder.svg-C0OEvuKX.js +0 -1
  255. package/web/assets/modal-BO4YZ0Od.js +0 -1
  256. package/web/assets/modal-DUYd78Dq.js +0 -5
  257. package/web/assets/multiselect-DJ80nRN0.js +0 -251
  258. package/web/assets/process.store-Dq6j8zkt.js +0 -1
  259. package/web/assets/router-BzVLWWlf.js +0 -1
  260. package/web/assets/settings-scope-B2XSViBz.js +0 -1
  261. package/web/assets/src-DB1mNeZv.js +0 -1
  262. package/web/assets/src-DIxcn8ra.css +0 -1
  263. package/web/assets/trpc-BT4fWDYZ.js +0 -1
  264. package/web/assets/useAiChatDrawer-Bn5BBHr2.js +0 -1
  265. package/web/assets/useCloudOrg-CCXszfIX.js +0 -572
  266. package/web/assets/useProjectCatalog-CHgbaNsn.js +0 -1
  267. /package/{agent-manager-WEFGEFRT.js.map → agent-manager-QQPKKLKY.js.map} +0 -0
package/agent/index.js CHANGED
@@ -60,7 +60,7 @@ var authMiddleware = t.middleware(({ ctx, next }) => {
60
60
  var protectedProcedure = t.procedure.use(authMiddleware);
61
61
 
62
62
  // src/trpc/routers/process.ts
63
- import { z as z23 } from "zod";
63
+ import { z as z24 } from "zod";
64
64
  import { TRPCError as TRPCError2 } from "@trpc/server";
65
65
 
66
66
  // src/services/process-manager.ts
@@ -257,13 +257,34 @@ var NotificationPreferencesSchema = z5.object({
257
257
  /** Service IDs excluded from health-change notifications */
258
258
  service_health_changed_excluded: z5.array(z5.string().max(100)).max(500).default([])
259
259
  });
260
+ var CompanionSettingsSchema = z5.object({
261
+ /** Activer le compagnon d'office sur les conversations créées ensuite. */
262
+ enabledByDefault: z5.boolean().default(false),
263
+ /**
264
+ * Consignes envoyées au compagnon, à la place des nôtres.
265
+ *
266
+ * Vide — l'absence — signifie « celles de Runeya ». On ne recopie pas le
267
+ * texte par défaut dans le réglage : figé le jour où il est enregistré, il ne
268
+ * profiterait plus jamais des corrections apportées au nôtre.
269
+ *
270
+ * Rejeté au-delà de la borne plutôt que tronqué (§1) : un prompt coupé en
271
+ * plein milieu produirait des relectures incohérentes sans rien signaler.
272
+ */
273
+ prompt: z5.string().max(2e4).optional()
274
+ });
260
275
  var SettingsSchema = z5.object({
261
276
  mode: z5.enum(["local-simple", "cloud"]),
262
277
  cloudUrl: z5.string().url().max(2048).nullable().optional(),
263
278
  logParsers: z5.array(JSLogParserSchema).max(100).default([]),
264
279
  scenarios: z5.array(ScenarioSchema).max(100).default([]),
265
280
  /** Absolute path to the folder where the global wiki/docs markdown files live. Optional. */
266
- globalDocsPath: z5.string().max(4096).optional()
281
+ globalDocsPath: z5.string().max(4096).optional(),
282
+ /**
283
+ * Optionnel plutôt que défauté : un réglage absent est un réglage jamais
284
+ * touché, et le rendre obligatoire dans le type forcerait chaque appelant qui
285
+ * construit un objet de réglages à inventer une valeur.
286
+ */
287
+ companion: CompanionSettingsSchema.optional()
267
288
  });
268
289
  var TraefikConfigSchema = z5.object({
269
290
  enabled: z5.boolean().default(false),
@@ -1148,6 +1169,37 @@ var UpdateCloudApiKeyInput = z20.object({
1148
1169
  boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1149
1170
  });
1150
1171
 
1172
+ // ../../packages/shared/src/schemas/changelog.schema.ts
1173
+ import { z as z21 } from "zod";
1174
+ var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
1175
+ var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
1176
+ var ChangelogTextSchema = z21.object({
1177
+ fr: z21.string().min(1).max(500),
1178
+ en: z21.string().min(1).max(500)
1179
+ });
1180
+ var ChangelogChangeSchema = z21.object({
1181
+ kind: ChangelogChangeKindSchema,
1182
+ text: ChangelogTextSchema
1183
+ });
1184
+ var ChangelogDraftSchema = ChangelogChangeSchema.extend({
1185
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1186
+ title: ChangelogTextSchema.optional()
1187
+ });
1188
+ var ChangelogReleaseSchema = z21.object({
1189
+ surface: ChangelogSurfaceSchema,
1190
+ /** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
1191
+ version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1192
+ /** Date de publication, `YYYY-MM-DD`. */
1193
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1194
+ /** Facultatif : une version peut s'annoncer par son seul numéro. */
1195
+ title: ChangelogTextSchema.optional(),
1196
+ /** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
1197
+ changes: z21.array(ChangelogChangeSchema).min(1).max(50)
1198
+ });
1199
+ var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
1200
+ changeCount: z21.number().int().nonnegative()
1201
+ });
1202
+
1151
1203
  // ../../packages/shared/src/utils/crypto.ts
1152
1204
  import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
1153
1205
 
@@ -3086,7 +3138,7 @@ import { execa as execa3 } from "execa";
3086
3138
  import { homedir as homedir4 } from "os";
3087
3139
 
3088
3140
  // src/trpc/routers/config.ts
3089
- import { z as z21 } from "zod";
3141
+ import { z as z22 } from "zod";
3090
3142
 
3091
3143
  // src/services/traefik-manager.ts
3092
3144
  import { spawn, execFile as execFile2 } from "child_process";
@@ -3464,13 +3516,13 @@ function resolvePassthroughEnv() {
3464
3516
  return result;
3465
3517
  }
3466
3518
  var configRouter = router({
3467
- setPassthroughEnv: protectedProcedure.input(z21.object({
3468
- names: z21.array(
3469
- z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3519
+ setPassthroughEnv: protectedProcedure.input(z22.object({
3520
+ names: z22.array(
3521
+ z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3470
3522
  ).max(100),
3471
- values: z21.record(
3472
- z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3473
- z21.string().max(32768)
3523
+ values: z22.record(
3524
+ z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3525
+ z22.string().max(32768)
3474
3526
  ).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
3475
3527
  })).mutation(({ input }) => {
3476
3528
  passthroughEnvNames = input.names;
@@ -3507,7 +3559,7 @@ var configRouter = router({
3507
3559
  getTraefikFileTree: protectedProcedure.query(async () => {
3508
3560
  return traefikManager.getFileTree();
3509
3561
  }),
3510
- getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3562
+ getTraefikLogs: protectedProcedure.input(z22.object({ lines: z22.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3511
3563
  const logs = await traefikManager.getLogs(input.lines);
3512
3564
  return { logs };
3513
3565
  })
@@ -3699,17 +3751,17 @@ var healthChecker = new HealthChecker();
3699
3751
  import killPort from "kill-port";
3700
3752
 
3701
3753
  // src/config/env.ts
3702
- import { z as z22 } from "zod";
3703
- var EnvSchema = z22.object({
3704
- RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
3705
- RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
3706
- PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3707
- AGENT_ID: z22.string().optional(),
3754
+ import { z as z23 } from "zod";
3755
+ var EnvSchema = z23.object({
3756
+ RUNEYA_AGENT_PORT: z23.coerce.number().int().min(1).max(65535).default(4001),
3757
+ RUNEYA_AGENT_HOST: z23.string().default("127.0.0.1"),
3758
+ PASSPHRASE_OVERRIDE: z23.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3759
+ AGENT_ID: z23.string().optional(),
3708
3760
  // Set by spawner or manually for remote agents
3709
- LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3710
- METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
3711
- GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
3712
- HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3761
+ LOG_BUFFER_SIZE: z23.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3762
+ METRICS_INTERVAL: z23.coerce.number().int().positive().default(METRICS_INTERVAL),
3763
+ GRACE_PERIOD: z23.coerce.number().int().positive().default(GRACE_PERIOD),
3764
+ HEALTH_WS_INTERVAL: z23.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3713
3765
  });
3714
3766
  var env = EnvSchema.parse(process.env);
3715
3767
 
@@ -4494,7 +4546,7 @@ var processRouter = router({
4494
4546
  return processManager.listStatuses();
4495
4547
  }),
4496
4548
  /** Get a single process */
4497
- get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4549
+ get: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4498
4550
  const status = processManager.getStatus(input.id);
4499
4551
  if (!status) {
4500
4552
  throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
@@ -4507,78 +4559,78 @@ var processRouter = router({
4507
4559
  return { id };
4508
4560
  }),
4509
4561
  /** Undeploy: stop + remove */
4510
- undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4562
+ undeploy: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4511
4563
  await processManager.undeploy(input.id);
4512
4564
  return { success: true };
4513
4565
  }),
4514
4566
  /** Update the service config for a deployed process */
4515
- updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4567
+ updateConfig: protectedProcedure.input(z24.object({ serviceId: z24.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4516
4568
  processManager.updateConfig(input.serviceId, input.config);
4517
4569
  return { success: true };
4518
4570
  }),
4519
4571
  /** Start a deployed process */
4520
- start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4572
+ start: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4521
4573
  console.log(`[agent] start service=${input.id}`);
4522
4574
  await processManager.start(input.id);
4523
4575
  return processManager.getStatus(input.id);
4524
4576
  }),
4525
4577
  /** Stop a running process */
4526
- stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4578
+ stop: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4527
4579
  console.log(`[agent] stop service=${input.id}`);
4528
4580
  await processManager.stop(input.id);
4529
4581
  return processManager.getStatus(input.id);
4530
4582
  }),
4531
4583
  /** Restart a process */
4532
- restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
4584
+ restart: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4533
4585
  console.log(`[agent] restart service=${input.id}`);
4534
4586
  await processManager.restart(input.id);
4535
4587
  return processManager.getStatus(input.id);
4536
4588
  }),
4537
4589
  /** Get buffered logs for a process */
4538
- logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
4590
+ logs: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4539
4591
  const logs = processManager.getLogs(input.id);
4540
4592
  return logs;
4541
4593
  }),
4542
4594
  /** Clear buffered logs for a process */
4543
- clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
4595
+ clearLogBuffer: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(({ input }) => {
4544
4596
  processManager.clearLogBuffer(input.id);
4545
4597
  return { success: true };
4546
4598
  }),
4547
4599
  /** Execute a shortcut command and stream output into the process log */
4548
- executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4600
+ executeShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4549
4601
  const result = await processManager.executeShortcut(input.id, input.shortcut);
4550
4602
  return result;
4551
4603
  }),
4552
4604
  /** Cancel a running shortcut command */
4553
- cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
4605
+ cancelShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcutId: z24.string().max(128) })).mutation(({ input }) => {
4554
4606
  processManager.cancelShortcut(input.id, input.shortcutId);
4555
4607
  return { success: true };
4556
4608
  }),
4557
4609
  /** Cancel a running ad-hoc command */
4558
- cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
4610
+ cancelAdHocCommand: protectedProcedure.input(z24.object({ id: z24.string().max(128), commandId: z24.string().max(128).optional() })).mutation(({ input }) => {
4559
4611
  processManager.cancelAdHocCommand(input.id, input.commandId);
4560
4612
  return { success: true };
4561
4613
  }),
4562
4614
  /** Execute an ad-hoc command and stream output into the process log */
4563
- executeAdHocCommand: protectedProcedure.input(z23.object({
4564
- id: z23.string().max(128),
4565
- command: z23.string().min(1).max(4096),
4566
- cwd: z23.string().max(4096).optional(),
4567
- commandId: z23.string().max(128).optional()
4615
+ executeAdHocCommand: protectedProcedure.input(z24.object({
4616
+ id: z24.string().max(128),
4617
+ command: z24.string().min(1).max(4096),
4618
+ cwd: z24.string().max(4096).optional(),
4619
+ commandId: z24.string().max(128).optional()
4568
4620
  })).mutation(async ({ input }) => {
4569
4621
  const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
4570
4622
  return result;
4571
4623
  }),
4572
4624
  /** List active log source types for a process */
4573
- logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
4625
+ logSources: protectedProcedure.input(z24.object({ processId: z24.string().max(128) })).query(({ input }) => {
4574
4626
  return processManager.getLogSourceTypes(input.processId);
4575
4627
  }),
4576
4628
  /** Get current metrics for a process */
4577
- metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
4629
+ metrics: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(async ({ input }) => {
4578
4630
  return processManager.getMetrics(input.id);
4579
4631
  }),
4580
4632
  /** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
4581
- onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4633
+ onLog: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4582
4634
  const queue = [];
4583
4635
  let resolve2 = null;
4584
4636
  const handler = (batch) => {
@@ -4607,7 +4659,7 @@ var processRouter = router({
4607
4659
  }
4608
4660
  }),
4609
4661
  /** Subscribe to real-time status changes */
4610
- onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4662
+ onStatus: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4611
4663
  console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
4612
4664
  const queue = [];
4613
4665
  let resolve2 = null;
@@ -4639,7 +4691,7 @@ var processRouter = router({
4639
4691
  }
4640
4692
  }),
4641
4693
  /** Subscribe to real-time health status changes */
4642
- onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4694
+ onHealth: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4643
4695
  const queue = [];
4644
4696
  let resolve2 = null;
4645
4697
  const handler = (healthData) => {
@@ -4669,7 +4721,7 @@ var processRouter = router({
4669
4721
  }
4670
4722
  }),
4671
4723
  /** Subscribe to real-time metrics */
4672
- onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4724
+ onMetrics: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4673
4725
  const queue = [];
4674
4726
  let resolve2 = null;
4675
4727
  const handler = (metrics) => {
@@ -4750,7 +4802,7 @@ var healthRouter = router({
4750
4802
  });
4751
4803
 
4752
4804
  // src/trpc/routers/terminal.ts
4753
- import { z as z24 } from "zod";
4805
+ import { z as z25 } from "zod";
4754
4806
  import { TRPCError as TRPCError3 } from "@trpc/server";
4755
4807
 
4756
4808
  // src/services/terminal-manager.ts
@@ -4843,11 +4895,11 @@ var terminalManager = new TerminalManager();
4843
4895
  // src/trpc/routers/terminal.ts
4844
4896
  var terminalRouter = router({
4845
4897
  /** Spawn a new PTY shell session, returns a sessionId */
4846
- create: protectedProcedure.input(z24.object({
4847
- cwd: z24.string().max(512).optional(),
4848
- cols: z24.number().int().min(1).max(512).optional(),
4849
- rows: z24.number().int().min(1).max(256).optional(),
4850
- title: z24.string().max(128).optional()
4898
+ create: protectedProcedure.input(z25.object({
4899
+ cwd: z25.string().max(512).optional(),
4900
+ cols: z25.number().int().min(1).max(512).optional(),
4901
+ rows: z25.number().int().min(1).max(256).optional(),
4902
+ title: z25.string().max(128).optional()
4851
4903
  })).mutation(({ input }) => {
4852
4904
  const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
4853
4905
  return { sessionId };
@@ -4855,34 +4907,34 @@ var terminalRouter = router({
4855
4907
  /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
4856
4908
  list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
4857
4909
  /** Renommer un onglet */
4858
- rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
4910
+ rename: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), title: z25.string().max(128) })).mutation(({ input }) => {
4859
4911
  terminalManager.rename(input.sessionId, input.title);
4860
4912
  return { ok: true };
4861
4913
  }),
4862
4914
  /** Write data (keystrokes) to a PTY session */
4863
- write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
4915
+ write: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), data: z25.string().max(65536) })).mutation(({ input }) => {
4864
4916
  terminalManager.write(input.sessionId, input.data);
4865
4917
  return { ok: true };
4866
4918
  }),
4867
4919
  /** Resize a PTY session */
4868
- resize: protectedProcedure.input(z24.object({
4869
- sessionId: z24.string().max(128),
4870
- cols: z24.number().int().min(1).max(512),
4871
- rows: z24.number().int().min(1).max(256)
4920
+ resize: protectedProcedure.input(z25.object({
4921
+ sessionId: z25.string().max(128),
4922
+ cols: z25.number().int().min(1).max(512),
4923
+ rows: z25.number().int().min(1).max(256)
4872
4924
  })).mutation(({ input }) => {
4873
4925
  terminalManager.resize(input.sessionId, input.cols, input.rows);
4874
4926
  return { ok: true };
4875
4927
  }),
4876
4928
  /** Destroy a PTY session */
4877
- destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
4929
+ destroy: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).mutation(({ input }) => {
4878
4930
  terminalManager.destroy(input.sessionId);
4879
4931
  return { ok: true };
4880
4932
  }),
4881
4933
  /** Stream PTY output for a session (async generator subscription) */
4882
- onData: protectedProcedure.input(z24.object({
4883
- sessionId: z24.string().max(128),
4934
+ onData: protectedProcedure.input(z25.object({
4935
+ sessionId: z25.string().max(128),
4884
4936
  /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
4885
- replay: z24.boolean().optional()
4937
+ replay: z25.boolean().optional()
4886
4938
  })).subscription(async function* ({ input }) {
4887
4939
  const emitter = terminalManager.getEmitter(input.sessionId);
4888
4940
  if (!emitter) {
@@ -4927,7 +4979,7 @@ var terminalRouter = router({
4927
4979
  });
4928
4980
 
4929
4981
  // src/trpc/routers/git.ts
4930
- import { z as z25 } from "zod";
4982
+ import { z as z26 } from "zod";
4931
4983
  import { TRPCError as TRPCError4 } from "@trpc/server";
4932
4984
  import { execFile as execFile5, spawn as spawn3 } from "child_process";
4933
4985
  import { promisify as promisify3 } from "util";
@@ -4995,12 +5047,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
4995
5047
  var execFileAsync3 = promisify3(execFile5);
4996
5048
  var GIT_TIMEOUT = 15e3;
4997
5049
  var DIFF_MAX_BYTES = 512 * 1024;
4998
- var CWD_SCHEMA = z25.string().min(1).max(4096);
4999
- var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
5050
+ var CWD_SCHEMA = z26.string().min(1).max(4096);
5051
+ var SAFE_PATH_SCHEMA = z26.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
5000
5052
  message: "Path must be relative and not traverse up"
5001
5053
  });
5002
- var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5003
- var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5054
+ var REMOTE_SCHEMA = z26.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5055
+ var BRANCH_SCHEMA = z26.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5004
5056
  function gitSafeEnv() {
5005
5057
  const env2 = {
5006
5058
  GIT_TERMINAL_PROMPT: "0",
@@ -5118,10 +5170,10 @@ async function getGitStatus(cwd) {
5118
5170
  }
5119
5171
  var gitRouter = router({
5120
5172
  /** Check if a working directory exists and optionally verify its git remote */
5121
- checkCwd: protectedProcedure.input(z25.object({
5173
+ checkCwd: protectedProcedure.input(z26.object({
5122
5174
  cwd: CWD_SCHEMA,
5123
- remote: z25.string().max(2048).optional(),
5124
- checkReachability: z25.boolean().optional()
5175
+ remote: z26.string().max(2048).optional(),
5176
+ checkReachability: z26.boolean().optional()
5125
5177
  })).query(async ({ input }) => {
5126
5178
  const resolvedCwd = expandEnvVar(input.cwd);
5127
5179
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -5143,8 +5195,8 @@ var gitRouter = router({
5143
5195
  return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
5144
5196
  }),
5145
5197
  /** Clone a git repository into a target directory */
5146
- clone: protectedProcedure.input(z25.object({
5147
- remote: z25.string().min(1).max(2048),
5198
+ clone: protectedProcedure.input(z26.object({
5199
+ remote: z26.string().min(1).max(2048),
5148
5200
  cwd: CWD_SCHEMA
5149
5201
  })).mutation(async ({ input }) => {
5150
5202
  const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
@@ -5165,13 +5217,13 @@ var gitRouter = router({
5165
5217
  return { success: true };
5166
5218
  }),
5167
5219
  /** Get full git status */
5168
- status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5220
+ status: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5169
5221
  const cwd = assertCwdExists(input.cwd);
5170
5222
  await assertGitRepo(cwd);
5171
5223
  return getGitStatus(cwd);
5172
5224
  }),
5173
5225
  /** Watch .git/ for changes and stream updated status */
5174
- onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5226
+ onStatusChange: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5175
5227
  const cwd = assertCwdExists(input.cwd);
5176
5228
  await assertGitRepo(cwd);
5177
5229
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -5222,7 +5274,7 @@ var gitRouter = router({
5222
5274
  }
5223
5275
  }),
5224
5276
  /** Get commit log */
5225
- log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5277
+ log: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, limit: z26.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5226
5278
  const cwd = assertCwdExists(input.cwd);
5227
5279
  await assertGitRepo(cwd);
5228
5280
  const format = "%H%h%an%ae%ai%s";
@@ -5233,7 +5285,7 @@ var gitRouter = router({
5233
5285
  });
5234
5286
  }),
5235
5287
  /** List local and remote branches */
5236
- branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5288
+ branches: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5237
5289
  const cwd = assertCwdExists(input.cwd);
5238
5290
  await assertGitRepo(cwd);
5239
5291
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5245,7 +5297,7 @@ var gitRouter = router({
5245
5297
  return { current, branches };
5246
5298
  }),
5247
5299
  /** Checkout a branch */
5248
- checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
5300
+ checkout: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z26.boolean().default(false) })).mutation(async ({ input }) => {
5249
5301
  const cwd = assertCwdExists(input.cwd);
5250
5302
  await assertGitRepo(cwd);
5251
5303
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -5253,42 +5305,42 @@ var gitRouter = router({
5253
5305
  return { ok: true };
5254
5306
  }),
5255
5307
  /** Stage files */
5256
- stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5308
+ stage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5257
5309
  const cwd = assertCwdExists(input.cwd);
5258
5310
  await assertGitRepo(cwd);
5259
5311
  await git(["add", "--", ...input.paths], cwd);
5260
5312
  return { ok: true };
5261
5313
  }),
5262
5314
  /** Stage all files */
5263
- stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5315
+ stageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5264
5316
  const cwd = assertCwdExists(input.cwd);
5265
5317
  await assertGitRepo(cwd);
5266
5318
  await git(["add", "-A"], cwd);
5267
5319
  return { ok: true };
5268
5320
  }),
5269
5321
  /** Unstage files */
5270
- unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5322
+ unstage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5271
5323
  const cwd = assertCwdExists(input.cwd);
5272
5324
  await assertGitRepo(cwd);
5273
5325
  await git(["restore", "--staged", "--", ...input.paths], cwd);
5274
5326
  return { ok: true };
5275
5327
  }),
5276
5328
  /** Unstage all files */
5277
- unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5329
+ unstageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5278
5330
  const cwd = assertCwdExists(input.cwd);
5279
5331
  await assertGitRepo(cwd);
5280
5332
  await git(["reset", "--"], cwd);
5281
5333
  return { ok: true };
5282
5334
  }),
5283
5335
  /** Commit staged changes */
5284
- commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
5336
+ commit: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, message: z26.string().min(1).max(4096) })).mutation(async ({ input }) => {
5285
5337
  const cwd = assertCwdExists(input.cwd);
5286
5338
  await assertGitRepo(cwd);
5287
5339
  const output = await git(["commit", "-m", input.message], cwd);
5288
5340
  return { ok: true, output: output.trim() };
5289
5341
  }),
5290
5342
  /** Push to remote */
5291
- push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
5343
+ push: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z26.boolean().default(false) })).mutation(async ({ input }) => {
5292
5344
  const cwd = assertCwdExists(input.cwd);
5293
5345
  await assertGitRepo(cwd);
5294
5346
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5297,25 +5349,25 @@ var gitRouter = router({
5297
5349
  return { ok: true, output: output.trim() };
5298
5350
  }),
5299
5351
  /** Pull from remote */
5300
- pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5352
+ pull: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5301
5353
  const cwd = assertCwdExists(input.cwd);
5302
5354
  await assertGitRepo(cwd);
5303
5355
  const output = await git(["pull", input.remote], cwd);
5304
5356
  return { ok: true, output: output.trim() };
5305
5357
  }),
5306
5358
  /** Fetch from remote */
5307
- fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5359
+ fetch: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5308
5360
  const cwd = assertCwdExists(input.cwd);
5309
5361
  await assertGitRepo(cwd);
5310
5362
  const output = await git(["fetch", input.remote], cwd);
5311
5363
  return { ok: true, output: output.trim() };
5312
5364
  }),
5313
5365
  /** Get diff for a file or the whole index */
5314
- diff: protectedProcedure.input(z25.object({
5366
+ diff: protectedProcedure.input(z26.object({
5315
5367
  cwd: CWD_SCHEMA,
5316
- path: z25.string().max(4096).optional(),
5317
- staged: z25.boolean().default(false),
5318
- untracked: z25.boolean().default(false)
5368
+ path: z26.string().max(4096).optional(),
5369
+ staged: z26.boolean().default(false),
5370
+ untracked: z26.boolean().default(false)
5319
5371
  })).query(async ({ input }) => {
5320
5372
  const cwd = assertCwdExists(input.cwd);
5321
5373
  await assertGitRepo(cwd);
@@ -5363,21 +5415,21 @@ var gitRouter = router({
5363
5415
  };
5364
5416
  }),
5365
5417
  /** Discard changes to working tree files */
5366
- discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5418
+ discard: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5367
5419
  const cwd = assertCwdExists(input.cwd);
5368
5420
  await assertGitRepo(cwd);
5369
5421
  await git(["restore", "--", ...input.paths], cwd);
5370
5422
  return { ok: true };
5371
5423
  }),
5372
5424
  /** Get staged diff (used by server for AI commit message generation) */
5373
- stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5425
+ stagedDiff: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5374
5426
  const cwd = assertCwdExists(input.cwd);
5375
5427
  await assertGitRepo(cwd);
5376
5428
  const diff = await git(["diff", "--staged"], cwd, true);
5377
5429
  return { diff: diff.slice(0, 3e4) };
5378
5430
  }),
5379
5431
  /** Merge a branch into the current branch */
5380
- merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
5432
+ merge: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z26.boolean().default(false) })).mutation(async ({ input }) => {
5381
5433
  const cwd = assertCwdExists(input.cwd);
5382
5434
  await assertGitRepo(cwd);
5383
5435
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5385,14 +5437,14 @@ var gitRouter = router({
5385
5437
  return { ok: true, output: output.trim() };
5386
5438
  }),
5387
5439
  /** Rebase current branch onto another branch */
5388
- rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5440
+ rebase: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5389
5441
  const cwd = assertCwdExists(input.cwd);
5390
5442
  await assertGitRepo(cwd);
5391
5443
  const output = await git(["rebase", input.branch], cwd);
5392
5444
  return { ok: true, output: output.trim() };
5393
5445
  }),
5394
5446
  /** List remotes */
5395
- remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5447
+ remotes: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5396
5448
  const cwd = assertCwdExists(input.cwd);
5397
5449
  await assertGitRepo(cwd);
5398
5450
  const output = await git(["remote", "-v"], cwd, true);
@@ -5410,7 +5462,7 @@ var gitRouter = router({
5410
5462
  return remotes;
5411
5463
  }),
5412
5464
  /** List stash entries */
5413
- stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5465
+ stashList: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5414
5466
  const cwd = assertCwdExists(input.cwd);
5415
5467
  await assertGitRepo(cwd);
5416
5468
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5423,10 +5475,10 @@ var gitRouter = router({
5423
5475
  return entries;
5424
5476
  }),
5425
5477
  /** Stash current changes */
5426
- stashPush: protectedProcedure.input(z25.object({
5478
+ stashPush: protectedProcedure.input(z26.object({
5427
5479
  cwd: CWD_SCHEMA,
5428
- message: z25.string().max(4096).optional(),
5429
- includeUntracked: z25.boolean().default(true)
5480
+ message: z26.string().max(4096).optional(),
5481
+ includeUntracked: z26.boolean().default(true)
5430
5482
  })).mutation(async ({ input }) => {
5431
5483
  const cwd = assertCwdExists(input.cwd);
5432
5484
  await assertGitRepo(cwd);
@@ -5437,21 +5489,21 @@ var gitRouter = router({
5437
5489
  return { ok: true, output: output.trim() };
5438
5490
  }),
5439
5491
  /** Apply a stash entry and remove it from the list */
5440
- stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5492
+ stashPop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5441
5493
  const cwd = assertCwdExists(input.cwd);
5442
5494
  await assertGitRepo(cwd);
5443
5495
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5444
5496
  return { ok: true, output: output.trim() };
5445
5497
  }),
5446
5498
  /** Apply a stash entry without removing it from the list */
5447
- stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5499
+ stashApply: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5448
5500
  const cwd = assertCwdExists(input.cwd);
5449
5501
  await assertGitRepo(cwd);
5450
5502
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5451
5503
  return { ok: true, output: output.trim() };
5452
5504
  }),
5453
5505
  /** Drop a stash entry */
5454
- stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5506
+ stashDrop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5455
5507
  const cwd = assertCwdExists(input.cwd);
5456
5508
  await assertGitRepo(cwd);
5457
5509
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5484,7 +5536,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5484
5536
  }
5485
5537
 
5486
5538
  // src/trpc/routers/ai.ts
5487
- import { z as z26 } from "zod";
5539
+ import { z as z27 } from "zod";
5488
5540
  import { TRPCError as TRPCError5 } from "@trpc/server";
5489
5541
 
5490
5542
  // src/services/ai-spawn-manager.ts
@@ -6201,23 +6253,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
6201
6253
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
6202
6254
  var aiRouter = router({
6203
6255
  /** Spawn an AI CLI process. Returns a spawnId for streaming. */
6204
- spawn: protectedProcedure.input(z26.object({
6205
- cli: z26.string().max(64),
6206
- args: z26.array(z26.string().max(5e5)),
6207
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6208
- cwd: z26.string().max(4096).optional(),
6209
- stdinData: z26.string().max(1e7).optional(),
6210
- enableMcp: z26.boolean().optional(),
6211
- mcpApiBaseUrl: z26.string().max(512).optional(),
6212
- mcpApiToken: z26.string().max(8192).optional()
6256
+ spawn: protectedProcedure.input(z27.object({
6257
+ cli: z27.string().max(64),
6258
+ args: z27.array(z27.string().max(5e5)),
6259
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6260
+ cwd: z27.string().max(4096).optional(),
6261
+ stdinData: z27.string().max(1e7).optional(),
6262
+ enableMcp: z27.boolean().optional(),
6263
+ mcpApiBaseUrl: z27.string().max(512).optional(),
6264
+ mcpApiToken: z27.string().max(8192).optional()
6213
6265
  })).mutation(({ input }) => {
6214
6266
  const spawnId = aiSpawnManager.spawn(input);
6215
6267
  return { spawnId };
6216
6268
  }),
6217
6269
  /** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
6218
- stream: protectedProcedure.input(z26.object({
6219
- spawnId: z26.string().max(128),
6220
- fromOffset: z26.number().int().min(0).default(0)
6270
+ stream: protectedProcedure.input(z27.object({
6271
+ spawnId: z27.string().max(128),
6272
+ fromOffset: z27.number().int().min(0).default(0)
6221
6273
  })).subscription(async function* ({ input }) {
6222
6274
  try {
6223
6275
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -6231,39 +6283,39 @@ var aiRouter = router({
6231
6283
  }
6232
6284
  }),
6233
6285
  /** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
6234
- spawnPty: protectedProcedure.input(z26.object({
6235
- cli: z26.string().max(64),
6236
- args: z26.array(z26.string().max(5e5)),
6237
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
6238
- cwd: z26.string().max(4096).optional(),
6239
- cols: z26.number().int().min(1).max(1e3).optional(),
6240
- rows: z26.number().int().min(1).max(1e3).optional(),
6241
- sessionId: z26.string().max(128).optional(),
6242
- enableMcp: z26.boolean().optional(),
6243
- mcpApiBaseUrl: z26.string().max(512).optional(),
6244
- mcpApiToken: z26.string().max(8192).optional()
6286
+ spawnPty: protectedProcedure.input(z27.object({
6287
+ cli: z27.string().max(64),
6288
+ args: z27.array(z27.string().max(5e5)),
6289
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6290
+ cwd: z27.string().max(4096).optional(),
6291
+ cols: z27.number().int().min(1).max(1e3).optional(),
6292
+ rows: z27.number().int().min(1).max(1e3).optional(),
6293
+ sessionId: z27.string().max(128).optional(),
6294
+ enableMcp: z27.boolean().optional(),
6295
+ mcpApiBaseUrl: z27.string().max(512).optional(),
6296
+ mcpApiToken: z27.string().max(8192).optional()
6245
6297
  })).mutation(({ input }) => {
6246
6298
  const spawnId = aiSpawnManager.spawnPty(input);
6247
6299
  return { spawnId };
6248
6300
  }),
6249
6301
  /** Find a running PTY spawn by its logical sessionId (for re-attach). */
6250
- findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
6302
+ findPtyBySession: protectedProcedure.input(z27.object({ sessionId: z27.string().max(128) })).query(({ input }) => {
6251
6303
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
6252
6304
  }),
6253
6305
  /** Write input to a PTY spawn (user keystrokes). */
6254
- writePty: protectedProcedure.input(z26.object({
6255
- spawnId: z26.string().max(128),
6256
- data: z26.string().max(1e6)
6306
+ writePty: protectedProcedure.input(z27.object({
6307
+ spawnId: z27.string().max(128),
6308
+ data: z27.string().max(1e6)
6257
6309
  })).mutation(({ input }) => {
6258
6310
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
6259
6311
  return { ok };
6260
6312
  }),
6261
6313
  /** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
6262
- writeContextFiles: protectedProcedure.input(z26.object({
6263
- sessionId: z26.string().min(1).max(128),
6264
- files: z26.array(z26.object({
6265
- name: z26.string().min(1).max(256),
6266
- content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
6314
+ writeContextFiles: protectedProcedure.input(z27.object({
6315
+ sessionId: z27.string().min(1).max(128),
6316
+ files: z27.array(z27.object({
6317
+ name: z27.string().min(1).max(256),
6318
+ content: z27.string().max(MAX_CONTEXT_FILE_BYTES)
6267
6319
  })).min(1).max(MAX_CONTEXT_FILES)
6268
6320
  }).refine(
6269
6321
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -6278,25 +6330,25 @@ var aiRouter = router({
6278
6330
  * which clipboard method (if any) succeeded — caller decides whether to send
6279
6331
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
6280
6332
  */
6281
- pasteImage: protectedProcedure.input(z26.object({
6282
- sessionId: z26.string().max(128).optional(),
6283
- mimeType: z26.string().max(64),
6284
- base64: z26.string().max(15e6)
6333
+ pasteImage: protectedProcedure.input(z27.object({
6334
+ sessionId: z27.string().max(128).optional(),
6335
+ mimeType: z27.string().max(64),
6336
+ base64: z27.string().max(15e6)
6285
6337
  })).mutation(async ({ input }) => {
6286
6338
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
6287
6339
  return res;
6288
6340
  }),
6289
6341
  /** Resize a PTY spawn. */
6290
- resizePty: protectedProcedure.input(z26.object({
6291
- spawnId: z26.string().max(128),
6292
- cols: z26.number().int().min(1).max(1e3),
6293
- rows: z26.number().int().min(1).max(1e3)
6342
+ resizePty: protectedProcedure.input(z27.object({
6343
+ spawnId: z27.string().max(128),
6344
+ cols: z27.number().int().min(1).max(1e3),
6345
+ rows: z27.number().int().min(1).max(1e3)
6294
6346
  })).mutation(({ input }) => {
6295
6347
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
6296
6348
  return { ok };
6297
6349
  }),
6298
6350
  /** Kill a running AI spawn. */
6299
- kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6351
+ kill: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6300
6352
  const killed = aiSpawnManager.kill(input.spawnId);
6301
6353
  return { ok: killed };
6302
6354
  }),
@@ -6305,23 +6357,23 @@ var aiRouter = router({
6305
6357
  return aiSpawnManager.list();
6306
6358
  }),
6307
6359
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
6308
- ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
6360
+ ack: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6309
6361
  const acked = aiSpawnManager.ack(input.spawnId);
6310
6362
  return { ok: acked };
6311
6363
  }),
6312
6364
  /** Forward a JSON-RPC request to the local codex app-server. */
6313
- codexRequest: protectedProcedure.input(z26.object({
6314
- method: z26.string().max(256),
6315
- params: z26.record(z26.string(), z26.unknown()).default({}),
6316
- env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
6365
+ codexRequest: protectedProcedure.input(z27.object({
6366
+ method: z27.string().max(256),
6367
+ params: z27.record(z27.string(), z27.unknown()).default({}),
6368
+ env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional()
6317
6369
  })).mutation(async ({ input }) => {
6318
6370
  await codexAppServerManager.ensureConnected(input.env);
6319
6371
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
6320
6372
  return { result };
6321
6373
  }),
6322
6374
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6323
- codexNotifications: protectedProcedure.input(z26.object({
6324
- threadId: z26.string().max(256).optional()
6375
+ codexNotifications: protectedProcedure.input(z27.object({
6376
+ threadId: z27.string().max(256).optional()
6325
6377
  }).default({})).subscription(async function* ({ input, signal }) {
6326
6378
  await codexAppServerManager.ensureConnected();
6327
6379
  const queue = [];
@@ -6358,13 +6410,13 @@ var aiRouter = router({
6358
6410
  });
6359
6411
 
6360
6412
  // src/trpc/routers/wiki.ts
6361
- import { z as z27 } from "zod";
6413
+ import { z as z28 } from "zod";
6362
6414
  import { TRPCError as TRPCError6 } from "@trpc/server";
6363
6415
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6364
6416
  import { dirname as dirname2 } from "path";
6365
6417
  import { resolve as resolvePath3, join as join5, relative, sep } from "path";
6366
- var CWD_SCHEMA2 = z27.string().min(1).max(4096);
6367
- var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6418
+ var CWD_SCHEMA2 = z28.string().min(1).max(4096);
6419
+ var REL_PATH_SCHEMA = z28.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6368
6420
  message: "Path must be a relative path without traversal"
6369
6421
  });
6370
6422
  var MAX_FILES = 500;
@@ -6384,9 +6436,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6384
6436
  "target",
6385
6437
  "out"
6386
6438
  ]);
6387
- var RepoEntrySchema = z27.lazy(() => z27.union([
6388
- z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
6389
- z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
6439
+ var RepoEntrySchema = z28.lazy(() => z28.union([
6440
+ z28.object({ type: z28.literal("file"), name: z28.string(), path: z28.string() }),
6441
+ z28.object({ type: z28.literal("dir"), name: z28.string(), path: z28.string(), children: z28.array(RepoEntrySchema) })
6390
6442
  ]));
6391
6443
  async function walkMarkdown(root, dir, depth, counter) {
6392
6444
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6456,13 +6508,13 @@ async function resolveRoot(cwd) {
6456
6508
  }
6457
6509
  }
6458
6510
  var wikiRouter = router({
6459
- listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6511
+ listRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6460
6512
  const root = await resolveRoot(input.cwd);
6461
6513
  const counter = { n: 0 };
6462
6514
  const entries = await walkMarkdown(root, root, 0, counter);
6463
6515
  return { root, entries, truncated: counter.n >= MAX_FILES };
6464
6516
  }),
6465
- readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6517
+ readRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6466
6518
  if (!/\.(md|markdown)$/i.test(input.path)) {
6467
6519
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6468
6520
  }
@@ -6488,10 +6540,10 @@ var wikiRouter = router({
6488
6540
  const content = await readFile2(realTarget, "utf-8");
6489
6541
  return { path: input.path, content };
6490
6542
  }),
6491
- writeMarkdown: protectedProcedure.input(z27.object({
6543
+ writeMarkdown: protectedProcedure.input(z28.object({
6492
6544
  cwd: CWD_SCHEMA2,
6493
6545
  path: REL_PATH_SCHEMA,
6494
- content: z27.string().max(5e6)
6546
+ content: z28.string().max(5e6)
6495
6547
  })).mutation(async ({ input }) => {
6496
6548
  if (!/\.(md|markdown)$/i.test(input.path)) {
6497
6549
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6502,7 +6554,7 @@ var wikiRouter = router({
6502
6554
  await writeFile6(target, input.content, "utf-8");
6503
6555
  return { path: input.path, ok: true };
6504
6556
  }),
6505
- createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6557
+ createFile: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6506
6558
  if (!/\.(md|markdown)$/i.test(input.path)) {
6507
6559
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6508
6560
  }
@@ -6518,13 +6570,13 @@ var wikiRouter = router({
6518
6570
  await writeFile6(target, "", "utf-8");
6519
6571
  return { path: input.path, ok: true };
6520
6572
  }),
6521
- createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6573
+ createDir: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6522
6574
  const root = await resolveRoot(input.cwd);
6523
6575
  const target = await resolveSafePath(root, input.path, false);
6524
6576
  await mkdir6(target, { recursive: true });
6525
6577
  return { path: input.path, ok: true };
6526
6578
  }),
6527
- renamePath: protectedProcedure.input(z27.object({
6579
+ renamePath: protectedProcedure.input(z28.object({
6528
6580
  cwd: CWD_SCHEMA2,
6529
6581
  fromPath: REL_PATH_SCHEMA,
6530
6582
  toPath: REL_PATH_SCHEMA
@@ -6542,14 +6594,14 @@ var wikiRouter = router({
6542
6594
  await rename2(from, to);
6543
6595
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6544
6596
  }),
6545
- ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6597
+ ensureRoot: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6546
6598
  const expanded = expandEnvVar(input.cwd);
6547
6599
  const abs = resolvePath3(expanded);
6548
6600
  await mkdir6(abs, { recursive: true });
6549
6601
  const root = await realpath(abs);
6550
6602
  return { root, ok: true };
6551
6603
  }),
6552
- deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6604
+ deletePath: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6553
6605
  const root = await resolveRoot(input.cwd);
6554
6606
  const target = await resolveSafePath(root, input.path, true);
6555
6607
  if (target === root) {