@runeya/runeya 2.0.70 → 2.0.72
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 +260 -164
- package/agent/index.js.map +1 -1
- package/agent-manager-YDLSYZE3.js +7 -0
- package/{chunk-YSJ6OJGN.js → chunk-HPYBAUAH.js} +409 -18
- package/chunk-HPYBAUAH.js.map +1 -0
- package/index.js +3 -2
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/{src-6WVQ2FQV.js → src-53OQNM27.js} +735 -633
- package/src-53OQNM27.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-DdIfThmp.js +13 -0
- package/web/assets/AgentTerminalPage-BD2w4XRc.css +1 -0
- package/web/assets/AgentTerminalPage-v9fFc2Kd.js +1 -0
- package/web/assets/AiChatPage-BvrKlLxc.js +1 -0
- package/web/assets/AppLayout-CLzy-QOZ.js +1 -0
- package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
- package/web/assets/AuditPage-DgJIcr0c.js +1 -0
- package/web/assets/CloudAccountPage-CoJV3YCA.js +1 -0
- package/web/assets/CloudAccountPage-DGtKCmXL.js +1 -0
- package/web/assets/CloudMessagingPage-Bql34zJU.js +2 -0
- package/web/assets/DashboardPage-BSvJxrcT.js +1 -0
- package/web/assets/DirectoryPickerDialog-BfLLfUQy.js +1 -0
- package/web/assets/{EditorIcon-DUDLTmUd.js → EditorIcon-BbilRWLq.js} +2 -2
- package/web/assets/EnvironmentForm-BIHXK18r.js +108 -0
- package/web/assets/EnvironmentFormPage-oLAwLJ1b.js +1 -0
- package/web/assets/EnvironmentListPage-tJfB0q_E.js +1 -0
- package/web/assets/KanbanBoardPage-DpyYe6jx.js +4 -0
- package/web/assets/KanbanListPage-DjXWjWgU.js +1 -0
- package/web/assets/LaunchProjectPage-Bqgsa2z1.js +1 -0
- package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
- package/web/assets/LaunchServicesPage-BCNDSuuN.js +1 -0
- package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
- package/web/assets/LogViewer-gTNzyao0.js +3 -0
- package/web/assets/OrgKeyPrompt-BdNV_cve.js +1 -0
- package/web/assets/{ProcessControls-DMxvJmDe.js → ProcessControls-BzMrd-2c.js} +1 -1
- package/web/assets/ProcessDetailPage-Rg5zyPYJ.js +1 -0
- package/web/assets/{ProcessMetrics-DK4Dgdb0.js → ProcessMetrics-hZWAa3gi.js} +2 -2
- package/web/assets/ProjectDetailPage-NbxG6AIr.js +1 -0
- package/web/assets/ProjectListPage-COMYMVbr.js +1 -0
- package/web/assets/RandomJobTestPage-DTK2RLln.js +2 -0
- package/web/assets/ScenarioEditorPage-DIx_Nzbh.js +14 -0
- package/web/assets/SendToChatDialog-BAalryU3.js +1 -0
- package/web/assets/ServiceControlsBar-CgR8yFZb.js +1 -0
- package/web/assets/ServiceDetailPage-Cvqftndf.js +2 -0
- package/web/assets/ServiceFormPage-CGgCwNM3.js +1 -0
- package/web/assets/{SettingsPage-uCS5lY2z.css → SettingsPage-ClUsbLPy.css} +1 -1
- package/web/assets/SettingsPage-Dx5xoAS7.js +2063 -0
- package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
- package/web/assets/UnlockPage-Dlp8kXD-.js +1 -0
- package/web/assets/VariablesTable-Dr1C6hg4.js +1 -0
- package/web/assets/VaultMigrationPage-1zZCTKgS.js +1 -0
- package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
- package/web/assets/VersionBadge-BiLjqi8I.js +1 -0
- package/web/assets/WikiPage-B51w0xOX.js +1 -0
- package/web/assets/WikiView-CGQrkGH4.js +1 -0
- package/web/assets/add-scalar-classes-ChVyhgpT.js +387 -0
- package/web/assets/auth-errors-BdfA61wA.js +1 -0
- package/web/assets/autocomplete-wqj_ORBH.js +308 -0
- package/web/assets/{basic-shape-diamond.svg-CacrbinE.js → basic-shape-diamond.svg-CWwnQ30s.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-GGJ54oyX.js → basic-shape-hexagon.svg-C9JMDUIK.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CuWfwdJM.js → basic-shape-primary-circle-ellipse-round.svg-Do0Ewbp-.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-C2Bewjip.js → basic-shape-primary-square-rectangle.svg-CRq767cD.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-DNtg0KuJ.js → basic-shape-shield.svg-BuxJBs70.js} +1 -1
- package/web/assets/{browser-XO2fm4BX.js → browser-BEEW2obM.js} +1 -1
- package/web/assets/{browser-5NN8ieli.js → browser-BhZAIVa8.js} +1 -1
- package/web/assets/browser-DNbnH79q.js +6 -0
- package/web/assets/card-C1iS2wAN.js +32 -0
- package/web/assets/{checkbox-iq9mU5eP.js → checkbox-CCU9xze9.js} +3 -3
- package/web/assets/{chip-BsccUnHb.js → chip-DsJBorBp.js} +2 -2
- package/web/assets/client-BFK39Zab.js +24 -0
- package/web/assets/cloud-chat.store-D39vo5xT.js +1 -0
- package/web/assets/cloud-session-B7G8xhKC.js +1 -0
- package/web/assets/column-CPU5Jg0n.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-DSwpF_ss.js → computer-device-desktop-monitor.svg-XWEWhL0y.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-Caj_PZBV.js → computer-device-desktop.svg-COkZClBv.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-Bv3ienI_.js → computer-device-laptop.svg-C4EfJUqO.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-IWlhEKx_.js → computer-device-mobile-phone-android-samsung-back.svg-Bb2_2tyI.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CglQAFq2.js → computer-device-mobile-phone-android-samsung.svg-CEUhXP7K.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CgjNnTTw.js → computer-device-mobile-phone-iphone-x-back.svg-B3rxizbE.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CotZ-4M5.js → computer-device-mobile-phone-iphone-x.svg-BSKpZFCN.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-B2cemd61.js → computer-device-mobile-tablet-touch.svg-CZvb3YX2.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-8nPVs4u_.js → computer-device-mobile-tablet.svg-BM4_YZYi.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-Bl56Qw4v.js → computer-device-network-ethernet-cat6.svg-CK0v-Rjf.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-C_x6Rf8N.js → computer-device-network-lan-www.svg-DvhO71Lq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-oz6dsDQB.js → computer-device-network-wifi-connection.svg--olUYsgv.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BciHU6Nj.js → computer-device-network-wifi-router.svg-D5HKSWTi.js} +1 -1
- package/web/assets/{cssMode-DSX5tYcm.js → cssMode-CTjKNOiX.js} +1 -1
- package/web/assets/{divider-DnPOdDs3.js → divider-VFAPax5_.js} +2 -2
- package/web/assets/docx-preview-gNYLz3FX.js +21 -0
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-BzQP6y9L.js → ecology-science-erlenmeyer-flask.svg-THkDG-tj.js} +1 -1
- package/web/assets/{fieldset-D9lkV70l.js → fieldset-DZGy449H.js} +2 -2
- package/web/assets/{freemarker2-D9yXX9Vw.js → freemarker2-CNSvFpVF.js} +1 -1
- package/web/assets/{handlebars-BmcjEksL.js → handlebars-BeRu48NI.js} +1 -1
- package/web/assets/{html-BQF9vZLL.js → html-DrTiGPjE.js} +1 -1
- package/web/assets/{htmlMode-DxSRpgHE.js → htmlMode-DpbDpbjK.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-DQX09uxo.js → image-flash-lightning.svg-DrkyfdIV.js} +1 -1
- package/web/assets/{image-picture-flower.svg-CUBdrnoc.js → image-picture-flower.svg-BqFj1xcR.js} +1 -1
- package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
- package/web/assets/{index-enuBsJBa.js → index-y5bguEQB.js} +299 -299
- package/web/assets/{interface-alert-exclamation-diamond.svg-DXQdQSvN.js → interface-alert-exclamation-diamond.svg-B40BfW6d.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BoCeNIlU.js → interface-alert-exclamation-triangle-warning.svg-DeIlksL4.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BCA57JL2.js → interface-alert-information-circle.svg-SwVdV-Z6.js} +1 -1
- package/web/assets/{interface-award-crown.svg-B1hTlsb0.js → interface-award-crown.svg-DZHf0EHC.js} +1 -1
- package/web/assets/{interface-bookmark.svg-zf3cIGKM.js → interface-bookmark-tag.svg-CiaV2Cjo.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-AosfQ0Ip.js → interface-bookmark.svg-DBEqa-8W.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-D58WqPie.js → interface-calendar-date-one.svg-C_afKyyz.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-B74HWMlw.js → interface-content-book-open-pages.svg-D5d9ilSu.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-C2QWk62-.js → interface-content-book-page.svg-B6hlaLP5.js} +1 -1
- package/web/assets/{interface-content-file.svg-xKu0qAOQ.js → interface-content-file.svg-COWMwejF.js} +1 -1
- package/web/assets/interface-content-folder.svg-BCIUgpD4.js +1 -0
- package/web/assets/{interface-content-folder.svg-ZkrY9WkQ.js → interface-content-folder.svg-K7DTqQH-.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-BEkNG3vO.js → interface-copy-clipboard.svg-BFQ6eajI.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-5ztQ3WTq.js → interface-edit-attachment.svg-B-LsB4cM.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-CC9U1Gnc.js → interface-edit-binocular.svg-CnVjKyrn.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-CPl6ZoE9.js → interface-edit-magic-wand.svg-CUY6vVJT.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-B85t7jG2.js → interface-edit-tool-paint-roller.svg-B1tSdIxN.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BSTdqWUg.js → interface-edit-tool-pencil.svg-BHFULT75.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DbPr_WKt.js → interface-favorite-award.svg-CcOLoF8I.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-CgKYXc7k.js → interface-favorite-flag.svg-CAW6LmLW.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-DfnXyJMg.js → interface-favorite-heart.svg-BEz4zlNs.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-0sT7jJMK.js → interface-favorite-star.svg-DKFuvYge.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BcM2EXgn.js → interface-favorite-stars-sparkles.svg-BfzccoPz.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-BM62WcKt.js → interface-hierarchy-flowchart.svg-BT8QX161.js} +1 -1
- package/web/assets/{interface-home-house.svg-KqP7iMC4.js → interface-home-house.svg-B264pTPi.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DBKFbihR.js → interface-hyperlink.svg-DhUgNKkr.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-DTkCS7PY.js → interface-lighting-brightness.svg-CPKb40uB.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-Div5xlvI.js → interface-lock-closed.svg-CvXhgCtt.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Du5L_iMV.js → interface-lock-open-unlock.svg-B0PMKRhP.js} +1 -1
- package/web/assets/{interface-login-key.svg-28TYVVzH.js → interface-login-key.svg-DJUm3vhg.js} +1 -1
- package/web/assets/{interface-search.svg-BS_owhIG.js → interface-search.svg-ByW98ez_.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-afYc0TQv.js → interface-setting-cog.svg-DYOmJ9It.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BnW8HhjG.js → interface-share-megaphone-bullhorn.svg-YOCUHa3i.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-DvX_9178.js → interface-share-rocket.svg-C5kj5dSu.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-B4nQqv6w.js → interface-share-satellite.svg-C0svPxG6.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-Ciol-6JO.js → interface-share-space-ship.svg-8Nw02n1Q.js} +1 -1
- package/web/assets/{interface-share.svg-COm1OVr8.js → interface-share.svg-eDW294tn.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DXuF6sqG.js → interface-signal-square.svg-CxB5mcJQ.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-CWLe4mcs.js → interface-time-clock-circle.svg-CEnlQi79.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-DXz9wBiv.js → interface-time-hour-glass.svg-qL3_s19Q.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-CXOw1J5l.js → interface-users-multiple.svg-Cz2iA33z.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-B9H9xib3.js → interface-weather-moon.svg-BoT9GUK_.js} +1 -1
- package/web/assets/{javascript-BY1URXQK.js → javascript-DWdA0-HW.js} +1 -1
- package/web/assets/{jsonMode-CxipJdzJ.js → jsonMode-DxGrVlm0.js} +2 -2
- package/web/assets/{liquid-BbqI_ezD.js → liquid-COqLk0mR.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BrbDxmfl.js → lspLanguageFeatures--0hj1ZV4.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-CAlBGAlW.js → mail-chat-bubble-square.svg-eiKzTBOv.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-BoNc-FEY.js → mail-send-email-paper-airplane.svg-CCI77Gk8.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CnMOSib5.js → mail-send-envelope.svg-ChM5k_N7.js} +1 -1
- package/web/assets/{mdx-C4PcQ_oe.js → mdx-CwXNREAO.js} +1 -1
- package/web/assets/{message-BWsbEnoG.js → message-CSxReshg.js} +2 -2
- package/web/assets/{minus-BpDIA3FO.js → minus-Cg0lH8Mn.js} +2 -2
- package/web/assets/modal-D3dkRJqD.js +1 -0
- package/web/assets/modal-ix4Amfqv.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-DZQ9mrBZ.js → money-cashier-receipt.svg-WMIW7vxg.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-BCaw-GeJ.js → money-currency-dollar-pay.svg-qTcGSVX2.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-DZXh-i2p.js → money-graph-arrow-increase.svg-B-TQKOW-.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-j_1tUlGM.js → money-graph-bar-chart-increase.svg-CWCIjQcI.js} +1 -1
- package/web/assets/multiselect-C7U34xql.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-bajA57tM.js → nature-ecology-leaf.svg-CL26IBv2.js} +1 -1
- package/web/assets/{password-W9W3PSE2.js → password-ZOY0bqV1.js} +4 -4
- package/web/assets/{phone-telephone.svg-DD5MGHqV.js → phone-telephone.svg-BhzxDLVX.js} +1 -1
- package/web/assets/{plus-RuIcofM_.js → plus-DsBv8bgd.js} +6 -6
- package/web/assets/process.store-DPp7dk63.js +1 -0
- package/web/assets/{programming-bug.svg-CjtqBc8Z.js → programming-bug.svg-CBNm3E3F.js} +1 -1
- package/web/assets/{programming-cloud.svg-BXQ_h3dK.js → programming-cloud.svg-BrVRbl9B.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-D6TzOHsK.js → programming-computer-database-server.svg-LQp6n-du.js} +1 -1
- package/web/assets/{programming-computer-database.svg-Dmdh0lIx.js → programming-computer-database.svg-CSbhcIMU.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CtGhpLhO.js → programming-module-four-layout.svg-DYEAcL2j.js} +1 -1
- package/web/assets/{programming-module-three.svg-hz_w8W7I.js → programming-module-three.svg-CCQXCU-e.js} +1 -1
- package/web/assets/{programming-module.svg-oDT_fQLn.js → programming-module.svg-Chrmf7k4.js} +1 -1
- package/web/assets/{programming-script-code.svg-CxHHTsaU.js → programming-script-code.svg-DPhhp3IW.js} +1 -1
- package/web/assets/{python-DH-AyaLR.js → python-B7ePhfsS.js} +1 -1
- package/web/assets/{razor-BUpT1gRX.js → razor-ChpzroOv.js} +1 -1
- package/web/assets/router-Df972Ysi.js +1 -0
- package/web/assets/settings-scope-CC3oHq2H.js +1 -0
- package/web/assets/settings.store-B31_cRNl.js +1 -0
- package/web/assets/{shopping-cart.svg-D1eK38-E.js → shopping-cart.svg-bmefzlOu.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-CxSfFNAS.js → shopping-gift-present.svg-aUOleva0.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-M5Njo2qJ.js → shopping-shipping-box-parcel-package.svg-BLsRP4dg.js} +1 -1
- package/web/assets/{src-CEK4EPEJ.js → src-BPSr9dU2.js} +34 -34
- package/web/assets/src-Dt37H-VN.js +1 -0
- package/web/assets/tabpanel-DZQ_g__B.js +150 -0
- package/web/assets/{tag-new-circle.svg-v_Go3fcT.js → tag-new-circle.svg-kTMMMv-0.js} +1 -1
- package/web/assets/{toggleswitch-C4A0_850.js → toggleswitch-BWXDXl37.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-Db2uRb3M.js → travel-map-earth-globe.svg-BdQmz8_b.js} +1 -1
- package/web/assets/trpc-aSS7b3jh.js +1 -0
- package/web/assets/{tsMode-CXB5XugS.js → tsMode-arHIUQbZ.js} +6 -6
- package/web/assets/{typescript-CHJkC9r6.js → typescript-Ds9kgbPd.js} +1 -1
- package/web/assets/useAiChatDrawer-C1xrMtLl.js +1 -0
- package/web/assets/useCloudOrg-BdpqnN19.css +1 -0
- package/web/assets/useCloudOrg-BexK510D.js +97 -0
- package/web/assets/{useProjectCatalog-DDm0I6sX.js → useProjectCatalog-BbSaTBSS.js} +1 -1
- package/web/assets/{xml-DB4EKWC9.js → xml-CO56TgpZ.js} +1 -1
- package/web/assets/{yaml-CqvLyuow.js → yaml-DueFV2-x.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-74WZPMVQ.js +0 -7
- package/chunk-YSJ6OJGN.js.map +0 -1
- package/src-6WVQ2FQV.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-vU3z8Etw.js +0 -13
- package/web/assets/AgentTerminalPage-A8GIX6dZ.css +0 -1
- package/web/assets/AgentTerminalPage-DE3GUoXn.js +0 -1
- package/web/assets/AiChatPage-BIJczUeS.js +0 -1
- package/web/assets/AppLayout-CvkK_Pp3.js +0 -1
- package/web/assets/AuditPage-BZuVgUf1.js +0 -1
- package/web/assets/CloudAccountPage-B__2SGAw.js +0 -1
- package/web/assets/CloudAccountPage-MSWkg9Ke.js +0 -1
- package/web/assets/CloudMessagingPage-C5pD6Qsd.js +0 -2
- package/web/assets/DashboardPage-66q5K841.js +0 -1
- package/web/assets/DirectoryPickerDialog-wZYtGEZ9.js +0 -1
- package/web/assets/EnvironmentForm-C0Q1pRdW.js +0 -108
- package/web/assets/EnvironmentFormPage-LO-mwupn.js +0 -1
- package/web/assets/EnvironmentListPage-CvknyN3O.js +0 -1
- package/web/assets/KanbanBoardPage-DUsAyowy.js +0 -4
- package/web/assets/KanbanListPage-9RBCauSd.js +0 -1
- package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
- package/web/assets/LaunchProjectPage-obaNCuEY.js +0 -1
- package/web/assets/LaunchServicesPage-CiWzQIyC.js +0 -1
- package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
- package/web/assets/LogViewer-BiSD_TNt.js +0 -3
- package/web/assets/OrgKeyPrompt-zhMl_nTd.js +0 -1
- package/web/assets/ProcessDetailPage-CsCqQh2V.js +0 -1
- package/web/assets/ProjectDetailPage-B0vJySvH.js +0 -1
- package/web/assets/ProjectListPage-srxBmrbO.js +0 -1
- package/web/assets/RandomJobTestPage-jGfX-6W9.js +0 -2
- package/web/assets/ScenarioEditorPage-CxLy6gs7.js +0 -14
- package/web/assets/SendToChatDialog-AHkuFQjt.js +0 -1
- package/web/assets/ServiceControlsBar-C8P9_qWK.js +0 -1
- package/web/assets/ServiceDetailPage-DTBpQegV.js +0 -2
- package/web/assets/ServiceFormPage-CsPSMWdD.js +0 -1
- package/web/assets/SettingsPage-CmtRn6VJ.js +0 -2063
- package/web/assets/UnlockPage-Bkp_hR-F.js +0 -1
- package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
- package/web/assets/VariablesTable-jo61MhbL.js +0 -1
- package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
- package/web/assets/VaultMigrationPage-D-Dxg5xH.js +0 -1
- package/web/assets/VersionBadge-CwNZLgqN.js +0 -1
- package/web/assets/WikiPage-DZLKTPi3.js +0 -1
- package/web/assets/WikiView-BpJECJ2Y.js +0 -1
- package/web/assets/add-scalar-classes-CqLAxAGv.js +0 -387
- package/web/assets/auth-errors-BOjTx5eo.js +0 -1
- package/web/assets/autocomplete-CrMQ2sCk.js +0 -308
- package/web/assets/card-CjcU4SfX.js +0 -32
- package/web/assets/client-B9UJRQa-.js +0 -24
- package/web/assets/cloud-chat.store-Dw2lzuBY.js +0 -1
- package/web/assets/cloud-session-DIhbWyP5.js +0 -1
- package/web/assets/column-BGKYk6b6.js +0 -907
- package/web/assets/interface-content-folder.svg-DjEfXjEF.js +0 -1
- package/web/assets/modal-DZYAJM4x.js +0 -5
- package/web/assets/modal-Fe2dzlxp.js +0 -1
- package/web/assets/multiselect-CmjxW2sW.js +0 -251
- package/web/assets/process.store-COWqXNUm.js +0 -1
- package/web/assets/router-BIJ4goD-.js +0 -1
- package/web/assets/settings-scope-DGzA7Be-.js +0 -1
- package/web/assets/settings.store-Dj2nbYYG.js +0 -1
- package/web/assets/src-BTWvqafq.js +0 -1
- package/web/assets/tabpanel-CWwOXePg.js +0 -150
- package/web/assets/trpc-DfyQNjZd.js +0 -1
- package/web/assets/useAiChatDrawer-Cuhlc2BI.js +0 -1
- package/web/assets/useCloudOrg-DYOv1Oak.js +0 -93
- package/web/assets/useCloudOrg-Dc6yRgro.css +0 -1
- /package/{agent-manager-74WZPMVQ.js.map → agent-manager-YDLSYZE3.js.map} +0 -0
- /package/web/assets/{abap-Q7FyqTce.js → abap-BvxTqXT2.js} +0 -0
- /package/web/assets/{apex-DBNDq2a_.js → apex-CIPCCkBr.js} +0 -0
- /package/web/assets/{azcli-BHW8ozYN.js → azcli-Rs0NIwkA.js} +0 -0
- /package/web/assets/{bat-BL-_3Nfo.js → bat-BxAhM6gR.js} +0 -0
- /package/web/assets/{bicep-DR2vgumW.js → bicep-oV_ehPcG.js} +0 -0
- /package/web/assets/{cameligo-BCjoEAZU.js → cameligo-CJLaUyQs.js} +0 -0
- /package/web/assets/{clojure-zw1Irdul.js → clojure-CjvMureh.js} +0 -0
- /package/web/assets/{coffee-BdEjkiiW.js → coffee-motWC5XQ.js} +0 -0
- /package/web/assets/{cpp-DKUlBIAG.js → cpp-DiWIfYNM.js} +0 -0
- /package/web/assets/{csharp-BsNC4zVq.js → csharp-GBlGBeai.js} +0 -0
- /package/web/assets/{csp-X4Chv5_9.js → csp-tSyK5eO1.js} +0 -0
- /package/web/assets/{css-Dh0Dlycs.js → css-BkFK9HG_.js} +0 -0
- /package/web/assets/{cypher-BL_DRjGX.js → cypher-Bcp8PXr2.js} +0 -0
- /package/web/assets/{dart-DaM4j487.js → dart-uz9Rxe0M.js} +0 -0
- /package/web/assets/{dockerfile-Df5WJXAt.js → dockerfile-iJizx3Zp.js} +0 -0
- /package/web/assets/{ecl-BjUo3uTs.js → ecl-BalaS36Z.js} +0 -0
- /package/web/assets/{elixir-DrLHYSxt.js → elixir-D6CLrLGy.js} +0 -0
- /package/web/assets/{flow9-DKiuX7rg.js → flow9-CFt3-vVY.js} +0 -0
- /package/web/assets/{fsharp-CAN78557.js → fsharp-DGa7raxa.js} +0 -0
- /package/web/assets/{go-DGjr9vA5.js → go-wlqInk4z.js} +0 -0
- /package/web/assets/{graphql-CcoU3Cj2.js → graphql-CP1guigM.js} +0 -0
- /package/web/assets/{hcl-udfyCcTm.js → hcl-CK0UkKD0.js} +0 -0
- /package/web/assets/{ini-BVbXatjh.js → ini-Ch56nrUj.js} +0 -0
- /package/web/assets/{java-Drpmh61g.js → java-C9_WIayl.js} +0 -0
- /package/web/assets/{julia-asFGk-ZV.js → julia-Can2_mhR.js} +0 -0
- /package/web/assets/{kotlin-HmkKz1TT.js → kotlin-DUvGf_BX.js} +0 -0
- /package/web/assets/{less-C5i2m2Dn.js → less-DoTbG-rc.js} +0 -0
- /package/web/assets/{lexon-B3Xh2kL6.js → lexon-BFMO2_kL.js} +0 -0
- /package/web/assets/{lua-DnOtgOOu.js → lua-CC-QtBo7.js} +0 -0
- /package/web/assets/{m3-Brj4HNKq.js → m3-C51MyH5Q.js} +0 -0
- /package/web/assets/{markdown-C3-4Ntpz.js → markdown-CDwLHhgZ.js} +0 -0
- /package/web/assets/{mips-vFQKPHzn.js → mips-YuxZtPGU.js} +0 -0
- /package/web/assets/{msdax-D5MYLS2R.js → msdax-CJjWhmte.js} +0 -0
- /package/web/assets/{mysql-CRQHhUON.js → mysql-B1riwLaD.js} +0 -0
- /package/web/assets/{objective-c-8cZEp0HR.js → objective-c-drXT-gmc.js} +0 -0
- /package/web/assets/{pascal-BPn_2jro.js → pascal-KUYgrN-Z.js} +0 -0
- /package/web/assets/{pascaligo-L7QnU_8B.js → pascaligo-DQmQJP-r.js} +0 -0
- /package/web/assets/{perl-B9zSPnp3.js → perl-09XLBmCS.js} +0 -0
- /package/web/assets/{pgsql-DiRJukCJ.js → pgsql-BFj9IFFu.js} +0 -0
- /package/web/assets/{php-Dv4g8Lhr.js → php-UnC5BqwY.js} +0 -0
- /package/web/assets/{pla-CKAoz6vp.js → pla-BFuYrPHG.js} +0 -0
- /package/web/assets/{postiats-B_PYgUTS.js → postiats-n4ft3jnO.js} +0 -0
- /package/web/assets/{powerquery-CAagSyo-.js → powerquery-D-s-oFSc.js} +0 -0
- /package/web/assets/{powershell-Cj9BzLhS.js → powershell-CTboTf93.js} +0 -0
- /package/web/assets/{protobuf-DTRY4FFo.js → protobuf-Dt62GuJP.js} +0 -0
- /package/web/assets/{pug-qADGmCS8.js → pug-CEFWkUzw.js} +0 -0
- /package/web/assets/{qsharp-xkZT0ZOm.js → qsharp-B0DUmgPZ.js} +0 -0
- /package/web/assets/{r-C7wfNC2Z.js → r-BVnF0c4T.js} +0 -0
- /package/web/assets/{redis-BoccK80D.js → redis-DLl3KQXi.js} +0 -0
- /package/web/assets/{redshift-EL8PjTts.js → redshift-cif1I7h1.js} +0 -0
- /package/web/assets/{restructuredtext-CA6rgR7C.js → restructuredtext-PNfql36m.js} +0 -0
- /package/web/assets/{ruby-BymrInur.js → ruby-j3jxDjUN.js} +0 -0
- /package/web/assets/{rust-BTbPL-fg.js → rust-BaIO-mAt.js} +0 -0
- /package/web/assets/{sb-BTkOICcb.js → sb-D8XNVNUQ.js} +0 -0
- /package/web/assets/{scala-CzaUHeQF.js → scala-DiK9Ps90.js} +0 -0
- /package/web/assets/{scheme-DZe2DRuY.js → scheme-DPKqXHmF.js} +0 -0
- /package/web/assets/{scss-D5oFt9cg.js → scss-DpMwfP2H.js} +0 -0
- /package/web/assets/{shell-DCkIF5jZ.js → shell-Dw9mKVg2.js} +0 -0
- /package/web/assets/{solidity-CfOO4gXi.js → solidity-DTxo-7fe.js} +0 -0
- /package/web/assets/{sophia-0-sROOHR.js → sophia-BjA3Q87y.js} +0 -0
- /package/web/assets/{sparql-Dzzr9hol.js → sparql-q1EpMUqb.js} +0 -0
- /package/web/assets/{sql-DbXHiHh_.js → sql-CjcQ4wIr.js} +0 -0
- /package/web/assets/{st-DEaYV8xH.js → st-AuOpxVl7.js} +0 -0
- /package/web/assets/{swift-BQItveav.js → swift-BUWnv6f7.js} +0 -0
- /package/web/assets/{systemverilog-nE6YfGlx.js → systemverilog-FhXn-3OZ.js} +0 -0
- /package/web/assets/{tcl-Do7Q0SM0.js → tcl-B0lqcTtS.js} +0 -0
- /package/web/assets/{twig-B2CLZN2j.js → twig-B0OeGPVa.js} +0 -0
- /package/web/assets/{typespec-r9R1AgVi.js → typespec-Bmh6VX11.js} +0 -0
- /package/web/assets/{uuid-CXjA27vZ.js → uuid-FpfcaBnR.js} +0 -0
- /package/web/assets/{vb-DGnD02qr.js → vb-bmgX6veu.js} +0 -0
- /package/web/assets/{wgsl-C2fD4koY.js → wgsl-FflLnFqI.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ../server/src/services/agent-manager.ts
|
|
2
2
|
import { EventEmitter as EventEmitter2 } from "events";
|
|
3
3
|
import WebSocket2 from "ws";
|
|
4
|
-
import { z as
|
|
4
|
+
import { z as z23 } from "zod";
|
|
5
5
|
|
|
6
6
|
// ../server/src/services/agent-store.ts
|
|
7
7
|
import { randomUUID, randomBytes, createCipheriv, createDecipheriv } from "crypto";
|
|
@@ -1758,6 +1758,49 @@ var KanbanCardRefSchema = z20.object({
|
|
|
1758
1758
|
commentCount: z20.number().int().nonnegative().default(0)
|
|
1759
1759
|
});
|
|
1760
1760
|
|
|
1761
|
+
// ../../packages/shared/src/schemas/cloud-api-key.schema.ts
|
|
1762
|
+
import { z as z21 } from "zod";
|
|
1763
|
+
var CloudApiScopeSchema = z21.enum(["kanban:read", "kanban:write", "kanban:comment"]);
|
|
1764
|
+
var CloudApiKeySecretSchema = z21.string().regex(/^rk_[0-9a-f]{64}$/);
|
|
1765
|
+
var CloudApiKeySchema = z21.object({
|
|
1766
|
+
id: z21.string().max(128),
|
|
1767
|
+
organizationId: z21.string().max(128),
|
|
1768
|
+
name: z21.string().min(1).max(200),
|
|
1769
|
+
scopes: z21.array(CloudApiScopeSchema).min(1).max(10),
|
|
1770
|
+
/**
|
|
1771
|
+
* Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
|
|
1772
|
+
* l'organisation ».
|
|
1773
|
+
*
|
|
1774
|
+
* `null` et `[]` ne sont pas la même chose : la liste vide n'ouvre rien, et
|
|
1775
|
+
* c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
|
|
1776
|
+
* nommait plus que lui.
|
|
1777
|
+
*/
|
|
1778
|
+
boards: z21.array(z21.string().max(64)).max(200).nullable(),
|
|
1779
|
+
createdAt: z21.string().max(64),
|
|
1780
|
+
/** Dernier usage constaté, pour reconnaître une clé oubliée. */
|
|
1781
|
+
lastUsedAt: z21.string().max(64).nullable(),
|
|
1782
|
+
/** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
|
|
1783
|
+
createdBy: z21.object({ id: z21.string().max(128), name: z21.string().max(200) }),
|
|
1784
|
+
/** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
|
|
1785
|
+
keyPreview: z21.string().max(8)
|
|
1786
|
+
});
|
|
1787
|
+
var CreatedCloudApiKeySchema = z21.object({
|
|
1788
|
+
key: CloudApiKeySchema,
|
|
1789
|
+
secret: CloudApiKeySecretSchema
|
|
1790
|
+
});
|
|
1791
|
+
var CreateCloudApiKeyInput = z21.object({
|
|
1792
|
+
organizationId: z21.string().min(1).max(128),
|
|
1793
|
+
name: z21.string().min(1).max(200),
|
|
1794
|
+
scopes: z21.array(CloudApiScopeSchema).min(1).max(10),
|
|
1795
|
+
boards: z21.array(z21.string().max(64)).max(200).nullable().default(null)
|
|
1796
|
+
});
|
|
1797
|
+
var UpdateCloudApiKeyInput = z21.object({
|
|
1798
|
+
id: z21.string().min(1).max(128),
|
|
1799
|
+
name: z21.string().min(1).max(200).optional(),
|
|
1800
|
+
scopes: z21.array(CloudApiScopeSchema).min(1).max(10).optional(),
|
|
1801
|
+
boards: z21.array(z21.string().max(64)).max(200).nullable().optional()
|
|
1802
|
+
});
|
|
1803
|
+
|
|
1761
1804
|
// ../../packages/shared/src/utils/crypto.ts
|
|
1762
1805
|
import { createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3, randomBytes as randomBytes3, pbkdf2Sync } from "crypto";
|
|
1763
1806
|
|
|
@@ -3092,11 +3135,351 @@ var ServiceStore = class {
|
|
|
3092
3135
|
var serviceStore = new ServiceStore();
|
|
3093
3136
|
|
|
3094
3137
|
// ../server/src/services/agent-spawner.ts
|
|
3095
|
-
import { spawn } from "child_process";
|
|
3138
|
+
import { spawn as spawn2 } from "child_process";
|
|
3096
3139
|
import { createInterface } from "readline";
|
|
3097
3140
|
import { watch } from "fs";
|
|
3098
|
-
import { dirname as dirname2, join as
|
|
3141
|
+
import { dirname as dirname2, join as join6 } from "path";
|
|
3099
3142
|
import { fileURLToPath } from "url";
|
|
3143
|
+
|
|
3144
|
+
// ../server/src/services/instance-registry.ts
|
|
3145
|
+
import { mkdir as mkdir5, readdir as readdir2, readFile as readFile5, writeFile as writeFile5, rm as rm3 } from "fs/promises";
|
|
3146
|
+
import { readFileSync } from "fs";
|
|
3147
|
+
import dotenv from "dotenv";
|
|
3148
|
+
import { spawn } from "child_process";
|
|
3149
|
+
import { join as join5 } from "path";
|
|
3150
|
+
import { z as z22 } from "zod";
|
|
3151
|
+
var InstanceFileSchema = z22.object({
|
|
3152
|
+
pid: z22.number().int().positive(),
|
|
3153
|
+
/**
|
|
3154
|
+
* The agent this server spawned, when it has one.
|
|
3155
|
+
*
|
|
3156
|
+
* Optional because an instance started before this field existed never wrote
|
|
3157
|
+
* it, and because the agent may not be up yet — or at all, when the
|
|
3158
|
+
* encryption key is missing. Absent means « unknown », never « none ».
|
|
3159
|
+
*/
|
|
3160
|
+
agentPid: z22.number().int().positive().optional(),
|
|
3161
|
+
port: z22.number().int().min(1).max(65535),
|
|
3162
|
+
agentPort: z22.number().int().min(1).max(65535),
|
|
3163
|
+
cwd: z22.string().max(4096),
|
|
3164
|
+
dataDir: z22.string().max(4096),
|
|
3165
|
+
version: z22.string().max(64),
|
|
3166
|
+
fromDesktop: z22.boolean(),
|
|
3167
|
+
startedAt: z22.number().int().nonnegative(),
|
|
3168
|
+
/**
|
|
3169
|
+
* De quoi relancer ce lancement à l'identique : l'exécutable, ses arguments,
|
|
3170
|
+
* et les `RUNEYA_*` de son environnement. Le `cwd` ci-dessus complète le
|
|
3171
|
+
* tableau.
|
|
3172
|
+
*
|
|
3173
|
+
* Optionnels, comme `agentPid` : une instance antérieure à ce champ ne les
|
|
3174
|
+
* écrit pas. Elle reste listée et arrêtable, simplement pas redémarrable —
|
|
3175
|
+
* un redémarrage approximatif serait pire qu'un bouton absent.
|
|
3176
|
+
*/
|
|
3177
|
+
execPath: z22.string().max(4096).optional(),
|
|
3178
|
+
argv: z22.array(z22.string().max(4096)).max(128).optional(),
|
|
3179
|
+
env: z22.record(z22.string().max(64), z22.string().max(4096)).optional(),
|
|
3180
|
+
/**
|
|
3181
|
+
* L'instance tient un secret (`RUNEYA_ENCRYPTION_KEY`,
|
|
3182
|
+
* `RUNEYA_MASTER_PASSWORD`) que le relancement ne retrouverait pas. Le
|
|
3183
|
+
* drapeau, jamais la valeur : le registre est un fichier lisible, et ces
|
|
3184
|
+
* deux-là n'ont délibérément pas de flag CLI parce qu'`argv` se lit dans
|
|
3185
|
+
* `ps`.
|
|
3186
|
+
*
|
|
3187
|
+
* Un secret posé dans le `.env` de la pile ne compte pas : `dotenv` le relit
|
|
3188
|
+
* au démarrage depuis le même répertoire. Voir `secretsAreReproducible()`.
|
|
3189
|
+
*/
|
|
3190
|
+
needsSecretEnv: z22.boolean().optional()
|
|
3191
|
+
});
|
|
3192
|
+
function registryDir() {
|
|
3193
|
+
return join5(machineRoot(), "instances");
|
|
3194
|
+
}
|
|
3195
|
+
function fileFor(pid) {
|
|
3196
|
+
return join5(registryDir(), `${pid}.json`);
|
|
3197
|
+
}
|
|
3198
|
+
var published = null;
|
|
3199
|
+
var SECRET_ENV_KEYS = ["RUNEYA_ENCRYPTION_KEY", "RUNEYA_MASTER_PASSWORD"];
|
|
3200
|
+
function isSecretEnvKey(key) {
|
|
3201
|
+
return SECRET_ENV_KEYS.includes(key);
|
|
3202
|
+
}
|
|
3203
|
+
function runeyaEnv() {
|
|
3204
|
+
const out = {};
|
|
3205
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
3206
|
+
if (!key.startsWith("RUNEYA_") || isSecretEnvKey(key)) continue;
|
|
3207
|
+
if (typeof value === "string" && value.length <= 4096) out[key] = value;
|
|
3208
|
+
}
|
|
3209
|
+
return out;
|
|
3210
|
+
}
|
|
3211
|
+
function secretsAreReproducible() {
|
|
3212
|
+
const present = SECRET_ENV_KEYS.filter((key) => Boolean(process.env[key]));
|
|
3213
|
+
if (present.length === 0) return true;
|
|
3214
|
+
let fromFile;
|
|
3215
|
+
try {
|
|
3216
|
+
fromFile = dotenv.parse(readFileSync(join5(process.cwd(), ".env")));
|
|
3217
|
+
} catch {
|
|
3218
|
+
return false;
|
|
3219
|
+
}
|
|
3220
|
+
return present.every((key) => fromFile[key] === process.env[key]);
|
|
3221
|
+
}
|
|
3222
|
+
function selfRecord() {
|
|
3223
|
+
return {
|
|
3224
|
+
pid: process.pid,
|
|
3225
|
+
port: env.PORT,
|
|
3226
|
+
agentPort: env.RUNEYA_AGENT_PORT,
|
|
3227
|
+
cwd: process.cwd(),
|
|
3228
|
+
dataDir: env.DATA_DIR,
|
|
3229
|
+
version: process.env["RUNEYA_VERSION"] ?? "unknown",
|
|
3230
|
+
fromDesktop: env.FROM_DESKTOP,
|
|
3231
|
+
startedAt: Date.now(),
|
|
3232
|
+
execPath: process.execPath,
|
|
3233
|
+
// argv[0] est l'exécutable, déjà repris par `execPath` ; le reste est le
|
|
3234
|
+
// script suivi de ses arguments, c'est-à-dire ce qu'il faut repasser à spawn.
|
|
3235
|
+
argv: process.argv.slice(1),
|
|
3236
|
+
env: runeyaEnv(),
|
|
3237
|
+
needsSecretEnv: !secretsAreReproducible()
|
|
3238
|
+
};
|
|
3239
|
+
}
|
|
3240
|
+
async function registerInstance() {
|
|
3241
|
+
try {
|
|
3242
|
+
await mkdir5(registryDir(), { recursive: true });
|
|
3243
|
+
published = selfRecord();
|
|
3244
|
+
await writeFile5(fileFor(process.pid), JSON.stringify(published, null, 2));
|
|
3245
|
+
} catch (err) {
|
|
3246
|
+
console.log("[instances] Could not register this instance:", err.message);
|
|
3247
|
+
}
|
|
3248
|
+
}
|
|
3249
|
+
async function unregisterInstance() {
|
|
3250
|
+
await rm3(fileFor(process.pid), { force: true }).catch(() => {
|
|
3251
|
+
});
|
|
3252
|
+
}
|
|
3253
|
+
async function setInstanceAgentPid(agentPid) {
|
|
3254
|
+
if (!published) return;
|
|
3255
|
+
published = { ...published, agentPid: agentPid ?? void 0 };
|
|
3256
|
+
try {
|
|
3257
|
+
await writeFile5(fileFor(process.pid), JSON.stringify(published, null, 2));
|
|
3258
|
+
} catch {
|
|
3259
|
+
}
|
|
3260
|
+
}
|
|
3261
|
+
function isProcessAlive(pid) {
|
|
3262
|
+
try {
|
|
3263
|
+
process.kill(pid, 0);
|
|
3264
|
+
return true;
|
|
3265
|
+
} catch (err) {
|
|
3266
|
+
return err.code === "EPERM";
|
|
3267
|
+
}
|
|
3268
|
+
}
|
|
3269
|
+
async function probe(port) {
|
|
3270
|
+
try {
|
|
3271
|
+
const res = await fetch(`http://127.0.0.1:${port}/api/trpc/health.check`, {
|
|
3272
|
+
signal: AbortSignal.timeout(1500)
|
|
3273
|
+
});
|
|
3274
|
+
if (!res.ok) return { ok: false, uptimeMs: null, version: null };
|
|
3275
|
+
const body = await res.json();
|
|
3276
|
+
const data = body.result?.data;
|
|
3277
|
+
return { ok: true, uptimeMs: data?.uptime ?? null, version: data?.version ?? null };
|
|
3278
|
+
} catch {
|
|
3279
|
+
return { ok: false, uptimeMs: null, version: null };
|
|
3280
|
+
}
|
|
3281
|
+
}
|
|
3282
|
+
async function listInstances() {
|
|
3283
|
+
let files;
|
|
3284
|
+
try {
|
|
3285
|
+
files = await readdir2(registryDir());
|
|
3286
|
+
} catch {
|
|
3287
|
+
return [];
|
|
3288
|
+
}
|
|
3289
|
+
const found = await Promise.all(
|
|
3290
|
+
files.filter((f) => f.endsWith(".json")).map(async (name) => {
|
|
3291
|
+
const path = join5(registryDir(), name);
|
|
3292
|
+
let record;
|
|
3293
|
+
try {
|
|
3294
|
+
const parsed = InstanceFileSchema.safeParse(JSON.parse(await readFile5(path, "utf8")));
|
|
3295
|
+
if (!parsed.success) {
|
|
3296
|
+
await rm3(path, { force: true }).catch(() => {
|
|
3297
|
+
});
|
|
3298
|
+
return null;
|
|
3299
|
+
}
|
|
3300
|
+
record = parsed.data;
|
|
3301
|
+
} catch {
|
|
3302
|
+
return null;
|
|
3303
|
+
}
|
|
3304
|
+
if (!isProcessAlive(record.pid)) {
|
|
3305
|
+
await rm3(path, { force: true }).catch(() => {
|
|
3306
|
+
});
|
|
3307
|
+
return null;
|
|
3308
|
+
}
|
|
3309
|
+
const { ok, uptimeMs, version } = await probe(record.port);
|
|
3310
|
+
if (!ok) {
|
|
3311
|
+
await rm3(path, { force: true }).catch(() => {
|
|
3312
|
+
});
|
|
3313
|
+
return null;
|
|
3314
|
+
}
|
|
3315
|
+
const current = record.pid === process.pid;
|
|
3316
|
+
const blocker = restartBlockerFor(record);
|
|
3317
|
+
return {
|
|
3318
|
+
...record,
|
|
3319
|
+
// Trust the live answer over the file: the file was written at boot
|
|
3320
|
+
// and an upgraded instance would keep claiming its old version.
|
|
3321
|
+
version: version ?? record.version,
|
|
3322
|
+
reachable: true,
|
|
3323
|
+
current,
|
|
3324
|
+
uptimeMs,
|
|
3325
|
+
restartable: blocker === null,
|
|
3326
|
+
restartBlockedBy: blocker
|
|
3327
|
+
};
|
|
3328
|
+
})
|
|
3329
|
+
);
|
|
3330
|
+
return dedupeByPort(found.filter((i) => i !== null)).sort((a, b) => Number(b.current) - Number(a.current) || a.port - b.port);
|
|
3331
|
+
}
|
|
3332
|
+
function dedupeByPort(instances) {
|
|
3333
|
+
const byPort = /* @__PURE__ */ new Map();
|
|
3334
|
+
for (const instance of instances) {
|
|
3335
|
+
const kept = byPort.get(instance.port);
|
|
3336
|
+
if (!kept || instance.current || !kept.current && instance.startedAt > kept.startedAt) {
|
|
3337
|
+
byPort.set(instance.port, instance);
|
|
3338
|
+
}
|
|
3339
|
+
}
|
|
3340
|
+
return [...byPort.values()];
|
|
3341
|
+
}
|
|
3342
|
+
function restartBlockerFor(record) {
|
|
3343
|
+
if (record.needsSecretEnv) return "secrets";
|
|
3344
|
+
if (!record.execPath || !record.argv) return "legacy";
|
|
3345
|
+
return null;
|
|
3346
|
+
}
|
|
3347
|
+
var GRACE_MS = 5e3;
|
|
3348
|
+
var POLL_MS = 100;
|
|
3349
|
+
async function terminate(pid) {
|
|
3350
|
+
if (!isProcessAlive(pid)) return "absent";
|
|
3351
|
+
try {
|
|
3352
|
+
process.kill(pid, "SIGTERM");
|
|
3353
|
+
} catch (err) {
|
|
3354
|
+
const code = err.code;
|
|
3355
|
+
if (code === "ESRCH") return "absent";
|
|
3356
|
+
if (code === "EPERM") return "denied";
|
|
3357
|
+
return "failed";
|
|
3358
|
+
}
|
|
3359
|
+
const deadline = Date.now() + GRACE_MS;
|
|
3360
|
+
while (Date.now() < deadline) {
|
|
3361
|
+
await new Promise((resolve) => setTimeout(resolve, POLL_MS));
|
|
3362
|
+
if (!isProcessAlive(pid)) return "terminated";
|
|
3363
|
+
}
|
|
3364
|
+
try {
|
|
3365
|
+
process.kill(pid, "SIGKILL");
|
|
3366
|
+
} catch (err) {
|
|
3367
|
+
return err.code === "ESRCH" ? "terminated" : "failed";
|
|
3368
|
+
}
|
|
3369
|
+
await new Promise((resolve) => setTimeout(resolve, POLL_MS));
|
|
3370
|
+
return isProcessAlive(pid) ? "failed" : "killed";
|
|
3371
|
+
}
|
|
3372
|
+
async function killInstance(pid) {
|
|
3373
|
+
const target = (await listInstances()).find((i) => i.pid === pid);
|
|
3374
|
+
if (!target) throw new Error("instance-not-found");
|
|
3375
|
+
if (target.current) throw new Error("instance-is-current");
|
|
3376
|
+
const agent = target.agentPid ? await terminate(target.agentPid) : "absent";
|
|
3377
|
+
const server = await terminate(pid);
|
|
3378
|
+
if (server === "terminated" || server === "killed") {
|
|
3379
|
+
await rm3(fileFor(pid), { force: true }).catch(() => {
|
|
3380
|
+
});
|
|
3381
|
+
}
|
|
3382
|
+
return { agent, server };
|
|
3383
|
+
}
|
|
3384
|
+
function launchOf(record) {
|
|
3385
|
+
if (!record.execPath || !record.argv) throw new Error("instance-not-restartable:legacy");
|
|
3386
|
+
const env2 = {};
|
|
3387
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
3388
|
+
if (typeof value === "string" && !key.startsWith("RUNEYA_")) env2[key] = value;
|
|
3389
|
+
}
|
|
3390
|
+
return {
|
|
3391
|
+
execPath: record.execPath,
|
|
3392
|
+
argv: record.argv,
|
|
3393
|
+
cwd: record.cwd,
|
|
3394
|
+
env: { ...env2, ...record.env ?? {} }
|
|
3395
|
+
};
|
|
3396
|
+
}
|
|
3397
|
+
var PORT_RELEASE_TIMEOUT_MS = 15e3;
|
|
3398
|
+
async function waitForPortRelease(port) {
|
|
3399
|
+
const deadline = Date.now() + PORT_RELEASE_TIMEOUT_MS;
|
|
3400
|
+
while (Date.now() < deadline) {
|
|
3401
|
+
const { ok } = await probe(port);
|
|
3402
|
+
if (!ok) return true;
|
|
3403
|
+
await new Promise((resolve) => setTimeout(resolve, POLL_MS));
|
|
3404
|
+
}
|
|
3405
|
+
return false;
|
|
3406
|
+
}
|
|
3407
|
+
async function restartInstance(pid) {
|
|
3408
|
+
const target = (await listInstances()).find((i) => i.pid === pid);
|
|
3409
|
+
if (!target) throw new Error("instance-not-found");
|
|
3410
|
+
if (target.restartBlockedBy) throw new Error(`instance-not-restartable:${target.restartBlockedBy}`);
|
|
3411
|
+
if (target.current) throw new Error("instance-is-current");
|
|
3412
|
+
const stop = await killInstance(pid);
|
|
3413
|
+
if (stop.server !== "terminated" && stop.server !== "killed") {
|
|
3414
|
+
throw new Error(`instance-stop-${stop.server}`);
|
|
3415
|
+
}
|
|
3416
|
+
const portReleased = await waitForPortRelease(target.port);
|
|
3417
|
+
const launch = launchOf(target);
|
|
3418
|
+
const child = spawn(launch.execPath, launch.argv, {
|
|
3419
|
+
cwd: launch.cwd,
|
|
3420
|
+
env: launch.env,
|
|
3421
|
+
detached: true,
|
|
3422
|
+
stdio: "ignore"
|
|
3423
|
+
});
|
|
3424
|
+
child.on("error", (err) => {
|
|
3425
|
+
console.log(`[instances] Relance du pid ${pid} impossible :`, err.message);
|
|
3426
|
+
});
|
|
3427
|
+
child.unref();
|
|
3428
|
+
if (typeof child.pid !== "number") throw new Error("instance-restart-failed");
|
|
3429
|
+
return { stop, pid: child.pid, portReleased };
|
|
3430
|
+
}
|
|
3431
|
+
var RELAUNCHER = `
|
|
3432
|
+
const p = JSON.parse(process.env.RUNEYA_RELAUNCH_PAYLOAD);
|
|
3433
|
+
const deadline = Date.now() + p.timeoutMs;
|
|
3434
|
+
const held = async () => {
|
|
3435
|
+
try {
|
|
3436
|
+
const res = await fetch('http://127.0.0.1:' + p.port + '/api/trpc/health.check', {
|
|
3437
|
+
signal: AbortSignal.timeout(500),
|
|
3438
|
+
});
|
|
3439
|
+
return res.ok;
|
|
3440
|
+
} catch { return false; }
|
|
3441
|
+
};
|
|
3442
|
+
(async () => {
|
|
3443
|
+
while (Date.now() < deadline && await held()) {
|
|
3444
|
+
await new Promise((r) => setTimeout(r, ${POLL_MS}));
|
|
3445
|
+
}
|
|
3446
|
+
require('node:child_process')
|
|
3447
|
+
.spawn(p.execPath, p.argv, { cwd: p.cwd, env: p.env, detached: true, stdio: 'ignore' })
|
|
3448
|
+
.unref();
|
|
3449
|
+
})();
|
|
3450
|
+
`;
|
|
3451
|
+
var SELF_RESTART_DELAY_MS = 250;
|
|
3452
|
+
function spawnRelauncher(record) {
|
|
3453
|
+
const blocker = restartBlockerFor(record);
|
|
3454
|
+
if (blocker) throw new Error(`instance-not-restartable:${blocker}`);
|
|
3455
|
+
const launch = launchOf(record);
|
|
3456
|
+
const relauncher = spawn(process.execPath, ["-e", RELAUNCHER], {
|
|
3457
|
+
cwd: launch.cwd,
|
|
3458
|
+
env: {
|
|
3459
|
+
...launch.env,
|
|
3460
|
+
RUNEYA_RELAUNCH_PAYLOAD: JSON.stringify({ ...launch, port: record.port, timeoutMs: PORT_RELEASE_TIMEOUT_MS })
|
|
3461
|
+
},
|
|
3462
|
+
detached: true,
|
|
3463
|
+
stdio: "ignore"
|
|
3464
|
+
});
|
|
3465
|
+
relauncher.on("error", (err) => {
|
|
3466
|
+
console.log("[instances] Relanceur impossible \xE0 lancer :", err.message);
|
|
3467
|
+
});
|
|
3468
|
+
relauncher.unref();
|
|
3469
|
+
if (typeof relauncher.pid !== "number") throw new Error("instance-restart-failed");
|
|
3470
|
+
return relauncher.pid;
|
|
3471
|
+
}
|
|
3472
|
+
async function scheduleSelfRestart() {
|
|
3473
|
+
const record = published ?? selfRecord();
|
|
3474
|
+
const relauncherPid = spawnRelauncher(record);
|
|
3475
|
+
setTimeout(() => {
|
|
3476
|
+
console.log("[instances] Red\xE9marrage demand\xE9 : arr\xEAt de cette instance.");
|
|
3477
|
+
process.kill(process.pid, "SIGTERM");
|
|
3478
|
+
}, SELF_RESTART_DELAY_MS);
|
|
3479
|
+
return { relauncherPid, port: record.port };
|
|
3480
|
+
}
|
|
3481
|
+
|
|
3482
|
+
// ../server/src/services/agent-spawner.ts
|
|
3100
3483
|
var POSIX_SAFE_KEYS = [
|
|
3101
3484
|
"PATH",
|
|
3102
3485
|
"HOME",
|
|
@@ -3212,11 +3595,12 @@ var AgentSpawner = class {
|
|
|
3212
3595
|
}
|
|
3213
3596
|
console.log(`[agent-spawner] Spawning local agent on ${agentUrl}...`);
|
|
3214
3597
|
const isDev = process.env.NODE_ENV === "development";
|
|
3215
|
-
this.agentDistPath = env.AGENT_BINARY_PATH ||
|
|
3216
|
-
this.agentProcess =
|
|
3598
|
+
this.agentDistPath = env.AGENT_BINARY_PATH || join6(dirname2(fileURLToPath(import.meta.url)), "..", "..", "agent", "dist", "index.js");
|
|
3599
|
+
this.agentProcess = spawn2("node", [this.agentDistPath], {
|
|
3217
3600
|
env: agentEnv,
|
|
3218
3601
|
stdio: ["ignore", "pipe", "pipe"]
|
|
3219
3602
|
});
|
|
3603
|
+
void setInstanceAgentPid(this.agentProcess.pid ?? null);
|
|
3220
3604
|
if (isDev) {
|
|
3221
3605
|
this.setupFileWatcher();
|
|
3222
3606
|
}
|
|
@@ -3299,6 +3683,7 @@ var AgentSpawner = class {
|
|
|
3299
3683
|
setTimeout(resolve, 2e3);
|
|
3300
3684
|
});
|
|
3301
3685
|
this.agentProcess = null;
|
|
3686
|
+
void setInstanceAgentPid(null);
|
|
3302
3687
|
}
|
|
3303
3688
|
}
|
|
3304
3689
|
getLocalAgentId() {
|
|
@@ -3315,7 +3700,7 @@ var AgentSpawner = class {
|
|
|
3315
3700
|
this.fileWatcher.close();
|
|
3316
3701
|
}
|
|
3317
3702
|
console.log("[agent-spawner] \u{1F50D} Watching agent dist for changes (hot reload enabled)");
|
|
3318
|
-
const distDir =
|
|
3703
|
+
const distDir = join6(this.agentDistPath, "..");
|
|
3319
3704
|
this.fileWatcher = watch(distDir, { persistent: false }, (eventType, filename) => {
|
|
3320
3705
|
if ((eventType === "change" || eventType === "rename") && filename === "index.js" && !this.isRestarting) {
|
|
3321
3706
|
this.isRestarting = true;
|
|
@@ -3348,7 +3733,7 @@ var AgentSpawner = class {
|
|
|
3348
3733
|
}
|
|
3349
3734
|
const agentUrl = `http://${env.RUNEYA_AGENT_HOST}:${env.RUNEYA_AGENT_PORT}`;
|
|
3350
3735
|
const isDev = process.env.NODE_ENV === "development";
|
|
3351
|
-
this.agentProcess =
|
|
3736
|
+
this.agentProcess = spawn2("node", [this.agentDistPath], {
|
|
3352
3737
|
env: agentEnv,
|
|
3353
3738
|
stdio: ["ignore", "pipe", "pipe"]
|
|
3354
3739
|
});
|
|
@@ -3624,13 +4009,13 @@ var AgentWSBridge = class extends EventEmitter {
|
|
|
3624
4009
|
};
|
|
3625
4010
|
|
|
3626
4011
|
// ../server/src/services/agent-manager.ts
|
|
3627
|
-
var HealthMessageSchema =
|
|
3628
|
-
status:
|
|
3629
|
-
uptime:
|
|
3630
|
-
runnersAvailable:
|
|
3631
|
-
processCount:
|
|
3632
|
-
runningCount:
|
|
3633
|
-
lanIp:
|
|
4012
|
+
var HealthMessageSchema = z23.object({
|
|
4013
|
+
status: z23.string(),
|
|
4014
|
+
uptime: z23.number(),
|
|
4015
|
+
runnersAvailable: z23.array(z23.enum(["native", "docker"])),
|
|
4016
|
+
processCount: z23.number(),
|
|
4017
|
+
runningCount: z23.number(),
|
|
4018
|
+
lanIp: z23.string().optional()
|
|
3634
4019
|
});
|
|
3635
4020
|
var MIN_RECONNECT_DELAY = WS_RECONNECT_MIN;
|
|
3636
4021
|
var MAX_RECONNECT_DELAY = WS_RECONNECT_MAX;
|
|
@@ -4016,9 +4401,9 @@ var AgentManager = class extends EventEmitter2 {
|
|
|
4016
4401
|
if (spawns.length > 0) {
|
|
4017
4402
|
const summary = spawns.map((s) => `${s.spawnId} (${s.cli}, ${s.status}, buf:${s.bufferLength})`).join(", ");
|
|
4018
4403
|
console.log("[agent-manager] Agent %s has %d AI spawn(s): %s", agentId, spawns.length, summary);
|
|
4019
|
-
for (const
|
|
4020
|
-
if (
|
|
4021
|
-
this.agentMutation(agentId, "ai.ack", { spawnId:
|
|
4404
|
+
for (const spawn3 of spawns) {
|
|
4405
|
+
if (spawn3.status !== "running") {
|
|
4406
|
+
this.agentMutation(agentId, "ai.ack", { spawnId: spawn3.spawnId }).catch(() => {
|
|
4022
4407
|
});
|
|
4023
4408
|
}
|
|
4024
4409
|
}
|
|
@@ -4184,8 +4569,14 @@ export {
|
|
|
4184
4569
|
environmentStore,
|
|
4185
4570
|
serviceStore,
|
|
4186
4571
|
agentStore,
|
|
4572
|
+
registerInstance,
|
|
4573
|
+
unregisterInstance,
|
|
4574
|
+
listInstances,
|
|
4575
|
+
killInstance,
|
|
4576
|
+
restartInstance,
|
|
4577
|
+
scheduleSelfRestart,
|
|
4187
4578
|
agentSpawner,
|
|
4188
4579
|
traefikManager,
|
|
4189
4580
|
agentManager
|
|
4190
4581
|
};
|
|
4191
|
-
//# sourceMappingURL=chunk-
|
|
4582
|
+
//# sourceMappingURL=chunk-HPYBAUAH.js.map
|