@runeya/runeya 2.0.28 → 2.0.31

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 (201) hide show
  1. package/agent/index.js +23 -1
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-KGITN4AE.js +7 -0
  4. package/{chunk-Y2R42AXQ.js → chunk-PZHVJHTC.js} +24 -2
  5. package/chunk-PZHVJHTC.js.map +1 -0
  6. package/index.js +1 -1
  7. package/package.json +1 -1
  8. package/{src-ZYEDS2TT.js → src-I5LYBYA2.js} +173 -116
  9. package/src-I5LYBYA2.js.map +1 -0
  10. package/web/assets/{AgentScalarChatInterface.vue-CvVAU4_Z.js → AgentScalarChatInterface.vue-BgOWd9Dz.js} +1 -1
  11. package/web/assets/{AgentTerminalPage-DJbjkS_P.js → AgentTerminalPage-CrZyv0Pr.js} +1 -1
  12. package/web/assets/AiChatPage-CSbpGsTd.js +1 -0
  13. package/web/assets/{AppLayout-CmgZhtWb.js → AppLayout-CGySXh9R.js} +1 -1
  14. package/web/assets/{AuditPage-CIQXRIah.js → AuditPage-wemCN8aw.js} +1 -1
  15. package/web/assets/CloudAccountPage-B9xwzE44.js +1 -0
  16. package/web/assets/{CloudAccountPage-B-ediB1R.js → CloudAccountPage-mqLjh_Na.js} +1 -1
  17. package/web/assets/{CloudMessagingPage-DvZuiSk3.js → CloudMessagingPage-Bxcx2rox.js} +1 -1
  18. package/web/assets/{DashboardPage-Dx7xHCCP.js → DashboardPage-CwQjYeAl.js} +1 -1
  19. package/web/assets/{EditorIcon-4f28vJdz.js → EditorIcon-MkuxOiPI.js} +1 -1
  20. package/web/assets/{EnvironmentForm-CR0xHO9G.js → EnvironmentForm-jFiMyYtU.js} +1 -1
  21. package/web/assets/{EnvironmentFormPage-qc4WT8Xk.js → EnvironmentFormPage-Bk6TnUiq.js} +1 -1
  22. package/web/assets/{EnvironmentListPage-DIjYKLDE.js → EnvironmentListPage-arNn4Jju.js} +1 -1
  23. package/web/assets/{EnvironmentSelector-C3yA1kHZ.js → EnvironmentSelector-P4KzBSWz.js} +1 -1
  24. package/web/assets/KanbanBoardPage-DT5e6cnL.js +4 -0
  25. package/web/assets/KanbanBoardPage-kpZiPs_o.css +1 -0
  26. package/web/assets/{KanbanListPage-Drt3lxBT.js → KanbanListPage-DWHKlyoo.js} +1 -1
  27. package/web/assets/{LaunchProjectPage-DQDogPxL.js → LaunchProjectPage-D_H-E5bk.js} +1 -1
  28. package/web/assets/{LaunchServicesPage-Jg18jEbK.js → LaunchServicesPage-HDnKRjRX.js} +1 -1
  29. package/web/assets/{LogViewer-DF9GVFWC.js → LogViewer-BfU_QWYJ.js} +1 -1
  30. package/web/assets/{ProcessControls-Umt6f5xy.js → ProcessControls-9Zkp_dJp.js} +1 -1
  31. package/web/assets/{ProcessDetailPage-CTljkKd4.js → ProcessDetailPage-DOHXl85O.js} +1 -1
  32. package/web/assets/{ProcessMetrics-XANBf0Qk.js → ProcessMetrics-D_TONOeJ.js} +1 -1
  33. package/web/assets/{ProjectDetailPage-tYK7WVg5.js → ProjectDetailPage-B4HoWgAS.js} +1 -1
  34. package/web/assets/{ProjectListPage-Bl2xRUn8.js → ProjectListPage-CobjamXS.js} +1 -1
  35. package/web/assets/{RandomJobTestPage-D-1h_Jn0.js → RandomJobTestPage-JQewXMbE.js} +1 -1
  36. package/web/assets/{ScenarioEditorPage-AYudLHpb.js → ScenarioEditorPage-DxUxY8WO.js} +1 -1
  37. package/web/assets/{SendToChatDialog-Cy3nX2xD.js → SendToChatDialog-D5sFHq4Y.js} +1 -1
  38. package/web/assets/{ServiceControlsBar-CXk2ltIc.js → ServiceControlsBar-3r_6f0oq.js} +1 -1
  39. package/web/assets/{ServiceDetailPage-guE9lv3J.js → ServiceDetailPage-BrWeHwKi.js} +1 -1
  40. package/web/assets/{ServiceFormPage-BfhD3cHh.js → ServiceFormPage-BM5t0xn7.js} +1 -1
  41. package/web/assets/{SettingsPage-B1egv0Qi.js → SettingsPage-CCgRmqMf.js} +4 -4
  42. package/web/assets/{SetupPage-DDqjtbHe.js → SetupPage-BjnUBrAp.js} +1 -1
  43. package/web/assets/{UnlockPage-B9V18Hw8.js → UnlockPage-BOl5kGsl.js} +1 -1
  44. package/web/assets/{VariablesTable-B4z_Cvs6.js → VariablesTable-BNdkuRjU.js} +1 -1
  45. package/web/assets/{VersionBadge-D5Im-g6k.js → VersionBadge-B6DUKoTa.js} +1 -1
  46. package/web/assets/WikiPage-zU6F-v2H.js +1 -0
  47. package/web/assets/{WikiView-BkAYyIky.js → WikiView-3CVNHY0G.js} +1 -1
  48. package/web/assets/{add-scalar-classes-wf0v84bl.js → add-scalar-classes-BE6k9QmJ.js} +3 -3
  49. package/web/assets/auth-errors-A7G-LRy2.js +1 -0
  50. package/web/assets/{autocomplete-Cl85AjsC.js → autocomplete-DwZLvawH.js} +1 -1
  51. package/web/assets/{basic-shape-diamond.svg-EjFsbEU6.js → basic-shape-diamond.svg-DDLxB2o1.js} +1 -1
  52. package/web/assets/{basic-shape-hexagon.svg-BSGF96h_.js → basic-shape-hexagon.svg-Dg-tpVX6.js} +1 -1
  53. package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DzhBsSTr.js → basic-shape-primary-circle-ellipse-round.svg-2baIETte.js} +1 -1
  54. package/web/assets/{basic-shape-primary-square-rectangle.svg-D8s7AAg0.js → basic-shape-primary-square-rectangle.svg-BgbWRm9F.js} +1 -1
  55. package/web/assets/{basic-shape-shield.svg-CZVfGGSa.js → basic-shape-shield.svg-DaSvphIy.js} +1 -1
  56. package/web/assets/{browser-DeK7cxfP.js → browser-B5itU97y.js} +1 -1
  57. package/web/assets/{browser-BJbPa5wA.js → browser-DAsjXZP1.js} +1 -1
  58. package/web/assets/{card-C8VZemYn.js → card-CkqT9qpZ.js} +1 -1
  59. package/web/assets/{checkbox-CHlXPfVG.js → checkbox-D7i6Ei-y.js} +1 -1
  60. package/web/assets/{chip-BIf8nQZp.js → chip-BGa_1_3K.js} +1 -1
  61. package/web/assets/{client-Ck5Tf_q2.js → client-C1q1gncK.js} +1 -1
  62. package/web/assets/{cloud-chat.store-qtVT5SrP.js → cloud-chat.store-Dvj8Xc01.js} +1 -1
  63. package/web/assets/cloud-client-4s1-iFqU.js +1 -0
  64. package/web/assets/{column-DzFOwR4r.js → column-C8lQHkr_.js} +1 -1
  65. package/web/assets/{computer-device-desktop-monitor.svg-DZQuEpZF.js → computer-device-desktop-monitor.svg-CWi-bjwn.js} +1 -1
  66. package/web/assets/{computer-device-desktop.svg-CEjLM8aJ.js → computer-device-desktop.svg-b08c1hOG.js} +1 -1
  67. package/web/assets/{computer-device-laptop.svg-DXtolGzW.js → computer-device-laptop.svg-DwgpFJFq.js} +1 -1
  68. package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BSwre-M8.js → computer-device-mobile-phone-android-samsung-back.svg-CLVl7GWQ.js} +1 -1
  69. package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BGERJFfo.js → computer-device-mobile-phone-android-samsung.svg-CiCp93YS.js} +1 -1
  70. package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B4hZe_83.js → computer-device-mobile-phone-iphone-x-back.svg-BJrwLEJX.js} +1 -1
  71. package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CWALzaq5.js → computer-device-mobile-phone-iphone-x.svg-BqWahM6S.js} +1 -1
  72. package/web/assets/{computer-device-mobile-tablet-touch.svg-CKFDix2A.js → computer-device-mobile-tablet-touch.svg-CoKmLmRi.js} +1 -1
  73. package/web/assets/{computer-device-mobile-tablet.svg-PW6AfYK8.js → computer-device-mobile-tablet.svg-CBHVcYAz.js} +1 -1
  74. package/web/assets/{computer-device-network-ethernet-cat6.svg-Mv5w5TOF.js → computer-device-network-ethernet-cat6.svg-BDB8pwmR.js} +1 -1
  75. package/web/assets/{computer-device-network-lan-www.svg-8StLkiX8.js → computer-device-network-lan-www.svg-Ck6IL9ve.js} +1 -1
  76. package/web/assets/{computer-device-network-wifi-connection.svg-BeLrrgP7.js → computer-device-network-wifi-connection.svg-CphNPxC3.js} +1 -1
  77. package/web/assets/{computer-device-network-wifi-router.svg-CJiZPTY7.js → computer-device-network-wifi-router.svg-DV5WB562.js} +1 -1
  78. package/web/assets/{cssMode-BhLSG915.js → cssMode-CAeg-vFl.js} +1 -1
  79. package/web/assets/{divider-Bqt4F4Qp.js → divider-ov_F8YDR.js} +1 -1
  80. package/web/assets/{ecology-science-erlenmeyer-flask.svg-BbZXykYT.js → ecology-science-erlenmeyer-flask.svg-Mf7ejPBw.js} +1 -1
  81. package/web/assets/{fieldset-Ckk9RxbZ.js → fieldset-C30-k9Hk.js} +1 -1
  82. package/web/assets/{freemarker2-BMY7vTsn.js → freemarker2-DqDyD2Yg.js} +1 -1
  83. package/web/assets/{handlebars-dL1R3--H.js → handlebars-D8wvWeL8.js} +1 -1
  84. package/web/assets/{html-344qni_p.js → html-Drv0UFF5.js} +1 -1
  85. package/web/assets/{htmlMode-DofkmDyO.js → htmlMode-DHHALRMq.js} +1 -1
  86. package/web/assets/{image-flash-lightning.svg-CUKVp-AP.js → image-flash-lightning.svg-DyesLNE_.js} +1 -1
  87. package/web/assets/{image-picture-flower.svg-D8v_AWKn.js → image-picture-flower.svg-ChnE04Bm.js} +1 -1
  88. package/web/assets/{index-0h6-JSBE.js → index-BM_DvIeJ.js} +7 -7
  89. package/web/assets/{index-DtsVLZzz.css → index-Ds9bk1Bt.css} +1 -1
  90. package/web/assets/{interface-alert-exclamation-diamond.svg-Svf3SQNi.js → interface-alert-exclamation-diamond.svg-VnoLfisD.js} +1 -1
  91. package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BONYDBCR.js → interface-alert-exclamation-triangle-warning.svg-BFXqgqWM.js} +1 -1
  92. package/web/assets/{interface-alert-information-circle.svg-DjtyOApC.js → interface-alert-information-circle.svg-B2cFeVpP.js} +1 -1
  93. package/web/assets/{interface-award-crown.svg-CYsHquI5.js → interface-award-crown.svg-CgVL6SMQ.js} +1 -1
  94. package/web/assets/{interface-bookmark.svg-Dq6ycrvL.js → interface-bookmark-tag.svg-BqetMK2B.js} +1 -1
  95. package/web/assets/{interface-bookmark-tag.svg-BuQVffZJ.js → interface-bookmark.svg-Djskm9So.js} +1 -1
  96. package/web/assets/{interface-calendar-date-one.svg-DByu3wOg.js → interface-calendar-date-one.svg-CuGQxIbW.js} +1 -1
  97. package/web/assets/{interface-content-book-open-pages.svg-B26NylpB.js → interface-content-book-open-pages.svg-CoaYPYBX.js} +1 -1
  98. package/web/assets/{interface-content-book-page.svg-BB2ivXh0.js → interface-content-book-page.svg-D9RjJ-Tt.js} +1 -1
  99. package/web/assets/{interface-content-file.svg-gFnNuymA.js → interface-content-file.svg-BvW7iOQq.js} +1 -1
  100. package/web/assets/interface-content-folder.svg-0I16aCuL.js +1 -0
  101. package/web/assets/{interface-content-folder.svg-DvbImJww.js → interface-content-folder.svg-3lDCdrfN.js} +1 -1
  102. package/web/assets/{interface-copy-clipboard.svg-Bp4l9Qod.js → interface-copy-clipboard.svg-Cru6vbV7.js} +1 -1
  103. package/web/assets/{interface-edit-attachment.svg-cayiblt2.js → interface-edit-attachment.svg-9QOp0EHv.js} +1 -1
  104. package/web/assets/{interface-edit-binocular.svg-BvIiESbT.js → interface-edit-binocular.svg-BN5BwlNK.js} +1 -1
  105. package/web/assets/{interface-edit-magic-wand.svg-Bvfkkoft.js → interface-edit-magic-wand.svg-ZrSk3B7_.js} +1 -1
  106. package/web/assets/{interface-edit-tool-paint-roller.svg-Dnoz9W9m.js → interface-edit-tool-paint-roller.svg-CbU2EKfx.js} +1 -1
  107. package/web/assets/{interface-edit-tool-pencil.svg-aKau4_Jj.js → interface-edit-tool-pencil.svg-k5b7ee-3.js} +1 -1
  108. package/web/assets/{interface-favorite-award.svg-DBvY_ky_.js → interface-favorite-award.svg-jYCncpKK.js} +1 -1
  109. package/web/assets/{interface-favorite-flag.svg-CBdbLlXI.js → interface-favorite-flag.svg-rsmscUUR.js} +1 -1
  110. package/web/assets/{interface-favorite-heart.svg-CB_C7DqH.js → interface-favorite-heart.svg-CIYUeR6R.js} +1 -1
  111. package/web/assets/{interface-favorite-star.svg-CtD9k4PE.js → interface-favorite-star.svg-CgA6sev6.js} +1 -1
  112. package/web/assets/{interface-favorite-stars-sparkles.svg-tL8H5LKH.js → interface-favorite-stars-sparkles.svg-DeEAoS1p.js} +1 -1
  113. package/web/assets/{interface-hierarchy-flowchart.svg-DDZfke0l.js → interface-hierarchy-flowchart.svg-D03K0k8o.js} +1 -1
  114. package/web/assets/{interface-home-house.svg-928LKnoh.js → interface-home-house.svg-CPdv9Mu_.js} +1 -1
  115. package/web/assets/{interface-hyperlink.svg-BVJBa9KF.js → interface-hyperlink.svg-BEdVwqkd.js} +1 -1
  116. package/web/assets/{interface-lighting-brightness.svg-C6DvgPRs.js → interface-lighting-brightness.svg-C-op9azl.js} +1 -1
  117. package/web/assets/{interface-lock-closed.svg-NFylzPTC.js → interface-lock-closed.svg-B01c7Ens.js} +1 -1
  118. package/web/assets/{interface-lock-open-unlock.svg-EmxIAQyQ.js → interface-lock-open-unlock.svg-Bu0DPtLE.js} +1 -1
  119. package/web/assets/{interface-login-key.svg-C0nFw-iu.js → interface-login-key.svg-DxBNIWym.js} +1 -1
  120. package/web/assets/{interface-search.svg-1Gq_uSPL.js → interface-search.svg-ChJa0Zxy.js} +1 -1
  121. package/web/assets/{interface-setting-cog.svg-3dq-AXqL.js → interface-setting-cog.svg-B1VRK1pG.js} +1 -1
  122. package/web/assets/{interface-share-megaphone-bullhorn.svg-Bb4qoyBo.js → interface-share-megaphone-bullhorn.svg-DITfcqEG.js} +1 -1
  123. package/web/assets/{interface-share-rocket.svg-1hUkfTAV.js → interface-share-rocket.svg-BR3rbwES.js} +1 -1
  124. package/web/assets/{interface-share-satellite.svg-C1fkGxMj.js → interface-share-satellite.svg-DxODd9ev.js} +1 -1
  125. package/web/assets/{interface-share-space-ship.svg-DCtyIZvd.js → interface-share-space-ship.svg-BHhLQX6U.js} +1 -1
  126. package/web/assets/{interface-share.svg-D27oW8Dd.js → interface-share.svg-yu0Vec1L.js} +1 -1
  127. package/web/assets/{interface-signal-square.svg-DHNLXoLB.js → interface-signal-square.svg-BT19mvLU.js} +1 -1
  128. package/web/assets/{interface-time-clock-circle.svg-DVFfhzi_.js → interface-time-clock-circle.svg-BZ3ZkQCo.js} +1 -1
  129. package/web/assets/{interface-time-hour-glass.svg-J2kAIY5_.js → interface-time-hour-glass.svg-AT9zGmRg.js} +1 -1
  130. package/web/assets/{interface-users-multiple.svg-CT_rq2cA.js → interface-users-multiple.svg-DSMQav3N.js} +1 -1
  131. package/web/assets/{interface-weather-moon.svg-DmUulEez.js → interface-weather-moon.svg-DEMnxt9b.js} +1 -1
  132. package/web/assets/{javascript-DJEY0PGT.js → javascript-CPD0FEKw.js} +1 -1
  133. package/web/assets/{jsonMode-Bf1QPhve.js → jsonMode-Wko85YcP.js} +1 -1
  134. package/web/assets/{liquid-BvlkiSX0.js → liquid-D7j9pKnr.js} +1 -1
  135. package/web/assets/{lspLanguageFeatures-Blscl7vz.js → lspLanguageFeatures-CfRla1-8.js} +1 -1
  136. package/web/assets/{mail-chat-bubble-square.svg-oLN5_z0h.js → mail-chat-bubble-square.svg-DvHQC4xf.js} +1 -1
  137. package/web/assets/{mail-send-email-paper-airplane.svg-B__7_Vor.js → mail-send-email-paper-airplane.svg-DpykUXLZ.js} +1 -1
  138. package/web/assets/{mail-send-envelope.svg-DUobbjXC.js → mail-send-envelope.svg-CXCJUXmf.js} +1 -1
  139. package/web/assets/{mdx-fAQ2xk7o.js → mdx-BktOYKUs.js} +1 -1
  140. package/web/assets/{message-V1S0zxyl.js → message-Dx3bqZhh.js} +1 -1
  141. package/web/assets/{minus-DQocLKZ2.js → minus-Bf1ODLs4.js} +1 -1
  142. package/web/assets/{modal-Jd8c3A1o.js → modal-CIqWCBYs.js} +1 -1
  143. package/web/assets/modal-CQKtX_qC.js +1 -0
  144. package/web/assets/{money-cashier-receipt.svg-Cj5pLd3R.js → money-cashier-receipt.svg-DkSQt4Kp.js} +1 -1
  145. package/web/assets/{money-currency-dollar-pay.svg-D85nPq3p.js → money-currency-dollar-pay.svg-B40YykZK.js} +1 -1
  146. package/web/assets/{money-graph-arrow-increase.svg-B-jecr0K.js → money-graph-arrow-increase.svg-BbDtfGcD.js} +1 -1
  147. package/web/assets/{money-graph-bar-chart-increase.svg-mL9YQSKx.js → money-graph-bar-chart-increase.svg-Bl9gruJt.js} +1 -1
  148. package/web/assets/{multiselect-BDZrrJVC.js → multiselect-BUEnFAaO.js} +1 -1
  149. package/web/assets/{nature-ecology-leaf.svg-C5PATFHo.js → nature-ecology-leaf.svg-BrNJa_6p.js} +1 -1
  150. package/web/assets/{password-CBpcX5yn.js → password-miE8400T.js} +1 -1
  151. package/web/assets/{phone-telephone.svg-6VIpvy-y.js → phone-telephone.svg-Ck1caUgX.js} +1 -1
  152. package/web/assets/{plus-B2jxpOLU.js → plus-B2oM4Kbe.js} +1 -1
  153. package/web/assets/process.store-UagFgrdF.js +1 -0
  154. package/web/assets/{programming-bug.svg-BcxVR8s8.js → programming-bug.svg-Be1N6DWA.js} +1 -1
  155. package/web/assets/{programming-cloud.svg-k8vesSUP.js → programming-cloud.svg-C_tNlsNS.js} +1 -1
  156. package/web/assets/{programming-computer-database-server.svg-C3BxhLIn.js → programming-computer-database-server.svg-CaLId3EN.js} +1 -1
  157. package/web/assets/{programming-computer-database.svg-D5JgkHxk.js → programming-computer-database.svg-B0g8mMEB.js} +1 -1
  158. package/web/assets/{programming-module-four-layout.svg-QPzWv5-h.js → programming-module-four-layout.svg-D3lo48Ct.js} +1 -1
  159. package/web/assets/{programming-module-three.svg-C8sC64dR.js → programming-module-three.svg-BCEC_jV2.js} +1 -1
  160. package/web/assets/{programming-module.svg-3IM9Ieau.js → programming-module.svg-BjX7OQih.js} +1 -1
  161. package/web/assets/{programming-script-code.svg-CcSjILXf.js → programming-script-code.svg-BHGQMcGB.js} +1 -1
  162. package/web/assets/{python-izcQtunc.js → python-Dy1ouxIJ.js} +1 -1
  163. package/web/assets/{radiobutton-DkaY7vPf.js → radiobutton-B-wtVA5M.js} +1 -1
  164. package/web/assets/{razor-B8B2Hdv1.js → razor-Ci2FTbb3.js} +1 -1
  165. package/web/assets/router-1YCC7rLb.js +1 -0
  166. package/web/assets/{settings.store-BnyuJ8Z0.js → settings.store-DGeQqU47.js} +1 -1
  167. package/web/assets/{shopping-cart.svg-Cd1oC6MU.js → shopping-cart.svg-CXXXaMLz.js} +1 -1
  168. package/web/assets/{shopping-gift-present.svg-DADsc6IL.js → shopping-gift-present.svg-YcM_-bok.js} +1 -1
  169. package/web/assets/{shopping-shipping-box-parcel-package.svg-RgU1qCOk.js → shopping-shipping-box-parcel-package.svg-C9uLlLTm.js} +1 -1
  170. package/web/assets/{src-DaE_IxON.js → src-DI2ohkF7.js} +1 -1
  171. package/web/assets/{src-DWLyvNxu.js → src-_sZfvoIH.js} +1 -1
  172. package/web/assets/{tabpanel-ps1UcMpu.js → tabpanel-D7aHaTgY.js} +1 -1
  173. package/web/assets/{tag-new-circle.svg-Ct1vN4KR.js → tag-new-circle.svg-bp2cmK4K.js} +1 -1
  174. package/web/assets/{travel-map-earth-globe.svg-DES-h7fX.js → travel-map-earth-globe.svg-sJQIToLR.js} +1 -1
  175. package/web/assets/trpc-C9EMyib7.js +1 -0
  176. package/web/assets/{tsMode-n-LTfcYC.js → tsMode-DkLB60ub.js} +1 -1
  177. package/web/assets/{typescript-2xBvBpwO.js → typescript-Crt7iVga.js} +1 -1
  178. package/web/assets/useAiChatDrawer-Cd0EBriK.js +1 -0
  179. package/web/assets/{useCloudOrg-BEGIZ5Sw.css → useCloudOrg-CXs0Qa_9.css} +1 -1
  180. package/web/assets/useCloudOrg-CyQGeKWO.js +1 -0
  181. package/web/assets/{xml-DNDCpyoa.js → xml-T4pdlSpO.js} +1 -1
  182. package/web/assets/{yaml-BWEYJIfa.js → yaml-NPyqNIGO.js} +1 -1
  183. package/web/index.html +2 -2
  184. package/agent-manager-2P4THUVA.js +0 -7
  185. package/chunk-Y2R42AXQ.js.map +0 -1
  186. package/src-ZYEDS2TT.js.map +0 -1
  187. package/web/assets/AiChatPage-yheFOLqq.js +0 -1
  188. package/web/assets/CloudAccountPage-CPzIsKlw.js +0 -1
  189. package/web/assets/KanbanBoardPage-BDzDCbzp.css +0 -1
  190. package/web/assets/KanbanBoardPage-DWbeil-K.js +0 -4
  191. package/web/assets/WikiPage-CwULGndV.js +0 -1
  192. package/web/assets/auth-errors-_nnUuMls.js +0 -1
  193. package/web/assets/cloud-client-DZDFCmz5.js +0 -1
  194. package/web/assets/interface-content-folder.svg-oUFH-WWC.js +0 -1
  195. package/web/assets/modal-Cun3B13H.js +0 -1
  196. package/web/assets/process.store-IRJbG3V3.js +0 -1
  197. package/web/assets/router-DVcld2uT.js +0 -1
  198. package/web/assets/trpc-DL-TIO_-.js +0 -1
  199. package/web/assets/useAiChatDrawer-9vufna_G.js +0 -1
  200. package/web/assets/useCloudOrg-9Z9ojaI7.js +0 -1
  201. /package/{agent-manager-2P4THUVA.js.map → agent-manager-KGITN4AE.js.map} +0 -0
