@runeya/runeya 2.0.57 → 2.0.58
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 +138 -103
- package/agent/index.js.map +1 -1
- package/agent-manager-EDFP4VXP.js +7 -0
- package/assets/icon.icns +0 -0
- package/assets/icon.ico +0 -0
- package/assets/icon.png +0 -0
- package/assets/icon.svg +5 -0
- package/{chunk-4665DVGB.js → chunk-NLVDO4EC.js} +164 -10
- package/chunk-NLVDO4EC.js.map +1 -0
- package/chunk-O2KOX4LU.js +66 -0
- package/chunk-O2KOX4LU.js.map +1 -0
- package/desktop-launcher-TM7AABMC.js +256 -0
- package/desktop-launcher-TM7AABMC.js.map +1 -0
- package/desktop-wizard-4CYANX2O.js +209 -0
- package/desktop-wizard-4CYANX2O.js.map +1 -0
- package/free-port-565NMFIZ.js +13 -0
- package/free-port-565NMFIZ.js.map +1 -0
- package/index.js +101 -2
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/{src-6MVU3BDZ.js → src-V3J62F6F.js} +2976 -2474
- package/src-V3J62F6F.js.map +1 -0
- package/startup-failure-FOO7BLHD.js +180 -0
- package/startup-failure-FOO7BLHD.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-EIqnE2D0.js +13 -0
- package/web/assets/AgentTerminalPage-5kH1RTj6.js +1 -0
- package/web/assets/AiChatPage-DvPM0b-g.js +1 -0
- package/web/assets/AppLayout-CxU9x6en.js +1 -0
- package/web/assets/{AppLayout-CDh-jiJ3.css → AppLayout-Dj8YOvMQ.css} +1 -1
- package/web/assets/AuditPage-BrqreO8a.js +1 -0
- package/web/assets/CloudAccountPage-CzUpIjdc.js +1 -0
- package/web/assets/CloudAccountPage-DRcN1jNp.css +1 -0
- package/web/assets/CloudAccountPage-DS3ZfENB.js +1 -0
- package/web/assets/CloudMessagingPage-D8gBnkFY.js +2 -0
- package/web/assets/DashboardPage-BiskmF6R.js +1 -0
- package/web/assets/DirectoryPickerDialog-Bny02api.css +1 -0
- package/web/assets/DirectoryPickerDialog-CtKWj2hx.js +1 -0
- package/web/assets/{EditorIcon-Bdl2Mco_.js → EditorIcon-B58cXgvK.js} +2 -2
- package/web/assets/EnvironmentForm-DZXx9r78.js +108 -0
- package/web/assets/EnvironmentFormPage-Dl7pdkEM.js +1 -0
- package/web/assets/EnvironmentListPage-B0WX_Hq7.js +1 -0
- package/web/assets/KanbanBoardPage-CBJs26gZ.js +4 -0
- package/web/assets/KanbanListPage-Cz-tlLWA.js +1 -0
- package/web/assets/LaunchProjectPage-8SDkFiLE.js +1 -0
- package/web/assets/LaunchServicesPage-B-ncX3rd.js +1 -0
- package/web/assets/LogViewer-BJNqKt3I.js +3 -0
- package/web/assets/{ProcessControls-DJtuLQwj.js → ProcessControls-NA6_my0q.js} +1 -1
- package/web/assets/ProcessDetailPage-6galJRdd.js +1 -0
- package/web/assets/ProcessDetailPage-CFJfjneL.css +1 -0
- package/web/assets/{ProcessMetrics-BZ6CoGPS.js → ProcessMetrics-CUDjJ4s_.js} +2 -2
- package/web/assets/ProjectDetailPage-CLbj9ZT4.css +1 -0
- package/web/assets/ProjectDetailPage-DKHoFXjW.js +1 -0
- package/web/assets/ProjectListPage-C1xSP6Bq.js +1 -0
- package/web/assets/RandomJobTestPage-BAuT49yE.js +2 -0
- package/web/assets/ScenarioEditorPage-CROCV83A.js +14 -0
- package/web/assets/SendToChatDialog-BfaLVfzw.js +1 -0
- package/web/assets/ServiceControlsBar-DE0In-jH.js +1 -0
- package/web/assets/ServiceDetailPage-0iIv9RqU.js +2 -0
- package/web/assets/{ServiceDetailPage-BRg1byDZ.css → ServiceDetailPage-DDSyACSv.css} +1 -1
- package/web/assets/ServiceFormPage-D-tLX8jE.js +1 -0
- package/web/assets/SettingsPage-ClNw9uEA.js +2063 -0
- package/web/assets/{SettingsPage-BY3dG-wn.css → SettingsPage-ySsQCeYE.css} +1 -1
- package/web/assets/UnlockPage-flNU5Iky.js +1 -0
- package/web/assets/VariablesTable-BnCSYLD4.js +1 -0
- package/web/assets/VaultMigrationPage-BSv9anTA.js +1 -0
- package/web/assets/VersionBadge-zyKx_N_w.js +1 -0
- package/web/assets/WikiPage-C9Bruew6.js +1 -0
- package/web/assets/WikiView-BZZ5mybT.js +1 -0
- package/web/assets/add-scalar-classes-DZb8OCPH.js +387 -0
- package/web/assets/auth-errors-CU6pB2jP.js +1 -0
- package/web/assets/autocomplete-DGLJp6Xx.js +308 -0
- package/web/assets/{basic-shape-diamond.svg-BNEaZNR4.js → basic-shape-diamond.svg-D7lBpWcu.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-DkLboKXh.js → basic-shape-hexagon.svg-BIDPqohs.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CvXLE0nY.js → basic-shape-primary-circle-ellipse-round.svg-iWUF3CNK.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-DuBPGbCQ.js → basic-shape-primary-square-rectangle.svg-BQy8tY9i.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-B76nqlMT.js → basic-shape-shield.svg-Dcov5U2N.js} +1 -1
- package/web/assets/{browser-D6cyxfts.js → browser-Dc4T6GL2.js} +1 -1
- package/web/assets/{browser-DCK7QKdh.js → browser-DrMkXWE3.js} +1 -1
- package/web/assets/{card-nlH99ZRa.js → card-DADdd2-i.js} +2 -2
- package/web/assets/{checkbox-tmaSRjCY.js → checkbox-By0TwAz_.js} +3 -3
- package/web/assets/{chip-C6agT-Lk.js → chip-W5HkUiZA.js} +2 -2
- package/web/assets/{client-DSIO6MRA.js → client-Be8SiY8s.js} +2 -2
- package/web/assets/cloud-chat.store-GKWq9kin.js +1 -0
- package/web/assets/{cloud-session-BRhRomCj.js → cloud-session-CJ4n3dbT.js} +1 -1
- package/web/assets/column-P4Yoqttz.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-ClG1er6E.js → computer-device-desktop-monitor.svg-BjBC4Q_B.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-VJa9AdHB.js → computer-device-desktop.svg-C7H8X0sb.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-CHluUfrC.js → computer-device-laptop.svg-GDU5987h.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-Bz7ymNgY.js → computer-device-mobile-phone-android-samsung-back.svg-BcWod8vA.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-BZjCYTDe.js → computer-device-mobile-phone-android-samsung.svg-Cj58lY5g.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B6hMc7YN.js → computer-device-mobile-phone-iphone-x-back.svg-CtJM7Ul_.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BDackkJX.js → computer-device-mobile-phone-iphone-x.svg-BiSi4riW.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-DLepUSe0.js → computer-device-mobile-tablet-touch.svg-BAMVDwHH.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-CpU7bs1J.js → computer-device-mobile-tablet.svg-quWU62em.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-BIPoN5dZ.js → computer-device-network-ethernet-cat6.svg-eoCbNWkF.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-DjBnI47W.js → computer-device-network-lan-www.svg-AR5jmH9w.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-jL_T26gB.js → computer-device-network-wifi-connection.svg-C3-i1o4I.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-Bt0HKV-a.js → computer-device-network-wifi-router.svg-D8_62H2U.js} +1 -1
- package/web/assets/{cssMode-l83Ab_FG.js → cssMode-CfDickSl.js} +1 -1
- package/web/assets/{divider-0la1DK7n.js → divider-DOwWKUnp.js} +2 -2
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-jGfcZJk6.js → ecology-science-erlenmeyer-flask.svg-bmj1315r.js} +1 -1
- package/web/assets/{fieldset-Dnw-5ZTN.js → fieldset-CM6GY5DX.js} +2 -2
- package/web/assets/{freemarker2-CKxYYqUc.js → freemarker2-B_0Gh4L-.js} +1 -1
- package/web/assets/{handlebars-DwAvjXsf.js → handlebars-D7Oha3sz.js} +1 -1
- package/web/assets/{html-C8HeZ91y.js → html-BDq-ql3l.js} +1 -1
- package/web/assets/{htmlMode-DJLqukef.js → htmlMode-DVuzX8LQ.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-BRqL2x81.js → image-flash-lightning.svg-pdHiRywD.js} +1 -1
- package/web/assets/{image-picture-flower.svg-CD2Yyx7q.js → image-picture-flower.svg-BJarIt4k.js} +1 -1
- package/web/assets/{index-D-sVY9DJ.js → index-Dk3h9927.js} +225 -225
- package/web/assets/{interface-alert-exclamation-diamond.svg-C1jZyyiH.js → interface-alert-exclamation-diamond.svg-CZUf0TtR.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-CJRjxSxB.js → interface-alert-exclamation-triangle-warning.svg-B1qbmOvN.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-_yhjZAB6.js → interface-alert-information-circle.svg-DAH6I2Rk.js} +1 -1
- package/web/assets/{interface-award-crown.svg-D11H_zuN.js → interface-award-crown.svg-Co-un_0E.js} +1 -1
- package/web/assets/{interface-bookmark.svg-CGayI3g0.js → interface-bookmark-tag.svg-DCeSL4gX.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-B-l2i8Ii.js → interface-bookmark.svg-BoAQ5WAA.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-CJxH-duP.js → interface-calendar-date-one.svg-KM5TH_vj.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-CKlbHpZM.js → interface-content-book-open-pages.svg-2t-0H_Nl.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-ClW0JcO1.js → interface-content-book-page.svg-Dx9U_5uo.js} +1 -1
- package/web/assets/{interface-content-file.svg-vXnq-VTU.js → interface-content-file.svg-CW_9AGDl.js} +1 -1
- package/web/assets/interface-content-folder.svg-C9_1n23c.js +1 -0
- package/web/assets/{interface-content-folder.svg-DVuVP2_n.js → interface-content-folder.svg-DgU2KM8d.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-By6SZiB4.js → interface-copy-clipboard.svg-BXCY1wtO.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-5FhntK3Y.js → interface-edit-attachment.svg-lJsBgdnd.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-BNAa3NU3.js → interface-edit-binocular.svg-N_us2_d_.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-CHIex2kh.js → interface-edit-magic-wand.svg-GlHpAoND.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-BOU7EZxD.js → interface-edit-tool-paint-roller.svg-B3s6tHLT.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-R4MWKJk8.js → interface-edit-tool-pencil.svg-BhJltLPD.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-suD3XTUy.js → interface-favorite-award.svg-CAC4qrCL.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-hdyn6Kl_.js → interface-favorite-flag.svg-5dLI18uT.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CsvpCgqr.js → interface-favorite-heart.svg-DAWMqUS8.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-BYnYZej4.js → interface-favorite-star.svg-C9DICFBb.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-CJF8bktG.js → interface-favorite-stars-sparkles.svg-zD5-a95u.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-Cz8Kp45m.js → interface-hierarchy-flowchart.svg-BzAAQM0v.js} +1 -1
- package/web/assets/{interface-home-house.svg-C9GgEmKT.js → interface-home-house.svg-CB_mzszz.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-T_oHSPOF.js → interface-hyperlink.svg-BUMVlOAE.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-Ds5ZO6oa.js → interface-lighting-brightness.svg-wPXo2pZW.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-CoMPAlnI.js → interface-lock-closed.svg-Qj4fLj5D.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-jGLDczcA.js → interface-lock-open-unlock.svg-PaaFsUiU.js} +1 -1
- package/web/assets/{interface-login-key.svg-CDeEaRf5.js → interface-login-key.svg-By-IZ7EH.js} +1 -1
- package/web/assets/{interface-search.svg-Cy4Q-xYo.js → interface-search.svg-D1s5Gsyk.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BDhQZOJ4.js → interface-setting-cog.svg-BIjZVOwf.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-DagGdEnC.js → interface-share-megaphone-bullhorn.svg-1oPoDdIL.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-CKJ5nUEh.js → interface-share-rocket.svg-B07UdOH6.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-BK1pCz3B.js → interface-share-satellite.svg-AxSAr1JP.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-KdgeixBZ.js → interface-share-space-ship.svg-ghRJYkXG.js} +1 -1
- package/web/assets/{interface-share.svg-ChAZ94rW.js → interface-share.svg-jVvV5wf9.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DzuPfXUh.js → interface-signal-square.svg-BB8KvxNI.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-B4ynuu4H.js → interface-time-clock-circle.svg-Bt_vXLib.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-CwKlC1Na.js → interface-time-hour-glass.svg-CqsWXDx3.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-Dr3rSYsr.js → interface-users-multiple.svg-DfZzhCkI.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-k_uau_ay.js → interface-weather-moon.svg-B5X37fBl.js} +1 -1
- package/web/assets/{javascript-Bx-xJAtR.js → javascript-DWxMn_QC.js} +1 -1
- package/web/assets/{jsonMode-CF72gzTX.js → jsonMode-BWOZzM3d.js} +2 -2
- package/web/assets/{liquid-Du7COcWK.js → liquid-B0VtIwJX.js} +1 -1
- package/web/assets/{lspLanguageFeatures-B0b9esI0.js → lspLanguageFeatures-DXFZNqLk.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-Dss1BS5k.js → mail-chat-bubble-square.svg-DVi8sPM-.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-BjlSFw6x.js → mail-send-email-paper-airplane.svg-Dlk35rWL.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CpGqZ3T_.js → mail-send-envelope.svg-DpEE06QS.js} +1 -1
- package/web/assets/{mdx-DgIEovcA.js → mdx-XjdLNHo4.js} +1 -1
- package/web/assets/{message-n9JmpxQB.js → message-TASaHoOx.js} +2 -2
- package/web/assets/{minus-Eq7h2HNM.js → minus-BO9HwuhK.js} +2 -2
- package/web/assets/modal-B0K9qtIb.js +1 -0
- package/web/assets/modal-Dadfdblm.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-DVDhS_Zc.js → money-cashier-receipt.svg-D3T1gdZO.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-DRnO0pzf.js → money-currency-dollar-pay.svg-RhoFWz8z.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-Beaf3gcH.js → money-graph-arrow-increase.svg-BENn1K5R.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-Bx83srA6.js → money-graph-bar-chart-increase.svg-COGPwero.js} +1 -1
- package/web/assets/{multiselect-BzaOLdpd.js → multiselect-QI9V-o7t.js} +3 -3
- package/web/assets/{nature-ecology-leaf.svg-BPF0Z-R-.js → nature-ecology-leaf.svg-CyQJuX9P.js} +1 -1
- package/web/assets/{password-BOruXB1m.js → password-68lVUSdj.js} +4 -4
- package/web/assets/{phone-telephone.svg-CoyP7Dxe.js → phone-telephone.svg-Cp49xUlu.js} +1 -1
- package/web/assets/{plus-D3SKHEeC.js → plus-CtAUJUu2.js} +6 -6
- package/web/assets/process.store-DkO9CCEs.js +1 -0
- package/web/assets/{programming-bug.svg-BnJMsv8E.js → programming-bug.svg-DJCw-G7S.js} +1 -1
- package/web/assets/{programming-cloud.svg-CQYYCVwK.js → programming-cloud.svg-Dawch6nl.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-B8efwNUW.js → programming-computer-database-server.svg-wM3gh9nl.js} +1 -1
- package/web/assets/{programming-computer-database.svg-DNTDIyeu.js → programming-computer-database.svg-B-CBQ4FN.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CDOGccyo.js → programming-module-four-layout.svg-B8K3IYUP.js} +1 -1
- package/web/assets/{programming-module-three.svg-Bge3Bi-7.js → programming-module-three.svg-BVHpxetj.js} +1 -1
- package/web/assets/{programming-module.svg-CzqYRXSb.js → programming-module.svg-CXID9wrd.js} +1 -1
- package/web/assets/{programming-script-code.svg-C5p0kA7v.js → programming-script-code.svg-lSz-9Xfp.js} +1 -1
- package/web/assets/{python-UpylI8e4.js → python-DL0o4ZFa.js} +1 -1
- package/web/assets/{razor-aZxkyrH6.js → razor-1T_DtFYV.js} +1 -1
- package/web/assets/router-BKOiPGCa.js +1 -0
- package/web/assets/settings-scope-DrVQNSTC.js +1 -0
- package/web/assets/{settings.store-BOiI53kz.js → settings.store-xvHd8xGI.js} +1 -1
- package/web/assets/{shopping-cart.svg-CdyNNU8T.js → shopping-cart.svg-TZA8HEQB.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-oYuij_wi.js → shopping-gift-present.svg-CRGiXfBk.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-BHHfdC-w.js → shopping-shipping-box-parcel-package.svg-BuEMZoGf.js} +1 -1
- package/web/assets/src-Be-L2-AH.js +1 -0
- package/web/assets/{src-C0e6s3a3.js → src-Dy-bHT95.js} +12 -12
- package/web/assets/tabpanel-BP3edJSv.js +150 -0
- package/web/assets/{tag-new-circle.svg-De8jHJc3.js → tag-new-circle.svg-CsOt9-U5.js} +1 -1
- package/web/assets/{toggleswitch-7N_rrZCL.js → toggleswitch-B49OhBFD.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-DDerkPaO.js → travel-map-earth-globe.svg-BTR5ahca.js} +1 -1
- package/web/assets/trpc-hOuUVUMw.js +1 -0
- package/web/assets/{tsMode-Bm3dVodi.js → tsMode-BUrbWgsu.js} +5 -5
- package/web/assets/{typescript-Cw6KoAtM.js → typescript-tKGzqX3Z.js} +1 -1
- package/web/assets/useAiChatDrawer-CZS0RLp8.js +1 -0
- package/web/assets/useCloudOrg-0VY86rgI.js +93 -0
- package/web/assets/{useCloudOrg-B4VXAHsj.css → useCloudOrg-CDe4gvZH.css} +1 -1
- package/web/assets/{useProjectCatalog-O62WCLX4.js → useProjectCatalog-C2BH8Bnr.js} +1 -1
- package/web/assets/{xml-D4uEa569.js → xml-4CdtJV3Y.js} +1 -1
- package/web/assets/{yaml-y9iDkUjP.js → yaml-Cj7LK0oJ.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-452D7XW5.js +0 -7
- package/chunk-4665DVGB.js.map +0 -1
- package/src-6MVU3BDZ.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-82XG5NKb.js +0 -13
- package/web/assets/AgentTerminalPage-BwQhPdyw.js +0 -1
- package/web/assets/AiChatPage-BRnRhmhg.js +0 -1
- package/web/assets/AppLayout-BZrNmMDL.js +0 -1
- package/web/assets/AuditPage-Dds0912d.js +0 -1
- package/web/assets/CloudAccountPage-49RVZf9h.js +0 -1
- package/web/assets/CloudAccountPage-CVAMkCOF.css +0 -1
- package/web/assets/CloudAccountPage-KipqXtVJ.js +0 -1
- package/web/assets/CloudMessagingPage-H43XvI3d.js +0 -2
- package/web/assets/DashboardPage-D9kDTU7y.js +0 -1
- package/web/assets/EnvironmentForm-B_gviXu_.js +0 -108
- package/web/assets/EnvironmentFormPage-BHrfU03w.js +0 -1
- package/web/assets/EnvironmentListPage-CW3FpI79.js +0 -1
- package/web/assets/EnvironmentSelector-B9SZvB3I.css +0 -1
- package/web/assets/EnvironmentSelector-C49ocjBM.js +0 -1
- package/web/assets/KanbanBoardPage-DUgJRQK7.js +0 -4
- package/web/assets/KanbanListPage-D8LIr7sZ.js +0 -1
- package/web/assets/LaunchProjectPage-BBSKTUnF.js +0 -1
- package/web/assets/LaunchServicesPage-vJU87PHP.js +0 -1
- package/web/assets/LogViewer-D5tSUFpZ.js +0 -3
- package/web/assets/ProcessDetailPage-CzGUsQM9.css +0 -1
- package/web/assets/ProcessDetailPage-DqGqF1Eh.js +0 -1
- package/web/assets/ProjectDetailPage-AFuj4C-h.js +0 -1
- package/web/assets/ProjectDetailPage-hcU-rKhJ.css +0 -1
- package/web/assets/ProjectListPage-C1T_1Y0g.js +0 -1
- package/web/assets/RandomJobTestPage-C760ZS5-.js +0 -2
- package/web/assets/ScenarioEditorPage-DFYcNzHU.js +0 -14
- package/web/assets/SendToChatDialog-D4kPRj-6.js +0 -1
- package/web/assets/ServiceControlsBar-D_7_q5e3.js +0 -1
- package/web/assets/ServiceDetailPage-H8pJ6Dke.js +0 -2
- package/web/assets/ServiceFormPage-DSU5wiDe.js +0 -1
- package/web/assets/SettingsPage-Bo6jEumX.js +0 -2062
- package/web/assets/UnlockPage-B7oIw1Ep.js +0 -1
- package/web/assets/VariablesTable-DREhc-Vd.js +0 -1
- package/web/assets/VaultMigrationPage-BeCx1t1u.js +0 -1
- package/web/assets/VersionBadge-DZw8ffTr.js +0 -1
- package/web/assets/WikiPage-BYOLAA15.js +0 -1
- package/web/assets/WikiView-CA-fg4Xk.js +0 -1
- package/web/assets/add-scalar-classes-wjDwsWcH.js +0 -387
- package/web/assets/auth-errors-BG58jeF5.js +0 -1
- package/web/assets/autocomplete-DFFxoeg7.js +0 -308
- package/web/assets/cloud-chat.store-BAYcx61I.js +0 -1
- package/web/assets/column-sIpdz9_l.js +0 -907
- package/web/assets/interface-content-folder.svg-BDo_OJHD.js +0 -1
- package/web/assets/modal-COpDqWq9.js +0 -5
- package/web/assets/modal-CqJ-XbwV.js +0 -1
- package/web/assets/process.store-dEVcW1iy.js +0 -1
- package/web/assets/router-DgsjS0ri.js +0 -1
- package/web/assets/settings-scope-BXA0BjX7.js +0 -1
- package/web/assets/src-BscSu0ry.js +0 -1
- package/web/assets/tabpanel-CEUw3G7r.js +0 -150
- package/web/assets/trpc-Bv0dS7QZ.js +0 -1
- package/web/assets/useAiChatDrawer-D9n1q5jE.js +0 -1
- package/web/assets/useCloudOrg-RH2schZM.js +0 -93
- /package/{agent-manager-452D7XW5.js.map → agent-manager-EDFP4VXP.js.map} +0 -0
package/agent/index.js
CHANGED
|
@@ -67,7 +67,7 @@ import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
|
67
67
|
import { EventEmitter as EventEmitter7 } from "events";
|
|
68
68
|
import { randomUUID as randomUUID3 } from "crypto";
|
|
69
69
|
import { networkInterfaces } from "os";
|
|
70
|
-
import { join as join3, isAbsolute } from "path";
|
|
70
|
+
import { join as join3, isAbsolute, resolve } from "path";
|
|
71
71
|
|
|
72
72
|
// ../../packages/runner-native/src/native-runner.ts
|
|
73
73
|
import { execa } from "execa";
|
|
@@ -212,15 +212,15 @@ var NativeRunner = class {
|
|
|
212
212
|
// Don't accumulate stdout/stderr in memory — we stream via readline
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
|
-
const exitPromise = new Promise((
|
|
215
|
+
const exitPromise = new Promise((resolve2) => {
|
|
216
216
|
subprocess.then((result) => {
|
|
217
|
-
|
|
217
|
+
resolve2({
|
|
218
218
|
exitCode: result.exitCode ?? null,
|
|
219
219
|
signal: result.signal ?? null,
|
|
220
220
|
error: result.failed && result.shortMessage ? result.shortMessage : void 0
|
|
221
221
|
});
|
|
222
222
|
}).catch((err) => {
|
|
223
|
-
|
|
223
|
+
resolve2({ exitCode: 1, signal: null, error: err.message ?? "Unknown error" });
|
|
224
224
|
});
|
|
225
225
|
});
|
|
226
226
|
return {
|
|
@@ -312,7 +312,7 @@ var DockerRunner = class {
|
|
|
312
312
|
const containerName = sanitizeDockerName(config.cmdId ? `runeya-${config.serviceId}-${config.cmdId}` : `runeya-${config.serviceId}`);
|
|
313
313
|
let killed = false;
|
|
314
314
|
const exitPromise = new Promise(
|
|
315
|
-
(
|
|
315
|
+
(resolve2) => {
|
|
316
316
|
void (async () => {
|
|
317
317
|
try {
|
|
318
318
|
await execa2("docker", ["rm", "-f", containerName], { reject: false });
|
|
@@ -365,7 +365,7 @@ var DockerRunner = class {
|
|
|
365
365
|
}
|
|
366
366
|
}
|
|
367
367
|
if (killed) {
|
|
368
|
-
|
|
368
|
+
resolve2({ exitCode: null, signal: "SIGTERM" });
|
|
369
369
|
return;
|
|
370
370
|
}
|
|
371
371
|
if (lastCardId) {
|
|
@@ -376,7 +376,7 @@ var DockerRunner = class {
|
|
|
376
376
|
const bootstrapCmds = config.skipBootstrap ? [] : (dc.bootstrapCommands ?? []).filter((c) => c.command.trim());
|
|
377
377
|
for (const bsCmd of bootstrapCmds) {
|
|
378
378
|
if (killed) {
|
|
379
|
-
|
|
379
|
+
resolve2({ exitCode: null, signal: "SIGTERM" });
|
|
380
380
|
return;
|
|
381
381
|
}
|
|
382
382
|
const bsCardId = randomUUID();
|
|
@@ -389,12 +389,12 @@ var DockerRunner = class {
|
|
|
389
389
|
if (exitCode !== 0) {
|
|
390
390
|
stderr.write(`Bootstrap command "${bsCmdName}" failed with exit code ${exitCode}
|
|
391
391
|
`);
|
|
392
|
-
|
|
392
|
+
resolve2({ exitCode, signal: null, error: `Bootstrap "${bsCmdName}" failed (exit ${exitCode})` });
|
|
393
393
|
return;
|
|
394
394
|
}
|
|
395
395
|
}
|
|
396
396
|
if (killed) {
|
|
397
|
-
|
|
397
|
+
resolve2({ exitCode: null, signal: "SIGTERM" });
|
|
398
398
|
return;
|
|
399
399
|
}
|
|
400
400
|
const networkFlags = dc.networkMode === "host" ? ["--network", "host"] : (dc.ports ?? []).flatMap((p) => ["-p", p]);
|
|
@@ -436,12 +436,12 @@ var DockerRunner = class {
|
|
|
436
436
|
runProc.stdout?.pipe(stdout, { end: false });
|
|
437
437
|
runProc.stderr?.pipe(stderr, { end: false });
|
|
438
438
|
const result = await runProc;
|
|
439
|
-
|
|
439
|
+
resolve2({ exitCode: result.exitCode ?? null, signal: result.signal ?? null });
|
|
440
440
|
} catch (err) {
|
|
441
441
|
const msg = err instanceof Error ? err.message : String(err);
|
|
442
442
|
stderr.write(`Docker infrastructure error: ${msg}
|
|
443
443
|
`);
|
|
444
|
-
|
|
444
|
+
resolve2({ exitCode: 1, signal: null });
|
|
445
445
|
} finally {
|
|
446
446
|
stdout.end();
|
|
447
447
|
stderr.end();
|
|
@@ -480,8 +480,8 @@ var DockerRunner = class {
|
|
|
480
480
|
});
|
|
481
481
|
let exitResolve;
|
|
482
482
|
const exitPromise = new Promise(
|
|
483
|
-
(
|
|
484
|
-
exitResolve =
|
|
483
|
+
(resolve2) => {
|
|
484
|
+
exitResolve = resolve2;
|
|
485
485
|
}
|
|
486
486
|
);
|
|
487
487
|
void (async () => {
|
|
@@ -600,7 +600,7 @@ var DockerRunner = class {
|
|
|
600
600
|
const stderr = new PassThrough();
|
|
601
601
|
let dockerProc = null;
|
|
602
602
|
const exitPromise = new Promise(
|
|
603
|
-
(
|
|
603
|
+
(resolve2) => {
|
|
604
604
|
void (async () => {
|
|
605
605
|
try {
|
|
606
606
|
const envFlags = Object.entries(envVars).flatMap(([k, v]) => ["-e", `${k}=${v}`]);
|
|
@@ -613,12 +613,12 @@ var DockerRunner = class {
|
|
|
613
613
|
dockerProc.stdout?.pipe(stdout, { end: false });
|
|
614
614
|
dockerProc.stderr?.pipe(stderr, { end: false });
|
|
615
615
|
const result = await dockerProc;
|
|
616
|
-
|
|
616
|
+
resolve2({ exitCode: result.exitCode ?? null, signal: result.signal ?? null });
|
|
617
617
|
} catch (err) {
|
|
618
618
|
const msg = err instanceof Error ? err.message : String(err);
|
|
619
619
|
stderr.write(`docker execInContainer error: ${msg}
|
|
620
620
|
`);
|
|
621
|
-
|
|
621
|
+
resolve2({ exitCode: 1, signal: null });
|
|
622
622
|
} finally {
|
|
623
623
|
stdout.end();
|
|
624
624
|
stderr.end();
|
|
@@ -647,7 +647,7 @@ var DockerRunner = class {
|
|
|
647
647
|
let innerProcess = null;
|
|
648
648
|
let dockerProc = null;
|
|
649
649
|
const exitPromise = new Promise(
|
|
650
|
-
(
|
|
650
|
+
(resolve2) => {
|
|
651
651
|
void (async () => {
|
|
652
652
|
try {
|
|
653
653
|
const psResult = await execa2(
|
|
@@ -671,7 +671,7 @@ var DockerRunner = class {
|
|
|
671
671
|
dockerProc.stdout?.pipe(stdout, { end: false });
|
|
672
672
|
dockerProc.stderr?.pipe(stderr, { end: false });
|
|
673
673
|
const result = await dockerProc;
|
|
674
|
-
|
|
674
|
+
resolve2({ exitCode: result.exitCode ?? null, signal: result.signal ?? null });
|
|
675
675
|
} else {
|
|
676
676
|
innerProcess = this.start({
|
|
677
677
|
...config,
|
|
@@ -684,13 +684,13 @@ var DockerRunner = class {
|
|
|
684
684
|
innerProcess.stdout?.pipe(stdout, { end: false });
|
|
685
685
|
innerProcess.stderr?.pipe(stderr, { end: false });
|
|
686
686
|
const result = await innerProcess.exitPromise;
|
|
687
|
-
|
|
687
|
+
resolve2(result);
|
|
688
688
|
}
|
|
689
689
|
} catch (err) {
|
|
690
690
|
const msg = err instanceof Error ? err.message : String(err);
|
|
691
691
|
stderr.write(`docker shortcut error: ${msg}
|
|
692
692
|
`);
|
|
693
|
-
|
|
693
|
+
resolve2({ exitCode: 1, signal: null });
|
|
694
694
|
} finally {
|
|
695
695
|
stdout.end();
|
|
696
696
|
stderr.end();
|
|
@@ -1227,7 +1227,17 @@ var ProcessStatusSchema = z8.object({
|
|
|
1227
1227
|
startedAt: z8.coerce.date().nullable().optional(),
|
|
1228
1228
|
restartCount: z8.number().int().nonnegative().default(0),
|
|
1229
1229
|
uptime: z8.number().nonnegative().default(0),
|
|
1230
|
-
healthStatus: HealthStatusSchema.default("unknown")
|
|
1230
|
+
healthStatus: HealthStatusSchema.default("unknown"),
|
|
1231
|
+
/**
|
|
1232
|
+
* Le répertoire où le processus s'exécute VRAIMENT, absolutisé par l'agent.
|
|
1233
|
+
*
|
|
1234
|
+
* Rapporté par l'agent plutôt que déduit de la config : entre le `cwd` de la
|
|
1235
|
+
* commande, celui du service, l'ancrage sur le projet et les variables que
|
|
1236
|
+
* l'agent étend lui-même, la valeur affichée n'aurait rien prouvé. Ce qui
|
|
1237
|
+
* intéresse quand un service tourne contre le mauvais dépôt, c'est le chemin
|
|
1238
|
+
* final — y compris quand il retombe sur le répertoire de l'agent.
|
|
1239
|
+
*/
|
|
1240
|
+
cwd: z8.string().max(4096).nullable().optional()
|
|
1231
1241
|
});
|
|
1232
1242
|
|
|
1233
1243
|
// ../../packages/shared/src/schemas/log.schema.ts
|
|
@@ -2706,7 +2716,7 @@ var MySQLLogSource = class extends EventEmitter4 {
|
|
|
2706
2716
|
} catch {
|
|
2707
2717
|
}
|
|
2708
2718
|
this.connection = null;
|
|
2709
|
-
await new Promise((
|
|
2719
|
+
await new Promise((resolve2) => setTimeout(resolve2, delayMs));
|
|
2710
2720
|
if (this.stopped) return;
|
|
2711
2721
|
try {
|
|
2712
2722
|
await this.connect();
|
|
@@ -2754,14 +2764,14 @@ import pidusage from "pidusage";
|
|
|
2754
2764
|
import { execFile } from "child_process";
|
|
2755
2765
|
import { EventEmitter as EventEmitter5 } from "events";
|
|
2756
2766
|
async function getDockerStats(containerName) {
|
|
2757
|
-
return new Promise((
|
|
2767
|
+
return new Promise((resolve2) => {
|
|
2758
2768
|
execFile(
|
|
2759
2769
|
"docker",
|
|
2760
2770
|
["stats", "--no-stream", "--format", "{{json .}}", containerName],
|
|
2761
2771
|
{ timeout: 5e3 },
|
|
2762
2772
|
(err, stdout) => {
|
|
2763
2773
|
if (err || !stdout.trim()) {
|
|
2764
|
-
|
|
2774
|
+
resolve2(null);
|
|
2765
2775
|
return;
|
|
2766
2776
|
}
|
|
2767
2777
|
try {
|
|
@@ -2769,9 +2779,9 @@ async function getDockerStats(containerName) {
|
|
|
2769
2779
|
const cpu = Number.parseFloat(data.CPUPerc);
|
|
2770
2780
|
const memStr = data.MemUsage.split("/")[0].trim();
|
|
2771
2781
|
const memory = parseMemBytes(memStr);
|
|
2772
|
-
|
|
2782
|
+
resolve2({ cpu: Number.isNaN(cpu) ? 0 : cpu, memory });
|
|
2773
2783
|
} catch {
|
|
2774
|
-
|
|
2784
|
+
resolve2(null);
|
|
2775
2785
|
}
|
|
2776
2786
|
}
|
|
2777
2787
|
);
|
|
@@ -3120,10 +3130,10 @@ var TraefikManager = class {
|
|
|
3120
3130
|
clearTimeout(this.debounceTimer);
|
|
3121
3131
|
this.debounceTimer = null;
|
|
3122
3132
|
}
|
|
3123
|
-
await new Promise((
|
|
3124
|
-
execFile2("docker", ["rm", "-f", "runeya-traefik"], { timeout: 1e4 }, () =>
|
|
3133
|
+
await new Promise((resolve2) => {
|
|
3134
|
+
execFile2("docker", ["rm", "-f", "runeya-traefik"], { timeout: 1e4 }, () => resolve2());
|
|
3125
3135
|
});
|
|
3126
|
-
await new Promise((
|
|
3136
|
+
await new Promise((resolve2) => setTimeout(resolve2, 500));
|
|
3127
3137
|
}
|
|
3128
3138
|
async getConfigFiles() {
|
|
3129
3139
|
const [staticContent, dynamicContent] = await Promise.all([
|
|
@@ -3162,13 +3172,13 @@ var TraefikManager = class {
|
|
|
3162
3172
|
return result;
|
|
3163
3173
|
}
|
|
3164
3174
|
async getLogs(lines = 100) {
|
|
3165
|
-
return new Promise((
|
|
3175
|
+
return new Promise((resolve2) => {
|
|
3166
3176
|
execFile2("docker", ["logs", "--tail", String(lines), "runeya-traefik"], { timeout: 1e4 }, (err, stdout, stderr) => {
|
|
3167
3177
|
if (err) {
|
|
3168
|
-
|
|
3178
|
+
resolve2("");
|
|
3169
3179
|
return;
|
|
3170
3180
|
}
|
|
3171
|
-
|
|
3181
|
+
resolve2((stdout + stderr).trim());
|
|
3172
3182
|
});
|
|
3173
3183
|
});
|
|
3174
3184
|
}
|
|
@@ -3213,10 +3223,10 @@ var TraefikManager = class {
|
|
|
3213
3223
|
async getStatus() {
|
|
3214
3224
|
let dockerAvailable = false;
|
|
3215
3225
|
try {
|
|
3216
|
-
await new Promise((
|
|
3226
|
+
await new Promise((resolve2, reject) => {
|
|
3217
3227
|
execFile2("docker", ["info", "--format", "{{.ServerVersion}}"], { timeout: 5e3 }, (err) => {
|
|
3218
3228
|
if (err) reject(err instanceof Error ? err : new Error("docker info failed"));
|
|
3219
|
-
else
|
|
3229
|
+
else resolve2();
|
|
3220
3230
|
});
|
|
3221
3231
|
});
|
|
3222
3232
|
dockerAvailable = true;
|
|
@@ -3233,10 +3243,10 @@ var TraefikManager = class {
|
|
|
3233
3243
|
let containerRunning = false;
|
|
3234
3244
|
if (dockerAvailable) {
|
|
3235
3245
|
try {
|
|
3236
|
-
const output = await new Promise((
|
|
3246
|
+
const output = await new Promise((resolve2, reject) => {
|
|
3237
3247
|
execFile2("docker", ["inspect", "--format", "{{.State.Running}}", "runeya-traefik"], { timeout: 5e3 }, (err, stdout) => {
|
|
3238
3248
|
if (err) reject(err instanceof Error ? err : new Error("docker inspect failed"));
|
|
3239
|
-
else
|
|
3249
|
+
else resolve2(stdout.trim());
|
|
3240
3250
|
});
|
|
3241
3251
|
});
|
|
3242
3252
|
containerRunning = output === "true";
|
|
@@ -3514,6 +3524,19 @@ var EnvSchema = z21.object({
|
|
|
3514
3524
|
var env = EnvSchema.parse(process.env);
|
|
3515
3525
|
|
|
3516
3526
|
// src/services/process-manager.ts
|
|
3527
|
+
function anchorCommandCwd(cwd, serviceConfig) {
|
|
3528
|
+
const base = serviceConfig.resolvedCwd ?? serviceConfig.cwd;
|
|
3529
|
+
const raw = (cwd ?? "").trim();
|
|
3530
|
+
if (!raw || raw === ".") return base ?? void 0;
|
|
3531
|
+
if (!base || !isAbsolute(base)) return raw;
|
|
3532
|
+
if (isAbsolute(raw) || raw.startsWith("~") || raw.startsWith("$")) return raw;
|
|
3533
|
+
return join3(base, raw);
|
|
3534
|
+
}
|
|
3535
|
+
function effectiveProcessCwd(serviceConfig) {
|
|
3536
|
+
const first = serviceConfig.commands?.[0];
|
|
3537
|
+
const anchored = anchorCommandCwd(first?.cwd, serviceConfig);
|
|
3538
|
+
return resolve(resolveCwd(anchored, resolveEnv(serviceConfig.env)));
|
|
3539
|
+
}
|
|
3517
3540
|
function getLanIp() {
|
|
3518
3541
|
const nets = networkInterfaces();
|
|
3519
3542
|
for (const name of Object.keys(nets)) {
|
|
@@ -3779,7 +3802,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
3779
3802
|
const runnerConfig = {
|
|
3780
3803
|
command: cmd.command,
|
|
3781
3804
|
shell: cmd.shell ?? false,
|
|
3782
|
-
cwd: cmd.cwd
|
|
3805
|
+
cwd: anchorCommandCwd(cmd.cwd, proc.serviceConfig),
|
|
3783
3806
|
env: mergedServiceEnv
|
|
3784
3807
|
};
|
|
3785
3808
|
let runnerProcess;
|
|
@@ -3965,7 +3988,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
3965
3988
|
* Centralises runner selection so executeShortcut / executeAdHocCommand share the logic. */
|
|
3966
3989
|
launchOneOffCommand(proc, command, cwd, env2) {
|
|
3967
3990
|
const serviceConfig = proc.serviceConfig;
|
|
3968
|
-
const effectiveCwd = cwd
|
|
3991
|
+
const effectiveCwd = anchorCommandCwd(cwd, serviceConfig);
|
|
3969
3992
|
if (serviceConfig.runner === "docker" && serviceConfig.dockerConfig) {
|
|
3970
3993
|
const dockerRunner = this.runners.get("docker");
|
|
3971
3994
|
if (!dockerRunner) throw new Error("Docker runner not available");
|
|
@@ -4011,7 +4034,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4011
4034
|
proc.kill("SIGTERM");
|
|
4012
4035
|
void Promise.race([
|
|
4013
4036
|
proc.exitPromise,
|
|
4014
|
-
new Promise((
|
|
4037
|
+
new Promise((resolve2) => setTimeout(resolve2, 3e3))
|
|
4015
4038
|
]).then((result) => {
|
|
4016
4039
|
if (result === void 0) proc.kill("SIGKILL");
|
|
4017
4040
|
});
|
|
@@ -4027,7 +4050,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4027
4050
|
this.consoleLogSource.addSystemLog(processId, `[shortcut] Running "${shortcutName}": ${shortcut.command}`, "info");
|
|
4028
4051
|
const serviceConfig = proc.serviceConfig;
|
|
4029
4052
|
const env2 = resolveEnv(serviceConfig.env);
|
|
4030
|
-
const effectiveCwd = shortcut.cwd
|
|
4053
|
+
const effectiveCwd = anchorCommandCwd(shortcut.cwd, serviceConfig);
|
|
4031
4054
|
if (this.warnUnresolvedVars(processId, env2, { "shortcut cwd": effectiveCwd })) {
|
|
4032
4055
|
this.consoleLogSource.addSystemLog(processId, `Cannot run shortcut "${shortcutName}": unresolved variables (see above)`, "error", { id: randomUUID3(), type: "command-fail", header: shortcutName, state: "self" });
|
|
4033
4056
|
return { exitCode: 1 };
|
|
@@ -4062,7 +4085,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4062
4085
|
this.consoleLogSource.setJSParsers(processId, jsParsers);
|
|
4063
4086
|
const serviceConfig = proc.serviceConfig;
|
|
4064
4087
|
const env2 = resolveEnv(serviceConfig.env);
|
|
4065
|
-
const effectiveCwd = cwd
|
|
4088
|
+
const effectiveCwd = anchorCommandCwd(cwd, serviceConfig);
|
|
4066
4089
|
if (this.warnUnresolvedVars(processId, env2, { cwd: effectiveCwd })) {
|
|
4067
4090
|
this.consoleLogSource.addSystemLog(processId, `Cannot run command: unresolved variables (see above)`, "error", { id: randomUUID3(), type: "command-fail", header: command, state: "self" });
|
|
4068
4091
|
return { exitCode: 1 };
|
|
@@ -4129,14 +4152,14 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4129
4152
|
sharedProc.kill("SIGTERM");
|
|
4130
4153
|
await Promise.race([
|
|
4131
4154
|
sharedProc.exitPromise,
|
|
4132
|
-
new Promise((
|
|
4155
|
+
new Promise((resolve2) => setTimeout(resolve2, graceMs))
|
|
4133
4156
|
]);
|
|
4134
4157
|
const activeExecs = proc.commandProcesses.filter((cp) => cp.runnerProcess);
|
|
4135
4158
|
await Promise.all(
|
|
4136
4159
|
activeExecs.map(async (cp) => {
|
|
4137
4160
|
await Promise.race([
|
|
4138
4161
|
cp.runnerProcess.exitPromise,
|
|
4139
|
-
new Promise((
|
|
4162
|
+
new Promise((resolve2) => setTimeout(resolve2, 2e3))
|
|
4140
4163
|
]);
|
|
4141
4164
|
cp.runnerProcess = null;
|
|
4142
4165
|
})
|
|
@@ -4151,7 +4174,7 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4151
4174
|
activeProcesses.map(async (cp) => {
|
|
4152
4175
|
const exited = await Promise.race([
|
|
4153
4176
|
cp.runnerProcess.exitPromise.then(() => true),
|
|
4154
|
-
new Promise((
|
|
4177
|
+
new Promise((resolve2) => setTimeout(() => resolve2(false), graceMs))
|
|
4155
4178
|
]);
|
|
4156
4179
|
if (!exited && cp.runnerProcess) {
|
|
4157
4180
|
cp.runnerProcess.kill("SIGKILL");
|
|
@@ -4247,7 +4270,8 @@ var ProcessManager = class extends EventEmitter7 {
|
|
|
4247
4270
|
startedAt: proc.startedAt,
|
|
4248
4271
|
restartCount: proc.restartCount,
|
|
4249
4272
|
uptime,
|
|
4250
|
-
healthStatus
|
|
4273
|
+
healthStatus,
|
|
4274
|
+
cwd: effectiveProcessCwd(proc.serviceConfig)
|
|
4251
4275
|
};
|
|
4252
4276
|
}
|
|
4253
4277
|
emitStatus(processId) {
|
|
@@ -4356,15 +4380,15 @@ var processRouter = router({
|
|
|
4356
4380
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4357
4381
|
onLog: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4358
4382
|
const queue = [];
|
|
4359
|
-
let
|
|
4383
|
+
let resolve2 = null;
|
|
4360
4384
|
const handler = (batch) => {
|
|
4361
4385
|
const filtered = input?.processId ? batch.filter((log) => log.processId === input.processId) : batch;
|
|
4362
4386
|
if (filtered.length === 0) return;
|
|
4363
4387
|
if (queue.length >= SUBSCRIPTION_QUEUE_MAX) queue.shift();
|
|
4364
4388
|
queue.push(filtered);
|
|
4365
|
-
if (
|
|
4366
|
-
|
|
4367
|
-
|
|
4389
|
+
if (resolve2) {
|
|
4390
|
+
resolve2();
|
|
4391
|
+
resolve2 = null;
|
|
4368
4392
|
}
|
|
4369
4393
|
};
|
|
4370
4394
|
processManager.on("logs", handler);
|
|
@@ -4374,7 +4398,7 @@ var processRouter = router({
|
|
|
4374
4398
|
yield queue.shift();
|
|
4375
4399
|
} else {
|
|
4376
4400
|
await new Promise((r) => {
|
|
4377
|
-
|
|
4401
|
+
resolve2 = r;
|
|
4378
4402
|
});
|
|
4379
4403
|
}
|
|
4380
4404
|
}
|
|
@@ -4386,15 +4410,15 @@ var processRouter = router({
|
|
|
4386
4410
|
onStatus: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4387
4411
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4388
4412
|
const queue = [];
|
|
4389
|
-
let
|
|
4413
|
+
let resolve2 = null;
|
|
4390
4414
|
const handler = (status) => {
|
|
4391
4415
|
const entry = status;
|
|
4392
4416
|
if (!input?.processId || entry.id === input.processId) {
|
|
4393
4417
|
if (queue.length >= SUBSCRIPTION_QUEUE_MAX) queue.shift();
|
|
4394
4418
|
queue.push(status);
|
|
4395
|
-
if (
|
|
4396
|
-
|
|
4397
|
-
|
|
4419
|
+
if (resolve2) {
|
|
4420
|
+
resolve2();
|
|
4421
|
+
resolve2 = null;
|
|
4398
4422
|
}
|
|
4399
4423
|
}
|
|
4400
4424
|
};
|
|
@@ -4405,7 +4429,7 @@ var processRouter = router({
|
|
|
4405
4429
|
yield queue.shift();
|
|
4406
4430
|
} else {
|
|
4407
4431
|
await new Promise((r) => {
|
|
4408
|
-
|
|
4432
|
+
resolve2 = r;
|
|
4409
4433
|
});
|
|
4410
4434
|
}
|
|
4411
4435
|
}
|
|
@@ -4417,15 +4441,15 @@ var processRouter = router({
|
|
|
4417
4441
|
/** Subscribe to real-time health status changes */
|
|
4418
4442
|
onHealth: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4419
4443
|
const queue = [];
|
|
4420
|
-
let
|
|
4444
|
+
let resolve2 = null;
|
|
4421
4445
|
const handler = (healthData) => {
|
|
4422
4446
|
const entry = healthData;
|
|
4423
4447
|
if (!input?.processId || entry.processId === input.processId) {
|
|
4424
4448
|
if (queue.length >= SUBSCRIPTION_QUEUE_MAX) queue.shift();
|
|
4425
4449
|
queue.push(healthData);
|
|
4426
|
-
if (
|
|
4427
|
-
|
|
4428
|
-
|
|
4450
|
+
if (resolve2) {
|
|
4451
|
+
resolve2();
|
|
4452
|
+
resolve2 = null;
|
|
4429
4453
|
}
|
|
4430
4454
|
}
|
|
4431
4455
|
};
|
|
@@ -4436,7 +4460,7 @@ var processRouter = router({
|
|
|
4436
4460
|
yield queue.shift();
|
|
4437
4461
|
} else {
|
|
4438
4462
|
await new Promise((r) => {
|
|
4439
|
-
|
|
4463
|
+
resolve2 = r;
|
|
4440
4464
|
});
|
|
4441
4465
|
}
|
|
4442
4466
|
}
|
|
@@ -4447,15 +4471,15 @@ var processRouter = router({
|
|
|
4447
4471
|
/** Subscribe to real-time metrics */
|
|
4448
4472
|
onMetrics: protectedProcedure.input(z22.object({ processId: z22.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4449
4473
|
const queue = [];
|
|
4450
|
-
let
|
|
4474
|
+
let resolve2 = null;
|
|
4451
4475
|
const handler = (metrics) => {
|
|
4452
4476
|
const entry = metrics;
|
|
4453
4477
|
if (!input?.processId || entry.processId === input.processId) {
|
|
4454
4478
|
if (queue.length >= SUBSCRIPTION_QUEUE_MAX) queue.shift();
|
|
4455
4479
|
queue.push(metrics);
|
|
4456
|
-
if (
|
|
4457
|
-
|
|
4458
|
-
|
|
4480
|
+
if (resolve2) {
|
|
4481
|
+
resolve2();
|
|
4482
|
+
resolve2 = null;
|
|
4459
4483
|
}
|
|
4460
4484
|
}
|
|
4461
4485
|
};
|
|
@@ -4466,7 +4490,7 @@ var processRouter = router({
|
|
|
4466
4490
|
yield queue.shift();
|
|
4467
4491
|
} else {
|
|
4468
4492
|
await new Promise((r) => {
|
|
4469
|
-
|
|
4493
|
+
resolve2 = r;
|
|
4470
4494
|
});
|
|
4471
4495
|
}
|
|
4472
4496
|
}
|
|
@@ -4607,20 +4631,20 @@ var terminalRouter = router({
|
|
|
4607
4631
|
throw new TRPCError3({ code: "NOT_FOUND", message: `Terminal session ${input.sessionId} not found` });
|
|
4608
4632
|
}
|
|
4609
4633
|
const queue = [];
|
|
4610
|
-
let
|
|
4634
|
+
let resolve2 = null;
|
|
4611
4635
|
let done = false;
|
|
4612
4636
|
const onData = (data) => {
|
|
4613
4637
|
queue.push(data);
|
|
4614
|
-
if (
|
|
4615
|
-
|
|
4616
|
-
|
|
4638
|
+
if (resolve2) {
|
|
4639
|
+
resolve2();
|
|
4640
|
+
resolve2 = null;
|
|
4617
4641
|
}
|
|
4618
4642
|
};
|
|
4619
4643
|
const onExit = () => {
|
|
4620
4644
|
done = true;
|
|
4621
|
-
if (
|
|
4622
|
-
|
|
4623
|
-
|
|
4645
|
+
if (resolve2) {
|
|
4646
|
+
resolve2();
|
|
4647
|
+
resolve2 = null;
|
|
4624
4648
|
}
|
|
4625
4649
|
};
|
|
4626
4650
|
emitter.on("data", onData);
|
|
@@ -4631,7 +4655,7 @@ var terminalRouter = router({
|
|
|
4631
4655
|
yield queue.shift();
|
|
4632
4656
|
} else {
|
|
4633
4657
|
await new Promise((r) => {
|
|
4634
|
-
|
|
4658
|
+
resolve2 = r;
|
|
4635
4659
|
});
|
|
4636
4660
|
}
|
|
4637
4661
|
}
|
|
@@ -4834,15 +4858,15 @@ var gitRouter = router({
|
|
|
4834
4858
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
4835
4859
|
const absGitDir = resolvePath(cwd, gitDir);
|
|
4836
4860
|
const queue = [];
|
|
4837
|
-
let
|
|
4861
|
+
let resolve2 = null;
|
|
4838
4862
|
let debounceTimer = null;
|
|
4839
4863
|
const onFsChange = () => {
|
|
4840
4864
|
if (debounceTimer) clearTimeout(debounceTimer);
|
|
4841
4865
|
debounceTimer = setTimeout(() => {
|
|
4842
4866
|
queue.push("changed");
|
|
4843
|
-
if (
|
|
4844
|
-
|
|
4845
|
-
|
|
4867
|
+
if (resolve2) {
|
|
4868
|
+
resolve2();
|
|
4869
|
+
resolve2 = null;
|
|
4846
4870
|
}
|
|
4847
4871
|
}, 500);
|
|
4848
4872
|
};
|
|
@@ -4868,7 +4892,7 @@ var gitRouter = router({
|
|
|
4868
4892
|
}
|
|
4869
4893
|
} else {
|
|
4870
4894
|
await new Promise((r) => {
|
|
4871
|
-
|
|
4895
|
+
resolve2 = r;
|
|
4872
4896
|
});
|
|
4873
4897
|
}
|
|
4874
4898
|
}
|
|
@@ -5303,19 +5327,19 @@ var AiSpawnManager = class {
|
|
|
5303
5327
|
const entry = this.spawns.get(spawnId);
|
|
5304
5328
|
if (!entry) throw new Error(`AI spawn ${spawnId} not found`);
|
|
5305
5329
|
let offset = fromOffset;
|
|
5306
|
-
let
|
|
5330
|
+
let resolve2 = null;
|
|
5307
5331
|
let done = false;
|
|
5308
5332
|
const onChunk = () => {
|
|
5309
|
-
if (
|
|
5310
|
-
|
|
5311
|
-
|
|
5333
|
+
if (resolve2) {
|
|
5334
|
+
resolve2();
|
|
5335
|
+
resolve2 = null;
|
|
5312
5336
|
}
|
|
5313
5337
|
};
|
|
5314
5338
|
const onDone = () => {
|
|
5315
5339
|
done = true;
|
|
5316
|
-
if (
|
|
5317
|
-
|
|
5318
|
-
|
|
5340
|
+
if (resolve2) {
|
|
5341
|
+
resolve2();
|
|
5342
|
+
resolve2 = null;
|
|
5319
5343
|
}
|
|
5320
5344
|
};
|
|
5321
5345
|
entry.emitter.on("chunk", onChunk);
|
|
@@ -5334,7 +5358,7 @@ var AiSpawnManager = class {
|
|
|
5334
5358
|
}
|
|
5335
5359
|
if (done && offset >= entry.buffer.length) break;
|
|
5336
5360
|
await new Promise((r) => {
|
|
5337
|
-
|
|
5361
|
+
resolve2 = r;
|
|
5338
5362
|
});
|
|
5339
5363
|
}
|
|
5340
5364
|
} finally {
|
|
@@ -5593,12 +5617,12 @@ var CodexAppServerManager = class extends EventEmitter10 {
|
|
|
5593
5617
|
throw new Error("codex app-server not connected");
|
|
5594
5618
|
}
|
|
5595
5619
|
const id = this.nextId++;
|
|
5596
|
-
return new Promise((
|
|
5620
|
+
return new Promise((resolve2, reject) => {
|
|
5597
5621
|
const timer = setTimeout(() => {
|
|
5598
5622
|
this.pending.delete(id);
|
|
5599
5623
|
reject(new Error(`Request ${method} (id=${id}) timed out`));
|
|
5600
5624
|
}, REQUEST_TIMEOUT_MS);
|
|
5601
|
-
this.pending.set(id, { resolve, reject, timer });
|
|
5625
|
+
this.pending.set(id, { resolve: resolve2, reject, timer });
|
|
5602
5626
|
this.writeLine({ jsonrpc: "2.0", method, id, params });
|
|
5603
5627
|
});
|
|
5604
5628
|
}
|
|
@@ -5722,12 +5746,12 @@ function extForMime(mime) {
|
|
|
5722
5746
|
return MIME_TO_EXT[mime.toLowerCase()] ?? "png";
|
|
5723
5747
|
}
|
|
5724
5748
|
function runCmd(cmd, args, stdin, timeoutMs = 5e3) {
|
|
5725
|
-
return new Promise((
|
|
5749
|
+
return new Promise((resolve2) => {
|
|
5726
5750
|
let settled = false;
|
|
5727
5751
|
const settle = (code, stderr) => {
|
|
5728
5752
|
if (settled) return;
|
|
5729
5753
|
settled = true;
|
|
5730
|
-
|
|
5754
|
+
resolve2({ code, stderr });
|
|
5731
5755
|
};
|
|
5732
5756
|
try {
|
|
5733
5757
|
const child = spawn7(cmd, args, { stdio: ["pipe", "ignore", "pipe"] });
|
|
@@ -5929,16 +5953,16 @@ var aiRouter = router({
|
|
|
5929
5953
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
5930
5954
|
await codexAppServerManager.ensureConnected();
|
|
5931
5955
|
const queue = [];
|
|
5932
|
-
let
|
|
5956
|
+
let resolve2 = null;
|
|
5933
5957
|
const unsub = codexAppServerManager.onNotification((method, params) => {
|
|
5934
5958
|
if (input.threadId) {
|
|
5935
5959
|
const notifThreadId = params["threadId"] ?? params["turn"]?.["threadId"];
|
|
5936
5960
|
if (notifThreadId && notifThreadId !== input.threadId) return;
|
|
5937
5961
|
}
|
|
5938
5962
|
queue.push({ method, params });
|
|
5939
|
-
if (
|
|
5940
|
-
|
|
5941
|
-
|
|
5963
|
+
if (resolve2) {
|
|
5964
|
+
resolve2();
|
|
5965
|
+
resolve2 = null;
|
|
5942
5966
|
}
|
|
5943
5967
|
});
|
|
5944
5968
|
try {
|
|
@@ -5947,7 +5971,7 @@ var aiRouter = router({
|
|
|
5947
5971
|
yield queue.shift();
|
|
5948
5972
|
}
|
|
5949
5973
|
await new Promise((r) => {
|
|
5950
|
-
|
|
5974
|
+
resolve2 = r;
|
|
5951
5975
|
});
|
|
5952
5976
|
}
|
|
5953
5977
|
} finally {
|
|
@@ -6262,24 +6286,34 @@ function createAgent(opts) {
|
|
|
6262
6286
|
await traefikManager.stop();
|
|
6263
6287
|
await processManager.shutdownAll();
|
|
6264
6288
|
await Promise.race([
|
|
6265
|
-
new Promise((
|
|
6266
|
-
new Promise((
|
|
6289
|
+
new Promise((resolve2) => healthWss.close(() => resolve2())),
|
|
6290
|
+
new Promise((resolve2) => setTimeout(resolve2, 5e3))
|
|
6267
6291
|
]);
|
|
6268
6292
|
await Promise.race([
|
|
6269
|
-
new Promise((
|
|
6270
|
-
new Promise((
|
|
6293
|
+
new Promise((resolve2) => trpcWss.close(() => resolve2())),
|
|
6294
|
+
new Promise((resolve2) => setTimeout(resolve2, 5e3))
|
|
6271
6295
|
]);
|
|
6272
6296
|
await Promise.race([
|
|
6273
|
-
new Promise((
|
|
6274
|
-
new Promise((
|
|
6297
|
+
new Promise((resolve2) => server.close(() => resolve2())),
|
|
6298
|
+
new Promise((resolve2) => setTimeout(resolve2, 5e3))
|
|
6275
6299
|
]);
|
|
6276
6300
|
};
|
|
6277
6301
|
return { app, server, trpcWss, healthWss, passphraseHex, shutdown };
|
|
6278
6302
|
}
|
|
6279
6303
|
|
|
6304
|
+
// src/config/node-path.ts
|
|
6305
|
+
import { dirname as dirname3, delimiter } from "path";
|
|
6306
|
+
function ensureNodeBinOnPath(environment = process.env) {
|
|
6307
|
+
const nodeBin = dirname3(process.execPath);
|
|
6308
|
+
const current = environment["PATH"] ?? "";
|
|
6309
|
+
const entries = current.split(delimiter).filter(Boolean);
|
|
6310
|
+
if (entries.includes(nodeBin)) return;
|
|
6311
|
+
environment["PATH"] = entries.length > 0 ? `${current}${delimiter}${nodeBin}` : nodeBin;
|
|
6312
|
+
}
|
|
6313
|
+
|
|
6280
6314
|
// src/index.ts
|
|
6281
6315
|
function listenWithRetry(server, port, host, maxRetries = 20, delay = 500) {
|
|
6282
|
-
return new Promise((
|
|
6316
|
+
return new Promise((resolve2, reject) => {
|
|
6283
6317
|
let attempts = 0;
|
|
6284
6318
|
const tryListen = () => {
|
|
6285
6319
|
const onError = (err) => {
|
|
@@ -6295,7 +6329,7 @@ function listenWithRetry(server, port, host, maxRetries = 20, delay = 500) {
|
|
|
6295
6329
|
server.once("error", onError);
|
|
6296
6330
|
server.listen(port, host, () => {
|
|
6297
6331
|
server.removeListener("error", onError);
|
|
6298
|
-
|
|
6332
|
+
resolve2();
|
|
6299
6333
|
});
|
|
6300
6334
|
};
|
|
6301
6335
|
tryListen();
|
|
@@ -6310,6 +6344,7 @@ process.on("uncaughtException", (err) => {
|
|
|
6310
6344
|
process.exit(1);
|
|
6311
6345
|
});
|
|
6312
6346
|
async function main() {
|
|
6347
|
+
ensureNodeBinOnPath();
|
|
6313
6348
|
const { server, shutdown, passphraseHex } = createAgent({
|
|
6314
6349
|
passphraseHex: env.PASSPHRASE_OVERRIDE
|
|
6315
6350
|
});
|