@runeya/runeya 2.0.130 → 2.0.132

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 (246) hide show
  1. package/agent/index.js +247 -177
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-J75NZ6MN.js +11 -0
  4. package/{chat-6ETYBINN.js → chat-ICUWJZEX.js} +7 -7
  5. package/{chunk-TTJNHZ6U.js → chunk-24UJRQRM.js} +2 -2
  6. package/{chunk-J2L6VONF.js → chunk-3HGTIUGB.js} +13 -53
  7. package/chunk-3HGTIUGB.js.map +1 -0
  8. package/{chunk-B7MABGQN.js → chunk-4RMM2OUU.js} +29 -2
  9. package/chunk-4RMM2OUU.js.map +1 -0
  10. package/{chunk-K2KSZRSI.js → chunk-PVLDFBL6.js} +6 -6
  11. package/{chunk-RDE3X3J4.js → chunk-RLLUJCPQ.js} +96 -13
  12. package/chunk-RLLUJCPQ.js.map +1 -0
  13. package/{chunk-7GBSCYXU.js → chunk-WN36W5OW.js} +81 -14
  14. package/chunk-WN36W5OW.js.map +1 -0
  15. package/{companion-SH4HLD6G.js → companion-IYK2652T.js} +5 -4
  16. package/{desktop-launcher-7UZF7PFH.js → desktop-launcher-GHCALSOS.js} +2 -2
  17. package/index.js +5 -5
  18. package/mcp-server/index.js +134 -28
  19. package/mcp-server/index.js.map +1 -1
  20. package/{node-ILM6MV56.js → node-JU7A5NDT.js} +6 -2
  21. package/package.json +1 -1
  22. package/{settings-manager-XD6U4QN3.js → settings-manager-3G5RHW3X.js} +3 -3
  23. package/{src-BNWVTXCY.js → src-FS7Y4DA7.js} +43 -15
  24. package/src-FS7Y4DA7.js.map +1 -0
  25. package/web/assets/{AgentScalarChatInterface.vue-ojzSMuCC.js → AgentScalarChatInterface.vue-CImJBBKk.js} +1 -1
  26. package/web/assets/{AgentTerminalPage-Cf-ymD9E.js → AgentTerminalPage-iRrYZG3N.js} +1 -1
  27. package/web/assets/AiChatPage-DWAuKlmg.js +1 -0
  28. package/web/assets/{AppLayout-YtDku8pN.js → AppLayout-CkZbU0SI.js} +1 -1
  29. package/web/assets/{AuditPage-DCVZLRz4.js → AuditPage-C-yVNrOi.js} +1 -1
  30. package/web/assets/{CloudAccountPage-BOqt_ByJ.js → CloudAccountPage-7XqPLVAS.js} +1 -1
  31. package/web/assets/CloudAccountPage-Cxo7nX-K.js +1 -0
  32. package/web/assets/{CloudMessagingPage-BtlnnNf8.js → CloudMessagingPage-CZBpneaV.js} +1 -1
  33. package/web/assets/{DashboardPage-BOxdzarH.js → DashboardPage-CBZZyVwY.js} +1 -1
  34. package/web/assets/{DirectoryPickerDialog-B4MzYK-Y.js → DirectoryPickerDialog-1MThX25G.js} +1 -1
  35. package/web/assets/{EditorIcon-DAx2QpZA.js → EditorIcon-BVisg2uv.js} +1 -1
  36. package/web/assets/{EnvironmentForm-Cgcc_56Z.js → EnvironmentForm-C82fYWhW.js} +1 -1
  37. package/web/assets/{EnvironmentFormPage-n7m6dJUn.js → EnvironmentFormPage-BVOpMMJ7.js} +1 -1
  38. package/web/assets/{EnvironmentListPage-DS6s6UQk.js → EnvironmentListPage-CPRmFtVH.js} +1 -1
  39. package/web/assets/KanbanBoardPage-BmJwTFE8.css +1 -0
  40. package/web/assets/KanbanBoardPage-pzBPUjj2.js +4 -0
  41. package/web/assets/KanbanListPage-Cy0eP5v1.js +1 -0
  42. package/web/assets/KanbanListPage-pCWYPwBv.css +1 -0
  43. package/web/assets/{LaunchProjectPage-BFOzRnGw.js → LaunchProjectPage-Bn_wU_QT.js} +1 -1
  44. package/web/assets/{LaunchServicesPage-D7FmbH2H.js → LaunchServicesPage-BuxokNH7.js} +1 -1
  45. package/web/assets/{LogViewer-BbbpNT7v.js → LogViewer-DFPxgP8T.js} +1 -1
  46. package/web/assets/{OrgKeyPrompt-BGlTQGBE.js → OrgKeyPrompt-B8qmru6I.js} +1 -1
  47. package/web/assets/{OrgLogo-DfRefdu8.js → OrgLogo-9eOcBM3O.js} +1 -1
  48. package/web/assets/{ProcessControls-ByXJUYXz.js → ProcessControls-BA9IDUMF.js} +1 -1
  49. package/web/assets/{ProcessDetailPage-6q8wgWEP.js → ProcessDetailPage-CnOdgJXS.js} +1 -1
  50. package/web/assets/{ProcessMetrics-o6TQkXTa.js → ProcessMetrics-fFZhpyqE.js} +1 -1
  51. package/web/assets/{RandomJobTestPage-DuCKCB_n.js → RandomJobTestPage-Cw5KA5rW.js} +1 -1
  52. package/web/assets/{ScenarioEditorPage-ZCVivzeZ.js → ScenarioEditorPage-DY9Sfei7.js} +1 -1
  53. package/web/assets/{SendToChatDialog-CFd1Bubz.js → SendToChatDialog-DLR7jXBG.js} +1 -1
  54. package/web/assets/{ServiceControlsBar-B-3OrP1t.js → ServiceControlsBar-szGNMHjF.js} +1 -1
  55. package/web/assets/{ServiceDetailPage-Bm53GpUX.js → ServiceDetailPage-BXZ2tvHn.js} +1 -1
  56. package/web/assets/{ServiceFormPage-B5_95jOM.js → ServiceFormPage-B6oUWP9J.js} +1 -1
  57. package/web/assets/{SettingsPage-7Thq96Wn.js → SettingsPage-95JC2bIP.js} +4 -4
  58. package/web/assets/{UnlockPage-BXbKs3QZ.js → UnlockPage-P4gYB5LT.js} +1 -1
  59. package/web/assets/{VaultMigrationPage-h6NgaEOh.js → VaultMigrationPage-CQH54K0y.js} +1 -1
  60. package/web/assets/{VersionBadge-Bh8iLmG8.js → VersionBadge-D-Zv0XzJ.js} +1 -1
  61. package/web/assets/WikiPage-DzFvtMxw.js +1 -0
  62. package/web/assets/{WikiView-B905tAss.js → WikiView-BLoRr_y4.js} +1 -1
  63. package/web/assets/{add-scalar-classes-DW5rrkrl.js → add-scalar-classes-Bpf67R_k.js} +3 -3
  64. package/web/assets/{autocomplete-DxjWjky0.js → autocomplete-B4ASWozR.js} +1 -1
  65. package/web/assets/{basic-shape-diamond.svg-JSaiJ46F.js → basic-shape-diamond.svg-D96ayS7-.js} +1 -1
  66. package/web/assets/{basic-shape-hexagon.svg-D1-hJiCH.js → basic-shape-hexagon.svg-lBCgoQIf.js} +1 -1
  67. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-J6Ksp8Xz.js → basic-shape-primary-circle-ellipse-round.svg-BEzXT_e-.js} +1 -1
  68. package/web/assets/{basic-shape-primary-square-rectangle.svg-BR-QAok8.js → basic-shape-primary-square-rectangle.svg-Bkzr23_8.js} +1 -1
  69. package/web/assets/{basic-shape-shield.svg-CmwxzzxD.js → basic-shape-shield.svg-C3H6eT_i.js} +1 -1
  70. package/web/assets/{browser-Dj-lNKWY.js → browser-C1dU95Eq.js} +1 -1
  71. package/web/assets/{browser-7cY4kFlm.js → browser-JZPiFr6p.js} +1 -1
  72. package/web/assets/{card-DAI9OTkc.js → card-Carw-Smf.js} +1 -1
  73. package/web/assets/{checkbox-Ct1yef0N.js → checkbox-SY6iZYJT.js} +1 -1
  74. package/web/assets/{chip-B9m8EUV4.js → chip-jKPsBaDG.js} +1 -1
  75. package/web/assets/{client-DULNwlfi.js → client-CrX3je4X.js} +1 -1
  76. package/web/assets/{cloud-chat.store-BufYJj6k.js → cloud-chat.store-Cv-pkXPK.js} +1 -1
  77. package/web/assets/cloud-client-D01e8Pib.js +1 -0
  78. package/web/assets/{cloud-session-DZ1APEU5.js → cloud-session-CY8qNDWs.js} +2 -2
  79. package/web/assets/cloud-session-DHJ2Dn0_.js +1 -0
  80. package/web/assets/{column-D9bX7M3H.js → column-Du74odg_.js} +1 -1
  81. package/web/assets/composables-CAPumxhl.js +1 -0
  82. package/web/assets/{computer-device-desktop-monitor.svg-kHhZDrn4.js → computer-device-desktop-monitor.svg-CKfHZCAn.js} +1 -1
  83. package/web/assets/{computer-device-desktop.svg-CJqmzT8S.js → computer-device-desktop.svg-FokfiMmI.js} +1 -1
  84. package/web/assets/{computer-device-laptop.svg-DVR2dE1I.js → computer-device-laptop.svg-u5TTufiX.js} +1 -1
  85. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CEgkg7iO.js → computer-device-mobile-phone-android-samsung-back.svg-D-4JYDXb.js} +1 -1
  86. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BNd9H2xb.js → computer-device-mobile-phone-android-samsung.svg-CZGGF9sY.js} +1 -1
  87. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-C34x7LFE.js → computer-device-mobile-phone-iphone-x-back.svg-DA78gxI_.js} +1 -1
  88. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-58jbIuoG.js → computer-device-mobile-phone-iphone-x.svg-B4MANHvY.js} +1 -1
  89. package/web/assets/{computer-device-mobile-tablet-touch.svg-Do-wo3C-.js → computer-device-mobile-tablet-touch.svg-C8TQMpJm.js} +1 -1
  90. package/web/assets/{computer-device-mobile-tablet.svg-k9649lm5.js → computer-device-mobile-tablet.svg-BwWJUi6h.js} +1 -1
  91. package/web/assets/{computer-device-network-ethernet-cat6.svg-CHhUrJbo.js → computer-device-network-ethernet-cat6.svg-BbuOLgRf.js} +1 -1
  92. package/web/assets/{computer-device-network-lan-www.svg-CtPwhVZ6.js → computer-device-network-lan-www.svg-Bus_xZ3r.js} +1 -1
  93. package/web/assets/{computer-device-network-wifi-connection.svg-kx5mccFk.js → computer-device-network-wifi-connection.svg-D93e73Wq.js} +1 -1
  94. package/web/assets/{computer-device-network-wifi-router.svg-sZs7A8Cr.js → computer-device-network-wifi-router.svg-6qPxKjkZ.js} +1 -1
  95. package/web/assets/{cssMode-B6unnb3U.js → cssMode-BA6ryPYU.js} +1 -1
  96. package/web/assets/{divider-BnMFAEx6.js → divider-Nf1cI936.js} +1 -1
  97. package/web/assets/{docx-preview-HgFKCX0F.js → docx-preview-Beq_uoGc.js} +1 -1
  98. package/web/assets/{ecology-science-erlenmeyer-flask.svg-DOKj5_k1.js → ecology-science-erlenmeyer-flask.svg-D60hNAZ7.js} +1 -1
  99. package/web/assets/{fieldset-DZnEgPOU.js → fieldset-BO8ymcQg.js} +1 -1
  100. package/web/assets/{freemarker2-Bv0s6UQe.js → freemarker2-u4uWoBOZ.js} +1 -1
  101. package/web/assets/{handlebars-BTsC4Lqd.js → handlebars-Crco_whq.js} +1 -1
  102. package/web/assets/{html-BARKi29y.js → html-krzCI2Gx.js} +1 -1
  103. package/web/assets/{htmlMode-fK2j6Ha8.js → htmlMode-C9vDwT8E.js} +1 -1
  104. package/web/assets/{image-flash-lightning.svg-CTaB0hJv.js → image-flash-lightning.svg-B4xlEwgS.js} +1 -1
  105. package/web/assets/{image-picture-flower.svg-M6Q_XtAy.js → image-picture-flower.svg-DXs_C4Eb.js} +1 -1
  106. package/web/assets/{index-DKmDGo1r.js → index-0Vd4ITAj.js} +198 -198
  107. package/web/assets/{interface-alert-exclamation-diamond.svg-DPTfDSD9.js → interface-alert-exclamation-diamond.svg-CQmiBFHu.js} +1 -1
  108. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-AWUdZifI.js → interface-alert-exclamation-triangle-warning.svg-Ddp3S5kR.js} +1 -1
  109. package/web/assets/{interface-alert-information-circle.svg-BtYZm3zK.js → interface-alert-information-circle.svg-CXZRx_eH.js} +1 -1
  110. package/web/assets/{interface-award-crown.svg-DXu8zQAy.js → interface-award-crown.svg-BLjchqiv.js} +1 -1
  111. package/web/assets/{interface-bookmark.svg-BVozfFi5.js → interface-bookmark-tag.svg-DykA4zk6.js} +1 -1
  112. package/web/assets/{interface-bookmark-tag.svg-DEcpMXap.js → interface-bookmark.svg-BZXXPgVb.js} +1 -1
  113. package/web/assets/{interface-calendar-date-one.svg-B3qaR9M3.js → interface-calendar-date-one.svg-DY5zquNe.js} +1 -1
  114. package/web/assets/{interface-content-book-open-pages.svg-DKEf3Z55.js → interface-content-book-open-pages.svg-BkhdueSK.js} +1 -1
  115. package/web/assets/{interface-content-book-page.svg-D6molfdo.js → interface-content-book-page.svg-Do2xq5cr.js} +1 -1
  116. package/web/assets/{interface-content-file.svg-CA0q-5Sl.js → interface-content-file.svg-D-T9Y5v-.js} +1 -1
  117. package/web/assets/{interface-content-folder.svg-BztjfhZi.js → interface-content-folder.svg-C7Xt4Hhi.js} +1 -1
  118. package/web/assets/interface-content-folder.svg-D8Pl9Ud7.js +1 -0
  119. package/web/assets/{interface-copy-clipboard.svg-2_fmAnNV.js → interface-copy-clipboard.svg-CNChmFeI.js} +1 -1
  120. package/web/assets/{interface-edit-attachment.svg-Cb_upeaG.js → interface-edit-attachment.svg-BPFnKeJn.js} +1 -1
  121. package/web/assets/{interface-edit-binocular.svg-CCEAT7W8.js → interface-edit-binocular.svg-B15WWlwm.js} +1 -1
  122. package/web/assets/{interface-edit-magic-wand.svg-BeJ11Pji.js → interface-edit-magic-wand.svg-BOlpxpIl.js} +1 -1
  123. package/web/assets/{interface-edit-tool-paint-roller.svg-BGiy8YPn.js → interface-edit-tool-paint-roller.svg-BAYfPrFg.js} +1 -1
  124. package/web/assets/{interface-edit-tool-pencil.svg-BOMoeGAt.js → interface-edit-tool-pencil.svg-BM5bmeTs.js} +1 -1
  125. package/web/assets/{interface-favorite-award.svg-qHoFebiY.js → interface-favorite-award.svg-C2y2AP20.js} +1 -1
  126. package/web/assets/{interface-favorite-flag.svg-D9gpkTJz.js → interface-favorite-flag.svg-XykDhXhn.js} +1 -1
  127. package/web/assets/{interface-favorite-heart.svg-COMUv1Uh.js → interface-favorite-heart.svg-CZPb5io9.js} +1 -1
  128. package/web/assets/{interface-favorite-star.svg-BsK5YVEB.js → interface-favorite-star.svg-DpNTOpjf.js} +1 -1
  129. package/web/assets/{interface-favorite-stars-sparkles.svg-DevgE082.js → interface-favorite-stars-sparkles.svg-7cCHSGs4.js} +1 -1
  130. package/web/assets/{interface-hierarchy-flowchart.svg-C1dfAizc.js → interface-hierarchy-flowchart.svg-BjDJwof2.js} +1 -1
  131. package/web/assets/{interface-home-house.svg-LAWGxZwm.js → interface-home-house.svg-PIM3QWnr.js} +1 -1
  132. package/web/assets/{interface-hyperlink.svg-DKfSIKhS.js → interface-hyperlink.svg-DGiT9LRd.js} +1 -1
  133. package/web/assets/{interface-lighting-brightness.svg-CvWZXBko.js → interface-lighting-brightness.svg-MFs_QAAQ.js} +1 -1
  134. package/web/assets/{interface-lock-closed.svg-DUT5D0je.js → interface-lock-closed.svg-CjFqOV9n.js} +1 -1
  135. package/web/assets/{interface-lock-open-unlock.svg-Cw8kzQQh.js → interface-lock-open-unlock.svg-DTgPXrba.js} +1 -1
  136. package/web/assets/{interface-login-key.svg-Bkp-rHPU.js → interface-login-key.svg-8cDLtR8c.js} +1 -1
  137. package/web/assets/{interface-search.svg-hG5ogu9p.js → interface-search.svg-SJaqfmP-.js} +1 -1
  138. package/web/assets/{interface-setting-cog.svg-BcPVq1LR.js → interface-setting-cog.svg-CYAoV6-k.js} +1 -1
  139. package/web/assets/{interface-share-megaphone-bullhorn.svg-M4niyPv3.js → interface-share-megaphone-bullhorn.svg-C6C8KuHc.js} +1 -1
  140. package/web/assets/{interface-share-rocket.svg-BcPOpoTR.js → interface-share-rocket.svg-BgqOKppb.js} +1 -1
  141. package/web/assets/{interface-share-satellite.svg-x1KDlm6g.js → interface-share-satellite.svg-BhfjDwyA.js} +1 -1
  142. package/web/assets/{interface-share-space-ship.svg-BfNSdNDO.js → interface-share-space-ship.svg-BUapB87z.js} +1 -1
  143. package/web/assets/{interface-share.svg-C97BmuMY.js → interface-share.svg-CwPC5e-3.js} +1 -1
  144. package/web/assets/{interface-signal-square.svg-DWd44JJH.js → interface-signal-square.svg-BvC7799s.js} +1 -1
  145. package/web/assets/{interface-time-clock-circle.svg-DlY-_Hwt.js → interface-time-clock-circle.svg-DYKRANoG.js} +1 -1
  146. package/web/assets/{interface-time-hour-glass.svg-C2a691O4.js → interface-time-hour-glass.svg-AYkRiFe-.js} +1 -1
  147. package/web/assets/{interface-users-multiple.svg-gNDhDRlp.js → interface-users-multiple.svg-BXFBhgsj.js} +1 -1
  148. package/web/assets/{interface-weather-moon.svg-D7eISmrq.js → interface-weather-moon.svg-ZozvgB_v.js} +1 -1
  149. package/web/assets/{javascript-8VolDNmb.js → javascript-CTdiuLav.js} +1 -1
  150. package/web/assets/{jsonMode-D6awqTaJ.js → jsonMode-CLF3YN6s.js} +1 -1
  151. package/web/assets/{liquid-TTMHEa9a.js → liquid-CUugxlF_.js} +1 -1
  152. package/web/assets/{lspLanguageFeatures-UVF6GLcv.js → lspLanguageFeatures-yWNYHr_2.js} +1 -1
  153. package/web/assets/{mail-chat-bubble-square.svg-DjreUXqw.js → mail-chat-bubble-square.svg-BG2z_u4M.js} +1 -1
  154. package/web/assets/{mail-send-email-paper-airplane.svg-BcyYVqIq.js → mail-send-email-paper-airplane.svg-CUQDu7ep.js} +1 -1
  155. package/web/assets/{mail-send-envelope.svg-BGg0186G.js → mail-send-envelope.svg-pk8Xd68w.js} +1 -1
  156. package/web/assets/{mdx-CoSOx_u6.js → mdx-BE-R90za.js} +1 -1
  157. package/web/assets/{minus-DKbcHNVU.js → minus-DXcyjEvM.js} +1 -1
  158. package/web/assets/modal-DDtmE9ls.js +1 -0
  159. package/web/assets/{modal-DziAnw0E.js → modal-DEXm8R-m.js} +1 -1
  160. package/web/assets/{money-cashier-receipt.svg-xin2Q2jV.js → money-cashier-receipt.svg-CN9CzrqX.js} +1 -1
  161. package/web/assets/{money-currency-dollar-pay.svg-CuVghNG0.js → money-currency-dollar-pay.svg-BUjSCFrb.js} +1 -1
  162. package/web/assets/{money-graph-arrow-increase.svg-CW-ESaRb.js → money-graph-arrow-increase.svg-B_90Bmbk.js} +1 -1
  163. package/web/assets/{money-graph-bar-chart-increase.svg-Ds63Ij9u.js → money-graph-bar-chart-increase.svg-DEHprvsR.js} +1 -1
  164. package/web/assets/{multiselect-EBj2jpFx.js → multiselect-DHN-4dF5.js} +1 -1
  165. package/web/assets/{nature-ecology-leaf.svg-CROyMuJ6.js → nature-ecology-leaf.svg-VzV83bka.js} +1 -1
  166. package/web/assets/{password-M6cvez26.js → password-Cn-GHrdR.js} +1 -1
  167. package/web/assets/{phone-telephone.svg-ldFh2DtT.js → phone-telephone.svg-B7K0iTF5.js} +1 -1
  168. package/web/assets/{plus-B-HO9RRD.js → plus-BavJPboa.js} +1 -1
  169. package/web/assets/process.store-BHtXNXJN.js +1 -0
  170. package/web/assets/{programming-bug.svg-Bi-5bVtZ.js → programming-bug.svg-BQArvDEk.js} +1 -1
  171. package/web/assets/{programming-cloud.svg-BfsVdIyf.js → programming-cloud.svg-Diup3d6q.js} +1 -1
  172. package/web/assets/{programming-computer-database-server.svg-CGxQu1SC.js → programming-computer-database-server.svg-Cry9WzIl.js} +1 -1
  173. package/web/assets/{programming-computer-database.svg-B5TrOmSA.js → programming-computer-database.svg-B2DIP4pU.js} +1 -1
  174. package/web/assets/{programming-module-four-layout.svg-CX306feB.js → programming-module-four-layout.svg-BGnmF15h.js} +1 -1
  175. package/web/assets/{programming-module-three.svg-fIUP0jIs.js → programming-module-three.svg-Dlx8NKbv.js} +1 -1
  176. package/web/assets/{programming-module.svg-BaFMsOL8.js → programming-module.svg-1TSwsWTr.js} +1 -1
  177. package/web/assets/{programming-script-code.svg-asPax4Jv.js → programming-script-code.svg-DpNHCOrR.js} +1 -1
  178. package/web/assets/project-launch.store-MjBfxlB3.js +1 -0
  179. package/web/assets/project.store-4LkhN_Kf.js +1 -0
  180. package/web/assets/{python-B2HQyLbu.js → python-BfgnQ0Q-.js} +1 -1
  181. package/web/assets/{radiobutton-E9JzQOQ_.js → radiobutton-1vkC7CQy.js} +1 -1
  182. package/web/assets/{razor-chfLPaZ5.js → razor-a5t1Ro53.js} +1 -1
  183. package/web/assets/router-D2CFZuT6.js +1 -0
  184. package/web/assets/{selectbutton-BSfIGLAd.js → selectbutton-DSr_ExzW.js} +1 -1
  185. package/web/assets/settings-scope-Bfve93ym.js +1 -0
  186. package/web/assets/{settings.store-DdANKt-l.js → settings.store-BBQfvtZb.js} +1 -1
  187. package/web/assets/shared-sse-DiiJHjvL.js +1 -0
  188. package/web/assets/{shopping-cart.svg-CE-hccE4.js → shopping-cart.svg-16zfxHII.js} +1 -1
  189. package/web/assets/{shopping-gift-present.svg-DcDsxpbS.js → shopping-gift-present.svg-DEDgwlxd.js} +1 -1
  190. package/web/assets/{shopping-shipping-box-parcel-package.svg-B-Hce7Vg.js → shopping-shipping-box-parcel-package.svg-CBOsBi-s.js} +1 -1
  191. package/web/assets/{src-CDO5h8Fg.js → src-B_TK9M1Z.js} +1 -1
  192. package/web/assets/src-DXLPQX5t.css +1 -0
  193. package/web/assets/{src-BCom7Av8.js → src-wb0MqCTT.js} +29 -29
  194. package/web/assets/{tabpanel-opi-GyXj.js → tabpanel-CqAq0gJE.js} +1 -1
  195. package/web/assets/{tag-new-circle.svg-CAAIvApW.js → tag-new-circle.svg-DN5XPkdR.js} +1 -1
  196. package/web/assets/theme-BRinmkRN.js +1 -0
  197. package/web/assets/{toggleswitch-CXZN5FrU.js → toggleswitch-Cr9zROI7.js} +1 -1
  198. package/web/assets/{travel-map-earth-globe.svg-_I9aKmKu.js → travel-map-earth-globe.svg-CN8908SS.js} +1 -1
  199. package/web/assets/trpc-CGXr2as5.js +1 -0
  200. package/web/assets/{tsMode-Cis8_e0R.js → tsMode-D8tqTb6Z.js} +1 -1
  201. package/web/assets/{typescript-DwoucjlL.js → typescript-C2tUdKLU.js} +1 -1
  202. package/web/assets/useAiChatDrawer-1cmqYfrd.js +1 -0
  203. package/web/assets/{useCloudOrg-DSETGvJK.js → useCloudOrg-C1-UCQOV.js} +1 -1
  204. package/web/assets/{useEnvVarAutocomplete-SpekLSMv.js → useEnvVarAutocomplete-5sTKensF.js} +1 -1
  205. package/web/assets/{useProjectCatalog-DDZXnSWD.js → useProjectCatalog-Dj4rYNAZ.js} +1 -1
  206. package/web/assets/{useProjectCloudOrg-Dg9jETJH.js → useProjectCloudOrg-B1KHG4Co.js} +1 -1
  207. package/web/assets/{useServiceUrlHost-BhfsTBGb.js → useServiceUrlHost-CDiftJ5-.js} +1 -1
  208. package/web/assets/{xml-D6t1pRy0.js → xml-09bhQ5hy.js} +1 -1
  209. package/web/assets/{yaml-DAzbEAMy.js → yaml-DE2l2UeT.js} +1 -1
  210. package/web/index.html +1 -1
  211. package/agent-manager-GFRVUJSI.js +0 -10
  212. package/chunk-7GBSCYXU.js.map +0 -1
  213. package/chunk-B7MABGQN.js.map +0 -1
  214. package/chunk-J2L6VONF.js.map +0 -1
  215. package/chunk-RDE3X3J4.js.map +0 -1
  216. package/src-BNWVTXCY.js.map +0 -1
  217. package/web/assets/AiChatPage-COFvhaB5.js +0 -1
  218. package/web/assets/CloudAccountPage-ClH4A4t9.js +0 -1
  219. package/web/assets/KanbanBoardPage-6I4n9kDT.css +0 -1
  220. package/web/assets/KanbanBoardPage-DOvBivfv.js +0 -4
  221. package/web/assets/KanbanListPage-D3xdMHNk.js +0 -1
  222. package/web/assets/KanbanListPage-DgHde06E.css +0 -1
  223. package/web/assets/WikiPage-BZVFtjfs.js +0 -1
  224. package/web/assets/cloud-client-DH0epluZ.js +0 -1
  225. package/web/assets/cloud-session-BBqRYcsm.js +0 -1
  226. package/web/assets/composables-DtqhVWR-.js +0 -1
  227. package/web/assets/interface-content-folder.svg-DcL7Y965.js +0 -1
  228. package/web/assets/modal-C44iufem.js +0 -1
  229. package/web/assets/process.store-BLYbO6Uf.js +0 -1
  230. package/web/assets/project-launch.store-cRctADnj.js +0 -1
  231. package/web/assets/project.store-BIHP84Mj.js +0 -1
  232. package/web/assets/router-CgLDvz4F.js +0 -1
  233. package/web/assets/settings-scope-E-kRs7p5.js +0 -1
  234. package/web/assets/shared-sse-DUHeXaFO.js +0 -1
  235. package/web/assets/src-DkRsN6ug.css +0 -1
  236. package/web/assets/theme-7Rf1Y25Z.js +0 -1
  237. package/web/assets/trpc-D26KI2Tc.js +0 -1
  238. package/web/assets/useAiChatDrawer-DMkDsZjG.js +0 -1
  239. /package/{agent-manager-GFRVUJSI.js.map → agent-manager-J75NZ6MN.js.map} +0 -0
  240. /package/{chat-6ETYBINN.js.map → chat-ICUWJZEX.js.map} +0 -0
  241. /package/{chunk-TTJNHZ6U.js.map → chunk-24UJRQRM.js.map} +0 -0
  242. /package/{chunk-K2KSZRSI.js.map → chunk-PVLDFBL6.js.map} +0 -0
  243. /package/{companion-SH4HLD6G.js.map → companion-IYK2652T.js.map} +0 -0
  244. /package/{desktop-launcher-7UZF7PFH.js.map → desktop-launcher-GHCALSOS.js.map} +0 -0
  245. /package/{node-ILM6MV56.js.map → node-JU7A5NDT.js.map} +0 -0
  246. /package/{settings-manager-XD6U4QN3.js.map → settings-manager-3G5RHW3X.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 z24 } from "zod";