package/index.js CHANGED
@@ -201,7 +201,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
201
201
  });
202
202
  }
203
203
  async function main() {
204
- const { createLocalServer, pullEnv, PullEnvError } = await import("./src-ZYEDS2TT.js");
204
+ const { createLocalServer, pullEnv, PullEnvError } = await import("./src-I5LYBYA2.js");
205
205
  if (isPullEnv) {
206
206
  if (!serviceArg) {
207
207
  console.error("Error: --service (-s) is required with --pull-env");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runeya/runeya",
3
- "version": "2.0.28",
3
+ "version": "2.0.31",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -58,7 +58,7 @@ import {
58
58
  stableEncryptValue,
59
59
  traefikManager,
60
60
  writeEntity
61
- } from "./chunk-Y2R42AXQ.js";
61
+ } from "./chunk-PZHVJHTC.js";
62
62
 
63
63
  // ../server/src/create-server.ts
64
64
  import express from "express";
@@ -5687,10 +5687,54 @@ var KanbanStore = class {
5687
5687
  const res = await callCloud(`/kanban/board/list${query}`);
5688
5688
  return res.data?.boards ?? [];
5689
5689
  }
5690
- async get(id) {
5691
- const res = await callCloud(`/kanban/board/get?id=${encodeURIComponent(id)}`);
5690
+ /**
5691
+ * Un tableau. Sans les journaux de ses cartes par défaut : c'est la moitié
5692
+ * lourde du document, et presque aucun appelant n'en a besoin — un agent qui
5693
+ * liste des cartes ne lit pas les commentaires. `withHistory` les redemande
5694
+ * pour les rares cas qui les veulent tous d'un coup.
5695
+ */
5696
+ async get(id, opts = {}) {
5697
+ const query = `?id=${encodeURIComponent(id)}${opts.withHistory ? "&withHistory=true" : ""}`;
5698
+ const res = await callCloud(`/kanban/board/get${query}`);
5692
5699
  return res.data?.board ?? null;
5693
5700
  }
5701
+ /** Le journal d'une seule carte — ce que le contexte d'un agent demande. */
5702
+ async cardHistory(boardId, cardId) {
5703
+ const res = await callCloud(
5704
+ `/kanban/card/history?boardId=${encodeURIComponent(boardId)}&cardId=${encodeURIComponent(cardId)}`
5705
+ );
5706
+ return res.data?.history ?? [];
5707
+ }
5708
+ /**
5709
+ * Commenter une carte, sans réécrire le tableau.
5710
+ *
5711
+ * C'est le geste que l'IA répète le plus, et souvent avec de longs textes :
5712
+ * le faire passer par une sauvegarde de tableau faisait transiter tout le
5713
+ * graphe de cartes à chaque phrase.
5714
+ */
5715
+ async addComment(boardId, cardId, detail, conversationId) {
5716
+ const res = await callCloud("/kanban/card/comment/add", {
5717
+ method: "POST",
5718
+ body: { boardId, cardId, detail, author: "ai", ...conversationId ? { conversationId } : {} }
5719
+ });
5720
+ return res.ok;
5721
+ }
5722
+ /** Poser une entrée de journal non-commentaire (une conversation qui s'ouvre). */
5723
+ async addCardEvent(boardId, cardId, type, detail) {
5724
+ const res = await callCloud("/kanban/card/event/add", {
5725
+ method: "POST",
5726
+ body: { boardId, cardId, type, detail }
5727
+ });
5728
+ return res.ok;
5729
+ }
5730
+ /** Déplacer une carte, sans réécrire le tableau. */
5731
+ async moveCard(boardId, cardId, toColumnId) {
5732
+ const res = await callCloud("/kanban/card/move", {
5733
+ method: "POST",
5734
+ body: { boardId, cardId, toColumnId }
5735
+ });
5736
+ return res.ok;
5737
+ }
5694
5738
  async create(input) {
5695
5739
  const organizationId = await resolveOrganizationId();
5696
5740
  if (!organizationId) return null;
@@ -5739,17 +5783,27 @@ async function executeKanbanCommands(boardId, cardId, commands, conversationId)
5739
5783
  return;
5740
5784
  }
5741
5785
  }
5786
+ let pendingBoardWrite = false;
5742
5787
  for (const cmd of commands) {
5743
5788
  if (cmd.type === "move_card" && cmd.columnTitle) {
5744
- const moved = moveCard(board, cardId, cmd.columnTitle);
5745
- if (!moved) console.warn(`[kanban-commands] move_card failed: card=${cardId} target="${cmd.columnTitle}"`);
5789
+ const target = board.columns.find(
5790
+ (c) => c.title.toLowerCase() === cmd.columnTitle.toLowerCase()
5791
+ );
5792
+ if (!target) {
5793
+ console.warn(`[kanban-commands] Target column "${cmd.columnTitle}" not found. Available: ${board.columns.map((c) => c.title).join(", ")}`);
5794
+ continue;
5795
+ }
5796
+ const ok = await kanbanStore.moveCard(board.id, cardId, target.id);
5797
+ if (!ok) console.warn(`[kanban-commands] move_card failed: card=${cardId} target="${cmd.columnTitle}"`);
5746
5798
  } else if (cmd.type === "add_comment" && cmd.comment) {
5747
- addComment(board, cardId, cmd.comment, conversationId);
5799
+ const ok = await kanbanStore.addComment(board.id, cardId, cmd.comment, conversationId);
5800
+ if (!ok) console.warn(`[kanban-commands] add_comment failed: card=${cardId}`);
5748
5801
  } else if (cmd.type === "add_card" && cmd.columnTitle && cmd.cardTitle) {
5749
5802
  addCardToColumn(board, cmd.columnTitle, cmd.cardTitle, cmd.cardContent);
5803
+ pendingBoardWrite = true;
5750
5804
  }
5751
5805
  }
5752
- await kanbanStore.update({ id: board.id, columns: board.columns });
5806
+ if (pendingBoardWrite) await kanbanStore.update({ id: board.id, columns: board.columns });
5753
5807
  }
5754
5808
  async function executeKanbanBoardCommands(boardId, commands) {
5755
5809
  if (commands.length === 0) return;
@@ -5762,43 +5816,6 @@ async function executeKanbanBoardCommands(boardId, commands) {
5762
5816
  }
5763
5817
  await kanbanStore.update({ id: board.id, columns: board.columns });
5764
5818
  }
5765
- function moveCard(board, cardId, targetColTitle) {
5766
- let sourceCol = "";
5767
- let card = null;
5768
- let sourceColIdx = -1;
5769
- let cardIdx = -1;
5770
- for (let ci = 0; ci < board.columns.length; ci++) {
5771
- const col = board.columns[ci];
5772
- const idx = col.cards.findIndex((c) => c.id === cardId);
5773
- if (idx !== -1) {
5774
- sourceCol = col.title;
5775
- card = col.cards[idx];
5776
- sourceColIdx = ci;
5777
- cardIdx = idx;
5778
- break;
5779
- }
5780
- }
5781
- if (!card || sourceColIdx === -1) return false;
5782
- const targetCol = board.columns.find(
5783
- (c) => c.title.toLowerCase() === targetColTitle.toLowerCase()
5784
- );
5785
- if (!targetCol) {
5786
- console.warn(`[kanban-commands] Target column "${targetColTitle}" not found. Available: ${board.columns.map((c) => c.title).join(", ")}`);
5787
- return false;
5788
- }
5789
- if (targetCol.id === board.columns[sourceColIdx].id) return true;
5790
- board.columns[sourceColIdx].cards.splice(cardIdx, 1);
5791
- card.order = targetCol.cards.length;
5792
- card.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
5793
- card.history = [...card.history ?? [], {
5794
- type: "moved",
5795
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
5796
- detail: `"${sourceCol}" \u2192 "${targetCol.title}"`,
5797
- author: "ai"
5798
- }];
5799
- targetCol.cards.push(card);
5800
- return true;
5801
- }
5802
5819
  function addCardToColumn(board, columnTitle, cardTitle, cardContent) {
5803
5820
  const col = board.columns.find((c) => c.title.toLowerCase() === columnTitle.toLowerCase());
5804
5821
  if (!col) return;
@@ -5815,28 +5832,12 @@ function addCardToColumn(board, columnTitle, cardTitle, cardContent) {
5815
5832
  };
5816
5833
  col.cards.push(card);
5817
5834
  }
5818
- function addComment(board, cardId, comment, conversationId) {
5819
- for (const col of board.columns) {
5820
- const card = col.cards.find((c) => c.id === cardId);
5821
- if (card) {
5822
- card.history = [...card.history ?? [], {
5823
- type: "comment",
5824
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
5825
- detail: comment,
5826
- author: "ai",
5827
- ...conversationId ? { conversationId } : {}
5828
- }];
5829
- card.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
5830
- return;
5831
- }
5832
- }
5833
- }
5834
5835
  function formatSize(bytes) {
5835
5836
  if (bytes < 1024) return `${bytes} o`;
5836
5837
  if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024)} Ko`;
5837
5838
  return `${(bytes / (1024 * 1024)).toFixed(1).replace(".", ",")} Mo`;
5838
5839
  }
5839
- function generateKanbanSystemPrompt(board, cardId) {
5840
+ function generateKanbanSystemPrompt(board, cardId, history) {
5840
5841
  let currentColTitle = "";
5841
5842
  let card = null;
5842
5843
  for (const col of board.columns) {
@@ -5866,7 +5867,8 @@ function generateKanbanSystemPrompt(board, cardId) {
5866
5867
  }
5867
5868
  lines.push("");
5868
5869
  if (card) {
5869
- const comments = (card.history ?? []).filter((e) => e.type === "comment");
5870
+ const events = history ?? card.history ?? [];
5871
+ const comments = events.filter((e) => e.type === "comment");
5870
5872
  if (comments.length > 0) {
5871
5873
  lines.push("### Commentaires existants sur cette carte :");
5872
5874
  lines.push("");
@@ -5881,7 +5883,7 @@ function generateKanbanSystemPrompt(board, cardId) {
5881
5883
  }
5882
5884
  if (card) {
5883
5885
  const files = card.attachments ?? [];
5884
- const commentFiles = (card.history ?? []).flatMap((e) => e.attachments ?? []);
5886
+ const commentFiles = (history ?? card.history ?? []).flatMap((e) => e.attachments ?? []);
5885
5887
  const all = [...files, ...commentFiles];
5886
5888
  if (all.length > 0) {
5887
5889
  lines.push(`### Pi\xE8ces jointes disponibles (${all.length})`);
