@runeya/runeya 2.0.122 → 2.0.124
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-manager-BSPEFZKZ.js → agent-manager-FZFFWISA.js} +3 -3
- package/{chat-SE5GIT4B.js → chat-JIJQ7IJS.js} +6 -6
- package/{chunk-XTLQOYLT.js → chunk-4PN7QBNM.js} +58 -6
- package/chunk-4PN7QBNM.js.map +1 -0
- package/{chunk-BVBK2WII.js → chunk-GKK3ACWB.js} +16 -11
- package/chunk-GKK3ACWB.js.map +1 -0
- package/{chunk-VNLIA5PV.js → chunk-H22YLVQE.js} +11 -6
- package/chunk-H22YLVQE.js.map +1 -0
- package/{chunk-GL7WA5K3.js → chunk-HK5QNU6P.js} +28 -3
- package/chunk-HK5QNU6P.js.map +1 -0
- package/{chunk-NIU3CN5A.js → chunk-N3ZI35SC.js} +2 -2
- package/{companion-HEJHC3UR.js → companion-OZODV5BR.js} +4 -4
- package/index.js +3 -3
- package/package.json +1 -1
- package/{settings-manager-4GAINSJO.js → settings-manager-MAVD4GAS.js} +3 -3
- package/{src-YUVA6WCM.js → src-SGSG2RSF.js} +98 -18
- package/src-SGSG2RSF.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-DrcrJYKe.js → AgentScalarChatInterface.vue-Bv7WQetq.js} +1 -1
- package/web/assets/{AgentTerminalPage-BonnuSSS.js → AgentTerminalPage-CMA5oI2T.js} +1 -1
- package/web/assets/AiChatPage-C0Ho1rG3.js +1 -0
- package/web/assets/{AppLayout-DRTTSl7g.js → AppLayout-DBKRAp0R.js} +1 -1
- package/web/assets/{AuditPage-CBWGaY0D.js → AuditPage-fZVhSJlE.js} +1 -1
- package/web/assets/CloudAccountPage-2LiTQCKr.js +1 -0
- package/web/assets/{CloudAccountPage-DvbOBtHJ.js → CloudAccountPage-CunPTy1b.js} +1 -1
- package/web/assets/{CloudMessagingPage-BB-_RdEk.js → CloudMessagingPage-DWciFn32.js} +1 -1
- package/web/assets/{DashboardPage-MdYRjTwv.js → DashboardPage-3psdQljM.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-DROtNZ9T.js → DirectoryPickerDialog-DiiAUQKg.js} +1 -1
- package/web/assets/{EditorIcon-LCl9V_-a.js → EditorIcon-BZyy2C12.js} +1 -1
- package/web/assets/{EnvironmentForm-BUadxutb.js → EnvironmentForm-MRC8U5op.js} +1 -1
- package/web/assets/{EnvironmentFormPage-Do3NwXL5.js → EnvironmentFormPage-gd8fGS8P.js} +1 -1
- package/web/assets/{EnvironmentListPage-DiG8nF1p.js → EnvironmentListPage-DgbclvZs.js} +1 -1
- package/web/assets/{KanbanBoardPage-_QCZ2A2f.js → KanbanBoardPage-BBT0gqjT.js} +3 -3
- package/web/assets/{KanbanListPage-nyfKMn50.js → KanbanListPage-CidIQgAq.js} +1 -1
- package/web/assets/{LaunchProjectPage-VHAUZ-cq.js → LaunchProjectPage-DBtkrI-A.js} +1 -1
- package/web/assets/{LaunchServicesPage-CRv2zJxH.js → LaunchServicesPage-DdmfVxYL.js} +1 -1
- package/web/assets/{LogViewer-DcoQF_33.js → LogViewer-CvDPgFjq.js} +1 -1
- package/web/assets/{OrgKeyPrompt-X9hHtpi9.js → OrgKeyPrompt-D3RmJEtb.js} +1 -1
- package/web/assets/{ProcessControls-PKQWukd7.js → ProcessControls-neMxqIY_.js} +1 -1
- package/web/assets/{ProcessDetailPage-DhFoi4DT.js → ProcessDetailPage-Dj0L8Jz0.js} +1 -1
- package/web/assets/{ProcessMetrics-CMewzyxA.js → ProcessMetrics-Bb7yNIVd.js} +1 -1
- package/web/assets/{RandomJobTestPage-CErdKP1K.js → RandomJobTestPage-ohHAOaio.js} +1 -1
- package/web/assets/{ScenarioEditorPage-CpRlfU3g.js → ScenarioEditorPage-BIcmG3wo.js} +1 -1
- package/web/assets/{SendToChatDialog-DIp62wvw.js → SendToChatDialog-oi4KFAVq.js} +1 -1
- package/web/assets/{ServiceControlsBar-Bk4M-tKR.js → ServiceControlsBar-GgoPszoH.js} +1 -1
- package/web/assets/{ServiceDetailPage-BxAZTqFu.js → ServiceDetailPage-CIDlO0iu.js} +1 -1
- package/web/assets/ServiceFormPage-Q_M2GgKE.css +1 -0
- package/web/assets/ServiceFormPage-p3AUhHLN.js +1 -0
- package/web/assets/{SettingsPage-Dx1eYZKP.js → SettingsPage-B_heumvd.js} +4 -4
- package/web/assets/{UnlockPage-CgynzFN3.js → UnlockPage-nz_1VQWy.js} +1 -1
- package/web/assets/{VaultMigrationPage-Cw--n60U.js → VaultMigrationPage-B_nZC8Cc.js} +1 -1
- package/web/assets/{VersionBadge-Ct-qYNDF.js → VersionBadge-DJJK7bgD.js} +1 -1
- package/web/assets/WikiPage-DiCUjWEu.js +1 -0
- package/web/assets/{WikiView-Izg2SvGt.js → WikiView-vYMnLt41.js} +1 -1
- package/web/assets/{add-scalar-classes-BP_OZa5m.js → add-scalar-classes-_7NDhIUO.js} +3 -3
- package/web/assets/{autocomplete-DMfvn4sK.js → autocomplete-BTMTTAk9.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-B5H1r2bp.js → basic-shape-diamond.svg-CZQG7mdB.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-CYAjKF0z.js → basic-shape-hexagon.svg-BnLoXUmj.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CgleCAf-.js → basic-shape-primary-circle-ellipse-round.svg-DDU6pRYe.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-1Oa48Hhs.js → basic-shape-primary-square-rectangle.svg-Dq_Zdck2.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-F6dZwVUJ.js → basic-shape-shield.svg-DbFCxPmO.js} +1 -1
- package/web/assets/{browser-D3KJ0m2n.js → browser-CTYk99RA.js} +1 -1
- package/web/assets/{browser-CmPAWcJ7.js → browser-DowFjZcI.js} +1 -1
- package/web/assets/{card-Ciw7uU90.js → card-R4Q2Qr9t.js} +1 -1
- package/web/assets/{checkbox-BCCx0Nu6.js → checkbox-CfoV-T17.js} +1 -1
- package/web/assets/{chip-JRh6DXig.js → chip-V3vhLdcF.js} +1 -1
- package/web/assets/{client-BIlYBe0s.js → client-DHQNUKOx.js} +1 -1
- package/web/assets/{cloud-chat.store-BUYi4kYT.js → cloud-chat.store-CaSRn8Mg.js} +1 -1
- package/web/assets/cloud-client-CzGojtBl.js +1 -0
- package/web/assets/{cloud-session-CZWto5y3.js → cloud-session-D71P4F3g.js} +2 -2
- package/web/assets/cloud-session-DlLnrwVQ.js +1 -0
- package/web/assets/{column-DSBHw97f.js → column-CjJa3tsz.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-D7wu2cQ4.js → computer-device-desktop-monitor.svg-CRLfD7-U.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-BtVwjOEG.js → computer-device-desktop.svg-CGKq4iih.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-f3tFeUHj.js → computer-device-laptop.svg-bmeM_RDO.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CmJcGkrL.js → computer-device-mobile-phone-android-samsung-back.svg-CFwMSjoP.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-C2ke6Sbg.js → computer-device-mobile-phone-android-samsung.svg-iIOhGZVY.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-DxMqUXKE.js → computer-device-mobile-phone-iphone-x-back.svg-CLqnsMnT.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-DkbKlrh8.js → computer-device-mobile-phone-iphone-x.svg-XECS9ZDX.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-DP0uXMda.js → computer-device-mobile-tablet-touch.svg-CUR9IhGB.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-C064ZFQm.js → computer-device-mobile-tablet.svg-BJGisjBt.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-Dwzl7zBN.js → computer-device-network-ethernet-cat6.svg-DzgiswAZ.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-BgErom5w.js → computer-device-network-lan-www.svg-Dr1frFpv.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-ByqNsV6y.js → computer-device-network-wifi-connection.svg-DSj6qxT1.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-AySGITbi.js → computer-device-network-wifi-router.svg-8lGzw_-s.js} +1 -1
- package/web/assets/{cssMode-BqrZ4SB-.js → cssMode-sBjZEJAf.js} +1 -1
- package/web/assets/{divider-BswZTb8q.js → divider-p4BForJk.js} +1 -1
- package/web/assets/{docx-preview-t_oOha_C.js → docx-preview-D-bfEEBT.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-Keg4ZY0z.js → ecology-science-erlenmeyer-flask.svg-DhxVJRJ1.js} +1 -1
- package/web/assets/{fieldset-DaWy9FsL.js → fieldset-CCZ1tJUm.js} +1 -1
- package/web/assets/{freemarker2-Br0kiufp.js → freemarker2-C8iPD1fo.js} +1 -1
- package/web/assets/{handlebars-BrATzKUL.js → handlebars-BbBZAhwL.js} +1 -1
- package/web/assets/{html-LWTJcTM2.js → html-BQ_SV3Jd.js} +1 -1
- package/web/assets/{htmlMode-A23pWfMP.js → htmlMode-DReHoZFB.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-uQfoT6Ex.js → image-flash-lightning.svg-DbKHX2c2.js} +1 -1
- package/web/assets/{image-picture-flower.svg-XxD1bCHC.js → image-picture-flower.svg-CEpqP8le.js} +1 -1
- package/web/assets/{index-e5dmzMc-.js → index-PMr5ScNs.js} +4 -4
- package/web/assets/{interface-alert-exclamation-diamond.svg-gQAlkILu.js → interface-alert-exclamation-diamond.svg-CoNNtahD.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Ga2rsl6o.js → interface-alert-exclamation-triangle-warning.svg-BHa7AW0u.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BS0N2R1M.js → interface-alert-information-circle.svg-CpRzO-l8.js} +1 -1
- package/web/assets/{interface-award-crown.svg-CtLbK4Gl.js → interface-award-crown.svg-BFOXAZFu.js} +1 -1
- package/web/assets/{interface-bookmark.svg-Clt6TTov.js → interface-bookmark-tag.svg-DpZGlSV4.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-Dfd6eXAX.js → interface-bookmark.svg-DulnuoPg.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BmFNLrzR.js → interface-calendar-date-one.svg-CWQHbXWQ.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-u8kJbc3N.js → interface-content-book-open-pages.svg-BH97UDUJ.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-Csk8d0R8.js → interface-content-book-page.svg-DmnJkpeN.js} +1 -1
- package/web/assets/{interface-content-file.svg-DIoD1UhJ.js → interface-content-file.svg-DkouOQzj.js} +1 -1
- package/web/assets/interface-content-folder.svg-BLBb2W1v.js +1 -0
- package/web/assets/{interface-content-folder.svg-ipO7hYM2.js → interface-content-folder.svg-DK2esxIw.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-BaK2fHKS.js → interface-copy-clipboard.svg-DuwyZprv.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-CrpyP6c6.js → interface-edit-attachment.svg-C4lXPh7a.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-Cw-YeqUQ.js → interface-edit-binocular.svg-CuA4f4ED.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-BPa49t_4.js → interface-edit-magic-wand.svg-D-Cc4zpI.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-Cfag7vxY.js → interface-edit-tool-paint-roller.svg-MtAeMQ6k.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BNAmX0d_.js → interface-edit-tool-pencil.svg-ZAP8C3Sw.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-CIMvocAv.js → interface-favorite-award.svg-DRZh5var.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-8C3GXK06.js → interface-favorite-flag.svg-Dy0qBZak.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CEU_IALn.js → interface-favorite-heart.svg-Cjxi5AEp.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-Bs0RUtgk.js → interface-favorite-star.svg-B1OPbNTd.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-CZYZ5qkH.js → interface-favorite-stars-sparkles.svg-CvnZTUkf.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-DOgEXHV2.js → interface-hierarchy-flowchart.svg-GGCH0pvQ.js} +1 -1
- package/web/assets/{interface-home-house.svg-lDERGk8q.js → interface-home-house.svg-DB_dC7eo.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-CAZrs64U.js → interface-hyperlink.svg-LlMqAHmb.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-CVANBB7i.js → interface-lighting-brightness.svg-DutEgNfQ.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-qDLyceL-.js → interface-lock-closed.svg-DteyBWrL.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Bc-cq6eU.js → interface-lock-open-unlock.svg-D2g-W1Mn.js} +1 -1
- package/web/assets/{interface-login-key.svg-D6wZBYEi.js → interface-login-key.svg-Dk1JjhYH.js} +1 -1
- package/web/assets/{interface-search.svg-BVM6kkvA.js → interface-search.svg-CDHAdhLc.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-uJYqlmKx.js → interface-setting-cog.svg-BXKxgm-B.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-CgBVBu7Z.js → interface-share-megaphone-bullhorn.svg-Fq3c3_sE.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-C1iCXMlX.js → interface-share-rocket.svg-BBIuiQ8_.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-uH-Cvq9d.js → interface-share-satellite.svg-LZRzoY-Y.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-81lauyV5.js → interface-share-space-ship.svg-C6EewxDh.js} +1 -1
- package/web/assets/{interface-share.svg-DO85t-F0.js → interface-share.svg-Bj60UW_t.js} +1 -1
- package/web/assets/{interface-signal-square.svg-CFAni6lY.js → interface-signal-square.svg-wJGg3ZJ7.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-BUQfluh7.js → interface-time-clock-circle.svg-C2Ki_bgh.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-BAZDU-C5.js → interface-time-hour-glass.svg-BeaTe2YW.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-Bj0AvF2-.js → interface-users-multiple.svg-ZNPhOLEJ.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-Cxz-5thD.js → interface-weather-moon.svg-CzOxK1E2.js} +1 -1
- package/web/assets/{javascript-CuP68vN5.js → javascript-CV2jmATe.js} +1 -1
- package/web/assets/{jsonMode-CdGjze9r.js → jsonMode-BpNATOZn.js} +1 -1
- package/web/assets/{liquid-fJJZPdJb.js → liquid-Bkbhlfu6.js} +1 -1
- package/web/assets/{lspLanguageFeatures-YzzH9q9a.js → lspLanguageFeatures-BIiCr6WR.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-DY1-sN8v.js → mail-chat-bubble-square.svg-B-R9ItyG.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-6zVEUG2-.js → mail-send-email-paper-airplane.svg-F4sC3JuQ.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DNpA7Auy.js → mail-send-envelope.svg-BaE9bGol.js} +1 -1
- package/web/assets/{mdx-CphM-wvX.js → mdx-CsTzsRLc.js} +1 -1
- package/web/assets/{minus-DD84SZSh.js → minus-CsIPqtIl.js} +1 -1
- package/web/assets/modal-B_0-h4nC.js +1 -0
- package/web/assets/{modal-CKGM8Wb3.js → modal-KwmdNF_4.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-ChxLUMT0.js → money-cashier-receipt.svg-C8rqn3qa.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-CcPdfv1E.js → money-currency-dollar-pay.svg-BW5dnMxx.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BsmXO8yM.js → money-graph-arrow-increase.svg-fHNc8kor.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-QVk3zD8i.js → money-graph-bar-chart-increase.svg-65H_xZ15.js} +1 -1
- package/web/assets/{multiselect-3cR58mLz.js → multiselect-Z0owdrkn.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-nzup63P6.js → nature-ecology-leaf.svg-BIZVZEYz.js} +1 -1
- package/web/assets/{password-CCYLOu-C.js → password-Be5EVCzq.js} +1 -1
- package/web/assets/{phone-telephone.svg-BLtgdZw-.js → phone-telephone.svg-B1dHjXge.js} +1 -1
- package/web/assets/{plus-jk73RdzY.js → plus-BY4yX4ZS.js} +1 -1
- package/web/assets/process.store-B-PvNJQb.js +1 -0
- package/web/assets/{programming-bug.svg-BCN6lOn1.js → programming-bug.svg-DJHBIgCF.js} +1 -1
- package/web/assets/{programming-cloud.svg-DHNBRNkQ.js → programming-cloud.svg-26MWe8cC.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-C4DheEbm.js → programming-computer-database-server.svg-Dy7gdMab.js} +1 -1
- package/web/assets/{programming-computer-database.svg-cD2w2ZZ6.js → programming-computer-database.svg-3HsFit56.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-D6_P2rTG.js → programming-module-four-layout.svg-CLumiwsC.js} +1 -1
- package/web/assets/{programming-module-three.svg-Dc076Z_f.js → programming-module-three.svg-3DvVSvY_.js} +1 -1
- package/web/assets/{programming-module.svg-D0c9akII.js → programming-module.svg-CgtgW8TW.js} +1 -1
- package/web/assets/{programming-script-code.svg-BrT3KZQe.js → programming-script-code.svg-DdeXzy2-.js} +1 -1
- package/web/assets/project-launch.store-DtFeb4vv.js +1 -0
- package/web/assets/project.store-DcaBpnnB.js +1 -0
- package/web/assets/{python-DMw-TRDY.js → python-YqWM3LFr.js} +1 -1
- package/web/assets/{radiobutton-CnoEo0qc.js → radiobutton-Pm1c37Fw.js} +1 -1
- package/web/assets/{razor-BTS4Lk96.js → razor-BtNiyC__.js} +1 -1
- package/web/assets/router-DnVYXVMw.js +1 -0
- package/web/assets/settings-scope-DR8NUZr5.js +1 -0
- package/web/assets/{settings.store-DeGpnclr.js → settings.store-CniuNQ3t.js} +1 -1
- package/web/assets/{shopping-cart.svg-pvFNKXP_.js → shopping-cart.svg-ejbEU5yG.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-PYJ4_vdS.js → shopping-gift-present.svg-RLuyvmga.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-KMRd9Rmg.js → shopping-shipping-box-parcel-package.svg-0GduEUbl.js} +1 -1
- package/web/assets/{src-NXursDRf.js → src-BS3JGGS_.js} +1 -1
- package/web/assets/{src-BsadAol0.js → src-BzZzroPd.js} +3 -3
- package/web/assets/{tabpanel-CKudNnqo.js → tabpanel-CssLXh-h.js} +1 -1
- package/web/assets/{tag-new-circle.svg-Bf83DYRq.js → tag-new-circle.svg-CEdgH15R.js} +1 -1
- package/web/assets/theme-C7HVmgEO.js +1 -0
- package/web/assets/{toggleswitch-Cv0supU2.js → toggleswitch-CEiGEBl3.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-WxnFDzEH.js → travel-map-earth-globe.svg-Dmwx1Lus.js} +1 -1
- package/web/assets/trpc-C6zILEMh.js +1 -0
- package/web/assets/{tsMode-CfruLmor.js → tsMode-DpPT4F6s.js} +1 -1
- package/web/assets/{typescript-BvsjNfHT.js → typescript-DoO0syM1.js} +1 -1
- package/web/assets/useAiChatDrawer-CnrYG1GW.js +1 -0
- package/web/assets/{useCloudOrg-B0o8vN4e.js → useCloudOrg-DWmP9gqs.js} +1 -1
- package/web/assets/{useEnvVarAutocomplete-DJMTIim7.js → useEnvVarAutocomplete-Dkx7Cn9l.js} +1 -1
- package/web/assets/{useProjectCatalog-B6GXBDDA.js → useProjectCatalog-Cu3VZu2F.js} +1 -1
- package/web/assets/{useProjectCloudOrg-BwLsTiz0.js → useProjectCloudOrg-CG7seJKu.js} +1 -1
- package/web/assets/{useServiceUrlHost-CE4Qoy-J.js → useServiceUrlHost-ADKWqhx0.js} +1 -1
- package/web/assets/{xml-BTID20Kj.js → xml-FoCdWVvH.js} +1 -1
- package/web/assets/{yaml-BtOf_8je.js → yaml-CgRsanOy.js} +1 -1
- package/web/index.html +1 -1
- package/chunk-BVBK2WII.js.map +0 -1
- package/chunk-GL7WA5K3.js.map +0 -1
- package/chunk-VNLIA5PV.js.map +0 -1
- package/chunk-XTLQOYLT.js.map +0 -1
- package/src-YUVA6WCM.js.map +0 -1
- package/web/assets/AiChatPage-DzTc9-iH.js +0 -1
- package/web/assets/CloudAccountPage-DTrPLz-p.js +0 -1
- package/web/assets/ServiceFormPage-B8jcMT3b.css +0 -1
- package/web/assets/ServiceFormPage-Dr_e9QMM.js +0 -1
- package/web/assets/WikiPage-D7N7nA2O.js +0 -1
- package/web/assets/cloud-client-CujRC6FF.js +0 -1
- package/web/assets/cloud-session-CSIV9Uvx.js +0 -1
- package/web/assets/interface-content-folder.svg-BPZbNQNK.js +0 -1
- package/web/assets/modal-Dd5rzDUd.js +0 -1
- package/web/assets/process.store-jsfEBwiA.js +0 -1
- package/web/assets/project-launch.store-Bp7vasUu.js +0 -1
- package/web/assets/project.store-DuZriz9o.js +0 -1
- package/web/assets/router-BU2tqcBm.js +0 -1
- package/web/assets/settings-scope-Bg_X1n_Y.js +0 -1
- package/web/assets/theme-D6M00FyZ.js +0 -1
- package/web/assets/trpc-mWVODCs2.js +0 -1
- package/web/assets/useAiChatDrawer-vNey6IKe.js +0 -1
- /package/{agent-manager-BSPEFZKZ.js.map → agent-manager-FZFFWISA.js.map} +0 -0
- /package/{chat-SE5GIT4B.js.map → chat-JIJQ7IJS.js.map} +0 -0
- /package/{chunk-NIU3CN5A.js.map → chunk-N3ZI35SC.js.map} +0 -0
- /package/{companion-HEJHC3UR.js.map → companion-OZODV5BR.js.map} +0 -0
- /package/{settings-manager-4GAINSJO.js.map → settings-manager-MAVD4GAS.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../server/src/services/disk-freshness.ts","../../server/src/services/run-store-utils.ts"],"sourcesContent":["import { stat } from 'node:fs/promises';\n\n/**\n * Le fichier a-t-il changé depuis qu'on l'a lu ?\n *\n * Les stores gardent de côté ce qu'ils n'ont pas su déchiffrer, pour le\n * réécrire tel quel plutôt que de l'effacer. Cette copie est la bonne réponse\n * tant que personne d'autre ne touche au fichier — et la mauvaise dès que\n * quelqu'un le répare par-dessous : la copie, elle, ne se périme jamais, et la\n * sauvegarde suivante réinstalle l'état d'avant la réparation.\n *\n * C'est arrivé deux fois de suite sur le même coffre : une conversion de clé\n * menée sur le disque, défaite quelques minutes plus tard par un store qui\n * tenait encore l'ancien chiffré en mémoire.\n *\n * D'où ce repère : l'empreinte du fichier au moment de la lecture. Si elle a\n * bougé, la copie mémoire ne fait plus foi et doit être abandonnée.\n */\n\ninterface Fingerprint {\n mtimeMs: number;\n size: number;\n /**\n * L'inode du chemin, qui change à chaque `rename` par-dessus.\n *\n * La date et la taille laissent passer le motif d'écriture de tout le dépôt :\n * les stores réécrivent le fichier entier, donc une modification rend souvent\n * le même nombre d'octets, et deux instances qui réagissent au même événement\n * écrivent dans la même milliseconde. Le fichier temporaire renommé\n * par-dessus, lui, installe toujours un autre inode.\n *\n * Là où le système n'en expose pas (il rend alors 0), le repère retombe sur\n * la date et la taille — ce qu'il valait avant.\n */\n ino: number;\n}\n\nconst seen = new Map<string, Fingerprint>();\n\n/** Retenir l'état d'un fichier au moment où on vient de le lire. */\nexport async function rememberFile(path: string): Promise<void> {\n try {\n const s = await stat(path);\n seen.set(path, { mtimeMs: s.mtimeMs, size: s.size, ino: s.ino });\n } catch {\n // Pas encore de fichier : rien à retenir, et rien à réémettre non plus.\n seen.delete(path);\n }\n}\n\n/**\n * Vrai si le fichier a changé — ou si l'on ne sait pas.\n *\n * L'ignorance compte comme un changement : réécrire une copie dont on ne peut\n * plus prouver qu'elle correspond au disque est précisément le geste à éviter.\n */\nexport async function hasChangedSinceRead(path: string): Promise<boolean> {\n const known = seen.get(path);\n if (!known) return true;\n try {\n const s = await stat(path);\n return s.mtimeMs !== known.mtimeMs || s.size !== known.size || s.ino !== known.ino;\n } catch {\n return true;\n }\n}\n\n/**\n * A-t-on lu ce fichier ?\n *\n * `hasChangedSinceRead` tient l'ignorance pour un changement : c'est juste\n * quand il s'agit de décider si une copie mémoire fait encore foi. Ça ne l'est\n * pas pour décider d'écrire — un fichier jamais lu est le cas d'un coffre neuf,\n * et le traiter comme « modifié sous nos pieds » revenait à ne jamais écrire la\n * première fois. Les appelants qui protègent une écriture demandent donc les\n * deux : connu, et inchangé.\n */\nexport function wasRead(path: string): boolean {\n return seen.has(path);\n}\n\n/** Oublier un fichier — après un rechargement complet, par exemple. */\nexport function forgetFile(path: string): void {\n seen.delete(path);\n}\n\n/**\n * L'empreinte d'un ensemble de fichiers : lesquels, et dans quel état.\n *\n * Le repère ci-dessus répond pour un fichier qu'on a lu soi-même ; celui-ci\n * répond pour un store dont le contenu vient de plusieurs fichiers à la fois —\n * un par coffre — et dont la question est « le disque a-t-il bougé depuis mon\n * dernier chargement ? ». Comparer deux empreintes coûte quelques `stat` ;\n * recharger coûte autant de lectures, d'analyses et de déchiffrements.\n *\n * L'absence d'un fichier en fait partie : un coffre disparu change l'empreinte\n * autant qu'un coffre modifié.\n */\nexport async function fingerprintFiles(paths: string[]): Promise<string> {\n const stamps = await Promise.all(paths.map(async (path) => {\n try {\n const s = await stat(path);\n // L'inode en fait partie pour la raison décrite sur `Fingerprint` : un\n // fichier renommé par-dessus la cible peut n'avoir bougé ni en taille ni\n // en date, et reste pourtant un autre contenu.\n return `${path}:${s.mtimeMs}:${s.size}:${s.ino}`;\n } catch {\n return `${path}:-`;\n }\n }));\n return stamps.sort().join('|');\n}\n","import { randomUUID } from 'node:crypto';\nimport { chmod, mkdir, readdir, rename, rm, stat, writeFile, readFile } from 'node:fs/promises';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { machineRoot } from './vault-resolver.js';\n\nconst SAFE_PATH_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/;\n\nexport function resolveConversationRunDir(rootDirName: string, conversationId: string): string {\n if (!SAFE_PATH_SEGMENT_RE.test(conversationId)) {\n throw new Error('Invalid conversationId');\n }\n // Machine-wide, like the conversations these runs belong to: using the launch\n // directory would put a `.runeya` in a repository just for asking the AI a\n // question about a cloud project.\n const base = resolve(machineRoot(), rootDirName);\n const dir = resolve(base, conversationId);\n if (!dir.startsWith(base + sep)) {\n throw new Error('Invalid conversationId');\n }\n return dir;\n}\n\nexport async function atomicWriteSecure(filePath: string, content: string | Uint8Array): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n // Un nom par écriture : deux Runeya d'un même poste écrivent les mêmes\n // fichiers, et un `.tmp` commun se fait renommer sous le nez de l'autre.\n const tmpPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;\n try {\n await writeFile(tmpPath, content, typeof content === 'string' ? 'utf-8' : undefined);\n await rename(tmpPath, filePath);\n } catch (err) {\n // Un nom unique ne se réécrit jamais : laissé là, chaque échec en ajouterait un.\n await rm(tmpPath, { force: true }).catch(() => {});\n throw err;\n }\n await chmod(filePath, 0o600);\n}\n\n/** Le nom qu'`atomicWriteSecure` donne à ses fichiers temporaires : `<fichier>.<pid>.<uuid>.tmp`. */\nconst OWN_TEMP_RE = /\\.\\d+\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\.tmp$/;\nconst STALE_TEMP_MS = 3600_000;\n\n/**\n * Retirer les fichiers temporaires qu'un arrêt brutal a laissés.\n *\n * Un nom par écriture ne se réécrit jamais : chaque arrêt en pleine écriture en\n * laissait un pour toujours. Seuls les nôtres sont concernés, et seulement\n * passé une heure — un plus récent peut appartenir à une écriture en cours,\n * celle d'une autre Runeya du même poste.\n */\nexport async function sweepStaleTempFiles(dirs: string[]): Promise<number> {\n let removed = 0;\n const limit = Date.now() - STALE_TEMP_MS;\n for (const dir of dirs) {\n let names: string[];\n try {\n names = await readdir(dir);\n } catch {\n continue;\n }\n for (const name of names.filter((n) => OWN_TEMP_RE.test(n))) {\n const path = join(dir, name);\n try {\n if ((await stat(path)).mtimeMs > limit) continue;\n await rm(path, { force: true });\n removed += 1;\n } catch {\n // Disparu entre-temps : rien à retirer.\n }\n }\n }\n return removed;\n}\n\nexport async function atomicWriteJsonSecure(filePath: string, data: unknown, pretty = false): Promise<void> {\n await atomicWriteSecure(filePath, JSON.stringify(data, null, pretty ? 2 : 0));\n}\n\nexport async function readJsonFileSafe<T>(filePath: string): Promise<T | null> {\n try {\n const raw = await readFile(filePath, 'utf-8');\n return JSON.parse(raw) as T;\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["stat","stat"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
hasChangedSinceRead,
|
|
4
4
|
rememberFile,
|
|
5
5
|
wasRead
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HK5QNU6P.js";
|
|
7
7
|
import {
|
|
8
8
|
SchemaVersionSchema,
|
|
9
9
|
SettingsPrivateSchema,
|
|
@@ -171,4 +171,4 @@ var settingsManager = new SettingsManager();
|
|
|
171
171
|
export {
|
|
172
172
|
settingsManager
|
|
173
173
|
};
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-N3ZI35SC.js.map
|
|
@@ -26,10 +26,10 @@ import {
|
|
|
26
26
|
reviewWindow,
|
|
27
27
|
runCompanionNow,
|
|
28
28
|
takeRelaunchSlot
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-H22YLVQE.js";
|
|
30
30
|
import "./chunk-MD3VW4HQ.js";
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-4PN7QBNM.js";
|
|
32
|
+
import "./chunk-HK5QNU6P.js";
|
|
33
33
|
import "./chunk-T2BV5WZE.js";
|
|
34
34
|
import "./chunk-ZFELQG4B.js";
|
|
35
35
|
export {
|
|
@@ -61,4 +61,4 @@ export {
|
|
|
61
61
|
runCompanionNow,
|
|
62
62
|
takeRelaunchSlot
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=companion-
|
|
64
|
+
//# sourceMappingURL=companion-OZODV5BR.js.map
|
package/index.js
CHANGED
|
@@ -135,7 +135,7 @@ if (subCommand === "install-desktop" || subCommand === "uninstall-desktop") {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
if (subCommand === "instances") {
|
|
138
|
-
const { listInstances, killInstance, restartInstance } = await import("./src-
|
|
138
|
+
const { listInstances, killInstance, restartInstance } = await import("./src-SGSG2RSF.js");
|
|
139
139
|
const { runInstancesCommand } = await import("./instances-command-KZ5UGXOR.js");
|
|
140
140
|
process.exit(await runInstancesCommand(args.slice(1), {
|
|
141
141
|
listInstances,
|
|
@@ -299,7 +299,7 @@ async function main() {
|
|
|
299
299
|
ensureNodeBinOnPath();
|
|
300
300
|
await ensureUserBinsOnPath();
|
|
301
301
|
if (!isPullEnv) stampConsole();
|
|
302
|
-
const { createLocalServer, pullEnv, PullEnvError, registerInstance, registerCliLocation } = await import("./src-
|
|
302
|
+
const { createLocalServer, pullEnv, PullEnvError, registerInstance, registerCliLocation } = await import("./src-SGSG2RSF.js");
|
|
303
303
|
registerCliLocation({ execPath: process.execPath, cliEntry: fileURLToPath(import.meta.url) });
|
|
304
304
|
if (isPullEnv) {
|
|
305
305
|
if (!serviceArg) {
|
|
@@ -408,7 +408,7 @@ async function main() {
|
|
|
408
408
|
networkInfo,
|
|
409
409
|
setLanMode,
|
|
410
410
|
resolveTrayIcon
|
|
411
|
-
} = await import("./src-
|
|
411
|
+
} = await import("./src-SGSG2RSF.js");
|
|
412
412
|
tray = await startInstanceTray({
|
|
413
413
|
info: { cwd: process.cwd(), port, version, url: appUrl },
|
|
414
414
|
assetsDir: join(__dirname, "assets"),
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
settingsManager
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-N3ZI35SC.js";
|
|
4
|
+
import "./chunk-HK5QNU6P.js";
|
|
5
5
|
import "./chunk-T2BV5WZE.js";
|
|
6
6
|
import "./chunk-ZFELQG4B.js";
|
|
7
7
|
export {
|
|
8
8
|
settingsManager
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=settings-manager-
|
|
10
|
+
//# sourceMappingURL=settings-manager-MAVD4GAS.js.map
|
|
@@ -62,7 +62,7 @@ import {
|
|
|
62
62
|
soleAccountScope,
|
|
63
63
|
startCliSession,
|
|
64
64
|
vaultOfProject
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-GKK3ACWB.js";
|
|
66
66
|
import {
|
|
67
67
|
resolveCliInvocation,
|
|
68
68
|
whichCommand
|
|
@@ -85,13 +85,15 @@ import {
|
|
|
85
85
|
stopClaudeTranscriptWatcher,
|
|
86
86
|
stopCodexTranscriptWatcher,
|
|
87
87
|
verifyJwt
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-H22YLVQE.js";
|
|
89
89
|
import "./chunk-MD3VW4HQ.js";
|
|
90
90
|
import {
|
|
91
91
|
agentManager,
|
|
92
92
|
agentSpawner,
|
|
93
93
|
agentStore,
|
|
94
|
+
clearDetached,
|
|
94
95
|
clearEncryptionKey,
|
|
96
|
+
clearLocalRemoval,
|
|
95
97
|
clearPendingLegacyKey,
|
|
96
98
|
clearVaultLock,
|
|
97
99
|
decryptValue,
|
|
@@ -105,7 +107,9 @@ import {
|
|
|
105
107
|
hasEncryptionKey,
|
|
106
108
|
hasPendingLegacyKey,
|
|
107
109
|
isCiMode,
|
|
110
|
+
isDetached,
|
|
108
111
|
isEncryptedValue,
|
|
112
|
+
isLocallyRemoved,
|
|
109
113
|
isVaultLocked,
|
|
110
114
|
killInstance,
|
|
111
115
|
listInstances,
|
|
@@ -123,14 +127,15 @@ import {
|
|
|
123
127
|
stableEncryptValue,
|
|
124
128
|
traefikManager,
|
|
125
129
|
unregisterInstance
|
|
126
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-4PN7QBNM.js";
|
|
127
131
|
import {
|
|
128
132
|
settingsManager
|
|
129
|
-
} from "./chunk-
|
|
133
|
+
} from "./chunk-N3ZI35SC.js";
|
|
130
134
|
import {
|
|
131
135
|
atomicWriteSecure,
|
|
132
|
-
resolveConversationRunDir
|
|
133
|
-
|
|
136
|
+
resolveConversationRunDir,
|
|
137
|
+
sweepStaleTempFiles
|
|
138
|
+
} from "./chunk-HK5QNU6P.js";
|
|
134
139
|
import {
|
|
135
140
|
AGENT_LONG_FETCH_TIMEOUT,
|
|
136
141
|
AGENT_STOP_FETCH_TIMEOUT,
|
|
@@ -166,6 +171,7 @@ import {
|
|
|
166
171
|
writeEntity
|
|
167
172
|
} from "./chunk-T2BV5WZE.js";
|
|
168
173
|
import {
|
|
174
|
+
allVaultRoots,
|
|
169
175
|
env,
|
|
170
176
|
forgetOrgLogo,
|
|
171
177
|
keyRoot,
|
|
@@ -6634,6 +6640,7 @@ function writeSyncDocSync(orgId, state) {
|
|
|
6634
6640
|
var LOCAL_ORIGIN = "local-bridge";
|
|
6635
6641
|
var REMOTE_ORIGIN = "remote";
|
|
6636
6642
|
var CACHE_ORIGIN = "cache";
|
|
6643
|
+
var RESTORED_PROJECTS = "projectRestores";
|
|
6637
6644
|
var PERSIST_DEBOUNCE_MS = 1e3;
|
|
6638
6645
|
var RECONNECT_DELAY_MS = 3e3;
|
|
6639
6646
|
var UNAUTHENTICATED_RETRY_MS = 5 * 6e4;
|
|
@@ -6717,6 +6724,14 @@ var OrgSyncConnection = class {
|
|
|
6717
6724
|
* offline edit reverted, a service on disk erased by an older deletion.
|
|
6718
6725
|
*/
|
|
6719
6726
|
seeded = false;
|
|
6727
|
+
markOpened;
|
|
6728
|
+
/**
|
|
6729
|
+
* Réglée quand le document tient l'état d'ouverture du cloud — ou quand il ne
|
|
6730
|
+
* l'aura pas : session refusée, app trop ancienne, connexion arrêtée.
|
|
6731
|
+
*/
|
|
6732
|
+
opened = new Promise((resolve4) => {
|
|
6733
|
+
this.markOpened = resolve4;
|
|
6734
|
+
});
|
|
6720
6735
|
/** Store applications started by remote events and not finished yet. */
|
|
6721
6736
|
applying = /* @__PURE__ */ new Set();
|
|
6722
6737
|
/**
|
|
@@ -6774,16 +6789,17 @@ var OrgSyncConnection = class {
|
|
|
6774
6789
|
this.unsubscribes.push(environmentStore.onChange(this.onSaved));
|
|
6775
6790
|
this.unsubscribes.push(logParserStore.onLocalChange(this.onSaved));
|
|
6776
6791
|
const cached = await readSyncDoc(this.link.orgId);
|
|
6792
|
+
let cacheLoaded = false;
|
|
6777
6793
|
if (cached) {
|
|
6778
6794
|
try {
|
|
6779
6795
|
Y2.applyUpdate(this.doc, cached, CACHE_ORIGIN);
|
|
6780
|
-
|
|
6796
|
+
cacheLoaded = true;
|
|
6781
6797
|
} catch (err) {
|
|
6782
6798
|
console.error("[cloud-sync] unreadable sync cache for org %s, ignored:", this.link.orgId, err.message);
|
|
6783
6799
|
}
|
|
6784
6800
|
}
|
|
6785
6801
|
this.doc.on("update", () => this.schedulePersist());
|
|
6786
|
-
if (
|
|
6802
|
+
if (cacheLoaded) await this.seed();
|
|
6787
6803
|
void this.streamLoop();
|
|
6788
6804
|
}
|
|
6789
6805
|
/** Write local state on top of the known history, then owe it to the cloud. */
|
|
@@ -6818,6 +6834,7 @@ var OrgSyncConnection = class {
|
|
|
6818
6834
|
/** Resolves once any cache write already under way has landed. */
|
|
6819
6835
|
stop() {
|
|
6820
6836
|
this.stopped = true;
|
|
6837
|
+
this.markOpened();
|
|
6821
6838
|
this.state = "stopped";
|
|
6822
6839
|
projectStore.events.off("saved", this.onSaved);
|
|
6823
6840
|
for (const off of this.unsubscribes.splice(0)) off();
|
|
@@ -6871,6 +6888,7 @@ var OrgSyncConnection = class {
|
|
|
6871
6888
|
}
|
|
6872
6889
|
/** Remember the floor and stop pretending sync will resume on its own. */
|
|
6873
6890
|
markOutdated(err) {
|
|
6891
|
+
this.markOpened();
|
|
6874
6892
|
const alreadyReported = this.state === "outdated";
|
|
6875
6893
|
this.state = "outdated";
|
|
6876
6894
|
this.lastIncompatibleVersion = err.lastIncompatibleVersion;
|
|
@@ -6883,6 +6901,7 @@ var OrgSyncConnection = class {
|
|
|
6883
6901
|
* every slow retry: the point of retrying is to recover quietly.
|
|
6884
6902
|
*/
|
|
6885
6903
|
markUnauthenticated(err) {
|
|
6904
|
+
this.markOpened();
|
|
6886
6905
|
const alreadyReported = this.state === "unauthenticated";
|
|
6887
6906
|
this.state = "unauthenticated";
|
|
6888
6907
|
this.needsPush = true;
|
|
@@ -7002,8 +7021,9 @@ var OrgSyncConnection = class {
|
|
|
7002
7021
|
} catch {
|
|
7003
7022
|
continue;
|
|
7004
7023
|
}
|
|
7024
|
+
this.initialDocApplied = true;
|
|
7025
|
+
this.markOpened();
|
|
7005
7026
|
if (!this.seeded) {
|
|
7006
|
-
this.initialDocApplied = true;
|
|
7007
7027
|
await this.settleApplying();
|
|
7008
7028
|
if (this.stopped) return;
|
|
7009
7029
|
await this.seed();
|
|
@@ -7034,13 +7054,16 @@ var OrgSyncConnection = class {
|
|
|
7034
7054
|
const projectId = fields["projectId"];
|
|
7035
7055
|
return typeof projectId === "string" && this.tracked.has(projectId);
|
|
7036
7056
|
}
|
|
7057
|
+
return this.trackedProjectOf(id) !== null;
|
|
7058
|
+
}
|
|
7059
|
+
/** The tracked project whose `serviceIds` list this service, per the doc. */
|
|
7060
|
+
trackedProjectOf(serviceId) {
|
|
7037
7061
|
const projects = this.collection("projects");
|
|
7038
7062
|
for (const projectId of this.tracked) {
|
|
7039
|
-
const
|
|
7040
|
-
|
|
7041
|
-
if (Array.isArray(serviceIds) && serviceIds.includes(id)) return true;
|
|
7063
|
+
const serviceIds = readEntity(projects, projectId)?.["serviceIds"];
|
|
7064
|
+
if (Array.isArray(serviceIds) && serviceIds.includes(serviceId)) return projectId;
|
|
7042
7065
|
}
|
|
7043
|
-
return
|
|
7066
|
+
return null;
|
|
7044
7067
|
}
|
|
7045
7068
|
/** Re-read which projects of this org have a vault on this machine. */
|
|
7046
7069
|
async refreshTracked() {
|
|
@@ -7131,6 +7154,7 @@ var OrgSyncConnection = class {
|
|
|
7131
7154
|
this.pulling = false;
|
|
7132
7155
|
}
|
|
7133
7156
|
await serviceStore.relocateAll();
|
|
7157
|
+
await environmentStore.relocateAll();
|
|
7134
7158
|
await this.reconcileLocalToDoc();
|
|
7135
7159
|
}
|
|
7136
7160
|
// ---- Local ↔ Doc reconciliation --------------------------------------
|
|
@@ -7161,6 +7185,7 @@ var OrgSyncConnection = class {
|
|
|
7161
7185
|
if (name === "projects" && !isInitial) {
|
|
7162
7186
|
for (const id of added) {
|
|
7163
7187
|
if (deleted.has(id) || this.tracked.has(id)) continue;
|
|
7188
|
+
if (this.doc.getMap(RESTORED_PROJECTS).has(id)) continue;
|
|
7164
7189
|
try {
|
|
7165
7190
|
await this.followProject(id);
|
|
7166
7191
|
} catch (err) {
|
|
@@ -7231,7 +7256,7 @@ var OrgSyncConnection = class {
|
|
|
7231
7256
|
}
|
|
7232
7257
|
async upsertLocally(name, id, fields) {
|
|
7233
7258
|
if (name === "services") {
|
|
7234
|
-
await serviceStore.applyRemoteUpsert(id, fields, this.link.orgId);
|
|
7259
|
+
await serviceStore.applyRemoteUpsert(id, fields, this.link.orgId, this.trackedProjectOf(id) ?? void 0);
|
|
7235
7260
|
return;
|
|
7236
7261
|
}
|
|
7237
7262
|
if (name === "environments") {
|
|
@@ -7327,23 +7352,52 @@ var OrgSyncConnection = class {
|
|
|
7327
7352
|
const entities = local[name];
|
|
7328
7353
|
const ids = new Set(entities.map((e) => e.id));
|
|
7329
7354
|
for (const entity of entities) {
|
|
7330
|
-
if (
|
|
7355
|
+
if (touchedSinceRead(name, entity.id)) continue;
|
|
7356
|
+
writeEntity(
|
|
7357
|
+
collection,
|
|
7358
|
+
entity.id,
|
|
7359
|
+
name === "projects" ? this.keepUnknownLinks(entity) : entity
|
|
7360
|
+
);
|
|
7331
7361
|
}
|
|
7332
7362
|
if (name === "projects") continue;
|
|
7333
7363
|
for (const id of Array.from(collection.keys())) {
|
|
7334
7364
|
if (ids.has(id) || touchedSinceRead(name, id)) continue;
|
|
7365
|
+
if (!isLocallyRemoved(name, id)) continue;
|
|
7335
7366
|
if (this.belongsToOwnedProject(name, id, ownedProjectIds)) collection.delete(id);
|
|
7367
|
+
clearLocalRemoval(name, id);
|
|
7336
7368
|
}
|
|
7337
7369
|
}
|
|
7338
7370
|
const parserIds = new Set(parsers.map((p) => p.id));
|
|
7339
7371
|
for (const parser of parsers) writeEntity(this.logParsers, parser.id, parser);
|
|
7340
7372
|
if (this.applyingParsers === 0) {
|
|
7341
7373
|
for (const id of Array.from(this.logParsers.keys())) {
|
|
7342
|
-
if (
|
|
7374
|
+
if (parserIds.has(id) || !isLocallyRemoved("logParsers", id)) continue;
|
|
7375
|
+
this.logParsers.delete(id);
|
|
7376
|
+
clearLocalRemoval("logParsers", id);
|
|
7343
7377
|
}
|
|
7344
7378
|
}
|
|
7345
7379
|
}, LOCAL_ORIGIN);
|
|
7346
7380
|
}
|
|
7381
|
+
/**
|
|
7382
|
+
* Le projet local tel qu'il doit partir : ses listes gardent les ids que le
|
|
7383
|
+
* document connaît et pas cette machine, sauf ceux qu'elle a détachés.
|
|
7384
|
+
*
|
|
7385
|
+
* Un projet local en retard (coffre relu tard, autre version) repoussait
|
|
7386
|
+
* sinon d'anciens `serviceIds` : le service récent sortait du projet pour
|
|
7387
|
+
* toute l'organisation, et sa suppression suivait.
|
|
7388
|
+
*/
|
|
7389
|
+
keepUnknownLinks(project) {
|
|
7390
|
+
const inDoc = readEntity(this.collection("projects"), project.id);
|
|
7391
|
+
const merged = { ...project };
|
|
7392
|
+
for (const field of ["serviceIds", "environmentIds"]) {
|
|
7393
|
+
const local = project[field] ?? [];
|
|
7394
|
+
const remote = inDoc?.[field];
|
|
7395
|
+
const extra = Array.isArray(remote) ? remote.filter((id) => typeof id === "string" && !local.includes(id) && !isDetached(project.id, field, id)) : [];
|
|
7396
|
+
merged[field] = [...local, ...extra];
|
|
7397
|
+
clearDetached(project.id, field);
|
|
7398
|
+
}
|
|
7399
|
+
return merged;
|
|
7400
|
+
}
|
|
7347
7401
|
/**
|
|
7348
7402
|
* Whether a doc entity belongs to a project this machine holds — i.e. whether
|
|
7349
7403
|
* its absence locally is a real removal rather than a project we never pulled.
|
|
@@ -7524,6 +7578,25 @@ var CloudSyncBridge = class {
|
|
|
7524
7578
|
this.connections.delete(orgId);
|
|
7525
7579
|
}
|
|
7526
7580
|
}
|
|
7581
|
+
/**
|
|
7582
|
+
* Attendre que le document d'une organisation tienne l'état du cloud.
|
|
7583
|
+
*
|
|
7584
|
+
* Suivre un projet juste après avoir ouvert la connexion ne trouvait rien : la
|
|
7585
|
+
* trame d'ouverture n'était pas arrivée, et l'app concluait à un échec. Rend la
|
|
7586
|
+
* main au plus tard après `timeoutMs` — l'appelant lit alors l'état.
|
|
7587
|
+
*/
|
|
7588
|
+
async whenOpened(orgId, timeoutMs) {
|
|
7589
|
+
const conn = this.connections.get(orgId);
|
|
7590
|
+
if (!conn) return;
|
|
7591
|
+
let timer;
|
|
7592
|
+
await Promise.race([
|
|
7593
|
+
conn.opened,
|
|
7594
|
+
new Promise((resolve4) => {
|
|
7595
|
+
timer = setTimeout(resolve4, timeoutMs);
|
|
7596
|
+
})
|
|
7597
|
+
]);
|
|
7598
|
+
clearTimeout(timer);
|
|
7599
|
+
}
|
|
7527
7600
|
/** Stops at once; the promise only says when pending cache writes have landed. */
|
|
7528
7601
|
stopAll() {
|
|
7529
7602
|
const stopping = [...this.connections.values()].map((conn) => conn.stop());
|
|
@@ -7679,6 +7752,7 @@ async function accountScope(orgId) {
|
|
|
7679
7752
|
const accountId = await accountForOrg(orgId);
|
|
7680
7753
|
return accountId ? { accountId } : {};
|
|
7681
7754
|
}
|
|
7755
|
+
var OPENING_TIMEOUT_MS = 1e4;
|
|
7682
7756
|
async function assertOrgReadable(orgId) {
|
|
7683
7757
|
try {
|
|
7684
7758
|
await assertOrgVaultReadable(orgId);
|
|
@@ -7737,6 +7811,7 @@ var cloudSyncRouter = router({
|
|
|
7737
7811
|
} else if (input.accountId) {
|
|
7738
7812
|
await stampOrgCloud(input.orgId, input.cloudUrl, void 0, input.accountId);
|
|
7739
7813
|
}
|
|
7814
|
+
await cloudSyncBridge.whenOpened(input.orgId, OPENING_TIMEOUT_MS);
|
|
7740
7815
|
try {
|
|
7741
7816
|
const pulled = await cloudSyncBridge.followProject(input.orgId, input.projectId);
|
|
7742
7817
|
return { pulled, state: syncState(input.orgId) };
|
|
@@ -9897,6 +9972,11 @@ async function createLocalServer() {
|
|
|
9897
9972
|
await serviceStore.list().catch((err) => {
|
|
9898
9973
|
console.warn("[server] Failed to preload services:", err);
|
|
9899
9974
|
});
|
|
9975
|
+
void (async () => {
|
|
9976
|
+
const orgRoots = (await listOrgVaults()).map((orgId) => orgVaultRoot(orgId));
|
|
9977
|
+
const removed = await sweepStaleTempFiles([machineRoot(), ...orgRoots, ...await allVaultRoots()]);
|
|
9978
|
+
if (removed > 0) console.log(`[server] ${removed} fichier(s) temporaire(s) orphelin(s) retir\xE9(s)`);
|
|
9979
|
+
})().catch((err) => console.warn("[server] Temp file sweep failed:", err));
|
|
9900
9980
|
cloudSyncBridge.start().catch((err) => {
|
|
9901
9981
|
console.warn("[server] Failed to start cloud sync bridge:", err);
|
|
9902
9982
|
});
|
|
@@ -10529,7 +10609,7 @@ async function createLocalServer() {
|
|
|
10529
10609
|
]);
|
|
10530
10610
|
console.log("[server] Shutdown complete");
|
|
10531
10611
|
};
|
|
10532
|
-
const { initCompanion } = await import("./companion-
|
|
10612
|
+
const { initCompanion } = await import("./companion-OZODV5BR.js");
|
|
10533
10613
|
initCompanion();
|
|
10534
10614
|
return { app, server, wss, shutdown };
|
|
10535
10615
|
}
|
|
@@ -10976,4 +11056,4 @@ export {
|
|
|
10976
11056
|
startProcess,
|
|
10977
11057
|
stopProcess
|
|
10978
11058
|
};
|
|
10979
|
-
//# sourceMappingURL=src-
|
|
11059
|
+
//# sourceMappingURL=src-SGSG2RSF.js.map
|