@runeya/runeya 2.0.102 → 2.0.103

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 (276) hide show
  1. package/agent-manager-OWHTBG46.js +9 -0
  2. package/assets/icon-alert.ico +0 -0
  3. package/assets/icon-alert.png +0 -0
  4. package/assets/icon-alert.svg +19 -0
  5. package/{chat-OXRRBDB3.js → chat-JZ4UQDWV.js} +8 -7
  6. package/chunk-KY6KYSOU.js +279 -0
  7. package/chunk-KY6KYSOU.js.map +1 -0
  8. package/{chunk-PSTMO7EE.js → chunk-NZNIWJDT.js} +18 -16
  9. package/{chunk-PSTMO7EE.js.map → chunk-NZNIWJDT.js.map} +1 -1
  10. package/chunk-PH4E5WDN.js +137 -0
  11. package/chunk-PH4E5WDN.js.map +1 -0
  12. package/{chunk-BHLCBARP.js → chunk-QIBUMYR6.js} +29 -11
  13. package/chunk-QIBUMYR6.js.map +1 -0
  14. package/{chunk-NDO5VFZY.js → chunk-QRMG6GMX.js} +694 -917
  15. package/chunk-QRMG6GMX.js.map +1 -0
  16. package/{chunk-BDVQB5RK.js → chunk-UYOWIH4R.js} +23 -21
  17. package/{chunk-BDVQB5RK.js.map → chunk-UYOWIH4R.js.map} +1 -1
  18. package/{chunk-F3HKV5AU.js → chunk-Z67WBWKD.js} +7 -5
  19. package/{chunk-F3HKV5AU.js.map → chunk-Z67WBWKD.js.map} +1 -1
  20. package/{companion-JQGNL4U7.js → companion-6J6NK7H7.js} +5 -4
  21. package/{desktop-launcher-FHNURZA7.js → desktop-launcher-N7WRF3LC.js} +11 -17
  22. package/desktop-launcher-N7WRF3LC.js.map +1 -0
  23. package/index.js +64 -2
  24. package/index.js.map +1 -1
  25. package/instances-command-KZ5UGXOR.js +17 -0
  26. package/package.json +4 -1
  27. package/settings-manager-NZV26BC3.js +9 -0
  28. package/settings-manager-NZV26BC3.js.map +1 -0
  29. package/{src-HZ2XO6TV.js → src-V7DPPFCF.js} +447 -254
  30. package/src-V7DPPFCF.js.map +1 -0
  31. package/tray-TRWZNOUD.js +291 -0
  32. package/tray-TRWZNOUD.js.map +1 -0
  33. package/web/assets/AgentScalarChatInterface.vue-CvG5ha3R.js +13 -0
  34. package/web/assets/AgentTerminalPage-DcGppuzO.js +1 -0
  35. package/web/assets/AiChatPage-BDr5tG0A.js +1 -0
  36. package/web/assets/{AppLayout-DeWqCLuK.css → AppLayout-CYQBjQBU.css} +1 -1
  37. package/web/assets/AppLayout-Dv3ViAk2.js +1 -0
  38. package/web/assets/AuditPage-Bc2jlgZJ.js +1 -0
  39. package/web/assets/CloudAccountPage-4BLXSOix.js +1 -0
  40. package/web/assets/CloudAccountPage-B3MX6DNn.js +1 -0
  41. package/web/assets/CloudMessagingPage-CVzUalxx.js +2 -0
  42. package/web/assets/DashboardPage-Bo51pbzt.js +1 -0
  43. package/web/assets/DirectoryPickerDialog-CIVjWKUm.js +1 -0
  44. package/web/assets/{EditorIcon-C9XKLhc7.js → EditorIcon-BguaWtZg.js} +2 -2
  45. package/web/assets/{EnvironmentForm-bS48MK8k.js → EnvironmentForm-D8dq0ffR.js} +2 -2
  46. package/web/assets/EnvironmentFormPage-d8p3q8Yt.js +1 -0
  47. package/web/assets/EnvironmentListPage-DWo2lWjE.js +1 -0
  48. package/web/assets/KanbanBoardPage-DkwIz3J1.js +4 -0
  49. package/web/assets/KanbanListPage-xIQRLcrS.js +1 -0
  50. package/web/assets/LaunchProjectPage-CXWixUmf.js +1 -0
  51. package/web/assets/LaunchServicesPage-nv-chYgX.js +1 -0
  52. package/web/assets/LogViewer-DLupfjjf.js +3 -0
  53. package/web/assets/OrgKeyPrompt-DePcB-8f.js +1 -0
  54. package/web/assets/ProcessControls-D3zTnHb2.js +1 -0
  55. package/web/assets/ProcessDetailPage-CgVGzRoJ.js +1 -0
  56. package/web/assets/{ProcessMetrics-CBPR5ozp.js → ProcessMetrics-Dwd5lzqY.js} +2 -2
  57. package/web/assets/ProjectDetailPage-HR20KyJ3.js +1 -0
  58. package/web/assets/ProjectListPage-DcH4uTTX.js +1 -0
  59. package/web/assets/RandomJobTestPage-BYTkVcdE.js +2 -0
  60. package/web/assets/ScenarioEditorPage-zRxR03Ud.js +14 -0
  61. package/web/assets/SendToChatDialog-Cm5eKBOb.js +1 -0
  62. package/web/assets/ServiceControlsBar-oBpAP9yX.js +1 -0
  63. package/web/assets/ServiceDetailPage-CahBi-or.js +2 -0
  64. package/web/assets/ServiceFormPage-DfmPM_mI.js +1 -0
  65. package/web/assets/SettingsPage-CDMXFJ4k.js +2063 -0
  66. package/web/assets/SettingsPage-Dw6tbcbw.css +1 -0
  67. package/web/assets/UnlockPage-BUyBEPzQ.js +1 -0
  68. package/web/assets/VariablesTable-Dc6CyVQW.js +1 -0
  69. package/web/assets/VaultMigrationPage-BUmzyDXN.js +1 -0
  70. package/web/assets/VersionBadge-Dx_67FtC.js +1 -0
  71. package/web/assets/WikiPage-DEMJLDpD.js +1 -0
  72. package/web/assets/WikiView-CcrQ2ySx.js +1 -0
  73. package/web/assets/add-scalar-classes-M_EBdf4f.js +387 -0
  74. package/web/assets/{autocomplete-CtIxw1IN.js → autocomplete-QtPLLzzV.js} +3 -3
  75. package/web/assets/{basic-shape-diamond.svg-BErisM9Y.js → basic-shape-diamond.svg-Dyx8FJkS.js} +1 -1
  76. package/web/assets/{basic-shape-hexagon.svg-yC7RoYpa.js → basic-shape-hexagon.svg-1RKdVP3_.js} +1 -1
  77. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DRmanUIO.js → basic-shape-primary-circle-ellipse-round.svg-CSa69hok.js} +1 -1
  78. package/web/assets/{basic-shape-primary-square-rectangle.svg-DxuoouSj.js → basic-shape-primary-square-rectangle.svg-B9TXktd4.js} +1 -1
  79. package/web/assets/{basic-shape-shield.svg-Cy_Frn-W.js → basic-shape-shield.svg-BZvKXoiw.js} +1 -1
  80. package/web/assets/{browser-h0mxWbci.js → browser-CYeKc8Uo.js} +1 -1
  81. package/web/assets/{browser-Dj3qxJqB.js → browser-VlhbsseI.js} +1 -1
  82. package/web/assets/card-tEWfv-Op.js +32 -0
  83. package/web/assets/{checkbox-CTw-YDe_.js → checkbox-CyPqKR6H.js} +3 -3
  84. package/web/assets/{chip-DwSSTlaC.js → chip-wM0gJ_FI.js} +2 -2
  85. package/web/assets/client-B919VgbS.js +24 -0
  86. package/web/assets/cloud-chat.store-C-A9nIqG.js +1 -0
  87. package/web/assets/cloud-session-g6ewm0UI.js +1 -0
  88. package/web/assets/column-DihIO4Zd.js +907 -0
  89. package/web/assets/{computer-device-desktop-monitor.svg-TLZAKrIM.js → computer-device-desktop-monitor.svg-ClbIVuot.js} +1 -1
  90. package/web/assets/{computer-device-desktop.svg-YRcL_Qxn.js → computer-device-desktop.svg-CXpOovTP.js} +1 -1
  91. package/web/assets/{computer-device-laptop.svg-CZUEbqra.js → computer-device-laptop.svg-C9sY1wZv.js} +1 -1
  92. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CcsmeFGb.js → computer-device-mobile-phone-android-samsung-back.svg-CPWC2QHX.js} +1 -1
  93. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CXjVvTBT.js → computer-device-mobile-phone-android-samsung.svg-B0H-mnfh.js} +1 -1
  94. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BQQXUoZZ.js → computer-device-mobile-phone-iphone-x-back.svg-BbIunxoN.js} +1 -1
  95. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CG8VbAP-.js → computer-device-mobile-phone-iphone-x.svg-qLGK_oVA.js} +1 -1
  96. package/web/assets/{computer-device-mobile-tablet-touch.svg-DDMUt0S4.js → computer-device-mobile-tablet-touch.svg-BDpuB6SD.js} +1 -1
  97. package/web/assets/{computer-device-mobile-tablet.svg-CBXtF47n.js → computer-device-mobile-tablet.svg-44THWP9E.js} +1 -1
  98. package/web/assets/{computer-device-network-ethernet-cat6.svg-ObjUhwds.js → computer-device-network-ethernet-cat6.svg-tlgWltl_.js} +1 -1
  99. package/web/assets/{computer-device-network-lan-www.svg-NGYEGuba.js → computer-device-network-lan-www.svg-Bd7Ch4QN.js} +1 -1
  100. package/web/assets/{computer-device-network-wifi-connection.svg-CSnNdKGm.js → computer-device-network-wifi-connection.svg-D_XjoY-a.js} +1 -1
  101. package/web/assets/{computer-device-network-wifi-router.svg-CG7iHt_n.js → computer-device-network-wifi-router.svg-BRpuwgUx.js} +1 -1
  102. package/web/assets/{cssMode-Bclh_xI1.js → cssMode-D0M5mbRd.js} +1 -1
  103. package/web/assets/{divider-Bb31-CFf.js → divider-gPnMjjpJ.js} +2 -2
  104. package/web/assets/{docx-preview-seOy1U3d.js → docx-preview-CBPtwrA0.js} +1 -1
  105. package/web/assets/{ecology-science-erlenmeyer-flask.svg-B8emvJ_p.js → ecology-science-erlenmeyer-flask.svg-CZ3uUeBT.js} +1 -1
  106. package/web/assets/{fieldset-Czp1Leik.js → fieldset-BSGgRmpr.js} +2 -2
  107. package/web/assets/{freemarker2-D87vjb6-.js → freemarker2-BWsK2SIi.js} +1 -1
  108. package/web/assets/{handlebars-CjY4u0vA.js → handlebars-CHNB1gG0.js} +1 -1
  109. package/web/assets/{html-C5pOjLe-.js → html-COwA9Dtl.js} +1 -1
  110. package/web/assets/{htmlMode-CunB4Bjm.js → htmlMode-gZ2_PUDA.js} +1 -1
  111. package/web/assets/{image-flash-lightning.svg-7dRFt_k5.js → image-flash-lightning.svg-Iiwm_7-K.js} +1 -1
  112. package/web/assets/{image-picture-flower.svg-ATG6mf9B.js → image-picture-flower.svg-BP9U6YP8.js} +1 -1
  113. package/web/assets/{index-BMuqGGPP.js → index-mBPGEldp.js} +285 -285
  114. package/web/assets/{interface-alert-exclamation-diamond.svg-DuAtIVtT.js → interface-alert-exclamation-diamond.svg-BYWgnbUp.js} +1 -1
  115. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Bg9-FBLP.js → interface-alert-exclamation-triangle-warning.svg-CWGfXHx_.js} +1 -1
  116. package/web/assets/{interface-alert-information-circle.svg-C5etvhA3.js → interface-alert-information-circle.svg-88Bga8qr.js} +1 -1
  117. package/web/assets/{interface-award-crown.svg-zuAFLs7y.js → interface-award-crown.svg-3hO77oiy.js} +1 -1
  118. package/web/assets/{interface-bookmark.svg-CfBz0NE3.js → interface-bookmark-tag.svg-DcHwQsr0.js} +1 -1
  119. package/web/assets/{interface-bookmark-tag.svg-C3EKMHOq.js → interface-bookmark.svg-SfHcE95h.js} +1 -1
  120. package/web/assets/{interface-calendar-date-one.svg-DGYz2Prk.js → interface-calendar-date-one.svg-DdXOM9VZ.js} +1 -1
  121. package/web/assets/{interface-content-book-open-pages.svg-DGiJpxy1.js → interface-content-book-open-pages.svg-DD7QTDn_.js} +1 -1
  122. package/web/assets/{interface-content-book-page.svg-DydK46P0.js → interface-content-book-page.svg-Dd45mFzB.js} +1 -1
  123. package/web/assets/{interface-content-file.svg-D0pUOvAN.js → interface-content-file.svg-slPoMF5K.js} +1 -1
  124. package/web/assets/interface-content-folder.svg-D90zbTLh.js +1 -0
  125. package/web/assets/{interface-content-folder.svg-DiJ3Pfaa.js → interface-content-folder.svg-cSgXwhRh.js} +1 -1
  126. package/web/assets/{interface-copy-clipboard.svg-Dl3aROYy.js → interface-copy-clipboard.svg-DNy0VeWx.js} +1 -1
  127. package/web/assets/{interface-edit-attachment.svg-UmDFMIt5.js → interface-edit-attachment.svg-VyCAm1jc.js} +1 -1
  128. package/web/assets/{interface-edit-binocular.svg-Bp_8Pfer.js → interface-edit-binocular.svg-DA6QB2sn.js} +1 -1
  129. package/web/assets/{interface-edit-magic-wand.svg-B2A8V7mt.js → interface-edit-magic-wand.svg-D0uagBk7.js} +1 -1
  130. package/web/assets/{interface-edit-tool-paint-roller.svg-DKjdsVsS.js → interface-edit-tool-paint-roller.svg-ConlubSG.js} +1 -1
  131. package/web/assets/{interface-edit-tool-pencil.svg-DuUybI4h.js → interface-edit-tool-pencil.svg-BgNzCwXf.js} +1 -1
  132. package/web/assets/{interface-favorite-award.svg-DHeTFQv8.js → interface-favorite-award.svg-MLL88pIy.js} +1 -1
  133. package/web/assets/{interface-favorite-flag.svg-kKzUSQkq.js → interface-favorite-flag.svg-ZhM_9XJZ.js} +1 -1
  134. package/web/assets/{interface-favorite-heart.svg-CqMgA2mm.js → interface-favorite-heart.svg-Cqq1PV9O.js} +1 -1
  135. package/web/assets/{interface-favorite-star.svg-CuLj8HV6.js → interface-favorite-star.svg-YumblcRD.js} +1 -1
  136. package/web/assets/{interface-favorite-stars-sparkles.svg-lFQTnGOR.js → interface-favorite-stars-sparkles.svg-BH5BXXOe.js} +1 -1
  137. package/web/assets/{interface-hierarchy-flowchart.svg-CBbliSZq.js → interface-hierarchy-flowchart.svg-CEfCPIyC.js} +1 -1
  138. package/web/assets/{interface-home-house.svg-BoFlxzre.js → interface-home-house.svg-DJE_g94c.js} +1 -1
  139. package/web/assets/{interface-hyperlink.svg-DcKs1Vcm.js → interface-hyperlink.svg-BFhnDXDD.js} +1 -1
  140. package/web/assets/{interface-lighting-brightness.svg-BSNKEyEg.js → interface-lighting-brightness.svg-NwOV0KEv.js} +1 -1
  141. package/web/assets/{interface-lock-closed.svg-DSP-B9Ze.js → interface-lock-closed.svg-qVkplX0W.js} +1 -1
  142. package/web/assets/{interface-lock-open-unlock.svg-Bzg-oBHY.js → interface-lock-open-unlock.svg-D18OlPEP.js} +1 -1
  143. package/web/assets/{interface-login-key.svg-DG61Q1lR.js → interface-login-key.svg-CccXX7_b.js} +1 -1
  144. package/web/assets/{interface-search.svg-CODjdPxd.js → interface-search.svg-C6ncELaU.js} +1 -1
  145. package/web/assets/{interface-setting-cog.svg-CgiaBO1E.js → interface-setting-cog.svg-5LrIeBav.js} +1 -1
  146. package/web/assets/{interface-share-megaphone-bullhorn.svg-DM0PsgtH.js → interface-share-megaphone-bullhorn.svg-C-qB4VYi.js} +1 -1
  147. package/web/assets/{interface-share-rocket.svg-B0geTs35.js → interface-share-rocket.svg-Citzuyng.js} +1 -1
  148. package/web/assets/{interface-share-satellite.svg-v9Q6QwAp.js → interface-share-satellite.svg-BldpdKdo.js} +1 -1
  149. package/web/assets/{interface-share-space-ship.svg-CLdqgzgZ.js → interface-share-space-ship.svg-B_Ni34rB.js} +1 -1
  150. package/web/assets/{interface-share.svg-Cx3VhLuj.js → interface-share.svg-FAt7Kgad.js} +1 -1
  151. package/web/assets/{interface-signal-square.svg-By_pQLw8.js → interface-signal-square.svg-DeBP6Pim.js} +1 -1
  152. package/web/assets/{interface-time-clock-circle.svg-Co3P-TM3.js → interface-time-clock-circle.svg-dQfNY8BC.js} +1 -1
  153. package/web/assets/{interface-time-hour-glass.svg-BYSOzVeD.js → interface-time-hour-glass.svg-ylbFnlwY.js} +1 -1
  154. package/web/assets/{interface-users-multiple.svg-moFZaev3.js → interface-users-multiple.svg-DXts3WMC.js} +1 -1
  155. package/web/assets/{interface-weather-moon.svg-DhyTNivv.js → interface-weather-moon.svg-BG6mjCih.js} +1 -1
  156. package/web/assets/{javascript-B1fZNcy6.js → javascript-C_ENjImO.js} +1 -1
  157. package/web/assets/{jsonMode-BxZ6OjkS.js → jsonMode-Bt-LEknD.js} +2 -2
  158. package/web/assets/{liquid-B58z0z3s.js → liquid-CVshgHmY.js} +1 -1
  159. package/web/assets/{lspLanguageFeatures-VksJLqpV.js → lspLanguageFeatures-D1e-RcOs.js} +3 -3
  160. package/web/assets/{mail-chat-bubble-square.svg-DU4TDENX.js → mail-chat-bubble-square.svg-RUMLqiUI.js} +1 -1
  161. package/web/assets/{mail-send-email-paper-airplane.svg-jk90Puk3.js → mail-send-email-paper-airplane.svg-JDe3yqOH.js} +1 -1
  162. package/web/assets/{mail-send-envelope.svg-CrEPc3pm.js → mail-send-envelope.svg-CCzWaeO-.js} +1 -1
  163. package/web/assets/{mdx-l-DSKi30.js → mdx-D9G2-Bj8.js} +1 -1
  164. package/web/assets/{minus-CjETE6Jb.js → minus-BMxEQL_C.js} +2 -2
  165. package/web/assets/modal-CZ7zYg5t.js +1 -0
  166. package/web/assets/modal-CmpFIC5N.js +5 -0
  167. package/web/assets/{money-cashier-receipt.svg-veUsiwvj.js → money-cashier-receipt.svg-DfbOr89U.js} +1 -1
  168. package/web/assets/{money-currency-dollar-pay.svg-C5PNkn4j.js → money-currency-dollar-pay.svg-DY7fQ7jz.js} +1 -1
  169. package/web/assets/{money-graph-arrow-increase.svg-BkCcnTWU.js → money-graph-arrow-increase.svg-jewlEZEL.js} +1 -1
  170. package/web/assets/{money-graph-bar-chart-increase.svg-BDiFSuKt.js → money-graph-bar-chart-increase.svg-BChD8dZv.js} +1 -1
  171. package/web/assets/multiselect-CoRzeHvy.js +251 -0
  172. package/web/assets/{nature-ecology-leaf.svg-CHyv9oDB.js → nature-ecology-leaf.svg-AQimnw3F.js} +1 -1
  173. package/web/assets/{password-BYosjMhB.js → password-4Ykb_Ejn.js} +4 -4
  174. package/web/assets/{phone-telephone.svg-Ce1dgyK9.js → phone-telephone.svg-BdkwIhmo.js} +1 -1
  175. package/web/assets/{plus-CVoE_j-e.js → plus-CYVYZlQL.js} +6 -6
  176. package/web/assets/process.store-CtXpHndZ.js +1 -0
  177. package/web/assets/{programming-bug.svg-D87My2Ok.js → programming-bug.svg-DzT817WD.js} +1 -1
  178. package/web/assets/{programming-cloud.svg-jUe8apKw.js → programming-cloud.svg-eKZD46YP.js} +1 -1
  179. package/web/assets/{programming-computer-database-server.svg-D4etrIBX.js → programming-computer-database-server.svg-BXOhjcQy.js} +1 -1
  180. package/web/assets/{programming-computer-database.svg-BtfkmLTx.js → programming-computer-database.svg-DUzhimFY.js} +1 -1
  181. package/web/assets/{programming-module-four-layout.svg-BkzsDKDq.js → programming-module-four-layout.svg-CYGX7Rlj.js} +1 -1
  182. package/web/assets/{programming-module-three.svg-CpzTvjGS.js → programming-module-three.svg-BhQr1m-R.js} +1 -1
  183. package/web/assets/{programming-module.svg-wyvB3tSR.js → programming-module.svg-Bik697Ne.js} +1 -1
  184. package/web/assets/{programming-script-code.svg-Dek4khNq.js → programming-script-code.svg-BaTanEvH.js} +1 -1
  185. package/web/assets/{python-IeHrvMxp.js → python-wDvaXe-V.js} +1 -1
  186. package/web/assets/{razor-CMgDmoNn.js → razor-C-cEFJP1.js} +1 -1
  187. package/web/assets/router-CqYmBKhe.js +1 -0
  188. package/web/assets/settings-scope-DD7SbjFz.js +1 -0
  189. package/web/assets/settings.store-DcQmvBBv.js +1 -0
  190. package/web/assets/{shopping-cart.svg-DeBhxyDX.js → shopping-cart.svg-BwUFrGEq.js} +1 -1
  191. package/web/assets/{shopping-gift-present.svg-Bt0oKBk9.js → shopping-gift-present.svg-Bs4b94QF.js} +1 -1
  192. package/web/assets/{shopping-shipping-box-parcel-package.svg-BEQNmjMi.js → shopping-shipping-box-parcel-package.svg-DhVaYapE.js} +1 -1
  193. package/web/assets/{src-C3dPv05m.js → src-CpoqK21I.js} +13 -13
  194. package/web/assets/src-De5rZb3_.js +1 -0
  195. package/web/assets/src-NB2ZR0ON.js +572 -0
  196. package/web/assets/tabpanel-DMt8G5AA.js +150 -0
  197. package/web/assets/{tag-new-circle.svg-B1i0Y1yt.js → tag-new-circle.svg-B4Z8uL1_.js} +1 -1
  198. package/web/assets/{toggleswitch-CcQEgLiT.js → toggleswitch-CawhRFb7.js} +2 -2
  199. package/web/assets/{travel-map-earth-globe.svg-CB5sqhKh.js → travel-map-earth-globe.svg-D0s5cc-W.js} +1 -1
  200. package/web/assets/trpc-B17uPEkC.js +1 -0
  201. package/web/assets/{tsMode-DoUs-yH0.js → tsMode-NHDuTjcd.js} +5 -5
  202. package/web/assets/{typescript-fw9OMJ0N.js → typescript-DGkgFTtn.js} +1 -1
  203. package/web/assets/useAiChatDrawer-BxE6EYFc.js +1 -0
  204. package/web/assets/{useCloudOrg-CRpEZ-iE.js → useCloudOrg-BJTjZPZ9.js} +1 -1
  205. package/web/assets/useProjectCatalog-DifZyVY5.js +1 -0
  206. package/web/assets/useProjectCloudOrg-EvyyjH6E.js +1 -0
  207. package/web/assets/{xml-Df6_yGan.js → xml-CJaXEqLW.js} +1 -1
  208. package/web/assets/{yaml-LMvM57fn.js → yaml-bl8i8xOf.js} +1 -1
  209. package/web/index.html +1 -1
  210. package/agent-manager-SNVPZNLC.js +0 -8
  211. package/chunk-BHLCBARP.js.map +0 -1
  212. package/chunk-NDO5VFZY.js.map +0 -1
  213. package/desktop-launcher-FHNURZA7.js.map +0 -1
  214. package/settings-manager-YHQ5YHUH.js +0 -8
  215. package/src-HZ2XO6TV.js.map +0 -1
  216. package/web/assets/AgentScalarChatInterface.vue-CxmPaQaj.js +0 -13
  217. package/web/assets/AgentTerminalPage-Bbx4zyQY.js +0 -1
  218. package/web/assets/AiChatPage-GPPQggxZ.js +0 -1
  219. package/web/assets/AppLayout-BuwGeA1p.js +0 -1
  220. package/web/assets/AuditPage-CDsJsoKA.js +0 -1
  221. package/web/assets/CloudAccountPage-BCP8icYZ.js +0 -1
  222. package/web/assets/CloudAccountPage-DzpS3_gc.js +0 -1
  223. package/web/assets/CloudMessagingPage-01hLQzZ5.js +0 -2
  224. package/web/assets/DashboardPage-CKo-sf8A.js +0 -1
  225. package/web/assets/DirectoryPickerDialog-B1tSWoOM.js +0 -1
  226. package/web/assets/EnvironmentFormPage-9yxN-uI3.js +0 -1
  227. package/web/assets/EnvironmentListPage-BbfptXAU.js +0 -1
  228. package/web/assets/KanbanBoardPage-BWkqTc1a.js +0 -4
  229. package/web/assets/KanbanListPage-GxI1nlON.js +0 -1
  230. package/web/assets/LaunchProjectPage-DKMoGXIC.js +0 -1
  231. package/web/assets/LaunchServicesPage-6dfxPQMB.js +0 -1
  232. package/web/assets/LogViewer-DAzGy_T2.js +0 -3
  233. package/web/assets/OrgKeyPrompt-CQ087D4g.js +0 -1
  234. package/web/assets/ProcessControls-D8uc4x7M.js +0 -1
  235. package/web/assets/ProcessDetailPage-BPxLPGeh.js +0 -1
  236. package/web/assets/ProjectDetailPage-CnZ_CpVU.js +0 -1
  237. package/web/assets/ProjectListPage-D8Svc5e3.js +0 -1
  238. package/web/assets/RandomJobTestPage-BdEiEnSi.js +0 -2
  239. package/web/assets/ScenarioEditorPage-COrL715B.js +0 -14
  240. package/web/assets/SendToChatDialog-D8YB5RM6.js +0 -1
  241. package/web/assets/ServiceControlsBar-BKwvqgHw.js +0 -1
  242. package/web/assets/ServiceDetailPage-BmPRfQN6.js +0 -2
  243. package/web/assets/ServiceFormPage-rVvnwWkb.js +0 -1
  244. package/web/assets/SettingsPage-C-OfBHjn.css +0 -1
  245. package/web/assets/SettingsPage-DmQB6t1_.js +0 -2063
  246. package/web/assets/UnlockPage-BgVF3XMO.js +0 -1
  247. package/web/assets/VariablesTable-D4_sssPN.js +0 -1
  248. package/web/assets/VaultMigrationPage-BRZJnfVg.js +0 -1
  249. package/web/assets/VersionBadge-Df7iJWvF.js +0 -1
  250. package/web/assets/WikiPage-UkaH8BqR.js +0 -1
  251. package/web/assets/WikiView-BQqP4b9A.js +0 -1
  252. package/web/assets/add-scalar-classes-B9WxxjAm.js +0 -387
  253. package/web/assets/card-nJdNoKgd.js +0 -32
  254. package/web/assets/client-DYNnTrNm.js +0 -24
  255. package/web/assets/cloud-chat.store-_qILavCL.js +0 -1
  256. package/web/assets/cloud-session-Ml5g5J1-.js +0 -1
  257. package/web/assets/column-Bc4-F_tF.js +0 -907
  258. package/web/assets/interface-content-folder.svg-bb6GV0G0.js +0 -1
  259. package/web/assets/modal-D2-cZ2mf.js +0 -5
  260. package/web/assets/modal-DmgVDXcS.js +0 -1
  261. package/web/assets/multiselect-CDBfo7-0.js +0 -251
  262. package/web/assets/process.store-BsCJ-VuI.js +0 -1
  263. package/web/assets/router-KIdzwvCZ.js +0 -1
  264. package/web/assets/settings-scope-D8l1sq9K.js +0 -1
  265. package/web/assets/settings.store-VVqF8QkO.js +0 -1
  266. package/web/assets/src-CJFQ3yWc.js +0 -1
  267. package/web/assets/src-Cgn_TWXn.js +0 -572
  268. package/web/assets/tabpanel-B8oBjoSG.js +0 -150
  269. package/web/assets/trpc-B1bTQz_t.js +0 -1
  270. package/web/assets/useAiChatDrawer-BpR9XWop.js +0 -1
  271. package/web/assets/useProjectCatalog-mk8A95KQ.js +0 -1
  272. package/web/assets/useProjectCloudOrg-CKgvcUWI.js +0 -1
  273. /package/{agent-manager-SNVPZNLC.js.map → agent-manager-OWHTBG46.js.map} +0 -0
  274. /package/{chat-OXRRBDB3.js.map → chat-JZ4UQDWV.js.map} +0 -0
  275. /package/{companion-JQGNL4U7.js.map → companion-6J6NK7H7.js.map} +0 -0
  276. /package/{settings-manager-YHQ5YHUH.js.map → instances-command-KZ5UGXOR.js.map} +0 -0
