@runeya/runeya 2.0.28 → 2.0.29
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.
- package/agent/index.js +23 -1
- package/agent/index.js.map +1 -1
- package/agent-manager-KGITN4AE.js +7 -0
- package/{chunk-Y2R42AXQ.js → chunk-PZHVJHTC.js} +24 -2
- package/chunk-PZHVJHTC.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-ZYEDS2TT.js → src-W64XJTN5.js} +162 -114
- package/src-W64XJTN5.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-CvVAU4_Z.js → AgentScalarChatInterface.vue-Tid9c7AI.js} +1 -1
- package/web/assets/{AgentTerminalPage-DJbjkS_P.js → AgentTerminalPage-Bfmc2lJ5.js} +1 -1
- package/web/assets/AiChatPage-LbXbHkW7.js +1 -0
- package/web/assets/{AppLayout-CmgZhtWb.js → AppLayout-Cq3bBVsr.js} +1 -1
- package/web/assets/{AuditPage-CIQXRIah.js → AuditPage-BTk2MLfW.js} +1 -1
- package/web/assets/CloudAccountPage--sgdl0BR.js +1 -0
- package/web/assets/{CloudAccountPage-B-ediB1R.js → CloudAccountPage-sObD2Djw.js} +1 -1
- package/web/assets/{CloudMessagingPage-DvZuiSk3.js → CloudMessagingPage-DbkITdyZ.js} +1 -1
- package/web/assets/{DashboardPage-Dx7xHCCP.js → DashboardPage-CW5p34P0.js} +1 -1
- package/web/assets/{EditorIcon-4f28vJdz.js → EditorIcon-D1wp4885.js} +1 -1
- package/web/assets/{EnvironmentForm-CR0xHO9G.js → EnvironmentForm-BA-0wfqa.js} +1 -1
- package/web/assets/{EnvironmentFormPage-qc4WT8Xk.js → EnvironmentFormPage-ePoUSDaO.js} +1 -1
- package/web/assets/{EnvironmentListPage-DIjYKLDE.js → EnvironmentListPage-Cgn6NwWL.js} +1 -1
- package/web/assets/{EnvironmentSelector-C3yA1kHZ.js → EnvironmentSelector-C8aULVdj.js} +1 -1
- package/web/assets/KanbanBoardPage-0TVI8ncW.js +4 -0
- package/web/assets/KanbanBoardPage-kpZiPs_o.css +1 -0
- package/web/assets/{KanbanListPage-Drt3lxBT.js → KanbanListPage-B6QRYUG8.js} +1 -1
- package/web/assets/{LaunchProjectPage-DQDogPxL.js → LaunchProjectPage-jx4qoZlc.js} +1 -1
- package/web/assets/{LaunchServicesPage-Jg18jEbK.js → LaunchServicesPage-C2hQ8iiO.js} +1 -1
- package/web/assets/{LogViewer-DF9GVFWC.js → LogViewer-DPQTUsar.js} +1 -1
- package/web/assets/{ProcessControls-Umt6f5xy.js → ProcessControls-n_p4xwJz.js} +1 -1
- package/web/assets/{ProcessDetailPage-CTljkKd4.js → ProcessDetailPage-Cm2iN-19.js} +1 -1
- package/web/assets/{ProcessMetrics-XANBf0Qk.js → ProcessMetrics-DRxTLIIf.js} +1 -1
- package/web/assets/{ProjectDetailPage-tYK7WVg5.js → ProjectDetailPage-DO7pKGee.js} +1 -1
- package/web/assets/{ProjectListPage-Bl2xRUn8.js → ProjectListPage-CljuUt8K.js} +1 -1
- package/web/assets/{RandomJobTestPage-D-1h_Jn0.js → RandomJobTestPage-DqbzEMbv.js} +1 -1
- package/web/assets/{ScenarioEditorPage-AYudLHpb.js → ScenarioEditorPage-DRUK4ep3.js} +1 -1
- package/web/assets/{SendToChatDialog-Cy3nX2xD.js → SendToChatDialog-C6d_cEQ4.js} +1 -1
- package/web/assets/{ServiceControlsBar-CXk2ltIc.js → ServiceControlsBar-BcCBOny2.js} +1 -1
- package/web/assets/{ServiceDetailPage-guE9lv3J.js → ServiceDetailPage-B5Z2oyG1.js} +1 -1
- package/web/assets/{ServiceFormPage-BfhD3cHh.js → ServiceFormPage-BkRlzAMF.js} +1 -1
- package/web/assets/{SettingsPage-B1egv0Qi.js → SettingsPage-CkAaTz8q.js} +4 -4
- package/web/assets/{SetupPage-DDqjtbHe.js → SetupPage-DRRqBmwE.js} +1 -1
- package/web/assets/{UnlockPage-B9V18Hw8.js → UnlockPage-DFHKtpGb.js} +1 -1
- package/web/assets/{VariablesTable-B4z_Cvs6.js → VariablesTable-Csi8gzLH.js} +1 -1
- package/web/assets/{VersionBadge-D5Im-g6k.js → VersionBadge-C1-aqmd0.js} +1 -1
- package/web/assets/WikiPage-amGnOY35.js +1 -0
- package/web/assets/{WikiView-BkAYyIky.js → WikiView-BSFsn874.js} +1 -1
- package/web/assets/{add-scalar-classes-wf0v84bl.js → add-scalar-classes-BrZlN4Hz.js} +3 -3
- package/web/assets/auth-errors-VpVD7Ji8.js +1 -0
- package/web/assets/{autocomplete-Cl85AjsC.js → autocomplete-CqNBR7AV.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-EjFsbEU6.js → basic-shape-diamond.svg-pmR0NFra.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-BSGF96h_.js → basic-shape-hexagon.svg-DoFRZCyQ.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DzhBsSTr.js → basic-shape-primary-circle-ellipse-round.svg-CPjLQmZx.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-D8s7AAg0.js → basic-shape-primary-square-rectangle.svg-DcMAxrju.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-CZVfGGSa.js → basic-shape-shield.svg-Dmg9h6Ld.js} +1 -1
- package/web/assets/{browser-DeK7cxfP.js → browser-C6RUDE7s.js} +1 -1
- package/web/assets/{browser-BJbPa5wA.js → browser-DfiNANMf.js} +1 -1
- package/web/assets/{card-C8VZemYn.js → card-BtNd-O08.js} +1 -1
- package/web/assets/{checkbox-CHlXPfVG.js → checkbox-CCOdP3PH.js} +1 -1
- package/web/assets/{chip-BIf8nQZp.js → chip-CKD4ZA_K.js} +1 -1
- package/web/assets/{client-Ck5Tf_q2.js → client-DUaS1tvD.js} +1 -1
- package/web/assets/{cloud-chat.store-qtVT5SrP.js → cloud-chat.store-Do2pLXa6.js} +1 -1
- package/web/assets/cloud-client-DkNqusEt.js +1 -0
- package/web/assets/{column-DzFOwR4r.js → column-EYuEVcRt.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-DZQuEpZF.js → computer-device-desktop-monitor.svg-C8qLTM16.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CEjLM8aJ.js → computer-device-desktop.svg-BwIQxUgG.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-DXtolGzW.js → computer-device-laptop.svg-je8g4h4s.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BSwre-M8.js → computer-device-mobile-phone-android-samsung-back.svg-DXuOmvmg.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BGERJFfo.js → computer-device-mobile-phone-android-samsung.svg-Dvck__2L.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B4hZe_83.js → computer-device-mobile-phone-iphone-x-back.svg-BRzKNDWY.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CWALzaq5.js → computer-device-mobile-phone-iphone-x.svg-DwKt9Eia.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-CKFDix2A.js → computer-device-mobile-tablet-touch.svg-B65iLEZR.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-PW6AfYK8.js → computer-device-mobile-tablet.svg-BbUYpqRa.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-Mv5w5TOF.js → computer-device-network-ethernet-cat6.svg-TVQFk_lM.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-8StLkiX8.js → computer-device-network-lan-www.svg-D9wNL1d9.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-BeLrrgP7.js → computer-device-network-wifi-connection.svg-B3l3vDCq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-CJiZPTY7.js → computer-device-network-wifi-router.svg-CfJjWVyH.js} +1 -1
- package/web/assets/{cssMode-BhLSG915.js → cssMode-CT0VgZiM.js} +1 -1
- package/web/assets/{divider-Bqt4F4Qp.js → divider-BAtaraJT.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-BbZXykYT.js → ecology-science-erlenmeyer-flask.svg-DCqj3wuN.js} +1 -1
- package/web/assets/{fieldset-Ckk9RxbZ.js → fieldset-Bmfuw85t.js} +1 -1
- package/web/assets/{freemarker2-BMY7vTsn.js → freemarker2-DcS0oW9c.js} +1 -1
- package/web/assets/{handlebars-dL1R3--H.js → handlebars-EYnEyJJj.js} +1 -1
- package/web/assets/{html-344qni_p.js → html-Cy3hBLsT.js} +1 -1
- package/web/assets/{htmlMode-DofkmDyO.js → htmlMode-7YMQ7tB-.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-CUKVp-AP.js → image-flash-lightning.svg-D6x2pDl8.js} +1 -1
- package/web/assets/{image-picture-flower.svg-D8v_AWKn.js → image-picture-flower.svg-qlZATukV.js} +1 -1
- package/web/assets/{index-0h6-JSBE.js → index-ZFdBtCGG.js} +5 -5
- package/web/assets/{interface-alert-exclamation-diamond.svg-Svf3SQNi.js → interface-alert-exclamation-diamond.svg-Bt2YgBdz.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BONYDBCR.js → interface-alert-exclamation-triangle-warning.svg-BL6E9tsG.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-DjtyOApC.js → interface-alert-information-circle.svg-C2mU-Jrm.js} +1 -1
- package/web/assets/{interface-award-crown.svg-CYsHquI5.js → interface-award-crown.svg-C_908siC.js} +1 -1
- package/web/assets/{interface-bookmark.svg-Dq6ycrvL.js → interface-bookmark-tag.svg-CdwmwagL.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-BuQVffZJ.js → interface-bookmark.svg-DiGis0Pq.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-DByu3wOg.js → interface-calendar-date-one.svg-DZJTVsRH.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-B26NylpB.js → interface-content-book-open-pages.svg-BWjmGbGN.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-BB2ivXh0.js → interface-content-book-page.svg-HTArRhqF.js} +1 -1
- package/web/assets/{interface-content-file.svg-gFnNuymA.js → interface-content-file.svg-CEK-6Dir.js} +1 -1
- package/web/assets/{interface-content-folder.svg-DvbImJww.js → interface-content-folder.svg-CvFy9IIg.js} +1 -1
- package/web/assets/interface-content-folder.svg-D9a2SnRw.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-Bp4l9Qod.js → interface-copy-clipboard.svg-CA9ObKG2.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-cayiblt2.js → interface-edit-attachment.svg-BuZlaKV6.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-BvIiESbT.js → interface-edit-binocular.svg-Bu-T_qRU.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-Bvfkkoft.js → interface-edit-magic-wand.svg-ZyOEyv4O.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-Dnoz9W9m.js → interface-edit-tool-paint-roller.svg-DBwhOf_F.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-aKau4_Jj.js → interface-edit-tool-pencil.svg-CMKU5EZ0.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DBvY_ky_.js → interface-favorite-award.svg-Djfprlrh.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-CBdbLlXI.js → interface-favorite-flag.svg-MM0Rm1Rf.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CB_C7DqH.js → interface-favorite-heart.svg-8eXxbVlD.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CtD9k4PE.js → interface-favorite-star.svg-CYpNa-DM.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-tL8H5LKH.js → interface-favorite-stars-sparkles.svg-KYu8S1Mc.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-DDZfke0l.js → interface-hierarchy-flowchart.svg-fr4rLXph.js} +1 -1
- package/web/assets/{interface-home-house.svg-928LKnoh.js → interface-home-house.svg-UfcAwTPa.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BVJBa9KF.js → interface-hyperlink.svg-DLpXwEy6.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-C6DvgPRs.js → interface-lighting-brightness.svg-aY4osIqa.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-NFylzPTC.js → interface-lock-closed.svg-CiMIugbj.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-EmxIAQyQ.js → interface-lock-open-unlock.svg-d5UkSt1y.js} +1 -1
- package/web/assets/{interface-login-key.svg-C0nFw-iu.js → interface-login-key.svg-C7Ml1iaN.js} +1 -1
- package/web/assets/{interface-search.svg-1Gq_uSPL.js → interface-search.svg-D8jY9D2U.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-3dq-AXqL.js → interface-setting-cog.svg-3DAxFuOM.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-Bb4qoyBo.js → interface-share-megaphone-bullhorn.svg-BsbqqS8a.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-1hUkfTAV.js → interface-share-rocket.svg-C_8HYujm.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-C1fkGxMj.js → interface-share-satellite.svg-3O-1mL1W.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-DCtyIZvd.js → interface-share-space-ship.svg-BDge8YMa.js} +1 -1
- package/web/assets/{interface-share.svg-D27oW8Dd.js → interface-share.svg-Fehxvv85.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DHNLXoLB.js → interface-signal-square.svg-C0c3wlFq.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-DVFfhzi_.js → interface-time-clock-circle.svg-Bj3gcDKD.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-J2kAIY5_.js → interface-time-hour-glass.svg-DUim2QDE.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-CT_rq2cA.js → interface-users-multiple.svg-vooB7JL-.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-DmUulEez.js → interface-weather-moon.svg-BcUz22tg.js} +1 -1
- package/web/assets/{javascript-DJEY0PGT.js → javascript-xFG-91vE.js} +1 -1
- package/web/assets/{jsonMode-Bf1QPhve.js → jsonMode-CXRfjDm6.js} +1 -1
- package/web/assets/{liquid-BvlkiSX0.js → liquid-DFaP2Us7.js} +1 -1
- package/web/assets/{lspLanguageFeatures-Blscl7vz.js → lspLanguageFeatures-Cj2beqH7.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-oLN5_z0h.js → mail-chat-bubble-square.svg-Q5_Wlk-h.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-B__7_Vor.js → mail-send-email-paper-airplane.svg-CjqQ7405.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DUobbjXC.js → mail-send-envelope.svg-MH4dR__N.js} +1 -1
- package/web/assets/{mdx-fAQ2xk7o.js → mdx-DDj1td2N.js} +1 -1
- package/web/assets/{message-V1S0zxyl.js → message-Dgvz1ZaX.js} +1 -1
- package/web/assets/{minus-DQocLKZ2.js → minus-Hsxq04kB.js} +1 -1
- package/web/assets/modal-BCbrFXdF.js +1 -0
- package/web/assets/{modal-Jd8c3A1o.js → modal-pAb11yGJ.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-Cj5pLd3R.js → money-cashier-receipt.svg-W10QYjo6.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-D85nPq3p.js → money-currency-dollar-pay.svg-jlzMCQus.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-B-jecr0K.js → money-graph-arrow-increase.svg-DjiVgX3u.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-mL9YQSKx.js → money-graph-bar-chart-increase.svg-BetO29r-.js} +1 -1
- package/web/assets/{multiselect-BDZrrJVC.js → multiselect-DAvUHXe1.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-C5PATFHo.js → nature-ecology-leaf.svg-68pXd-Nz.js} +1 -1
- package/web/assets/{password-CBpcX5yn.js → password-fBZDwzDL.js} +1 -1
- package/web/assets/{phone-telephone.svg-6VIpvy-y.js → phone-telephone.svg-5-34SVF9.js} +1 -1
- package/web/assets/{plus-B2jxpOLU.js → plus-BybvY8Jc.js} +1 -1
- package/web/assets/process.store-e8DffExf.js +1 -0
- package/web/assets/{programming-bug.svg-BcxVR8s8.js → programming-bug.svg-2bQdYECv.js} +1 -1
- package/web/assets/{programming-cloud.svg-k8vesSUP.js → programming-cloud.svg-DZ2V0eJT.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-C3BxhLIn.js → programming-computer-database-server.svg-hDSuUD9Z.js} +1 -1
- package/web/assets/{programming-computer-database.svg-D5JgkHxk.js → programming-computer-database.svg-BySVZkMc.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-QPzWv5-h.js → programming-module-four-layout.svg-CKIgCJwc.js} +1 -1
- package/web/assets/{programming-module-three.svg-C8sC64dR.js → programming-module-three.svg-DiWesNwV.js} +1 -1
- package/web/assets/{programming-module.svg-3IM9Ieau.js → programming-module.svg-DU0zOvVK.js} +1 -1
- package/web/assets/{programming-script-code.svg-CcSjILXf.js → programming-script-code.svg-DfSmaPH7.js} +1 -1
- package/web/assets/{python-izcQtunc.js → python-C25OjXtn.js} +1 -1
- package/web/assets/{radiobutton-DkaY7vPf.js → radiobutton-K1Libu7g.js} +1 -1
- package/web/assets/{razor-B8B2Hdv1.js → razor-DrRHsFwp.js} +1 -1
- package/web/assets/router-BQjVOlyD.js +1 -0
- package/web/assets/{settings.store-BnyuJ8Z0.js → settings.store-BCaFk23O.js} +1 -1
- package/web/assets/{shopping-cart.svg-Cd1oC6MU.js → shopping-cart.svg-NMibYZ0k.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-DADsc6IL.js → shopping-gift-present.svg-dqvSn838.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-RgU1qCOk.js → shopping-shipping-box-parcel-package.svg-CKYzVuYA.js} +1 -1
- package/web/assets/{src-DWLyvNxu.js → src-EWso2a1V.js} +1 -1
- package/web/assets/{src-DaE_IxON.js → src-_-zc3-Cp.js} +1 -1
- package/web/assets/{tabpanel-ps1UcMpu.js → tabpanel-BWhVX5cc.js} +1 -1
- package/web/assets/{tag-new-circle.svg-Ct1vN4KR.js → tag-new-circle.svg-JFLA4g9w.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-DES-h7fX.js → travel-map-earth-globe.svg-DdQN4a7G.js} +1 -1
- package/web/assets/trpc-BZfo9Cw2.js +1 -0
- package/web/assets/{tsMode-n-LTfcYC.js → tsMode-Cii9XdsR.js} +1 -1
- package/web/assets/{typescript-2xBvBpwO.js → typescript-zoLusRa0.js} +1 -1
- package/web/assets/useAiChatDrawer-CHmnbpKl.js +1 -0
- package/web/assets/{useCloudOrg-BEGIZ5Sw.css → useCloudOrg-CHCwXrRm.css} +1 -1
- package/web/assets/useCloudOrg-JZ6DFHrG.js +1 -0
- package/web/assets/{xml-DNDCpyoa.js → xml-BhaXJtQn.js} +1 -1
- package/web/assets/{yaml-BWEYJIfa.js → yaml-CDzjwB43.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-2P4THUVA.js +0 -7
- package/chunk-Y2R42AXQ.js.map +0 -1
- package/src-ZYEDS2TT.js.map +0 -1
- package/web/assets/AiChatPage-yheFOLqq.js +0 -1
- package/web/assets/CloudAccountPage-CPzIsKlw.js +0 -1
- package/web/assets/KanbanBoardPage-BDzDCbzp.css +0 -1
- package/web/assets/KanbanBoardPage-DWbeil-K.js +0 -4
- package/web/assets/WikiPage-CwULGndV.js +0 -1
- package/web/assets/auth-errors-_nnUuMls.js +0 -1
- package/web/assets/cloud-client-DZDFCmz5.js +0 -1
- package/web/assets/interface-content-folder.svg-oUFH-WWC.js +0 -1
- package/web/assets/modal-Cun3B13H.js +0 -1
- package/web/assets/process.store-IRJbG3V3.js +0 -1
- package/web/assets/router-DVcld2uT.js +0 -1
- package/web/assets/trpc-DL-TIO_-.js +0 -1
- package/web/assets/useAiChatDrawer-9vufna_G.js +0 -1
- package/web/assets/useCloudOrg-9Z9ojaI7.js +0 -1
- /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-
|
|
204
|
+
const { createLocalServer, pullEnv, PullEnvError } = await import("./src-W64XJTN5.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
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
stableEncryptValue,
|
|
59
59
|
traefikManager,
|
|
60
60
|
writeEntity
|
|
61
|
-
} from "./chunk-
|
|
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
|
-
|
|
5691
|
-
|
|
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
|
|
5745
|
-
|
|
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
|
|
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-
|
|
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-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
10773
|
-
|
|
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,
|
|
@@ -10888,7 +10903,9 @@ var kanbanQueueRouter = router({
|
|
|
10888
10903
|
});
|
|
10889
10904
|
|
|
10890
10905
|
// ../server/src/trpc/routers/kanban.ts
|
|
10891
|
-
import { mkdir as mkdir14, writeFile as writeFile11 } from "fs/promises";
|
|
10906
|
+
import { mkdir as mkdir14, readdir as readdir5, rm as rm2, stat as stat3, writeFile as writeFile11 } from "fs/promises";
|
|
10907
|
+
import { createHash } from "crypto";
|
|
10908
|
+
import { tmpdir } from "os";
|
|
10892
10909
|
import { join as join16 } from "path";
|
|
10893
10910
|
import { z as z20 } from "zod";
|
|
10894
10911
|
import { TRPCError as TRPCError17 } from "@trpc/server";
|
|
@@ -10900,7 +10917,7 @@ function summarizeCard(card, boardId, columnTitle) {
|
|
|
10900
10917
|
title: card.title,
|
|
10901
10918
|
markdown: card.markdown ?? "",
|
|
10902
10919
|
assignees: (card.assignees ?? []).map((a) => a.name),
|
|
10903
|
-
commentCount: (card.history ?? []).filter((e) => e.type === "comment").length,
|
|
10920
|
+
commentCount: card.commentCount ?? (card.history ?? []).filter((e) => e.type === "comment").length,
|
|
10904
10921
|
attachmentCount: (card.attachments ?? []).length,
|
|
10905
10922
|
// Metadata only — the bytes are fetched on demand by `downloadAttachment`.
|
|
10906
10923
|
attachments: (card.attachments ?? []).map((f) => ({
|
|
@@ -10933,11 +10950,45 @@ function normalize(value) {
|
|
|
10933
10950
|
var ATTACHMENT_ID_REGEX = /^[A-Za-z0-9_-]{1,128}$/;
|
|
10934
10951
|
var MAX_ATTACHMENT_BYTES = 55 * 1024 * 1024;
|
|
10935
10952
|
function attachmentCacheDir() {
|
|
10936
|
-
return join16(
|
|
10953
|
+
return join16(tmpdir(), "runeya-kanban-attachments");
|
|
10954
|
+
}
|
|
10955
|
+
var ATTACHMENT_CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
10956
|
+
async function purgeStaleAttachments(dir, ttlMs = ATTACHMENT_CACHE_TTL_MS) {
|
|
10957
|
+
try {
|
|
10958
|
+
const cutoff = Date.now() - ttlMs;
|
|
10959
|
+
for (const name of await readdir5(dir)) {
|
|
10960
|
+
const path = join16(dir, name);
|
|
10961
|
+
const info = await stat3(path).catch(() => null);
|
|
10962
|
+
if (info && info.mtimeMs < cutoff) await rm2(path, { force: true });
|
|
10963
|
+
}
|
|
10964
|
+
} catch {
|
|
10965
|
+
}
|
|
10966
|
+
}
|
|
10967
|
+
function attachmentCacheDirs() {
|
|
10968
|
+
return [attachmentCacheDir(), join16(env.DATA_DIR, "kanban-attachments")];
|
|
10969
|
+
}
|
|
10970
|
+
async function storeAttachment(id, name, body, dirs = attachmentCacheDirs()) {
|
|
10971
|
+
const refusals = [];
|
|
10972
|
+
for (const dir of dirs) {
|
|
10973
|
+
try {
|
|
10974
|
+
await mkdir14(dir, { recursive: true });
|
|
10975
|
+
const path = join16(dir, safeLocalName(id, name));
|
|
10976
|
+
await writeFile11(path, body);
|
|
10977
|
+
void purgeStaleAttachments(dir);
|
|
10978
|
+
return path;
|
|
10979
|
+
} catch (err) {
|
|
10980
|
+
refusals.push(`${dir} (${err instanceof Error ? err.message : String(err)})`);
|
|
10981
|
+
}
|
|
10982
|
+
}
|
|
10983
|
+
throw new TRPCError17({
|
|
10984
|
+
code: "INTERNAL_SERVER_ERROR",
|
|
10985
|
+
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.`
|
|
10986
|
+
});
|
|
10937
10987
|
}
|
|
10938
10988
|
function safeLocalName(id, name) {
|
|
10989
|
+
const base = createHash("sha256").update(id).digest("hex").slice(0, 32);
|
|
10939
10990
|
const ext = /\.([A-Za-z0-9]{1,12})$/.exec(name)?.[1];
|
|
10940
|
-
return ext ? `${
|
|
10991
|
+
return ext ? `${base}.${ext.toLowerCase()}` : base;
|
|
10941
10992
|
}
|
|
10942
10993
|
var kanbanRouter = router({
|
|
10943
10994
|
/**
|
|
@@ -11060,10 +11111,7 @@ var kanbanRouter = router({
|
|
|
11060
11111
|
const contentType = res.headers.get("content-type") ?? "application/octet-stream";
|
|
11061
11112
|
const disposition = res.headers.get("content-disposition") ?? "";
|
|
11062
11113
|
const name = /filename="([^"]*)"/.exec(disposition)?.[1] || id;
|
|
11063
|
-
const
|
|
11064
|
-
await mkdir14(dir, { recursive: true });
|
|
11065
|
-
const path = join16(dir, safeLocalName(id, name));
|
|
11066
|
-
await writeFile11(path, body);
|
|
11114
|
+
const path = await storeAttachment(id, name, body);
|
|
11067
11115
|
return { path, name, contentType, size: body.length };
|
|
11068
11116
|
})
|
|
11069
11117
|
});
|
|
@@ -11191,7 +11239,7 @@ var utilityRouter = router({
|
|
|
11191
11239
|
// ../server/src/trpc/routers/wiki.ts
|
|
11192
11240
|
import { z as z23 } from "zod";
|
|
11193
11241
|
import { TRPCError as TRPCError19 } from "@trpc/server";
|
|
11194
|
-
import { readFile as readFile13, readdir as
|
|
11242
|
+
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
11243
|
import { resolve as resolvePath, join as join17, relative, sep as sep3, dirname as dirname3 } from "path";
|
|
11196
11244
|
var SCOPE_SCHEMA = z23.union([
|
|
11197
11245
|
z23.literal("global"),
|
|
@@ -11254,7 +11302,7 @@ async function walkLocal(root, dir, depth, counter) {
|
|
|
11254
11302
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
11255
11303
|
let entries;
|
|
11256
11304
|
try {
|
|
11257
|
-
entries = await
|
|
11305
|
+
entries = await readdir6(dir, { withFileTypes: true });
|
|
11258
11306
|
} catch {
|
|
11259
11307
|
return [];
|
|
11260
11308
|
}
|
|
@@ -11327,7 +11375,7 @@ var wikiRouter = router({
|
|
|
11327
11375
|
return agentManager.agentQuery(target.agentId, "wiki.readRepoMarkdown", { cwd: target.cwd, path: input.path });
|
|
11328
11376
|
}
|
|
11329
11377
|
const file = await resolveSafeLocal(target.root, input.path, true);
|
|
11330
|
-
const s = await
|
|
11378
|
+
const s = await stat4(file);
|
|
11331
11379
|
if (!s.isFile()) throw new TRPCError19({ code: "BAD_REQUEST", message: "Pas un fichier" });
|
|
11332
11380
|
if (s.size > MAX_FILE_BYTES) throw new TRPCError19({ code: "PAYLOAD_TOO_LARGE", message: "Fichier trop volumineux" });
|
|
11333
11381
|
const content = await readFile13(file, "utf-8");
|
|
@@ -11356,7 +11404,7 @@ var wikiRouter = router({
|
|
|
11356
11404
|
}
|
|
11357
11405
|
const file = await resolveSafeLocal(target.root, input.path, false);
|
|
11358
11406
|
try {
|
|
11359
|
-
await
|
|
11407
|
+
await stat4(file);
|
|
11360
11408
|
throw new TRPCError19({ code: "CONFLICT", message: "Fichier d\xE9j\xE0 existant" });
|
|
11361
11409
|
} catch (err) {
|
|
11362
11410
|
if (err instanceof TRPCError19) throw err;
|
|
@@ -11382,7 +11430,7 @@ var wikiRouter = router({
|
|
|
11382
11430
|
const from = await resolveSafeLocal(target.root, input.fromPath, true);
|
|
11383
11431
|
const to = await resolveSafeLocal(target.root, input.toPath, false);
|
|
11384
11432
|
try {
|
|
11385
|
-
await
|
|
11433
|
+
await stat4(to);
|
|
11386
11434
|
throw new TRPCError19({ code: "CONFLICT", message: "La cible existe d\xE9j\xE0" });
|
|
11387
11435
|
} catch (err) {
|
|
11388
11436
|
if (err instanceof TRPCError19) throw err;
|
|
@@ -11411,7 +11459,7 @@ var wikiRouter = router({
|
|
|
11411
11459
|
}
|
|
11412
11460
|
const fp = await resolveSafeLocal(target.root, input.path, true);
|
|
11413
11461
|
if (fp === target.root) throw new TRPCError19({ code: "FORBIDDEN", message: "Impossible de supprimer la racine" });
|
|
11414
|
-
await
|
|
11462
|
+
await rm3(fp, { recursive: true, force: true });
|
|
11415
11463
|
return { path: input.path, ok: true };
|
|
11416
11464
|
})
|
|
11417
11465
|
});
|
|
@@ -11849,7 +11897,7 @@ var cloudSyncBridge = new CloudSyncBridge();
|
|
|
11849
11897
|
|
|
11850
11898
|
// ../server/src/services/master-password.ts
|
|
11851
11899
|
import { randomBytes as randomBytes4, createCipheriv, createDecipheriv } from "crypto";
|
|
11852
|
-
import { readFile as readFile15, writeFile as writeFile14, chmod as chmod10, stat as
|
|
11900
|
+
import { readFile as readFile15, writeFile as writeFile14, chmod as chmod10, stat as stat5, rename as rename12 } from "fs/promises";
|
|
11853
11901
|
import { join as join19 } from "path";
|
|
11854
11902
|
import { Entry } from "@napi-rs/keyring";
|
|
11855
11903
|
import { hashRaw as argon2HashRaw } from "@node-rs/argon2";
|
|
@@ -11862,7 +11910,7 @@ var CANARY_PLAINTEXT = "runeya:v1:key-verification";
|
|
|
11862
11910
|
var MAX_KEY_FILE_SIZE = 1024;
|
|
11863
11911
|
var ARGON2_OPTIONS = { memoryCost: 65536, timeCost: 3, parallelism: 4, outputLen: 32 };
|
|
11864
11912
|
async function readKeyFile(filePath) {
|
|
11865
|
-
const s = await
|
|
11913
|
+
const s = await stat5(filePath);
|
|
11866
11914
|
if (s.size > MAX_KEY_FILE_SIZE) throw new Error(`Fichier suspect : ${filePath} (${s.size} octets)`);
|
|
11867
11915
|
return readFile15(filePath);
|
|
11868
11916
|
}
|
|
@@ -11998,7 +12046,7 @@ async function readVerifyFile(dataDir) {
|
|
|
11998
12046
|
}
|
|
11999
12047
|
async function hasVerifyFile(dataDir) {
|
|
12000
12048
|
try {
|
|
12001
|
-
await
|
|
12049
|
+
await stat5(join19(dataDir, VERIFY_FILENAME));
|
|
12002
12050
|
return true;
|
|
12003
12051
|
} catch {
|
|
12004
12052
|
return false;
|
|
@@ -12006,7 +12054,7 @@ async function hasVerifyFile(dataDir) {
|
|
|
12006
12054
|
}
|
|
12007
12055
|
async function hasEncryptedKeyFile(dataDir) {
|
|
12008
12056
|
try {
|
|
12009
|
-
await
|
|
12057
|
+
await stat5(join19(dataDir, ENCRYPTED_KEY_FILENAME));
|
|
12010
12058
|
return true;
|
|
12011
12059
|
} catch {
|
|
12012
12060
|
return false;
|
|
@@ -12139,7 +12187,7 @@ var MigrationEngine = class {
|
|
|
12139
12187
|
var migrationEngine = new MigrationEngine();
|
|
12140
12188
|
|
|
12141
12189
|
// ../server/src/services/file-security.ts
|
|
12142
|
-
import { chmod as chmod11, stat as
|
|
12190
|
+
import { chmod as chmod11, stat as stat6 } from "fs/promises";
|
|
12143
12191
|
import { join as join20 } from "path";
|
|
12144
12192
|
var SENSITIVE_FILES = [
|
|
12145
12193
|
"agents.json",
|
|
@@ -12154,7 +12202,7 @@ async function ensureFilePermissions() {
|
|
|
12154
12202
|
for (const filename of SENSITIVE_FILES) {
|
|
12155
12203
|
const filepath = join20(env.DATA_DIR, filename);
|
|
12156
12204
|
try {
|
|
12157
|
-
const stats = await
|
|
12205
|
+
const stats = await stat6(filepath);
|
|
12158
12206
|
const mode = stats.mode & 511;
|
|
12159
12207
|
if (mode !== SECURE_MODE) {
|
|
12160
12208
|
console.warn("[security] File", filename, "has mode", mode.toString(8) + ", fixing to 600");
|
|
@@ -12221,7 +12269,7 @@ import {
|
|
|
12221
12269
|
rename as rename13,
|
|
12222
12270
|
mkdir as mkdir17,
|
|
12223
12271
|
access as access2,
|
|
12224
|
-
readdir as
|
|
12272
|
+
readdir as readdir7
|
|
12225
12273
|
} from "fs/promises";
|
|
12226
12274
|
import { join as join22 } from "path";
|
|
12227
12275
|
var _require = createRequire(import.meta.url);
|
|
@@ -12390,14 +12438,14 @@ async function runLegacyMigration(dataDir) {
|
|
|
12390
12438
|
}
|
|
12391
12439
|
}
|
|
12392
12440
|
const envsDir = join22(dbsDir, "envs");
|
|
12393
|
-
const envFiles = (await
|
|
12441
|
+
const envFiles = (await readdir7(envsDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
|
|
12394
12442
|
const legacyEnvs = {};
|
|
12395
12443
|
for (const file of envFiles) {
|
|
12396
12444
|
const name = file.replace(".encrypted.json", "");
|
|
12397
12445
|
legacyEnvs[name] = await readEncrypted(join22(envsDir, file));
|
|
12398
12446
|
}
|
|
12399
12447
|
const servicesDir = join22(dbsDir, "services");
|
|
12400
|
-
const serviceFiles = (await
|
|
12448
|
+
const serviceFiles = (await readdir7(servicesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
|
|
12401
12449
|
const legacyServices = {};
|
|
12402
12450
|
for (const file of serviceFiles) {
|
|
12403
12451
|
const name = file.replace(".encrypted.json", "");
|
|
@@ -12406,7 +12454,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
12406
12454
|
if (data?.label) legacyServices[name] = data;
|
|
12407
12455
|
}
|
|
12408
12456
|
const overridesDir = join22(dbsDir, "overrides");
|
|
12409
|
-
const overrideFiles = (await
|
|
12457
|
+
const overrideFiles = (await readdir7(overridesDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
|
|
12410
12458
|
const legacyServiceOverrides = {};
|
|
12411
12459
|
const legacyEnvOverrides = {};
|
|
12412
12460
|
for (const file of overrideFiles) {
|
|
@@ -12420,7 +12468,7 @@ async function runLegacyMigration(dataDir) {
|
|
|
12420
12468
|
}
|
|
12421
12469
|
}
|
|
12422
12470
|
const parsersDir = join22(dbsDir, "parsers");
|
|
12423
|
-
const parserFiles = (await
|
|
12471
|
+
const parserFiles = (await readdir7(parsersDir).catch(() => [])).filter((f) => f.endsWith(".encrypted.json"));
|
|
12424
12472
|
const legacyParsers = [];
|
|
12425
12473
|
for (const file of parserFiles) {
|
|
12426
12474
|
const data = await readEncrypted(join22(parsersDir, file));
|
|
@@ -12800,7 +12848,7 @@ ${p.transform ?? ""}`,
|
|
|
12800
12848
|
}
|
|
12801
12849
|
async function findLegacyKeyInBackup(dataDir) {
|
|
12802
12850
|
try {
|
|
12803
|
-
const entries = await
|
|
12851
|
+
const entries = await readdir7(dataDir);
|
|
12804
12852
|
const backupDirs = entries.filter((e) => e.startsWith("backup-")).sort((a, b) => a < b ? -1 : a > b ? 1 : 0).reverse();
|
|
12805
12853
|
for (const dir of backupDirs) {
|
|
12806
12854
|
const keyJsonPath = join22(dataDir, dir, "dbs", "encryption-key.json");
|
|
@@ -12834,7 +12882,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
12834
12882
|
let overrideFiles = [];
|
|
12835
12883
|
for (const dir of candidateDirs) {
|
|
12836
12884
|
try {
|
|
12837
|
-
const files = (await
|
|
12885
|
+
const files = (await readdir7(dir)).filter((f) => f.endsWith(".encrypted.json"));
|
|
12838
12886
|
if (files.length > 0) {
|
|
12839
12887
|
overridesDir = dir;
|
|
12840
12888
|
overrideFiles = files;
|
|
@@ -13010,7 +13058,7 @@ async function runOverrideOnlyMigration(dataDir) {
|
|
|
13010
13058
|
|
|
13011
13059
|
// ../server/src/services/server-state.ts
|
|
13012
13060
|
import { join as join23 } from "path";
|
|
13013
|
-
import { stat as
|
|
13061
|
+
import { stat as stat7 } from "fs/promises";
|
|
13014
13062
|
var ENCRYPTED_KEY_FILENAME2 = ".encryption.key.enc";
|
|
13015
13063
|
var VERIFY_FILENAME2 = ".runeya-verify";
|
|
13016
13064
|
async function getServerState() {
|
|
@@ -13019,17 +13067,17 @@ async function getServerState() {
|
|
|
13019
13067
|
let hasVerify = false;
|
|
13020
13068
|
let hasData = false;
|
|
13021
13069
|
try {
|
|
13022
|
-
await
|
|
13070
|
+
await stat7(join23(dataDir, ENCRYPTED_KEY_FILENAME2));
|
|
13023
13071
|
hasEncFile = true;
|
|
13024
13072
|
} catch {
|
|
13025
13073
|
}
|
|
13026
13074
|
try {
|
|
13027
|
-
await
|
|
13075
|
+
await stat7(join23(dataDir, VERIFY_FILENAME2));
|
|
13028
13076
|
hasVerify = true;
|
|
13029
13077
|
} catch {
|
|
13030
13078
|
}
|
|
13031
13079
|
try {
|
|
13032
|
-
await
|
|
13080
|
+
await stat7(join23(dataDir, "projects.json"));
|
|
13033
13081
|
hasData = true;
|
|
13034
13082
|
} catch {
|
|
13035
13083
|
}
|
|
@@ -14179,4 +14227,4 @@ export {
|
|
|
14179
14227
|
createLocalServer,
|
|
14180
14228
|
pullEnv
|
|
14181
14229
|
};
|
|
14182
|
-
//# sourceMappingURL=src-
|
|
14230
|
+
//# sourceMappingURL=src-W64XJTN5.js.map
|