@@ -6129,7 +6131,7 @@ function tailTranscript(opts) {
6129
6131
 
6130
6132
  // ../server/src/services/ai-runners/claude-pty-runner.ts
6131
6133
  async function getAgentManager() {
6132
- const { agentManager: agentManager2 } = await import("./agent-manager-2P4THUVA.js");
6134
+ const { agentManager: agentManager2 } = await import("./agent-manager-KGITN4AE.js");
6133
6135
  return agentManager2;
6134
6136
  }
6135
6137
  function buildPtyArgs(params, sessionId, opts) {
@@ -6782,7 +6784,7 @@ async function shutdownCodexAppServer() {
6782
6784
  }
6783
6785
  }
6784
6786
  async function getAgentManager2() {
6785
- const { agentManager: agentManager2 } = await import("./agent-manager-2P4THUVA.js");
6787
+ const { agentManager: agentManager2 } = await import("./agent-manager-KGITN4AE.js");
6786
6788
  return agentManager2;
6787
6789
  }
6788
6790
  function parseRuneyaCurlCommand(command) {
@@ -7466,7 +7468,13 @@ async function buildCliSystemContext(conv, jwt) {
7466
7468
  if (conv?.kanbanBoardId) {
7467
7469
  const kanbanBoard = await kanbanStore.get(conv.kanbanBoardId);
7468
7470
  if (kanbanBoard) {
7469
- systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(kanbanBoard, conv.kanbanCardId) : generateKanbanPopulatePrompt(kanbanBoard));
7471
+ systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(
7472
+ kanbanBoard,
7473
+ conv.kanbanCardId,
7474
+ // Le journal ne vient plus avec le tableau : le contexte de l'agent
7475
+ // le demande pour la seule carte qui le concerne.
7476
+ await kanbanStore.cardHistory(kanbanBoard.id, conv.kanbanCardId)
7477
+ ) : generateKanbanPopulatePrompt(kanbanBoard));
7470
7478
  }
7471
7479
  }
7472
7480
  return systemContext;
@@ -7867,7 +7875,13 @@ ${input.prompt}` : input.prompt;
7867
7875
  if (conv.kanbanBoardId) {
7868
7876
  const kanbanBoard = await kanbanStore.get(conv.kanbanBoardId);
7869
7877
  if (kanbanBoard) {
7870
- systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(kanbanBoard, conv.kanbanCardId) : generateKanbanPopulatePrompt(kanbanBoard));
7878
+ systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(
7879
+ kanbanBoard,
7880
+ conv.kanbanCardId,
7881
+ // Le journal ne vient plus avec le tableau : le contexte de l'agent
7882
+ // le demande pour la seule carte qui le concerne.
7883
+ await kanbanStore.cardHistory(kanbanBoard.id, conv.kanbanCardId)
7884
+ ) : generateKanbanPopulatePrompt(kanbanBoard));
7871
7885
  }
7872
7886
  }
7873
7887
  const mcpServerPath = fileURLToPath(new URL("../mcp-server/index.js", import.meta.url));
@@ -7982,7 +7996,13 @@ ${input.prompt}` : input.prompt;
7982
7996
  if (conv.kanbanBoardId) {
7983
7997
  const kanbanBoard = await kanbanStore.get(conv.kanbanBoardId);
7984
7998
  if (kanbanBoard) {
7985
- systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(kanbanBoard, conv.kanbanCardId) : generateKanbanPopulatePrompt(kanbanBoard));
7999
+ systemContext += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(
8000
+ kanbanBoard,
8001
+ conv.kanbanCardId,
8002
+ // Le journal ne vient plus avec le tableau : le contexte de l'agent
8003
+ // le demande pour la seule carte qui le concerne.
8004
+ await kanbanStore.cardHistory(kanbanBoard.id, conv.kanbanCardId)
8005
+ ) : generateKanbanPopulatePrompt(kanbanBoard));
7986
8006
  }
