@runeya/runeya 2.0.59 → 2.0.60
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-NJMLCIVW.js +7 -0
- package/{chunk-F7HMKPFB.js → chunk-WI4NXXWA.js} +4 -2
- package/chunk-WI4NXXWA.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-7YQHXQ6L.js → src-FYMPMNWX.js} +180 -126
- package/src-FYMPMNWX.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-EIqnE2D0.js → AgentScalarChatInterface.vue-B4N4hGIa.js} +1 -1
- package/web/assets/{AgentTerminalPage-5kH1RTj6.js → AgentTerminalPage-COgNEO3l.js} +1 -1
- package/web/assets/AiChatPage-CBccEBhl.js +1 -0
- package/web/assets/{AppLayout-Dj8YOvMQ.css → AppLayout-B1bXTOmv.css} +1 -1
- package/web/assets/AppLayout-Bk_jDJzn.js +1 -0
- package/web/assets/{AuditPage-BrqreO8a.js → AuditPage-CojdnXun.js} +1 -1
- package/web/assets/{CloudAccountPage-DS3ZfENB.js → CloudAccountPage-CaCXJAIU.js} +1 -1
- package/web/assets/CloudAccountPage-CcIXW0EN.js +1 -0
- package/web/assets/{CloudMessagingPage-D8gBnkFY.js → CloudMessagingPage-BWNVhfSj.js} +1 -1
- package/web/assets/{DashboardPage-BiskmF6R.js → DashboardPage-DXCofSRh.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-CtKWj2hx.js → DirectoryPickerDialog-BzGhidJF.js} +1 -1
- package/web/assets/{EditorIcon-B58cXgvK.js → EditorIcon-BXHgGffi.js} +1 -1
- package/web/assets/{EnvironmentForm-DZXx9r78.js → EnvironmentForm-DFxDqfnF.js} +1 -1
- package/web/assets/{EnvironmentFormPage-Dl7pdkEM.js → EnvironmentFormPage-CY11biI5.js} +1 -1
- package/web/assets/{EnvironmentListPage-B0WX_Hq7.js → EnvironmentListPage-b9CjFQXW.js} +1 -1
- package/web/assets/{KanbanBoardPage-CBJs26gZ.js → KanbanBoardPage-BXrTGXwO.js} +3 -3
- package/web/assets/{KanbanListPage-Cz-tlLWA.js → KanbanListPage-BnvCBJ1m.js} +1 -1
- package/web/assets/{LaunchProjectPage-8SDkFiLE.js → LaunchProjectPage-DHjlOFU3.js} +1 -1
- package/web/assets/{LaunchServicesPage-B-ncX3rd.js → LaunchServicesPage-XjPg8Pys.js} +1 -1
- package/web/assets/{LogViewer-BJNqKt3I.js → LogViewer-BcPdl4iU.js} +1 -1
- package/web/assets/{ProcessControls-NA6_my0q.js → ProcessControls-DorabWJQ.js} +1 -1
- package/web/assets/{ProcessDetailPage-6galJRdd.js → ProcessDetailPage-Ch8Jf9rM.js} +1 -1
- package/web/assets/{ProcessMetrics-CUDjJ4s_.js → ProcessMetrics-COGHKb4a.js} +1 -1
- package/web/assets/{ProjectDetailPage-DKHoFXjW.js → ProjectDetailPage-BmU8DBNe.js} +1 -1
- package/web/assets/{ProjectListPage-C1xSP6Bq.js → ProjectListPage-JD1ekolM.js} +1 -1
- package/web/assets/{RandomJobTestPage-BAuT49yE.js → RandomJobTestPage-Cc-DhTsH.js} +1 -1
- package/web/assets/{ScenarioEditorPage-CROCV83A.js → ScenarioEditorPage-Bny2HqiP.js} +1 -1
- package/web/assets/{SendToChatDialog-BfaLVfzw.js → SendToChatDialog-B4CWWMCy.js} +1 -1
- package/web/assets/{ServiceControlsBar-DE0In-jH.js → ServiceControlsBar-D6mfDvfN.js} +1 -1
- package/web/assets/{ServiceDetailPage-0iIv9RqU.js → ServiceDetailPage-D2WqU25G.js} +1 -1
- package/web/assets/{ServiceFormPage-D-tLX8jE.js → ServiceFormPage-BcA2kArc.js} +1 -1
- package/web/assets/{SettingsPage-ySsQCeYE.css → SettingsPage-AOrh0K7b.css} +1 -1
- package/web/assets/SettingsPage-oAjjAaeD.js +2063 -0
- package/web/assets/{UnlockPage-flNU5Iky.js → UnlockPage-CRYhFCMk.js} +1 -1
- package/web/assets/{VariablesTable-BnCSYLD4.js → VariablesTable-DyWAE6Na.js} +1 -1
- package/web/assets/{VaultMigrationPage-BSv9anTA.js → VaultMigrationPage-Dsu3akRc.js} +1 -1
- package/web/assets/{VersionBadge-zyKx_N_w.js → VersionBadge-CVTn4GGc.js} +1 -1
- package/web/assets/WikiPage-DGMyydUW.js +1 -0
- package/web/assets/{WikiView-BZZ5mybT.js → WikiView-BArE3tFo.js} +1 -1
- package/web/assets/{add-scalar-classes-DZb8OCPH.js → add-scalar-classes-jKlPbn1S.js} +3 -3
- package/web/assets/auth-errors-BfeIh95U.js +1 -0
- package/web/assets/{autocomplete-DGLJp6Xx.js → autocomplete-CI8vAiwp.js} +1 -1
- package/web/assets/{basic-shape-diamond.svg-D7lBpWcu.js → basic-shape-diamond.svg-Cp5z3Mbu.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-BIDPqohs.js → basic-shape-hexagon.svg-RBwhM6k0.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-iWUF3CNK.js → basic-shape-primary-circle-ellipse-round.svg-itOztFgT.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-BQy8tY9i.js → basic-shape-primary-square-rectangle.svg-CwfKFMzE.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-Dcov5U2N.js → basic-shape-shield.svg-BdZgtv30.js} +1 -1
- package/web/assets/{browser-DrMkXWE3.js → browser-BXJrZHue.js} +1 -1
- package/web/assets/{browser-Dc4T6GL2.js → browser-D7pIWkfx.js} +1 -1
- package/web/assets/{card-DADdd2-i.js → card-DR0T843h.js} +1 -1
- package/web/assets/{checkbox-By0TwAz_.js → checkbox-DDIPahTi.js} +1 -1
- package/web/assets/{chip-W5HkUiZA.js → chip-DM8SNVy0.js} +1 -1
- package/web/assets/{client-Be8SiY8s.js → client-BAdezrlT.js} +1 -1
- package/web/assets/{cloud-chat.store-GKWq9kin.js → cloud-chat.store-Xf5_YRwv.js} +1 -1
- package/web/assets/{cloud-session-CJ4n3dbT.js → cloud-session-B1zFsfcb.js} +1 -1
- package/web/assets/{column-P4Yoqttz.js → column-Bo2upVbJ.js} +1 -1
- package/web/assets/{computer-device-desktop-monitor.svg-BjBC4Q_B.js → computer-device-desktop-monitor.svg-DOS9l00c.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-C7H8X0sb.js → computer-device-desktop.svg-C-ttSSSz.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-GDU5987h.js → computer-device-laptop.svg-DDFbbX6c.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-BcWod8vA.js → computer-device-mobile-phone-android-samsung-back.svg-BZ-Gdh6W.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Cj58lY5g.js → computer-device-mobile-phone-android-samsung.svg-COcp4u1j.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CtJM7Ul_.js → computer-device-mobile-phone-iphone-x-back.svg-CDmKBZ0s.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-BiSi4riW.js → computer-device-mobile-phone-iphone-x.svg-QBXd3bAz.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-BAMVDwHH.js → computer-device-mobile-tablet-touch.svg-CiqMqHgJ.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-quWU62em.js → computer-device-mobile-tablet.svg-DXWdkli1.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-eoCbNWkF.js → computer-device-network-ethernet-cat6.svg-pd7Pp62E.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-AR5jmH9w.js → computer-device-network-lan-www.svg-hwQtK4mS.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-C3-i1o4I.js → computer-device-network-wifi-connection.svg-BKKSNm-Y.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-D8_62H2U.js → computer-device-network-wifi-router.svg-BJ7429Gw.js} +1 -1
- package/web/assets/{cssMode-CfDickSl.js → cssMode-DvqPjG-s.js} +1 -1
- package/web/assets/{divider-DOwWKUnp.js → divider-DmUVUD7N.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-bmj1315r.js → ecology-science-erlenmeyer-flask.svg-CkvWyk06.js} +1 -1
- package/web/assets/{fieldset-CM6GY5DX.js → fieldset-RNy_epe7.js} +1 -1
- package/web/assets/{freemarker2-B_0Gh4L-.js → freemarker2-B_05mUOO.js} +1 -1
- package/web/assets/{handlebars-D7Oha3sz.js → handlebars-mwqq4hMg.js} +1 -1
- package/web/assets/{html-BDq-ql3l.js → html-DenFU_p3.js} +1 -1
- package/web/assets/{htmlMode-DVuzX8LQ.js → htmlMode-Dd5pT6tW.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-pdHiRywD.js → image-flash-lightning.svg-FRUbJgX5.js} +1 -1
- package/web/assets/{image-picture-flower.svg-BJarIt4k.js → image-picture-flower.svg-BBS3ExSo.js} +1 -1
- package/web/assets/{index-Dk3h9927.js → index-FACKwVg6.js} +5 -5
- package/web/assets/{interface-alert-exclamation-diamond.svg-CZUf0TtR.js → interface-alert-exclamation-diamond.svg-CBN8Pmeh.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B1qbmOvN.js → interface-alert-exclamation-triangle-warning.svg-siL3-gmT.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-DAH6I2Rk.js → interface-alert-information-circle.svg-CynXrOR8.js} +1 -1
- package/web/assets/{interface-award-crown.svg-Co-un_0E.js → interface-award-crown.svg-BakRoInk.js} +1 -1
- package/web/assets/{interface-bookmark.svg-BoAQ5WAA.js → interface-bookmark-tag.svg-BJnfvdzr.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-DCeSL4gX.js → interface-bookmark.svg-BnQK5mgu.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-KM5TH_vj.js → interface-calendar-date-one.svg-fO1_AoDh.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-2t-0H_Nl.js → interface-content-book-open-pages.svg-DqRdJvqM.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-Dx9U_5uo.js → interface-content-book-page.svg-Byeli3di.js} +1 -1
- package/web/assets/{interface-content-file.svg-CW_9AGDl.js → interface-content-file.svg-ViG_2r3n.js} +1 -1
- package/web/assets/interface-content-folder.svg-VCUetvJn.js +1 -0
- package/web/assets/{interface-content-folder.svg-DgU2KM8d.js → interface-content-folder.svg-tRv9Gs6q.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-BXCY1wtO.js → interface-copy-clipboard.svg-BF2p1SyS.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-lJsBgdnd.js → interface-edit-attachment.svg-CcxMnh8E.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-N_us2_d_.js → interface-edit-binocular.svg-CIzctb_f.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-GlHpAoND.js → interface-edit-magic-wand.svg-LoGhgGEZ.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-B3s6tHLT.js → interface-edit-tool-paint-roller.svg-C6oZCjMJ.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BhJltLPD.js → interface-edit-tool-pencil.svg-D3lpq_xl.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-CAC4qrCL.js → interface-favorite-award.svg-CrXhhhyj.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-5dLI18uT.js → interface-favorite-flag.svg-ccF9TDui.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-DAWMqUS8.js → interface-favorite-heart.svg-gu7br9DK.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-C9DICFBb.js → interface-favorite-star.svg-B7E60ZEr.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-zD5-a95u.js → interface-favorite-stars-sparkles.svg-DOEwwXiW.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-BzAAQM0v.js → interface-hierarchy-flowchart.svg-tLEmCbmQ.js} +1 -1
- package/web/assets/{interface-home-house.svg-CB_mzszz.js → interface-home-house.svg-Cf1KxixQ.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BUMVlOAE.js → interface-hyperlink.svg-DAT8qW_c.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-wPXo2pZW.js → interface-lighting-brightness.svg-BX6x0ddS.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-Qj4fLj5D.js → interface-lock-closed.svg-DrFxkZYe.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-PaaFsUiU.js → interface-lock-open-unlock.svg-Dr0jcfmK.js} +1 -1
- package/web/assets/{interface-login-key.svg-By-IZ7EH.js → interface-login-key.svg-CeXnvMKQ.js} +1 -1
- package/web/assets/{interface-search.svg-D1s5Gsyk.js → interface-search.svg-CBYRLqmj.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BIjZVOwf.js → interface-setting-cog.svg-pIrK77it.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-1oPoDdIL.js → interface-share-megaphone-bullhorn.svg-CXENaufm.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-B07UdOH6.js → interface-share-rocket.svg-BUEDGolV.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-AxSAr1JP.js → interface-share-satellite.svg-CDbsJhFP.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-ghRJYkXG.js → interface-share-space-ship.svg-Byg2lwxp.js} +1 -1
- package/web/assets/{interface-share.svg-jVvV5wf9.js → interface-share.svg-DS5PCA34.js} +1 -1
- package/web/assets/{interface-signal-square.svg-BB8KvxNI.js → interface-signal-square.svg-pcqPb4nM.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-Bt_vXLib.js → interface-time-clock-circle.svg-Cy9A8GRt.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-CqsWXDx3.js → interface-time-hour-glass.svg-GWa1W0Xp.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-DfZzhCkI.js → interface-users-multiple.svg-CBEbE-7A.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-B5X37fBl.js → interface-weather-moon.svg-DeinSoJT.js} +1 -1
- package/web/assets/{javascript-DWxMn_QC.js → javascript-H6N3mcld.js} +1 -1
- package/web/assets/{jsonMode-BWOZzM3d.js → jsonMode-CtZxIxon.js} +1 -1
- package/web/assets/{liquid-B0VtIwJX.js → liquid-DvIoyIx6.js} +1 -1
- package/web/assets/{lspLanguageFeatures-DXFZNqLk.js → lspLanguageFeatures-BEUuqX73.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-DVi8sPM-.js → mail-chat-bubble-square.svg-cxMRc1aj.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-Dlk35rWL.js → mail-send-email-paper-airplane.svg-Dg_l-5Iw.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DpEE06QS.js → mail-send-envelope.svg-C1zNJdsK.js} +1 -1
- package/web/assets/{mdx-XjdLNHo4.js → mdx-BmQyOder.js} +1 -1
- package/web/assets/{message-TASaHoOx.js → message-B83bhy06.js} +1 -1
- package/web/assets/{minus-BO9HwuhK.js → minus-CBo2o8C-.js} +1 -1
- package/web/assets/modal-CaMkh9Za.js +1 -0
- package/web/assets/{modal-Dadfdblm.js → modal-tQ8Gy3Qc.js} +1 -1
- package/web/assets/{money-cashier-receipt.svg-D3T1gdZO.js → money-cashier-receipt.svg-HRh_0Aog.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-RhoFWz8z.js → money-currency-dollar-pay.svg-Gaqcc4gO.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BENn1K5R.js → money-graph-arrow-increase.svg-DlfNGxjc.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-COGPwero.js → money-graph-bar-chart-increase.svg-lCsn857J.js} +1 -1
- package/web/assets/{multiselect-QI9V-o7t.js → multiselect-BWxLa59l.js} +1 -1
- package/web/assets/{nature-ecology-leaf.svg-CyQJuX9P.js → nature-ecology-leaf.svg-CqS_HbDW.js} +1 -1
- package/web/assets/{password-68lVUSdj.js → password-cPgUvkOA.js} +1 -1
- package/web/assets/{phone-telephone.svg-Cp49xUlu.js → phone-telephone.svg-BQJVa8xN.js} +1 -1
- package/web/assets/{plus-CtAUJUu2.js → plus-CbJTMelx.js} +1 -1
- package/web/assets/process.store-BIdF5bYJ.js +1 -0
- package/web/assets/{programming-bug.svg-DJCw-G7S.js → programming-bug.svg-DHSOyTDX.js} +1 -1
- package/web/assets/{programming-cloud.svg-Dawch6nl.js → programming-cloud.svg-BN2VfYj9.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-wM3gh9nl.js → programming-computer-database-server.svg-DgLqhsmV.js} +1 -1
- package/web/assets/{programming-computer-database.svg-B-CBQ4FN.js → programming-computer-database.svg-Rv3dMbvo.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-B8K3IYUP.js → programming-module-four-layout.svg-BL9bWIfn.js} +1 -1
- package/web/assets/{programming-module-three.svg-BVHpxetj.js → programming-module-three.svg-Iu-KnX2V.js} +1 -1
- package/web/assets/{programming-module.svg-CXID9wrd.js → programming-module.svg-BcCF6qxu.js} +1 -1
- package/web/assets/{programming-script-code.svg-lSz-9Xfp.js → programming-script-code.svg-XJSdxMcg.js} +1 -1
- package/web/assets/{python-DL0o4ZFa.js → python-cAYLyvNp.js} +1 -1
- package/web/assets/{razor-1T_DtFYV.js → razor-BHgxVMOQ.js} +1 -1
- package/web/assets/router-CK12uURM.js +1 -0
- package/web/assets/settings-scope-f9Gi_Zg9.js +1 -0
- package/web/assets/{settings.store-xvHd8xGI.js → settings.store-CSquriN7.js} +1 -1
- package/web/assets/{shopping-cart.svg-TZA8HEQB.js → shopping-cart.svg-BueYQs5x.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-CRGiXfBk.js → shopping-gift-present.svg-TrpUap-y.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-BuEMZoGf.js → shopping-shipping-box-parcel-package.svg-DAccGtLa.js} +1 -1
- package/web/assets/{src-Be-L2-AH.js → src-DYi4G92i.js} +1 -1
- package/web/assets/{src-Dy-bHT95.js → src-DyMz5bgz.js} +1 -1
- package/web/assets/{tabpanel-BP3edJSv.js → tabpanel-MnA7nEtj.js} +1 -1
- package/web/assets/{tag-new-circle.svg-CsOt9-U5.js → tag-new-circle.svg-D9oUh7ff.js} +1 -1
- package/web/assets/{toggleswitch-B49OhBFD.js → toggleswitch-loQuxYj9.js} +1 -1
- package/web/assets/{travel-map-earth-globe.svg-BTR5ahca.js → travel-map-earth-globe.svg-DqCfEOX7.js} +1 -1
- package/web/assets/trpc-BlNlu2jq.js +1 -0
- package/web/assets/{tsMode-BUrbWgsu.js → tsMode-CP_fyAf1.js} +1 -1
- package/web/assets/{typescript-tKGzqX3Z.js → typescript-dDBinZo_.js} +1 -1
- package/web/assets/useAiChatDrawer-eoSxh6yR.js +1 -0
- package/web/assets/{useCloudOrg-0VY86rgI.js → useCloudOrg-CP0cj8Kq.js} +1 -1
- package/web/assets/{useProjectCatalog-C2BH8Bnr.js → useProjectCatalog-a-o-oRlg.js} +1 -1
- package/web/assets/{xml-4CdtJV3Y.js → xml-DlpU-b_9.js} +1 -1
- package/web/assets/{yaml-Cj7LK0oJ.js → yaml-CKngaf3N.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/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-NJMLCIVW.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-FYMPMNWX.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
|
@@ -96,7 +96,7 @@ import {
|
|
|
96
96
|
vaultFor,
|
|
97
97
|
vaultIdOfRoot,
|
|
98
98
|
writeEntity
|
|
99
|
-
} from "./chunk-
|
|
99
|
+
} from "./chunk-WI4NXXWA.js";
|
|
100
100
|
|
|
101
101
|
// ../server/src/create-server.ts
|
|
102
102
|
import express from "express";
|
|
@@ -539,8 +539,8 @@ import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
|
539
539
|
// ../server/src/services/project-store.ts
|
|
540
540
|
import { randomUUID as randomUUID2 } from "crypto";
|
|
541
541
|
import { EventEmitter } from "events";
|
|
542
|
-
import { readFile as
|
|
543
|
-
import { join as
|
|
542
|
+
import { readFile as readFile3, writeFile as writeFile4, rename as rename3, mkdir as mkdir3, chmod as chmod3, rm } from "fs/promises";
|
|
543
|
+
import { join as join4 } from "path";
|
|
544
544
|
|
|
545
545
|
// ../server/src/utils/ensure-data-gitignore.ts
|
|
546
546
|
import { writeFile as writeFile2 } from "fs/promises";
|
|
@@ -585,8 +585,108 @@ async function ensureDataGitignore(dataDir) {
|
|
|
585
585
|
await writeFile2(gitignorePath, GITIGNORE_CONTENT, "utf-8");
|
|
586
586
|
}
|
|
587
587
|
|
|
588
|
+
// ../server/src/services/project-path-store.ts
|
|
589
|
+
import { readFile as readFile2, writeFile as writeFile3, rename as rename2, mkdir as mkdir2, chmod as chmod2, stat } from "fs/promises";
|
|
590
|
+
import { isAbsolute, join as join3, resolve } from "path";
|
|
591
|
+
var FILENAME = "project-paths.json";
|
|
592
|
+
var ProjectPathStore = class {
|
|
593
|
+
paths = null;
|
|
594
|
+
async load() {
|
|
595
|
+
if (this.paths) return this.paths;
|
|
596
|
+
try {
|
|
597
|
+
const raw = await readFile2(machineFilePath(FILENAME), "utf-8");
|
|
598
|
+
const parsed = JSON.parse(raw);
|
|
599
|
+
this.paths = isPathMap(parsed) ? parsed : {};
|
|
600
|
+
} catch {
|
|
601
|
+
this.paths = {};
|
|
602
|
+
}
|
|
603
|
+
return this.paths;
|
|
604
|
+
}
|
|
605
|
+
async persist() {
|
|
606
|
+
await mkdir2(machineRoot(), { recursive: true });
|
|
607
|
+
const filePath = machineFilePath(FILENAME);
|
|
608
|
+
const tmpPath = `${filePath}.tmp`;
|
|
609
|
+
await writeFile3(tmpPath, JSON.stringify(this.paths ?? {}, null, 2), "utf-8");
|
|
610
|
+
await rename2(tmpPath, filePath);
|
|
611
|
+
await chmod2(filePath, 384);
|
|
612
|
+
}
|
|
613
|
+
/** The directory chosen for this project, or null while it has none. */
|
|
614
|
+
async get(ref) {
|
|
615
|
+
const paths = await this.load();
|
|
616
|
+
return paths[projectKey(ref)] ?? paths[ref.id] ?? null;
|
|
617
|
+
}
|
|
618
|
+
async all() {
|
|
619
|
+
return { ...await this.load() };
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* The project already placed in this directory, if any other one is.
|
|
623
|
+
*
|
|
624
|
+
* Answers with the key as stored — the couple, or the bare id for an entry an
|
|
625
|
+
* older version wrote — which is enough to say "taken" and to name it.
|
|
626
|
+
*/
|
|
627
|
+
async projectAt(path, exclude) {
|
|
628
|
+
const target = resolve(path);
|
|
629
|
+
const excluded = exclude ? [projectKey(exclude), exclude.id] : [];
|
|
630
|
+
for (const [key, dir] of Object.entries(await this.load())) {
|
|
631
|
+
if (!excluded.includes(key) && resolve(dir) === target) return key;
|
|
632
|
+
}
|
|
633
|
+
return null;
|
|
634
|
+
}
|
|
635
|
+
async set(ref, path) {
|
|
636
|
+
if (!isAbsolute(path)) throw new Error("Le chemin du projet doit \xEAtre absolu");
|
|
637
|
+
const paths = await this.load();
|
|
638
|
+
delete paths[ref.id];
|
|
639
|
+
paths[projectKey(ref)] = resolve(path);
|
|
640
|
+
await this.persist();
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Faire suivre le répertoire quand un projet change d'organisation.
|
|
644
|
+
*
|
|
645
|
+
* La clé est le couple `(organisation, projet)` : publier un projet local le
|
|
646
|
+
* fait passer de `local:<id>` à `<org>:<id>`, et l'entrée d'avant cesse alors
|
|
647
|
+
* de répondre — `get` ne retombe que sur l'identifiant nu, forme héritée, pas
|
|
648
|
+
* sur `local:<id>`. Le projet se retrouvait donc sans emplacement connu juste
|
|
649
|
+
* après avoir été publié, alors que ses sources n'avaient pas bougé d'un
|
|
650
|
+
* octet.
|
|
651
|
+
*/
|
|
652
|
+
async relocate(from, to) {
|
|
653
|
+
const paths = await this.load();
|
|
654
|
+
const previous = paths[projectKey(from)] ?? paths[from.id];
|
|
655
|
+
if (!previous) return;
|
|
656
|
+
delete paths[projectKey(from)];
|
|
657
|
+
delete paths[from.id];
|
|
658
|
+
paths[projectKey(to)] = previous;
|
|
659
|
+
await this.persist();
|
|
660
|
+
}
|
|
661
|
+
async clear(ref) {
|
|
662
|
+
const paths = await this.load();
|
|
663
|
+
const keys = [projectKey(ref), ref.id].filter((k) => k in paths);
|
|
664
|
+
if (keys.length === 0) return;
|
|
665
|
+
for (const key of keys) delete paths[key];
|
|
666
|
+
await this.persist();
|
|
667
|
+
}
|
|
668
|
+
/** Test seam: forget what was read from disk. */
|
|
669
|
+
reset() {
|
|
670
|
+
this.paths = null;
|
|
671
|
+
}
|
|
672
|
+
};
|
|
673
|
+
function isPathMap(value) {
|
|
674
|
+
return !!value && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((v) => typeof v === "string");
|
|
675
|
+
}
|
|
676
|
+
async function holdsRuneyaProject(path) {
|
|
677
|
+
for (const candidate of ["project.json", "projects.json"]) {
|
|
678
|
+
try {
|
|
679
|
+
await stat(join3(path, ".runeya", candidate));
|
|
680
|
+
return true;
|
|
681
|
+
} catch {
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
return false;
|
|
685
|
+
}
|
|
686
|
+
var projectPathStore = new ProjectPathStore();
|
|
687
|
+
|
|
588
688
|
// ../server/src/services/project-store.ts
|
|
589
|
-
var
|
|
689
|
+
var FILENAME2 = "project.json";
|
|
590
690
|
var LEGACY_FILENAME = "projects.json";
|
|
591
691
|
function toDiskForm(project) {
|
|
592
692
|
const { activeEnvironmentId: _runtimeOnly, ...rest } = project;
|
|
@@ -596,14 +696,14 @@ async function readLocalProject() {
|
|
|
596
696
|
const root = localVaultRoot();
|
|
597
697
|
let current = null;
|
|
598
698
|
try {
|
|
599
|
-
const raw = await
|
|
699
|
+
const raw = await readFile3(join4(root, FILENAME2), "utf-8");
|
|
600
700
|
const parsed = ProjectSchema.safeParse(JSON.parse(raw));
|
|
601
701
|
if (parsed.success) current = parsed.data;
|
|
602
702
|
} catch {
|
|
603
703
|
}
|
|
604
704
|
let legacy;
|
|
605
705
|
try {
|
|
606
|
-
legacy = JSON.parse(await
|
|
706
|
+
legacy = JSON.parse(await readFile3(join4(root, LEGACY_FILENAME), "utf-8"));
|
|
607
707
|
} catch {
|
|
608
708
|
return { local: current, strayCloud: [] };
|
|
609
709
|
}
|
|
@@ -613,7 +713,7 @@ async function readLocalProject() {
|
|
|
613
713
|
if (locals.length > 1) {
|
|
614
714
|
const names = locals.map((p) => `"${p.name}" (${p.id})`).join(", ");
|
|
615
715
|
throw new Error(
|
|
616
|
-
`${
|
|
716
|
+
`${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
717
|
);
|
|
618
718
|
}
|
|
619
719
|
return { local: locals[0] ?? null, strayCloud };
|
|
@@ -622,7 +722,7 @@ async function readCloudProjects() {
|
|
|
622
722
|
const found = [];
|
|
623
723
|
for (const { orgId, projectId, root } of await listCloudVaults()) {
|
|
624
724
|
try {
|
|
625
|
-
const raw = await
|
|
725
|
+
const raw = await readFile3(join4(root, FILENAME2), "utf-8");
|
|
626
726
|
const parsed = ProjectSchema.safeParse({ ...JSON.parse(raw), id: projectId, orgId });
|
|
627
727
|
if (parsed.success) found.push({ project: parsed.data, root });
|
|
628
728
|
} catch {
|
|
@@ -652,13 +752,13 @@ var ProjectStore = class {
|
|
|
652
752
|
/** Emits `'saved'` after every persisted mutation, for the cloud sync bridge. */
|
|
653
753
|
events = new EventEmitter();
|
|
654
754
|
getFilePath(root = localVaultRoot()) {
|
|
655
|
-
return
|
|
755
|
+
return join4(root, FILENAME2);
|
|
656
756
|
}
|
|
657
757
|
async writeAtomic(filePath, data) {
|
|
658
758
|
const tmpPath = filePath + ".tmp";
|
|
659
|
-
await
|
|
660
|
-
await
|
|
661
|
-
await
|
|
759
|
+
await writeFile4(tmpPath, data, "utf-8");
|
|
760
|
+
await rename3(tmpPath, filePath);
|
|
761
|
+
await chmod3(filePath, 384);
|
|
662
762
|
}
|
|
663
763
|
/** Adopt a project read from disk, remembering which vault it came from. */
|
|
664
764
|
async absorb(p, root) {
|
|
@@ -733,10 +833,10 @@ var ProjectStore = class {
|
|
|
733
833
|
await rm(this.getFilePath(), { force: true }).catch(() => {
|
|
734
834
|
});
|
|
735
835
|
}
|
|
736
|
-
await
|
|
836
|
+
await rename3(join4(localVaultRoot(), LEGACY_FILENAME), join4(localVaultRoot(), LEGACY_FILENAME + ".bak")).catch(() => {
|
|
737
837
|
});
|
|
738
838
|
for (const { project, root } of cloud) {
|
|
739
|
-
await
|
|
839
|
+
await mkdir3(root, { recursive: true });
|
|
740
840
|
await this.writeAtomic(this.getFilePath(root), JSON.stringify(toDiskForm(project), null, 2));
|
|
741
841
|
setProjectVault(project, root);
|
|
742
842
|
}
|
|
@@ -864,6 +964,7 @@ var ProjectStore = class {
|
|
|
864
964
|
this.projects.delete(key);
|
|
865
965
|
await this.save();
|
|
866
966
|
await this.discardVault(project);
|
|
967
|
+
await projectPathStore.clear(project);
|
|
867
968
|
return true;
|
|
868
969
|
}
|
|
869
970
|
/**
|
|
@@ -897,6 +998,7 @@ var ProjectStore = class {
|
|
|
897
998
|
forgetProject(project);
|
|
898
999
|
await serviceStore.forgetLocally(project.serviceIds ?? []);
|
|
899
1000
|
await environmentStore.forgetByProject(project.id);
|
|
1001
|
+
await projectPathStore.clear(project);
|
|
900
1002
|
}
|
|
901
1003
|
/** All projects linked to a given organization (for the sync bridge). */
|
|
902
1004
|
async listByOrg(orgId) {
|
|
@@ -1025,9 +1127,9 @@ var projectStore = new ProjectStore();
|
|
|
1025
1127
|
registerProjectLoader(() => projectStore.list().then(() => void 0));
|
|
1026
1128
|
|
|
1027
1129
|
// ../server/src/services/environment-overrides-store.ts
|
|
1028
|
-
import { readFile as
|
|
1029
|
-
import { dirname as dirname2, join as
|
|
1030
|
-
var
|
|
1130
|
+
import { readFile as readFile4, writeFile as writeFile5, rename as rename4, mkdir as mkdir4, chmod as chmod4 } from "fs/promises";
|
|
1131
|
+
import { dirname as dirname2, join as join5 } from "path";
|
|
1132
|
+
var FILENAME3 = "environment-overrides.json";
|
|
1031
1133
|
var EnvironmentOverridesStore = class {
|
|
1032
1134
|
data = {};
|
|
1033
1135
|
loaded = false;
|
|
@@ -1059,11 +1161,11 @@ var EnvironmentOverridesStore = class {
|
|
|
1059
1161
|
async rootFor(variableId) {
|
|
1060
1162
|
const root = await environmentStore.rootOfVariable(variableId);
|
|
1061
1163
|
if (root) return root;
|
|
1062
|
-
return this.roots.get(variableId) ?? dirname2(await keyedFilePath(
|
|
1164
|
+
return this.roots.get(variableId) ?? dirname2(await keyedFilePath(FILENAME3));
|
|
1063
1165
|
}
|
|
1064
1166
|
/** Where earlier versions kept them: read once, rewritten to their vaults. */
|
|
1065
1167
|
getLegacyFilePath() {
|
|
1066
|
-
return legacyMachineFilePath(
|
|
1168
|
+
return legacyMachineFilePath(FILENAME3);
|
|
1067
1169
|
}
|
|
1068
1170
|
/**
|
|
1069
1171
|
* Read every vault, then the places older versions used.
|
|
@@ -1079,13 +1181,13 @@ var EnvironmentOverridesStore = class {
|
|
|
1079
1181
|
const roots = await allVaultRoots();
|
|
1080
1182
|
const sources = [
|
|
1081
1183
|
this.getLegacyFilePath(),
|
|
1082
|
-
await keyedFilePath(
|
|
1083
|
-
...roots.map((root) =>
|
|
1184
|
+
await keyedFilePath(FILENAME3),
|
|
1185
|
+
...roots.map((root) => join5(root, FILENAME3))
|
|
1084
1186
|
];
|
|
1085
1187
|
for (const path of sources) {
|
|
1086
1188
|
let parsed;
|
|
1087
1189
|
try {
|
|
1088
|
-
parsed = JSON.parse(await
|
|
1190
|
+
parsed = JSON.parse(await readFile4(path, "utf-8"));
|
|
1089
1191
|
} catch {
|
|
1090
1192
|
continue;
|
|
1091
1193
|
}
|
|
@@ -1136,12 +1238,12 @@ var EnvironmentOverridesStore = class {
|
|
|
1136
1238
|
this.diskEncryptedSlots,
|
|
1137
1239
|
extractEncryptedVariableSlots(encrypted)
|
|
1138
1240
|
);
|
|
1139
|
-
await
|
|
1140
|
-
const path =
|
|
1241
|
+
await mkdir4(root, { recursive: true });
|
|
1242
|
+
const path = join5(root, FILENAME3);
|
|
1141
1243
|
const tmpPath = path + ".tmp";
|
|
1142
|
-
await
|
|
1143
|
-
await
|
|
1144
|
-
await
|
|
1244
|
+
await writeFile5(tmpPath, JSON.stringify(encrypted, null, 2), "utf-8");
|
|
1245
|
+
await rename4(tmpPath, path);
|
|
1246
|
+
await chmod4(path, 384);
|
|
1145
1247
|
}
|
|
1146
1248
|
}
|
|
1147
1249
|
/**
|
|
@@ -1573,7 +1675,7 @@ var EnvironmentResolver = class {
|
|
|
1573
1675
|
var environmentResolver = new EnvironmentResolver();
|
|
1574
1676
|
|
|
1575
1677
|
// ../server/src/services/audit-service.ts
|
|
1576
|
-
import { appendFile, readFile as
|
|
1678
|
+
import { appendFile, readFile as readFile5, stat as stat2, rename as rename5, unlink, readdir, mkdir as mkdir5 } from "fs/promises";
|
|
1577
1679
|
var AUDIT_FILENAME = "audit.log";
|
|
1578
1680
|
var MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
1579
1681
|
var MAX_AGE_DAYS = 30;
|
|
@@ -1593,7 +1695,7 @@ var AuditService = class {
|
|
|
1593
1695
|
const line = JSON.stringify(record) + "\n";
|
|
1594
1696
|
const filepath = this.getFilePath();
|
|
1595
1697
|
try {
|
|
1596
|
-
await
|
|
1698
|
+
await mkdir5(machineRoot(), { recursive: true });
|
|
1597
1699
|
await appendFile(filepath, line, "utf-8");
|
|
1598
1700
|
await this.rotateIfNeeded();
|
|
1599
1701
|
} catch (err) {
|
|
@@ -1606,7 +1708,7 @@ var AuditService = class {
|
|
|
1606
1708
|
const filepath = this.getFilePath();
|
|
1607
1709
|
let lines;
|
|
1608
1710
|
try {
|
|
1609
|
-
const content = await
|
|
1711
|
+
const content = await readFile5(filepath, "utf-8");
|
|
1610
1712
|
lines = content.trim().split("\n").filter(Boolean);
|
|
1611
1713
|
} catch {
|
|
1612
1714
|
return { entries: [], total: 0 };
|
|
@@ -1637,9 +1739,9 @@ var AuditService = class {
|
|
|
1637
1739
|
async rotateIfNeeded() {
|
|
1638
1740
|
const filepath = this.getFilePath();
|
|
1639
1741
|
try {
|
|
1640
|
-
const stats = await
|
|
1742
|
+
const stats = await stat2(filepath);
|
|
1641
1743
|
if (stats.size > MAX_FILE_SIZE) {
|
|
1642
|
-
await
|
|
1744
|
+
await rename5(filepath, this.getRotatedPath());
|
|
1643
1745
|
}
|
|
1644
1746
|
} catch {
|
|
1645
1747
|
}
|
|
@@ -1664,87 +1766,6 @@ var AuditService = class {
|
|
|
1664
1766
|
};
|
|
1665
1767
|
var auditService = new AuditService();
|
|
1666
1768
|
|
|
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
1769
|
// ../server/src/services/org-keys.ts
|
|
1749
1770
|
import { mkdir as mkdir6 } from "fs/promises";
|
|
1750
1771
|
|
|
@@ -1969,9 +1990,7 @@ async function installOrgKey(orgId, key, masterPassword) {
|
|
|
1969
1990
|
}
|
|
1970
1991
|
var OrgVaultUnreadableError = class extends Error {
|
|
1971
1992
|
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
|
-
);
|
|
1993
|
+
super("ORG_VAULT_UNREADABLE");
|
|
1975
1994
|
this.orgId = orgId;
|
|
1976
1995
|
this.name = "OrgVaultUnreadableError";
|
|
1977
1996
|
}
|
|
@@ -3936,6 +3955,26 @@ var setupRouter = router({
|
|
|
3936
3955
|
}))
|
|
3937
3956
|
};
|
|
3938
3957
|
}),
|
|
3958
|
+
/**
|
|
3959
|
+
* Éprouver une clé contre le canari du coffre, sans passer par le cloud.
|
|
3960
|
+
*
|
|
3961
|
+
* `cloudSync.checkOrgKey` interroge le canari publié par l'organisation :
|
|
3962
|
+
* il prouve « cette clé est celle de l'organisation », mais il exige que le
|
|
3963
|
+
* cloud réponde et que l'organisation y existe encore. Un poste hors ligne —
|
|
3964
|
+
* ou qui reprend un coffre dont l'organisation a disparu côté cloud — n'avait
|
|
3965
|
+
* alors plus aucun moyen de vérifier une clé avant de l'adopter.
|
|
3966
|
+
*
|
|
3967
|
+
* Le coffre porte pourtant son propre canari, écrit en même temps que sa clé.
|
|
3968
|
+
* Il répond à la question qui compte ici : cette clé ouvre-t-elle CE coffre ?
|
|
3969
|
+
*/
|
|
3970
|
+
checkOrgKeyLocal: protectedProcedure.input(z7.object({
|
|
3971
|
+
orgId: z7.string().min(1).max(128),
|
|
3972
|
+
keyHex: z7.string().length(64).regex(/^[0-9a-f]+$/i, "Invalid hex format")
|
|
3973
|
+
})).query(async ({ input }) => {
|
|
3974
|
+
const canary = await readVerifyFile(orgVaultRoot(input.orgId));
|
|
3975
|
+
if (!canary) return { matches: false, hasCanary: false };
|
|
3976
|
+
return { matches: matchesCanary(canary, Buffer.from(input.keyHex, "hex")), hasCanary: true };
|
|
3977
|
+
}),
|
|
3939
3978
|
/**
|
|
3940
3979
|
* Submit and validate encryption key.
|
|
3941
3980
|
* Attempts to decrypt existing data to validate the key.
|
|
@@ -7744,7 +7783,7 @@ function tailTranscript(opts) {
|
|
|
7744
7783
|
|
|
7745
7784
|
// ../server/src/services/ai-runners/claude-pty-runner.ts
|
|
7746
7785
|
async function getAgentManager() {
|
|
7747
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
7786
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-NJMLCIVW.js");
|
|
7748
7787
|
return agentManager2;
|
|
7749
7788
|
}
|
|
7750
7789
|
function buildPtyArgs(params, sessionId, opts) {
|
|
@@ -8397,7 +8436,7 @@ async function shutdownCodexAppServer() {
|
|
|
8397
8436
|
}
|
|
8398
8437
|
}
|
|
8399
8438
|
async function getAgentManager2() {
|
|
8400
|
-
const { agentManager: agentManager2 } = await import("./agent-manager-
|
|
8439
|
+
const { agentManager: agentManager2 } = await import("./agent-manager-NJMLCIVW.js");
|
|
8401
8440
|
return agentManager2;
|
|
8402
8441
|
}
|
|
8403
8442
|
function parseRuneyaCurlCommand(command) {
|
|
@@ -13565,18 +13604,27 @@ async function orgsToSync() {
|
|
|
13565
13604
|
|
|
13566
13605
|
// ../server/src/services/org-canary.ts
|
|
13567
13606
|
var CanaryUnavailableError = class extends Error {
|
|
13568
|
-
code
|
|
13569
|
-
constructor(
|
|
13570
|
-
super(
|
|
13607
|
+
/** `detail` reste pour les journaux ; le message est le code, pour l'interface. */
|
|
13608
|
+
constructor(detail) {
|
|
13609
|
+
super("CANARY_UNAVAILABLE");
|
|
13610
|
+
this.detail = detail;
|
|
13571
13611
|
this.name = "CanaryUnavailableError";
|
|
13572
13612
|
}
|
|
13613
|
+
code = "CANARY_UNAVAILABLE";
|
|
13573
13614
|
};
|
|
13574
13615
|
var OrgKeyMismatchError = class extends Error {
|
|
13575
13616
|
code = "ORG_KEY_MISMATCH";
|
|
13617
|
+
/**
|
|
13618
|
+
* Le message EST le code, comme partout ailleurs sur ces routes.
|
|
13619
|
+
*
|
|
13620
|
+
* Une phrase écrite ici traverse le serveur telle quelle et s'affiche dans
|
|
13621
|
+
* l'interface sans passer par la traduction : une interface en français
|
|
13622
|
+
* annonçait donc l'échec en anglais, et le texte ne pouvait renvoyer nulle
|
|
13623
|
+
* part puisque le serveur ignore où se trouve l'écran qui répare. Le client
|
|
13624
|
+
* traduit `serverErrors.ORG_KEY_MISMATCH` et nomme le chemin.
|
|
13625
|
+
*/
|
|
13576
13626
|
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
|
-
);
|
|
13627
|
+
super("ORG_KEY_MISMATCH");
|
|
13580
13628
|
this.name = "OrgKeyMismatchError";
|
|
13581
13629
|
}
|
|
13582
13630
|
};
|
|
@@ -14370,8 +14418,10 @@ var CloudSyncBridge = class {
|
|
|
14370
14418
|
}
|
|
14371
14419
|
console.warn(
|
|
14372
14420
|
"[cloud-sync] org %s: could not check the organization key (%s) \u2014 syncing anyway.",
|
|
14421
|
+
// Le message porte désormais le code, destiné à l'interface ; le détail
|
|
14422
|
+
// lisible reste sur l'erreur, et c'est lui qui a sa place dans un log.
|
|
14373
14423
|
link.orgId,
|
|
14374
|
-
err.message
|
|
14424
|
+
err.detail ?? err.message
|
|
14375
14425
|
);
|
|
14376
14426
|
}
|
|
14377
14427
|
this.keyMismatch.delete(link.orgId);
|
|
@@ -14648,6 +14698,10 @@ var cloudSyncRouter = router({
|
|
|
14648
14698
|
await cloudSyncBridge.connect({ orgId: input.orgId, cloudUrl: input.cloudUrl });
|
|
14649
14699
|
}
|
|
14650
14700
|
await projectStore.moveToOrg(input.projectId, input.orgId);
|
|
14701
|
+
await projectPathStore.relocate(
|
|
14702
|
+
{ id: input.projectId, orgId: null },
|
|
14703
|
+
{ id: input.projectId, orgId: input.orgId }
|
|
14704
|
+
);
|
|
14651
14705
|
await conversationStore.relocateAll();
|
|
14652
14706
|
try {
|
|
14653
14707
|
await cloudSyncBridge.followProject(input.orgId, input.projectId);
|
|
@@ -17222,4 +17276,4 @@ export {
|
|
|
17222
17276
|
pullEnv,
|
|
17223
17277
|
registerInstance
|
|
17224
17278
|
};
|
|
17225
|
-
//# sourceMappingURL=src-
|
|
17279
|
+
//# sourceMappingURL=src-FYMPMNWX.js.map
|