@runeya/runeya 2.0.93 → 2.0.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/index.js +191 -160
- package/agent/index.js.map +1 -1
- package/agent-manager-3KSS7BHP.js +7 -0
- package/{chunk-6Y24763Y.js → chunk-4PQXBTV6.js} +62 -28
- package/chunk-4PQXBTV6.js.map +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/{src-QDQ5AT4C.js → src-GGPKDQGD.js} +997 -933
- package/src-GGPKDQGD.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-CR0iWJNr.js +13 -0
- package/web/assets/AgentTerminalPage-DZj9UulV.js +1 -0
- package/web/assets/AiChatPage-D4h76hus.js +1 -0
- package/web/assets/AppLayout-DusPXiZn.js +1 -0
- package/web/assets/{AppLayout-DiMqQfDk.css → AppLayout-Sk3Qnkr-.css} +1 -1
- package/web/assets/AuditPage-BBEa6MYr.js +1 -0
- package/web/assets/CloudAccountPage-DKgXvPS1.js +1 -0
- package/web/assets/CloudAccountPage-DopITrxL.js +1 -0
- package/web/assets/CloudMessagingPage-BNIbysEO.js +2 -0
- package/web/assets/DashboardPage-CTGAGY7X.js +1 -0
- package/web/assets/DirectoryPickerDialog-BKI9vxkG.js +1 -0
- package/web/assets/{EditorIcon-Bi1br5gY.js → EditorIcon-CdvuLNAP.js} +2 -2
- package/web/assets/EnvironmentForm-BiWvLVax.js +108 -0
- package/web/assets/EnvironmentFormPage-RReX9Ijr.js +1 -0
- package/web/assets/EnvironmentListPage-BW5PlOxl.js +1 -0
- package/web/assets/KanbanBoardPage-BFYgHGl0.js +4 -0
- package/web/assets/KanbanListPage-BAcgRh8Z.js +1 -0
- package/web/assets/LaunchProjectPage-CpiyvCBv.js +1 -0
- package/web/assets/LaunchServicesPage-ChEXnYIi.js +1 -0
- package/web/assets/LogViewer-iTxXl8YQ.js +3 -0
- package/web/assets/OrgKeyPrompt-KRyXRMw7.js +1 -0
- package/web/assets/{ProcessControls-BOkCKqGc.js → ProcessControls-DynA7Ock.js} +1 -1
- package/web/assets/ProcessDetailPage-BpgGTkXx.js +1 -0
- package/web/assets/{ProcessMetrics-DgnpYxXh.js → ProcessMetrics-_FGC-0hm.js} +2 -2
- package/web/assets/ProjectDetailPage-B49_-83N.js +1 -0
- package/web/assets/ProjectListPage-CFoEPT2F.js +1 -0
- package/web/assets/RandomJobTestPage-CALSR3WS.js +2 -0
- package/web/assets/ScenarioEditorPage-DxyzCjhy.js +14 -0
- package/web/assets/SendToChatDialog-CeFdMciG.js +1 -0
- package/web/assets/ServiceControlsBar-CI1_piqu.js +1 -0
- package/web/assets/ServiceDetailPage-CVT68kTt.js +2 -0
- package/web/assets/ServiceFormPage-nLRxtrOu.js +1 -0
- package/web/assets/{SettingsPage-BKcxRTQg.css → SettingsPage-CX1EAjNK.css} +1 -1
- package/web/assets/SettingsPage-DDYegVxd.js +2063 -0
- package/web/assets/UnlockPage-D9_ZbMR_.js +1 -0
- package/web/assets/VariablesTable-ClL6KuSo.js +1 -0
- package/web/assets/VaultMigrationPage-rc5OA9Xt.js +1 -0
- package/web/assets/VersionBadge-K5UQnfc6.js +1 -0
- package/web/assets/WikiPage-VeQCqO9Z.js +1 -0
- package/web/assets/WikiView-XCwSa_R7.js +1 -0
- package/web/assets/add-scalar-classes-CvhyJKCs.js +387 -0
- package/web/assets/auth-errors-Cmx-4mn3.js +1 -0
- package/web/assets/{autocomplete-CFCpVybl.js → autocomplete-tNXsUW-e.js} +3 -3
- package/web/assets/{basic-shape-diamond.svg-1nuR3NBd.js → basic-shape-diamond.svg-BgNul67K.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-Be-pZrVb.js → basic-shape-hexagon.svg-CILNnZwG.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-9-zHtg8B.js → basic-shape-primary-circle-ellipse-round.svg-OXklrBAn.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-CRTdnGnv.js → basic-shape-primary-square-rectangle.svg-DYF4zyUj.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-D9JPqU4l.js → basic-shape-shield.svg-CQbzQswT.js} +1 -1
- package/web/assets/{browser-BdPlaU7e.js → browser-CDtVZzm0.js} +1 -1
- package/web/assets/{browser-B6dstq4l.js → browser-CdTGBSDI.js} +1 -1
- package/web/assets/{card-D8XCM024.js → card-BfEdnBhU.js} +2 -2
- package/web/assets/{checkbox-C_jx73WS.js → checkbox-CTopTVtp.js} +3 -3
- package/web/assets/{chip-CQdqiw0W.js → chip-Cw38kJ50.js} +2 -2
- package/web/assets/{client-B_gN8XJ7.js → client-Bjn9AL4v.js} +2 -2
- package/web/assets/cloud-chat.store-BPoTzBeD.js +1 -0
- package/web/assets/cloud-session-D0ue5Z97.js +1 -0
- package/web/assets/column-BtLe8qbf.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-CGh6MdTp.js → computer-device-desktop-monitor.svg-ByBKx1CQ.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-CSnagCeX.js → computer-device-desktop.svg-BPvzT4sF.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-BI_ZVURQ.js → computer-device-laptop.svg-saGCSB2c.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-DM3ubsFX.js → computer-device-mobile-phone-android-samsung-back.svg-Bo-eisU4.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CzDW3wBE.js → computer-device-mobile-phone-android-samsung.svg-Bavaieis.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-B41GuLoA.js → computer-device-mobile-phone-iphone-x-back.svg-BQK9BRXi.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-Cd1cIH5V.js → computer-device-mobile-phone-iphone-x.svg-C24hCDuI.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-rLuvpYQb.js → computer-device-mobile-tablet-touch.svg-CUHV3zSo.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-DjBMAEhJ.js → computer-device-mobile-tablet.svg-C8SRYMmI.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-BeYjyXJh.js → computer-device-network-ethernet-cat6.svg-Ds4kUid3.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-DIR2TMun.js → computer-device-network-lan-www.svg-BwIieS6h.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-DhI5VT5g.js → computer-device-network-wifi-connection.svg-Q7Mxb3eP.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BO0V5pTE.js → computer-device-network-wifi-router.svg-B0PMuY1x.js} +1 -1
- package/web/assets/{cssMode-CdzA9M1t.js → cssMode-8lAGHoa8.js} +1 -1
- package/web/assets/{divider-Cijz8TDb.js → divider-DRKb8XBY.js} +2 -2
- package/web/assets/{docx-preview-B8bBf__c.js → docx-preview-K0JOmyAw.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-BuQW5h4a.js → ecology-science-erlenmeyer-flask.svg-D5wbPwU2.js} +1 -1
- package/web/assets/{fieldset-DnZ-YI4V.js → fieldset-jU8x6yyO.js} +2 -2
- package/web/assets/{freemarker2-Bp9032QT.js → freemarker2-BmTZDOK9.js} +1 -1
- package/web/assets/{handlebars-CdVx92lU.js → handlebars-DM-mBhq3.js} +1 -1
- package/web/assets/{html-CkCZL9gx.js → html-BohxI4Ke.js} +1 -1
- package/web/assets/{htmlMode-CW62-ie1.js → htmlMode-vqRVK3v5.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-DeCuJWFT.js → image-flash-lightning.svg-s-LoyOp-.js} +1 -1
- package/web/assets/{image-picture-flower.svg-2ZzZbPy5.js → image-picture-flower.svg-CofKZT5Q.js} +1 -1
- package/web/assets/{index-DXGQcaBP.js → index-DHr5P6pq.js} +293 -293
- package/web/assets/index-Da38OOd8.css +1 -0
- package/web/assets/{interface-alert-exclamation-diamond.svg-D9th7CAp.js → interface-alert-exclamation-diamond.svg-C4C4i4oQ.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-Dq9CWWQ3.js → interface-alert-exclamation-triangle-warning.svg-C-ogsTXk.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-FaG159xA.js → interface-alert-information-circle.svg-BFpBDkj5.js} +1 -1
- package/web/assets/{interface-award-crown.svg-B_-NjgUX.js → interface-award-crown.svg-DfHdQ8rJ.js} +1 -1
- package/web/assets/{interface-bookmark.svg--yRnhMMQ.js → interface-bookmark-tag.svg-DkfXcRMe.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-CKjw2WEc.js → interface-bookmark.svg-qCQ3v5rM.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BCrvSyS9.js → interface-calendar-date-one.svg-D2ssTK7X.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-BGIlAwyt.js → interface-content-book-open-pages.svg-CH1BmaVm.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-DeLfK2OR.js → interface-content-book-page.svg-BU6m1d9-.js} +1 -1
- package/web/assets/{interface-content-file.svg-DUdYkC8Y.js → interface-content-file.svg-DbsUtWTI.js} +1 -1
- package/web/assets/{interface-content-folder.svg-Ccx-IYD-.js → interface-content-folder.svg-8IvlkKzB.js} +1 -1
- package/web/assets/interface-content-folder.svg-nRYFY3NY.js +1 -0
- package/web/assets/{interface-copy-clipboard.svg-DIR-oOPG.js → interface-copy-clipboard.svg-D8ev9OtX.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-B9CSuzCn.js → interface-edit-attachment.svg-dl-nfI3P.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-6WTqf985.js → interface-edit-binocular.svg-Box_OuXH.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-BiB-GwoX.js → interface-edit-magic-wand.svg-DIhMw--x.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-Dh0uneh4.js → interface-edit-tool-paint-roller.svg-COUefijc.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-C9HQOHce.js → interface-edit-tool-pencil.svg-BNmSspcl.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-Cj_1Qy9M.js → interface-favorite-award.svg-Cy-XeB8N.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-BniwQaep.js → interface-favorite-flag.svg-BVBisei8.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-CYJO0Ggb.js → interface-favorite-heart.svg-BkVO2jBo.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CeFb37gO.js → interface-favorite-star.svg-Bxe8dqRi.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-CGeIzi4_.js → interface-favorite-stars-sparkles.svg-MkrYfhIz.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-Bd0q_y82.js → interface-hierarchy-flowchart.svg-De7TQhr3.js} +1 -1
- package/web/assets/{interface-home-house.svg-BqSaaLzz.js → interface-home-house.svg-D_qOil1N.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DTtVOw8L.js → interface-hyperlink.svg-5S7ugTcP.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-CVNVwF9w.js → interface-lighting-brightness.svg-vJA95mbx.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-CKiXr8tU.js → interface-lock-closed.svg-DVL32yBG.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-DU7sOeAE.js → interface-lock-open-unlock.svg-C7DBYFPn.js} +1 -1
- package/web/assets/{interface-login-key.svg-tuWEt_tn.js → interface-login-key.svg-CEq51fI1.js} +1 -1
- package/web/assets/{interface-search.svg-CMDkllvr.js → interface-search.svg-CkP-JMXm.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-BRM5rRrt.js → interface-setting-cog.svg-CgR9wxJN.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BgC_SP2r.js → interface-share-megaphone-bullhorn.svg-C_VIGsI0.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-C-XkIKh-.js → interface-share-rocket.svg-aseIyfXq.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-BKE0N18S.js → interface-share-satellite.svg-CzkX6PJ2.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-B8QuVt2r.js → interface-share-space-ship.svg-Df1jdZi5.js} +1 -1
- package/web/assets/{interface-share.svg-bp3wJyGc.js → interface-share.svg-CioS2p8V.js} +1 -1
- package/web/assets/{interface-signal-square.svg-D8XH70Ue.js → interface-signal-square.svg-VUtTXd8G.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-2DN-SbMe.js → interface-time-clock-circle.svg-DWh2OWyC.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-l0_r1j5d.js → interface-time-hour-glass.svg-BCqCfi9r.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-RRlj9uIH.js → interface-users-multiple.svg-Edac3LOs.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-BmdUGPZe.js → interface-weather-moon.svg-BrK0lmKX.js} +1 -1
- package/web/assets/{javascript-edU55dwl.js → javascript-ByDc_p54.js} +1 -1
- package/web/assets/{jsonMode-CdE3cdJ3.js → jsonMode-Cm2EOOd4.js} +1 -1
- package/web/assets/{liquid-DCimUdoJ.js → liquid-z9Tc1tTM.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BKbLLFFb.js → lspLanguageFeatures-D6O0oAJj.js} +1 -1
- package/web/assets/{mail-chat-bubble-square.svg-VF1duUdO.js → mail-chat-bubble-square.svg-obHuGV3I.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-CdSpwALk.js → mail-send-email-paper-airplane.svg-I-JVbCkD.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-DZVjejiO.js → mail-send-envelope.svg-CcYcXCe5.js} +1 -1
- package/web/assets/{mdx-Hv_NSA7I.js → mdx-B8bePw34.js} +1 -1
- package/web/assets/{minus-CQh_GdvM.js → minus-k3R4JOtO.js} +2 -2
- package/web/assets/modal-CVWJd9ZI.js +5 -0
- package/web/assets/modal-Ccn3uciU.js +1 -0
- package/web/assets/{money-cashier-receipt.svg-CWHgfD-x.js → money-cashier-receipt.svg-BIKxMBIH.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-XPcb5aF0.js → money-currency-dollar-pay.svg-B-HfkTCE.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-DhPujH9x.js → money-graph-arrow-increase.svg-CnXoTtSD.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-BPOlqEDC.js → money-graph-bar-chart-increase.svg-Dt7ly9Tz.js} +1 -1
- package/web/assets/multiselect-BsCXwmy0.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-DZNsVAVa.js → nature-ecology-leaf.svg-TjKZfobq.js} +1 -1
- package/web/assets/{password-DlR3LzLg.js → password-dyrMCyHO.js} +4 -4
- package/web/assets/{phone-telephone.svg-B7vr6N8Z.js → phone-telephone.svg-CCMqAIP_.js} +1 -1
- package/web/assets/{plus-BDDTopKC.js → plus-Dg2E4ggP.js} +6 -6
- package/web/assets/process.store-CHdSS5Et.js +1 -0
- package/web/assets/{programming-bug.svg-DzlGVlKX.js → programming-bug.svg-yyshFuq4.js} +1 -1
- package/web/assets/{programming-cloud.svg-QHMLI7Md.js → programming-cloud.svg-DPyoJVZM.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-CjsFgYWn.js → programming-computer-database-server.svg-D7pShcvh.js} +1 -1
- package/web/assets/{programming-computer-database.svg-vah-tira.js → programming-computer-database.svg-CErKDQrw.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-Cpk_lyys.js → programming-module-four-layout.svg-B26pG3Bb.js} +1 -1
- package/web/assets/{programming-module-three.svg-DPfLaBLh.js → programming-module-three.svg-CnoN59HX.js} +1 -1
- package/web/assets/{programming-module.svg-X3KTc78b.js → programming-module.svg-C02rn1I7.js} +1 -1
- package/web/assets/{programming-script-code.svg-Btq5sYVs.js → programming-script-code.svg-D0sPjoPV.js} +1 -1
- package/web/assets/{python-7W62NPSS.js → python-1623Ut7s.js} +1 -1
- package/web/assets/{razor-B-cp1S_J.js → razor-CyTiWHYX.js} +1 -1
- package/web/assets/router-DWhykW-F.js +1 -0
- package/web/assets/settings-scope-9i3_Io9Z.js +1 -0
- package/web/assets/{settings.store-DvVMtpRN.js → settings.store-BPAoJA_7.js} +1 -1
- package/web/assets/{shopping-cart.svg-CrAdOGHj.js → shopping-cart.svg-Cusya5ZE.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-D6lzCq46.js → shopping-gift-present.svg-DuhD1jDX.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-CvE0Deq6.js → shopping-shipping-box-parcel-package.svg-mUJnCOxq.js} +1 -1
- package/web/assets/src-BiD62eGr.js +1 -0
- package/web/assets/src-CGoYw9sv.css +1 -0
- package/web/assets/{src-KOvSDAsA.js → src-HsHwQ5rW.js} +14 -14
- package/web/assets/{tabpanel-DnsLaWEk.js → tabpanel-D-R0gqbm.js} +3 -3
- package/web/assets/{tag-new-circle.svg-K7X6DVeY.js → tag-new-circle.svg-DFYYOM3s.js} +1 -1
- package/web/assets/{toggleswitch-BIl5_ynN.js → toggleswitch-Bv2Y60nl.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-CGHyssIY.js → travel-map-earth-globe.svg-D1KtAG5P.js} +1 -1
- package/web/assets/trpc-4Nls70HO.js +1 -0
- package/web/assets/{tsMode-Ch-xMRFe.js → tsMode-DarxEDX3.js} +1 -1
- package/web/assets/{typescript-DaR3W1ZS.js → typescript-Bp83QY3R.js} +1 -1
- package/web/assets/useAiChatDrawer-BYR24v6F.js +1 -0
- package/web/assets/useCloudOrg-B1BakNYp.js +572 -0
- package/web/assets/{useCloudOrg-CZ_ZOAVy.css → useCloudOrg-CkiFdVCe.css} +1 -1
- package/web/assets/useProjectCatalog-ClgttEEn.js +1 -0
- package/web/assets/{xml-DGHPJrA4.js → xml-CieK61bI.js} +1 -1
- package/web/assets/{yaml-Bt6S3avV.js → yaml-Dd4h-bcV.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-WEFGEFRT.js +0 -7
- package/chunk-6Y24763Y.js.map +0 -1
- package/src-QDQ5AT4C.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-BlRhaFfk.js +0 -13
- package/web/assets/AgentTerminalPage-Bgz6cN1-.js +0 -1
- package/web/assets/AiChatPage-B2ZLntQV.js +0 -1
- package/web/assets/AppLayout-CwaLgkBP.js +0 -1
- package/web/assets/AuditPage-qw3Fsus7.js +0 -1
- package/web/assets/CloudAccountPage-BLOaK1nf.js +0 -1
- package/web/assets/CloudAccountPage-DTs4O-ua.js +0 -1
- package/web/assets/CloudMessagingPage-Cz1EQr91.js +0 -2
- package/web/assets/DashboardPage-B5HHqw9m.js +0 -1
- package/web/assets/DirectoryPickerDialog-DjpBVTYW.js +0 -1
- package/web/assets/EnvironmentForm-C9NbiSRH.js +0 -108
- package/web/assets/EnvironmentFormPage-DWbL-D3Z.js +0 -1
- package/web/assets/EnvironmentListPage-rdeHc34g.js +0 -1
- package/web/assets/KanbanBoardPage-CbHeyK8M.js +0 -4
- package/web/assets/KanbanListPage-xIqiBmTe.js +0 -1
- package/web/assets/LaunchProjectPage-D04ok35N.js +0 -1
- package/web/assets/LaunchServicesPage-Bkhxe7Ko.js +0 -1
- package/web/assets/LogViewer-BHlGDB4l.js +0 -3
- package/web/assets/OrgKeyPrompt-CnIY4K5s.js +0 -1
- package/web/assets/ProcessDetailPage-BQCvKU0O.js +0 -1
- package/web/assets/ProjectDetailPage-Cjf4eBYS.js +0 -1
- package/web/assets/ProjectListPage-DQH1VC3U.js +0 -1
- package/web/assets/RandomJobTestPage-BMc4Qb-3.js +0 -2
- package/web/assets/ScenarioEditorPage-ClH3vxG9.js +0 -14
- package/web/assets/SendToChatDialog-5TxDHf96.js +0 -1
- package/web/assets/ServiceControlsBar-D0nrwVz7.js +0 -1
- package/web/assets/ServiceDetailPage-DLTZ2bjR.js +0 -2
- package/web/assets/ServiceFormPage-BoUHidR5.js +0 -1
- package/web/assets/SettingsPage-B6jM9W4h.js +0 -2063
- package/web/assets/UnlockPage-boIYvNg3.js +0 -1
- package/web/assets/VariablesTable-Eyqi7OJN.js +0 -1
- package/web/assets/VaultMigrationPage-CqKla89B.js +0 -1
- package/web/assets/VersionBadge-CnU3z5Rl.js +0 -1
- package/web/assets/WikiPage-Cbdxhr9G.js +0 -1
- package/web/assets/WikiView-BeWVPGaR.js +0 -1
- package/web/assets/add-scalar-classes-CG8bn7uZ.js +0 -387
- package/web/assets/auth-errors-CZibvB1j.js +0 -1
- package/web/assets/cloud-chat.store-BB8XNnvp.js +0 -1
- package/web/assets/cloud-session-f2IzlmYY.js +0 -1
- package/web/assets/column-BaNiShA4.js +0 -907
- package/web/assets/index-Cz0azMVO.css +0 -1
- package/web/assets/interface-content-folder.svg-C0OEvuKX.js +0 -1
- package/web/assets/modal-BO4YZ0Od.js +0 -1
- package/web/assets/modal-DUYd78Dq.js +0 -5
- package/web/assets/multiselect-DJ80nRN0.js +0 -251
- package/web/assets/process.store-Dq6j8zkt.js +0 -1
- package/web/assets/router-BzVLWWlf.js +0 -1
- package/web/assets/settings-scope-B2XSViBz.js +0 -1
- package/web/assets/src-DB1mNeZv.js +0 -1
- package/web/assets/src-DIxcn8ra.css +0 -1
- package/web/assets/trpc-BT4fWDYZ.js +0 -1
- package/web/assets/useAiChatDrawer-Bn5BBHr2.js +0 -1
- package/web/assets/useCloudOrg-CCXszfIX.js +0 -572
- package/web/assets/useProjectCatalog-CHgbaNsn.js +0 -1
- /package/{agent-manager-WEFGEFRT.js.map → agent-manager-3KSS7BHP.js.map} +0 -0
package/agent/index.js
CHANGED
|
@@ -60,7 +60,7 @@ var authMiddleware = t.middleware(({ ctx, next }) => {
|
|
|
60
60
|
var protectedProcedure = t.procedure.use(authMiddleware);
|
|
61
61
|
|
|
62
62
|
// src/trpc/routers/process.ts
|
|
63
|
-
import { z as
|
|
63
|
+
import { z as z24 } from "zod";
|
|
64
64
|
import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
65
65
|
|
|
66
66
|
// src/services/process-manager.ts
|
|
@@ -1148,6 +1148,37 @@ var UpdateCloudApiKeyInput = z20.object({
|
|
|
1148
1148
|
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1149
1149
|
});
|
|
1150
1150
|
|
|
1151
|
+
// ../../packages/shared/src/schemas/changelog.schema.ts
|
|
1152
|
+
import { z as z21 } from "zod";
|
|
1153
|
+
var ChangelogSurfaceSchema = z21.enum(["app", "cloud"]);
|
|
1154
|
+
var ChangelogChangeKindSchema = z21.enum(["feature", "improvement", "fix", "breaking"]);
|
|
1155
|
+
var ChangelogTextSchema = z21.object({
|
|
1156
|
+
fr: z21.string().min(1).max(500),
|
|
1157
|
+
en: z21.string().min(1).max(500)
|
|
1158
|
+
});
|
|
1159
|
+
var ChangelogChangeSchema = z21.object({
|
|
1160
|
+
kind: ChangelogChangeKindSchema,
|
|
1161
|
+
text: ChangelogTextSchema
|
|
1162
|
+
});
|
|
1163
|
+
var ChangelogDraftSchema = ChangelogChangeSchema.extend({
|
|
1164
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1165
|
+
title: ChangelogTextSchema.optional()
|
|
1166
|
+
});
|
|
1167
|
+
var ChangelogReleaseSchema = z21.object({
|
|
1168
|
+
surface: ChangelogSurfaceSchema,
|
|
1169
|
+
/** `1.4.2` pour l'app (version npm publiée), `2026-09-03` — ou `2026-09-03.2` — pour le cloud. */
|
|
1170
|
+
version: z21.string().min(1).max(32).regex(/^[0-9][0-9.-]*$/),
|
|
1171
|
+
/** Date de publication, `YYYY-MM-DD`. */
|
|
1172
|
+
date: z21.string().regex(/^\d{4}-\d{2}-\d{2}$/),
|
|
1173
|
+
/** Facultatif : une version peut s'annoncer par son seul numéro. */
|
|
1174
|
+
title: ChangelogTextSchema.optional(),
|
|
1175
|
+
/** Une version sans changement n'a rien à annoncer : elle n'a pas sa place ici. */
|
|
1176
|
+
changes: z21.array(ChangelogChangeSchema).min(1).max(50)
|
|
1177
|
+
});
|
|
1178
|
+
var ChangelogIndexItemSchema = ChangelogReleaseSchema.omit({ changes: true }).extend({
|
|
1179
|
+
changeCount: z21.number().int().nonnegative()
|
|
1180
|
+
});
|
|
1181
|
+
|
|
1151
1182
|
// ../../packages/shared/src/utils/crypto.ts
|
|
1152
1183
|
import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
|
|
1153
1184
|
|
|
@@ -3086,7 +3117,7 @@ import { execa as execa3 } from "execa";
|
|
|
3086
3117
|
import { homedir as homedir4 } from "os";
|
|
3087
3118
|
|
|
3088
3119
|
// src/trpc/routers/config.ts
|
|
3089
|
-
import { z as
|
|
3120
|
+
import { z as z22 } from "zod";
|
|
3090
3121
|
|
|
3091
3122
|
// src/services/traefik-manager.ts
|
|
3092
3123
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3464,13 +3495,13 @@ function resolvePassthroughEnv() {
|
|
|
3464
3495
|
return result;
|
|
3465
3496
|
}
|
|
3466
3497
|
var configRouter = router({
|
|
3467
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3468
|
-
names:
|
|
3469
|
-
|
|
3498
|
+
setPassthroughEnv: protectedProcedure.input(z22.object({
|
|
3499
|
+
names: z22.array(
|
|
3500
|
+
z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3470
3501
|
).max(100),
|
|
3471
|
-
values:
|
|
3472
|
-
|
|
3473
|
-
|
|
3502
|
+
values: z22.record(
|
|
3503
|
+
z22.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3504
|
+
z22.string().max(32768)
|
|
3474
3505
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3475
3506
|
})).mutation(({ input }) => {
|
|
3476
3507
|
passthroughEnvNames = input.names;
|
|
@@ -3507,7 +3538,7 @@ var configRouter = router({
|
|
|
3507
3538
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3508
3539
|
return traefikManager.getFileTree();
|
|
3509
3540
|
}),
|
|
3510
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3541
|
+
getTraefikLogs: protectedProcedure.input(z22.object({ lines: z22.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3511
3542
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3512
3543
|
return { logs };
|
|
3513
3544
|
})
|
|
@@ -3699,17 +3730,17 @@ var healthChecker = new HealthChecker();
|
|
|
3699
3730
|
import killPort from "kill-port";
|
|
3700
3731
|
|
|
3701
3732
|
// src/config/env.ts
|
|
3702
|
-
import { z as
|
|
3703
|
-
var EnvSchema =
|
|
3704
|
-
RUNEYA_AGENT_PORT:
|
|
3705
|
-
RUNEYA_AGENT_HOST:
|
|
3706
|
-
PASSPHRASE_OVERRIDE:
|
|
3707
|
-
AGENT_ID:
|
|
3733
|
+
import { z as z23 } from "zod";
|
|
3734
|
+
var EnvSchema = z23.object({
|
|
3735
|
+
RUNEYA_AGENT_PORT: z23.coerce.number().int().min(1).max(65535).default(4001),
|
|
3736
|
+
RUNEYA_AGENT_HOST: z23.string().default("127.0.0.1"),
|
|
3737
|
+
PASSPHRASE_OVERRIDE: z23.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3738
|
+
AGENT_ID: z23.string().optional(),
|
|
3708
3739
|
// Set by spawner or manually for remote agents
|
|
3709
|
-
LOG_BUFFER_SIZE:
|
|
3710
|
-
METRICS_INTERVAL:
|
|
3711
|
-
GRACE_PERIOD:
|
|
3712
|
-
HEALTH_WS_INTERVAL:
|
|
3740
|
+
LOG_BUFFER_SIZE: z23.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3741
|
+
METRICS_INTERVAL: z23.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3742
|
+
GRACE_PERIOD: z23.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3743
|
+
HEALTH_WS_INTERVAL: z23.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3713
3744
|
});
|
|
3714
3745
|
var env = EnvSchema.parse(process.env);
|
|
3715
3746
|
|
|
@@ -4494,7 +4525,7 @@ var processRouter = router({
|
|
|
4494
4525
|
return processManager.listStatuses();
|
|
4495
4526
|
}),
|
|
4496
4527
|
/** Get a single process */
|
|
4497
|
-
get: protectedProcedure.input(
|
|
4528
|
+
get: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
|
|
4498
4529
|
const status = processManager.getStatus(input.id);
|
|
4499
4530
|
if (!status) {
|
|
4500
4531
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4507,78 +4538,78 @@ var processRouter = router({
|
|
|
4507
4538
|
return { id };
|
|
4508
4539
|
}),
|
|
4509
4540
|
/** Undeploy: stop + remove */
|
|
4510
|
-
undeploy: protectedProcedure.input(
|
|
4541
|
+
undeploy: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4511
4542
|
await processManager.undeploy(input.id);
|
|
4512
4543
|
return { success: true };
|
|
4513
4544
|
}),
|
|
4514
4545
|
/** Update the service config for a deployed process */
|
|
4515
|
-
updateConfig: protectedProcedure.input(
|
|
4546
|
+
updateConfig: protectedProcedure.input(z24.object({ serviceId: z24.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4516
4547
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4517
4548
|
return { success: true };
|
|
4518
4549
|
}),
|
|
4519
4550
|
/** Start a deployed process */
|
|
4520
|
-
start: protectedProcedure.input(
|
|
4551
|
+
start: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4521
4552
|
console.log(`[agent] start service=${input.id}`);
|
|
4522
4553
|
await processManager.start(input.id);
|
|
4523
4554
|
return processManager.getStatus(input.id);
|
|
4524
4555
|
}),
|
|
4525
4556
|
/** Stop a running process */
|
|
4526
|
-
stop: protectedProcedure.input(
|
|
4557
|
+
stop: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4527
4558
|
console.log(`[agent] stop service=${input.id}`);
|
|
4528
4559
|
await processManager.stop(input.id);
|
|
4529
4560
|
return processManager.getStatus(input.id);
|
|
4530
4561
|
}),
|
|
4531
4562
|
/** Restart a process */
|
|
4532
|
-
restart: protectedProcedure.input(
|
|
4563
|
+
restart: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(async ({ input }) => {
|
|
4533
4564
|
console.log(`[agent] restart service=${input.id}`);
|
|
4534
4565
|
await processManager.restart(input.id);
|
|
4535
4566
|
return processManager.getStatus(input.id);
|
|
4536
4567
|
}),
|
|
4537
4568
|
/** Get buffered logs for a process */
|
|
4538
|
-
logs: protectedProcedure.input(
|
|
4569
|
+
logs: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(({ input }) => {
|
|
4539
4570
|
const logs = processManager.getLogs(input.id);
|
|
4540
4571
|
return logs;
|
|
4541
4572
|
}),
|
|
4542
4573
|
/** Clear buffered logs for a process */
|
|
4543
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4574
|
+
clearLogBuffer: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).mutation(({ input }) => {
|
|
4544
4575
|
processManager.clearLogBuffer(input.id);
|
|
4545
4576
|
return { success: true };
|
|
4546
4577
|
}),
|
|
4547
4578
|
/** Execute a shortcut command and stream output into the process log */
|
|
4548
|
-
executeShortcut: protectedProcedure.input(
|
|
4579
|
+
executeShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4549
4580
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4550
4581
|
return result;
|
|
4551
4582
|
}),
|
|
4552
4583
|
/** Cancel a running shortcut command */
|
|
4553
|
-
cancelShortcut: protectedProcedure.input(
|
|
4584
|
+
cancelShortcut: protectedProcedure.input(z24.object({ id: z24.string().max(128), shortcutId: z24.string().max(128) })).mutation(({ input }) => {
|
|
4554
4585
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4555
4586
|
return { success: true };
|
|
4556
4587
|
}),
|
|
4557
4588
|
/** Cancel a running ad-hoc command */
|
|
4558
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4589
|
+
cancelAdHocCommand: protectedProcedure.input(z24.object({ id: z24.string().max(128), commandId: z24.string().max(128).optional() })).mutation(({ input }) => {
|
|
4559
4590
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4560
4591
|
return { success: true };
|
|
4561
4592
|
}),
|
|
4562
4593
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4563
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4564
|
-
id:
|
|
4565
|
-
command:
|
|
4566
|
-
cwd:
|
|
4567
|
-
commandId:
|
|
4594
|
+
executeAdHocCommand: protectedProcedure.input(z24.object({
|
|
4595
|
+
id: z24.string().max(128),
|
|
4596
|
+
command: z24.string().min(1).max(4096),
|
|
4597
|
+
cwd: z24.string().max(4096).optional(),
|
|
4598
|
+
commandId: z24.string().max(128).optional()
|
|
4568
4599
|
})).mutation(async ({ input }) => {
|
|
4569
4600
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4570
4601
|
return result;
|
|
4571
4602
|
}),
|
|
4572
4603
|
/** List active log source types for a process */
|
|
4573
|
-
logSources: protectedProcedure.input(
|
|
4604
|
+
logSources: protectedProcedure.input(z24.object({ processId: z24.string().max(128) })).query(({ input }) => {
|
|
4574
4605
|
return processManager.getLogSourceTypes(input.processId);
|
|
4575
4606
|
}),
|
|
4576
4607
|
/** Get current metrics for a process */
|
|
4577
|
-
metrics: protectedProcedure.input(
|
|
4608
|
+
metrics: protectedProcedure.input(z24.object({ id: z24.string().max(128) })).query(async ({ input }) => {
|
|
4578
4609
|
return processManager.getMetrics(input.id);
|
|
4579
4610
|
}),
|
|
4580
4611
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4581
|
-
onLog: protectedProcedure.input(
|
|
4612
|
+
onLog: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4582
4613
|
const queue = [];
|
|
4583
4614
|
let resolve2 = null;
|
|
4584
4615
|
const handler = (batch) => {
|
|
@@ -4607,7 +4638,7 @@ var processRouter = router({
|
|
|
4607
4638
|
}
|
|
4608
4639
|
}),
|
|
4609
4640
|
/** Subscribe to real-time status changes */
|
|
4610
|
-
onStatus: protectedProcedure.input(
|
|
4641
|
+
onStatus: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4611
4642
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4612
4643
|
const queue = [];
|
|
4613
4644
|
let resolve2 = null;
|
|
@@ -4639,7 +4670,7 @@ var processRouter = router({
|
|
|
4639
4670
|
}
|
|
4640
4671
|
}),
|
|
4641
4672
|
/** Subscribe to real-time health status changes */
|
|
4642
|
-
onHealth: protectedProcedure.input(
|
|
4673
|
+
onHealth: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4643
4674
|
const queue = [];
|
|
4644
4675
|
let resolve2 = null;
|
|
4645
4676
|
const handler = (healthData) => {
|
|
@@ -4669,7 +4700,7 @@ var processRouter = router({
|
|
|
4669
4700
|
}
|
|
4670
4701
|
}),
|
|
4671
4702
|
/** Subscribe to real-time metrics */
|
|
4672
|
-
onMetrics: protectedProcedure.input(
|
|
4703
|
+
onMetrics: protectedProcedure.input(z24.object({ processId: z24.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4673
4704
|
const queue = [];
|
|
4674
4705
|
let resolve2 = null;
|
|
4675
4706
|
const handler = (metrics) => {
|
|
@@ -4750,7 +4781,7 @@ var healthRouter = router({
|
|
|
4750
4781
|
});
|
|
4751
4782
|
|
|
4752
4783
|
// src/trpc/routers/terminal.ts
|
|
4753
|
-
import { z as
|
|
4784
|
+
import { z as z25 } from "zod";
|
|
4754
4785
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
4755
4786
|
|
|
4756
4787
|
// src/services/terminal-manager.ts
|
|
@@ -4843,11 +4874,11 @@ var terminalManager = new TerminalManager();
|
|
|
4843
4874
|
// src/trpc/routers/terminal.ts
|
|
4844
4875
|
var terminalRouter = router({
|
|
4845
4876
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
4846
|
-
create: protectedProcedure.input(
|
|
4847
|
-
cwd:
|
|
4848
|
-
cols:
|
|
4849
|
-
rows:
|
|
4850
|
-
title:
|
|
4877
|
+
create: protectedProcedure.input(z25.object({
|
|
4878
|
+
cwd: z25.string().max(512).optional(),
|
|
4879
|
+
cols: z25.number().int().min(1).max(512).optional(),
|
|
4880
|
+
rows: z25.number().int().min(1).max(256).optional(),
|
|
4881
|
+
title: z25.string().max(128).optional()
|
|
4851
4882
|
})).mutation(({ input }) => {
|
|
4852
4883
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
4853
4884
|
return { sessionId };
|
|
@@ -4855,34 +4886,34 @@ var terminalRouter = router({
|
|
|
4855
4886
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
4856
4887
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
4857
4888
|
/** Renommer un onglet */
|
|
4858
|
-
rename: protectedProcedure.input(
|
|
4889
|
+
rename: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), title: z25.string().max(128) })).mutation(({ input }) => {
|
|
4859
4890
|
terminalManager.rename(input.sessionId, input.title);
|
|
4860
4891
|
return { ok: true };
|
|
4861
4892
|
}),
|
|
4862
4893
|
/** Write data (keystrokes) to a PTY session */
|
|
4863
|
-
write: protectedProcedure.input(
|
|
4894
|
+
write: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128), data: z25.string().max(65536) })).mutation(({ input }) => {
|
|
4864
4895
|
terminalManager.write(input.sessionId, input.data);
|
|
4865
4896
|
return { ok: true };
|
|
4866
4897
|
}),
|
|
4867
4898
|
/** Resize a PTY session */
|
|
4868
|
-
resize: protectedProcedure.input(
|
|
4869
|
-
sessionId:
|
|
4870
|
-
cols:
|
|
4871
|
-
rows:
|
|
4899
|
+
resize: protectedProcedure.input(z25.object({
|
|
4900
|
+
sessionId: z25.string().max(128),
|
|
4901
|
+
cols: z25.number().int().min(1).max(512),
|
|
4902
|
+
rows: z25.number().int().min(1).max(256)
|
|
4872
4903
|
})).mutation(({ input }) => {
|
|
4873
4904
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
4874
4905
|
return { ok: true };
|
|
4875
4906
|
}),
|
|
4876
4907
|
/** Destroy a PTY session */
|
|
4877
|
-
destroy: protectedProcedure.input(
|
|
4908
|
+
destroy: protectedProcedure.input(z25.object({ sessionId: z25.string().max(128) })).mutation(({ input }) => {
|
|
4878
4909
|
terminalManager.destroy(input.sessionId);
|
|
4879
4910
|
return { ok: true };
|
|
4880
4911
|
}),
|
|
4881
4912
|
/** Stream PTY output for a session (async generator subscription) */
|
|
4882
|
-
onData: protectedProcedure.input(
|
|
4883
|
-
sessionId:
|
|
4913
|
+
onData: protectedProcedure.input(z25.object({
|
|
4914
|
+
sessionId: z25.string().max(128),
|
|
4884
4915
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
4885
|
-
replay:
|
|
4916
|
+
replay: z25.boolean().optional()
|
|
4886
4917
|
})).subscription(async function* ({ input }) {
|
|
4887
4918
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
4888
4919
|
if (!emitter) {
|
|
@@ -4927,7 +4958,7 @@ var terminalRouter = router({
|
|
|
4927
4958
|
});
|
|
4928
4959
|
|
|
4929
4960
|
// src/trpc/routers/git.ts
|
|
4930
|
-
import { z as
|
|
4961
|
+
import { z as z26 } from "zod";
|
|
4931
4962
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
4932
4963
|
import { execFile as execFile5, spawn as spawn3 } from "child_process";
|
|
4933
4964
|
import { promisify as promisify3 } from "util";
|
|
@@ -4995,12 +5026,12 @@ async function sameGitRemote(a, b, resolveHost = resolveSshHost) {
|
|
|
4995
5026
|
var execFileAsync3 = promisify3(execFile5);
|
|
4996
5027
|
var GIT_TIMEOUT = 15e3;
|
|
4997
5028
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
4998
|
-
var CWD_SCHEMA =
|
|
4999
|
-
var SAFE_PATH_SCHEMA =
|
|
5029
|
+
var CWD_SCHEMA = z26.string().min(1).max(4096);
|
|
5030
|
+
var SAFE_PATH_SCHEMA = z26.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
5000
5031
|
message: "Path must be relative and not traverse up"
|
|
5001
5032
|
});
|
|
5002
|
-
var REMOTE_SCHEMA =
|
|
5003
|
-
var BRANCH_SCHEMA =
|
|
5033
|
+
var REMOTE_SCHEMA = z26.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
5034
|
+
var BRANCH_SCHEMA = z26.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
5004
5035
|
function gitSafeEnv() {
|
|
5005
5036
|
const env2 = {
|
|
5006
5037
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -5118,10 +5149,10 @@ async function getGitStatus(cwd) {
|
|
|
5118
5149
|
}
|
|
5119
5150
|
var gitRouter = router({
|
|
5120
5151
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
5121
|
-
checkCwd: protectedProcedure.input(
|
|
5152
|
+
checkCwd: protectedProcedure.input(z26.object({
|
|
5122
5153
|
cwd: CWD_SCHEMA,
|
|
5123
|
-
remote:
|
|
5124
|
-
checkReachability:
|
|
5154
|
+
remote: z26.string().max(2048).optional(),
|
|
5155
|
+
checkReachability: z26.boolean().optional()
|
|
5125
5156
|
})).query(async ({ input }) => {
|
|
5126
5157
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
5127
5158
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -5143,8 +5174,8 @@ var gitRouter = router({
|
|
|
5143
5174
|
return { exists, actualRemote, remoteMatches, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
5144
5175
|
}),
|
|
5145
5176
|
/** Clone a git repository into a target directory */
|
|
5146
|
-
clone: protectedProcedure.input(
|
|
5147
|
-
remote:
|
|
5177
|
+
clone: protectedProcedure.input(z26.object({
|
|
5178
|
+
remote: z26.string().min(1).max(2048),
|
|
5148
5179
|
cwd: CWD_SCHEMA
|
|
5149
5180
|
})).mutation(async ({ input }) => {
|
|
5150
5181
|
const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
|
|
@@ -5165,13 +5196,13 @@ var gitRouter = router({
|
|
|
5165
5196
|
return { success: true };
|
|
5166
5197
|
}),
|
|
5167
5198
|
/** Get full git status */
|
|
5168
|
-
status: protectedProcedure.input(
|
|
5199
|
+
status: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5169
5200
|
const cwd = assertCwdExists(input.cwd);
|
|
5170
5201
|
await assertGitRepo(cwd);
|
|
5171
5202
|
return getGitStatus(cwd);
|
|
5172
5203
|
}),
|
|
5173
5204
|
/** Watch .git/ for changes and stream updated status */
|
|
5174
|
-
onStatusChange: protectedProcedure.input(
|
|
5205
|
+
onStatusChange: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
5175
5206
|
const cwd = assertCwdExists(input.cwd);
|
|
5176
5207
|
await assertGitRepo(cwd);
|
|
5177
5208
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -5222,7 +5253,7 @@ var gitRouter = router({
|
|
|
5222
5253
|
}
|
|
5223
5254
|
}),
|
|
5224
5255
|
/** Get commit log */
|
|
5225
|
-
log: protectedProcedure.input(
|
|
5256
|
+
log: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, limit: z26.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
5226
5257
|
const cwd = assertCwdExists(input.cwd);
|
|
5227
5258
|
await assertGitRepo(cwd);
|
|
5228
5259
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -5233,7 +5264,7 @@ var gitRouter = router({
|
|
|
5233
5264
|
});
|
|
5234
5265
|
}),
|
|
5235
5266
|
/** List local and remote branches */
|
|
5236
|
-
branches: protectedProcedure.input(
|
|
5267
|
+
branches: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5237
5268
|
const cwd = assertCwdExists(input.cwd);
|
|
5238
5269
|
await assertGitRepo(cwd);
|
|
5239
5270
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5245,7 +5276,7 @@ var gitRouter = router({
|
|
|
5245
5276
|
return { current, branches };
|
|
5246
5277
|
}),
|
|
5247
5278
|
/** Checkout a branch */
|
|
5248
|
-
checkout: protectedProcedure.input(
|
|
5279
|
+
checkout: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5249
5280
|
const cwd = assertCwdExists(input.cwd);
|
|
5250
5281
|
await assertGitRepo(cwd);
|
|
5251
5282
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -5253,42 +5284,42 @@ var gitRouter = router({
|
|
|
5253
5284
|
return { ok: true };
|
|
5254
5285
|
}),
|
|
5255
5286
|
/** Stage files */
|
|
5256
|
-
stage: protectedProcedure.input(
|
|
5287
|
+
stage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5257
5288
|
const cwd = assertCwdExists(input.cwd);
|
|
5258
5289
|
await assertGitRepo(cwd);
|
|
5259
5290
|
await git(["add", "--", ...input.paths], cwd);
|
|
5260
5291
|
return { ok: true };
|
|
5261
5292
|
}),
|
|
5262
5293
|
/** Stage all files */
|
|
5263
|
-
stageAll: protectedProcedure.input(
|
|
5294
|
+
stageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5264
5295
|
const cwd = assertCwdExists(input.cwd);
|
|
5265
5296
|
await assertGitRepo(cwd);
|
|
5266
5297
|
await git(["add", "-A"], cwd);
|
|
5267
5298
|
return { ok: true };
|
|
5268
5299
|
}),
|
|
5269
5300
|
/** Unstage files */
|
|
5270
|
-
unstage: protectedProcedure.input(
|
|
5301
|
+
unstage: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5271
5302
|
const cwd = assertCwdExists(input.cwd);
|
|
5272
5303
|
await assertGitRepo(cwd);
|
|
5273
5304
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5274
5305
|
return { ok: true };
|
|
5275
5306
|
}),
|
|
5276
5307
|
/** Unstage all files */
|
|
5277
|
-
unstageAll: protectedProcedure.input(
|
|
5308
|
+
unstageAll: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5278
5309
|
const cwd = assertCwdExists(input.cwd);
|
|
5279
5310
|
await assertGitRepo(cwd);
|
|
5280
5311
|
await git(["reset", "--"], cwd);
|
|
5281
5312
|
return { ok: true };
|
|
5282
5313
|
}),
|
|
5283
5314
|
/** Commit staged changes */
|
|
5284
|
-
commit: protectedProcedure.input(
|
|
5315
|
+
commit: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, message: z26.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5285
5316
|
const cwd = assertCwdExists(input.cwd);
|
|
5286
5317
|
await assertGitRepo(cwd);
|
|
5287
5318
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5288
5319
|
return { ok: true, output: output.trim() };
|
|
5289
5320
|
}),
|
|
5290
5321
|
/** Push to remote */
|
|
5291
|
-
push: protectedProcedure.input(
|
|
5322
|
+
push: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5292
5323
|
const cwd = assertCwdExists(input.cwd);
|
|
5293
5324
|
await assertGitRepo(cwd);
|
|
5294
5325
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5297,25 +5328,25 @@ var gitRouter = router({
|
|
|
5297
5328
|
return { ok: true, output: output.trim() };
|
|
5298
5329
|
}),
|
|
5299
5330
|
/** Pull from remote */
|
|
5300
|
-
pull: protectedProcedure.input(
|
|
5331
|
+
pull: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5301
5332
|
const cwd = assertCwdExists(input.cwd);
|
|
5302
5333
|
await assertGitRepo(cwd);
|
|
5303
5334
|
const output = await git(["pull", input.remote], cwd);
|
|
5304
5335
|
return { ok: true, output: output.trim() };
|
|
5305
5336
|
}),
|
|
5306
5337
|
/** Fetch from remote */
|
|
5307
|
-
fetch: protectedProcedure.input(
|
|
5338
|
+
fetch: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5308
5339
|
const cwd = assertCwdExists(input.cwd);
|
|
5309
5340
|
await assertGitRepo(cwd);
|
|
5310
5341
|
const output = await git(["fetch", input.remote], cwd);
|
|
5311
5342
|
return { ok: true, output: output.trim() };
|
|
5312
5343
|
}),
|
|
5313
5344
|
/** Get diff for a file or the whole index */
|
|
5314
|
-
diff: protectedProcedure.input(
|
|
5345
|
+
diff: protectedProcedure.input(z26.object({
|
|
5315
5346
|
cwd: CWD_SCHEMA,
|
|
5316
|
-
path:
|
|
5317
|
-
staged:
|
|
5318
|
-
untracked:
|
|
5347
|
+
path: z26.string().max(4096).optional(),
|
|
5348
|
+
staged: z26.boolean().default(false),
|
|
5349
|
+
untracked: z26.boolean().default(false)
|
|
5319
5350
|
})).query(async ({ input }) => {
|
|
5320
5351
|
const cwd = assertCwdExists(input.cwd);
|
|
5321
5352
|
await assertGitRepo(cwd);
|
|
@@ -5363,21 +5394,21 @@ var gitRouter = router({
|
|
|
5363
5394
|
};
|
|
5364
5395
|
}),
|
|
5365
5396
|
/** Discard changes to working tree files */
|
|
5366
|
-
discard: protectedProcedure.input(
|
|
5397
|
+
discard: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, paths: z26.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5367
5398
|
const cwd = assertCwdExists(input.cwd);
|
|
5368
5399
|
await assertGitRepo(cwd);
|
|
5369
5400
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5370
5401
|
return { ok: true };
|
|
5371
5402
|
}),
|
|
5372
5403
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5373
|
-
stagedDiff: protectedProcedure.input(
|
|
5404
|
+
stagedDiff: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5374
5405
|
const cwd = assertCwdExists(input.cwd);
|
|
5375
5406
|
await assertGitRepo(cwd);
|
|
5376
5407
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5377
5408
|
return { diff: diff.slice(0, 3e4) };
|
|
5378
5409
|
}),
|
|
5379
5410
|
/** Merge a branch into the current branch */
|
|
5380
|
-
merge: protectedProcedure.input(
|
|
5411
|
+
merge: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z26.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5381
5412
|
const cwd = assertCwdExists(input.cwd);
|
|
5382
5413
|
await assertGitRepo(cwd);
|
|
5383
5414
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5385,14 +5416,14 @@ var gitRouter = router({
|
|
|
5385
5416
|
return { ok: true, output: output.trim() };
|
|
5386
5417
|
}),
|
|
5387
5418
|
/** Rebase current branch onto another branch */
|
|
5388
|
-
rebase: protectedProcedure.input(
|
|
5419
|
+
rebase: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5389
5420
|
const cwd = assertCwdExists(input.cwd);
|
|
5390
5421
|
await assertGitRepo(cwd);
|
|
5391
5422
|
const output = await git(["rebase", input.branch], cwd);
|
|
5392
5423
|
return { ok: true, output: output.trim() };
|
|
5393
5424
|
}),
|
|
5394
5425
|
/** List remotes */
|
|
5395
|
-
remotes: protectedProcedure.input(
|
|
5426
|
+
remotes: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5396
5427
|
const cwd = assertCwdExists(input.cwd);
|
|
5397
5428
|
await assertGitRepo(cwd);
|
|
5398
5429
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5410,7 +5441,7 @@ var gitRouter = router({
|
|
|
5410
5441
|
return remotes;
|
|
5411
5442
|
}),
|
|
5412
5443
|
/** List stash entries */
|
|
5413
|
-
stashList: protectedProcedure.input(
|
|
5444
|
+
stashList: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5414
5445
|
const cwd = assertCwdExists(input.cwd);
|
|
5415
5446
|
await assertGitRepo(cwd);
|
|
5416
5447
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5423,10 +5454,10 @@ var gitRouter = router({
|
|
|
5423
5454
|
return entries;
|
|
5424
5455
|
}),
|
|
5425
5456
|
/** Stash current changes */
|
|
5426
|
-
stashPush: protectedProcedure.input(
|
|
5457
|
+
stashPush: protectedProcedure.input(z26.object({
|
|
5427
5458
|
cwd: CWD_SCHEMA,
|
|
5428
|
-
message:
|
|
5429
|
-
includeUntracked:
|
|
5459
|
+
message: z26.string().max(4096).optional(),
|
|
5460
|
+
includeUntracked: z26.boolean().default(true)
|
|
5430
5461
|
})).mutation(async ({ input }) => {
|
|
5431
5462
|
const cwd = assertCwdExists(input.cwd);
|
|
5432
5463
|
await assertGitRepo(cwd);
|
|
@@ -5437,21 +5468,21 @@ var gitRouter = router({
|
|
|
5437
5468
|
return { ok: true, output: output.trim() };
|
|
5438
5469
|
}),
|
|
5439
5470
|
/** Apply a stash entry and remove it from the list */
|
|
5440
|
-
stashPop: protectedProcedure.input(
|
|
5471
|
+
stashPop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5441
5472
|
const cwd = assertCwdExists(input.cwd);
|
|
5442
5473
|
await assertGitRepo(cwd);
|
|
5443
5474
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5444
5475
|
return { ok: true, output: output.trim() };
|
|
5445
5476
|
}),
|
|
5446
5477
|
/** Apply a stash entry without removing it from the list */
|
|
5447
|
-
stashApply: protectedProcedure.input(
|
|
5478
|
+
stashApply: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5448
5479
|
const cwd = assertCwdExists(input.cwd);
|
|
5449
5480
|
await assertGitRepo(cwd);
|
|
5450
5481
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5451
5482
|
return { ok: true, output: output.trim() };
|
|
5452
5483
|
}),
|
|
5453
5484
|
/** Drop a stash entry */
|
|
5454
|
-
stashDrop: protectedProcedure.input(
|
|
5485
|
+
stashDrop: protectedProcedure.input(z26.object({ cwd: CWD_SCHEMA, index: z26.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5455
5486
|
const cwd = assertCwdExists(input.cwd);
|
|
5456
5487
|
await assertGitRepo(cwd);
|
|
5457
5488
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5484,7 +5515,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5484
5515
|
}
|
|
5485
5516
|
|
|
5486
5517
|
// src/trpc/routers/ai.ts
|
|
5487
|
-
import { z as
|
|
5518
|
+
import { z as z27 } from "zod";
|
|
5488
5519
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5489
5520
|
|
|
5490
5521
|
// src/services/ai-spawn-manager.ts
|
|
@@ -6201,23 +6232,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
6201
6232
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
6202
6233
|
var aiRouter = router({
|
|
6203
6234
|
/** Spawn an AI CLI process. Returns a spawnId for streaming. */
|
|
6204
|
-
spawn: protectedProcedure.input(
|
|
6205
|
-
cli:
|
|
6206
|
-
args:
|
|
6207
|
-
env:
|
|
6208
|
-
cwd:
|
|
6209
|
-
stdinData:
|
|
6210
|
-
enableMcp:
|
|
6211
|
-
mcpApiBaseUrl:
|
|
6212
|
-
mcpApiToken:
|
|
6235
|
+
spawn: protectedProcedure.input(z27.object({
|
|
6236
|
+
cli: z27.string().max(64),
|
|
6237
|
+
args: z27.array(z27.string().max(5e5)),
|
|
6238
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
|
|
6239
|
+
cwd: z27.string().max(4096).optional(),
|
|
6240
|
+
stdinData: z27.string().max(1e7).optional(),
|
|
6241
|
+
enableMcp: z27.boolean().optional(),
|
|
6242
|
+
mcpApiBaseUrl: z27.string().max(512).optional(),
|
|
6243
|
+
mcpApiToken: z27.string().max(8192).optional()
|
|
6213
6244
|
})).mutation(({ input }) => {
|
|
6214
6245
|
const spawnId = aiSpawnManager.spawn(input);
|
|
6215
6246
|
return { spawnId };
|
|
6216
6247
|
}),
|
|
6217
6248
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
6218
|
-
stream: protectedProcedure.input(
|
|
6219
|
-
spawnId:
|
|
6220
|
-
fromOffset:
|
|
6249
|
+
stream: protectedProcedure.input(z27.object({
|
|
6250
|
+
spawnId: z27.string().max(128),
|
|
6251
|
+
fromOffset: z27.number().int().min(0).default(0)
|
|
6221
6252
|
})).subscription(async function* ({ input }) {
|
|
6222
6253
|
try {
|
|
6223
6254
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -6231,39 +6262,39 @@ var aiRouter = router({
|
|
|
6231
6262
|
}
|
|
6232
6263
|
}),
|
|
6233
6264
|
/** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
|
|
6234
|
-
spawnPty: protectedProcedure.input(
|
|
6235
|
-
cli:
|
|
6236
|
-
args:
|
|
6237
|
-
env:
|
|
6238
|
-
cwd:
|
|
6239
|
-
cols:
|
|
6240
|
-
rows:
|
|
6241
|
-
sessionId:
|
|
6242
|
-
enableMcp:
|
|
6243
|
-
mcpApiBaseUrl:
|
|
6244
|
-
mcpApiToken:
|
|
6265
|
+
spawnPty: protectedProcedure.input(z27.object({
|
|
6266
|
+
cli: z27.string().max(64),
|
|
6267
|
+
args: z27.array(z27.string().max(5e5)),
|
|
6268
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional(),
|
|
6269
|
+
cwd: z27.string().max(4096).optional(),
|
|
6270
|
+
cols: z27.number().int().min(1).max(1e3).optional(),
|
|
6271
|
+
rows: z27.number().int().min(1).max(1e3).optional(),
|
|
6272
|
+
sessionId: z27.string().max(128).optional(),
|
|
6273
|
+
enableMcp: z27.boolean().optional(),
|
|
6274
|
+
mcpApiBaseUrl: z27.string().max(512).optional(),
|
|
6275
|
+
mcpApiToken: z27.string().max(8192).optional()
|
|
6245
6276
|
})).mutation(({ input }) => {
|
|
6246
6277
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
6247
6278
|
return { spawnId };
|
|
6248
6279
|
}),
|
|
6249
6280
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
6250
|
-
findPtyBySession: protectedProcedure.input(
|
|
6281
|
+
findPtyBySession: protectedProcedure.input(z27.object({ sessionId: z27.string().max(128) })).query(({ input }) => {
|
|
6251
6282
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
6252
6283
|
}),
|
|
6253
6284
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
6254
|
-
writePty: protectedProcedure.input(
|
|
6255
|
-
spawnId:
|
|
6256
|
-
data:
|
|
6285
|
+
writePty: protectedProcedure.input(z27.object({
|
|
6286
|
+
spawnId: z27.string().max(128),
|
|
6287
|
+
data: z27.string().max(1e6)
|
|
6257
6288
|
})).mutation(({ input }) => {
|
|
6258
6289
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
6259
6290
|
return { ok };
|
|
6260
6291
|
}),
|
|
6261
6292
|
/** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
|
|
6262
|
-
writeContextFiles: protectedProcedure.input(
|
|
6263
|
-
sessionId:
|
|
6264
|
-
files:
|
|
6265
|
-
name:
|
|
6266
|
-
content:
|
|
6293
|
+
writeContextFiles: protectedProcedure.input(z27.object({
|
|
6294
|
+
sessionId: z27.string().min(1).max(128),
|
|
6295
|
+
files: z27.array(z27.object({
|
|
6296
|
+
name: z27.string().min(1).max(256),
|
|
6297
|
+
content: z27.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
6267
6298
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6268
6299
|
}).refine(
|
|
6269
6300
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6278,25 +6309,25 @@ var aiRouter = router({
|
|
|
6278
6309
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6279
6310
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6280
6311
|
*/
|
|
6281
|
-
pasteImage: protectedProcedure.input(
|
|
6282
|
-
sessionId:
|
|
6283
|
-
mimeType:
|
|
6284
|
-
base64:
|
|
6312
|
+
pasteImage: protectedProcedure.input(z27.object({
|
|
6313
|
+
sessionId: z27.string().max(128).optional(),
|
|
6314
|
+
mimeType: z27.string().max(64),
|
|
6315
|
+
base64: z27.string().max(15e6)
|
|
6285
6316
|
})).mutation(async ({ input }) => {
|
|
6286
6317
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6287
6318
|
return res;
|
|
6288
6319
|
}),
|
|
6289
6320
|
/** Resize a PTY spawn. */
|
|
6290
|
-
resizePty: protectedProcedure.input(
|
|
6291
|
-
spawnId:
|
|
6292
|
-
cols:
|
|
6293
|
-
rows:
|
|
6321
|
+
resizePty: protectedProcedure.input(z27.object({
|
|
6322
|
+
spawnId: z27.string().max(128),
|
|
6323
|
+
cols: z27.number().int().min(1).max(1e3),
|
|
6324
|
+
rows: z27.number().int().min(1).max(1e3)
|
|
6294
6325
|
})).mutation(({ input }) => {
|
|
6295
6326
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6296
6327
|
return { ok };
|
|
6297
6328
|
}),
|
|
6298
6329
|
/** Kill a running AI spawn. */
|
|
6299
|
-
kill: protectedProcedure.input(
|
|
6330
|
+
kill: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
|
|
6300
6331
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6301
6332
|
return { ok: killed };
|
|
6302
6333
|
}),
|
|
@@ -6305,23 +6336,23 @@ var aiRouter = router({
|
|
|
6305
6336
|
return aiSpawnManager.list();
|
|
6306
6337
|
}),
|
|
6307
6338
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6308
|
-
ack: protectedProcedure.input(
|
|
6339
|
+
ack: protectedProcedure.input(z27.object({ spawnId: z27.string().max(128) })).mutation(({ input }) => {
|
|
6309
6340
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6310
6341
|
return { ok: acked };
|
|
6311
6342
|
}),
|
|
6312
6343
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6313
|
-
codexRequest: protectedProcedure.input(
|
|
6314
|
-
method:
|
|
6315
|
-
params:
|
|
6316
|
-
env:
|
|
6344
|
+
codexRequest: protectedProcedure.input(z27.object({
|
|
6345
|
+
method: z27.string().max(256),
|
|
6346
|
+
params: z27.record(z27.string(), z27.unknown()).default({}),
|
|
6347
|
+
env: z27.record(z27.string().max(256), z27.string().max(5e5)).optional()
|
|
6317
6348
|
})).mutation(async ({ input }) => {
|
|
6318
6349
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6319
6350
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6320
6351
|
return { result };
|
|
6321
6352
|
}),
|
|
6322
6353
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6323
|
-
codexNotifications: protectedProcedure.input(
|
|
6324
|
-
threadId:
|
|
6354
|
+
codexNotifications: protectedProcedure.input(z27.object({
|
|
6355
|
+
threadId: z27.string().max(256).optional()
|
|
6325
6356
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6326
6357
|
await codexAppServerManager.ensureConnected();
|
|
6327
6358
|
const queue = [];
|
|
@@ -6358,13 +6389,13 @@ var aiRouter = router({
|
|
|
6358
6389
|
});
|
|
6359
6390
|
|
|
6360
6391
|
// src/trpc/routers/wiki.ts
|
|
6361
|
-
import { z as
|
|
6392
|
+
import { z as z28 } from "zod";
|
|
6362
6393
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6363
6394
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6364
6395
|
import { dirname as dirname2 } from "path";
|
|
6365
6396
|
import { resolve as resolvePath3, join as join5, relative, sep } from "path";
|
|
6366
|
-
var CWD_SCHEMA2 =
|
|
6367
|
-
var REL_PATH_SCHEMA =
|
|
6397
|
+
var CWD_SCHEMA2 = z28.string().min(1).max(4096);
|
|
6398
|
+
var REL_PATH_SCHEMA = z28.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6368
6399
|
message: "Path must be a relative path without traversal"
|
|
6369
6400
|
});
|
|
6370
6401
|
var MAX_FILES = 500;
|
|
@@ -6384,9 +6415,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6384
6415
|
"target",
|
|
6385
6416
|
"out"
|
|
6386
6417
|
]);
|
|
6387
|
-
var RepoEntrySchema =
|
|
6388
|
-
|
|
6389
|
-
|
|
6418
|
+
var RepoEntrySchema = z28.lazy(() => z28.union([
|
|
6419
|
+
z28.object({ type: z28.literal("file"), name: z28.string(), path: z28.string() }),
|
|
6420
|
+
z28.object({ type: z28.literal("dir"), name: z28.string(), path: z28.string(), children: z28.array(RepoEntrySchema) })
|
|
6390
6421
|
]));
|
|
6391
6422
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6392
6423
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6456,13 +6487,13 @@ async function resolveRoot(cwd) {
|
|
|
6456
6487
|
}
|
|
6457
6488
|
}
|
|
6458
6489
|
var wikiRouter = router({
|
|
6459
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6490
|
+
listRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6460
6491
|
const root = await resolveRoot(input.cwd);
|
|
6461
6492
|
const counter = { n: 0 };
|
|
6462
6493
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6463
6494
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6464
6495
|
}),
|
|
6465
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6496
|
+
readRepoMarkdown: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6466
6497
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6467
6498
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6468
6499
|
}
|
|
@@ -6488,10 +6519,10 @@ var wikiRouter = router({
|
|
|
6488
6519
|
const content = await readFile2(realTarget, "utf-8");
|
|
6489
6520
|
return { path: input.path, content };
|
|
6490
6521
|
}),
|
|
6491
|
-
writeMarkdown: protectedProcedure.input(
|
|
6522
|
+
writeMarkdown: protectedProcedure.input(z28.object({
|
|
6492
6523
|
cwd: CWD_SCHEMA2,
|
|
6493
6524
|
path: REL_PATH_SCHEMA,
|
|
6494
|
-
content:
|
|
6525
|
+
content: z28.string().max(5e6)
|
|
6495
6526
|
})).mutation(async ({ input }) => {
|
|
6496
6527
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6497
6528
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6502,7 +6533,7 @@ var wikiRouter = router({
|
|
|
6502
6533
|
await writeFile6(target, input.content, "utf-8");
|
|
6503
6534
|
return { path: input.path, ok: true };
|
|
6504
6535
|
}),
|
|
6505
|
-
createFile: protectedProcedure.input(
|
|
6536
|
+
createFile: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6506
6537
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6507
6538
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6508
6539
|
}
|
|
@@ -6518,13 +6549,13 @@ var wikiRouter = router({
|
|
|
6518
6549
|
await writeFile6(target, "", "utf-8");
|
|
6519
6550
|
return { path: input.path, ok: true };
|
|
6520
6551
|
}),
|
|
6521
|
-
createDir: protectedProcedure.input(
|
|
6552
|
+
createDir: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6522
6553
|
const root = await resolveRoot(input.cwd);
|
|
6523
6554
|
const target = await resolveSafePath(root, input.path, false);
|
|
6524
6555
|
await mkdir6(target, { recursive: true });
|
|
6525
6556
|
return { path: input.path, ok: true };
|
|
6526
6557
|
}),
|
|
6527
|
-
renamePath: protectedProcedure.input(
|
|
6558
|
+
renamePath: protectedProcedure.input(z28.object({
|
|
6528
6559
|
cwd: CWD_SCHEMA2,
|
|
6529
6560
|
fromPath: REL_PATH_SCHEMA,
|
|
6530
6561
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6542,14 +6573,14 @@ var wikiRouter = router({
|
|
|
6542
6573
|
await rename2(from, to);
|
|
6543
6574
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6544
6575
|
}),
|
|
6545
|
-
ensureRoot: protectedProcedure.input(
|
|
6576
|
+
ensureRoot: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6546
6577
|
const expanded = expandEnvVar(input.cwd);
|
|
6547
6578
|
const abs = resolvePath3(expanded);
|
|
6548
6579
|
await mkdir6(abs, { recursive: true });
|
|
6549
6580
|
const root = await realpath(abs);
|
|
6550
6581
|
return { root, ok: true };
|
|
6551
6582
|
}),
|
|
6552
|
-
deletePath: protectedProcedure.input(
|
|
6583
|
+
deletePath: protectedProcedure.input(z28.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6553
6584
|
const root = await resolveRoot(input.cwd);
|
|
6554
6585
|
const target = await resolveSafePath(root, input.path, true);
|
|
6555
6586
|
if (target === root) {
|