7987
8007
  }
7988
8008
  const resolvedImages = input.imageIds && input.imageIds.length > 0 ? await resolveImagesToBase64(input.imageIds.map((id) => ({ imageId: id, mimeType: "" })), input.conversationId) : [];
@@ -8075,7 +8095,13 @@ ${input.prompt}` : input.prompt;
8075
8095
  if (conv && conv.kanbanBoardId) {
8076
8096
  const kanbanBoard = await kanbanStore.get(conv.kanbanBoardId);
8077
8097
  if (kanbanBoard) {
8078
- system += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(kanbanBoard, conv.kanbanCardId) : generateKanbanPopulatePrompt(kanbanBoard));
8098
+ system += "\n\n" + (conv.kanbanCardId ? generateKanbanSystemPrompt(
8099
+ kanbanBoard,
8100
+ conv.kanbanCardId,
8101
+ // Le journal ne vient plus avec le tableau : le contexte de l'agent
8102
+ // le demande pour la seule carte qui le concerne.
8103
+ await kanbanStore.cardHistory(kanbanBoard.id, conv.kanbanCardId)
8104
+ ) : generateKanbanPopulatePrompt(kanbanBoard));
8079
8105
  }
8080
8106
  }
8081
8107
  const resolvedImages = input.imageIds && input.imageIds.length > 0 ? await resolveImagesToBase64(input.imageIds.map((id) => ({ imageId: id, mimeType: "" })), input.conversationId) : [];
@@ -10769,19 +10795,8 @@ var KanbanQueueService = class extends EventEmitter4 {
10769
10795
  this.running.push(runItem);
10770
10796
  this.emit("changed");
10771
10797
  const eventType = item.scenarioId ? "scenario_started" : "conversation_started";
10772
- for (const col of board.columns) {
10773
- const target = col.cards.find((c) => c.id === item.cardId);
10774
- if (target) {
10775
- target.history = [...target.history ?? [], {
10776
- type: eventType,
10777
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
10778
- detail: conv.id
10779
- }];
10780
- kanbanStore.update({ id: board.id, columns: board.columns }).catch(() => {
10781
- });
10782
- break;
10783
- }
10784
- }
10798
+ kanbanStore.addCardEvent(board.id, item.cardId, eventType, conv.id).catch(() => {
10799
+ });
10785
10800
  if (item.scenarioId) {
10786
10801
  void runScenario(conv.id, item.scenarioId, cardContent, {
10787
10802
  runnerOverride: item.runner,
@@ -10802,7 +10817,8 @@ var KanbanQueueService = class extends EventEmitter4 {
10802
10817
  try {
10803
10818
  const model = item.model || (item.runner === "codex" ? "" : "claude-opus-4-6");
10804
10819
  const starter = item.runner === "codex" ? startCodexSession : startClaudeCodeSession;
10805
- const { done } = await starter(runItem.conversationId, cardContent, { model });
10820
+ const jwt = await signJwt();
10821
+ const { done } = await starter(runItem.conversationId, cardContent, { model, jwt });
10806
10822
  await done;
10807
10823
  } finally {
10808
10824
  this.finishItem(runItem.id);
@@ -10888,7 +10904,9 @@ var kanbanQueueRouter = router({
10888
10904
  });
10889
10905
 
10890
10906
  // ../server/src/trpc/routers/kanban.ts
10891
- import { mkdir as mkdir14, writeFile as writeFile11 } from "fs/promises";
10907
+ import { mkdir as mkdir14, readdir as readdir5, rm as rm2, stat as stat3, writeFile as writeFile11 } from "fs/promises";
10908
+ import { createHash } from "crypto";
10909
+ import { tmpdir } from "os";
10892
10910
  import { join as join16 } from "path";
10893
10911
  import { z as z20 } from "zod";
10894
10912
  import { TRPCError as TRPCError17 } from "@trpc/server";
@@ -10900,7 +10918,7 @@ function summarizeCard(card, boardId, columnTitle) {
10900
10918
  title: card.title,
10901
10919
  markdown: card.markdown ?? "",
10902
10920
  assignees: (card.assignees ?? []).map((a) => a.name),
10903
- commentCount: (card.history ?? []).filter((e) => e.type === "comment").length,
10921
+ commentCount: card.commentCount ?? (card.history ?? []).filter((e) => e.type === "comment").length,
10904
10922
  attachmentCount: (card.attachments ?? []).length,
10905
10923
  // Metadata only — the bytes are fetched on demand by `downloadAttachment`.
10906
10924
  attachments: (card.attachments ?? []).map((f) => ({
@@ -10931,13 +10949,54 @@ function normalize(value) {
10931
10949
  return value.normalize("NFD").replace(new RegExp("\\p{Diacritic}", "gu"), "").toLowerCase();
10932
10950
  }
10933
10951
  var ATTACHMENT_ID_REGEX = /^[A-Za-z0-9_-]{1,128}$/;
10952
+ function safeDecode(value) {
10953
+ try {
10954
+ return decodeURIComponent(value);
10955
+ } catch {
10956
+ return "";
10957
+ }
10958
+ }
10934
10959
  var MAX_ATTACHMENT_BYTES = 55 * 1024 * 1024;
10935
10960
  function attachmentCacheDir() {
10936
- return join16(env.DATA_DIR, "kanban-attachments");
10961
+ return join16(tmpdir(), "runeya-kanban-attachments");
10962
+ }
10963
+ var ATTACHMENT_CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
10964
+ async function purgeStaleAttachments(dir, ttlMs = ATTACHMENT_CACHE_TTL_MS) {
10965
+ try {
10966
+ const cutoff = Date.now() - ttlMs;
10967
+ for (const name of await readdir5(dir)) {
10968
+ const path = join16(dir, name);
10969
+ const info = await stat3(path).catch(() => null);
10970
+ if (info && info.mtimeMs < cutoff) await rm2(path, { force: true });
10971
+ }
10972
+ } catch {
10973
+ }
10974
+ }
10975
+ function attachmentCacheDirs() {
10976
+ return [attachmentCacheDir(), join16(env.DATA_DIR, "kanban-attachments")];
10977
+ }
10978
+ async function storeAttachment(id, name, body, dirs = attachmentCacheDirs()) {
10979
+ const refusals = [];
10980
+ for (const dir of dirs) {
10981
+ try {
10982
+ await mkdir14(dir, { recursive: true });
10983
+ const path = join16(dir, safeLocalName(id, name));
10984
+ await writeFile11(path, body);
10985
+ void purgeStaleAttachments(dir);
10986
+ return path;
10987
+ } catch (err) {
10988
+ refusals.push(`${dir} (${err instanceof Error ? err.message : String(err)})`);
10989
+ }
10990
+ }
10991
+ throw new TRPCError17({
10992
+ code: "INTERNAL_SERVER_ERROR",
10993
+ message: `Impossible d'\xE9crire la pi\xE8ce jointe sur cette machine. Emplacements essay\xE9s : ${refusals.join(" ; ")}. V\xE9rifiez les droits d'\xE9criture, ou l'espace disque.`
10994
+ });
10937
10995
  }