@@ -1,397 +1,145 @@
1
- // ../server/src/config/env.ts
2
- import { z } from "zod";
3
- import { resolve as resolvePath } from "path";
4
- var serverPort = z.coerce.number().int().min(1).max(65535).default(4e3).parse(process.env.RUNEYA_HTTP_PORT);
5
- var defaultAgentPort = process.env.RUNEYA_AGENT_PORT ? z.coerce.number().int().min(1).max(65535).parse(process.env.RUNEYA_AGENT_PORT) : serverPort + 1;
6
- var EnvSchema = z.object({
7
- RUNEYA_HTTP_PORT: z.coerce.number().int().min(1).max(65535).default(4e3),
8
- RUNEYA_HOST: z.string().default("127.0.0.1"),
9
- RUNEYA_AGENT_PORT: z.coerce.number().int().min(1).max(65535).default(defaultAgentPort),
10
- RUNEYA_AGENT_HOST: z.string().default("127.0.0.1"),
11
- RUNEYA_AGENT_BINARY_PATH: z.string().nullable().default(null),
12
- RUNEYA_DATA_DIR: z.preprocess((v) => typeof v === "string" && v.length > 0 ? v : void 0, z.string().default(".runeya")),
13
- // Home holding the cloud vaults (`<home>/.runeya/orgs/...`). Defaults to the
14
- // user's home directory; overridden by tests so they never write to the real
15
- // one, and usable to relocate the vaults on a shared machine.
16
- RUNEYA_HOME: z.preprocess((v) => typeof v === "string" && v.length > 0 ? v : void 0, z.string().nullable().default(null)),
17
- RUNEYA_CLOUD_URL: z.string().url().nullable().default(null),
18
- // Cloud front-end (landing) URL — used by the web app for the registration /
19
- // onboarding flow. Configured on the server at launch; the web fetches it.
20
- RUNEYA_CLOUD_APP_URL: z.string().url().nullable().default(null),
21
- RUNEYA_MODE: z.enum(["local-simple", "cloud"]).default("local-simple"),
22
- RUNEYA_CORS_ORIGIN: z.string().nullable().default(null),
23
- RUNEYA_LAN_PROXY: z.preprocess((v) => v === "true" || v === "1", z.boolean()).default(false),
24
- // Set by the CLI when it was started from a desktop launcher rather than a
25
- // terminal. The web app surfaces it so the user knows which Runeya they are
26
- // looking at when several are running.
27
- RUNEYA_FROM_DESKTOP: z.preprocess((v) => v === "true" || v === "1", z.boolean()).default(false),
28
- // Label shown for this machine in the cloud's "linked machines" screen.
29
- // Defaults to the hostname (see `getDeviceName`); set it explicitly when a
30
- // single host runs several instances and you want to tell them apart.
31
- RUNEYA_DEVICE_NAME: z.preprocess(
32
- (v) => typeof v === "string" && v.trim().length > 0 ? v.trim() : void 0,
33
- z.string().max(64).nullable().default(null)
34
- )
35
- }).transform((data) => ({
36
- ...data,
37
- // Short aliases used throughout the server code
38
- PORT: data.RUNEYA_HTTP_PORT,
39
- HOST: data.RUNEYA_HOST,
40
- MODE: data.RUNEYA_MODE,
41
- /**
42
- * Absolute from the start, resolved once against the launch directory.
43
- *
44
- * It defaults to a relative `.runeya`, and every caller used to re-resolve it
45
- * against whatever the process's cwd happened to be. A vault that moves when
46
- * the process changes directory is a vault that can be silently written to the
47
- * wrong place — so the answer is fixed here, at boot, and never recomputed.
48
- */
49
- DATA_DIR: resolvePath(data.RUNEYA_DATA_DIR),
50
- HOME_DIR: data.RUNEYA_HOME,
51
- CLOUD_URL: data.RUNEYA_CLOUD_URL,
52
- CLOUD_APP_URL: data.RUNEYA_CLOUD_APP_URL,
53
- CORS_ORIGIN: data.RUNEYA_CORS_ORIGIN,
54
- AGENT_BINARY_PATH: data.RUNEYA_AGENT_BINARY_PATH,
55
- DEVICE_NAME: data.RUNEYA_DEVICE_NAME,
56
- FROM_DESKTOP: data.RUNEYA_FROM_DESKTOP
57
- }));
58
- var env = EnvSchema.parse(process.env);
59
-
60
- // ../server/src/services/vault-resolver.ts
61
- import { join, sep } from "path";
62
- import { homedir } from "os";
63
- import { readdir, mkdir, access, readFile, writeFile, unlink } from "fs/promises";
64
- import { existsSync } from "fs";
65
- var SAFE_ID = /^[A-Za-z0-9._-]{1,128}$/;
66
- function assertSafeId(kind, id) {
67
- if (!SAFE_ID.test(id) || id === "." || id === "..") {
68
- throw new Error(`Invalid ${kind} id for a vault path: ${JSON.stringify(id)}`);
69
- }
70
- }
71
- function machineRoot() {
72
- const override = process.env["RUNEYA_HOME"];
73
- return join(override && override.length > 0 ? override : homedir(), ".runeya");
74
- }
75
- function localVaultRoot() {
76
- return env.DATA_DIR;
77
- }
78
- function orgVaultRoot(orgId) {
79
- assertSafeId("organization", orgId);
80
- return join(machineRoot(), "orgs", orgId);
81
- }
82
- function projectVaultRoot(orgId, projectId) {
83
- assertSafeId("project", projectId);
84
- return join(orgVaultRoot(orgId), "projects", projectId);
85
- }
86
- function orgIdOfRoot(root) {
87
- const marker = join(machineRoot(), "orgs") + sep;
88
- if (!root.startsWith(marker)) return null;
89
- const [orgId] = root.slice(marker.length).split(sep);
90
- return orgId && SAFE_ID.test(orgId) ? orgId : null;
91
- }
92
- function vaultIdOfRoot(root) {
93
- return orgIdOfRoot(root) ?? void 0;
94
- }
95
- function vaultFor(target) {
96
- if (!target.orgId) return { root: localVaultRoot() };
97
- return { root: projectVaultRoot(target.orgId, target.id) };
98
- }
99
- var ORG_CLOUD_FILE = "cloud.json";
100
- async function stampOrgCloud(orgId, cloudUrl, name) {
101
- const root = orgVaultRoot(orgId);
102
- await mkdir(root, { recursive: true });
103
- const known = name ?? (await readOrgNames())[orgId];
104
- const stamp = known ? { cloudUrl, name: known } : { cloudUrl };
105
- await writeFile(join(root, ORG_CLOUD_FILE), JSON.stringify(stamp, null, 2), "utf-8");
106
- }
107
- async function rememberOrgName(orgId, name) {
108
- const root = orgVaultRoot(orgId);
109
- if (!existsSync(root)) return;
110
- const file = join(root, ORG_CLOUD_FILE);
111
- let stamp = {};
112
- try {
113
- stamp = JSON.parse(await readFile(file, "utf-8"));
114
- } catch {
115
- }
116
- if (stamp["name"] === name) return;
117
- await writeFile(file, JSON.stringify({ ...stamp, name }, null, 2), "utf-8");
118
- }
119
- async function readOrgNames() {
120
- const out = {};
121
- for (const orgId of await listOrgVaults()) {
122
- try {
123
- const raw = await readFile(join(orgVaultRoot(orgId), ORG_CLOUD_FILE), "utf-8");
124
- const name = JSON.parse(raw).name;
125
- if (typeof name === "string" && name) out[orgId] = name;
126
- } catch {
127
- }
128
- }
129
- return out;
130
- }
131
- var ORG_LOGO_FILE = "logo.json";
132
- var LOGO_TYPES = /* @__PURE__ */ new Set(["image/png", "image/jpeg", "image/webp", "image/gif"]);
133
- async function rememberOrgLogo(orgId, contentType, base64) {
134
- if (!LOGO_TYPES.has(contentType)) return;
135
- const root = orgVaultRoot(orgId);
136
- const stored = { contentType, base64, fetchedAt: (/* @__PURE__ */ new Date()).toISOString() };
137
- await mkdir(root, { recursive: true });
138
- await writeFile(join(root, ORG_LOGO_FILE), JSON.stringify(stored), "utf-8");
139
- }
140
- async function forgetOrgLogo(orgId) {
141
- try {
142
- await unlink(join(orgVaultRoot(orgId), ORG_LOGO_FILE));
143
- } catch {
144
- }
145
- }
146
- async function readOrgLogos() {
147
- const out = {};
148
- for (const orgId of await listOrgVaults()) {
149
- try {
150
- const raw = await readFile(join(orgVaultRoot(orgId), ORG_LOGO_FILE), "utf-8");
151
- const { contentType, base64 } = JSON.parse(raw);
152
- if (typeof contentType !== "string" || !LOGO_TYPES.has(contentType)) continue;
153
- if (typeof base64 !== "string" || !base64) continue;
154
- out[orgId] = `data:${contentType};base64,${base64}`;
155
- } catch {
156
- }
157
- }
158
- return out;
159
- }
160
- async function readOrgClouds() {
161
- const orgsDir = join(machineRoot(), "orgs");
162
- const out = {};
163
- let orgIds;
164
- try {
165
- orgIds = (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
166
- } catch {
167
- return out;
168
- }
169
- for (const orgId of orgIds) {
170
- try {
171
- const raw = await readFile(join(orgsDir, orgId, ORG_CLOUD_FILE), "utf-8");
172
- const url = JSON.parse(raw).cloudUrl;
173
- if (typeof url === "string" && url) out[orgId] = url;
174
- } catch {
175
- }
176
- }
177
- return out;
178
- }
179
- async function listOrgVaults() {
180
- const orgsDir = join(machineRoot(), "orgs");
181
- try {
182
- return (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
183
- } catch {
184
- return [];
185
- }
186
- }
187
- async function listCloudVaults() {
188
- const orgsDir = join(machineRoot(), "orgs");
189
- const found = [];
190
- let orgIds;
191
- try {
192
- orgIds = (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
193
- } catch {
194
- return found;
195
- }
196
- for (const orgId of orgIds) {
197
- const projectsDir = join(orgsDir, orgId, "projects");
198
- try {
199
- for (const entry of await readdir(projectsDir, { withFileTypes: true })) {
200
- if (!entry.isDirectory() || !SAFE_ID.test(entry.name)) continue;
201
- const root = join(projectsDir, entry.name);
202
- if (!await access(join(root, "project.json")).then(() => true, () => false)) continue;
203
- found.push({ orgId, projectId: entry.name, root });
204
- }
205
- } catch {
206
- }
207
- }
208
- return found;
209
- }
210
- async function allVaultRoots() {
211
- const cloud = await listCloudVaults();
212
- return [localVaultRoot(), ...cloud.map((v) => v.root)];
213
- }
214
- function machineFilePath(filename) {
215
- return join(machineRoot(), filename);
216
- }
217
- async function keyedFilePath(filename) {
218
- return join(await keyRoot(), filename);
219
- }
220
- function legacyMachineFilePath(filename) {
221
- return join(localVaultRoot(), filename);
222
- }
223
- async function ensureLocalVault() {
224
- const root = localVaultRoot();
225
- await mkdir(root, { recursive: true });
226
- return root;
227
- }
228
- var KEY_FILES = [".encryption.key.enc", ".runeya-verify"];
229
- var keyRootPromise = null;
230
- async function holdsKey(root) {
231
- for (const filename of KEY_FILES) {
232
- try {
233
- await access(join(root, filename));
234
- return true;
235
- } catch {
236
- }
237
- }
238
- return false;
239
- }
240
- function keyRoot() {
241
- keyRootPromise ??= (async () => {
242
- if (await holdsKey(machineRoot())) return machineRoot();
243
- return await holdsKey(localVaultRoot()) ? localVaultRoot() : machineRoot();
244
- })();
245
- return keyRootPromise;
246
- }
247
- async function legacyVaultRoot() {
248
- const local = localVaultRoot();
249
- if (await keyRoot() === local) return null;
250
- return await holdsKey(local) ? local : null;
251
- }
252
-
253
1
  // ../../packages/shared/src/schemas/settings.schema.ts
254
- import { z as z3 } from "zod";
2
+ import { z as z2 } from "zod";
255
3
 
256
4
  // ../../packages/shared/src/schemas/scenario.schema.ts
257
- import { z as z2 } from "zod";
258
- var PositionSchema = z2.object({
259
- x: z2.number(),
260
- y: z2.number()
261
- });
262
- var ScenarioGroupSchema = z2.object({
263
- id: z2.string().min(1).max(128),
264
- name: z2.string().min(1).max(200),
265
- description: z2.string().max(1e3).optional(),
266
- color: z2.string().max(32).optional(),
5
+ import { z } from "zod";
6
+ var PositionSchema = z.object({
7
+ x: z.number(),
8
+ y: z.number()
9
+ });
10
+ var ScenarioGroupSchema = z.object({
11
+ id: z.string().min(1).max(128),
12
+ name: z.string().min(1).max(200),
13
+ description: z.string().max(1e3).optional(),
14
+ color: z.string().max(32).optional(),
267
15
  position: PositionSchema.default({ x: 0, y: 0 }),
268
- width: z2.number().default(300),
269
- height: z2.number().default(200)
270
- });
271
- var ScenarioPresetRoleSchema = z2.object({
272
- id: z2.string().min(1).max(64),
273
- name: z2.string().min(1).max(200),
274
- systemPrompt: z2.string().max(1e4).default(""),
275
- prompt: z2.string().max(1e4).default("")
276
- });
277
- var ScenarioPresetInitialDataSchema = z2.object({
278
- leaderId: z2.string().min(1).max(128),
279
- groups: z2.array(z2.object({
280
- id: z2.string().min(1).max(128),
281
- name: z2.string().min(1).max(200),
282
- description: z2.string().max(1e3).optional(),
283
- color: z2.string().max(32).optional(),
284
- position: z2.object({ x: z2.number(), y: z2.number() }).default({ x: 0, y: 0 }),
285
- width: z2.number().default(300),
286
- height: z2.number().default(200)
16
+ width: z.number().default(300),
17
+ height: z.number().default(200)
18
+ });
19
+ var ScenarioPresetRoleSchema = z.object({
20
+ id: z.string().min(1).max(64),
21
+ name: z.string().min(1).max(200),
22
+ systemPrompt: z.string().max(1e4).default(""),
23
+ prompt: z.string().max(1e4).default("")
24
+ });
25
+ var ScenarioPresetInitialDataSchema = z.object({
26
+ leaderId: z.string().min(1).max(128),
27
+ groups: z.array(z.object({
28
+ id: z.string().min(1).max(128),
29
+ name: z.string().min(1).max(200),
30
+ description: z.string().max(1e3).optional(),
31
+ color: z.string().max(32).optional(),
32
+ position: z.object({ x: z.number(), y: z.number() }).default({ x: 0, y: 0 }),
33
+ width: z.number().default(300),
34
+ height: z.number().default(200)
287
35
  })).max(100).default([]),
288
- nodes: z2.array(z2.object({
289
- id: z2.string().min(1).max(128),
290
- type: z2.enum(["ai", "ask"]).default("ai"),
291
- parentIds: z2.array(z2.string().max(128)).default([]),
292
- groupId: z2.string().max(128).nullable().default(null),
293
- label: z2.string().max(240).default(""),
294
- role: z2.string().max(64).default("other"),
295
- prompt: z2.string().max(5e4).default(""),
296
- question: z2.string().max(2e3).default(""),
297
- autoGenerated: z2.boolean().default(true),
298
- canAddNode: z2.boolean().default(false),
299
- aiCli: z2.enum(["claude-code", "codex"]).default("claude-code"),
300
- model: z2.string().max(128).default("sonnet"),
301
- position: z2.object({ x: z2.number(), y: z2.number() }).default({ x: 0, y: 0 })
36
+ nodes: z.array(z.object({
37
+ id: z.string().min(1).max(128),
38
+ type: z.enum(["ai", "ask"]).default("ai"),
39
+ parentIds: z.array(z.string().max(128)).default([]),
40
+ groupId: z.string().max(128).nullable().default(null),
41
+ label: z.string().max(240).default(""),
42
+ role: z.string().max(64).default("other"),
43
+ prompt: z.string().max(5e4).default(""),
44
+ question: z.string().max(2e3).default(""),
45
+ autoGenerated: z.boolean().default(true),
46
+ canAddNode: z.boolean().default(false),
47
+ aiCli: z.enum(["claude-code", "codex"]).default("claude-code"),
48
+ model: z.string().max(128).default("sonnet"),
49
+ position: z.object({ x: z.number(), y: z.number() }).default({ x: 0, y: 0 })
302
50
  })).min(1).max(500)
303
51
  });
304
- var LocalizedStringSchema = z2.record(z2.string(), z2.string().max(100));
305
- var ScenarioPresetLabelsSchema = z2.object({
52
+ var LocalizedStringSchema = z.record(z.string(), z.string().max(100));
53
+ var ScenarioPresetLabelsSchema = z.object({
306
54
  group: LocalizedStringSchema.optional(),
307
55
  node: LocalizedStringSchema.optional(),
308
56
  role: LocalizedStringSchema.optional(),
309
57
  leader: LocalizedStringSchema.optional()
310
58
  });
311
- var ScenarioPresetSchema = z2.object({
312
- id: z2.string().min(1).max(128),
313
- name: z2.string().min(1).max(200),
314
- icon: z2.string().max(64).optional(),
315
- defaultTraversalMode: z2.enum(["hierarchical", "topological"]).optional(),
316
- canChangeTraversalMode: z2.boolean().default(true),
317
- roles: z2.array(ScenarioPresetRoleSchema).min(1).max(100),
59
+ var ScenarioPresetSchema = z.object({
60
+ id: z.string().min(1).max(128),
61
+ name: z.string().min(1).max(200),
62
+ icon: z.string().max(64).optional(),
63
+ defaultTraversalMode: z.enum(["hierarchical", "topological"]).optional(),
64
+ canChangeTraversalMode: z.boolean().default(true),
65
+ roles: z.array(ScenarioPresetRoleSchema).min(1).max(100),
318
66
  initialData: ScenarioPresetInitialDataSchema.optional(),
319
67
  labels: ScenarioPresetLabelsSchema.optional()
320
68
  });
321
- var ScenarioNodeSchema = z2.object({
322
- id: z2.string().min(1).max(128),
323
- type: z2.enum(["ai", "ask"]).default("ai"),
324
- parentIds: z2.array(z2.string().max(128)).default([]),
325
- groupId: z2.string().max(128).nullable().default(null),
326
- label: z2.string().max(240).default(""),
327
- role: z2.string().max(64).default("other"),
328
- prompt: z2.string().max(5e4).default(""),
329
- question: z2.string().max(2e3).default(""),
330
- autoGenerated: z2.boolean().default(true),
331
- canAddNode: z2.boolean().default(false),
332
- aiCli: z2.enum(["claude-code", "codex"]).default("claude-code"),
333
- model: z2.string().max(128).default("sonnet"),
69
+ var ScenarioNodeSchema = z.object({
70
+ id: z.string().min(1).max(128),
71
+ type: z.enum(["ai", "ask"]).default("ai"),
72
+ parentIds: z.array(z.string().max(128)).default([]),
73
+ groupId: z.string().max(128).nullable().default(null),
74
+ label: z.string().max(240).default(""),
75
+ role: z.string().max(64).default("other"),
76
+ prompt: z.string().max(5e4).default(""),
77
+ question: z.string().max(2e3).default(""),
78
+ autoGenerated: z.boolean().default(true),
79
+ canAddNode: z.boolean().default(false),
80
+ aiCli: z.enum(["claude-code", "codex"]).default("claude-code"),
81
+ model: z.string().max(128).default("sonnet"),
334
82
  position: PositionSchema.default({ x: 0, y: 0 }),
335
- injectParentOutputs: z2.boolean().default(false),
336
- injectedAncestorIds: z2.array(z2.string().max(128)).default([])
337
- });
338
- var ScenarioSchema = z2.object({
339
- id: z2.string().min(1).max(128),
340
- name: z2.string().min(1).max(200),
341
- icon: z2.string().max(64).optional(),
342
- description: z2.string().max(2e3).optional(),
343
- leaderId: z2.string().min(1).max(128),
344
- groups: z2.array(ScenarioGroupSchema).max(100).default([]),
345
- nodes: z2.array(ScenarioNodeSchema).min(1).max(500),
346
- traversalMode: z2.enum(["hierarchical", "topological"]).default("hierarchical"),
347
- presetId: z2.string().max(128).optional(),
348
- isPublished: z2.boolean().default(false),
349
- createdAt: z2.number(),
350
- updatedAt: z2.number()
83
+ injectParentOutputs: z.boolean().default(false),
84
+ injectedAncestorIds: z.array(z.string().max(128)).default([])
85
+ });
86
+ var ScenarioSchema = z.object({
87
+ id: z.string().min(1).max(128),
88
+ name: z.string().min(1).max(200),
89
+ icon: z.string().max(64).optional(),
90
+ description: z.string().max(2e3).optional(),
91
+ leaderId: z.string().min(1).max(128),
92
+ groups: z.array(ScenarioGroupSchema).max(100).default([]),
93
+ nodes: z.array(ScenarioNodeSchema).min(1).max(500),
94
+ traversalMode: z.enum(["hierarchical", "topological"]).default("hierarchical"),
95
+ presetId: z.string().max(128).optional(),
96
+ isPublished: z.boolean().default(false),
97
+ createdAt: z.number(),
98
+ updatedAt: z.number()
351
99
  });
352
100
 
353
101
  // ../../packages/shared/src/schemas/settings.schema.ts
354
102
  var AI_PROVIDERS = ["anthropic", "openai", "mistral", "groq", "ollama"];
355
- var AIProviderSchema = z3.object({
356
- id: z3.string().min(1).max(128),
357
- name: z3.string().min(1).max(200),
358
- provider: z3.enum(AI_PROVIDERS),
359
- encryptedApiKey: z3.string().max(2e3).default(""),
360
- model: z3.string().max(200).optional(),
361
- active: z3.boolean().default(false),
362
- createdAt: z3.coerce.date(),
363
- updatedAt: z3.coerce.date()
364
- });
365
- var JSLogParserSchema = z3.object({
366
- id: z3.string().min(1).max(128),
367
- name: z3.string().min(1).max(200),
368
- description: z3.string().max(2e3).optional(),
369
- code: z3.string().min(1).max(5e4).refine(
103
+ var AIProviderSchema = z2.object({
104
+ id: z2.string().min(1).max(128),
105
+ name: z2.string().min(1).max(200),
106
+ provider: z2.enum(AI_PROVIDERS),
107
+ encryptedApiKey: z2.string().max(2e3).default(""),
108
+ model: z2.string().max(200).optional(),
109
+ active: z2.boolean().default(false),
110
+ createdAt: z2.coerce.date(),
111
+ updatedAt: z2.coerce.date()
112
+ });
113
+ var JSLogParserSchema = z2.object({
114
+ id: z2.string().min(1).max(128),
115
+ name: z2.string().min(1).max(200),
116
+ description: z2.string().max(2e3).optional(),
117
+ code: z2.string().min(1).max(5e4).refine(
370
118
  (s) => !s.includes("require(") && !s.includes("import ") && !s.includes("eval("),
371
119
  { message: "Code must not contain require, import, or eval patterns" }
372
120
  ),
373
- enabled: z3.boolean().default(true),
374
- builtin: z3.boolean().optional(),
375
- createdAt: z3.coerce.date(),
376
- updatedAt: z3.coerce.date()
377
- });
378
- var NotificationPreferencesSchema = z3.object({
379
- scenario_waiting_input: z3.boolean().default(true),
380
- ai_conversation_complete: z3.boolean().default(true),
381
- ai_conversation_error: z3.boolean().default(true),
382
- service_error_log: z3.boolean().default(true),
383
- service_status_changed: z3.boolean().default(true),
384
- service_health_changed: z3.boolean().default(true),
121
+ enabled: z2.boolean().default(true),
122
+ builtin: z2.boolean().optional(),
123
+ createdAt: z2.coerce.date(),
124
+ updatedAt: z2.coerce.date()
125
+ });
126
+ var NotificationPreferencesSchema = z2.object({
127
+ scenario_waiting_input: z2.boolean().default(true),
128
+ ai_conversation_complete: z2.boolean().default(true),
129
+ ai_conversation_error: z2.boolean().default(true),
130
+ service_error_log: z2.boolean().default(true),
131
+ service_status_changed: z2.boolean().default(true),
132
+ service_health_changed: z2.boolean().default(true),
385
133
  /** Service IDs excluded from error-log notifications */
386
- service_error_log_excluded: z3.array(z3.string().max(100)).max(500).default([]),
134
+ service_error_log_excluded: z2.array(z2.string().max(100)).max(500).default([]),
387
135
  /** Service IDs excluded from status-change notifications */
388
- service_status_changed_excluded: z3.array(z3.string().max(100)).max(500).default([]),
136
+ service_status_changed_excluded: z2.array(z2.string().max(100)).max(500).default([]),
389
137
  /** Service IDs excluded from health-change notifications */
390
- service_health_changed_excluded: z3.array(z3.string().max(100)).max(500).default([])
138
+ service_health_changed_excluded: z2.array(z2.string().max(100)).max(500).default([])
391
139
  });
392
- var CompanionSettingsSchema = z3.object({
140
+ var CompanionSettingsSchema = z2.object({
393
141
  /** Activer le compagnon d'office sur les conversations créées ensuite. */
394
- enabledByDefault: z3.boolean().default(false),
142
+ enabledByDefault: z2.boolean().default(false),
395
143
  /**
396
144
  * Spécificités ajoutées aux consignes Runeya.
397
145
  *
@@ -402,15 +150,15 @@ var CompanionSettingsSchema = z3.object({
402
150
  * Rejeté au-delà de la borne plutôt que tronqué (§1) : un prompt coupé en
403
151
  * plein milieu produirait des relectures incohérentes sans rien signaler.
404
152
  */
405
- prompt: z3.string().max(2e4).optional()
153
+ prompt: z2.string().max(2e4).optional()
406
154
  });
407
- var SettingsSchema = z3.object({
408
- mode: z3.enum(["local-simple", "cloud"]),
409
- cloudUrl: z3.string().url().max(2048).nullable().optional(),
410
- logParsers: z3.array(JSLogParserSchema).max(100).default([]),
411
- scenarios: z3.array(ScenarioSchema).max(100).default([]),
155
+ var SettingsSchema = z2.object({
156
+ mode: z2.enum(["local-simple", "cloud"]),
157
+ cloudUrl: z2.string().url().max(2048).nullable().optional(),
158
+ logParsers: z2.array(JSLogParserSchema).max(100).default([]),
159
+ scenarios: z2.array(ScenarioSchema).max(100).default([]),
412
160
  /** Absolute path to the folder where the global wiki/docs markdown files live. Optional. */
413
- globalDocsPath: z3.string().max(4096).optional(),
161
+ globalDocsPath: z2.string().max(4096).optional(),
414
162
  /**
415
163
  * Optionnel plutôt que défauté : un réglage absent est un réglage jamais
416
164
  * touché, et le rendre obligatoire dans le type forcerait chaque appelant qui
@@ -418,21 +166,21 @@ var SettingsSchema = z3.object({
418
166
  */
419
167
  companion: CompanionSettingsSchema.optional()
420
168
  });
421
- var TraefikConfigSchema = z3.object({
422
- enabled: z3.boolean().default(false),
423
- acmeEmail: z3.string().email().max(256).optional(),
424
- wildcardDomain: z3.string().max(253).optional(),
425
- httpPort: z3.number().int().min(1).max(65535).default(80),
426
- httpsPort: z3.number().int().min(1).max(65535).default(443),
427
- dnsProvider: z3.string().max(64).optional(),
428
- dnsCredentials: z3.record(z3.string().max(64), z3.string().max(2048)).default({}),
429
- acmeStaging: z3.boolean().default(false),
430
- encryptedCert: z3.string().max(65536).optional(),
431
- encryptedCertKey: z3.string().max(65536).optional()
432
- });
433
- var SettingsPrivateSchema = z3.object({
434
- aiProviders: z3.array(AIProviderSchema).max(50).default([]),
435
- scenarios: z3.array(ScenarioSchema).max(100).default([]),
169
+ var TraefikConfigSchema = z2.object({
170
+ enabled: z2.boolean().default(false),
171
+ acmeEmail: z2.string().email().max(256).optional(),
172
+ wildcardDomain: z2.string().max(253).optional(),
173
+ httpPort: z2.number().int().min(1).max(65535).default(80),
174
+ httpsPort: z2.number().int().min(1).max(65535).default(443),
175
+ dnsProvider: z2.string().max(64).optional(),
176
+ dnsCredentials: z2.record(z2.string().max(64), z2.string().max(2048)).default({}),
177
+ acmeStaging: z2.boolean().default(false),
178
+ encryptedCert: z2.string().max(65536).optional(),
179
+ encryptedCertKey: z2.string().max(65536).optional()
180
+ });
181
+ var SettingsPrivateSchema = z2.object({
182
+ aiProviders: z2.array(AIProviderSchema).max(50).default([]),
183
+ scenarios: z2.array(ScenarioSchema).max(100).default([]),
436
184
  notifications: NotificationPreferencesSchema.default(() => ({
437
185
  scenario_waiting_input: true,
438
186
  ai_conversation_complete: true,
@@ -446,9 +194,9 @@ var SettingsPrivateSchema = z3.object({
446
194
  })),
447
195
  traefikConfig: TraefikConfigSchema.optional()
448
196
  });
449
- var SchemaVersionSchema = z3.object({
450
- version: z3.number().int().positive(),
451
- migratedAt: z3.coerce.date()
197
+ var SchemaVersionSchema = z2.object({
198
+ version: z2.number().int().positive(),
199
+ migratedAt: z2.coerce.date()
452
200
  });
453
201
 
454
202
  // ../../packages/shared/src/utils/companion-markers.ts
@@ -464,6 +212,24 @@ function extractCompanionRelay(raw) {
464
212
  return inner || null;
465
213
  }
466
214
 
215
+ // ../../packages/shared/src/utils/launcher-identity.ts
216
+ function slugifyLauncherName(name) {
217
+ const slug = name.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
218
+ return slug || "runeya";
219
+ }
220
+ function launcherIdFromName(name) {
221
+ const slug = slugifyLauncherName(name);
222
+ return slug.startsWith("runeya") ? slug : `runeya-${slug}`;
223
+ }
224
+ function baseName(path) {
225
+ const parts = path.split(/[\\/]+/).filter(Boolean);
226
+ return parts[parts.length - 1] ?? path;
227
+ }
228
+ function deriveLauncherIdentity(explicitName, workingDir) {
229
+ const name = explicitName ?? (workingDir ? `Runeya \u2014 ${baseName(workingDir)}` : "Runeya");
230
+ return { name, id: launcherIdFromName(name) };
231
+ }
232
+
467
233
  // ../../packages/shared/src/constants/intervals.ts
468
234
  var AGENT_HEALTH_POLL_INTERVAL = 15e3;
469
235
 
@@ -477,100 +243,100 @@ var WS_RECONNECT_MIN = 1e3;
477
243
  var WS_RECONNECT_MAX = 15e3;
478
244
 
479
245
  // ../../packages/shared/src/schemas/user.schema.ts
480
- import { z as z4 } from "zod";
481
- var UserSchema = z4.object({
482
- id: z4.string().max(128),
483
- email: z4.string().email().max(320),
484
- name: z4.string().min(1).max(500),
485
- avatar: z4.string().url().max(2048).nullable().optional()
246
+ import { z as z3 } from "zod";
247
+ var UserSchema = z3.object({
248
+ id: z3.string().max(128),
249
+ email: z3.string().email().max(320),
250
+ name: z3.string().min(1).max(500),
251
+ avatar: z3.string().url().max(2048).nullable().optional()
486
252
  });
487
253
 
488
254
  // ../../packages/shared/src/schemas/org.schema.ts
489
- import { z as z5 } from "zod";
490
- var OrgSchema = z5.object({
491
- id: z5.string().max(128),
492
- name: z5.string().min(1).max(100),
493
- slug: z5.string().min(1).max(100).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/),
494
- ownerId: z5.string().max(128)
255
+ import { z as z4 } from "zod";
256
+ var OrgSchema = z4.object({
257
+ id: z4.string().max(128),
258
+ name: z4.string().min(1).max(100),
259
+ slug: z4.string().min(1).max(100).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/),
260
+ ownerId: z4.string().max(128)
495
261
  });
496
- var OrgMemberSchema = z5.object({
497
- id: z5.string().max(128),
498
- orgId: z5.string().max(128),
499
- userId: z5.string().max(128),
500
- globalRole: z5.enum(["owner", "admin", "member"]),
501
- invitedAt: z5.coerce.date(),
502
- joinedAt: z5.coerce.date().nullable().optional()
262
+ var OrgMemberSchema = z4.object({
263
+ id: z4.string().max(128),
264
+ orgId: z4.string().max(128),
265
+ userId: z4.string().max(128),
266
+ globalRole: z4.enum(["owner", "admin", "member"]),
267
+ invitedAt: z4.coerce.date(),
268
+ joinedAt: z4.coerce.date().nullable().optional()
503
269
  });
504
270
 
505
271
  // ../../packages/shared/src/schemas/project.schema.ts
506
- import { z as z6 } from "zod";
507
- var ProjectSchema = z6.object({
508
- id: z6.string().max(128),
509
- orgId: z6.string().max(128).nullable().optional(),
510
- name: z6.string().min(1).max(200),
511
- description: z6.string().max(1e4).optional().default(""),
512
- serviceIds: z6.array(z6.string().max(128)).max(1e4).default([]),
272
+ import { z as z5 } from "zod";
273
+ var ProjectSchema = z5.object({
274
+ id: z5.string().max(128),
275
+ orgId: z5.string().max(128).nullable().optional(),
276
+ name: z5.string().min(1).max(200),
277
+ description: z5.string().max(1e4).optional().default(""),
278
+ serviceIds: z5.array(z5.string().max(128)).max(1e4).default([]),
513
279
  // Environment support
514
280
  // NOTE: activeEnvironmentId is runtime-only (not persisted to JSON)
515
281
  // It's initialized to 'local' by default at load time
516
- activeEnvironmentId: z6.string().max(128).optional(),
517
- environmentIds: z6.array(z6.string().max(128)).max(100).default([]),
282
+ activeEnvironmentId: z5.string().max(128).optional(),
283
+ environmentIds: z5.array(z5.string().max(128)).max(100).default([]),
518
284
  // Ordre d'affichage des groupes de services dans la sidebar (noms de groupes).
519
285
  // Les groupes absents de cette liste sont affichés après, par ordre alphabétique.
520
- groupOrder: z6.array(z6.string().max(200)).max(100).default([])
286
+ groupOrder: z5.array(z5.string().max(200)).max(100).default([])
521
287
  });
522
288
  var CreateProjectSchema = ProjectSchema.omit({ id: true }).partial().required({ name: true });
523
289
  var UpdateProjectSchema = ProjectSchema.partial().required({ id: true });
524
290
 
525
291
  // ../../packages/shared/src/schemas/service.schema.ts
526
- import { z as z8 } from "zod";
292
+ import { z as z7 } from "zod";
527
293
 
528
294
  // ../../packages/shared/src/schemas/log-source.schema.ts
529
- import { z as z7 } from "zod";
530
- var safePath = z7.string().min(1).max(4096).refine(
295
+ import { z as z6 } from "zod";
296
+ var safePath = z6.string().min(1).max(4096).refine(
531
297
  (p) => !p.includes("\0"),
532
298
  { message: "path must not contain null bytes" }
533
299
  ).refine(
534
300
  (p) => !/(^|[/\\])\.\.([/\\]|$)/.test(p),
535
301
  { message: "path must not contain path-traversal sequences (..)" }
536
302
  );
537
- var ConsoleLogSourceSchema = z7.object({
538
- type: z7.literal("console")
303
+ var ConsoleLogSourceSchema = z6.object({
304
+ type: z6.literal("console")
539
305
  });
540
- var FileLogSourceSchema = z7.object({
541
- type: z7.literal("file"),
306
+ var FileLogSourceSchema = z6.object({
307
+ type: z6.literal("file"),
542
308
  path: safePath,
543
- encoding: z7.string().max(32).default("utf-8"),
544
- startFromEnd: z7.boolean().default(true),
545
- createIfNotExists: z7.boolean().default(false)
309
+ encoding: z6.string().max(32).default("utf-8"),
310
+ startFromEnd: z6.boolean().default(true),
311
+ createIfNotExists: z6.boolean().default(false)
546
312
  });
547
- var MongoLogSourceSchema = z7.object({
548
- type: z7.literal("mongo"),
313
+ var MongoLogSourceSchema = z6.object({
314
+ type: z6.literal("mongo"),
549
315
  /** @sensitive — stored encrypted (AES-256-GCM) on disk */
550
- connectionString: z7.string().min(1).max(2048),
551
- database: z7.string().min(1).max(256),
552
- collection: z7.string().min(1).max(256),
553
- filter: z7.record(z7.string(), z7.unknown()).optional(),
554
- timestampField: z7.string().max(128).default("timestamp"),
555
- messageField: z7.string().max(128).default("message"),
556
- levelField: z7.string().max(128).optional()
557
- });
558
- var MySQLLogSourceSchema = z7.object({
559
- type: z7.literal("mysql"),
560
- host: z7.string().min(1).max(253),
561
- port: z7.number().int().min(1).max(65535).default(3306),
562
- user: z7.string().min(1).max(256),
316
+ connectionString: z6.string().min(1).max(2048),
317
+ database: z6.string().min(1).max(256),
318
+ collection: z6.string().min(1).max(256),
319
+ filter: z6.record(z6.string(), z6.unknown()).optional(),
320
+ timestampField: z6.string().max(128).default("timestamp"),
321
+ messageField: z6.string().max(128).default("message"),
322
+ levelField: z6.string().max(128).optional()
323
+ });
324
+ var MySQLLogSourceSchema = z6.object({
325
+ type: z6.literal("mysql"),
326
+ host: z6.string().min(1).max(253),
327
+ port: z6.number().int().min(1).max(65535).default(3306),
328
+ user: z6.string().min(1).max(256),
563
329
  /** @sensitive — stored encrypted (AES-256-GCM) on disk */
564
- password: z7.string().max(2048),
565
- database: z7.string().min(1).max(256),
566
- table: z7.string().min(1).max(256),
567
- query: z7.string().max(8192).optional(),
568
- timestampColumn: z7.string().max(128).default("created_at"),
569
- messageColumn: z7.string().max(128).default("message"),
570
- levelColumn: z7.string().max(128).optional(),
571
- pollIntervalMs: z7.number().int().min(500).max(6e4).default(2e3)
572
- });
573
- var LogSourceConfigSchema = z7.discriminatedUnion("type", [
330
+ password: z6.string().max(2048),
331
+ database: z6.string().min(1).max(256),
332
+ table: z6.string().min(1).max(256),
333
+ query: z6.string().max(8192).optional(),
334
+ timestampColumn: z6.string().max(128).default("created_at"),
335
+ messageColumn: z6.string().max(128).default("message"),
336
+ levelColumn: z6.string().max(128).optional(),
337
+ pollIntervalMs: z6.number().int().min(500).max(6e4).default(2e3)
338
+ });
339
+ var LogSourceConfigSchema = z6.discriminatedUnion("type", [
574
340
  ConsoleLogSourceSchema,
575
341
  FileLogSourceSchema,
576
342
  MongoLogSourceSchema,
@@ -578,169 +344,169 @@ var LogSourceConfigSchema = z7.discriminatedUnion("type", [
578
344
  ]);
579
345
 
580
346
  // ../../packages/shared/src/schemas/service.schema.ts
581
- var HealthCheckSchema = z8.object({
582
- type: z8.enum(["http", "command"]).default("http"),
347
+ var HealthCheckSchema = z7.object({
348
+ type: z7.enum(["http", "command"]).default("http"),
583
349
  // HTTP-specific (required when type=http)
584
- path: z8.string().min(1).max(500).startsWith("/").optional(),
585
- method: z8.enum(["GET", "HEAD", "POST", "PUT"]).optional().default("GET"),
586
- expectedStatus: z8.number().int().min(100).max(599).optional().default(200),
350
+ path: z7.string().min(1).max(500).startsWith("/").optional(),
351
+ method: z7.enum(["GET", "HEAD", "POST", "PUT"]).optional().default("GET"),
352
+ expectedStatus: z7.number().int().min(100).max(599).optional().default(200),
587
353
  // Command-specific (required when type=command)
588
- command: z8.string().min(1).max(4096).optional(),
354
+ command: z7.string().min(1).max(4096).optional(),
589
355
  // Shared
590
- interval: z8.number().int().positive().default(1e3),
591
- timeout: z8.number().int().positive().default(1e3),
592
- retries: z8.number().int().nonnegative().default(3),
593
- initialDelay: z8.number().int().nonnegative().optional().default(0)
356
+ interval: z7.number().int().positive().default(1e3),
357
+ timeout: z7.number().int().positive().default(1e3),
358
+ retries: z7.number().int().nonnegative().default(3),
359
+ initialDelay: z7.number().int().nonnegative().optional().default(0)
594
360
  }).refine(
595
361
  (data) => data.type === "http" ? !!data.path : !!data.command,
596
362
  { message: "HTTP type requires path; command type requires command" }
597
363
  );
598
- var BootstrapCommandSchema = z8.object({
599
- id: z8.string().min(1).max(64),
600
- label: z8.string().max(200).default(""),
601
- entrypoint: z8.string().max(4096).optional(),
602
- command: z8.string().max(4096).default(""),
603
- user: z8.string().max(256).optional()
604
- });
605
- var DockerConfigSchema = z8.object({
364
+ var BootstrapCommandSchema = z7.object({
365
+ id: z7.string().min(1).max(64),
366
+ label: z7.string().max(200).default(""),
367
+ entrypoint: z7.string().max(4096).optional(),
368
+ command: z7.string().max(4096).default(""),
369
+ user: z7.string().max(256).optional()
370
+ });
371
+ var DockerConfigSchema = z7.object({
606
372
  // Image mode (pull from registry) — mutually exclusive with build mode in UI
607
- image: z8.string().min(1).max(1024).optional(),
373
+ image: z7.string().min(1).max(1024).optional(),
608
374
  // Build mode — Dockerfile stored inline in services.json
609
- dockerfile: z8.string().max(65536).optional(),
610
- buildContext: z8.string().max(4096).optional(),
611
- buildArgs: z8.record(z8.string().max(256), z8.string().max(4096)).default({}).refine(
375
+ dockerfile: z7.string().max(65536).optional(),
376
+ buildContext: z7.string().max(4096).optional(),
377
+ buildArgs: z7.record(z7.string().max(256), z7.string().max(4096)).default({}).refine(
612
378
  (obj) => Object.keys(obj).length <= 50,
613
379
  { message: "Max 50 build args" }
614
380
  ),
615
- targetStage: z8.string().max(256).optional(),
381
+ targetStage: z7.string().max(256).optional(),
616
382
  // Runtime config
617
- networkMode: z8.enum(["host", "bridge"]).default("host"),
618
- ports: z8.array(z8.string().max(64)).max(100).default([]),
619
- volumes: z8.array(z8.string().max(1024)).max(100).default([]),
620
- mountRootpath: z8.boolean().default(false),
621
- entrypoint: z8.string().max(4096).optional(),
622
- command: z8.string().max(4096).optional(),
623
- user: z8.string().max(256).optional(),
624
- useNativeCommand: z8.boolean().default(false),
625
- nativeCommandMode: z8.enum(["shared", "isolated"]).default("isolated"),
626
- nativeShell: z8.string().max(256).default("sh"),
627
- bootstrapCommands: z8.array(BootstrapCommandSchema).max(20).default([])
628
- });
629
- var RestartStrategySchema = z8.enum(["none", "on-failure", "always", "unless-stopped"]).default("none");
630
- var ServiceShortcutSchema = z8.object({
631
- id: z8.string().min(1).max(64),
632
- label: z8.string().max(200).default(""),
633
- command: z8.string().max(4096).default(""),
634
- cwd: z8.string().max(4096).optional()
635
- });
636
- var ServiceCommandSchema = z8.object({
637
- id: z8.string().min(1).max(64),
638
- label: z8.string().max(200).default(""),
639
- command: z8.string().max(4096).default(""),
640
- cwd: z8.string().max(4096).optional(),
641
- shell: z8.boolean().optional().default(true)
642
- });
643
- var VariableSlotSchema = z8.object({
644
- value: z8.string().max(8192).default(""),
645
- pre: z8.string().max(8192).default(""),
646
- post: z8.string().max(8192).default(""),
647
- isSecret: z8.boolean().default(false),
383
+ networkMode: z7.enum(["host", "bridge"]).default("host"),
384
+ ports: z7.array(z7.string().max(64)).max(100).default([]),
385
+ volumes: z7.array(z7.string().max(1024)).max(100).default([]),
386
+ mountRootpath: z7.boolean().default(false),
387
+ entrypoint: z7.string().max(4096).optional(),
388
+ command: z7.string().max(4096).optional(),
389
+ user: z7.string().max(256).optional(),
390
+ useNativeCommand: z7.boolean().default(false),
391
+ nativeCommandMode: z7.enum(["shared", "isolated"]).default("isolated"),
392
+ nativeShell: z7.string().max(256).default("sh"),
393
+ bootstrapCommands: z7.array(BootstrapCommandSchema).max(20).default([])
394
+ });
395
+ var RestartStrategySchema = z7.enum(["none", "on-failure", "always", "unless-stopped"]).default("none");
396
+ var ServiceShortcutSchema = z7.object({
397
+ id: z7.string().min(1).max(64),
398
+ label: z7.string().max(200).default(""),
399
+ command: z7.string().max(4096).default(""),
400
+ cwd: z7.string().max(4096).optional()
401
+ });
402
+ var ServiceCommandSchema = z7.object({
403
+ id: z7.string().min(1).max(64),
404
+ label: z7.string().max(200).default(""),
405
+ command: z7.string().max(4096).default(""),
406
+ cwd: z7.string().max(4096).optional(),
407
+ shell: z7.boolean().optional().default(true)
408
+ });
409
+ var VariableSlotSchema = z7.object({
410
+ value: z7.string().max(8192).default(""),
411
+ pre: z7.string().max(8192).default(""),
412
+ post: z7.string().max(8192).default(""),
413
+ isSecret: z7.boolean().default(false),
648
414
  // When true, this variable is injected into the process environment of AI
649
415
  // agents (Claude Code, Codex, …) spawned while this environment is active.
650
416
  // Opt-in: defaults to false so secrets are never leaked to AI agents by default.
651
- injectIntoAi: z8.boolean().default(false)
417
+ injectIntoAi: z7.boolean().default(false)
652
418
  });
653
- var VariableSchema = z8.object({
654
- key: z8.string().min(1).max(256),
419
+ var VariableSchema = z7.object({
420
+ key: z7.string().min(1).max(256),
655
421
  value: VariableSlotSchema
656
422
  });
657
- var VariablesRecordSchema = z8.record(
658
- z8.string().max(128),
423
+ var VariablesRecordSchema = z7.record(
424
+ z7.string().max(128),
659
425
  VariableSchema
660
426
  ).refine(
661
427
  (obj) => Object.keys(obj).length <= 200,
662
428
  { message: "Max 200 variables" }
663
429
  );
664
- var VariableSlotsRecordSchema = z8.record(
665
- z8.string().max(256),
430
+ var VariableSlotsRecordSchema = z7.record(
431
+ z7.string().max(256),
666
432
  VariableSlotSchema
667
433
  ).refine(
668
434
  (obj) => Object.keys(obj).length <= 200,
669
435
  { message: "Max 200 variable slots" }
670
436
  );
671
- var ServiceConfigSchema = z8.object({
672
- id: z8.string().max(128),
673
- orgId: z8.string().max(128).nullable().optional(),
674
- agentId: z8.string().max(128).optional(),
437
+ var ServiceConfigSchema = z7.object({
438
+ id: z7.string().max(128),
439
+ orgId: z7.string().max(128).nullable().optional(),
440
+ agentId: z7.string().max(128).optional(),
675
441
  // Optional: if absent, inherited from active environment's agentId
676
- name: z8.string().min(1).max(200),
677
- commands: z8.array(ServiceCommandSchema).max(50).optional().default([]),
678
- cwd: z8.string().max(4096).optional(),
679
- ports: z8.array(z8.number().int().positive().max(65535)).max(20).optional().default([]),
442
+ name: z7.string().min(1).max(200),
443
+ commands: z7.array(ServiceCommandSchema).max(50).optional().default([]),
444
+ cwd: z7.string().max(4096).optional(),
445
+ ports: z7.array(z7.number().int().positive().max(65535)).max(20).optional().default([]),
680
446
  // Metadata fields (migration from old Runeya)
681
- groups: z8.array(z8.string().max(200)).max(20).optional().default([]),
682
- description: z8.string().max(2e3).optional(),
447
+ groups: z7.array(z7.string().max(200)).max(20).optional().default([]),
448
+ description: z7.string().max(2e3).optional(),
683
449
  /** Path (relative to service.cwd or absolute) where the service's docs/wiki markdown files live. Optional — defaults to service.cwd. */
684
- docsPath: z8.string().max(4096).optional(),
685
- url: z8.string().max(2048).optional(),
686
- localUrls: z8.array(z8.object({
687
- url: z8.string().max(253).regex(/^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/),
688
- port: z8.number().int().min(1).max(65535)
450
+ docsPath: z7.string().max(4096).optional(),
451
+ url: z7.string().max(2048).optional(),
452
+ localUrls: z7.array(z7.object({
453
+ url: z7.string().max(253).regex(/^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/),
454
+ port: z7.number().int().min(1).max(65535)
689
455
  })).max(20).optional().default([]),
690
- openapiUrl: z8.string().max(2048).optional(),
691
- git: z8.object({
692
- remote: z8.string().max(2048).optional(),
693
- home: z8.string().max(2048).optional()
456
+ openapiUrl: z7.string().max(2048).optional(),
457
+ git: z7.object({
458
+ remote: z7.string().max(2048).optional(),
459
+ home: z7.string().max(2048).optional()
694
460
  }).optional(),
695
- meta: z8.record(z8.string().max(256), z8.string().max(2e3)).optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
461
+ meta: z7.record(z7.string().max(256), z7.string().max(2e3)).optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
696
462
  // Transient env dict (resolved by server before deployment, used directly by agent runner — NOT persisted)
697
- env: z8.record(z8.string().max(256), z8.string().max(8192)).default({}).refine(
463
+ env: z7.record(z7.string().max(256), z7.string().max(8192)).default({}).refine(
698
464
  (obj) => Object.keys(obj).length <= 200,
699
465
  { message: "Too many env vars (max 200)" }
700
466
  ),
701
- envSecrets: z8.array(z8.string().max(256)).max(200).default([]),
467
+ envSecrets: z7.array(z7.string().max(256)).max(200).default([]),
702
468
  // Transient: resolved JS log parsers (from parserIds, resolved by server before deployment — NOT persisted)
703
- resolvedLogParsers: z8.array(JSLogParserSchema).default([]).optional(),
469
+ resolvedLogParsers: z7.array(JSLogParserSchema).default([]).optional(),
704
470
  // Transient: resolved working directory (cwd with env vars expanded — NOT persisted)
705
- resolvedCwd: z8.string().optional(),
706
- runner: z8.enum(["native", "docker"]).optional().default("native"),
471
+ resolvedCwd: z7.string().optional(),
472
+ runner: z7.enum(["native", "docker"]).optional().default("native"),
707
473
  dockerConfig: DockerConfigSchema.optional(),
708
474
  healthCheck: HealthCheckSchema.optional(),
709
- parserIds: z8.array(z8.string().max(128)).max(50).default([]),
710
- shortcuts: z8.array(ServiceShortcutSchema).max(50).optional().default([]),
711
- autoRestart: z8.boolean().optional().default(false),
712
- clearLogsOnStart: z8.boolean().optional().default(false),
475
+ parserIds: z7.array(z7.string().max(128)).max(50).default([]),
476
+ shortcuts: z7.array(ServiceShortcutSchema).max(50).optional().default([]),
477
+ autoRestart: z7.boolean().optional().default(false),
478
+ clearLogsOnStart: z7.boolean().optional().default(false),
713
479
  restartStrategy: RestartStrategySchema.optional(),
714
- maxRestarts: z8.number().int().nonnegative().optional(),
715
- restartBackoffMs: z8.number().int().positive().optional().default(1e3),
480
+ maxRestarts: z7.number().int().nonnegative().optional(),
481
+ restartBackoffMs: z7.number().int().positive().optional().default(1e3),
716
482
  // Log sources additionnelles (au-delà du stdout/stderr console par défaut)
717
- logSources: z8.array(LogSourceConfigSchema).max(20).optional().default([])
483
+ logSources: z7.array(LogSourceConfigSchema).max(20).optional().default([])
718
484
  });
719
485
  var CreateServiceSchema = ServiceConfigSchema.omit({ id: true }).partial().required({ name: true });
720
486
  var UpdateServiceSchema = ServiceConfigSchema.partial().required({ id: true }).extend({
721
- agentId: z8.string().max(128).nullable().optional(),
487
+ agentId: z7.string().max(128).nullable().optional(),
722
488
  // null = clear (inherit from env), undefined = no change
723
- cwd: z8.string().max(4096).nullable().optional(),
724
- git: z8.object({ remote: z8.string().max(2048).optional(), home: z8.string().max(2048).optional() }).nullable().optional(),
725
- meta: z8.record(z8.string().max(256), z8.string().max(2e3)).nullable().optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
489
+ cwd: z7.string().max(4096).nullable().optional(),
490
+ git: z7.object({ remote: z7.string().max(2048).optional(), home: z7.string().max(2048).optional() }).nullable().optional(),
491
+ meta: z7.record(z7.string().max(256), z7.string().max(2e3)).nullable().optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
726
492
  healthCheck: HealthCheckSchema.nullable().optional()
727
493
  });
728
494
 
729
495
  // ../../packages/shared/src/schemas/process.schema.ts
730
- import { z as z9 } from "zod";
731
- var ProcessStateSchema = z9.enum(["starting", "running", "stopped", "errored"]);
732
- var HealthStatusSchema = z9.enum(["healthy", "unhealthy", "unknown"]);
733
- var ProcessStatusSchema = z9.object({
734
- id: z9.string().max(128),
735
- serviceId: z9.string().max(128),
736
- agentId: z9.string().max(128),
496
+ import { z as z8 } from "zod";
497
+ var ProcessStateSchema = z8.enum(["starting", "running", "stopped", "errored"]);
498
+ var HealthStatusSchema = z8.enum(["healthy", "unhealthy", "unknown"]);
499
+ var ProcessStatusSchema = z8.object({
500
+ id: z8.string().max(128),
501
+ serviceId: z8.string().max(128),
502
+ agentId: z8.string().max(128),
737
503
  state: ProcessStateSchema,
738
- pid: z9.number().int().nullable().optional(),
739
- pids: z9.array(z9.number().int()).optional().default([]),
740
- exitCode: z9.number().int().nullable().optional(),
741
- startedAt: z9.coerce.date().nullable().optional(),
742
- restartCount: z9.number().int().nonnegative().default(0),
743
- uptime: z9.number().nonnegative().default(0),
504
+ pid: z8.number().int().nullable().optional(),
505
+ pids: z8.array(z8.number().int()).optional().default([]),
506
+ exitCode: z8.number().int().nullable().optional(),
507
+ startedAt: z8.coerce.date().nullable().optional(),
508
+ restartCount: z8.number().int().nonnegative().default(0),
509
+ uptime: z8.number().nonnegative().default(0),
744
510
  healthStatus: HealthStatusSchema.default("unknown"),
745
511
  /**
746
512
  * Le répertoire où le processus s'exécute VRAIMENT, absolutisé par l'agent.
@@ -751,139 +517,139 @@ var ProcessStatusSchema = z9.object({
751
517
  * intéresse quand un service tourne contre le mauvais dépôt, c'est le chemin
752
518
  * final — y compris quand il retombe sur le répertoire de l'agent.
753
519
  */
754
- cwd: z9.string().max(4096).nullable().optional()
520
+ cwd: z8.string().max(4096).nullable().optional()
755
521
  });
756
522
 
757
523
  // ../../packages/shared/src/schemas/log.schema.ts
758
- import { z as z10 } from "zod";
759
- var LogLevelSchema = z10.enum(["debug", "info", "warn", "error", "fatal"]);
760
- var LogLineSchema = z10.object({
524
+ import { z as z9 } from "zod";
525
+ var LogLevelSchema = z9.enum(["debug", "info", "warn", "error", "fatal"]);
526
+ var LogLineSchema = z9.object({
761
527
  /** Raw log line as received from the process (immutable context) */
762
- raw: z10.string(),
528
+ raw: z9.string(),
763
529
  /** Source stream (immutable context) */
764
- stream: z10.enum(["stdout", "stderr"]),
530
+ stream: z9.enum(["stdout", "stderr"]),
765
531
  /** Severity level */
766
532
  level: LogLevelSchema,
767
533
  /** Parsed/enriched message to display */
768
- message: z10.string(),
534
+ message: z9.string(),
769
535
  /** When true, the line is hidden from the log view */
770
- hidden: z10.boolean(),
536
+ hidden: z9.boolean(),
771
537
  /** Arbitrary key/value pairs shown in the detail panel */
772
- metadata: z10.record(z10.string().max(256), z10.unknown()).refine(
538
+ metadata: z9.record(z9.string().max(256), z9.unknown()).refine(
773
539
  (obj) => Object.keys(obj).length <= 100,
774
540
  { message: "Too many metadata keys (max 100)" }
775
541
  ),
776
542
  /** Full parsed JSON object when the line is JSON */
777
- json: z10.record(z10.string(), z10.unknown()).optional(),
543
+ json: z9.record(z9.string(), z9.unknown()).optional(),
778
544
  /** Custom header for the JSON log card (supports HTML, sanitized before display) */
779
- jsonHeader: z10.string().max(256).optional()
545
+ jsonHeader: z9.string().max(256).optional()
780
546
  });
781
- var LogCardDirectiveSchema = z10.object({
782
- id: z10.string().max(128),
783
- type: z10.string().max(64),
784
- header: z10.string().max(256),
785
- collapsable: z10.boolean().optional(),
786
- collapsed: z10.boolean().optional(),
787
- state: z10.enum(["open", "append", "close", "self"])
547
+ var LogCardDirectiveSchema = z9.object({
548
+ id: z9.string().max(128),
549
+ type: z9.string().max(64),
550
+ header: z9.string().max(256),
551
+ collapsable: z9.boolean().optional(),
552
+ collapsed: z9.boolean().optional(),
553
+ state: z9.enum(["open", "append", "close", "self"])
788
554
  });
789
- var ParsedLogSchema = z10.object({
790
- id: z10.string().max(128),
791
- processId: z10.string().max(128),
792
- pid: z10.number().int().nullable().optional(),
793
- timestamp: z10.coerce.date(),
555
+ var ParsedLogSchema = z9.object({
556
+ id: z9.string().max(128),
557
+ processId: z9.string().max(128),
558
+ pid: z9.number().int().nullable().optional(),
559
+ timestamp: z9.coerce.date(),
794
560
  level: LogLevelSchema.default("info"),
795
- message: z10.string().max(16384),
796
- raw: z10.string().max(16384),
797
- stream: z10.enum(["stdout", "stderr"]).default("stdout"),
798
- hidden: z10.boolean().optional().default(false),
799
- metadata: z10.record(z10.string().max(256), z10.unknown()).optional().refine(
561
+ message: z9.string().max(16384),
562
+ raw: z9.string().max(16384),
563
+ stream: z9.enum(["stdout", "stderr"]).default("stdout"),
564
+ hidden: z9.boolean().optional().default(false),
565
+ metadata: z9.record(z9.string().max(256), z9.unknown()).optional().refine(
800
566
  (obj) => !obj || Object.keys(obj).length <= 100,
801
567
  { message: "Too many metadata keys (max 100)" }
802
568
  ),
803
- json: z10.record(z10.string(), z10.unknown()).optional(),
569
+ json: z9.record(z9.string(), z9.unknown()).optional(),
804
570
  logCard: LogCardDirectiveSchema.optional(),
805
- sourceType: z10.enum(["console", "file", "mongo", "mysql"]).optional(),
806
- sourcePath: z10.string().max(4096).optional()
571
+ sourceType: z9.enum(["console", "file", "mongo", "mysql"]).optional(),
572
+ sourcePath: z9.string().max(4096).optional()
807
573
  });
808
574
 
809
575
  // ../../packages/shared/src/schemas/agent.schema.ts
810
- import { z as z11 } from "zod";
576
+ import { z as z10 } from "zod";
811
577
  var ENV_VAR_NAME_REGEX = /^[A-Za-z_][A-Za-z0-9_]*$/;
812
- var AgentConfigSchema = z11.object({
813
- id: z11.string().max(128),
814
- name: z11.string().min(1).max(100),
815
- url: z11.string().url().max(2048),
816
- passphrase: z11.string().min(1).max(1024),
817
- passthroughEnv: z11.array(
818
- z11.string().regex(ENV_VAR_NAME_REGEX).max(256)
578
+ var AgentConfigSchema = z10.object({
579
+ id: z10.string().max(128),
580
+ name: z10.string().min(1).max(100),
581
+ url: z10.string().url().max(2048),
582
+ passphrase: z10.string().min(1).max(1024),
583
+ passthroughEnv: z10.array(
584
+ z10.string().regex(ENV_VAR_NAME_REGEX).max(256)
819
585
  ).max(100).default([])
820
586
  });
821
- var AgentStatusSchema = z11.object({
822
- connected: z11.boolean(),
823
- lastSeen: z11.string().nullable().optional(),
824
- uptime: z11.number().nonnegative().default(0),
825
- runnersAvailable: z11.array(z11.enum(["native", "docker"])).default(["native"]),
826
- lanIp: z11.string().optional(),
587
+ var AgentStatusSchema = z10.object({
588
+ connected: z10.boolean(),
589
+ lastSeen: z10.string().nullable().optional(),
590
+ uptime: z10.number().nonnegative().default(0),
591
+ runnersAvailable: z10.array(z10.enum(["native", "docker"])).default(["native"]),
592
+ lanIp: z10.string().optional(),
827
593
  /**
828
594
  * Ce que la machine de l'agent vaut pour les builtins de portée `agent`.
829
595
  * Sert à PRÉVISUALISER — la valeur injectée reste calculée au lancement, par
830
596
  * l'agent lui-même : une IP change, un agent se déconnecte, et un statut
831
597
  * n'est qu'un cliché.
832
598
  */
833
- os: z11.string().max(64).optional(),
834
- home: z11.string().max(4096).optional(),
835
- cwd: z11.string().max(4096).optional()
599
+ os: z10.string().max(64).optional(),
600
+ home: z10.string().max(4096).optional(),
601
+ cwd: z10.string().max(4096).optional()
836
602
  });
837
603
 
838
604
  // ../../packages/shared/src/schemas/permission.schema.ts
839
- import { z as z12 } from "zod";
840
- var GlobalRoleSchema = z12.enum(["owner", "admin", "member"]);
841
- var ProjectRoleSchema = z12.enum(["admin", "editor", "viewer"]);
842
- var ProjectMemberRoleSchema = z12.object({
843
- id: z12.string().max(128),
844
- projectId: z12.string().max(128),
845
- userId: z12.string().max(128),
605
+ import { z as z11 } from "zod";
606
+ var GlobalRoleSchema = z11.enum(["owner", "admin", "member"]);
607
+ var ProjectRoleSchema = z11.enum(["admin", "editor", "viewer"]);
608
+ var ProjectMemberRoleSchema = z11.object({
609
+ id: z11.string().max(128),
610
+ projectId: z11.string().max(128),
611
+ userId: z11.string().max(128),
846
612
  role: ProjectRoleSchema
847
613
  });
848
614
 
849
615
  // ../../packages/shared/src/schemas/sync.schema.ts
850
- import { z as z13 } from "zod";
851
- var ConfigVersionSchema = z13.object({
852
- id: z13.string().max(128),
853
- entityType: z13.enum(["project", "service"]),
854
- entityId: z13.string().max(128),
855
- version: z13.string().max(128),
856
- parentVersion: z13.string().max(128),
857
- data: z13.record(z13.string(), z13.unknown()).refine(
616
+ import { z as z12 } from "zod";
617
+ var ConfigVersionSchema = z12.object({
618
+ id: z12.string().max(128),
619
+ entityType: z12.enum(["project", "service"]),
620
+ entityId: z12.string().max(128),
621
+ version: z12.string().max(128),
622
+ parentVersion: z12.string().max(128),
623
+ data: z12.record(z12.string(), z12.unknown()).refine(
858
624
  (obj) => Object.keys(obj).length <= 1e3,
859
625
  "Too many data keys (max 1000)"
860
626
  ),
861
- patch: z13.array(z13.record(z13.string(), z13.unknown())).max(1e3),
862
- userId: z13.string().max(128),
863
- timestamp: z13.coerce.date(),
864
- resolved: z13.boolean().default(false)
865
- });
866
- var ConfigChangeSchema = z13.object({
867
- entityType: z13.enum(["project", "service"]),
868
- entityId: z13.string().max(128),
869
- version: z13.string().max(128),
870
- parentVersion: z13.string().max(128),
871
- data: z13.record(z13.string(), z13.unknown()).refine(
627
+ patch: z12.array(z12.record(z12.string(), z12.unknown())).max(1e3),
628
+ userId: z12.string().max(128),
629
+ timestamp: z12.coerce.date(),
630
+ resolved: z12.boolean().default(false)
631
+ });
632
+ var ConfigChangeSchema = z12.object({
633
+ entityType: z12.enum(["project", "service"]),
634
+ entityId: z12.string().max(128),
635
+ version: z12.string().max(128),
636
+ parentVersion: z12.string().max(128),
637
+ data: z12.record(z12.string(), z12.unknown()).refine(
872
638
  (obj) => Object.keys(obj).length <= 1e3,
873
639
  "Too many data keys (max 1000)"
874
640
  ),
875
- patch: z13.array(z13.record(z13.string(), z13.unknown())).max(1e3)
641
+ patch: z12.array(z12.record(z12.string(), z12.unknown())).max(1e3)
876
642
  });
877
- var SyncStatusSchema = z13.object({
878
- connected: z13.boolean(),
879
- lastSync: z13.coerce.date().nullable().optional(),
880
- pendingChanges: z13.number().int().nonnegative().default(0),
881
- conflicts: z13.number().int().nonnegative().default(0)
643
+ var SyncStatusSchema = z12.object({
644
+ connected: z12.boolean(),
645
+ lastSync: z12.coerce.date().nullable().optional(),
646
+ pendingChanges: z12.number().int().nonnegative().default(0),
647
+ conflicts: z12.number().int().nonnegative().default(0)
882
648
  });
883
649
 
884
650
  // ../../packages/shared/src/schemas/audit.schema.ts
885
- import { z as z14 } from "zod";
886
- var AuditActionSchema = z14.enum([
651
+ import { z as z13 } from "zod";
652
+ var AuditActionSchema = z13.enum([
887
653
  "create",
888
654
  "update",
889
655
  "delete",
@@ -894,113 +660,113 @@ var AuditActionSchema = z14.enum([
894
660
  "stop",
895
661
  "roleChange"
896
662
  ]);
897
- var AuditEntityTypeSchema = z14.enum([
663
+ var AuditEntityTypeSchema = z13.enum([
898
664
  "org",
899
665
  "project",
900
666
  "service",
901
667
  "member",
902
668
  "permission"
903
669
  ]);
904
- var AuditLogSchema = z14.object({
905
- id: z14.string().max(128),
906
- orgId: z14.string().max(128),
907
- userId: z14.string().max(128),
670
+ var AuditLogSchema = z13.object({
671
+ id: z13.string().max(128),
672
+ orgId: z13.string().max(128),
673
+ userId: z13.string().max(128),
908
674
  action: AuditActionSchema,
909
675
  entityType: AuditEntityTypeSchema,
910
- entityId: z14.string().max(128),
911
- metadata: z14.record(z14.string().max(256), z14.unknown()).default({}).refine(
676
+ entityId: z13.string().max(128),
677
+ metadata: z13.record(z13.string().max(256), z13.unknown()).default({}).refine(
912
678
  (obj) => Object.keys(obj).length <= 100,
913
679
  { message: "Too many metadata keys (max 100)" }
914
680
  ),
915
- timestamp: z14.coerce.date()
681
+ timestamp: z13.coerce.date()
916
682
  });
917
683
 
918
684
  // ../../packages/shared/src/schemas/metrics.schema.ts
919
- import { z as z15 } from "zod";
920
- var ProcessMetricsSchema = z15.object({
921
- processId: z15.string().max(128),
922
- cpu: z15.number().nonnegative(),
923
- memory: z15.number().int().nonnegative(),
924
- timestamp: z15.string()
685
+ import { z as z14 } from "zod";
686
+ var ProcessMetricsSchema = z14.object({
687
+ processId: z14.string().max(128),
688
+ cpu: z14.number().nonnegative(),
689
+ memory: z14.number().int().nonnegative(),
690
+ timestamp: z14.string()
925
691
  });
926
692
 
927
693
  // ../../packages/shared/src/schemas/environment.schema.ts
928
- import { z as z16 } from "zod";
929
- var EnvironmentVariablesSchema = z16.record(
930
- z16.string().max(256),
694
+ import { z as z15 } from "zod";
695
+ var EnvironmentVariablesSchema = z15.record(
696
+ z15.string().max(256),
931
697
  VariableSchema
932
698
  ).refine(
933
699
  (obj) => Object.keys(obj).length <= 200,
934
700
  { message: "Max 200 variables" }
935
701
  );
936
- var EnvironmentSchema = z16.object({
937
- id: z16.string().max(128),
938
- projectId: z16.string().max(128),
939
- name: z16.string().min(1).max(200),
940
- description: z16.string().max(2e3).optional().default(""),
941
- parentIds: z16.array(z16.string().max(128)).max(10).default([]),
702
+ var EnvironmentSchema = z15.object({
703
+ id: z15.string().max(128),
704
+ projectId: z15.string().max(128),
705
+ name: z15.string().min(1).max(200),
706
+ description: z15.string().max(2e3).optional().default(""),
707
+ parentIds: z15.array(z15.string().max(128)).max(10).default([]),
942
708
  variables: EnvironmentVariablesSchema.default({}),
943
709
  // Scope: 'global' = project-level env, 'service' = per-service env
944
- scope: z16.enum(["global", "service"]).default("global"),
710
+ scope: z15.enum(["global", "service"]).default("global"),
945
711
  // When scope='service': the serviceId this env belongs to
946
- reference: z16.string().max(128).optional(),
712
+ reference: z15.string().max(128).optional(),
947
713
  // When scope='service': the globalEnvId this env activates on
948
- activateOn: z16.string().max(128).optional(),
949
- immutable: z16.boolean().default(false),
950
- default: z16.boolean().optional().default(false),
951
- color: z16.string().max(20).optional(),
952
- bgColor: z16.string().max(20).optional(),
714
+ activateOn: z15.string().max(128).optional(),
715
+ immutable: z15.boolean().default(false),
716
+ default: z15.boolean().optional().default(false),
717
+ color: z15.string().max(20).optional(),
718
+ bgColor: z15.string().max(20).optional(),
953
719
  // When scope='global': the default agent used by services that don't have an explicit agentId
954
- agentId: z16.string().max(128).optional()
955
- });
956
- var ResolvedEnvironmentSchema = z16.object({
957
- variables: z16.record(z16.string().max(256), VariableSchema).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved variables" }),
958
- env: z16.record(z16.string().max(256), z16.string().max(8192)).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved env vars" }),
959
- envSecrets: z16.array(z16.string().max(256)).max(500),
960
- sources: z16.record(z16.string().max(256), z16.object({
961
- environmentId: z16.string().max(128),
962
- environmentName: z16.string().max(200),
963
- overridden: z16.boolean(),
964
- resolvedFrom: z16.object({
965
- environmentId: z16.string().max(128),
966
- environmentName: z16.string().max(200)
720
+ agentId: z15.string().max(128).optional()
721
+ });
722
+ var ResolvedEnvironmentSchema = z15.object({
723
+ variables: z15.record(z15.string().max(256), VariableSchema).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved variables" }),
724
+ env: z15.record(z15.string().max(256), z15.string().max(8192)).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved env vars" }),
725
+ envSecrets: z15.array(z15.string().max(256)).max(500),
726
+ sources: z15.record(z15.string().max(256), z15.object({
727
+ environmentId: z15.string().max(128),
728
+ environmentName: z15.string().max(200),
729
+ overridden: z15.boolean(),
730
+ resolvedFrom: z15.object({
731
+ environmentId: z15.string().max(128),
732
+ environmentName: z15.string().max(200)
967
733
  }).optional(),
968
734
  // Set when a machine-local override was applied to this variable, pointing
969
735
  // at the environment that carries the winning override. Distinct from
970
736
  // `overridden`, which also covers "shadows an inherited variable".
971
- overriddenBy: z16.object({
972
- environmentId: z16.string().max(128),
973
- environmentName: z16.string().max(200)
737
+ overriddenBy: z15.object({
738
+ environmentId: z15.string().max(128),
739
+ environmentName: z15.string().max(200)
974
740
  }).optional()
975
741
  })).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 source entries" })
976
742
  });
977
743
  var CreateEnvironmentSchema = EnvironmentSchema.omit({ id: true }).extend({
978
- description: z16.string().max(2e3).optional().default(""),
979
- parentIds: z16.array(z16.string().max(128)).max(10).optional().default([]),
744
+ description: z15.string().max(2e3).optional().default(""),
745
+ parentIds: z15.array(z15.string().max(128)).max(10).optional().default([]),
980
746
  variables: EnvironmentVariablesSchema.optional().default({}),
981
- scope: z16.enum(["global", "service"]).optional().default("global"),
982
- reference: z16.string().max(128).optional(),
983
- activateOn: z16.string().max(128).optional(),
984
- immutable: z16.boolean().optional().default(false)
747
+ scope: z15.enum(["global", "service"]).optional().default("global"),
748
+ reference: z15.string().max(128).optional(),
749
+ activateOn: z15.string().max(128).optional(),
750
+ immutable: z15.boolean().optional().default(false)
985
751
  });
986
752
  var UpdateEnvironmentSchema = EnvironmentSchema.partial().required({ id: true }).extend({
987
- description: z16.string().max(2e3).optional(),
988
- parentIds: z16.array(z16.string().max(128)).max(10).optional(),
753
+ description: z15.string().max(2e3).optional(),
754
+ parentIds: z15.array(z15.string().max(128)).max(10).optional(),
989
755
  variables: EnvironmentVariablesSchema.optional(),
990
- scope: z16.enum(["global", "service"]).optional(),
991
- immutable: z16.boolean().optional(),
992
- default: z16.boolean().optional(),
993
- agentId: z16.string().max(128).nullable().optional()
756
+ scope: z15.enum(["global", "service"]).optional(),
757
+ immutable: z15.boolean().optional(),
758
+ default: z15.boolean().optional(),
759
+ agentId: z15.string().max(128).nullable().optional()
994
760
  // null = clear (no default agent)
995
761
  });
996
762
 
997
763
  // ../../packages/shared/src/schemas/environment-overrides.schema.ts
998
- import { z as z17 } from "zod";
999
- var VariableOverrideSchema = z17.object({
764
+ import { z as z16 } from "zod";
765
+ var VariableOverrideSchema = z16.object({
1000
766
  value: VariableSlotSchema
1001
767
  });
1002
- var EnvironmentOverridesSchema = z17.record(
1003
- z17.string().max(128),
768
+ var EnvironmentOverridesSchema = z16.record(
769
+ z16.string().max(128),
1004
770
  VariableOverrideSchema
1005
771
  ).refine(
1006
772
  (obj) => Object.keys(obj).length <= 5e3,
@@ -1008,8 +774,8 @@ var EnvironmentOverridesSchema = z17.record(
1008
774
  );
1009
775
 
1010
776
  // ../../packages/shared/src/schemas/api-key.schema.ts
1011
- import { z as z18 } from "zod";
1012
- var ApiServiceActionSchema = z18.enum([
777
+ import { z as z17 } from "zod";
778
+ var ApiServiceActionSchema = z17.enum([
1013
779
  "service:read",
1014
780
  "service:start",
1015
781
  "service:stop",
@@ -1018,76 +784,76 @@ var ApiServiceActionSchema = z18.enum([
1018
784
  "service:status",
1019
785
  "logs:read"
1020
786
  ]);
1021
- var ApiEnvActionSchema = z18.enum(["env:read", "env:write"]);
1022
- var ApiEnvPermSchema = z18.object({
1023
- environmentId: z18.string().max(128),
1024
- actions: z18.array(ApiEnvActionSchema).max(10).default(["env:read"]),
1025
- includeSecrets: z18.boolean().default(false)
1026
- });
1027
- var ApiServicePermSchema = z18.object({
1028
- serviceId: z18.string().max(128),
1029
- actions: z18.array(ApiServiceActionSchema).max(10).default(["service:read"]),
1030
- environments: z18.array(ApiEnvPermSchema).max(100).default([])
1031
- });
1032
- var ApiKeyScopeSchema = z18.object({
1033
- services: z18.array(ApiServicePermSchema).max(500).default([])
1034
- });
1035
- var ApiKeySchema = z18.object({
1036
- id: z18.string().max(128),
1037
- name: z18.string().min(1).max(200),
1038
- key: z18.string().regex(/^[0-9a-f]{64}$/i),
787
+ var ApiEnvActionSchema = z17.enum(["env:read", "env:write"]);
788
+ var ApiEnvPermSchema = z17.object({
789
+ environmentId: z17.string().max(128),
790
+ actions: z17.array(ApiEnvActionSchema).max(10).default(["env:read"]),
791
+ includeSecrets: z17.boolean().default(false)
792
+ });
793
+ var ApiServicePermSchema = z17.object({
794
+ serviceId: z17.string().max(128),
795
+ actions: z17.array(ApiServiceActionSchema).max(10).default(["service:read"]),
796
+ environments: z17.array(ApiEnvPermSchema).max(100).default([])
797
+ });
798
+ var ApiKeyScopeSchema = z17.object({
799
+ services: z17.array(ApiServicePermSchema).max(500).default([])
800
+ });
801
+ var ApiKeySchema = z17.object({
802
+ id: z17.string().max(128),
803
+ name: z17.string().min(1).max(200),
804
+ key: z17.string().regex(/^[0-9a-f]{64}$/i),
1039
805
  scopes: ApiKeyScopeSchema,
1040
- createdAt: z18.string().max(64),
1041
- isPublic: z18.boolean().default(false)
806
+ createdAt: z17.string().max(64),
807
+ isPublic: z17.boolean().default(false)
1042
808
  });
1043
809
  var PersistedApiKeySchema = ApiKeySchema.extend({
1044
- key: z18.string().min(1).max(4096)
810
+ key: z17.string().min(1).max(4096)
1045
811
  });
1046
- var ApiKeysFileSchema = z18.object({
1047
- keys: z18.array(PersistedApiKeySchema).max(100)
812
+ var ApiKeysFileSchema = z17.object({
813
+ keys: z17.array(PersistedApiKeySchema).max(100)
1048
814
  });
1049
815
  var MaskedApiKeySchema = ApiKeySchema.omit({ key: true }).extend({
1050
816
  /** Last 4 characters of the secret, for recognising a key in a list. */
1051
- keyPreview: z18.string().max(8)
817
+ keyPreview: z17.string().max(8)
1052
818
  });
1053
819
 
1054
820
  // ../../packages/shared/src/schemas/image.schema.ts
1055
- import { z as z19 } from "zod";
821
+ import { z as z18 } from "zod";
1056
822
  var ALLOWED_IMAGE_MIME_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif"];
1057
- var ImagePartSchema = z19.object({
1058
- type: z19.literal("image"),
1059
- imageId: z19.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
1060
- url: z19.string().min(1),
1061
- mimeType: z19.enum(ALLOWED_IMAGE_MIME_TYPES),
1062
- altText: z19.string().max(500).optional()
1063
- });
1064
- var ImageUploadResponseSchema = z19.object({
1065
- imageId: z19.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
1066
- url: z19.string().min(1),
1067
- mimeType: z19.enum(ALLOWED_IMAGE_MIME_TYPES),
1068
- originalName: z19.string()
1069
- });
1070
- var ImageMetaSchema = z19.object({
1071
- imageId: z19.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
1072
- filePath: z19.string().min(1),
1073
- mimeType: z19.enum(ALLOWED_IMAGE_MIME_TYPES),
1074
- originalName: z19.string().min(1),
1075
- createdAt: z19.number().positive(),
1076
- size: z19.number().positive().optional()
823
+ var ImagePartSchema = z18.object({
824
+ type: z18.literal("image"),
825
+ imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
826
+ url: z18.string().min(1),
827
+ mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
828
+ altText: z18.string().max(500).optional()
829
+ });
830
+ var ImageUploadResponseSchema = z18.object({
831
+ imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
832
+ url: z18.string().min(1),
833
+ mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
834
+ originalName: z18.string()
835
+ });
836
+ var ImageMetaSchema = z18.object({
837
+ imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
838
+ filePath: z18.string().min(1),
839
+ mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
840
+ originalName: z18.string().min(1),
841
+ createdAt: z18.number().positive(),
842
+ size: z18.number().positive().optional()
1077
843
  });
1078
844
 
1079
845
  // ../../packages/shared/src/schemas/kanban.schema.ts
1080
- import { z as z20 } from "zod";
1081
- var KanbanAttachmentSchema = z20.object({
846
+ import { z as z19 } from "zod";
847
+ var KanbanAttachmentSchema = z19.object({
1082
848
  /** Server-issued id, also the storage key. */
1083
- id: z20.string().max(128),
1084
- name: z20.string().max(255),
1085
- size: z20.number().int().nonnegative(),
1086
- contentType: z20.string().max(128)
1087
- });
1088
- var KanbanCardEventSchema = z20.object({
1089
- type: z20.enum(["created", "edited", "moved", "image_added", "image_removed", "title_changed", "conversation_started", "scenario_started", "comment", "archived", "unarchived"]),
1090
- timestamp: z20.string(),
849
+ id: z19.string().max(128),
850
+ name: z19.string().max(255),
851
+ size: z19.number().int().nonnegative(),
852
+ contentType: z19.string().max(128)
853
+ });
854
+ var KanbanCardEventSchema = z19.object({
855
+ type: z19.enum(["created", "edited", "moved", "image_added", "image_removed", "title_changed", "conversation_started", "scenario_started", "comment", "archived", "unarchived"]),
856
+ timestamp: z19.string(),
1091
857
  /** Extra context: old/new column name, old/new title, comment text, etc. */
1092
858
  /**
1093
859
  * Le texte de l'entrée : le corps d'un commentaire, ou le contexte du geste.
@@ -1100,15 +866,15 @@ var KanbanCardEventSchema = z20.object({
1100
866
  * ce schéma déclarait invalide, et qu'aucune reprise depuis l'interface
1101
867
  * n'aurait ensuite pu enregistrer.
1102
868
  */
1103
- detail: z20.string().max(1e5).optional(),
869
+ detail: z19.string().max(1e5).optional(),
1104
870
  /**
1105
871
  * Stable identity of the event, used to tell an edit from an insertion when a
1106
872
  * whole history is written back. Absent on events recorded before the field
1107
873
  * existed; those fall back to (type, timestamp).
1108
874
  */
1109
- id: z20.string().max(128).optional(),
875
+ id: z19.string().max(128).optional(),
1110
876
  /** Who authored this event — 'ai' or 'user'. Only set for comment events. */
1111
- author: z20.enum(["ai", "user"]).optional(),
877
+ author: z19.enum(["ai", "user"]).optional(),
1112
878
  /**
1113
879
  * Qui est derrière l'événement, estampillé par le serveur — jamais pris du
1114
880
  * client, sans quoi n'importe qui pourrait signer au nom d'un autre.
@@ -1122,26 +888,26 @@ var KanbanCardEventSchema = z20.object({
1122
888
  * emprunte les droits de son créateur, pas son identité — personne ne doit
1123
889
  * croire qu'un humain a déplacé ce qu'un robot de CI a déplacé.
1124
890
  */
1125
- authorUser: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }).optional(),
891
+ authorUser: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional(),
1126
892
  /** Set when the author amended their comment, so the UI can say so. */
1127
- editedAt: z20.string().optional(),
893
+ editedAt: z19.string().optional(),
1128
894
  /** Files attached to a comment — same storage as a card's own attachments. */
1129
- attachments: z20.array(KanbanAttachmentSchema).max(20).optional(),
895
+ attachments: z19.array(KanbanAttachmentSchema).max(20).optional(),
1130
896
  /** Conversation that produced this event (comments only). Used to navigate back to the conversation. */
1131
- conversationId: z20.string().optional()
897
+ conversationId: z19.string().optional()
1132
898
  });
1133
- var KanbanCardSchema = z20.object({
1134
- id: z20.string(),
1135
- title: z20.string().min(1).max(500),
1136
- markdown: z20.string().max(1e5).default(""),
899
+ var KanbanCardSchema = z19.object({
900
+ id: z19.string(),
901
+ title: z19.string().min(1).max(500),
902
+ markdown: z19.string().max(1e5).default(""),
1137
903
  /**
1138
904
  * Legacy inline images, kept so boards written before object storage still
1139
905
  * render. New uploads go to `attachments` instead.
1140
906
  */
1141
- images: z20.array(z20.string()).default([]),
907
+ images: z19.array(z19.string()).default([]),
1142
908
  /** Files attached to the card — stored out of band, referenced here. */
1143
- attachments: z20.array(KanbanAttachmentSchema).max(50).default([]),
1144
- order: z20.number().int(),
909
+ attachments: z19.array(KanbanAttachmentSchema).max(50).default([]),
910
+ order: z19.number().int(),
1145
911
  /**
1146
912
  * La priorité de la carte, de 1 à 10 — 10 étant le plus urgent.
1147
913
  *
@@ -1149,7 +915,7 @@ var KanbanCardSchema = z20.object({
1149
915
  * basse » : une carte qu'on n'a pas encore arbitrée ne doit pas se ranger
1150
916
  * d'office au fond de la pile.
1151
917
  */
1152
- priority: z20.number().int().min(1).max(10).optional(),
918
+ priority: z19.number().int().min(1).max(10).optional(),
1153
919
  /**
1154
920
  * Les groupes de la carte — des étiquettes libres, posées par l'équipe.
1155
921
  *
@@ -1157,7 +923,7 @@ var KanbanCardSchema = z20.object({
1157
923
  * porte, et disparaît avec la dernière qui le portait. C'est ce qui permet
1158
924
  * d'en créer un en le tapant, sans passer par un écran d'administration.
1159
925
  */
1160
- groups: z20.array(z20.string().min(1).max(60)).max(30).optional(),
926
+ groups: z19.array(z19.string().min(1).max(60)).max(30).optional(),
1161
927
  /**
1162
928
  * L'échéance de la carte : le jour où elle est attendue, `AAAA-MM-JJ`.
1163
929
  *
@@ -1170,7 +936,7 @@ var KanbanCardSchema = z20.object({
1170
936
  * Facultative, et absente veut dire « pas d'échéance », pas « en retard » :
1171
937
  * une carte qu'on n'a pas datée ne doit pas s'annoncer comme urgente.
1172
938
  */
1173
- deadline: z20.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
939
+ deadline: z19.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
1174
940
  /**
1175
941
  * La couleur de la carte, en hexadécimal (`#RRGGBB`) — un liseré en haut de
1176
942
  * la carte, et rien d'autre : ce qu'elle veut dire appartient à l'équipe.
@@ -1179,7 +945,7 @@ var KanbanCardSchema = z20.object({
1179
945
  * finit dans un attribut `style`, et une couleur ne doit pouvoir contenir
1180
946
  * qu'une couleur. Absente sur les cartes sans couleur.
1181
947
  */
1182
- color: z20.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
948
+ color: z19.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
1183
949
  /**
1184
950
  * Le journal de la carte — commentaires compris.
1185
951
  *
@@ -1189,22 +955,22 @@ var KanbanCardSchema = z20.object({
1189
955
  * qui l'omet laisse au serveur celui qu'il a en base — à ne pas confondre
1190
956
  * avec `[]`, qui demanderait bel et bien de le vider.
1191
957
  */
1192
- history: z20.array(KanbanCardEventSchema).optional(),
958
+ history: z19.array(KanbanCardEventSchema).optional(),
1193
959
  /**
1194
960
  * Ce que le journal absent laisse quand même dire : combien de commentaires,
1195
961
  * et quand fut le dernier. Posés par le serveur en lecture, ignorés en
1196
962
  * écriture — la carte ne les stocke pas, ils se déduisent de `history`.
1197
963
  */
1198
- commentCount: z20.number().int().nonnegative().optional(),
1199
- lastCommentAt: z20.string().optional(),
964
+ commentCount: z19.number().int().nonnegative().optional(),
965
+ lastCommentAt: z19.string().optional(),
1200
966
  /**
1201
967
  * Les entrées de journal qui ouvrent une conversation IA. Elles restent dans
1202
968
  * la lecture allégée — il y en a une poignée par carte, et l'hôte s'en sert
1203
969
  * pour dire, sans ouvrir la carte, qu'une IA y travaille.
1204
970
  */
1205
- conversationEvents: z20.array(KanbanCardEventSchema).optional(),
1206
- createdAt: z20.string(),
1207
- updatedAt: z20.string(),
971
+ conversationEvents: z19.array(KanbanCardEventSchema).optional(),
972
+ createdAt: z19.string(),
973
+ updatedAt: z19.string(),
1208
974
  /**
1209
975
  * Quand la carte a été archivée — absente tant qu'elle est au tableau.
1210
976
  *
@@ -1212,7 +978,7 @@ var KanbanCardSchema = z20.object({
1212
978
  * retire du tableau, jamais une écriture qui la déplace. Rien à recoller donc
1213
979
  * au désarchivage, et aucun cimetière où une carte pourrait se perdre.
1214
980
  */
1215
- archivedAt: z20.string().optional(),
981
+ archivedAt: z19.string().optional(),
1216
982
  /**
1217
983
  * La colonne d'où la carte a été archivée, telle qu'elle s'appelait alors.
1218
984
  *
@@ -1220,7 +986,7 @@ var KanbanCardSchema = z20.object({
1220
986
  * quand la colonne a disparu depuis — auquel cas le désarchivage repose la
1221
987
  * carte dans la première colonne, sans se taire sur son origine.
1222
988
  */
1223
- archivedFrom: z20.object({ columnId: z20.string().max(128), columnTitle: z20.string().max(200) }).optional(),
989
+ archivedFrom: z19.object({ columnId: z19.string().max(128), columnTitle: z19.string().max(200) }).optional(),
1224
990
  /**
1225
991
  * Quand la carte a été supprimée. Rien n'est effacé : la carte reste en base,
1226
992
  * et toutes les lectures l'écartent.
@@ -1229,25 +995,25 @@ var KanbanCardSchema = z20.object({
1229
995
  * l'exécuter vraiment. La colonne et le tableau portent le même champ, pour
1230
996
  * que supprimer l'un n'emporte jamais les cartes de l'autre.
1231
997
  */
1232
- deletedAt: z20.string().optional(),
998
+ deletedAt: z19.string().optional(),
1233
999
  /**
1234
1000
  * People assigned to the card. Names are denormalized for display; the server
1235
1001
  * keeps only members of the owning organization, and notifies newcomers.
1236
1002
  */
1237
- assignees: z20.array(z20.object({ id: z20.string().max(128), name: z20.string().max(200) })).max(20).default([]),
1003
+ assignees: z19.array(z19.object({ id: z19.string().max(128), name: z19.string().max(200) })).max(20).default([]),
1238
1004
  /**
1239
1005
  * Who first created the card. Stamped by the server the first time a card id
1240
1006
  * appears in a board write, never taken from the client — a member could
1241
1007
  * otherwise claim any authorship. Absent on cards created before this field
1242
1008
  * existed, so readers must treat it as unknown rather than assume.
1243
1009
  */
1244
- createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }).optional()
1010
+ createdBy: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional()
1245
1011
  });
1246
- var KanbanColumnSchema = z20.object({
1247
- id: z20.string(),
1248
- title: z20.string().min(1).max(200),
1249
- order: z20.number().int(),
1250
- cards: z20.array(KanbanCardSchema).default([]),
1012
+ var KanbanColumnSchema = z19.object({
1013
+ id: z19.string(),
1014
+ title: z19.string().min(1).max(200),
1015
+ order: z19.number().int(),
1016
+ cards: z19.array(KanbanCardSchema).default([]),
1251
1017
  /**
1252
1018
  * Le regroupement auquel la colonne appartient, s'il y en a un.
1253
1019
  *
@@ -1256,24 +1022,24 @@ var KanbanColumnSchema = z20.object({
1256
1022
  * quoi finissent par se contredire, et un déplacement devient alors deux
1257
1023
  * écritures au lieu d'une.
1258
1024
  */
1259
- groupId: z20.string().optional(),
1025
+ groupId: z19.string().optional(),
1260
1026
  /** Supprimée, mais conservée — voir `deletedAt` sur la carte. */
1261
- deletedAt: z20.string().optional()
1027
+ deletedAt: z19.string().optional()
1262
1028
  });
1263
- var KanbanColumnGroupSchema = z20.object({
1264
- id: z20.string(),
1265
- title: z20.string().min(1).max(200),
1029
+ var KanbanColumnGroupSchema = z19.object({
1030
+ id: z19.string(),
1031
+ title: z19.string().min(1).max(200),
1266
1032
  /** La couleur du bandeau, en hexadécimal — l'interface décide du défaut. */
1267
- color: z20.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
1033
+ color: z19.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
1268
1034
  /** Le groupe parent, pour les regroupements imbriqués. */
1269
- parentId: z20.string().optional(),
1035
+ parentId: z19.string().optional(),
1270
1036
  /** Supprimé, mais conservé — comme une colonne. */
1271
- deletedAt: z20.string().optional()
1037
+ deletedAt: z19.string().optional()
1272
1038
  });
1273
- var KanbanBoardSchema = z20.object({
1274
- id: z20.string(),
1275
- name: z20.string().min(1).max(200),
1276
- description: z20.string().max(1e4).default(""),
1039
+ var KanbanBoardSchema = z19.object({
1040
+ id: z19.string(),
1041
+ name: z19.string().min(1).max(200),
1042
+ description: z19.string().max(1e4).default(""),
1277
1043
  /**
1278
1044
  * Le mode d'emploi du tableau, en texte libre : ce que veulent dire ses
1279
1045
  * colonnes, quand une carte a le droit d'avancer, les conventions de
@@ -1281,66 +1047,66 @@ var KanbanBoardSchema = z20.object({
1281
1047
  * le prompt des agents pour qu'ils travaillent selon les règles du tableau
1282
1048
  * plutôt que selon les leurs.
1283
1049
  */
1284
- instructions: z20.string().max(2e4).default(""),
1285
- columns: z20.array(KanbanColumnSchema).default([]),
1050
+ instructions: z19.string().max(2e4).default(""),
1051
+ columns: z19.array(KanbanColumnSchema).default([]),
1286
1052
  /** Les regroupements de colonnes — vide sur un tableau qui n'en a jamais eu. */
1287
- columnGroups: z20.array(KanbanColumnGroupSchema).default([]),
1288
- archived: z20.boolean().default(false),
1053
+ columnGroups: z19.array(KanbanColumnGroupSchema).default([]),
1054
+ archived: z19.boolean().default(false),
1289
1055
  /** Supprimé, mais conservé avec ses cartes — voir `deletedAt` sur la carte. */
1290
- deletedAt: z20.string().optional(),
1291
- createdAt: z20.string(),
1292
- updatedAt: z20.string()
1293
- });
1294
- var CreateKanbanBoardInput = z20.object({
1295
- name: z20.string().min(1).max(200),
1296
- description: z20.string().max(1e4).optional(),
1297
- instructions: z20.string().max(2e4).optional()
1298
- });
1299
- var UpdateKanbanBoardInput = z20.object({
1300
- id: z20.string(),
1301
- name: z20.string().min(1).max(200).optional(),
1302
- description: z20.string().max(1e4).optional(),
1303
- instructions: z20.string().max(2e4).optional(),
1304
- columns: z20.array(KanbanColumnSchema).optional(),
1305
- archived: z20.boolean().optional()
1306
- });
1307
- var KanbanCardLinkSchema = z20.object({
1308
- id: z20.string().max(128),
1056
+ deletedAt: z19.string().optional(),
1057
+ createdAt: z19.string(),
1058
+ updatedAt: z19.string()
1059
+ });
1060
+ var CreateKanbanBoardInput = z19.object({
1061
+ name: z19.string().min(1).max(200),
1062
+ description: z19.string().max(1e4).optional(),
1063
+ instructions: z19.string().max(2e4).optional()
1064
+ });
1065
+ var UpdateKanbanBoardInput = z19.object({
1066
+ id: z19.string(),
1067
+ name: z19.string().min(1).max(200).optional(),
1068
+ description: z19.string().max(1e4).optional(),
1069
+ instructions: z19.string().max(2e4).optional(),
1070
+ columns: z19.array(KanbanColumnSchema).optional(),
1071
+ archived: z19.boolean().optional()
1072
+ });
1073
+ var KanbanCardLinkSchema = z19.object({
1074
+ id: z19.string().max(128),
1309
1075
  /** Le tableau et la carte qui *dépendent* de l'autre. */
1310
- childBoardId: z20.string().max(64),
1311
- childCardId: z20.string().max(128),
1076
+ childBoardId: z19.string().max(64),
1077
+ childCardId: z19.string().max(128),
1312
1078
  /** Le tableau et la carte *dont* on dépend. */
1313
- parentBoardId: z20.string().max(64),
1314
- parentCardId: z20.string().max(128),
1315
- createdAt: z20.string(),
1316
- createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }).optional()
1317
- });
1318
- var KanbanCardRefSchema = z20.object({
1319
- cardId: z20.string().max(128),
1320
- boardId: z20.string().max(64),
1321
- boardName: z20.string().max(200),
1322
- columnId: z20.string().max(128),
1323
- columnTitle: z20.string().max(200),
1324
- title: z20.string().max(500),
1079
+ parentBoardId: z19.string().max(64),
1080
+ parentCardId: z19.string().max(128),
1081
+ createdAt: z19.string(),
1082
+ createdBy: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional()
1083
+ });
1084
+ var KanbanCardRefSchema = z19.object({
1085
+ cardId: z19.string().max(128),
1086
+ boardId: z19.string().max(64),
1087
+ boardName: z19.string().max(200),
1088
+ columnId: z19.string().max(128),
1089
+ columnTitle: z19.string().max(200),
1090
+ title: z19.string().max(500),
1325
1091
  /** Les mêmes informations qu'une ligne de tableau montre d'une carte d'ici. */
1326
- assignees: z20.array(z20.object({ id: z20.string().max(128), name: z20.string().max(200) })).default([]),
1327
- commentCount: z20.number().int().nonnegative().default(0)
1092
+ assignees: z19.array(z19.object({ id: z19.string().max(128), name: z19.string().max(200) })).default([]),
1093
+ commentCount: z19.number().int().nonnegative().default(0)
1328
1094
  });
1329
1095
 
1330
1096
  // ../../packages/shared/src/schemas/cloud-api-key.schema.ts
1331
- import { z as z21 } from "zod";
1332
- var CloudApiScopeSchema = z21.enum([
1097
+ import { z as z20 } from "zod";
1098
+ var CloudApiScopeSchema = z20.enum([
1333
1099
  "kanban:read",
1334
1100
  "kanban:write",
1335
1101
  "kanban:comment",
1336
1102
  "kanban:delete"
1337
1103
  ]);
1338
- var CloudApiKeySecretSchema = z21.string().regex(/^rk_[0-9a-f]{64}$/);
1339
- var CloudApiKeySchema = z21.object({
1340
- id: z21.string().max(128),
1341
- organizationId: z21.string().max(128),
1342
- name: z21.string().min(1).max(200),
1343
- scopes: z21.array(CloudApiScopeSchema).min(1).max(10),
1104
+ var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
1105
+ var CloudApiKeySchema = z20.object({
1106
+ id: z20.string().max(128),
1107
+ organizationId: z20.string().max(128),
1108
+ name: z20.string().min(1).max(200),
1109
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1344
1110
  /**
1345
1111
  * Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
1346
1112
  * l'organisation ».
@@ -1349,61 +1115,61 @@ var CloudApiKeySchema = z21.object({
1349
1115
  * c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
1350
1116
  * nommait plus que lui.
1351
1117
  */
1352
- boards: z21.array(z21.string().max(64)).max(200).nullable(),
1353
- createdAt: z21.string().max(64),
1118
+ boards: z20.array(z20.string().max(64)).max(200).nullable(),
1119
+ createdAt: z20.string().max(64),
1354
1120
  /** Dernier usage constaté, pour reconnaître une clé oubliée. */
1355
- lastUsedAt: z21.string().max(64).nullable(),
1121
+ lastUsedAt: z20.string().max(64).nullable(),
1356
1122
  /** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
1357
- createdBy: z21.object({ id: z21.string().max(128), name: z21.string().max(200) }),
1123
+ createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
1358
1124
  /** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
1359
- keyPreview: z21.string().max(8)
1125
+ keyPreview: z20.string().max(8)
1360
1126
  });
1361
- var CreatedCloudApiKeySchema = z21.object({
1127
+ var CreatedCloudApiKeySchema = z20.object({
1362
1128
  key: CloudApiKeySchema,
1363
1129
  secret: CloudApiKeySecretSchema
1364
1130
  });
1365
- var CreateCloudApiKeyInput = z21.object({
1366
- organizationId: z21.string().min(1).max(128),
1367
- name: z21.string().min(1).max(200),
1368
- scopes: z21.array(CloudApiScopeSchema).min(1).max(10),
1369
- boards: z21.array(z21.string().max(64)).max(200).nullable().default(null)
1131
+ var CreateCloudApiKeyInput = z20.object({
1132
+ organizationId: z20.string().min(1).max(128),
1133
+ name: z20.string().min(1).max(200),
1134
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
1135
+ boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
1370
1136
  });
1371
- var UpdateCloudApiKeyInput = z21.object({
1372
- id: z21.string().min(1).max(128),
1373
- name: z21.string().min(1).max(200).optional(),
1374
- scopes: z21.array(CloudApiScopeSchema).min(1).max(10).optional(),
1375
- boards: z21.array(z21.string().max(64)).max(200).nullable().optional()
1137
+ var UpdateCloudApiKeyInput = z20.object({
1138
+ id: z20.string().min(1).max(128),
1139
+ name: z20.string().min(1).max(200).optional(),
1140
+ scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
1141
+ boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
1376
1142
  });
1377
1143
 
1378
1144
  // ../../packages/shared/src/schemas/changelog.schema.ts
1379
- import { z as z22 } from "zod";
1380
- var ChangelogSurfaceSchema = z22.enum(["app", "cloud"]);
1381
- var ChangelogChangeKindSchema = z22.enum(["feature", "improvement", "fix", "breaking"]);
1382
- var ChangelogTextSchema = z22.object({
1383
- fr: z22.string().min(1).max(500),
1384
- en: z22.string().min(1).max(500)
1385
- });
1386
- var ChangelogChangeSchema = z22.object({
1145
+ import { z as z21 } from "zod";
1146
+ var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
1147
+ var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
1148
+ var ChangelogTextSchema = z21.object({
1149
+ fr: z21.string().min(1).max(500),
1150
+ en: z21.string().min(1).max(500)
1151
+ });
1152
+ var ChangelogChangeSchema = z21.object({
1387
1153
  kind: ChangelogChangeKindSchema,
1388
1154
  text: ChangelogTextSchema
1389
1155
  });
1390
1156
  var ChangelogDraftSchema = ChangelogChangeSchema.extend({
1391
- date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1157
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1392
1158
  title: ChangelogTextSchema.optional()
1393
1159
  });
1394
- var ChangelogReleaseSchema = z22.object({
1160
+ var ChangelogReleaseSchema = z21.object({
1395
1161
  surface: ChangelogSurfaceSchema,
1396
1162
  /** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
1397
- version: z22.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1163
+ version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
1398
1164
  /** Date de publication, `YYYY-MM-DD`. */
1399
- date: z22.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1165
+ date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
1400
1166
  /** Facultatif : une version peut s'annoncer par son seul numéro. */
1401
1167
  title: ChangelogTextSchema.optional(),
1402
1168
  /** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
1403
- changes: z22.array(ChangelogChangeSchema).min(1).max(50)
1169
+ changes: z21.array(ChangelogChangeSchema).min(1).max(50)
1404
1170
  });
1405
1171
  var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
1406
- changeCount: z22.number().int().nonnegative()
1172
+ changeCount: z21.number().int().nonnegative()
1407
1173
  });
1408
1174
 
1409
1175
  // ../../packages/shared/src/utils/crypto.ts
@@ -1661,9 +1427,9 @@ function interpolateBuiltins(text, values) {
1661
1427
  return values[name] ?? match;
1662
1428
  });
1663
1429
  }
1664
- function interpolateBuiltinsInEnv(env2, values) {
1430
+ function interpolateBuiltinsInEnv(env, values) {
1665
1431
  const out = {};
1666
- for (const [key, value] of Object.entries(env2)) {
1432
+ for (const [key, value] of Object.entries(env)) {
1667
1433
  out[key] = interpolateBuiltins(value, values);
1668
1434
  }
1669
1435
  return out;
@@ -1862,31 +1628,38 @@ function writeEntity(collection, id, entity) {
1862
1628
  applyToMap(current, next);
1863
1629
  }
1864
1630
 
1631
+ // ../../packages/shared/src/utils/service-links.ts
1632
+ var LOOPBACK_HOSTNAMES = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
1633
+ function dedupeKey(url) {
1634
+ const trimmed = url.trim().replace(/\/+$/, "");
1635
+ try {
1636
+ const parsed = new URL(trimmed);
1637
+ if (LOOPBACK_HOSTNAMES.has(parsed.hostname)) parsed.hostname = "localhost";
1638
+ return parsed.toString().replace(/\/+$/, "");
1639
+ } catch {
1640
+ return trimmed;
1641
+ }
1642
+ }
1643
+ function serviceLinks(service, host) {
1644
+ const served = new Set((service.localUrls ?? []).map((lu) => lu.port));
1645
+ const candidates = [
1646
+ ...(service.localUrls ?? []).map((lu) => ({ url: `https://${lu.url}`, source: "cloud" })),
1647
+ ...(service.ports ?? []).filter((port) => !served.has(port)).map((port) => ({ url: `http://${host}:${port}`, source: "port" })),
1648
+ ...service.url ? [{ url: service.url, source: "custom" }] : []
1649
+ ];
1650
+ const seen = /* @__PURE__ */ new Set();
1651
+ return candidates.filter(({ url }) => {
1652
+ const key = dedupeKey(url);
1653
+ if (seen.has(key)) return false;
1654
+ seen.add(key);
1655
+ return true;
1656
+ });
1657
+ }
1658
+ function primaryServiceLink(service, host) {
1659
+ return serviceLinks(service, host)[0]?.url ?? null;
1660
+ }
1661
+
1865
1662
  export {
1866
- env,
1867
- machineRoot,
1868
- localVaultRoot,
1869
- orgVaultRoot,
1870
- projectVaultRoot,
1871
- orgIdOfRoot,
1872
- vaultIdOfRoot,
1873
- vaultFor,
1874
- stampOrgCloud,
1875
- rememberOrgName,
1876
- readOrgNames,
1877
- rememberOrgLogo,
1878
- forgetOrgLogo,
1879
- readOrgLogos,
1880
- readOrgClouds,
1881
- listOrgVaults,
1882
- listCloudVaults,
1883
- allVaultRoots,
1884
- machineFilePath,
1885
- keyedFilePath,
1886
- legacyMachineFilePath,
1887
- ensureLocalVault,
1888
- keyRoot,
1889
- legacyVaultRoot,
1890
1663
  ProjectSchema,
1891
1664
  ScenarioGroupSchema,
1892
1665
  ScenarioNodeSchema,
@@ -1918,6 +1691,9 @@ export {
1918
1691
  COMPANION_RELAY_OPEN,
1919
1692
  COMPANION_RELAY_CLOSE,
1920
1693
  extractCompanionRelay,
1694
+ slugifyLauncherName,
1695
+ launcherIdFromName,
1696
+ deriveLauncherIdentity,
1921
1697
  nativeParsers,
1922
1698
  JSLogParser,
1923
1699
  interpolateBuiltinsInEnv,
@@ -1939,6 +1715,7 @@ export {
1939
1715
  EDITOR_BY_KEY,
1940
1716
  getCollection,
1941
1717
  readEntity,
1942
- writeEntity
1718
+ writeEntity,
1719
+ primaryServiceLink
1943
1720
  };
1944
- //# sourceMappingURL=chunk-NDO5VFZY.js.map
1721
+ //# sourceMappingURL=chunk-QRMG6GMX.js.map