@runeya/runeya 2.0.70 → 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 +260 -164
- package/agent/index.js.map +1 -1
- package/agent-manager-YDLSYZE3.js +7 -0
- package/{chunk-YSJ6OJGN.js → chunk-HPYBAUAH.js} +409 -18
- 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-6WVQ2FQV.js → src-53OQNM27.js} +735 -633
- package/src-53OQNM27.js.map +1 -0
- package/web/assets/AgentScalarChatInterface.vue-DdIfThmp.js +13 -0
- package/web/assets/AgentTerminalPage-BD2w4XRc.css +1 -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-DUDLTmUd.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-DMxvJmDe.js → ProcessControls-BzMrd-2c.js} +1 -1
- package/web/assets/ProcessDetailPage-Rg5zyPYJ.js +1 -0
- package/web/assets/{ProcessMetrics-DK4Dgdb0.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-uCS5lY2z.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-CacrbinE.js → basic-shape-diamond.svg-CWwnQ30s.js} +1 -1
- package/web/assets/{basic-shape-hexagon.svg-GGJ54oyX.js → basic-shape-hexagon.svg-C9JMDUIK.js} +1 -1
- package/web/assets/{basic-shape-primary-circle-ellipse-round.svg-CuWfwdJM.js → basic-shape-primary-circle-ellipse-round.svg-Do0Ewbp-.js} +1 -1
- package/web/assets/{basic-shape-primary-square-rectangle.svg-C2Bewjip.js → basic-shape-primary-square-rectangle.svg-CRq767cD.js} +1 -1
- package/web/assets/{basic-shape-shield.svg-DNtg0KuJ.js → basic-shape-shield.svg-BuxJBs70.js} +1 -1
- package/web/assets/{browser-XO2fm4BX.js → browser-BEEW2obM.js} +1 -1
- package/web/assets/{browser-5NN8ieli.js → browser-BhZAIVa8.js} +1 -1
- package/web/assets/browser-DNbnH79q.js +6 -0
- package/web/assets/card-C1iS2wAN.js +32 -0
- package/web/assets/{checkbox-iq9mU5eP.js → checkbox-CCU9xze9.js} +3 -3
- package/web/assets/{chip-BsccUnHb.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-DSwpF_ss.js → computer-device-desktop-monitor.svg-XWEWhL0y.js} +1 -1
- package/web/assets/{computer-device-desktop.svg-Caj_PZBV.js → computer-device-desktop.svg-COkZClBv.js} +1 -1
- package/web/assets/{computer-device-laptop.svg-Bv3ienI_.js → computer-device-laptop.svg-C4EfJUqO.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung-back.svg-IWlhEKx_.js → computer-device-mobile-phone-android-samsung-back.svg-Bb2_2tyI.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-android-samsung.svg-CglQAFq2.js → computer-device-mobile-phone-android-samsung.svg-CEUhXP7K.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x-back.svg-CgjNnTTw.js → computer-device-mobile-phone-iphone-x-back.svg-B3rxizbE.js} +1 -1
- package/web/assets/{computer-device-mobile-phone-iphone-x.svg-CotZ-4M5.js → computer-device-mobile-phone-iphone-x.svg-BSKpZFCN.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet-touch.svg-B2cemd61.js → computer-device-mobile-tablet-touch.svg-CZvb3YX2.js} +1 -1
- package/web/assets/{computer-device-mobile-tablet.svg-8nPVs4u_.js → computer-device-mobile-tablet.svg-BM4_YZYi.js} +1 -1
- package/web/assets/{computer-device-network-ethernet-cat6.svg-Bl56Qw4v.js → computer-device-network-ethernet-cat6.svg-CK0v-Rjf.js} +1 -1
- package/web/assets/{computer-device-network-lan-www.svg-C_x6Rf8N.js → computer-device-network-lan-www.svg-DvhO71Lq.js} +1 -1
- package/web/assets/{computer-device-network-wifi-connection.svg-oz6dsDQB.js → computer-device-network-wifi-connection.svg--olUYsgv.js} +1 -1
- package/web/assets/{computer-device-network-wifi-router.svg-BciHU6Nj.js → computer-device-network-wifi-router.svg-D5HKSWTi.js} +1 -1
- package/web/assets/{cssMode-DSX5tYcm.js → cssMode-CTjKNOiX.js} +1 -1
- package/web/assets/{divider-DnPOdDs3.js → divider-VFAPax5_.js} +2 -2
- package/web/assets/docx-preview-gNYLz3FX.js +21 -0
- package/web/assets/{ecology-science-erlenmeyer-flask.svg-BzQP6y9L.js → ecology-science-erlenmeyer-flask.svg-THkDG-tj.js} +1 -1
- package/web/assets/{fieldset-D9lkV70l.js → fieldset-DZGy449H.js} +2 -2
- package/web/assets/{freemarker2-D9yXX9Vw.js → freemarker2-CNSvFpVF.js} +1 -1
- package/web/assets/{handlebars-BmcjEksL.js → handlebars-BeRu48NI.js} +1 -1
- package/web/assets/{html-BQF9vZLL.js → html-DrTiGPjE.js} +1 -1
- package/web/assets/{htmlMode-DxSRpgHE.js → htmlMode-DpbDpbjK.js} +1 -1
- package/web/assets/{image-flash-lightning.svg-DQX09uxo.js → image-flash-lightning.svg-DrkyfdIV.js} +1 -1
- package/web/assets/{image-picture-flower.svg-CUBdrnoc.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-enuBsJBa.js → index-y5bguEQB.js} +299 -299
- package/web/assets/{interface-alert-exclamation-diamond.svg-DXQdQSvN.js → interface-alert-exclamation-diamond.svg-B40BfW6d.js} +1 -1
- package/web/assets/{interface-alert-exclamation-triangle-warning.svg-BoCeNIlU.js → interface-alert-exclamation-triangle-warning.svg-DeIlksL4.js} +1 -1
- package/web/assets/{interface-alert-information-circle.svg-BCA57JL2.js → interface-alert-information-circle.svg-SwVdV-Z6.js} +1 -1
- package/web/assets/{interface-award-crown.svg-B1hTlsb0.js → interface-award-crown.svg-DZHf0EHC.js} +1 -1
- package/web/assets/{interface-bookmark.svg-zf3cIGKM.js → interface-bookmark-tag.svg-CiaV2Cjo.js} +1 -1
- package/web/assets/{interface-bookmark-tag.svg-AosfQ0Ip.js → interface-bookmark.svg-DBEqa-8W.js} +1 -1
- package/web/assets/{interface-calendar-date-one.svg-D58WqPie.js → interface-calendar-date-one.svg-C_afKyyz.js} +1 -1
- package/web/assets/{interface-content-book-open-pages.svg-B74HWMlw.js → interface-content-book-open-pages.svg-D5d9ilSu.js} +1 -1
- package/web/assets/{interface-content-book-page.svg-C2QWk62-.js → interface-content-book-page.svg-B6hlaLP5.js} +1 -1
- package/web/assets/{interface-content-file.svg-xKu0qAOQ.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-ZkrY9WkQ.js → interface-content-folder.svg-K7DTqQH-.js} +1 -1
- package/web/assets/{interface-copy-clipboard.svg-BEkNG3vO.js → interface-copy-clipboard.svg-BFQ6eajI.js} +1 -1
- package/web/assets/{interface-edit-attachment.svg-5ztQ3WTq.js → interface-edit-attachment.svg-B-LsB4cM.js} +1 -1
- package/web/assets/{interface-edit-binocular.svg-CC9U1Gnc.js → interface-edit-binocular.svg-CnVjKyrn.js} +1 -1
- package/web/assets/{interface-edit-magic-wand.svg-CPl6ZoE9.js → interface-edit-magic-wand.svg-CUY6vVJT.js} +1 -1
- package/web/assets/{interface-edit-tool-paint-roller.svg-B85t7jG2.js → interface-edit-tool-paint-roller.svg-B1tSdIxN.js} +1 -1
- package/web/assets/{interface-edit-tool-pencil.svg-BSTdqWUg.js → interface-edit-tool-pencil.svg-BHFULT75.js} +1 -1
- package/web/assets/{interface-favorite-award.svg-DbPr_WKt.js → interface-favorite-award.svg-CcOLoF8I.js} +1 -1
- package/web/assets/{interface-favorite-flag.svg-CgKYXc7k.js → interface-favorite-flag.svg-CAW6LmLW.js} +1 -1
- package/web/assets/{interface-favorite-heart.svg-DfnXyJMg.js → interface-favorite-heart.svg-BEz4zlNs.js} +1 -1
- package/web/assets/{interface-favorite-star.svg-0sT7jJMK.js → interface-favorite-star.svg-DKFuvYge.js} +1 -1
- package/web/assets/{interface-favorite-stars-sparkles.svg-BcM2EXgn.js → interface-favorite-stars-sparkles.svg-BfzccoPz.js} +1 -1
- package/web/assets/{interface-hierarchy-flowchart.svg-BM62WcKt.js → interface-hierarchy-flowchart.svg-BT8QX161.js} +1 -1
- package/web/assets/{interface-home-house.svg-KqP7iMC4.js → interface-home-house.svg-B264pTPi.js} +1 -1
- package/web/assets/{interface-hyperlink.svg-DBKFbihR.js → interface-hyperlink.svg-DhUgNKkr.js} +1 -1
- package/web/assets/{interface-lighting-brightness.svg-DTkCS7PY.js → interface-lighting-brightness.svg-CPKb40uB.js} +1 -1
- package/web/assets/{interface-lock-closed.svg-Div5xlvI.js → interface-lock-closed.svg-CvXhgCtt.js} +1 -1
- package/web/assets/{interface-lock-open-unlock.svg-Du5L_iMV.js → interface-lock-open-unlock.svg-B0PMKRhP.js} +1 -1
- package/web/assets/{interface-login-key.svg-28TYVVzH.js → interface-login-key.svg-DJUm3vhg.js} +1 -1
- package/web/assets/{interface-search.svg-BS_owhIG.js → interface-search.svg-ByW98ez_.js} +1 -1
- package/web/assets/{interface-setting-cog.svg-afYc0TQv.js → interface-setting-cog.svg-DYOmJ9It.js} +1 -1
- package/web/assets/{interface-share-megaphone-bullhorn.svg-BnW8HhjG.js → interface-share-megaphone-bullhorn.svg-YOCUHa3i.js} +1 -1
- package/web/assets/{interface-share-rocket.svg-DvX_9178.js → interface-share-rocket.svg-C5kj5dSu.js} +1 -1
- package/web/assets/{interface-share-satellite.svg-B4nQqv6w.js → interface-share-satellite.svg-C0svPxG6.js} +1 -1
- package/web/assets/{interface-share-space-ship.svg-Ciol-6JO.js → interface-share-space-ship.svg-8Nw02n1Q.js} +1 -1
- package/web/assets/{interface-share.svg-COm1OVr8.js → interface-share.svg-eDW294tn.js} +1 -1
- package/web/assets/{interface-signal-square.svg-DXuF6sqG.js → interface-signal-square.svg-CxB5mcJQ.js} +1 -1
- package/web/assets/{interface-time-clock-circle.svg-CWLe4mcs.js → interface-time-clock-circle.svg-CEnlQi79.js} +1 -1
- package/web/assets/{interface-time-hour-glass.svg-DXz9wBiv.js → interface-time-hour-glass.svg-qL3_s19Q.js} +1 -1
- package/web/assets/{interface-users-multiple.svg-CXOw1J5l.js → interface-users-multiple.svg-Cz2iA33z.js} +1 -1
- package/web/assets/{interface-weather-moon.svg-B9H9xib3.js → interface-weather-moon.svg-BoT9GUK_.js} +1 -1
- package/web/assets/{javascript-BY1URXQK.js → javascript-DWdA0-HW.js} +1 -1
- package/web/assets/{jsonMode-CxipJdzJ.js → jsonMode-DxGrVlm0.js} +2 -2
- package/web/assets/{liquid-BbqI_ezD.js → liquid-COqLk0mR.js} +1 -1
- package/web/assets/{lspLanguageFeatures-BrbDxmfl.js → lspLanguageFeatures--0hj1ZV4.js} +3 -3
- package/web/assets/{mail-chat-bubble-square.svg-CAlBGAlW.js → mail-chat-bubble-square.svg-eiKzTBOv.js} +1 -1
- package/web/assets/{mail-send-email-paper-airplane.svg-BoNc-FEY.js → mail-send-email-paper-airplane.svg-CCI77Gk8.js} +1 -1
- package/web/assets/{mail-send-envelope.svg-CnMOSib5.js → mail-send-envelope.svg-ChM5k_N7.js} +1 -1
- package/web/assets/{mdx-C4PcQ_oe.js → mdx-CwXNREAO.js} +1 -1
- package/web/assets/{message-BWsbEnoG.js → message-CSxReshg.js} +2 -2
- package/web/assets/{minus-BpDIA3FO.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-DZQ9mrBZ.js → money-cashier-receipt.svg-WMIW7vxg.js} +1 -1
- package/web/assets/{money-currency-dollar-pay.svg-BCaw-GeJ.js → money-currency-dollar-pay.svg-qTcGSVX2.js} +1 -1
- package/web/assets/{money-graph-arrow-increase.svg-DZXh-i2p.js → money-graph-arrow-increase.svg-B-TQKOW-.js} +1 -1
- package/web/assets/{money-graph-bar-chart-increase.svg-j_1tUlGM.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-bajA57tM.js → nature-ecology-leaf.svg-CL26IBv2.js} +1 -1
- package/web/assets/{password-W9W3PSE2.js → password-ZOY0bqV1.js} +4 -4
- package/web/assets/{phone-telephone.svg-DD5MGHqV.js → phone-telephone.svg-BhzxDLVX.js} +1 -1
- package/web/assets/{plus-RuIcofM_.js → plus-DsBv8bgd.js} +6 -6
- package/web/assets/process.store-DPp7dk63.js +1 -0
- package/web/assets/{programming-bug.svg-CjtqBc8Z.js → programming-bug.svg-CBNm3E3F.js} +1 -1
- package/web/assets/{programming-cloud.svg-BXQ_h3dK.js → programming-cloud.svg-BrVRbl9B.js} +1 -1
- package/web/assets/{programming-computer-database-server.svg-D6TzOHsK.js → programming-computer-database-server.svg-LQp6n-du.js} +1 -1
- package/web/assets/{programming-computer-database.svg-Dmdh0lIx.js → programming-computer-database.svg-CSbhcIMU.js} +1 -1
- package/web/assets/{programming-module-four-layout.svg-CtGhpLhO.js → programming-module-four-layout.svg-DYEAcL2j.js} +1 -1
- package/web/assets/{programming-module-three.svg-hz_w8W7I.js → programming-module-three.svg-CCQXCU-e.js} +1 -1
- package/web/assets/{programming-module.svg-oDT_fQLn.js → programming-module.svg-Chrmf7k4.js} +1 -1
- package/web/assets/{programming-script-code.svg-CxHHTsaU.js → programming-script-code.svg-DPhhp3IW.js} +1 -1
- package/web/assets/{python-DH-AyaLR.js → python-B7ePhfsS.js} +1 -1
- package/web/assets/{razor-BUpT1gRX.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-D1eK38-E.js → shopping-cart.svg-bmefzlOu.js} +1 -1
- package/web/assets/{shopping-gift-present.svg-CxSfFNAS.js → shopping-gift-present.svg-aUOleva0.js} +1 -1
- package/web/assets/{shopping-shipping-box-parcel-package.svg-M5Njo2qJ.js → shopping-shipping-box-parcel-package.svg-BLsRP4dg.js} +1 -1
- package/web/assets/{src-CEK4EPEJ.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-v_Go3fcT.js → tag-new-circle.svg-kTMMMv-0.js} +1 -1
- package/web/assets/{toggleswitch-C4A0_850.js → toggleswitch-BWXDXl37.js} +2 -2
- package/web/assets/{travel-map-earth-globe.svg-Db2uRb3M.js → travel-map-earth-globe.svg-BdQmz8_b.js} +1 -1
- package/web/assets/trpc-aSS7b3jh.js +1 -0
- package/web/assets/{tsMode-CXB5XugS.js → tsMode-arHIUQbZ.js} +6 -6
- package/web/assets/{typescript-CHJkC9r6.js → typescript-Ds9kgbPd.js} +1 -1
- package/web/assets/useAiChatDrawer-C1xrMtLl.js +1 -0
- package/web/assets/useCloudOrg-BdpqnN19.css +1 -0
- package/web/assets/useCloudOrg-BexK510D.js +97 -0
- package/web/assets/{useProjectCatalog-DDm0I6sX.js → useProjectCatalog-BbSaTBSS.js} +1 -1
- package/web/assets/{xml-DB4EKWC9.js → xml-CO56TgpZ.js} +1 -1
- package/web/assets/{yaml-CqvLyuow.js → yaml-DueFV2-x.js} +1 -1
- package/web/index.html +2 -2
- package/agent-manager-74WZPMVQ.js +0 -7
- package/chunk-YSJ6OJGN.js.map +0 -1
- package/src-6WVQ2FQV.js.map +0 -1
- package/web/assets/AgentScalarChatInterface.vue-vU3z8Etw.js +0 -13
- package/web/assets/AgentTerminalPage-A8GIX6dZ.css +0 -1
- package/web/assets/AgentTerminalPage-DE3GUoXn.js +0 -1
- package/web/assets/AiChatPage-BIJczUeS.js +0 -1
- package/web/assets/AppLayout-CvkK_Pp3.js +0 -1
- package/web/assets/AuditPage-BZuVgUf1.js +0 -1
- package/web/assets/CloudAccountPage-B__2SGAw.js +0 -1
- package/web/assets/CloudAccountPage-MSWkg9Ke.js +0 -1
- package/web/assets/CloudMessagingPage-C5pD6Qsd.js +0 -2
- package/web/assets/DashboardPage-66q5K841.js +0 -1
- package/web/assets/DirectoryPickerDialog-wZYtGEZ9.js +0 -1
- package/web/assets/EnvironmentForm-C0Q1pRdW.js +0 -108
- package/web/assets/EnvironmentFormPage-LO-mwupn.js +0 -1
- package/web/assets/EnvironmentListPage-CvknyN3O.js +0 -1
- package/web/assets/KanbanBoardPage-DUsAyowy.js +0 -4
- package/web/assets/KanbanListPage-9RBCauSd.js +0 -1
- package/web/assets/LaunchProjectPage--S6EXtGb.css +0 -1
- package/web/assets/LaunchProjectPage-obaNCuEY.js +0 -1
- package/web/assets/LaunchServicesPage-CiWzQIyC.js +0 -1
- package/web/assets/LaunchServicesPage-pWREsZTD.css +0 -1
- package/web/assets/LogViewer-BiSD_TNt.js +0 -3
- package/web/assets/OrgKeyPrompt-zhMl_nTd.js +0 -1
- package/web/assets/ProcessDetailPage-CsCqQh2V.js +0 -1
- package/web/assets/ProjectDetailPage-B0vJySvH.js +0 -1
- package/web/assets/ProjectListPage-srxBmrbO.js +0 -1
- package/web/assets/RandomJobTestPage-jGfX-6W9.js +0 -2
- package/web/assets/ScenarioEditorPage-CxLy6gs7.js +0 -14
- package/web/assets/SendToChatDialog-AHkuFQjt.js +0 -1
- package/web/assets/ServiceControlsBar-C8P9_qWK.js +0 -1
- package/web/assets/ServiceDetailPage-DTBpQegV.js +0 -2
- package/web/assets/ServiceFormPage-CsPSMWdD.js +0 -1
- package/web/assets/SettingsPage-CmtRn6VJ.js +0 -2063
- package/web/assets/UnlockPage-Bkp_hR-F.js +0 -1
- package/web/assets/UnlockPage-DE_HJy8h.css +0 -1
- package/web/assets/VariablesTable-jo61MhbL.js +0 -1
- package/web/assets/VaultMigrationPage-BGJ2PP-7.css +0 -1
- package/web/assets/VaultMigrationPage-D-Dxg5xH.js +0 -1
- package/web/assets/VersionBadge-CwNZLgqN.js +0 -1
- package/web/assets/WikiPage-DZLKTPi3.js +0 -1
- package/web/assets/WikiView-BpJECJ2Y.js +0 -1
- package/web/assets/add-scalar-classes-CqLAxAGv.js +0 -387
- package/web/assets/auth-errors-BOjTx5eo.js +0 -1
- package/web/assets/autocomplete-CrMQ2sCk.js +0 -308
- package/web/assets/card-CjcU4SfX.js +0 -32
- package/web/assets/client-B9UJRQa-.js +0 -24
- package/web/assets/cloud-chat.store-Dw2lzuBY.js +0 -1
- package/web/assets/cloud-session-DIhbWyP5.js +0 -1
- package/web/assets/column-BGKYk6b6.js +0 -907
- package/web/assets/interface-content-folder.svg-DjEfXjEF.js +0 -1
- package/web/assets/modal-DZYAJM4x.js +0 -5
- package/web/assets/modal-Fe2dzlxp.js +0 -1
- package/web/assets/multiselect-CmjxW2sW.js +0 -251
- package/web/assets/process.store-COWqXNUm.js +0 -1
- package/web/assets/router-BIJ4goD-.js +0 -1
- package/web/assets/settings-scope-DGzA7Be-.js +0 -1
- package/web/assets/settings.store-Dj2nbYYG.js +0 -1
- package/web/assets/src-BTWvqafq.js +0 -1
- package/web/assets/tabpanel-CWwOXePg.js +0 -150
- package/web/assets/trpc-DfyQNjZd.js +0 -1
- package/web/assets/useAiChatDrawer-Cuhlc2BI.js +0 -1
- package/web/assets/useCloudOrg-DYOv1Oak.js +0 -93
- package/web/assets/useCloudOrg-Dc6yRgro.css +0 -1
- /package/{agent-manager-74WZPMVQ.js.map → agent-manager-YDLSYZE3.js.map} +0 -0
- /package/web/assets/{abap-Q7FyqTce.js → abap-BvxTqXT2.js} +0 -0
- /package/web/assets/{apex-DBNDq2a_.js → apex-CIPCCkBr.js} +0 -0
- /package/web/assets/{azcli-BHW8ozYN.js → azcli-Rs0NIwkA.js} +0 -0
- /package/web/assets/{bat-BL-_3Nfo.js → bat-BxAhM6gR.js} +0 -0
- /package/web/assets/{bicep-DR2vgumW.js → bicep-oV_ehPcG.js} +0 -0
- /package/web/assets/{cameligo-BCjoEAZU.js → cameligo-CJLaUyQs.js} +0 -0
- /package/web/assets/{clojure-zw1Irdul.js → clojure-CjvMureh.js} +0 -0
- /package/web/assets/{coffee-BdEjkiiW.js → coffee-motWC5XQ.js} +0 -0
- /package/web/assets/{cpp-DKUlBIAG.js → cpp-DiWIfYNM.js} +0 -0
- /package/web/assets/{csharp-BsNC4zVq.js → csharp-GBlGBeai.js} +0 -0
- /package/web/assets/{csp-X4Chv5_9.js → csp-tSyK5eO1.js} +0 -0
- /package/web/assets/{css-Dh0Dlycs.js → css-BkFK9HG_.js} +0 -0
- /package/web/assets/{cypher-BL_DRjGX.js → cypher-Bcp8PXr2.js} +0 -0
- /package/web/assets/{dart-DaM4j487.js → dart-uz9Rxe0M.js} +0 -0
- /package/web/assets/{dockerfile-Df5WJXAt.js → dockerfile-iJizx3Zp.js} +0 -0
- /package/web/assets/{ecl-BjUo3uTs.js → ecl-BalaS36Z.js} +0 -0
- /package/web/assets/{elixir-DrLHYSxt.js → elixir-D6CLrLGy.js} +0 -0
- /package/web/assets/{flow9-DKiuX7rg.js → flow9-CFt3-vVY.js} +0 -0
- /package/web/assets/{fsharp-CAN78557.js → fsharp-DGa7raxa.js} +0 -0
- /package/web/assets/{go-DGjr9vA5.js → go-wlqInk4z.js} +0 -0
- /package/web/assets/{graphql-CcoU3Cj2.js → graphql-CP1guigM.js} +0 -0
- /package/web/assets/{hcl-udfyCcTm.js → hcl-CK0UkKD0.js} +0 -0
- /package/web/assets/{ini-BVbXatjh.js → ini-Ch56nrUj.js} +0 -0
- /package/web/assets/{java-Drpmh61g.js → java-C9_WIayl.js} +0 -0
- /package/web/assets/{julia-asFGk-ZV.js → julia-Can2_mhR.js} +0 -0
- /package/web/assets/{kotlin-HmkKz1TT.js → kotlin-DUvGf_BX.js} +0 -0
- /package/web/assets/{less-C5i2m2Dn.js → less-DoTbG-rc.js} +0 -0
- /package/web/assets/{lexon-B3Xh2kL6.js → lexon-BFMO2_kL.js} +0 -0
- /package/web/assets/{lua-DnOtgOOu.js → lua-CC-QtBo7.js} +0 -0
- /package/web/assets/{m3-Brj4HNKq.js → m3-C51MyH5Q.js} +0 -0
- /package/web/assets/{markdown-C3-4Ntpz.js → markdown-CDwLHhgZ.js} +0 -0
- /package/web/assets/{mips-vFQKPHzn.js → mips-YuxZtPGU.js} +0 -0
- /package/web/assets/{msdax-D5MYLS2R.js → msdax-CJjWhmte.js} +0 -0
- /package/web/assets/{mysql-CRQHhUON.js → mysql-B1riwLaD.js} +0 -0
- /package/web/assets/{objective-c-8cZEp0HR.js → objective-c-drXT-gmc.js} +0 -0
- /package/web/assets/{pascal-BPn_2jro.js → pascal-KUYgrN-Z.js} +0 -0
- /package/web/assets/{pascaligo-L7QnU_8B.js → pascaligo-DQmQJP-r.js} +0 -0
- /package/web/assets/{perl-B9zSPnp3.js → perl-09XLBmCS.js} +0 -0
- /package/web/assets/{pgsql-DiRJukCJ.js → pgsql-BFj9IFFu.js} +0 -0
- /package/web/assets/{php-Dv4g8Lhr.js → php-UnC5BqwY.js} +0 -0
- /package/web/assets/{pla-CKAoz6vp.js → pla-BFuYrPHG.js} +0 -0
- /package/web/assets/{postiats-B_PYgUTS.js → postiats-n4ft3jnO.js} +0 -0
- /package/web/assets/{powerquery-CAagSyo-.js → powerquery-D-s-oFSc.js} +0 -0
- /package/web/assets/{powershell-Cj9BzLhS.js → powershell-CTboTf93.js} +0 -0
- /package/web/assets/{protobuf-DTRY4FFo.js → protobuf-Dt62GuJP.js} +0 -0
- /package/web/assets/{pug-qADGmCS8.js → pug-CEFWkUzw.js} +0 -0
- /package/web/assets/{qsharp-xkZT0ZOm.js → qsharp-B0DUmgPZ.js} +0 -0
- /package/web/assets/{r-C7wfNC2Z.js → r-BVnF0c4T.js} +0 -0
- /package/web/assets/{redis-BoccK80D.js → redis-DLl3KQXi.js} +0 -0
- /package/web/assets/{redshift-EL8PjTts.js → redshift-cif1I7h1.js} +0 -0
- /package/web/assets/{restructuredtext-CA6rgR7C.js → restructuredtext-PNfql36m.js} +0 -0
- /package/web/assets/{ruby-BymrInur.js → ruby-j3jxDjUN.js} +0 -0
- /package/web/assets/{rust-BTbPL-fg.js → rust-BaIO-mAt.js} +0 -0
- /package/web/assets/{sb-BTkOICcb.js → sb-D8XNVNUQ.js} +0 -0
- /package/web/assets/{scala-CzaUHeQF.js → scala-DiK9Ps90.js} +0 -0
- /package/web/assets/{scheme-DZe2DRuY.js → scheme-DPKqXHmF.js} +0 -0
- /package/web/assets/{scss-D5oFt9cg.js → scss-DpMwfP2H.js} +0 -0
- /package/web/assets/{shell-DCkIF5jZ.js → shell-Dw9mKVg2.js} +0 -0
- /package/web/assets/{solidity-CfOO4gXi.js → solidity-DTxo-7fe.js} +0 -0
- /package/web/assets/{sophia-0-sROOHR.js → sophia-BjA3Q87y.js} +0 -0
- /package/web/assets/{sparql-Dzzr9hol.js → sparql-q1EpMUqb.js} +0 -0
- /package/web/assets/{sql-DbXHiHh_.js → sql-CjcQ4wIr.js} +0 -0
- /package/web/assets/{st-DEaYV8xH.js → st-AuOpxVl7.js} +0 -0
- /package/web/assets/{swift-BQItveav.js → swift-BUWnv6f7.js} +0 -0
- /package/web/assets/{systemverilog-nE6YfGlx.js → systemverilog-FhXn-3OZ.js} +0 -0
- /package/web/assets/{tcl-Do7Q0SM0.js → tcl-B0lqcTtS.js} +0 -0
- /package/web/assets/{twig-B2CLZN2j.js → twig-B0OeGPVa.js} +0 -0
- /package/web/assets/{typespec-r9R1AgVi.js → typespec-Bmh6VX11.js} +0 -0
- /package/web/assets/{uuid-CXjA27vZ.js → uuid-FpfcaBnR.js} +0 -0
- /package/web/assets/{vb-DGnD02qr.js → vb-bmgX6veu.js} +0 -0
- /package/web/assets/{wgsl-C2fD4koY.js → wgsl-FflLnFqI.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
|
|
@@ -4551,32 +4594,64 @@ import { EventEmitter as EventEmitter8 } from "events";
|
|
|
4551
4594
|
import os from "os";
|
|
4552
4595
|
import { randomUUID as randomUUID4 } from "crypto";
|
|
4553
4596
|
import * as pty from "@lydell/node-pty";
|
|
4597
|
+
var SCROLLBACK_LIMIT = 256 * 1024;
|
|
4554
4598
|
var TerminalManager = class {
|
|
4555
4599
|
sessions = /* @__PURE__ */ new Map();
|
|
4556
|
-
create(cwd, cols, rows) {
|
|
4600
|
+
create(cwd, cols, rows, title) {
|
|
4557
4601
|
const sessionId = randomUUID4();
|
|
4558
4602
|
const shell = process.env.SHELL ?? (os.platform() === "win32" ? "powershell.exe" : "/bin/bash");
|
|
4603
|
+
const resolvedCwd = cwd ?? process.cwd();
|
|
4604
|
+
const resolvedCols = cols ?? 80;
|
|
4605
|
+
const resolvedRows = rows ?? 24;
|
|
4559
4606
|
const term = pty.spawn(shell, [], {
|
|
4560
4607
|
name: "xterm-256color",
|
|
4561
|
-
cols:
|
|
4562
|
-
rows:
|
|
4563
|
-
cwd:
|
|
4608
|
+
cols: resolvedCols,
|
|
4609
|
+
rows: resolvedRows,
|
|
4610
|
+
cwd: resolvedCwd,
|
|
4564
4611
|
env: process.env
|
|
4565
4612
|
});
|
|
4566
4613
|
const emitter = new EventEmitter8();
|
|
4567
|
-
|
|
4614
|
+
emitter.setMaxListeners(50);
|
|
4615
|
+
const session = {
|
|
4616
|
+
pty: term,
|
|
4617
|
+
emitter,
|
|
4618
|
+
scrollback: "",
|
|
4619
|
+
info: {
|
|
4620
|
+
sessionId,
|
|
4621
|
+
title: title ?? "Terminal",
|
|
4622
|
+
cwd: resolvedCwd,
|
|
4623
|
+
cols: resolvedCols,
|
|
4624
|
+
rows: resolvedRows,
|
|
4625
|
+
createdAt: Date.now()
|
|
4626
|
+
}
|
|
4627
|
+
};
|
|
4628
|
+
term.onData((data) => {
|
|
4629
|
+
session.scrollback += data;
|
|
4630
|
+
if (session.scrollback.length > SCROLLBACK_LIMIT) {
|
|
4631
|
+
session.scrollback = session.scrollback.slice(-SCROLLBACK_LIMIT);
|
|
4632
|
+
}
|
|
4633
|
+
emitter.emit("data", data);
|
|
4634
|
+
});
|
|
4568
4635
|
term.onExit(() => {
|
|
4569
4636
|
emitter.emit("exit");
|
|
4570
4637
|
this.sessions.delete(sessionId);
|
|
4571
4638
|
});
|
|
4572
|
-
this.sessions.set(sessionId,
|
|
4639
|
+
this.sessions.set(sessionId, session);
|
|
4573
4640
|
return sessionId;
|
|
4574
4641
|
}
|
|
4575
4642
|
write(sessionId, data) {
|
|
4576
4643
|
this.sessions.get(sessionId)?.pty.write(data);
|
|
4577
4644
|
}
|
|
4578
4645
|
resize(sessionId, cols, rows) {
|
|
4579
|
-
this.sessions.get(sessionId)
|
|
4646
|
+
const session = this.sessions.get(sessionId);
|
|
4647
|
+
if (!session) return;
|
|
4648
|
+
session.pty.resize(cols, rows);
|
|
4649
|
+
session.info.cols = cols;
|
|
4650
|
+
session.info.rows = rows;
|
|
4651
|
+
}
|
|
4652
|
+
rename(sessionId, title) {
|
|
4653
|
+
const session = this.sessions.get(sessionId);
|
|
4654
|
+
if (session) session.info.title = title;
|
|
4580
4655
|
}
|
|
4581
4656
|
destroy(sessionId) {
|
|
4582
4657
|
const session = this.sessions.get(sessionId);
|
|
@@ -4588,6 +4663,13 @@ var TerminalManager = class {
|
|
|
4588
4663
|
this.sessions.delete(sessionId);
|
|
4589
4664
|
}
|
|
4590
4665
|
}
|
|
4666
|
+
/** Les sessions encore vivantes : de quoi retrouver ses onglets après un aller-retour. */
|
|
4667
|
+
list() {
|
|
4668
|
+
return [...this.sessions.values()].map((s) => s.info).sort((a, b) => a.createdAt - b.createdAt);
|
|
4669
|
+
}
|
|
4670
|
+
getScrollback(sessionId) {
|
|
4671
|
+
return this.sessions.get(sessionId)?.scrollback ?? "";
|
|
4672
|
+
}
|
|
4591
4673
|
getEmitter(sessionId) {
|
|
4592
4674
|
return this.sessions.get(sessionId)?.emitter ?? null;
|
|
4593
4675
|
}
|
|
@@ -4597,35 +4679,47 @@ var terminalManager = new TerminalManager();
|
|
|
4597
4679
|
// src/trpc/routers/terminal.ts
|
|
4598
4680
|
var terminalRouter = router({
|
|
4599
4681
|
/** Spawn a new PTY shell session, returns a sessionId */
|
|
4600
|
-
create: protectedProcedure.input(
|
|
4601
|
-
cwd:
|
|
4602
|
-
cols:
|
|
4603
|
-
rows:
|
|
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()
|
|
4604
4687
|
})).mutation(({ input }) => {
|
|
4605
|
-
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows);
|
|
4688
|
+
const sessionId = terminalManager.create(input.cwd, input.cols, input.rows, input.title);
|
|
4606
4689
|
return { sessionId };
|
|
4607
4690
|
}),
|
|
4691
|
+
/** Les sessions encore vivantes : un onglet fermé côté web se retrouve ici */
|
|
4692
|
+
list: protectedProcedure.query(() => ({ sessions: terminalManager.list() })),
|
|
4693
|
+
/** Renommer un onglet */
|
|
4694
|
+
rename: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), title: z24.string().max(128) })).mutation(({ input }) => {
|
|
4695
|
+
terminalManager.rename(input.sessionId, input.title);
|
|
4696
|
+
return { ok: true };
|
|
4697
|
+
}),
|
|
4608
4698
|
/** Write data (keystrokes) to a PTY session */
|
|
4609
|
-
write: protectedProcedure.input(
|
|
4699
|
+
write: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128), data: z24.string().max(65536) })).mutation(({ input }) => {
|
|
4610
4700
|
terminalManager.write(input.sessionId, input.data);
|
|
4611
4701
|
return { ok: true };
|
|
4612
4702
|
}),
|
|
4613
4703
|
/** Resize a PTY session */
|
|
4614
|
-
resize: protectedProcedure.input(
|
|
4615
|
-
sessionId:
|
|
4616
|
-
cols:
|
|
4617
|
-
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)
|
|
4618
4708
|
})).mutation(({ input }) => {
|
|
4619
4709
|
terminalManager.resize(input.sessionId, input.cols, input.rows);
|
|
4620
4710
|
return { ok: true };
|
|
4621
4711
|
}),
|
|
4622
4712
|
/** Destroy a PTY session */
|
|
4623
|
-
destroy: protectedProcedure.input(
|
|
4713
|
+
destroy: protectedProcedure.input(z24.object({ sessionId: z24.string().max(128) })).mutation(({ input }) => {
|
|
4624
4714
|
terminalManager.destroy(input.sessionId);
|
|
4625
4715
|
return { ok: true };
|
|
4626
4716
|
}),
|
|
4627
4717
|
/** Stream PTY output for a session (async generator subscription) */
|
|
4628
|
-
onData: protectedProcedure.input(
|
|
4718
|
+
onData: protectedProcedure.input(z24.object({
|
|
4719
|
+
sessionId: z24.string().max(128),
|
|
4720
|
+
/** Rejouer l'historique avant le flux : c'est ce qui rend l'onglet persistant. */
|
|
4721
|
+
replay: z24.boolean().optional()
|
|
4722
|
+
})).subscription(async function* ({ input }) {
|
|
4629
4723
|
const emitter = terminalManager.getEmitter(input.sessionId);
|
|
4630
4724
|
if (!emitter) {
|
|
4631
4725
|
throw new TRPCError3({ code: "NOT_FOUND", message: `Terminal session ${input.sessionId} not found` });
|
|
@@ -4649,6 +4743,8 @@ var terminalRouter = router({
|
|
|
4649
4743
|
};
|
|
4650
4744
|
emitter.on("data", onData);
|
|
4651
4745
|
emitter.on("exit", onExit);
|
|
4746
|
+
const scrollback = input.replay ? terminalManager.getScrollback(input.sessionId) : "";
|
|
4747
|
+
if (scrollback) yield scrollback;
|
|
4652
4748
|
try {
|
|
4653
4749
|
while (!done || queue.length > 0) {
|
|
4654
4750
|
if (queue.length > 0) {
|
|
@@ -4667,7 +4763,7 @@ var terminalRouter = router({
|
|
|
4667
4763
|
});
|
|
4668
4764
|
|
|
4669
4765
|
// src/trpc/routers/git.ts
|
|
4670
|
-
import { z as
|
|
4766
|
+
import { z as z25 } from "zod";
|
|
4671
4767
|
import { TRPCError as TRPCError4 } from "@trpc/server";
|
|
4672
4768
|
import { execFile as execFile4, spawn as spawn3 } from "child_process";
|
|
4673
4769
|
import { promisify as promisify2 } from "util";
|
|
@@ -4677,12 +4773,12 @@ import { join as join4, resolve as resolvePath } from "path";
|
|
|
4677
4773
|
var execFileAsync2 = promisify2(execFile4);
|
|
4678
4774
|
var GIT_TIMEOUT = 15e3;
|
|
4679
4775
|
var DIFF_MAX_BYTES = 512 * 1024;
|
|
4680
|
-
var CWD_SCHEMA =
|
|
4681
|
-
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("../"), {
|
|
4682
4778
|
message: "Path must be relative and not traverse up"
|
|
4683
4779
|
});
|
|
4684
|
-
var REMOTE_SCHEMA =
|
|
4685
|
-
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._\-/]+$/);
|
|
4686
4782
|
function gitSafeEnv() {
|
|
4687
4783
|
const env2 = {
|
|
4688
4784
|
GIT_TERMINAL_PROMPT: "0",
|
|
@@ -4800,10 +4896,10 @@ async function getGitStatus(cwd) {
|
|
|
4800
4896
|
}
|
|
4801
4897
|
var gitRouter = router({
|
|
4802
4898
|
/** Check if a working directory exists and optionally verify its git remote */
|
|
4803
|
-
checkCwd: protectedProcedure.input(
|
|
4899
|
+
checkCwd: protectedProcedure.input(z25.object({
|
|
4804
4900
|
cwd: CWD_SCHEMA,
|
|
4805
|
-
remote:
|
|
4806
|
-
checkReachability:
|
|
4901
|
+
remote: z25.string().max(2048).optional(),
|
|
4902
|
+
checkReachability: z25.boolean().optional()
|
|
4807
4903
|
})).query(async ({ input }) => {
|
|
4808
4904
|
const resolvedCwd = expandEnvVar(input.cwd);
|
|
4809
4905
|
const unresolvedVars = [...resolvedCwd.matchAll(/\$\{?(\w+)\}?/g)].map((m) => m[1]);
|
|
@@ -4824,8 +4920,8 @@ var gitRouter = router({
|
|
|
4824
4920
|
return { exists, actualRemote, unreachable: false, resolvedCwd: absoluteCwd, unresolvedVars: [] };
|
|
4825
4921
|
}),
|
|
4826
4922
|
/** Clone a git repository into a target directory */
|
|
4827
|
-
clone: protectedProcedure.input(
|
|
4828
|
-
remote:
|
|
4923
|
+
clone: protectedProcedure.input(z25.object({
|
|
4924
|
+
remote: z25.string().min(1).max(2048),
|
|
4829
4925
|
cwd: CWD_SCHEMA
|
|
4830
4926
|
})).mutation(async ({ input }) => {
|
|
4831
4927
|
const absoluteCwd = resolvePath(expandEnvVar(input.cwd));
|
|
@@ -4846,13 +4942,13 @@ var gitRouter = router({
|
|
|
4846
4942
|
return { success: true };
|
|
4847
4943
|
}),
|
|
4848
4944
|
/** Get full git status */
|
|
4849
|
-
status: protectedProcedure.input(
|
|
4945
|
+
status: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4850
4946
|
const cwd = assertCwdExists(input.cwd);
|
|
4851
4947
|
await assertGitRepo(cwd);
|
|
4852
4948
|
return getGitStatus(cwd);
|
|
4853
4949
|
}),
|
|
4854
4950
|
/** Watch .git/ for changes and stream updated status */
|
|
4855
|
-
onStatusChange: protectedProcedure.input(
|
|
4951
|
+
onStatusChange: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).subscription(async function* ({ input }) {
|
|
4856
4952
|
const cwd = assertCwdExists(input.cwd);
|
|
4857
4953
|
await assertGitRepo(cwd);
|
|
4858
4954
|
const gitDir = (await git(["rev-parse", "--git-dir"], cwd, true)).trim();
|
|
@@ -4903,7 +4999,7 @@ var gitRouter = router({
|
|
|
4903
4999
|
}
|
|
4904
5000
|
}),
|
|
4905
5001
|
/** Get commit log */
|
|
4906
|
-
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 }) => {
|
|
4907
5003
|
const cwd = assertCwdExists(input.cwd);
|
|
4908
5004
|
await assertGitRepo(cwd);
|
|
4909
5005
|
const format = "%H%h%an%ae%ai%s";
|
|
@@ -4914,7 +5010,7 @@ var gitRouter = router({
|
|
|
4914
5010
|
});
|
|
4915
5011
|
}),
|
|
4916
5012
|
/** List local and remote branches */
|
|
4917
|
-
branches: protectedProcedure.input(
|
|
5013
|
+
branches: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
4918
5014
|
const cwd = assertCwdExists(input.cwd);
|
|
4919
5015
|
await assertGitRepo(cwd);
|
|
4920
5016
|
const current = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -4926,7 +5022,7 @@ var gitRouter = router({
|
|
|
4926
5022
|
return { current, branches };
|
|
4927
5023
|
}),
|
|
4928
5024
|
/** Checkout a branch */
|
|
4929
|
-
checkout: protectedProcedure.input(
|
|
5025
|
+
checkout: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, create: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
4930
5026
|
const cwd = assertCwdExists(input.cwd);
|
|
4931
5027
|
await assertGitRepo(cwd);
|
|
4932
5028
|
const args = input.create ? ["checkout", "-b", input.branch] : ["checkout", input.branch];
|
|
@@ -4934,42 +5030,42 @@ var gitRouter = router({
|
|
|
4934
5030
|
return { ok: true };
|
|
4935
5031
|
}),
|
|
4936
5032
|
/** Stage files */
|
|
4937
|
-
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 }) => {
|
|
4938
5034
|
const cwd = assertCwdExists(input.cwd);
|
|
4939
5035
|
await assertGitRepo(cwd);
|
|
4940
5036
|
await git(["add", "--", ...input.paths], cwd);
|
|
4941
5037
|
return { ok: true };
|
|
4942
5038
|
}),
|
|
4943
5039
|
/** Stage all files */
|
|
4944
|
-
stageAll: protectedProcedure.input(
|
|
5040
|
+
stageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
4945
5041
|
const cwd = assertCwdExists(input.cwd);
|
|
4946
5042
|
await assertGitRepo(cwd);
|
|
4947
5043
|
await git(["add", "-A"], cwd);
|
|
4948
5044
|
return { ok: true };
|
|
4949
5045
|
}),
|
|
4950
5046
|
/** Unstage files */
|
|
4951
|
-
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 }) => {
|
|
4952
5048
|
const cwd = assertCwdExists(input.cwd);
|
|
4953
5049
|
await assertGitRepo(cwd);
|
|
4954
5050
|
await git(["restore", "--staged", "--", ...input.paths], cwd);
|
|
4955
5051
|
return { ok: true };
|
|
4956
5052
|
}),
|
|
4957
5053
|
/** Unstage all files */
|
|
4958
|
-
unstageAll: protectedProcedure.input(
|
|
5054
|
+
unstageAll: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).mutation(async ({ input }) => {
|
|
4959
5055
|
const cwd = assertCwdExists(input.cwd);
|
|
4960
5056
|
await assertGitRepo(cwd);
|
|
4961
5057
|
await git(["reset", "--"], cwd);
|
|
4962
5058
|
return { ok: true };
|
|
4963
5059
|
}),
|
|
4964
5060
|
/** Commit staged changes */
|
|
4965
|
-
commit: protectedProcedure.input(
|
|
5061
|
+
commit: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, message: z25.string().min(1).max(4096) })).mutation(async ({ input }) => {
|
|
4966
5062
|
const cwd = assertCwdExists(input.cwd);
|
|
4967
5063
|
await assertGitRepo(cwd);
|
|
4968
5064
|
const output = await git(["commit", "-m", input.message], cwd);
|
|
4969
5065
|
return { ok: true, output: output.trim() };
|
|
4970
5066
|
}),
|
|
4971
5067
|
/** Push to remote */
|
|
4972
|
-
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 }) => {
|
|
4973
5069
|
const cwd = assertCwdExists(input.cwd);
|
|
4974
5070
|
await assertGitRepo(cwd);
|
|
4975
5071
|
const branch = (await git(["rev-parse", "--abbrev-ref", "HEAD"], cwd, true)).trim();
|
|
@@ -4978,25 +5074,25 @@ var gitRouter = router({
|
|
|
4978
5074
|
return { ok: true, output: output.trim() };
|
|
4979
5075
|
}),
|
|
4980
5076
|
/** Pull from remote */
|
|
4981
|
-
pull: protectedProcedure.input(
|
|
5077
|
+
pull: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
4982
5078
|
const cwd = assertCwdExists(input.cwd);
|
|
4983
5079
|
await assertGitRepo(cwd);
|
|
4984
5080
|
const output = await git(["pull", input.remote], cwd);
|
|
4985
5081
|
return { ok: true, output: output.trim() };
|
|
4986
5082
|
}),
|
|
4987
5083
|
/** Fetch from remote */
|
|
4988
|
-
fetch: protectedProcedure.input(
|
|
5084
|
+
fetch: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, remote: REMOTE_SCHEMA.default("origin") })).mutation(async ({ input }) => {
|
|
4989
5085
|
const cwd = assertCwdExists(input.cwd);
|
|
4990
5086
|
await assertGitRepo(cwd);
|
|
4991
5087
|
const output = await git(["fetch", input.remote], cwd);
|
|
4992
5088
|
return { ok: true, output: output.trim() };
|
|
4993
5089
|
}),
|
|
4994
5090
|
/** Get diff for a file or the whole index */
|
|
4995
|
-
diff: protectedProcedure.input(
|
|
5091
|
+
diff: protectedProcedure.input(z25.object({
|
|
4996
5092
|
cwd: CWD_SCHEMA,
|
|
4997
|
-
path:
|
|
4998
|
-
staged:
|
|
4999
|
-
untracked:
|
|
5093
|
+
path: z25.string().max(4096).optional(),
|
|
5094
|
+
staged: z25.boolean().default(false),
|
|
5095
|
+
untracked: z25.boolean().default(false)
|
|
5000
5096
|
})).query(async ({ input }) => {
|
|
5001
5097
|
const cwd = assertCwdExists(input.cwd);
|
|
5002
5098
|
await assertGitRepo(cwd);
|
|
@@ -5044,21 +5140,21 @@ var gitRouter = router({
|
|
|
5044
5140
|
};
|
|
5045
5141
|
}),
|
|
5046
5142
|
/** Discard changes to working tree files */
|
|
5047
|
-
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 }) => {
|
|
5048
5144
|
const cwd = assertCwdExists(input.cwd);
|
|
5049
5145
|
await assertGitRepo(cwd);
|
|
5050
5146
|
await git(["restore", "--", ...input.paths], cwd);
|
|
5051
5147
|
return { ok: true };
|
|
5052
5148
|
}),
|
|
5053
5149
|
/** Get staged diff (used by server for AI commit message generation) */
|
|
5054
|
-
stagedDiff: protectedProcedure.input(
|
|
5150
|
+
stagedDiff: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5055
5151
|
const cwd = assertCwdExists(input.cwd);
|
|
5056
5152
|
await assertGitRepo(cwd);
|
|
5057
5153
|
const diff = await git(["diff", "--staged"], cwd, true);
|
|
5058
5154
|
return { diff: diff.slice(0, 3e4) };
|
|
5059
5155
|
}),
|
|
5060
5156
|
/** Merge a branch into the current branch */
|
|
5061
|
-
merge: protectedProcedure.input(
|
|
5157
|
+
merge: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA, noFf: z25.boolean().default(false) })).mutation(async ({ input }) => {
|
|
5062
5158
|
const cwd = assertCwdExists(input.cwd);
|
|
5063
5159
|
await assertGitRepo(cwd);
|
|
5064
5160
|
const args = input.noFf ? ["merge", "--no-ff", input.branch] : ["merge", input.branch];
|
|
@@ -5066,14 +5162,14 @@ var gitRouter = router({
|
|
|
5066
5162
|
return { ok: true, output: output.trim() };
|
|
5067
5163
|
}),
|
|
5068
5164
|
/** Rebase current branch onto another branch */
|
|
5069
|
-
rebase: protectedProcedure.input(
|
|
5165
|
+
rebase: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA, branch: BRANCH_SCHEMA })).mutation(async ({ input }) => {
|
|
5070
5166
|
const cwd = assertCwdExists(input.cwd);
|
|
5071
5167
|
await assertGitRepo(cwd);
|
|
5072
5168
|
const output = await git(["rebase", input.branch], cwd);
|
|
5073
5169
|
return { ok: true, output: output.trim() };
|
|
5074
5170
|
}),
|
|
5075
5171
|
/** List remotes */
|
|
5076
|
-
remotes: protectedProcedure.input(
|
|
5172
|
+
remotes: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5077
5173
|
const cwd = assertCwdExists(input.cwd);
|
|
5078
5174
|
await assertGitRepo(cwd);
|
|
5079
5175
|
const output = await git(["remote", "-v"], cwd, true);
|
|
@@ -5091,7 +5187,7 @@ var gitRouter = router({
|
|
|
5091
5187
|
return remotes;
|
|
5092
5188
|
}),
|
|
5093
5189
|
/** List stash entries */
|
|
5094
|
-
stashList: protectedProcedure.input(
|
|
5190
|
+
stashList: protectedProcedure.input(z25.object({ cwd: CWD_SCHEMA })).query(async ({ input }) => {
|
|
5095
5191
|
const cwd = assertCwdExists(input.cwd);
|
|
5096
5192
|
await assertGitRepo(cwd);
|
|
5097
5193
|
const output = await git(["stash", "list", "--format=%gd%s"], cwd, true);
|
|
@@ -5104,10 +5200,10 @@ var gitRouter = router({
|
|
|
5104
5200
|
return entries;
|
|
5105
5201
|
}),
|
|
5106
5202
|
/** Stash current changes */
|
|
5107
|
-
stashPush: protectedProcedure.input(
|
|
5203
|
+
stashPush: protectedProcedure.input(z25.object({
|
|
5108
5204
|
cwd: CWD_SCHEMA,
|
|
5109
|
-
message:
|
|
5110
|
-
includeUntracked:
|
|
5205
|
+
message: z25.string().max(4096).optional(),
|
|
5206
|
+
includeUntracked: z25.boolean().default(true)
|
|
5111
5207
|
})).mutation(async ({ input }) => {
|
|
5112
5208
|
const cwd = assertCwdExists(input.cwd);
|
|
5113
5209
|
await assertGitRepo(cwd);
|
|
@@ -5118,21 +5214,21 @@ var gitRouter = router({
|
|
|
5118
5214
|
return { ok: true, output: output.trim() };
|
|
5119
5215
|
}),
|
|
5120
5216
|
/** Apply a stash entry and remove it from the list */
|
|
5121
|
-
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 }) => {
|
|
5122
5218
|
const cwd = assertCwdExists(input.cwd);
|
|
5123
5219
|
await assertGitRepo(cwd);
|
|
5124
5220
|
const output = await git(["stash", "pop", `stash@{${input.index}}`], cwd);
|
|
5125
5221
|
return { ok: true, output: output.trim() };
|
|
5126
5222
|
}),
|
|
5127
5223
|
/** Apply a stash entry without removing it from the list */
|
|
5128
|
-
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 }) => {
|
|
5129
5225
|
const cwd = assertCwdExists(input.cwd);
|
|
5130
5226
|
await assertGitRepo(cwd);
|
|
5131
5227
|
const output = await git(["stash", "apply", `stash@{${input.index}}`], cwd);
|
|
5132
5228
|
return { ok: true, output: output.trim() };
|
|
5133
5229
|
}),
|
|
5134
5230
|
/** Drop a stash entry */
|
|
5135
|
-
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 }) => {
|
|
5136
5232
|
const cwd = assertCwdExists(input.cwd);
|
|
5137
5233
|
await assertGitRepo(cwd);
|
|
5138
5234
|
const output = await git(["stash", "drop", `stash@{${input.index}}`], cwd);
|
|
@@ -5165,7 +5261,7 @@ function runGitRaw(args, timeoutMs, extraEnv) {
|
|
|
5165
5261
|
}
|
|
5166
5262
|
|
|
5167
5263
|
// src/trpc/routers/ai.ts
|
|
5168
|
-
import { z as
|
|
5264
|
+
import { z as z26 } from "zod";
|
|
5169
5265
|
import { TRPCError as TRPCError5 } from "@trpc/server";
|
|
5170
5266
|
|
|
5171
5267
|
// src/services/ai-spawn-manager.ts
|
|
@@ -5880,23 +5976,23 @@ var MAX_CONTEXT_FILE_BYTES = 1e6;
|
|
|
5880
5976
|
var MAX_CONTEXT_TOTAL_BYTES = 5e6;
|
|
5881
5977
|
var aiRouter = router({
|
|
5882
5978
|
/** Spawn an AI CLI process. Returns a spawnId for streaming. */
|
|
5883
|
-
spawn: protectedProcedure.input(
|
|
5884
|
-
cli:
|
|
5885
|
-
args:
|
|
5886
|
-
env:
|
|
5887
|
-
cwd:
|
|
5888
|
-
stdinData:
|
|
5889
|
-
enableMcp:
|
|
5890
|
-
mcpApiBaseUrl:
|
|
5891
|
-
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()
|
|
5892
5988
|
})).mutation(({ input }) => {
|
|
5893
5989
|
const spawnId = aiSpawnManager.spawn(input);
|
|
5894
5990
|
return { spawnId };
|
|
5895
5991
|
}),
|
|
5896
5992
|
/** Stream stdout/stderr/exit chunks from offset. Reconnectable. */
|
|
5897
|
-
stream: protectedProcedure.input(
|
|
5898
|
-
spawnId:
|
|
5899
|
-
fromOffset:
|
|
5993
|
+
stream: protectedProcedure.input(z26.object({
|
|
5994
|
+
spawnId: z26.string().max(128),
|
|
5995
|
+
fromOffset: z26.number().int().min(0).default(0)
|
|
5900
5996
|
})).subscription(async function* ({ input }) {
|
|
5901
5997
|
try {
|
|
5902
5998
|
for await (const item of aiSpawnManager.stream(input.spawnId, input.fromOffset)) {
|
|
@@ -5910,39 +6006,39 @@ var aiRouter = router({
|
|
|
5910
6006
|
}
|
|
5911
6007
|
}),
|
|
5912
6008
|
/** Spawn an AI CLI process in a PTY (interactive mode). Returns spawnId. */
|
|
5913
|
-
spawnPty: protectedProcedure.input(
|
|
5914
|
-
cli:
|
|
5915
|
-
args:
|
|
5916
|
-
env:
|
|
5917
|
-
cwd:
|
|
5918
|
-
cols:
|
|
5919
|
-
rows:
|
|
5920
|
-
sessionId:
|
|
5921
|
-
enableMcp:
|
|
5922
|
-
mcpApiBaseUrl:
|
|
5923
|
-
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()
|
|
5924
6020
|
})).mutation(({ input }) => {
|
|
5925
6021
|
const spawnId = aiSpawnManager.spawnPty(input);
|
|
5926
6022
|
return { spawnId };
|
|
5927
6023
|
}),
|
|
5928
6024
|
/** Find a running PTY spawn by its logical sessionId (for re-attach). */
|
|
5929
|
-
findPtyBySession: protectedProcedure.input(
|
|
6025
|
+
findPtyBySession: protectedProcedure.input(z26.object({ sessionId: z26.string().max(128) })).query(({ input }) => {
|
|
5930
6026
|
return aiSpawnManager.findPtyBySessionId(input.sessionId);
|
|
5931
6027
|
}),
|
|
5932
6028
|
/** Write input to a PTY spawn (user keystrokes). */
|
|
5933
|
-
writePty: protectedProcedure.input(
|
|
5934
|
-
spawnId:
|
|
5935
|
-
data:
|
|
6029
|
+
writePty: protectedProcedure.input(z26.object({
|
|
6030
|
+
spawnId: z26.string().max(128),
|
|
6031
|
+
data: z26.string().max(1e6)
|
|
5936
6032
|
})).mutation(({ input }) => {
|
|
5937
6033
|
const ok = aiSpawnManager.writePty(input.spawnId, input.data);
|
|
5938
6034
|
return { ok };
|
|
5939
6035
|
}),
|
|
5940
6036
|
/** Write attached-context files for an AI session to a temp dir. Returns absolute paths. */
|
|
5941
|
-
writeContextFiles: protectedProcedure.input(
|
|
5942
|
-
sessionId:
|
|
5943
|
-
files:
|
|
5944
|
-
name:
|
|
5945
|
-
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)
|
|
5946
6042
|
})).min(1).max(MAX_CONTEXT_FILES)
|
|
5947
6043
|
}).refine(
|
|
5948
6044
|
(val) => val.files.reduce((sum, f) => sum + f.content.length, 0) <= MAX_CONTEXT_TOTAL_BYTES,
|
|
@@ -5957,25 +6053,25 @@ var aiRouter = router({
|
|
|
5957
6053
|
* which clipboard method (if any) succeeded — caller decides whether to send
|
|
5958
6054
|
* Ctrl+V (\x16) or inject `@<path>` into the PTY.
|
|
5959
6055
|
*/
|
|
5960
|
-
pasteImage: protectedProcedure.input(
|
|
5961
|
-
sessionId:
|
|
5962
|
-
mimeType:
|
|
5963
|
-
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)
|
|
5964
6060
|
})).mutation(async ({ input }) => {
|
|
5965
6061
|
const res = await savePastedImage(input.base64, input.mimeType, input.sessionId);
|
|
5966
6062
|
return res;
|
|
5967
6063
|
}),
|
|
5968
6064
|
/** Resize a PTY spawn. */
|
|
5969
|
-
resizePty: protectedProcedure.input(
|
|
5970
|
-
spawnId:
|
|
5971
|
-
cols:
|
|
5972
|
-
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)
|
|
5973
6069
|
})).mutation(({ input }) => {
|
|
5974
6070
|
const ok = aiSpawnManager.resizePty(input.spawnId, input.cols, input.rows);
|
|
5975
6071
|
return { ok };
|
|
5976
6072
|
}),
|
|
5977
6073
|
/** Kill a running AI spawn. */
|
|
5978
|
-
kill: protectedProcedure.input(
|
|
6074
|
+
kill: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
5979
6075
|
const killed = aiSpawnManager.kill(input.spawnId);
|
|
5980
6076
|
return { ok: killed };
|
|
5981
6077
|
}),
|
|
@@ -5984,23 +6080,23 @@ var aiRouter = router({
|
|
|
5984
6080
|
return aiSpawnManager.list();
|
|
5985
6081
|
}),
|
|
5986
6082
|
/** Acknowledge receipt of all data — agent can clean up after TTL. */
|
|
5987
|
-
ack: protectedProcedure.input(
|
|
6083
|
+
ack: protectedProcedure.input(z26.object({ spawnId: z26.string().max(128) })).mutation(({ input }) => {
|
|
5988
6084
|
const acked = aiSpawnManager.ack(input.spawnId);
|
|
5989
6085
|
return { ok: acked };
|
|
5990
6086
|
}),
|
|
5991
6087
|
/** Forward a JSON-RPC request to the local codex app-server. */
|
|
5992
|
-
codexRequest: protectedProcedure.input(
|
|
5993
|
-
method:
|
|
5994
|
-
params:
|
|
5995
|
-
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()
|
|
5996
6092
|
})).mutation(async ({ input }) => {
|
|
5997
6093
|
await codexAppServerManager.ensureConnected(input.env);
|
|
5998
6094
|
const result = await codexAppServerManager.sendRequest(input.method, input.params);
|
|
5999
6095
|
return { result };
|
|
6000
6096
|
}),
|
|
6001
6097
|
/** Stream notifications from the codex app-server. Optionally filter by threadId. */
|
|
6002
|
-
codexNotifications: protectedProcedure.input(
|
|
6003
|
-
threadId:
|
|
6098
|
+
codexNotifications: protectedProcedure.input(z26.object({
|
|
6099
|
+
threadId: z26.string().max(256).optional()
|
|
6004
6100
|
}).default({})).subscription(async function* ({ input, signal }) {
|
|
6005
6101
|
await codexAppServerManager.ensureConnected();
|
|
6006
6102
|
const queue = [];
|
|
@@ -6037,13 +6133,13 @@ var aiRouter = router({
|
|
|
6037
6133
|
});
|
|
6038
6134
|
|
|
6039
6135
|
// src/trpc/routers/wiki.ts
|
|
6040
|
-
import { z as
|
|
6136
|
+
import { z as z27 } from "zod";
|
|
6041
6137
|
import { TRPCError as TRPCError6 } from "@trpc/server";
|
|
6042
6138
|
import { readFile as readFile2, readdir, stat as stat2, realpath, writeFile as writeFile6, mkdir as mkdir6, rename as rename2, rm } from "fs/promises";
|
|
6043
6139
|
import { dirname as dirname2 } from "path";
|
|
6044
6140
|
import { resolve as resolvePath3, join as join5, relative, sep } from "path";
|
|
6045
|
-
var CWD_SCHEMA2 =
|
|
6046
|
-
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("/"), {
|
|
6047
6143
|
message: "Path must be a relative path without traversal"
|
|
6048
6144
|
});
|
|
6049
6145
|
var MAX_FILES = 500;
|
|
@@ -6063,9 +6159,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
|
6063
6159
|
"target",
|
|
6064
6160
|
"out"
|
|
6065
6161
|
]);
|
|
6066
|
-
var RepoEntrySchema =
|
|
6067
|
-
|
|
6068
|
-
|
|
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) })
|
|
6069
6165
|
]));
|
|
6070
6166
|
async function walkMarkdown(root, dir, depth, counter) {
|
|
6071
6167
|
if (depth > MAX_DEPTH || counter.n >= MAX_FILES) return [];
|
|
@@ -6135,13 +6231,13 @@ async function resolveRoot(cwd) {
|
|
|
6135
6231
|
}
|
|
6136
6232
|
}
|
|
6137
6233
|
var wikiRouter = router({
|
|
6138
|
-
listRepoMarkdown: protectedProcedure.input(
|
|
6234
|
+
listRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).query(async ({ input }) => {
|
|
6139
6235
|
const root = await resolveRoot(input.cwd);
|
|
6140
6236
|
const counter = { n: 0 };
|
|
6141
6237
|
const entries = await walkMarkdown(root, root, 0, counter);
|
|
6142
6238
|
return { root, entries, truncated: counter.n >= MAX_FILES };
|
|
6143
6239
|
}),
|
|
6144
|
-
readRepoMarkdown: protectedProcedure.input(
|
|
6240
|
+
readRepoMarkdown: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).query(async ({ input }) => {
|
|
6145
6241
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6146
6242
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md sont autoris\xE9s" });
|
|
6147
6243
|
}
|
|
@@ -6167,10 +6263,10 @@ var wikiRouter = router({
|
|
|
6167
6263
|
const content = await readFile2(realTarget, "utf-8");
|
|
6168
6264
|
return { path: input.path, content };
|
|
6169
6265
|
}),
|
|
6170
|
-
writeMarkdown: protectedProcedure.input(
|
|
6266
|
+
writeMarkdown: protectedProcedure.input(z27.object({
|
|
6171
6267
|
cwd: CWD_SCHEMA2,
|
|
6172
6268
|
path: REL_PATH_SCHEMA,
|
|
6173
|
-
content:
|
|
6269
|
+
content: z27.string().max(5e6)
|
|
6174
6270
|
})).mutation(async ({ input }) => {
|
|
6175
6271
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6176
6272
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
@@ -6181,7 +6277,7 @@ var wikiRouter = router({
|
|
|
6181
6277
|
await writeFile6(target, input.content, "utf-8");
|
|
6182
6278
|
return { path: input.path, ok: true };
|
|
6183
6279
|
}),
|
|
6184
|
-
createFile: protectedProcedure.input(
|
|
6280
|
+
createFile: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6185
6281
|
if (!/\.(md|markdown)$/i.test(input.path)) {
|
|
6186
6282
|
throw new TRPCError6({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
|
|
6187
6283
|
}
|
|
@@ -6197,13 +6293,13 @@ var wikiRouter = router({
|
|
|
6197
6293
|
await writeFile6(target, "", "utf-8");
|
|
6198
6294
|
return { path: input.path, ok: true };
|
|
6199
6295
|
}),
|
|
6200
|
-
createDir: protectedProcedure.input(
|
|
6296
|
+
createDir: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6201
6297
|
const root = await resolveRoot(input.cwd);
|
|
6202
6298
|
const target = await resolveSafePath(root, input.path, false);
|
|
6203
6299
|
await mkdir6(target, { recursive: true });
|
|
6204
6300
|
return { path: input.path, ok: true };
|
|
6205
6301
|
}),
|
|
6206
|
-
renamePath: protectedProcedure.input(
|
|
6302
|
+
renamePath: protectedProcedure.input(z27.object({
|
|
6207
6303
|
cwd: CWD_SCHEMA2,
|
|
6208
6304
|
fromPath: REL_PATH_SCHEMA,
|
|
6209
6305
|
toPath: REL_PATH_SCHEMA
|
|
@@ -6221,14 +6317,14 @@ var wikiRouter = router({
|
|
|
6221
6317
|
await rename2(from, to);
|
|
6222
6318
|
return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
|
|
6223
6319
|
}),
|
|
6224
|
-
ensureRoot: protectedProcedure.input(
|
|
6320
|
+
ensureRoot: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2 })).mutation(async ({ input }) => {
|
|
6225
6321
|
const expanded = expandEnvVar(input.cwd);
|
|
6226
6322
|
const abs = resolvePath3(expanded);
|
|
6227
6323
|
await mkdir6(abs, { recursive: true });
|
|
6228
6324
|
const root = await realpath(abs);
|
|
6229
6325
|
return { root, ok: true };
|
|
6230
6326
|
}),
|
|
6231
|
-
deletePath: protectedProcedure.input(
|
|
6327
|
+
deletePath: protectedProcedure.input(z27.object({ cwd: CWD_SCHEMA2, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
|
|
6232
6328
|
const root = await resolveRoot(input.cwd);
|
|
6233
6329
|
const target = await resolveSafePath(root, input.path, true);
|
|
6234
6330
|
if (target === root) {
|