@runeya/runeya 2.0.59 → 2.0.61
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-5SQNJICJ.js +7 -0
- package/{chunk-F7HMKPFB.js → chunk-OOQ74RCO.js} +10 -3
- package/chunk-OOQ74RCO.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-7YQHXQ6L.js → src-RY3O6RUF.js} +192 -129
- package/src-RY3O6RUF.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-EIqnE2D0.js → AgentScalarChatInterface.vue-DQumL7el.js} +1 -1
- package/web/assets/{AgentTerminalPage-5kH1RTj6.js → AgentTerminalPage-BzF8DziD.js} +1 -1
- package/web/assets/AiChatPage-BzW9ep-7.js +1 -0
- package/web/assets/AppLayout-C1jD3u72.js +1 -0
- package/web/assets/{AppLayout-Dj8YOvMQ.css → AppLayout-Dz5LUtqY.css} +1 -1
- package/web/assets/{AuditPage-BrqreO8a.js → AuditPage-CdKUdCrY.js} +1 -1
- package/web/assets/CloudAccountPage-D4FMLg68.js +1 -0
- package/web/assets/{CloudAccountPage-DS3ZfENB.js → CloudAccountPage-D9-3gnWd.js} +1 -1
- package/web/assets/{CloudMessagingPage-D8gBnkFY.js → CloudMessagingPage-BMFjWcay.js} +1 -1
- package/web/assets/{DashboardPage-BiskmF6R.js → DashboardPage-R_KW403-.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-CtKWj2hx.js → DirectoryPickerDialog-DD9rl5Zq.js} +1 -1
- package/web/assets/{EnvironmentForm-DZXx9r78.js → EnvironmentForm-CysMKBBb.js} +1 -1
- package/web/assets/{EnvironmentFormPage-Dl7pdkEM.js → EnvironmentFormPage-OQL8hE5C.js} +1 -1
- package/web/assets/{EnvironmentListPage-B0WX_Hq7.js → EnvironmentListPage-Dzi7eW62.js} +1 -1
- package/web/assets/{KanbanBoardPage-CBJs26gZ.js → KanbanBoardPage-C-MhV5O3.js} +3 -3
- package/web/assets/{KanbanListPage-Cz-tlLWA.js → KanbanListPage-VDcvWrY7.js} +1 -1
- package/web/assets/{LaunchProjectPage-8SDkFiLE.js → LaunchProjectPage-_3YC0ovt.js} +1 -1
- package/web/assets/{LaunchServicesPage-B-ncX3rd.js → LaunchServicesPage-CQw7EUCM.js} +1 -1
- package/web/assets/{LogViewer-BJNqKt3I.js → LogViewer-Dn0icfNO.js} +1 -1
- package/web/assets/OrgKeyPrompt-B_ifgEZ5.css +1 -0
- package/web/assets/{EditorIcon-B58cXgvK.js → OrgKeyPrompt-BxEMKrE8.js} +15 -15
- package/web/assets/{ProcessControls-NA6_my0q.js → ProcessControls-DsZzES_m.js} +1 -1
- package/web/assets/{ProcessDetailPage-6galJRdd.js → ProcessDetailPage-Cixw0kzN.js} +1 -1
- package/web/assets/{ProcessMetrics-CUDjJ4s_.js → ProcessMetrics-DyKiOejb.js} +1 -1
- package/web/assets/{ProjectDetailPage-DKHoFXjW.js → ProjectDetailPage-B4t6wO1u.js} +1 -1
- package/web/assets/{ProjectListPage-C1xSP6Bq.js → ProjectListPage-OnRkCttg.js} +1 -1
- package/web/assets/{RandomJobTestPage-BAuT49yE.js → RandomJobTestPage-CHFjewln.js} +1 -1
- package/web/assets/{ScenarioEditorPage-CROCV83A.js → ScenarioEditorPage-CgfWcb_c.js} +1 -1
- package/web/assets/{SendToChatDialog-BfaLVfzw.js → SendToChatDialog-CH1WQCmJ.js} +1 -1
- package/web/assets/{ServiceControlsBar-DE0In-jH.js → ServiceControlsBar-xjfBazSf.js} +1 -1
- package/web/assets/{ServiceDetailPage-0iIv9RqU.js → ServiceDetailPage-DEatx8sw.js} +1 -1
- package/web/assets/{ServiceFormPage-D-tLX8jE.js → ServiceFormPage-DJrENgxg.js} +1 -1
- package/web/assets/SettingsPage-CdH2m7bE.js +2063 -0
- package/web/assets/{SettingsPage-ySsQCeYE.css → SettingsPage-uCS5lY2z.css} +1 -1
- package/web/assets/{UnlockPage-flNU5Iky.js → UnlockPage-B0RbZa3X.js} +1 -1
- package/web/assets/{VariablesTable-BnCSYLD4.js → VariablesTable-CKlqTB72.js} +1 -1
- package/web/assets/{VaultMigrationPage-BSv9anTA.js → VaultMigrationPage-DoHQ8K9r.js} +1 -1
- package/web/assets/{VersionBadge-zyKx_N_w.js → VersionBadge-DsAFH0Ue.js} +1 -1
- package/web/assets/WikiPage-7Te7bHiz.js +1 -0
- package/web/assets/{WikiView-BZZ5mybT.js → WikiView-r_GcdKCd.js} +1 -1
- package/web/assets/{add-scalar-classes-DZb8OCPH.js → add-scalar-classes-D6dHpiNp.js} +3 -3
- package/web/assets/auth-errors-BfORQzSz.js +1 -0
- package/web/assets/{autocomplete-DGLJp6Xx.js → autocomplete-BP9XlSM5.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-D7lBpWcu.js → basic-shape-diamond.svg-BgQofi36.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-BIDPqohs.js → basic-shape-hexagon.svg-Cbs6DpQe.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-iWUF3CNK.js → basic-shape-primary-circle-ellipse-round.svg-TNnxm2sV.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-BQy8tY9i.js → basic-shape-primary-square-rectangle.svg-BH-cXFR6.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-Dcov5U2N.js → basic-shape-shield.svg-BcEalXk7.js} +1 -1
- package/web/assets/{browser-DrMkXWE3.js → browser-BSczRAHl.js} +1 -1
- package/web/assets/{browser-Dc4T6GL2.js → browser-iWU5tRyk.js} +1 -1
- package/web/assets/{card-DADdd2-i.js → card-B3SDMIrv.js} +1 -1
- package/web/assets/{checkbox-By0TwAz_.js → checkbox-C34UH9mT.js} +1 -1
- package/web/assets/{chip-W5HkUiZA.js → chip-BQPkeUK8.js} +1 -1
- package/web/assets/{client-Be8SiY8s.js → client-CEpwc1wT.js} +1 -1
- package/web/assets/{cloud-chat.store-GKWq9kin.js → cloud-chat.store-DXxnceOw.js} +1 -1
- package/web/assets/{cloud-session-CJ4n3dbT.js → cloud-session-CUvvULlO.js} +1 -1
- package/web/assets/{column-P4Yoqttz.js → column-B28pW0m1.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-BjBC4Q_B.js → computer-device-desktop-monitor.svg-Dv1BZJxY.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-C7H8X0sb.js → computer-device-desktop.svg-Ckwu3csA.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-GDU5987h.js → computer-device-laptop.svg-BSzceNKl.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BcWod8vA.js → computer-device-mobile-phone-android-samsung-back.svg-CrX8oxCE.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Cj58lY5g.js → computer-device-mobile-phone-android-samsung.svg-fVwo88Wc.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CtJM7Ul_.js → computer-device-mobile-phone-iphone-x-back.svg-B-fvFqUl.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BiSi4riW.js → computer-device-mobile-phone-iphone-x.svg-BiE6kuqM.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-BAMVDwHH.js → computer-device-mobile-tablet-touch.svg-Dbf98OTo.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-quWU62em.js → computer-device-mobile-tablet.svg-DjfJDeuV.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-eoCbNWkF.js → computer-device-network-ethernet-cat6.svg-2ilhWSZb.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-AR5jmH9w.js → computer-device-network-lan-www.svg-L2zqA0qi.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-C3-i1o4I.js → computer-device-network-wifi-connection.svg-Dz1G8X1v.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-D8_62H2U.js → computer-device-network-wifi-router.svg-ByaJ9Vd4.js} +1 -1
- package/web/assets/{cssMode-CfDickSl.js → cssMode-5xCwdwYr.js} +1 -1
- package/web/assets/{divider-DOwWKUnp.js → divider-OrP__TqB.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-bmj1315r.js → ecology-science-erlenmeyer-flask.svg-z19ZFScG.js} +1 -1
- package/web/assets/{fieldset-CM6GY5DX.js → fieldset-D2DdnZJH.js} +1 -1
- package/web/assets/{freemarker2-B_0Gh4L-.js → freemarker2-C0ZqWFaJ.js} +1 -1
- package/web/assets/{handlebars-D7Oha3sz.js → handlebars-BVe8_lVF.js} +1 -1
- package/web/assets/{html-BDq-ql3l.js → html-C4O3aMfr.js} +1 -1
- package/web/assets/{htmlMode-DVuzX8LQ.js → htmlMode-CBb2rFbg.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-pdHiRywD.js → image-flash-lightning.svg-BkbxYhT7.js} +1 -1
- package/web/assets/{image-picture-flower.svg-BJarIt4k.js → image-picture-flower.svg-S9ZTdXKD.js} +1 -1
- package/web/assets/{index-Dk3h9927.js → index-DXG0UWd7.js} +5 -5
- package/web/assets/{interface-alert-exclamation-diamond.svg-CZUf0TtR.js → interface-alert-exclamation-diamond.svg-slOqXVGS.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B1qbmOvN.js → interface-alert-exclamation-triangle-warning.svg-IBqAKxii.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-DAH6I2Rk.js → interface-alert-information-circle.svg-CAuUmEYS.js} +1 -1
- package/web/assets/{interface-award-crown.svg-Co-un_0E.js → interface-award-crown.svg-DpSkbQWy.js} +1 -1
- package/web/assets/{interface-bookmark.svg-BoAQ5WAA.js → interface-bookmark-tag.svg-Z8XyZfV3.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DCeSL4gX.js → interface-bookmark.svg-73odYUkg.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-KM5TH_vj.js → interface-calendar-date-one.svg-Chbvhktw.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-2t-0H_Nl.js → interface-content-book-open-pages.svg-DtbXnLmc.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-Dx9U_5uo.js → interface-content-book-page.svg-Cp0yvdE3.js} +1 -1
- package/web/assets/{interface-content-file.svg-CW_9AGDl.js → interface-content-file.svg-B8qEoW3J.js} +1 -1
- package/web/assets/interface-content-folder.svg-D-7Uh3Nj.js +1 -0
- package/web/assets/{interface-content-folder.svg-DgU2KM8d.js → interface-content-folder.svg-RtFW9_dY.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-BXCY1wtO.js → interface-copy-clipboard.svg-DNVQlJtH.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-lJsBgdnd.js → interface-edit-attachment.svg-ByJXy13r.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-N_us2_d_.js → interface-edit-binocular.svg-BzqoQhEm.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-GlHpAoND.js → interface-edit-magic-wand.svg-B2jJjUCa.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-B3s6tHLT.js → interface-edit-tool-paint-roller.svg-CsmEn_3J.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BhJltLPD.js → interface-edit-tool-pencil.svg-EoIfNl6X.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-CAC4qrCL.js → interface-favorite-award.svg-DK7nXxHO.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-5dLI18uT.js → interface-favorite-flag.svg-CUxrgPTZ.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-DAWMqUS8.js → interface-favorite-heart.svg-DJLIEXPA.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-C9DICFBb.js → interface-favorite-star.svg-BTMuuwpH.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-zD5-a95u.js → interface-favorite-stars-sparkles.svg-DzXLAVN_.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-BzAAQM0v.js → interface-hierarchy-flowchart.svg-Blcn6Alf.js} +1 -1
- package/web/assets/{interface-home-house.svg-CB_mzszz.js → interface-home-house.svg-C9qdQODR.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BUMVlOAE.js → interface-hyperlink.svg-Dpxu8Mi-.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-wPXo2pZW.js → interface-lighting-brightness.svg-CzG8cyLV.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-Qj4fLj5D.js → interface-lock-closed.svg-CIo6OHa5.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-PaaFsUiU.js → interface-lock-open-unlock.svg-BKlPnOqW.js} +1 -1
- package/web/assets/{interface-login-key.svg-By-IZ7EH.js → interface-login-key.svg-BGXa5pEM.js} +1 -1
- package/web/assets/{interface-search.svg-D1s5Gsyk.js → interface-search.svg-BbKjr02A.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BIjZVOwf.js → interface-setting-cog.svg-Bt3FCaKU.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-1oPoDdIL.js → interface-share-megaphone-bullhorn.svg-DGEK_3ut.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-B07UdOH6.js → interface-share-rocket.svg-Cacv74v_.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-AxSAr1JP.js → interface-share-satellite.svg-BxY5GCYl.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-ghRJYkXG.js → interface-share-space-ship.svg-eD9oPxtU.js} +1 -1
- package/web/assets/{interface-share.svg-jVvV5wf9.js → interface-share.svg-Vw77iGOE.js} +1 -1
- package/web/assets/{interface-signal-square.svg-BB8KvxNI.js → interface-signal-square.svg-MBnH4qfE.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-Bt_vXLib.js → interface-time-clock-circle.svg-DMBUb3Je.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-CqsWXDx3.js → interface-time-hour-glass.svg-DWWA8acs.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-DfZzhCkI.js → interface-users-multiple.svg-BV1Uryss.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-B5X37fBl.js → interface-weather-moon.svg-CmeBs_AF.js} +1 -1
- package/web/assets/{javascript-DWxMn_QC.js → javascript-loLv5ccj.js} +1 -1
- package/web/assets/{jsonMode-BWOZzM3d.js → jsonMode-Ccfv_oEC.js} +1 -1
- package/web/assets/{liquid-B0VtIwJX.js → liquid-CZM5JLhR.js} +1 -1
- package/web/assets/{lspLanguageFeatures-DXFZNqLk.js → lspLanguageFeatures-8aPIDaYP.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-DVi8sPM-.js → mail-chat-bubble-square.svg-CjB8OHYm.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-Dlk35rWL.js → mail-send-email-paper-airplane.svg-DCXvRWfq.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DpEE06QS.js → mail-send-envelope.svg-DViXfBW4.js} +1 -1
- package/web/assets/{mdx-XjdLNHo4.js → mdx-DD66jse7.js} +1 -1
- package/web/assets/{message-TASaHoOx.js → message-W1PyOQ2F.js} +1 -1
- package/web/assets/{minus-BO9HwuhK.js → minus-DQ8gbTH4.js} +1 -1
- package/web/assets/{modal-Dadfdblm.js → modal-BKCymPJF.js} +1 -1
- package/web/assets/modal-h4FcaVWO.js +1 -0
- package/web/assets/{money-cashier-receipt.svg-D3T1gdZO.js → money-cashier-receipt.svg-fS3WhKxU.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-RhoFWz8z.js → money-currency-dollar-pay.svg-B-GlcpqK.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BENn1K5R.js → money-graph-arrow-increase.svg-Gse-yru4.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-COGPwero.js → money-graph-bar-chart-increase.svg-1VA_oFdg.js} +1 -1
- package/web/assets/{multiselect-QI9V-o7t.js → multiselect-IRSCnT5b.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-CyQJuX9P.js → nature-ecology-leaf.svg-DkQ6sg3p.js} +1 -1
- package/web/assets/{password-68lVUSdj.js → password-fS1Zrv0S.js} +1 -1
- package/web/assets/{phone-telephone.svg-Cp49xUlu.js → phone-telephone.svg-CCcT_kGH.js} +1 -1
- package/web/assets/{plus-CtAUJUu2.js → plus-CV7Y3O7a.js} +1 -1
- package/web/assets/process.store-BwyNcvM-.js +1 -0
- package/web/assets/{programming-bug.svg-DJCw-G7S.js → programming-bug.svg-BE5fk7c1.js} +1 -1
- package/web/assets/{programming-cloud.svg-Dawch6nl.js → programming-cloud.svg-SHfXron-.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-wM3gh9nl.js → programming-computer-database-server.svg-CppInGi7.js} +1 -1
- package/web/assets/{programming-computer-database.svg-B-CBQ4FN.js → programming-computer-database.svg-CiWXlyk7.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-B8K3IYUP.js → programming-module-four-layout.svg-CCYXwyRe.js} +1 -1
- package/web/assets/{programming-module-three.svg-BVHpxetj.js → programming-module-three.svg-tMvh2U39.js} +1 -1
- package/web/assets/{programming-module.svg-CXID9wrd.js → programming-module.svg-DHNPcHmg.js} +1 -1
- package/web/assets/{programming-script-code.svg-lSz-9Xfp.js → programming-script-code.svg-W2dFQC3x.js} +1 -1
- package/web/assets/{python-DL0o4ZFa.js → python-B33HGCYv.js} +1 -1
- package/web/assets/{razor-1T_DtFYV.js → razor-DyfLMTvL.js} +1 -1
- package/web/assets/router-C327JbK8.js +1 -0
- package/web/assets/settings-scope-BfLU4Vh1.js +1 -0
- package/web/assets/{settings.store-xvHd8xGI.js → settings.store-DGPxpcXI.js} +1 -1
- package/web/assets/{shopping-cart.svg-TZA8HEQB.js → shopping-cart.svg-CUlE9ljA.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-CRGiXfBk.js → shopping-gift-present.svg-C8u4Spqt.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-BuEMZoGf.js → shopping-shipping-box-parcel-package.svg-Bco5k-Nn.js} +1 -1
- package/web/assets/{src-Dy-bHT95.js → src-CAYTBWKf.js} +1 -1
- package/web/assets/{src-Be-L2-AH.js → src-CoFNXAUF.js} +1 -1
- package/web/assets/{tabpanel-BP3edJSv.js → tabpanel-D_dp6bvn.js} +1 -1
- package/web/assets/{tag-new-circle.svg-CsOt9-U5.js → tag-new-circle.svg-DZbLZE7D.js} +1 -1
- package/web/assets/{toggleswitch-B49OhBFD.js → toggleswitch-Clnqsa0l.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-BTR5ahca.js → travel-map-earth-globe.svg-CNPF8kpi.js} +1 -1
- package/web/assets/trpc-vHs3bLVN.js +1 -0
- package/web/assets/{tsMode-BUrbWgsu.js → tsMode-CdyXgNAL.js} +1 -1
- package/web/assets/{typescript-tKGzqX3Z.js → typescript-BKtVeeAK.js} +1 -1
- package/web/assets/useAiChatDrawer-BXQhtMZ9.js +1 -0
- package/web/assets/{useCloudOrg-0VY86rgI.js → useCloudOrg-Bb7wM-wB.js} +1 -1
- package/web/assets/{useProjectCatalog-C2BH8Bnr.js → useProjectCatalog-DMSIWolF.js} +1 -1
- package/web/assets/{xml-4CdtJV3Y.js → xml-Ci4zJYqg.js} +1 -1
- package/web/assets/{yaml-Cj7LK0oJ.js → yaml-DmvRZHVF.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-4EKOSJBR.js +0 -7
- package/chunk-F7HMKPFB.js.map +0 -1
- package/src-7YQHXQ6L.js.map +0 -1
- package/web/assets/AiChatPage-DvPM0b-g.js +0 -1
- package/web/assets/AppLayout-CxU9x6en.js +0 -1
- package/web/assets/CloudAccountPage-CzUpIjdc.js +0 -1
- package/web/assets/EditorIcon-zS3bHXe1.css +0 -1
- package/web/assets/SettingsPage-ClNw9uEA.js +0 -2063
- package/web/assets/WikiPage-C9Bruew6.js +0 -1
- package/web/assets/auth-errors-CU6pB2jP.js +0 -1
- package/web/assets/interface-content-folder.svg-C9_1n23c.js +0 -1
- package/web/assets/modal-B0K9qtIb.js +0 -1
- package/web/assets/process.store-DkO9CCEs.js +0 -1
- package/web/assets/router-BKOiPGCa.js +0 -1
- package/web/assets/settings-scope-DrVQNSTC.js +0 -1
- package/web/assets/trpc-hOuUVUMw.js +0 -1
- package/web/assets/useAiChatDrawer-CZS0RLp8.js +0 -1
- /package/{agent-manager-4EKOSJBR.js.map → agent-manager-5SQNJICJ.js.map} +0 -0
package/index.js
CHANGED
|
@@ -270,7 +270,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
|
|
|
270
270
|
});
|
|
271
271
|
}
|
|
272
272
|
async function main() {
|
|
273
|
-
const { createLocalServer, pullEnv, PullEnvError, registerInstance } = await import("./src-
|
|
273
|
+
const { createLocalServer, pullEnv, PullEnvError, registerInstance } = await import("./src-RY3O6RUF.js");
|
|
274
274
|
if (isPullEnv) {
|
|
275
275
|
if (!serviceArg) {
|
|
276
276
|
console.error("Error: --service (-s) is required with --pull-env");
|
package/package.json
CHANGED
|
@@ -95,8 +95,9 @@ import {
|
|
|
95
95
|
traefikManager,
|
|
96
96
|
vaultFor,
|
|
97
97
|
vaultIdOfRoot,
|
|
98
|
+
wasRead,
|
|
98
99
|
writeEntity
|
|
99
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-OOQ74RCO.js";
|
|
100
101
|
|
|
101
102
|
// ../server/src/create-server.ts
|
|
102
103
|
import express from "express";
|
|
@@ -179,7 +180,7 @@ var ApiKeyStore = class {
|
|
|
179
180
|
}
|
|
180
181
|
async persistFile(isPublic, owner) {
|
|
181
182
|
const path = await this.filePath(isPublic, owner);
|
|
182
|
-
if (this.unreadable.get(owner)?.size && await hasChangedSinceRead(path)) {
|
|
183
|
+
if (this.unreadable.get(owner)?.size && wasRead(path) && await hasChangedSinceRead(path)) {
|
|
183
184
|
console.warn(
|
|
184
185
|
`[api-key-store] ${path} a chang\xE9 depuis sa lecture \u2014 \xE9criture ignor\xE9e pour ne pas \xE9craser une r\xE9paration faite en dehors du serveur.`
|
|
185
186
|
);
|
|
@@ -539,8 +540,8 @@ import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
|
539
540
|
// ../server/src/services/project-store.ts
|
|
540
541
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
541
542
|
import { EventEmitter } from "events";
|
|
542
|
-
import { readFile as
|
|
543
|
-
import { join as
|
|
543
|
+
import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3, rm } from "fs/promises";
|
|
544
|
+
import { join as join4 } from "path";
|
|
544
545
|
|
|
545
546
|
// ../server/src/utils/ensure-data-gitignore.ts
|
|
546
547
|
import { writeFile as writeFile2 } from "fs/promises";
|
|
@@ -585,8 +586,108 @@ async function ensureDataGitignore(dataDir) {
|
|
|
585
586
|
await writeFile2(gitignorePath, GITIGNORE_CONTENT, "utf-8");
|
|
586
587
|
}
|
|
587
588
|
|
|
589
|
+
// ../server/src/services/project-path-store.ts
|
|
590
|
+
import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, stat } from "fs/promises";
|
|
591
|
+
import { isAbsolute, join as join3, resolve } from "path";
|
|
592
|
+
var FILENAME = "project-paths.json";
|
|
593
|
+
var ProjectPathStore = class {
|
|
594
|
+
paths = null;
|
|
595
|
+
async load() {
|
|
596
|
+
if (this.paths) return this.paths;
|
|
597
|
+
try {
|
|
598
|
+
const raw = await readFile2(machineFilePath(FILENAME), "utf-8");
|
|
599
|
+
const parsed = JSON.parse(raw);
|
|
600
|
+
this.paths = isPathMap(parsed) ? parsed : {};
|
|
601
|
+
} catch {
|
|
602
|
+
this.paths = {};
|
|
603
|
+
}
|
|
604
|
+
return this.paths;
|
|
605
|
+
}
|
|
606
|
+
async persist() {
|
|
607
|
+
await mkdir2(machineRoot(), { recursive: true });
|
|
608
|
+
const filePath = machineFilePath(FILENAME);
|
|
609
|
+
const tmpPath = `${filePath}.tmp`;
|
|
610
|
+
await writeFile3(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
|
|
611
|
+
await rename2(tmpPath, filePath);
|
|
612
|
+
await chmod2(filePath, 384);
|
|
613
|
+
}
|
|
614
|
+
/** The directory chosen for this project, or null while it has none. */
|
|
615
|
+
async get(ref) {
|
|
616
|
+
const paths = await this.load();
|
|
617
|
+
return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
|
|
618
|
+
}
|
|
619
|
+
async all() {
|
|
620
|
+
return { ...await this.load() };
|
|
621
|
+
}
|
|
622
|
+
/**
|
|
623
|
+
* The project already placed in this directory, if any other one is.
|
|
624
|
+
*
|
|
625
|
+
* Answers with the key as stored — the couple, or the bare id for an entry an
|
|
626
|
+
* older version wrote — which is enough to say "taken" and to name it.
|
|
627
|
+
*/
|
|
628
|
+
async projectAt(path, exclude) {
|
|
629
|
+
const target = resolve(path);
|
|
630
|
+
const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
|
|
631
|
+
for (const [key, dir] of Object.entries(await this.load())) {
|
|
632
|
+
if (!excluded.includes(key) && resolve(dir) === target) return key;
|
|
633
|
+
}
|
|
634
|
+
return null;
|
|
635
|
+
}
|
|
636
|
+
async set(ref, path) {
|
|
637
|
+
if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
|
|
638
|
+
const paths = await this.load();
|
|
639
|
+
delete paths[ref.id];
|
|
640
|
+
paths[projectKey(ref)] = resolve(path);
|
|
641
|
+
await this.persist();
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Faire suivre le répertoire quand un projet change d'organisation.
|
|
645
|
+
*
|
|
646
|
+
* La clé est le couple `(organisation, projet)` : publier un projet local le
|
|
647
|
+
* fait passer de `local:<id>` à `<org>:<id>`, et l'entrée d'avant cesse alors
|
|
648
|
+
* de répondre — `get` ne retombe que sur l'identifiant nu, forme héritée, pas
|
|
649
|
+
* sur `local:<id>`. Le projet se retrouvait donc sans emplacement connu juste
|
|
650
|
+
* après avoir été publié, alors que ses sources n'avaient pas bougé d'un
|
|
651
|
+
* octet.
|
|
652
|
+
*/
|
|
653
|
+
async relocate(from, to) {
|
|
654
|
+
const paths = await this.load();
|
|
655
|
+
const previous = paths[projectKey(from)] ?? paths[from.id];
|
|
656
|
+
if (!previous) return;
|
|
657
|
+
delete paths[projectKey(from)];
|
|
658
|
+
delete paths[from.id];
|
|
659
|
+
paths[projectKey(to)] = previous;
|
|
660
|
+
await this.persist();
|
|
661
|
+
}
|
|
662
|
+
async clear(ref) {
|
|
663
|
+
const paths = await this.load();
|
|
664
|
+
const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
|
|
665
|
+
if (keys.length === 0) return;
|
|
666
|
+
for (const key of keys) delete paths[key];
|
|
667
|
+
await this.persist();
|
|
668
|
+
}
|
|
669
|
+
/** Test seam: forget what was read from disk. */
|
|
670
|
+
reset() {
|
|
671
|
+
this.paths = null;
|
|
672
|
+
}
|
|
673
|
+
};
|
|
674
|
+
function isPathMap(value) {
|
|
675
|
+
return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
|
|
676
|
+
}
|
|
677
|
+
async function holdsRuneyaProject(path) {
|
|
678
|
+
for (const candidate of ["project.json", "projects.json"]) {
|
|
679
|
+
try {
|
|
680
|
+
await stat(join3(path, ".runeya", candidate));
|
|
681
|
+
return true;
|
|
682
|
+
} catch {
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
return false;
|
|
686
|
+
}
|
|
687
|
+
var projectPathStore = new ProjectPathStore();
|
|
688
|
+
|
|
588
689
|
// ../server/src/services/project-store.ts
|
|
589
|
-
var
|
|
690
|
+
var FILENAME2 = "project.json";
|
|
590
691
|
var LEGACY_FILENAME = "projects.json";
|
|
591
692
|
function toDiskForm(project) {
|
|
592
693
|
const { activeEnvironmentId: _runtimeOnly, ...rest } = project;
|
|
@@ -596,14 +697,14 @@ async function readLocalProject() {
|
|
|
596
697
|
const root = localVaultRoot();
|
|
597
698
|
let current = null;
|
|
598
699
|
try {
|
|
599
|
-
const raw = await
|
|
700
|
+
const raw = await readFile3(join4(root, FILENAME2), "utf-8");
|
|
600
701
|
const parsed = ProjectSchema.safeParse(JSON.parse(raw));
|
|
601
702
|
if (parsed.success) current = parsed.data;
|
|
602
703
|
} catch {
|
|
603
704
|
}
|
|
604
705
|
let legacy;
|
|
605
706
|
try {
|
|
606
|
-
legacy = JSON.parse(await
|
|
707
|
+
legacy = JSON.parse(await readFile3(join4(root, LEGACY_FILENAME), "utf-8"));
|
|
607
708
|
} catch {
|
|
608
709
|
return { local: current, strayCloud: [] };
|
|
609
710
|
}
|
|
@@ -613,7 +714,7 @@ async function readLocalProject() {
|
|
|
613
714
|
if (locals.length > 1) {
|
|
614
715
|
const names = locals.map((p) => `"${p.name}" (${p.id})`).join(", ");
|
|
615
716
|
throw new Error(
|
|
616
|
-
`${
|
|
717
|
+
`${join4(root, LEGACY_FILENAME)} holds ${locals.length} local projects: ${names}. A directory now holds a single local project \u2014 move the others to their own directory, or into an organization, then start again.`
|
|
617
718
|
);
|
|
618
719
|
}
|
|
619
720
|
return { local: locals[0] ?? null, strayCloud };
|
|
@@ -622,7 +723,7 @@ async function readCloudProjects() {
|
|
|
622
723
|
const found = [];
|
|
623
724
|
for (const { orgId, projectId, root } of await listCloudVaults()) {
|
|
624
725
|
try {
|
|
625
|
-
const raw = await
|
|
726
|
+
const raw = await readFile3(join4(root, FILENAME2), "utf-8");
|
|
626
727
|
const parsed = ProjectSchema.safeParse({ ...JSON.parse(raw), id: projectId, orgId });
|
|
627
728
|
if (parsed.success) found.push({ project: parsed.data, root });
|
|
628
729
|
} catch {
|
|
@@ -652,13 +753,13 @@ var ProjectStore = class {
|
|
|
652
753
|
/** Emits `'saved'` after every persisted mutation, for the cloud sync bridge. */
|
|
653
754
|
events = new EventEmitter();
|
|
654
755
|
getFilePath(root = localVaultRoot()) {
|
|
655
|
-
return
|
|
756
|
+
return join4(root, FILENAME2);
|
|
656
757
|
}
|
|
657
758
|
async writeAtomic(filePath, data) {
|
|
658
759
|
const tmpPath = filePath + ".tmp";
|
|
659
|
-
await
|
|
660
|
-
await
|
|
661
|
-
await
|
|
760
|
+
await writeFile4(tmpPath, data, "utf-8");
|
|
761
|
+
await rename3(tmpPath, filePath);
|
|
762
|
+
await chmod3(filePath, 384);
|
|
662
763
|
}
|
|
663
764
|
/** Adopt a project read from disk, remembering which vault it came from. */
|
|
664
765
|
async absorb(p, root) {
|
|
@@ -733,10 +834,10 @@ var ProjectStore = class {
|
|
|
733
834
|
await rm(this.getFilePath(), { force: true }).catch(() => {
|
|
734
835
|
});
|
|
735
836
|
}
|
|
736
|
-
await
|
|
837
|
+
await rename3(join4(localVaultRoot(), LEGACY_FILENAME), join4(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
|
|
737
838
|
});
|
|
738
839
|
for (const { project, root } of cloud) {
|
|
739
|
-
await
|
|
840
|
+
await mkdir3(root, { recursive: true });
|
|
740
841
|
await this.writeAtomic(this.getFilePath(root), JSON.stringify(toDiskForm(project), null, 2));
|
|
741
842
|
setProjectVault(project, root);
|
|
742
843
|
}
|
|
@@ -864,6 +965,7 @@ var ProjectStore = class {
|
|
|
864
965
|
this.projects.delete(key);
|
|
865
966
|
await this.save();
|
|
866
967
|
await this.discardVault(project);
|
|
968
|
+
await projectPathStore.clear(project);
|
|
867
969
|
return true;
|
|
868
970
|
}
|
|
869
971
|
/**
|
|
@@ -897,6 +999,7 @@ var ProjectStore = class {
|
|
|
897
999
|
forgetProject(project);
|
|
898
1000
|
await serviceStore.forgetLocally(project.serviceIds ?? []);
|
|
899
1001
|
await environmentStore.forgetByProject(project.id);
|
|
1002
|
+
await projectPathStore.clear(project);
|
|
900
1003
|
}
|
|
901
1004
|
/** All projects linked to a given organization (for the sync bridge). */
|
|
902
1005
|
async listByOrg(orgId) {
|
|
@@ -1025,9 +1128,9 @@ var projectStore = new ProjectStore();
|
|
|
1025
1128
|
registerProjectLoader(() => projectStore.list().then(() => void 0));
|
|
1026
1129
|
|
|
1027
1130
|
// ../server/src/services/environment-overrides-store.ts
|
|
1028
|
-
import { readFile as
|
|
1029
|
-
import { dirname as dirname2, join as
|
|
1030
|
-
var
|
|
1131
|
+
import { readFile as readFile4, writeFile as writeFile5, rename as rename4, mkdir as mkdir4, chmod as chmod4 } from "fs/promises";
|
|
1132
|
+
import { dirname as dirname2, join as join5 } from "path";
|
|
1133
|
+
var FILENAME3 = "environment-overrides.json";
|
|
1031
1134
|
var EnvironmentOverridesStore = class {
|
|
1032
1135
|
data = {};
|
|
1033
1136
|
loaded = false;
|
|
@@ -1059,11 +1162,11 @@ var EnvironmentOverridesStore = class {
|
|
|
1059
1162
|
async rootFor(variableId) {
|
|
1060
1163
|
const root = await environmentStore.rootOfVariable(variableId);
|
|
1061
1164
|
if (root) return root;
|
|
1062
|
-
return this.roots.get(variableId) ?? dirname2(await keyedFilePath(
|
|
1165
|
+
return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME3));
|
|
1063
1166
|
}
|
|
1064
1167
|
/** Where earlier versions kept them: read once, rewritten to their vaults. */
|
|
1065
1168
|
getLegacyFilePath() {
|
|
1066
|
-
return legacyMachineFilePath(
|
|
1169
|
+
return legacyMachineFilePath(FILENAME3);
|
|
1067
1170
|
}
|
|
1068
1171
|
/**
|
|
1069
1172
|
* Read every vault, then the places older versions used.
|
|
@@ -1079,13 +1182,13 @@ var EnvironmentOverridesStore = class {
|
|
|
1079
1182
|
const roots = await allVaultRoots();
|
|
1080
1183
|
const sources = [
|
|
1081
1184
|
this.getLegacyFilePath(),
|
|
1082
|
-
await keyedFilePath(
|
|
1083
|
-
...roots.map((root) =>
|
|
1185
|
+
await keyedFilePath(FILENAME3),
|
|
1186
|
+
...roots.map((root) => join5(root, FILENAME3))
|
|
1084
1187
|
];
|
|
1085
1188
|
for (const path of sources) {
|
|
1086
1189
|
let parsed;
|
|
1087
1190
|
try {
|
|
1088
|
-
parsed = JSON.parse(await
|
|
1191
|
+
parsed = JSON.parse(await readFile4(path, "utf-8"));
|
|
1089
1192
|
} catch {
|
|
1090
1193
|
continue;
|
|
1091
1194
|
}
|
|
@@ -1136,12 +1239,12 @@ var EnvironmentOverridesStore = class {
|
|
|
1136
1239
|
this.diskEncryptedSlots,
|
|
1137
1240
|
extractEncryptedVariableSlots(encrypted)
|
|
1138
1241
|
);
|
|
1139
|
-
await
|
|
1140
|
-
const path =
|
|
1242
|
+
await mkdir4(root, { recursive: true });
|
|
1243
|
+
const path = join5(root, FILENAME3);
|
|
1141
1244
|
const tmpPath = path + ".tmp";
|
|
1142
|
-
await
|
|
1143
|
-
await
|
|
1144
|
-
await
|
|
1245
|
+
await writeFile5(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
|
|
1246
|
+
await rename4(tmpPath, path);
|
|
1247
|
+
await chmod4(path, 384);
|
|
1145
1248
|
}
|
|
1146
1249
|
}
|
|
1147
1250
|
/**
|
|
@@ -1573,7 +1676,7 @@ var EnvironmentResolver = class {
|
|
|
1573
1676
|
var environmentResolver = new EnvironmentResolver();
|
|
1574
1677
|
|
|
1575
1678
|
// ../server/src/services/audit-service.ts
|
|
1576
|
-
import { appendFile, readFile as
|
|
1679
|
+
import { appendFile, readFile as readFile5, stat as stat2, rename as rename5, unlink, readdir, mkdir as mkdir5 } from "fs/promises";
|
|
1577
1680
|
var AUDIT_FILENAME = "audit.log";
|
|
1578
1681
|
var MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
1579
1682
|
var MAX_AGE_DAYS = 30;
|
|
@@ -1593,7 +1696,7 @@ var AuditService = class {
|
|
|
1593
1696
|
const line = JSON.stringify(record) + "\n";
|
|
1594
1697
|
const filepath = this.getFilePath();
|
|
1595
1698
|
try {
|
|
1596
|
-
await
|
|
1699
|
+
await mkdir5(machineRoot(), { recursive: true });
|
|
1597
1700
|
await appendFile(filepath, line, "utf-8");
|
|
1598
1701
|
await this.rotateIfNeeded();
|
|
1599
1702
|
} catch (err) {
|
|
@@ -1606,7 +1709,7 @@ var AuditService = class {
|
|
|
1606
1709
|
const filepath = this.getFilePath();
|
|
1607
1710
|
let lines;
|
|
1608
1711
|
try {
|
|
1609
|
-
const content = await
|
|
1712
|
+
const content = await readFile5(filepath, "utf-8");
|
|
1610
1713
|
lines = content.trim().split("\n").filter(Boolean);
|
|
1611
1714
|
} catch {
|
|
1612
1715
|
return { entries: [], total: 0 };
|
|
@@ -1637,9 +1740,9 @@ var AuditService = class {
|
|
|
1637
1740
|
async rotateIfNeeded() {
|
|
1638
1741
|
const filepath = this.getFilePath();
|
|
1639
1742
|
try {
|
|
1640
|
-
const stats = await
|
|
1743
|
+
const stats = await stat2(filepath);
|
|
1641
1744
|
if (stats.size > MAX_FILE_SIZE) {
|
|
1642
|
-
await
|
|
1745
|
+
await rename5(filepath, this.getRotatedPath());
|
|
1643
1746
|
}
|
|
1644
1747
|
} catch {
|
|
1645
1748
|
}
|
|
@@ -1664,87 +1767,6 @@ var AuditService = class {
|
|
|
1664
1767
|
};
|
|
1665
1768
|
var auditService = new AuditService();
|
|
1666
1769
|
|
|
1667
|
-
// ../server/src/services/project-path-store.ts
|
|
1668
|
-
import { readFile as readFile5, writeFile as writeFile5, rename as rename5, mkdir as mkdir5, chmod as chmod4, stat as stat2 } from "fs/promises";
|
|
1669
|
-
import { isAbsolute, join as join5, resolve } from "path";
|
|
1670
|
-
var FILENAME3 = "project-paths.json";
|
|
1671
|
-
var ProjectPathStore = class {
|
|
1672
|
-
paths = null;
|
|
1673
|
-
async load() {
|
|
1674
|
-
if (this.paths) return this.paths;
|
|
1675
|
-
try {
|
|
1676
|
-
const raw = await readFile5(machineFilePath(FILENAME3), "utf-8");
|
|
1677
|
-
const parsed = JSON.parse(raw);
|
|
1678
|
-
this.paths = isPathMap(parsed) ? parsed : {};
|
|
1679
|
-
} catch {
|
|
1680
|
-
this.paths = {};
|
|
1681
|
-
}
|
|
1682
|
-
return this.paths;
|
|
1683
|
-
}
|
|
1684
|
-
async persist() {
|
|
1685
|
-
await mkdir5(machineRoot(), { recursive: true });
|
|
1686
|
-
const filePath = machineFilePath(FILENAME3);
|
|
1687
|
-
const tmpPath = `${filePath}.tmp`;
|
|
1688
|
-
await writeFile5(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
|
|
1689
|
-
await rename5(tmpPath, filePath);
|
|
1690
|
-
await chmod4(filePath, 384);
|
|
1691
|
-
}
|
|
1692
|
-
/** The directory chosen for this project, or null while it has none. */
|
|
1693
|
-
async get(ref) {
|
|
1694
|
-
const paths = await this.load();
|
|
1695
|
-
return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
|
|
1696
|
-
}
|
|
1697
|
-
async all() {
|
|
1698
|
-
return { ...await this.load() };
|
|
1699
|
-
}
|
|
1700
|
-
/**
|
|
1701
|
-
* The project already placed in this directory, if any other one is.
|
|
1702
|
-
*
|
|
1703
|
-
* Answers with the key as stored — the couple, or the bare id for an entry an
|
|
1704
|
-
* older version wrote — which is enough to say "taken" and to name it.
|
|
1705
|
-
*/
|
|
1706
|
-
async projectAt(path, exclude) {
|
|
1707
|
-
const target = resolve(path);
|
|
1708
|
-
const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
|
|
1709
|
-
for (const [key, dir] of Object.entries(await this.load())) {
|
|
1710
|
-
if (!excluded.includes(key) && resolve(dir) === target) return key;
|
|
1711
|
-
}
|
|
1712
|
-
return null;
|
|
1713
|
-
}
|
|
1714
|
-
async set(ref, path) {
|
|
1715
|
-
if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
|
|
1716
|
-
const paths = await this.load();
|
|
1717
|
-
delete paths[ref.id];
|
|
1718
|
-
paths[projectKey(ref)] = resolve(path);
|
|
1719
|
-
await this.persist();
|
|
1720
|
-
}
|
|
1721
|
-
async clear(ref) {
|
|
1722
|
-
const paths = await this.load();
|
|
1723
|
-
const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
|
|
1724
|
-
if (keys.length === 0) return;
|
|
1725
|
-
for (const key of keys) delete paths[key];
|
|
1726
|
-
await this.persist();
|
|
1727
|
-
}
|
|
1728
|
-
/** Test seam: forget what was read from disk. */
|
|
1729
|
-
reset() {
|
|
1730
|
-
this.paths = null;
|
|
1731
|
-
}
|
|
1732
|
-
};
|
|
1733
|
-
function isPathMap(value) {
|
|
1734
|
-
return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
|
|
1735
|
-
}
|
|
1736
|
-
async function holdsRuneyaProject(path) {
|
|
1737
|
-
for (const candidate of ["project.json", "projects.json"]) {
|
|
1738
|
-
try {
|
|
1739
|
-
await stat2(join5(path, ".runeya", candidate));
|
|
1740
|
-
return true;
|
|
1741
|
-
} catch {
|
|
1742
|
-
}
|
|
1743
|
-
}
|
|
1744
|
-
return false;
|
|
1745
|
-
}
|
|
1746
|
-
var projectPathStore = new ProjectPathStore();
|
|
1747
|
-
|
|
1748
1770
|
// ../server/src/services/org-keys.ts
|
|
1749
1771
|
import { mkdir as mkdir6 } from "fs/promises";
|
|
1750
1772
|
|
|
@@ -1969,9 +1991,7 @@ async function installOrgKey(orgId, key, masterPassword) {
|
|
|
1969
1991
|
}
|
|
1970
1992
|
var OrgVaultUnreadableError = class extends Error {
|
|
1971
1993
|
constructor(orgId) {
|
|
1972
|
-
super(
|
|
1973
|
-
"Cette organisation est chiffr\xE9e par une cl\xE9 que cette machine n'a pas. Demandez la cl\xE9 \xE0 un membre et adoptez-la avant d'ouvrir ses projets."
|
|
1974
|
-
);
|
|
1994
|
+
super("ORG_VAULT_UNREADABLE");
|
|
1975
1995
|
this.orgId = orgId;
|
|
1976
1996
|
this.name = "OrgVaultUnreadableError";
|
|
1977
1997
|
}
|
|
@@ -3670,7 +3690,8 @@ ${new Error("trace").stack}`
|
|
|
3670
3690
|
}
|
|
3671
3691
|
const stale = /* @__PURE__ */ new Set();
|
|
3672
3692
|
for (const root of byRoot.keys()) {
|
|
3673
|
-
|
|
3693
|
+
const path = join9(root, FILENAME5);
|
|
3694
|
+
if (wasRead(path) && await hasChangedSinceRead(path)) stale.add(root);
|
|
3674
3695
|
}
|
|
3675
3696
|
for (const [root, data] of byRoot) {
|
|
3676
3697
|
const filePath = join9(root, FILENAME5);
|
|
@@ -3936,6 +3957,33 @@ var setupRouter = router({
|
|
|
3936
3957
|
}))
|
|
3937
3958
|
};
|
|
3938
3959
|
}),
|
|
3960
|
+
/**
|
|
3961
|
+
* Éprouver une clé contre le canari du coffre, sans passer par le cloud.
|
|
3962
|
+
*
|
|
3963
|
+
* `cloudSync.checkOrgKey` interroge le canari publié par l'organisation :
|
|
3964
|
+
* il prouve « cette clé est celle de l'organisation », mais il exige que le
|
|
3965
|
+
* cloud réponde et que l'organisation y existe encore. Un poste hors ligne —
|
|
3966
|
+
* ou qui reprend un coffre dont l'organisation a disparu côté cloud — n'avait
|
|
3967
|
+
* alors plus aucun moyen de vérifier une clé avant de l'adopter.
|
|
3968
|
+
*
|
|
3969
|
+
* Le coffre porte pourtant son propre canari, écrit en même temps que sa clé.
|
|
3970
|
+
* Attention à ce qu'il dit : il éprouve la clé COURANTE du coffre, donc il ne
|
|
3971
|
+
* répond « oui » que pour celle déjà en place — c'est-à-dire exactement le
|
|
3972
|
+
* cas où l'adoption n'a rien à faire, et qu'elle refuse. Le confondre avec
|
|
3973
|
+
* une validation de la clé à adopter rendait le parcours impossible : vert
|
|
3974
|
+
* quand le geste est inutile, rouge sinon.
|
|
3975
|
+
*/
|
|
3976
|
+
checkOrgKeyLocal: protectedProcedure.input(z7.object({
|
|
3977
|
+
orgId: z7.string().min(1).max(128),
|
|
3978
|
+
keyHex: z7.string().length(64).regex(/^[0-9a-f]+$/i, "Invalid hex format")
|
|
3979
|
+
})).query(async ({ input }) => {
|
|
3980
|
+
const canary = await readVerifyFile(orgVaultRoot(input.orgId));
|
|
3981
|
+
if (!canary) return { isCurrentKey: false, hasCanary: false };
|
|
3982
|
+
return {
|
|
3983
|
+
isCurrentKey: matchesCanary(canary, Buffer.from(input.keyHex, "hex")),
|
|
3984
|
+
hasCanary: true
|
|
3985
|
+
};
|
|
3986
|
+
}),
|
|
3939
3987
|
/**
|
|
3940
3988
|
* Submit and validate encryption key.
|
|
3941
3989
|
* Attempts to decrypt existing data to validate the key.
|
|
@@ -7744,7 +7792,7 @@ function tailTranscript(opts) {
|
|
|
7744
7792
|
|
|
7745
7793
|
// ../server/src/services/ai-runners/claude-pty-runner.ts
|
|
7746
7794
|
async function getAgentManager() {
|
|
7747
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
7795
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-5SQNJICJ.js");
|
|
7748
7796
|
return agentManager2;
|
|
7749
7797
|
}
|
|
7750
7798
|
function buildPtyArgs(params, sessionId, opts) {
|
|
@@ -8397,7 +8445,7 @@ async function shutdownCodexAppServer() {
|
|
|
8397
8445
|
}
|
|
8398
8446
|
}
|
|
8399
8447
|
async function getAgentManager2() {
|
|
8400
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
8448
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-5SQNJICJ.js");
|
|
8401
8449
|
return agentManager2;
|
|
8402
8450
|
}
|
|
8403
8451
|
function parseRuneyaCurlCommand(command) {
|
|
@@ -13565,18 +13613,27 @@ async function orgsToSync() {
|
|
|
13565
13613
|
|
|
13566
13614
|
// ../server/src/services/org-canary.ts
|
|
13567
13615
|
var CanaryUnavailableError = class extends Error {
|
|
13568
|
-
code
|
|
13569
|
-
constructor(
|
|
13570
|
-
super(
|
|
13616
|
+
/** `detail` reste pour les journaux ; le message est le code, pour l'interface. */
|
|
13617
|
+
constructor(detail) {
|
|
13618
|
+
super("CANARY_UNAVAILABLE");
|
|
13619
|
+
this.detail = detail;
|
|
13571
13620
|
this.name = "CanaryUnavailableError";
|
|
13572
13621
|
}
|
|
13622
|
+
code = "CANARY_UNAVAILABLE";
|
|
13573
13623
|
};
|
|
13574
13624
|
var OrgKeyMismatchError = class extends Error {
|
|
13575
13625
|
code = "ORG_KEY_MISMATCH";
|
|
13626
|
+
/**
|
|
13627
|
+
* Le message EST le code, comme partout ailleurs sur ces routes.
|
|
13628
|
+
*
|
|
13629
|
+
* Une phrase écrite ici traverse le serveur telle quelle et s'affiche dans
|
|
13630
|
+
* l'interface sans passer par la traduction : une interface en français
|
|
13631
|
+
* annonçait donc l'échec en anglais, et le texte ne pouvait renvoyer nulle
|
|
13632
|
+
* part puisque le serveur ignore où se trouve l'écran qui répare. Le client
|
|
13633
|
+
* traduit `serverErrors.ORG_KEY_MISMATCH` et nomme le chemin.
|
|
13634
|
+
*/
|
|
13576
13635
|
constructor() {
|
|
13577
|
-
super(
|
|
13578
|
-
"This organization uses a different encryption key. Ask a member for the key already in use, then set it up on this machine before syncing."
|
|
13579
|
-
);
|
|
13636
|
+
super("ORG_KEY_MISMATCH");
|
|
13580
13637
|
this.name = "OrgKeyMismatchError";
|
|
13581
13638
|
}
|
|
13582
13639
|
};
|
|
@@ -14370,8 +14427,10 @@ var CloudSyncBridge = class {
|
|
|
14370
14427
|
}
|
|
14371
14428
|
console.warn(
|
|
14372
14429
|
"[cloud-sync] org %s: could not check the organization key (%s) \u2014 syncing anyway.",
|
|
14430
|
+
// Le message porte désormais le code, destiné à l'interface ; le détail
|
|
14431
|
+
// lisible reste sur l'erreur, et c'est lui qui a sa place dans un log.
|
|
14373
14432
|
link.orgId,
|
|
14374
|
-
err.message
|
|
14433
|
+
err.detail ?? err.message
|
|
14375
14434
|
);
|
|
14376
14435
|
}
|
|
14377
14436
|
this.keyMismatch.delete(link.orgId);
|
|
@@ -14489,7 +14548,7 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
|
|
|
14489
14548
|
throw new Error("La cl\xE9 actuelle de cette organisation n'est pas charg\xE9e.");
|
|
14490
14549
|
}
|
|
14491
14550
|
if (newKey.equals(currentKey)) {
|
|
14492
|
-
throw new Error("
|
|
14551
|
+
throw new Error("ORG_KEY_ALREADY_CURRENT");
|
|
14493
14552
|
}
|
|
14494
14553
|
const machineRootDir = await keyRoot();
|
|
14495
14554
|
await readEncryptedKey(machineRootDir, masterPassword);
|
|
@@ -14648,6 +14707,10 @@ var cloudSyncRouter = router({
|
|
|
14648
14707
|
await cloudSyncBridge.connect({ orgId: input.orgId, cloudUrl: input.cloudUrl });
|
|
14649
14708
|
}
|
|
14650
14709
|
await projectStore.moveToOrg(input.projectId, input.orgId);
|
|
14710
|
+
await projectPathStore.relocate(
|
|
14711
|
+
{ id: input.projectId, orgId: null },
|
|
14712
|
+
{ id: input.projectId, orgId: input.orgId }
|
|
14713
|
+
);
|
|
14651
14714
|
await conversationStore.relocateAll();
|
|
14652
14715
|
try {
|
|
14653
14716
|
await cloudSyncBridge.followProject(input.orgId, input.projectId);
|
|
@@ -17222,4 +17285,4 @@ export {
|
|
|
17222
17285
|
pullEnv,
|
|
17223
17286
|
registerInstance
|
|
17224
17287
|
};
|
|
17225
|
-
//# sourceMappingURL=src-
|
|
17288
|
+
//# sourceMappingURL=src-RY3O6RUF.js.map
|