63
+ import { z as z25 } from "zod";
64
64
  import { TRPCError as TRPCError2 } from "@trpc/server";
65
65
 
66
66
  // src/services/process-manager.ts
@@ -1246,35 +1246,102 @@ var UpdateCloudApiKeyInput = z20.object({
1246
1246
  boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1247
1247
  });
1248
1248
 
1249
- // ../../packages/shared/src/schemas/changelog.schema.ts
1249
+ // ../../packages/shared/src/schemas/integration.schema.ts
1250
1250
  import { z as z21 } from "zod";
1251
- var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
1252
- var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
1253
- var ChangelogTextSchema = z21.object({
1254
- fr: z21.string().min(1).max(500),
1255
- en: z21.string().min(1).max(500)
1251
+ var IntegrationProviderSchema = z21.enum(["intercom"]);
1252
+ var IntegrationConnectionSchema = z21.object({
1253
+ id: z21.string().max(128),
1254
+ organizationId: z21.string().max(128),
1255
+ provider: IntegrationProviderSchema,
1256
+ name: z21.string().min(1).max(200),
1257
+ /** Le tableau et la colonne de création — seulement avec la création automatique. */
1258
+ boardId: z21.string().max(64).nullable(),
1259
+ columnId: z21.string().max(128).nullable(),
1260
+ enabled: z21.boolean(),
1261
+ /**
1262
+ * L'URL complète du webhook à coller chez le fournisseur, construite par le
1263
+ * cloud (domaine public des webhooks). Elle contient un jeton imprévisible.
1264
+ */
1265
+ webhookUrl: z21.string().max(2048),
1266
+ /** Les quatre derniers caractères du secret de signature, pour le reconnaître. */
1267
+ secretPreview: z21.string().max(8),
1268
+ region: z21.string().max(16),
1269
+ /** Créer une carte pour toute conversation qui n'est encore liée nulle part. */
1270
+ autoCreate: z21.boolean(),
1271
+ createdBy: z21.object({ id: z21.string().max(128), name: z21.string().max(200) }),
1272
+ createdAt: z21.string().max(64),
1273
+ lastEventAt: z21.string().max(64).nullable()
1274
+ });
1275
+ var IntegrationConversationStateSchema = z21.enum(["open", "resolved"]);
1276
+ var IntegrationMessageSchema = z21.object({
1277
+ id: z21.string().max(256),
1278
+ author: z21.object({ name: z21.string().max(500), role: z21.enum(["customer", "agent"]) }),
1279
+ body: z21.string().max(1e5),
1280
+ internal: z21.boolean(),
1281
+ sentAt: z21.string().max(64),
1282
+ /** Fichiers joints et images, copiés dans Runeya : ils se lisent comme ceux d'une carte. */
1283
+ attachments: z21.array(KanbanAttachmentSchema).max(50),
1284
+ /** Noms des fichiers qui n'ont pas pu être copiés. */
1285
+ missingAttachments: z21.array(z21.string().max(500)).max(50)
1286
+ });
1287
+ var IntegrationConversationSchema = z21.object({
1288
+ id: z21.string().max(256),
1289
+ connectionId: z21.string().max(128),
1290
+ provider: IntegrationProviderSchema,
1291
+ externalId: z21.string().max(128),
1292
+ title: z21.string().max(500),
1293
+ url: z21.string().max(2e3).nullable(),
1294
+ state: IntegrationConversationStateSchema,
1295
+ updatedAt: z21.string().max(64)
1296
+ });
1297
+ var CardConversationSchema = IntegrationConversationSchema.extend({
1298
+ origin: z21.enum(["auto", "manual"]),
1299
+ /** Les fichiers de la conversation sont en train d'être copiés : ils vont apparaître. */
1300
+ filesPending: z21.boolean(),
1301
+ linkedAt: z21.string().max(64),
1302
+ opening: z21.object({
1303
+ author: IntegrationMessageSchema.shape.author,
1304
+ body: z21.string().max(1e5),
1305
+ attachments: z21.array(KanbanAttachmentSchema).max(50),
1306
+ missingAttachments: z21.array(z21.string().max(500)).max(50)
1307
+ }).nullable(),
1308
+ messages: z21.array(IntegrationMessageSchema),
1309
+ otherCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
1310
+ });
1311
+ var ConversationSearchHitSchema = IntegrationConversationSchema.extend({
1312
+ preview: z21.string().max(500),
1313
+ linkedCards: z21.array(z21.object({ boardId: z21.string().max(64), cardId: z21.string().max(64), title: z21.string().max(500) }))
1314
+ });
1315
+
1316
+ // ../../packages/shared/src/schemas/changelog.schema.ts
1317
+ import { z as z22 } from "zod";
1318
+ var ChangelogSurfaceSchema = z22.enum(["app", "cloud"]);
1319
+ var ChangelogChangeKindSchema = z22.enum(["feature", "improvement", "fix", "breaking"]);
1320
+ var ChangelogTextSchema = z22.object({
1321
+ fr: z22.string().min(1).max(500),
1322
+ en: z22.string().min(1).max(500)
1256
1323
  });
1257
- var ChangelogChangeSchema = z21.object({
1324
+ var ChangelogChangeSchema = z22.object({
1258
1325
  kind: ChangelogChangeKindSchema,
1259
1326
  text: ChangelogTextSchema
1260
1327
  });
1261
1328
  var ChangelogDraftSchema = ChangelogChangeSchema.extend({
1262
- date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1329
+ date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1263
1330
  title: ChangelogTextSchema.optional()
1264
1331
  });
1265
- var ChangelogReleaseSchema = z21.object({
1332
+ var ChangelogReleaseSchema = z22.object({
1266
1333
  surface: ChangelogSurfaceSchema,
1267
1334
  /** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
1268
- version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1335
+ version: z22.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1269
1336
  /** Date de publication, `YYYY-MM-DD`. */
1270
- date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1337
+ date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1271
1338
  /** Facultatif : une version peut s'annoncer par son seul numéro. */
1272
1339
  title: ChangelogTextSchema.optional(),
1273
1340
  /** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
1274
- changes: z21.array(ChangelogChangeSchema).min(1).max(50)
1341
+ changes: z22.array(ChangelogChangeSchema).min(1).max(50)
1275
1342
  });
1276
1343
  var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
1277
- changeCount: z21.number().int().nonnegative()
1344
+ changeCount: z22.number().int().nonnegative()
1278
1345
  });
1279
1346
 
1280
1347
  // ../../packages/shared/src/utils/crypto.ts
@@ -3215,7 +3282,7 @@ import { execa as execa3 } from "execa";
3215
3282
  import { homedir as homedir4 } from "os";
3216
3283
 
3217
3284
  // src/trpc/routers/config.ts
3218
- import { z as z22 } from "zod";
3285
+ import { z as z23 } from "zod";
3219
3286
 
3220
3287
  // src/services/traefik-manager.ts
3221
3288
  import { spawn, execFile as execFile2 } from "child_process";
@@ -3593,13 +3660,13 @@ function resolvePassthroughEnv() {
3593
3660
  return result;
3594
3661
  }
3595
3662
  var configRouter = router({
3596
- setPassthroughEnv: protectedProcedure.input(z22.object({
3597
- names: z22.array(
3598
- z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3663
+ setPassthroughEnv: protectedProcedure.input(z23.object({
3664
+ names: z23.array(
3665
+ z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
3599
3666
  ).max(100),
3600
- values: z22.record(
3601
- z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3602
- z22.string().max(32768)
3667
+ values: z23.record(
3668
+ z23.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
3669
+ z23.string().max(32768)
3603
3670
  ).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
3604
3671
  })).mutation(({ input }) => {
3605
3672
  passthroughEnvNames = input.names;
@@ -3636,7 +3703,7 @@ var configRouter = router({
3636
3703
  getTraefikFileTree: protectedProcedure.query(async () => {
3637
3704
  return traefikManager.getFileTree();
3638
3705
  }),
3639
- getTraefikLogs: protectedProcedure.input(z22.object({ lines: z22.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3706
+ getTraefikLogs: protectedProcedure.input(z23.object({ lines: z23.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
3640
3707
  const logs = await traefikManager.getLogs(input.lines);
3641
3708
  return { logs };
3642
3709
  })
@@ -3828,17 +3895,17 @@ var healthChecker = new HealthChecker();
3828
3895
  import killPort from "kill-port";
3829
3896
 
3830
3897
  // src/config/env.ts
3831
- import { z as z23 } from "zod";
3832
- var EnvSchema = z23.object({
3833
- RUNEYA_AGENT_PORT: z23.coerce.number().int().min(1).max(65535).default(4001),
3834
- RUNEYA_AGENT_HOST: z23.string().default("127.0.0.1"),
3835
- PASSPHRASE_OVERRIDE: z23.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3836
- AGENT_ID: z23.string().optional(),
3898
+ import { z as z24 } from "zod";
3899
+ var EnvSchema = z24.object({
3900
+ RUNEYA_AGENT_PORT: z24.coerce.number().int().min(1).max(65535).default(4001),
3901
+ RUNEYA_AGENT_HOST: z24.string().default("127.0.0.1"),
3902
+ PASSPHRASE_OVERRIDE: z24.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
3903
+ AGENT_ID: z24.string().optional(),
3837
3904
  // Set by spawner or manually for remote agents
3838
- LOG_BUFFER_SIZE: z23.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3839
- METRICS_INTERVAL: z23.coerce.number().int().positive().default(METRICS_INTERVAL),
3840
- GRACE_PERIOD: z23.coerce.number().int().positive().default(GRACE_PERIOD),
3841
- HEALTH_WS_INTERVAL: z23.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3905
+ LOG_BUFFER_SIZE: z24.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
3906
+ METRICS_INTERVAL: z24.coerce.number().int().positive().default(METRICS_INTERVAL),
3907
+ GRACE_PERIOD: z24.coerce.number().int().positive().default(GRACE_PERIOD),
3908
+ HEALTH_WS_INTERVAL: z24.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
3842
3909
  });
3843
3910
  var env = EnvSchema.parse(process.env);
3844
3911
 
@@ -4626,7 +4693,7 @@ var processRouter = router({
4626
4693
  return processManager.listStatuses();
4627
4694
  }),
4628
4695
  /** Get a single process */
4629
- get: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4696
+ get: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
4630
4697
  const status = processManager.getStatus(input.id);
4631
4698
  if (!status) {
4632
4699
  throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
@@ -4639,78 +4706,78 @@ var processRouter = router({
4639
4706
  return { id };
4640
4707
  }),
4641
4708
  /** Undeploy: stop + remove */
4642
- undeploy: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4709
+ undeploy: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
4643
4710
  await processManager.undeploy(input.id);
4644
4711
  return { success: true };
4645
4712
  }),
4646
4713
  /** Update the service config for a deployed process */
4647
- updateConfig: protectedProcedure.input(z24.object({ serviceId: z24.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4714
+ updateConfig: protectedProcedure.input(z25.object({ serviceId: z25.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
4648
4715
  processManager.updateConfig(input.serviceId, input.config);
4649
4716
  return { success: true };
4650
4717
  }),
4651
4718
  /** Start a deployed process */
4652
- start: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4719
+ start: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
4653
4720
  console.log(`[agent] start service=${input.id}`);
4654
4721
  await processManager.start(input.id);
4655
4722
  return processManager.getStatus(input.id);
4656
4723
  }),
4657
4724
  /** Stop a running process */
4658
- stop: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4725
+ stop: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
4659
4726
  console.log(`[agent] stop service=${input.id}`);
4660
4727
  await processManager.stop(input.id);
4661
4728
  return processManager.getStatus(input.id);
4662
4729
  }),
4663
4730
  /** Restart a process */
4664
- restart: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
4731
+ restart: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(async ({ input }) => {
4665
4732
  console.log(`[agent] restart service=${input.id}`);
4666
4733
  await processManager.restart(input.id);
4667
4734
  return processManager.getStatus(input.id);
4668
4735
  }),
4669
4736
  /** Get buffered logs for a process */
4670
- logs: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
4737
+ logs: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(({ input }) => {
4671
4738
  const logs = processManager.getLogs(input.id);
4672
4739
  return logs;
4673
4740
  }),
4674
4741
  /** Clear buffered logs for a process */
4675
- clearLogBuffer: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(({ input }) => {
4742
+ clearLogBuffer: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).mutation(({ input }) => {
4676
4743
  processManager.clearLogBuffer(input.id);
4677
4744
  return { success: true };
4678
4745
  }),
4679
4746
  /** Execute a shortcut command and stream output into the process log */
4680
- executeShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4747
+ executeShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
4681
4748
  const result = await processManager.executeShortcut(input.id, input.shortcut);
4682
4749
  return result;
4683
4750
  }),
4684
4751
  /** Cancel a running shortcut command */
4685
- cancelShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcutId: z24.string().max(128) })).mutation(({ input }) => {
4752
+ cancelShortcut: protectedProcedure.input(z25.object({ id: z25.string().max(128), shortcutId: z25.string().max(128) })).mutation(({ input }) => {
4686
4753
  processManager.cancelShortcut(input.id, input.shortcutId);
4687
4754
  return { success: true };
4688
4755
  }),
4689
4756
  /** Cancel a running ad-hoc command */
4690
- cancelAdHocCommand: protectedProcedure.input(z24.object({ id: z24.string().max(128), commandId: z24.string().max(128).optional() })).mutation(({ input }) => {
4757
+ cancelAdHocCommand: protectedProcedure.input(z25.object({ id: z25.string().max(128), commandId: z25.string().max(128).optional() })).mutation(({ input }) => {
4691
4758
  processManager.cancelAdHocCommand(input.id, input.commandId);
4692
4759
  return { success: true };
4693
4760
  }),
4694
4761
  /** Execute an ad-hoc command and stream output into the process log */
4695
- executeAdHocCommand: protectedProcedure.input(z24.object({
4696
- id: z24.string().max(128),
4697
- command: z24.string().min(1).max(4096),
4698
- cwd: z24.string().max(4096).optional(),
4699
- commandId: z24.string().max(128).optional()
4762
+ executeAdHocCommand: protectedProcedure.input(z25.object({
4763
+ id: z25.string().max(128),
4764
+ command: z25.string().min(1).max(4096),
4765
+ cwd: z25.string().max(4096).optional(),
4766
+ commandId: z25.string().max(128).optional()
4700
4767
  })).mutation(async ({ input }) => {
4701
4768
  const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
4702
4769
  return result;
4703
4770
  }),
4704
4771
  /** List active log source types for a process */
4705
- logSources: protectedProcedure.input(z24.object({ processId: z24.string().max(128) })).query(({ input }) => {
4772
+ logSources: protectedProcedure.input(z25.object({ processId: z25.string().max(128) })).query(({ input }) => {
4706
4773
  return processManager.getLogSourceTypes(input.processId);
4707
4774
  }),
4708
4775
  /** Get current metrics for a process */
4709
- metrics: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(async ({ input }) => {
4776
+ metrics: protectedProcedure.input(z25.object({ id: z25.string().max(128) })).query(async ({ input }) => {
4710
4777
  return processManager.getMetrics(input.id);
4711
4778
  }),
4712
4779
  /** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
4713
- onLog: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4780
+ onLog: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4714
4781
  const queue = [];
4715
4782
  let resolve2 = null;
4716
4783
  const handler = (batch) => {
@@ -4739,7 +4806,7 @@ var processRouter = router({
4739
4806
  }
4740
4807
  }),
4741
4808
  /** Subscribe to real-time status changes */
4742
- onStatus: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4809
+ onStatus: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4743
4810
  console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
4744
4811
  const queue = [];
4745
4812
  let resolve2 = null;
@@ -4771,7 +4838,7 @@ var processRouter = router({
4771
4838
  }
4772
4839
  }),
4773
4840
  /** Subscribe to real-time health status changes */
4774
- onHealth: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4841
+ onHealth: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4775
4842
  const queue = [];
4776
4843
  let resolve2 = null;
4777
4844
  const handler = (healthData) => {
@@ -4801,7 +4868,7 @@ var processRouter = router({
4801
4868
  }
4802
4869
  }),
4803
4870
  /** Subscribe to real-time metrics */
4804
- onMetrics: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4871
+ onMetrics: protectedProcedure.input(z25.object({ processId: z25.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
4805
4872
  const queue = [];
4806
4873
  let resolve2 = null;
4807
4874
  const handler = (metrics) => {
@@ -4976,6 +5043,9 @@ async function isCliAvailable(cli, timeoutMs = 5e3) {
4976
5043
  });
4977
5044
  }
4978
5045
 
5046
+ // ../../packages/shared/src/node/aes-gcm.ts
5047
+ import { randomBytes as randomBytes2, createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2 } from "crypto";
5048
+
4979
5049
  // src/trpc/routers/health.ts
4980
5050
  var startedAt = Date.now();
4981
5051
  function getLanIp2() {
@@ -5022,7 +5092,7 @@ var healthRouter = router({
5022
5092
  });
5023
5093
 
5024
5094
  // src/trpc/routers/terminal.ts
5025
- import { z as z25 } from "zod";
5095
+ import { z as z26 } from "zod";
5026
5096
  import { TRPCError as TRPCError3 } from "@trpc/server";
5027
5097
 
5028
5098
  // src/services/terminal-manager.ts
@@ -5115,11 +5185,11 @@ var terminalManager = new TerminalManager();
5115
5185
  // src/trpc/routers/terminal.ts
5116
5186
  var terminalRouter = router({
5117
5187
  /** Spawn a new PTY shell session, returns a sessionId */
5118
- create: protectedProcedure.input(z25.object({
5119
- cwd: z25.string().max(512).optional(),
5120
- cols: z25.number().int().min(1).max(512).optional(),
5121
- rows: z25.number().int().min(1).max(256).optional(),
5122
- title: z25.string().max(128).optional()
5188
+ create: protectedProcedure.input(z26.object({
5189
+ cwd: z26.string().max(512).optional(),
5190
+ cols: z26.number().int().min(1).max(512).optional(),
5191
+ rows: z26.number().int().min(1).max(256).optional(),
5192
+ title: z26.string().max(128).optional()
5123
5193
  })).mutation(({ input }) => {
5124
5194
  const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
5125
5195
  return { sessionId };
@@ -5127,34 +5197,34 @@ var terminalRouter = router({
5127
5197
  /** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
5128
5198
  list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
5129
5199
  /** Renommer un onglet */
5130
- rename: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), title: z25.string().max(128) })).mutation(({ input }) => {
5200
+ rename: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), title: z26.string().max(128) })).mutation(({ input }) => {
5131
5201
  terminalManager.rename(input.sessionId, input.title);
5132
5202
  return { ok: true };
5133
5203
  }),
5134
5204
  /** Write data (keystrokes) to a PTY session */
5135
- write: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), data: z25.string().max(65536) })).mutation(({ input }) => {
5205
+ write: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128), data: z26.string().max(65536) })).mutation(({ input }) => {
5136
5206
  terminalManager.write(input.sessionId, input.data);
5137
5207
  return { ok: true };
5138
5208
  }),
5139
5209
  /** Resize a PTY session */
5140
- resize: protectedProcedure.input(z25.object({
5141
- sessionId: z25.string().max(128),
5142
- cols: z25.number().int().min(1).max(512),
5143
- rows: z25.number().int().min(1).max(256)
5210
+ resize: protectedProcedure.input(z26.object({
5211
+ sessionId: z26.string().max(128),
5212
+ cols: z26.number().int().min(1).max(512),
5213
+ rows: z26.number().int().min(1).max(256)
5144
5214
  })).mutation(({ input }) => {
5145
5215
  terminalManager.resize(input.sessionId, input.cols, input.rows);
5146
5216
  return { ok: true };
5147
5217
  }),
5148
5218
  /** Destroy a PTY session */
5149
- destroy: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).mutation(({ input }) => {
5219
+ destroy: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).mutation(({ input }) => {
5150
5220
  terminalManager.destroy(input.sessionId);
5151
5221
  return { ok: true };
5152
5222
  }),
5153
5223
  /** Stream PTY output for a session (async generator subscription) */
5154
- onData: protectedProcedure.input(z25.object({
5155
- sessionId: z25.string().max(128),
5224
+ onData: protectedProcedure.input(z26.object({
5225
+ sessionId: z26.string().max(128),
5156
5226
  /** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
5157
- replay: z25.boolean().optional()
5227
+ replay: z26.boolean().optional()
5158
5228
  })).subscription(async function* ({ input }) {
5159
5229
  const emitter = terminalManager.getEmitter(input.sessionId);
5160
5230
  if (!emitter) {
@@ -5199,7 +5269,7 @@ var terminalRouter = router({
5199
5269
  });
5200
5270
 
5201
5271
  // src/trpc/routers/git.ts
5202
- import { z as z26 } from "zod";
5272
+ import { z as z27 } from "zod";
5203
5273
  import { TRPCError as TRPCError4 } from "@trpc/server";
5204
5274
  import { execFile as execFile6, spawn as spawn3 } from "child_process";
5205
5275
  import { promisify as promisify3 } from "util";
@@ -5267,12 +5337,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
5267
5337
  var execFileAsync3 = promisify3(execFile6);
5268
5338
  var GIT_TIMEOUT = 15e3;
5269
5339
  var DIFF_MAX_BYTES = 512 * 1024;
5270
- var CWD_SCHEMA = z26.string().min(1).max(4096);
5271
- var SAFE_PATH_SCHEMA = z26.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
5340
+ var CWD_SCHEMA = z27.string().min(1).max(4096);
5341
+ var SAFE_PATH_SCHEMA = z27.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
5272
5342
  message: "Path must be relative and not traverse up"
5273
5343
  });
5274
- var REMOTE_SCHEMA = z26.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5275
- var BRANCH_SCHEMA = z26.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5344
+ var REMOTE_SCHEMA = z27.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
5345
+ var BRANCH_SCHEMA = z27.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
5276
5346
  function gitSafeEnv() {
5277
5347
  const env2 = {
5278
5348
  GIT_TERMINAL_PROMPT: "0",
@@ -5390,10 +5460,10 @@ async function getGitStatus(cwd) {
5390
5460
  }
5391
5461
  var gitRouter = router({
5392
5462
  /** Check if a working directory exists and optionally verify its git remote */
5393
- checkCwd: protectedProcedure.input(z26.object({
5463
+ checkCwd: protectedProcedure.input(z27.object({
5394
5464
  cwd: CWD_SCHEMA,
5395
- remote: z26.string().max(2048).optional(),
5396
- checkReachability: z26.boolean().optional()
5465
+ remote: z27.string().max(2048).optional(),
5466
+ checkReachability: z27.boolean().optional()
5397
5467
  })).query(async ({ input }) => {
5398
5468
  const resolvedCwd = expandEnvVar(input.cwd);
5399
5469
  const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
@@ -5415,8 +5485,8 @@ var gitRouter = router({
5415
5485
  return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
5416
5486
  }),
5417
5487
  /** Clone a git repository into a target directory */
5418
- clone: protectedProcedure.input(z26.object({
5419
- remote: z26.string().min(1).max(2048),
5488
+ clone: protectedProcedure.input(z27.object({
5489
+ remote: z27.string().min(1).max(2048),
5420
5490
  cwd: CWD_SCHEMA
5421
5491
  })).mutation(async ({ input }) => {
5422
5492
  const absoluteCwd = resolvePath2(expandEnvVar(input.cwd));
@@ -5437,13 +5507,13 @@ var gitRouter = router({
5437
5507
  return { success: true };
5438
5508
  }),
5439
5509
  /** Get full git status */
5440
- status: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5510
+ status: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5441
5511
  const cwd = assertCwdExists(input.cwd);
5442
5512
  await assertGitRepo(cwd);
5443
5513
  return getGitStatus(cwd);
5444
5514
  }),
5445
5515
  /** Watch .git/ for changes and stream updated status */
5446
- onStatusChange: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5516
+ onStatusChange: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
5447
5517
  const cwd = assertCwdExists(input.cwd);
5448
5518
  await assertGitRepo(cwd);
5449
5519
  const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
@@ -5494,7 +5564,7 @@ var gitRouter = router({
5494
5564
  }
5495
5565
  }),
5496
5566
  /** Get commit log */
5497
- log: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, limit: z26.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5567
+ log: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, limit: z27.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
5498
5568
  const cwd = assertCwdExists(input.cwd);
5499
5569
  await assertGitRepo(cwd);
5500
5570
  const format = "%H%h%an%ae%ai%s";
@@ -5505,7 +5575,7 @@ var gitRouter = router({
5505
5575
  });
5506
5576
  }),
5507
5577
  /** List local and remote branches */
5508
- branches: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5578
+ branches: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5509
5579
  const cwd = assertCwdExists(input.cwd);
5510
5580
  await assertGitRepo(cwd);
5511
5581
  const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5517,7 +5587,7 @@ var gitRouter = router({
5517
5587
  return { current, branches };
5518
5588
  }),
5519
5589
  /** Checkout a branch */
5520
- checkout: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z26.boolean().default(false) })).mutation(async ({ input }) => {
5590
+ checkout: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z27.boolean().default(false) })).mutation(async ({ input }) => {
5521
5591
  const cwd = assertCwdExists(input.cwd);
5522
5592
  await assertGitRepo(cwd);
5523
5593
  const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
@@ -5525,42 +5595,42 @@ var gitRouter = router({
5525
5595
  return { ok: true };
5526
5596
  }),
5527
5597
  /** Stage files */
5528
- stage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5598
+ stage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5529
5599
  const cwd = assertCwdExists(input.cwd);
5530
5600
  await assertGitRepo(cwd);
5531
5601
  await git(["add", "--", ...input.paths], cwd);
5532
5602
  return { ok: true };
5533
5603
  }),
5534
5604
  /** Stage all files */
5535
- stageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5605
+ stageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5536
5606
  const cwd = assertCwdExists(input.cwd);
5537
5607
  await assertGitRepo(cwd);
5538
5608
  await git(["add", "-A"], cwd);
5539
5609
  return { ok: true };
5540
5610
  }),
5541
5611
  /** Unstage files */
5542
- unstage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5612
+ unstage: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5543
5613
  const cwd = assertCwdExists(input.cwd);
5544
5614
  await assertGitRepo(cwd);
5545
5615
  await git(["restore", "--staged", "--", ...input.paths], cwd);
5546
5616
  return { ok: true };
5547
5617
  }),
5548
5618
  /** Unstage all files */
5549
- unstageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5619
+ unstageAll: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
5550
5620
  const cwd = assertCwdExists(input.cwd);
5551
5621
  await assertGitRepo(cwd);
5552
5622
  await git(["reset", "--"], cwd);
5553
5623
  return { ok: true };
5554
5624
  }),
5555
5625
  /** Commit staged changes */
5556
- commit: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, message: z26.string().min(1).max(4096) })).mutation(async ({ input }) => {
5626
+ commit: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, message: z27.string().min(1).max(4096) })).mutation(async ({ input }) => {
5557
5627
  const cwd = assertCwdExists(input.cwd);
5558
5628
  await assertGitRepo(cwd);
5559
5629
  const output = await git(["commit", "-m", input.message], cwd);
5560
5630
  return { ok: true, output: output.trim() };
5561
5631
  }),
5562
5632
  /** Push to remote */
5563
- push: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z26.boolean().default(false) })).mutation(async ({ input }) => {
5633
+ push: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z27.boolean().default(false) })).mutation(async ({ input }) => {
5564
5634
  const cwd = assertCwdExists(input.cwd);
5565
5635
  await assertGitRepo(cwd);
5566
5636
  const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
@@ -5569,25 +5639,25 @@ var gitRouter = router({
5569
5639
  return { ok: true, output: output.trim() };
5570
5640
  }),
5571
5641
  /** Pull from remote */
5572
- pull: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5642
+ pull: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5573
5643
  const cwd = assertCwdExists(input.cwd);
5574
5644
  await assertGitRepo(cwd);
5575
5645
  const output = await git(["pull", input.remote], cwd);
5576
5646
  return { ok: true, output: output.trim() };
5577
5647
  }),
5578
5648
  /** Fetch from remote */
5579
- fetch: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5649
+ fetch: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
5580
5650
  const cwd = assertCwdExists(input.cwd);
5581
5651
  await assertGitRepo(cwd);
5582
5652
  const output = await git(["fetch", input.remote], cwd);
5583
5653
  return { ok: true, output: output.trim() };
5584
5654
  }),
5585
5655
  /** Get diff for a file or the whole index */
5586
- diff: protectedProcedure.input(z26.object({
5656
+ diff: protectedProcedure.input(z27.object({
5587
5657
  cwd: CWD_SCHEMA,
5588
- path: z26.string().max(4096).optional(),
5589
- staged: z26.boolean().default(false),
5590
- untracked: z26.boolean().default(false)
5658
+ path: z27.string().max(4096).optional(),
5659
+ staged: z27.boolean().default(false),
5660
+ untracked: z27.boolean().default(false)
5591
5661
  })).query(async ({ input }) => {
5592
5662
  const cwd = assertCwdExists(input.cwd);
5593
5663
  await assertGitRepo(cwd);
@@ -5635,21 +5705,21 @@ var gitRouter = router({
5635
5705
  };
5636
5706
  }),
5637
5707
  /** Discard changes to working tree files */
5638
- discard: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5708
+ discard: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, paths: z27.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
5639
5709
  const cwd = assertCwdExists(input.cwd);
5640
5710
  await assertGitRepo(cwd);
5641
5711
  await git(["restore", "--", ...input.paths], cwd);
5642
5712
  return { ok: true };
5643
5713
  }),
5644
5714
  /** Get staged diff (used by server for AI commit message generation) */
5645
- stagedDiff: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5715
+ stagedDiff: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5646
5716
  const cwd = assertCwdExists(input.cwd);
5647
5717
  await assertGitRepo(cwd);
5648
5718
  const diff = await git(["diff", "--staged"], cwd, true);
5649
5719
  return { diff: diff.slice(0, 3e4) };
5650
5720
  }),
5651
5721
  /** Merge a branch into the current branch */
5652
- merge: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z26.boolean().default(false) })).mutation(async ({ input }) => {
5722
+ merge: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z27.boolean().default(false) })).mutation(async ({ input }) => {
5653
5723
  const cwd = assertCwdExists(input.cwd);
5654
5724
  await assertGitRepo(cwd);
5655
5725
  const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
@@ -5657,14 +5727,14 @@ var gitRouter = router({
5657
5727
  return { ok: true, output: output.trim() };
5658
5728
  }),
5659
5729
  /** Rebase current branch onto another branch */
5660
- rebase: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5730
+ rebase: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
5661
5731
  const cwd = assertCwdExists(input.cwd);
5662
5732
  await assertGitRepo(cwd);
5663
5733
  const output = await git(["rebase", input.branch], cwd);
5664
5734
  return { ok: true, output: output.trim() };
5665
5735
  }),
5666
5736
  /** List remotes */
5667
- remotes: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5737
+ remotes: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5668
5738
  const cwd = assertCwdExists(input.cwd);
5669
5739
  await assertGitRepo(cwd);
5670
5740
  const output = await git(["remote", "-v"], cwd, true);
@@ -5682,7 +5752,7 @@ var gitRouter = router({
5682
5752
  return remotes;
5683
5753
  }),
5684
5754
  /** List stash entries */
5685
- stashList: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5755
+ stashList: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
5686
5756
  const cwd = assertCwdExists(input.cwd);
5687
5757
  await assertGitRepo(cwd);
5688
5758
  const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
@@ -5695,10 +5765,10 @@ var gitRouter = router({
5695
5765
  return entries;
5696
5766
  }),
5697
5767
  /** Stash current changes */
5698
- stashPush: protectedProcedure.input(z26.object({
5768
+ stashPush: protectedProcedure.input(z27.object({
5699
5769
  cwd: CWD_SCHEMA,
5700
- message: z26.string().max(4096).optional(),
5701
- includeUntracked: z26.boolean().default(true)
5770
+ message: z27.string().max(4096).optional(),
5771
+ includeUntracked: z27.boolean().default(true)
5702
5772
  })).mutation(async ({ input }) => {
5703
5773
  const cwd = assertCwdExists(input.cwd);
5704
5774
  await assertGitRepo(cwd);
@@ -5709,21 +5779,21 @@ var gitRouter = router({
5709
5779
  return { ok: true, output: output.trim() };
5710
5780
  }),
5711
5781
  /** Apply a stash entry and remove it from the list */
5712
- stashPop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5782
+ stashPop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5713
5783
  const cwd = assertCwdExists(input.cwd);
5714
5784
  await assertGitRepo(cwd);
5715
5785
  const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
5716
5786
  return { ok: true, output: output.trim() };
5717
5787
  }),
5718
5788
  /** Apply a stash entry without removing it from the list */
5719
- stashApply: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5789
+ stashApply: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5720
5790
  const cwd = assertCwdExists(input.cwd);
5721
5791
  await assertGitRepo(cwd);
5722
5792
  const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
5723
5793
  return { ok: true, output: output.trim() };
5724
5794
  }),
5725
5795
  /** Drop a stash entry */
5726
- stashDrop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5796
+ stashDrop: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA, index: z27.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
5727
5797
  const cwd = assertCwdExists(input.cwd);
5728
5798
  await assertGitRepo(cwd);
5729
5799
  const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
@@ -5756,7 +5826,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
5756
5826
  }
5757
5827
 
5758
5828
  // src/trpc/routers/ai.ts
5759
- import { z as z27 } from "zod";
5829
+ import { z as z28 } from "zod";
5760
5830
  import { TRPCError as TRPCError5 } from "@trpc/server";
5761
5831
 
5762
5832
  // src/services/ai-spawn-manager.ts
@@ -6451,25 +6521,25 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
6451
6521
  var MAX_CONTEXT_TOTAL_BYTES = 5e6;
6452
6522
  var aiRouter = router({
6453
6523
  /** Spawn an AI CLI process. Returns a spawnId for streaming. */
6454
- spawn: protectedProcedure.input(z27.object({
6455
- cli: z27.string().max(64),
6456
- args: z27.array(z27.string().max(5e5)),
6457
- env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6458
- cwd: z27.string().max(4096).optional(),
6459
- stdinData: z27.string().max(1e7).optional(),
6460
- enableMcp: z27.boolean().optional(),
6461
- mcpApiBaseUrl: z27.string().max(512).optional(),
6462
- mcpApiToken: z27.string().max(8192).optional(),
6463
- mcpProjectId: z27.string().max(128).optional(),
6464
- mcpOrgId: z27.string().max(128).optional()
6524
+ spawn: protectedProcedure.input(z28.object({
6525
+ cli: z28.string().max(64),
6526
+ args: z28.array(z28.string().max(5e5)),
6527
+ env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
6528
+ cwd: z28.string().max(4096).optional(),
6529
+ stdinData: z28.string().max(1e7).optional(),
6530
+ enableMcp: z28.boolean().optional(),
6531
+ mcpApiBaseUrl: z28.string().max(512).optional(),
6532
+ mcpApiToken: z28.string().max(8192).optional(),
6533
+ mcpProjectId: z28.string().max(128).optional(),
6534
+ mcpOrgId: z28.string().max(128).optional()
6465
6535
  })).mutation(({ input }) => {
6466
6536
  const spawnId = aiSpawnManager.spawn(input);
6467
6537
  return { spawnId };
6468
6538
  }),
6469
6539
  /** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
6470
- stream: protectedProcedure.input(z27.object({
6471
- spawnId: z27.string().max(128),
6472
- fromOffset: z27.number().int().min(0).default(0)
6540
+ stream: protectedProcedure.input(z28.object({
6541
+ spawnId: z28.string().max(128),
6542
+ fromOffset: z28.number().int().min(0).default(0)
6473
6543
  })).subscription(async function* ({ input }) {
6474
6544
  try {
6475
6545
  for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
@@ -6483,41 +6553,41 @@ var aiRouter = router({
6483
6553
  }
6484
6554
  }),
6485
6555
  /** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
6486
- spawnPty: protectedProcedure.input(z27.object({
6487
- cli: z27.string().max(64),
6488
- args: z27.array(z27.string().max(5e5)),
6489
- env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
6490
- cwd: z27.string().max(4096).optional(),
6491
- cols: z27.number().int().min(1).max(1e3).optional(),
6492
- rows: z27.number().int().min(1).max(1e3).optional(),
6493
- sessionId: z27.string().max(128).optional(),
6494
- enableMcp: z27.boolean().optional(),
6495
- mcpApiBaseUrl: z27.string().max(512).optional(),
6496
- mcpApiToken: z27.string().max(8192).optional(),
6497
- mcpProjectId: z27.string().max(128).optional(),
6498
- mcpOrgId: z27.string().max(128).optional()
6556
+ spawnPty: protectedProcedure.input(z28.object({
6557
+ cli: z28.string().max(64),
6558
+ args: z28.array(z28.string().max(5e5)),
6559
+ env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional(),
6560
+ cwd: z28.string().max(4096).optional(),
6561
+ cols: z28.number().int().min(1).max(1e3).optional(),
6562
+ rows: z28.number().int().min(1).max(1e3).optional(),
6563
+ sessionId: z28.string().max(128).optional(),
6564
+ enableMcp: z28.boolean().optional(),
6565
+ mcpApiBaseUrl: z28.string().max(512).optional(),
6566
+ mcpApiToken: z28.string().max(8192).optional(),
6567
+ mcpProjectId: z28.string().max(128).optional(),
6568
+ mcpOrgId: z28.string().max(128).optional()
6499
6569
  })).mutation(({ input }) => {
6500
6570
  const spawnId = aiSpawnManager.spawnPty(input);
6501
6571
  return { spawnId };
6502
6572
  }),
6503
6573
  /** Find a running PTY spawn by its logical sessionId (for re-attach). */
6504
- findPtyBySession: protectedProcedure.input(z27.object({ sessionId: z27.string().max(128) })).query(({ input }) => {
6574
+ findPtyBySession: protectedProcedure.input(z28.object({ sessionId: z28.string().max(128) })).query(({ input }) => {
6505
6575
  return aiSpawnManager.findPtyBySessionId(input.sessionId);
6506
6576
  }),
6507
6577
  /** Write input to a PTY spawn (user keystrokes). */
6508
- writePty: protectedProcedure.input(z27.object({
6509
- spawnId: z27.string().max(128),
6510
- data: z27.string().max(1e6)
6578
+ writePty: protectedProcedure.input(z28.object({
6579
+ spawnId: z28.string().max(128),
6580
+ data: z28.string().max(1e6)
6511
6581
  })).mutation(({ input }) => {
6512
6582
  const ok = aiSpawnManager.writePty(input.spawnId, input.data);
6513
6583
  return { ok };
6514
6584
  }),
6515
6585
  /** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
6516
- writeContextFiles: protectedProcedure.input(z27.object({
6517
- sessionId: z27.string().min(1).max(128),
6518
- files: z27.array(z27.object({
6519
- name: z27.string().min(1).max(256),
6520
- content: z27.string().max(MAX_CONTEXT_FILE_BYTES)
6586
+ writeContextFiles: protectedProcedure.input(z28.object({
6587
+ sessionId: z28.string().min(1).max(128),
6588
+ files: z28.array(z28.object({
6589
+ name: z28.string().min(1).max(256),
6590
+ content: z28.string().max(MAX_CONTEXT_FILE_BYTES)
6521
6591
  })).min(1).max(MAX_CONTEXT_FILES)
6522
6592
  }).refine(
6523
6593
  (val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
@@ -6532,25 +6602,25 @@ var aiRouter = router({
6532
6602
  * which clipboard method (if any) succeeded — caller decides whether to send
6533
6603
  * Ctrl+V (\x16) or inject `@<path>` into the PTY.
6534
6604
  */
6535
- pasteImage: protectedProcedure.input(z27.object({
6536
- sessionId: z27.string().max(128).optional(),
6537
- mimeType: z27.string().max(64),
6538
- base64: z27.string().max(15e6)
6605
+ pasteImage: protectedProcedure.input(z28.object({
6606
+ sessionId: z28.string().max(128).optional(),
6607
+ mimeType: z28.string().max(64),
6608
+ base64: z28.string().max(15e6)
6539
6609
  })).mutation(async ({ input }) => {
6540
6610
  const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
6541
6611
  return res;
6542
6612
  }),
6543
6613
  /** Resize a PTY spawn. */
6544
- resizePty: protectedProcedure.input(z27.object({
6545
- spawnId: z27.string().max(128),
6546
- cols: z27.number().int().min(1).max(1e3),
6547
- rows: z27.number().int().min(1).max(1e3)
6614
+ resizePty: protectedProcedure.input(z28.object({
6615
+ spawnId: z28.string().max(128),
6616
+ cols: z28.number().int().min(1).max(1e3),
6617
+ rows: z28.number().int().min(1).max(1e3)
6548
6618
  })).mutation(({ input }) => {
6549
6619
  const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
6550
6620
  return { ok };
6551
6621
  }),
6552
6622
  /** Kill a running AI spawn. */
6553
- kill: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6623
+ kill: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
6554
6624
  const killed = aiSpawnManager.kill(input.spawnId);
6555
6625
  return { ok: killed };
6556
6626
  }),
@@ -6559,23 +6629,23 @@ var aiRouter = router({
6559
6629
  return aiSpawnManager.list();
6560
6630
  }),
6561
6631
  /** Acknowledge receipt of all data — agent can clean up after TTL. */
6562
- ack: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
6632
+ ack: protectedProcedure.input(z28.object({ spawnId: z28.string().max(128) })).mutation(({ input }) => {
6563
6633
  const acked = aiSpawnManager.ack(input.spawnId);
6564
6634
  return { ok: acked };
6565
6635
  }),
6566
6636
  /** Forward a JSON-RPC request to the local codex app-server. */
6567
- codexRequest: protectedProcedure.input(z27.object({
6568
- method: z27.string().max(256),
6569
- params: z27.record(z27.string(), z27.unknown()).default({}),
6570
- env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional()
6637
+ codexRequest: protectedProcedure.input(z28.object({
6638
+ method: z28.string().max(256),
6639
+ params: z28.record(z28.string(), z28.unknown()).default({}),
6640
+ env: z28.record(z28.string().max(256), z28.string().max(5e5)).optional()
6571
6641
  })).mutation(async ({ input }) => {
6572
6642
  await codexAppServerManager.ensureConnected(input.env);
6573
6643
  const result = await codexAppServerManager.sendRequest(input.method, input.params);
6574
6644
  return { result };
6575
6645
  }),
6576
6646
  /** Stream notifications from the codex app-server. Optionally filter by threadId. */
6577
- codexNotifications: protectedProcedure.input(z27.object({
6578
- threadId: z27.string().max(256).optional()
6647
+ codexNotifications: protectedProcedure.input(z28.object({
6648
+ threadId: z28.string().max(256).optional()
6579
6649
  }).default({})).subscription(async function* ({ input, signal }) {
6580
6650
  await codexAppServerManager.ensureConnected();
6581
6651
  const queue = [];
@@ -6612,13 +6682,13 @@ var aiRouter = router({
6612
6682
  });
6613
6683
 
6614
6684
  // src/trpc/routers/wiki.ts
6615
- import { z as z28 } from "zod";
6685
+ import { z as z29 } from "zod";
6616
6686
  import { TRPCError as TRPCError6 } from "@trpc/server";
6617
6687
  import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
6618
6688
  import { dirname as dirname3 } from "path";
6619
6689
  import { resolve as resolvePath3, join as join6, relative, sep } from "path";
6620
- var CWD_SCHEMA2 = z28.string().min(1).max(4096);
6621
- var REL_PATH_SCHEMA = z28.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6690
+ var CWD_SCHEMA2 = z29.string().min(1).max(4096);
6691
+ var REL_PATH_SCHEMA = z29.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
6622
6692
  message: "Path must be a relative path without traversal"
6623
6693
  });
6624
6694
  var MAX_FILES = 500;
@@ -6638,9 +6708,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
6638
6708
  "target",
6639
6709
  "out"
6640
6710
  ]);
6641
- var RepoEntrySchema = z28.lazy(() => z28.union([
6642
- z28.object({ type: z28.literal("file"), name: z28.string(), path: z28.string() }),
6643
- z28.object({ type: z28.literal("dir"), name: z28.string(), path: z28.string(), children: z28.array(RepoEntrySchema) })
6711
+ var RepoEntrySchema = z29.lazy(() => z29.union([
6712
+ z29.object({ type: z29.literal("file"), name: z29.string(), path: z29.string() }),
6713
+ z29.object({ type: z29.literal("dir"), name: z29.string(), path: z29.string(), children: z29.array(RepoEntrySchema) })
6644
6714
  ]));
6645
6715
  async function walkMarkdown(root, dir, depth, counter) {
6646
6716
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
@@ -6710,13 +6780,13 @@ async function resolveRoot(cwd) {
6710
6780
  }
6711
6781
  }
6712
6782
  var wikiRouter = router({
6713
- listRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6783
+ listRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
6714
6784
  const root = await resolveRoot(input.cwd);
6715
6785
  const counter = { n: 0 };
6716
6786
  const entries = await walkMarkdown(root, root, 0, counter);
6717
6787
  return { root, entries, truncated: counter.n >= MAX_FILES };
6718
6788
  }),
6719
- readRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6789
+ readRepoMarkdown: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
6720
6790
  if (!/\.(md|markdown)$/i.test(input.path)) {
6721
6791
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
6722
6792
  }
@@ -6742,10 +6812,10 @@ var wikiRouter = router({
6742
6812
  const content = await readFile2(realTarget, "utf-8");
6743
6813
  return { path: input.path, content };
6744
6814
  }),
6745
- writeMarkdown: protectedProcedure.input(z28.object({
6815
+ writeMarkdown: protectedProcedure.input(z29.object({
6746
6816
  cwd: CWD_SCHEMA2,
6747
6817
  path: REL_PATH_SCHEMA,
6748
- content: z28.string().max(5e6)
6818
+ content: z29.string().max(5e6)
6749
6819
  })).mutation(async ({ input }) => {
6750
6820
  if (!/\.(md|markdown)$/i.test(input.path)) {
6751
6821
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
@@ -6756,7 +6826,7 @@ var wikiRouter = router({
6756
6826
  await writeFile6(target, input.content, "utf-8");
6757
6827
  return { path: input.path, ok: true };
6758
6828
  }),
6759
- createFile: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6829
+ createFile: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6760
6830
  if (!/\.(md|markdown)$/i.test(input.path)) {
6761
6831
  throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
6762
6832
  }
@@ -6772,13 +6842,13 @@ var wikiRouter = router({
6772
6842
  await writeFile6(target, "", "utf-8");
6773
6843
  return { path: input.path, ok: true };
6774
6844
  }),
6775
- createDir: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6845
+ createDir: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6776
6846
  const root = await resolveRoot(input.cwd);
6777
6847
  const target = await resolveSafePath(root, input.path, false);
6778
6848
  await mkdir6(target, { recursive: true });
6779
6849
  return { path: input.path, ok: true };
6780
6850
  }),
6781
- renamePath: protectedProcedure.input(z28.object({
6851
+ renamePath: protectedProcedure.input(z29.object({
6782
6852
  cwd: CWD_SCHEMA2,
6783
6853
  fromPath: REL_PATH_SCHEMA,
6784
6854
  toPath: REL_PATH_SCHEMA
@@ -6796,14 +6866,14 @@ var wikiRouter = router({
6796
6866
  await rename2(from, to);
6797
6867
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
6798
6868
  }),
6799
- ensureRoot: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6869
+ ensureRoot: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
6800
6870
  const expanded = expandEnvVar(input.cwd);
6801
6871
  const abs = resolvePath3(expanded);
6802
6872
  await mkdir6(abs, { recursive: true });
6803
6873
  const root = await realpath(abs);
6804
6874
  return { root, ok: true };
6805
6875
  }),
6806
- deletePath: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6876
+ deletePath: protectedProcedure.input(z29.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
6807
6877
  const root = await resolveRoot(input.cwd);
6808
6878
  const target = await resolveSafePath(root, input.path, true);
6809
6879
  if (target === root) {