@runeya/runeya 2.0.75 → 2.0.77

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 (209) hide show
  1. package/agent/index.js +11 -2
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-JUVAVUIQ.js +7 -0
  4. package/{chunk-E2SU5RSO.js → chunk-WDM637TW.js} +12 -3
  5. package/chunk-WDM637TW.js.map +1 -0
  6. package/{desktop-launcher-TM7AABMC.js → desktop-launcher-4BVDZ3W4.js} +8 -4
  7. package/desktop-launcher-4BVDZ3W4.js.map +1 -0
  8. package/index.js +8 -3
  9. package/index.js.map +1 -1
  10. package/package.json +1 -1
  11. package/{src-MEMRUBM6.js → src-WON4SLMI.js} +367 -95
  12. package/src-WON4SLMI.js.map +1 -0
  13. package/web/assets/{AgentScalarChatInterface.vue-CbsV-wvF.js → AgentScalarChatInterface.vue-BKtO8e-V.js} +1 -1
  14. package/web/assets/{AgentTerminalPage-CFX_cNje.js → AgentTerminalPage-2fGeLuFz.js} +1 -1
  15. package/web/assets/AiChatPage-su8lBLuu.js +1 -0
  16. package/web/assets/{AppLayout-C8SJH7E2.js → AppLayout-CVBdnnXe.js} +1 -1
  17. package/web/assets/{AuditPage-mPkN9IPs.js → AuditPage-ggADH3yd.js} +1 -1
  18. package/web/assets/CloudAccountPage-DeF7HGaQ.js +1 -0
  19. package/web/assets/{CloudAccountPage-DwfKS8Ui.js → CloudAccountPage-eLXfNifH.js} +1 -1
  20. package/web/assets/{CloudMessagingPage-BZda9W4V.js → CloudMessagingPage-B_5g7iun.js} +1 -1
  21. package/web/assets/{DashboardPage-BYoHvCSW.js → DashboardPage-Cl-oihCh.js} +1 -1
  22. package/web/assets/{DirectoryPickerDialog-GjBksDRF.js → DirectoryPickerDialog-BmC5PT-P.js} +1 -1
  23. package/web/assets/{EditorIcon-BGndPLGm.js → EditorIcon-BY3-sVPA.js} +1 -1
  24. package/web/assets/{EnvironmentForm-5X5MccdS.js → EnvironmentForm-BvSPE7Fj.js} +1 -1
  25. package/web/assets/{EnvironmentFormPage-pWcZotB8.js → EnvironmentFormPage-CjLt1Yvf.js} +1 -1
  26. package/web/assets/{EnvironmentListPage-D1u5GOUq.js → EnvironmentListPage-BX-pV6r7.js} +1 -1
  27. package/web/assets/{KanbanBoardPage-B61sIHjE.js → KanbanBoardPage-2muX0OfU.js} +3 -3
  28. package/web/assets/{KanbanListPage-Dsg1wA9V.js → KanbanListPage-Bd55W-g7.js} +1 -1
  29. package/web/assets/{LaunchProjectPage-BzLfT9xo.js → LaunchProjectPage-T_i4rXCK.js} +1 -1
  30. package/web/assets/{LaunchServicesPage-DxRtzyc-.js → LaunchServicesPage-BTOQlL77.js} +1 -1
  31. package/web/assets/{LogViewer-DCTx3ncv.js → LogViewer-CuFkYXkA.js} +1 -1
  32. package/web/assets/{OrgKeyPrompt-DGVXqIwV.js → OrgKeyPrompt-D-cJKqc2.js} +1 -1
  33. package/web/assets/{ProcessControls-CKHLGdip.js → ProcessControls-CSZGFSpk.js} +1 -1
  34. package/web/assets/{ProcessDetailPage-BTcbsw0H.js → ProcessDetailPage-B2cRaSa8.js} +1 -1
  35. package/web/assets/{ProcessMetrics-B0mOAjpt.js → ProcessMetrics-CbaSXK63.js} +1 -1
  36. package/web/assets/{ProjectDetailPage-Do50Toy3.js → ProjectDetailPage-CU5MwlKB.js} +1 -1
  37. package/web/assets/{ProjectListPage-FhR5Gkub.js → ProjectListPage-CxPnsbfh.js} +1 -1
  38. package/web/assets/{RandomJobTestPage-CT1XUQ7l.js → RandomJobTestPage-CYvyOioJ.js} +1 -1
  39. package/web/assets/{ScenarioEditorPage-CAZ18fLj.js → ScenarioEditorPage-BZtO-_y9.js} +1 -1
  40. package/web/assets/{SendToChatDialog-3VcAeiLB.js → SendToChatDialog-Da6SFoej.js} +1 -1
  41. package/web/assets/{ServiceControlsBar-DMibK9Gk.js → ServiceControlsBar-DBUmRI7E.js} +1 -1
  42. package/web/assets/ServiceDetailPage-C0OzNuXc.js +2 -0
  43. package/web/assets/{ServiceDetailPage-DVOQdgmZ.css → ServiceDetailPage-IU_BrMof.css} +1 -1
  44. package/web/assets/{ServiceFormPage-C3Av0wu_.js → ServiceFormPage-BMmeE5tj.js} +1 -1
  45. package/web/assets/SettingsPage-Cns9aESc.js +2063 -0
  46. package/web/assets/{SettingsPage-CeFOjH68.css → SettingsPage-DkzFCmSX.css} +1 -1
  47. package/web/assets/{UnlockPage-Cj9f3u9P.js → UnlockPage-BPW506si.js} +1 -1
  48. package/web/assets/{VariablesTable-_m1LCIc1.js → VariablesTable-CRWySand.js} +1 -1
  49. package/web/assets/{VaultMigrationPage-4-aYgpPb.js → VaultMigrationPage-B6ZfLdDp.js} +1 -1
  50. package/web/assets/{VersionBadge-D-5Wk-zP.js → VersionBadge-BySMTsnj.js} +1 -1
  51. package/web/assets/WikiPage-CASqiu3r.js +1 -0
  52. package/web/assets/{WikiView-Zx8Prvim.js → WikiView-DmspOj63.js} +1 -1
  53. package/web/assets/{add-scalar-classes-Bj8wq_Hs.js → add-scalar-classes-BDawSOVN.js} +3 -3
  54. package/web/assets/auth-errors-D_n5Naj5.js +1 -0
  55. package/web/assets/{autocomplete-CGdex9-e.js → autocomplete-BxToX__C.js} +1 -1
  56. package/web/assets/{basic-shape-diamond.svg-qeeRnNFT.js → basic-shape-diamond.svg-e2mztVJl.js} +1 -1
  57. package/web/assets/{basic-shape-hexagon.svg-CIlKhfGT.js → basic-shape-hexagon.svg-BabvvzO8.js} +1 -1
  58. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-BqolxHsi.js → basic-shape-primary-circle-ellipse-round.svg-qX_EIwRC.js} +1 -1
  59. package/web/assets/{basic-shape-primary-square-rectangle.svg-CpdZYdXX.js → basic-shape-primary-square-rectangle.svg-BC_lPlNz.js} +1 -1
  60. package/web/assets/{basic-shape-shield.svg-Dxhs7gEl.js → basic-shape-shield.svg-Cs-Q1jtG.js} +1 -1
  61. package/web/assets/{browser-I2oYlD2i.js → browser-Dny5CSfR.js} +1 -1
  62. package/web/assets/{browser-DN1U-HwX.js → browser-TQOmEABX.js} +1 -1
  63. package/web/assets/{card-DtzNVDSZ.js → card-C3_Lhxh1.js} +1 -1
  64. package/web/assets/{checkbox-GeePBqgX.js → checkbox-DPfaZ5M_.js} +1 -1
  65. package/web/assets/{chip-BHIwNcot.js → chip-DsGV0_Iw.js} +1 -1
  66. package/web/assets/{client-BDHmFNrH.js → client-DVldvprj.js} +1 -1
  67. package/web/assets/{cloud-chat.store-B20ZLeeR.js → cloud-chat.store-HRiNlTnA.js} +1 -1
  68. package/web/assets/{cloud-session-BjfhcCqc.js → cloud-session-byVQfdAX.js} +1 -1
  69. package/web/assets/{column-DXHLG_CF.js → column-0QpSlAL6.js} +1 -1
  70. package/web/assets/{computer-device-desktop-monitor.svg-cgtj7qaG.js → computer-device-desktop-monitor.svg-CmAS9W1F.js} +1 -1
  71. package/web/assets/{computer-device-desktop.svg-CtASuIzj.js → computer-device-desktop.svg-ByQvPTu0.js} +1 -1
  72. package/web/assets/{computer-device-laptop.svg-Bgrj-X1s.js → computer-device-laptop.svg-Be3DJfJS.js} +1 -1
  73. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BdGuG_w_.js → computer-device-mobile-phone-android-samsung-back.svg-Bg4HriyB.js} +1 -1
  74. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BRGfdLz4.js → computer-device-mobile-phone-android-samsung.svg-Cbs1ZC8K.js} +1 -1
  75. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-AqEKxnYo.js → computer-device-mobile-phone-iphone-x-back.svg-SrmNqd-k.js} +1 -1
  76. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-DWFt-koa.js → computer-device-mobile-phone-iphone-x.svg-CRbRsx9O.js} +1 -1
  77. package/web/assets/{computer-device-mobile-tablet-touch.svg-DJ52OpYh.js → computer-device-mobile-tablet-touch.svg-CYxQ_G-f.js} +1 -1
  78. package/web/assets/{computer-device-mobile-tablet.svg-Ce_rWOZi.js → computer-device-mobile-tablet.svg-8Y2qx2nG.js} +1 -1
  79. package/web/assets/{computer-device-network-ethernet-cat6.svg-DB9SlCtA.js → computer-device-network-ethernet-cat6.svg-DuMVeY9S.js} +1 -1
  80. package/web/assets/{computer-device-network-lan-www.svg-lHja183-.js → computer-device-network-lan-www.svg-CMl88oMx.js} +1 -1
  81. package/web/assets/{computer-device-network-wifi-connection.svg-B1zLcvJN.js → computer-device-network-wifi-connection.svg-BLKrhbzD.js} +1 -1
  82. package/web/assets/{computer-device-network-wifi-router.svg-Drrwd9xP.js → computer-device-network-wifi-router.svg-DegDkOS9.js} +1 -1
  83. package/web/assets/{cssMode-D9jO-uTl.js → cssMode-BXMOCv71.js} +1 -1
  84. package/web/assets/{divider-B0vBDWbW.js → divider-C9G7_D2G.js} +1 -1
  85. package/web/assets/{docx-preview-BTpCoAAq.js → docx-preview-DavEWOCt.js} +1 -1
  86. package/web/assets/{ecology-science-erlenmeyer-flask.svg--ysD_96O.js → ecology-science-erlenmeyer-flask.svg-DmbDAbFP.js} +1 -1
  87. package/web/assets/{fieldset-BFb-WHon.js → fieldset-oJKjCI7s.js} +1 -1
  88. package/web/assets/{freemarker2-DnkPMk4B.js → freemarker2-B8tfMW3C.js} +1 -1
  89. package/web/assets/{handlebars-Dsj_qiK6.js → handlebars-CePhsdSW.js} +1 -1
  90. package/web/assets/{html-t_OlpWku.js → html-571VCOQ9.js} +1 -1
  91. package/web/assets/{htmlMode-DRcQv-pv.js → htmlMode-CVxsAwkf.js} +1 -1
  92. package/web/assets/{image-flash-lightning.svg-6f9kbrTL.js → image-flash-lightning.svg-AnW8MOVQ.js} +1 -1
  93. package/web/assets/{image-picture-flower.svg-i7zms3Ho.js → image-picture-flower.svg-FiFJUYlQ.js} +1 -1
  94. package/web/assets/{index-GxI3bOA0.js → index-BGhTRiUv.js} +5 -5
  95. package/web/assets/{interface-alert-exclamation-diamond.svg-DqUMmCtJ.js → interface-alert-exclamation-diamond.svg-oGZV7xVw.js} +1 -1
  96. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-DzDl1xOr.js → interface-alert-exclamation-triangle-warning.svg-DAVdspM_.js} +1 -1
  97. package/web/assets/{interface-alert-information-circle.svg-DmCgkGPM.js → interface-alert-information-circle.svg-D18QJNgs.js} +1 -1
  98. package/web/assets/{interface-award-crown.svg-C9Fbg_RB.js → interface-award-crown.svg-CA1wQid9.js} +1 -1
  99. package/web/assets/{interface-bookmark.svg-MqIoLfKE.js → interface-bookmark-tag.svg-B7cb2okO.js} +1 -1
  100. package/web/assets/{interface-bookmark-tag.svg-3gViLsvg.js → interface-bookmark.svg-C9irM7Rx.js} +1 -1
  101. package/web/assets/{interface-calendar-date-one.svg-B9sbfbL9.js → interface-calendar-date-one.svg-DE5gBV6v.js} +1 -1
  102. package/web/assets/{interface-content-book-open-pages.svg-1vSNOl7u.js → interface-content-book-open-pages.svg-BFz7YanP.js} +1 -1
  103. package/web/assets/{interface-content-book-page.svg-DIEM6xdS.js → interface-content-book-page.svg-XsbyPJwv.js} +1 -1
  104. package/web/assets/{interface-content-file.svg-7VSdTCse.js → interface-content-file.svg-D6q2wWLi.js} +1 -1
  105. package/web/assets/{interface-content-folder.svg-9g1Oeyk0.js → interface-content-folder.svg-CHkU4LKW.js} +1 -1
  106. package/web/assets/interface-content-folder.svg-Dnf4fgjM.js +1 -0
  107. package/web/assets/{interface-copy-clipboard.svg-aMsLLdqD.js → interface-copy-clipboard.svg-DBtOk_bA.js} +1 -1
  108. package/web/assets/{interface-edit-attachment.svg-CVDpgAHo.js → interface-edit-attachment.svg-Dz3-OOve.js} +1 -1
  109. package/web/assets/{interface-edit-binocular.svg-DCXRjTEQ.js → interface-edit-binocular.svg-ByBP8ehM.js} +1 -1
  110. package/web/assets/{interface-edit-magic-wand.svg-CDrPrWdl.js → interface-edit-magic-wand.svg-DfcOCpiG.js} +1 -1
  111. package/web/assets/{interface-edit-tool-paint-roller.svg-UvpUIvX7.js → interface-edit-tool-paint-roller.svg-CRGZNjWp.js} +1 -1
  112. package/web/assets/{interface-edit-tool-pencil.svg-vPXMlfGL.js → interface-edit-tool-pencil.svg-zsOWLIqc.js} +1 -1
  113. package/web/assets/{interface-favorite-award.svg-CZOrIvmM.js → interface-favorite-award.svg-DLVKZn5N.js} +1 -1
  114. package/web/assets/{interface-favorite-flag.svg-CP5RiVtW.js → interface-favorite-flag.svg-C5YPye-o.js} +1 -1
  115. package/web/assets/{interface-favorite-heart.svg-B9yhOFXg.js → interface-favorite-heart.svg-XX875VH2.js} +1 -1
  116. package/web/assets/{interface-favorite-star.svg-B5Iv-JuP.js → interface-favorite-star.svg-CwodnhEd.js} +1 -1
  117. package/web/assets/{interface-favorite-stars-sparkles.svg-Cipb48vc.js → interface-favorite-stars-sparkles.svg-CaHoULcK.js} +1 -1
  118. package/web/assets/{interface-hierarchy-flowchart.svg-BCEm8EoC.js → interface-hierarchy-flowchart.svg-Dw0Hiig6.js} +1 -1
  119. package/web/assets/{interface-home-house.svg-Bh5-1B_X.js → interface-home-house.svg-Dr6ONbPr.js} +1 -1
  120. package/web/assets/{interface-hyperlink.svg-DmOAt5ZG.js → interface-hyperlink.svg-DPlIj_h5.js} +1 -1
  121. package/web/assets/{interface-lighting-brightness.svg-DhHJhRaa.js → interface-lighting-brightness.svg-lTDIWcG1.js} +1 -1
  122. package/web/assets/{interface-lock-closed.svg-CDyidwZF.js → interface-lock-closed.svg-DbLIOlp2.js} +1 -1
  123. package/web/assets/{interface-lock-open-unlock.svg-Y-4_5Lj-.js → interface-lock-open-unlock.svg-AtzqURqy.js} +1 -1
  124. package/web/assets/{interface-login-key.svg-C8M65861.js → interface-login-key.svg-m-Fs6HY3.js} +1 -1
  125. package/web/assets/{interface-search.svg-gkEckiep.js → interface-search.svg-DFUBMy6X.js} +1 -1
  126. package/web/assets/{interface-setting-cog.svg-B42Ru0QR.js → interface-setting-cog.svg-DZ0_Nd7i.js} +1 -1
  127. package/web/assets/{interface-share-megaphone-bullhorn.svg-BXgemPpH.js → interface-share-megaphone-bullhorn.svg-YrYkQDPm.js} +1 -1
  128. package/web/assets/{interface-share-rocket.svg-BpCNXSJv.js → interface-share-rocket.svg-DRDHefw2.js} +1 -1
  129. package/web/assets/{interface-share-satellite.svg-UqTKwPgB.js → interface-share-satellite.svg-CVNiRXqB.js} +1 -1
  130. package/web/assets/{interface-share-space-ship.svg-LjpxJCju.js → interface-share-space-ship.svg-CpgNADXr.js} +1 -1
  131. package/web/assets/{interface-share.svg-aTfbQymz.js → interface-share.svg-Djd0yOl3.js} +1 -1
  132. package/web/assets/{interface-signal-square.svg-BV84IA7I.js → interface-signal-square.svg-zPFYxRs3.js} +1 -1
  133. package/web/assets/{interface-time-clock-circle.svg-B9p8ScHG.js → interface-time-clock-circle.svg-D0MsoIC_.js} +1 -1
  134. package/web/assets/{interface-time-hour-glass.svg-4jjplFkz.js → interface-time-hour-glass.svg-CfqSkT16.js} +1 -1
  135. package/web/assets/{interface-users-multiple.svg-D4nN3V4C.js → interface-users-multiple.svg-C_Tspx5q.js} +1 -1
  136. package/web/assets/{interface-weather-moon.svg-DyfDXGyQ.js → interface-weather-moon.svg-ChEcMLSN.js} +1 -1
  137. package/web/assets/{javascript-DxiQ5ZFe.js → javascript-pUCsYoU8.js} +1 -1
  138. package/web/assets/{jsonMode-R5AgiRt8.js → jsonMode-C0uzq8yR.js} +1 -1
  139. package/web/assets/{liquid-BPHysTNM.js → liquid-C5Ev6uFa.js} +1 -1
  140. package/web/assets/{lspLanguageFeatures-DVsCw49O.js → lspLanguageFeatures-DYaT_fqo.js} +1 -1
  141. package/web/assets/{mail-chat-bubble-square.svg-Bgj_m98i.js → mail-chat-bubble-square.svg-CuZEWYk3.js} +1 -1
  142. package/web/assets/{mail-send-email-paper-airplane.svg-Cmgs5A9c.js → mail-send-email-paper-airplane.svg-CENY8qyv.js} +1 -1
  143. package/web/assets/{mail-send-envelope.svg-DXtZA2de.js → mail-send-envelope.svg-B0p8Ko-e.js} +1 -1
  144. package/web/assets/{mdx-BmXvPH9O.js → mdx-DKUSX-0M.js} +1 -1
  145. package/web/assets/{message-DUmeTDJC.js → message-BfLHvehS.js} +1 -1
  146. package/web/assets/{minus-_526hTAz.js → minus-Cn4do0vQ.js} +1 -1
  147. package/web/assets/{modal-DWnz3LAY.js → modal-CveVDU3j.js} +1 -1
  148. package/web/assets/modal-DxPwpeSc.js +1 -0
  149. package/web/assets/{money-cashier-receipt.svg-BKLBvJ6k.js → money-cashier-receipt.svg-D6MTv6ic.js} +1 -1
  150. package/web/assets/{money-currency-dollar-pay.svg-Dy__wPDu.js → money-currency-dollar-pay.svg-C0CT_Umg.js} +1 -1
  151. package/web/assets/{money-graph-arrow-increase.svg-CY6efGa2.js → money-graph-arrow-increase.svg-B1pQ-RCg.js} +1 -1
  152. package/web/assets/{money-graph-bar-chart-increase.svg-DeWwVE-h.js → money-graph-bar-chart-increase.svg-Df0BEyR6.js} +1 -1
  153. package/web/assets/{multiselect-sCEC4UBn.js → multiselect-CJ4zRD9O.js} +1 -1
  154. package/web/assets/{nature-ecology-leaf.svg-CiA8xWzT.js → nature-ecology-leaf.svg-B7IiKgr5.js} +1 -1
  155. package/web/assets/{password-BjWenHiO.js → password-UNoAlO0Z.js} +1 -1
  156. package/web/assets/{phone-telephone.svg-DFkp7qtJ.js → phone-telephone.svg-CULSkJvU.js} +1 -1
  157. package/web/assets/{plus-CM2XaJYz.js → plus-CCNhU8WS.js} +1 -1
  158. package/web/assets/process.store-xpYTF7jB.js +1 -0
  159. package/web/assets/{programming-bug.svg-iTd4z5Bn.js → programming-bug.svg-BkAWg-zz.js} +1 -1
  160. package/web/assets/{programming-cloud.svg-BhZ7wR70.js → programming-cloud.svg-CElVVYxR.js} +1 -1
  161. package/web/assets/{programming-computer-database-server.svg-CNFgEADa.js → programming-computer-database-server.svg-DTOugM3g.js} +1 -1
  162. package/web/assets/{programming-computer-database.svg-BLUoB0S3.js → programming-computer-database.svg-BEtc2j2j.js} +1 -1
  163. package/web/assets/{programming-module-four-layout.svg---ShQt1c.js → programming-module-four-layout.svg-CfMkXMQV.js} +1 -1
  164. package/web/assets/{programming-module-three.svg-Q915QePI.js → programming-module-three.svg-BEGzxEbd.js} +1 -1
  165. package/web/assets/{programming-module.svg-DGlB0gXU.js → programming-module.svg-WcMyqgA5.js} +1 -1
  166. package/web/assets/{programming-script-code.svg-BXqoqM0a.js → programming-script-code.svg-BlKU_DbS.js} +1 -1
  167. package/web/assets/{python-Bkcdd-GB.js → python-CX7nl3fS.js} +1 -1
  168. package/web/assets/{razor-Dgss4zhv.js → razor-1qMzYaOc.js} +1 -1
  169. package/web/assets/router-BGicJbXI.js +1 -0
  170. package/web/assets/settings-scope-S5iFQlQN.js +1 -0
  171. package/web/assets/settings.store-D0HZbmo_.js +1 -0
  172. package/web/assets/{shopping-cart.svg-DFzDn0s3.js → shopping-cart.svg-DVuGrIwZ.js} +1 -1
  173. package/web/assets/{shopping-gift-present.svg-CzoIs_fz.js → shopping-gift-present.svg-D6-559VB.js} +1 -1
  174. package/web/assets/{shopping-shipping-box-parcel-package.svg-K83gZueW.js → shopping-shipping-box-parcel-package.svg-BCqjCO2V.js} +1 -1
  175. package/web/assets/{src-CrlKkUl0.js → src-DXup2ujI.js} +1 -1
  176. package/web/assets/{src-Bn8iaJpP.js → src-wtcksrJO.js} +1 -1
  177. package/web/assets/{tabpanel-B8p6e6cv.js → tabpanel-c1kswNhr.js} +1 -1
  178. package/web/assets/{tag-new-circle.svg-BgOrOZ_K.js → tag-new-circle.svg-DJekwjr2.js} +1 -1
  179. package/web/assets/{toggleswitch-BKr-TR6_.js → toggleswitch-CyIjsk3N.js} +1 -1
  180. package/web/assets/{travel-map-earth-globe.svg-DZQQPdM1.js → travel-map-earth-globe.svg-CgYzLmEQ.js} +1 -1
  181. package/web/assets/trpc-BFxMUfYl.js +1 -0
  182. package/web/assets/{tsMode-BO9AVz77.js → tsMode-Dwc3vyi8.js} +1 -1
  183. package/web/assets/{typescript-BVxNZ4YH.js → typescript-B4Szu53E.js} +1 -1
  184. package/web/assets/useAiChatDrawer-BJrQ-k2R.js +1 -0
  185. package/web/assets/{useCloudOrg-CXnReqbv.js → useCloudOrg-Basge1Jc.js} +4 -4
  186. package/web/assets/{useCloudOrg-CYZgY69j.css → useCloudOrg-CJNAt-cW.css} +1 -1
  187. package/web/assets/{useProjectCatalog-Cw3YywvF.js → useProjectCatalog-Chvnlk7w.js} +1 -1
  188. package/web/assets/{xml-Bv9vIo84.js → xml-Cmwfj5No.js} +1 -1
  189. package/web/assets/{yaml-Brrhr_WI.js → yaml-BwAEhb0d.js} +1 -1
  190. package/web/index.html +1 -1
  191. package/agent-manager-DM6C7BTF.js +0 -7
  192. package/chunk-E2SU5RSO.js.map +0 -1
  193. package/desktop-launcher-TM7AABMC.js.map +0 -1
  194. package/src-MEMRUBM6.js.map +0 -1
  195. package/web/assets/AiChatPage-aNp-79bj.js +0 -1
  196. package/web/assets/CloudAccountPage--8gMHEov.js +0 -1
  197. package/web/assets/ServiceDetailPage-DzTdnnmK.js +0 -2
  198. package/web/assets/SettingsPage-Cb4cXWBn.js +0 -2063
  199. package/web/assets/WikiPage-Dr0BjWqx.js +0 -1
  200. package/web/assets/auth-errors-C98TqTeb.js +0 -1
  201. package/web/assets/interface-content-folder.svg-CAHYAOYi.js +0 -1
  202. package/web/assets/modal-SaIxK3oE.js +0 -1
  203. package/web/assets/process.store-BdrVU3j7.js +0 -1
  204. package/web/assets/router-CkyZcpB5.js +0 -1
  205. package/web/assets/settings-scope-UnTi3EI6.js +0 -1
  206. package/web/assets/settings.store-Bd6azayI.js +0 -1
  207. package/web/assets/trpc-CPHyoQZL.js +0 -1
  208. package/web/assets/useAiChatDrawer-tj6s1XKR.js +0 -1
  209. /package/{agent-manager-DM6C7BTF.js.map → agent-manager-JUVAVUIQ.js.map} +0 -0
