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