@runeya/runeya 2.0.71 → 2.0.72
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 +203 -160
- package/agent/index.js.map +1 -1
- package/agent-manager-YDLSYZE3.js +7 -0
- package/{chunk-Z3KAXI7V.js → chunk-HPYBAUAH.js} +235 -29
- package/chunk-HPYBAUAH.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-53OQNM27.js} +850 -677
- package/src-53OQNM27.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-DdIfThmp.js +13 -0
- package/web/assets/AgentTerminalPage-v9fFc2Kd.js +1 -0
- package/web/assets/AiChatPage-BvrKlLxc.js +1 -0
- package/web/assets/AppLayout-CLzy-QOZ.js +1 -0
- package/web/assets/{AppLayout-BqXoW05V.css → AppLayout-Dj8VrBzz.css} +1 -1
- package/web/assets/AuditPage-DgJIcr0c.js +1 -0
- package/web/assets/CloudAccountPage-CoJV3YCA.js +1 -0
- package/web/assets/CloudAccountPage-DGtKCmXL.js +1 -0
- package/web/assets/CloudMessagingPage-Bql34zJU.js +2 -0
- package/web/assets/DashboardPage-BSvJxrcT.js +1 -0
- package/web/assets/DirectoryPickerDialog-BfLLfUQy.js +1 -0
- package/web/assets/{EditorIcon-JRryeySJ.js → EditorIcon-BbilRWLq.js} +2 -2
- package/web/assets/EnvironmentForm-BIHXK18r.js +108 -0
- package/web/assets/EnvironmentFormPage-oLAwLJ1b.js +1 -0
- package/web/assets/EnvironmentListPage-tJfB0q_E.js +1 -0
- package/web/assets/KanbanBoardPage-DpyYe6jx.js +4 -0
- package/web/assets/KanbanListPage-DjXWjWgU.js +1 -0
- package/web/assets/LaunchProjectPage-Bqgsa2z1.js +1 -0
- package/web/assets/LaunchProjectPage-BrmWhutG.css +1 -0
- package/web/assets/LaunchServicesPage-BCNDSuuN.js +1 -0
- package/web/assets/LaunchServicesPage-CMxUWoNQ.css +1 -0
- package/web/assets/LogViewer-gTNzyao0.js +3 -0
- package/web/assets/OrgKeyPrompt-BdNV_cve.js +1 -0
- package/web/assets/{ProcessControls-BPQXGKib.js → ProcessControls-BzMrd-2c.js} +1 -1
- package/web/assets/ProcessDetailPage-Rg5zyPYJ.js +1 -0
- package/web/assets/{ProcessMetrics-D7L708Em.js → ProcessMetrics-hZWAa3gi.js} +2 -2
- package/web/assets/ProjectDetailPage-NbxG6AIr.js +1 -0
- package/web/assets/ProjectListPage-COMYMVbr.js +1 -0
- package/web/assets/RandomJobTestPage-DTK2RLln.js +2 -0
- package/web/assets/ScenarioEditorPage-DIx_Nzbh.js +14 -0
- package/web/assets/SendToChatDialog-BAalryU3.js +1 -0
- package/web/assets/ServiceControlsBar-CgR8yFZb.js +1 -0
- package/web/assets/ServiceDetailPage-Cvqftndf.js +2 -0
- package/web/assets/ServiceFormPage-CGgCwNM3.js +1 -0
- package/web/assets/{SettingsPage-CScovMi5.css → SettingsPage-ClUsbLPy.css} +1 -1
- package/web/assets/SettingsPage-Dx5xoAS7.js +2063 -0
- package/web/assets/UnlockPage-BkqsC0ML.css +1 -0
- package/web/assets/UnlockPage-Dlp8kXD-.js +1 -0
- package/web/assets/VariablesTable-Dr1C6hg4.js +1 -0
- package/web/assets/VaultMigrationPage-1zZCTKgS.js +1 -0
- package/web/assets/VaultMigrationPage-B20L2W_w.css +1 -0
- package/web/assets/VersionBadge-BiLjqi8I.js +1 -0
- package/web/assets/WikiPage-B51w0xOX.js +1 -0
- package/web/assets/WikiView-CGQrkGH4.js +1 -0
- package/web/assets/add-scalar-classes-ChVyhgpT.js +387 -0
- package/web/assets/auth-errors-BdfA61wA.js +1 -0
- package/web/assets/autocomplete-wqj_ORBH.js +308 -0
- package/web/assets/{basic-shape-diamond.svg-C8K6YjGj.js → basic-shape-diamond.svg-CWwnQ30s.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-C9PeXR6S.js → basic-shape-hexagon.svg-C9JMDUIK.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CfBLN6Yj.js → basic-shape-primary-circle-ellipse-round.svg-Do0Ewbp-.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-D2QPBP5_.js → basic-shape-primary-square-rectangle.svg-CRq767cD.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-ClsEFdja.js → basic-shape-shield.svg-BuxJBs70.js} +1 -1
- package/web/assets/{browser-CF5_9QqR.js → browser-BEEW2obM.js} +1 -1
- package/web/assets/{browser-D7ZckEFz.js → browser-BhZAIVa8.js} +1 -1
- package/web/assets/card-C1iS2wAN.js +32 -0
- package/web/assets/{checkbox-CfwNXlF_.js → checkbox-CCU9xze9.js} +3 -3
- package/web/assets/{chip-3tOoBrD7.js → chip-DsJBorBp.js} +2 -2
- package/web/assets/client-BFK39Zab.js +24 -0
- package/web/assets/cloud-chat.store-D39vo5xT.js +1 -0
- package/web/assets/cloud-session-B7G8xhKC.js +1 -0
- package/web/assets/column-CPU5Jg0n.js +907 -0
- package/web/assets/{computer-device-desktop-monitor.svg-9f4DSNLj.js → computer-device-desktop-monitor.svg-XWEWhL0y.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-BYoXiEOE.js → computer-device-desktop.svg-COkZClBv.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-DR1sEMdL.js → computer-device-laptop.svg-C4EfJUqO.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-Bb2_2tyI.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-Dw4z_H5H.js → computer-device-mobile-phone-android-samsung.svg-CEUhXP7K.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-BtqMb2Wo.js → computer-device-mobile-phone-iphone-x-back.svg-B3rxizbE.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-eYEM_VXA.js → computer-device-mobile-phone-iphone-x.svg-BSKpZFCN.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-jLD41nvm.js → computer-device-mobile-tablet-touch.svg-CZvb3YX2.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-D_7_M1GK.js → computer-device-mobile-tablet.svg-BM4_YZYi.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-B_527QGY.js → computer-device-network-ethernet-cat6.svg-CK0v-Rjf.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-ClZIaUOH.js → computer-device-network-lan-www.svg-DvhO71Lq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-DC4OCJY0.js → computer-device-network-wifi-connection.svg--olUYsgv.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BWPpobCc.js → computer-device-network-wifi-router.svg-D5HKSWTi.js} +1 -1
- package/web/assets/{cssMode-CXUrkdrQ.js → cssMode-CTjKNOiX.js} +1 -1
- package/web/assets/{divider-BrO5nkpd.js → divider-VFAPax5_.js} +2 -2
- package/web/assets/{docx-preview-tE714WSD.js → docx-preview-gNYLz3FX.js} +1 -1
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-o8D0ASmr.js → ecology-science-erlenmeyer-flask.svg-THkDG-tj.js} +1 -1
- package/web/assets/{fieldset-LX5cdTvN.js → fieldset-DZGy449H.js} +2 -2
- package/web/assets/{freemarker2-DJ82s0fP.js → freemarker2-CNSvFpVF.js} +1 -1
- package/web/assets/{handlebars-BXFlY2Lu.js → handlebars-BeRu48NI.js} +1 -1
- package/web/assets/{html-CqDVypOC.js → html-DrTiGPjE.js} +1 -1
- package/web/assets/{htmlMode-DrHxdTQP.js → htmlMode-DpbDpbjK.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-BDPMOynq.js → image-flash-lightning.svg-DrkyfdIV.js} +1 -1
- package/web/assets/{image-picture-flower.svg-D-AJaery.js → image-picture-flower.svg-BqFj1xcR.js} +1 -1
- package/web/assets/{index-CICxLkjp.css → index-B___lI4D.css} +1 -1
- package/web/assets/{index-a6DAapTb.js → index-y5bguEQB.js} +238 -238
- package/web/assets/{interface-alert-exclamation-diamond.svg-CV7M0IVQ.js → interface-alert-exclamation-diamond.svg-B40BfW6d.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-B8NapiB7.js → interface-alert-exclamation-triangle-warning.svg-DeIlksL4.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-eQIFULjG.js → interface-alert-information-circle.svg-SwVdV-Z6.js} +1 -1
- package/web/assets/{interface-award-crown.svg-D-4fclUD.js → interface-award-crown.svg-DZHf0EHC.js} +1 -1
- package/web/assets/{interface-bookmark.svg-XdbYDqqk.js → interface-bookmark-tag.svg-CiaV2Cjo.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-Jy6EOdau.js → interface-bookmark.svg-DBEqa-8W.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-BIoXVZrz.js → interface-calendar-date-one.svg-C_afKyyz.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-DHwJbBvQ.js → interface-content-book-open-pages.svg-D5d9ilSu.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-47msUBN_.js → interface-content-book-page.svg-B6hlaLP5.js} +1 -1
- package/web/assets/{interface-content-file.svg-DXw9W8QM.js → interface-content-file.svg-COWMwejF.js} +1 -1
- package/web/assets/interface-content-folder.svg-BCIUgpD4.js +1 -0
- package/web/assets/{interface-content-folder.svg-BmK_IJv8.js → interface-content-folder.svg-K7DTqQH-.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-CQ1rQN0L.js → interface-copy-clipboard.svg-BFQ6eajI.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-C3aTaTh_.js → interface-edit-attachment.svg-B-LsB4cM.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-B2Ue_tgs.js → interface-edit-binocular.svg-CnVjKyrn.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-DDKse-Wy.js → interface-edit-magic-wand.svg-CUY6vVJT.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-C2ABby1f.js → interface-edit-tool-paint-roller.svg-B1tSdIxN.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-CNjYbknQ.js → interface-edit-tool-pencil.svg-BHFULT75.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DWqSHfIa.js → interface-favorite-award.svg-CcOLoF8I.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-CNUsr98g.js → interface-favorite-flag.svg-CAW6LmLW.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-3Eb366FO.js → interface-favorite-heart.svg-BEz4zlNs.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-CVJ3aq1n.js → interface-favorite-star.svg-DKFuvYge.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BfXhPBbs.js → interface-favorite-stars-sparkles.svg-BfzccoPz.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-DzsqKrYq.js → interface-hierarchy-flowchart.svg-BT8QX161.js} +1 -1
- package/web/assets/{interface-home-house.svg-BnXbuyZn.js → interface-home-house.svg-B264pTPi.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-BsmSmyP5.js → interface-hyperlink.svg-DhUgNKkr.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-BywVQRo9.js → interface-lighting-brightness.svg-CPKb40uB.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-BLPORc_h.js → interface-lock-closed.svg-CvXhgCtt.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-CaYlbVmU.js → interface-lock-open-unlock.svg-B0PMKRhP.js} +1 -1
- package/web/assets/{interface-login-key.svg-D5F_9MJ0.js → interface-login-key.svg-DJUm3vhg.js} +1 -1
- package/web/assets/{interface-search.svg-CF1D8GIV.js → interface-search.svg-ByW98ez_.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-D4AOKG2g.js → interface-setting-cog.svg-DYOmJ9It.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BIfr2_va.js → interface-share-megaphone-bullhorn.svg-YOCUHa3i.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-NDd3dv1t.js → interface-share-rocket.svg-C5kj5dSu.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-CVDJbmT-.js → interface-share-satellite.svg-C0svPxG6.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-D0ZLJNO2.js → interface-share-space-ship.svg-8Nw02n1Q.js} +1 -1
- package/web/assets/{interface-share.svg-WpwbpOes.js → interface-share.svg-eDW294tn.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DnfzUw_B.js → interface-signal-square.svg-CxB5mcJQ.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-BhxciNvX.js → interface-time-clock-circle.svg-CEnlQi79.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-DBzSaSHQ.js → interface-time-hour-glass.svg-qL3_s19Q.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-BULh1giq.js → interface-users-multiple.svg-Cz2iA33z.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-D377V2os.js → interface-weather-moon.svg-BoT9GUK_.js} +1 -1
- package/web/assets/{javascript-BTXoJ3Qy.js → javascript-DWdA0-HW.js} +1 -1
- package/web/assets/{jsonMode-D4a3Khim.js → jsonMode-DxGrVlm0.js} +2 -2
- package/web/assets/{liquid-DfO0R4Mk.js → liquid-COqLk0mR.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BvPWuQFt.js → lspLanguageFeatures--0hj1ZV4.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-SK3IJ6QN.js → mail-chat-bubble-square.svg-eiKzTBOv.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-CJFA7B2E.js → mail-send-email-paper-airplane.svg-CCI77Gk8.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-eO_-QNyE.js → mail-send-envelope.svg-ChM5k_N7.js} +1 -1
- package/web/assets/{mdx-G_vwFSSe.js → mdx-CwXNREAO.js} +1 -1
- package/web/assets/{message-CxPw04rG.js → message-CSxReshg.js} +2 -2
- package/web/assets/{minus-Dp5ez1-1.js → minus-Cg0lH8Mn.js} +2 -2
- package/web/assets/modal-D3dkRJqD.js +1 -0
- package/web/assets/modal-ix4Amfqv.js +5 -0
- package/web/assets/{money-cashier-receipt.svg-EutWthy8.js → money-cashier-receipt.svg-WMIW7vxg.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-MnLj-orw.js → money-currency-dollar-pay.svg-qTcGSVX2.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-CVCZ3TyJ.js → money-graph-arrow-increase.svg-B-TQKOW-.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-DiUmCuhj.js → money-graph-bar-chart-increase.svg-CWCIjQcI.js} +1 -1
- package/web/assets/multiselect-C7U34xql.js +251 -0
- package/web/assets/{nature-ecology-leaf.svg-ByaLs72Y.js → nature-ecology-leaf.svg-CL26IBv2.js} +1 -1
- package/web/assets/{password-CxtOqagM.js → password-ZOY0bqV1.js} +4 -4
- package/web/assets/{phone-telephone.svg-BKz6Jkwn.js → phone-telephone.svg-BhzxDLVX.js} +1 -1
- package/web/assets/{plus-BPT_7GGk.js → plus-DsBv8bgd.js} +6 -6
- package/web/assets/process.store-DPp7dk63.js +1 -0
- package/web/assets/{programming-bug.svg-BwSc8f0s.js → programming-bug.svg-CBNm3E3F.js} +1 -1
- package/web/assets/{programming-cloud.svg-CEIulNEp.js → programming-cloud.svg-BrVRbl9B.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-Bc_F3NH0.js → programming-computer-database-server.svg-LQp6n-du.js} +1 -1
- package/web/assets/{programming-computer-database.svg-AYLkzJJE.js → programming-computer-database.svg-CSbhcIMU.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-DLpzPxNB.js → programming-module-four-layout.svg-DYEAcL2j.js} +1 -1
- package/web/assets/{programming-module-three.svg-CcuZn8dz.js → programming-module-three.svg-CCQXCU-e.js} +1 -1
- package/web/assets/{programming-module.svg-BjbGpQeu.js → programming-module.svg-Chrmf7k4.js} +1 -1
- package/web/assets/{programming-script-code.svg-poyfodgC.js → programming-script-code.svg-DPhhp3IW.js} +1 -1
- package/web/assets/{python-DpMMlrWM.js → python-B7ePhfsS.js} +1 -1
- package/web/assets/{razor-Ba_mg6U5.js → razor-ChpzroOv.js} +1 -1
- package/web/assets/router-Df972Ysi.js +1 -0
- package/web/assets/settings-scope-CC3oHq2H.js +1 -0
- package/web/assets/settings.store-B31_cRNl.js +1 -0
- package/web/assets/{shopping-cart.svg-BX2KYVCw.js → shopping-cart.svg-bmefzlOu.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-BOl2vYLg.js → shopping-gift-present.svg-aUOleva0.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-gxfbOgnM.js → shopping-shipping-box-parcel-package.svg-BLsRP4dg.js} +1 -1
- package/web/assets/{src-D0LXRijj.js → src-BPSr9dU2.js} +34 -34
- package/web/assets/src-Dt37H-VN.js +1 -0
- package/web/assets/tabpanel-DZQ_g__B.js +150 -0
- package/web/assets/{tag-new-circle.svg-CTRMBJyc.js → tag-new-circle.svg-kTMMMv-0.js} +1 -1
- package/web/assets/{toggleswitch-DcDrXRKn.js → toggleswitch-BWXDXl37.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-BPp4IapC.js → travel-map-earth-globe.svg-BdQmz8_b.js} +1 -1
- package/web/assets/trpc-aSS7b3jh.js +1 -0
- package/web/assets/{tsMode-HfLOT-e5.js → tsMode-arHIUQbZ.js} +6 -6
- package/web/assets/{typescript-DJAEsDnw.js → typescript-Ds9kgbPd.js} +1 -1
- package/web/assets/useAiChatDrawer-C1xrMtLl.js +1 -0
- package/web/assets/useCloudOrg-BexK510D.js +97 -0
- package/web/assets/{useProjectCatalog-C95cDPIr.js → useProjectCatalog-BbSaTBSS.js} +1 -1
- package/web/assets/{xml-1frg7aol.js → xml-CO56TgpZ.js} +1 -1
- package/web/assets/{yaml-DXzDcMOS.js → yaml-DueFV2-x.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/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-Bg7-icbW.js +0 -97
- /package/{agent-manager-UUSQK6S2.js.map → agent-manager-YDLSYZE3.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,49 @@ 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(["kanban:read", "kanban:write", "kanban:comment"]);
|
|
1727
|
+
var CloudApiKeySecretSchema = z20.string().regex(/^rk_[0-9a-f]{64}$/);
|
|
1728
|
+
var CloudApiKeySchema = z20.object({
|
|
1729
|
+
id: z20.string().max(128),
|
|
1730
|
+
organizationId: z20.string().max(128),
|
|
1731
|
+
name: z20.string().min(1).max(200),
|
|
1732
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1733
|
+
/**
|
|
1734
|
+
* Les tableaux que la clé peut atteindre, ou `null` pour « tous ceux de
|
|
1735
|
+
* l'organisation ».
|
|
1736
|
+
*
|
|
1737
|
+
* `null` et `[]` ne sont pas la même chose : la liste vide n'ouvre rien, et
|
|
1738
|
+
* c'est délibéré — un tableau supprimé ne doit pas élargir une clé qui ne le
|
|
1739
|
+
* nommait plus que lui.
|
|
1740
|
+
*/
|
|
1741
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable(),
|
|
1742
|
+
createdAt: z20.string().max(64),
|
|
1743
|
+
/** Dernier usage constaté, pour reconnaître une clé oubliée. */
|
|
1744
|
+
lastUsedAt: z20.string().max(64).nullable(),
|
|
1745
|
+
/** Qui l'a émise — une clé sans visage ne se révoque jamais sereinement. */
|
|
1746
|
+
createdBy: z20.object({ id: z20.string().max(128), name: z20.string().max(200) }),
|
|
1747
|
+
/** Les 4 derniers caractères du secret, pour reconnaître une clé dans une liste. */
|
|
1748
|
+
keyPreview: z20.string().max(8)
|
|
1749
|
+
});
|
|
1750
|
+
var CreatedCloudApiKeySchema = z20.object({
|
|
1751
|
+
key: CloudApiKeySchema,
|
|
1752
|
+
secret: CloudApiKeySecretSchema
|
|
1753
|
+
});
|
|
1754
|
+
var CreateCloudApiKeyInput = z20.object({
|
|
1755
|
+
organizationId: z20.string().min(1).max(128),
|
|
1756
|
+
name: z20.string().min(1).max(200),
|
|
1757
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10),
|
|
1758
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().default(null)
|
|
1759
|
+
});
|
|
1760
|
+
var UpdateCloudApiKeyInput = z20.object({
|
|
1761
|
+
id: z20.string().min(1).max(128),
|
|
1762
|
+
name: z20.string().min(1).max(200).optional(),
|
|
1763
|
+
scopes: z20.array(CloudApiScopeSchema).min(1).max(10).optional(),
|
|
1764
|
+
boards: z20.array(z20.string().max(64)).max(200).nullable().optional()
|
|
1765
|
+
});
|
|
1766
|
+
|
|
1724
1767
|
// ../../packages/shared/src/utils/crypto.ts
|
|
1725
1768
|
import { createCipheriv, createDecipheriv, randomBytes, pbkdf2Sync } from "crypto";
|
|
1726
1769
|
|
|
@@ -2897,7 +2940,7 @@ import { execa as execa3 } from "execa";
|
|
|
2897
2940
|
import { homedir as homedir4 } from "os";
|
|
2898
2941
|
|
|
2899
2942
|
// src/trpc/routers/config.ts
|
|
2900
|
-
import { z as
|
|
2943
|
+
import { z as z21 } from "zod";
|
|
2901
2944
|
|
|
2902
2945
|
// src/services/traefik-manager.ts
|
|
2903
2946
|
import { spawn, execFile as execFile2 } from "child_process";
|
|
@@ -3274,13 +3317,13 @@ function resolvePassthroughEnv() {
|
|
|
3274
3317
|
return result;
|
|
3275
3318
|
}
|
|
3276
3319
|
var configRouter = router({
|
|
3277
|
-
setPassthroughEnv: protectedProcedure.input(
|
|
3278
|
-
names:
|
|
3279
|
-
|
|
3320
|
+
setPassthroughEnv: protectedProcedure.input(z21.object({
|
|
3321
|
+
names: z21.array(
|
|
3322
|
+
z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256)
|
|
3280
3323
|
).max(100),
|
|
3281
|
-
values:
|
|
3282
|
-
|
|
3283
|
-
|
|
3324
|
+
values: z21.record(
|
|
3325
|
+
z21.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/).max(256),
|
|
3326
|
+
z21.string().max(32768)
|
|
3284
3327
|
).refine((obj) => Object.keys(obj).length <= 100, "Too many values").optional()
|
|
3285
3328
|
})).mutation(({ input }) => {
|
|
3286
3329
|
passthroughEnvNames = input.names;
|
|
@@ -3317,7 +3360,7 @@ var configRouter = router({
|
|
|
3317
3360
|
getTraefikFileTree: protectedProcedure.query(async () => {
|
|
3318
3361
|
return traefikManager.getFileTree();
|
|
3319
3362
|
}),
|
|
3320
|
-
getTraefikLogs: protectedProcedure.input(
|
|
3363
|
+
getTraefikLogs: protectedProcedure.input(z21.object({ lines: z21.number().int().min(1).max(500).default(100) })).query(async ({ input }) => {
|
|
3321
3364
|
const logs = await traefikManager.getLogs(input.lines);
|
|
3322
3365
|
return { logs };
|
|
3323
3366
|
})
|
|
@@ -3509,17 +3552,17 @@ var healthChecker = new HealthChecker();
|
|
|
3509
3552
|
import killPort from "kill-port";
|
|
3510
3553
|
|
|
3511
3554
|
// 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:
|
|
3555
|
+
import { z as z22 } from "zod";
|
|
3556
|
+
var EnvSchema = z22.object({
|
|
3557
|
+
RUNEYA_AGENT_PORT: z22.coerce.number().int().min(1).max(65535).default(4001),
|
|
3558
|
+
RUNEYA_AGENT_HOST: z22.string().default("127.0.0.1"),
|
|
3559
|
+
PASSPHRASE_OVERRIDE: z22.string().regex(/^[0-9a-f]+$/i, "Must be a hex string").optional(),
|
|
3560
|
+
AGENT_ID: z22.string().optional(),
|
|
3518
3561
|
// Set by spawner or manually for remote agents
|
|
3519
|
-
LOG_BUFFER_SIZE:
|
|
3520
|
-
METRICS_INTERVAL:
|
|
3521
|
-
GRACE_PERIOD:
|
|
3522
|
-
HEALTH_WS_INTERVAL:
|
|
3562
|
+
LOG_BUFFER_SIZE: z22.coerce.number().int().positive().default(LOG_BUFFER_SIZE),
|
|
3563
|
+
METRICS_INTERVAL: z22.coerce.number().int().positive().default(METRICS_INTERVAL),
|
|
3564
|
+
GRACE_PERIOD: z22.coerce.number().int().positive().default(GRACE_PERIOD),
|
|
3565
|
+
HEALTH_WS_INTERVAL: z22.coerce.number().int().positive().default(HEALTH_WS_INTERVAL)
|
|
3523
3566
|
});
|
|
3524
3567
|
var env = EnvSchema.parse(process.env);
|
|
3525
3568
|
|
|
@@ -4294,7 +4337,7 @@ var processRouter = router({
|
|
|
4294
4337
|
return processManager.listStatuses();
|
|
4295
4338
|
}),
|
|
4296
4339
|
/** Get a single process */
|
|
4297
|
-
get: protectedProcedure.input(
|
|
4340
|
+
get: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
|
|
4298
4341
|
const status = processManager.getStatus(input.id);
|
|
4299
4342
|
if (!status) {
|
|
4300
4343
|
throw new TRPCError2({ code: "NOT_FOUND", message: `Process ${input.id} not found` });
|
|
@@ -4307,78 +4350,78 @@ var processRouter = router({
|
|
|
4307
4350
|
return { id };
|
|
4308
4351
|
}),
|
|
4309
4352
|
/** Undeploy: stop + remove */
|
|
4310
|
-
undeploy: protectedProcedure.input(
|
|
4353
|
+
undeploy: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4311
4354
|
await processManager.undeploy(input.id);
|
|
4312
4355
|
return { success: true };
|
|
4313
4356
|
}),
|
|
4314
4357
|
/** Update the service config for a deployed process */
|
|
4315
|
-
updateConfig: protectedProcedure.input(
|
|
4358
|
+
updateConfig: protectedProcedure.input(z23.object({ serviceId: z23.string().max(128), config: ServiceConfigSchema })).mutation(({ input }) => {
|
|
4316
4359
|
processManager.updateConfig(input.serviceId, input.config);
|
|
4317
4360
|
return { success: true };
|
|
4318
4361
|
}),
|
|
4319
4362
|
/** Start a deployed process */
|
|
4320
|
-
start: protectedProcedure.input(
|
|
4363
|
+
start: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4321
4364
|
console.log(`[agent] start service=${input.id}`);
|
|
4322
4365
|
await processManager.start(input.id);
|
|
4323
4366
|
return processManager.getStatus(input.id);
|
|
4324
4367
|
}),
|
|
4325
4368
|
/** Stop a running process */
|
|
4326
|
-
stop: protectedProcedure.input(
|
|
4369
|
+
stop: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4327
4370
|
console.log(`[agent] stop service=${input.id}`);
|
|
4328
4371
|
await processManager.stop(input.id);
|
|
4329
4372
|
return processManager.getStatus(input.id);
|
|
4330
4373
|
}),
|
|
4331
4374
|
/** Restart a process */
|
|
4332
|
-
restart: protectedProcedure.input(
|
|
4375
|
+
restart: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(async ({ input }) => {
|
|
4333
4376
|
console.log(`[agent] restart service=${input.id}`);
|
|
4334
4377
|
await processManager.restart(input.id);
|
|
4335
4378
|
return processManager.getStatus(input.id);
|
|
4336
4379
|
}),
|
|
4337
4380
|
/** Get buffered logs for a process */
|
|
4338
|
-
logs: protectedProcedure.input(
|
|
4381
|
+
logs: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(({ input }) => {
|
|
4339
4382
|
const logs = processManager.getLogs(input.id);
|
|
4340
4383
|
return logs;
|
|
4341
4384
|
}),
|
|
4342
4385
|
/** Clear buffered logs for a process */
|
|
4343
|
-
clearLogBuffer: protectedProcedure.input(
|
|
4386
|
+
clearLogBuffer: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).mutation(({ input }) => {
|
|
4344
4387
|
processManager.clearLogBuffer(input.id);
|
|
4345
4388
|
return { success: true };
|
|
4346
4389
|
}),
|
|
4347
4390
|
/** Execute a shortcut command and stream output into the process log */
|
|
4348
|
-
executeShortcut: protectedProcedure.input(
|
|
4391
|
+
executeShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcut: ServiceShortcutSchema })).mutation(async ({ input }) => {
|
|
4349
4392
|
const result = await processManager.executeShortcut(input.id, input.shortcut);
|
|
4350
4393
|
return result;
|
|
4351
4394
|
}),
|
|
4352
4395
|
/** Cancel a running shortcut command */
|
|
4353
|
-
cancelShortcut: protectedProcedure.input(
|
|
4396
|
+
cancelShortcut: protectedProcedure.input(z23.object({ id: z23.string().max(128), shortcutId: z23.string().max(128) })).mutation(({ input }) => {
|
|
4354
4397
|
processManager.cancelShortcut(input.id, input.shortcutId);
|
|
4355
4398
|
return { success: true };
|
|
4356
4399
|
}),
|
|
4357
4400
|
/** Cancel a running ad-hoc command */
|
|
4358
|
-
cancelAdHocCommand: protectedProcedure.input(
|
|
4401
|
+
cancelAdHocCommand: protectedProcedure.input(z23.object({ id: z23.string().max(128), commandId: z23.string().max(128).optional() })).mutation(({ input }) => {
|
|
4359
4402
|
processManager.cancelAdHocCommand(input.id, input.commandId);
|
|
4360
4403
|
return { success: true };
|
|
4361
4404
|
}),
|
|
4362
4405
|
/** Execute an ad-hoc command and stream output into the process log */
|
|
4363
|
-
executeAdHocCommand: protectedProcedure.input(
|
|
4364
|
-
id:
|
|
4365
|
-
command:
|
|
4366
|
-
cwd:
|
|
4367
|
-
commandId:
|
|
4406
|
+
executeAdHocCommand: protectedProcedure.input(z23.object({
|
|
4407
|
+
id: z23.string().max(128),
|
|
4408
|
+
command: z23.string().min(1).max(4096),
|
|
4409
|
+
cwd: z23.string().max(4096).optional(),
|
|
4410
|
+
commandId: z23.string().max(128).optional()
|
|
4368
4411
|
})).mutation(async ({ input }) => {
|
|
4369
4412
|
const result = await processManager.executeAdHocCommand(input.id, input.command, input.cwd, input.commandId);
|
|
4370
4413
|
return result;
|
|
4371
4414
|
}),
|
|
4372
4415
|
/** List active log source types for a process */
|
|
4373
|
-
logSources: protectedProcedure.input(
|
|
4416
|
+
logSources: protectedProcedure.input(z23.object({ processId: z23.string().max(128) })).query(({ input }) => {
|
|
4374
4417
|
return processManager.getLogSourceTypes(input.processId);
|
|
4375
4418
|
}),
|
|
4376
4419
|
/** Get current metrics for a process */
|
|
4377
|
-
metrics: protectedProcedure.input(
|
|
4420
|
+
metrics: protectedProcedure.input(z23.object({ id: z23.string().max(128) })).query(async ({ input }) => {
|
|
4378
4421
|
return processManager.getMetrics(input.id);
|
|
4379
4422
|
}),
|
|
4380
4423
|
/** Subscribe to real-time log stream (yields batches of ParsedLog[]) */
|
|
4381
|
-
onLog: protectedProcedure.input(
|
|
4424
|
+
onLog: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4382
4425
|
const queue = [];
|
|
4383
4426
|
let resolve2 = null;
|
|
4384
4427
|
const handler = (batch) => {
|
|
@@ -4407,7 +4450,7 @@ var processRouter = router({
|
|
|
4407
4450
|
}
|
|
4408
4451
|
}),
|
|
4409
4452
|
/** Subscribe to real-time status changes */
|
|
4410
|
-
onStatus: protectedProcedure.input(
|
|
4453
|
+
onStatus: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4411
4454
|
console.debug("[agent] onStatus subscription started", input?.processId ? `for process ${input.processId}` : "(all processes)");
|
|
4412
4455
|
const queue = [];
|
|
4413
4456
|
let resolve2 = null;
|
|
@@ -4439,7 +4482,7 @@ var processRouter = router({
|
|
|
4439
4482
|
}
|
|
4440
4483
|
}),
|
|
4441
4484
|
/** Subscribe to real-time health status changes */
|
|
4442
|
-
onHealth: protectedProcedure.input(
|
|
4485
|
+
onHealth: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4443
4486
|
const queue = [];
|
|
4444
4487
|
let resolve2 = null;
|
|
4445
4488
|
const handler = (healthData) => {
|
|
@@ -4469,7 +4512,7 @@ var processRouter = router({
|
|
|
4469
4512
|
}
|
|
4470
4513
|
}),
|
|
4471
4514
|
/** Subscribe to real-time metrics */
|
|
4472
|
-
onMetrics: protectedProcedure.input(
|
|
4515
|
+
onMetrics: protectedProcedure.input(z23.object({ processId: z23.string().max(128).optional() }).optional()).subscription(async function* ({ input }) {
|
|
4473
4516
|
const queue = [];
|
|
4474
4517
|
let resolve2 = null;
|
|
4475
4518
|
const handler = (metrics) => {
|
|
@@ -4543,7 +4586,7 @@ var healthRouter = router({
|
|
|
4543
4586
|
});
|
|
4544
4587
|
|
|
4545
4588
|
// src/trpc/routers/terminal.ts
|
|
4546
|
-
import { z as
|
|
4589
|
+
import { z as z24 } from "zod";
|
|
4547
4590
|
import { TRPCError as TRPCError3 } from "@trpc/server";
|
|
4548
4591
|
|
|
4549
4592
|
// src/services/terminal-manager.ts
|
|
@@ -4636,11 +4679,11 @@ var terminalManager = new TerminalManager();
|
|
|
4636
4679
|
// src/trpc/routers/terminal.ts
|
|
4637
4680
|
var terminalRouter = router({
|
|
4638
4681
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
4639
|
-
create: protectedProcedure.input(
|
|
4640
|
-
cwd:
|
|
4641
|
-
cols:
|
|
4642
|
-
rows:
|
|
4643
|
-
title:
|
|
4682
|
+
create: protectedProcedure.input(z24.object({
|
|
4683
|
+
cwd: z24.string().max(512).optional(),
|
|
4684
|
+
cols: z24.number().int().min(1).max(512).optional(),
|
|
4685
|
+
rows: z24.number().int().min(1).max(256).optional(),
|
|
4686
|
+
title: z24.string().max(128).optional()
|
|
4644
4687
|
})).mutation(({ input }) => {
|
|
4645
4688
|
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
4646
4689
|
return { sessionId };
|
|
@@ -4648,34 +4691,34 @@ var terminalRouter = router({
|
|
|
4648
4691
|
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
4649
4692
|
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
4650
4693
|
/** Renommer un onglet */
|
|
4651
|
-
rename: protectedProcedure.input(
|
|
4694
|
+
rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
|
|
4652
4695
|
terminalManager.rename(input.sessionId, input.title);
|
|
4653
4696
|
return { ok: true };
|
|
4654
4697
|
}),
|
|
4655
4698
|
/** Write data (keystrokes) to a PTY session */
|
|
4656
|
-
write: protectedProcedure.input(
|
|
4699
|
+
write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
|
|
4657
4700
|
terminalManager.write(input.sessionId, input.data);
|
|
4658
4701
|
return { ok: true };
|
|
4659
4702
|
}),
|
|
4660
4703
|
/** Resize a PTY session */
|
|
4661
|
-
resize: protectedProcedure.input(
|
|
4662
|
-
sessionId:
|
|
4663
|
-
cols:
|
|
4664
|
-
rows:
|
|
4704
|
+
resize: protectedProcedure.input(z24.object({
|
|
4705
|
+
sessionId: z24.string().max(128),
|
|
4706
|
+
cols: z24.number().int().min(1).max(512),
|
|
4707
|
+
rows: z24.number().int().min(1).max(256)
|
|
4665
4708
|
})).mutation(({ input }) => {
|
|
4666
4709
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
4667
4710
|
return { ok: true };
|
|
4668
4711
|
}),
|
|
4669
4712
|
/** Destroy a PTY session */
|
|
4670
|
-
destroy: protectedProcedure.input(
|
|
4713
|
+
destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
|
|
4671
4714
|
terminalManager.destroy(input.sessionId);
|
|
4672
4715
|
return { ok: true };
|
|
4673
4716
|
}),
|
|
4674
4717
|
/** Stream PTY output for a session (async generator subscription) */
|
|
4675
|
-
onData: protectedProcedure.input(
|
|
4676
|
-
sessionId:
|
|
4718
|
+
onData: protectedProcedure.input(z24.object({
|
|
4719
|
+
sessionId: z24.string().max(128),
|
|
4677
4720
|
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
4678
|
-
replay:
|
|
4721
|
+
replay: z24.boolean().optional()
|
|
4679
4722
|
})).subscription(async function* ({ input }) {
|
|
4680
4723
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
4681
4724
|
if (!emitter) {
|
|
@@ -4720,7 +4763,7 @@ var terminalRouter = router({
|
|
|
4720
4763
|
});
|
|
4721
4764
|
|
|
4722
4765
|
// src/trpc/routers/git.ts
|
|
4723
|
-
import { z as
|
|
4766
|
+
import { z as z25 } from "zod";
|
|
4724
4767
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
4725
4768
|
import { execFile as execFile4, spawn as spawn3 } from "child_process";
|
|
4726
4769
|
import { promisify as promisify2 } from "util";
|
|
@@ -4730,12 +4773,12 @@ import { join as join4, resolve as resolvePath } from "path";
|
|
|
4730
4773
|
var execFileAsync2 = promisify2(execFile4);
|
|
4731
4774
|
var GIT_TIMEOUT = 15e3;
|
|
4732
4775
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
4733
|
-
var CWD_SCHEMA =
|
|
4734
|
-
var SAFE_PATH_SCHEMA =
|
|
4776
|
+
var CWD_SCHEMA = z25.string().min(1).max(4096);
|
|
4777
|
+
var SAFE_PATH_SCHEMA = z25.string().min(1).max(4096).refine((p) => !p.startsWith("/") && !p.includes("../"), {
|
|
4735
4778
|
message: "Path must be relative and not traverse up"
|
|
4736
4779
|
});
|
|
4737
|
-
var REMOTE_SCHEMA =
|
|
4738
|
-
var BRANCH_SCHEMA =
|
|
4780
|
+
var REMOTE_SCHEMA = z25.string().min(1).max(128).regex(/^[a-zA-Z0-9_\-.]+$/);
|
|
4781
|
+
var BRANCH_SCHEMA = z25.string().min(1).max(256).regex(/^[a-zA-Z0-9._\-/]+$/);
|
|
4739
4782
|
function gitSafeEnv() {
|
|
4740
4783
|
const env2 = {
|
|
4741
4784
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -4853,10 +4896,10 @@ async function getGitStatus(cwd) {
|
|
|
4853
4896
|
}
|
|
4854
4897
|
var gitRouter = router({
|
|
4855
4898
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
4856
|
-
checkCwd: protectedProcedure.input(
|
|
4899
|
+
checkCwd: protectedProcedure.input(z25.object({
|
|
4857
4900
|
cwd: CWD_SCHEMA,
|
|
4858
|
-
remote:
|
|
4859
|
-
checkReachability:
|
|
4901
|
+
remote: z25.string().max(2048).optional(),
|
|
4902
|
+
checkReachability: z25.boolean().optional()
|
|
4860
4903
|
})).query(async ({ input }) => {
|
|
4861
4904
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
4862
4905
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -4877,8 +4920,8 @@ var gitRouter = router({
|
|
|
4877
4920
|
return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
4878
4921
|
}),
|
|
4879
4922
|
/** Clone a git repository into a target directory */
|
|
4880
|
-
clone: protectedProcedure.input(
|
|
4881
|
-
remote:
|
|
4923
|
+
clone: protectedProcedure.input(z25.object({
|
|
4924
|
+
remote: z25.string().min(1).max(2048),
|
|
4882
4925
|
cwd: CWD_SCHEMA
|
|
4883
4926
|
})).mutation(async ({ input }) => {
|
|
4884
4927
|
const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
|
|
@@ -4899,13 +4942,13 @@ var gitRouter = router({
|
|
|
4899
4942
|
return { success: true };
|
|
4900
4943
|
}),
|
|
4901
4944
|
/** Get full git status */
|
|
4902
|
-
status: protectedProcedure.input(
|
|
4945
|
+
status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4903
4946
|
const cwd = assertCwdExists(input.cwd);
|
|
4904
4947
|
await assertGitRepo(cwd);
|
|
4905
4948
|
return getGitStatus(cwd);
|
|
4906
4949
|
}),
|
|
4907
4950
|
/** Watch .git/ for changes and stream updated status */
|
|
4908
|
-
onStatusChange: protectedProcedure.input(
|
|
4951
|
+
onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
4909
4952
|
const cwd = assertCwdExists(input.cwd);
|
|
4910
4953
|
await assertGitRepo(cwd);
|
|
4911
4954
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -4956,7 +4999,7 @@ var gitRouter = router({
|
|
|
4956
4999
|
}
|
|
4957
5000
|
}),
|
|
4958
5001
|
/** Get commit log */
|
|
4959
|
-
log: protectedProcedure.input(
|
|
5002
|
+
log: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, limit: z25.number().int().min(1).max(200).default(50) })).query(async ({ input }) => {
|
|
4960
5003
|
const cwd = assertCwdExists(input.cwd);
|
|
4961
5004
|
await assertGitRepo(cwd);
|
|
4962
5005
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -4967,7 +5010,7 @@ var gitRouter = router({
|
|
|
4967
5010
|
});
|
|
4968
5011
|
}),
|
|
4969
5012
|
/** List local and remote branches */
|
|
4970
|
-
branches: protectedProcedure.input(
|
|
5013
|
+
branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4971
5014
|
const cwd = assertCwdExists(input.cwd);
|
|
4972
5015
|
await assertGitRepo(cwd);
|
|
4973
5016
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -4979,7 +5022,7 @@ var gitRouter = router({
|
|
|
4979
5022
|
return { current, branches };
|
|
4980
5023
|
}),
|
|
4981
5024
|
/** Checkout a branch */
|
|
4982
|
-
checkout: protectedProcedure.input(
|
|
5025
|
+
checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
4983
5026
|
const cwd = assertCwdExists(input.cwd);
|
|
4984
5027
|
await assertGitRepo(cwd);
|
|
4985
5028
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -4987,42 +5030,42 @@ var gitRouter = router({
|
|
|
4987
5030
|
return { ok: true };
|
|
4988
5031
|
}),
|
|
4989
5032
|
/** Stage files */
|
|
4990
|
-
stage: protectedProcedure.input(
|
|
5033
|
+
stage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
4991
5034
|
const cwd = assertCwdExists(input.cwd);
|
|
4992
5035
|
await assertGitRepo(cwd);
|
|
4993
5036
|
await git(["add", "--", ...input.paths], cwd);
|
|
4994
5037
|
return { ok: true };
|
|
4995
5038
|
}),
|
|
4996
5039
|
/** Stage all files */
|
|
4997
|
-
stageAll: protectedProcedure.input(
|
|
5040
|
+
stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
4998
5041
|
const cwd = assertCwdExists(input.cwd);
|
|
4999
5042
|
await assertGitRepo(cwd);
|
|
5000
5043
|
await git(["add", "-A"], cwd);
|
|
5001
5044
|
return { ok: true };
|
|
5002
5045
|
}),
|
|
5003
5046
|
/** Unstage files */
|
|
5004
|
-
unstage: protectedProcedure.input(
|
|
5047
|
+
unstage: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5005
5048
|
const cwd = assertCwdExists(input.cwd);
|
|
5006
5049
|
await assertGitRepo(cwd);
|
|
5007
5050
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
5008
5051
|
return { ok: true };
|
|
5009
5052
|
}),
|
|
5010
5053
|
/** Unstage all files */
|
|
5011
|
-
unstageAll: protectedProcedure.input(
|
|
5054
|
+
unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
5012
5055
|
const cwd = assertCwdExists(input.cwd);
|
|
5013
5056
|
await assertGitRepo(cwd);
|
|
5014
5057
|
await git(["reset", "--"], cwd);
|
|
5015
5058
|
return { ok: true };
|
|
5016
5059
|
}),
|
|
5017
5060
|
/** Commit staged changes */
|
|
5018
|
-
commit: protectedProcedure.input(
|
|
5061
|
+
commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
5019
5062
|
const cwd = assertCwdExists(input.cwd);
|
|
5020
5063
|
await assertGitRepo(cwd);
|
|
5021
5064
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
5022
5065
|
return { ok: true, output: output.trim() };
|
|
5023
5066
|
}),
|
|
5024
5067
|
/** Push to remote */
|
|
5025
|
-
push: protectedProcedure.input(
|
|
5068
|
+
push: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin"), setUpstream: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5026
5069
|
const cwd = assertCwdExists(input.cwd);
|
|
5027
5070
|
await assertGitRepo(cwd);
|
|
5028
5071
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -5031,25 +5074,25 @@ var gitRouter = router({
|
|
|
5031
5074
|
return { ok: true, output: output.trim() };
|
|
5032
5075
|
}),
|
|
5033
5076
|
/** Pull from remote */
|
|
5034
|
-
pull: protectedProcedure.input(
|
|
5077
|
+
pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5035
5078
|
const cwd = assertCwdExists(input.cwd);
|
|
5036
5079
|
await assertGitRepo(cwd);
|
|
5037
5080
|
const output = await git(["pull", input.remote], cwd);
|
|
5038
5081
|
return { ok: true, output: output.trim() };
|
|
5039
5082
|
}),
|
|
5040
5083
|
/** Fetch from remote */
|
|
5041
|
-
fetch: protectedProcedure.input(
|
|
5084
|
+
fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
5042
5085
|
const cwd = assertCwdExists(input.cwd);
|
|
5043
5086
|
await assertGitRepo(cwd);
|
|
5044
5087
|
const output = await git(["fetch", input.remote], cwd);
|
|
5045
5088
|
return { ok: true, output: output.trim() };
|
|
5046
5089
|
}),
|
|
5047
5090
|
/** Get diff for a file or the whole index */
|
|
5048
|
-
diff: protectedProcedure.input(
|
|
5091
|
+
diff: protectedProcedure.input(z25.object({
|
|
5049
5092
|
cwd: CWD_SCHEMA,
|
|
5050
|
-
path:
|
|
5051
|
-
staged:
|
|
5052
|
-
untracked:
|
|
5093
|
+
path: z25.string().max(4096).optional(),
|
|
5094
|
+
staged: z25.boolean().default(false),
|
|
5095
|
+
untracked: z25.boolean().default(false)
|
|
5053
5096
|
})).query(async ({ input }) => {
|
|
5054
5097
|
const cwd = assertCwdExists(input.cwd);
|
|
5055
5098
|
await assertGitRepo(cwd);
|
|
@@ -5097,21 +5140,21 @@ var gitRouter = router({
|
|
|
5097
5140
|
};
|
|
5098
5141
|
}),
|
|
5099
5142
|
/** Discard changes to working tree files */
|
|
5100
|
-
discard: protectedProcedure.input(
|
|
5143
|
+
discard: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, paths: z25.array(SAFE_PATH_SCHEMA).min(1).max(500) })).mutation(async ({ input }) => {
|
|
5101
5144
|
const cwd = assertCwdExists(input.cwd);
|
|
5102
5145
|
await assertGitRepo(cwd);
|
|
5103
5146
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5104
5147
|
return { ok: true };
|
|
5105
5148
|
}),
|
|
5106
5149
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5107
|
-
stagedDiff: protectedProcedure.input(
|
|
5150
|
+
stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5108
5151
|
const cwd = assertCwdExists(input.cwd);
|
|
5109
5152
|
await assertGitRepo(cwd);
|
|
5110
5153
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5111
5154
|
return { diff: diff.slice(0, 3e4) };
|
|
5112
5155
|
}),
|
|
5113
5156
|
/** Merge a branch into the current branch */
|
|
5114
|
-
merge: protectedProcedure.input(
|
|
5157
|
+
merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5115
5158
|
const cwd = assertCwdExists(input.cwd);
|
|
5116
5159
|
await assertGitRepo(cwd);
|
|
5117
5160
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5119,14 +5162,14 @@ var gitRouter = router({
|
|
|
5119
5162
|
return { ok: true, output: output.trim() };
|
|
5120
5163
|
}),
|
|
5121
5164
|
/** Rebase current branch onto another branch */
|
|
5122
|
-
rebase: protectedProcedure.input(
|
|
5165
|
+
rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5123
5166
|
const cwd = assertCwdExists(input.cwd);
|
|
5124
5167
|
await assertGitRepo(cwd);
|
|
5125
5168
|
const output = await git(["rebase", input.branch], cwd);
|
|
5126
5169
|
return { ok: true, output: output.trim() };
|
|
5127
5170
|
}),
|
|
5128
5171
|
/** List remotes */
|
|
5129
|
-
remotes: protectedProcedure.input(
|
|
5172
|
+
remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5130
5173
|
const cwd = assertCwdExists(input.cwd);
|
|
5131
5174
|
await assertGitRepo(cwd);
|
|
5132
5175
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5144,7 +5187,7 @@ var gitRouter = router({
|
|
|
5144
5187
|
return remotes;
|
|
5145
5188
|
}),
|
|
5146
5189
|
/** List stash entries */
|
|
5147
|
-
stashList: protectedProcedure.input(
|
|
5190
|
+
stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5148
5191
|
const cwd = assertCwdExists(input.cwd);
|
|
5149
5192
|
await assertGitRepo(cwd);
|
|
5150
5193
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5157,10 +5200,10 @@ var gitRouter = router({
|
|
|
5157
5200
|
return entries;
|
|
5158
5201
|
}),
|
|
5159
5202
|
/** Stash current changes */
|
|
5160
|
-
stashPush: protectedProcedure.input(
|
|
5203
|
+
stashPush: protectedProcedure.input(z25.object({
|
|
5161
5204
|
cwd: CWD_SCHEMA,
|
|
5162
|
-
message:
|
|
5163
|
-
includeUntracked:
|
|
5205
|
+
message: z25.string().max(4096).optional(),
|
|
5206
|
+
includeUntracked: z25.boolean().default(true)
|
|
5164
5207
|
})).mutation(async ({ input }) => {
|
|
5165
5208
|
const cwd = assertCwdExists(input.cwd);
|
|
5166
5209
|
await assertGitRepo(cwd);
|
|
@@ -5171,21 +5214,21 @@ var gitRouter = router({
|
|
|
5171
5214
|
return { ok: true, output: output.trim() };
|
|
5172
5215
|
}),
|
|
5173
5216
|
/** Apply a stash entry and remove it from the list */
|
|
5174
|
-
stashPop: protectedProcedure.input(
|
|
5217
|
+
stashPop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5175
5218
|
const cwd = assertCwdExists(input.cwd);
|
|
5176
5219
|
await assertGitRepo(cwd);
|
|
5177
5220
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5178
5221
|
return { ok: true, output: output.trim() };
|
|
5179
5222
|
}),
|
|
5180
5223
|
/** Apply a stash entry without removing it from the list */
|
|
5181
|
-
stashApply: protectedProcedure.input(
|
|
5224
|
+
stashApply: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5182
5225
|
const cwd = assertCwdExists(input.cwd);
|
|
5183
5226
|
await assertGitRepo(cwd);
|
|
5184
5227
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5185
5228
|
return { ok: true, output: output.trim() };
|
|
5186
5229
|
}),
|
|
5187
5230
|
/** Drop a stash entry */
|
|
5188
|
-
stashDrop: protectedProcedure.input(
|
|
5231
|
+
stashDrop: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, index: z25.number().int().min(0).max(1e3).default(0) })).mutation(async ({ input }) => {
|
|
5189
5232
|
const cwd = assertCwdExists(input.cwd);
|
|
5190
5233
|
await assertGitRepo(cwd);
|
|
5191
5234
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5218,7 +5261,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5218
5261
|
}
|
|
5219
5262
|
|
|
5220
5263
|
// src/trpc/routers/ai.ts
|
|
5221
|
-
import { z as
|
|
5264
|
+
import { z as z26 } from "zod";
|
|
5222
5265
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5223
5266
|
|
|
5224
5267
|
// src/services/ai-spawn-manager.ts
|
|
@@ -5933,23 +5976,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
5933
5976
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
5934
5977
|
var aiRouter = router({
|
|
5935
5978
|
/** 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:
|
|
5979
|
+
spawn: protectedProcedure.input(z26.object({
|
|
5980
|
+
cli: z26.string().max(64),
|
|
5981
|
+
args: z26.array(z26.string().max(5e5)),
|
|
5982
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
|
|
5983
|
+
cwd: z26.string().max(4096).optional(),
|
|
5984
|
+
stdinData: z26.string().max(1e7).optional(),
|
|
5985
|
+
enableMcp: z26.boolean().optional(),
|
|
5986
|
+
mcpApiBaseUrl: z26.string().max(512).optional(),
|
|
5987
|
+
mcpApiToken: z26.string().max(8192).optional()
|
|
5945
5988
|
})).mutation(({ input }) => {
|
|
5946
5989
|
const spawnId = aiSpawnManager.spawn(input);
|
|
5947
5990
|
return { spawnId };
|
|
5948
5991
|
}),
|
|
5949
5992
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
5950
|
-
stream: protectedProcedure.input(
|
|
5951
|
-
spawnId:
|
|
5952
|
-
fromOffset:
|
|
5993
|
+
stream: protectedProcedure.input(z26.object({
|
|
5994
|
+
spawnId: z26.string().max(128),
|
|
5995
|
+
fromOffset: z26.number().int().min(0).default(0)
|
|
5953
5996
|
})).subscription(async function* ({ input }) {
|
|
5954
5997
|
try {
|
|
5955
5998
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -5963,39 +6006,39 @@ var aiRouter = router({
|
|
|
5963
6006
|
}
|
|
5964
6007
|
}),
|
|
5965
6008
|
/** 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:
|
|
6009
|
+
spawnPty: protectedProcedure.input(z26.object({
|
|
6010
|
+
cli: z26.string().max(64),
|
|
6011
|
+
args: z26.array(z26.string().max(5e5)),
|
|
6012
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional(),
|
|
6013
|
+
cwd: z26.string().max(4096).optional(),
|
|
6014
|
+
cols: z26.number().int().min(1).max(1e3).optional(),
|
|
6015
|
+
rows: z26.number().int().min(1).max(1e3).optional(),
|
|
6016
|
+
sessionId: z26.string().max(128).optional(),
|
|
6017
|
+
enableMcp: z26.boolean().optional(),
|
|
6018
|
+
mcpApiBaseUrl: z26.string().max(512).optional(),
|
|
6019
|
+
mcpApiToken: z26.string().max(8192).optional()
|
|
5977
6020
|
})).mutation(({ input }) => {
|
|
5978
6021
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
5979
6022
|
return { spawnId };
|
|
5980
6023
|
}),
|
|
5981
6024
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
5982
|
-
findPtyBySession: protectedProcedure.input(
|
|
6025
|
+
findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
|
|
5983
6026
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
5984
6027
|
}),
|
|
5985
6028
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
5986
|
-
writePty: protectedProcedure.input(
|
|
5987
|
-
spawnId:
|
|
5988
|
-
data:
|
|
6029
|
+
writePty: protectedProcedure.input(z26.object({
|
|
6030
|
+
spawnId: z26.string().max(128),
|
|
6031
|
+
data: z26.string().max(1e6)
|
|
5989
6032
|
})).mutation(({ input }) => {
|
|
5990
6033
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
5991
6034
|
return { ok };
|
|
5992
6035
|
}),
|
|
5993
6036
|
/** 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:
|
|
6037
|
+
writeContextFiles: protectedProcedure.input(z26.object({
|
|
6038
|
+
sessionId: z26.string().min(1).max(128),
|
|
6039
|
+
files: z26.array(z26.object({
|
|
6040
|
+
name: z26.string().min(1).max(256),
|
|
6041
|
+
content: z26.string().max(MAX_CONTEXT_FILE_BYTES)
|
|
5999
6042
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
6000
6043
|
}).refine(
|
|
6001
6044
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -6010,25 +6053,25 @@ var aiRouter = router({
|
|
|
6010
6053
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
6011
6054
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
6012
6055
|
*/
|
|
6013
|
-
pasteImage: protectedProcedure.input(
|
|
6014
|
-
sessionId:
|
|
6015
|
-
mimeType:
|
|
6016
|
-
base64:
|
|
6056
|
+
pasteImage: protectedProcedure.input(z26.object({
|
|
6057
|
+
sessionId: z26.string().max(128).optional(),
|
|
6058
|
+
mimeType: z26.string().max(64),
|
|
6059
|
+
base64: z26.string().max(15e6)
|
|
6017
6060
|
})).mutation(async ({ input }) => {
|
|
6018
6061
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
6019
6062
|
return res;
|
|
6020
6063
|
}),
|
|
6021
6064
|
/** Resize a PTY spawn. */
|
|
6022
|
-
resizePty: protectedProcedure.input(
|
|
6023
|
-
spawnId:
|
|
6024
|
-
cols:
|
|
6025
|
-
rows:
|
|
6065
|
+
resizePty: protectedProcedure.input(z26.object({
|
|
6066
|
+
spawnId: z26.string().max(128),
|
|
6067
|
+
cols: z26.number().int().min(1).max(1e3),
|
|
6068
|
+
rows: z26.number().int().min(1).max(1e3)
|
|
6026
6069
|
})).mutation(({ input }) => {
|
|
6027
6070
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
6028
6071
|
return { ok };
|
|
6029
6072
|
}),
|
|
6030
6073
|
/** Kill a running AI spawn. */
|
|
6031
|
-
kill: protectedProcedure.input(
|
|
6074
|
+
kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
6032
6075
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
6033
6076
|
return { ok: killed };
|
|
6034
6077
|
}),
|
|
@@ -6037,23 +6080,23 @@ var aiRouter = router({
|
|
|
6037
6080
|
return aiSpawnManager.list();
|
|
6038
6081
|
}),
|
|
6039
6082
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
6040
|
-
ack: protectedProcedure.input(
|
|
6083
|
+
ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
6041
6084
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
6042
6085
|
return { ok: acked };
|
|
6043
6086
|
}),
|
|
6044
6087
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
6045
|
-
codexRequest: protectedProcedure.input(
|
|
6046
|
-
method:
|
|
6047
|
-
params:
|
|
6048
|
-
env:
|
|
6088
|
+
codexRequest: protectedProcedure.input(z26.object({
|
|
6089
|
+
method: z26.string().max(256),
|
|
6090
|
+
params: z26.record(z26.string(), z26.unknown()).default({}),
|
|
6091
|
+
env: z26.record(z26.string().max(256), z26.string().max(5e5)).optional()
|
|
6049
6092
|
})).mutation(async ({ input }) => {
|
|
6050
6093
|
await codexAppServerManager.ensureConnected(input.env);
|
|
6051
6094
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
6052
6095
|
return { result };
|
|
6053
6096
|
}),
|
|
6054
6097
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6055
|
-
codexNotifications: protectedProcedure.input(
|
|
6056
|
-
threadId:
|
|
6098
|
+
codexNotifications: protectedProcedure.input(z26.object({
|
|
6099
|
+
threadId: z26.string().max(256).optional()
|
|
6057
6100
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6058
6101
|
await codexAppServerManager.ensureConnected();
|
|
6059
6102
|
const queue = [];
|
|
@@ -6090,13 +6133,13 @@ var aiRouter = router({
|
|
|
6090
6133
|
});
|
|
6091
6134
|
|
|
6092
6135
|
// src/trpc/routers/wiki.ts
|
|
6093
|
-
import { z as
|
|
6136
|
+
import { z as z27 } from "zod";
|
|
6094
6137
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6095
6138
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6096
6139
|
import { dirname as dirname2 } from "path";
|
|
6097
6140
|
import { resolve as resolvePath3, join as join5, relative, sep } from "path";
|
|
6098
|
-
var CWD_SCHEMA2 =
|
|
6099
|
-
var REL_PATH_SCHEMA =
|
|
6141
|
+
var CWD_SCHEMA2 = z27.string().min(1).max(4096);
|
|
6142
|
+
var REL_PATH_SCHEMA = z27.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
|
|
6100
6143
|
message: "Path must be a relative path without traversal"
|
|
6101
6144
|
});
|
|
6102
6145
|
var MAX_FILES = 500;
|
|
@@ -6116,9 +6159,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6116
6159
|
"target",
|
|
6117
6160
|
"out"
|
|
6118
6161
|
]);
|
|
6119
|
-
var RepoEntrySchema =
|
|
6120
|
-
|
|
6121
|
-
|
|
6162
|
+
var RepoEntrySchema = z27.lazy(() => z27.union([
|
|
6163
|
+
z27.object({ type: z27.literal("file"), name: z27.string(), path: z27.string() }),
|
|
6164
|
+
z27.object({ type: z27.literal("dir"), name: z27.string(), path: z27.string(), children: z27.array(RepoEntrySchema) })
|
|
6122
6165
|
]));
|
|
6123
6166
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6124
6167
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6188,13 +6231,13 @@ async function resolveRoot(cwd) {
|
|
|
6188
6231
|
}
|
|
6189
6232
|
}
|
|
6190
6233
|
var wikiRouter = router({
|
|
6191
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6234
|
+
listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6192
6235
|
const root = await resolveRoot(input.cwd);
|
|
6193
6236
|
const counter = { n: 0 };
|
|
6194
6237
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6195
6238
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6196
6239
|
}),
|
|
6197
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6240
|
+
readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6198
6241
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6199
6242
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6200
6243
|
}
|
|
@@ -6220,10 +6263,10 @@ var wikiRouter = router({
|
|
|
6220
6263
|
const content = await readFile2(realTarget, "utf-8");
|
|
6221
6264
|
return { path: input.path, content };
|
|
6222
6265
|
}),
|
|
6223
|
-
writeMarkdown: protectedProcedure.input(
|
|
6266
|
+
writeMarkdown: protectedProcedure.input(z27.object({
|
|
6224
6267
|
cwd: CWD_SCHEMA2,
|
|
6225
6268
|
path: REL_PATH_SCHEMA,
|
|
6226
|
-
content:
|
|
6269
|
+
content: z27.string().max(5e6)
|
|
6227
6270
|
})).mutation(async ({ input }) => {
|
|
6228
6271
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6229
6272
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6234,7 +6277,7 @@ var wikiRouter = router({
|
|
|
6234
6277
|
await writeFile6(target, input.content, "utf-8");
|
|
6235
6278
|
return { path: input.path, ok: true };
|
|
6236
6279
|
}),
|
|
6237
|
-
createFile: protectedProcedure.input(
|
|
6280
|
+
createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6238
6281
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6239
6282
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6240
6283
|
}
|
|
@@ -6250,13 +6293,13 @@ var wikiRouter = router({
|
|
|
6250
6293
|
await writeFile6(target, "", "utf-8");
|
|
6251
6294
|
return { path: input.path, ok: true };
|
|
6252
6295
|
}),
|
|
6253
|
-
createDir: protectedProcedure.input(
|
|
6296
|
+
createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6254
6297
|
const root = await resolveRoot(input.cwd);
|
|
6255
6298
|
const target = await resolveSafePath(root, input.path, false);
|
|
6256
6299
|
await mkdir6(target, { recursive: true });
|
|
6257
6300
|
return { path: input.path, ok: true };
|
|
6258
6301
|
}),
|
|
6259
|
-
renamePath: protectedProcedure.input(
|
|
6302
|
+
renamePath: protectedProcedure.input(z27.object({
|
|
6260
6303
|
cwd: CWD_SCHEMA2,
|
|
6261
6304
|
fromPath: REL_PATH_SCHEMA,
|
|
6262
6305
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6274,14 +6317,14 @@ var wikiRouter = router({
|
|
|
6274
6317
|
await rename2(from, to);
|
|
6275
6318
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6276
6319
|
}),
|
|
6277
|
-
ensureRoot: protectedProcedure.input(
|
|
6320
|
+
ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6278
6321
|
const expanded = expandEnvVar(input.cwd);
|
|
6279
6322
|
const abs = resolvePath3(expanded);
|
|
6280
6323
|
await mkdir6(abs, { recursive: true });
|
|
6281
6324
|
const root = await realpath(abs);
|
|
6282
6325
|
return { root, ok: true };
|
|
6283
6326
|
}),
|
|
6284
|
-
deletePath: protectedProcedure.input(
|
|
6327
|
+
deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6285
6328
|
const root = await resolveRoot(input.cwd);
|
|
6286
6329
|
const target = await resolveSafePath(root, input.path, true);
|
|
6287
6330
|
if (target === root) {
|