@runeya/runeya 2.0.102 → 2.0.103
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-OWHTBG46.js +9 -0
- package/assets/icon-alert.ico +0 -0
- package/assets/icon-alert.png +0 -0
- package/assets/icon-alert.svg +19 -0
- package/{chat-OXRRBDB3.js → chat-JZ4UQDWV.js} +8 -7
- package/chunk-KY6KYSOU.js +279 -0
- package/chunk-KY6KYSOU.js.map +1 -0
- package/{chunk-PSTMO7EE.js → chunk-NZNIWJDT.js} +18 -16
- package/{chunk-PSTMO7EE.js.map → chunk-NZNIWJDT.js.map} +1 -1
- package/chunk-PH4E5WDN.js +137 -0
- package/chunk-PH4E5WDN.js.map +1 -0
- package/{chunk-BHLCBARP.js → chunk-QIBUMYR6.js} +29 -11
- package/chunk-QIBUMYR6.js.map +1 -0
- package/{chunk-NDO5VFZY.js → chunk-QRMG6GMX.js} +694 -917
- package/chunk-QRMG6GMX.js.map +1 -0
- package/{chunk-BDVQB5RK.js → chunk-UYOWIH4R.js} +23 -21
- package/{chunk-BDVQB5RK.js.map → chunk-UYOWIH4R.js.map} +1 -1
- package/{chunk-F3HKV5AU.js → chunk-Z67WBWKD.js} +7 -5
- package/{chunk-F3HKV5AU.js.map → chunk-Z67WBWKD.js.map} +1 -1
- package/{companion-JQGNL4U7.js → companion-6J6NK7H7.js} +5 -4
- package/{desktop-launcher-FHNURZA7.js → desktop-launcher-N7WRF3LC.js} +11 -17
- package/desktop-launcher-N7WRF3LC.js.map +1 -0
- package/index.js +64 -2
- package/index.js.map +1 -1
- package/instances-command-KZ5UGXOR.js +17 -0
- package/package.json +4 -1
- package/settings-manager-NZV26BC3.js +9 -0
- package/settings-manager-NZV26BC3.js.map +1 -0
- package/{src-HZ2XO6TV.js → src-V7DPPFCF.js} +447 -254
- package/src-V7DPPFCF.js.map +1 -0
- package/tray-TRWZNOUD.js +291 -0
- package/tray-TRWZNOUD.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-CvG5ha3R.js +13 -0
- package/web/assets/AgentTerminalPage-DcGppuzO.js +1 -0
- package/web/assets/AiChatPage-BDr5tG0A.js +1 -0
- package/web/assets/{AppLayout-DeWqCLuK.css → AppLayout-CYQBjQBU.css} +1 -1
- package/web/assets/AppLayout-Dv3ViAk2.js +1 -0
- package/web/assets/AuditPage-Bc2jlgZJ.js +1 -0
- package/web/assets/CloudAccountPage-4BLXSOix.js +1 -0
- package/web/assets/CloudAccountPage-B3MX6DNn.js +1 -0
- package/web/assets/CloudMessagingPage-CVzUalxx.js +2 -0
- package/web/assets/DashboardPage-Bo51pbzt.js +1 -0
- package/web/assets/DirectoryPickerDialog-CIVjWKUm.js +1 -0
- package/web/assets/{EditorIcon-C9XKLhc7.js → EditorIcon-BguaWtZg.js} +2 -2
- package/web/assets/{EnvironmentForm-bS48MK8k.js → EnvironmentForm-D8dq0ffR.js} +2 -2
- package/web/assets/EnvironmentFormPage-d8p3q8Yt.js +1 -0
- package/web/assets/EnvironmentListPage-DWo2lWjE.js +1 -0
- package/web/assets/KanbanBoardPage-DkwIz3J1.js +4 -0
- package/web/assets/KanbanListPage-xIQRLcrS.js +1 -0
- package/web/assets/LaunchProjectPage-CXWixUmf.js +1 -0
- package/web/assets/LaunchServicesPage-nv-chYgX.js +1 -0
- package/web/assets/LogViewer-DLupfjjf.js +3 -0
- package/web/assets/OrgKeyPrompt-DePcB-8f.js +1 -0
- package/web/assets/ProcessControls-D3zTnHb2.js +1 -0
- package/web/assets/ProcessDetailPage-CgVGzRoJ.js +1 -0
- package/web/assets/{ProcessMetrics-CBPR5ozp.js → ProcessMetrics-Dwd5lzqY.js} +2 -2
- package/web/assets/ProjectDetailPage-HR20KyJ3.js +1 -0
- package/web/assets/ProjectListPage-DcH4uTTX.js +1 -0
- package/web/assets/RandomJobTestPage-BYTkVcdE.js +2 -0
- package/web/assets/ScenarioEditorPage-zRxR03Ud.js +14 -0
- package/web/assets/SendToChatDialog-Cm5eKBOb.js +1 -0
- package/web/assets/ServiceControlsBar-oBpAP9yX.js +1 -0
- package/web/assets/ServiceDetailPage-CahBi-or.js +2 -0
- package/web/assets/ServiceFormPage-DfmPM_mI.js +1 -0
- package/web/assets/SettingsPage-CDMXFJ4k.js +2063 -0
- package/web/assets/SettingsPage-Dw6tbcbw.css +1 -0
- package/web/assets/UnlockPage-BUyBEPzQ.js +1 -0
- package/web/assets/VariablesTable-Dc6CyVQW.js +1 -0
- package/web/assets/VaultMigrationPage-BUmzyDXN.js +1 -0
- package/web/assets/VersionBadge-Dx_67FtC.js +1 -0
- package/web/assets/WikiPage-DEMJLDpD.js +1 -0
- package/web/assets/WikiView-CcrQ2ySx.js +1 -0
- package/web/assets/add-scalar-classes-M_EBdf4f.js +387 -0
- package/web/assets/{autocomplete-CtIxw1IN.js → autocomplete-QtPLLzzV.js} +3 -3
- package/web/assets/{basic-shape-diamond.svg-BErisM9Y.js → basic-shape-diamond.svg-Dyx8FJkS.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-yC7RoYpa.js → basic-shape-hexagon.svg-1RKdVP3_.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-DRmanUIO.js → basic-shape-primary-circle-ellipse-round.svg-CSa69hok.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-DxuoouSj.js → basic-shape-primary-square-rectangle.svg-B9TXktd4.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-Cy_Frn-W.js → basic-shape-shield.svg-BZvKXoiw.js} +1 -1
- package/web/assets/{browser-h0mxWbci.js → browser-CYeKc8Uo.js} +1 -1
- package/web/assets/{browser-Dj3qxJqB.js → browser-VlhbsseI.js} +1 -1
- package/web/assets/card-tEWfv-Op.js +32 -0
- package/web/assets/{checkbox-CTw-YDe_.js → checkbox-CyPqKR6H.js} +3 -3
- package/web/assets/{chip-DwSSTlaC.js → chip-wM0gJ_FI.js} +2 -2
- package/web/assets/client-B919VgbS.js +24 -0
- package/web/assets/cloud-chat.store-C-A9nIqG.js +1 -0
- package/web/assets/cloud-session-g6ewm0UI.js +1 -0
- package/web/assets/column-DihIO4Zd.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-TLZAKrIM.js → computer-device-desktop-monitor.svg-ClbIVuot.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-YRcL_Qxn.js → computer-device-desktop.svg-CXpOovTP.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-CZUEbqra.js → computer-device-laptop.svg-C9sY1wZv.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-CcsmeFGb.js → computer-device-mobile-phone-android-samsung-back.svg-CPWC2QHX.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CXjVvTBT.js → computer-device-mobile-phone-android-samsung.svg-B0H-mnfh.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BQQXUoZZ.js → computer-device-mobile-phone-iphone-x-back.svg-BbIunxoN.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CG8VbAP-.js → computer-device-mobile-phone-iphone-x.svg-qLGK_oVA.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-DDMUt0S4.js → computer-device-mobile-tablet-touch.svg-BDpuB6SD.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-CBXtF47n.js → computer-device-mobile-tablet.svg-44THWP9E.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-ObjUhwds.js → computer-device-network-ethernet-cat6.svg-tlgWltl_.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-NGYEGuba.js → computer-device-network-lan-www.svg-Bd7Ch4QN.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-CSnNdKGm.js → computer-device-network-wifi-connection.svg-D_XjoY-a.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-CG7iHt_n.js → computer-device-network-wifi-router.svg-BRpuwgUx.js} +1 -1
- package/web/assets/{cssMode-Bclh_xI1.js → cssMode-D0M5mbRd.js} +1 -1
- package/web/assets/{divider-Bb31-CFf.js → divider-gPnMjjpJ.js} +2 -2
- package/web/assets/{docx-preview-seOy1U3d.js → docx-preview-CBPtwrA0.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-B8emvJ_p.js → ecology-science-erlenmeyer-flask.svg-CZ3uUeBT.js} +1 -1
- package/web/assets/{fieldset-Czp1Leik.js → fieldset-BSGgRmpr.js} +2 -2
- package/web/assets/{freemarker2-D87vjb6-.js → freemarker2-BWsK2SIi.js} +1 -1
- package/web/assets/{handlebars-CjY4u0vA.js → handlebars-CHNB1gG0.js} +1 -1
- package/web/assets/{html-C5pOjLe-.js → html-COwA9Dtl.js} +1 -1
- package/web/assets/{htmlMode-CunB4Bjm.js → htmlMode-gZ2_PUDA.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-7dRFt_k5.js → image-flash-lightning.svg-Iiwm_7-K.js} +1 -1
- package/web/assets/{image-picture-flower.svg-ATG6mf9B.js → image-picture-flower.svg-BP9U6YP8.js} +1 -1
- package/web/assets/{index-BMuqGGPP.js → index-mBPGEldp.js} +285 -285
- package/web/assets/{interface-alert-exclamation-diamond.svg-DuAtIVtT.js → interface-alert-exclamation-diamond.svg-BYWgnbUp.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Bg9-FBLP.js → interface-alert-exclamation-triangle-warning.svg-CWGfXHx_.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-C5etvhA3.js → interface-alert-information-circle.svg-88Bga8qr.js} +1 -1
- package/web/assets/{interface-award-crown.svg-zuAFLs7y.js → interface-award-crown.svg-3hO77oiy.js} +1 -1
- package/web/assets/{interface-bookmark.svg-CfBz0NE3.js → interface-bookmark-tag.svg-DcHwQsr0.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-C3EKMHOq.js → interface-bookmark.svg-SfHcE95h.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-DGYz2Prk.js → interface-calendar-date-one.svg-DdXOM9VZ.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-DGiJpxy1.js → interface-content-book-open-pages.svg-DD7QTDn_.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-DydK46P0.js → interface-content-book-page.svg-Dd45mFzB.js} +1 -1
- package/web/assets/{interface-content-file.svg-D0pUOvAN.js → interface-content-file.svg-slPoMF5K.js} +1 -1
- package/web/assets/interface-content-folder.svg-D90zbTLh.js +1 -0
- package/web/assets/{interface-content-folder.svg-DiJ3Pfaa.js → interface-content-folder.svg-cSgXwhRh.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-Dl3aROYy.js → interface-copy-clipboard.svg-DNy0VeWx.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-UmDFMIt5.js → interface-edit-attachment.svg-VyCAm1jc.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-Bp_8Pfer.js → interface-edit-binocular.svg-DA6QB2sn.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-B2A8V7mt.js → interface-edit-magic-wand.svg-D0uagBk7.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-DKjdsVsS.js → interface-edit-tool-paint-roller.svg-ConlubSG.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-DuUybI4h.js → interface-edit-tool-pencil.svg-BgNzCwXf.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DHeTFQv8.js → interface-favorite-award.svg-MLL88pIy.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-kKzUSQkq.js → interface-favorite-flag.svg-ZhM_9XJZ.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CqMgA2mm.js → interface-favorite-heart.svg-Cqq1PV9O.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CuLj8HV6.js → interface-favorite-star.svg-YumblcRD.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-lFQTnGOR.js → interface-favorite-stars-sparkles.svg-BH5BXXOe.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-CBbliSZq.js → interface-hierarchy-flowchart.svg-CEfCPIyC.js} +1 -1
- package/web/assets/{interface-home-house.svg-BoFlxzre.js → interface-home-house.svg-DJE_g94c.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DcKs1Vcm.js → interface-hyperlink.svg-BFhnDXDD.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-BSNKEyEg.js → interface-lighting-brightness.svg-NwOV0KEv.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-DSP-B9Ze.js → interface-lock-closed.svg-qVkplX0W.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Bzg-oBHY.js → interface-lock-open-unlock.svg-D18OlPEP.js} +1 -1
- package/web/assets/{interface-login-key.svg-DG61Q1lR.js → interface-login-key.svg-CccXX7_b.js} +1 -1
- package/web/assets/{interface-search.svg-CODjdPxd.js → interface-search.svg-C6ncELaU.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-CgiaBO1E.js → interface-setting-cog.svg-5LrIeBav.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-DM0PsgtH.js → interface-share-megaphone-bullhorn.svg-C-qB4VYi.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-B0geTs35.js → interface-share-rocket.svg-Citzuyng.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-v9Q6QwAp.js → interface-share-satellite.svg-BldpdKdo.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-CLdqgzgZ.js → interface-share-space-ship.svg-B_Ni34rB.js} +1 -1
- package/web/assets/{interface-share.svg-Cx3VhLuj.js → interface-share.svg-FAt7Kgad.js} +1 -1
- package/web/assets/{interface-signal-square.svg-By_pQLw8.js → interface-signal-square.svg-DeBP6Pim.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-Co3P-TM3.js → interface-time-clock-circle.svg-dQfNY8BC.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-BYSOzVeD.js → interface-time-hour-glass.svg-ylbFnlwY.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-moFZaev3.js → interface-users-multiple.svg-DXts3WMC.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-DhyTNivv.js → interface-weather-moon.svg-BG6mjCih.js} +1 -1
- package/web/assets/{javascript-B1fZNcy6.js → javascript-C_ENjImO.js} +1 -1
- package/web/assets/{jsonMode-BxZ6OjkS.js → jsonMode-Bt-LEknD.js} +2 -2
- package/web/assets/{liquid-B58z0z3s.js → liquid-CVshgHmY.js} +1 -1
- package/web/assets/{lspLanguageFeatures-VksJLqpV.js → lspLanguageFeatures-D1e-RcOs.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-DU4TDENX.js → mail-chat-bubble-square.svg-RUMLqiUI.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-jk90Puk3.js → mail-send-email-paper-airplane.svg-JDe3yqOH.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CrEPc3pm.js → mail-send-envelope.svg-CCzWaeO-.js} +1 -1
- package/web/assets/{mdx-l-DSKi30.js → mdx-D9G2-Bj8.js} +1 -1
- package/web/assets/{minus-CjETE6Jb.js → minus-BMxEQL_C.js} +2 -2
- package/web/assets/modal-CZ7zYg5t.js +1 -0
- package/web/assets/modal-CmpFIC5N.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-veUsiwvj.js → money-cashier-receipt.svg-DfbOr89U.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-C5PNkn4j.js → money-currency-dollar-pay.svg-DY7fQ7jz.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-BkCcnTWU.js → money-graph-arrow-increase.svg-jewlEZEL.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-BDiFSuKt.js → money-graph-bar-chart-increase.svg-BChD8dZv.js} +1 -1
- package/web/assets/multiselect-CoRzeHvy.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-CHyv9oDB.js → nature-ecology-leaf.svg-AQimnw3F.js} +1 -1
- package/web/assets/{password-BYosjMhB.js → password-4Ykb_Ejn.js} +4 -4
- package/web/assets/{phone-telephone.svg-Ce1dgyK9.js → phone-telephone.svg-BdkwIhmo.js} +1 -1
- package/web/assets/{plus-CVoE_j-e.js → plus-CYVYZlQL.js} +6 -6
- package/web/assets/process.store-CtXpHndZ.js +1 -0
- package/web/assets/{programming-bug.svg-D87My2Ok.js → programming-bug.svg-DzT817WD.js} +1 -1
- package/web/assets/{programming-cloud.svg-jUe8apKw.js → programming-cloud.svg-eKZD46YP.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-D4etrIBX.js → programming-computer-database-server.svg-BXOhjcQy.js} +1 -1
- package/web/assets/{programming-computer-database.svg-BtfkmLTx.js → programming-computer-database.svg-DUzhimFY.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-BkzsDKDq.js → programming-module-four-layout.svg-CYGX7Rlj.js} +1 -1
- package/web/assets/{programming-module-three.svg-CpzTvjGS.js → programming-module-three.svg-BhQr1m-R.js} +1 -1
- package/web/assets/{programming-module.svg-wyvB3tSR.js → programming-module.svg-Bik697Ne.js} +1 -1
- package/web/assets/{programming-script-code.svg-Dek4khNq.js → programming-script-code.svg-BaTanEvH.js} +1 -1
- package/web/assets/{python-IeHrvMxp.js → python-wDvaXe-V.js} +1 -1
- package/web/assets/{razor-CMgDmoNn.js → razor-C-cEFJP1.js} +1 -1
- package/web/assets/router-CqYmBKhe.js +1 -0
- package/web/assets/settings-scope-DD7SbjFz.js +1 -0
- package/web/assets/settings.store-DcQmvBBv.js +1 -0
- package/web/assets/{shopping-cart.svg-DeBhxyDX.js → shopping-cart.svg-BwUFrGEq.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-Bt0oKBk9.js → shopping-gift-present.svg-Bs4b94QF.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-BEQNmjMi.js → shopping-shipping-box-parcel-package.svg-DhVaYapE.js} +1 -1
- package/web/assets/{src-C3dPv05m.js → src-CpoqK21I.js} +13 -13
- package/web/assets/src-De5rZb3_.js +1 -0
- package/web/assets/src-NB2ZR0ON.js +572 -0
- package/web/assets/tabpanel-DMt8G5AA.js +150 -0
- package/web/assets/{tag-new-circle.svg-B1i0Y1yt.js → tag-new-circle.svg-B4Z8uL1_.js} +1 -1
- package/web/assets/{toggleswitch-CcQEgLiT.js → toggleswitch-CawhRFb7.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-CB5sqhKh.js → travel-map-earth-globe.svg-D0s5cc-W.js} +1 -1
- package/web/assets/trpc-B17uPEkC.js +1 -0
- package/web/assets/{tsMode-DoUs-yH0.js → tsMode-NHDuTjcd.js} +5 -5
- package/web/assets/{typescript-fw9OMJ0N.js → typescript-DGkgFTtn.js} +1 -1
- package/web/assets/useAiChatDrawer-BxE6EYFc.js +1 -0
- package/web/assets/{useCloudOrg-CRpEZ-iE.js → useCloudOrg-BJTjZPZ9.js} +1 -1
- package/web/assets/useProjectCatalog-DifZyVY5.js +1 -0
- package/web/assets/useProjectCloudOrg-EvyyjH6E.js +1 -0
- package/web/assets/{xml-Df6_yGan.js → xml-CJaXEqLW.js} +1 -1
- package/web/assets/{yaml-LMvM57fn.js → yaml-bl8i8xOf.js} +1 -1
- package/web/index.html +1 -1
- package/agent-manager-SNVPZNLC.js +0 -8
- package/chunk-BHLCBARP.js.map +0 -1
- package/chunk-NDO5VFZY.js.map +0 -1
- package/desktop-launcher-FHNURZA7.js.map +0 -1
- package/settings-manager-YHQ5YHUH.js +0 -8
- package/src-HZ2XO6TV.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-CxmPaQaj.js +0 -13
- package/web/assets/AgentTerminalPage-Bbx4zyQY.js +0 -1
- package/web/assets/AiChatPage-GPPQggxZ.js +0 -1
- package/web/assets/AppLayout-BuwGeA1p.js +0 -1
- package/web/assets/AuditPage-CDsJsoKA.js +0 -1
- package/web/assets/CloudAccountPage-BCP8icYZ.js +0 -1
- package/web/assets/CloudAccountPage-DzpS3_gc.js +0 -1
- package/web/assets/CloudMessagingPage-01hLQzZ5.js +0 -2
- package/web/assets/DashboardPage-CKo-sf8A.js +0 -1
- package/web/assets/DirectoryPickerDialog-B1tSWoOM.js +0 -1
- package/web/assets/EnvironmentFormPage-9yxN-uI3.js +0 -1
- package/web/assets/EnvironmentListPage-BbfptXAU.js +0 -1
- package/web/assets/KanbanBoardPage-BWkqTc1a.js +0 -4
- package/web/assets/KanbanListPage-GxI1nlON.js +0 -1
- package/web/assets/LaunchProjectPage-DKMoGXIC.js +0 -1
- package/web/assets/LaunchServicesPage-6dfxPQMB.js +0 -1
- package/web/assets/LogViewer-DAzGy_T2.js +0 -3
- package/web/assets/OrgKeyPrompt-CQ087D4g.js +0 -1
- package/web/assets/ProcessControls-D8uc4x7M.js +0 -1
- package/web/assets/ProcessDetailPage-BPxLPGeh.js +0 -1
- package/web/assets/ProjectDetailPage-CnZ_CpVU.js +0 -1
- package/web/assets/ProjectListPage-D8Svc5e3.js +0 -1
- package/web/assets/RandomJobTestPage-BdEiEnSi.js +0 -2
- package/web/assets/ScenarioEditorPage-COrL715B.js +0 -14
- package/web/assets/SendToChatDialog-D8YB5RM6.js +0 -1
- package/web/assets/ServiceControlsBar-BKwvqgHw.js +0 -1
- package/web/assets/ServiceDetailPage-BmPRfQN6.js +0 -2
- package/web/assets/ServiceFormPage-rVvnwWkb.js +0 -1
- package/web/assets/SettingsPage-C-OfBHjn.css +0 -1
- package/web/assets/SettingsPage-DmQB6t1_.js +0 -2063
- package/web/assets/UnlockPage-BgVF3XMO.js +0 -1
- package/web/assets/VariablesTable-D4_sssPN.js +0 -1
- package/web/assets/VaultMigrationPage-BRZJnfVg.js +0 -1
- package/web/assets/VersionBadge-Df7iJWvF.js +0 -1
- package/web/assets/WikiPage-UkaH8BqR.js +0 -1
- package/web/assets/WikiView-BQqP4b9A.js +0 -1
- package/web/assets/add-scalar-classes-B9WxxjAm.js +0 -387
- package/web/assets/card-nJdNoKgd.js +0 -32
- package/web/assets/client-DYNnTrNm.js +0 -24
- package/web/assets/cloud-chat.store-_qILavCL.js +0 -1
- package/web/assets/cloud-session-Ml5g5J1-.js +0 -1
- package/web/assets/column-Bc4-F_tF.js +0 -907
- package/web/assets/interface-content-folder.svg-bb6GV0G0.js +0 -1
- package/web/assets/modal-D2-cZ2mf.js +0 -5
- package/web/assets/modal-DmgVDXcS.js +0 -1
- package/web/assets/multiselect-CDBfo7-0.js +0 -251
- package/web/assets/process.store-BsCJ-VuI.js +0 -1
- package/web/assets/router-KIdzwvCZ.js +0 -1
- package/web/assets/settings-scope-D8l1sq9K.js +0 -1
- package/web/assets/settings.store-VVqF8QkO.js +0 -1
- package/web/assets/src-CJFQ3yWc.js +0 -1
- package/web/assets/src-Cgn_TWXn.js +0 -572
- package/web/assets/tabpanel-B8oBjoSG.js +0 -150
- package/web/assets/trpc-B1bTQz_t.js +0 -1
- package/web/assets/useAiChatDrawer-BpR9XWop.js +0 -1
- package/web/assets/useProjectCatalog-mk8A95KQ.js +0 -1
- package/web/assets/useProjectCloudOrg-CKgvcUWI.js +0 -1
- /package/{agent-manager-SNVPZNLC.js.map → agent-manager-OWHTBG46.js.map} +0 -0
- /package/{chat-OXRRBDB3.js.map → chat-JZ4UQDWV.js.map} +0 -0
- /package/{companion-JQGNL4U7.js.map → companion-6J6NK7H7.js.map} +0 -0
- /package/{settings-manager-YHQ5YHUH.js.map → instances-command-KZ5UGXOR.js.map} +0 -0
|
@@ -1,397 +1,145 @@
|
|
|
1
|
-
// ../server/src/config/env.ts
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { resolve as resolvePath } from "path";
|
|
4
|
-
var serverPort = z.coerce.number().int().min(1).max(65535).default(4e3).parse(process.env.RUNEYA_HTTP_PORT);
|
|
5
|
-
var defaultAgentPort = process.env.RUNEYA_AGENT_PORT ? z.coerce.number().int().min(1).max(65535).parse(process.env.RUNEYA_AGENT_PORT) : serverPort + 1;
|
|
6
|
-
var EnvSchema = z.object({
|
|
7
|
-
RUNEYA_HTTP_PORT: z.coerce.number().int().min(1).max(65535).default(4e3),
|
|
8
|
-
RUNEYA_HOST: z.string().default("127.0.0.1"),
|
|
9
|
-
RUNEYA_AGENT_PORT: z.coerce.number().int().min(1).max(65535).default(defaultAgentPort),
|
|
10
|
-
RUNEYA_AGENT_HOST: z.string().default("127.0.0.1"),
|
|
11
|
-
RUNEYA_AGENT_BINARY_PATH: z.string().nullable().default(null),
|
|
12
|
-
RUNEYA_DATA_DIR: z.preprocess((v) => typeof v === "string" && v.length > 0 ? v : void 0, z.string().default(".runeya")),
|
|
13
|
-
// Home holding the cloud vaults (`<home>/.runeya/orgs/...`). Defaults to the
|
|
14
|
-
// user's home directory; overridden by tests so they never write to the real
|
|
15
|
-
// one, and usable to relocate the vaults on a shared machine.
|
|
16
|
-
RUNEYA_HOME: z.preprocess((v) => typeof v === "string" && v.length > 0 ? v : void 0, z.string().nullable().default(null)),
|
|
17
|
-
RUNEYA_CLOUD_URL: z.string().url().nullable().default(null),
|
|
18
|
-
// Cloud front-end (landing) URL — used by the web app for the registration /
|
|
19
|
-
// onboarding flow. Configured on the server at launch; the web fetches it.
|
|
20
|
-
RUNEYA_CLOUD_APP_URL: z.string().url().nullable().default(null),
|
|
21
|
-
RUNEYA_MODE: z.enum(["local-simple", "cloud"]).default("local-simple"),
|
|
22
|
-
RUNEYA_CORS_ORIGIN: z.string().nullable().default(null),
|
|
23
|
-
RUNEYA_LAN_PROXY: z.preprocess((v) => v === "true" || v === "1", z.boolean()).default(false),
|
|
24
|
-
// Set by the CLI when it was started from a desktop launcher rather than a
|
|
25
|
-
// terminal. The web app surfaces it so the user knows which Runeya they are
|
|
26
|
-
// looking at when several are running.
|
|
27
|
-
RUNEYA_FROM_DESKTOP: z.preprocess((v) => v === "true" || v === "1", z.boolean()).default(false),
|
|
28
|
-
// Label shown for this machine in the cloud's "linked machines" screen.
|
|
29
|
-
// Defaults to the hostname (see `getDeviceName`); set it explicitly when a
|
|
30
|
-
// single host runs several instances and you want to tell them apart.
|
|
31
|
-
RUNEYA_DEVICE_NAME: z.preprocess(
|
|
32
|
-
(v) => typeof v === "string" && v.trim().length > 0 ? v.trim() : void 0,
|
|
33
|
-
z.string().max(64).nullable().default(null)
|
|
34
|
-
)
|
|
35
|
-
}).transform((data) => ({
|
|
36
|
-
...data,
|
|
37
|
-
// Short aliases used throughout the server code
|
|
38
|
-
PORT: data.RUNEYA_HTTP_PORT,
|
|
39
|
-
HOST: data.RUNEYA_HOST,
|
|
40
|
-
MODE: data.RUNEYA_MODE,
|
|
41
|
-
/**
|
|
42
|
-
* Absolute from the start, resolved once against the launch directory.
|
|
43
|
-
*
|
|
44
|
-
* It defaults to a relative `.runeya`, and every caller used to re-resolve it
|
|
45
|
-
* against whatever the process's cwd happened to be. A vault that moves when
|
|
46
|
-
* the process changes directory is a vault that can be silently written to the
|
|
47
|
-
* wrong place — so the answer is fixed here, at boot, and never recomputed.
|
|
48
|
-
*/
|
|
49
|
-
DATA_DIR: resolvePath(data.RUNEYA_DATA_DIR),
|
|
50
|
-
HOME_DIR: data.RUNEYA_HOME,
|
|
51
|
-
CLOUD_URL: data.RUNEYA_CLOUD_URL,
|
|
52
|
-
CLOUD_APP_URL: data.RUNEYA_CLOUD_APP_URL,
|
|
53
|
-
CORS_ORIGIN: data.RUNEYA_CORS_ORIGIN,
|
|
54
|
-
AGENT_BINARY_PATH: data.RUNEYA_AGENT_BINARY_PATH,
|
|
55
|
-
DEVICE_NAME: data.RUNEYA_DEVICE_NAME,
|
|
56
|
-
FROM_DESKTOP: data.RUNEYA_FROM_DESKTOP
|
|
57
|
-
}));
|
|
58
|
-
var env = EnvSchema.parse(process.env);
|
|
59
|
-
|
|
60
|
-
// ../server/src/services/vault-resolver.ts
|
|
61
|
-
import { join, sep } from "path";
|
|
62
|
-
import { homedir } from "os";
|
|
63
|
-
import { readdir, mkdir, access, readFile, writeFile, unlink } from "fs/promises";
|
|
64
|
-
import { existsSync } from "fs";
|
|
65
|
-
var SAFE_ID = /^[A-Za-z0-9._-]{1,128}$/;
|
|
66
|
-
function assertSafeId(kind, id) {
|
|
67
|
-
if (!SAFE_ID.test(id) || id === "." || id === "..") {
|
|
68
|
-
throw new Error(`Invalid ${kind} id for a vault path: ${JSON.stringify(id)}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function machineRoot() {
|
|
72
|
-
const override = process.env["RUNEYA_HOME"];
|
|
73
|
-
return join(override && override.length > 0 ? override : homedir(), ".runeya");
|
|
74
|
-
}
|
|
75
|
-
function localVaultRoot() {
|
|
76
|
-
return env.DATA_DIR;
|
|
77
|
-
}
|
|
78
|
-
function orgVaultRoot(orgId) {
|
|
79
|
-
assertSafeId("organization", orgId);
|
|
80
|
-
return join(machineRoot(), "orgs", orgId);
|
|
81
|
-
}
|
|
82
|
-
function projectVaultRoot(orgId, projectId) {
|
|
83
|
-
assertSafeId("project", projectId);
|
|
84
|
-
return join(orgVaultRoot(orgId), "projects", projectId);
|
|
85
|
-
}
|
|
86
|
-
function orgIdOfRoot(root) {
|
|
87
|
-
const marker = join(machineRoot(), "orgs") + sep;
|
|
88
|
-
if (!root.startsWith(marker)) return null;
|
|
89
|
-
const [orgId] = root.slice(marker.length).split(sep);
|
|
90
|
-
return orgId && SAFE_ID.test(orgId) ? orgId : null;
|
|
91
|
-
}
|
|
92
|
-
function vaultIdOfRoot(root) {
|
|
93
|
-
return orgIdOfRoot(root) ?? void 0;
|
|
94
|
-
}
|
|
95
|
-
function vaultFor(target) {
|
|
96
|
-
if (!target.orgId) return { root: localVaultRoot() };
|
|
97
|
-
return { root: projectVaultRoot(target.orgId, target.id) };
|
|
98
|
-
}
|
|
99
|
-
var ORG_CLOUD_FILE = "cloud.json";
|
|
100
|
-
async function stampOrgCloud(orgId, cloudUrl, name) {
|
|
101
|
-
const root = orgVaultRoot(orgId);
|
|
102
|
-
await mkdir(root, { recursive: true });
|
|
103
|
-
const known = name ?? (await readOrgNames())[orgId];
|
|
104
|
-
const stamp = known ? { cloudUrl, name: known } : { cloudUrl };
|
|
105
|
-
await writeFile(join(root, ORG_CLOUD_FILE), JSON.stringify(stamp, null, 2), "utf-8");
|
|
106
|
-
}
|
|
107
|
-
async function rememberOrgName(orgId, name) {
|
|
108
|
-
const root = orgVaultRoot(orgId);
|
|
109
|
-
if (!existsSync(root)) return;
|
|
110
|
-
const file = join(root, ORG_CLOUD_FILE);
|
|
111
|
-
let stamp = {};
|
|
112
|
-
try {
|
|
113
|
-
stamp = JSON.parse(await readFile(file, "utf-8"));
|
|
114
|
-
} catch {
|
|
115
|
-
}
|
|
116
|
-
if (stamp["name"] === name) return;
|
|
117
|
-
await writeFile(file, JSON.stringify({ ...stamp, name }, null, 2), "utf-8");
|
|
118
|
-
}
|
|
119
|
-
async function readOrgNames() {
|
|
120
|
-
const out = {};
|
|
121
|
-
for (const orgId of await listOrgVaults()) {
|
|
122
|
-
try {
|
|
123
|
-
const raw = await readFile(join(orgVaultRoot(orgId), ORG_CLOUD_FILE), "utf-8");
|
|
124
|
-
const name = JSON.parse(raw).name;
|
|
125
|
-
if (typeof name === "string" && name) out[orgId] = name;
|
|
126
|
-
} catch {
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return out;
|
|
130
|
-
}
|
|
131
|
-
var ORG_LOGO_FILE = "logo.json";
|
|
132
|
-
var LOGO_TYPES = /* @__PURE__ */ new Set(["image/png", "image/jpeg", "image/webp", "image/gif"]);
|
|
133
|
-
async function rememberOrgLogo(orgId, contentType, base64) {
|
|
134
|
-
if (!LOGO_TYPES.has(contentType)) return;
|
|
135
|
-
const root = orgVaultRoot(orgId);
|
|
136
|
-
const stored = { contentType, base64, fetchedAt: (/* @__PURE__ */ new Date()).toISOString() };
|
|
137
|
-
await mkdir(root, { recursive: true });
|
|
138
|
-
await writeFile(join(root, ORG_LOGO_FILE), JSON.stringify(stored), "utf-8");
|
|
139
|
-
}
|
|
140
|
-
async function forgetOrgLogo(orgId) {
|
|
141
|
-
try {
|
|
142
|
-
await unlink(join(orgVaultRoot(orgId), ORG_LOGO_FILE));
|
|
143
|
-
} catch {
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async function readOrgLogos() {
|
|
147
|
-
const out = {};
|
|
148
|
-
for (const orgId of await listOrgVaults()) {
|
|
149
|
-
try {
|
|
150
|
-
const raw = await readFile(join(orgVaultRoot(orgId), ORG_LOGO_FILE), "utf-8");
|
|
151
|
-
const { contentType, base64 } = JSON.parse(raw);
|
|
152
|
-
if (typeof contentType !== "string" || !LOGO_TYPES.has(contentType)) continue;
|
|
153
|
-
if (typeof base64 !== "string" || !base64) continue;
|
|
154
|
-
out[orgId] = `data:${contentType};base64,${base64}`;
|
|
155
|
-
} catch {
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return out;
|
|
159
|
-
}
|
|
160
|
-
async function readOrgClouds() {
|
|
161
|
-
const orgsDir = join(machineRoot(), "orgs");
|
|
162
|
-
const out = {};
|
|
163
|
-
let orgIds;
|
|
164
|
-
try {
|
|
165
|
-
orgIds = (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
|
|
166
|
-
} catch {
|
|
167
|
-
return out;
|
|
168
|
-
}
|
|
169
|
-
for (const orgId of orgIds) {
|
|
170
|
-
try {
|
|
171
|
-
const raw = await readFile(join(orgsDir, orgId, ORG_CLOUD_FILE), "utf-8");
|
|
172
|
-
const url = JSON.parse(raw).cloudUrl;
|
|
173
|
-
if (typeof url === "string" && url) out[orgId] = url;
|
|
174
|
-
} catch {
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return out;
|
|
178
|
-
}
|
|
179
|
-
async function listOrgVaults() {
|
|
180
|
-
const orgsDir = join(machineRoot(), "orgs");
|
|
181
|
-
try {
|
|
182
|
-
return (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
|
|
183
|
-
} catch {
|
|
184
|
-
return [];
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
async function listCloudVaults() {
|
|
188
|
-
const orgsDir = join(machineRoot(), "orgs");
|
|
189
|
-
const found = [];
|
|
190
|
-
let orgIds;
|
|
191
|
-
try {
|
|
192
|
-
orgIds = (await readdir(orgsDir, { withFileTypes: true })).filter((e) => e.isDirectory() && SAFE_ID.test(e.name)).map((e) => e.name);
|
|
193
|
-
} catch {
|
|
194
|
-
return found;
|
|
195
|
-
}
|
|
196
|
-
for (const orgId of orgIds) {
|
|
197
|
-
const projectsDir = join(orgsDir, orgId, "projects");
|
|
198
|
-
try {
|
|
199
|
-
for (const entry of await readdir(projectsDir, { withFileTypes: true })) {
|
|
200
|
-
if (!entry.isDirectory() || !SAFE_ID.test(entry.name)) continue;
|
|
201
|
-
const root = join(projectsDir, entry.name);
|
|
202
|
-
if (!await access(join(root, "project.json")).then(() => true, () => false)) continue;
|
|
203
|
-
found.push({ orgId, projectId: entry.name, root });
|
|
204
|
-
}
|
|
205
|
-
} catch {
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return found;
|
|
209
|
-
}
|
|
210
|
-
async function allVaultRoots() {
|
|
211
|
-
const cloud = await listCloudVaults();
|
|
212
|
-
return [localVaultRoot(), ...cloud.map((v) => v.root)];
|
|
213
|
-
}
|
|
214
|
-
function machineFilePath(filename) {
|
|
215
|
-
return join(machineRoot(), filename);
|
|
216
|
-
}
|
|
217
|
-
async function keyedFilePath(filename) {
|
|
218
|
-
return join(await keyRoot(), filename);
|
|
219
|
-
}
|
|
220
|
-
function legacyMachineFilePath(filename) {
|
|
221
|
-
return join(localVaultRoot(), filename);
|
|
222
|
-
}
|
|
223
|
-
async function ensureLocalVault() {
|
|
224
|
-
const root = localVaultRoot();
|
|
225
|
-
await mkdir(root, { recursive: true });
|
|
226
|
-
return root;
|
|
227
|
-
}
|
|
228
|
-
var KEY_FILES = [".encryption.key.enc", ".runeya-verify"];
|
|
229
|
-
var keyRootPromise = null;
|
|
230
|
-
async function holdsKey(root) {
|
|
231
|
-
for (const filename of KEY_FILES) {
|
|
232
|
-
try {
|
|
233
|
-
await access(join(root, filename));
|
|
234
|
-
return true;
|
|
235
|
-
} catch {
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
function keyRoot() {
|
|
241
|
-
keyRootPromise ??= (async () => {
|
|
242
|
-
if (await holdsKey(machineRoot())) return machineRoot();
|
|
243
|
-
return await holdsKey(localVaultRoot()) ? localVaultRoot() : machineRoot();
|
|
244
|
-
})();
|
|
245
|
-
return keyRootPromise;
|
|
246
|
-
}
|
|
247
|
-
async function legacyVaultRoot() {
|
|
248
|
-
const local = localVaultRoot();
|
|
249
|
-
if (await keyRoot() === local) return null;
|
|
250
|
-
return await holdsKey(local) ? local : null;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
1
|
// ../../packages/shared/src/schemas/settings.schema.ts
|
|
254
|
-
import { z as
|
|
2
|
+
import { z as z2 } from "zod";
|
|
255
3
|
|
|
256
4
|
// ../../packages/shared/src/schemas/scenario.schema.ts
|
|
257
|
-
import { z
|
|
258
|
-
var PositionSchema =
|
|
259
|
-
x:
|
|
260
|
-
y:
|
|
261
|
-
});
|
|
262
|
-
var ScenarioGroupSchema =
|
|
263
|
-
id:
|
|
264
|
-
name:
|
|
265
|
-
description:
|
|
266
|
-
color:
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
var PositionSchema = z.object({
|
|
7
|
+
x: z.number(),
|
|
8
|
+
y: z.number()
|
|
9
|
+
});
|
|
10
|
+
var ScenarioGroupSchema = z.object({
|
|
11
|
+
id: z.string().min(1).max(128),
|
|
12
|
+
name: z.string().min(1).max(200),
|
|
13
|
+
description: z.string().max(1e3).optional(),
|
|
14
|
+
color: z.string().max(32).optional(),
|
|
267
15
|
position: PositionSchema.default({ x: 0, y: 0 }),
|
|
268
|
-
width:
|
|
269
|
-
height:
|
|
270
|
-
});
|
|
271
|
-
var ScenarioPresetRoleSchema =
|
|
272
|
-
id:
|
|
273
|
-
name:
|
|
274
|
-
systemPrompt:
|
|
275
|
-
prompt:
|
|
276
|
-
});
|
|
277
|
-
var ScenarioPresetInitialDataSchema =
|
|
278
|
-
leaderId:
|
|
279
|
-
groups:
|
|
280
|
-
id:
|
|
281
|
-
name:
|
|
282
|
-
description:
|
|
283
|
-
color:
|
|
284
|
-
position:
|
|
285
|
-
width:
|
|
286
|
-
height:
|
|
16
|
+
width: z.number().default(300),
|
|
17
|
+
height: z.number().default(200)
|
|
18
|
+
});
|
|
19
|
+
var ScenarioPresetRoleSchema = z.object({
|
|
20
|
+
id: z.string().min(1).max(64),
|
|
21
|
+
name: z.string().min(1).max(200),
|
|
22
|
+
systemPrompt: z.string().max(1e4).default(""),
|
|
23
|
+
prompt: z.string().max(1e4).default("")
|
|
24
|
+
});
|
|
25
|
+
var ScenarioPresetInitialDataSchema = z.object({
|
|
26
|
+
leaderId: z.string().min(1).max(128),
|
|
27
|
+
groups: z.array(z.object({
|
|
28
|
+
id: z.string().min(1).max(128),
|
|
29
|
+
name: z.string().min(1).max(200),
|
|
30
|
+
description: z.string().max(1e3).optional(),
|
|
31
|
+
color: z.string().max(32).optional(),
|
|
32
|
+
position: z.object({ x: z.number(), y: z.number() }).default({ x: 0, y: 0 }),
|
|
33
|
+
width: z.number().default(300),
|
|
34
|
+
height: z.number().default(200)
|
|
287
35
|
})).max(100).default([]),
|
|
288
|
-
nodes:
|
|
289
|
-
id:
|
|
290
|
-
type:
|
|
291
|
-
parentIds:
|
|
292
|
-
groupId:
|
|
293
|
-
label:
|
|
294
|
-
role:
|
|
295
|
-
prompt:
|
|
296
|
-
question:
|
|
297
|
-
autoGenerated:
|
|
298
|
-
canAddNode:
|
|
299
|
-
aiCli:
|
|
300
|
-
model:
|
|
301
|
-
position:
|
|
36
|
+
nodes: z.array(z.object({
|
|
37
|
+
id: z.string().min(1).max(128),
|
|
38
|
+
type: z.enum(["ai", "ask"]).default("ai"),
|
|
39
|
+
parentIds: z.array(z.string().max(128)).default([]),
|
|
40
|
+
groupId: z.string().max(128).nullable().default(null),
|
|
41
|
+
label: z.string().max(240).default(""),
|
|
42
|
+
role: z.string().max(64).default("other"),
|
|
43
|
+
prompt: z.string().max(5e4).default(""),
|
|
44
|
+
question: z.string().max(2e3).default(""),
|
|
45
|
+
autoGenerated: z.boolean().default(true),
|
|
46
|
+
canAddNode: z.boolean().default(false),
|
|
47
|
+
aiCli: z.enum(["claude-code", "codex"]).default("claude-code"),
|
|
48
|
+
model: z.string().max(128).default("sonnet"),
|
|
49
|
+
position: z.object({ x: z.number(), y: z.number() }).default({ x: 0, y: 0 })
|
|
302
50
|
})).min(1).max(500)
|
|
303
51
|
});
|
|
304
|
-
var LocalizedStringSchema =
|
|
305
|
-
var ScenarioPresetLabelsSchema =
|
|
52
|
+
var LocalizedStringSchema = z.record(z.string(), z.string().max(100));
|
|
53
|
+
var ScenarioPresetLabelsSchema = z.object({
|
|
306
54
|
group: LocalizedStringSchema.optional(),
|
|
307
55
|
node: LocalizedStringSchema.optional(),
|
|
308
56
|
role: LocalizedStringSchema.optional(),
|
|
309
57
|
leader: LocalizedStringSchema.optional()
|
|
310
58
|
});
|
|
311
|
-
var ScenarioPresetSchema =
|
|
312
|
-
id:
|
|
313
|
-
name:
|
|
314
|
-
icon:
|
|
315
|
-
defaultTraversalMode:
|
|
316
|
-
canChangeTraversalMode:
|
|
317
|
-
roles:
|
|
59
|
+
var ScenarioPresetSchema = z.object({
|
|
60
|
+
id: z.string().min(1).max(128),
|
|
61
|
+
name: z.string().min(1).max(200),
|
|
62
|
+
icon: z.string().max(64).optional(),
|
|
63
|
+
defaultTraversalMode: z.enum(["hierarchical", "topological"]).optional(),
|
|
64
|
+
canChangeTraversalMode: z.boolean().default(true),
|
|
65
|
+
roles: z.array(ScenarioPresetRoleSchema).min(1).max(100),
|
|
318
66
|
initialData: ScenarioPresetInitialDataSchema.optional(),
|
|
319
67
|
labels: ScenarioPresetLabelsSchema.optional()
|
|
320
68
|
});
|
|
321
|
-
var ScenarioNodeSchema =
|
|
322
|
-
id:
|
|
323
|
-
type:
|
|
324
|
-
parentIds:
|
|
325
|
-
groupId:
|
|
326
|
-
label:
|
|
327
|
-
role:
|
|
328
|
-
prompt:
|
|
329
|
-
question:
|
|
330
|
-
autoGenerated:
|
|
331
|
-
canAddNode:
|
|
332
|
-
aiCli:
|
|
333
|
-
model:
|
|
69
|
+
var ScenarioNodeSchema = z.object({
|
|
70
|
+
id: z.string().min(1).max(128),
|
|
71
|
+
type: z.enum(["ai", "ask"]).default("ai"),
|
|
72
|
+
parentIds: z.array(z.string().max(128)).default([]),
|
|
73
|
+
groupId: z.string().max(128).nullable().default(null),
|
|
74
|
+
label: z.string().max(240).default(""),
|
|
75
|
+
role: z.string().max(64).default("other"),
|
|
76
|
+
prompt: z.string().max(5e4).default(""),
|
|
77
|
+
question: z.string().max(2e3).default(""),
|
|
78
|
+
autoGenerated: z.boolean().default(true),
|
|
79
|
+
canAddNode: z.boolean().default(false),
|
|
80
|
+
aiCli: z.enum(["claude-code", "codex"]).default("claude-code"),
|
|
81
|
+
model: z.string().max(128).default("sonnet"),
|
|
334
82
|
position: PositionSchema.default({ x: 0, y: 0 }),
|
|
335
|
-
injectParentOutputs:
|
|
336
|
-
injectedAncestorIds:
|
|
337
|
-
});
|
|
338
|
-
var ScenarioSchema =
|
|
339
|
-
id:
|
|
340
|
-
name:
|
|
341
|
-
icon:
|
|
342
|
-
description:
|
|
343
|
-
leaderId:
|
|
344
|
-
groups:
|
|
345
|
-
nodes:
|
|
346
|
-
traversalMode:
|
|
347
|
-
presetId:
|
|
348
|
-
isPublished:
|
|
349
|
-
createdAt:
|
|
350
|
-
updatedAt:
|
|
83
|
+
injectParentOutputs: z.boolean().default(false),
|
|
84
|
+
injectedAncestorIds: z.array(z.string().max(128)).default([])
|
|
85
|
+
});
|
|
86
|
+
var ScenarioSchema = z.object({
|
|
87
|
+
id: z.string().min(1).max(128),
|
|
88
|
+
name: z.string().min(1).max(200),
|
|
89
|
+
icon: z.string().max(64).optional(),
|
|
90
|
+
description: z.string().max(2e3).optional(),
|
|
91
|
+
leaderId: z.string().min(1).max(128),
|
|
92
|
+
groups: z.array(ScenarioGroupSchema).max(100).default([]),
|
|
93
|
+
nodes: z.array(ScenarioNodeSchema).min(1).max(500),
|
|
94
|
+
traversalMode: z.enum(["hierarchical", "topological"]).default("hierarchical"),
|
|
95
|
+
presetId: z.string().max(128).optional(),
|
|
96
|
+
isPublished: z.boolean().default(false),
|
|
97
|
+
createdAt: z.number(),
|
|
98
|
+
updatedAt: z.number()
|
|
351
99
|
});
|
|
352
100
|
|
|
353
101
|
// ../../packages/shared/src/schemas/settings.schema.ts
|
|
354
102
|
var AI_PROVIDERS = ["anthropic", "openai", "mistral", "groq", "ollama"];
|
|
355
|
-
var AIProviderSchema =
|
|
356
|
-
id:
|
|
357
|
-
name:
|
|
358
|
-
provider:
|
|
359
|
-
encryptedApiKey:
|
|
360
|
-
model:
|
|
361
|
-
active:
|
|
362
|
-
createdAt:
|
|
363
|
-
updatedAt:
|
|
364
|
-
});
|
|
365
|
-
var JSLogParserSchema =
|
|
366
|
-
id:
|
|
367
|
-
name:
|
|
368
|
-
description:
|
|
369
|
-
code:
|
|
103
|
+
var AIProviderSchema = z2.object({
|
|
104
|
+
id: z2.string().min(1).max(128),
|
|
105
|
+
name: z2.string().min(1).max(200),
|
|
106
|
+
provider: z2.enum(AI_PROVIDERS),
|
|
107
|
+
encryptedApiKey: z2.string().max(2e3).default(""),
|
|
108
|
+
model: z2.string().max(200).optional(),
|
|
109
|
+
active: z2.boolean().default(false),
|
|
110
|
+
createdAt: z2.coerce.date(),
|
|
111
|
+
updatedAt: z2.coerce.date()
|
|
112
|
+
});
|
|
113
|
+
var JSLogParserSchema = z2.object({
|
|
114
|
+
id: z2.string().min(1).max(128),
|
|
115
|
+
name: z2.string().min(1).max(200),
|
|
116
|
+
description: z2.string().max(2e3).optional(),
|
|
117
|
+
code: z2.string().min(1).max(5e4).refine(
|
|
370
118
|
(s) => !s.includes("require(") && !s.includes("import ") && !s.includes("eval("),
|
|
371
119
|
{ message: "Code must not contain require, import, or eval patterns" }
|
|
372
120
|
),
|
|
373
|
-
enabled:
|
|
374
|
-
builtin:
|
|
375
|
-
createdAt:
|
|
376
|
-
updatedAt:
|
|
377
|
-
});
|
|
378
|
-
var NotificationPreferencesSchema =
|
|
379
|
-
scenario_waiting_input:
|
|
380
|
-
ai_conversation_complete:
|
|
381
|
-
ai_conversation_error:
|
|
382
|
-
service_error_log:
|
|
383
|
-
service_status_changed:
|
|
384
|
-
service_health_changed:
|
|
121
|
+
enabled: z2.boolean().default(true),
|
|
122
|
+
builtin: z2.boolean().optional(),
|
|
123
|
+
createdAt: z2.coerce.date(),
|
|
124
|
+
updatedAt: z2.coerce.date()
|
|
125
|
+
});
|
|
126
|
+
var NotificationPreferencesSchema = z2.object({
|
|
127
|
+
scenario_waiting_input: z2.boolean().default(true),
|
|
128
|
+
ai_conversation_complete: z2.boolean().default(true),
|
|
129
|
+
ai_conversation_error: z2.boolean().default(true),
|
|
130
|
+
service_error_log: z2.boolean().default(true),
|
|
131
|
+
service_status_changed: z2.boolean().default(true),
|
|
132
|
+
service_health_changed: z2.boolean().default(true),
|
|
385
133
|
/** Service IDs excluded from error-log notifications */
|
|
386
|
-
service_error_log_excluded:
|
|
134
|
+
service_error_log_excluded: z2.array(z2.string().max(100)).max(500).default([]),
|
|
387
135
|
/** Service IDs excluded from status-change notifications */
|
|
388
|
-
service_status_changed_excluded:
|
|
136
|
+
service_status_changed_excluded: z2.array(z2.string().max(100)).max(500).default([]),
|
|
389
137
|
/** Service IDs excluded from health-change notifications */
|
|
390
|
-
service_health_changed_excluded:
|
|
138
|
+
service_health_changed_excluded: z2.array(z2.string().max(100)).max(500).default([])
|
|
391
139
|
});
|
|
392
|
-
var CompanionSettingsSchema =
|
|
140
|
+
var CompanionSettingsSchema = z2.object({
|
|
393
141
|
/** Activer le compagnon d'office sur les conversations créées ensuite. */
|
|
394
|
-
enabledByDefault:
|
|
142
|
+
enabledByDefault: z2.boolean().default(false),
|
|
395
143
|
/**
|
|
396
144
|
* Spécificités ajoutées aux consignes Runeya.
|
|
397
145
|
*
|
|
@@ -402,15 +150,15 @@ var CompanionSettingsSchema = z3.object({
|
|
|
402
150
|
* Rejeté au-delà de la borne plutôt que tronqué (§1) : un prompt coupé en
|
|
403
151
|
* plein milieu produirait des relectures incohérentes sans rien signaler.
|
|
404
152
|
*/
|
|
405
|
-
prompt:
|
|
153
|
+
prompt: z2.string().max(2e4).optional()
|
|
406
154
|
});
|
|
407
|
-
var SettingsSchema =
|
|
408
|
-
mode:
|
|
409
|
-
cloudUrl:
|
|
410
|
-
logParsers:
|
|
411
|
-
scenarios:
|
|
155
|
+
var SettingsSchema = z2.object({
|
|
156
|
+
mode: z2.enum(["local-simple", "cloud"]),
|
|
157
|
+
cloudUrl: z2.string().url().max(2048).nullable().optional(),
|
|
158
|
+
logParsers: z2.array(JSLogParserSchema).max(100).default([]),
|
|
159
|
+
scenarios: z2.array(ScenarioSchema).max(100).default([]),
|
|
412
160
|
/** Absolute path to the folder where the global wiki/docs markdown files live. Optional. */
|
|
413
|
-
globalDocsPath:
|
|
161
|
+
globalDocsPath: z2.string().max(4096).optional(),
|
|
414
162
|
/**
|
|
415
163
|
* Optionnel plutôt que défauté : un réglage absent est un réglage jamais
|
|
416
164
|
* touché, et le rendre obligatoire dans le type forcerait chaque appelant qui
|
|
@@ -418,21 +166,21 @@ var SettingsSchema = z3.object({
|
|
|
418
166
|
*/
|
|
419
167
|
companion: CompanionSettingsSchema.optional()
|
|
420
168
|
});
|
|
421
|
-
var TraefikConfigSchema =
|
|
422
|
-
enabled:
|
|
423
|
-
acmeEmail:
|
|
424
|
-
wildcardDomain:
|
|
425
|
-
httpPort:
|
|
426
|
-
httpsPort:
|
|
427
|
-
dnsProvider:
|
|
428
|
-
dnsCredentials:
|
|
429
|
-
acmeStaging:
|
|
430
|
-
encryptedCert:
|
|
431
|
-
encryptedCertKey:
|
|
432
|
-
});
|
|
433
|
-
var SettingsPrivateSchema =
|
|
434
|
-
aiProviders:
|
|
435
|
-
scenarios:
|
|
169
|
+
var TraefikConfigSchema = z2.object({
|
|
170
|
+
enabled: z2.boolean().default(false),
|
|
171
|
+
acmeEmail: z2.string().email().max(256).optional(),
|
|
172
|
+
wildcardDomain: z2.string().max(253).optional(),
|
|
173
|
+
httpPort: z2.number().int().min(1).max(65535).default(80),
|
|
174
|
+
httpsPort: z2.number().int().min(1).max(65535).default(443),
|
|
175
|
+
dnsProvider: z2.string().max(64).optional(),
|
|
176
|
+
dnsCredentials: z2.record(z2.string().max(64), z2.string().max(2048)).default({}),
|
|
177
|
+
acmeStaging: z2.boolean().default(false),
|
|
178
|
+
encryptedCert: z2.string().max(65536).optional(),
|
|
179
|
+
encryptedCertKey: z2.string().max(65536).optional()
|
|
180
|
+
});
|
|
181
|
+
var SettingsPrivateSchema = z2.object({
|
|
182
|
+
aiProviders: z2.array(AIProviderSchema).max(50).default([]),
|
|
183
|
+
scenarios: z2.array(ScenarioSchema).max(100).default([]),
|
|
436
184
|
notifications: NotificationPreferencesSchema.default(() => ({
|
|
437
185
|
scenario_waiting_input: true,
|
|
438
186
|
ai_conversation_complete: true,
|
|
@@ -446,9 +194,9 @@ var SettingsPrivateSchema = z3.object({
|
|
|
446
194
|
})),
|
|
447
195
|
traefikConfig: TraefikConfigSchema.optional()
|
|
448
196
|
});
|
|
449
|
-
var SchemaVersionSchema =
|
|
450
|
-
version:
|
|
451
|
-
migratedAt:
|
|
197
|
+
var SchemaVersionSchema = z2.object({
|
|
198
|
+
version: z2.number().int().positive(),
|
|
199
|
+
migratedAt: z2.coerce.date()
|
|
452
200
|
});
|
|
453
201
|
|
|
454
202
|
// ../../packages/shared/src/utils/companion-markers.ts
|
|
@@ -464,6 +212,24 @@ function extractCompanionRelay(raw) {
|
|
|
464
212
|
return inner || null;
|
|
465
213
|
}
|
|
466
214
|
|
|
215
|
+
// ../../packages/shared/src/utils/launcher-identity.ts
|
|
216
|
+
function slugifyLauncherName(name) {
|
|
217
|
+
const slug = name.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
218
|
+
return slug || "runeya";
|
|
219
|
+
}
|
|
220
|
+
function launcherIdFromName(name) {
|
|
221
|
+
const slug = slugifyLauncherName(name);
|
|
222
|
+
return slug.startsWith("runeya") ? slug : `runeya-${slug}`;
|
|
223
|
+
}
|
|
224
|
+
function baseName(path) {
|
|
225
|
+
const parts = path.split(/[\\/]+/).filter(Boolean);
|
|
226
|
+
return parts[parts.length - 1] ?? path;
|
|
227
|
+
}
|
|
228
|
+
function deriveLauncherIdentity(explicitName, workingDir) {
|
|
229
|
+
const name = explicitName ?? (workingDir ? `Runeya \u2014 ${baseName(workingDir)}` : "Runeya");
|
|
230
|
+
return { name, id: launcherIdFromName(name) };
|
|
231
|
+
}
|
|
232
|
+
|
|
467
233
|
// ../../packages/shared/src/constants/intervals.ts
|
|
468
234
|
var AGENT_HEALTH_POLL_INTERVAL = 15e3;
|
|
469
235
|
|
|
@@ -477,100 +243,100 @@ var WS_RECONNECT_MIN = 1e3;
|
|
|
477
243
|
var WS_RECONNECT_MAX = 15e3;
|
|
478
244
|
|
|
479
245
|
// ../../packages/shared/src/schemas/user.schema.ts
|
|
480
|
-
import { z as
|
|
481
|
-
var UserSchema =
|
|
482
|
-
id:
|
|
483
|
-
email:
|
|
484
|
-
name:
|
|
485
|
-
avatar:
|
|
246
|
+
import { z as z3 } from "zod";
|
|
247
|
+
var UserSchema = z3.object({
|
|
248
|
+
id: z3.string().max(128),
|
|
249
|
+
email: z3.string().email().max(320),
|
|
250
|
+
name: z3.string().min(1).max(500),
|
|
251
|
+
avatar: z3.string().url().max(2048).nullable().optional()
|
|
486
252
|
});
|
|
487
253
|
|
|
488
254
|
// ../../packages/shared/src/schemas/org.schema.ts
|
|
489
|
-
import { z as
|
|
490
|
-
var OrgSchema =
|
|
491
|
-
id:
|
|
492
|
-
name:
|
|
493
|
-
slug:
|
|
494
|
-
ownerId:
|
|
255
|
+
import { z as z4 } from "zod";
|
|
256
|
+
var OrgSchema = z4.object({
|
|
257
|
+
id: z4.string().max(128),
|
|
258
|
+
name: z4.string().min(1).max(100),
|
|
259
|
+
slug: z4.string().min(1).max(100).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/),
|
|
260
|
+
ownerId: z4.string().max(128)
|
|
495
261
|
});
|
|
496
|
-
var OrgMemberSchema =
|
|
497
|
-
id:
|
|
498
|
-
orgId:
|
|
499
|
-
userId:
|
|
500
|
-
globalRole:
|
|
501
|
-
invitedAt:
|
|
502
|
-
joinedAt:
|
|
262
|
+
var OrgMemberSchema = z4.object({
|
|
263
|
+
id: z4.string().max(128),
|
|
264
|
+
orgId: z4.string().max(128),
|
|
265
|
+
userId: z4.string().max(128),
|
|
266
|
+
globalRole: z4.enum(["owner", "admin", "member"]),
|
|
267
|
+
invitedAt: z4.coerce.date(),
|
|
268
|
+
joinedAt: z4.coerce.date().nullable().optional()
|
|
503
269
|
});
|
|
504
270
|
|
|
505
271
|
// ../../packages/shared/src/schemas/project.schema.ts
|
|
506
|
-
import { z as
|
|
507
|
-
var ProjectSchema =
|
|
508
|
-
id:
|
|
509
|
-
orgId:
|
|
510
|
-
name:
|
|
511
|
-
description:
|
|
512
|
-
serviceIds:
|
|
272
|
+
import { z as z5 } from "zod";
|
|
273
|
+
var ProjectSchema = z5.object({
|
|
274
|
+
id: z5.string().max(128),
|
|
275
|
+
orgId: z5.string().max(128).nullable().optional(),
|
|
276
|
+
name: z5.string().min(1).max(200),
|
|
277
|
+
description: z5.string().max(1e4).optional().default(""),
|
|
278
|
+
serviceIds: z5.array(z5.string().max(128)).max(1e4).default([]),
|
|
513
279
|
// Environment support
|
|
514
280
|
// NOTE: activeEnvironmentId is runtime-only (not persisted to JSON)
|
|
515
281
|
// It's initialized to 'local' by default at load time
|
|
516
|
-
activeEnvironmentId:
|
|
517
|
-
environmentIds:
|
|
282
|
+
activeEnvironmentId: z5.string().max(128).optional(),
|
|
283
|
+
environmentIds: z5.array(z5.string().max(128)).max(100).default([]),
|
|
518
284
|
// Ordre d'affichage des groupes de services dans la sidebar (noms de groupes).
|
|
519
285
|
// Les groupes absents de cette liste sont affichés après, par ordre alphabétique.
|
|
520
|
-
groupOrder:
|
|
286
|
+
groupOrder: z5.array(z5.string().max(200)).max(100).default([])
|
|
521
287
|
});
|
|
522
288
|
var CreateProjectSchema = ProjectSchema.omit({ id: true }).partial().required({ name: true });
|
|
523
289
|
var UpdateProjectSchema = ProjectSchema.partial().required({ id: true });
|
|
524
290
|
|
|
525
291
|
// ../../packages/shared/src/schemas/service.schema.ts
|
|
526
|
-
import { z as
|
|
292
|
+
import { z as z7 } from "zod";
|
|
527
293
|
|
|
528
294
|
// ../../packages/shared/src/schemas/log-source.schema.ts
|
|
529
|
-
import { z as
|
|
530
|
-
var safePath =
|
|
295
|
+
import { z as z6 } from "zod";
|
|
296
|
+
var safePath = z6.string().min(1).max(4096).refine(
|
|
531
297
|
(p) => !p.includes("\0"),
|
|
532
298
|
{ message: "path must not contain null bytes" }
|
|
533
299
|
).refine(
|
|
534
300
|
(p) => !/(^|[/\\])\.\.([/\\]|$)/.test(p),
|
|
535
301
|
{ message: "path must not contain path-traversal sequences (..)" }
|
|
536
302
|
);
|
|
537
|
-
var ConsoleLogSourceSchema =
|
|
538
|
-
type:
|
|
303
|
+
var ConsoleLogSourceSchema = z6.object({
|
|
304
|
+
type: z6.literal("console")
|
|
539
305
|
});
|
|
540
|
-
var FileLogSourceSchema =
|
|
541
|
-
type:
|
|
306
|
+
var FileLogSourceSchema = z6.object({
|
|
307
|
+
type: z6.literal("file"),
|
|
542
308
|
path: safePath,
|
|
543
|
-
encoding:
|
|
544
|
-
startFromEnd:
|
|
545
|
-
createIfNotExists:
|
|
309
|
+
encoding: z6.string().max(32).default("utf-8"),
|
|
310
|
+
startFromEnd: z6.boolean().default(true),
|
|
311
|
+
createIfNotExists: z6.boolean().default(false)
|
|
546
312
|
});
|
|
547
|
-
var MongoLogSourceSchema =
|
|
548
|
-
type:
|
|
313
|
+
var MongoLogSourceSchema = z6.object({
|
|
314
|
+
type: z6.literal("mongo"),
|
|
549
315
|
/** @sensitive — stored encrypted (AES-256-GCM) on disk */
|
|
550
|
-
connectionString:
|
|
551
|
-
database:
|
|
552
|
-
collection:
|
|
553
|
-
filter:
|
|
554
|
-
timestampField:
|
|
555
|
-
messageField:
|
|
556
|
-
levelField:
|
|
557
|
-
});
|
|
558
|
-
var MySQLLogSourceSchema =
|
|
559
|
-
type:
|
|
560
|
-
host:
|
|
561
|
-
port:
|
|
562
|
-
user:
|
|
316
|
+
connectionString: z6.string().min(1).max(2048),
|
|
317
|
+
database: z6.string().min(1).max(256),
|
|
318
|
+
collection: z6.string().min(1).max(256),
|
|
319
|
+
filter: z6.record(z6.string(), z6.unknown()).optional(),
|
|
320
|
+
timestampField: z6.string().max(128).default("timestamp"),
|
|
321
|
+
messageField: z6.string().max(128).default("message"),
|
|
322
|
+
levelField: z6.string().max(128).optional()
|
|
323
|
+
});
|
|
324
|
+
var MySQLLogSourceSchema = z6.object({
|
|
325
|
+
type: z6.literal("mysql"),
|
|
326
|
+
host: z6.string().min(1).max(253),
|
|
327
|
+
port: z6.number().int().min(1).max(65535).default(3306),
|
|
328
|
+
user: z6.string().min(1).max(256),
|
|
563
329
|
/** @sensitive — stored encrypted (AES-256-GCM) on disk */
|
|
564
|
-
password:
|
|
565
|
-
database:
|
|
566
|
-
table:
|
|
567
|
-
query:
|
|
568
|
-
timestampColumn:
|
|
569
|
-
messageColumn:
|
|
570
|
-
levelColumn:
|
|
571
|
-
pollIntervalMs:
|
|
572
|
-
});
|
|
573
|
-
var LogSourceConfigSchema =
|
|
330
|
+
password: z6.string().max(2048),
|
|
331
|
+
database: z6.string().min(1).max(256),
|
|
332
|
+
table: z6.string().min(1).max(256),
|
|
333
|
+
query: z6.string().max(8192).optional(),
|
|
334
|
+
timestampColumn: z6.string().max(128).default("created_at"),
|
|
335
|
+
messageColumn: z6.string().max(128).default("message"),
|
|
336
|
+
levelColumn: z6.string().max(128).optional(),
|
|
337
|
+
pollIntervalMs: z6.number().int().min(500).max(6e4).default(2e3)
|
|
338
|
+
});
|
|
339
|
+
var LogSourceConfigSchema = z6.discriminatedUnion("type", [
|
|
574
340
|
ConsoleLogSourceSchema,
|
|
575
341
|
FileLogSourceSchema,
|
|
576
342
|
MongoLogSourceSchema,
|
|
@@ -578,169 +344,169 @@ var LogSourceConfigSchema = z7.discriminatedUnion("type", [
|
|
|
578
344
|
]);
|
|
579
345
|
|
|
580
346
|
// ../../packages/shared/src/schemas/service.schema.ts
|
|
581
|
-
var HealthCheckSchema =
|
|
582
|
-
type:
|
|
347
|
+
var HealthCheckSchema = z7.object({
|
|
348
|
+
type: z7.enum(["http", "command"]).default("http"),
|
|
583
349
|
// HTTP-specific (required when type=http)
|
|
584
|
-
path:
|
|
585
|
-
method:
|
|
586
|
-
expectedStatus:
|
|
350
|
+
path: z7.string().min(1).max(500).startsWith("/").optional(),
|
|
351
|
+
method: z7.enum(["GET", "HEAD", "POST", "PUT"]).optional().default("GET"),
|
|
352
|
+
expectedStatus: z7.number().int().min(100).max(599).optional().default(200),
|
|
587
353
|
// Command-specific (required when type=command)
|
|
588
|
-
command:
|
|
354
|
+
command: z7.string().min(1).max(4096).optional(),
|
|
589
355
|
// Shared
|
|
590
|
-
interval:
|
|
591
|
-
timeout:
|
|
592
|
-
retries:
|
|
593
|
-
initialDelay:
|
|
356
|
+
interval: z7.number().int().positive().default(1e3),
|
|
357
|
+
timeout: z7.number().int().positive().default(1e3),
|
|
358
|
+
retries: z7.number().int().nonnegative().default(3),
|
|
359
|
+
initialDelay: z7.number().int().nonnegative().optional().default(0)
|
|
594
360
|
}).refine(
|
|
595
361
|
(data) => data.type === "http" ? !!data.path : !!data.command,
|
|
596
362
|
{ message: "HTTP type requires path; command type requires command" }
|
|
597
363
|
);
|
|
598
|
-
var BootstrapCommandSchema =
|
|
599
|
-
id:
|
|
600
|
-
label:
|
|
601
|
-
entrypoint:
|
|
602
|
-
command:
|
|
603
|
-
user:
|
|
604
|
-
});
|
|
605
|
-
var DockerConfigSchema =
|
|
364
|
+
var BootstrapCommandSchema = z7.object({
|
|
365
|
+
id: z7.string().min(1).max(64),
|
|
366
|
+
label: z7.string().max(200).default(""),
|
|
367
|
+
entrypoint: z7.string().max(4096).optional(),
|
|
368
|
+
command: z7.string().max(4096).default(""),
|
|
369
|
+
user: z7.string().max(256).optional()
|
|
370
|
+
});
|
|
371
|
+
var DockerConfigSchema = z7.object({
|
|
606
372
|
// Image mode (pull from registry) — mutually exclusive with build mode in UI
|
|
607
|
-
image:
|
|
373
|
+
image: z7.string().min(1).max(1024).optional(),
|
|
608
374
|
// Build mode — Dockerfile stored inline in services.json
|
|
609
|
-
dockerfile:
|
|
610
|
-
buildContext:
|
|
611
|
-
buildArgs:
|
|
375
|
+
dockerfile: z7.string().max(65536).optional(),
|
|
376
|
+
buildContext: z7.string().max(4096).optional(),
|
|
377
|
+
buildArgs: z7.record(z7.string().max(256), z7.string().max(4096)).default({}).refine(
|
|
612
378
|
(obj) => Object.keys(obj).length <= 50,
|
|
613
379
|
{ message: "Max 50 build args" }
|
|
614
380
|
),
|
|
615
|
-
targetStage:
|
|
381
|
+
targetStage: z7.string().max(256).optional(),
|
|
616
382
|
// Runtime config
|
|
617
|
-
networkMode:
|
|
618
|
-
ports:
|
|
619
|
-
volumes:
|
|
620
|
-
mountRootpath:
|
|
621
|
-
entrypoint:
|
|
622
|
-
command:
|
|
623
|
-
user:
|
|
624
|
-
useNativeCommand:
|
|
625
|
-
nativeCommandMode:
|
|
626
|
-
nativeShell:
|
|
627
|
-
bootstrapCommands:
|
|
628
|
-
});
|
|
629
|
-
var RestartStrategySchema =
|
|
630
|
-
var ServiceShortcutSchema =
|
|
631
|
-
id:
|
|
632
|
-
label:
|
|
633
|
-
command:
|
|
634
|
-
cwd:
|
|
635
|
-
});
|
|
636
|
-
var ServiceCommandSchema =
|
|
637
|
-
id:
|
|
638
|
-
label:
|
|
639
|
-
command:
|
|
640
|
-
cwd:
|
|
641
|
-
shell:
|
|
642
|
-
});
|
|
643
|
-
var VariableSlotSchema =
|
|
644
|
-
value:
|
|
645
|
-
pre:
|
|
646
|
-
post:
|
|
647
|
-
isSecret:
|
|
383
|
+
networkMode: z7.enum(["host", "bridge"]).default("host"),
|
|
384
|
+
ports: z7.array(z7.string().max(64)).max(100).default([]),
|
|
385
|
+
volumes: z7.array(z7.string().max(1024)).max(100).default([]),
|
|
386
|
+
mountRootpath: z7.boolean().default(false),
|
|
387
|
+
entrypoint: z7.string().max(4096).optional(),
|
|
388
|
+
command: z7.string().max(4096).optional(),
|
|
389
|
+
user: z7.string().max(256).optional(),
|
|
390
|
+
useNativeCommand: z7.boolean().default(false),
|
|
391
|
+
nativeCommandMode: z7.enum(["shared", "isolated"]).default("isolated"),
|
|
392
|
+
nativeShell: z7.string().max(256).default("sh"),
|
|
393
|
+
bootstrapCommands: z7.array(BootstrapCommandSchema).max(20).default([])
|
|
394
|
+
});
|
|
395
|
+
var RestartStrategySchema = z7.enum(["none", "on-failure", "always", "unless-stopped"]).default("none");
|
|
396
|
+
var ServiceShortcutSchema = z7.object({
|
|
397
|
+
id: z7.string().min(1).max(64),
|
|
398
|
+
label: z7.string().max(200).default(""),
|
|
399
|
+
command: z7.string().max(4096).default(""),
|
|
400
|
+
cwd: z7.string().max(4096).optional()
|
|
401
|
+
});
|
|
402
|
+
var ServiceCommandSchema = z7.object({
|
|
403
|
+
id: z7.string().min(1).max(64),
|
|
404
|
+
label: z7.string().max(200).default(""),
|
|
405
|
+
command: z7.string().max(4096).default(""),
|
|
406
|
+
cwd: z7.string().max(4096).optional(),
|
|
407
|
+
shell: z7.boolean().optional().default(true)
|
|
408
|
+
});
|
|
409
|
+
var VariableSlotSchema = z7.object({
|
|
410
|
+
value: z7.string().max(8192).default(""),
|
|
411
|
+
pre: z7.string().max(8192).default(""),
|
|
412
|
+
post: z7.string().max(8192).default(""),
|
|
413
|
+
isSecret: z7.boolean().default(false),
|
|
648
414
|
// When true, this variable is injected into the process environment of AI
|
|
649
415
|
// agents (Claude Code, Codex, …) spawned while this environment is active.
|
|
650
416
|
// Opt-in: defaults to false so secrets are never leaked to AI agents by default.
|
|
651
|
-
injectIntoAi:
|
|
417
|
+
injectIntoAi: z7.boolean().default(false)
|
|
652
418
|
});
|
|
653
|
-
var VariableSchema =
|
|
654
|
-
key:
|
|
419
|
+
var VariableSchema = z7.object({
|
|
420
|
+
key: z7.string().min(1).max(256),
|
|
655
421
|
value: VariableSlotSchema
|
|
656
422
|
});
|
|
657
|
-
var VariablesRecordSchema =
|
|
658
|
-
|
|
423
|
+
var VariablesRecordSchema = z7.record(
|
|
424
|
+
z7.string().max(128),
|
|
659
425
|
VariableSchema
|
|
660
426
|
).refine(
|
|
661
427
|
(obj) => Object.keys(obj).length <= 200,
|
|
662
428
|
{ message: "Max 200 variables" }
|
|
663
429
|
);
|
|
664
|
-
var VariableSlotsRecordSchema =
|
|
665
|
-
|
|
430
|
+
var VariableSlotsRecordSchema = z7.record(
|
|
431
|
+
z7.string().max(256),
|
|
666
432
|
VariableSlotSchema
|
|
667
433
|
).refine(
|
|
668
434
|
(obj) => Object.keys(obj).length <= 200,
|
|
669
435
|
{ message: "Max 200 variable slots" }
|
|
670
436
|
);
|
|
671
|
-
var ServiceConfigSchema =
|
|
672
|
-
id:
|
|
673
|
-
orgId:
|
|
674
|
-
agentId:
|
|
437
|
+
var ServiceConfigSchema = z7.object({
|
|
438
|
+
id: z7.string().max(128),
|
|
439
|
+
orgId: z7.string().max(128).nullable().optional(),
|
|
440
|
+
agentId: z7.string().max(128).optional(),
|
|
675
441
|
// Optional: if absent, inherited from active environment's agentId
|
|
676
|
-
name:
|
|
677
|
-
commands:
|
|
678
|
-
cwd:
|
|
679
|
-
ports:
|
|
442
|
+
name: z7.string().min(1).max(200),
|
|
443
|
+
commands: z7.array(ServiceCommandSchema).max(50).optional().default([]),
|
|
444
|
+
cwd: z7.string().max(4096).optional(),
|
|
445
|
+
ports: z7.array(z7.number().int().positive().max(65535)).max(20).optional().default([]),
|
|
680
446
|
// Metadata fields (migration from old Runeya)
|
|
681
|
-
groups:
|
|
682
|
-
description:
|
|
447
|
+
groups: z7.array(z7.string().max(200)).max(20).optional().default([]),
|
|
448
|
+
description: z7.string().max(2e3).optional(),
|
|
683
449
|
/** Path (relative to service.cwd or absolute) where the service's docs/wiki markdown files live. Optional — defaults to service.cwd. */
|
|
684
|
-
docsPath:
|
|
685
|
-
url:
|
|
686
|
-
localUrls:
|
|
687
|
-
url:
|
|
688
|
-
port:
|
|
450
|
+
docsPath: z7.string().max(4096).optional(),
|
|
451
|
+
url: z7.string().max(2048).optional(),
|
|
452
|
+
localUrls: z7.array(z7.object({
|
|
453
|
+
url: z7.string().max(253).regex(/^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/),
|
|
454
|
+
port: z7.number().int().min(1).max(65535)
|
|
689
455
|
})).max(20).optional().default([]),
|
|
690
|
-
openapiUrl:
|
|
691
|
-
git:
|
|
692
|
-
remote:
|
|
693
|
-
home:
|
|
456
|
+
openapiUrl: z7.string().max(2048).optional(),
|
|
457
|
+
git: z7.object({
|
|
458
|
+
remote: z7.string().max(2048).optional(),
|
|
459
|
+
home: z7.string().max(2048).optional()
|
|
694
460
|
}).optional(),
|
|
695
|
-
meta:
|
|
461
|
+
meta: z7.record(z7.string().max(256), z7.string().max(2e3)).optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
|
|
696
462
|
// Transient env dict (resolved by server before deployment, used directly by agent runner — NOT persisted)
|
|
697
|
-
env:
|
|
463
|
+
env: z7.record(z7.string().max(256), z7.string().max(8192)).default({}).refine(
|
|
698
464
|
(obj) => Object.keys(obj).length <= 200,
|
|
699
465
|
{ message: "Too many env vars (max 200)" }
|
|
700
466
|
),
|
|
701
|
-
envSecrets:
|
|
467
|
+
envSecrets: z7.array(z7.string().max(256)).max(200).default([]),
|
|
702
468
|
// Transient: resolved JS log parsers (from parserIds, resolved by server before deployment — NOT persisted)
|
|
703
|
-
resolvedLogParsers:
|
|
469
|
+
resolvedLogParsers: z7.array(JSLogParserSchema).default([]).optional(),
|
|
704
470
|
// Transient: resolved working directory (cwd with env vars expanded — NOT persisted)
|
|
705
|
-
resolvedCwd:
|
|
706
|
-
runner:
|
|
471
|
+
resolvedCwd: z7.string().optional(),
|
|
472
|
+
runner: z7.enum(["native", "docker"]).optional().default("native"),
|
|
707
473
|
dockerConfig: DockerConfigSchema.optional(),
|
|
708
474
|
healthCheck: HealthCheckSchema.optional(),
|
|
709
|
-
parserIds:
|
|
710
|
-
shortcuts:
|
|
711
|
-
autoRestart:
|
|
712
|
-
clearLogsOnStart:
|
|
475
|
+
parserIds: z7.array(z7.string().max(128)).max(50).default([]),
|
|
476
|
+
shortcuts: z7.array(ServiceShortcutSchema).max(50).optional().default([]),
|
|
477
|
+
autoRestart: z7.boolean().optional().default(false),
|
|
478
|
+
clearLogsOnStart: z7.boolean().optional().default(false),
|
|
713
479
|
restartStrategy: RestartStrategySchema.optional(),
|
|
714
|
-
maxRestarts:
|
|
715
|
-
restartBackoffMs:
|
|
480
|
+
maxRestarts: z7.number().int().nonnegative().optional(),
|
|
481
|
+
restartBackoffMs: z7.number().int().positive().optional().default(1e3),
|
|
716
482
|
// Log sources additionnelles (au-delà du stdout/stderr console par défaut)
|
|
717
|
-
logSources:
|
|
483
|
+
logSources: z7.array(LogSourceConfigSchema).max(20).optional().default([])
|
|
718
484
|
});
|
|
719
485
|
var CreateServiceSchema = ServiceConfigSchema.omit({ id: true }).partial().required({ name: true });
|
|
720
486
|
var UpdateServiceSchema = ServiceConfigSchema.partial().required({ id: true }).extend({
|
|
721
|
-
agentId:
|
|
487
|
+
agentId: z7.string().max(128).nullable().optional(),
|
|
722
488
|
// null = clear (inherit from env), undefined = no change
|
|
723
|
-
cwd:
|
|
724
|
-
git:
|
|
725
|
-
meta:
|
|
489
|
+
cwd: z7.string().max(4096).nullable().optional(),
|
|
490
|
+
git: z7.object({ remote: z7.string().max(2048).optional(), home: z7.string().max(2048).optional() }).nullable().optional(),
|
|
491
|
+
meta: z7.record(z7.string().max(256), z7.string().max(2e3)).nullable().optional().refine((obj) => !obj || Object.keys(obj).length <= 100, { message: "Too many meta keys (max 100)" }),
|
|
726
492
|
healthCheck: HealthCheckSchema.nullable().optional()
|
|
727
493
|
});
|
|
728
494
|
|
|
729
495
|
// ../../packages/shared/src/schemas/process.schema.ts
|
|
730
|
-
import { z as
|
|
731
|
-
var ProcessStateSchema =
|
|
732
|
-
var HealthStatusSchema =
|
|
733
|
-
var ProcessStatusSchema =
|
|
734
|
-
id:
|
|
735
|
-
serviceId:
|
|
736
|
-
agentId:
|
|
496
|
+
import { z as z8 } from "zod";
|
|
497
|
+
var ProcessStateSchema = z8.enum(["starting", "running", "stopped", "errored"]);
|
|
498
|
+
var HealthStatusSchema = z8.enum(["healthy", "unhealthy", "unknown"]);
|
|
499
|
+
var ProcessStatusSchema = z8.object({
|
|
500
|
+
id: z8.string().max(128),
|
|
501
|
+
serviceId: z8.string().max(128),
|
|
502
|
+
agentId: z8.string().max(128),
|
|
737
503
|
state: ProcessStateSchema,
|
|
738
|
-
pid:
|
|
739
|
-
pids:
|
|
740
|
-
exitCode:
|
|
741
|
-
startedAt:
|
|
742
|
-
restartCount:
|
|
743
|
-
uptime:
|
|
504
|
+
pid: z8.number().int().nullable().optional(),
|
|
505
|
+
pids: z8.array(z8.number().int()).optional().default([]),
|
|
506
|
+
exitCode: z8.number().int().nullable().optional(),
|
|
507
|
+
startedAt: z8.coerce.date().nullable().optional(),
|
|
508
|
+
restartCount: z8.number().int().nonnegative().default(0),
|
|
509
|
+
uptime: z8.number().nonnegative().default(0),
|
|
744
510
|
healthStatus: HealthStatusSchema.default("unknown"),
|
|
745
511
|
/**
|
|
746
512
|
* Le répertoire où le processus s'exécute VRAIMENT, absolutisé par l'agent.
|
|
@@ -751,139 +517,139 @@ var ProcessStatusSchema = z9.object({
|
|
|
751
517
|
* intéresse quand un service tourne contre le mauvais dépôt, c'est le chemin
|
|
752
518
|
* final — y compris quand il retombe sur le répertoire de l'agent.
|
|
753
519
|
*/
|
|
754
|
-
cwd:
|
|
520
|
+
cwd: z8.string().max(4096).nullable().optional()
|
|
755
521
|
});
|
|
756
522
|
|
|
757
523
|
// ../../packages/shared/src/schemas/log.schema.ts
|
|
758
|
-
import { z as
|
|
759
|
-
var LogLevelSchema =
|
|
760
|
-
var LogLineSchema =
|
|
524
|
+
import { z as z9 } from "zod";
|
|
525
|
+
var LogLevelSchema = z9.enum(["debug", "info", "warn", "error", "fatal"]);
|
|
526
|
+
var LogLineSchema = z9.object({
|
|
761
527
|
/** Raw log line as received from the process (immutable context) */
|
|
762
|
-
raw:
|
|
528
|
+
raw: z9.string(),
|
|
763
529
|
/** Source stream (immutable context) */
|
|
764
|
-
stream:
|
|
530
|
+
stream: z9.enum(["stdout", "stderr"]),
|
|
765
531
|
/** Severity level */
|
|
766
532
|
level: LogLevelSchema,
|
|
767
533
|
/** Parsed/enriched message to display */
|
|
768
|
-
message:
|
|
534
|
+
message: z9.string(),
|
|
769
535
|
/** When true, the line is hidden from the log view */
|
|
770
|
-
hidden:
|
|
536
|
+
hidden: z9.boolean(),
|
|
771
537
|
/** Arbitrary key/value pairs shown in the detail panel */
|
|
772
|
-
metadata:
|
|
538
|
+
metadata: z9.record(z9.string().max(256), z9.unknown()).refine(
|
|
773
539
|
(obj) => Object.keys(obj).length <= 100,
|
|
774
540
|
{ message: "Too many metadata keys (max 100)" }
|
|
775
541
|
),
|
|
776
542
|
/** Full parsed JSON object when the line is JSON */
|
|
777
|
-
json:
|
|
543
|
+
json: z9.record(z9.string(), z9.unknown()).optional(),
|
|
778
544
|
/** Custom header for the JSON log card (supports HTML, sanitized before display) */
|
|
779
|
-
jsonHeader:
|
|
545
|
+
jsonHeader: z9.string().max(256).optional()
|
|
780
546
|
});
|
|
781
|
-
var LogCardDirectiveSchema =
|
|
782
|
-
id:
|
|
783
|
-
type:
|
|
784
|
-
header:
|
|
785
|
-
collapsable:
|
|
786
|
-
collapsed:
|
|
787
|
-
state:
|
|
547
|
+
var LogCardDirectiveSchema = z9.object({
|
|
548
|
+
id: z9.string().max(128),
|
|
549
|
+
type: z9.string().max(64),
|
|
550
|
+
header: z9.string().max(256),
|
|
551
|
+
collapsable: z9.boolean().optional(),
|
|
552
|
+
collapsed: z9.boolean().optional(),
|
|
553
|
+
state: z9.enum(["open", "append", "close", "self"])
|
|
788
554
|
});
|
|
789
|
-
var ParsedLogSchema =
|
|
790
|
-
id:
|
|
791
|
-
processId:
|
|
792
|
-
pid:
|
|
793
|
-
timestamp:
|
|
555
|
+
var ParsedLogSchema = z9.object({
|
|
556
|
+
id: z9.string().max(128),
|
|
557
|
+
processId: z9.string().max(128),
|
|
558
|
+
pid: z9.number().int().nullable().optional(),
|
|
559
|
+
timestamp: z9.coerce.date(),
|
|
794
560
|
level: LogLevelSchema.default("info"),
|
|
795
|
-
message:
|
|
796
|
-
raw:
|
|
797
|
-
stream:
|
|
798
|
-
hidden:
|
|
799
|
-
metadata:
|
|
561
|
+
message: z9.string().max(16384),
|
|
562
|
+
raw: z9.string().max(16384),
|
|
563
|
+
stream: z9.enum(["stdout", "stderr"]).default("stdout"),
|
|
564
|
+
hidden: z9.boolean().optional().default(false),
|
|
565
|
+
metadata: z9.record(z9.string().max(256), z9.unknown()).optional().refine(
|
|
800
566
|
(obj) => !obj || Object.keys(obj).length <= 100,
|
|
801
567
|
{ message: "Too many metadata keys (max 100)" }
|
|
802
568
|
),
|
|
803
|
-
json:
|
|
569
|
+
json: z9.record(z9.string(), z9.unknown()).optional(),
|
|
804
570
|
logCard: LogCardDirectiveSchema.optional(),
|
|
805
|
-
sourceType:
|
|
806
|
-
sourcePath:
|
|
571
|
+
sourceType: z9.enum(["console", "file", "mongo", "mysql"]).optional(),
|
|
572
|
+
sourcePath: z9.string().max(4096).optional()
|
|
807
573
|
});
|
|
808
574
|
|
|
809
575
|
// ../../packages/shared/src/schemas/agent.schema.ts
|
|
810
|
-
import { z as
|
|
576
|
+
import { z as z10 } from "zod";
|
|
811
577
|
var ENV_VAR_NAME_REGEX = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
812
|
-
var AgentConfigSchema =
|
|
813
|
-
id:
|
|
814
|
-
name:
|
|
815
|
-
url:
|
|
816
|
-
passphrase:
|
|
817
|
-
passthroughEnv:
|
|
818
|
-
|
|
578
|
+
var AgentConfigSchema = z10.object({
|
|
579
|
+
id: z10.string().max(128),
|
|
580
|
+
name: z10.string().min(1).max(100),
|
|
581
|
+
url: z10.string().url().max(2048),
|
|
582
|
+
passphrase: z10.string().min(1).max(1024),
|
|
583
|
+
passthroughEnv: z10.array(
|
|
584
|
+
z10.string().regex(ENV_VAR_NAME_REGEX).max(256)
|
|
819
585
|
).max(100).default([])
|
|
820
586
|
});
|
|
821
|
-
var AgentStatusSchema =
|
|
822
|
-
connected:
|
|
823
|
-
lastSeen:
|
|
824
|
-
uptime:
|
|
825
|
-
runnersAvailable:
|
|
826
|
-
lanIp:
|
|
587
|
+
var AgentStatusSchema = z10.object({
|
|
588
|
+
connected: z10.boolean(),
|
|
589
|
+
lastSeen: z10.string().nullable().optional(),
|
|
590
|
+
uptime: z10.number().nonnegative().default(0),
|
|
591
|
+
runnersAvailable: z10.array(z10.enum(["native", "docker"])).default(["native"]),
|
|
592
|
+
lanIp: z10.string().optional(),
|
|
827
593
|
/**
|
|
828
594
|
* Ce que la machine de l'agent vaut pour les builtins de portée `agent`.
|
|
829
595
|
* Sert à PRÉVISUALISER — la valeur injectée reste calculée au lancement, par
|
|
830
596
|
* l'agent lui-même : une IP change, un agent se déconnecte, et un statut
|
|
831
597
|
* n'est qu'un cliché.
|
|
832
598
|
*/
|
|
833
|
-
os:
|
|
834
|
-
home:
|
|
835
|
-
cwd:
|
|
599
|
+
os: z10.string().max(64).optional(),
|
|
600
|
+
home: z10.string().max(4096).optional(),
|
|
601
|
+
cwd: z10.string().max(4096).optional()
|
|
836
602
|
});
|
|
837
603
|
|
|
838
604
|
// ../../packages/shared/src/schemas/permission.schema.ts
|
|
839
|
-
import { z as
|
|
840
|
-
var GlobalRoleSchema =
|
|
841
|
-
var ProjectRoleSchema =
|
|
842
|
-
var ProjectMemberRoleSchema =
|
|
843
|
-
id:
|
|
844
|
-
projectId:
|
|
845
|
-
userId:
|
|
605
|
+
import { z as z11 } from "zod";
|
|
606
|
+
var GlobalRoleSchema = z11.enum(["owner", "admin", "member"]);
|
|
607
|
+
var ProjectRoleSchema = z11.enum(["admin", "editor", "viewer"]);
|
|
608
|
+
var ProjectMemberRoleSchema = z11.object({
|
|
609
|
+
id: z11.string().max(128),
|
|
610
|
+
projectId: z11.string().max(128),
|
|
611
|
+
userId: z11.string().max(128),
|
|
846
612
|
role: ProjectRoleSchema
|
|
847
613
|
});
|
|
848
614
|
|
|
849
615
|
// ../../packages/shared/src/schemas/sync.schema.ts
|
|
850
|
-
import { z as
|
|
851
|
-
var ConfigVersionSchema =
|
|
852
|
-
id:
|
|
853
|
-
entityType:
|
|
854
|
-
entityId:
|
|
855
|
-
version:
|
|
856
|
-
parentVersion:
|
|
857
|
-
data:
|
|
616
|
+
import { z as z12 } from "zod";
|
|
617
|
+
var ConfigVersionSchema = z12.object({
|
|
618
|
+
id: z12.string().max(128),
|
|
619
|
+
entityType: z12.enum(["project", "service"]),
|
|
620
|
+
entityId: z12.string().max(128),
|
|
621
|
+
version: z12.string().max(128),
|
|
622
|
+
parentVersion: z12.string().max(128),
|
|
623
|
+
data: z12.record(z12.string(), z12.unknown()).refine(
|
|
858
624
|
(obj) => Object.keys(obj).length <= 1e3,
|
|
859
625
|
"Too many data keys (max 1000)"
|
|
860
626
|
),
|
|
861
|
-
patch:
|
|
862
|
-
userId:
|
|
863
|
-
timestamp:
|
|
864
|
-
resolved:
|
|
865
|
-
});
|
|
866
|
-
var ConfigChangeSchema =
|
|
867
|
-
entityType:
|
|
868
|
-
entityId:
|
|
869
|
-
version:
|
|
870
|
-
parentVersion:
|
|
871
|
-
data:
|
|
627
|
+
patch: z12.array(z12.record(z12.string(), z12.unknown())).max(1e3),
|
|
628
|
+
userId: z12.string().max(128),
|
|
629
|
+
timestamp: z12.coerce.date(),
|
|
630
|
+
resolved: z12.boolean().default(false)
|
|
631
|
+
});
|
|
632
|
+
var ConfigChangeSchema = z12.object({
|
|
633
|
+
entityType: z12.enum(["project", "service"]),
|
|
634
|
+
entityId: z12.string().max(128),
|
|
635
|
+
version: z12.string().max(128),
|
|
636
|
+
parentVersion: z12.string().max(128),
|
|
637
|
+
data: z12.record(z12.string(), z12.unknown()).refine(
|
|
872
638
|
(obj) => Object.keys(obj).length <= 1e3,
|
|
873
639
|
"Too many data keys (max 1000)"
|
|
874
640
|
),
|
|
875
|
-
patch:
|
|
641
|
+
patch: z12.array(z12.record(z12.string(), z12.unknown())).max(1e3)
|
|
876
642
|
});
|
|
877
|
-
var SyncStatusSchema =
|
|
878
|
-
connected:
|
|
879
|
-
lastSync:
|
|
880
|
-
pendingChanges:
|
|
881
|
-
conflicts:
|
|
643
|
+
var SyncStatusSchema = z12.object({
|
|
644
|
+
connected: z12.boolean(),
|
|
645
|
+
lastSync: z12.coerce.date().nullable().optional(),
|
|
646
|
+
pendingChanges: z12.number().int().nonnegative().default(0),
|
|
647
|
+
conflicts: z12.number().int().nonnegative().default(0)
|
|
882
648
|
});
|
|
883
649
|
|
|
884
650
|
// ../../packages/shared/src/schemas/audit.schema.ts
|
|
885
|
-
import { z as
|
|
886
|
-
var AuditActionSchema =
|
|
651
|
+
import { z as z13 } from "zod";
|
|
652
|
+
var AuditActionSchema = z13.enum([
|
|
887
653
|
"create",
|
|
888
654
|
"update",
|
|
889
655
|
"delete",
|
|
@@ -894,113 +660,113 @@ var AuditActionSchema = z14.enum([
|
|
|
894
660
|
"stop",
|
|
895
661
|
"roleChange"
|
|
896
662
|
]);
|
|
897
|
-
var AuditEntityTypeSchema =
|
|
663
|
+
var AuditEntityTypeSchema = z13.enum([
|
|
898
664
|
"org",
|
|
899
665
|
"project",
|
|
900
666
|
"service",
|
|
901
667
|
"member",
|
|
902
668
|
"permission"
|
|
903
669
|
]);
|
|
904
|
-
var AuditLogSchema =
|
|
905
|
-
id:
|
|
906
|
-
orgId:
|
|
907
|
-
userId:
|
|
670
|
+
var AuditLogSchema = z13.object({
|
|
671
|
+
id: z13.string().max(128),
|
|
672
|
+
orgId: z13.string().max(128),
|
|
673
|
+
userId: z13.string().max(128),
|
|
908
674
|
action: AuditActionSchema,
|
|
909
675
|
entityType: AuditEntityTypeSchema,
|
|
910
|
-
entityId:
|
|
911
|
-
metadata:
|
|
676
|
+
entityId: z13.string().max(128),
|
|
677
|
+
metadata: z13.record(z13.string().max(256), z13.unknown()).default({}).refine(
|
|
912
678
|
(obj) => Object.keys(obj).length <= 100,
|
|
913
679
|
{ message: "Too many metadata keys (max 100)" }
|
|
914
680
|
),
|
|
915
|
-
timestamp:
|
|
681
|
+
timestamp: z13.coerce.date()
|
|
916
682
|
});
|
|
917
683
|
|
|
918
684
|
// ../../packages/shared/src/schemas/metrics.schema.ts
|
|
919
|
-
import { z as
|
|
920
|
-
var ProcessMetricsSchema =
|
|
921
|
-
processId:
|
|
922
|
-
cpu:
|
|
923
|
-
memory:
|
|
924
|
-
timestamp:
|
|
685
|
+
import { z as z14 } from "zod";
|
|
686
|
+
var ProcessMetricsSchema = z14.object({
|
|
687
|
+
processId: z14.string().max(128),
|
|
688
|
+
cpu: z14.number().nonnegative(),
|
|
689
|
+
memory: z14.number().int().nonnegative(),
|
|
690
|
+
timestamp: z14.string()
|
|
925
691
|
});
|
|
926
692
|
|
|
927
693
|
// ../../packages/shared/src/schemas/environment.schema.ts
|
|
928
|
-
import { z as
|
|
929
|
-
var EnvironmentVariablesSchema =
|
|
930
|
-
|
|
694
|
+
import { z as z15 } from "zod";
|
|
695
|
+
var EnvironmentVariablesSchema = z15.record(
|
|
696
|
+
z15.string().max(256),
|
|
931
697
|
VariableSchema
|
|
932
698
|
).refine(
|
|
933
699
|
(obj) => Object.keys(obj).length <= 200,
|
|
934
700
|
{ message: "Max 200 variables" }
|
|
935
701
|
);
|
|
936
|
-
var EnvironmentSchema =
|
|
937
|
-
id:
|
|
938
|
-
projectId:
|
|
939
|
-
name:
|
|
940
|
-
description:
|
|
941
|
-
parentIds:
|
|
702
|
+
var EnvironmentSchema = z15.object({
|
|
703
|
+
id: z15.string().max(128),
|
|
704
|
+
projectId: z15.string().max(128),
|
|
705
|
+
name: z15.string().min(1).max(200),
|
|
706
|
+
description: z15.string().max(2e3).optional().default(""),
|
|
707
|
+
parentIds: z15.array(z15.string().max(128)).max(10).default([]),
|
|
942
708
|
variables: EnvironmentVariablesSchema.default({}),
|
|
943
709
|
// Scope: 'global' = project-level env, 'service' = per-service env
|
|
944
|
-
scope:
|
|
710
|
+
scope: z15.enum(["global", "service"]).default("global"),
|
|
945
711
|
// When scope='service': the serviceId this env belongs to
|
|
946
|
-
reference:
|
|
712
|
+
reference: z15.string().max(128).optional(),
|
|
947
713
|
// When scope='service': the globalEnvId this env activates on
|
|
948
|
-
activateOn:
|
|
949
|
-
immutable:
|
|
950
|
-
default:
|
|
951
|
-
color:
|
|
952
|
-
bgColor:
|
|
714
|
+
activateOn: z15.string().max(128).optional(),
|
|
715
|
+
immutable: z15.boolean().default(false),
|
|
716
|
+
default: z15.boolean().optional().default(false),
|
|
717
|
+
color: z15.string().max(20).optional(),
|
|
718
|
+
bgColor: z15.string().max(20).optional(),
|
|
953
719
|
// When scope='global': the default agent used by services that don't have an explicit agentId
|
|
954
|
-
agentId:
|
|
955
|
-
});
|
|
956
|
-
var ResolvedEnvironmentSchema =
|
|
957
|
-
variables:
|
|
958
|
-
env:
|
|
959
|
-
envSecrets:
|
|
960
|
-
sources:
|
|
961
|
-
environmentId:
|
|
962
|
-
environmentName:
|
|
963
|
-
overridden:
|
|
964
|
-
resolvedFrom:
|
|
965
|
-
environmentId:
|
|
966
|
-
environmentName:
|
|
720
|
+
agentId: z15.string().max(128).optional()
|
|
721
|
+
});
|
|
722
|
+
var ResolvedEnvironmentSchema = z15.object({
|
|
723
|
+
variables: z15.record(z15.string().max(256), VariableSchema).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved variables" }),
|
|
724
|
+
env: z15.record(z15.string().max(256), z15.string().max(8192)).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 resolved env vars" }),
|
|
725
|
+
envSecrets: z15.array(z15.string().max(256)).max(500),
|
|
726
|
+
sources: z15.record(z15.string().max(256), z15.object({
|
|
727
|
+
environmentId: z15.string().max(128),
|
|
728
|
+
environmentName: z15.string().max(200),
|
|
729
|
+
overridden: z15.boolean(),
|
|
730
|
+
resolvedFrom: z15.object({
|
|
731
|
+
environmentId: z15.string().max(128),
|
|
732
|
+
environmentName: z15.string().max(200)
|
|
967
733
|
}).optional(),
|
|
968
734
|
// Set when a machine-local override was applied to this variable, pointing
|
|
969
735
|
// at the environment that carries the winning override. Distinct from
|
|
970
736
|
// `overridden`, which also covers "shadows an inherited variable".
|
|
971
|
-
overriddenBy:
|
|
972
|
-
environmentId:
|
|
973
|
-
environmentName:
|
|
737
|
+
overriddenBy: z15.object({
|
|
738
|
+
environmentId: z15.string().max(128),
|
|
739
|
+
environmentName: z15.string().max(200)
|
|
974
740
|
}).optional()
|
|
975
741
|
})).refine((obj) => Object.keys(obj).length <= 500, { message: "Max 500 source entries" })
|
|
976
742
|
});
|
|
977
743
|
var CreateEnvironmentSchema = EnvironmentSchema.omit({ id: true }).extend({
|
|
978
|
-
description:
|
|
979
|
-
parentIds:
|
|
744
|
+
description: z15.string().max(2e3).optional().default(""),
|
|
745
|
+
parentIds: z15.array(z15.string().max(128)).max(10).optional().default([]),
|
|
980
746
|
variables: EnvironmentVariablesSchema.optional().default({}),
|
|
981
|
-
scope:
|
|
982
|
-
reference:
|
|
983
|
-
activateOn:
|
|
984
|
-
immutable:
|
|
747
|
+
scope: z15.enum(["global", "service"]).optional().default("global"),
|
|
748
|
+
reference: z15.string().max(128).optional(),
|
|
749
|
+
activateOn: z15.string().max(128).optional(),
|
|
750
|
+
immutable: z15.boolean().optional().default(false)
|
|
985
751
|
});
|
|
986
752
|
var UpdateEnvironmentSchema = EnvironmentSchema.partial().required({ id: true }).extend({
|
|
987
|
-
description:
|
|
988
|
-
parentIds:
|
|
753
|
+
description: z15.string().max(2e3).optional(),
|
|
754
|
+
parentIds: z15.array(z15.string().max(128)).max(10).optional(),
|
|
989
755
|
variables: EnvironmentVariablesSchema.optional(),
|
|
990
|
-
scope:
|
|
991
|
-
immutable:
|
|
992
|
-
default:
|
|
993
|
-
agentId:
|
|
756
|
+
scope: z15.enum(["global", "service"]).optional(),
|
|
757
|
+
immutable: z15.boolean().optional(),
|
|
758
|
+
default: z15.boolean().optional(),
|
|
759
|
+
agentId: z15.string().max(128).nullable().optional()
|
|
994
760
|
// null = clear (no default agent)
|
|
995
761
|
});
|
|
996
762
|
|
|
997
763
|
// ../../packages/shared/src/schemas/environment-overrides.schema.ts
|
|
998
|
-
import { z as
|
|
999
|
-
var VariableOverrideSchema =
|
|
764
|
+
import { z as z16 } from "zod";
|
|
765
|
+
var VariableOverrideSchema = z16.object({
|
|
1000
766
|
value: VariableSlotSchema
|
|
1001
767
|
});
|
|
1002
|
-
var EnvironmentOverridesSchema =
|
|
1003
|
-
|
|
768
|
+
var EnvironmentOverridesSchema = z16.record(
|
|
769
|
+
z16.string().max(128),
|
|
1004
770
|
VariableOverrideSchema
|
|
1005
771
|
).refine(
|
|
1006
772
|
(obj) => Object.keys(obj).length <= 5e3,
|
|
@@ -1008,8 +774,8 @@ var EnvironmentOverridesSchema = z17.record(
|
|
|
1008
774
|
);
|
|
1009
775
|
|
|
1010
776
|
// ../../packages/shared/src/schemas/api-key.schema.ts
|
|
1011
|
-
import { z as
|
|
1012
|
-
var ApiServiceActionSchema =
|
|
777
|
+
import { z as z17 } from "zod";
|
|
778
|
+
var ApiServiceActionSchema = z17.enum([
|
|
1013
779
|
"service:read",
|
|
1014
780
|
"service:start",
|
|
1015
781
|
"service:stop",
|
|
@@ -1018,76 +784,76 @@ var ApiServiceActionSchema = z18.enum([
|
|
|
1018
784
|
"service:status",
|
|
1019
785
|
"logs:read"
|
|
1020
786
|
]);
|
|
1021
|
-
var ApiEnvActionSchema =
|
|
1022
|
-
var ApiEnvPermSchema =
|
|
1023
|
-
environmentId:
|
|
1024
|
-
actions:
|
|
1025
|
-
includeSecrets:
|
|
1026
|
-
});
|
|
1027
|
-
var ApiServicePermSchema =
|
|
1028
|
-
serviceId:
|
|
1029
|
-
actions:
|
|
1030
|
-
environments:
|
|
1031
|
-
});
|
|
1032
|
-
var ApiKeyScopeSchema =
|
|
1033
|
-
services:
|
|
1034
|
-
});
|
|
1035
|
-
var ApiKeySchema =
|
|
1036
|
-
id:
|
|
1037
|
-
name:
|
|
1038
|
-
key:
|
|
787
|
+
var ApiEnvActionSchema = z17.enum(["env:read", "env:write"]);
|
|
788
|
+
var ApiEnvPermSchema = z17.object({
|
|
789
|
+
environmentId: z17.string().max(128),
|
|
790
|
+
actions: z17.array(ApiEnvActionSchema).max(10).default(["env:read"]),
|
|
791
|
+
includeSecrets: z17.boolean().default(false)
|
|
792
|
+
});
|
|
793
|
+
var ApiServicePermSchema = z17.object({
|
|
794
|
+
serviceId: z17.string().max(128),
|
|
795
|
+
actions: z17.array(ApiServiceActionSchema).max(10).default(["service:read"]),
|
|
796
|
+
environments: z17.array(ApiEnvPermSchema).max(100).default([])
|
|
797
|
+
});
|
|
798
|
+
var ApiKeyScopeSchema = z17.object({
|
|
799
|
+
services: z17.array(ApiServicePermSchema).max(500).default([])
|
|
800
|
+
});
|
|
801
|
+
var ApiKeySchema = z17.object({
|
|
802
|
+
id: z17.string().max(128),
|
|
803
|
+
name: z17.string().min(1).max(200),
|
|
804
|
+
key: z17.string().regex(/^[0-9a-f]{64}$/i),
|
|
1039
805
|
scopes: ApiKeyScopeSchema,
|
|
1040
|
-
createdAt:
|
|
1041
|
-
isPublic:
|
|
806
|
+
createdAt: z17.string().max(64),
|
|
807
|
+
isPublic: z17.boolean().default(false)
|
|
1042
808
|
});
|
|
1043
809
|
var PersistedApiKeySchema = ApiKeySchema.extend({
|
|
1044
|
-
key:
|
|
810
|
+
key: z17.string().min(1).max(4096)
|
|
1045
811
|
});
|
|
1046
|
-
var ApiKeysFileSchema =
|
|
1047
|
-
keys:
|
|
812
|
+
var ApiKeysFileSchema = z17.object({
|
|
813
|
+
keys: z17.array(PersistedApiKeySchema).max(100)
|
|
1048
814
|
});
|
|
1049
815
|
var MaskedApiKeySchema = ApiKeySchema.omit({ key: true }).extend({
|
|
1050
816
|
/** Last 4 characters of the secret, for recognising a key in a list. */
|
|
1051
|
-
keyPreview:
|
|
817
|
+
keyPreview: z17.string().max(8)
|
|
1052
818
|
});
|
|
1053
819
|
|
|
1054
820
|
// ../../packages/shared/src/schemas/image.schema.ts
|
|
1055
|
-
import { z as
|
|
821
|
+
import { z as z18 } from "zod";
|
|
1056
822
|
var ALLOWED_IMAGE_MIME_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif"];
|
|
1057
|
-
var ImagePartSchema =
|
|
1058
|
-
type:
|
|
1059
|
-
imageId:
|
|
1060
|
-
url:
|
|
1061
|
-
mimeType:
|
|
1062
|
-
altText:
|
|
1063
|
-
});
|
|
1064
|
-
var ImageUploadResponseSchema =
|
|
1065
|
-
imageId:
|
|
1066
|
-
url:
|
|
1067
|
-
mimeType:
|
|
1068
|
-
originalName:
|
|
1069
|
-
});
|
|
1070
|
-
var ImageMetaSchema =
|
|
1071
|
-
imageId:
|
|
1072
|
-
filePath:
|
|
1073
|
-
mimeType:
|
|
1074
|
-
originalName:
|
|
1075
|
-
createdAt:
|
|
1076
|
-
size:
|
|
823
|
+
var ImagePartSchema = z18.object({
|
|
824
|
+
type: z18.literal("image"),
|
|
825
|
+
imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
|
|
826
|
+
url: z18.string().min(1),
|
|
827
|
+
mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
|
|
828
|
+
altText: z18.string().max(500).optional()
|
|
829
|
+
});
|
|
830
|
+
var ImageUploadResponseSchema = z18.object({
|
|
831
|
+
imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
|
|
832
|
+
url: z18.string().min(1),
|
|
833
|
+
mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
|
|
834
|
+
originalName: z18.string()
|
|
835
|
+
});
|
|
836
|
+
var ImageMetaSchema = z18.object({
|
|
837
|
+
imageId: z18.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID"),
|
|
838
|
+
filePath: z18.string().min(1),
|
|
839
|
+
mimeType: z18.enum(ALLOWED_IMAGE_MIME_TYPES),
|
|
840
|
+
originalName: z18.string().min(1),
|
|
841
|
+
createdAt: z18.number().positive(),
|
|
842
|
+
size: z18.number().positive().optional()
|
|
1077
843
|
});
|
|
1078
844
|
|
|
1079
845
|
// ../../packages/shared/src/schemas/kanban.schema.ts
|
|
1080
|
-
import { z as
|
|
1081
|
-
var KanbanAttachmentSchema =
|
|
846
|
+
import { z as z19 } from "zod";
|
|
847
|
+
var KanbanAttachmentSchema = z19.object({
|
|
1082
848
|
/** Server-issued id, also the storage key. */
|
|
1083
|
-
id:
|
|
1084
|
-
name:
|
|
1085
|
-
size:
|
|
1086
|
-
contentType:
|
|
1087
|
-
});
|
|
1088
|
-
var KanbanCardEventSchema =
|
|
1089
|
-
type:
|
|
1090
|
-
timestamp:
|
|
849
|
+
id: z19.string().max(128),
|
|
850
|
+
name: z19.string().max(255),
|
|
851
|
+
size: z19.number().int().nonnegative(),
|
|
852
|
+
contentType: z19.string().max(128)
|
|
853
|
+
});
|
|
854
|
+
var KanbanCardEventSchema = z19.object({
|
|
855
|
+
type: z19.enum(["created", "edited", "moved", "image_added", "image_removed", "title_changed", "conversation_started", "scenario_started", "comment", "archived", "unarchived"]),
|
|
856
|
+
timestamp: z19.string(),
|
|
1091
857
|
/** Extra context: old/new column name, old/new title, comment text, etc. */
|
|
1092
858
|
/**
|
|
1093
859
|
* Le texte de l'entrée : le corps d'un commentaire, ou le contexte du geste.
|
|
@@ -1100,15 +866,15 @@ var KanbanCardEventSchema = z20.object({
|
|
|
1100
866
|
* ce schéma déclarait invalide, et qu'aucune reprise depuis l'interface
|
|
1101
867
|
* n'aurait ensuite pu enregistrer.
|
|
1102
868
|
*/
|
|
1103
|
-
detail:
|
|
869
|
+
detail: z19.string().max(1e5).optional(),
|
|
1104
870
|
/**
|
|
1105
871
|
* Stable identity of the event, used to tell an edit from an insertion when a
|
|
1106
872
|
* whole history is written back. Absent on events recorded before the field
|
|
1107
873
|
* existed; those fall back to (type, timestamp).
|
|
1108
874
|
*/
|
|
1109
|
-
id:
|
|
875
|
+
id: z19.string().max(128).optional(),
|
|
1110
876
|
/** Who authored this event — 'ai' or 'user'. Only set for comment events. */
|
|
1111
|
-
author:
|
|
877
|
+
author: z19.enum(["ai", "user"]).optional(),
|
|
1112
878
|
/**
|
|
1113
879
|
* Qui est derrière l'événement, estampillé par le serveur — jamais pris du
|
|
1114
880
|
* client, sans quoi n'importe qui pourrait signer au nom d'un autre.
|
|
@@ -1122,26 +888,26 @@ var KanbanCardEventSchema = z20.object({
|
|
|
1122
888
|
* emprunte les droits de son créateur, pas son identité — personne ne doit
|
|
1123
889
|
* croire qu'un humain a déplacé ce qu'un robot de CI a déplacé.
|
|
1124
890
|
*/
|
|
1125
|
-
authorUser:
|
|
891
|
+
authorUser: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional(),
|
|
1126
892
|
/** Set when the author amended their comment, so the UI can say so. */
|
|
1127
|
-
editedAt:
|
|
893
|
+
editedAt: z19.string().optional(),
|
|
1128
894
|
/** Files attached to a comment — same storage as a card's own attachments. */
|
|
1129
|
-
attachments:
|
|
895
|
+
attachments: z19.array(KanbanAttachmentSchema).max(20).optional(),
|
|
1130
896
|
/** Conversation that produced this event (comments only). Used to navigate back to the conversation. */
|
|
1131
|
-
conversationId:
|
|
897
|
+
conversationId: z19.string().optional()
|
|
1132
898
|
});
|
|
1133
|
-
var KanbanCardSchema =
|
|
1134
|
-
id:
|
|
1135
|
-
title:
|
|
1136
|
-
markdown:
|
|
899
|
+
var KanbanCardSchema = z19.object({
|
|
900
|
+
id: z19.string(),
|
|
901
|
+
title: z19.string().min(1).max(500),
|
|
902
|
+
markdown: z19.string().max(1e5).default(""),
|
|
1137
903
|
/**
|
|
1138
904
|
* Legacy inline images, kept so boards written before object storage still
|
|
1139
905
|
* render. New uploads go to `attachments` instead.
|
|
1140
906
|
*/
|
|
1141
|
-
images:
|
|
907
|
+
images: z19.array(z19.string()).default([]),
|
|
1142
908
|
/** Files attached to the card — stored out of band, referenced here. */
|
|
1143
|
-
attachments:
|
|
1144
|
-
order:
|
|
909
|
+
attachments: z19.array(KanbanAttachmentSchema).max(50).default([]),
|
|
910
|
+
order: z19.number().int(),
|
|
1145
911
|
/**
|
|
1146
912
|
* La priorité de la carte, de 1 à 10 — 10 étant le plus urgent.
|
|
1147
913
|
*
|
|
@@ -1149,7 +915,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1149
915
|
* basse » : une carte qu'on n'a pas encore arbitrée ne doit pas se ranger
|
|
1150
916
|
* d'office au fond de la pile.
|
|
1151
917
|
*/
|
|
1152
|
-
priority:
|
|
918
|
+
priority: z19.number().int().min(1).max(10).optional(),
|
|
1153
919
|
/**
|
|
1154
920
|
* Les groupes de la carte — des étiquettes libres, posées par l'équipe.
|
|
1155
921
|
*
|
|
@@ -1157,7 +923,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1157
923
|
* porte, et disparaît avec la dernière qui le portait. C'est ce qui permet
|
|
1158
924
|
* d'en créer un en le tapant, sans passer par un écran d'administration.
|
|
1159
925
|
*/
|
|
1160
|
-
groups:
|
|
926
|
+
groups: z19.array(z19.string().min(1).max(60)).max(30).optional(),
|
|
1161
927
|
/**
|
|
1162
928
|
* L'échéance de la carte : le jour où elle est attendue, `AAAA-MM-JJ`.
|
|
1163
929
|
*
|
|
@@ -1170,7 +936,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1170
936
|
* Facultative, et absente veut dire « pas d'échéance », pas « en retard » :
|
|
1171
937
|
* une carte qu'on n'a pas datée ne doit pas s'annoncer comme urgente.
|
|
1172
938
|
*/
|
|
1173
|
-
deadline:
|
|
939
|
+
deadline: z19.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
1174
940
|
/**
|
|
1175
941
|
* La couleur de la carte, en hexadécimal (`#RRGGBB`) — un liseré en haut de
|
|
1176
942
|
* la carte, et rien d'autre : ce qu'elle veut dire appartient à l'équipe.
|
|
@@ -1179,7 +945,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1179
945
|
* finit dans un attribut `style`, et une couleur ne doit pouvoir contenir
|
|
1180
946
|
* qu'une couleur. Absente sur les cartes sans couleur.
|
|
1181
947
|
*/
|
|
1182
|
-
color:
|
|
948
|
+
color: z19.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
|
|
1183
949
|
/**
|
|
1184
950
|
* Le journal de la carte — commentaires compris.
|
|
1185
951
|
*
|
|
@@ -1189,22 +955,22 @@ var KanbanCardSchema = z20.object({
|
|
|
1189
955
|
* qui l'omet laisse au serveur celui qu'il a en base — à ne pas confondre
|
|
1190
956
|
* avec `[]`, qui demanderait bel et bien de le vider.
|
|
1191
957
|
*/
|
|
1192
|
-
history:
|
|
958
|
+
history: z19.array(KanbanCardEventSchema).optional(),
|
|
1193
959
|
/**
|
|
1194
960
|
* Ce que le journal absent laisse quand même dire : combien de commentaires,
|
|
1195
961
|
* et quand fut le dernier. Posés par le serveur en lecture, ignorés en
|
|
1196
962
|
* écriture — la carte ne les stocke pas, ils se déduisent de `history`.
|
|
1197
963
|
*/
|
|
1198
|
-
commentCount:
|
|
1199
|
-
lastCommentAt:
|
|
964
|
+
commentCount: z19.number().int().nonnegative().optional(),
|
|
965
|
+
lastCommentAt: z19.string().optional(),
|
|
1200
966
|
/**
|
|
1201
967
|
* Les entrées de journal qui ouvrent une conversation IA. Elles restent dans
|
|
1202
968
|
* la lecture allégée — il y en a une poignée par carte, et l'hôte s'en sert
|
|
1203
969
|
* pour dire, sans ouvrir la carte, qu'une IA y travaille.
|
|
1204
970
|
*/
|
|
1205
|
-
conversationEvents:
|
|
1206
|
-
createdAt:
|
|
1207
|
-
updatedAt:
|
|
971
|
+
conversationEvents: z19.array(KanbanCardEventSchema).optional(),
|
|
972
|
+
createdAt: z19.string(),
|
|
973
|
+
updatedAt: z19.string(),
|
|
1208
974
|
/**
|
|
1209
975
|
* Quand la carte a été archivée — absente tant qu'elle est au tableau.
|
|
1210
976
|
*
|
|
@@ -1212,7 +978,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1212
978
|
* retire du tableau, jamais une écriture qui la déplace. Rien à recoller donc
|
|
1213
979
|
* au désarchivage, et aucun cimetière où une carte pourrait se perdre.
|
|
1214
980
|
*/
|
|
1215
|
-
archivedAt:
|
|
981
|
+
archivedAt: z19.string().optional(),
|
|
1216
982
|
/**
|
|
1217
983
|
* La colonne d'où la carte a été archivée, telle qu'elle s'appelait alors.
|
|
1218
984
|
*
|
|
@@ -1220,7 +986,7 @@ var KanbanCardSchema = z20.object({
|
|
|
1220
986
|
* quand la colonne a disparu depuis — auquel cas le désarchivage repose la
|
|
1221
987
|
* carte dans la première colonne, sans se taire sur son origine.
|
|
1222
988
|
*/
|
|
1223
|
-
archivedFrom:
|
|
989
|
+
archivedFrom: z19.object({ columnId: z19.string().max(128), columnTitle: z19.string().max(200) }).optional(),
|
|
1224
990
|
/**
|
|
1225
991
|
* Quand la carte a été supprimée. Rien n'est effacé : la carte reste en base,
|
|
1226
992
|
* et toutes les lectures l'écartent.
|
|
@@ -1229,25 +995,25 @@ var KanbanCardSchema = z20.object({
|
|
|
1229
995
|
* l'exécuter vraiment. La colonne et le tableau portent le même champ, pour
|
|
1230
996
|
* que supprimer l'un n'emporte jamais les cartes de l'autre.
|
|
1231
997
|
*/
|
|
1232
|
-
deletedAt:
|
|
998
|
+
deletedAt: z19.string().optional(),
|
|
1233
999
|
/**
|
|
1234
1000
|
* People assigned to the card. Names are denormalized for display; the server
|
|
1235
1001
|
* keeps only members of the owning organization, and notifies newcomers.
|
|
1236
1002
|
*/
|
|
1237
|
-
assignees:
|
|
1003
|
+
assignees: z19.array(z19.object({ id: z19.string().max(128), name: z19.string().max(200) })).max(20).default([]),
|
|
1238
1004
|
/**
|
|
1239
1005
|
* Who first created the card. Stamped by the server the first time a card id
|
|
1240
1006
|
* appears in a board write, never taken from the client — a member could
|
|
1241
1007
|
* otherwise claim any authorship. Absent on cards created before this field
|
|
1242
1008
|
* existed, so readers must treat it as unknown rather than assume.
|
|
1243
1009
|
*/
|
|
1244
|
-
createdBy:
|
|
1010
|
+
createdBy: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional()
|
|
1245
1011
|
});
|
|
1246
|
-
var KanbanColumnSchema =
|
|
1247
|
-
id:
|
|
1248
|
-
title:
|
|
1249
|
-
order:
|
|
1250
|
-
cards:
|
|
1012
|
+
var KanbanColumnSchema = z19.object({
|
|
1013
|
+
id: z19.string(),
|
|
1014
|
+
title: z19.string().min(1).max(200),
|
|
1015
|
+
order: z19.number().int(),
|
|
1016
|
+
cards: z19.array(KanbanCardSchema).default([]),
|
|
1251
1017
|
/**
|
|
1252
1018
|
* Le regroupement auquel la colonne appartient, s'il y en a un.
|
|
1253
1019
|
*
|
|
@@ -1256,24 +1022,24 @@ var KanbanColumnSchema = z20.object({
|
|
|
1256
1022
|
* quoi finissent par se contredire, et un déplacement devient alors deux
|
|
1257
1023
|
* écritures au lieu d'une.
|
|
1258
1024
|
*/
|
|
1259
|
-
groupId:
|
|
1025
|
+
groupId: z19.string().optional(),
|
|
1260
1026
|
/** Supprimée, mais conservée — voir `deletedAt` sur la carte. */
|
|
1261
|
-
deletedAt:
|
|
1027
|
+
deletedAt: z19.string().optional()
|
|
1262
1028
|
});
|
|
1263
|
-
var KanbanColumnGroupSchema =
|
|
1264
|
-
id:
|
|
1265
|
-
title:
|
|
1029
|
+
var KanbanColumnGroupSchema = z19.object({
|
|
1030
|
+
id: z19.string(),
|
|
1031
|
+
title: z19.string().min(1).max(200),
|
|
1266
1032
|
/** La couleur du bandeau, en hexadécimal — l'interface décide du défaut. */
|
|
1267
|
-
color:
|
|
1033
|
+
color: z19.string().regex(/^#[0-9a-fA-F]{6}$/).optional(),
|
|
1268
1034
|
/** Le groupe parent, pour les regroupements imbriqués. */
|
|
1269
|
-
parentId:
|
|
1035
|
+
parentId: z19.string().optional(),
|
|
1270
1036
|
/** Supprimé, mais conservé — comme une colonne. */
|
|
1271
|
-
deletedAt:
|
|
1037
|
+
deletedAt: z19.string().optional()
|
|
1272
1038
|
});
|
|
1273
|
-
var KanbanBoardSchema =
|
|
1274
|
-
id:
|
|
1275
|
-
name:
|
|
1276
|
-
description:
|
|
1039
|
+
var KanbanBoardSchema = z19.object({
|
|
1040
|
+
id: z19.string(),
|
|
1041
|
+
name: z19.string().min(1).max(200),
|
|
1042
|
+
description: z19.string().max(1e4).default(""),
|
|
1277
1043
|
/**
|
|
1278
1044
|
* Le mode d'emploi du tableau, en texte libre : ce que veulent dire ses
|
|
1279
1045
|
* colonnes, quand une carte a le droit d'avancer, les conventions de
|
|
@@ -1281,66 +1047,66 @@ var KanbanBoardSchema = z20.object({
|
|
|
1281
1047
|
* le prompt des agents pour qu'ils travaillent selon les règles du tableau
|
|
1282
1048
|
* plutôt que selon les leurs.
|
|
1283
1049
|
*/
|
|
1284
|
-
instructions:
|
|
1285
|
-
columns:
|
|
1050
|
+
instructions: z19.string().max(2e4).default(""),
|
|
1051
|
+
columns: z19.array(KanbanColumnSchema).default([]),
|
|
1286
1052
|
/** Les regroupements de colonnes — vide sur un tableau qui n'en a jamais eu. */
|
|
1287
|
-
columnGroups:
|
|
1288
|
-
archived:
|
|
1053
|
+
columnGroups: z19.array(KanbanColumnGroupSchema).default([]),
|
|
1054
|
+
archived: z19.boolean().default(false),
|
|
1289
1055
|
/** Supprimé, mais conservé avec ses cartes — voir `deletedAt` sur la carte. */
|
|
1290
|
-
deletedAt:
|
|
1291
|
-
createdAt:
|
|
1292
|
-
updatedAt:
|
|
1293
|
-
});
|
|
1294
|
-
var CreateKanbanBoardInput =
|
|
1295
|
-
name:
|
|
1296
|
-
description:
|
|
1297
|
-
instructions:
|
|
1298
|
-
});
|
|
1299
|
-
var UpdateKanbanBoardInput =
|
|
1300
|
-
id:
|
|
1301
|
-
name:
|
|
1302
|
-
description:
|
|
1303
|
-
instructions:
|
|
1304
|
-
columns:
|
|
1305
|
-
archived:
|
|
1306
|
-
});
|
|
1307
|
-
var KanbanCardLinkSchema =
|
|
1308
|
-
id:
|
|
1056
|
+
deletedAt: z19.string().optional(),
|
|
1057
|
+
createdAt: z19.string(),
|
|
1058
|
+
updatedAt: z19.string()
|
|
1059
|
+
});
|
|
1060
|
+
var CreateKanbanBoardInput = z19.object({
|
|
1061
|
+
name: z19.string().min(1).max(200),
|
|
1062
|
+
description: z19.string().max(1e4).optional(),
|
|
1063
|
+
instructions: z19.string().max(2e4).optional()
|
|
1064
|
+
});
|
|
1065
|
+
var UpdateKanbanBoardInput = z19.object({
|
|
1066
|
+
id: z19.string(),
|
|
1067
|
+
name: z19.string().min(1).max(200).optional(),
|
|
1068
|
+
description: z19.string().max(1e4).optional(),
|
|
1069
|
+
instructions: z19.string().max(2e4).optional(),
|
|
1070
|
+
columns: z19.array(KanbanColumnSchema).optional(),
|
|
1071
|
+
archived: z19.boolean().optional()
|
|
1072
|
+
});
|
|
1073
|
+
var KanbanCardLinkSchema = z19.object({
|
|
1074
|
+
id: z19.string().max(128),
|
|
1309
1075
|
/** Le tableau et la carte qui *dépendent* de l'autre. */
|
|
1310
|
-
childBoardId:
|
|
1311
|
-
childCardId:
|
|
1076
|
+
childBoardId: z19.string().max(64),
|
|
1077
|
+
childCardId: z19.string().max(128),
|
|
1312
1078
|
/** Le tableau et la carte *dont* on dépend. */
|
|
1313
|
-
parentBoardId:
|
|
1314
|
-
parentCardId:
|
|
1315
|
-
createdAt:
|
|
1316
|
-
createdBy:
|
|
1317
|
-
});
|
|
1318
|
-
var KanbanCardRefSchema =
|
|
1319
|
-
cardId:
|
|
1320
|
-
boardId:
|
|
1321
|
-
boardName:
|
|
1322
|
-
columnId:
|
|
1323
|
-
columnTitle:
|
|
1324
|
-
title:
|
|
1079
|
+
parentBoardId: z19.string().max(64),
|
|
1080
|
+
parentCardId: z19.string().max(128),
|
|
1081
|
+
createdAt: z19.string(),
|
|
1082
|
+
createdBy: z19.object({ id: z19.string().max(128), name: z19.string().max(200) }).optional()
|
|
1083
|
+
});
|
|
1084
|
+
var KanbanCardRefSchema = z19.object({
|
|
1085
|
+
cardId: z19.string().max(128),
|
|
1086
|
+
boardId: z19.string().max(64),
|
|
1087
|
+
boardName: z19.string().max(200),
|
|
1088
|
+
columnId: z19.string().max(128),
|
|
1089
|
+
columnTitle: z19.string().max(200),
|
|
1090
|
+
title: z19.string().max(500),
|
|
1325
1091
|
/** Les mêmes informations qu'une ligne de tableau montre d'une carte d'ici. */
|
|
1326
|
-
assignees:
|
|
1327
|
-
commentCount:
|
|
1092
|
+
assignees: z19.array(z19.object({ id: z19.string().max(128), name: z19.string().max(200) })).default([]),
|
|
1093
|
+
commentCount: z19.number().int().nonnegative().default(0)
|
|
1328
1094
|
});
|
|
1329
1095
|
|
|
1330
1096
|
// ../../packages/shared/src/schemas/cloud-api-key.schema.ts
|
|
1331
|
-
import { z as
|
|
1332
|
-
var CloudApiScopeSchema =
|
|
1097
|
+
import { z as z20 } from "zod";
|
|
1098
|
+
var CloudApiScopeSchema = z20.enum([
|
|
1333
1099
|
"kanban:read",
|
|
1334
1100
|
"kanban:write",
|
|
1335
1101
|
"kanban:comment",
|
|
1336
1102
|
"kanban:delete"
|
|
1337
1103
|
]);
|
|
1338
|
-
var CloudApiKeySecretSchema =
|
|
1339
|
-
var CloudApiKeySchema =
|
|
1340
|
-
id:
|
|
1341
|
-
organizationId:
|
|
1342
|
-
name:
|
|
1343
|
-
scopes:
|
|
1104
|
+
var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
|
|
1105
|
+
var CloudApiKeySchema = z20.object({
|
|
1106
|
+
id: z20.string().max(128),
|
|
1107
|
+
organizationId: z20.string().max(128),
|
|
1108
|
+
name: z20.string().min(1).max(200),
|
|
1109
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1344
1110
|
/**
|
|
1345
1111
|
* Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
|
|
1346
1112
|
* l'organisation ».
|
|
@@ -1349,61 +1115,61 @@ var CloudApiKeySchema = z21.object({
|
|
|
1349
1115
|
* c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
|
|
1350
1116
|
* nommait plus que lui.
|
|
1351
1117
|
*/
|
|
1352
|
-
boards:
|
|
1353
|
-
createdAt:
|
|
1118
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable(),
|
|
1119
|
+
createdAt: z20.string().max(64),
|
|
1354
1120
|
/** Dernier usage constaté, pour reconnaître une clé oubliée. */
|
|
1355
|
-
lastUsedAt:
|
|
1121
|
+
lastUsedAt: z20.string().max(64).nullable(),
|
|
1356
1122
|
/** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
|
|
1357
|
-
createdBy:
|
|
1123
|
+
createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
|
|
1358
1124
|
/** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
|
|
1359
|
-
keyPreview:
|
|
1125
|
+
keyPreview: z20.string().max(8)
|
|
1360
1126
|
});
|
|
1361
|
-
var CreatedCloudApiKeySchema =
|
|
1127
|
+
var CreatedCloudApiKeySchema = z20.object({
|
|
1362
1128
|
key: CloudApiKeySchema,
|
|
1363
1129
|
secret: CloudApiKeySecretSchema
|
|
1364
1130
|
});
|
|
1365
|
-
var CreateCloudApiKeyInput =
|
|
1366
|
-
organizationId:
|
|
1367
|
-
name:
|
|
1368
|
-
scopes:
|
|
1369
|
-
boards:
|
|
1131
|
+
var CreateCloudApiKeyInput = z20.object({
|
|
1132
|
+
organizationId: z20.string().min(1).max(128),
|
|
1133
|
+
name: z20.string().min(1).max(200),
|
|
1134
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1135
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
|
|
1370
1136
|
});
|
|
1371
|
-
var UpdateCloudApiKeyInput =
|
|
1372
|
-
id:
|
|
1373
|
-
name:
|
|
1374
|
-
scopes:
|
|
1375
|
-
boards:
|
|
1137
|
+
var UpdateCloudApiKeyInput = z20.object({
|
|
1138
|
+
id: z20.string().min(1).max(128),
|
|
1139
|
+
name: z20.string().min(1).max(200).optional(),
|
|
1140
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
|
|
1141
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1376
1142
|
});
|
|
1377
1143
|
|
|
1378
1144
|
// ../../packages/shared/src/schemas/changelog.schema.ts
|
|
1379
|
-
import { z as
|
|
1380
|
-
var ChangelogSurfaceSchema =
|
|
1381
|
-
var ChangelogChangeKindSchema =
|
|
1382
|
-
var ChangelogTextSchema =
|
|
1383
|
-
fr:
|
|
1384
|
-
en:
|
|
1385
|
-
});
|
|
1386
|
-
var ChangelogChangeSchema =
|
|
1145
|
+
import { z as z21 } from "zod";
|
|
1146
|
+
var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
|
|
1147
|
+
var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
|
|
1148
|
+
var ChangelogTextSchema = z21.object({
|
|
1149
|
+
fr: z21.string().min(1).max(500),
|
|
1150
|
+
en: z21.string().min(1).max(500)
|
|
1151
|
+
});
|
|
1152
|
+
var ChangelogChangeSchema = z21.object({
|
|
1387
1153
|
kind: ChangelogChangeKindSchema,
|
|
1388
1154
|
text: ChangelogTextSchema
|
|
1389
1155
|
});
|
|
1390
1156
|
var ChangelogDraftSchema = ChangelogChangeSchema.extend({
|
|
1391
|
-
date:
|
|
1157
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1392
1158
|
title: ChangelogTextSchema.optional()
|
|
1393
1159
|
});
|
|
1394
|
-
var ChangelogReleaseSchema =
|
|
1160
|
+
var ChangelogReleaseSchema = z21.object({
|
|
1395
1161
|
surface: ChangelogSurfaceSchema,
|
|
1396
1162
|
/** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
|
|
1397
|
-
version:
|
|
1163
|
+
version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
|
|
1398
1164
|
/** Date de publication, `YYYY-MM-DD`. */
|
|
1399
|
-
date:
|
|
1165
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1400
1166
|
/** Facultatif : une version peut s'annoncer par son seul numéro. */
|
|
1401
1167
|
title: ChangelogTextSchema.optional(),
|
|
1402
1168
|
/** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
|
|
1403
|
-
changes:
|
|
1169
|
+
changes: z21.array(ChangelogChangeSchema).min(1).max(50)
|
|
1404
1170
|
});
|
|
1405
1171
|
var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
|
|
1406
|
-
changeCount:
|
|
1172
|
+
changeCount: z21.number().int().nonnegative()
|
|
1407
1173
|
});
|
|
1408
1174
|
|
|
1409
1175
|
// ../../packages/shared/src/utils/crypto.ts
|
|
@@ -1661,9 +1427,9 @@ function interpolateBuiltins(text, values) {
|
|
|
1661
1427
|
return values[name] ?? match;
|
|
1662
1428
|
});
|
|
1663
1429
|
}
|
|
1664
|
-
function interpolateBuiltinsInEnv(
|
|
1430
|
+
function interpolateBuiltinsInEnv(env, values) {
|
|
1665
1431
|
const out = {};
|
|
1666
|
-
for (const [key, value] of Object.entries(
|
|
1432
|
+
for (const [key, value] of Object.entries(env)) {
|
|
1667
1433
|
out[key] = interpolateBuiltins(value, values);
|
|
1668
1434
|
}
|
|
1669
1435
|
return out;
|
|
@@ -1862,31 +1628,38 @@ function writeEntity(collection, id, entity) {
|
|
|
1862
1628
|
applyToMap(current, next);
|
|
1863
1629
|
}
|
|
1864
1630
|
|
|
1631
|
+
// ../../packages/shared/src/utils/service-links.ts
|
|
1632
|
+
var LOOPBACK_HOSTNAMES = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "::1", "[::1]"]);
|
|
1633
|
+
function dedupeKey(url) {
|
|
1634
|
+
const trimmed = url.trim().replace(/\/+$/, "");
|
|
1635
|
+
try {
|
|
1636
|
+
const parsed = new URL(trimmed);
|
|
1637
|
+
if (LOOPBACK_HOSTNAMES.has(parsed.hostname)) parsed.hostname = "localhost";
|
|
1638
|
+
return parsed.toString().replace(/\/+$/, "");
|
|
1639
|
+
} catch {
|
|
1640
|
+
return trimmed;
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
function serviceLinks(service, host) {
|
|
1644
|
+
const served = new Set((service.localUrls ?? []).map((lu) => lu.port));
|
|
1645
|
+
const candidates = [
|
|
1646
|
+
...(service.localUrls ?? []).map((lu) => ({ url: `https://${lu.url}`, source: "cloud" })),
|
|
1647
|
+
...(service.ports ?? []).filter((port) => !served.has(port)).map((port) => ({ url: `http://${host}:${port}`, source: "port" })),
|
|
1648
|
+
...service.url ? [{ url: service.url, source: "custom" }] : []
|
|
1649
|
+
];
|
|
1650
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1651
|
+
return candidates.filter(({ url }) => {
|
|
1652
|
+
const key = dedupeKey(url);
|
|
1653
|
+
if (seen.has(key)) return false;
|
|
1654
|
+
seen.add(key);
|
|
1655
|
+
return true;
|
|
1656
|
+
});
|
|
1657
|
+
}
|
|
1658
|
+
function primaryServiceLink(service, host) {
|
|
1659
|
+
return serviceLinks(service, host)[0]?.url ?? null;
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1865
1662
|
export {
|
|
1866
|
-
env,
|
|
1867
|
-
machineRoot,
|
|
1868
|
-
localVaultRoot,
|
|
1869
|
-
orgVaultRoot,
|
|
1870
|
-
projectVaultRoot,
|
|
1871
|
-
orgIdOfRoot,
|
|
1872
|
-
vaultIdOfRoot,
|
|
1873
|
-
vaultFor,
|
|
1874
|
-
stampOrgCloud,
|
|
1875
|
-
rememberOrgName,
|
|
1876
|
-
readOrgNames,
|
|
1877
|
-
rememberOrgLogo,
|
|
1878
|
-
forgetOrgLogo,
|
|
1879
|
-
readOrgLogos,
|
|
1880
|
-
readOrgClouds,
|
|
1881
|
-
listOrgVaults,
|
|
1882
|
-
listCloudVaults,
|
|
1883
|
-
allVaultRoots,
|
|
1884
|
-
machineFilePath,
|
|
1885
|
-
keyedFilePath,
|
|
1886
|
-
legacyMachineFilePath,
|
|
1887
|
-
ensureLocalVault,
|
|
1888
|
-
keyRoot,
|
|
1889
|
-
legacyVaultRoot,
|
|
1890
1663
|
ProjectSchema,
|
|
1891
1664
|
ScenarioGroupSchema,
|
|
1892
1665
|
ScenarioNodeSchema,
|
|
@@ -1918,6 +1691,9 @@ export {
|
|
|
1918
1691
|
COMPANION_RELAY_OPEN,
|
|
1919
1692
|
COMPANION_RELAY_CLOSE,
|
|
1920
1693
|
extractCompanionRelay,
|
|
1694
|
+
slugifyLauncherName,
|
|
1695
|
+
launcherIdFromName,
|
|
1696
|
+
deriveLauncherIdentity,
|
|
1921
1697
|
nativeParsers,
|
|
1922
1698
|
JSLogParser,
|
|
1923
1699
|
interpolateBuiltinsInEnv,
|
|
@@ -1939,6 +1715,7 @@ export {
|
|
|
1939
1715
|
EDITOR_BY_KEY,
|
|
1940
1716
|
getCollection,
|
|
1941
1717
|
readEntity,
|
|
1942
|
-
writeEntity
|
|
1718
|
+
writeEntity,
|
|
1719
|
+
primaryServiceLink
|
|
1943
1720
|
};
|
|
1944
|
-
//# sourceMappingURL=chunk-
|
|
1721
|
+
//# sourceMappingURL=chunk-QRMG6GMX.js.map
|