10938
10996
  function safeLocalName(id, name) {
10997
+ const base = createHash("sha256").update(id).digest("hex").slice(0, 32);
10939
10998
  const ext = /\.([A-Za-z0-9]{1,12})$/.exec(name)?.[1];
10940
- return ext ? `${id}.${ext.toLowerCase()}` : id;
10999
+ return ext ? `${base}.${ext.toLowerCase()}` : base;
10941
11000
  }
10942
11001
  var kanbanRouter = router({
10943
11002
  /**
@@ -11059,11 +11118,9 @@ var kanbanRouter = router({
11059
11118
  }
11060
11119
  const contentType = res.headers.get("content-type") ?? "application/octet-stream";
11061
11120
  const disposition = res.headers.get("content-disposition") ?? "";
11062
- const name = /filename="([^"]*)"/.exec(disposition)?.[1] || id;
11063
- const dir = attachmentCacheDir();
11064
- await mkdir14(dir, { recursive: true });
11065
- const path = join16(dir, safeLocalName(id, name));
11066
- await writeFile11(path, body);
11121
+ const encoded = /filename\*=UTF-8''([^;]+)/i.exec(disposition)?.[1];
11122
+ const name = (encoded ? safeDecode(encoded) : "") || /filename="([^"]*)"/.exec(disposition)?.[1] || id;
11123
+ const path = await storeAttachment(id, name, body);
11067
11124
  return { path, name, contentType, size: body.length };
11068
11125
  })
11069
11126
  });
@@ -11191,7 +11248,7 @@ var utilityRouter = router({
11191
11248
  // ../server/src/trpc/routers/wiki.ts
11192
11249
  import { z as z23 } from "zod";
11193
11250
  import { TRPCError as TRPCError19 } from "@trpc/server";
11194
- import { readFile as readFile13, readdir as readdir5, stat as stat3, realpath, writeFile as writeFile12, mkdir as mkdir15, rename as rename10, rm as rm2 } from "fs/promises";
11251
+ import { readFile as readFile13, readdir as readdir6, stat as stat4, realpath, writeFile as writeFile12, mkdir as mkdir15, rename as rename10, rm as rm3 } from "fs/promises";
11195
11252
  import { resolve as resolvePath, join as join17, relative, sep as sep3, dirname as dirname3 } from "path";
11196
11253
  var SCOPE_SCHEMA = z23.union([
11197
11254
  z23.literal("global"),
@@ -11254,7 +11311,7 @@ async function walkLocal(root, dir, depth, counter) {
11254
11311
  if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
11255
11312
  let entries;
11256
11313
  try {
11257
- entries = await readdir5(dir, { withFileTypes: true });
11314
+ entries = await readdir6(dir, { withFileTypes: true });
11258
11315
  } catch {
11259
11316
  return [];
11260
11317
  }
@@ -11327,7 +11384,7 @@ var wikiRouter = router({
11327
11384
  return agentManager.agentQuery(target.agentId, "wiki.readRepoMarkdown", { cwd: target.cwd, path: input.path });
11328
11385
  }
11329
11386
  const file = await resolveSafeLocal(target.root, input.path, true);
11330
- const s = await stat3(file);
11387
+ const s = await stat4(file);
11331
11388
  if (!s.isFile()) throw new TRPCError19({ code: "BAD_REQUEST", message: "Pas un fichier" });
11332
11389
  if (s.size > MAX_FILE_BYTES) throw new TRPCError19({ code: "PAYLOAD_TOO_LARGE", message: "Fichier trop volumineux" });
11333
11390
  const content = await readFile13(file, "utf-8");
@@ -11356,7 +11413,7 @@ var wikiRouter = router({
11356
11413
  }
11357
11414
  const file = await resolveSafeLocal(target.root, input.path, false);
11358
11415
  try {
11359
- await stat3(file);
11416
+ await stat4(file);
11360
11417
  throw new TRPCError19({ code: "CONFLICT", message: "Fichier d\xE9j\xE0 existant" });
11361
11418
  } catch (err) {
11362
11419
  if (err instanceof TRPCError19) throw err;
@@ -11382,7 +11439,7 @@ var wikiRouter = router({
11382
11439
  const from = await resolveSafeLocal(target.root, input.fromPath, true);
11383
11440
  const to = await resolveSafeLocal(target.root, input.toPath, false);
11384
11441
  try {
11385
- await stat3(to);
11442
+ await stat4(to);
11386
11443
  throw new TRPCError19({ code: "CONFLICT", message: "La cible existe d\xE9j\xE0" });
11387
11444
  } catch (err) {
11388
11445
  if (err instanceof TRPCError19) throw err;
@@ -11411,7 +11468,7 @@ var wikiRouter = router({
11411
11468
  }
11412
11469
  const fp = await resolveSafeLocal(target.root, input.path, true);
11413
11470
  if (fp === target.root) throw new TRPCError19({ code: "FORBIDDEN", message: "Impossible de supprimer la racine" });
11414
- await rm2(fp, { recursive: true, force: true });
11471
+ await rm3(fp, { recursive: true, force: true });
11415
11472
  return { path: input.path, ok: true };
11416
11473
  })
11417
11474
  });
@@ -11849,7 +11906,7 @@ var cloudSyncBridge = new CloudSyncBridge();
11849
11906
 
11850
11907
  // ../server/src/services/master-password.ts
11851
11908
  import { randomBytes as randomBytes4, createCipheriv, createDecipheriv } from "crypto";
11852
- import { readFile as readFile15, writeFile as writeFile14, chmod as chmod10, stat as stat4, rename as rename12 } from "fs/promises";
11909
+ import { readFile as readFile15, writeFile as writeFile14, chmod as chmod10, stat as stat5, rename as rename12 } from "fs/promises";
11853
11910
  import { join as join19 } from "path";
11854
11911
  import { Entry } from "@napi-rs/keyring";
11855
11912
  import { hashRaw as argon2HashRaw } from "@node-rs/argon2";
@@ -11862,7 +11919,7 @@ var CANARY_PLAINTEXT = "runeya:v1:key-verification";
11862
11919
  var MAX_KEY_FILE_SIZE = 1024;
11863
11920
  var ARGON2_OPTIONS = { memoryCost: 65536, timeCost: 3, parallelism: 4, outputLen: 32 };
11864
11921
  async function readKeyFile(filePath) {
11865
- const s = await stat4(filePath);
11922
+ const s = await stat5(filePath);
11866
11923
  if (s.size > MAX_KEY_FILE_SIZE) throw new Error(`Fichier suspect : ${filePath} (${s.size} octets)`);
11867
11924
  return readFile15(filePath);
11868
11925
  }
@@ -11998,7 +12055,7 @@ async function readVerifyFile(dataDir) {
11998
12055
  }
11999
12056
  async function hasVerifyFile(dataDir) {
12000
12057
  try {
12001
- await stat4(join19(dataDir, VERIFY_FILENAME));
12058
+ await stat5(join19(dataDir, VERIFY_FILENAME));
12002
12059
  return true;
12003
12060
  } catch {
12004
12061
  return false;
@@ -12006,7 +12063,7 @@ async function hasVerifyFile(dataDir) {
12006
12063
  }
12007
12064
  async function hasEncryptedKeyFile(dataDir) {
12008
12065
  try {
12009
- await stat4(join19(dataDir, ENCRYPTED_KEY_FILENAME));
12066
+ await stat5(join19(dataDir, ENCRYPTED_KEY_FILENAME));
12010
12067
  return true;
12011
12068
  } catch {
12012
12069
  return false;
@@ -12139,7 +12196,7 @@ var MigrationEngine = class {
12139
12196
  var migrationEngine = new MigrationEngine();
12140
12197
 
12141
12198
  // ../server/src/services/file-security.ts
12142
- import { chmod as chmod11, stat as stat5 } from "fs/promises";
12199
+ import { chmod as chmod11, stat as stat6 } from "fs/promises";
12143
12200
  import { join as join20 } from "path";
12144
12201
  var SENSITIVE_FILES = [
12145
12202
  "agents.json",
@@ -12154,7 +12211,7 @@ async function ensureFilePermissions() {
12154
12211
  for (const filename of SENSITIVE_FILES) {
12155
12212
  const filepath = join20(env.DATA_DIR, filename);
12156
12213
  try {
12157
- const stats = await stat5(filepath);
12214
+ const stats = await stat6(filepath);
12158
12215
  const mode = stats.mode & 511;
12159
12216
  if (mode !== SECURE_MODE) {
12160
12217
  console.warn("[security] File", filename, "has mode", mode.toString(8) + ", fixing to 600");
@@ -12221,7 +12278,7 @@ import {
12221
12278
  rename as rename13,
12222
12279
  mkdir as mkdir17,
12223
12280
  access as access2,
12224
- readdir as readdir6
12281
+ readdir as readdir7
12225
12282
  } from "fs/promises";
12226
12283
  import { join as join22 } from "path";
12227
12284
  var _require = createRequire(import.meta.url);
@@ -12390,14 +12447,14 @@ async function runLegacyMigration(dataDir) {
12390
12447
  }
12391
12448
  }
12392
12449
  const envsDir = join22(dbsDir, "envs");
12393
- const envFiles = (await readdir6(envsDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12450
+ const envFiles = (await readdir7(envsDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12394
12451
  const legacyEnvs = {};
12395
12452
  for (const file of envFiles) {
12396
12453
  const name = file.replace(".encrypted.json", "");
12397
12454
  legacyEnvs[name] = await readEncrypted(join22(envsDir, file));
12398
12455
  }
12399
12456
  const servicesDir = join22(dbsDir, "services");
12400
- const serviceFiles = (await readdir6(servicesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12457
+ const serviceFiles = (await readdir7(servicesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12401
12458
  const legacyServices = {};
12402
12459
  for (const file of serviceFiles) {
12403
12460
  const name = file.replace(".encrypted.json", "");
@@ -12406,7 +12463,7 @@ async function runLegacyMigration(dataDir) {
12406
12463
  if (data?.label) legacyServices[name] = data;
12407
12464
  }
12408
12465
  const overridesDir = join22(dbsDir, "overrides");
12409
- const overrideFiles = (await readdir6(overridesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12466
+ const overrideFiles = (await readdir7(overridesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12410
12467
  const legacyServiceOverrides = {};
12411
12468
  const legacyEnvOverrides = {};
12412
12469
  for (const file of overrideFiles) {
@@ -12420,7 +12477,7 @@ async function runLegacyMigration(dataDir) {
12420
12477
  }
12421
12478
  }
12422
12479
  const parsersDir = join22(dbsDir, "parsers");
12423
- const parserFiles = (await readdir6(parsersDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12480
+ const parserFiles = (await readdir7(parsersDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
12424
12481
  const legacyParsers = [];
12425
12482
  for (const file of parserFiles) {
12426
12483
  const data = await readEncrypted(join22(parsersDir, file));
@@ -12800,7 +12857,7 @@ ${p.transform ?? ""}`,
12800
12857
  }
12801
12858
  async function findLegacyKeyInBackup(dataDir) {
12802
12859
  try {
12803
- const entries = await readdir6(dataDir);
12860
+ const entries = await readdir7(dataDir);
12804
12861
  const backupDirs = entries.filter((e) => e.startsWith("backup-")).sort((a, b) => a < b ? -1 : a > b ? 1 : 0).reverse();
12805
12862
  for (const dir of backupDirs) {
12806
12863
  const keyJsonPath = join22(dataDir, dir, "dbs", "encryption-key.json");
@@ -12834,7 +12891,7 @@ async function runOverrideOnlyMigration(dataDir) {
12834
12891
  let overrideFiles = [];
12835
12892
  for (const dir of candidateDirs) {
12836
12893
  try {
12837
- const files = (await readdir6(dir)).filter((f) => f.endsWith(".encrypted.json"));
12894
+ const files = (await readdir7(dir)).filter((f) => f.endsWith(".encrypted.json"));
12838
12895
  if (files.length > 0) {
12839
12896
  overridesDir = dir;
12840
12897
  overrideFiles = files;
@@ -13010,7 +13067,7 @@ async function runOverrideOnlyMigration(dataDir) {
13010
13067
 
13011
13068
  // ../server/src/services/server-state.ts
13012
13069
  import { join as join23 } from "path";
13013
- import { stat as stat6 } from "fs/promises";
13070
+ import { stat as stat7 } from "fs/promises";
13014
13071
  var ENCRYPTED_KEY_FILENAME2 = ".encryption.key.enc";
13015
13072
  var VERIFY_FILENAME2 = ".runeya-verify";
13016
13073
  async function getServerState() {
@@ -13019,17 +13076,17 @@ async function getServerState() {
13019
13076
  let hasVerify = false;
13020
13077
  let hasData = false;
13021
13078
  try {
13022
- await stat6(join23(dataDir, ENCRYPTED_KEY_FILENAME2));
13079
+ await stat7(join23(dataDir, ENCRYPTED_KEY_FILENAME2));
13023
13080
  hasEncFile = true;
13024
13081
  } catch {
13025
13082
  }
13026
13083
  try {
13027
- await stat6(join23(dataDir, VERIFY_FILENAME2));
13084
+ await stat7(join23(dataDir, VERIFY_FILENAME2));
13028
13085
  hasVerify = true;
13029
13086
  } catch {
13030
13087
  }
13031
13088
  try {
13032
- await stat6(join23(dataDir, "projects.json"));
13089
+ await stat7(join23(dataDir, "projects.json"));
13033
13090
  hasData = true;
13034
13091
  } catch {
13035
13092
  }
@@ -14179,4 +14236,4 @@ export {
14179
14236
  createLocalServer,
14180
14237
  pullEnv
14181
14238
  };
14182
- //# sourceMappingURL=src-ZYEDS2TT.js.map
14239
+ //# sourceMappingURL=src-I5LYBYA2.js.map