@@ -110,7 +110,7 @@ import {
110
110
  wasRead,
111
111
  withDeprecatedAliases,
112
112
  writeEntity
113
- } from "./chunk-E2SU5RSO.js";
113
+ } from "./chunk-WDM637TW.js";
114
114
 
115
115
  // ../server/src/create-server.ts
116
116
  import express from "express";
@@ -2432,6 +2432,9 @@ var projectRouter = router({
2432
2432
  import { z as z4 } from "zod";
2433
2433
  import { TRPCError as TRPCError4 } from "@trpc/server";
2434
2434
 
2435
+ // ../server/src/services/log-parser-store.ts
2436
+ import { randomUUID as randomUUID3 } from "crypto";
2437
+
2435
2438
  // ../server/src/services/settings-manager.ts
2436
2439
  import { readFile as readFile7, writeFile as writeFile7, rename as rename7, mkdir as mkdir7, chmod as chmod6 } from "fs/promises";
2437
2440
  import { join as join8 } from "path";
@@ -2569,6 +2572,170 @@ var SettingsManager = class {
2569
2572
  };
2570
2573
  var settingsManager = new SettingsManager();
2571
2574
 
2575
+ // ../server/src/services/log-parser-store.ts
2576
+ function isShareable(parser) {
2577
+ return parser.builtin !== true && !parser.id.startsWith("native:");
2578
+ }
2579
+ var LogParserStore = class {
2580
+ localListeners = /* @__PURE__ */ new Set();
2581
+ changeListeners = /* @__PURE__ */ new Set();
2582
+ /**
2583
+ * S'abonner aux écritures *locales* — celles nées ici.
2584
+ *
2585
+ * C'est ce qu'écoute la synchronisation : réagir aussi à ce qui arrive du
2586
+ * document la ferait repartir aussitôt vers ce document, en boucle.
2587
+ */
2588
+ onLocalChange(fn) {
2589
+ this.localListeners.add(fn);
2590
+ return () => this.localListeners.delete(fn);
2591
+ }
2592
+ /**
2593
+ * S'abonner à toute écriture, d'où qu'elle vienne.
2594
+ *
2595
+ * C'est ce qu'écoute l'interface : un parseur écrit par un collègue arrive
2596
+ * par le document, donc silencieusement pour la synchronisation — mais un
2597
+ * écran qui ne l'apprend qu'au prochain montage montre une liste fausse
2598
+ * pendant tout ce temps, alors même que les services, eux, se rafraîchissent.
2599
+ */
2600
+ onChanged(fn) {
2601
+ this.changeListeners.add(fn);
2602
+ return () => this.changeListeners.delete(fn);
2603
+ }
2604
+ notify(vault, local) {
2605
+ if (local) {
2606
+ for (const fn of this.localListeners) {
2607
+ try {
2608
+ fn();
2609
+ } catch (err) {
2610
+ console.error("[log-parser-store] listener failed:", err.message);
2611
+ }
2612
+ }
2613
+ }
2614
+ for (const fn of this.changeListeners) {
2615
+ try {
2616
+ fn(vault);
2617
+ } catch (err) {
2618
+ console.error("[log-parser-store] listener failed:", err.message);
2619
+ }
2620
+ }
2621
+ }
2622
+ /** Les parseurs d'un coffre — ceux de l'organisation, ou ceux du poste. */
2623
+ async list(vault) {
2624
+ const settings = await settingsManager.getSettings(vault);
2625
+ return settings.logParsers ?? [];
2626
+ }
2627
+ async get(id, vault) {
2628
+ return (await this.list(vault)).find((p) => p.id === id) ?? null;
2629
+ }
2630
+ async write(parsers, vault, silent = false) {
2631
+ const settings = await settingsManager.getSettings(vault);
2632
+ await settingsManager.saveSettings({ ...settings, logParsers: parsers }, vault);
2633
+ this.notify(vault, !silent);
2634
+ }
2635
+ async create(input, vault) {
2636
+ const now = /* @__PURE__ */ new Date();
2637
+ if (input.builtin) {
2638
+ throw new Error("A parser created here is never a built-in one");
2639
+ }
2640
+ const parser = JSLogParserSchema.parse({
2641
+ ...input,
2642
+ id: randomUUID3(),
2643
+ createdAt: now,
2644
+ updatedAt: now
2645
+ });
2646
+ await this.write([...await this.list(vault), parser], vault);
2647
+ return parser;
2648
+ }
2649
+ async update(id, patch, vault) {
2650
+ const parsers = await this.list(vault);
2651
+ const index = parsers.findIndex((p) => p.id === id);
2652
+ if (index === -1) return null;
2653
+ const updated = JSLogParserSchema.parse({
2654
+ ...parsers[index],
2655
+ ...patch,
2656
+ id,
2657
+ updatedAt: /* @__PURE__ */ new Date()
2658
+ });
2659
+ const next = [...parsers];
2660
+ next[index] = updated;
2661
+ await this.write(next, vault);
2662
+ return updated;
2663
+ }
2664
+ async delete(id, vault) {
2665
+ const parsers = await this.list(vault);
2666
+ const next = parsers.filter((p) => p.id !== id);
2667
+ if (next.length === parsers.length) return false;
2668
+ await this.write(next, vault);
2669
+ return true;
2670
+ }
2671
+ // ---- Synchronisation --------------------------------------------------
2672
+ /**
2673
+ * Écrire ce que le document de l'organisation porte.
2674
+ *
2675
+ * Silencieux et gardé par une comparaison : réveiller les écoutants ici
2676
+ * relancerait la réconciliation qui vient de produire cette écriture, et un
2677
+ * document identique au disque ne mérite pas un fichier réécrit.
2678
+ */
2679
+ async applyRemoteUpsert(id, fields, orgId) {
2680
+ const parsed = JSLogParserSchema.safeParse({ ...fields, id });
2681
+ if (!parsed.success) {
2682
+ console.warn("[log-parser-store] rejected a remote parser %s: %s", id, parsed.error.message);
2683
+ return;
2684
+ }
2685
+ if (!isShareable(parsed.data)) return;
2686
+ const parsers = await this.list(orgId);
2687
+ const index = parsers.findIndex((p) => p.id === id);
2688
+ if (index !== -1 && sameParser(parsers[index], parsed.data)) return;
2689
+ const next = [...parsers];
2690
+ if (index === -1) next.push(parsed.data);
2691
+ else next[index] = parsed.data;
2692
+ await this.write(next, orgId, true);
2693
+ }
2694
+ async applyRemoteDelete(id, orgId) {
2695
+ const parsers = await this.list(orgId);
2696
+ const next = parsers.filter((p) => p.id !== id);
2697
+ if (next.length === parsers.length) return;
2698
+ await this.write(next, orgId, true);
2699
+ }
2700
+ /**
2701
+ * Remonter les parseurs du poste dans les organisations de cette machine.
2702
+ *
2703
+ * Un déplacement, pas une copie : le même parseur des deux côtés ferait deux
2704
+ * vérités qui divergent au premier changement, et la liste du poste
2705
+ * ressusciterait à chaque connexion celui qu'un membre vient de supprimer
2706
+ * pour toute l'équipe. Une fois la machine vidée, il n'y a plus rien à
2707
+ * remonter — l'opération peut donc être rejouée sans dégât.
2708
+ *
2709
+ * Vers *toutes* les organisations liées, chacune recevant sa copie : les
2710
+ * coffres ne communiquent pas, et rien ne dit laquelle des deux était visée.
2711
+ */
2712
+ async migrateMachineParsersInto(orgIds) {
2713
+ if (orgIds.length === 0) return;
2714
+ const all = await this.list();
2715
+ if (all.length === 0) return;
2716
+ const machineParsers = all.filter(isShareable);
2717
+ for (const orgId of orgIds) {
2718
+ const existing = await this.list(orgId);
2719
+ const known = new Set(existing.map((p) => p.id));
2720
+ const added = machineParsers.filter((p) => !known.has(p.id));
2721
+ if (added.length === 0) continue;
2722
+ await this.write([...existing, ...added], orgId, true);
2723
+ }
2724
+ await this.write(all.filter((p) => !isShareable(p)), void 0, true);
2725
+ if (machineParsers.length > 0) {
2726
+ console.log(
2727
+ "[log-parser-store] moved %d machine parser(s) into organization(s): %s",
2728
+ machineParsers.length,
2729
+ orgIds.join(", ")
2730
+ );
2731
+ }
2732
+ }
2733
+ };
2734
+ function sameParser(a, b) {
2735
+ return a.name === b.name && a.code === b.code && a.enabled === b.enabled && (a.description ?? "") === (b.description ?? "") && a.updatedAt.getTime() === b.updatedAt.getTime();
2736
+ }
2737
+ var logParserStore = new LogParserStore();
2738
+
2572
2739
  // ../server/src/services/service-builtins.ts
2573
2740
  function buildServerBuiltins(input) {
2574
2741
  const { service, siblings, projectName, environmentName, agentName, host } = input;
@@ -2609,7 +2776,7 @@ import { isAbsolute as isAbsolute3 } from "path";
2609
2776
  import { isAbsolute as isAbsolute2, join as join10, dirname as dirname5 } from "path";
2610
2777
 
2611
2778
  // ../server/src/services/conversation-store.ts
2612
- import { randomUUID as randomUUID3 } from "crypto";
2779
+ import { randomUUID as randomUUID4 } from "crypto";
2613
2780
  import { readFile as readFile8, writeFile as writeFile8, rename as rename8, mkdir as mkdir8, chmod as chmod7 } from "fs/promises";
2614
2781
  import { dirname as dirname4, join as join9 } from "path";
2615
2782
  import { EventEmitter as EventEmitter2 } from "events";
@@ -2942,7 +3109,7 @@ ${new Error("trace").stack}`
2942
3109
  await this.load();
2943
3110
  const now = Date.now();
2944
3111
  const conv = {
2945
- id: randomUUID3(),
3112
+ id: randomUUID4(),
2946
3113
  projectId,
2947
3114
  title: title ?? "New conversation",
2948
3115
  messages: [],
@@ -3104,8 +3271,9 @@ async function resolveServiceVariables(service) {
3104
3271
  }
3105
3272
  try {
3106
3273
  if (service.parserIds && service.parserIds.length > 0) {
3107
- const settings = await settingsManager.getSettings();
3108
- const allParsers = [...nativeParsers, ...settings.logParsers || []];
3274
+ const vault = project?.orgId ?? void 0;
3275
+ const parsers = await logParserStore.list(vault);
3276
+ const allParsers = [...nativeParsers, ...parsers];
3109
3277
  const resolvedParsers = service.parserIds.map((id) => allParsers.find((p) => p.id === id)).filter((p) => p !== void 0);
3110
3278
  resolvedService = { ...resolvedService, resolvedLogParsers: resolvedParsers };
3111
3279
  }
@@ -4556,6 +4724,12 @@ async function setLanMode(enabled) {
4556
4724
 
4557
4725
  // ../server/src/trpc/routers/settings.ts
4558
4726
  var NotificationPreferencesPatchSchema = NotificationPreferencesSchema.partial().strict();
4727
+ function listWithOrigin(parsers, vault) {
4728
+ return [
4729
+ ...nativeParsers.map((p) => ({ ...p, origin: "native" })),
4730
+ ...parsers.map((p) => ({ ...p, origin: vault ? "org" : "machine" }))
4731
+ ];
4732
+ }
4559
4733
  function maskApiKey2(plaintext) {
4560
4734
  if (plaintext.length <= 8) return "****";
4561
4735
  return plaintext.slice(0, 4) + "****" + plaintext.slice(-4);
@@ -4648,17 +4822,63 @@ var settingsRouter = router({
4648
4822
  }),
4649
4823
  /**
4650
4824
  * List all parsers
4825
+ *
4826
+ * Les natifs, puis ceux du coffre visé. L'origine accompagne chacun : un
4827
+ * parseur d'organisation se modifie pour toute l'équipe, et l'interface doit
4828
+ * pouvoir le dire avant que quelqu'un le change sans le savoir.
4651
4829
  */
4652
- listParsers: protectedProcedure.query(async () => {
4653
- const settings = await settingsManager.getSettings();
4654
- return [...nativeParsers, ...settings.logParsers || []];
4830
+ listParsers: protectedProcedure.input(z11.object(ScopeShape).optional()).query(async ({ input }) => {
4831
+ const vault = await scopeOf(input);
4832
+ return listWithOrigin(await logParserStore.list(vault), vault);
4833
+ }),
4834
+ /**
4835
+ * Les parseurs du coffre visé, à chaque fois qu'ils changent.
4836
+ *
4837
+ * Les services arrivent en temps réel, et un parseur écrit par un collègue
4838
+ * atteint le disque tout aussi vite ; sans ce flux, seul l'écran resterait en
4839
+ * retard — affichant une liste dans laquelle le parseur qu'un service vient
4840
+ * de référencer n'existe pas encore.
4841
+ */
4842
+ onParsersChanged: protectedProcedure.input(z11.object(ScopeShape).optional()).subscription(async function* ({ input, signal }) {
4843
+ const vault = await scopeOf(input);
4844
+ let pending = true;
4845
+ let wake = null;
4846
+ const off = logParserStore.onChanged((touched) => {
4847
+ if (touched !== vault) return;
4848
+ pending = true;
4849
+ if (wake) {
4850
+ wake();
4851
+ wake = null;
4852
+ }
4853
+ });
4854
+ const onAbort = () => {
4855
+ if (wake) {
4856
+ wake();
4857
+ wake = null;
4858
+ }
4859
+ };
4860
+ signal?.addEventListener("abort", onAbort);
4861
+ try {
4862
+ while (!signal?.aborted) {
4863
+ if (pending) {
4864
+ pending = false;
4865
+ yield listWithOrigin(await logParserStore.list(vault), vault);
4866
+ } else {
4867
+ await new Promise((resolve7) => {
4868
+ wake = resolve7;
4869
+ });
4870
+ }
4871
+ }
4872
+ } finally {
4873
+ off();
4874
+ signal?.removeEventListener("abort", onAbort);
4875
+ }
4655
4876
  }),
4656
4877
  /**
4657
4878
  * Get single parser by ID
4658
4879
  */
4659
- getParser: protectedProcedure.input(z11.object({ id: z11.string().max(128) })).query(async ({ input }) => {
4660
- const settings = await settingsManager.getSettings();
4661
- const parser = (settings.logParsers || []).find((p) => p.id === input.id);
4880
+ getParser: protectedProcedure.input(z11.object({ id: z11.string().max(128), ...ScopeShape })).query(async ({ input }) => {
4881
+ const parser = await logParserStore.get(input.id, await scopeOf(input));
4662
4882
  if (!parser) {
4663
4883
  throw new TRPCError8({ code: "NOT_FOUND", message: `Parser not found: ${input.id}` });
4664
4884
  }
@@ -4672,25 +4892,13 @@ var settingsRouter = router({
4672
4892
  id: true,
4673
4893
  createdAt: true,
4674
4894
  updatedAt: true
4675
- })
4895
+ }).extend(ScopeShape)
4676
4896
  ).mutation(async ({ input }) => {
4677
- if (!input.code.trim()) {
4897
+ const { orgId, projectId, ...fields } = input;
4898
+ if (!fields.code.trim()) {
4678
4899
  throw new TRPCError8({ code: "BAD_REQUEST", message: "Parser code cannot be empty" });
4679
4900
  }
4680
- const id = `parser-${Date.now()}-${Math.random().toString(36).substring(7)}`;
4681
- const now = /* @__PURE__ */ new Date();
4682
- const parser = {
4683
- id,
4684
- ...input,
4685
- createdAt: now,
4686
- updatedAt: now
4687
- };
4688
- const settings = await settingsManager.getSettings();
4689
- await settingsManager.saveSettings({
4690
- ...settings,
4691
- logParsers: [...settings.logParsers || [], parser]
4692
- });
4693
- return parser;
4901
+ return logParserStore.create(fields, await scopeOf({ orgId, projectId }));
4694
4902
  }),
4695
4903
  /**
4696
4904
  * Update existing parser
@@ -4699,53 +4907,32 @@ var settingsRouter = router({
4699
4907
  JSLogParserSchema.omit({
4700
4908
  createdAt: true,
4701
4909
  updatedAt: true
4702
- }).partial().required({ id: true })
4910
+ }).partial().required({ id: true }).extend(ScopeShape)
4703
4911
  ).mutation(async ({ input }) => {
4704
- const settings = await settingsManager.getSettings();
4705
- const parserIndex = (settings.logParsers || []).findIndex(
4706
- (p) => p.id === input.id
4707
- );
4708
- if (parserIndex === -1) {
4709
- throw new TRPCError8({ code: "NOT_FOUND", message: `Parser not found: ${input.id}` });
4710
- }
4711
- if (input.id.startsWith("native:")) {
4912
+ const { id, orgId, projectId, ...patch } = input;
4913
+ if (id.startsWith("native:")) {
4712
4914
  throw new TRPCError8({ code: "FORBIDDEN", message: "Cannot modify built-in parsers" });
4713
4915
  }
4714
- const existing = (settings.logParsers || [])[parserIndex];
4715
- if (input.code && !input.code.trim()) {
4916
+ if (patch.code !== void 0 && !patch.code.trim()) {
4716
4917
  throw new TRPCError8({ code: "BAD_REQUEST", message: "Parser code cannot be empty" });
4717
4918
  }
4718
- const updated = {
4719
- ...existing,
4720
- ...input,
4721
- updatedAt: /* @__PURE__ */ new Date()
4722
- };
4723
- const newParsers = [...settings.logParsers || []];
4724
- newParsers[parserIndex] = updated;
4725
- await settingsManager.saveSettings({
4726
- ...settings,
4727
- logParsers: newParsers
4728
- });
4919
+ const updated = await logParserStore.update(id, patch, await scopeOf({ orgId, projectId }));
4920
+ if (!updated) {
4921
+ throw new TRPCError8({ code: "NOT_FOUND", message: `Parser not found: ${id}` });
4922
+ }
4729
4923
  return updated;
4730
4924
  }),
4731
4925
  /**
4732
4926
  * Delete parser by ID
4733
4927
  */
4734
- deleteParser: protectedProcedure.input(z11.object({ id: z11.string().max(128) })).mutation(async ({ input }) => {
4735
- const settings = await settingsManager.getSettings();
4736
- const newParsers = (settings.logParsers || []).filter(
4737
- (p) => p.id !== input.id
4738
- );
4928
+ deleteParser: protectedProcedure.input(z11.object({ id: z11.string().max(128), ...ScopeShape })).mutation(async ({ input }) => {
4739
4929
  if (input.id.startsWith("native:")) {
4740
4930
  throw new TRPCError8({ code: "FORBIDDEN", message: "Cannot delete built-in parsers" });
4741
4931
  }
4742
- if (newParsers.length === (settings.logParsers || []).length) {
4932
+ const deleted = await logParserStore.delete(input.id, await scopeOf(input));
4933
+ if (!deleted) {
4743
4934
  throw new TRPCError8({ code: "NOT_FOUND", message: `Parser not found: ${input.id}` });
4744
4935
  }
4745
- await settingsManager.saveSettings({
4746
- ...settings,
4747
- logParsers: newParsers
4748
- });
4749
4936
  return { deleted: true };
4750
4937
  }),
4751
4938
  // ---------------------------------------------------------------------------
@@ -7223,7 +7410,7 @@ async function fetchProviderModels(provider, plaintextKey) {
7223
7410
  }
7224
7411
 
7225
7412
  // ../server/src/services/image-storage.service.ts
7226
- import { randomUUID as randomUUID4 } from "crypto";
7413
+ import { randomUUID as randomUUID5 } from "crypto";
7227
7414
  import { mkdir as mkdir15, writeFile as writeFile14, readFile as readFile15, unlink as unlink3, readdir as readdir4 } from "fs/promises";
7228
7415
  import { existsSync as existsSync2 } from "fs";
7229
7416
  import { join as join18, extname, resolve as resolve4, sep as sep2 } from "path";
@@ -7260,7 +7447,7 @@ var ImageStorageService = class {
7260
7447
  throw new Error(`Unsupported extension: ${ext}`);
7261
7448
  }
7262
7449
  await this.ensureTmpDir();
7263
- const imageId = randomUUID4();
7450
+ const imageId = randomUUID5();
7264
7451
  const safeExt = ext.replace(/[^a-z.]/g, "");
7265
7452
  const fileName = `${imageId}${safeExt}`;
7266
7453
  const filePath = join18(this.dir, fileName);
@@ -7408,7 +7595,7 @@ async function resolveImagesToBase64(images, contextId) {
7408
7595
  }
7409
7596
 
7410
7597
  // ../server/src/services/kanban-commands.ts
7411
- import { randomUUID as randomUUID5 } from "crypto";
7598
+ import { randomUUID as randomUUID6 } from "crypto";
7412
7599
 
7413
7600
  // ../server/src/trpc/routers/cloud-auth.ts
7414
7601
  import { z as z16 } from "zod";
@@ -7808,7 +7995,7 @@ async function addCardOrFallback(board, columnTitle, cardTitle, cardContent) {
7808
7995
  if (!col) return;
7809
7996
  const now = (/* @__PURE__ */ new Date()).toISOString();
7810
7997
  col.cards.push({
7811
- id: randomUUID5(),
7998
+ id: randomUUID6(),
7812
7999
  title: cardTitle,
7813
8000
  markdown: cardContent ?? "",
7814
8001
  images: [],
@@ -8045,7 +8232,7 @@ Ne jamais omettre ce tag. Il doit \xEAtre la toute derni\xE8re ligne de ta r\xE9
8045
8232
  `.trim();
8046
8233
 
8047
8234
  // ../server/src/services/ai-runners/claude-pty-runner.ts
8048
- import { randomUUID as randomUUID6 } from "crypto";
8235
+ import { randomUUID as randomUUID7 } from "crypto";
8049
8236
 
8050
8237
  // ../server/src/services/ai-runners/claude-pty-tail.ts
8051
8238
  import { open } from "fs/promises";
@@ -8169,7 +8356,7 @@ function tailTranscript(opts) {
8169
8356
 
8170
8357
  // ../server/src/services/ai-runners/claude-pty-runner.ts
8171
8358
  async function getAgentManager() {
8172
- const { agentManager: agentManager2 } = await import("./agent-manager-DM6C7BTF.js");
8359
+ const { agentManager: agentManager2 } = await import("./agent-manager-JUVAVUIQ.js");
8173
8360
  return agentManager2;
8174
8361
  }
8175
8362
  function buildPtyArgs(params, sessionId, opts) {
@@ -8239,7 +8426,7 @@ function dispatchEntry(entry, state, cbs) {
8239
8426
  async function runClaudeViaPty(params) {
8240
8427
  const { agentId, signal, skipTokenInstructions } = params;
8241
8428
  if (!agentId) throw new Error("runClaudeViaPty requires an agentId");
8242
- const sessionId = params.sessionId && params.sessionId.length > 0 ? params.sessionId : randomUUID6();
8429
+ const sessionId = params.sessionId && params.sessionId.length > 0 ? params.sessionId : randomUUID7();
8243
8430
  const args = buildPtyArgs(params, sessionId, { excludeMcp: true });
8244
8431
  const agentMgr = await getAgentManager();
8245
8432
  const displayArgs = args.map((a) => {
@@ -8910,7 +9097,7 @@ async function shutdownCodexAppServer() {
8910
9097
  }
8911
9098
  }
8912
9099
  async function getAgentManager2() {
8913
- const { agentManager: agentManager2 } = await import("./agent-manager-DM6C7BTF.js");
9100
+ const { agentManager: agentManager2 } = await import("./agent-manager-JUVAVUIQ.js");
8914
9101
  return agentManager2;
8915
9102
  }
8916
9103
  function parseRuneyaCurlCommand(command) {
@@ -11015,7 +11202,7 @@ Rules:
11015
11202
  });
11016
11203
 
11017
11204
  // ../server/src/trpc/routers/scenario.ts
11018
- import { randomUUID as randomUUID8 } from "crypto";
11205
+ import { randomUUID as randomUUID9 } from "crypto";
11019
11206
  import { TRPCError as TRPCError16 } from "@trpc/server";
11020
11207
  import { z as z19 } from "zod";
11021
11208
 
@@ -11132,7 +11319,7 @@ async function* streamWithActiveProvider(opts) {
11132
11319
 
11133
11320
  // ../server/src/services/scenario-runner.ts
11134
11321
  import { mkdir as mkdir16 } from "fs/promises";
11135
- import { randomUUID as randomUUID7 } from "crypto";
11322
+ import { randomUUID as randomUUID8 } from "crypto";
11136
11323
  import { join as join19 } from "path";
11137
11324
 
11138
11325
  // ../server/src/services/scenario-presets.ts
@@ -11474,7 +11661,7 @@ function applyHireDirectivesFromOutput(manager, scenario, output) {
11474
11661
  }
11475
11662
  const hired = [];
11476
11663
  for (const payload of hireDirectives) {
11477
- const id = `hire-${randomUUID7().slice(0, 8)}`;
11664
+ const id = `hire-${randomUUID8().slice(0, 8)}`;
11478
11665
  const position = computeHirePosition(manager, scenario.nodes);
11479
11666
  ensureGroupCanContainNode(scenario, manager.groupId ?? null, position);
11480
11667
  const node = {
@@ -12642,7 +12829,7 @@ var scenarioRouter = router({
12642
12829
  })).mutation(({ input }) => {
12643
12830
  const now = Date.now();
12644
12831
  return createOrBadRequest(async () => scenarioStore.create({
12645
- id: randomUUID8(),
12832
+ id: randomUUID9(),
12646
12833
  name: input.name,
12647
12834
  icon: input.icon,
12648
12835
  description: input.description,
@@ -12794,7 +12981,7 @@ var scenarioRouter = router({
12794
12981
  });
12795
12982
 
12796
12983
  // ../server/src/trpc/routers/debug.ts
12797
- import { randomUUID as randomUUID9 } from "crypto";
12984
+ import { randomUUID as randomUUID10 } from "crypto";
12798
12985
  import { TRPCError as TRPCError17 } from "@trpc/server";
12799
12986
  import { z as z20 } from "zod";
12800
12987
  var MAX_BUFFER3 = 300;
@@ -12857,7 +13044,7 @@ var debugRouter = router({
12857
13044
  intervalMs: z20.number().int().min(100).max(5e3).optional(),
12858
13045
  maxTicks: z20.number().int().min(1).max(1e4).optional()
12859
13046
  }).optional()).mutation(({ input }) => {
12860
- const jobId = randomUUID9();
13047
+ const jobId = randomUUID10();
12861
13048
  const intervalMs = input?.intervalMs ?? 400;
12862
13049
  const maxTicks = input?.maxTicks ?? 500;
12863
13050
  const job = {
@@ -13077,7 +13264,7 @@ var diagnosticsRouter = router({
13077
13264
  import { z as z22 } from "zod";
13078
13265
 
13079
13266
  // ../server/src/services/kanban-queue.ts
13080
- import { randomUUID as randomUUID10 } from "crypto";
13267
+ import { randomUUID as randomUUID11 } from "crypto";
13081
13268
  import { EventEmitter as EventEmitter5 } from "events";
13082
13269
  var KanbanQueueService = class extends EventEmitter5 {
13083
13270
  items = [];
@@ -13105,7 +13292,7 @@ var KanbanQueueService = class extends EventEmitter5 {
13105
13292
  return { id: alreadyRunning.id, addedAt: alreadyRunning.startedAt, ...item };
13106
13293
  }
13107
13294
  const queueItem = {
13108
- id: randomUUID10(),
13295
+ id: randomUUID11(),
13109
13296
  ...item,
13110
13297
  addedAt: (/* @__PURE__ */ new Date()).toISOString()
13111
13298
  };
@@ -14107,7 +14294,7 @@ async function reconcileOrgCanary(orgId) {
14107
14294
  }
14108
14295
 
14109
14296
  // ../server/src/services/cloud-sync-bridge.ts
14110
- import { randomUUID as randomUUID11 } from "crypto";
14297
+ import { randomUUID as randomUUID12 } from "crypto";
14111
14298
  import { mkdir as mkdir20, rm as rm5 } from "fs/promises";
14112
14299
  import * as Y from "yjs";
14113
14300
 
@@ -14190,6 +14377,7 @@ var RECONNECT_DELAY_MS = 3e3;
14190
14377
  var UNAUTHENTICATED_RETRY_MS = 5 * 6e4;
14191
14378
  var OUTDATED_RETRY_MS = 30 * 6e4;
14192
14379
  var COLLECTIONS = ["projects", "services", "environments"];
14380
+ var PARSERS = "logParsers";
14193
14381
  var SyncAuthError = class extends Error {
14194
14382
  constructor(status) {
14195
14383
  super(`cloud rejected the session (HTTP ${status})`);
@@ -14221,7 +14409,8 @@ var OrgSyncConnection = class {
14221
14409
  projects = getCollection(this.doc, "projects");
14222
14410
  services = getCollection(this.doc, "services");
14223
14411
  environments = getCollection(this.doc, "environments");
14224
- conn = randomUUID11();
14412
+ logParsers = getCollection(this.doc, PARSERS);
14413
+ conn = randomUUID12();
14225
14414
  link;
14226
14415
  stopped = false;
14227
14416
  initializing = true;
@@ -14289,9 +14478,14 @@ var OrgSyncConnection = class {
14289
14478
  void this.applyDocEventsToStore(name, events, isInitial);
14290
14479
  });
14291
14480
  }
14481
+ this.logParsers.observeDeep((events, txn) => {
14482
+ if (txn.origin !== REMOTE_ORIGIN) return;
14483
+ void this.applyParserEventsToStore(events);
14484
+ });
14292
14485
  projectStore.events.on("saved", this.onSaved);
14293
14486
  this.unsubscribes.push(serviceStore.onChange(this.onSaved));
14294
14487
  this.unsubscribes.push(environmentStore.onChange(this.onSaved));
14488
+ this.unsubscribes.push(logParserStore.onLocalChange(this.onSaved));
14295
14489
  await this.reconcileLocalToDoc();
14296
14490
  this.initializing = false;
14297
14491
  this.needsPush = true;
@@ -14639,6 +14833,54 @@ var OrgSyncConnection = class {
14639
14833
  await this.upsertLocally(name, id, fields);
14640
14834
  }
14641
14835
  }
14836
+ /**
14837
+ * Nombre d'applications distantes de parseurs en cours.
14838
+ *
14839
+ * La réconciliation lit le coffre et supprime du document ce qu'elle n'y
14840
+ * trouve pas ; déclenchée par un service enregistré au même instant, elle
14841
+ * lirait un coffre où le parseur qui arrive n'est pas encore écrit — et
14842
+ * l'effacerait pour toute l'organisation. Un compteur plutôt qu'un booléen :
14843
+ * plusieurs évènements peuvent se chevaucher, et le premier terminé ne doit
14844
+ * pas rouvrir la porte pour les autres.
14845
+ */
14846
+ applyingParsers = 0;
14847
+ /**
14848
+ * Porter au disque les parseurs que le document vient de changer.
14849
+ *
14850
+ * Une suppression est appliquée telle quelle, sans l'équivalent du garde qui
14851
+ * protège les contenus d'un projet non téléchargé : chaque membre tient le
14852
+ * jeu complet de l'organisation, donc un parseur retiré du document l'a bien
14853
+ * été pour tout le monde.
14854
+ */
14855
+ async applyParserEventsToStore(events) {
14856
+ const deleted = /* @__PURE__ */ new Set();
14857
+ const affected = /* @__PURE__ */ new Set();
14858
+ for (const event of events) {
14859
+ if (event.target === this.logParsers) {
14860
+ for (const [key, change] of event.changes.keys) {
14861
+ if (change.action === "delete") deleted.add(key);
14862
+ else affected.add(key);
14863
+ }
14864
+ } else {
14865
+ const topKey = event.path[0];
14866
+ if (typeof topKey === "string") affected.add(topKey);
14867
+ }
14868
+ }
14869
+ this.applyingParsers += 1;
14870
+ try {
14871
+ for (const id of deleted) {
14872
+ await logParserStore.applyRemoteDelete(id, this.link.orgId);
14873
+ }
14874
+ for (const id of affected) {
14875
+ if (deleted.has(id)) continue;
14876
+ const fields = readEntity(this.logParsers, id);
14877
+ if (!fields) continue;
14878
+ await logParserStore.applyRemoteUpsert(id, fields, this.link.orgId);
14879
+ }
14880
+ } finally {
14881
+ this.applyingParsers -= 1;
14882
+ }
14883
+ }
14642
14884
  async upsertLocally(name, id, fields) {
14643
14885
  if (name === "services") {
14644
14886
  await serviceStore.applyRemoteUpsert(id, fields, this.link.orgId);
@@ -14725,6 +14967,8 @@ var OrgSyncConnection = class {
14725
14967
  environmentStore.listEncryptedByProjectIds(projectIds)
14726
14968
  ]);
14727
14969
  if (this.stopped) return;
14970
+ const parsers = (await logParserStore.list(this.link.orgId)).filter(isShareable);
14971
+ if (this.stopped) return;
14728
14972
  const local = { projects, services, environments };
14729
14973
  const ownedProjectIds = new Set(projectIds);
14730
14974
  this.doc.transact(() => {
@@ -14739,6 +14983,13 @@ var OrgSyncConnection = class {
14739
14983
  if (this.belongsToOwnedProject(name, id, ownedProjectIds)) collection.delete(id);
14740
14984
  }
14741
14985
  }
14986
+ const parserIds = new Set(parsers.map((p) => p.id));
14987
+ for (const parser of parsers) writeEntity(this.logParsers, parser.id, parser);
14988
+ if (this.applyingParsers === 0) {
14989
+ for (const id of Array.from(this.logParsers.keys())) {
14990
+ if (!parserIds.has(id)) this.logParsers.delete(id);
14991
+ }
14992
+ }
14742
14993
  }, LOCAL_ORIGIN);
14743
14994
  }
14744
14995
  /**
@@ -14792,6 +15043,7 @@ var CloudSyncBridge = class {
14792
15043
  console.error("[cloud-sync] could not read which organizations to sync:", err.message);
14793
15044
  return;
14794
15045
  }
15046
+ await this.migrateMachineParsers(links);
14795
15047
  for (const link of links) await this.connect(link);
14796
15048
  const connected = this.connections.size;
14797
15049
  if (links.length > 0) {
@@ -14827,8 +15079,28 @@ var CloudSyncBridge = class {
14827
15079
  console.error("[cloud-sync] could not read which organizations to sync:", err.message);
14828
15080
  return;
14829
15081
  }
15082
+ await this.migrateMachineParsers(links);
14830
15083
  for (const link of links) await this.connect(link);
14831
15084
  }
15085
+ /**
15086
+ * Déplacer les parseurs du poste dans les organisations de cette machine.
15087
+ *
15088
+ * Avant d'ouvrir les connexions, pour que la première réconciliation parte
15089
+ * d'un coffre déjà complet — sinon les parseurs partiraient au document au
15090
+ * coup d'après, ce qui marche mais laisse une fenêtre où l'équipe voit une
15091
+ * liste vide.
15092
+ *
15093
+ * Fait ici plutôt que dans chaque connexion : la liste du poste est vidée à
15094
+ * la fin, et deux connexions qui migreraient en parallèle se la
15095
+ * disputeraient — la seconde trouverait une machine déjà vide.
15096
+ */
15097
+ async migrateMachineParsers(links) {
15098
+ try {
15099
+ await logParserStore.migrateMachineParsersInto(links.map((l) => l.orgId));
15100
+ } catch (err) {
15101
+ console.error("[cloud-sync] could not move machine parsers into organizations:", err.message);
15102
+ }
15103
+ }
14832
15104
  /** Per-org sync state, for the UI. */
14833
15105
  states() {
14834
15106
  const live = Array.from(this.connections.entries()).map(([orgId, conn]) => ({
@@ -15682,7 +15954,7 @@ async function migrateSettingsIntoVaults() {
15682
15954
  // ../server/src/migrations/migrate-from-legacy.ts
15683
15955
  import { createRequire as createRequire2 } from "module";
15684
15956
  import { randomBytes as randomBytes6, createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3 } from "crypto";
15685
- import { randomUUID as randomUUID12 } from "crypto";
15957
+ import { randomUUID as randomUUID13 } from "crypto";
15686
15958
  import {
15687
15959
  readFile as readFile21,
15688
15960
  writeFile as writeFile20,
@@ -15892,11 +16164,11 @@ async function runLegacyMigration(dataDir) {
15892
16164
  const data = await readEncrypted(join28(parsersDir, file));
15893
16165
  if (data?.id) legacyParsers.push(data);
15894
16166
  }
15895
- const projectMonoId = randomUUID12();
16167
+ const projectMonoId = randomUUID13();
15896
16168
  const envIdMap = {};
15897
16169
  const labelToKey = {};
15898
16170
  for (const [name, legacyEnv] of Object.entries(legacyEnvs)) {
15899
- envIdMap[name] = randomUUID12();
16171
+ envIdMap[name] = randomUUID13();
15900
16172
  if (legacyEnv?.label) labelToKey[legacyEnv.label] = name;
15901
16173
  }
15902
16174
  const runeEnvs = [];
@@ -15921,7 +16193,7 @@ async function runLegacyMigration(dataDir) {
15921
16193
  if (hasInvalidInterpolation(value)) continue;
15922
16194
  const cleaned = cleanVarKey(key);
15923
16195
  if (inheritedVars[cleaned] === value) continue;
15924
- const varId = randomUUID12();
16196
+ const varId = randomUUID13();
15925
16197
  variables[varId] = makeVariable(cleaned, value);
15926
16198
  varIdLookup.set(`${envIdMap[name]}:${cleaned}`, varId);
15927
16199
  }
@@ -15942,7 +16214,7 @@ async function runLegacyMigration(dataDir) {
15942
16214
  const serviceIdMap = {};
15943
16215
  const runeServices = [];
15944
16216
  for (const [name, legacy] of Object.entries(legacyServices)) {
15945
- const id = randomUUID12();
16217
+ const id = randomUUID13();
15946
16218
  serviceIdMap[name] = id;
15947
16219
  const rootPath = legacy.rootPath || "";
15948
16220
  const rootPathCwd = rootPath && rootPath !== "." ? rootPath : "";
@@ -15951,7 +16223,7 @@ async function runLegacyMigration(dataDir) {
15951
16223
  const parts = [cmd.spawnCmd, ...cmd.spawnArgs || []].filter(Boolean);
15952
16224
  if (!parts.length) continue;
15953
16225
  commands.push({
15954
- id: cmd.id || randomUUID12(),
16226
+ id: cmd.id || randomUUID13(),
15955
16227
  label: "Launch",
15956
16228
  command: parts.join(" "),
15957
16229
  cwd: cmd.spawnOptions?.cwd || "",
@@ -16012,7 +16284,7 @@ async function runLegacyMigration(dataDir) {
16012
16284
  const legacyBootstrapCmds = container.bootstrap?.commands || [];
16013
16285
  if (legacyBootstrapCmds.length > 0) {
16014
16286
  dockerConfig.bootstrapCommands = legacyBootstrapCmds.filter((bs) => bs.cmd || bs.entrypoint).map((bs, idx) => ({
16015
- id: bs.id || randomUUID12(),
16287
+ id: bs.id || randomUUID13(),
16016
16288
  label: bs.label || `Bootstrap ${idx + 1}`,
16017
16289
  command: bs.cmd || "",
16018
16290
  ...bs.entrypoint ? { entrypoint: bs.entrypoint } : {},
@@ -16060,7 +16332,7 @@ async function runLegacyMigration(dataDir) {
16060
16332
  cwd: serviceCwd,
16061
16333
  runner: dockerConfig ? "docker" : "native",
16062
16334
  shortcuts: (legacy.shortcuts || []).filter((s) => s.spawnCmd || s.label).map((s) => ({
16063
- id: s.id || randomUUID12(),
16335
+ id: s.id || randomUUID13(),
16064
16336
  label: s.label || s.spawnCmd || "",
16065
16337
  command: [s.spawnCmd, ...s.spawnArgs || []].filter(Boolean).join(" "),
16066
16338
  ...s.spawnOptions?.cwd ? { cwd: s.spawnOptions.cwd } : {}
@@ -16100,7 +16372,7 @@ async function runLegacyMigration(dataDir) {
16100
16372
  );
16101
16373
  if (!svcScopedEnv) {
16102
16374
  svcScopedEnv = {
16103
- id: randomUUID12(),
16375
+ id: randomUUID13(),
16104
16376
  projectId: projectMonoId,
16105
16377
  name: `${service?.name || name} (${globalEnv.name})`,
16106
16378
  scope: "service",
@@ -16124,7 +16396,7 @@ async function runLegacyMigration(dataDir) {
16124
16396
  const varPost = typeof varData === "object" ? String(varData.suffix ?? "") : "";
16125
16397
  if (!varKey || existingKeys.has(cleanVarKey(varKey))) continue;
16126
16398
  const cleaned = cleanVarKey(varKey);
16127
- const varId = randomUUID12();
16399
+ const varId = randomUUID13();
16128
16400
  svcScopedEnv.variables[varId] = makeVariable(cleaned, varValue, varPre, varPost);
16129
16401
  existingKeys.add(cleaned);
16130
16402
  }
@@ -16144,7 +16416,7 @@ async function runLegacyMigration(dataDir) {
16144
16416
  );
16145
16417
  if (!svcScopedEnv) {
16146
16418
  svcScopedEnv = {
16147
- id: randomUUID12(),
16419
+ id: randomUUID13(),
16148
16420
  projectId: projectMonoId,
16149
16421
  name: `${service?.name || serviceName} (${globalEnv.name})`,
16150
16422
  scope: "service",
@@ -16165,7 +16437,7 @@ async function runLegacyMigration(dataDir) {
16165
16437
  const baseEntry = Object.entries(svcScopedEnv.variables).find(([, v]) => v.key === cleaned);
16166
16438
  let varId = baseEntry?.[0];
16167
16439
  if (!varId) {
16168
- varId = randomUUID12();
16440
+ varId = randomUUID13();
16169
16441
  svcScopedEnv.variables[varId] = {
16170
16442
  key: cleaned,
16171
16443
  value: { value: "", pre: "", post: "", isSecret: false, injectIntoAi: false }
@@ -16195,13 +16467,13 @@ async function runLegacyMigration(dataDir) {
16195
16467
  flatOverrides[varId] = makeVariable(cleaned, value);
16196
16468
  }
16197
16469
  } else {
16198
- flatOverrides[randomUUID12()] = makeVariable(cleaned, value);
16470
+ flatOverrides[randomUUID13()] = makeVariable(cleaned, value);
16199
16471
  }
16200
16472
  } else {
16201
16473
  const cleaned = cleanVarKey(key);
16202
16474
  const existingVarId = Object.entries(env2.variables).find(([, v]) => v.key === cleaned)?.[0];
16203
16475
  if (!existingVarId) {
16204
- const varId = randomUUID12();
16476
+ const varId = randomUUID13();
16205
16477
  env2.variables[varId] = makeVariable(cleaned, value);
16206
16478
  varIdLookup.set(`${envId}:${cleaned}`, varId);
16207
16479
  }
@@ -16385,7 +16657,7 @@ async function runOverrideOnlyMigration(dataDir) {
16385
16657
  if (isSameAsBase(value, baseVar)) continue;
16386
16658
  flatOverrides[varId] = makeVariable(cleaned, value);
16387
16659
  } else {
16388
- flatOverrides[randomUUID12()] = makeVariable(cleaned, value);
16660
+ flatOverrides[randomUUID13()] = makeVariable(cleaned, value);
16389
16661
  }
16390
16662
  }
16391
16663
  }
@@ -16422,7 +16694,7 @@ async function runOverrideOnlyMigration(dataDir) {
16422
16694
  );
16423
16695
  if (!svcScopedEnv) {
16424
16696
  svcScopedEnv = {
16425
- id: randomUUID12(),
16697
+ id: randomUUID13(),
16426
16698
  projectId: globalEnv["projectId"],
16427
16699
  name: `${service?.["name"] || serviceName} (${globalEnv["name"]})`,
16428
16700
  scope: "service",
@@ -16444,7 +16716,7 @@ async function runOverrideOnlyMigration(dataDir) {
16444
16716
  const baseEntry = Object.entries(svcScopedEnv["variables"]).find(([, v]) => v.key === cleaned);
16445
16717
  let varId = baseEntry?.[0];
16446
16718
  if (!varId) {
16447
- varId = randomUUID12();
16719
+ varId = randomUUID13();
16448
16720
  svcScopedEnv["variables"][varId] = {
16449
16721
  key: cleaned,
16450
16722
  value: { value: "", pre: "", post: "", isSecret: false, injectIntoAi: false }
@@ -17761,4 +18033,4 @@ export {
17761
18033
  pullEnv,
17762
18034
  registerInstance
17763
18035
  };
17764
- //# sourceMappingURL=src-MEMRUBM6.js.map
18036
+ //# sourceMappingURL=src-WON4SLMI.js.map