@runeya/runeya 2.0.71 → 2.0.73
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 +208 -160
- package/agent/index.js.map +1 -1
- package/agent-manager-LBV3CVHB.js +7 -0
- package/{chunk-Z3KAXI7V.js → chunk-OTJQEK4D.js} +240 -29
- package/chunk-OTJQEK4D.js.map +1 -0
- package/index.js +3 -2
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/{src-Q3PSCMS7.js → src-MY5W5AYS.js} +828 -633
- package/src-MY5W5AYS.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-369U2Skl.js +13 -0
- package/web/assets/AgentTerminalPage-RHehuR0e.js +1 -0
- package/web/assets/AiChatPage-BbgFeCu5.js +1 -0
- package/web/assets/AppLayout-CvEbrCSS.js +1 -0
- package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
- package/web/assets/AuditPage-BRBcRwff.js +1 -0
- package/web/assets/CloudAccountPage-C9Y4zQYc.js +1 -0
- package/web/assets/CloudAccountPage-DmDrYdSX.js +1 -0
- package/web/assets/CloudMessagingPage-j2dztUz1.js +2 -0
- package/web/assets/DashboardPage-DbgOaKaI.js +1 -0
- package/web/assets/DirectoryPickerDialog-B5a7tO0P.js +1 -0
- package/web/assets/{EditorIcon-JRryeySJ.js → EditorIcon-C32poOg-.js} +2 -2
- package/web/assets/EnvironmentForm-CjnghPBi.js +108 -0
- package/web/assets/EnvironmentFormPage-VkOp77jY.js +1 -0
- package/web/assets/EnvironmentListPage-GkrefCj6.js +1 -0
- package/web/assets/KanbanBoardPage-CCl8dmwn.css +1 -0
- package/web/assets/KanbanBoardPage-CkrXazSk.js +4 -0
- package/web/assets/KanbanListPage-CtC0GWl8.js +1 -0
- package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
- package/web/assets/LaunchProjectPage-Zx3L-5pP.js +1 -0
- package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
- package/web/assets/LaunchServicesPage-Du56bNpD.js +1 -0
- package/web/assets/LogViewer-CusYWOVz.js +3 -0
- package/web/assets/OrgKeyPrompt-BhsICoTI.js +1 -0
- package/web/assets/{ProcessControls-BPQXGKib.js → ProcessControls-CNrbnTpl.js} +1 -1
- package/web/assets/ProcessDetailPage-h8RXTZkW.js +1 -0
- package/web/assets/{ProcessMetrics-D7L708Em.js → ProcessMetrics-B6Zf110f.js} +2 -2
- package/web/assets/ProjectDetailPage-B_fowFne.js +1 -0
- package/web/assets/ProjectListPage-DA9HaZW1.js +1 -0
- package/web/assets/RandomJobTestPage-BlKmN8WR.js +2 -0
- package/web/assets/ScenarioEditorPage-DxmF9C9y.js +14 -0
- package/web/assets/SendToChatDialog-CKDis_oY.js +1 -0
- package/web/assets/ServiceControlsBar-DqWOWB8l.js +1 -0
- package/web/assets/ServiceDetailPage-D4w7i_m0.js +2 -0
- package/web/assets/ServiceFormPage-D9EeSeKX.js +1 -0
- package/web/assets/SettingsPage-1zz5wMpp.js +2063 -0
- package/web/assets/{SettingsPage-CScovMi5.css → SettingsPage-ClUsbLPy.css} +1 -1
- package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
- package/web/assets/UnlockPage-C4b4tv9Z.js +1 -0
- package/web/assets/VariablesTable-BQW0OS3C.js +1 -0
- package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
- package/web/assets/VaultMigrationPage-B24yEz24.js +1 -0
- package/web/assets/VersionBadge-AuIQKahq.js +1 -0
- package/web/assets/WikiPage-YnXchmy7.js +1 -0
- package/web/assets/WikiView-B4FOcZxi.js +1 -0
- package/web/assets/add-scalar-classes-Bb4tLm0z.js +387 -0
- package/web/assets/auth-errors-CtC8HAvD.js +1 -0
- package/web/assets/autocomplete-LUb8fDRi.js +308 -0
- package/web/assets/{basic-shape-diamond.svg-C8K6YjGj.js → basic-shape-diamond.svg-CCzIrujg.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-C9PeXR6S.js → basic-shape-hexagon.svg-DdSh-N2z.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CfBLN6Yj.js → basic-shape-primary-circle-ellipse-round.svg-DsMpzYdr.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-D2QPBP5_.js → basic-shape-primary-square-rectangle.svg-S5aiKynO.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-ClsEFdja.js → basic-shape-shield.svg-06mLN5Kq.js} +1 -1
- package/web/assets/{browser-D7ZckEFz.js → browser-B6kPJYkH.js} +1 -1
- package/web/assets/{browser-CF5_9QqR.js → browser-CvGRE98D.js} +1 -1
- package/web/assets/card-DQ-7UOQt.js +32 -0
- package/web/assets/{checkbox-CfwNXlF_.js → checkbox-CIizqAL5.js} +3 -3
- package/web/assets/{chip-3tOoBrD7.js → chip-CKY-cFPm.js} +2 -2
- package/web/assets/client-Cem5gxc3.js +24 -0
- package/web/assets/cloud-chat.store-JxTqY8hH.js +1 -0
- package/web/assets/cloud-session-BsgS9t9u.js +1 -0
- package/web/assets/column-C1iIQeFS.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-9f4DSNLj.js → computer-device-desktop-monitor.svg-pZKLXVEO.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-BYoXiEOE.js → computer-device-desktop.svg-CPuJoG2N.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-DR1sEMdL.js → computer-device-laptop.svg-B2lqbpvX.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-B-AOaBuq.js → computer-device-mobile-phone-android-samsung-back.svg-C91mPbw_.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Dw4z_H5H.js → computer-device-mobile-phone-android-samsung.svg-CgjjMhRB.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BtqMb2Wo.js → computer-device-mobile-phone-iphone-x-back.svg-DdpW-odT.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-eYEM_VXA.js → computer-device-mobile-phone-iphone-x.svg-B_qWFdEx.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-jLD41nvm.js → computer-device-mobile-tablet-touch.svg-BzehkLNH.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-D_7_M1GK.js → computer-device-mobile-tablet.svg-rkDIg0TG.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-B_527QGY.js → computer-device-network-ethernet-cat6.svg-B-d_wrR_.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-ClZIaUOH.js → computer-device-network-lan-www.svg-TIELALfm.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-DC4OCJY0.js → computer-device-network-wifi-connection.svg-DbXW3PhA.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BWPpobCc.js → computer-device-network-wifi-router.svg-D_35yOXc.js} +1 -1
- package/web/assets/{cssMode-CXUrkdrQ.js → cssMode-B7e_eNPV.js} +1 -1
- package/web/assets/{divider-BrO5nkpd.js → divider-BHKktSGp.js} +2 -2
- package/web/assets/{docx-preview-tE714WSD.js → docx-preview-DlxCg_6l.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-o8D0ASmr.js → ecology-science-erlenmeyer-flask.svg-Dl6fsl4J.js} +1 -1
- package/web/assets/{fieldset-LX5cdTvN.js → fieldset-De5JS2HC.js} +2 -2
- package/web/assets/{freemarker2-DJ82s0fP.js → freemarker2-BZ1pmGPV.js} +1 -1
- package/web/assets/{handlebars-BXFlY2Lu.js → handlebars-DQnFd9h7.js} +1 -1
- package/web/assets/{html-CqDVypOC.js → html-C0efjIn9.js} +1 -1
- package/web/assets/{htmlMode-DrHxdTQP.js → htmlMode-ChFMbKcf.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-BDPMOynq.js → image-flash-lightning.svg-B7e5E2Qw.js} +1 -1
- package/web/assets/{image-picture-flower.svg-D-AJaery.js → image-picture-flower.svg-Cw1CZ_Iv.js} +1 -1
- package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
- package/web/assets/{index-a6DAapTb.js → index-nY5cynKj.js} +238 -238
- package/web/assets/{interface-alert-exclamation-diamond.svg-CV7M0IVQ.js → interface-alert-exclamation-diamond.svg-BSUXkUin.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B8NapiB7.js → interface-alert-exclamation-triangle-warning.svg-BYqq_OZy.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-eQIFULjG.js → interface-alert-information-circle.svg-BhCupwNF.js} +1 -1
- package/web/assets/{interface-award-crown.svg-D-4fclUD.js → interface-award-crown.svg-BSbmsgu7.js} +1 -1
- package/web/assets/{interface-bookmark.svg-XdbYDqqk.js → interface-bookmark-tag.svg-C9Tj2VKg.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-Jy6EOdau.js → interface-bookmark.svg-DImT79em.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BIoXVZrz.js → interface-calendar-date-one.svg-emGvRYfy.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-DHwJbBvQ.js → interface-content-book-open-pages.svg-DZvD8n9A.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-47msUBN_.js → interface-content-book-page.svg--RPY0ONx.js} +1 -1
- package/web/assets/{interface-content-file.svg-DXw9W8QM.js → interface-content-file.svg-BhkPpAIG.js} +1 -1
- package/web/assets/interface-content-folder.svg-DNkHJfTi.js +1 -0
- package/web/assets/{interface-content-folder.svg-BmK_IJv8.js → interface-content-folder.svg-_Qz96t7R.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-CQ1rQN0L.js → interface-copy-clipboard.svg-DBVvMdKB.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-C3aTaTh_.js → interface-edit-attachment.svg-Bq9IjtmQ.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-B2Ue_tgs.js → interface-edit-binocular.svg-BFUljAkg.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-DDKse-Wy.js → interface-edit-magic-wand.svg-DSWYEf6V.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-C2ABby1f.js → interface-edit-tool-paint-roller.svg-iMYCD-Af.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-CNjYbknQ.js → interface-edit-tool-pencil.svg-D7jUKckt.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DWqSHfIa.js → interface-favorite-award.svg-CLCdfKlW.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-CNUsr98g.js → interface-favorite-flag.svg-CMNediEx.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-3Eb366FO.js → interface-favorite-heart.svg-9AfGidiX.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CVJ3aq1n.js → interface-favorite-star.svg-DD76FDcq.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BfXhPBbs.js → interface-favorite-stars-sparkles.svg-DZmc8XpZ.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-DzsqKrYq.js → interface-hierarchy-flowchart.svg-DbdQ6BrN.js} +1 -1
- package/web/assets/{interface-home-house.svg-BnXbuyZn.js → interface-home-house.svg-BIWYFqhm.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BsmSmyP5.js → interface-hyperlink.svg-CknF1YxB.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-BywVQRo9.js → interface-lighting-brightness.svg-B3Svsmp0.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-BLPORc_h.js → interface-lock-closed.svg-CTmwhMsF.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-CaYlbVmU.js → interface-lock-open-unlock.svg-BSC0HJE5.js} +1 -1
- package/web/assets/{interface-login-key.svg-D5F_9MJ0.js → interface-login-key.svg-CmPadurO.js} +1 -1
- package/web/assets/{interface-search.svg-CF1D8GIV.js → interface-search.svg-BbWqGsiC.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-D4AOKG2g.js → interface-setting-cog.svg-D336jNxR.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BIfr2_va.js → interface-share-megaphone-bullhorn.svg-BEPIq-yB.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-NDd3dv1t.js → interface-share-rocket.svg-bi0Fp7B7.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-CVDJbmT-.js → interface-share-satellite.svg-DZ-FBSOP.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-D0ZLJNO2.js → interface-share-space-ship.svg-CL8kfexn.js} +1 -1
- package/web/assets/{interface-share.svg-WpwbpOes.js → interface-share.svg-B4NzC8MW.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DnfzUw_B.js → interface-signal-square.svg-Do9HNC1g.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-BhxciNvX.js → interface-time-clock-circle.svg-BiwVEBFE.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-DBzSaSHQ.js → interface-time-hour-glass.svg-Bj4400VR.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-BULh1giq.js → interface-users-multiple.svg-wf0xHt7S.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-D377V2os.js → interface-weather-moon.svg-CHq44y1K.js} +1 -1
- package/web/assets/{javascript-BTXoJ3Qy.js → javascript-C5gAX9Ho.js} +1 -1
- package/web/assets/{jsonMode-D4a3Khim.js → jsonMode-Cah11eZC.js} +2 -2
- package/web/assets/{liquid-DfO0R4Mk.js → liquid-CS5lfWiD.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BvPWuQFt.js → lspLanguageFeatures-DrQCZerv.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-SK3IJ6QN.js → mail-chat-bubble-square.svg-Bn4lLCAH.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-CJFA7B2E.js → mail-send-email-paper-airplane.svg-0dbuhy9s.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-eO_-QNyE.js → mail-send-envelope.svg-D7MrBGJp.js} +1 -1
- package/web/assets/{mdx-G_vwFSSe.js → mdx-B4jzso3k.js} +1 -1
- package/web/assets/{message-CxPw04rG.js → message-DnHiYCym.js} +2 -2
- package/web/assets/{minus-Dp5ez1-1.js → minus-BbLiFqfk.js} +2 -2
- package/web/assets/modal-BVB2xBJ_.js +1 -0
- package/web/assets/modal-dKcYqKht.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-EutWthy8.js → money-cashier-receipt.svg-C3G7AK7q.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-MnLj-orw.js → money-currency-dollar-pay.svg-DCj0-yon.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-CVCZ3TyJ.js → money-graph-arrow-increase.svg-DxdQlcuf.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-DiUmCuhj.js → money-graph-bar-chart-increase.svg-Cm-WIBNr.js} +1 -1
- package/web/assets/multiselect-C8IBJ6lu.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-ByaLs72Y.js → nature-ecology-leaf.svg-BDz3LTpd.js} +1 -1
- package/web/assets/{password-CxtOqagM.js → password-DEuFV3TX.js} +4 -4
- package/web/assets/{phone-telephone.svg-BKz6Jkwn.js → phone-telephone.svg-DRL7_jEB.js} +1 -1
- package/web/assets/{plus-BPT_7GGk.js → plus-CdxO2Yq9.js} +6 -6
- package/web/assets/process.store-CauAk_PY.js +1 -0
- package/web/assets/{programming-bug.svg-BwSc8f0s.js → programming-bug.svg-BDftmfZl.js} +1 -1
- package/web/assets/{programming-cloud.svg-CEIulNEp.js → programming-cloud.svg-i-GCH3f4.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-Bc_F3NH0.js → programming-computer-database-server.svg-CC2MM4RA.js} +1 -1
- package/web/assets/{programming-computer-database.svg-AYLkzJJE.js → programming-computer-database.svg-CwD3IE7b.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-DLpzPxNB.js → programming-module-four-layout.svg-L5WQW7eZ.js} +1 -1
- package/web/assets/{programming-module-three.svg-CcuZn8dz.js → programming-module-three.svg-BqKxUh2a.js} +1 -1
- package/web/assets/{programming-module.svg-BjbGpQeu.js → programming-module.svg-B5HGxk_5.js} +1 -1
- package/web/assets/{programming-script-code.svg-poyfodgC.js → programming-script-code.svg-C6b1t67U.js} +1 -1
- package/web/assets/{python-DpMMlrWM.js → python-PWdcATjU.js} +1 -1
- package/web/assets/{razor-Ba_mg6U5.js → razor-D2OFUF9W.js} +1 -1
- package/web/assets/router-WC51nlcm.js +1 -0
- package/web/assets/settings-scope-CIL2r-x6.js +1 -0
- package/web/assets/settings.store-Cx63DJSu.js +1 -0
- package/web/assets/{shopping-cart.svg-BX2KYVCw.js → shopping-cart.svg-C4eUOPuW.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-BOl2vYLg.js → shopping-gift-present.svg-DWR1Ue0b.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-gxfbOgnM.js → shopping-shipping-box-parcel-package.svg-vIUMJCzM.js} +1 -1
- package/web/assets/src-CG6NRFnq.js +1 -0
- package/web/assets/{src-D0LXRijj.js → src-D3B9QT3f.js} +34 -34
- package/web/assets/tabpanel-Dt8wxAUn.js +150 -0
- package/web/assets/{tag-new-circle.svg-CTRMBJyc.js → tag-new-circle.svg-CrLYLp-g.js} +1 -1
- package/web/assets/{toggleswitch-DcDrXRKn.js → toggleswitch-DXNKoD3W.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-BPp4IapC.js → travel-map-earth-globe.svg-CbJkEfGx.js} +1 -1
- package/web/assets/trpc-BTkvhuSo.js +1 -0
- package/web/assets/{tsMode-HfLOT-e5.js → tsMode-BWnOhIDG.js} +6 -6
- package/web/assets/{typescript-DJAEsDnw.js → typescript-Ca6d0Xpt.js} +1 -1
- package/web/assets/useAiChatDrawer-DbiVGX1A.js +1 -0
- package/web/assets/useCloudOrg-CYZgY69j.css +1 -0
- package/web/assets/useCloudOrg-JI0t8ZfS.js +97 -0
- package/web/assets/{useProjectCatalog-C95cDPIr.js → useProjectCatalog-T9HoUKsV.js} +1 -1
- package/web/assets/{xml-1frg7aol.js → xml-DJnU4yP8.js} +1 -1
- package/web/assets/{yaml-DXzDcMOS.js → yaml-DJC6BhFp.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-UUSQK6S2.js +0 -7
- package/chunk-Z3KAXI7V.js.map +0 -1
- package/src-Q3PSCMS7.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-Cin_Rbay.js +0 -13
- package/web/assets/AgentTerminalPage-YgCQj_Mj.js +0 -1
- package/web/assets/AiChatPage-cIE_ZdF6.js +0 -1
- package/web/assets/AppLayout-dYfSESzv.js +0 -1
- package/web/assets/AuditPage-Bw3-G8ZM.js +0 -1
- package/web/assets/CloudAccountPage-CA4dMsIm.js +0 -1
- package/web/assets/CloudAccountPage-DjljrEI_.js +0 -1
- package/web/assets/CloudMessagingPage-CbfH2vPo.js +0 -2
- package/web/assets/DashboardPage-Cn3bUyhR.js +0 -1
- package/web/assets/DirectoryPickerDialog-BmsAi5gR.js +0 -1
- package/web/assets/EnvironmentForm-BfF9IFRB.js +0 -108
- package/web/assets/EnvironmentFormPage-CebWv3I_.js +0 -1
- package/web/assets/EnvironmentListPage-DDJGOHvR.js +0 -1
- package/web/assets/KanbanBoardPage-BMXyvHOl.js +0 -4
- package/web/assets/KanbanBoardPage-JjjS4BfO.css +0 -1
- package/web/assets/KanbanListPage-YMm_7vzg.js +0 -1
- package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
- package/web/assets/LaunchProjectPage-Da21oFjw.js +0 -1
- package/web/assets/LaunchServicesPage-8YJT1stQ.js +0 -1
- package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
- package/web/assets/LogViewer-BYNRWqlP.js +0 -3
- package/web/assets/OrgKeyPrompt-De8D0zzy.js +0 -1
- package/web/assets/ProcessDetailPage-CVwMbU6x.js +0 -1
- package/web/assets/ProjectDetailPage-BjBN3hnN.js +0 -1
- package/web/assets/ProjectListPage-BRXKT6op.js +0 -1
- package/web/assets/RandomJobTestPage-dhDNam5v.js +0 -2
- package/web/assets/ScenarioEditorPage-yOp4ZF14.js +0 -14
- package/web/assets/SendToChatDialog-o4y1Q-OD.js +0 -1
- package/web/assets/ServiceControlsBar-BH1ZEFkK.js +0 -1
- package/web/assets/ServiceDetailPage-CFb0blqq.js +0 -2
- package/web/assets/ServiceFormPage-DzFQ_M1-.js +0 -1
- package/web/assets/SettingsPage-Bcs3tnUy.js +0 -2063
- package/web/assets/UnlockPage-BAxKs_K9.js +0 -1
- package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
- package/web/assets/VariablesTable-CSuAPeF-.js +0 -1
- package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
- package/web/assets/VaultMigrationPage-BJX9kunL.js +0 -1
- package/web/assets/VersionBadge-B9Wvyvf6.js +0 -1
- package/web/assets/WikiPage-CBZFOPL_.js +0 -1
- package/web/assets/WikiView-DxPrGyFy.js +0 -1
- package/web/assets/add-scalar-classes-vtTXFTZ6.js +0 -387
- package/web/assets/auth-errors-DpUvxKid.js +0 -1
- package/web/assets/autocomplete-BakcEoGP.js +0 -308
- package/web/assets/card-DcpoBJHQ.js +0 -32
- package/web/assets/client-CKBKBNVm.js +0 -24
- package/web/assets/cloud-chat.store-Ci1DBP5j.js +0 -1
- package/web/assets/cloud-session-CzYQ65k8.js +0 -1
- package/web/assets/column-CVuKYYbZ.js +0 -907
- package/web/assets/interface-content-folder.svg-BikaY449.js +0 -1
- package/web/assets/modal-CGT4d1lM.js +0 -5
- package/web/assets/modal-D_N6NaGL.js +0 -1
- package/web/assets/multiselect-C6uayHqj.js +0 -251
- package/web/assets/process.store-CMxuFjFg.js +0 -1
- package/web/assets/router-QZ5Z8Lh7.js +0 -1
- package/web/assets/settings-scope-D7umae8c.js +0 -1
- package/web/assets/settings.store-Dte8TdJb.js +0 -1
- package/web/assets/src-DWvNj-EG.js +0 -1
- package/web/assets/tabpanel-Bkt-f7d6.js +0 -150
- package/web/assets/trpc-Dtgb4BMw.js +0 -1
- package/web/assets/useAiChatDrawer-fzyQ-fyM.js +0 -1
- package/web/assets/useCloudOrg-BdpqnN19.css +0 -1
- package/web/assets/useCloudOrg-Bg7-icbW.js +0 -97
- /package/{agent-manager-UUSQK6S2.js.map → agent-manager-LBV3CVHB.js.map} +0 -0
- /package/web/assets/{uuid-CXjA27vZ.js → uuid-FpfcaBnR.js} +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 z23 } from "zod";
|
|
64
64
|
import { TRPCError as TRPCError2 } from "@trpc/server";
|
|
65
65
|
|
|
66
66
|
// src/services/process-manager.ts
|
|
@@ -1721,6 +1721,54 @@ var KanbanCardRefSchema = z19.object({
|
|
|
1721
1721
|
commentCount: z19.number().int().nonnegative().default(0)
|
|
1722
1722
|
});
|
|
1723
1723
|
|
|
1724
|
+
// ../../packages/shared/src/schemas/cloud-api-key.schema.ts
|
|
1725
|
+
import { z as z20 } from "zod";
|
|
1726
|
+
var CloudApiScopeSchema = z20.enum([
|
|
1727
|
+
"kanban:read",
|
|
1728
|
+
"kanban:write",
|
|
1729
|
+
"kanban:comment",
|
|
1730
|
+
"kanban:delete"
|
|
1731
|
+
]);
|
|
1732
|
+
var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
|
|
1733
|
+
var CloudApiKeySchema = z20.object({
|
|
1734
|
+
id: z20.string().max(128),
|
|
1735
|
+
organizationId: z20.string().max(128),
|
|
1736
|
+
name: z20.string().min(1).max(200),
|
|
1737
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1738
|
+
/**
|
|
1739
|
+
* Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
|
|
1740
|
+
* l'organisation ».
|
|
1741
|
+
*
|
|
1742
|
+
* `null` et `[]` ne sont pas la même chose : la liste vide n'ouvre rien, et
|
|
1743
|
+
* c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
|
|
1744
|
+
* nommait plus que lui.
|
|
1745
|
+
*/
|
|
1746
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable(),
|
|
1747
|
+
createdAt: z20.string().max(64),
|
|
1748
|
+
/** Dernier usage constaté, pour reconnaître une clé oubliée. */
|
|
1749
|
+
lastUsedAt: z20.string().max(64).nullable(),
|
|
1750
|
+
/** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
|
|
1751
|
+
createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
|
|
1752
|
+
/** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
|
|
1753
|
+
keyPreview: z20.string().max(8)
|
|
1754
|
+
});
|
|
1755
|
+
var CreatedCloudApiKeySchema = z20.object({
|
|
1756
|
+
key: CloudApiKeySchema,
|
|
1757
|
+
secret: CloudApiKeySecretSchema
|
|
1758
|
+
});
|
|
1759
|
+
var CreateCloudApiKeyInput = z20.object({
|
|
1760
|
+
organizationId: z20.string().min(1).max(128),
|
|
1761
|
+
name: z20.string().min(1).max(200),
|
|
1762
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1763
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
|
|
1764
|
+
});
|
|
1765
|
+
var UpdateCloudApiKeyInput = z20.object({
|
|
1766
|
+
id: z20.string().min(1).max(128),
|
|
1767
|
+
name: z20.string().min(1).max(200).optional(),
|
|
1768
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
|
|
1769
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1770
|
+
});
|
|
1771
|
+
|
|
1724
1772
|
// ../../packages/shared/src/utils/crypto.ts
|
|
1725
1773
|
import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
|
|
1726
1774
|
|
|
@@ -2897,7 +2945,7 @@ import { execa as execa3 } from "execa";
|
|
|
2897
2945
|
import { homedir as homedir4 } from "os";
|
|
2898
2946
|
|
|
2899
2947
|
// src/trpc/routers/config.ts
|
|
2900
|
-
import { z as
|
|
2948
|
+
import { z as z21 } from "zod";
|
|
2901
2949
|
|
|
2902
2950
|
// src/services/traefik-manager.ts
|
|
2903
2951
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3274,13 +3322,13 @@ function resolvePassthroughEnv() {
|
|
|
3274
3322
|
return result;
|
|
3275
3323
|
}
|
|
3276
3324
|
var configRouter = router({
|
|
3277
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3278
|
-
names:
|
|
3279
|
-
|
|
3325
|
+
setPassthroughEnv: protectedProcedure.input(z21.object({
|
|
3326
|
+
names: z21.array(
|
|
3327
|
+
z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3280
3328
|
).max(100),
|
|
3281
|
-
values:
|
|
3282
|
-
|
|
3283
|
-
|
|
3329
|
+
values: z21.record(
|
|
3330
|
+
z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3331
|
+
z21.string().max(32768)
|
|
3284
3332
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3285
3333
|
})).mutation(({ input }) => {
|
|
3286
3334
|
passthroughEnvNames = input.names;
|
|
@@ -3317,7 +3365,7 @@ var configRouter = router({
|
|
|
3317
3365
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3318
3366
|
return traefikManager.getFileTree();
|
|
3319
3367
|
}),
|
|
3320
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3368
|
+
getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3321
3369
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3322
3370
|
return { logs };
|
|
3323
3371
|
})
|
|
@@ -3509,17 +3557,17 @@ var healthChecker = new HealthChecker();
|
|
|
3509
3557
|
import killPort from "kill-port";
|
|
3510
3558
|
|
|
3511
3559
|
// src/config/env.ts
|
|
3512
|
-
import { z as
|
|
3513
|
-
var EnvSchema =
|
|
3514
|
-
RUNEYA_AGENT_PORT:
|
|
3515
|
-
RUNEYA_AGENT_HOST:
|
|
3516
|
-
PASSPHRASE_OVERRIDE:
|
|
3517
|
-
AGENT_ID:
|
|
3560
|
+
import { z as z22 } from "zod";
|
|
3561
|
+
var EnvSchema = z22.object({
|
|
3562
|
+
RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
|
|
3563
|
+
RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
|
|
3564
|
+
PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3565
|
+
AGENT_ID: z22.string().optional(),
|
|
3518
3566
|
// Set by spawner or manually for remote agents
|
|
3519
|
-
LOG_BUFFER_SIZE:
|
|
3520
|
-
METRICS_INTERVAL:
|
|
3521
|
-
GRACE_PERIOD:
|
|
3522
|
-
HEALTH_WS_INTERVAL:
|
|
3567
|
+
LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3568
|
+
METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3569
|
+
GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3570
|
+
HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3523
3571
|
});
|
|
3524
3572
|
var env = EnvSchema.parse(process.env);
|
|
3525
3573
|
|
|
@@ -4294,7 +4342,7 @@ var processRouter = router({
|
|
|
4294
4342
|
return processManager.listStatuses();
|
|
4295
4343
|
}),
|
|
4296
4344
|
/** Get a single process */
|
|
4297
|
-
get: protectedProcedure.input(
|
|
4345
|
+
get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
|
|
4298
4346
|
const status = processManager.getStatus(input.id);
|
|
4299
4347
|
if (!status) {
|
|
4300
4348
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4307,78 +4355,78 @@ var processRouter = router({
|
|
|
4307
4355
|
return { id };
|
|
4308
4356
|
}),
|
|
4309
4357
|
/** Undeploy: stop + remove */
|
|
4310
|
-
undeploy: protectedProcedure.input(
|
|
4358
|
+
undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4311
4359
|
await processManager.undeploy(input.id);
|
|
4312
4360
|
return { success: true };
|
|
4313
4361
|
}),
|
|
4314
4362
|
/** Update the service config for a deployed process */
|
|
4315
|
-
updateConfig: protectedProcedure.input(
|
|
4363
|
+
updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4316
4364
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4317
4365
|
return { success: true };
|
|
4318
4366
|
}),
|
|
4319
4367
|
/** Start a deployed process */
|
|
4320
|
-
start: protectedProcedure.input(
|
|
4368
|
+
start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4321
4369
|
console.log(`[agent] start service=${input.id}`);
|
|
4322
4370
|
await processManager.start(input.id);
|
|
4323
4371
|
return processManager.getStatus(input.id);
|
|
4324
4372
|
}),
|
|
4325
4373
|
/** Stop a running process */
|
|
4326
|
-
stop: protectedProcedure.input(
|
|
4374
|
+
stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4327
4375
|
console.log(`[agent] stop service=${input.id}`);
|
|
4328
4376
|
await processManager.stop(input.id);
|
|
4329
4377
|
return processManager.getStatus(input.id);
|
|
4330
4378
|
}),
|
|
4331
4379
|
/** Restart a process */
|
|
4332
|
-
restart: protectedProcedure.input(
|
|
4380
|
+
restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4333
4381
|
console.log(`[agent] restart service=${input.id}`);
|
|
4334
4382
|
await processManager.restart(input.id);
|
|
4335
4383
|
return processManager.getStatus(input.id);
|
|
4336
4384
|
}),
|
|
4337
4385
|
/** Get buffered logs for a process */
|
|
4338
|
-
logs: protectedProcedure.input(
|
|
4386
|
+
logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
|
|
4339
4387
|
const logs = processManager.getLogs(input.id);
|
|
4340
4388
|
return logs;
|
|
4341
4389
|
}),
|
|
4342
4390
|
/** Clear buffered logs for a process */
|
|
4343
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4391
|
+
clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
|
|
4344
4392
|
processManager.clearLogBuffer(input.id);
|
|
4345
4393
|
return { success: true };
|
|
4346
4394
|
}),
|
|
4347
4395
|
/** Execute a shortcut command and stream output into the process log */
|
|
4348
|
-
executeShortcut: protectedProcedure.input(
|
|
4396
|
+
executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4349
4397
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4350
4398
|
return result;
|
|
4351
4399
|
}),
|
|
4352
4400
|
/** Cancel a running shortcut command */
|
|
4353
|
-
cancelShortcut: protectedProcedure.input(
|
|
4401
|
+
cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
|
|
4354
4402
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4355
4403
|
return { success: true };
|
|
4356
4404
|
}),
|
|
4357
4405
|
/** Cancel a running ad-hoc command */
|
|
4358
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4406
|
+
cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
|
|
4359
4407
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4360
4408
|
return { success: true };
|
|
4361
4409
|
}),
|
|
4362
4410
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4363
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4364
|
-
id:
|
|
4365
|
-
command:
|
|
4366
|
-
cwd:
|
|
4367
|
-
commandId:
|
|
4411
|
+
executeAdHocCommand: protectedProcedure.input(z23.object({
|
|
4412
|
+
id: z23.string().max(128),
|
|
4413
|
+
command: z23.string().min(1).max(4096),
|
|
4414
|
+
cwd: z23.string().max(4096).optional(),
|
|
4415
|
+
commandId: z23.string().max(128).optional()
|
|
4368
4416
|
})).mutation(async ({ input }) => {
|
|
4369
4417
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4370
4418
|
return result;
|
|
4371
4419
|
}),
|
|
4372
4420
|
/** List active log source types for a process */
|
|
4373
|
-
logSources: protectedProcedure.input(
|
|
4421
|
+
logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
|
|
4374
4422
|
return processManager.getLogSourceTypes(input.processId);
|
|
4375
4423
|
}),
|
|
4376
4424
|
/** Get current metrics for a process */
|
|
4377
|
-
metrics: protectedProcedure.input(
|
|
4425
|
+
metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
|
|
4378
4426
|
return processManager.getMetrics(input.id);
|
|
4379
4427
|
}),
|
|
4380
4428
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4381
|
-
onLog: protectedProcedure.input(
|
|
4429
|
+
onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4382
4430
|
const queue = [];
|
|
4383
4431
|
let resolve2 = null;
|
|
4384
4432
|
const handler = (batch) => {
|
|
@@ -4407,7 +4455,7 @@ var processRouter = router({
|
|
|
4407
4455
|
}
|
|
4408
4456
|
}),
|
|
4409
4457
|
/** Subscribe to real-time status changes */
|
|
4410
|
-
onStatus: protectedProcedure.input(
|
|
4458
|
+
onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4411
4459
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4412
4460
|
const queue = [];
|
|
4413
4461
|
let resolve2 = null;
|
|
@@ -4439,7 +4487,7 @@ var processRouter = router({
|
|
|
4439
4487
|
}
|
|
4440
4488
|
}),
|
|
4441
4489
|
/** Subscribe to real-time health status changes */
|
|
4442
|
-
onHealth: protectedProcedure.input(
|
|
4490
|
+
onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4443
4491
|
const queue = [];
|
|
4444
4492
|
let resolve2 = null;
|
|
4445
4493
|
const handler = (healthData) => {
|
|
@@ -4469,7 +4517,7 @@ var processRouter = router({
|
|
|
4469
4517
|
}
|
|
4470
4518
|
}),
|
|
4471
4519
|
/** Subscribe to real-time metrics */
|
|
4472
|
-
onMetrics: protectedProcedure.input(
|
|
4520
|
+
onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4473
4521
|
const queue = [];
|
|
4474
4522
|
let resolve2 = null;
|
|
4475
4523
|
const handler = (metrics) => {
|
|
@@ -4543,7 +4591,7 @@ var healthRouter = router({
|
|
|
4543
4591
|
});
|
|
4544
4592
|
|
|
4545
4593
|
// src/trpc/routers/terminal.ts
|
|
4546
|
-
import { z as
|
|
4594
|
+
import { z as z24 } from "zod";
|
|
4547
4595
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
4548
4596
|
|
|
4549
4597
|
// src/services/terminal-manager.ts
|
|
@@ -4636,11 +4684,11 @@ var terminalManager = new TerminalManager();
|
|
|
4636
4684
|
// src/trpc/routers/terminal.ts
|
|
4637
4685
|
var terminalRouter = router({
|
|
4638
4686
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
4639
|
-
create: protectedProcedure.input(
|
|
4640
|
-
cwd:
|
|
4641
|
-
cols:
|
|
4642
|
-
rows:
|
|
4643
|
-
title:
|
|
4687
|
+
create: protectedProcedure.input(z24.object({
|
|
4688
|
+
cwd: z24.string().max(512).optional(),
|
|
4689
|
+
cols: z24.number().int().min(1).max(512).optional(),
|
|
4690
|
+
rows: z24.number().int().min(1).max(256).optional(),
|
|
4691
|
+
title: z24.string().max(128).optional()
|
|
4644
4692
|
})).mutation(({ input }) => {
|
|
4645
4693
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
4646
4694
|
return { sessionId };
|
|
@@ -4648,34 +4696,34 @@ var terminalRouter = router({
|
|
|
4648
4696
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
4649
4697
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
4650
4698
|
/** Renommer un onglet */
|
|
4651
|
-
rename: protectedProcedure.input(
|
|
4699
|
+
rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
|
|
4652
4700
|
terminalManager.rename(input.sessionId, input.title);
|
|
4653
4701
|
return { ok: true };
|
|
4654
4702
|
}),
|
|
4655
4703
|
/** Write data (keystrokes) to a PTY session */
|
|
4656
|
-
write: protectedProcedure.input(
|
|
4704
|
+
write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
|
|
4657
4705
|
terminalManager.write(input.sessionId, input.data);
|
|
4658
4706
|
return { ok: true };
|
|
4659
4707
|
}),
|
|
4660
4708
|
/** Resize a PTY session */
|
|
4661
|
-
resize: protectedProcedure.input(
|
|
4662
|
-
sessionId:
|
|
4663
|
-
cols:
|
|
4664
|
-
rows:
|
|
4709
|
+
resize: protectedProcedure.input(z24.object({
|
|
4710
|
+
sessionId: z24.string().max(128),
|
|
4711
|
+
cols: z24.number().int().min(1).max(512),
|
|
4712
|
+
rows: z24.number().int().min(1).max(256)
|
|
4665
4713
|
})).mutation(({ input }) => {
|
|
4666
4714
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
4667
4715
|
return { ok: true };
|
|
4668
4716
|
}),
|
|
4669
4717
|
/** Destroy a PTY session */
|
|
4670
|
-
destroy: protectedProcedure.input(
|
|
4718
|
+
destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
|
|
4671
4719
|
terminalManager.destroy(input.sessionId);
|
|
4672
4720
|
return { ok: true };
|
|
4673
4721
|
}),
|
|
4674
4722
|
/** Stream PTY output for a session (async generator subscription) */
|
|
4675
|
-
onData: protectedProcedure.input(
|
|
4676
|
-
sessionId:
|
|
4723
|
+
onData: protectedProcedure.input(z24.object({
|
|
4724
|
+
sessionId: z24.string().max(128),
|
|
4677
4725
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
4678
|
-
replay:
|
|
4726
|
+
replay: z24.boolean().optional()
|
|
4679
4727
|
})).subscription(async function* ({ input }) {
|
|
4680
4728
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
4681
4729
|
if (!emitter) {
|
|
@@ -4720,7 +4768,7 @@ var terminalRouter = router({
|
|
|
4720
4768
|
});
|
|
4721
4769
|
|
|
4722
4770
|
// src/trpc/routers/git.ts
|
|
4723
|
-
import { z as
|
|
4771
|
+
import { z as z25 } from "zod";
|
|
4724
4772
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
4725
4773
|
import { execFile as execFile4, spawn as spawn3 } from "child_process";
|
|
4726
4774
|
import { promisify as promisify2 } from "util";
|
|
@@ -4730,12 +4778,12 @@ import { join as join4, resolve as resolvePath } from "path";
|
|
|
4730
4778
|
var execFileAsync2 = promisify2(execFile4);
|
|
4731
4779
|
var GIT_TIMEOUT = 15e3;
|
|
4732
4780
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
4733
|
-
var CWD_SCHEMA =
|
|
4734
|
-
var SAFE_PATH_SCHEMA =
|
|
4781
|
+
var CWD_SCHEMA = z25.string().min(1).max(4096);
|
|
4782
|
+
var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
4735
4783
|
message: "Path must be relative and not traverse up"
|
|
4736
4784
|
});
|
|
4737
|
-
var REMOTE_SCHEMA =
|
|
4738
|
-
var BRANCH_SCHEMA =
|
|
4785
|
+
var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
4786
|
+
var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
4739
4787
|
function gitSafeEnv() {
|
|
4740
4788
|
const env2 = {
|
|
4741
4789
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -4853,10 +4901,10 @@ async function getGitStatus(cwd) {
|
|
|
4853
4901
|
}
|
|
4854
4902
|
var gitRouter = router({
|
|
4855
4903
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
4856
|
-
checkCwd: protectedProcedure.input(
|
|
4904
|
+
checkCwd: protectedProcedure.input(z25.object({
|
|
4857
4905
|
cwd: CWD_SCHEMA,
|
|
4858
|
-
remote:
|
|
4859
|
-
checkReachability:
|
|
4906
|
+
remote: z25.string().max(2048).optional(),
|
|
4907
|
+
checkReachability: z25.boolean().optional()
|
|
4860
4908
|
})).query(async ({ input }) => {
|
|
4861
4909
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
4862
4910
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -4877,8 +4925,8 @@ var gitRouter = router({
|
|
|
4877
4925
|
return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
4878
4926
|
}),
|
|
4879
4927
|
/** Clone a git repository into a target directory */
|
|
4880
|
-
clone: protectedProcedure.input(
|
|
4881
|
-
remote:
|
|
4928
|
+
clone: protectedProcedure.input(z25.object({
|
|
4929
|
+
remote: z25.string().min(1).max(2048),
|
|
4882
4930
|
cwd: CWD_SCHEMA
|
|
4883
4931
|
})).mutation(async ({ input }) => {
|
|
4884
4932
|
const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
|
|
@@ -4899,13 +4947,13 @@ var gitRouter = router({
|
|
|
4899
4947
|
return { success: true };
|
|
4900
4948
|
}),
|
|
4901
4949
|
/** Get full git status */
|
|
4902
|
-
status: protectedProcedure.input(
|
|
4950
|
+
status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4903
4951
|
const cwd = assertCwdExists(input.cwd);
|
|
4904
4952
|
await assertGitRepo(cwd);
|
|
4905
4953
|
return getGitStatus(cwd);
|
|
4906
4954
|
}),
|
|
4907
4955
|
/** Watch .git/ for changes and stream updated status */
|
|
4908
|
-
onStatusChange: protectedProcedure.input(
|
|
4956
|
+
onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
4909
4957
|
const cwd = assertCwdExists(input.cwd);
|
|
4910
4958
|
await assertGitRepo(cwd);
|
|
4911
4959
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -4956,7 +5004,7 @@ var gitRouter = router({
|
|
|
4956
5004
|
}
|
|
4957
5005
|
}),
|
|
4958
5006
|
/** Get commit log */
|
|
4959
|
-
log: protectedProcedure.input(
|
|
5007
|
+
log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
4960
5008
|
const cwd = assertCwdExists(input.cwd);
|
|
4961
5009
|
await assertGitRepo(cwd);
|
|
4962
5010
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -4967,7 +5015,7 @@ var gitRouter = router({
|
|
|
4967
5015
|
});
|
|
4968
5016
|
}),
|
|
4969
5017
|
/** List local and remote branches */
|
|
4970
|
-
branches: protectedProcedure.input(
|
|
5018
|
+
branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4971
5019
|
const cwd = assertCwdExists(input.cwd);
|
|
4972
5020
|
await assertGitRepo(cwd);
|
|
4973
5021
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -4979,7 +5027,7 @@ var gitRouter = router({
|
|
|
4979
5027
|
return { current, branches };
|
|
4980
5028
|
}),
|
|
4981
5029
|
/** Checkout a branch */
|
|
4982
|
-
checkout: protectedProcedure.input(
|
|
5030
|
+
checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
4983
5031
|
const cwd = assertCwdExists(input.cwd);
|
|
4984
5032
|
await assertGitRepo(cwd);
|
|
4985
5033
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -4987,42 +5035,42 @@ var gitRouter = router({
|
|
|
4987
5035
|
return { ok: true };
|
|
4988
5036
|
}),
|
|
4989
5037
|
/** Stage files */
|
|
4990
|
-
stage: protectedProcedure.input(
|
|
5038
|
+
stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
4991
5039
|
const cwd = assertCwdExists(input.cwd);
|
|
4992
5040
|
await assertGitRepo(cwd);
|
|
4993
5041
|
await git(["add", "--", ...input.paths], cwd);
|
|
4994
5042
|
return { ok: true };
|
|
4995
5043
|
}),
|
|
4996
5044
|
/** Stage all files */
|
|
4997
|
-
stageAll: protectedProcedure.input(
|
|
5045
|
+
stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
4998
5046
|
const cwd = assertCwdExists(input.cwd);
|
|
4999
5047
|
await assertGitRepo(cwd);
|
|
5000
5048
|
await git(["add", "-A"], cwd);
|
|
5001
5049
|
return { ok: true };
|
|
5002
5050
|
}),
|
|
5003
5051
|
/** Unstage files */
|
|
5004
|
-
unstage: protectedProcedure.input(
|
|
5052
|
+
unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5005
5053
|
const cwd = assertCwdExists(input.cwd);
|
|
5006
5054
|
await assertGitRepo(cwd);
|
|
5007
5055
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5008
5056
|
return { ok: true };
|
|
5009
5057
|
}),
|
|
5010
5058
|
/** Unstage all files */
|
|
5011
|
-
unstageAll: protectedProcedure.input(
|
|
5059
|
+
unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5012
5060
|
const cwd = assertCwdExists(input.cwd);
|
|
5013
5061
|
await assertGitRepo(cwd);
|
|
5014
5062
|
await git(["reset", "--"], cwd);
|
|
5015
5063
|
return { ok: true };
|
|
5016
5064
|
}),
|
|
5017
5065
|
/** Commit staged changes */
|
|
5018
|
-
commit: protectedProcedure.input(
|
|
5066
|
+
commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5019
5067
|
const cwd = assertCwdExists(input.cwd);
|
|
5020
5068
|
await assertGitRepo(cwd);
|
|
5021
5069
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5022
5070
|
return { ok: true, output: output.trim() };
|
|
5023
5071
|
}),
|
|
5024
5072
|
/** Push to remote */
|
|
5025
|
-
push: protectedProcedure.input(
|
|
5073
|
+
push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5026
5074
|
const cwd = assertCwdExists(input.cwd);
|
|
5027
5075
|
await assertGitRepo(cwd);
|
|
5028
5076
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5031,25 +5079,25 @@ var gitRouter = router({
|
|
|
5031
5079
|
return { ok: true, output: output.trim() };
|
|
5032
5080
|
}),
|
|
5033
5081
|
/** Pull from remote */
|
|
5034
|
-
pull: protectedProcedure.input(
|
|
5082
|
+
pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5035
5083
|
const cwd = assertCwdExists(input.cwd);
|
|
5036
5084
|
await assertGitRepo(cwd);
|
|
5037
5085
|
const output = await git(["pull", input.remote], cwd);
|
|
5038
5086
|
return { ok: true, output: output.trim() };
|
|
5039
5087
|
}),
|
|
5040
5088
|
/** Fetch from remote */
|
|
5041
|
-
fetch: protectedProcedure.input(
|
|
5089
|
+
fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5042
5090
|
const cwd = assertCwdExists(input.cwd);
|
|
5043
5091
|
await assertGitRepo(cwd);
|
|
5044
5092
|
const output = await git(["fetch", input.remote], cwd);
|
|
5045
5093
|
return { ok: true, output: output.trim() };
|
|
5046
5094
|
}),
|
|
5047
5095
|
/** Get diff for a file or the whole index */
|
|
5048
|
-
diff: protectedProcedure.input(
|
|
5096
|
+
diff: protectedProcedure.input(z25.object({
|
|
5049
5097
|
cwd: CWD_SCHEMA,
|
|
5050
|
-
path:
|
|
5051
|
-
staged:
|
|
5052
|
-
untracked:
|
|
5098
|
+
path: z25.string().max(4096).optional(),
|
|
5099
|
+
staged: z25.boolean().default(false),
|
|
5100
|
+
untracked: z25.boolean().default(false)
|
|
5053
5101
|
})).query(async ({ input }) => {
|
|
5054
5102
|
const cwd = assertCwdExists(input.cwd);
|
|
5055
5103
|
await assertGitRepo(cwd);
|
|
@@ -5097,21 +5145,21 @@ var gitRouter = router({
|
|
|
5097
5145
|
};
|
|
5098
5146
|
}),
|
|
5099
5147
|
/** Discard changes to working tree files */
|
|
5100
|
-
discard: protectedProcedure.input(
|
|
5148
|
+
discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5101
5149
|
const cwd = assertCwdExists(input.cwd);
|
|
5102
5150
|
await assertGitRepo(cwd);
|
|
5103
5151
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5104
5152
|
return { ok: true };
|
|
5105
5153
|
}),
|
|
5106
5154
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5107
|
-
stagedDiff: protectedProcedure.input(
|
|
5155
|
+
stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5108
5156
|
const cwd = assertCwdExists(input.cwd);
|
|
5109
5157
|
await assertGitRepo(cwd);
|
|
5110
5158
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5111
5159
|
return { diff: diff.slice(0, 3e4) };
|
|
5112
5160
|
}),
|
|
5113
5161
|
/** Merge a branch into the current branch */
|
|
5114
|
-
merge: protectedProcedure.input(
|
|
5162
|
+
merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5115
5163
|
const cwd = assertCwdExists(input.cwd);
|
|
5116
5164
|
await assertGitRepo(cwd);
|
|
5117
5165
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5119,14 +5167,14 @@ var gitRouter = router({
|
|
|
5119
5167
|
return { ok: true, output: output.trim() };
|
|
5120
5168
|
}),
|
|
5121
5169
|
/** Rebase current branch onto another branch */
|
|
5122
|
-
rebase: protectedProcedure.input(
|
|
5170
|
+
rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5123
5171
|
const cwd = assertCwdExists(input.cwd);
|
|
5124
5172
|
await assertGitRepo(cwd);
|
|
5125
5173
|
const output = await git(["rebase", input.branch], cwd);
|
|
5126
5174
|
return { ok: true, output: output.trim() };
|
|
5127
5175
|
}),
|
|
5128
5176
|
/** List remotes */
|
|
5129
|
-
remotes: protectedProcedure.input(
|
|
5177
|
+
remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5130
5178
|
const cwd = assertCwdExists(input.cwd);
|
|
5131
5179
|
await assertGitRepo(cwd);
|
|
5132
5180
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5144,7 +5192,7 @@ var gitRouter = router({
|
|
|
5144
5192
|
return remotes;
|
|
5145
5193
|
}),
|
|
5146
5194
|
/** List stash entries */
|
|
5147
|
-
stashList: protectedProcedure.input(
|
|
5195
|
+
stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5148
5196
|
const cwd = assertCwdExists(input.cwd);
|
|
5149
5197
|
await assertGitRepo(cwd);
|
|
5150
5198
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5157,10 +5205,10 @@ var gitRouter = router({
|
|
|
5157
5205
|
return entries;
|
|
5158
5206
|
}),
|
|
5159
5207
|
/** Stash current changes */
|
|
5160
|
-
stashPush: protectedProcedure.input(
|
|
5208
|
+
stashPush: protectedProcedure.input(z25.object({
|
|
5161
5209
|
cwd: CWD_SCHEMA,
|
|
5162
|
-
message:
|
|
5163
|
-
includeUntracked:
|
|
5210
|
+
message: z25.string().max(4096).optional(),
|
|
5211
|
+
includeUntracked: z25.boolean().default(true)
|
|
5164
5212
|
})).mutation(async ({ input }) => {
|
|
5165
5213
|
const cwd = assertCwdExists(input.cwd);
|
|
5166
5214
|
await assertGitRepo(cwd);
|
|
@@ -5171,21 +5219,21 @@ var gitRouter = router({
|
|
|
5171
5219
|
return { ok: true, output: output.trim() };
|
|
5172
5220
|
}),
|
|
5173
5221
|
/** Apply a stash entry and remove it from the list */
|
|
5174
|
-
stashPop: protectedProcedure.input(
|
|
5222
|
+
stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5175
5223
|
const cwd = assertCwdExists(input.cwd);
|
|
5176
5224
|
await assertGitRepo(cwd);
|
|
5177
5225
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5178
5226
|
return { ok: true, output: output.trim() };
|
|
5179
5227
|
}),
|
|
5180
5228
|
/** Apply a stash entry without removing it from the list */
|
|
5181
|
-
stashApply: protectedProcedure.input(
|
|
5229
|
+
stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5182
5230
|
const cwd = assertCwdExists(input.cwd);
|
|
5183
5231
|
await assertGitRepo(cwd);
|
|
5184
5232
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5185
5233
|
return { ok: true, output: output.trim() };
|
|
5186
5234
|
}),
|
|
5187
5235
|
/** Drop a stash entry */
|
|
5188
|
-
stashDrop: protectedProcedure.input(
|
|
5236
|
+
stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5189
5237
|
const cwd = assertCwdExists(input.cwd);
|
|
5190
5238
|
await assertGitRepo(cwd);
|
|
5191
5239
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5218,7 +5266,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5218
5266
|
}
|
|
5219
5267
|
|
|
5220
5268
|
// src/trpc/routers/ai.ts
|
|
5221
|
-
import { z as
|
|
5269
|
+
import { z as z26 } from "zod";
|
|
5222
5270
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5223
5271
|
|
|
5224
5272
|
// src/services/ai-spawn-manager.ts
|
|
@@ -5933,23 +5981,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
5933
5981
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
5934
5982
|
var aiRouter = router({
|
|
5935
5983
|
/** Spawn an AI CLI process. Returns a spawnId for streaming. */
|
|
5936
|
-
spawn: protectedProcedure.input(
|
|
5937
|
-
cli:
|
|
5938
|
-
args:
|
|
5939
|
-
env:
|
|
5940
|
-
cwd:
|
|
5941
|
-
stdinData:
|
|
5942
|
-
enableMcp:
|
|
5943
|
-
mcpApiBaseUrl:
|
|
5944
|
-
mcpApiToken:
|
|
5984
|
+
spawn: protectedProcedure.input(z26.object({
|
|
5985
|
+
cli: z26.string().max(64),
|
|
5986
|
+
args: z26.array(z26.string().max(5e5)),
|
|
5987
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
|
|
5988
|
+
cwd: z26.string().max(4096).optional(),
|
|
5989
|
+
stdinData: z26.string().max(1e7).optional(),
|
|
5990
|
+
enableMcp: z26.boolean().optional(),
|
|
5991
|
+
mcpApiBaseUrl: z26.string().max(512).optional(),
|
|
5992
|
+
mcpApiToken: z26.string().max(8192).optional()
|
|
5945
5993
|
})).mutation(({ input }) => {
|
|
5946
5994
|
const spawnId = aiSpawnManager.spawn(input);
|
|
5947
5995
|
return { spawnId };
|
|
5948
5996
|
}),
|
|
5949
5997
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
5950
|
-
stream: protectedProcedure.input(
|
|
5951
|
-
spawnId:
|
|
5952
|
-
fromOffset:
|
|
5998
|
+
stream: protectedProcedure.input(z26.object({
|
|
5999
|
+
spawnId: z26.string().max(128),
|
|
6000
|
+
fromOffset: z26.number().int().min(0).default(0)
|
|
5953
6001
|
})).subscription(async function* ({ input }) {
|
|
5954
6002
|
try {
|
|
5955
6003
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -5963,39 +6011,39 @@ var aiRouter = router({
|
|
|
5963
6011
|
}
|
|
5964
6012
|
}),
|
|
5965
6013
|
/** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
|
|
5966
|
-
spawnPty: protectedProcedure.input(
|
|
5967
|
-
cli:
|
|
5968
|
-
args:
|
|
5969
|
-
env:
|
|
5970
|
-
cwd:
|
|
5971
|
-
cols:
|
|
5972
|
-
rows:
|
|
5973
|
-
sessionId:
|
|
5974
|
-
enableMcp:
|
|
5975
|
-
mcpApiBaseUrl:
|
|
5976
|
-
mcpApiToken:
|
|
6014
|
+
spawnPty: protectedProcedure.input(z26.object({
|
|
6015
|
+
cli: z26.string().max(64),
|
|
6016
|
+
args: z26.array(z26.string().max(5e5)),
|
|
6017
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
|
|
6018
|
+
cwd: z26.string().max(4096).optional(),
|
|
6019
|
+
cols: z26.number().int().min(1).max(1e3).optional(),
|
|
6020
|
+
rows: z26.number().int().min(1).max(1e3).optional(),
|
|
6021
|
+
sessionId: z26.string().max(128).optional(),
|
|
6022
|
+
enableMcp: z26.boolean().optional(),
|
|
6023
|
+
mcpApiBaseUrl: z26.string().max(512).optional(),
|
|
6024
|
+
mcpApiToken: z26.string().max(8192).optional()
|
|
5977
6025
|
})).mutation(({ input }) => {
|
|
5978
6026
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
5979
6027
|
return { spawnId };
|
|
5980
6028
|
}),
|
|
5981
6029
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
5982
|
-
findPtyBySession: protectedProcedure.input(
|
|
6030
|
+
findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
|
|
5983
6031
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
5984
6032
|
}),
|
|
5985
6033
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
5986
|
-
writePty: protectedProcedure.input(
|
|
5987
|
-
spawnId:
|
|
5988
|
-
data:
|
|
6034
|
+
writePty: protectedProcedure.input(z26.object({
|
|
6035
|
+
spawnId: z26.string().max(128),
|
|
6036
|
+
data: z26.string().max(1e6)
|
|
5989
6037
|
})).mutation(({ input }) => {
|
|
5990
6038
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
5991
6039
|
return { ok };
|
|
5992
6040
|
}),
|
|
5993
6041
|
/** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
|
|
5994
|
-
writeContextFiles: protectedProcedure.input(
|
|
5995
|
-
sessionId:
|
|
5996
|
-
files:
|
|
5997
|
-
name:
|
|
5998
|
-
content:
|
|
6042
|
+
writeContextFiles: protectedProcedure.input(z26.object({
|
|
6043
|
+
sessionId: z26.string().min(1).max(128),
|
|
6044
|
+
files: z26.array(z26.object({
|
|
6045
|
+
name: z26.string().min(1).max(256),
|
|
6046
|
+
content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
5999
6047
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6000
6048
|
}).refine(
|
|
6001
6049
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6010,25 +6058,25 @@ var aiRouter = router({
|
|
|
6010
6058
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6011
6059
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6012
6060
|
*/
|
|
6013
|
-
pasteImage: protectedProcedure.input(
|
|
6014
|
-
sessionId:
|
|
6015
|
-
mimeType:
|
|
6016
|
-
base64:
|
|
6061
|
+
pasteImage: protectedProcedure.input(z26.object({
|
|
6062
|
+
sessionId: z26.string().max(128).optional(),
|
|
6063
|
+
mimeType: z26.string().max(64),
|
|
6064
|
+
base64: z26.string().max(15e6)
|
|
6017
6065
|
})).mutation(async ({ input }) => {
|
|
6018
6066
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6019
6067
|
return res;
|
|
6020
6068
|
}),
|
|
6021
6069
|
/** Resize a PTY spawn. */
|
|
6022
|
-
resizePty: protectedProcedure.input(
|
|
6023
|
-
spawnId:
|
|
6024
|
-
cols:
|
|
6025
|
-
rows:
|
|
6070
|
+
resizePty: protectedProcedure.input(z26.object({
|
|
6071
|
+
spawnId: z26.string().max(128),
|
|
6072
|
+
cols: z26.number().int().min(1).max(1e3),
|
|
6073
|
+
rows: z26.number().int().min(1).max(1e3)
|
|
6026
6074
|
})).mutation(({ input }) => {
|
|
6027
6075
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6028
6076
|
return { ok };
|
|
6029
6077
|
}),
|
|
6030
6078
|
/** Kill a running AI spawn. */
|
|
6031
|
-
kill: protectedProcedure.input(
|
|
6079
|
+
kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
6032
6080
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6033
6081
|
return { ok: killed };
|
|
6034
6082
|
}),
|
|
@@ -6037,23 +6085,23 @@ var aiRouter = router({
|
|
|
6037
6085
|
return aiSpawnManager.list();
|
|
6038
6086
|
}),
|
|
6039
6087
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6040
|
-
ack: protectedProcedure.input(
|
|
6088
|
+
ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
6041
6089
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6042
6090
|
return { ok: acked };
|
|
6043
6091
|
}),
|
|
6044
6092
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6045
|
-
codexRequest: protectedProcedure.input(
|
|
6046
|
-
method:
|
|
6047
|
-
params:
|
|
6048
|
-
env:
|
|
6093
|
+
codexRequest: protectedProcedure.input(z26.object({
|
|
6094
|
+
method: z26.string().max(256),
|
|
6095
|
+
params: z26.record(z26.string(), z26.unknown()).default({}),
|
|
6096
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
|
|
6049
6097
|
})).mutation(async ({ input }) => {
|
|
6050
6098
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6051
6099
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6052
6100
|
return { result };
|
|
6053
6101
|
}),
|
|
6054
6102
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6055
|
-
codexNotifications: protectedProcedure.input(
|
|
6056
|
-
threadId:
|
|
6103
|
+
codexNotifications: protectedProcedure.input(z26.object({
|
|
6104
|
+
threadId: z26.string().max(256).optional()
|
|
6057
6105
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6058
6106
|
await codexAppServerManager.ensureConnected();
|
|
6059
6107
|
const queue = [];
|
|
@@ -6090,13 +6138,13 @@ var aiRouter = router({
|
|
|
6090
6138
|
});
|
|
6091
6139
|
|
|
6092
6140
|
// src/trpc/routers/wiki.ts
|
|
6093
|
-
import { z as
|
|
6141
|
+
import { z as z27 } from "zod";
|
|
6094
6142
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6095
6143
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6096
6144
|
import { dirname as dirname2 } from "path";
|
|
6097
6145
|
import { resolve as resolvePath3, join as join5, relative, sep } from "path";
|
|
6098
|
-
var CWD_SCHEMA2 =
|
|
6099
|
-
var REL_PATH_SCHEMA =
|
|
6146
|
+
var CWD_SCHEMA2 = z27.string().min(1).max(4096);
|
|
6147
|
+
var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6100
6148
|
message: "Path must be a relative path without traversal"
|
|
6101
6149
|
});
|
|
6102
6150
|
var MAX_FILES = 500;
|
|
@@ -6116,9 +6164,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6116
6164
|
"target",
|
|
6117
6165
|
"out"
|
|
6118
6166
|
]);
|
|
6119
|
-
var RepoEntrySchema =
|
|
6120
|
-
|
|
6121
|
-
|
|
6167
|
+
var RepoEntrySchema = z27.lazy(() => z27.union([
|
|
6168
|
+
z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
|
|
6169
|
+
z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
|
|
6122
6170
|
]));
|
|
6123
6171
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6124
6172
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6188,13 +6236,13 @@ async function resolveRoot(cwd) {
|
|
|
6188
6236
|
}
|
|
6189
6237
|
}
|
|
6190
6238
|
var wikiRouter = router({
|
|
6191
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6239
|
+
listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6192
6240
|
const root = await resolveRoot(input.cwd);
|
|
6193
6241
|
const counter = { n: 0 };
|
|
6194
6242
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6195
6243
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6196
6244
|
}),
|
|
6197
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6245
|
+
readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6198
6246
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6199
6247
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6200
6248
|
}
|
|
@@ -6220,10 +6268,10 @@ var wikiRouter = router({
|
|
|
6220
6268
|
const content = await readFile2(realTarget, "utf-8");
|
|
6221
6269
|
return { path: input.path, content };
|
|
6222
6270
|
}),
|
|
6223
|
-
writeMarkdown: protectedProcedure.input(
|
|
6271
|
+
writeMarkdown: protectedProcedure.input(z27.object({
|
|
6224
6272
|
cwd: CWD_SCHEMA2,
|
|
6225
6273
|
path: REL_PATH_SCHEMA,
|
|
6226
|
-
content:
|
|
6274
|
+
content: z27.string().max(5e6)
|
|
6227
6275
|
})).mutation(async ({ input }) => {
|
|
6228
6276
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6229
6277
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6234,7 +6282,7 @@ var wikiRouter = router({
|
|
|
6234
6282
|
await writeFile6(target, input.content, "utf-8");
|
|
6235
6283
|
return { path: input.path, ok: true };
|
|
6236
6284
|
}),
|
|
6237
|
-
createFile: protectedProcedure.input(
|
|
6285
|
+
createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6238
6286
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6239
6287
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6240
6288
|
}
|
|
@@ -6250,13 +6298,13 @@ var wikiRouter = router({
|
|
|
6250
6298
|
await writeFile6(target, "", "utf-8");
|
|
6251
6299
|
return { path: input.path, ok: true };
|
|
6252
6300
|
}),
|
|
6253
|
-
createDir: protectedProcedure.input(
|
|
6301
|
+
createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6254
6302
|
const root = await resolveRoot(input.cwd);
|
|
6255
6303
|
const target = await resolveSafePath(root, input.path, false);
|
|
6256
6304
|
await mkdir6(target, { recursive: true });
|
|
6257
6305
|
return { path: input.path, ok: true };
|
|
6258
6306
|
}),
|
|
6259
|
-
renamePath: protectedProcedure.input(
|
|
6307
|
+
renamePath: protectedProcedure.input(z27.object({
|
|
6260
6308
|
cwd: CWD_SCHEMA2,
|
|
6261
6309
|
fromPath: REL_PATH_SCHEMA,
|
|
6262
6310
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6274,14 +6322,14 @@ var wikiRouter = router({
|
|
|
6274
6322
|
await rename2(from, to);
|
|
6275
6323
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6276
6324
|
}),
|
|
6277
|
-
ensureRoot: protectedProcedure.input(
|
|
6325
|
+
ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6278
6326
|
const expanded = expandEnvVar(input.cwd);
|
|
6279
6327
|
const abs = resolvePath3(expanded);
|
|
6280
6328
|
await mkdir6(abs, { recursive: true });
|
|
6281
6329
|
const root = await realpath(abs);
|
|
6282
6330
|
return { root, ok: true };
|
|
6283
6331
|
}),
|
|
6284
|
-
deletePath: protectedProcedure.input(
|
|
6332
|
+
deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6285
6333
|
const root = await resolveRoot(input.cwd);
|
|
6286
6334
|
const target = await resolveSafePath(root, input.path, true);
|
|
6287
6335
|
if (target === root) {
|